12009-06-15  Gavin Barraclough  <barraclough@apple.com>
2
3        Rubber Stamped by Sam Weinig.
4
5        Rename PatchBuffer to LinkBuffer.  Previously our terminology has been a little
6        mixed up, but we have decided to fix on refering to the process that takes place
7        at the end of code generation as 'linking', and on any modifications that take
8        place later (and once the code has potentially already been executed) as 'patching'.
9
10        However, the term 'PatchBuffer' is already in use, and needs to be repurposed.
11
12        To try to minimize confusion, we're going to switch the terminology over in stages,
13        so for now we'll refer to later modifications as 'repatching'.  This means that the
14        new 'PatchBuffer' has been introduced with the name 'RepatchBuffer' instead.
15
16        This patch renames the old 'PatchBuffer' to 'LinkBuffer'.  We'll leave ToT in this
17        state for a week or so to try to avoid to much overlap of the meaning of the term
18        'PatchBuffer', then will come back and rename 'RepatchBuffer'.
19
20        * assembler/ARMv7Assembler.h:
21        * assembler/AbstractMacroAssembler.h:
22        (JSC::AbstractMacroAssembler::LinkBuffer::LinkBuffer):
23        (JSC::AbstractMacroAssembler::LinkBuffer::~LinkBuffer):
24        * jit/JIT.cpp:
25        (JSC::JIT::privateCompile):
26        * jit/JITPropertyAccess.cpp:
27        (JSC::JIT::privateCompilePutByIdTransition):
28        (JSC::JIT::privateCompilePatchGetArrayLength):
29        (JSC::JIT::privateCompileGetByIdProto):
30        (JSC::JIT::privateCompileGetByIdSelfList):
31        (JSC::JIT::privateCompileGetByIdProtoList):
32        (JSC::JIT::privateCompileGetByIdChainList):
33        (JSC::JIT::privateCompileGetByIdChain):
34        * yarr/RegexJIT.cpp:
35        (JSC::Yarr::RegexGenerator::compile):
36
372009-06-15  Gavin Barraclough  <barraclough@apple.com>
38
39        Reviewed by Sam Weinig.
40
41        Having moved most of their functionality into the RepatchBuffer class,
42        we can simplify the CodeLocation* classes.
43
44        The CodeLocation* classes are currently a tangle of templatey and friendly
45        badness, burried in the middle of AbstractMacroAssembler.  Having moved
46        the ability to repatch out into RepatchBufer they are now do-nothing wrappers
47        on CodePtr (MacroAssemblerCodePtr), that only exist to provide type-safety.
48
49        Simplify the code, and move them off into their own header.
50
51        * JavaScriptCore.xcodeproj/project.pbxproj:
52        * assembler/AbstractMacroAssembler.h:
53        (JSC::AbstractMacroAssembler::PatchBuffer::patch):
54        * assembler/CodeLocation.h: Copied from assembler/AbstractMacroAssembler.h.
55        (JSC::CodeLocationCommon::CodeLocationCommon):
56        (JSC::CodeLocationInstruction::CodeLocationInstruction):
57        (JSC::CodeLocationLabel::CodeLocationLabel):
58        (JSC::CodeLocationJump::CodeLocationJump):
59        (JSC::CodeLocationCall::CodeLocationCall):
60        (JSC::CodeLocationNearCall::CodeLocationNearCall):
61        (JSC::CodeLocationDataLabel32::CodeLocationDataLabel32):
62        (JSC::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr):
63        (JSC::CodeLocationCommon::instructionAtOffset):
64        (JSC::CodeLocationCommon::labelAtOffset):
65        (JSC::CodeLocationCommon::jumpAtOffset):
66        (JSC::CodeLocationCommon::callAtOffset):
67        (JSC::CodeLocationCommon::nearCallAtOffset):
68        (JSC::CodeLocationCommon::dataLabelPtrAtOffset):
69        (JSC::CodeLocationCommon::dataLabel32AtOffset):
70        * assembler/MacroAssemblerCodeRef.h:
71        (JSC::MacroAssemblerCodePtr::operator!):
72        * bytecode/CodeBlock.h:
73        (JSC::getStructureStubInfoReturnLocation):
74        (JSC::getCallLinkInfoReturnLocation):
75        (JSC::getMethodCallLinkInfoReturnLocation):
76        * bytecode/Instruction.h:
77        * bytecode/JumpTable.h:
78        (JSC::StringJumpTable::ctiForValue):
79        (JSC::SimpleJumpTable::ctiForValue):
80        * bytecode/StructureStubInfo.h:
81        * bytecompiler/BytecodeGenerator.cpp:
82        (JSC::BytecodeGenerator::emitCatch):
83        * jit/JIT.cpp:
84        (JSC::JIT::privateCompile):
85        * jit/JITStubs.cpp:
86        (JSC::JITStubs::DEFINE_STUB_FUNCTION):
87        (JSC::JITStubs::getPolymorphicAccessStructureListSlot):
88
892009-06-15  Gavin Barraclough  <barraclough@apple.com>
90
91        Reviewed by Sam Weinig.
92
93        Having introduced the RepatchBuffer, ProcessorReturnAddress is now a do-nothing
94        wrapper around ReturnAddressPtr.  Remove it.  In tugging on this piece of string
95        it made sense to roll out the use of ReturnAddressPtr a little further into
96        JITStubs (which had always been the intention).
97
98        No performance impact.
99
100        * assembler/AbstractMacroAssembler.h:
101        (JSC::AbstractMacroAssembler::RepatchBuffer::relinkCallerToTrampoline):
102        (JSC::AbstractMacroAssembler::RepatchBuffer::relinkCallerToFunction):
103        (JSC::AbstractMacroAssembler::RepatchBuffer::relinkNearCallerToTrampoline):
104        * assembler/MacroAssemblerCodeRef.h:
105        (JSC::ReturnAddressPtr::ReturnAddressPtr):
106        * bytecode/CodeBlock.h:
107        (JSC::CodeBlock::getStubInfo):
108        (JSC::CodeBlock::getCallLinkInfo):
109        (JSC::CodeBlock::getMethodCallLinkInfo):
110        (JSC::CodeBlock::getBytecodeIndex):
111        * interpreter/Interpreter.cpp:
112        (JSC::bytecodeOffsetForPC):
113        * jit/JIT.cpp:
114        (JSC::ctiPatchNearCallByReturnAddress):
115        (JSC::ctiPatchCallByReturnAddress):
116        * jit/JIT.h:
117        (JSC::JIT::compileGetByIdProto):
118        (JSC::JIT::compileGetByIdChain):
119        (JSC::JIT::compilePutByIdTransition):
120        (JSC::JIT::compilePatchGetArrayLength):
121        * jit/JITPropertyAccess.cpp:
122        (JSC::JIT::privateCompilePutByIdTransition):
123        (JSC::JIT::patchGetByIdSelf):
124        (JSC::JIT::patchPutByIdReplace):
125        (JSC::JIT::privateCompilePatchGetArrayLength):
126        (JSC::JIT::privateCompileGetByIdProto):
127        (JSC::JIT::privateCompileGetByIdChain):
128        * jit/JITStubs.cpp:
129        (JSC::JITThunks::tryCachePutByID):
130        (JSC::JITThunks::tryCacheGetByID):
131        (JSC::StackHack::StackHack):
132        (JSC::returnToThrowTrampoline):
133        (JSC::throwStackOverflowError):
134        (JSC::JITStubs::DEFINE_STUB_FUNCTION):
135        * jit/JITStubs.h:
136        (JSC::):
137        (JSC::JITStackFrame::returnAddressSlot):
138        * runtime/JSGlobalData.h:
139
1402009-06-15  Simon Fraser  <simon.fraser@apple.com>
141
142        Reviewed by Mark Rowe.
143
144        <rdar://problem/6974857>
145
146        Define ENABLE_3D_RENDERING when building on 10.6, and move ENABLE_3D_RENDERING
147        switch from config.h to wtf/Platform.h.
148
149        * Configurations/FeatureDefines.xcconfig:
150        * wtf/Platform.h:
151
1522009-06-15  Gavin Barraclough  <barraclough@apple.com>
153
154        Reviewed by Oliver Hunt.
155
156        Move repatching methods into a set of methods on a class.  This will allow us to
157        coallesce memory reprotection calls.  Really, we want this class to be called
158        PatchBuffer, we want the class PatchBuffer to be called LinkBuffer, we want both
159        to be memblers of MacroAssembler rather then AbstractMacroAssembler, we don't
160        want the CodeLocationFoo types anymore (they are now only really there to provide
161        type safety, and that is completely undermined by the way we use offsets).  Then
162        the link & patch buffers should delegate the actual patching calls to the
163        architecture-specific layer of the MacroAssembler.  Landing all these changes as a
164        sequence of patches.
165
166        No performance impact.
167
168        * assembler/AbstractMacroAssembler.h:
169        (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall):
170        (JSC::AbstractMacroAssembler::CodeLocationNearCall::CodeLocationNearCall):
171        (JSC::AbstractMacroAssembler::CodeLocationNearCall::calleeReturnAddressValue):
172        (JSC::AbstractMacroAssembler::RepatchBuffer::RepatchBuffer):
173        (JSC::AbstractMacroAssembler::RepatchBuffer::relink):
174        (JSC::AbstractMacroAssembler::RepatchBuffer::repatch):
175        (JSC::AbstractMacroAssembler::RepatchBuffer::relinkCallerToTrampoline):
176        (JSC::AbstractMacroAssembler::RepatchBuffer::relinkCallerToFunction):
177        (JSC::AbstractMacroAssembler::RepatchBuffer::relinkNearCallerToTrampoline):
178        (JSC::AbstractMacroAssembler::RepatchBuffer::repatchLoadPtrToLEA):
179        * jit/JIT.cpp:
180        (JSC::ctiPatchNearCallByReturnAddress):
181        (JSC::ctiPatchCallByReturnAddress):
182        (JSC::JIT::unlinkCall):
183        (JSC::JIT::linkCall):
184        * jit/JITPropertyAccess.cpp:
185        (JSC::JIT::privateCompilePutByIdTransition):
186        (JSC::JIT::patchGetByIdSelf):
187        (JSC::JIT::patchMethodCallProto):
188        (JSC::JIT::patchPutByIdReplace):
189        (JSC::JIT::privateCompilePatchGetArrayLength):
190        (JSC::JIT::privateCompileGetByIdProto):
191        (JSC::JIT::privateCompileGetByIdSelfList):
192        (JSC::JIT::privateCompileGetByIdProtoList):
193        (JSC::JIT::privateCompileGetByIdChainList):
194        (JSC::JIT::privateCompileGetByIdChain):
195
1962009-06-15  Gavin Barraclough  <barraclough@apple.com>
197
198        Reviewed by Geoff Hunt & Oliver Garen.
199
200        We are currently generating two copies of the slow path for op_call for no reason.  Stop that.
201
202        Originally op_call used two slow paths since the first set up the pointer to the CallLinkInfo
203        for use when linking.  However this is now looked up using the return address (as we do for
204        property accesses) so the two paths are now identical.
205
206        No performance impact, reduces memory footprint.
207
208        * bytecode/CodeBlock.h:
209        * jit/JIT.cpp:
210        (JSC::JIT::privateCompile):
211        (JSC::JIT::linkCall):
212        * jit/JIT.h:
213        * jit/JITCall.cpp:
214        (JSC::JIT::compileOpCallSlowCase):
215        * jit/JITStubs.cpp:
216        (JSC::JITStubs::DEFINE_STUB_FUNCTION):
217
2182009-06-12  Dave Hyatt  <hyatt@apple.com>
219
220        Reviewed by Anders Carlsson.
221
222        https://bugs.webkit.org/show_bug.cgi?id=26373
223
224        Add a new class to Threading in wtf called ReadWriteLock that handles single writer/multiple reader locking.
225        Provide a pthreads-only implementation of the lock for now, as this class is only going to be used
226        on Snow Leopard at first.
227
228        * wtf/Threading.h:
229        (WTF::ReadWriteLock::impl):
230        * wtf/ThreadingPthreads.cpp:
231        (WTF::ReadWriteLock::ReadWriteLock):
232        (WTF::ReadWriteLock::~ReadWriteLock):
233        (WTF::ReadWriteLock::readLock):
234        (WTF::ReadWriteLock::tryReadLock):
235        (WTF::ReadWriteLock::writeLock):
236        (WTF::ReadWriteLock::tryWriteLock):
237        (WTF::ReadWriteLock::unlock):
238
2392009-06-12  Oliver Hunt  <oliver@apple.com>
240
241        Reviewed by Geoff Garen.
242
243        Make LiteralParser non-recursive
244
245        Convert LiteralParser from using a simple recursive descent parser
246        to a hand rolled PDA.  Relatively simple conversion, but required
247        modifications to MarkedArgumentBuffer to make it more suitable as
248        a generic marked vector.   I'll refactor and rename MarkedArgumentBuffer
249        in future as there are many other cases where it will be useful to
250        have such a class.
251
252        * runtime/ArgList.h:
253        (JSC::MarkedArgumentBuffer::MarkedArgumentBuffer):
254        (JSC::MarkedArgumentBuffer::append):
255        (JSC::MarkedArgumentBuffer::removeLast):
256        (JSC::MarkedArgumentBuffer::last):
257        * runtime/LiteralParser.cpp:
258        (JSC::LiteralParser::parse):
259        * runtime/LiteralParser.h:
260        (JSC::LiteralParser::LiteralParser):
261        (JSC::LiteralParser::tryLiteralParse):
262        (JSC::LiteralParser::):
263
2642009-06-12  David Levin  <levin@chromium.org>
265
266        Reviewed by NOBODY (build fix for windows).
267
268        Adjust the exports for JSC on Windows like what was done for OSX in
269        the previous commit.
270
271        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
272        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
273
2742009-06-12  David Levin  <levin@chromium.org>
275
276        Reviewed by Darin Adler.
277
278        UString shouldn't create sharedBuffer for SmallStrings.
279        https://bugs.webkit.org/show_bug.cgi?id=26360
280
281        The methods changed are not used by JSC, so there is no JS perf impact.  However,
282        there is a potential DOM perf impact, so I re-ran several of the tests that
283        I ran previously and ensured that the perf stay the same which caused me to
284        adjust the minLengthToShare.
285
286        * JavaScriptCore.exp:
287        * runtime/UString.cpp:
288        (JSC::UString::Rep::sharedBuffer):
289            Determines if the buffer being shared is big enough before doing so.
290            Previously, BaseString::sharedBuffer was called but it would only know
291            the length of the base string (BaseString::len) which may not be the same
292            as the string being shared (Rep::len).
293        (JSC::UString::BaseString::sharedBuffer):
294            This is now only be used by Rep::sharedBuffer. which does the length check.
295        * runtime/UString.h:
296
2972009-06-12  Dimitri Glazkov  <dglazkov@chromium.org>
298
299        Reviewed by Eric Seidel.
300
301        https://bugs.webkit.org/show_bug.cgi?id=26191
302        Remove xmath include in MathExtras.h, because it is not needed and also
303        breaks VS2008 builds with TR1 turned on.
304
305        * wtf/MathExtras.h: Removed xmath include.
306
3072009-06-12  Peter Kasting  <pkasting@google.com>
308
309        Reviewed by Eric Seidel.
310
311        * ChangeLog-2007-10-14: Change pseudonym "Don Gibson" to me (was used while Google Chrome was not public); update my email address.
312
3132009-06-12  Kevin Ollivier  <kevino@theolliviers.com>
314
315        wx build fix. Adding JSONObject.cpp to the build.
316
317        * JavaScriptCoreSources.bkl:
318
3192009-06-12  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
320
321        Reviewed by Jan Michael Alonzo.
322
323        [Qt] Fix build break
324        https://bugs.webkit.org/show_bug.cgi?id=26340
325
326        * JavaScriptCore.pri: Add JSONObject.cpp to LUT files.
327
3282009-06-11  Oliver Hunt  <oliver@apple.com>
329
330        Reviewed by NOBODY (build fix).
331
332        Lower stringify recursion limit to deal with small windows stack.
333
334        * JavaScriptCore.xcodeproj/project.pbxproj:
335        * runtime/JSONObject.cpp:
336        (JSC::Stringifier::):
337
3382009-06-11  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
339
340        Reviewed by Holger Freyther.
341
342        Fix compilation warnings
343        <https://bugs.webkit.org/show_bug.cgi?id=26015>
344
345        * wtf/ThreadingNone.cpp:
346        (WTF::ThreadCondition::wait): Fix compilation warning.
347        (WTF::ThreadCondition::timedWait): Ditto.
348
3492009-06-10  Brent Fulgham  <bfulgham@webkit.org>
350
351        Build fix for Windows target.
352
353        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
354          Correct missing </File> tag after @r44550 that prevents the
355          project from being loaded in the Visual Studio IDE.
356
3572009-06-09  Gavin Barraclough  <barraclough@apple.com>
358
359        Rubber Stamped by Mark Rowe.
360
361        Tidy up a couple of comments.
362
363        * assembler/ARMv7Assembler.h:
364            Fix date in copyright, neaten up a couple of comments.
365        * assembler/MacroAssemblerARMv7.h:
366            Fix date in copyright.
367
3682009-06-07  Oliver Hunt  <oliver@apple.com>
369
370        Reviewed by Sam Weinig.
371
372        Bug 26249: Support JSON.stringify
373        <https://bugs.webkit.org/show_bug.cgi?id=26249>
374        
375        Implement JSON.stringify.  This patch handles all the semantics of the ES5
376        JSON.stringify function, including replacer functions and arrays and both
377        string and numeric gap arguments.
378        
379        Currently uses a clamped recursive algorithm basically identical to the spec
380        description but with a few minor tweaks for performance and corrected semantics
381        discussed in the es-discuss mailing list.
382
383        * DerivedSources.make:
384        * GNUmakefile.am:
385        * JavaScriptCore.pri:
386        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
387        * JavaScriptCore.xcodeproj/project.pbxproj:
388        * interpreter/CallFrame.h:
389        (JSC::ExecState::jsonTable):
390        * runtime/CommonIdentifiers.h:
391           add toJSON to the list of common identifiers
392
393        * runtime/JSGlobalData.cpp:
394        (JSC::JSGlobalData::JSGlobalData):
395        (JSC::JSGlobalData::~JSGlobalData):
396        * runtime/JSGlobalData.h:
397        * runtime/JSGlobalObject.cpp:
398        (JSC::JSGlobalObject::reset):
399            Add support for the JSON object lookup table
400
401        * runtime/JSONObject.cpp: Added.
402        (JSC::):
403        (JSC::JSONObject::getOwnPropertySlot):
404        (JSC::Stringifier::):
405        (JSC::Stringifier::Stringifier):
406        (JSC::Stringifier::stringify):
407        (JSC::Stringifier::appendString):
408
409        (JSC::Stringifier::StringKeyGenerator::StringKeyGenerator):
410        (JSC::Stringifier::StringKeyGenerator::getKey):
411        (JSC::Stringifier::IntKeyGenerator::IntKeyGenerator):
412        (JSC::Stringifier::IntKeyGenerator::getKey):
413            These KeyGenerator classes are used to abstract away the lazy evaluation of keys for
414            toJSON and replacer functions.
415
416        (JSC::Stringifier::toJSONValue):
417        (JSC::Stringifier::stringifyArray):
418        (JSC::Stringifier::stringifyObject):
419        (JSC::JSONProtoFuncStringify):
420        * runtime/JSONObject.h: Added.
421        (JSC::JSONObject:::JSObject):
422        (JSC::JSONObject::classInfo):
423        (JSC::JSONObject::createStructure):
424
4252009-06-09  Gavin Barraclough  <barraclough@apple.com>
426
427        Reviewed by Geoff Garen.
428
429        Enable JIT_OPTIMIZE_CALL & JIT_OPTIMIZE_METHOD_CALLS on ARMv7 platforms.
430
431        These optimizations function correctly with no further changes.
432
433        * wtf/Platform.h:
434            Change to enable JIT_OPTIMIZE_CALL & JIT_OPTIMIZE_METHOD_CALLS.
435
4362009-06-09  Gavin Barraclough  <barraclough@apple.com>
437
438        Not Reviewed, build fix.
439
440        * assembler/MacroAssemblerARMv7.h:
441
4422009-06-09  Gavin Barraclough  <barraclough@apple.com>
443
444        Reviewed by Geoff Garen.
445
446        Enable JIT_OPTIMIZE_ARITHMETIC on ARMv7 platforms.
447
448        Temporarily split support for 'branchTruncateDoubleToInt32' onto its own switch
449        ('supportsFloatingPointTruncate').  See comment in MacroAssemblerARMv7, we need
450        to work out wherther we are going to be able to support the current interface on
451        all platforms, or whether this should be refactored.
452
453        * assembler/MacroAssemblerARMv7.h:
454        (JSC::MacroAssemblerARMv7::supportsFloatingPoint):
455            Add implementation of supportsFloatingPointTruncate (returns true).
456        (JSC::MacroAssemblerARMv7::supportsFloatingPointTruncate):
457            Add implementation of supportsFloatingPointTruncate (returns false).
458        (JSC::MacroAssemblerARMv7::loadDouble):
459        (JSC::MacroAssemblerARMv7::storeDouble):
460        (JSC::MacroAssemblerARMv7::addDouble):
461        (JSC::MacroAssemblerARMv7::subDouble):
462        (JSC::MacroAssemblerARMv7::mulDouble):
463        (JSC::MacroAssemblerARMv7::convertInt32ToDouble):
464        (JSC::MacroAssemblerARMv7::branchDouble):
465            Implement FP code genertion operations.
466        * assembler/MacroAssemblerX86.h:
467        (JSC::MacroAssemblerX86::supportsFloatingPointTruncate):
468            Add implementation of supportsFloatingPointTruncate (returns true).
469        * assembler/MacroAssemblerX86_64.h:
470        (JSC::MacroAssemblerX86_64::supportsFloatingPointTruncate):
471            Add implementation of supportsFloatingPointTruncate (returns true).
472        * jit/JITArithmetic.cpp:
473        (JSC::JIT::emit_op_rshift):
474            Changed to call supportsFloatingPointTruncate().
475        (JSC::JIT::emitSlow_op_rshift):
476            Changed to call supportsFloatingPointTruncate().
477        * wtf/Platform.h:
478            Change to enable JIT_OPTIMIZE_ARITHMETIC.
479
4802009-06-09  Gavin Barraclough  <barraclough@apple.com>
481
482        Reviewed by Mark Rowe & Geoff Garen.
483
484        Enable JIT_OPTIMIZE_PROPERTY_ACCESS on ARMv7 platforms.
485
486        Firm up interface for planting load intructions that will be repatched by
487        repatchLoadPtrToLEA().  This method should now no longer be applied to just
488        any loadPtr instruction.
489
490        * assembler/MacroAssemblerARMv7.h:
491        (JSC::MacroAssemblerARMv7::loadPtrWithPatchToLEA):
492            Implement loadPtrWithPatchToLEA interface (plants a load with a fixed width address).
493        (JSC::MacroAssemblerARMv7::move):
494        (JSC::MacroAssemblerARMv7::nearCall):
495        (JSC::MacroAssemblerARMv7::call):
496        (JSC::MacroAssemblerARMv7::moveWithPatch):
497        (JSC::MacroAssemblerARMv7::tailRecursiveCall):
498            Switch to use common method 'moveFixedWidthEncoding()' to perform fixed width (often patchable) loads.
499        (JSC::MacroAssemblerARMv7::moveFixedWidthEncoding):
500            Move an immediate to a register, always plants movT3/movt instruction pair.
501        * assembler/MacroAssemblerX86.h:
502        (JSC::MacroAssemblerX86::loadPtrWithPatchToLEA):
503            Implement loadPtrWithPatchToLEA interface (just a regular 32-bit load on x86).
504        * assembler/MacroAssemblerX86_64.h:
505        (JSC::MacroAssemblerX86_64::loadPtrWithPatchToLEA):
506            Implement loadPtrWithPatchToLEA interface (just a regular 64-bit load on x86_64).
507        * jit/JITPropertyAccess.cpp:
508        (JSC::JIT::compileGetByIdHotPath):
509        (JSC::JIT::emit_op_put_by_id):
510        * wtf/Platform.h:
511            Change to enable JIT_OPTIMIZE_PROPERTY_ACCESS.
512
5132009-06-08  Gavin Barraclough  <barraclough@apple.com>
514
515        Reviewed by Geoff Garen.
516
517        Enable JS language JIT for ARM thumb2 platforms.  Add ARMv7 specific
518        asm & constants, add appropriate configuration switches to Platform.h.
519
520        Landing this disabled until jump linking is completed (see YARR jit patch).
521
522        * assembler/MacroAssemblerARMv7.h:
523        (JSC::MacroAssemblerARMv7::load32):
524            Fix: should load pointer with ImmPtr not Imm32.
525        (JSC::MacroAssemblerARMv7::store32):
526            Fix: should load pointer with ImmPtr not Imm32.
527        (JSC::MacroAssemblerARMv7::move):
528            Fix: When moving an Imm32 that is actually a pointer, should call movT3()
529            not mov(), to ensure code generation is repeatable (for exception handling).
530        * jit/JIT.cpp:
531        (JSC::JIT::privateCompileCTIMachineTrampolines):
532            Disable JIT_OPTIMIZE_NATIVE_CALL specific code generation if the optimization is not enabled.
533        * jit/JIT.h:
534            Add ARMv7 specific values of constants & register names.
535        * jit/JITInlineMethods.h:
536        (JSC::JIT::preverveReturnAddressAfterCall):
537        (JSC::JIT::restoreReturnAddressBeforeReturn):
538        (JSC::JIT::restoreArgumentReferenceForTrampoline):
539            Implement for ARMv7 (move value to/from lr).
540        * jit/JITStubs.cpp:
541            Add JIT entry/thow trampolines, add macro to add thunk wrapper around stub routines.
542        * jit/JITStubs.h:
543        (JSC::JITStackFrame::returnAddressSlot):
544            Add ARMv7 stack frame object.
545        * wtf/Platform.h:
546            Add changes necessary to allow JIT to build on this platform, disabled.
547
5482009-06-08  Mark Rowe  <mrowe@apple.com>
549
550        Speculative GTK build fix.
551
552        * wtf/DateMath.cpp:
553
5542009-06-08  Gavin Barraclough  <barraclough@apple.com>
555
556        Reviewed by Mark Rowe.
557
558        Previous patch caused a regression.
559
560        Restructure so no new (empty, inline) function calls are added on x86.
561
562        * jit/ExecutableAllocator.h:
563        (JSC::ExecutableAllocator::makeWritable):
564        (JSC::ExecutableAllocator::makeExecutable):
565        (JSC::ExecutableAllocator::reprotectRegion):
566        (JSC::ExecutableAllocator::cacheFlush):
567
5682009-06-08  Dimitri Glazkov  <dglazkov@chromium.org>
569
570        Unreviewed, GTK build fix (thanks, bdash).
571
572        * GNUmakefile.am: Moved DateMath with all other wtf kin.
573
5742009-06-08  Gavin Barraclough  <barraclough@apple.com>
575
576        Reviewed by Geoff Garen.
577
578        Add (incomplete) support to YARR for running with the jit enabled
579        on Arm thumb2 platforms.  Adds new Assembler/MacroAssembler classes,
580        along with cache flushing support, tweaks to MacroAssemblerCodePtr
581        to support decorated thumb code pointers, and new enter/exit code
582        to YARR jit for the platform.
583
584        Support for this platform is still under development - the assembler
585        currrently only supports planting and linking jumps with a 16Mb range.
586        As such, initially commiting in a disabled state.
587
588        * JavaScriptCore.xcodeproj/project.pbxproj:
589            Add new assembler files.
590        * assembler/ARMv7Assembler.h: Added.
591            Add new Assembler.
592        * assembler/AbstractMacroAssembler.h:
593            Tweaks to ensure sizes of pointer values planted in JIT code do not change.
594        * assembler/MacroAssembler.h:
595            On ARMv7 platforms use MacroAssemblerARMv7.
596        * assembler/MacroAssemblerARMv7.h: Added.
597            Add new MacroAssembler.
598        * assembler/MacroAssemblerCodeRef.h:
599        (JSC::FunctionPtr::FunctionPtr):
600            Add better ASSERT.
601        (JSC::ReturnAddressPtr::ReturnAddressPtr):
602            Add better ASSERT.
603        (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
604            On ARMv7, MacroAssemblerCodePtr's mush be 'decorated' with a low bit set,
605            to indicate to the processor that the code is thumb code, not traditional
606            32-bit ARM.
607        (JSC::MacroAssemblerCodePtr::dataLocation):
608            On ARMv7, decoration must be removed.
609        * jit/ExecutableAllocator.h:
610        (JSC::ExecutableAllocator::makeWritable):
611            Reformatted, no change.
612        (JSC::ExecutableAllocator::makeExecutable):
613            When marking code executable also cache flush it, where necessary.
614        (JSC::ExecutableAllocator::MakeWritable::MakeWritable):
615            Only use the null implementation of this class if both !ASSEMBLER_WX_EXCLUSIVE
616            and running on x86(_64) - on other platforms we may also need ensure that
617            makeExecutable is called at the end to flush caches.
618        (JSC::ExecutableAllocator::reprotectRegion):
619            Reformatted, no change.
620        (JSC::ExecutableAllocator::cacheFlush):
621            Cache flush a region of memory, or platforms where this is necessary.
622        * wtf/Platform.h:
623            Add changes necessary to allow YARR jit to build on this platform, disabled.
624        * yarr/RegexJIT.cpp:
625        (JSC::Yarr::RegexGenerator::generateEnter):
626        (JSC::Yarr::RegexGenerator::generateReturn):
627            Add support to these methods for ARMv7.
628
6292009-06-08  Dimitri Glazkov  <dglazkov@chromium.org>
630
631        Unreviewed, fix my previous fix.
632
633        * runtime/DateInstance.cpp:
634        (JSC::DateInstance::msToGregorianDateTime): Use WTF namespace qualifier to
635            disambiguate func signatures.
636
6372009-06-08  Mark Rowe  <mrowe@apple.com>
638
639        Attempt to fix the Tiger build.
640
641        * wtf/Platform.h: Only test the value of the macro once we know it is defined.
642
6432009-06-08  Dimitri Glazkov  <dglazkov@chromium.org>
644
645        Unreviewed, another Windows build fix.
646
647        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
648        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
649
6502009-06-08  Dimitri Glazkov  <dglazkov@chromium.org>
651
652        Unreviewed, projectile-fixing Windows build.
653
654        * runtime/DateConversion.cpp: Added StringExtras include.
655        * wtf/DateMath.cpp: Replaced math with algorithm include (looking for std::min def for Windows).
656
6572009-06-08  Dimitri Glazkov  <dglazkov@chromium.org>
658
659        Unreviewed, Windows build fix.
660
661        * runtime/DateConstructor.cpp: Changed to use WTF namespace.
662        * runtime/DateConversion.cpp: Added UString include.
663        * runtime/DateInstance.cpp: Changed to use WTF namespace.
664        * wtf/DateMath.cpp: Added math include.
665
6662009-06-08  Dimitri Glazkov  <dglazkov@chromium.org>
667
668        Reviewed by Eric Seidel.
669
670        https://bugs.webkit.org/show_bug.cgi?id=26238
671        Move most of runtime/DateMath functions to wtf/DateMath, and split off conversion-related
672        helpers to DateConversion.
673
674        * AllInOneFile.cpp: Changed DateMath->DateConversion.
675        * GNUmakefile.am: Ditto and added DateMath.
676        * JavaScriptCore.exp: Ditto.
677        * JavaScriptCore.pri: Ditto.
678        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
679        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added DateMath.
680        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
681        * JavaScriptCoreSources.bkl: Ditto.
682        * pcre/pcre_exec.cpp: Changed to use DateMath.
683        * profiler/ProfileNode.cpp:
684        (JSC::getCount): Changed to use DateConversion.
685        * runtime/DateConstructor.cpp: Ditto.
686        * runtime/DateConversion.cpp: Copied from JavaScriptCore/runtime/DateMath.cpp.
687        (JSC::parseDate): Refactored to use null-terminated characters as input.
688        * runtime/DateConversion.h: Copied from JavaScriptCore/runtime/DateMath.h.
689        * runtime/DateInstance.cpp: Changed to use wtf/DateMath.
690        * runtime/DateInstance.h: Ditto.
691        * runtime/DateMath.cpp: Removed.
692        * runtime/DateMath.h: Removed.
693        * runtime/DatePrototype.cpp: Ditto.
694        * runtime/InitializeThreading.cpp: Ditto.
695        * wtf/DateMath.cpp: Copied from JavaScriptCore/runtime/DateMath.cpp.
696        * wtf/DateMath.h: Copied from JavaScriptCore/runtime/DateMath.h.
697
6982009-06-08  Steve Falkenburg  <sfalken@apple.com>
699
700        Windows build fix.
701
702        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
703
7042009-06-07  David Kilzer  <ddkilzer@apple.com>
705
706        Make JavaScriptCore compile for iPhone and iPhone Simulator
707
708        Reviewed by Gavin Barraclough.
709
710        * Configurations/Base.xcconfig: Split GCC_ENABLE_OBJC_GC on
711        $(REAL_PLATFORM_NAME).  Added $(ARCHS_UNIVERSAL_IPHONE_OS) to
712        VALID_ARCHS.  Added REAL_PLATFORM_NAME_iphoneos,
713        REAL_PLATFORM_NAME_iphonesimulator, HAVE_DTRACE_iphoneos and
714        HAVE_DTRACE_iphonesimulator variables.
715        * Configurations/DebugRelase.xcconfig: Split ARCHS definition on
716        $(REAL_PLATFORM_NAME).
717        * Configurations/JavaScriptCore.xcconfig: Added
718        EXPORTED_SYMBOLS_FILE_armv6 and EXPORTED_SYMBOLS_FILE_armv7
719        variables.  Split OTHER_LDFLAGS into OTHER_LDFLAGS_BASE and
720        OTHER_LDFLAGS_$(REAL_PLATFORM_NAME) since CoreServices.framework
721        is only linked to on Mac OS X.
722        * JavaScriptCore.xcodeproj/project.pbxproj: Removed references
723        to CoreServices.framework since it's linked using OTHER_LDFLAGS
724        in JavaScriptCore.xcconfig.
725        * profiler/ProfilerServer.mm: Added #import for iPhone
726        Simulator.
727        (-[ProfilerServer init]): Conditionalize use of
728        NSDistributedNotificationCenter to non-iPhone or iPhone
729        Simulator.
730        * wtf/FastMalloc.cpp:
731        (WTF::TCMallocStats::): Build fix for iPhone and iPhone
732        Simulator.
733        * wtf/Platform.h: Defined PLATFORM(IPHONE) and
734        PLATFORM(IPHONE_SIMULATOR).
735        * wtf/ThreadingPthreads.cpp:
736        (WTF::setThreadNameInternal): Build fix for iPhone and iPhone
737        Simulator.
738
7392009-06-08  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
740
741        Reviewed by Simon Hausmann.
742
743        [Qt] Use $QMAKE_PATH_SEP instead of hardcoded / to fix Windows build
744
745        * JavaScriptCore.pri:
746        * JavaScriptCore.pro:
747        * jsc.pro:
748
7492009-06-07  Gavin Barraclough  <barraclough@apple.com>
750
751        RS by Sam Weinig.
752
753        Remove bonus bogus \n from last commit.
754
755        * jit/JITStubs.cpp:
756        (JSC::):
757
7582009-06-07  Gavin Barraclough  <barraclough@apple.com>
759
760        Reviewed by Sam Weinig.
761
762        Change the implementation of op_throw so the stub function always modifies its
763        return address - if it doesn't find a 'catch' it will switch to a trampoline
764        to force a return from JIT execution.  This saves memory, by avoiding the need
765        for a unique return for every op_throw.
766
767        * jit/JITOpcodes.cpp:
768        (JSC::JIT::emit_op_throw):
769            JITStubs::cti_op_throw now always changes its return address,
770            remove return code generated after the stub call (this is now
771            handled by ctiOpThrowNotCaught).
772        * jit/JITStubs.cpp:
773        (JSC::):
774            Add ctiOpThrowNotCaught definitions.
775        (JSC::JITStubs::DEFINE_STUB_FUNCTION):
776            Change cti_op_throw to always change its return address.
777        * jit/JITStubs.h:
778            Add ctiOpThrowNotCaught declaration.
779
7802009-06-05  Gavin Barraclough  <barraclough@apple.com>
781
782        Rudder stamped by Sam Weinig.
783
784        Add missing ASSERT.
785
786        * assembler/X86Assembler.h:
787        (JSC::X86Assembler::getRelocatedAddress):
788
7892009-06-05  Gavin Barraclough  <barraclough@apple.com>
790
791        Reviewed by Sam Weinig.
792
793        Switch storePtrWithPatch to take the initial immediate value as an argument.
794
795        * assembler/MacroAssemblerX86.h:
796        (JSC::MacroAssemblerX86::storePtrWithPatch):
797        * assembler/MacroAssemblerX86_64.h:
798        (JSC::MacroAssemblerX86_64::storePtrWithPatch):
799        * jit/JITOpcodes.cpp:
800        (JSC::JIT::emit_op_jsr):
801
8022009-06-05  Gavin Barraclough  <barraclough@apple.com>
803
804        Reviewed by Sam Weinig.
805
806        Remove patchLength..tByIdExternalLoadPrefix magic numbers from JIT.h.
807
808        These aren't really suitable values to be tracking within common code
809        of the JIT, since they are not (and realistically cannot) be checked
810        by ASSERTs, as the other repatch offsets are.  Move this functionality
811        (skipping the REX prefix when patching load instructions to LEAs on
812        x86-64) into the X86Assembler.
813
814        * assembler/AbstractMacroAssembler.h:
815        (JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadPtrToLEA):
816        * assembler/X86Assembler.h:
817        (JSC::X86Assembler::repatchLoadPtrToLEA):
818        * jit/JIT.h:
819        * jit/JITPropertyAccess.cpp:
820        (JSC::JIT::patchGetByIdSelf):
821        (JSC::JIT::patchPutByIdReplace):
822
8232009-06-05  Shinichiro Hamaji  <hamaji@chromium.org>
824
825        Bug 26160: Compile fails in MacOSX when GNU fileutils are installed
826
827        <https://bugs.webkit.org/show_bug.cgi?id=26160>
828
829        Reviewed by Alexey Proskuryakov.
830
831        Use /bin/ln instead of ln for cases where this command is used with -h option.
832        As this option is not supported by GNU fileutils, this change helps users 
833        who have GNU fileutils in their PATH.
834
835        * JavaScriptCore.xcodeproj/project.pbxproj:
836
8372009-06-05  Gavin Barraclough  <barraclough@apple.com>
838
839        Reviewed by Oliver Hunt.
840
841        Remove DoubleNotEqual floating point comparison condition for now -
842        it is not used, and it is unclear the semantics are correct (I think
843        this comparison would actually give you not-equal-or-unordered, which
844        might be what is wanted... we can revisit this interface & get it
845        right when required).
846
847        Also, fix asserts in branchArith32 ops.  All adds & subs can check
848        for Signed, multiply only sets OF so can only check for overflow.
849
850        * assembler/MacroAssemblerX86Common.h:
851        (JSC::MacroAssemblerX86Common::):
852        (JSC::MacroAssemblerX86Common::branchAdd32):
853        (JSC::MacroAssemblerX86Common::branchMul32):
854        (JSC::MacroAssemblerX86Common::branchSub32):
855
8562009-06-05  Gavin Barraclough  <barraclough@apple.com>
857
858        Reviewed by Oliver Hunt.
859
860        Minor tidy up in JITStubs.
861
862        * jit/JITStubs.cpp:
863        (JSC::StackHack::StackHack):
864        * jit/JITStubs.h:
865
8662009-06-05  Koen Kooi <koen@dominion.thruhere.net>
867
868        Reviewed by Xan Lopez.
869
870        Build fix for glib unicode backend.
871
872        * wtf/unicode/glib/UnicodeMacrosFromICU.h:
873
8742009-06-05  Gavin Barraclough  <barraclough@apple.com>
875
876        Reviewed by Oliver Hunt.
877
878        3 tiny cleanups:
879
880        * assembler/MacroAssemblerX86.h:
881        * assembler/MacroAssemblerX86_64.h:
882        (JSC::MacroAssemblerX86_64::storePtrWithPatch):
883            store*() methods should take an ImplicitAddress, rather than an Address.
884        * assembler/X86Assembler.h:
885            Make patchPointer private.
886        * jit/JITOpcodes.cpp:
887        (JSC::JIT::emit_op_ret):
888            Remove empty line at end of function.
889
8902009-06-05  Gavin Barraclough  <barraclough@apple.com>
891
892        Reviewed by Oliver Hunt.
893
894        Encapsulate many uses of void* in the assembler & jit with types that provide
895        more semantic information.  The new types are:
896        
897            * MacroAssemblerCodePtr - this wraps a pointer into JIT generated code.
898            * FunctionPtr - this wraps a pointer to a C/C++ function in JSC.
899            * ReturnAddressPtr - this wraps a return address resulting from a 'call' instruction.
900
901        Wrapping these types allows for stronger type-checking than is possible with everything
902        represented a void*.  For example, it is now enforced by the type system that near
903        calls can only be linked to JIT code and not to C functions in JSC (this was previously
904        required, but could not be enforced on the interface).
905
906        * assembler/AbstractMacroAssembler.h:
907        (JSC::AbstractMacroAssembler::CodeLocationCommon::CodeLocationCommon):
908        (JSC::AbstractMacroAssembler::CodeLocationCommon::dataLocation):
909        (JSC::AbstractMacroAssembler::CodeLocationCommon::executableAddress):
910        (JSC::AbstractMacroAssembler::CodeLocationCommon::reset):
911        (JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadToLEA):
912        (JSC::AbstractMacroAssembler::CodeLocationInstruction::CodeLocationInstruction):
913        (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForSwitch):
914        (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForExceptionHandler):
915        (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForJSR):
916        (JSC::AbstractMacroAssembler::CodeLocationLabel::operator!):
917        (JSC::AbstractMacroAssembler::CodeLocationLabel::reset):
918        (JSC::AbstractMacroAssembler::CodeLocationLabel::CodeLocationLabel):
919        (JSC::AbstractMacroAssembler::CodeLocationLabel::getJumpDestination):
920        (JSC::AbstractMacroAssembler::CodeLocationJump::relink):
921        (JSC::AbstractMacroAssembler::CodeLocationJump::CodeLocationJump):
922        (JSC::AbstractMacroAssembler::CodeLocationCall::relink):
923        (JSC::AbstractMacroAssembler::CodeLocationCall::calleeReturnAddressValue):
924        (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall):
925        (JSC::AbstractMacroAssembler::CodeLocationNearCall::relink):
926        (JSC::AbstractMacroAssembler::CodeLocationNearCall::calleeReturnAddressValue):
927        (JSC::AbstractMacroAssembler::CodeLocationNearCall::CodeLocationNearCall):
928        (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch):
929        (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::CodeLocationDataLabel32):
930        (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch):
931        (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr):
932        (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline):
933        (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction):
934        (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToTrampoline):
935        (JSC::AbstractMacroAssembler::ProcessorReturnAddress::addressForLookup):
936        (JSC::AbstractMacroAssembler::trampolineAt):
937        (JSC::AbstractMacroAssembler::PatchBuffer::link):
938        (JSC::AbstractMacroAssembler::PatchBuffer::performFinalization):
939        (JSC::::CodeLocationCommon::instructionAtOffset):
940        (JSC::::CodeLocationCommon::labelAtOffset):
941        (JSC::::CodeLocationCommon::jumpAtOffset):
942        (JSC::::CodeLocationCommon::callAtOffset):
943        (JSC::::CodeLocationCommon::nearCallAtOffset):
944        (JSC::::CodeLocationCommon::dataLabelPtrAtOffset):
945        (JSC::::CodeLocationCommon::dataLabel32AtOffset):
946        * assembler/MacroAssemblerCodeRef.h:
947        (JSC::FunctionPtr::FunctionPtr):
948        (JSC::FunctionPtr::value):
949        (JSC::FunctionPtr::executableAddress):
950        (JSC::ReturnAddressPtr::ReturnAddressPtr):
951        (JSC::ReturnAddressPtr::value):
952        (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
953        (JSC::MacroAssemblerCodePtr::executableAddress):
954        (JSC::MacroAssemblerCodePtr::dataLocation):
955        (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef):
956        * assembler/X86Assembler.h:
957        (JSC::X86Assembler::patchPointerForCall):
958        * jit/JIT.cpp:
959        (JSC::ctiPatchNearCallByReturnAddress):
960        (JSC::ctiPatchCallByReturnAddress):
961        (JSC::JIT::privateCompile):
962        (JSC::JIT::privateCompileCTIMachineTrampolines):
963        * jit/JIT.h:
964        (JSC::JIT::compileCTIMachineTrampolines):
965        * jit/JITCall.cpp:
966        (JSC::JIT::compileOpCall):
967        * jit/JITCode.h:
968        (JSC::JITCode::operator !):
969        (JSC::JITCode::addressForCall):
970        (JSC::JITCode::offsetOf):
971        (JSC::JITCode::execute):
972        (JSC::JITCode::size):
973        (JSC::JITCode::HostFunction):
974        * jit/JITInlineMethods.h:
975        (JSC::JIT::emitNakedCall):
976        * jit/JITPropertyAccess.cpp:
977        (JSC::JIT::privateCompilePutByIdTransition):
978        (JSC::JIT::patchGetByIdSelf):
979        (JSC::JIT::patchPutByIdReplace):
980        (JSC::JIT::privateCompilePatchGetArrayLength):
981        (JSC::JIT::privateCompileGetByIdProto):
982        (JSC::JIT::privateCompileGetByIdChain):
983        * jit/JITStubs.cpp:
984        (JSC::JITThunks::JITThunks):
985        (JSC::JITThunks::tryCachePutByID):
986        (JSC::JITThunks::tryCacheGetByID):
987        (JSC::JITStubs::DEFINE_STUB_FUNCTION):
988        * jit/JITStubs.h:
989        (JSC::JITThunks::ctiArrayLengthTrampoline):
990        (JSC::JITThunks::ctiStringLengthTrampoline):
991        (JSC::JITThunks::ctiVirtualCallPreLink):
992        (JSC::JITThunks::ctiVirtualCallLink):
993        (JSC::JITThunks::ctiVirtualCall):
994        (JSC::JITThunks::ctiNativeCallThunk):
995        * yarr/RegexJIT.h:
996        (JSC::Yarr::RegexCodeBlock::operator!):
997        (JSC::Yarr::RegexCodeBlock::execute):
998
9992009-06-05  Antti Koivisto  <antti@apple.com>
1000
1001        Try to unbreak Windows build.
1002
1003        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1004        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1005
10062009-06-03  Antti Koivisto  <antti@apple.com>
1007
1008        Reviewed by Dave Kilzer.
1009        
1010        https://bugs.webkit.org/show_bug.cgi?id=13128
1011        Safari not obeying cache header
1012        
1013        Export JSC::parseDate()
1014
1015        * JavaScriptCore.exp:
1016        * JavaScriptCore.xcodeproj/project.pbxproj:
1017
10182009-06-04  Oliver Hunt  <oliver@apple.com>
1019
1020        Reviewed by Gavin Barraclough.
1021
1022        Bug in property caching of getters and setters.
1023
1024        Make sure that the transition logic accounts for getters and setters.
1025        If we don't we end up screwing up the transition tables so that some
1026        transitions will start incorrectly believing that they need to check
1027        for getters and setters. 
1028
1029        * runtime/JSObject.cpp:
1030        (JSC::JSObject::defineGetter):
1031        (JSC::JSObject::defineSetter):
1032        * runtime/JSObject.h:
1033        (JSC::):
1034        * runtime/Structure.h:
1035
10362009-06-04  Gavin Barraclough  <barraclough@apple.com>
1037
1038        Reviewed by Sam Weinig.
1039
1040        Minor tweak to PatchBuffer, change it so it no longer holds a CodeRef, and instead
1041        holds a separate code pointer and executable pool.  Since it now always holds its
1042        own copy of the code size, and to simplify the construction sequence, it's neater
1043        this way.
1044
1045        * assembler/AbstractMacroAssembler.h:
1046        (JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer):
1047        (JSC::AbstractMacroAssembler::PatchBuffer::finalizeCode):
1048        (JSC::AbstractMacroAssembler::PatchBuffer::code):
1049        (JSC::AbstractMacroAssembler::PatchBuffer::performFinalization):
1050
10512009-06-04  Gavin Barraclough  <barraclough@apple.com>
1052
1053        Reviewed by Oliver Hunt.
1054
1055        Remove 'JIT_STUB_ARGUMENT_STACK' this is unused and untested.
1056
1057        This just leaves JIT_STUB_ARGUMENT_REGISTER and JIT_STUB_ARGUMENT_VA_LIST.
1058        Since JIT_STUB_ARGUMENT_REGISTER is the sensible configuration on most platforms,
1059        remove this define and make this the default behaviour.
1060        Platforms must now define JIT_STUB_ARGUMENT_VA_LIST to get crazy va_list voodoo,
1061        if they so desire.
1062
1063        (Refactoring of #ifdefs only, no functional change, no performance impact.)
1064
1065        * jit/JIT.h:
1066        * jit/JITInlineMethods.h:
1067        (JSC::JIT::restoreArgumentReference):
1068        (JSC::JIT::restoreArgumentReferenceForTrampoline):
1069        * jit/JITStubs.cpp:
1070        (JSC::):
1071        * jit/JITStubs.h:
1072        * wtf/Platform.h:
1073
10742009-06-04  Gavin Barraclough  <barraclough@apple.com>
1075
1076        Rubber stamped by Sam Weinig.
1077
1078        * jit/JITArithmetic.cpp:
1079            Remove some redundant typedefs, unused since arithmetic was added to the MacroAssembler interface.
1080
10812009-06-04  Brent Fulgham  <bfulgham@webkit.org>
1082
1083        Build fix due to header include problem.
1084
1085        * interpreter/Interpreter.h: Remove wtf from includes so that
1086          compile can find the headers in expected places.
1087
10882009-06-04  Zoltan Horvath  <hzoltan@inf.u-szeged.hu>
1089
1090        Reviewed by Darin Adler.
1091
1092        HashTable class (JavaScriptCore/wtf/HashTable.h) doesn't instantiated by 'new', so 
1093        inheritance was removed. HashTable struct has been instantiated by operator new in
1094        JSGlobalData.cpp:106.
1095        HashTable couldn't inherited from FastAllocBase since struct with inheritance is 
1096        no longer POD, so HashTable struct has been instantiated by fastNew, destroyed by
1097        fastDelete.
1098
1099        * interpreter/Interpreter.h:
1100        * runtime/JSGlobalData.cpp:
1101        (JSC::JSGlobalData::JSGlobalData):
1102        (JSC::JSGlobalData::~JSGlobalData):
1103        * wtf/HashTable.h:
1104
11052009-06-04  Gavin Barraclough  <barraclough@apple.com>
1106
1107        Reviewed by Oliver Hunt.
1108
1109        Wrap the code that plants pushes/pops planted by JIT in explanatorily named
1110        methods; move property storage reallocation into a standard stub function.
1111
1112        ~No performance impact (possible <1% progression on x86-64, likely just noise).
1113
1114        * jit/JIT.cpp:
1115        (JSC::JIT::privateCompile):
1116        (JSC::JIT::privateCompileCTIMachineTrampolines):
1117            Wrap calls to push/pop.
1118        * jit/JIT.h:
1119            Declare the new wrapper methods.
1120        * jit/JITInlineMethods.h:
1121        (JSC::JIT::preverveReturnAddressAfterCall):
1122        (JSC::JIT::restoreReturnAddressBeforeReturn):
1123            Define the new wrapper methods.
1124        * jit/JITOpcodes.cpp:
1125        (JSC::JIT::emit_op_end):
1126        (JSC::JIT::emit_op_ret):
1127            Wrap calls to push/pop.
1128        * jit/JITPropertyAccess.cpp:
1129        (JSC::JIT::privateCompilePutByIdTransition):
1130            Move property storage reallocation into a standard stub function.
1131        * jit/JITStubs.cpp:
1132        (JSC::JITStubs::DEFINE_STUB_FUNCTION):
1133        * jit/JITStubs.h:
1134        (JSC::JITStubs::):
1135
11362009-06-04  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
1137
1138        Reviewed by Ariya Hidayat.
1139
1140        [Qt] Single-threaded QtWebKit configuration
1141        <https://bugs.webkit.org/show_bug.cgi?id=26015>
1142
1143        * JavaScriptCore.pri: Use ThreadingNone.cpp instead of
1144        ThreadingQt.cpp and make sure ENABLE_JSC_MULTIPLE_THREADS is turned off
1145        when ENABLE_SINGLE_THREADED is tuned on
1146        * wtf/ThreadingNone.cpp:
1147        (WTF::ThreadCondition::wait): Fix compilation warning.
1148        (WTF::ThreadCondition::timedWait): Ditto.
1149
11502009-06-02  Mark Rowe  <mrowe@apple.com>
1151
1152        Reviewed by Anders Carlsson.
1153
1154        Remove workaround that was added to address <rdar://problem/5488678> as it no longer affects our Tiger builds.
1155
1156        * Configurations/Base.xcconfig:
1157
11582009-06-02  Xan Lopez  <xlopez@igalia.com>
1159
1160        Reviewed by Sam Weinig.
1161
1162        Use C-style comments in Platform.h so it can be included from C
1163        files.
1164
1165        * wtf/Platform.h:
1166
11672009-06-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
1168
1169        Rubber-stamped by Simon Hausmann.
1170
1171        Use File::Spec->tmpdir instead of hardcoded paths for tempfile() dir
1172        
1173        This fixes the Windows-build if the user does not have a /tmp directory.
1174
1175        * pcre/dftables:
1176
11772009-06-02  Gavin Barraclough  <barraclough@apple.com>
1178
1179        Reviewed by Oliver ">>" Hunt.
1180
1181        emitSlow_op_rshift is linking the wrong number of slow cases, if !supportsFloatingPoint().
1182        Fixerate, and refactor/comment the code a little to make it clearer what is going on.
1183
1184        * jit/JITArithmetic.cpp:
1185        (JSC::JIT::emit_op_rshift):
1186        (JSC::JIT::emitSlow_op_rshift):
1187
11882009-06-01  Gavin Barraclough  <barraclough@apple.com>
1189
1190        Reviewed by NOBODY - speculative windows build fix (errm, for the other patch!).
1191
1192        * jit/JITStubs.cpp:
1193        (JSC::):
1194
11952009-06-01  Gavin Barraclough  <barraclough@apple.com>
1196
1197        Reviewed by NOBODY - speculative windows build fix.
1198
1199        * assembler/AbstractMacroAssembler.h:
1200        (JSC::::CodeLocationCall::CodeLocationCall):
1201        (JSC::::CodeLocationNearCall::CodeLocationNearCall):
1202
12032009-06-01  Gavin Barraclough  <barraclough@apple.com>
1204
1205        Reviewed by Olliej Hunt.
1206
1207        Change JITStub functions from being static members on the JITStub class to be
1208        global extern "C" functions, and switch their the function signature declaration
1209        in the definition of the functions to be C-macro generated.  This makes it easier
1210        to work with the stub functions from assembler code (since the names no longer
1211        require mangling), and by delaring the functions with a macro we can look at
1212        also auto-generating asm thunks to wrap the JITStub functions to perform the
1213        work currently in 'restoreArgumentReference' (as a memory saving).
1214
1215        Making this change also forces us to be a bit more realistic about what is private
1216        on the Register and CallFrame objects.  Presently most everything on these classes
1217        is private, and the classes have plenty of friends.  We could befriend all the
1218        global functions to perpetuate the delusion of encapsulation, but using friends is
1219        a bit of a sledgehammer solution here - since friends can poke around with all of
1220        the class's privates, and since all the major classes taht operate on Regsiters are
1221        currently friends, right there is currently in practice very little protection at
1222        all.  Better to start removing friend delclarations, and exposing just the parts
1223        that need to be exposed.
1224
1225        * interpreter/CallFrame.h:
1226        (JSC::ExecState::returnPC):
1227        (JSC::ExecState::setCallerFrame):
1228        (JSC::ExecState::returnValueRegister):
1229        (JSC::ExecState::setArgumentCount):
1230        (JSC::ExecState::setCallee):
1231        (JSC::ExecState::setCodeBlock):
1232        * interpreter/Interpreter.h:
1233        * interpreter/Register.h:
1234        (JSC::Register::Register):
1235        (JSC::Register::i):
1236        * jit/JITStubs.cpp:
1237        (JSC::):
1238        (JSC::JITThunks::JITThunks):
1239        (JSC::JITThunks::tryCachePutByID):
1240        (JSC::JITThunks::tryCacheGetByID):
1241        (JSC::JITStubs::DEFINE_STUB_FUNCTION):
1242        * jit/JITStubs.h:
1243        (JSC::JITStubs::):
1244        * runtime/JSFunction.h:
1245        (JSC::JSFunction::nativeFunction):
1246        (JSC::JSFunction::classInfo):
1247        * runtime/JSGlobalData.h:
1248
12492009-06-01  Oliver Hunt  <oliver@apple.com>
1250
1251        Reviewed by Gavin Barraclough.
1252
1253        Tidy up the literal parser.
1254
1255        Make the number lexing in the LiteralParser exactly match the JSON spec, which
1256        makes us cover more cases, but also more strict.  Also made string lexing only
1257        allow double-quoted strings.
1258
1259        * runtime/LiteralParser.cpp:
1260        (JSC::LiteralParser::Lexer::lex):
1261        (JSC::LiteralParser::Lexer::lexString):
1262        (JSC::LiteralParser::Lexer::lexNumber):
1263
12642009-06-01  Gavin Barraclough  <barraclough@apple.com>
1265
1266        Reviewed by Sam "WX" Weinig.
1267
1268        Allow the JIT to operate without relying on use of RWX memory, on platforms where this is supported.
1269
1270        This patch adds a switch to Platform.h (ENABLE_ASSEMBLER_WX_EXCLUSIVE) which enables this mode of operation.
1271        When this flag is set, all executable memory will be allocated RX, and switched to RW only whilst being
1272        modified.  Upon completion of code generation the protection is switched back to RX to allow execution.
1273
1274        Further optimization will be required before it is desirable to enable this mode of operation by default;
1275        enabling this presently incurs a 5%-10% regression.
1276
1277        (Submitting disabled - no performance impact).
1278
1279        * assembler/AbstractMacroAssembler.h:
1280        (JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadToLEA):
1281        (JSC::AbstractMacroAssembler::CodeLocationLabel::fromFunctionPointer):
1282        (JSC::AbstractMacroAssembler::CodeLocationJump::relink):
1283        (JSC::AbstractMacroAssembler::CodeLocationCall::relink):
1284        (JSC::AbstractMacroAssembler::CodeLocationNearCall::relink):
1285        (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch):
1286        (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch):
1287        (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline):
1288        (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction):
1289        (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToTrampoline):
1290        (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToFunction):
1291        (JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer):
1292        (JSC::AbstractMacroAssembler::PatchBuffer::~PatchBuffer):
1293        (JSC::AbstractMacroAssembler::PatchBuffer::link):
1294        (JSC::AbstractMacroAssembler::PatchBuffer::patch):
1295        (JSC::AbstractMacroAssembler::PatchBuffer::performFinalization):
1296        (JSC::::CodeLocationCommon::nearCallAtOffset):
1297        (JSC::::CodeLocationCall::CodeLocationCall):
1298        (JSC::::CodeLocationNearCall::CodeLocationNearCall):
1299        * assembler/AssemblerBuffer.h:
1300        (JSC::AssemblerBuffer::executableCopy):
1301        * assembler/X86Assembler.h:
1302        (JSC::CAN_SIGN_EXTEND_U32_64):
1303        (JSC::X86Assembler::linkJump):
1304        (JSC::X86Assembler::linkCall):
1305        (JSC::X86Assembler::patchPointer):
1306        (JSC::X86Assembler::relinkJump):
1307        (JSC::X86Assembler::relinkCall):
1308        (JSC::X86Assembler::repatchInt32):
1309        (JSC::X86Assembler::repatchPointer):
1310        (JSC::X86Assembler::repatchLoadToLEA):
1311        (JSC::X86Assembler::patchInt32):
1312        (JSC::X86Assembler::patchRel32):
1313        * jit/ExecutableAllocator.h:
1314        (JSC::ExecutableAllocator::):
1315        (JSC::ExecutableAllocator::makeWritable):
1316        (JSC::ExecutableAllocator::makeExecutable):
1317        * jit/ExecutableAllocatorFixedVMPool.cpp:
1318        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
1319        * jit/ExecutableAllocatorPosix.cpp:
1320        (JSC::ExecutablePool::systemAlloc):
1321        (JSC::ExecutablePool::systemRelease):
1322        (JSC::ExecutableAllocator::reprotectRegion):
1323        * jit/ExecutableAllocatorWin.cpp:
1324        * jit/JITPropertyAccess.cpp:
1325        (JSC::JIT::patchGetByIdSelf):
1326        (JSC::JIT::patchPutByIdReplace):
1327        * wtf/Platform.h:
1328
13292009-05-29 Zoltan Horvath  <hzoltan@inf.u-szeged.hu>
1330
1331        Reviewed by Darin Adler.
1332
1333        Inherits Interpreter class from FastAllocBase because it has been
1334        instantiated by 'new' in JavaScriptCore/runtime/JSGlobalData.cpp. 
1335
1336        * interpreter/Interpreter.h:
1337
13382009-06-01  David Levin  <levin@chromium.org>
1339
1340        Reviewed by NOBODY (windows build fix).
1341
1342        Add exports for windows (corresponding to the JavaScriptCore.exp modification
1343        in the previous change).
1344
1345        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1346        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1347
13482009-06-01  David Levin  <levin@chromium.org>
1349
1350        Reviewed by Darin Alder and Maciej Stachowiak.
1351
1352        Bug 26057: StringImpl should share buffers with UString.
1353        https://bugs.webkit.org/show_bug.cgi?id=26057
1354
1355        * JavaScriptCore.exp:
1356        * runtime/UString.cpp:
1357        (JSC::UString::Rep::create):
1358        (JSC::UString::BaseString::sharedBuffer): Only do the sharing when
1359        the buffer exceeds a certain size.  The size was tuned by running
1360        various dom benchmarks with numbers ranging from 20 to 800 and finding
1361        a place that seemed to do the best overall.
1362        * runtime/UString.h:
1363
13642009-05-31  Gavin Barraclough  <barraclough@apple.com>
1365
1366        Reviewed by Olliej "you just need to change NativeFunctionWrapper.h" Hunt.
1367
1368        Add ENABLE_JIT_OPTIMIZE_NATIVE_CALL switch to allow JIT to operate without native call optimizations.
1369
1370        * runtime/NativeFunctionWrapper.h:
1371        * wtf/Platform.h:
1372
13732009-05-30  Darin Adler  <darin@apple.com>
1374
1375        Reviewed by Sam Weinig.
1376
1377        <rdar://problem/6935193> REGRESSION (r42734): Celtic Kane JavaScript benchmark does not run:
1378        "Maximum call stack size exceeded"
1379
1380        * runtime/ArrayPrototype.cpp:
1381        (JSC::arrayProtoFuncToString): Use the same recursion limit as the other recursion checks.
1382        We need a limit of at least 100 to run the benchmark above.
1383        (JSC::arrayProtoFuncToLocaleString): Ditto.
1384        (JSC::arrayProtoFuncJoin): Ditto.
1385
13862009-05-28  Dirk Schulze  <krit@webkit.org>
1387
1388        Reviewed by Nikolas Zimmermann.
1389
1390        Added new build flag --filters for Mac. More details in WebCore/ChangeLog.
1391
1392        * Configurations/FeatureDefines.xcconfig:
1393
13942009-05-27  Oliver Hunt  <oliver@apple.com>
1395
1396        Reviewed by Mark Rowe.
1397
1398        <rdar://problem/6928025> Stack overflow in JSC::stringProtoFuncReplace() running jsFunFuzz
1399
1400        We should always check for exceptions after creating a CachedCall, this wasn't being done in
1401        the string replace logic.
1402
1403        * runtime/StringPrototype.cpp:
1404        (JSC::stringProtoFuncReplace):
1405
14062009-05-27  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>
1407
1408        Unreviewed (make distcheck) build fix; adding missing headers.
1409
1410        * GNUmakefile.am:
1411
14122009-05-27  Jessie Berlin  <jberlin@apple.com>
1413
1414        Reviewed by Adam Roben
1415        
1416        Fix the Windows build.
1417
1418        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1419        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1420
14212009-05-27  Fridrich Strba  <fridrich.strba@bluewin.ch>
1422
1423        Reviewed by Gustavo Noronha.
1424
1425        When building on Windows, consider Windows specific files.
1426
1427        * GNUmakefile.am:
1428
14292009-05-27  Fridrich Strba  <fridrich.strba@bluewin.ch>
1430
1431        Reviewed by Maciej Stachowiak.
1432
1433        When building with MinGW, don't use the __declspec(dl{import,export})
1434        decorations and rely on the linker to use its nifty auto-import feature.
1435        It is extremely hard to get the decorations right with MinGW in general
1436        and impossible in WebKit, where the resulting shared library is linking
1437        together some static libraries.
1438
1439        * config.h:
1440
14412009-05-26  Holger Hans Peter Freyther  <zecke@selfish.org>
1442
1443        Reviewed by Xan Lopez.
1444
1445        https://bugs.webkit.org/show_bug.cgi?id=25613
1446
1447        Be able to use GOwnPtr for GHashTable as well. The assumption
1448        is that the hash table has been created with g_hash_table_new_full
1449        and has proper destruction functions.
1450
1451        * wtf/GOwnPtr.cpp:
1452        (WTF::GHashTable):
1453        * wtf/GOwnPtr.h:
1454
14552009-05-26  Oliver Hunt  <oliver@apple.com>
1456
1457        Reviewed by Gavin Barraclough.
1458
1459        <rdar://problem/6924033> REGRESSION: Assertion failure due to forward references
1460
1461        Add a pattern type for forward references to ensure that we don't confuse the
1462        quantifier alternatives assertion.
1463
1464        * yarr/RegexCompiler.cpp:
1465        (JSC::Yarr::RegexPatternConstructor::atomBackReference):
1466        (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets):
1467        * yarr/RegexInterpreter.cpp:
1468        (JSC::Yarr::ByteCompiler::emitDisjunction):
1469        * yarr/RegexJIT.cpp:
1470        (JSC::Yarr::RegexGenerator::generateTerm):
1471        * yarr/RegexPattern.h:
1472        (JSC::Yarr::PatternTerm::):
1473        (JSC::Yarr::PatternTerm::PatternTerm):
1474        (JSC::Yarr::PatternTerm::ForwardReference):
1475
14762009-05-26  Gavin Barraclough  <barraclough@apple.com>
1477
1478        Reviewed by Oliver Hunt.
1479
1480        Fix for: <rdar://problem/6918095> REGRESSION: jQuery load() issue (25981),
1481        and also an ASSERT failure on http://ihasahotdog.com/.
1482
1483        When overwriting a property on a dictionary with a cached specific value,
1484        clear the cache if new value being written is different.
1485
1486        * JavaScriptCore.exp:
1487            Export the new symbols.
1488        * jit/JITStubs.cpp:
1489        (JSC::JITStubs::cti_op_get_by_id_method_check_second):
1490            Close dictionary prototypes upon caching a method access, as would happen when caching
1491            a regular get_by_id.
1492        * runtime/JSObject.h:
1493        (JSC::JSObject::propertyStorage):
1494        (JSC::JSObject::locationForOffset):
1495            Make these methods private.
1496        (JSC::JSObject::putDirectInternal):
1497            When overwriting a property on a dictionary with a cached specific value,
1498            clear the cache if new value being written is different.
1499        * runtime/Structure.cpp:
1500        (JSC::Structure::despecifyDictionaryFunction):
1501            Reset the specific value field for a given property in a dictionary.
1502        (JSC::Structure::despecifyFunctionTransition):
1503            Rename of 'changeFunctionTransition' (this was already internally refered to as a despecification).
1504        * runtime/Structure.h:
1505            Declare new method.
1506
15072009-05-26  Gavin Barraclough  <barraclough@apple.com>
1508
1509        Reviewed by Oliver "pieces of eight" Hunt.
1510
1511        When reseting RegexPattern class, should fully reset the class, not just bits of it.
1512        In particular, we delete the cached character classes (for wordchars, etc), but do
1513        not reset the set of pointers to the cached classes.  In the case of a repeated parse
1514        due to an illegal back-reference we will continue to use the deleted character class.
1515
1516        * yarr/RegexPattern.h:
1517        (JSC::Yarr::RegexPattern::reset):
1518
15192009-05-26  Brent Fulgham  <bfulgham@webkit.org>
1520
1521        Build fix to correct r44161.
1522
1523        * wtf/FastAllocBase.h:
1524
15252009-05-26  Zoltan Horvath  <horvath.zoltan.6@stud.u-szeged.hu>
1526
1527        Reviewed by Maciej Stachowiak.
1528
1529        Inherite HashTable from FastAllocBase, because it has been instantiated by
1530        'new' in JavaScriptCore/runtime/JSGlobalData.cpp.
1531
1532        * wtf/HashTable.h:
1533        * wtf/FastAllocBase.h: Remove 'wtf' path from TypeTraits.h to allow use outside of wtf.
1534
15352009-05-25  David Levin  <levin@chromium.org>
1536
1537        Reviewed by Maciej Stachowiak and Oliver Hunt.
1538
1539        https://bugs.webkit.org/show_bug.cgi?id=25126
1540        Allow the buffer underlying UString to be shared.
1541
1542        In order to not grow the underlying size of any structure,
1543        there is a union in the Rep string which holds
1544         + m_sharedBuffer -- a pointer to the shared ref counted buffer
1545           if the class is BaseString and the buffer is being shared OR
1546         + m_baseString -- the BaseString if the class is only UString::Rep
1547           but not a UString::BaseString
1548
1549        Ideally, m_sharedBuffer would be a RefPtr, but it cannot be because
1550        it is in a union.
1551
1552        No change in sunspider perf.
1553
1554        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
1555        * JavaScriptCore.xcodeproj/project.pbxproj:
1556        * runtime/UString.cpp:
1557        (JSC::UString::Rep::share):
1558        (JSC::UString::Rep::destroy):
1559        (JSC::UString::BaseString::sharedBuffer):
1560        (JSC::UString::BaseString::setSharedBuffer):
1561        (JSC::UString::BaseString::slowIsBufferReadOnly):
1562        (JSC::expandCapacity):
1563        (JSC::UString::Rep::reserveCapacity):
1564        (JSC::UString::expandPreCapacity):
1565        (JSC::concatenate):
1566        (JSC::UString::append):
1567        * runtime/UString.h:
1568        (JSC::UString::Rep::Rep):
1569        (JSC::UString::Rep::):
1570        (JSC::UString::BaseString::isShared):
1571        (JSC::UString::BaseString::isBufferReadOnly):
1572        (JSC::UString::Rep::baseString):
1573        * wtf/CrossThreadRefCounted.h:
1574        (WTF::CrossThreadRefCounted::isShared):
1575        * wtf/OwnFastMallocPtr.h: Added.
1576        (WTF::OwnFastMallocPtr::OwnFastMallocPtr):
1577        (WTF::OwnFastMallocPtr::~OwnFastMallocPtr):
1578        (WTF::OwnFastMallocPtr::get):
1579        (WTF::OwnFastMallocPtr::release):
1580
15812009-05-25  Oliver Hunt  <oliver@apple.com>
1582
1583        Reviewed by Maciej Stachowiak.
1584
1585        Re-add interpreter logic to jit-enabled builds as GCC mysteriously regresses without it
1586
1587        * wtf/Platform.h:
1588
15892009-05-25  Fridrich Strba  <fridrich.strba@bluewin.ch>
1590
1591        Reviewed by Maciej Stachowiak.
1592
1593        The functions written in assembly need to have a leading
1594        underscore on Windows too.
1595
1596        * jit/JITStubs.cpp:
1597
15982009-05-24  Steve Falkenburg  <sfalken@apple.com>
1599
1600        Build fix for experimental PGO Windows target.
1601        
1602        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1603
16042009-05-23  David Kilzer  <ddkilzer@apple.com>
1605
1606        Part 1 of 2: Bug 25495: Implement PassOwnPtr and replace uses of std::auto_ptr
1607
1608        <https://bugs.webkit.org/show_bug.cgi?id=25495>
1609
1610        Reviewed by Oliver Hunt.
1611
1612        * GNUmakefile.am: Added OwnPtrCommon.h and PassOwnPtr.h.
1613        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto.
1614        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
1615
1616        * wtf/OwnPtr.h:
1617        (WTF::OwnPtr::OwnPtr): Added constructors that take a
1618        PassOwnPtr.  Also added a copy constructor declaration that's
1619        required when assigning a PassOwnPtr to a stack-based OwnPtr.
1620        (WTF::operator=): Added assignment operator methods that take a
1621        PassOwnPtr.
1622        (WTF::swap): Reformatted.
1623        (WTF::operator==): Whitespace changes.
1624        (WTF::operator!=): Ditto.
1625
1626        * wtf/OwnPtrCommon.h: Added.
1627        (WTF::deleteOwnedPtr):
1628
1629        * wtf/PassOwnPtr.h: Added.
1630        (WTF::PassOwnPtr::PassOwnPtr):
1631        (WTF::PassOwnPtr::~PassOwnPtr):
1632        (WTF::PassOwnPtr::get):
1633        (WTF::PassOwnPtr::clear):
1634        (WTF::PassOwnPtr::release):
1635        (WTF::PassOwnPtr::operator*):
1636        (WTF::PassOwnPtr::operator->):
1637        (WTF::PassOwnPtr::operator!):
1638        (WTF::PassOwnPtr::operator UnspecifiedBoolType):
1639        (WTF::::operator):
1640        (WTF::operator==):
1641        (WTF::operator!=):
1642        (WTF::static_pointer_cast):
1643        (WTF::const_pointer_cast):
1644        (WTF::getPtr):
1645
16462009-05-23  Oliver Hunt  <oliver@apple.com>
1647
1648        Reviewed by Maciej Stachowiak.
1649
1650        Remove interpreter specific logic from the JIT builds.
1651
1652        This saves ~100k in JSC release builds.
1653
1654        * interpreter/Interpreter.cpp:
1655        (JSC::Interpreter::privateExecute):
1656        * interpreter/Interpreter.h:
1657        * wtf/Platform.h:
1658
16592009-05-22  Mark Rowe  <mrowe@apple.com>
1660
1661        Part two of an attempted Windows build fix.
1662
1663        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1664        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1665
16662009-05-22  Mark Rowe  <mrowe@apple.com>
1667
1668        Part one of an attempted Windows build fix.
1669
1670        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
1671        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
1672
16732009-05-21  Gavin Barraclough  <barraclough@apple.com>
1674
1675        Reviewed by Geoff Garen.
1676
1677        op_method_check
1678
1679        Optimize method calls, by caching specific function values within the Structure.
1680        The new opcode is used almost like an x86 opcode prefix byte to optimize op_get_by_id,
1681        where the property access is being used to read a function to be passed to op-call (i.e.
1682        'foo.bar();').  This patch modifies the Structure class such that when a property is
1683        put to an object for the first time we will check if the value is a function.  If it is,
1684        we will cache the function value on the Structure.  A Structure in such a state guarantees
1685        that not only does a property with the given identifier exist on the object, but also that
1686        its value is unchanged.  Upon any further attempt to put a property with the same identifier
1687        (but a different value) to the object, it will transition back to a normal Structure (where
1688        it will guarantee the presence but not the value of the property).
1689
1690        op_method_check makes use of the new information made available by the Structure, by
1691        augmenting the functionality of op_get_by_id.  Upon generating a FunctionCallDotNode a
1692        check will be emitted prior to the property access reading the function value, and the JIT
1693        will generate an extra (initially unlinked but patchable) set of checks prior to the regular
1694        JIT code for get_by_id.  The new code will do inline structure and prototype structure check
1695        (unlike a regular get_by_id, which can only handle 'self' accesses inline), and then performs
1696        an immediate load of the function value, rather than using memory accesses to load the value
1697        from the obejct's property storage array.  If the method check fails it will revert, or if
1698        the access is polymorphic, the op_get_by_id will continue to operate - and optimize itself -
1699        just as any other regular op_get_by_id would.
1700
1701        ~2.5% on v8-tests, due to a ~9% progression on richards.
1702
1703        * API/JSCallbackObjectFunctions.h:
1704        (JSC::::put):
1705        (JSC::::staticFunctionGetter):
1706        * API/JSObjectRef.cpp:
1707        (JSObjectMakeConstructor):
1708        * JavaScriptCore.exp:
1709        * assembler/AbstractMacroAssembler.h:
1710        (JSC::AbstractMacroAssembler::differenceBetween):
1711        * assembler/MacroAssemblerX86.h:
1712        (JSC::MacroAssemblerX86::moveWithPatch):
1713        * bytecode/CodeBlock.cpp:
1714        (JSC::CodeBlock::dump):
1715        * bytecode/CodeBlock.h:
1716        (JSC::getMethodCallLinkInfoReturnLocation):
1717        (JSC::CodeBlock::getMethodCallLinkInfo):
1718        (JSC::CodeBlock::addMethodCallLinkInfos):
1719        (JSC::CodeBlock::methodCallLinkInfo):
1720        * bytecode/Opcode.h:
1721        * bytecompiler/BytecodeGenerator.cpp:
1722        (JSC::BytecodeGenerator::emitMethodCheck):
1723        * bytecompiler/BytecodeGenerator.h:
1724        * interpreter/Interpreter.cpp:
1725        (JSC::Interpreter::privateExecute):
1726        * jit/JIT.cpp:
1727        (JSC::JIT::privateCompileMainPass):
1728        (JSC::JIT::privateCompileSlowCases):
1729        (JSC::JIT::privateCompile):
1730        * jit/JIT.h:
1731        (JSC::MethodCallCompilationInfo::MethodCallCompilationInfo):
1732        * jit/JITOpcodes.cpp:
1733        * jit/JITPropertyAccess.cpp:
1734        (JSC::JIT::emit_op_method_check):
1735        (JSC::JIT::emitSlow_op_method_check):
1736        (JSC::JIT::emit_op_get_by_id):
1737        (JSC::JIT::emitSlow_op_get_by_id):
1738        (JSC::JIT::emit_op_put_by_id):
1739        (JSC::JIT::emitSlow_op_put_by_id):
1740        (JSC::JIT::compileGetByIdHotPath):
1741        (JSC::JIT::compileGetByIdSlowCase):
1742        (JSC::JIT::patchMethodCallProto):
1743        * jit/JITStubs.cpp:
1744        (JSC::JITStubs::cti_op_get_by_id_method_check):
1745        (JSC::JITStubs::cti_op_get_by_id_method_check_second):
1746        * jit/JITStubs.h:
1747        * jsc.cpp:
1748        (GlobalObject::GlobalObject):
1749        * parser/Nodes.cpp:
1750        (JSC::FunctionCallDotNode::emitBytecode):
1751        * runtime/Arguments.cpp:
1752        (JSC::Arguments::put):
1753        * runtime/ArrayConstructor.cpp:
1754        (JSC::ArrayConstructor::ArrayConstructor):
1755        * runtime/BooleanConstructor.cpp:
1756        (JSC::BooleanConstructor::BooleanConstructor):
1757        * runtime/DateConstructor.cpp:
1758        (JSC::DateConstructor::DateConstructor):
1759        * runtime/ErrorConstructor.cpp:
1760        (JSC::ErrorConstructor::ErrorConstructor):
1761        (JSC::constructError):
1762        * runtime/ErrorPrototype.cpp:
1763        (JSC::ErrorPrototype::ErrorPrototype):
1764        * runtime/FunctionConstructor.cpp:
1765        (JSC::FunctionConstructor::FunctionConstructor):
1766        * runtime/FunctionPrototype.cpp:
1767        (JSC::FunctionPrototype::FunctionPrototype):
1768        * runtime/InternalFunction.cpp:
1769        (JSC::InternalFunction::InternalFunction):
1770        * runtime/JSActivation.cpp:
1771        (JSC::JSActivation::put):
1772        (JSC::JSActivation::putWithAttributes):
1773        * runtime/JSByteArray.cpp:
1774        (JSC::JSByteArray::JSByteArray):
1775        * runtime/JSFunction.cpp:
1776        (JSC::JSFunction::JSFunction):
1777        (JSC::JSFunction::getOwnPropertySlot):
1778        * runtime/JSGlobalObject.cpp:
1779        (JSC::JSGlobalObject::putWithAttributes):
1780        (JSC::JSGlobalObject::reset):
1781        (JSC::JSGlobalObject::mark):
1782        * runtime/JSGlobalObject.h:
1783        (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
1784        (JSC::JSGlobalObject::methodCallDummy):
1785        * runtime/JSObject.cpp:
1786        (JSC::JSObject::put):
1787        (JSC::JSObject::putWithAttributes):
1788        (JSC::JSObject::deleteProperty):
1789        (JSC::JSObject::defineGetter):
1790        (JSC::JSObject::defineSetter):
1791        (JSC::JSObject::getPropertyAttributes):
1792        (JSC::JSObject::getPropertySpecificFunction):
1793        (JSC::JSObject::putDirectFunction):
1794        (JSC::JSObject::putDirectFunctionWithoutTransition):
1795        * runtime/JSObject.h:
1796        (JSC::getJSFunction):
1797        (JSC::JSObject::getDirectLocation):
1798        (JSC::JSObject::putDirect):
1799        (JSC::JSObject::putDirectWithoutTransition):
1800        * runtime/LiteralParser.cpp:
1801        (JSC::LiteralParser::parseObject):
1802        * runtime/Lookup.cpp:
1803        (JSC::setUpStaticFunctionSlot):
1804        * runtime/Lookup.h:
1805        (JSC::lookupPut):
1806        * runtime/MathObject.cpp:
1807        (JSC::MathObject::MathObject):
1808        * runtime/NativeErrorConstructor.cpp:
1809        (JSC::NativeErrorConstructor::NativeErrorConstructor):
1810        (JSC::NativeErrorConstructor::construct):
1811        * runtime/NativeErrorPrototype.cpp:
1812        (JSC::NativeErrorPrototype::NativeErrorPrototype):
1813        * runtime/NumberConstructor.cpp:
1814        (JSC::NumberConstructor::NumberConstructor):
1815        * runtime/ObjectConstructor.cpp:
1816        (JSC::ObjectConstructor::ObjectConstructor):
1817        * runtime/PropertyMapHashTable.h:
1818        (JSC::PropertyMapEntry::PropertyMapEntry):
1819        * runtime/PrototypeFunction.cpp:
1820        (JSC::PrototypeFunction::PrototypeFunction):
1821        * runtime/PutPropertySlot.h:
1822        (JSC::PutPropertySlot::):
1823        (JSC::PutPropertySlot::PutPropertySlot):
1824        (JSC::PutPropertySlot::setNewProperty):
1825        (JSC::PutPropertySlot::setDespecifyFunctionProperty):
1826        (JSC::PutPropertySlot::isCacheable):
1827        (JSC::PutPropertySlot::cachedOffset):
1828        * runtime/RegExpConstructor.cpp:
1829        (JSC::RegExpConstructor::RegExpConstructor):
1830        * runtime/StringConstructor.cpp:
1831        (JSC::StringConstructor::StringConstructor):
1832        * runtime/StringPrototype.cpp:
1833        (JSC::StringPrototype::StringPrototype):
1834        * runtime/Structure.cpp:
1835        (JSC::Structure::Structure):
1836        (JSC::Structure::~Structure):
1837        (JSC::Structure::materializePropertyMap):
1838        (JSC::Structure::addPropertyTransitionToExistingStructure):
1839        (JSC::Structure::addPropertyTransition):
1840        (JSC::Structure::changeFunctionTransition):
1841        (JSC::Structure::addPropertyWithoutTransition):
1842        (JSC::Structure::get):
1843        (JSC::Structure::despecifyFunction):
1844        (JSC::Structure::put):
1845        (JSC::Structure::remove):
1846        * runtime/Structure.h:
1847        (JSC::Structure::get):
1848        (JSC::Structure::specificFunction):
1849        * runtime/StructureTransitionTable.h:
1850        (JSC::StructureTransitionTableHashTraits::emptyValue):
1851        * wtf/Platform.h:
1852
18532009-05-22  Brent Fulgham <bfulgham@webkit.org>
1854
1855        Reviewed by Steve Falkenburg.
1856
1857        https://bugs.webkit.org/show_bug.cgi?id=25950
1858        JavaScriptCore Fails to build on Windows (Cairo) due to CoreFoundation
1859        link requirement.
1860
1861        Modify project to add new Debug_CFLite and Release_CFLite targets.  These
1862        use the new JavaScriptCoreCFLite.vsprops to link against CFLite.dll.
1863        Existing projects are changed to use the new JavaScriptCoreCF.vsprops
1864        to link against CoreFoundation.dll.
1865
1866        The JavaScriptCoreCommon.vsprops is modified to remove the link
1867        against CoreFoundation.dll.
1868
1869        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
1870        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCF.vsprops: Added.
1871        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCFLite.vsprops: Added.
1872        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
1873
18742009-05-22  Dominik Röttsches  <dominik.roettsches@access-company.com>
1875
1876        Reviewed by Gustavo Noronha.
1877
1878        https://bugs.webkit.org/show_bug.cgi?id=15914
1879        [GTK] Implement Unicode functionality using GLib
1880
1881        Original patch by Jürg Billeter and Naiem Shaik.
1882        Implementing WTF Unicode functionality based on GLib.
1883
1884        * GNUmakefile.am:
1885        * wtf/unicode/Unicode.h:
1886        * wtf/unicode/glib: Added.
1887        * wtf/unicode/glib/UnicodeGLib.cpp: Added.
1888        (WTF::Unicode::foldCase):
1889        (WTF::Unicode::toLower):
1890        (WTF::Unicode::toUpper):
1891        (WTF::Unicode::direction):
1892        (WTF::Unicode::umemcasecmp):
1893        * wtf/unicode/glib/UnicodeGLib.h: Added.
1894        (WTF::Unicode::):
1895        (WTF::Unicode::toLower):
1896        (WTF::Unicode::toUpper):
1897        (WTF::Unicode::toTitleCase):
1898        (WTF::Unicode::isArabicChar):
1899        (WTF::Unicode::isFormatChar):
1900        (WTF::Unicode::isSeparatorSpace):
1901        (WTF::Unicode::isPrintableChar):
1902        (WTF::Unicode::isDigit):
1903        (WTF::Unicode::isPunct):
1904        (WTF::Unicode::mirroredChar):
1905        (WTF::Unicode::category):
1906        (WTF::Unicode::isLower):
1907        (WTF::Unicode::digitValue):
1908        (WTF::Unicode::combiningClass):
1909        (WTF::Unicode::decompositionType):
1910        * wtf/unicode/glib/UnicodeMacrosFromICU.h: Added.
1911
19122009-05-21  Xan Lopez  <xlopez@igalia.com>
1913
1914        Unreviewed build fix.
1915
1916        Add MacroAssemblerCodeRef.h to file list.
1917
1918        * GNUmakefile.am:
1919
19202009-05-21  Gavin Barraclough  <barraclough@apple.com>
1921
1922        Reviewed by Darin Adler.
1923        Addition of MacroAssemblerCodeRef.h rubber stamped by Geoff Garen.
1924
1925        Refactor JIT code-handle objects.  The representation of generated code is currently
1926        a bit of a mess.  We have a class JITCode which wraps the pointer to a block of
1927        generated code, but this object does not reference the executable pool meaning that
1928        external events (the pool being derefed) could make the pointer become invalid.
1929        To overcome this both the JIT and Yarr implement further (and similar) objects to
1930        wrap the code pointer with a RefPtr to the pool.  To add to the mire, as well as the
1931        CodeBlock containing a handle onto the code the FunctionBodyNode also contains a
1932        copy of the code pointer which is used almost (but not entirely) uniquely to access
1933        the JIT code for a function.
1934
1935        Rationalization of all this:
1936
1937            * Add a new type 'MacroAssembler::CodeRef' as a handle for a block of JIT generated code.
1938            * Change the JIT & Yarr to internally handle code using CodeRefs.
1939            * Move the CodeRef (formerly anow defunct JITCodeRef) from CodeBlock to its owner node.
1940            * Remove the (now) redundant code pointer from FunctionBodyNode.
1941
1942        While tidying this up I've made the PatchBuffer return code in new allocations using a CodeRef,
1943        and have enforced an interface that the PatchBuffer will always be used, and 'finalizeCode()' or
1944        'finalizeCodeAddendum()' will always be called exactly once on the PatchBuffer to complete code generation.
1945
1946        This gives us a potentially useful hook ('PatchBuffer::performFinalization()') at the end of generation,
1947        which may have a number of uses.  It may be helpful should we wish to switch our generation
1948        model to allow RW/RX exclusive memory, and it may be useful on non-cache-coherent platforms to
1949        give us an oportunity to cache flush as necessary.
1950
1951        No performance impact.
1952
1953        * assembler/AbstractMacroAssembler.h:
1954        (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline):
1955        (JSC::AbstractMacroAssembler::CodeRef::CodeRef):
1956        (JSC::AbstractMacroAssembler::CodeRef::trampolineAt):
1957        (JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer):
1958        (JSC::AbstractMacroAssembler::PatchBuffer::~PatchBuffer):
1959        (JSC::AbstractMacroAssembler::PatchBuffer::link):
1960        (JSC::AbstractMacroAssembler::PatchBuffer::linkTailRecursive):
1961        (JSC::AbstractMacroAssembler::PatchBuffer::patch):
1962        (JSC::AbstractMacroAssembler::PatchBuffer::complete):
1963        (JSC::AbstractMacroAssembler::PatchBuffer::finalize):
1964        (JSC::AbstractMacroAssembler::PatchBuffer::entry):
1965        * bytecode/CodeBlock.cpp:
1966        (JSC::CodeBlock::CodeBlock):
1967        (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
1968        (JSC::CodeBlock::setJITCode):
1969        * bytecode/CodeBlock.h:
1970        (JSC::CodeBlock::getBytecodeIndex):
1971        (JSC::CodeBlock::executablePool):
1972        * interpreter/CallFrameClosure.h:
1973        * interpreter/Interpreter.cpp:
1974        (JSC::Interpreter::execute):
1975        (JSC::Interpreter::prepareForRepeatCall):
1976        * jit/JIT.cpp:
1977        (JSC::JIT::privateCompile):
1978        (JSC::JIT::privateCompileCTIMachineTrampolines):
1979        (JSC::JIT::linkCall):
1980        * jit/JIT.h:
1981        * jit/JITCode.h:
1982        (JSC::JITCode::JITCode):
1983        (JSC::JITCode::operator bool):
1984        (JSC::JITCode::addressForCall):
1985        (JSC::JITCode::offsetOf):
1986        (JSC::JITCode::execute):
1987        (JSC::JITCode::size):
1988        (JSC::JITCode::executablePool):
1989        (JSC::JITCode::HostFunction):
1990        * jit/JITPropertyAccess.cpp:
1991        (JSC::JIT::privateCompilePutByIdTransition):
1992        (JSC::JIT::privateCompilePatchGetArrayLength):
1993        (JSC::JIT::privateCompileGetByIdProto):
1994        (JSC::JIT::privateCompileGetByIdSelfList):
1995        (JSC::JIT::privateCompileGetByIdProtoList):
1996        (JSC::JIT::privateCompileGetByIdChainList):
1997        (JSC::JIT::privateCompileGetByIdChain):
1998        * jit/JITStubs.cpp:
1999        (JSC::JITStubs::cti_vm_dontLazyLinkCall):
2000        (JSC::JITStubs::cti_vm_lazyLinkCall):
2001        * parser/Nodes.cpp:
2002        (JSC::ProgramNode::generateJITCode):
2003        (JSC::EvalNode::generateJITCode):
2004        (JSC::FunctionBodyNode::FunctionBodyNode):
2005        (JSC::FunctionBodyNode::createNativeThunk):
2006        (JSC::FunctionBodyNode::generateJITCode):
2007        * parser/Nodes.h:
2008        (JSC::ScopeNode::generatedJITCode):
2009        (JSC::ScopeNode::getExecutablePool):
2010        (JSC::ScopeNode::setJITCode):
2011        (JSC::ProgramNode::jitCode):
2012        (JSC::EvalNode::jitCode):
2013        (JSC::FunctionBodyNode::jitCode):
2014        * runtime/RegExp.cpp:
2015        (JSC::RegExp::match):
2016        * yarr/RegexJIT.cpp:
2017        (JSC::Yarr::RegexGenerator::compile):
2018        (JSC::Yarr::jitCompileRegex):
2019        (JSC::Yarr::executeRegex):
2020        * yarr/RegexJIT.h:
2021        (JSC::Yarr::RegexCodeBlock::RegexCodeBlock):
2022        (JSC::Yarr::RegexCodeBlock::pcreFallback):
2023        (JSC::Yarr::RegexCodeBlock::setFallback):
2024        (JSC::Yarr::RegexCodeBlock::operator bool):
2025        (JSC::Yarr::RegexCodeBlock::set):
2026        (JSC::Yarr::RegexCodeBlock::execute):
2027
20282009-05-21  Oliver Hunt  <oliver@apple.com>
2029
2030        Reviewed by Maciej Stachowiak.
2031
2032        <rdar://problem/6910264> REGRESSION: Cached DOM global object property access fails in browser (25921)
2033        <https://bugs.webkit.org/show_bug.cgi?id=25921>
2034
2035        When caching properties on the global object we need to ensure that we're
2036        not attempting to cache through a shell object.
2037
2038        * interpreter/Interpreter.cpp:
2039        (JSC::Interpreter::resolveGlobal):
2040        * jit/JITStubs.cpp:
2041        (JSC::JITStubs::cti_op_resolve_global):
2042
20432009-05-21  Steve Falkenburg  <sfalken@apple.com>
2044
2045        Windows build fix.
2046
2047        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
2048
20492009-05-21  Cameron Zwarich  <zwarich@apple.com>
2050
2051        Reviewed by Mark Rowe.
2052
2053        Bug 25945: Add support for MADV_FREE to TCMalloc
2054        <https://bugs.webkit.org/show_bug.cgi?id=25945>
2055        <rdar://problem/6910754>
2056
2057        Add support for MADV_FREE to TCMalloc_SystemRelease for platforms that
2058        don't also support MADV_FREE_REUSE. The code is identical to the MADV_DONTNEED
2059        case except for the advice passed to madvise(), so combining the two cases
2060        makes the most sense.
2061
2062        * wtf/Platform.h: Only define HAVE_MADV_FREE when not building on Tiger or
2063        Leopard, because while it is defined on these platforms it actually does
2064        nothing.
2065        * wtf/TCSystemAlloc.cpp:
2066        (TCMalloc_SystemRelease): use MADV_FREE if it is available; otherwise use
2067        MADV_DONTNEED.
2068
20692009-05-21  Mark Rowe  <mrowe@apple.com>
2070
2071        Reviewed by Oliver Hunt.
2072
2073        Fix <https://bugs.webkit.org/show_bug.cgi?id=25917> / <rdar://problem/6910066>.
2074        Bug 25917: REGRESSION (r43559?): Javascript debugger crashes when pausing page
2075
2076        The debugger currently retrieves the arguments object from an activation rather than pulling
2077        it from a call frame.  This is unreliable to due to the recent optimization to lazily create
2078        the arguments object.  In the long-term it should stop doing that (<rdar://problem/6911886>),
2079        but for now we force eager creation of the arguments object when debugging.
2080
2081        * bytecompiler/BytecodeGenerator.cpp:
2082        (JSC::BytecodeGenerator::BytecodeGenerator):
2083
20842009-05-21  Cameron Zwarich  <zwarich@apple.com>
2085
2086        Reviewed by Maciej Stachowiak.
2087
2088        Bug 25912: Harden NumberPrototype.cpp by removing use of strcpy()
2089        <https://bugs.webkit.org/show_bug.cgi?id=25912>
2090
2091        This causes no change on SunSpider.
2092
2093        * runtime/NumberPrototype.cpp:
2094        (JSC::integerPartNoExp): replace strcpy() with memcpy(), ASSERT that the
2095        temporary buffer has sufficient space to store the result, and move the
2096        explicit null-termination closer to the memcpy() for easier visual inspection
2097        of the code.
2098        (JSC::fractionalPartToString): replace strcpy() with memcpy(), and ASSERT
2099        that the temporary buffer has sufficient space to store the result. There
2100        is no explicit null-termination because this is done by the caller. The
2101        same is already true for exponentialPartToString().
2102        (JSC::numberProtoFuncToExponential): replace strcpy() with memcpy(), explicitly
2103        null-terminate the result, and ASSERT that the temporary buffer has sufficient
2104        space to store the result.
2105
21062009-05-20  Sam Weinig  <sam@webkit.org>
2107
2108        Reviewed by Cameron Zwarich.
2109
2110        Cleanup the JSGlobalData when exiting early with the usage statement in jsc.
2111
2112        * jsc.cpp:
2113        (printUsageStatement):
2114        (parseArguments):
2115        (jscmain):
2116
21172009-05-20  Stephanie Lewis  <slewis@apple.com>
2118
2119        Update the order files.  <rdar://problem/6881750> Generate new order files.
2120
2121        * JavaScriptCore.order:
2122
21232009-05-19  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>
2124
2125        Reviewed by Simon Hausmann.
2126
2127        Replace WREC with YARR + YARR_JIT for the Qt port. This is only
2128        used when compiled with JIT support for now, so it is a drop-in
2129        replacement for the WREC usage. Still including the wrec headers
2130        as they are being referred from RegExp.h, though the contents of
2131        that header it protected by "#if ENABLE(WREC)".
2132
2133        * JavaScriptCore.pri:
2134
21352009-05-20  Xan Lopez  <xlopez@igalia.com>
2136
2137        Reviewed by Eric Seidel.
2138
2139        Fix GTK debug build.
2140
2141        The function dumpDisjunction, compiled with debug enabled, uses
2142        printf, which needs stdio.h to be included.
2143
2144        * yarr/RegexInterpreter.cpp:
2145
21462009-05-20  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
2147
2148        Reviewed by George Staikos.
2149
2150        BUG 25843: [Qt] Remove qt-port build flag
2151        <https://bugs.webkit.org/show_bug.cgi?id=25843>
2152
2153        * JavaScriptCore.pro:
2154
2155
21562009-05-19  Geoffrey Garen  <ggaren@apple.com>
2157
2158        Windows build fix.
2159
2160        * interpreter/RegisterFile.cpp:
2161        (JSC::RegisterFile::releaseExcessCapacity): Copy-paste typo.
2162
21632009-05-19  Geoffrey Garen  <ggaren@apple.com>
2164
2165        Reviewed by Sam Weinig.
2166        
2167        Fixed <rdar://problem/6885680> CrashTracer: [USER] 1 crash in Install
2168        Mac OS X at <unknown binary> • 0x9274241c
2169        
2170        (Original patch by Joe Sokol and Ronnie Misra.)
2171        
2172        SunSpider says 1.004x faster.
2173
2174        * interpreter/RegisterFile.cpp:
2175        (JSC::RegisterFile::releaseExcessCapacity): Instead of doing complicated
2176        math that sometimes used to overflow, just release the full range of the
2177        register file.
2178
2179        * interpreter/RegisterFile.h:
2180        (JSC::isPageAligned):
2181        (JSC::RegisterFile::RegisterFile): Added ASSERTs to verify that it's
2182        safe to release the full range of the register file.
2183
2184        (JSC::RegisterFile::shrink): No need to releaseExcessCapacity() if the
2185        new end is not smaller than the old end. (Also, doing so used to cause
2186        numeric overflow, unmapping basically the whole process from memory.)
2187
21882009-05-19  Oliver Hunt  <oliver@apple.com>
2189
2190        RS=Mark Rowe.
2191
2192        <rdar://problem/6888393> REGRESSION: Start Debugging JavaScript crashes browser (nightly builds only?)
2193        <https://bugs.webkit.org/show_bug.cgi?id=25717>
2194
2195        Remove JSC_FAST_CALL as it wasn't gaining us anything, and was
2196        resulting in weird bugs in the nightly builds.
2197
2198        * parser/Nodes.cpp:
2199        * parser/Nodes.h:
2200        (JSC::ExpressionNode::isNumber):
2201        (JSC::ExpressionNode::isString):
2202        (JSC::ExpressionNode::isNull):
2203        (JSC::ExpressionNode::isPure):
2204        (JSC::ExpressionNode::isLocation):
2205        (JSC::ExpressionNode::isResolveNode):
2206        (JSC::ExpressionNode::isBracketAccessorNode):
2207        (JSC::ExpressionNode::isDotAccessorNode):
2208        (JSC::ExpressionNode::isFuncExprNode):
2209        (JSC::ExpressionNode::isSimpleArray):
2210        (JSC::ExpressionNode::isAdd):
2211        (JSC::ExpressionNode::resultDescriptor):
2212        (JSC::StatementNode::firstLine):
2213        (JSC::StatementNode::lastLine):
2214        (JSC::StatementNode::isEmptyStatement):
2215        (JSC::StatementNode::isReturnNode):
2216        (JSC::StatementNode::isExprStatement):
2217        (JSC::StatementNode::isBlock):
2218        (JSC::NullNode::isNull):
2219        (JSC::BooleanNode::isPure):
2220        (JSC::NumberNode::value):
2221        (JSC::NumberNode::setValue):
2222        (JSC::NumberNode::isNumber):
2223        (JSC::NumberNode::isPure):
2224        (JSC::StringNode::isPure):
2225        (JSC::StringNode::isString):
2226        (JSC::ResolveNode::identifier):
2227        (JSC::ResolveNode::isLocation):
2228        (JSC::ResolveNode::isResolveNode):
2229        (JSC::BracketAccessorNode::isLocation):
2230        (JSC::BracketAccessorNode::isBracketAccessorNode):
2231        (JSC::DotAccessorNode::base):
2232        (JSC::DotAccessorNode::identifier):
2233        (JSC::DotAccessorNode::isLocation):
2234        (JSC::DotAccessorNode::isDotAccessorNode):
2235        (JSC::TypeOfResolveNode::identifier):
2236        (JSC::AddNode::isAdd):
2237        (JSC::BlockNode::isBlock):
2238        (JSC::EmptyStatementNode::isEmptyStatement):
2239        (JSC::ExprStatementNode::isExprStatement):
2240        (JSC::ReturnNode::isReturnNode):
2241        (JSC::ScopeNode::sourceURL):
2242        (JSC::ProgramNode::bytecode):
2243        (JSC::EvalNode::bytecode):
2244        (JSC::FunctionBodyNode::parameters):
2245        (JSC::FunctionBodyNode::toSourceString):
2246        (JSC::FunctionBodyNode::bytecode):
2247        (JSC::FuncExprNode::isFuncExprNode):
2248
22492009-05-19  Maciej Stachowiak  <mjs@apple.com>
2250
2251        Reviewed by Gavin Barraclough.
2252        
2253        - speed up string comparison, especially for short strings
2254        
2255        ~1% on SunSpider
2256
2257        * JavaScriptCore.exp:
2258        * runtime/UString.cpp:
2259        * runtime/UString.h:
2260        (JSC::operator==): Inline UString's operator==, since it is called from
2261        hot places in the runtime. Also, specialize 2-char strings in a similar way to
2262        1-char, since we're taking the hit of a switch anyway.
2263
22642009-05-18  Maciej Stachowiak  <mjs@apple.com>
2265
2266        Reviewed by Gavin Barraclough.
2267        
2268        - for polymorphic prototype lookups, increase the number of slots from 4 to 8
2269        
2270        ~4% faster on v8 raytrace benchmark
2271
2272        * bytecode/Instruction.h:
2273
22742009-05-18  Maciej Stachowiak  <mjs@apple.com>
2275
2276        Reviewed by Oliver Hunt.
2277        
2278        - tighten up the code for the load_varargs stub
2279        
2280        ~1-2% on v8-raytrace
2281        
2282        * jit/JITStubs.cpp:
2283        (JSC::JITStubs::cti_op_load_varargs): Hoist some loop invariants that
2284        the compiler didn't feel like hoisting for us. Remove unneeded exception check.
2285
22862009-05-18  Maciej Stachowiak  <mjs@apple.com>
2287
2288        Reviewed by Geoff Garen.
2289
2290        - Improve code generation for access to prototype properties
2291        
2292        ~0.4% speedup on SunSpider.
2293        
2294        Based on a suggestion from Geoff Garen.
2295
2296        * jit/JIT.h:
2297        * jit/JITPropertyAccess.cpp:
2298        (JSC::JIT::compileGetDirectOffset):
2299        (JSC::JIT::privateCompileGetByIdProto):
2300        (JSC::JIT::privateCompileGetByIdProtoList):
2301        (JSC::JIT::privateCompileGetByIdChainList):
2302        (JSC::JIT::privateCompileGetByIdChain):
2303
23042009-05-18  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>
2305
2306        Reviewed by Gavin Barraclough.
2307
2308        Enable YARR, and disable WREC for GTK+.
2309
2310        * GNUmakefile.am:
2311        * yarr/RegexParser.h:
2312
23132009-05-18  Jan Michael Alonzo  <jmalonzo@webkit.org>
2314
2315         Reviewed by Xan Lopez.
2316
2317         [Gtk] Various autotools build refactoring and fixes
2318         https://bugs.webkit.org/show_bug.cgi?id=25286
2319
2320         Add -no-install and -no-fast-install to programs and tests that we
2321         don't install. Also remove -O2 since this is already handled at
2322         configure time.
2323
2324         * GNUmakefile.am:
2325
23262009-05-17  Jan Michael Alonzo  <jmalonzo@webkit.org>
2327
2328        Reviewed by Xan Lopez.
2329
2330        [Gtk] Various autotools build refactoring and fixes
2331        https://bugs.webkit.org/show_bug.cgi?id=25286
2332
2333        Add JavaScriptCore/ to JSC include path only since it's not
2334        required when building WebCore.
2335
2336        * GNUmakefile.am:
2337
23382009-05-17  Steve Falkenburg  <sfalken@apple.com>
2339
2340        Windows build fix
2341
2342        * JavaScriptCore.vcproj/JavaScriptCore.make:
2343        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2344
23452009-05-15  Gavin Barraclough  <barraclough@apple.com>
2346
2347        Reviewed by Oliver Hunt.
2348
2349        Looking like MSVC doesn't like static variables in inline methods?
2350        Make the state of the SSE2 check a static variable on the class
2351        MacroAssemblerX86Common as a speculative build fix for Windows.
2352
2353        * assembler/MacroAssemblerX86Common.h:
2354        (JSC::MacroAssemblerX86Common::convertInt32ToDouble):
2355        (JSC::MacroAssemblerX86Common::branchDouble):
2356        (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32):
2357        (JSC::MacroAssemblerX86Common::isSSE2Present):
2358        (JSC::MacroAssemblerX86Common::):
2359        * jit/JIT.cpp:
2360
23612009-05-15  Adam Roben  <aroben@apple.com>
2362
2363        Add some assembler headers to JavaScriptCore.vcproj
2364
2365        This is just a convenience for Windows developers.
2366
2367        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2368
23692009-05-15  Gavin Barraclough  <barraclough@apple.com>
2370
2371        Reviewed by Oliver Hunt.
2372
2373        Add FP support to the MacroAssembler, port JITArithmetic over to make use of this. Also add
2374        API to determine whether FP support is available 'MacroAssembler::supportsFloatingPoint()',
2375        FP is presently only supported on SSE2 platforms, not x87.  On platforms where a suitable
2376        hardware FPU is not available 'supportsFloatingPoint()' may simply return false, and all
2377        other methods ASSERT_NOT_REACHED().
2378
2379        * assembler/AbstractMacroAssembler.h:
2380        * assembler/MacroAssemblerX86.h:
2381        (JSC::MacroAssemblerX86::MacroAssemblerX86):
2382        (JSC::MacroAssemblerX86::branch32):
2383        (JSC::MacroAssemblerX86::branchPtrWithPatch):
2384        (JSC::MacroAssemblerX86::supportsFloatingPoint):
2385        * assembler/MacroAssemblerX86Common.h:
2386        (JSC::MacroAssemblerX86Common::):
2387        (JSC::MacroAssemblerX86Common::loadDouble):
2388        (JSC::MacroAssemblerX86Common::storeDouble):
2389        (JSC::MacroAssemblerX86Common::addDouble):
2390        (JSC::MacroAssemblerX86Common::subDouble):
2391        (JSC::MacroAssemblerX86Common::mulDouble):
2392        (JSC::MacroAssemblerX86Common::convertInt32ToDouble):
2393        (JSC::MacroAssemblerX86Common::branchDouble):
2394        (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32):
2395        (JSC::MacroAssemblerX86Common::branch32):
2396        (JSC::MacroAssemblerX86Common::branch16):
2397        (JSC::MacroAssemblerX86Common::branchTest32):
2398        (JSC::MacroAssemblerX86Common::branchAdd32):
2399        (JSC::MacroAssemblerX86Common::branchMul32):
2400        (JSC::MacroAssemblerX86Common::branchSub32):
2401        (JSC::MacroAssemblerX86Common::set32):
2402        (JSC::MacroAssemblerX86Common::setTest32):
2403        (JSC::MacroAssemblerX86Common::x86Condition):
2404        (JSC::MacroAssemblerX86Common::isSSE2Present):
2405        * assembler/MacroAssemblerX86_64.h:
2406        (JSC::MacroAssemblerX86_64::movePtrToDouble):
2407        (JSC::MacroAssemblerX86_64::moveDoubleToPtr):
2408        (JSC::MacroAssemblerX86_64::setPtr):
2409        (JSC::MacroAssemblerX86_64::branchPtr):
2410        (JSC::MacroAssemblerX86_64::branchTestPtr):
2411        (JSC::MacroAssemblerX86_64::branchAddPtr):
2412        (JSC::MacroAssemblerX86_64::branchSubPtr):
2413        (JSC::MacroAssemblerX86_64::supportsFloatingPoint):
2414        * assembler/X86Assembler.h:
2415        * jit/JIT.cpp:
2416        (JSC::JIT::JIT):
2417        * jit/JIT.h:
2418        * jit/JITArithmetic.cpp:
2419        (JSC::JIT::emit_op_rshift):
2420        (JSC::JIT::emitSlow_op_rshift):
2421        (JSC::JIT::emitSlow_op_jnless):
2422        (JSC::JIT::emitSlow_op_jnlesseq):
2423        (JSC::JIT::compileBinaryArithOp):
2424        (JSC::JIT::compileBinaryArithOpSlowCase):
2425        (JSC::JIT::emit_op_add):
2426        (JSC::JIT::emitSlow_op_add):
2427        (JSC::JIT::emit_op_mul):
2428        (JSC::JIT::emitSlow_op_mul):
2429        * jit/JITPropertyAccess.cpp:
2430        (JSC::JIT::privateCompilePutByIdTransition):
2431
24322009-05-15  Francisco Tolmasky  <francisco@280north.com>
2433
2434        BUG 25467: JavaScript debugger should use function.displayName as the function's name in the call stack
2435        <https://bugs.webkit.org/show_bug.cgi?id=25467>
2436        
2437        Reviewed by Adam Roben.
2438
2439        * JavaScriptCore.exp: Added calculatedFunctionName
2440        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Added calculatedFunctionName
2441        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Added calculatedFunctionName
2442        * debugger/DebuggerCallFrame.cpp: Added calculatedFunctionName to match existing one in ProfileNode.
2443        (JSC::DebuggerCallFrame::calculatedFunctionName):
2444        * debugger/DebuggerCallFrame.h: Added calculatedFunctionName to match existing one in ProfileNode.
2445
24462009-05-14  Gavin Barraclough  <barraclough@apple.com>
2447
2448        Build fix, not reviewed.
2449
2450        Quick fixes for JIT builds with OPTIMIZE flags disabled.
2451
2452        * jit/JITCall.cpp:
2453        (JSC::JIT::compileOpCall):
2454        (JSC::JIT::compileOpCallSlowCase):
2455        * jit/JITPropertyAccess.cpp:
2456        (JSC::JIT::compilePutByIdHotPath):
2457
24582009-05-14  Steve Falkenburg  <sfalken@apple.com>
2459
2460        Back out incorrect Windows build fix
2461
2462        * JavaScriptCore.vcproj/JavaScriptCore.make:
2463        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2464
24652009-05-14  Steve Falkenburg  <sfalken@apple.com>
2466
2467        Windows build fix
2468
2469        * JavaScriptCore.vcproj/JavaScriptCore.make:
2470        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
2471
24722009-05-14  Adam Roben  <aroben@apple.com>
2473
2474        Windows jsc build fix
2475
2476        r43648 modified jsc.vcproj's post-build event not to try to copy files
2477        that aren't present. Then r43661 mistakenly un-did that modification.
2478        This patch restores the modification from r43648, but puts the code in
2479        jscCommon.vsprops (where it should have been added in r43648).
2480
2481        * JavaScriptCore.vcproj/jsc/jsc.vcproj: Restored empty
2482        VCPostBuildEventTool tags.
2483        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Modified the post-build
2484        event command line to match the one in jsc.vcproj from r43648.
2485
24862009-05-14  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
2487
2488        Reviewed by Darin Adler.
2489
2490        https://bugs.webkit.org/show_bug.cgi?id=25325
2491
2492        Make sure pthread_self() is declared before it gets called in Collector.cpp
2493
2494        * runtime/Collector.cpp: Include pthread.h in most Unix-like platforms
2495        (not just for OPENBSD)
2496
24972009-05-14  Mark Rowe  <mrowe@apple.com>
2498
2499        Reviewed by Oliver Hunt.
2500
2501        Fix <https://bugs.webkit.org/show_bug.cgi?id=25785>.
2502        Bug 25785: Segfault in mark when using JSObjectMakeConstructor
2503
2504        * API/JSObjectRef.cpp:
2505        (JSObjectMakeConstructor): OpaqueJSClass::prototype can return 0.  We need to use the default object prototype when it does.
2506        * API/tests/testapi.c:
2507        (main): Add a test case.
2508        * runtime/JSObject.h:
2509        (JSC::JSObject::putDirect): Add a clearer assertion for a null value.  The assertion on the next line does catch this,
2510        but the cause of the failure is not clear from the assertion itself.
2511
25122009-05-14  Mark Rowe  <mrowe@apple.com>
2513
2514        Rubber-stamped by Darin Adler.
2515
2516        <rdar://problem/6681868> When building with Xcode 3.1.3 should be using gcc 4.2
2517
2518        The meaning of XCODE_VERSION_ACTUAL is more sensible in newer versions of Xcode.
2519        Update our logic to select the compiler version to use the more appropriate XCODE_VERSION_MINOR
2520        if the version of Xcode supports it, and fall back to XCODE_VERSION_ACTUAL if not.
2521
2522        * Configurations/Base.xcconfig:
2523
25242009-05-14  Gavin Barraclough  <barraclough@apple.com>
2525
2526        Reviewed by Geoff Garen.
2527
2528        Checking register file bounds should be a ptr comparison (m_end is a Register*).
2529        Also, the compare should be unsigned, pointers don'ts go negative.
2530
2531        * jit/JIT.cpp:
2532        (JSC::JIT::privateCompile):
2533
25342009-05-13  Gavin Barraclough  <barraclough@apple.com>
2535
2536        Reviewed by Oliver Hunt.
2537
2538        Fix <rdar://problem/6882919> REGRESSION: page at Metroauto site crashes in cti_op_loop_if_less (25730)
2539
2540        op_loop_if_less (imm < op) was loading op into regT1, but in the slow path spills regT0.
2541        This leads to bad happen.
2542
2543        * jit/JITOpcodes.cpp:
2544        (JSC::JIT::emit_op_loop_if_less):
2545        (JSC::JIT::emitSlow_op_loop_if_less):
2546
25472009-05-13  Dmitry Titov  <dimich@chromium.org>
2548
2549        Rubber-stamped by Mark Rowe.
2550
2551        https://bugs.webkit.org/show_bug.cgi?id=25746
2552        Revert http://trac.webkit.org/changeset/43507 which caused crash in PPC nightlies with Safari 4.
2553
2554        * JavaScriptCore.exp:
2555        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2556        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
2557        * bytecode/SamplingTool.cpp:
2558        (JSC::SamplingThread::start):
2559        (JSC::SamplingThread::stop):
2560        * bytecode/SamplingTool.h:
2561        * wtf/CrossThreadRefCounted.h:
2562        (WTF::CrossThreadRefCounted::CrossThreadRefCounted):
2563        (WTF::::ref):
2564        (WTF::::deref):
2565        * wtf/Threading.h:
2566        * wtf/ThreadingNone.cpp:
2567        * wtf/ThreadingPthreads.cpp:
2568        (WTF::threadMapMutex):
2569        (WTF::initializeThreading):
2570        (WTF::threadMap):
2571        (WTF::identifierByPthreadHandle):
2572        (WTF::establishIdentifierForPthreadHandle):
2573        (WTF::pthreadHandleForIdentifier):
2574        (WTF::clearPthreadHandleForIdentifier):
2575        (WTF::createThreadInternal):
2576        (WTF::waitForThreadCompletion):
2577        (WTF::detachThread):
2578        (WTF::currentThread):
2579        * wtf/ThreadingWin.cpp:
2580        (WTF::threadMapMutex):
2581        (WTF::initializeThreading):
2582        (WTF::threadMap):
2583        (WTF::storeThreadHandleByIdentifier):
2584        (WTF::threadHandleForIdentifier):
2585        (WTF::clearThreadHandleForIdentifier):
2586        (WTF::createThreadInternal):
2587        (WTF::waitForThreadCompletion):
2588        (WTF::detachThread):
2589        (WTF::currentThread):
2590        * wtf/gtk/ThreadingGtk.cpp:
2591        (WTF::threadMapMutex):
2592        (WTF::initializeThreading):
2593        (WTF::threadMap):
2594        (WTF::identifierByGthreadHandle):
2595        (WTF::establishIdentifierForThread):
2596        (WTF::threadForIdentifier):
2597        (WTF::clearThreadForIdentifier):
2598        (WTF::createThreadInternal):
2599        (WTF::waitForThreadCompletion):
2600        (WTF::currentThread):
2601        * wtf/qt/ThreadingQt.cpp:
2602        (WTF::threadMapMutex):
2603        (WTF::threadMap):
2604        (WTF::identifierByQthreadHandle):
2605        (WTF::establishIdentifierForThread):
2606        (WTF::clearThreadForIdentifier):
2607        (WTF::threadForIdentifier):
2608        (WTF::initializeThreading):
2609        (WTF::createThreadInternal):
2610        (WTF::waitForThreadCompletion):
2611        (WTF::currentThread):
2612
26132009-05-13  Darin Adler  <darin@apple.com>
2614
2615        Revert the parser arena change. It was a slowdown, not a speedup.
2616        Better luck next time (I'll break it up into pieces).
2617
26182009-05-13  Darin Adler  <darin@apple.com>
2619
2620        Tiger build fix.
2621
2622        * parser/Grammar.y: Add back empty code blocks, needed by older
2623        versions of bison on certain rules.
2624
26252009-05-13  Steve Falkenburg  <sfalken@apple.com>
2626
2627        Windows build fix.
2628
2629        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
2630
26312009-05-13  Adam Roben  <aroben@apple.com>
2632
2633        Windows build fixes after r43642
2634
2635        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
2636        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
2637        Updated.
2638
2639        * debugger/Debugger.cpp:
2640        * runtime/ArrayConstructor.cpp:
2641        * runtime/JSArray.cpp:
2642        * runtime/RegExp.cpp:
2643        * runtime/RegExpConstructor.cpp:
2644        * runtime/RegExpPrototype.cpp:
2645        * runtime/StringPrototype.cpp:
2646        Added missing #includes.
2647
26482009-05-13  Darin Adler  <darin@apple.com>
2649
2650        Reviewed by Cameron Zwarich.
2651
2652        Bug 25674: syntax tree nodes should use arena allocation
2653        https://bugs.webkit.org/show_bug.cgi?id=25674
2654
2655        Step 3: Add some actual arena allocation. About 1% SunSpider speedup.
2656
2657        * JavaScriptCore.exp: Updated.
2658
2659        * bytecompiler/BytecodeGenerator.cpp:
2660        (JSC::BytecodeGenerator::BytecodeGenerator): Updated since VarStack
2661        contains const Identifier* now.
2662        (JSC::BytecodeGenerator::emitPushNewScope): Updated to take a const
2663        Identifier&.
2664        * bytecompiler/BytecodeGenerator.h: Ditto
2665
2666        * bytecompiler/SegmentedVector.h: Added isEmpty.
2667
2668        * debugger/Debugger.cpp:
2669        (JSC::Debugger::recompileAllJSFunctions): Moved this function here from
2670        WebCore so WebCore doesn't need the details of FunctionBodyNode.
2671        * debugger/Debugger.h: Ditto.
2672
2673        * interpreter/Interpreter.cpp:
2674        (JSC::Interpreter::execute): Updated since VarStack contains const
2675        Identifier* now.
2676
2677        * jit/JITStubs.cpp:
2678        (JSC::JITStubs::cti_vm_lazyLinkCall): Call isHostFunction on the body
2679        rather than on the function object, since we can't easily have inlined
2680        access to the FunctionBodyNode in JSFunction.h since WebCore needs
2681        access to that header.
2682        (JSC::JITStubs::cti_op_construct_JSConstruct): Ditto.
2683        * profiler/Profiler.cpp:
2684        (JSC::Profiler::createCallIdentifier): Ditto.
2685
2686        * parser/Grammar.y: Use JSGlobalData* to pass the global data pointer
2687        around whenever possible instead of using void*. Changed
2688        SET_EXCEPTION_LOCATION from a macro to an inline function. Marked
2689        the structure-creating functions inline. Changed the VarStack to use
2690        identifier pointers instead of actual identifiers. This takes
2691        advantage of the fact that all identifier pointers come from the
2692        arena and avoids reference count churn. Changed Identifier* to
2693        const Identifier* to make sure we don't modify any by accident.
2694        Used identifiers for regular expression strings too, using the new
2695        scanRegExp that has out parameters instead of the old one that relied
2696        on side effects in the Lexer. Move the creation of numeric identifiers
2697        out of this file and into the PropertyNode constructor.
2698
2699        * parser/Lexer.cpp:
2700        (JSC::Lexer::setCode): Pass in ParserArena, used for identifiers.
2701        (JSC::Lexer::makeIdentifier): Changed return type to const Identifier*
2702        and changed to call ParserArena.
2703        (JSC::Lexer::scanRegExp): Added out arguments that are const Identifier*
2704        as well as a prefix character argument so we can handle the /= case
2705        without a string append.
2706        (JSC::Lexer::skipRegExp): Added. Skips a regular expression without
2707        allocating Identifier objects.
2708        (JSC::Lexer::clear): Removed the code to manage m_identifiers, m_pattern,
2709        and m_flags, and added code to set m_arena to 0.
2710        * parser/Lexer.h: Updated for changes above.
2711
2712        * parser/NodeConstructors.h:
2713        (JSC::ParserArenaFreeable::operator new): Added. Calls allocateFreeable
2714        on the arena.
2715        (JSC::ParserArenaDeletable::operator new): Changed to call the
2716        allocateDeletable function on the arena instead of deleteWithArena.
2717        (JSC::RegExpNode::RegExpNode): Changed arguments to Identifier instead
2718        of UString since these come from the parser which makes identifiers.
2719        (JSC::PropertyNode::PropertyNode): Added new constructor that makes
2720        numeric identifiers. Some day we might want to optimize this for
2721        integers so it doesn't create a string for each one.
2722        (JSC::ContinueNode::ContinueNode): Initialize m_ident to nullIdentifier
2723        since it's now a const Identifier& so it can't be left uninitialized.
2724        (JSC::BreakNode::BreakNode): Ditto.
2725        (JSC::CaseClauseNode::CaseClauseNode): Updated to use SourceElements*
2726        to keep track of the statements rather than a separate statement vector.
2727        (JSC::BlockNode::BlockNode): Ditto.
2728        (JSC::ForInNode::ForInNode): Initialize m_ident to nullIdentifier.
2729
2730        * parser/Nodes.cpp: Moved the comment explaining emitBytecode in here.
2731        It seemed strangely out of place in the header.
2732        (JSC::ThrowableExpressionData::emitThrowError): Added an overload for
2733        UString as well as Identifier.
2734        (JSC::SourceElements::singleStatement): Added.
2735        (JSC::SourceElements::lastStatement): Added.
2736        (JSC::RegExpNode::emitBytecode): Updated since the pattern and flags
2737        are now Identifier instead of UString. Also changed the throwError code
2738        to use the substitution mechanism instead of doing a string append.
2739        (JSC::SourceElements::emitBytecode): Added. Replaces the old
2740        statementListEmitCode function, since we now keep the SourceElements
2741        objects around.
2742        (JSC::BlockNode::lastStatement): Added.
2743        (JSC::BlockNode::emitBytecode): Changed to use emitBytecode instead of
2744        statementListEmitCode.
2745        (JSC::CaseClauseNode::emitBytecode): Added.
2746        (JSC::CaseBlockNode::emitBytecodeForBlock): Changed to use emitBytecode
2747        instead of statementListEmitCode.
2748        (JSC::ScopeNodeData::ScopeNodeData): Changed to store the
2749        SourceElements* instead of using releaseContentsIntoVector.
2750        (JSC::ScopeNode::emitStatementsBytecode): Added.
2751        (JSC::ScopeNode::singleStatement): Added.
2752        (JSC::ProgramNode::emitBytecode): Call emitStatementsBytecode instead
2753        of statementListEmitCode.
2754        (JSC::EvalNode::emitBytecode): Ditto.
2755        (JSC::EvalNode::generateBytecode): Removed code to clear the children
2756        vector. This optimization is no longer possible since everything is in
2757        a single arena.
2758        (JSC::FunctionBodyNode::emitBytecode): Call emitStatementsBytecode
2759        insetad of statementListEmitCode and check for the return node using
2760        the new functions.
2761
2762        * parser/Nodes.h: Changed VarStack to store const Identifier* instead
2763        of Identifier and rely on the arena to control lifetime. Added a new
2764        ParserArenaFreeable class. Made ParserArenaDeletable inherit from
2765        FastAllocBase instead of having its own operator new. Base the Node
2766        class on ParserArenaFreeable. Changed the various Node classes
2767        to use const Identifier& instead of Identifier to avoid the need to
2768        call their destructors and allow them to function as "freeable" in the
2769        arena. Removed extraneous JSC_FAST_CALL on definitions of inline functions.
2770        Changed ElementNode, PropertyNode, ArgumentsNode, ParameterNode,
2771        CaseClauseNode, ClauseListNode, and CaseBlockNode to use ParserArenaFreeable
2772        as a base class since they do not descend from Node. Eliminated the
2773        StatementVector type and instead have various classes use SourceElements*
2774        instead of StatementVector. This prevents those classes from having th
2775        use ParserArenaDeletable to make sure the vector destructor is called.
2776
2777        * parser/Parser.cpp:
2778        (JSC::Parser::parse): Pass the arena to the lexer.
2779
2780        * parser/Parser.h: Added an include of ParserArena.h, which is no longer
2781        included by Nodes.h.
2782
2783        * parser/ParserArena.cpp:
2784        (JSC::ParserArena::ParserArena): Added. Initializes the new members,
2785        m_freeableMemory, m_freeablePoolEnd, and m_identifiers.
2786        (JSC::ParserArena::freeablePool): Added. Computes the pool pointer,
2787        since we store only the current pointer and the end of pool pointer.
2788        (JSC::ParserArena::deallocateObjects): Added. Contains the common
2789        memory-deallocation logic used by both the destructor and the
2790        reset function.
2791        (JSC::ParserArena::~ParserArena): Changed to call deallocateObjects.
2792        (JSC::ParserArena::reset): Ditto. Also added code to zero out the
2793        new structures, and switched to use clear() instead of shrink(0) since
2794        we don't really reuse arenas.
2795        (JSC::ParserArena::makeNumericIdentifier): Added.
2796        (JSC::ParserArena::allocateFreeablePool): Added. Used when the pool
2797        is empty.
2798        (JSC::ParserArena::isEmpty): Added. No longer inline, which is fine
2799        since this is used only for assertions at the moment.
2800
2801        * parser/ParserArena.h: Added an actual arena of "freeable" objects,
2802        ones that don't need destructors to be called. Also added the segmented
2803        vector of identifiers that used to be in the Lexer.
2804
2805        * runtime/FunctionConstructor.cpp:
2806        (JSC::extractFunctionBody): Use singleStatement function rather than
2807        getting at a StatementVector.
2808
2809        * runtime/FunctionPrototype.cpp:
2810        (JSC::functionProtoFuncToString): Call isHostFunction on the body
2811        rather than the function object.
2812
2813        * runtime/JSFunction.cpp:
2814        (JSC::JSFunction::JSFunction): Moved the structure version of this in
2815        here from the header. It's not hot enough that it needs to be inlined.
2816        (JSC::JSFunction::isHostFunction): Moved this in here from the header.
2817        It's now a helper to be used only within the class.
2818        (JSC::JSFunction::setBody): Moved this in here. It's not hot enough that
2819        it needs to be inlined, and we want to be able to compile the header
2820        without the definition of FunctionBodyNode.
2821
2822        * runtime/JSFunction.h: Eliminated the include of "Nodes.h". This was
2823        exposing too much JavaScriptCore dependency to WebCore. Because of this
2824        change and some changes made to WebCore, we could now export a lot fewer
2825        headers from JavaScriptCore, but I have not done that yet in this check-in.
2826        Made a couple functions non-inline. Removes some isHostFunction() assertions.
2827        
2828        * wtf/FastAllocBase.h: Added the conventional using statements we use in
2829        WTF so we can use identifiers from the WTF namespace without explicit
2830        namespace qualification or namespace directive. This is the usual WTF style,
2831        although it's unconventional in the C++ world. We use the namespace primarily
2832        for link-time disambiguation, not compile-time.
2833
2834        * wtf/FastMalloc.cpp: Fixed an incorrect comment.
2835
28362009-05-13  Xan Lopez  <xlopez@igalia.com>
2837
2838        Unreviewed build fix: add JITStubCall.h to files list.
2839
2840        * GNUmakefile.am:
2841
28422009-05-13  Ariya Hidayat  <ariya.hidayat@nokia.com>
2843
2844        Unreviewed build fix, as suggested by Yael Aharon <yael.aharon@nokia.com>.
2845
2846        * wtf/qt/ThreadingQt.cpp:
2847        (WTF::waitForThreadCompletion): renamed IsValid to isValid.
2848
28492009-05-13  Jan Michael Alonzo  <jmalonzo@webkit.org>
2850
2851        Revert r43562 - [Gtk] WTF_USE_JSC is already defined in
2852        WebCore/config.h.
2853
2854        * wtf/Platform.h:
2855
28562009-05-12  Gavin Barraclough  <barraclough@apple.com>
2857
2858        Reviewed by Oliver Hunt.
2859
2860        Add SamplingCounter tool to provide a simple mechanism for counting events in JSC
2861        (enabled using ENABLE(SAMPLING_COUNTERS)).  To count events within a single function
2862        use the class 'SamplingCounter', where the counter may be incremented from multiple
2863        functions 'GlobalSamplingCounter' may be convenient; all other counters (stack or
2864        heap allocated, rather than statically declared) should use the DeletableSamplingCounter.
2865        Further description of these classes is provided alongside their definition in 
2866        SamplingTool.h.
2867
2868        Counters may be incremented from c++ by calling the 'count()' method on the counter,
2869        or may be incremented by JIT code by using the 'emitCount()' method within the JIT.
2870
2871        This patch also fixes CODEBLOCK_SAMPLING, which was missing a null pointer check.
2872
2873        * JavaScriptCore.exp:
2874        * assembler/MacroAssemblerX86.h:
2875        (JSC::MacroAssemblerX86::addWithCarry32):
2876        (JSC::MacroAssemblerX86::and32):
2877        (JSC::MacroAssemblerX86::or32):
2878        * assembler/MacroAssemblerX86Common.h:
2879        (JSC::MacroAssemblerX86Common::and32):
2880        (JSC::MacroAssemblerX86Common::or32):
2881        * assembler/MacroAssemblerX86_64.h:
2882        (JSC::MacroAssemblerX86_64::and32):
2883        (JSC::MacroAssemblerX86_64::or32):
2884        (JSC::MacroAssemblerX86_64::addPtr):
2885        * assembler/X86Assembler.h:
2886        (JSC::X86Assembler::):
2887        (JSC::X86Assembler::adcl_im):
2888        (JSC::X86Assembler::addq_im):
2889        (JSC::X86Assembler::andl_im):
2890        (JSC::X86Assembler::orl_im):
2891        * bytecode/SamplingTool.cpp:
2892        (JSC::AbstractSamplingCounter::dump):
2893        * bytecode/SamplingTool.h:
2894        (JSC::AbstractSamplingCounter::count):
2895        (JSC::GlobalSamplingCounter::name):
2896        (JSC::SamplingCounter::SamplingCounter):
2897        * jit/JIT.h:
2898        * jit/JITCall.cpp:
2899        (JSC::):
2900        * jit/JITInlineMethods.h:
2901        (JSC::JIT::setSamplingFlag):
2902        (JSC::JIT::clearSamplingFlag):
2903        (JSC::JIT::emitCount):
2904        * jsc.cpp:
2905        (runWithScripts):
2906        * parser/Nodes.cpp:
2907        (JSC::ScopeNode::ScopeNode):
2908        * wtf/Platform.h:
2909
29102009-05-13  Steve Falkenburg  <sfalken@apple.com>
2911
2912        Windows build fix.
2913
2914        * JavaScriptCore.vcproj/JavaScriptCore.make:
2915
29162009-05-12  Steve Falkenburg  <sfalken@apple.com>
2917
2918        Windows build fix.
2919
2920        * JavaScriptCore.vcproj/JavaScriptCore.make:
2921
29222009-05-12  Oliver Hunt  <oliver@apple.com>
2923
2924        Reviewed by Gavin Barraclough.
2925
2926        <rdar://problem/6881457> Crash occurs at JSC::Interpreter::execute() when loading http://www.sears.com
2927
2928        We created the arguments objects before an op_push_scope but not
2929        before op_push_new_scope, this meant a null arguments object could
2930        be resolved inside catch blocks.
2931
2932        * bytecompiler/BytecodeGenerator.cpp:
2933        (JSC::BytecodeGenerator::emitPushNewScope):
2934
29352009-05-12  Oliver Hunt  <oliver@apple.com>
2936
2937        Reviewed by Gavin Barraclough.
2938
2939        <rdar://problem/6879881> Crash occurs at JSC::JSActivation::mark() when loading http://www.monster.com; http://www.cnet.com
2940        <https://bugs.webkit.org/show_bug.cgi?id=25736> Crash loading www.google.dk/ig (and other igoogle's as well)
2941
2942        Following on from the lazy arguments creation patch, it's now
2943        possible for an activation to to have a null register in the callframe
2944        so we can't just blindly mark the local registers in an activation,
2945        and must null check first instead.
2946
2947        * API/tests/testapi.c:
2948        (functionGC):
2949        * API/tests/testapi.js:
2950        (bludgeonArguments.return.g):
2951        (bludgeonArguments):
2952        * runtime/JSActivation.cpp:
2953        (JSC::JSActivation::mark):
2954
29552009-05-12  Gavin Barraclough  <barraclough@apple.com>
2956
2957        Rubber stamped by Geoff Garen.
2958
2959        WTF_USE_CTI_REPATCH_PIC is no longer used, remove.
2960
2961        * jit/JIT.h:
2962        * jit/JITStubCall.h:
2963
29642009-05-12  Gavin Barraclough  <barraclough@apple.com>
2965
2966        Reviewed by Maciej Stachowiak.
2967
2968        We've run into some problems where changing the size of the class JIT leads to
2969        performance fluctuations.  Try forcing alignment in an attempt to stabalize this.
2970
2971        * jit/JIT.h:
2972
29732009-05-12  Kevin Ollivier  <kevino@theolliviers.com>
2974
2975        wx build fix. Add ParserArena.cpp to the build.
2976
2977        * JavaScriptCoreSources.bkl:
2978
29792009-05-12  Oliver Hunt  <oliver@apple.com>
2980
2981        Reviewed by Geoff Garen.
2982
2983        Unsigned underflow on 64bit cannot be treated as a negative number
2984
2985        This code included some placeswhere we deliberately create negative offsets
2986        from unsigned values, on 32bit this is "safe", but in 64bit builds much
2987        badness occurs. Solution is to use signed types as nature intended.
2988
2989        * jit/JITStubs.cpp:
2990        (JSC::JITStubs::cti_op_load_varargs):
2991
29922009-05-12  Jan Michael Alonzo  <jmalonzo@webkit.org>
2993
2994        Reviewed by Holger Freyther.
2995
2996        [Gtk] Various autotools build refactoring and fixes
2997        https://bugs.webkit.org/show_bug.cgi?id=25286
2998
2999        Define WTF_USE_JSC for the Gtk port.
3000
3001        * wtf/Platform.h:
3002
30032009-05-12  Maciej Stachowiak  <mjs@apple.com>
3004
3005        Reviewed by Oliver Hunt.
3006        
3007        - allow all of strictEqual to be inlined into cti_op_stricteq once again
3008        
3009        We had this optimization once but accidentally lost it at some point.
3010
3011        * runtime/Operations.h:
3012        (JSC::JSValue::strictEqualSlowCaseInline):
3013        (JSC::JSValue::strictEqual):
3014
30152009-05-12  Gavin Barraclough  <barraclough@apple.com>
3016
3017        Reviewed by Oliver Hunt.
3018
3019        instanceof should throw if the constructor being tested does not implement
3020        'HasInstance" (i.e. is a function).  Instead we were returning false.
3021
3022        * interpreter/Interpreter.cpp:
3023        (JSC::isInvalidParamForIn):
3024        (JSC::isInvalidParamForInstanceOf):
3025        (JSC::Interpreter::privateExecute):
3026        * jit/JITStubs.cpp:
3027        (JSC::JITStubs::cti_op_instanceof):
3028        * tests/mozilla/ecma_2/instanceof/instanceof-003.js:
3029            Fix broken test case.
3030        * tests/mozilla/ecma_2/instanceof/regress-7635.js:
3031            Remove broken test case (was an exact duplicate of a test in instanceof-003.js).
3032
30332009-05-12  Oliver Hunt  <oliver@apple.com>
3034
3035        Reviewed by Gavin Barraclough.
3036
3037        Improve function call forwarding performance
3038
3039        Make creation of the Arguments object occur lazily, so it
3040        is not necessarily created for every function that references
3041        it.  Then add logic to Function.apply to allow it to avoid
3042        allocating the Arguments object at all.  Helps a lot with
3043        the function forwarding/binding logic in jQuery, Prototype,
3044        and numerous other JS libraries.
3045
3046        * bytecode/CodeBlock.cpp:
3047        (JSC::CodeBlock::dump):
3048        * bytecode/Opcode.h:
3049        * bytecompiler/BytecodeGenerator.cpp:
3050        (JSC::BytecodeGenerator::BytecodeGenerator):
3051        (JSC::BytecodeGenerator::registerFor):
3052        (JSC::BytecodeGenerator::willResolveToArguments):
3053        (JSC::BytecodeGenerator::uncheckedRegisterForArguments):
3054        (JSC::BytecodeGenerator::createArgumentsIfNecessary):
3055        (JSC::BytecodeGenerator::emitCallEval):
3056        (JSC::BytecodeGenerator::emitPushScope):
3057        * bytecompiler/BytecodeGenerator.h:
3058        * interpreter/Interpreter.cpp:
3059        (JSC::Interpreter::privateExecute):
3060        (JSC::Interpreter::retrieveArguments):
3061        * jit/JIT.cpp:
3062        (JSC::JIT::privateCompileMainPass):
3063        * jit/JIT.h:
3064        * jit/JITOpcodes.cpp:
3065        (JSC::JIT::emit_op_create_arguments):
3066        (JSC::JIT::emit_op_init_arguments):
3067        * jit/JITStubs.cpp:
3068        (JSC::JITStubs::cti_op_tear_off_arguments):
3069        (JSC::JITStubs::cti_op_load_varargs):
3070        * parser/Nodes.cpp:
3071        (JSC::ApplyFunctionCallDotNode::emitBytecode):
3072
30732009-05-11  Gavin Barraclough  <barraclough@apple.com>
3074
3075        Reviewed by Oliver Hunt.
3076
3077        Enable use of SamplingFlags directly from JIT code.
3078
3079        * bytecode/SamplingTool.h:
3080        * jit/JIT.h:
3081        (JSC::JIT::sampleCodeBlock):
3082        (JSC::JIT::sampleInstruction):
3083        * jit/JITInlineMethods.h:
3084        (JSC::JIT::setSamplingFlag):
3085        (JSC::JIT::clearSamplingFlag):
3086
30872009-05-11  Gavin Barraclough  <barraclough@apple.com>
3088
3089        Reviewed by Cameron Zwarich.
3090
3091        Implement JIT generation for instanceof for non-objects (always returns false).
3092        Also fixes the sequencing of the prototype and value isObject checks, to no match the spec.
3093
3094        0.5% progression on v8 tests overall, due to 3.5% on early-boyer.
3095
3096        * jit/JIT.cpp:
3097        (JSC::JIT::privateCompileMainPass):
3098        (JSC::JIT::privateCompileSlowCases):
3099        * runtime/JSObject.cpp:
3100        (JSC::JSObject::hasInstance):
3101        * runtime/TypeInfo.h:
3102        (JSC::TypeInfo::TypeInfo):
3103
31042009-05-11  Geoffrey Garen  <ggaren@apple.com>
3105
3106        Reviewed by Sam Weinig.
3107        
3108        A little more JIT refactoring.
3109        
3110        Rearranged code to more clearly indicate what's conditionally compiled
3111        and why. Now, all shared code is at the top of our JIT files, and all
3112        #if'd code is at the bottom. #if'd code is delineated by large comments.
3113        
3114        Moved functions that relate to the JIT but don't explicitly do codegen
3115        into JIT.cpp. Refactored SSE2 check to store its result as a data member
3116        in the JIT.
3117
3118        * jit/JIT.cpp:
3119        (JSC::isSSE2Present):
3120        (JSC::JIT::JIT):
3121        (JSC::JIT::unlinkCall):
3122        (JSC::JIT::linkCall):
3123        * jit/JIT.h:
3124        (JSC::JIT::isSSE2Present):
3125        * jit/JITArithmetic.cpp:
3126        (JSC::JIT::emit_op_mod):
3127        (JSC::JIT::emitSlow_op_mod):
3128        * jit/JITCall.cpp:
3129        (JSC::JIT::compileOpCallVarargs):
3130        (JSC::JIT::compileOpCallVarargsSlowCase):
3131
31322009-05-11  Holger Hans Peter Freyther  <zecke@selfish.org>
3133
3134        Build fix.
3135
3136        * JavaScriptCore.pri: Build the new JITOpcodes.cpp
3137
31382009-05-11  Sam Weinig  <sam@webkit.org>
3139
3140        Reviewed by Geoffrey Garen.
3141
3142        More re-factoring of JIT code generation.  Use a macro to
3143        forward the main switch-statement cases to the helper functions.
3144
3145        * jit/JIT.cpp:
3146        (JSC::JIT::privateCompileMainPass):
3147        (JSC::JIT::privateCompileSlowCases):
3148
31492009-05-11  Sam Weinig  <sam@webkit.org>
3150
3151        Reviewed by Geoffrey Garen.
3152
3153        More re-factoring of JIT code generation to move opcode generation
3154        to helper functions outside the main switch-statement and gave those
3155        helper functions standardized names. This patch covers the remaining
3156        slow cases.
3157
3158        * jit/JIT.cpp:
3159        * jit/JIT.h:
3160        * jit/JITOpcodes.cpp:
3161
31622009-05-11  Geoffrey Garen  <ggaren@apple.com>
3163
3164        Build fix.
3165
3166        * GNUmakefile.am: Added JITOpcodes.cpp and JITStubCall.h to the project.
3167
31682009-05-11  Geoffrey Garen  <ggaren@apple.com>
3169
3170        Build fix.
3171
3172        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added
3173        JITOpcodes.cpp and JITStubCall.h to the project.
3174
31752009-05-11  Geoffrey Garen  <ggaren@apple.com>
3176
3177        Reviewed by Sam Weinig.
3178        
3179        Some JIT refactoring.
3180        
3181        Moved JITStubCall* into its own header.
3182        
3183        Modified JITStubCall to ASSERT that its return value is handled correctly.
3184        Also, replaced function template with explicit instantiations to resolve
3185        some confusion.
3186        
3187        Replaced all uses of emit{Get,Put}CTIArgument with explicit peeks, pokes,
3188        and calls to killLastResultRegister().
3189
3190        * JavaScriptCore.xcodeproj/project.pbxproj:
3191        * jit/JIT.cpp:
3192        (JSC::JIT::privateCompileMainPass):
3193        (JSC::JIT::privateCompile):
3194        * jit/JIT.h:
3195        * jit/JITArithmetic.cpp:
3196        * jit/JITCall.cpp:
3197        * jit/JITInlineMethods.h:
3198        (JSC::JIT::restoreArgumentReference):
3199        * jit/JITPropertyAccess.cpp:
3200        * jit/JITStubCall.h: Copied from jit/JIT.h.
3201        (JSC::JITStubCall::JITStubCall):
3202        (JSC::JITStubCall::addArgument):
3203        (JSC::JITStubCall::call):
3204        (JSC::JITStubCall::):
3205
32062009-05-11  Sam Weinig  <sam@webkit.org>
3207
3208        Reviewed by Geoffrey Garen.
3209
3210        Start re-factoring JIT code generation to move opcode generation
3211        to helper functions outside the main switch-statement and gave those
3212        helper functions standardized names.  This patch only covers the main
3213        pass and all the arithmetic opcodes in the slow path.
3214
3215        * JavaScriptCore.xcodeproj/project.pbxproj:
3216        * jit/JIT.cpp:
3217        (JSC::JIT::privateCompileMainPass):
3218        (JSC::JIT::privateCompileSlowCases):
3219        * jit/JIT.h:
3220        * jit/JITArithmetic.cpp:
3221        * jit/JITOpcodes.cpp: Copied from jit/JIT.cpp.
3222        * jit/JITPropertyAccess.cpp:
3223
32242009-05-11  Steve Falkenburg  <sfalken@apple.com>
3225
3226        Re-add experimental PGO configs.
3227        
3228        Reviewed by Adam Roben.
3229
3230        * JavaScriptCore.vcproj/JavaScriptCore.make:
3231        * JavaScriptCore.vcproj/JavaScriptCore.sln:
3232        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3233        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
3234        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
3235
32362009-05-11  Sam Weinig  <sam@webkit.org>
3237
3238        Reviewed by Geoffrey "1" Garen.
3239
3240        Rip out the !USE(CTI_REPATCH_PIC) code.  It was untested and unused.
3241
3242        * jit/JIT.h:
3243        (JSC::JIT::compileGetByIdChainList):
3244        (JSC::JIT::compileGetByIdChain):
3245        (JSC::JIT::compileCTIMachineTrampolines):
3246        * jit/JITPropertyAccess.cpp:
3247        (JSC::JIT::privateCompileGetByIdProto):
3248        (JSC::JIT::privateCompileGetByIdChainList):
3249        (JSC::JIT::privateCompileGetByIdChain):
3250        * jit/JITStubs.cpp:
3251        (JSC::JITStubs::tryCachePutByID):
3252        (JSC::JITStubs::tryCacheGetByID):
3253
32542009-05-11  Dmitry Titov  <dimich@chromium.org>
3255
3256        GTK build fix - the deprecated waitForThreadCompletion is not needed on GTK.
3257
3258        * wtf/ThreadingPthreads.cpp: used #ifdef PLATFORM(DARWIN) around waitForThreadCompletion().
3259
32602009-05-11  Adam Roben  <aroben@apple.com>
3261
3262        Build fix for newer versions of GCC
3263
3264        * wtf/ThreadingPthreads.cpp: Added a declaration of
3265        waitForThreadCompletion before its definition to silence a warning.
3266
32672009-05-11  Dmitry Titov  <dimich@chromium.org>
3268
3269        Reviewed by Alexey Proskuryakov and Adam Roben.
3270
3271        https://bugs.webkit.org/show_bug.cgi?id=25348
3272        Change WTF::ThreadIdentifier to be an actual (but wrapped) thread id, remove ThreadMap.
3273
3274        * wtf/Threading.h:
3275        (WTF::ThreadIdentifier::ThreadIdentifier):
3276        (WTF::ThreadIdentifier::isValid):
3277        (WTF::ThreadIdentifier::invalidate):
3278        (WTF::ThreadIdentifier::platformId):
3279        ThreadIdentifier is now a class, containing a PlatformThreadIdentifier and
3280        methods that are used across the code on thread ids: construction, comparisons,
3281        check for 'valid' state etc. '0' is used as invalid id, which happens to just work
3282        with all platform-specific thread id implementations.
3283
3284        All the following files repeatedly reflect the new ThreadIdentifier for each platform.
3285        We remove ThreadMap and threadMapMutex from all of them, remove the functions that
3286        populated/searched/cleared the map and add platform-specific comparison operators
3287        for ThreadIdentifier.
3288
3289        There are specific temporary workarounds for Safari 4 beta on OSX and Win32 since the
3290        public build uses WTF threading functions with old type of ThreadingIdentifier.
3291        The next time Safari 4 is rebuilt, it will 'automatically' pick up the new type and new
3292        functions so the deprecated ones can be removed.
3293
3294        * wtf/gtk/ThreadingGtk.cpp:
3295        (WTF::ThreadIdentifier::operator==):
3296        (WTF::ThreadIdentifier::operator!=):
3297        (WTF::initializeThreading):
3298        (WTF::createThreadInternal):
3299        (WTF::waitForThreadCompletion):
3300        (WTF::currentThread):
3301
3302        * wtf/ThreadingNone.cpp:
3303        (WTF::ThreadIdentifier::operator==):
3304        (WTF::ThreadIdentifier::operator!=):
3305
3306        * wtf/ThreadingPthreads.cpp:
3307        (WTF::ThreadIdentifier::operator==):
3308        (WTF::ThreadIdentifier::operator!=):
3309        (WTF::initializeThreading):
3310        (WTF::createThreadInternal):
3311        (WTF::waitForThreadCompletion):
3312        (WTF::detachThread):
3313        (WTF::currentThread):
3314        (WTF::waitForThreadCompletion): This is a workaround for Safari 4 beta on Mac.
3315        Safari 4 is linked against old definition of ThreadIdentifier so it treats it as uint32_t.
3316        This 'old' variant of waitForThreadCompletion takes uint32_t and has the old decorated name, so Safari can
3317        load it from JavaScriptCore library. The other functions (CurrentThread() etc) happen to match their previous
3318        decorated names and, while they return pthread_t now, it is a pointer which round-trips through a uint32_t.
3319        This function will be removed as soon as Safari 4 will release next public build.
3320
3321        * wtf/qt/ThreadingQt.cpp:
3322        (WTF::ThreadIdentifier::operator==):
3323        (WTF::ThreadIdentifier::operator!=):
3324        (WTF::initializeThreading):
3325        (WTF::createThreadInternal):
3326        (WTF::waitForThreadCompletion):
3327        (WTF::currentThread):
3328
3329        * wtf/ThreadingWin.cpp:
3330        (WTF::ThreadIdentifier::operator==):
3331        (WTF::ThreadIdentifier::operator!=):
3332        (WTF::initializeThreading):
3333        (WTF::createThreadInternal): All the platforms (except Windows) used a sequential
3334        counter as a thread ID and mapped it into platform ID. Windows was using native thread
3335        id and mapped it into thread handle. Since we can always obtain a thread handle
3336        by thread id, createThread now closes the handle.
3337        (WTF::waitForThreadCompletion): obtains another one using OpenThread(id) API. If can not obtain a handle,
3338        it means the thread already exited.
3339        (WTF::detachThread):
3340        (WTF::currentThread):
3341        (WTF::detachThreadDeprecated): old function, renamed (for Win Safari 4 beta which uses it for now).
3342        (WTF::waitForThreadCompletionDeprecated): same.
3343        (WTF::currentThreadDeprecated): same.
3344        (WTF::createThreadDeprecated): same.
3345
3346        * bytecode/SamplingTool.h:
3347        * bytecode/SamplingTool.cpp: Use DEFINE_STATIC_LOCAL for a static ThreadIdentifier variable, to avoid static constructor.
3348
3349        * JavaScriptCore.exp: export lists - updated decorated names of the WTF threading functions
3350        since they now take a different type as a parameter.
3351        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: ditto for Windows, plus added "deprecated" functions
3352        that take old parameter type - turns out public beta of Safari 4 uses those, so they need to be kept along for a while.
3353        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: ditto.
3354
33552009-05-11  Darin Adler  <darin@apple.com>
3356
3357        Reviewed by Oliver Hunt.
3358
3359        Bug 25560: REGRESSION (r34821): "string value".__proto__ gets the wrong object.
3360        https://bugs.webkit.org/show_bug.cgi?id=25560
3361        rdar://problem/6861069
3362
3363        I missed this case back a year ago when I sped up handling
3364        of JavaScript wrappers. Easy to fix.
3365
3366        * runtime/JSObject.h:
3367        (JSC::JSValue::get): Return the prototype itself if the property name
3368        is __proto__.
3369        * runtime/JSString.cpp:
3370        (JSC::JSString::getOwnPropertySlot): Ditto.
3371
33722009-05-09  Oliver Hunt  <oliver@apple.com>
3373
3374        Reviewed by Maciej Stachowiak.
3375
3376        Rename emitGetFromCallFrameHeader to emitGetFromCallFrameHeaderPtr
3377
3378        * jit/JIT.cpp:
3379        (JSC::JIT::privateCompileMainPass):
3380        (JSC::JIT::privateCompileCTIMachineTrampolines):
3381        * jit/JIT.h:
3382        * jit/JITInlineMethods.h:
3383        (JSC::JIT::emitGetFromCallFrameHeaderPtr):
3384        (JSC::JIT::emitGetFromCallFrameHeader32):
3385
33862009-05-11  Holger Hans Peter Freyther  <zecke@selfish.org>
3387
3388        Unreviewed build fix. Build ParserAreana.cpp for Qt
3389
3390        * JavaScriptCore.pri:
3391
33922009-05-11  Norbert Leser  <norbert.leser@nokia.com>
3393
3394        Reviewed by Darin Adler.
3395
3396        https://bugs.webkit.org/show_bug.cgi?id=24536
3397
3398        Symbian compilers cannot resolve WTF::PassRefPtr<JSC::Profile>
3399        unless Profile.h is included.
3400
3401        * profiler/ProfileGenerator.h:
3402
34032009-05-11  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>
3404
3405        Reviewed by Holger Freyther.
3406
3407        https://bugs.webkit.org/show_bug.cgi?id=24284
3408
3409        * JavaScriptCore.pri: coding style modified
3410        * jsc.pro: duplicated values removed from INCLUDEPATH, DEFINES
3411
34122009-05-11  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>
3413
3414        Reviewed by NOBODY (build fix).
3415
3416        Also add ParserArena, in addition to AllInOne, for release builds,
3417        since adding it to AllInOne breaks Mac.
3418
3419        * GNUmakefile.am:
3420
34212009-05-11  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>
3422
3423        Unreviewed build fix. Adding ParserArena to the autotools build.
3424
3425        * GNUmakefile.am:
3426
34272009-05-11  Adam Roben  <aroben@apple.com>
3428
3429        More Windows build fixes after r43479
3430
3431        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3432        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
3433        Export ParserArena::reset.
3434
34352009-05-11  Adam Roben  <aroben@apple.com>
3436
3437        Windows build fixes after r43479
3438
3439        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added
3440        ParserArena to the project.
3441
3442        * parser/NodeConstructors.h: Added a missing include.
3443        (JSC::ParserArenaDeletable::operator new): Marked these as inline.
3444
34452009-05-10  Maciej Stachowiak  <mjs@apple.com>
3446
3447        Reviewed by Geoff Garen.
3448        
3449        - fixed REGRESSION(r43432): Many JavaScriptCore tests crash in 64-bit
3450        https://bugs.webkit.org/show_bug.cgi?id=25680
3451
3452        Accound for the 64-bit instruction prefix when rewriting mov to lea on 64-bit.
3453        
3454        * jit/JIT.h:
3455        * jit/JITPropertyAccess.cpp:
3456        (JSC::JIT::patchGetByIdSelf):
3457        (JSC::JIT::patchPutByIdReplace):
3458
34592009-05-10  Darin Adler  <darin@apple.com>
3460
3461        Reviewed by Cameron Zwarich.
3462
3463        Bug 25674: syntax tree nodes should use arena allocation
3464        https://bugs.webkit.org/show_bug.cgi?id=25674
3465
3466        Part two: Remove reference counting from most nodes.
3467
3468        * JavaScriptCore.exp: Updated.
3469
3470        * JavaScriptCore.xcodeproj/project.pbxproj: Added ParserArena.h and .cpp.
3471
3472        * parser/Grammar.y: Replaced uses of ParserRefCountedData with uses of
3473        ParserArenaData. Took out now-nonfunctional code that tries to manually
3474        release declaration list. Changed the new calls that create FuncDeclNode
3475        and FuncExprNode so that they use the proper version of operator new for
3476        the reference-counted idiom, not the deletion idiom.
3477
3478        * parser/NodeConstructors.h:
3479        (JSC::ParserArenaDeletable::operator new): Added.
3480        (JSC::ParserArenaRefCounted::ParserArenaRefCounted): Added.
3481        (JSC::Node::Node): Removed ParserRefCounted initializer.
3482        (JSC::ElementNode::ElementNode): Ditto.
3483        (JSC::PropertyNode::PropertyNode): Ditto.
3484        (JSC::ArgumentsNode::ArgumentsNode): Ditto.
3485        (JSC::SourceElements::SourceElements): Ditto.
3486        (JSC::ParameterNode::ParameterNode): Ditto.
3487        (JSC::FuncExprNode::FuncExprNode): Added ParserArenaRefCounted initializer.
3488        (JSC::FuncDeclNode::FuncDeclNode): Ditto.
3489        (JSC::CaseClauseNode::CaseClauseNode): Removed ParserRefCounted initializer.
3490        (JSC::ClauseListNode::ClauseListNode): Ditto.
3491        (JSC::CaseBlockNode::CaseBlockNode): Ditto.
3492
3493        * parser/NodeInfo.h: Replaced uses of ParserRefCountedData with uses of
3494        ParserArenaData.
3495
3496        * parser/Nodes.cpp:
3497        (JSC::ScopeNode::ScopeNode): Added ParserArenaRefCounted initializer.
3498        (JSC::ProgramNode::create): Use the proper version of operator new for
3499        the reference-counted idiom, not the deletion idiom. Use the arena
3500        contains function instead of the vecctor find function.
3501        (JSC::EvalNode::create): Use the proper version of operator new for
3502        the reference-counted idiom, not the deletion idiom. Use the arena
3503        reset function instead of the vector shrink function.
3504        (JSC::FunctionBodyNode::createNativeThunk): Use the proper version
3505        of operator new for the reference-counted idiom, not the deletion idiom.
3506        (JSC::FunctionBodyNode::create): More of the same.
3507
3508        * parser/Nodes.h: Added ParserArenaDeletable and ParserArenaRefCounted
3509        to replace ParserRefCounted. Fixed inheritance so only the classes that
3510        need reference counting inherit from ParserArenaRefCounted.
3511
3512        * parser/Parser.cpp:
3513        (JSC::Parser::parse): Set m_sourceElements to 0 since it now starts
3514        uninitialized. Just set it to 0 again in the failure case, since it's
3515        now just a raw pointer, not an owning one.
3516        (JSC::Parser::reparseInPlace): Removed now-unneeded get() function.
3517        (JSC::Parser::didFinishParsing): Replaced uses of ParserRefCountedData
3518        with uses of ParserArenaData.
3519
3520        * parser/Parser.h: Less RefPtr, more arena.
3521
3522        * parser/ParserArena.cpp: Added.
3523        * parser/ParserArena.h: Added.
3524
3525        * runtime/JSGlobalData.cpp:
3526        (JSC::JSGlobalData::~JSGlobalData): Removed arena-related code, since it's
3527        now in the Parser.
3528        (JSC::JSGlobalData::createLeaked): Removed unneeded #ifndef.
3529        (JSC::JSGlobalData::createNativeThunk): Tweaked #if a bit.
3530
3531        * runtime/JSGlobalData.h: Removed parserArena, which is now in Parser.
3532
3533        * wtf/RefCounted.h: Added deletionHasBegun function, for use in
3534        assertions to catch deletion not done by the deref function.
3535
35362009-05-10  David Kilzer  <ddkilzer@apple.com>
3537
3538        Part 2: Try to fix the Windows build by adding a symbol which is really just a re-mangling of a changed method signature
3539
3540        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3541        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
3542
35432009-05-10  David Kilzer  <ddkilzer@apple.com>
3544
3545        Try to fix the Windows build by removing an unknown symbol
3546
3547        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
3548        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
3549
35502009-05-10  David Kilzer  <ddkilzer@apple.com>
3551
3552        Touch Nodes.cpp to try to fix Windows build
3553
3554        * parser/Nodes.cpp: Removed whitespace.
3555
35562009-05-10  Darin Adler  <darin@apple.com>
3557
3558        Reviewed by Maciej Stachowiak.
3559
3560        Quick fix for failures seen on buildbot. Maciej plans a better fix later.
3561
3562        * wtf/dtoa.cpp: Change the hardcoded number of 32-bit words in a BigInt
3563        from 32 to 64. Parsing "1e500", for example, requires more than 32 words.
3564
35652009-05-10  Darin Adler  <darin@apple.com>
3566
3567        Reviewed by Sam Weinig.
3568
3569        Bug 25674: syntax tree nodes should use arena allocation
3570        Part one: Change lifetimes so we won't have to use reference
3571        counting so much, but don't eliminate the reference counts
3572        entirely yet.
3573
3574        * JavaScriptCore.exp: Updated.
3575
3576        * bytecompiler/BytecodeGenerator.cpp:
3577        (JSC::BytecodeGenerator::BytecodeGenerator): Update for use of raw pointers
3578        instead of RefPtr.
3579        (JSC::BytecodeGenerator::emitCall): Ditto.
3580        (JSC::BytecodeGenerator::emitConstruct): Ditto.
3581
3582        * parser/Grammar.y: Update node creating code to use new (JSGlobalData*)
3583        instead of the plain new. At the moment this is just a hook for future
3584        arena allocation; it's inline and JSGlobalData* is not used.
3585
3586        * parser/NodeConstructors.h: Updated for name change of parserObjects to
3587        parserArena. Also added explicit initialization for raw pointers that used
3588        to be RefPtr. Also removed some uses of get() that aren't needed now that
3589        the pointers are raw pointers. Also eliminated m_parameter from FuncExprNode
3590        and FuncDeclNode. Also changed node-creating code to use new (JSGlobalData*)
3591        as above.
3592
3593        * parser/Nodes.cpp: Eliminated NodeReleaser and all use of it.
3594        (JSC::ParserRefCounted::ParserRefCounted): Updated for name change of
3595        parserObjects to parserArena.
3596        (JSC::SourceElements::append): Use raw pointers.
3597        (JSC::ArrayNode::emitBytecode): Ditto.
3598        (JSC::ArrayNode::isSimpleArray): Ditto.
3599        (JSC::ArrayNode::toArgumentList): Ditto.
3600        (JSC::ObjectLiteralNode::emitBytecode): Ditto.
3601        (JSC::PropertyListNode::emitBytecode): Ditto.
3602        (JSC::BracketAccessorNode::emitBytecode): Ditto.
3603        (JSC::DotAccessorNode::emitBytecode): Ditto.
3604        (JSC::ArgumentListNode::emitBytecode): Ditto.
3605        (JSC::NewExprNode::emitBytecode): Ditto.
3606        (JSC::EvalFunctionCallNode::emitBytecode): Ditto.
3607        (JSC::FunctionCallValueNode::emitBytecode): Ditto.
3608        (JSC::FunctionCallResolveNode::emitBytecode): Ditto.
3609        (JSC::FunctionCallBracketNode::emitBytecode): Ditto.
3610        (JSC::FunctionCallDotNode::emitBytecode): Ditto.
3611        (JSC::CallFunctionCallDotNode::emitBytecode): Ditto.
3612        (JSC::ApplyFunctionCallDotNode::emitBytecode): Ditto.
3613        (JSC::PostfixBracketNode::emitBytecode): Ditto.
3614        (JSC::PostfixDotNode::emitBytecode): Ditto.
3615        (JSC::DeleteBracketNode::emitBytecode): Ditto.
3616        (JSC::DeleteDotNode::emitBytecode): Ditto.
3617        (JSC::DeleteValueNode::emitBytecode): Ditto.
3618        (JSC::VoidNode::emitBytecode): Ditto.
3619        (JSC::TypeOfValueNode::emitBytecode): Ditto.
3620        (JSC::PrefixBracketNode::emitBytecode): Ditto.
3621        (JSC::PrefixDotNode::emitBytecode): Ditto.
3622        (JSC::UnaryOpNode::emitBytecode): Ditto.
3623        (JSC::BinaryOpNode::emitStrcat): Ditto.
3624        (JSC::BinaryOpNode::emitBytecode): Ditto.
3625        (JSC::EqualNode::emitBytecode): Ditto.
3626        (JSC::StrictEqualNode::emitBytecode): Ditto.
3627        (JSC::ReverseBinaryOpNode::emitBytecode): Ditto.
3628        (JSC::ThrowableBinaryOpNode::emitBytecode): Ditto.
3629        (JSC::InstanceOfNode::emitBytecode): Ditto.
3630        (JSC::LogicalOpNode::emitBytecode): Ditto.
3631        (JSC::ConditionalNode::emitBytecode): Ditto.
3632        (JSC::ReadModifyResolveNode::emitBytecode): Ditto.
3633        (JSC::AssignResolveNode::emitBytecode): Ditto.
3634        (JSC::AssignDotNode::emitBytecode): Ditto.
3635        (JSC::ReadModifyDotNode::emitBytecode): Ditto.
3636        (JSC::AssignBracketNode::emitBytecode): Ditto.
3637        (JSC::ReadModifyBracketNode::emitBytecode): Ditto.
3638        (JSC::CommaNode::emitBytecode): Ditto.
3639        (JSC::ConstDeclNode::emitCodeSingle): Ditto.
3640        (JSC::ConstDeclNode::emitBytecode): Ditto.
3641        (JSC::ConstStatementNode::emitBytecode): Ditto.
3642        (JSC::statementListEmitCode): Ditto.
3643        (JSC::BlockNode::emitBytecode): Ditto.
3644        (JSC::ExprStatementNode::emitBytecode): Ditto.
3645        (JSC::VarStatementNode::emitBytecode): Ditto.
3646        (JSC::IfNode::emitBytecode): Ditto.
3647        (JSC::IfElseNode::emitBytecode): Ditto.
3648        (JSC::DoWhileNode::emitBytecode): Ditto.
3649        (JSC::WhileNode::emitBytecode): Ditto.
3650        (JSC::ForNode::emitBytecode): Ditto.
3651        (JSC::ForInNode::emitBytecode): Ditto.
3652        (JSC::ReturnNode::emitBytecode): Ditto.
3653        (JSC::WithNode::emitBytecode): Ditto.
3654        (JSC::CaseBlockNode::tryOptimizedSwitch): Ditto.
3655        (JSC::CaseBlockNode::emitBytecodeForBlock): Ditto.
3656        (JSC::SwitchNode::emitBytecode): Ditto.
3657        (JSC::LabelNode::emitBytecode): Ditto.
3658        (JSC::ThrowNode::emitBytecode): Ditto.
3659        (JSC::TryNode::emitBytecode): Ditto.
3660        (JSC::ScopeNodeData::ScopeNodeData): Use swap to transfer ownership
3661        of the arena, varStack and functionStack.
3662        (JSC::ScopeNode::ScopeNode): Pass in the arena when creating the
3663        ScopeNodeData.
3664        (JSC::ProgramNode::ProgramNode): Made this inline since it's used
3665        in only one place.
3666        (JSC::ProgramNode::create): Changed this to return a PassRefPtr since
3667        we plan to have the scope nodes be outside the arena, so they will need
3668        some kind of ownership transfer (maybe auto_ptr instead of PassRefPtr
3669        in the future, though). Remove the node from the newly-created arena to
3670        avoid a circular reference. Later we'll keep the node out of the arena
3671        by using a different operator new, but for now it's the ParserRefCounted
3672        constructor that puts the node into the arena, and there's no way to
3673        bypass that.
3674        (JSC::EvalNode::EvalNode): Ditto.
3675        (JSC::EvalNode::create): Ditto.
3676        (JSC::FunctionBodyNode::FunctionBodyNode): Ditto.
3677        (JSC::FunctionBodyNode::createNativeThunk): Moved the code that
3678        reseets the arena here instead of the caller.
3679        (JSC::FunctionBodyNode::create): Same change as the other create
3680        functions above.
3681        (JSC::FunctionBodyNode::emitBytecode): Use raw pointers.
3682
3683        * parser/Nodes.h: Removed NodeReleaser. Changed FunctionStack to
3684        use raw pointers. Removed the releaseNodes function. Added an override
3685        of operator new that takes a JSGlobalData* to prepare for future arena use.
3686        Use raw pointers instead of RefPtr everywhere possible.
3687
3688        * parser/Parser.cpp:
3689        (JSC::Parser::reparseInPlace): Pass the arena in.
3690
3691        * parser/Parser.h:
3692        (JSC::Parser::parse): Updated for name change of parserObjects to parserArena.
3693        (JSC::Parser::reparse): Ditto.
3694        * runtime/FunctionConstructor.cpp:
3695        (JSC::extractFunctionBody): Ditto.
3696        * runtime/JSGlobalData.cpp:
3697        (JSC::JSGlobalData::~JSGlobalData): Ditto.
3698        (JSC::JSGlobalData::createNativeThunk): Moved arena manipulation into the
3699        FunctionBodyNode::createNativeThunk function.
3700
3701        * runtime/JSGlobalData.h: Tweaked formatting and renamed parserObjects to
3702        parserArena.
3703
3704        * wtf/NotFound.h: Added the usual "using WTF" to this header to match the
3705        rest of WTF.
3706
37072009-05-10  Dimitri Glazkov  <dglazkov@chromium.org>
3708
3709        Reviewed by Geoffrey Garen.
3710
3711        https://bugs.webkit.org/show_bug.cgi?id=25670
3712        Remove no longer valid chunk of code from dtoa.
3713
3714        * wtf/dtoa.cpp:
3715        (WTF::dtoa): Removed invalid code.
3716
37172009-05-10  Alexey Proskuryakov  <ap@webkit.org>
3718
3719        Reviewed by Geoff Garen.
3720
3721        "Class const *" is the same as "const Class*", use the latter syntax consistently.
3722
3723        See <http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.9>.
3724
3725        * pcre/pcre_compile.cpp:
3726        (calculateCompiledPatternLength):
3727        * runtime/JSObject.h:
3728        (JSC::JSObject::offsetForLocation):
3729        (JSC::JSObject::locationForOffset):
3730
37312009-05-10  Maciej Stachowiak  <mjs@apple.com>
3732
3733        Reviewed by Alexey Proskuryakov.
3734        
3735        - speedup dtoa/strtod
3736        
3737        Added a bunch of inlining, and replaced malloc with stack allocation.
3738        
3739        0.5% SunSpider speedup (7% on string-tagcloud).
3740
3741        * runtime/NumberPrototype.cpp:
3742        (JSC::integerPartNoExp):
3743        (JSC::numberProtoFuncToExponential):
3744        * runtime/UString.cpp:
3745        (JSC::concatenate):
3746        (JSC::UString::from):
3747        * wtf/dtoa.cpp:
3748        (WTF::BigInt::BigInt):
3749        (WTF::BigInt::operator=):
3750        (WTF::Balloc):
3751        (WTF::Bfree):
3752        (WTF::multadd):
3753        (WTF::s2b):
3754        (WTF::i2b):
3755        (WTF::mult):
3756        (WTF::pow5mult):
3757        (WTF::lshift):
3758        (WTF::cmp):
3759        (WTF::diff):
3760        (WTF::b2d):
3761        (WTF::d2b):
3762        (WTF::ratio):
3763        (WTF::strtod):
3764        (WTF::quorem):
3765        (WTF::freedtoa):
3766        (WTF::dtoa):
3767        * wtf/dtoa.h:
3768
37692009-05-09  Mike Hommey  <glandium@debian.org>
3770
3771        Reviewed by Geoffrey Garen. Landed by Jan Alonzo.
3772
3773        Enable JIT on x86-64 gtk+
3774        https://bugs.webkit.org/show_bug.cgi?id=24724
3775
3776        * GNUmakefile.am:
3777
37782009-05-09  Geoffrey Garen  <ggaren@apple.com>
3779
3780        Reviewed by Cameron Zwarich.
3781        
3782        Removed the last non-call-related manually managed JIT stub call.
3783
3784        * jit/JITArithmetic.cpp:
3785        (JSC::JIT::compileFastArithSlow_op_rshift): Fully use the JITStubCall
3786        abstraction, instead of emitPutJITStubArg.
3787
37882009-05-09  Sebastian Andrzej Siewior  <sebastian@breakpoint.cc>
3789
3790        Reviewed by Gustavo Noronha.
3791
3792        https://bugs.webkit.org/show_bug.cgi?id=25653
3793        PLATFORM(X86_64) inherits ia64
3794
3795        __ia64__ is defined by gcc in an IA64 arch and has completely
3796        nothing in common with X86-64 exept both are from Intel and have
3797        an 64bit address space. That's it. Since code seems to expect x86
3798        here, ia64 has to go.
3799
3800        * wtf/Platform.h:
3801
38022009-05-09  Gustavo Noronha Silva  <gns@gnome.org>
3803
3804        Suggested by Geoffrey Garen.
3805
3806        Assume SSE2 is present on X86-64 and on MAC X86-32. This fixes a
3807        build breakage on non-Mac X86-64 when JIT is enabled.
3808
3809        * jit/JITArithmetic.cpp:
3810
38112009-05-09  Gustavo Noronha Silva  <gns@gnome.org>
3812
3813        Build fix, adding missing files to make dist.
3814
3815        * GNUmakefile.am:
3816
38172009-05-09  Geoffrey Garen  <ggaren@apple.com>
3818
3819        Windows build fix.
3820
3821        * assembler/X86Assembler.h:
3822        (JSC::X86Assembler::patchLoadToLEA):
3823
38242009-05-09  Geoffrey Garen  <ggaren@apple.com>
3825
3826        Windows build fix.
3827
3828        * assembler/X86Assembler.h:
3829        (JSC::X86Assembler::patchLoadToLEA):
3830
38312009-05-09  Maciej Stachowiak  <mjs@apple.com>
3832
3833        Reviewed by Gavin Barraclough.
3834        
3835        Original patch by John McCall. Updated by Cameron Zwarich. Further refined by me.
3836        
3837        - Assorted speedups to property access
3838        
3839        ~.3%-1% speedup on SunSpider
3840        
3841        1) When we know from the structure ID that an object is using inline storage, plant direct
3842        loads and stores against it; no need to indirect through storage pointer.
3843        
3844        2) Also because of the above, union the property storage pointer with the first inline property
3845        slot and add an extra inline property slot.
3846
3847        * assembler/AbstractMacroAssembler.h:
3848        (JSC::AbstractMacroAssembler::CodeLocationInstruction::CodeLocationInstruction):
3849        (JSC::AbstractMacroAssembler::CodeLocationInstruction::patchLoadToLEA):
3850        (JSC::::CodeLocationCommon::instructionAtOffset):
3851        * assembler/MacroAssembler.h:
3852        (JSC::MacroAssembler::storePtr):
3853        * assembler/MacroAssemblerX86.h:
3854        (JSC::MacroAssemblerX86::store32):
3855        * assembler/MacroAssemblerX86_64.h:
3856        (JSC::MacroAssemblerX86_64::storePtr):
3857        * assembler/X86Assembler.h:
3858        (JSC::X86Assembler::movq_EAXm):
3859        (JSC::X86Assembler::movl_rm):
3860        (JSC::X86Assembler::patchLoadToLEA):
3861        * jit/JIT.cpp:
3862        (JSC::JIT::privateCompileMainPass):
3863        * jit/JIT.h:
3864        * jit/JITPropertyAccess.cpp:
3865        (JSC::JIT::compileGetByIdHotPath):
3866        (JSC::JIT::compilePutByIdHotPath):
3867        (JSC::JIT::compilePutDirectOffset):
3868        (JSC::JIT::compileGetDirectOffset):
3869        (JSC::JIT::privateCompilePutByIdTransition):
3870        (JSC::JIT::patchGetByIdSelf):
3871        (JSC::JIT::patchPutByIdReplace):
3872        (JSC::JIT::privateCompileGetByIdSelf):
3873        (JSC::JIT::privateCompileGetByIdProto):
3874        (JSC::JIT::privateCompileGetByIdSelfList):
3875        (JSC::JIT::privateCompileGetByIdProtoList):
3876        (JSC::JIT::privateCompileGetByIdChainList):
3877        (JSC::JIT::privateCompileGetByIdChain):
3878        (JSC::JIT::privateCompilePutByIdReplace):
3879        * runtime/JSObject.cpp:
3880        (JSC::JSObject::mark):
3881        (JSC::JSObject::removeDirect):
3882        * runtime/JSObject.h:
3883        (JSC::JSObject::propertyStorage):
3884        (JSC::JSObject::getDirect):
3885        (JSC::JSObject::getOffset):
3886        (JSC::JSObject::offsetForLocation):
3887        (JSC::JSObject::locationForOffset):
3888        (JSC::JSObject::getDirectOffset):
3889        (JSC::JSObject::putDirectOffset):
3890        (JSC::JSObject::isUsingInlineStorage):
3891        (JSC::JSObject::):
3892        (JSC::JSObject::JSObject):
3893        (JSC::JSObject::~JSObject):
3894        (JSC::Structure::isUsingInlineStorage):
3895        (JSC::JSObject::putDirect):
3896        (JSC::JSObject::putDirectWithoutTransition):
3897        (JSC::JSObject::allocatePropertyStorageInline):
3898        * runtime/Structure.h:
3899
39002009-05-09  Geoffrey Garen  <ggaren@apple.com>
3901
3902        Reviewed by Gavin Barraclough.
3903
3904        Changed all our JIT stubs so that they return a maximum of 1 JS value or
3905        two non-JS pointers, and do all other value returning through out
3906        parameters, in preparation for 64bit JS values on a 32bit system.
3907
3908        Stubs that used to return two JSValues now return one JSValue and take
3909        and out parameter specifying where in the register array the second
3910        value should go.
3911        
3912        SunSpider reports no change.
3913
3914        * jit/JIT.cpp:
3915        (JSC::JIT::privateCompileMainPass):
3916        * jit/JITArithmetic.cpp:
3917        (JSC::JIT::compileFastArithSlow_op_post_inc):
3918        (JSC::JIT::compileFastArithSlow_op_post_dec):
3919        * jit/JITStubs.cpp:
3920        (JSC::JITStubs::cti_op_call_arityCheck):
3921        (JSC::JITStubs::cti_op_resolve_func):
3922        (JSC::JITStubs::cti_op_post_inc):
3923        (JSC::JITStubs::cti_op_resolve_with_base):
3924        (JSC::JITStubs::cti_op_post_dec):
3925        * jit/JITStubs.h:
3926        (JSC::):
3927
39282009-05-08  Geoffrey Garen  <ggaren@apple.com>
3929
3930        Reviewed by Cameron Zwarich.
3931        
3932        Fixed <rdar://problem/6634956> CrashTracer: [REGRESSION] >400 crashes
3933        in Safari at com.apple.JavaScriptCore • JSC::BytecodeGenerator::emitComplexJumpScopes + 468
3934        https://bugs.webkit.org/show_bug.cgi?id=25658
3935
3936        * bytecompiler/BytecodeGenerator.cpp:
3937        (JSC::BytecodeGenerator::emitComplexJumpScopes): Guard the whole loop
3938        with a bounds check. The old loop logic would decrement and read topScope
3939        without a bounds check, which could cause crashes on page boundaries.
3940
39412009-05-08  Jan Michael Alonzo  <jmalonzo@webkit.org>
3942
3943        Reviewed by NOBODY (BuildFix).
3944
3945        Gtk fix: add LiteralParser to the build script per r43424.
3946
3947        Add LiteralParser to the Qt and Wx build scripts too.
3948
3949        * GNUmakefile.am:
3950        * JavaScriptCore.pri:
3951        * JavaScriptCoreSources.bkl:
3952
39532009-05-08  Oliver Hunt  <oliver@apple.com>
3954
3955        Reviewed by Gavin Barraclough and Darin Adler.
3956
3957        Add a limited literal parser for eval to handle object and array literals fired at eval
3958
3959        This is a simplified parser and lexer that we can throw at strings passed to eval
3960        in case a site is using eval to parse JSON (eg. json2.js).  The lexer is intentionally
3961        limited (in effect it's whitelisting a limited "common" subset of the JSON grammar)
3962        as this decreases the likelihood of us wating time attempting to parse any significant
3963        amount of non-JSON content.
3964
3965        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
3966        * JavaScriptCore.xcodeproj/project.pbxproj:
3967        * interpreter/Interpreter.cpp:
3968        (JSC::Interpreter::callEval):
3969        * runtime/JSGlobalObjectFunctions.cpp:
3970        (JSC::globalFuncEval):
3971        * runtime/LiteralParser.cpp: Added.
3972        (JSC::isStringCharacter):
3973        (JSC::LiteralParser::Lexer::lex):
3974        (JSC::LiteralParser::Lexer::lexString):
3975        (JSC::LiteralParser::Lexer::lexNumber):
3976        (JSC::LiteralParser::parseStatement):
3977        (JSC::LiteralParser::parseExpression):
3978        (JSC::LiteralParser::parseArray):
3979        (JSC::LiteralParser::parseObject):
3980        (JSC::LiteralParser::StackGuard::StackGuard):
3981        (JSC::LiteralParser::StackGuard::~StackGuard):
3982        (JSC::LiteralParser::StackGuard::isSafe):
3983        * runtime/LiteralParser.h: Added.
3984        (JSC::LiteralParser::LiteralParser):
3985        (JSC::LiteralParser::attemptJSONParse):
3986        (JSC::LiteralParser::):
3987        (JSC::LiteralParser::Lexer::Lexer):
3988        (JSC::LiteralParser::Lexer::next):
3989        (JSC::LiteralParser::Lexer::currentToken):
3990        (JSC::LiteralParser::abortParse):
3991
39922009-05-08  Geoffrey Garen  <ggaren@apple.com>
3993
3994        Not reviewed.
3995        
3996        Restored a Mozilla JS test I accidentally gutted.
3997
3998        * tests/mozilla/ecma/Array/15.4.4.2.js:
3999        (getTestCases):
4000        (test):
4001
40022009-05-08  Geoffrey Garen  <ggaren@apple.com>
4003
4004        Reviewed by Gavin Barraclough.
4005        
4006        More abstraction for JITStub calls from JITed code.
4007        
4008        Added a JITStubCall class that automatically handles things like assigning
4009        arguments to different stack slots and storing return values. Deployed
4010        the class in about a billion places. A bunch more places remain to be
4011        fixed up, but this is a good stopping point for now.
4012
4013        * jit/JIT.cpp:
4014        (JSC::JIT::emitTimeoutCheck):
4015        (JSC::JIT::privateCompileMainPass):
4016        (JSC::JIT::privateCompileSlowCases):
4017        (JSC::JIT::privateCompile):
4018        * jit/JIT.h:
4019        (JSC::JIT::JSRInfo::JSRInfo):
4020        (JSC::JITStubCall::JITStubCall):
4021        (JSC::JITStubCall::addArgument):
4022        (JSC::JITStubCall::call):
4023        (JSC::JITStubCall::):
4024        (JSC::CallEvalJITStub::CallEvalJITStub):
4025        * jit/JITArithmetic.cpp:
4026        (JSC::JIT::compileFastArithSlow_op_lshift):
4027        (JSC::JIT::compileFastArithSlow_op_rshift):
4028        (JSC::JIT::compileFastArithSlow_op_jnless):
4029        (JSC::JIT::compileFastArithSlow_op_bitand):
4030        (JSC::JIT::compileFastArithSlow_op_mod):
4031        (JSC::JIT::compileFastArith_op_mod):
4032        (JSC::JIT::compileFastArithSlow_op_post_inc):
4033        (JSC::JIT::compileFastArithSlow_op_post_dec):
4034        (JSC::JIT::compileFastArithSlow_op_pre_inc):
4035        (JSC::JIT::compileFastArithSlow_op_pre_dec):
4036        (JSC::JIT::compileFastArith_op_add):
4037        (JSC::JIT::compileFastArith_op_mul):
4038        (JSC::JIT::compileFastArith_op_sub):
4039        (JSC::JIT::compileBinaryArithOpSlowCase):
4040        (JSC::JIT::compileFastArithSlow_op_add):
4041        (JSC::JIT::compileFastArithSlow_op_mul):
4042        * jit/JITCall.cpp:
4043        (JSC::JIT::compileOpCall):
4044        (JSC::):
4045        * jit/JITPropertyAccess.cpp:
4046        (JSC::JIT::compileGetByIdHotPath):
4047        (JSC::JIT::compilePutByIdHotPath):
4048        (JSC::JIT::compileGetByIdSlowCase):
4049        (JSC::JIT::compilePutByIdSlowCase):
4050        * jit/JITStubs.cpp:
4051        (JSC::JITStubs::cti_op_resolve_func):
4052        (JSC::JITStubs::cti_op_resolve_with_base):
4053
40542009-05-08  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
4055
4056        Reviewed by Maciej Stachowiak.
4057
4058        Add a new opcode jnlesseq, and optimize its compilation in the JIT using
4059        techniques similar to what were used to optimize jnless in r43363.
4060
4061        This gives a 0.7% speedup on SunSpider, particularly on the tests 3d-cube,
4062        control-flow-recursive, date-format-xparb, and string-base64.
4063
4064        * bytecode/CodeBlock.cpp:
4065        (JSC::CodeBlock::dump): Add support for dumping op_jnlesseq.
4066        * bytecode/Opcode.h: Add op_jnlesseq to the list of opcodes.
4067        * bytecompiler/BytecodeGenerator.cpp:
4068        (JSC::BytecodeGenerator::emitJumpIfFalse): Add a peephole optimization
4069        for op_jnlesseq when emitting lesseq followed by a jump.
4070        * interpreter/Interpreter.cpp:
4071        (JSC::Interpreter::privateExecute): Add case for op_jnlesseq.
4072        * jit/JIT.cpp:
4073        (JSC::JIT::privateCompileMainPass): Add case for op_jnlesseq.
4074        (JSC::JIT::privateCompileSlowCases): Add case for op_jnlesseq.
4075        * jit/JIT.h:
4076        * jit/JITArithmetic.cpp:
4077        (JSC::JIT::compileFastArith_op_jnlesseq): Added.
4078        (JSC::JIT::compileFastArithSlow_op_jnlesseq): Added.
4079        * jit/JITStubs.cpp:
4080        (JSC::JITStubs::cti_op_jlesseq): Added.
4081        * jit/JITStubs.h:
4082
40832009-05-08  Maciej Stachowiak  <mjs@apple.com>
4084
4085        Reviewed by Cameron Zwarich.
4086        
4087        - fix test failures on 64-bit
4088
4089        * jit/JITArithmetic.cpp:
4090        (JSC::JIT::compileFastArithSlow_op_jnless): Avoid accidentaly treating an
4091        immediate int as an immediate float in the 64-bit value representation.
4092
40932009-05-08  Gavin Barraclough  <barraclough@apple.com>
4094
4095        Rubber stamped by Oliver Hunt.
4096
4097        Removing an empty constructor and an uncalled, empty function seems to be a
4098        pretty solid 1% regeression on my machine, so I'm going to put them back.
4099        Um.  Yeah, this this pretty pointles and makes no sense at all.  I officially
4100        lose the will to live in 3... 2...
4101
4102        * bytecode/SamplingTool.cpp:
4103        (JSC::SamplingTool::notifyOfScope):
4104        * bytecode/SamplingTool.h:
4105        (JSC::SamplingTool::~SamplingTool):
4106
41072009-05-08  Gavin Barraclough  <barraclough@apple.com>
4108
4109        Reviewed by Oliver "I see lots of ifdefs" Hunt.
4110
4111        Fix (kinda) for sampling tool breakage.  The codeblock sampling tool has become
4112        b0rked due to recent changes in native function calling.  The initialization of
4113        a ScopeNode appears to now occur before the sampling tool (or possibly the
4114        interpreter has been brought into existence, wihich leads to crashyness).
4115
4116        This patch doesn't fix the problem.  The crash occurs when tracking a Scope, but
4117        we shouldn't need to track scopes when we're just sampling opcodes, not
4118        codeblocks.  Not retaining Scopes when just opcode sampling will reduce sampling
4119        overhead reducing any instrumentation skew, which is a good thing.  As a side
4120        benefit this patch also gets the opcode sampling going again, albeit in a bit of
4121        a lame way.  Will come back later with a proper fix from codeblock sampling. 
4122
4123        * JavaScriptCore.exp:
4124        * bytecode/SamplingTool.cpp:
4125        (JSC::compareLineCountInfoSampling):
4126        (JSC::SamplingTool::dump):
4127        * bytecode/SamplingTool.h:
4128        (JSC::SamplingTool::SamplingTool):
4129        * parser/Nodes.cpp:
4130        (JSC::ScopeNode::ScopeNode):
4131
41322009-05-07  Mark Rowe  <mrowe@apple.com>
4133
4134        Rubber-stamped by Oliver Hunt.
4135
4136        Fix <https://bugs.webkit.org/show_bug.cgi?id=25640>.
4137        Bug 25640: Crash on quit in r43384 nightly build on Leopard w/ Safari 4 beta installed
4138        
4139        Roll out r43366 as it removed symbols that Safari 4 Beta uses.
4140
4141        * JavaScriptCore.exp:
4142        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
4143        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
4144        * bytecode/SamplingTool.cpp:
4145        (JSC::SamplingThread::start):
4146        (JSC::SamplingThread::stop):
4147        * bytecode/SamplingTool.h:
4148        * wtf/CrossThreadRefCounted.h:
4149        (WTF::CrossThreadRefCounted::CrossThreadRefCounted):
4150        (WTF::::ref):
4151        (WTF::::deref):
4152        * wtf/Threading.h:
4153        * wtf/ThreadingNone.cpp:
4154        * wtf/ThreadingPthreads.cpp:
4155        (WTF::threadMapMutex):
4156        (WTF::initializeThreading):
4157        (WTF::threadMap):
4158        (WTF::identifierByPthreadHandle):
4159        (WTF::establishIdentifierForPthreadHandle):
4160        (WTF::pthreadHandleForIdentifier):
4161        (WTF::clearPthreadHandleForIdentifier):
4162        (WTF::createThreadInternal):
4163        (WTF::waitForThreadCompletion):
4164        (WTF::detachThread):
4165        (WTF::currentThread):
4166        * wtf/ThreadingWin.cpp:
4167        (WTF::threadMapMutex):
4168        (WTF::initializeThreading):
4169        (WTF::threadMap):
4170        (WTF::storeThreadHandleByIdentifier):
4171        (WTF::threadHandleForIdentifier):
4172        (WTF::clearThreadHandleForIdentifier):
4173        (WTF::createThreadInternal):
4174        (WTF::waitForThreadCompletion):
4175        (WTF::detachThread):
4176        (WTF::currentThread):
4177        * wtf/gtk/ThreadingGtk.cpp:
4178        (WTF::threadMapMutex):
4179        (WTF::initializeThreading):
4180        (WTF::threadMap):
4181        (WTF::identifierByGthreadHandle):
4182        (WTF::establishIdentifierForThread):
4183        (WTF::threadForIdentifier):
4184        (WTF::clearThreadForIdentifier):
4185        (WTF::createThreadInternal):
4186        (WTF::waitForThreadCompletion):
4187        (WTF::currentThread):
4188        * wtf/qt/ThreadingQt.cpp:
4189        (WTF::threadMapMutex):
4190        (WTF::threadMap):
4191        (WTF::identifierByQthreadHandle):
4192        (WTF::establishIdentifierForThread):
4193        (WTF::clearThreadForIdentifier):
4194        (WTF::threadForIdentifier):
4195        (WTF::initializeThreading):
4196        (WTF::createThreadInternal):
4197        (WTF::waitForThreadCompletion):
4198        (WTF::currentThread):
4199
42002009-05-07  Gustavo Noronha Silva  <gns@gnome.org>
4201
4202        Suggested by Oliver Hunt.
4203
4204        Also check for Linux for the special-cased calling convention.
4205
4206        * jit/JIT.cpp:
4207        (JSC::JIT::privateCompileCTIMachineTrampolines):
4208        * wtf/Platform.h:
4209
42102009-05-07  Gavin Barraclough  <barraclough@apple.com>
4211
4212        Reviewed by Maciej Stachowiak.
4213
4214        Previously, when appending to an existing string and growing the underlying buffer,
4215        we would actually allocate 110% of the required size in order to give us some space
4216        to expand into.  Now we treat strings differently based on their size:
4217
4218        Small Strings (up to 4 pages):
4219        Expand the allocation size to 112.5% of the amount requested.  This is largely sicking
4220        to our previous policy, however 112.5% is cheaper to calculate.
4221
4222        Medium Strings (up to 128 pages):
4223        For pages covering multiple pages over-allocation is less of a concern - any unused
4224        space will not be paged in if it is not used, so this is purely a VM overhead.  For
4225        these strings allocate 2x the requested size.
4226
4227        Large Strings (to infinity and beyond!):
4228        Revert to our 112.5% policy - probably best to limit the amount of unused VM we allow
4229        any individual string be responsible for.
4230
4231        Additionally, round small allocations up to a multiple of 16 bytes, and medium and
4232        large allocations up to a multiple of page size.
4233
4234        ~1.5% progression on Sunspider, due to 5% improvement on tagcloud & 15% on validate.
4235
4236        * runtime/UString.cpp:
4237        (JSC::expandedSize):
4238
42392009-05-07  Geoffrey Garen  <ggaren@apple.com>
4240
4241        Reviewed by Cameron Zwarich.
4242        
4243        Fixed a minor sequencing error introduced by recent Parser speedups.
4244
4245        * runtime/JSGlobalData.cpp:
4246        (JSC::JSGlobalData::createNativeThunk): Missed a spot in my last patch.
4247
42482009-05-07  Geoffrey Garen  <ggaren@apple.com>
4249
4250        Not reviewed.
4251
4252        * wtf/Platform.h: Reverted an accidental (and performance-catastrophic)
4253        change.
4254
42552009-05-07  Geoffrey Garen  <ggaren@apple.com>
4256
4257        Reviewed by Cameron Zwarich.
4258        
4259        Fixed a minor sequencing error introduced by recent Parser speedups.
4260
4261        * parser/Parser.cpp:
4262        (JSC::Parser::reparseInPlace): Missed a spot in my last patch.
4263
42642009-05-07  Geoffrey Garen  <ggaren@apple.com>
4265
4266        Reviewed by Cameron Zwarich.
4267        
4268        Fixed a minor sequencing error introduced by recent Parser speedups.
4269
4270        * parser/Parser.cpp:
4271        (JSC::Parser::parse):
4272        * parser/Parser.h:
4273        (JSC::Parser::parse):
4274        (JSC::Parser::reparse): Shrink the parsedObjects vector after allocating
4275        the root node, to avoid leaving a stray node in the vector, since that's
4276        a slight memory leak, and it causes problems during JSGlobalData teardown.
4277
4278        * runtime/JSGlobalData.cpp:
4279        (JSC::JSGlobalData::~JSGlobalData): ASSERT that we're not being torn
4280        down while we think we're still parsing, since that would cause lots of
4281        bad memory references during our destruction.
4282
42832009-05-07  Geoffrey Garen  <ggaren@apple.com>
4284
4285        Reviewed by Cameron Zwarich.
4286        
4287        Replaced two more macros with references to the JITStackFrame structure.
4288
4289        * jit/JIT.cpp:
4290        (JSC::JIT::privateCompileMainPass):
4291        * jit/JITInlineMethods.h:
4292        (JSC::JIT::restoreArgumentReference):
4293        * jit/JITStubs.cpp:
4294        (JSC::):
4295        * jit/JITStubs.h:
4296
42972009-05-07  Oliver Hunt  <oliver@apple.com>
4298
4299        Reviewed by Gavin Barraclough.
4300
4301        Improve native call performance
4302
4303        Fix the windows build by adding calling convention declarations everywhere,
4304        chose fastcall as that seemed most sensible given we were having to declare
4305        the convention explicitly.  In addition switched to fastcall on mac in the
4306        deluded belief that documented fastcall behavior on windows would match 
4307        actual its actual behavior.
4308
4309        * API/JSCallbackFunction.h:
4310        * API/JSCallbackObject.h:
4311        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
4312        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
4313        * interpreter/CallFrame.h:
4314        (JSC::ExecState::argumentCount):
4315        * jit/JIT.cpp:
4316        (JSC::JIT::privateCompileCTIMachineTrampolines):
4317        * jsc.cpp:
4318        (functionPrint):
4319        (functionDebug):
4320        (functionGC):
4321        (functionVersion):
4322        (functionRun):
4323        (functionLoad):
4324        (functionSetSamplingFlags):
4325        (functionClearSamplingFlags):
4326        (functionReadline):
4327        (functionQuit):
4328        * runtime/ArrayConstructor.cpp:
4329        (JSC::callArrayConstructor):
4330        * runtime/ArrayPrototype.cpp:
4331        (JSC::arrayProtoFuncToString):
4332        (JSC::arrayProtoFuncToLocaleString):
4333        (JSC::arrayProtoFuncJoin):
4334        (JSC::arrayProtoFuncConcat):
4335        (JSC::arrayProtoFuncPop):
4336        (JSC::arrayProtoFuncPush):
4337        (JSC::arrayProtoFuncReverse):
4338        (JSC::arrayProtoFuncShift):
4339        (JSC::arrayProtoFuncSlice):
4340        (JSC::arrayProtoFuncSort):
4341        (JSC::arrayProtoFuncSplice):
4342        (JSC::arrayProtoFuncUnShift):
4343        (JSC::arrayProtoFuncFilter):
4344        (JSC::arrayProtoFuncMap):
4345        (JSC::arrayProtoFuncEvery):
4346        (JSC::arrayProtoFuncForEach):
4347        (JSC::arrayProtoFuncSome):
4348        (JSC::arrayProtoFuncReduce):
4349        (JSC::arrayProtoFuncReduceRight):
4350        (JSC::arrayProtoFuncIndexOf):
4351        (JSC::arrayProtoFuncLastIndexOf):
4352        * runtime/BooleanConstructor.cpp:
4353        (JSC::callBooleanConstructor):
4354        * runtime/BooleanPrototype.cpp:
4355        (JSC::booleanProtoFuncToString):
4356        (JSC::booleanProtoFuncValueOf):
4357        * runtime/CallData.h:
4358        * runtime/DateConstructor.cpp:
4359        (JSC::callDate):
4360        (JSC::dateParse):
4361        (JSC::dateNow):
4362        (JSC::dateUTC):
4363        * runtime/DatePrototype.cpp:
4364        (JSC::dateProtoFuncToString):
4365        (JSC::dateProtoFuncToUTCString):
4366        (JSC::dateProtoFuncToDateString):
4367        (JSC::dateProtoFuncToTimeString):
4368        (JSC::dateProtoFuncToLocaleString):
4369        (JSC::dateProtoFuncToLocaleDateString):
4370        (JSC::dateProtoFuncToLocaleTimeString):
4371        (JSC::dateProtoFuncGetTime):
4372        (JSC::dateProtoFuncGetFullYear):
4373        (JSC::dateProtoFuncGetUTCFullYear):
4374        (JSC::dateProtoFuncToGMTString):
4375        (JSC::dateProtoFuncGetMonth):
4376        (JSC::dateProtoFuncGetUTCMonth):
4377        (JSC::dateProtoFuncGetDate):
4378        (JSC::dateProtoFuncGetUTCDate):
4379        (JSC::dateProtoFuncGetDay):
4380        (JSC::dateProtoFuncGetUTCDay):
4381        (JSC::dateProtoFuncGetHours):
4382        (JSC::dateProtoFuncGetUTCHours):
4383        (JSC::dateProtoFuncGetMinutes):
4384        (JSC::dateProtoFuncGetUTCMinutes):
4385        (JSC::dateProtoFuncGetSeconds):
4386        (JSC::dateProtoFuncGetUTCSeconds):
4387        (JSC::dateProtoFuncGetMilliSeconds):
4388        (JSC::dateProtoFuncGetUTCMilliseconds):
4389        (JSC::dateProtoFuncGetTimezoneOffset):
4390        (JSC::dateProtoFuncSetTime):
4391        (JSC::dateProtoFuncSetMilliSeconds):
4392        (JSC::dateProtoFuncSetUTCMilliseconds):
4393        (JSC::dateProtoFuncSetSeconds):
4394        (JSC::dateProtoFuncSetUTCSeconds):
4395        (JSC::dateProtoFuncSetMinutes):
4396        (JSC::dateProtoFuncSetUTCMinutes):
4397        (JSC::dateProtoFuncSetHours):
4398        (JSC::dateProtoFuncSetUTCHours):
4399        (JSC::dateProtoFuncSetDate):
4400        (JSC::dateProtoFuncSetUTCDate):
4401        (JSC::dateProtoFuncSetMonth):
4402        (JSC::dateProtoFuncSetUTCMonth):
4403        (JSC::dateProtoFuncSetFullYear):
4404        (JSC::dateProtoFuncSetUTCFullYear):
4405        (JSC::dateProtoFuncSetYear):
4406        (JSC::dateProtoFuncGetYear):
4407        * runtime/ErrorConstructor.cpp:
4408        (JSC::callErrorConstructor):
4409        * runtime/ErrorPrototype.cpp:
4410        (JSC::errorProtoFuncToString):
4411        * runtime/FunctionConstructor.cpp:
4412        (JSC::callFunctionConstructor):
4413        * runtime/FunctionPrototype.cpp:
4414        (JSC::callFunctionPrototype):
4415        (JSC::functionProtoFuncToString):
4416        (JSC::functionProtoFuncApply):
4417        (JSC::functionProtoFuncCall):
4418        * runtime/JSFunction.h:
4419        (JSC::JSFunction::nativeFunction):
4420        (JSC::JSFunction::setScopeChain):
4421        * runtime/JSGlobalObjectFunctions.cpp:
4422        (JSC::globalFuncEval):
4423        (JSC::globalFuncParseInt):
4424        (JSC::globalFuncParseFloat):
4425        (JSC::globalFuncIsNaN):
4426        (JSC::globalFuncIsFinite):
4427        (JSC::globalFuncDecodeURI):
4428        (JSC::globalFuncDecodeURIComponent):
4429        (JSC::globalFuncEncodeURI):
4430        (JSC::globalFuncEncodeURIComponent):
4431        (JSC::globalFuncEscape):
4432        (JSC::globalFuncUnescape):
4433        (JSC::globalFuncJSCPrint):
4434        * runtime/JSGlobalObjectFunctions.h:
4435        * runtime/MathObject.cpp:
4436        (JSC::mathProtoFuncAbs):
4437        (JSC::mathProtoFuncACos):
4438        (JSC::mathProtoFuncASin):
4439        (JSC::mathProtoFuncATan):
4440        (JSC::mathProtoFuncATan2):
4441        (JSC::mathProtoFuncCeil):
4442        (JSC::mathProtoFuncCos):
4443        (JSC::mathProtoFuncExp):
4444        (JSC::mathProtoFuncFloor):
4445        (JSC::mathProtoFuncLog):
4446        (JSC::mathProtoFuncMax):
4447        (JSC::mathProtoFuncMin):
4448        (JSC::mathProtoFuncPow):
4449        (JSC::mathProtoFuncRandom):
4450        (JSC::mathProtoFuncRound):
4451        (JSC::mathProtoFuncSin):
4452        (JSC::mathProtoFuncSqrt):
4453        (JSC::mathProtoFuncTan):
4454        * runtime/NativeErrorConstructor.cpp:
4455        (JSC::callNativeErrorConstructor):
4456        * runtime/NativeFunctionWrapper.h:
4457        * runtime/NumberConstructor.cpp:
4458        (JSC::callNumberConstructor):
4459        * runtime/NumberPrototype.cpp:
4460        (JSC::numberProtoFuncToString):
4461        (JSC::numberProtoFuncToLocaleString):
4462        (JSC::numberProtoFuncValueOf):
4463        (JSC::numberProtoFuncToFixed):
4464        (JSC::numberProtoFuncToExponential):
4465        (JSC::numberProtoFuncToPrecision):
4466        * runtime/ObjectConstructor.cpp:
4467        (JSC::callObjectConstructor):
4468        * runtime/ObjectPrototype.cpp:
4469        (JSC::objectProtoFuncValueOf):
4470        (JSC::objectProtoFuncHasOwnProperty):
4471        (JSC::objectProtoFuncIsPrototypeOf):
4472        (JSC::objectProtoFuncDefineGetter):
4473        (JSC::objectProtoFuncDefineSetter):
4474        (JSC::objectProtoFuncLookupGetter):
4475        (JSC::objectProtoFuncLookupSetter):
4476        (JSC::objectProtoFuncPropertyIsEnumerable):
4477        (JSC::objectProtoFuncToLocaleString):
4478        (JSC::objectProtoFuncToString):
4479        * runtime/ObjectPrototype.h:
4480        * runtime/RegExpConstructor.cpp:
4481        (JSC::callRegExpConstructor):
4482        * runtime/RegExpObject.cpp:
4483        (JSC::callRegExpObject):
4484        * runtime/RegExpPrototype.cpp:
4485        (JSC::regExpProtoFuncTest):
4486        (JSC::regExpProtoFuncExec):
4487        (JSC::regExpProtoFuncCompile):
4488        (JSC::regExpProtoFuncToString):
4489        * runtime/StringConstructor.cpp:
4490        (JSC::stringFromCharCode):
4491        (JSC::callStringConstructor):
4492        * runtime/StringPrototype.cpp:
4493        (JSC::stringProtoFuncReplace):
4494        (JSC::stringProtoFuncToString):
4495        (JSC::stringProtoFuncCharAt):
4496        (JSC::stringProtoFuncCharCodeAt):
4497        (JSC::stringProtoFuncConcat):
4498        (JSC::stringProtoFuncIndexOf):
4499        (JSC::stringProtoFuncLastIndexOf):
4500        (JSC::stringProtoFuncMatch):
4501        (JSC::stringProtoFuncSearch):
4502        (JSC::stringProtoFuncSlice):
4503        (JSC::stringProtoFuncSplit):
4504        (JSC::stringProtoFuncSubstr):
4505        (JSC::stringProtoFuncSubstring):
4506        (JSC::stringProtoFuncToLowerCase):
4507        (JSC::stringProtoFuncToUpperCase):
4508        (JSC::stringProtoFuncLocaleCompare):
4509        (JSC::stringProtoFuncBig):
4510        (JSC::stringProtoFuncSmall):
4511        (JSC::stringProtoFuncBlink):
4512        (JSC::stringProtoFuncBold):
4513        (JSC::stringProtoFuncFixed):
4514        (JSC::stringProtoFuncItalics):
4515        (JSC::stringProtoFuncStrike):
4516        (JSC::stringProtoFuncSub):
4517        (JSC::stringProtoFuncSup):
4518        (JSC::stringProtoFuncFontcolor):
4519        (JSC::stringProtoFuncFontsize):
4520        (JSC::stringProtoFuncAnchor):
4521        (JSC::stringProtoFuncLink):
4522        * wtf/Platform.h:
4523
45242009-05-07  Geoffrey Garen  <ggaren@apple.com>
4525
4526        Not reviewed.
4527        
4528        Rolled out a portion of r43352 because it broke 64bit.
4529
4530        * jit/JITStubs.h:
4531
45322009-05-07  Kevin Ollivier  <kevino@theolliviers.com>
4533
4534        Build fix for functions reaturning ThreadIdentifier.
4535
4536        * wtf/ThreadingNone.cpp:
4537        (WTF::createThreadInternal):
4538        (WTF::currentThread):
4539
45402009-05-07  Maciej Stachowiak  <mjs@apple.com>
4541
4542        Reviewed by John Honeycutt.
4543        
4544        - enable optimization case im the last patch that I accidentally had disabled.
4545
4546        * jit/JITArithmetic.cpp:
4547        (JSC::JIT::compileFastArithSlow_op_jnless):
4548
45492009-05-07  Dmitry Titov  <dimich@chromium.org>
4550
4551        Attempt to fix Win build.
4552
4553        * jit/JITArithmetic.cpp:
4554        (JSC::JIT::compileFastArithSlow_op_jnless):
4555
45562009-05-07  Dmitry Titov  <dimich@chromium.org>
4557
4558        Reviewed by Alexey Proskuryakov and Adam Roben.
4559
4560        https://bugs.webkit.org/show_bug.cgi?id=25348
4561        Change WTF::ThreadIdentifier to be an actual (but wrapped) thread id, remove ThreadMap.
4562
4563        * wtf/Threading.h:
4564        (WTF::ThreadIdentifier::ThreadIdentifier):
4565        (WTF::ThreadIdentifier::isValid):
4566        (WTF::ThreadIdentifier::invalidate):
4567        (WTF::ThreadIdentifier::platformId):
4568        ThreadIdentifier is now a class, containing a PlatformThreadIdentifier and
4569        methods that are used across the code on thread ids: construction, comparisons,
4570        check for 'valid' state etc. '0' is used as invalid id, which happens to just work
4571        with all platform-specific thread id implementations.
4572
4573        All the following files repeatedly reflect the new ThreadIdentifier for each platform.
4574        We remove ThreadMap and threadMapMutex from all of them, remove the functions that
4575        populated/searched/cleared the map and add platform-specific comparison operators
4576        for ThreadIdentifier.
4577
4578        * wtf/gtk/ThreadingGtk.cpp:
4579        (WTF::ThreadIdentifier::operator==):
4580        (WTF::ThreadIdentifier::operator!=):
4581        (WTF::initializeThreading):
4582        (WTF::createThreadInternal):
4583        (WTF::waitForThreadCompletion):
4584        (WTF::currentThread):
4585
4586        * wtf/ThreadingNone.cpp:
4587        (WTF::ThreadIdentifier::operator==):
4588        (WTF::ThreadIdentifier::operator!=):
4589
4590        * wtf/ThreadingPthreads.cpp:
4591        (WTF::ThreadIdentifier::operator==):
4592        (WTF::ThreadIdentifier::operator!=):
4593        (WTF::initializeThreading):
4594        (WTF::createThreadInternal):
4595        (WTF::waitForThreadCompletion):
4596        (WTF::detachThread):
4597        (WTF::currentThread):
4598
4599        * wtf/qt/ThreadingQt.cpp:
4600        (WTF::ThreadIdentifier::operator==):
4601        (WTF::ThreadIdentifier::operator!=):
4602        (WTF::initializeThreading):
4603        (WTF::createThreadInternal):
4604        (WTF::waitForThreadCompletion):
4605        (WTF::currentThread):
4606
4607        * wtf/ThreadingWin.cpp:
4608        (WTF::ThreadIdentifier::operator==):
4609        (WTF::ThreadIdentifier::operator!=):
4610        (WTF::initializeThreading):
4611        (WTF::createThreadInternal): All the platforms (except Windows) used a sequential
4612        counter as a thread ID and mapped it into platform ID. Windows was using native thread
4613        id and mapped it into thread handle. Since we can always obtain a thread handle
4614        by thread id, createThread now closes the handle.
4615        (WTF::waitForThreadCompletion): obtains another one using OpenThread(id) API. If can not obtain a handle,
4616        it means the thread already exited.
4617        (WTF::detachThread):
4618        (WTF::currentThread):
4619        (WTF::detachThreadDeprecated): old function, renamed (for Win Safari 4 beta which uses it for now).
4620        (WTF::waitForThreadCompletionDeprecated): same.
4621        (WTF::currentThreadDeprecated): same.
4622        (WTF::createThreadDeprecated): same.
4623
4624        * bytecode/SamplingTool.h:
4625        * bytecode/SamplingTool.cpp: Use DEFINE_STATIC_LOCAL for a static ThreadIdentifier variable, to avoid static constructor.
4626
4627        * JavaScriptCore.exp: export lists - updated the WTF threading functions decorated names
4628        since they now take a different type as a parameter.
4629        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: ditto for Windows, plus added "deprecated" functions
4630        that take old parameter type - turns out public beta of Safari 4 uses those, so they need to be kept along for a while.
4631        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: ditto.
4632
46332009-05-07  Maciej Stachowiak  <mjs@apple.com>
4634
4635        Reviewed by Sam Weinig.
4636        
4637        - optimize various cases of branch-fused less
4638        
4639        1% speedup on SunSpider overall
4640        13% speedup on math-cordic
4641
4642        * jit/JIT.cpp:
4643        (JSC::JIT::privateCompileMainPass):
4644        op_loop_if_less: Optimize case of constant as first operand, just as case of constant as
4645        second operand.
4646        op_jnless: Factored out into compileFastArith_op_jnless.
4647        (JSC::JIT::privateCompileSlowCases):
4648        op_jnless: Factored out into compileFastArithSlow_op_jnless.
4649        * jit/JIT.h:
4650        * jit/JITArithmetic.cpp:
4651        (JSC::JIT::compileFastArith_op_jnless): Factored out from main compile loop.
4652        - Generate inline code for comparison of constant immediate int as first operand to another
4653        immediate int, as for loop_if_less
4654
4655        (JSC::JIT::compileFastArithSlow_op_jnless):
4656        - Generate inline code for comparing two floating point numbers.
4657        - Generate code for both cases of comparing a floating point number to a constant immediate 
4658        int.
4659        * bytecode/CodeBlock.cpp:
4660        (JSC::CodeBlock::dump): Fix dumping of op_jnless (tangentially related bugfix).
4661
46622009-05-07  Geoffrey Garen  <ggaren@apple.com>
4663
4664        Reviewed by Sam Weinig.
4665        
4666        Added the return address of a stub function to the JITStackFrame abstraction.
4667
4668        * jit/JIT.cpp:
4669        * jit/JIT.h:
4670        * jit/JITStubs.cpp:
4671        (JSC::):
4672        (JSC::StackHack::StackHack):
4673        (JSC::StackHack::~StackHack):
4674        (JSC::returnToThrowTrampoline):
4675        (JSC::JITStubs::cti_op_convert_this):
4676        (JSC::JITStubs::cti_op_end):
4677        (JSC::JITStubs::cti_op_add):
4678        (JSC::JITStubs::cti_op_pre_inc):
4679        (JSC::JITStubs::cti_timeout_check):
4680        (JSC::JITStubs::cti_register_file_check):
4681        (JSC::JITStubs::cti_op_loop_if_less):
4682        (JSC::JITStubs::cti_op_loop_if_lesseq):
4683        (JSC::JITStubs::cti_op_new_object):
4684        (JSC::JITStubs::cti_op_put_by_id_generic):
4685        (JSC::JITStubs::cti_op_get_by_id_generic):
4686        (JSC::JITStubs::cti_op_put_by_id):
4687        (JSC::JITStubs::cti_op_put_by_id_second):
4688        (JSC::JITStubs::cti_op_put_by_id_fail):
4689        (JSC::JITStubs::cti_op_get_by_id):
4690        (JSC::JITStubs::cti_op_get_by_id_second):
4691        (JSC::JITStubs::cti_op_get_by_id_self_fail):
4692        (JSC::JITStubs::cti_op_get_by_id_proto_list):
4693        (JSC::JITStubs::cti_op_get_by_id_proto_list_full):
4694        (JSC::JITStubs::cti_op_get_by_id_proto_fail):
4695        (JSC::JITStubs::cti_op_get_by_id_array_fail):
4696        (JSC::JITStubs::cti_op_get_by_id_string_fail):
4697        (JSC::JITStubs::cti_op_instanceof):
4698        (JSC::JITStubs::cti_op_del_by_id):
4699        (JSC::JITStubs::cti_op_mul):
4700        (JSC::JITStubs::cti_op_new_func):
4701        (JSC::JITStubs::cti_op_call_JSFunction):
4702        (JSC::JITStubs::cti_op_call_arityCheck):
4703        (JSC::JITStubs::cti_vm_dontLazyLinkCall):
4704        (JSC::JITStubs::cti_vm_lazyLinkCall):
4705        (JSC::JITStubs::cti_op_push_activation):
4706        (JSC::JITStubs::cti_op_call_NotJSFunction):
4707        (JSC::JITStubs::cti_op_create_arguments):
4708        (JSC::JITStubs::cti_op_create_arguments_no_params):
4709        (JSC::JITStubs::cti_op_tear_off_activation):
4710        (JSC::JITStubs::cti_op_tear_off_arguments):
4711        (JSC::JITStubs::cti_op_profile_will_call):
4712        (JSC::JITStubs::cti_op_profile_did_call):
4713        (JSC::JITStubs::cti_op_ret_scopeChain):
4714        (JSC::JITStubs::cti_op_new_array):
4715        (JSC::JITStubs::cti_op_resolve):
4716        (JSC::JITStubs::cti_op_construct_JSConstruct):
4717        (JSC::JITStubs::cti_op_construct_NotJSConstruct):
4718        (JSC::JITStubs::cti_op_get_by_val):
4719        (JSC::JITStubs::cti_op_get_by_val_string):
4720        (JSC::JITStubs::cti_op_get_by_val_byte_array):
4721        (JSC::JITStubs::cti_op_resolve_func):
4722        (JSC::JITStubs::cti_op_sub):
4723        (JSC::JITStubs::cti_op_put_by_val):
4724        (JSC::JITStubs::cti_op_put_by_val_array):
4725        (JSC::JITStubs::cti_op_put_by_val_byte_array):
4726        (JSC::JITStubs::cti_op_lesseq):
4727        (JSC::JITStubs::cti_op_loop_if_true):
4728        (JSC::JITStubs::cti_op_load_varargs):
4729        (JSC::JITStubs::cti_op_negate):
4730        (JSC::JITStubs::cti_op_resolve_base):
4731        (JSC::JITStubs::cti_op_resolve_skip):
4732        (JSC::JITStubs::cti_op_resolve_global):
4733        (JSC::JITStubs::cti_op_div):
4734        (JSC::JITStubs::cti_op_pre_dec):
4735        (JSC::JITStubs::cti_op_jless):
4736        (JSC::JITStubs::cti_op_not):
4737        (JSC::JITStubs::cti_op_jtrue):
4738        (JSC::JITStubs::cti_op_post_inc):
4739        (JSC::JITStubs::cti_op_eq):
4740        (JSC::JITStubs::cti_op_lshift):
4741        (JSC::JITStubs::cti_op_bitand):
4742        (JSC::JITStubs::cti_op_rshift):
4743        (JSC::JITStubs::cti_op_bitnot):
4744        (JSC::JITStubs::cti_op_resolve_with_base):
4745        (JSC::JITStubs::cti_op_new_func_exp):
4746        (JSC::JITStubs::cti_op_mod):
4747        (JSC::JITStubs::cti_op_less):
4748        (JSC::JITStubs::cti_op_neq):
4749        (JSC::JITStubs::cti_op_post_dec):
4750        (JSC::JITStubs::cti_op_urshift):
4751        (JSC::JITStubs::cti_op_bitxor):
4752        (JSC::JITStubs::cti_op_new_regexp):
4753        (JSC::JITStubs::cti_op_bitor):
4754        (JSC::JITStubs::cti_op_call_eval):
4755        (JSC::JITStubs::cti_op_throw):
4756        (JSC::JITStubs::cti_op_get_pnames):
4757        (JSC::JITStubs::cti_op_next_pname):
4758        (JSC::JITStubs::cti_op_push_scope):
4759        (JSC::JITStubs::cti_op_pop_scope):
4760        (JSC::JITStubs::cti_op_typeof):
4761        (JSC::JITStubs::cti_op_is_undefined):
4762        (JSC::JITStubs::cti_op_is_boolean):
4763        (JSC::JITStubs::cti_op_is_number):
4764        (JSC::JITStubs::cti_op_is_string):
4765        (JSC::JITStubs::cti_op_is_object):
4766        (JSC::JITStubs::cti_op_is_function):
4767        (JSC::JITStubs::cti_op_stricteq):
4768        (JSC::JITStubs::cti_op_to_primitive):
4769        (JSC::JITStubs::cti_op_strcat):
4770        (JSC::JITStubs::cti_op_nstricteq):
4771        (JSC::JITStubs::cti_op_to_jsnumber):
4772        (JSC::JITStubs::cti_op_in):
4773        (JSC::JITStubs::cti_op_push_new_scope):
4774        (JSC::JITStubs::cti_op_jmp_scopes):
4775        (JSC::JITStubs::cti_op_put_by_index):
4776        (JSC::JITStubs::cti_op_switch_imm):
4777        (JSC::JITStubs::cti_op_switch_char):
4778        (JSC::JITStubs::cti_op_switch_string):
4779        (JSC::JITStubs::cti_op_del_by_val):
4780        (JSC::JITStubs::cti_op_put_getter):
4781        (JSC::JITStubs::cti_op_put_setter):
4782        (JSC::JITStubs::cti_op_new_error):
4783        (JSC::JITStubs::cti_op_debug):
4784        (JSC::JITStubs::cti_vm_throw):
4785        * jit/JITStubs.h:
4786        (JSC::JITStackFrame::returnAddressSlot):
4787
47882009-05-07  Darin Adler  <darin@apple.com>
4789
4790        Reviewed by Geoff Garen.
4791
4792        * parser/Lexer.cpp:
4793        (JSC::Lexer::lex): Fix missing braces. This would make us always
4794        take the slower case for string parsing and Visual Studio correctly
4795        noticed unreachable code.
4796
47972009-05-07  Darin Adler  <darin@apple.com>
4798
4799        Reviewed by Sam Weinig.
4800
4801        Bug 25589: goto instead of state machine in lexer
4802        https://bugs.webkit.org/show_bug.cgi?id=25589
4803
4804        SunSpider is 0.8% faster.
4805
4806        * parser/Lexer.cpp:
4807        (JSC::Lexer::currentCharacter): Added.
4808        (JSC::Lexer::currentOffset): Changed to call currentCharacter for clarity.
4809        (JSC::Lexer::setCode): Removed code to set now-obsolete m_skipLineEnd.
4810        (JSC::Lexer::shiftLineTerminator): Added. Handles line numbers and the
4811        two-character line terminators.
4812        (JSC::Lexer::makeIdentifier): Changed to take characters and length rather
4813        than a vector, since we now make these directly out of the source buffer
4814        when possible.
4815        (JSC::Lexer::lastTokenWasRestrKeyword): Added.
4816        (JSC::isNonASCIIIdentStart): Broke out the non-inline part.
4817        (JSC::isIdentStart): Moved here.
4818        (JSC::isNonASCIIIdentPart): Broke out the non-inline part.
4819        (JSC::isIdentPart): Moved here.
4820        (JSC::singleEscape): Moved here, and removed some unneeded cases.
4821        (JSC::Lexer::record8): Moved here.
4822        (JSC::Lexer::record16): Moved here.
4823        (JSC::Lexer::lex): Rewrote this whole function to use goto and not use
4824        a state machine. Got rid of most of the local variables. Also rolled the
4825        matchPunctuator function in here.
4826        (JSC::Lexer::scanRegExp): Changed to use the new version of isLineTerminator.
4827        Clear m_buffer16 after using it instead of before.
4828
4829        * parser/Lexer.h: Removed State enum, setDone function, nextLine function,
4830        lookupKeywordFunction, one of the isLineTerminator functions, m_done data member,
4831        m_skipLineEnd data member, and m_state data member. Added shiftLineTerminator
4832        function, currentCharacter function, and changed the arguments to the makeIdentifier
4833        function. Removed one branch from the isLineTerminator function.
4834
4835        * runtime/StringPrototype.cpp:
4836        (JSC::stringProtoFuncReplace): Streamlined the case where we don't replace anything.
4837
48382009-05-07  Geoffrey Garen  <ggaren@apple.com>
4839
4840        Reviewed by Gavin Barraclough.
4841
4842        Removed a few more special constants, and replaced them with uses of
4843        the JITStackFrame struct.
4844
4845        Removed one of the two possible definitions of VoidPtrPair. The Mac
4846        definition was more elegant, but SunSpider doesn't think it's any
4847        faster, and it's net less elegant to have two ways of doing things.
4848
4849        * jit/JIT.cpp:
4850        (JSC::JIT::privateCompileMainPass):
4851        (JSC::JIT::privateCompile):
4852        * jit/JITStubs.h:
4853        (JSC::):
4854
48552009-05-07  Darin Adler  <darin@apple.com>
4856
4857        * runtime/ScopeChain.h:
4858        (JSC::ScopeChainNode::~ScopeChainNode): Tweak formatting.
4859
48602009-05-07  Simon Hausmann  <simon.hausmann@nokia.com>
4861
4862        Reviewed by Tor Arne Vestbø.
4863
4864        Fix the build thread stack base determination build on Symbian,
4865        by moving the code block before PLATFORM(UNIX), which is also
4866        enabled on Symbian builds.
4867
4868        * runtime/Collector.cpp:
4869        (JSC::currentThreadStackBase):
4870
48712009-05-07  Oliver Hunt  <oliver@apple.com>
4872
4873        Reviewed by Gavin Barraclough.
4874
4875        Fix crash due to incorrectly using an invalid scopechain 
4876
4877        stringProtoFuncReplace was checking for an exception on a CachedCall
4878        by asking for the cached callframes exception.  Unfortunately this
4879        could crash in certain circumstances as CachedCall does not guarantee
4880        a valid callframe following a call.  Even more unfortunately the check
4881        was entirely unnecessary as there is only a single exception slot per
4882        global data, so it was already checked via the initial exec->hadException()
4883        check.
4884
4885        To make bugs like this more obvious, i've added a debug only destructor
4886        to ScopeChainNode that 0's all of its fields.  This exposed a crash in
4887        the standard javascriptcore tests.
4888
4889        * runtime/ScopeChain.h:
4890        (JSC::ScopeChainNode::~ScopeChainNode):
4891        (JSC::ScopeChain::~ScopeChain):
4892        * runtime/StringPrototype.cpp:
4893        (JSC::stringProtoFuncReplace):
4894
48952009-05-07  Gavin Barraclough  <barraclough@apple.com>
4896
4897        Reviewed by Geoff Garen.
4898
4899        Enable op_strcat across += assignments.  This patch allows the lhs of a read/modify node
4900        to be included within the concatenation operation, and also modifies the implementation
4901        of the concatenation to attempt to reuse and cat onto the leftmost string, rather than
4902        always allocating a new empty output string to copy into (as was previously the behaviour).
4903
4904        ~0.5% progression, due to a 3%-3.5% progression on the string tests (particularly validate).
4905
4906        * parser/Nodes.cpp:
4907        (JSC::BinaryOpNode::emitStrcat):
4908        (JSC::emitReadModifyAssignment):
4909        (JSC::ReadModifyResolveNode::emitBytecode):
4910        (JSC::ReadModifyDotNode::emitBytecode):
4911        (JSC::ReadModifyBracketNode::emitBytecode):
4912        * parser/Nodes.h:
4913        * runtime/Operations.h:
4914        (JSC::concatenateStrings):
4915        * runtime/UString.cpp:
4916        (JSC::UString::reserveCapacity):
4917        * runtime/UString.h:
4918
49192009-05-07  Simon Hausmann  <simon.hausmann@nokia.com>
4920
4921        Reviewed by Oliver Hunt.
4922
4923        Fix the build on Windows without JIT: interpreter/RegisterFile.h needs
4924        roundUpAllocationSize, which is protected by #if ENABLED(ASSEMBLER).
4925        Moved the #ifdef down and always offer the function.
4926
4927        * jit/ExecutableAllocator.h:
4928
49292009-05-06  Geoffrey Garen  <ggaren@apple.com>
4930
4931        Reviewed by Gavin "++" Barraclough.
4932        
4933        Added some abstraction around the JIT stub calling convention by creating
4934        a struct to represent the persistent stack frame JIT code shares with
4935        JIT stubs.
4936        
4937        SunSpider reports no change.
4938
4939        * jit/JIT.h:
4940        * jit/JITStubs.cpp:
4941        (JSC::JITStubs::cti_op_convert_this):
4942        (JSC::JITStubs::cti_op_end):
4943        (JSC::JITStubs::cti_op_add):
4944        (JSC::JITStubs::cti_op_pre_inc):
4945        (JSC::JITStubs::cti_timeout_check):
4946        (JSC::JITStubs::cti_register_file_check):
4947        (JSC::JITStubs::cti_op_loop_if_less):
4948        (JSC::JITStubs::cti_op_loop_if_lesseq):
4949        (JSC::JITStubs::cti_op_new_object):
4950        (JSC::JITStubs::cti_op_put_by_id_generic):
4951        (JSC::JITStubs::cti_op_get_by_id_generic):
4952        (JSC::JITStubs::cti_op_put_by_id):
4953        (JSC::JITStubs::cti_op_put_by_id_second):
4954        (JSC::JITStubs::cti_op_put_by_id_fail):
4955        (JSC::JITStubs::cti_op_get_by_id):
4956        (JSC::JITStubs::cti_op_get_by_id_second):
4957        (JSC::JITStubs::cti_op_get_by_id_self_fail):
4958        (JSC::JITStubs::cti_op_get_by_id_proto_list):
4959        (JSC::JITStubs::cti_op_get_by_id_proto_list_full):
4960        (JSC::JITStubs::cti_op_get_by_id_proto_fail):
4961        (JSC::JITStubs::cti_op_get_by_id_array_fail):
4962        (JSC::JITStubs::cti_op_get_by_id_string_fail):
4963        (JSC::JITStubs::cti_op_instanceof):
4964        (JSC::JITStubs::cti_op_del_by_id):
4965        (JSC::JITStubs::cti_op_mul):
4966        (JSC::JITStubs::cti_op_new_func):
4967        (JSC::JITStubs::cti_op_call_JSFunction):
4968        (JSC::JITStubs::cti_op_call_arityCheck):
4969        (JSC::JITStubs::cti_vm_dontLazyLinkCall):
4970        (JSC::JITStubs::cti_vm_lazyLinkCall):
4971        (JSC::JITStubs::cti_op_push_activation):
4972        (JSC::JITStubs::cti_op_call_NotJSFunction):
4973        (JSC::JITStubs::cti_op_create_arguments):
4974        (JSC::JITStubs::cti_op_create_arguments_no_params):
4975        (JSC::JITStubs::cti_op_tear_off_activation):
4976        (JSC::JITStubs::cti_op_tear_off_arguments):
4977        (JSC::JITStubs::cti_op_profile_will_call):
4978        (JSC::JITStubs::cti_op_profile_did_call):
4979        (JSC::JITStubs::cti_op_ret_scopeChain):
4980        (JSC::JITStubs::cti_op_new_array):
4981        (JSC::JITStubs::cti_op_resolve):
4982        (JSC::JITStubs::cti_op_construct_JSConstruct):
4983        (JSC::JITStubs::cti_op_construct_NotJSConstruct):
4984        (JSC::JITStubs::cti_op_get_by_val):
4985        (JSC::JITStubs::cti_op_get_by_val_string):
4986        (JSC::JITStubs::cti_op_get_by_val_byte_array):
4987        (JSC::JITStubs::cti_op_resolve_func):
4988        (JSC::JITStubs::cti_op_sub):
4989        (JSC::JITStubs::cti_op_put_by_val):
4990        (JSC::JITStubs::cti_op_put_by_val_array):
4991        (JSC::JITStubs::cti_op_put_by_val_byte_array):
4992        (JSC::JITStubs::cti_op_lesseq):
4993        (JSC::JITStubs::cti_op_loop_if_true):
4994        (JSC::JITStubs::cti_op_load_varargs):
4995        (JSC::JITStubs::cti_op_negate):
4996        (JSC::JITStubs::cti_op_resolve_base):
4997        (JSC::JITStubs::cti_op_resolve_skip):
4998        (JSC::JITStubs::cti_op_resolve_global):
4999        (JSC::JITStubs::cti_op_div):
5000        (JSC::JITStubs::cti_op_pre_dec):
5001        (JSC::JITStubs::cti_op_jless):
5002        (JSC::JITStubs::cti_op_not):
5003        (JSC::JITStubs::cti_op_jtrue):
5004        (JSC::JITStubs::cti_op_post_inc):
5005        (JSC::JITStubs::cti_op_eq):
5006        (JSC::JITStubs::cti_op_lshift):
5007        (JSC::JITStubs::cti_op_bitand):
5008        (JSC::JITStubs::cti_op_rshift):
5009        (JSC::JITStubs::cti_op_bitnot):
5010        (JSC::JITStubs::cti_op_resolve_with_base):
5011        (JSC::JITStubs::cti_op_new_func_exp):
5012        (JSC::JITStubs::cti_op_mod):
5013        (JSC::JITStubs::cti_op_less):
5014        (JSC::JITStubs::cti_op_neq):
5015        (JSC::JITStubs::cti_op_post_dec):
5016        (JSC::JITStubs::cti_op_urshift):
5017        (JSC::JITStubs::cti_op_bitxor):
5018        (JSC::JITStubs::cti_op_new_regexp):
5019        (JSC::JITStubs::cti_op_bitor):
5020        (JSC::JITStubs::cti_op_call_eval):
5021        (JSC::JITStubs::cti_op_throw):
5022        (JSC::JITStubs::cti_op_get_pnames):
5023        (JSC::JITStubs::cti_op_next_pname):
5024        (JSC::JITStubs::cti_op_push_scope):
5025        (JSC::JITStubs::cti_op_pop_scope):
5026        (JSC::JITStubs::cti_op_typeof):
5027        (JSC::JITStubs::cti_op_is_undefined):
5028        (JSC::JITStubs::cti_op_is_boolean):
5029        (JSC::JITStubs::cti_op_is_number):
5030        (JSC::JITStubs::cti_op_is_string):
5031        (JSC::JITStubs::cti_op_is_object):
5032        (JSC::JITStubs::cti_op_is_function):
5033        (JSC::JITStubs::cti_op_stricteq):
5034        (JSC::JITStubs::cti_op_to_primitive):
5035        (JSC::JITStubs::cti_op_strcat):
5036        (JSC::JITStubs::cti_op_nstricteq):
5037        (JSC::JITStubs::cti_op_to_jsnumber):
5038        (JSC::JITStubs::cti_op_in):
5039        (JSC::JITStubs::cti_op_push_new_scope):
5040        (JSC::JITStubs::cti_op_jmp_scopes):
5041        (JSC::JITStubs::cti_op_put_by_index):
5042        (JSC::JITStubs::cti_op_switch_imm):
5043        (JSC::JITStubs::cti_op_switch_char):
5044        (JSC::JITStubs::cti_op_switch_string):
5045        (JSC::JITStubs::cti_op_del_by_val):
5046        (JSC::JITStubs::cti_op_put_getter):
5047        (JSC::JITStubs::cti_op_put_setter):
5048        (JSC::JITStubs::cti_op_new_error):
5049        (JSC::JITStubs::cti_op_debug):
5050        (JSC::JITStubs::cti_vm_throw):
5051        * jit/JITStubs.h:
5052        (JSC::):
5053
50542009-05-06  Gavin Barraclough  <barraclough@apple.com>
5055
5056        Reviewed by Maciej Stachowiak & Darin Adler.
5057
5058        Improve string concatenation (as coded in JS as a sequence of adds).
5059
5060        Detect patterns corresponding to string concatenation, and change the bytecode
5061        generation to emit a new op_strcat instruction.  By handling the full set of
5062        additions within a single function we do not need allocate JSString wrappers
5063        for intermediate results, and we can calculate the size of the output string
5064        prior to allocating storage, in order to prevent reallocation of the buffer.
5065
5066        1.5%-2% progression on Sunspider, largely due to a 30% progression on date-format-xparb.
5067
5068        * bytecode/CodeBlock.cpp:
5069        (JSC::CodeBlock::dump):
5070            Add new opcodes.
5071        * bytecode/Opcode.h:
5072            Add new opcodes.
5073        * bytecompiler/BytecodeGenerator.cpp:
5074        (JSC::BytecodeGenerator::emitStrcat):
5075        (JSC::BytecodeGenerator::emitToPrimitive):
5076            Add generation of new opcodes.
5077        * bytecompiler/BytecodeGenerator.h:
5078            Add generation of new opcodes.
5079        * interpreter/Interpreter.cpp:
5080        (JSC::Interpreter::privateExecute):
5081            Add implmentation of new opcodes.
5082        * jit/JIT.cpp:
5083        (JSC::JIT::privateCompileMainPass):
5084        (JSC::JIT::privateCompileSlowCases):
5085            Add implmentation of new opcodes.
5086        * jit/JITStubs.cpp:
5087        (JSC::JITStubs::cti_op_to_primitive):
5088        (JSC::JITStubs::cti_op_strcat):
5089            Add implmentation of new opcodes.
5090        * jit/JITStubs.h:
5091            Add implmentation of new opcodes.
5092        * parser/Nodes.cpp:
5093        (JSC::BinaryOpNode::emitStrcat):
5094        (JSC::BinaryOpNode::emitBytecode):
5095        (JSC::ReadModifyResolveNode::emitBytecode):
5096            Add generation of new opcodes.
5097        * parser/Nodes.h:
5098        (JSC::ExpressionNode::):
5099        (JSC::AddNode::):
5100            Add methods to allow identification of add nodes.
5101        * parser/ResultType.h:
5102        (JSC::ResultType::definitelyIsString):
5103        (JSC::ResultType::forAdd):
5104            Fix error in detection of adds that will produce string results.
5105        * runtime/Operations.h:
5106        (JSC::concatenateStrings):
5107            Add implmentation of new opcodes.
5108        * runtime/UString.cpp:
5109        (JSC::UString::appendNumeric):
5110            Add methods to append numbers to an existing string.
5111        * runtime/UString.h:
5112        (JSC::UString::Rep::createEmptyBuffer):
5113        (JSC::UString::BaseString::BaseString):
5114            Add support for creating an empty string with a non-zero capacity available in the BaseString.
5115
51162009-05-06  Darin Adler  <darin@apple.com>
5117
5118        Reviewed by Sam Weinig.
5119
5120        Made RefCounted::m_refCount private.
5121
5122        * runtime/Structure.h: Removed addressOfCount.
5123        * wtf/RefCounted.h: Made m_refCount private.
5124        Added addressOfCount.
5125
51262009-05-06  Darin Adler  <darin@apple.com>
5127
5128        Fixed assertion seen a lot!
5129
5130        * parser/Nodes.cpp:
5131        (JSC::FunctionBodyNode::~FunctionBodyNode): Removed now-bogus assertion.
5132
51332009-05-06  Darin Adler  <darin@apple.com>
5134
5135        Working with Sam Weinig.
5136
5137        Redo parse tree constructor optimization without breaking the Windows
5138        build the way I did yesterday. The previous try broke the build by adding
5139        an include of Lexer.h and all its dependencies that had to work outside
5140        the JavaScriptCore project.
5141
5142        * GNUmakefile.am: Added NodeConstructors.h.
5143        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
5144
5145        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
5146        Removed byteocde directory -- we no longer are trying to include Lexer.h
5147        outside JavaScriptCore.
5148
5149        * JavaScriptCore.xcodeproj/project.pbxproj: Change SegmentedVector.h
5150        and Lexer.h back to internal files. Added NodeConstructors.h.
5151
5152        * parser/Grammar.y: Added include of NodeConstructors.h.
5153        Changed use of ConstDeclNode to use public functions.
5154
5155        * parser/NodeConstructors.h: Copied from parser/Nodes.h.
5156        Just contains the inlined constructors now.
5157
5158        * parser/Nodes.cpp: Added include of NodeConstructors.h.
5159        Moved node constructors into the header.
5160        (JSC::FunctionBodyNode::FunctionBodyNode): Removed m_refCount
5161        initialization.
5162
5163        * parser/Nodes.h: Removed all the constructor definitions, and also
5164        removed the JSC_FAST_CALL from them since these are all inlined, so the
5165        calling convention is irrelevant. Made more things private. Used a data
5166        member for operator opcodes instead of a virtual function. Removed the
5167        special FunctionBodyNode::ref/deref functions since the default functions
5168        are now just as fast.
5169
5170        * runtime/FunctionConstructor.cpp:
5171        (JSC::extractFunctionBody): Fixed types here so we don't typecast until
5172        after we do type checking.
5173
51742009-05-06  Simon Hausmann  <simon.hausmann@nokia.com>
5175
5176        Reviewed by Ariya Hidayat.
5177
5178        Fix the Qt build on Windows.
5179
5180        * JavaScriptCore.pri: Define BUILDING_JavaScriptCore/WTF to get the meaning
5181        of the JS_EXPORTDATA macros correct
5182
51832009-05-06  Simon Hausmann  <simon.hausmann@nokia.com>
5184
5185        Reviewed by Ariya Hidayat.
5186
5187        Enable the JIT for the Qt build on Windows.
5188
5189        * JavaScriptCore.pri:
5190
51912009-05-06  Simon Hausmann  <simon.hausmann@nokia.com>
5192
5193        Reviewed by Tor Arne Vestbø.
5194
5195        Tweak JavaScriptCore.pri for being able to override the generated sources dir for the
5196        generated_files target.
5197
5198        * JavaScriptCore.pri:
5199
52002009-05-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
5201
5202        Reviewed by Simon Hausmann.
5203
5204        Build QtWebKit as a framework on Mac
5205
5206        This implies both debug and release build by default, unless
5207        one of the --debug or --release config options are passed to
5208        the build-webkit script.
5209
5210        Frameworks can be disabled by passing CONFIG+=webkit_no_framework
5211        to the build-webkit script.
5212
5213        To be able to build both debug and release targets in parallel
5214        we have to use separate output directories for the generated
5215        sources, which is not optimal, but required to avoid race conditions.
5216
5217        An optimization would be to only require this spit-up on Mac.
5218
5219        * JavaScriptCore.pri:
5220        * JavaScriptCore.pro:
5221        * jsc.pro:
5222
52232009-05-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
5224
5225        Reviewed by Simon Hausmann.
5226
5227        [Qt] Use $$GENERATED_SOURCES_DIR as output when running bison
5228
5229        A couple of the generators left the bison output file in the source
5230        tree, and then moved it into $$GENERATED_SOURCES_DIR, which did not
5231        work well when building release and debug configurations in parallel.
5232
5233        * JavaScriptCore.pri:
5234
52352009-05-05  Geoffrey Garen  <ggaren@apple.com>
5236
5237        Reviewed by Maciej Stachowiak.
5238        
5239        Simplified a bit of codegen.
5240
5241        * jit/JIT.cpp:
5242        (JSC::JIT::privateCompileMainPass):
5243
52442009-05-05  Geoffrey Garen  <ggaren@apple.com>
5245
5246        Reviewed by Cameron Zwarich.
5247        
5248        Moved all the JIT stub related code into one place.
5249
5250        * jit/JIT.cpp:
5251        * jit/JIT.h:
5252        * jit/JITCode.h:
5253        * jit/JITStubs.cpp:
5254        (JSC::):
5255        * jit/JITStubs.h:
5256
52572009-05-05  Sam Weinig  <sam@webkit.org>
5258
5259        Try to fix Windows build.
5260
5261        Move Node constructor to the .cpp file.
5262
5263        * parser/Nodes.cpp: 
5264        * parser/Nodes.h:
5265
52662009-05-05  Darin Adler  <darin@apple.com>
5267
5268        Try to fix Windows build.
5269
5270        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
5271        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
5272
5273        Try to fix Mac build.
5274
5275        * JavaScriptCore.xcodeproj/project.pbxproj: Made SegmentedVector.h private.
5276
52772009-05-05  Darin Adler  <darin@apple.com>
5278
5279        Try to fix Mac build.
5280
5281        * JavaScriptCore.xcodeproj/project.pbxproj: Made Lexer.h private.
5282
52832009-05-05  Darin Adler  <darin@apple.com>
5284
5285        Reviewed by Sam Weinig.
5286
5287        Bug 25569: make ParserRefCounted use conventional reference counting
5288        https://bugs.webkit.org/show_bug.cgi?id=25569
5289
5290        SunSpider speedup of about 1.6%.
5291
5292        * JavaScriptCore.exp: Updated.
5293
5294        * parser/Nodes.cpp:
5295        (JSC::NodeReleaser::releaseAllNodes): ALWAYS_INLINE.
5296        (JSC::NodeReleaser::adopt): Ditto.
5297        (JSC::ParserRefCounted::ParserRefCounted): Removed most of the code.
5298        Add the object to a Vector<RefPtr> that gets cleared after parsing.
5299        (JSC::ParserRefCounted::~ParserRefCounted): Removed most of the code.
5300
5301        * parser/Nodes.h: Made ParserRefCounted inherit from RefCounted and
5302        made inline versions of the constructor and destructor. Made the
5303        Node constructor inline.
5304
5305        * parser/Parser.cpp:
5306        (JSC::Parser::parse): Call globalData->parserObjects.shrink(0) after
5307        parsing, where it used to call ParserRefCounted::deleteNewObjects.
5308
5309        * runtime/JSGlobalData.cpp:
5310        (JSC::JSGlobalData::JSGlobalData): Eliminated code to manage the
5311        newParserObjects and parserObjectExtraRefCounts.
5312        (JSC::JSGlobalData::~JSGlobalData): Ditto.
5313
5314        * runtime/JSGlobalData.h: Replaced the HashSet and HashCountedSet
5315        with a Vector.
5316
5317        * wtf/PassRefPtr.h:
5318        (WTF::PassRefPtr::~PassRefPtr): The most common thing to do with a
5319        PassRefPtr in hot code is to pass it and then destroy it once it's
5320        set to zero. Help the optimizer by telling it that's true.
5321
53222009-05-05  Xan Lopez  <xlopez@igalia.com> and Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>
5323
5324        Reviewed by Oliver Hunt.
5325
5326        Disable the NativeFunctionWrapper for all non-Mac ports for now,
5327        as it is also crashing on Linux/x86.
5328
5329        * runtime/NativeFunctionWrapper.h:
5330
53312009-05-05  Steve Falkenburg  <sfalken@apple.com>
5332
5333        Fix build.
5334
5335        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
5336        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
5337
53382009-05-05  Oliver Hunt  <oliver@apple.com>
5339
5340        Reviewed by Maciej Stachowiak.
5341
5342        Expose toThisObject for the DOM Window
5343
5344        * JavaScriptCore.exp:
5345
53462009-05-05  Oliver Hunt  <oliver@apple.com>
5347
5348        Reviewed by NOBODY (Make windows go again until i work out the
5349        accursed calling convention).
5350
5351        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
5352        * jit/JIT.cpp:
5353        * runtime/NativeFunctionWrapper.h:
5354
53552009-05-05  Oliver Hunt  <oliver@apple.com>
5356
5357        Reviewed by NOBODY (Fix windows debug builds).
5358
5359        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
5360
53612009-05-05  Oliver Hunt  <oliver@apple.com>
5362
5363        Reviewed by NOBODY (Hopefully the last fix).
5364
5365        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
5366
53672009-05-05  Oliver Hunt  <oliver@apple.com>
5368
5369        Reviewed by NOBODY (Fix the build fix caused by a different build fix).
5370
5371        * parser/Nodes.cpp:
5372        * parser/Nodes.h:
5373
53742009-05-05  Oliver Hunt  <oliver@apple.com>
5375
5376        Reviewed by NOBODY (No idea how my changes could have broken these).
5377
5378        * runtime/DatePrototype.cpp:
5379        * runtime/RegExpObject.cpp:
5380
53812009-05-05  Oliver Hunt  <oliver@apple.com>
5382
5383        Reviewed by NOBODY (Why should i expect msvc to list all the errors in a file?).
5384
5385        * parser/Nodes.cpp:
5386
53872009-05-05  Oliver Hunt  <oliver@apple.com>
5388
5389        Reviewed by NOBODY (Fix warning, and another missing include).
5390
5391        * jit/JIT.cpp:
5392        * parser/Nodes.h:
5393
53942009-05-05  Oliver Hunt  <oliver@apple.com>
5395
5396        Reviewed by NOBODY (More build fixes).
5397
5398        * runtime/ErrorPrototype.cpp:
5399        * runtime/JSGlobalObject.cpp:
5400        * runtime/NumberPrototype.cpp:
5401        * runtime/ObjectPrototype.cpp:
5402        * runtime/StringConstructor.cpp:
5403
54042009-05-05  Oliver Hunt  <oliver@apple.com>
5405
5406        Reviewed by NOBODY (Will the fixes never end?).
5407
5408        * runtime/FunctionPrototype.h:
5409        * runtime/Lookup.cpp:
5410
54112009-05-05  Oliver Hunt  <oliver@apple.com>
5412
5413        Reviewed by NOBODY (More build fixes).
5414
5415        * jit/JIT.cpp:
5416
54172009-05-05  Oliver Hunt  <oliver@apple.com>
5418
5419        Reviewed by NOBODY (More build fixing).
5420
5421        * runtime/CallData.h:
5422
54232009-05-05  Oliver Hunt  <oliver@apple.com>
5424
5425        Reviewed by NOBODY (Build fix).
5426
5427        * runtime/ArrayConstructor.cpp:
5428        * runtime/BooleanPrototype.cpp:
5429        * runtime/DateConstructor.cpp:
5430        * runtime/Error.cpp:
5431        * runtime/ObjectConstructor.cpp:
5432        * runtime/RegExpPrototype.cpp:
5433
54342009-05-05  Oliver Hunt  <oliver@apple.com>
5435
5436        Reviewed by NOBODY (Buildfix).
5437
5438        Add missing file
5439
5440        * runtime/NativeFunctionWrapper.h: Copied from JavaScriptCore/jit/ExecutableAllocator.cpp.
5441
54422009-05-05  Oliver Hunt  <oliver@apple.com>
5443
5444        Reviewed by Gavin Barraclough.
5445
5446        Bug 25559: Improve native function call performance
5447        <https://bugs.webkit.org/show_bug.cgi?id=25559>
5448
5449        In order to cache calls to native functions we now make the standard
5450        prototype functions use a small assembly thunk that converts the JS
5451        calling convention into the native calling convention.  As this is
5452        only beneficial in the JIT we use the NativeFunctionWrapper typedef
5453        to alternate between PrototypeFunction and JSFunction to keep the
5454        code sane.  This change from PrototypeFunction to NativeFunctionWrapper
5455        is the bulk of this patch.
5456
5457        * JavaScriptCore.exp:
5458        * JavaScriptCore.xcodeproj/project.pbxproj:
5459        * assembler/MacroAssemblerX86Common.h:
5460        (JSC::MacroAssemblerX86Common::call):
5461        * assembler/MacroAssemblerX86_64.h:
5462        (JSC::MacroAssemblerX86_64::addPtr):
5463        * assembler/X86Assembler.h:
5464        (JSC::X86Assembler::leaq_mr):
5465        (JSC::X86Assembler::call_m):
5466        * interpreter/Interpreter.cpp:
5467        (JSC::Interpreter::execute):
5468        (JSC::Interpreter::prepareForRepeatCall):
5469        * jit/JIT.cpp:
5470        (JSC::JIT::privateCompileCTIMachineTrampolines):
5471        * jit/JIT.h:
5472        (JSC::JIT::compileCTIMachineTrampolines):
5473        * jit/JITCall.cpp:
5474        (JSC::JIT::linkCall):
5475        (JSC::JIT::compileOpCallInitializeCallFrame):
5476        (JSC::JIT::compileOpCall):
5477        * jit/JITCode.h:
5478        (JSC::JITCode::operator bool):
5479        * jit/JITInlineMethods.h:
5480        (JSC::JIT::emitGetFromCallFrameHeader):
5481        (JSC::JIT::emitGetFromCallFrameHeader32):
5482        * jit/JITStubs.cpp:
5483        (JSC::JITStubs::JITStubs):
5484        (JSC::JITStubs::cti_op_call_JSFunction):
5485        (JSC::JITStubs::cti_vm_dontLazyLinkCall):
5486        (JSC::JITStubs::cti_vm_lazyLinkCall):
5487        (JSC::JITStubs::cti_op_construct_JSConstruct):
5488        * jit/JITStubs.h:
5489        (JSC::JITStubs::ctiNativeCallThunk):
5490        * jsc.cpp:
5491        (GlobalObject::GlobalObject):
5492        * parser/Nodes.cpp:
5493        (JSC::FunctionBodyNode::FunctionBodyNode):
5494        (JSC::FunctionBodyNode::createNativeThunk):
5495        (JSC::FunctionBodyNode::generateJITCode):
5496        * parser/Nodes.h:
5497        (JSC::FunctionBodyNode::):
5498        (JSC::FunctionBodyNode::generatedJITCode):
5499        (JSC::FunctionBodyNode::jitCode):
5500        * profiler/Profiler.cpp:
5501        (JSC::Profiler::createCallIdentifier):
5502        * runtime/ArgList.h:
5503        * runtime/ArrayPrototype.cpp:
5504        (JSC::isNumericCompareFunction):
5505        * runtime/BooleanPrototype.cpp:
5506        (JSC::BooleanPrototype::BooleanPrototype):
5507        * runtime/DateConstructor.cpp:
5508        (JSC::DateConstructor::DateConstructor):
5509        * runtime/ErrorPrototype.cpp:
5510        (JSC::ErrorPrototype::ErrorPrototype):
5511        * runtime/FunctionPrototype.cpp:
5512        (JSC::FunctionPrototype::addFunctionProperties):
5513        (JSC::functionProtoFuncToString):
5514        * runtime/FunctionPrototype.h:
5515        * runtime/JSFunction.cpp:
5516        (JSC::JSFunction::JSFunction):
5517        (JSC::JSFunction::~JSFunction):
5518        (JSC::JSFunction::mark):
5519        (JSC::JSFunction::getCallData):
5520        (JSC::JSFunction::call):
5521        (JSC::JSFunction::argumentsGetter):
5522        (JSC::JSFunction::callerGetter):
5523        (JSC::JSFunction::lengthGetter):
5524        (JSC::JSFunction::getOwnPropertySlot):
5525        (JSC::JSFunction::put):
5526        (JSC::JSFunction::deleteProperty):
5527        (JSC::JSFunction::getConstructData):
5528        (JSC::JSFunction::construct):
5529        * runtime/JSFunction.h:
5530        (JSC::JSFunction::JSFunction):
5531        (JSC::JSFunction::setScope):
5532        (JSC::JSFunction::scope):
5533        (JSC::JSFunction::isHostFunction):
5534        (JSC::JSFunction::scopeChain):
5535        (JSC::JSFunction::clearScopeChain):
5536        (JSC::JSFunction::setScopeChain):
5537        (JSC::JSFunction::nativeFunction):
5538        (JSC::JSFunction::setNativeFunction):
5539        * runtime/JSGlobalData.cpp:
5540        (JSC::JSGlobalData::~JSGlobalData):
5541        (JSC::JSGlobalData::createNativeThunk):
5542        * runtime/JSGlobalData.h:
5543        (JSC::JSGlobalData::nativeFunctionThunk):
5544        * runtime/JSGlobalObject.cpp:
5545        (JSC::JSGlobalObject::reset):
5546        * runtime/JSGlobalObject.h:
5547        * runtime/Lookup.cpp:
5548        (JSC::setUpStaticFunctionSlot):
5549        * runtime/Lookup.h:
5550        * runtime/NumberPrototype.cpp:
5551        (JSC::NumberPrototype::NumberPrototype):
5552        * runtime/ObjectPrototype.cpp:
5553        (JSC::ObjectPrototype::ObjectPrototype):
5554        * runtime/RegExpPrototype.cpp:
5555        (JSC::RegExpPrototype::RegExpPrototype):
5556        * runtime/StringConstructor.cpp:
5557        (JSC::StringConstructor::StringConstructor):
5558
55592009-05-05  Gavin Barraclough  <barraclough@apple.com>
5560
5561        Reviewed by Oliver Hunt.
5562
5563        For convenience, let the sampling flags tool clear multiple flags at once.
5564
5565        * jsc.cpp:
5566        (GlobalObject::GlobalObject):
5567        (functionSetSamplingFlags):
5568        (functionClearSamplingFlags):
5569
55702009-05-04  Maciej Stachowiak  <mjs@apple.com>
5571
5572        Rubber stamped by Gavin.
5573
5574        - inline Vector::resize for a ~1.5% speedup on string-tagcloud
5575
5576        * wtf/Vector.h:
5577        (WTF::Vector::resize): Inline
5578
55792009-05-03  Steve Falkenburg  <sfalken@apple.com>
5580
5581        Windows build fix.
5582
5583        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
5584
55852009-05-03  Mark Rowe  <mrowe@apple.com>
5586
5587        Fix the 64-bit build.
5588
5589        * API/APICast.h:
5590        (toJS):
5591        (toRef):
5592        * runtime/JSNumberCell.cpp:
5593        (JSC::jsAPIMangledNumber):
5594        * runtime/JSNumberCell.h:
5595
55962009-05-02  Sam Weinig  <sam@webkit.org>
5597
5598        Roll JSC API number marshaling back in one last time (I hope).
5599
56002009-05-03  Sam Weinig  <sam@webkit.org>
5601
5602        Roll JSC API number marshaling back out. It still breaks windows.
5603
56042009-05-03  Sam Weinig  <sam@webkit.org>
5605
5606        Roll JSC API number marshaling back in.
5607
56082009-05-02  Darin Adler  <darin@apple.com>
5609
5610        Reviewed by Maciej Stachowiak.
5611
5612        Bug 25519: streamline lexer by handling BOMs differently
5613        https://bugs.webkit.org/show_bug.cgi?id=25519
5614
5615        Roughly 1% faster SunSpider.
5616
5617        * parser/Grammar.y: Tweak formatting a bit.
5618
5619        * parser/Lexer.cpp:
5620        (JSC::Lexer::Lexer): Remove unnnecessary initialization of data members
5621        that are set up by setCode.
5622        (JSC::Lexer::currentOffset): Added. Used where the old code would look at
5623        m_currentOffset.
5624        (JSC::Lexer::shift1): Replaces the old shift function. No longer does anything
5625        to handle BOM characters.
5626        (JSC::Lexer::shift2): Ditto.
5627        (JSC::Lexer::shift3): Ditto.
5628        (JSC::Lexer::shift4): Ditto.
5629        (JSC::Lexer::setCode): Updated for name change from yylineno to m_line.
5630        Removed now-unused m_eatNextIdentifier, m_stackToken, and m_restrKeyword.
5631        Replaced m_skipLF and m_skipCR with m_skipLineEnd. Replaced the old
5632        m_length with m_codeEnd and m_currentOffset with m_codeStart. Added code
5633        to scan for a BOM character and call copyCodeWithoutBOMs() if we find any.
5634        (JSC::Lexer::copyCodeWithoutBOMs): Added.
5635        (JSC::Lexer::nextLine): Updated for name change from yylineno to m_line.
5636        (JSC::Lexer::makeIdentifier): Moved up higher in the file.
5637        (JSC::Lexer::matchPunctuator): Moved up higher in the file and changed to
5638        use a switch statement instead of just if statements.
5639        (JSC::Lexer::isLineTerminator): Moved up higher in the file and changed to
5640        have fewer branches.
5641        (JSC::Lexer::lastTokenWasRestrKeyword): Added. This replaces the old
5642        m_restrKeyword boolean.
5643        (JSC::Lexer::isIdentStart): Moved up higher in the file. Changed to use
5644        fewer branches in the ASCII but not identifier case.
5645        (JSC::Lexer::isIdentPart): Ditto.
5646        (JSC::Lexer::singleEscape): Moved up higher in the file.
5647        (JSC::Lexer::convertOctal): Moved up higher in the file.
5648        (JSC::Lexer::convertHex): Moved up higher in the file. Changed to use
5649        toASCIIHexValue instead of rolling our own here.
5650        (JSC::Lexer::convertUnicode): Ditto.
5651        (JSC::Lexer::record8): Moved up higher in the file.
5652        (JSC::Lexer::record16): Moved up higher in the file.
5653        (JSC::Lexer::lex): Changed type of stringType to int. Replaced m_skipLF
5654        and m_skipCR with m_skipLineEnd, which requires fewer branches in the
5655        main lexer loop. Use currentOffset instead of m_currentOffset. Removed
5656        unneeded m_stackToken. Use isASCIIDigit instead of isDecimalDigit.
5657        Split out the two cases for InIdentifierOrKeyword and InIdentifier.
5658        Added special case tight loops for identifiers and other simple states.
5659        Removed a branch from the code that sets m_atLineStart to false using goto.
5660        Streamlined the number-handling code so we don't check for the same types
5661        twice for non-numeric cases and don't add a null to m_buffer8 when it's
5662        not being used. Removed m_eatNextIdentifier, which wasn't working anyway,
5663        and m_restrKeyword, which is redundant with m_lastToken. Set the
5664        m_delimited flag without using a branch.
5665        (JSC::Lexer::scanRegExp): Tweaked style a bit.
5666        (JSC::Lexer::clear): Clear m_codeWithoutBOMs so we don't use memory after
5667        parsing. Clear out UString objects in the more conventional way.
5668        (JSC::Lexer::sourceCode): Made this no-longer inline since it has more
5669        work to do in the case where we stripped BOMs.
5670
5671        * parser/Lexer.h: Renamed yylineno to m_lineNumber. Removed convertHex
5672        function, which is the same as toASCIIHexValue. Removed isHexDigit
5673        function, which is the same as isASCIIHedDigit. Replaced shift with four
5674        separate shift functions. Removed isWhiteSpace function that passes
5675        m_current, instead just passing m_current explicitly. Removed isOctalDigit,
5676        which is the same as isASCIIOctalDigit. Eliminated unused arguments from
5677        matchPunctuator. Added copyCoodeWithoutBOMs and currentOffset. Moved the
5678        makeIdentifier function out of the header. Added lastTokenWasRestrKeyword
5679        function. Added new constants for m_skipLineEnd. Removed unused yycolumn,
5680        m_restrKeyword, m_skipLF, m_skipCR, m_eatNextIdentifier, m_stackToken,
5681        m_position, m_length, m_currentOffset, m_nextOffset1, m_nextOffset2,
5682        m_nextOffset3. Added m_skipLineEnd, m_codeStart, m_codeEnd, and
5683        m_codeWithoutBOMs.
5684
5685        * parser/SourceProvider.h: Added hasBOMs function. In the future this can
5686        be used to tell the lexer about strings known not to have BOMs.
5687
5688        * runtime/JSGlobalObjectFunctions.cpp:
5689        (JSC::globalFuncUnescape): Changed to use isASCIIHexDigit.
5690
5691        * wtf/ASCIICType.h: Added using statements to match the design of the
5692        other WTF headers.
5693
56942009-05-02  Ada Chan  <adachan@apple.com>
5695
5696        Fix windows build (when doing a clean build)
5697
5698        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
5699
57002009-05-02  Geoffrey Garen  <ggaren@apple.com>
5701
5702        Reviewed by Sam Weinig.
5703
5704        Simplified null-ish JSValues.
5705        
5706        Replaced calls to noValue() with calls to JSValue() (which is what
5707        noValue() returned). Removed noValue().
5708        
5709        Replaced almost all uses of jsImpossibleValue() with uses of JSValue().
5710        Its one remaining use is for construction of hash table deleted values.
5711        For that specific task, I made a new, private constructor with a special
5712        tag. Removed jsImpossibleValue().
5713        
5714        Removed "JSValue()" initialiazers, since default construction happens...
5715        by default.
5716
5717        * API/JSCallbackObjectFunctions.h:
5718        (JSC::::call):
5719        * bytecompiler/BytecodeGenerator.cpp:
5720        (JSC::BytecodeGenerator::emitLoad):
5721        * bytecompiler/BytecodeGenerator.h:
5722        * debugger/DebuggerCallFrame.cpp:
5723        (JSC::DebuggerCallFrame::evaluate):
5724        * debugger/DebuggerCallFrame.h:
5725        (JSC::DebuggerCallFrame::DebuggerCallFrame):
5726        * interpreter/CallFrame.h:
5727        (JSC::ExecState::clearException):
5728        * interpreter/Interpreter.cpp:
5729        (JSC::Interpreter::privateExecute):
5730        (JSC::Interpreter::retrieveLastCaller):
5731        * interpreter/Register.h:
5732        (JSC::Register::Register):
5733        * jit/JITCall.cpp:
5734        (JSC::JIT::unlinkCall):
5735        (JSC::JIT::compileOpCallInitializeCallFrame):
5736        (JSC::JIT::compileOpCall):
5737        * jit/JITStubs.cpp:
5738        (JSC::JITStubs::cti_op_call_eval):
5739        (JSC::JITStubs::cti_vm_throw):
5740        * profiler/Profiler.cpp:
5741        (JSC::Profiler::willExecute):
5742        (JSC::Profiler::didExecute):
5743        * runtime/ArrayPrototype.cpp:
5744        (JSC::getProperty):
5745        * runtime/Completion.cpp:
5746        (JSC::evaluate):
5747        * runtime/Completion.h:
5748        (JSC::Completion::Completion):
5749        * runtime/GetterSetter.cpp:
5750        (JSC::GetterSetter::getPrimitiveNumber):
5751        * runtime/JSArray.cpp:
5752        (JSC::JSArray::putSlowCase):
5753        (JSC::JSArray::deleteProperty):
5754        (JSC::JSArray::increaseVectorLength):
5755        (JSC::JSArray::setLength):
5756        (JSC::JSArray::pop):
5757        (JSC::JSArray::sort):
5758        (JSC::JSArray::compactForSorting):
5759        * runtime/JSCell.cpp:
5760        (JSC::JSCell::getJSNumber):
5761        * runtime/JSCell.h:
5762        (JSC::JSValue::getJSNumber):
5763        * runtime/JSGlobalData.cpp:
5764        (JSC::JSGlobalData::JSGlobalData):
5765        * runtime/JSImmediate.h:
5766        (JSC::JSImmediate::fromNumberOutsideIntegerRange):
5767        (JSC::JSImmediate::from):
5768        * runtime/JSNumberCell.cpp:
5769        (JSC::jsNumberCell):
5770        * runtime/JSObject.cpp:
5771        (JSC::callDefaultValueFunction):
5772        * runtime/JSObject.h:
5773        (JSC::JSObject::getDirect):
5774        * runtime/JSPropertyNameIterator.cpp:
5775        (JSC::JSPropertyNameIterator::toPrimitive):
5776        * runtime/JSPropertyNameIterator.h:
5777        (JSC::JSPropertyNameIterator::next):
5778        * runtime/JSValue.h:
5779        (JSC::JSValue::):
5780        (JSC::JSValueHashTraits::constructDeletedValue):
5781        (JSC::JSValueHashTraits::isDeletedValue):
5782        (JSC::JSValue::JSValue):
5783        * runtime/JSWrapperObject.h:
5784        (JSC::JSWrapperObject::JSWrapperObject):
5785        * runtime/Operations.h:
5786        (JSC::resolveBase):
5787        * runtime/PropertySlot.h:
5788        (JSC::PropertySlot::clearBase):
5789        (JSC::PropertySlot::clearValue):
5790
57912009-05-02  Maciej Stachowiak  <mjs@apple.com>
5792
5793        Reviewed by Cameron Zwarich.
5794
5795        - speed up the lexer in various ways
5796
5797        ~2% command-line SunSpider speedup
5798
5799        * parser/Lexer.cpp:
5800        (JSC::Lexer::setCode): Moved below shift() so it can inline.
5801        (JSC::Lexer::scanRegExp):  Use resize(0) instead of clear() on Vectors, since the intent
5802        here is not to free the underlying buffer.
5803        (JSC::Lexer::lex): ditto; also, change the loop logic a bit for the main lexing loop
5804        to avoid branching on !m_done twice per iteration. Now we only check it once.
5805        (JSC::Lexer::shift): Make this ALWAYS_INLINE and tag an unusual branch as UNLIKELY
5806        * parser/Lexer.h:
5807        (JSC::Lexer::makeIdentifier): force to be ALWAYS_INLINE
5808        * wtf/Vector.h:
5809        (WTF::::append): force to be ALWAYS_INLINE (may have helped in ways other than parsing but it wasn't
5810        getting inlined in a hot code path in the lexer)
5811
58122009-05-01  Steve Falkenburg  <sfalken@apple.com>
5813
5814        Windows build fix.
5815
5816        * JavaScriptCore.vcproj/JavaScriptCore.make:
5817
58182009-05-01  Sam Weinig  <sam@webkit.org>
5819
5820        Fix 64bit build.
5821
5822        * runtime/JSNumberCell.h:
5823        (JSC::JSValue::JSValue):
5824        * runtime/JSValue.h:
5825        (JSC::jsNumber):
5826
58272009-05-01  Sam Weinig  <sam@webkit.org>
5828
5829        Roll out JavaScriptCore API number marshaling.
5830
5831        * API/APICast.h:
5832        (toJS):
5833        (toRef):
5834        * API/JSBase.cpp:
5835        (JSEvaluateScript):
5836        (JSCheckScriptSyntax):
5837        * API/JSCallbackConstructor.cpp:
5838        (JSC::constructJSCallback):
5839        * API/JSCallbackFunction.cpp:
5840        (JSC::JSCallbackFunction::call):
5841        * API/JSCallbackObjectFunctions.h:
5842        (JSC::::getOwnPropertySlot):
5843        (JSC::::put):
5844        (JSC::::deleteProperty):
5845        (JSC::::construct):
5846        (JSC::::hasInstance):
5847        (JSC::::call):
5848        (JSC::::toNumber):
5849        (JSC::::toString):
5850        (JSC::::staticValueGetter):
5851        (JSC::::callbackGetter):
5852        * API/JSObjectRef.cpp:
5853        (JSObjectMakeFunction):
5854        (JSObjectMakeArray):
5855        (JSObjectMakeDate):
5856        (JSObjectMakeError):
5857        (JSObjectMakeRegExp):
5858        (JSObjectGetPrototype):
5859        (JSObjectSetPrototype):
5860        (JSObjectGetProperty):
5861        (JSObjectSetProperty):
5862        (JSObjectGetPropertyAtIndex):
5863        (JSObjectSetPropertyAtIndex):
5864        (JSObjectDeleteProperty):
5865        (JSObjectCallAsFunction):
5866        (JSObjectCallAsConstructor):
5867        * API/JSValueRef.cpp:
5868        (JSValueGetType):
5869        (JSValueIsUndefined):
5870        (JSValueIsNull):
5871        (JSValueIsBoolean):
5872        (JSValueIsNumber):
5873        (JSValueIsString):
5874        (JSValueIsObject):
5875        (JSValueIsObjectOfClass):
5876        (JSValueIsEqual):
5877        (JSValueIsStrictEqual):
5878        (JSValueIsInstanceOfConstructor):
5879        (JSValueMakeUndefined):
5880        (JSValueMakeNull):
5881        (JSValueMakeBoolean):
5882        (JSValueMakeNumber):
5883        (JSValueMakeString):
5884        (JSValueToBoolean):
5885        (JSValueToNumber):
5886        (JSValueToStringCopy):
5887        (JSValueToObject):
5888        (JSValueProtect):
5889        (JSValueUnprotect):
5890        * JavaScriptCore.exp:
5891        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
5892        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
5893        * runtime/JSNumberCell.cpp:
5894        * runtime/JSNumberCell.h:
5895        * runtime/JSValue.h:
5896
58972009-05-01  Sam Weinig  <sam@webkit.org>
5898
5899        Fix windows build.
5900
5901        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
5902        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
5903
59042009-05-01  Sam Weinig  <sam@webkit.org>
5905
5906        Fix the build.
5907
5908        * JavaScriptCore.exp:
5909
59102009-05-01  Sam Weinig  <sam@webkit.org>
5911
5912        Reviewed by Geoffrey "Too Far!" Garen.
5913
5914        Move JS number construction into JSValue.
5915
5916        * runtime/JSImmediate.h:
5917        * runtime/JSNumberCell.h:
5918        (JSC::JSValue::JSValue):
5919        * runtime/JSValue.h:
5920        (JSC::jsNumber):
5921
59222009-05-01  Sam Weinig  <sam@webkit.org>
5923
5924        Reviewed by Geoff "The Minneapolis" Garen.
5925
5926        Add mechanism to vend heap allocated JS numbers to JavaScriptCore API clients with a
5927        representation that is independent of the number representation in the VM.
5928        - Numbers leaving the interpreter are converted to a tagged JSNumberCell.
5929        - The numbers coming into the interpreter (asserted to be the tagged JSNumberCell) are
5930          converted back to the VM's internal number representation.
5931
5932        * API/APICast.h:
5933        (toJS):
5934        (toRef):
5935        * API/JSBase.cpp:
5936        (JSEvaluateScript):
5937        (JSCheckScriptSyntax):
5938        * API/JSCallbackConstructor.cpp:
5939        (JSC::constructJSCallback):
5940        * API/JSCallbackFunction.cpp:
5941        (JSC::JSCallbackFunction::call):
5942        * API/JSCallbackObjectFunctions.h:
5943        (JSC::::getOwnPropertySlot):
5944        (JSC::::put):
5945        (JSC::::deleteProperty):
5946        (JSC::::construct):
5947        (JSC::::hasInstance):
5948        (JSC::::call):
5949        (JSC::::toNumber):
5950        (JSC::::toString):
5951        (JSC::::staticValueGetter):
5952        (JSC::::callbackGetter):
5953        * API/JSObjectRef.cpp:
5954        (JSObjectMakeFunction):
5955        (JSObjectMakeArray):
5956        (JSObjectMakeDate):
5957        (JSObjectMakeError):
5958        (JSObjectMakeRegExp):
5959        (JSObjectGetPrototype):
5960        (JSObjectSetPrototype):
5961        (JSObjectGetProperty):
5962        (JSObjectSetProperty):
5963        (JSObjectGetPropertyAtIndex):
5964        (JSObjectSetPropertyAtIndex):
5965        (JSObjectDeleteProperty):
5966        (JSObjectCallAsFunction):
5967        (JSObjectCallAsConstructor):
5968        * API/JSValueRef.cpp:
5969        (JSValueGetType):
5970        (JSValueIsUndefined):
5971        (JSValueIsNull):
5972        (JSValueIsBoolean):
5973        (JSValueIsNumber):
5974        (JSValueIsString):
5975        (JSValueIsObject):
5976        (JSValueIsObjectOfClass):
5977        (JSValueIsEqual):
5978        (JSValueIsStrictEqual):
5979        (JSValueIsInstanceOfConstructor):
5980        (JSValueMakeUndefined):
5981        (JSValueMakeNull):
5982        (JSValueMakeBoolean):
5983        (JSValueMakeNumber):
5984        (JSValueMakeString):
5985        (JSValueToBoolean):
5986        (JSValueToNumber):
5987        (JSValueToStringCopy):
5988        (JSValueToObject):
5989        (JSValueProtect):
5990        (JSValueUnprotect):
5991        * runtime/JSNumberCell.cpp:
5992        (JSC::jsAPIMangledNumber):
5993        * runtime/JSNumberCell.h:
5994        (JSC::JSNumberCell::isAPIMangledNumber):
5995        (JSC::JSNumberCell::):
5996        (JSC::JSNumberCell::JSNumberCell):
5997        (JSC::JSValue::isAPIMangledNumber):
5998        * runtime/JSValue.h:
5999
60002009-05-01  Geoffrey Garen  <ggaren@apple.com>
6001
6002        Windows build fix take 6.
6003
6004        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
6005
60062009-05-01  Geoffrey Garen  <ggaren@apple.com>
6007
6008        Windows build fix take 5.
6009
6010        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
6011
60122009-05-01  Geoffrey Garen  <ggaren@apple.com>
6013
6014        Windows build fix take 4.
6015
6016        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
6017
60182009-05-01  Geoffrey Garen  <ggaren@apple.com>
6019
6020        Windows build fix take 3.
6021
6022        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
6023
60242009-05-01  Geoffrey Garen  <ggaren@apple.com>
6025
6026        Windows build fix take 2.
6027
6028        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
6029
60302009-05-01  Geoffrey Garen  <ggaren@apple.com>
6031
6032        Windows build fix take 1.
6033
6034        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
6035        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
6036
60372009-05-01  Geoffrey Garen  <ggaren@apple.com>
6038
6039        Rubber Stamped by Sam Weinig.
6040        
6041        Renamed JSValuePtr => JSValue.
6042
6043        * API/APICast.h:
6044        (toJS):
6045        (toRef):
6046        * API/JSCallbackConstructor.h:
6047        (JSC::JSCallbackConstructor::createStructure):
6048        * API/JSCallbackFunction.cpp:
6049        (JSC::JSCallbackFunction::call):
6050        * API/JSCallbackFunction.h:
6051        (JSC::JSCallbackFunction::createStructure):
6052        * API/JSCallbackObject.h:
6053        (JSC::JSCallbackObject::createStructure):
6054        * API/JSCallbackObjectFunctions.h:
6055        (JSC::::asCallbackObject):
6056        (JSC::::put):
6057        (JSC::::hasInstance):
6058        (JSC::::call):
6059        (JSC::::staticValueGetter):
6060        (JSC::::staticFunctionGetter):
6061        (JSC::::callbackGetter):
6062        * API/JSContextRef.cpp:
6063        * API/JSObjectRef.cpp:
6064        (JSObjectMakeConstructor):
6065        (JSObjectSetPrototype):
6066        (JSObjectGetProperty):
6067        (JSObjectSetProperty):
6068        (JSObjectGetPropertyAtIndex):
6069        (JSObjectSetPropertyAtIndex):
6070        * API/JSValueRef.cpp:
6071        (JSValueGetType):
6072        (JSValueIsUndefined):
6073        (JSValueIsNull):
6074        (JSValueIsBoolean):
6075        (JSValueIsNumber):
6076        (JSValueIsString):
6077        (JSValueIsObject):
6078        (JSValueIsObjectOfClass):
6079        (JSValueIsEqual):
6080        (JSValueIsStrictEqual):
6081        (JSValueIsInstanceOfConstructor):
6082        (JSValueToBoolean):
6083        (JSValueToNumber):
6084        (JSValueToStringCopy):
6085        (JSValueToObject):
6086        (JSValueProtect):
6087        (JSValueUnprotect):
6088        * JavaScriptCore.exp:
6089        * bytecode/CodeBlock.cpp:
6090        (JSC::valueToSourceString):
6091        (JSC::constantName):
6092        (JSC::CodeBlock::dump):
6093        * bytecode/CodeBlock.h:
6094        (JSC::CodeBlock::getConstant):
6095        (JSC::CodeBlock::addUnexpectedConstant):
6096        (JSC::CodeBlock::unexpectedConstant):
6097        * bytecode/EvalCodeCache.h:
6098        (JSC::EvalCodeCache::get):
6099        * bytecompiler/BytecodeGenerator.cpp:
6100        (JSC::BytecodeGenerator::addConstant):
6101        (JSC::BytecodeGenerator::addUnexpectedConstant):
6102        (JSC::BytecodeGenerator::emitLoad):
6103        (JSC::BytecodeGenerator::emitGetScopedVar):
6104        (JSC::BytecodeGenerator::emitPutScopedVar):
6105        (JSC::BytecodeGenerator::emitNewError):
6106        (JSC::keyForImmediateSwitch):
6107        * bytecompiler/BytecodeGenerator.h:
6108        (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue):
6109        (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue):
6110        * debugger/Debugger.cpp:
6111        (JSC::evaluateInGlobalCallFrame):
6112        * debugger/Debugger.h:
6113        * debugger/DebuggerActivation.cpp:
6114        (JSC::DebuggerActivation::put):
6115        (JSC::DebuggerActivation::putWithAttributes):
6116        (JSC::DebuggerActivation::lookupGetter):
6117        (JSC::DebuggerActivation::lookupSetter):
6118        * debugger/DebuggerActivation.h:
6119        (JSC::DebuggerActivation::createStructure):
6120        * debugger/DebuggerCallFrame.cpp:
6121        (JSC::DebuggerCallFrame::evaluate):
6122        * debugger/DebuggerCallFrame.h:
6123        (JSC::DebuggerCallFrame::DebuggerCallFrame):
6124        (JSC::DebuggerCallFrame::exception):
6125        * interpreter/CachedCall.h:
6126        (JSC::CachedCall::CachedCall):
6127        (JSC::CachedCall::call):
6128        (JSC::CachedCall::setThis):
6129        (JSC::CachedCall::setArgument):
6130        * interpreter/CallFrame.cpp:
6131        (JSC::CallFrame::thisValue):
6132        (JSC::CallFrame::dumpCaller):
6133        * interpreter/CallFrame.h:
6134        (JSC::ExecState::setException):
6135        (JSC::ExecState::exception):
6136        (JSC::ExecState::exceptionSlot):
6137        * interpreter/CallFrameClosure.h:
6138        (JSC::CallFrameClosure::setArgument):
6139        * interpreter/Interpreter.cpp:
6140        (JSC::Interpreter::resolve):
6141        (JSC::Interpreter::resolveSkip):
6142        (JSC::Interpreter::resolveGlobal):
6143        (JSC::Interpreter::resolveBase):
6144        (JSC::Interpreter::resolveBaseAndProperty):
6145        (JSC::Interpreter::resolveBaseAndFunc):
6146        (JSC::isNotObject):
6147        (JSC::Interpreter::callEval):
6148        (JSC::Interpreter::unwindCallFrame):
6149        (JSC::Interpreter::throwException):
6150        (JSC::Interpreter::execute):
6151        (JSC::Interpreter::prepareForRepeatCall):
6152        (JSC::Interpreter::createExceptionScope):
6153        (JSC::Interpreter::tryCachePutByID):
6154        (JSC::Interpreter::tryCacheGetByID):
6155        (JSC::Interpreter::privateExecute):
6156        (JSC::Interpreter::retrieveArguments):
6157        (JSC::Interpreter::retrieveCaller):
6158        (JSC::Interpreter::retrieveLastCaller):
6159        * interpreter/Interpreter.h:
6160        * interpreter/Register.h:
6161        (JSC::Register::):
6162        (JSC::Register::Register):
6163        (JSC::Register::jsValue):
6164        * jit/JIT.cpp:
6165        (JSC::):
6166        (JSC::JIT::privateCompileMainPass):
6167        * jit/JIT.h:
6168        * jit/JITArithmetic.cpp:
6169        (JSC::JIT::compileFastArith_op_mod):
6170        * jit/JITCall.cpp:
6171        (JSC::JIT::unlinkCall):
6172        (JSC::JIT::compileOpCallInitializeCallFrame):
6173        (JSC::JIT::compileOpCall):
6174        * jit/JITCode.h:
6175        (JSC::):
6176        (JSC::JITCode::execute):
6177        * jit/JITInlineMethods.h:
6178        (JSC::JIT::emitGetVirtualRegister):
6179        (JSC::JIT::getConstantOperand):
6180        (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
6181        (JSC::JIT::emitInitRegister):
6182        * jit/JITPropertyAccess.cpp:
6183        (JSC::JIT::privateCompilePutByIdTransition):
6184        (JSC::JIT::patchGetByIdSelf):
6185        (JSC::JIT::patchPutByIdReplace):
6186        (JSC::JIT::privateCompileGetByIdSelf):
6187        (JSC::JIT::privateCompileGetByIdProto):
6188        (JSC::JIT::privateCompileGetByIdSelfList):
6189        (JSC::JIT::privateCompileGetByIdProtoList):
6190        (JSC::JIT::privateCompileGetByIdChainList):
6191        (JSC::JIT::privateCompileGetByIdChain):
6192        (JSC::JIT::privateCompilePutByIdReplace):
6193        * jit/JITStubs.cpp:
6194        (JSC::JITStubs::tryCachePutByID):
6195        (JSC::JITStubs::tryCacheGetByID):
6196        (JSC::JITStubs::cti_op_convert_this):
6197        (JSC::JITStubs::cti_op_add):
6198        (JSC::JITStubs::cti_op_pre_inc):
6199        (JSC::JITStubs::cti_op_loop_if_less):
6200        (JSC::JITStubs::cti_op_loop_if_lesseq):
6201        (JSC::JITStubs::cti_op_get_by_id_generic):
6202        (JSC::JITStubs::cti_op_get_by_id):
6203        (JSC::JITStubs::cti_op_get_by_id_second):
6204        (JSC::JITStubs::cti_op_get_by_id_self_fail):
6205        (JSC::JITStubs::cti_op_get_by_id_proto_list):
6206        (JSC::JITStubs::cti_op_get_by_id_proto_list_full):
6207        (JSC::JITStubs::cti_op_get_by_id_proto_fail):
6208        (JSC::JITStubs::cti_op_get_by_id_array_fail):
6209        (JSC::JITStubs::cti_op_get_by_id_string_fail):
6210        (JSC::JITStubs::cti_op_instanceof):
6211        (JSC::JITStubs::cti_op_del_by_id):
6212        (JSC::JITStubs::cti_op_mul):
6213        (JSC::JITStubs::cti_op_call_NotJSFunction):
6214        (JSC::JITStubs::cti_op_resolve):
6215        (JSC::JITStubs::cti_op_construct_NotJSConstruct):
6216        (JSC::JITStubs::cti_op_get_by_val):
6217        (JSC::JITStubs::cti_op_get_by_val_string):
6218        (JSC::JITStubs::cti_op_get_by_val_byte_array):
6219        (JSC::JITStubs::cti_op_resolve_func):
6220        (JSC::JITStubs::cti_op_sub):
6221        (JSC::JITStubs::cti_op_put_by_val):
6222        (JSC::JITStubs::cti_op_put_by_val_array):
6223        (JSC::JITStubs::cti_op_put_by_val_byte_array):
6224        (JSC::JITStubs::cti_op_lesseq):
6225        (JSC::JITStubs::cti_op_loop_if_true):
6226        (JSC::JITStubs::cti_op_load_varargs):
6227        (JSC::JITStubs::cti_op_negate):
6228        (JSC::JITStubs::cti_op_resolve_base):
6229        (JSC::JITStubs::cti_op_resolve_skip):
6230        (JSC::JITStubs::cti_op_resolve_global):
6231        (JSC::JITStubs::cti_op_div):
6232        (JSC::JITStubs::cti_op_pre_dec):
6233        (JSC::JITStubs::cti_op_jless):
6234        (JSC::JITStubs::cti_op_not):
6235        (JSC::JITStubs::cti_op_jtrue):
6236        (JSC::JITStubs::cti_op_post_inc):
6237        (JSC::JITStubs::cti_op_eq):
6238        (JSC::JITStubs::cti_op_lshift):
6239        (JSC::JITStubs::cti_op_bitand):
6240        (JSC::JITStubs::cti_op_rshift):
6241        (JSC::JITStubs::cti_op_bitnot):
6242        (JSC::JITStubs::cti_op_resolve_with_base):
6243        (JSC::JITStubs::cti_op_mod):
6244        (JSC::JITStubs::cti_op_less):
6245        (JSC::JITStubs::cti_op_neq):
6246        (JSC::JITStubs::cti_op_post_dec):
6247        (JSC::JITStubs::cti_op_urshift):
6248        (JSC::JITStubs::cti_op_bitxor):
6249        (JSC::JITStubs::cti_op_bitor):
6250        (JSC::JITStubs::cti_op_call_eval):
6251        (JSC::JITStubs::cti_op_throw):
6252        (JSC::JITStubs::cti_op_next_pname):
6253        (JSC::JITStubs::cti_op_typeof):
6254        (JSC::JITStubs::cti_op_is_undefined):
6255        (JSC::JITStubs::cti_op_is_boolean):
6256        (JSC::JITStubs::cti_op_is_number):
6257        (JSC::JITStubs::cti_op_is_string):
6258        (JSC::JITStubs::cti_op_is_object):
6259        (JSC::JITStubs::cti_op_is_function):
6260        (JSC::JITStubs::cti_op_stricteq):
6261        (JSC::JITStubs::cti_op_nstricteq):
6262        (JSC::JITStubs::cti_op_to_jsnumber):
6263        (JSC::JITStubs::cti_op_in):
6264        (JSC::JITStubs::cti_op_switch_imm):
6265        (JSC::JITStubs::cti_op_switch_char):
6266        (JSC::JITStubs::cti_op_switch_string):
6267        (JSC::JITStubs::cti_op_del_by_val):
6268        (JSC::JITStubs::cti_op_new_error):
6269        (JSC::JITStubs::cti_vm_throw):
6270        * jit/JITStubs.h:
6271        * jsc.cpp:
6272        (functionPrint):
6273        (functionDebug):
6274        (functionGC):
6275        (functionVersion):
6276        (functionRun):
6277        (functionLoad):
6278        (functionSetSamplingFlag):
6279        (functionClearSamplingFlag):
6280        (functionReadline):
6281        (functionQuit):
6282        * parser/Nodes.cpp:
6283        (JSC::processClauseList):
6284        * profiler/ProfileGenerator.cpp:
6285        (JSC::ProfileGenerator::addParentForConsoleStart):
6286        * profiler/Profiler.cpp:
6287        (JSC::Profiler::willExecute):
6288        (JSC::Profiler::didExecute):
6289        (JSC::Profiler::createCallIdentifier):
6290        * profiler/Profiler.h:
6291        * runtime/ArgList.cpp:
6292        (JSC::MarkedArgumentBuffer::slowAppend):
6293        * runtime/ArgList.h:
6294        (JSC::MarkedArgumentBuffer::at):
6295        (JSC::MarkedArgumentBuffer::append):
6296        (JSC::ArgList::ArgList):
6297        (JSC::ArgList::at):
6298        * runtime/Arguments.cpp:
6299        (JSC::Arguments::put):
6300        * runtime/Arguments.h:
6301        (JSC::Arguments::createStructure):
6302        (JSC::asArguments):
6303        * runtime/ArrayConstructor.cpp:
6304        (JSC::callArrayConstructor):
6305        * runtime/ArrayPrototype.cpp:
6306        (JSC::getProperty):
6307        (JSC::putProperty):
6308        (JSC::arrayProtoFuncToString):
6309        (JSC::arrayProtoFuncToLocaleString):
6310        (JSC::arrayProtoFuncJoin):
6311        (JSC::arrayProtoFuncConcat):
6312        (JSC::arrayProtoFuncPop):
6313        (JSC::arrayProtoFuncPush):
6314        (JSC::arrayProtoFuncReverse):
6315        (JSC::arrayProtoFuncShift):
6316        (JSC::arrayProtoFuncSlice):
6317        (JSC::arrayProtoFuncSort):
6318        (JSC::arrayProtoFuncSplice):
6319        (JSC::arrayProtoFuncUnShift):
6320        (JSC::arrayProtoFuncFilter):
6321        (JSC::arrayProtoFuncMap):
6322        (JSC::arrayProtoFuncEvery):
6323        (JSC::arrayProtoFuncForEach):
6324        (JSC::arrayProtoFuncSome):
6325        (JSC::arrayProtoFuncReduce):
6326        (JSC::arrayProtoFuncReduceRight):
6327        (JSC::arrayProtoFuncIndexOf):
6328        (JSC::arrayProtoFuncLastIndexOf):
6329        * runtime/BooleanConstructor.cpp:
6330        (JSC::callBooleanConstructor):
6331        (JSC::constructBooleanFromImmediateBoolean):
6332        * runtime/BooleanConstructor.h:
6333        * runtime/BooleanObject.h:
6334        (JSC::asBooleanObject):
6335        * runtime/BooleanPrototype.cpp:
6336        (JSC::booleanProtoFuncToString):
6337        (JSC::booleanProtoFuncValueOf):
6338        * runtime/CallData.cpp:
6339        (JSC::call):
6340        * runtime/CallData.h:
6341        * runtime/Collector.cpp:
6342        (JSC::Heap::protect):
6343        (JSC::Heap::unprotect):
6344        (JSC::Heap::heap):
6345        * runtime/Collector.h:
6346        * runtime/Completion.cpp:
6347        (JSC::evaluate):
6348        * runtime/Completion.h:
6349        (JSC::Completion::Completion):
6350        (JSC::Completion::value):
6351        (JSC::Completion::setValue):
6352        * runtime/ConstructData.cpp:
6353        (JSC::construct):
6354        * runtime/ConstructData.h:
6355        * runtime/DateConstructor.cpp:
6356        (JSC::constructDate):
6357        (JSC::callDate):
6358        (JSC::dateParse):
6359        (JSC::dateNow):
6360        (JSC::dateUTC):
6361        * runtime/DateInstance.h:
6362        (JSC::asDateInstance):
6363        * runtime/DatePrototype.cpp:
6364        (JSC::dateProtoFuncToString):
6365        (JSC::dateProtoFuncToUTCString):
6366        (JSC::dateProtoFuncToDateString):
6367        (JSC::dateProtoFuncToTimeString):
6368        (JSC::dateProtoFuncToLocaleString):
6369        (JSC::dateProtoFuncToLocaleDateString):
6370        (JSC::dateProtoFuncToLocaleTimeString):
6371        (JSC::dateProtoFuncGetTime):
6372        (JSC::dateProtoFuncGetFullYear):
6373        (JSC::dateProtoFuncGetUTCFullYear):
6374        (JSC::dateProtoFuncToGMTString):
6375        (JSC::dateProtoFuncGetMonth):
6376        (JSC::dateProtoFuncGetUTCMonth):
6377        (JSC::dateProtoFuncGetDate):
6378        (JSC::dateProtoFuncGetUTCDate):
6379        (JSC::dateProtoFuncGetDay):
6380        (JSC::dateProtoFuncGetUTCDay):
6381        (JSC::dateProtoFuncGetHours):
6382        (JSC::dateProtoFuncGetUTCHours):
6383        (JSC::dateProtoFuncGetMinutes):
6384        (JSC::dateProtoFuncGetUTCMinutes):
6385        (JSC::dateProtoFuncGetSeconds):
6386        (JSC::dateProtoFuncGetUTCSeconds):
6387        (JSC::dateProtoFuncGetMilliSeconds):
6388        (JSC::dateProtoFuncGetUTCMilliseconds):
6389        (JSC::dateProtoFuncGetTimezoneOffset):
6390        (JSC::dateProtoFuncSetTime):
6391        (JSC::setNewValueFromTimeArgs):
6392        (JSC::setNewValueFromDateArgs):
6393        (JSC::dateProtoFuncSetMilliSeconds):
6394        (JSC::dateProtoFuncSetUTCMilliseconds):
6395        (JSC::dateProtoFuncSetSeconds):
6396        (JSC::dateProtoFuncSetUTCSeconds):
6397        (JSC::dateProtoFuncSetMinutes):
6398        (JSC::dateProtoFuncSetUTCMinutes):
6399        (JSC::dateProtoFuncSetHours):
6400        (JSC::dateProtoFuncSetUTCHours):
6401        (JSC::dateProtoFuncSetDate):
6402        (JSC::dateProtoFuncSetUTCDate):
6403        (JSC::dateProtoFuncSetMonth):
6404        (JSC::dateProtoFuncSetUTCMonth):
6405        (JSC::dateProtoFuncSetFullYear):
6406        (JSC::dateProtoFuncSetUTCFullYear):
6407        (JSC::dateProtoFuncSetYear):
6408        (JSC::dateProtoFuncGetYear):
6409        * runtime/DatePrototype.h:
6410        (JSC::DatePrototype::createStructure):
6411        * runtime/ErrorConstructor.cpp:
6412        (JSC::callErrorConstructor):
6413        * runtime/ErrorPrototype.cpp:
6414        (JSC::errorProtoFuncToString):
6415        * runtime/ExceptionHelpers.cpp:
6416        (JSC::createInterruptedExecutionException):
6417        (JSC::createError):
6418        (JSC::createStackOverflowError):
6419        (JSC::createUndefinedVariableError):
6420        (JSC::createErrorMessage):
6421        (JSC::createInvalidParamError):
6422        (JSC::createNotAConstructorError):
6423        (JSC::createNotAFunctionError):
6424        * runtime/ExceptionHelpers.h:
6425        * runtime/FunctionConstructor.cpp:
6426        (JSC::callFunctionConstructor):
6427        * runtime/FunctionPrototype.cpp:
6428        (JSC::callFunctionPrototype):
6429        (JSC::functionProtoFuncToString):
6430        (JSC::functionProtoFuncApply):
6431        (JSC::functionProtoFuncCall):
6432        * runtime/FunctionPrototype.h:
6433        (JSC::FunctionPrototype::createStructure):
6434        * runtime/GetterSetter.cpp:
6435        (JSC::GetterSetter::toPrimitive):
6436        (JSC::GetterSetter::getPrimitiveNumber):
6437        * runtime/GetterSetter.h:
6438        (JSC::asGetterSetter):
6439        * runtime/InternalFunction.cpp:
6440        (JSC::InternalFunction::displayName):
6441        * runtime/InternalFunction.h:
6442        (JSC::InternalFunction::createStructure):
6443        (JSC::asInternalFunction):
6444        * runtime/JSActivation.cpp:
6445        (JSC::JSActivation::getOwnPropertySlot):
6446        (JSC::JSActivation::put):
6447        (JSC::JSActivation::putWithAttributes):
6448        (JSC::JSActivation::argumentsGetter):
6449        * runtime/JSActivation.h:
6450        (JSC::JSActivation::createStructure):
6451        (JSC::asActivation):
6452        * runtime/JSArray.cpp:
6453        (JSC::storageSize):
6454        (JSC::JSArray::JSArray):
6455        (JSC::JSArray::getOwnPropertySlot):
6456        (JSC::JSArray::put):
6457        (JSC::JSArray::putSlowCase):
6458        (JSC::JSArray::deleteProperty):
6459        (JSC::JSArray::setLength):
6460        (JSC::JSArray::pop):
6461        (JSC::JSArray::push):
6462        (JSC::JSArray::mark):
6463        (JSC::compareNumbersForQSort):
6464        (JSC::JSArray::sortNumeric):
6465        (JSC::JSArray::sort):
6466        (JSC::JSArray::compactForSorting):
6467        (JSC::JSArray::checkConsistency):
6468        (JSC::constructArray):
6469        * runtime/JSArray.h:
6470        (JSC::JSArray::getIndex):
6471        (JSC::JSArray::setIndex):
6472        (JSC::JSArray::createStructure):
6473        (JSC::asArray):
6474        (JSC::isJSArray):
6475        * runtime/JSByteArray.cpp:
6476        (JSC::JSByteArray::createStructure):
6477        (JSC::JSByteArray::put):
6478        * runtime/JSByteArray.h:
6479        (JSC::JSByteArray::getIndex):
6480        (JSC::JSByteArray::setIndex):
6481        (JSC::asByteArray):
6482        (JSC::isJSByteArray):
6483        * runtime/JSCell.cpp:
6484        (JSC::JSCell::put):
6485        (JSC::JSCell::getJSNumber):
6486        * runtime/JSCell.h:
6487        (JSC::asCell):
6488        (JSC::JSValue::asCell):
6489        (JSC::JSValue::isString):
6490        (JSC::JSValue::isGetterSetter):
6491        (JSC::JSValue::isObject):
6492        (JSC::JSValue::getString):
6493        (JSC::JSValue::getObject):
6494        (JSC::JSValue::getCallData):
6495        (JSC::JSValue::getConstructData):
6496        (JSC::JSValue::getUInt32):
6497        (JSC::JSValue::getTruncatedInt32):
6498        (JSC::JSValue::getTruncatedUInt32):
6499        (JSC::JSValue::mark):
6500        (JSC::JSValue::marked):
6501        (JSC::JSValue::toPrimitive):
6502        (JSC::JSValue::getPrimitiveNumber):
6503        (JSC::JSValue::toBoolean):
6504        (JSC::JSValue::toNumber):
6505        (JSC::JSValue::toString):
6506        (JSC::JSValue::toObject):
6507        (JSC::JSValue::toThisObject):
6508        (JSC::JSValue::needsThisConversion):
6509        (JSC::JSValue::toThisString):
6510        (JSC::JSValue::getJSNumber):
6511        * runtime/JSFunction.cpp:
6512        (JSC::JSFunction::call):
6513        (JSC::JSFunction::argumentsGetter):
6514        (JSC::JSFunction::callerGetter):
6515        (JSC::JSFunction::lengthGetter):
6516        (JSC::JSFunction::getOwnPropertySlot):
6517        (JSC::JSFunction::put):
6518        (JSC::JSFunction::construct):
6519        * runtime/JSFunction.h:
6520        (JSC::JSFunction::createStructure):
6521        (JSC::asFunction):
6522        * runtime/JSGlobalData.h:
6523        * runtime/JSGlobalObject.cpp:
6524        (JSC::markIfNeeded):
6525        (JSC::JSGlobalObject::put):
6526        (JSC::JSGlobalObject::putWithAttributes):
6527        (JSC::JSGlobalObject::reset):
6528        (JSC::JSGlobalObject::resetPrototype):
6529        * runtime/JSGlobalObject.h:
6530        (JSC::JSGlobalObject::createStructure):
6531        (JSC::JSGlobalObject::GlobalPropertyInfo::GlobalPropertyInfo):
6532        (JSC::asGlobalObject):
6533        (JSC::Structure::prototypeForLookup):
6534        (JSC::Structure::prototypeChain):
6535        (JSC::Structure::isValid):
6536        * runtime/JSGlobalObjectFunctions.cpp:
6537        (JSC::encode):
6538        (JSC::decode):
6539        (JSC::globalFuncEval):
6540        (JSC::globalFuncParseInt):
6541        (JSC::globalFuncParseFloat):
6542        (JSC::globalFuncIsNaN):
6543        (JSC::globalFuncIsFinite):
6544        (JSC::globalFuncDecodeURI):
6545        (JSC::globalFuncDecodeURIComponent):
6546        (JSC::globalFuncEncodeURI):
6547        (JSC::globalFuncEncodeURIComponent):
6548        (JSC::globalFuncEscape):
6549        (JSC::globalFuncUnescape):
6550        (JSC::globalFuncJSCPrint):
6551        * runtime/JSGlobalObjectFunctions.h:
6552        * runtime/JSImmediate.cpp:
6553        (JSC::JSImmediate::toThisObject):
6554        (JSC::JSImmediate::toObject):
6555        (JSC::JSImmediate::prototype):
6556        (JSC::JSImmediate::toString):
6557        * runtime/JSImmediate.h:
6558        (JSC::JSImmediate::isImmediate):
6559        (JSC::JSImmediate::isNumber):
6560        (JSC::JSImmediate::isIntegerNumber):
6561        (JSC::JSImmediate::isDoubleNumber):
6562        (JSC::JSImmediate::isPositiveIntegerNumber):
6563        (JSC::JSImmediate::isBoolean):
6564        (JSC::JSImmediate::isUndefinedOrNull):
6565        (JSC::JSImmediate::isEitherImmediate):
6566        (JSC::JSImmediate::areBothImmediate):
6567        (JSC::JSImmediate::areBothImmediateIntegerNumbers):
6568        (JSC::JSImmediate::makeValue):
6569        (JSC::JSImmediate::makeInt):
6570        (JSC::JSImmediate::makeDouble):
6571        (JSC::JSImmediate::makeBool):
6572        (JSC::JSImmediate::makeUndefined):
6573        (JSC::JSImmediate::makeNull):
6574        (JSC::JSImmediate::doubleValue):
6575        (JSC::JSImmediate::intValue):
6576        (JSC::JSImmediate::uintValue):
6577        (JSC::JSImmediate::boolValue):
6578        (JSC::JSImmediate::rawValue):
6579        (JSC::JSImmediate::trueImmediate):
6580        (JSC::JSImmediate::falseImmediate):
6581        (JSC::JSImmediate::undefinedImmediate):
6582        (JSC::JSImmediate::nullImmediate):
6583        (JSC::JSImmediate::zeroImmediate):
6584        (JSC::JSImmediate::oneImmediate):
6585        (JSC::JSImmediate::impossibleValue):
6586        (JSC::JSImmediate::toBoolean):
6587        (JSC::JSImmediate::getTruncatedUInt32):
6588        (JSC::JSImmediate::fromNumberOutsideIntegerRange):
6589        (JSC::JSImmediate::from):
6590        (JSC::JSImmediate::getTruncatedInt32):
6591        (JSC::JSImmediate::toDouble):
6592        (JSC::JSImmediate::getUInt32):
6593        (JSC::JSValue::JSValue):
6594        (JSC::JSValue::isUndefinedOrNull):
6595        (JSC::JSValue::isBoolean):
6596        (JSC::JSValue::getBoolean):
6597        (JSC::JSValue::toInt32):
6598        (JSC::JSValue::toUInt32):
6599        (JSC::JSValue::isCell):
6600        (JSC::JSValue::isInt32Fast):
6601        (JSC::JSValue::getInt32Fast):
6602        (JSC::JSValue::isUInt32Fast):
6603        (JSC::JSValue::getUInt32Fast):
6604        (JSC::JSValue::makeInt32Fast):
6605        (JSC::JSValue::areBothInt32Fast):
6606        (JSC::JSFastMath::canDoFastBitwiseOperations):
6607        (JSC::JSFastMath::equal):
6608        (JSC::JSFastMath::notEqual):
6609        (JSC::JSFastMath::andImmediateNumbers):
6610        (JSC::JSFastMath::xorImmediateNumbers):
6611        (JSC::JSFastMath::orImmediateNumbers):
6612        (JSC::JSFastMath::canDoFastRshift):
6613        (JSC::JSFastMath::canDoFastUrshift):
6614        (JSC::JSFastMath::rightShiftImmediateNumbers):
6615        (JSC::JSFastMath::canDoFastAdditiveOperations):
6616        (JSC::JSFastMath::addImmediateNumbers):
6617        (JSC::JSFastMath::subImmediateNumbers):
6618        (JSC::JSFastMath::incImmediateNumber):
6619        (JSC::JSFastMath::decImmediateNumber):
6620        * runtime/JSNotAnObject.cpp:
6621        (JSC::JSNotAnObject::toPrimitive):
6622        (JSC::JSNotAnObject::getPrimitiveNumber):
6623        (JSC::JSNotAnObject::put):
6624        * runtime/JSNotAnObject.h:
6625        (JSC::JSNotAnObject::createStructure):
6626        * runtime/JSNumberCell.cpp:
6627        (JSC::JSNumberCell::toPrimitive):
6628        (JSC::JSNumberCell::getPrimitiveNumber):
6629        (JSC::JSNumberCell::getJSNumber):
6630        (JSC::jsNumberCell):
6631        * runtime/JSNumberCell.h:
6632        (JSC::JSNumberCell::createStructure):
6633        (JSC::isNumberCell):
6634        (JSC::asNumberCell):
6635        (JSC::jsNumber):
6636        (JSC::JSValue::isDoubleNumber):
6637        (JSC::JSValue::getDoubleNumber):
6638        (JSC::JSValue::isNumber):
6639        (JSC::JSValue::uncheckedGetNumber):
6640        (JSC::jsNaN):
6641        (JSC::JSValue::toJSNumber):
6642        (JSC::JSValue::getNumber):
6643        (JSC::JSValue::numberToInt32):
6644        (JSC::JSValue::numberToUInt32):
6645        * runtime/JSObject.cpp:
6646        (JSC::JSObject::mark):
6647        (JSC::JSObject::put):
6648        (JSC::JSObject::putWithAttributes):
6649        (JSC::callDefaultValueFunction):
6650        (JSC::JSObject::getPrimitiveNumber):
6651        (JSC::JSObject::defaultValue):
6652        (JSC::JSObject::defineGetter):
6653        (JSC::JSObject::defineSetter):
6654        (JSC::JSObject::lookupGetter):
6655        (JSC::JSObject::lookupSetter):
6656        (JSC::JSObject::hasInstance):
6657        (JSC::JSObject::toNumber):
6658        (JSC::JSObject::toString):
6659        (JSC::JSObject::fillGetterPropertySlot):
6660        * runtime/JSObject.h:
6661        (JSC::JSObject::getDirect):
6662        (JSC::JSObject::getDirectLocation):
6663        (JSC::JSObject::offsetForLocation):
6664        (JSC::JSObject::locationForOffset):
6665        (JSC::JSObject::getDirectOffset):
6666        (JSC::JSObject::putDirectOffset):
6667        (JSC::JSObject::createStructure):
6668        (JSC::asObject):
6669        (JSC::JSObject::prototype):
6670        (JSC::JSObject::setPrototype):
6671        (JSC::JSValue::isObject):
6672        (JSC::JSObject::inlineGetOwnPropertySlot):
6673        (JSC::JSObject::getOwnPropertySlotForWrite):
6674        (JSC::JSObject::getPropertySlot):
6675        (JSC::JSObject::get):
6676        (JSC::JSObject::putDirect):
6677        (JSC::JSObject::putDirectWithoutTransition):
6678        (JSC::JSObject::toPrimitive):
6679        (JSC::JSValue::get):
6680        (JSC::JSValue::put):
6681        (JSC::JSObject::allocatePropertyStorageInline):
6682        * runtime/JSPropertyNameIterator.cpp:
6683        (JSC::JSPropertyNameIterator::toPrimitive):
6684        (JSC::JSPropertyNameIterator::getPrimitiveNumber):
6685        * runtime/JSPropertyNameIterator.h:
6686        (JSC::JSPropertyNameIterator::create):
6687        (JSC::JSPropertyNameIterator::next):
6688        * runtime/JSStaticScopeObject.cpp:
6689        (JSC::JSStaticScopeObject::put):
6690        (JSC::JSStaticScopeObject::putWithAttributes):
6691        * runtime/JSStaticScopeObject.h:
6692        (JSC::JSStaticScopeObject::JSStaticScopeObject):
6693        (JSC::JSStaticScopeObject::createStructure):
6694        * runtime/JSString.cpp:
6695        (JSC::JSString::toPrimitive):
6696        (JSC::JSString::getPrimitiveNumber):
6697        (JSC::JSString::getOwnPropertySlot):
6698        * runtime/JSString.h:
6699        (JSC::JSString::createStructure):
6700        (JSC::asString):
6701        (JSC::isJSString):
6702        (JSC::JSValue::toThisJSString):
6703        * runtime/JSValue.cpp:
6704        (JSC::JSValue::toInteger):
6705        (JSC::JSValue::toIntegerPreserveNaN):
6706        * runtime/JSValue.h:
6707        (JSC::JSValue::makeImmediate):
6708        (JSC::JSValue::asValue):
6709        (JSC::noValue):
6710        (JSC::jsImpossibleValue):
6711        (JSC::jsNull):
6712        (JSC::jsUndefined):
6713        (JSC::jsBoolean):
6714        (JSC::operator==):
6715        (JSC::operator!=):
6716        (JSC::JSValue::encode):
6717        (JSC::JSValue::decode):
6718        (JSC::JSValue::JSValue):
6719        (JSC::JSValue::operator bool):
6720        (JSC::JSValue::operator==):
6721        (JSC::JSValue::operator!=):
6722        (JSC::JSValue::isUndefined):
6723        (JSC::JSValue::isNull):
6724        * runtime/JSVariableObject.h:
6725        (JSC::JSVariableObject::symbolTablePut):
6726        (JSC::JSVariableObject::symbolTablePutWithAttributes):
6727        * runtime/JSWrapperObject.h:
6728        (JSC::JSWrapperObject::internalValue):
6729        (JSC::JSWrapperObject::setInternalValue):
6730        * runtime/Lookup.cpp:
6731        (JSC::setUpStaticFunctionSlot):
6732        * runtime/Lookup.h:
6733        (JSC::lookupPut):
6734        * runtime/MathObject.cpp:
6735        (JSC::mathProtoFuncAbs):
6736        (JSC::mathProtoFuncACos):
6737        (JSC::mathProtoFuncASin):
6738        (JSC::mathProtoFuncATan):
6739        (JSC::mathProtoFuncATan2):
6740        (JSC::mathProtoFuncCeil):
6741        (JSC::mathProtoFuncCos):
6742        (JSC::mathProtoFuncExp):
6743        (JSC::mathProtoFuncFloor):
6744        (JSC::mathProtoFuncLog):
6745        (JSC::mathProtoFuncMax):
6746        (JSC::mathProtoFuncMin):
6747        (JSC::mathProtoFuncPow):
6748        (JSC::mathProtoFuncRandom):
6749        (JSC::mathProtoFuncRound):
6750        (JSC::mathProtoFuncSin):
6751        (JSC::mathProtoFuncSqrt):
6752        (JSC::mathProtoFuncTan):
6753        * runtime/MathObject.h:
6754        (JSC::MathObject::createStructure):
6755        * runtime/NativeErrorConstructor.cpp:
6756        (JSC::callNativeErrorConstructor):
6757        * runtime/NumberConstructor.cpp:
6758        (JSC::numberConstructorNaNValue):
6759        (JSC::numberConstructorNegInfinity):
6760        (JSC::numberConstructorPosInfinity):
6761        (JSC::numberConstructorMaxValue):
6762        (JSC::numberConstructorMinValue):
6763        (JSC::callNumberConstructor):
6764        * runtime/NumberConstructor.h:
6765        (JSC::NumberConstructor::createStructure):
6766        * runtime/NumberObject.cpp:
6767        (JSC::NumberObject::getJSNumber):
6768        (JSC::constructNumber):
6769        * runtime/NumberObject.h:
6770        * runtime/NumberPrototype.cpp:
6771        (JSC::numberProtoFuncToString):
6772        (JSC::numberProtoFuncToLocaleString):
6773        (JSC::numberProtoFuncValueOf):
6774        (JSC::numberProtoFuncToFixed):
6775        (JSC::numberProtoFuncToExponential):
6776        (JSC::numberProtoFuncToPrecision):
6777        * runtime/ObjectConstructor.cpp:
6778        (JSC::constructObject):
6779        (JSC::callObjectConstructor):
6780        * runtime/ObjectPrototype.cpp:
6781        (JSC::objectProtoFuncValueOf):
6782        (JSC::objectProtoFuncHasOwnProperty):
6783        (JSC::objectProtoFuncIsPrototypeOf):
6784        (JSC::objectProtoFuncDefineGetter):
6785        (JSC::objectProtoFuncDefineSetter):
6786        (JSC::objectProtoFuncLookupGetter):
6787        (JSC::objectProtoFuncLookupSetter):
6788        (JSC::objectProtoFuncPropertyIsEnumerable):
6789        (JSC::objectProtoFuncToLocaleString):
6790        (JSC::objectProtoFuncToString):
6791        * runtime/ObjectPrototype.h:
6792        * runtime/Operations.cpp:
6793        (JSC::JSValue::equalSlowCase):
6794        (JSC::JSValue::strictEqualSlowCase):
6795        (JSC::throwOutOfMemoryError):
6796        (JSC::jsAddSlowCase):
6797        (JSC::jsTypeStringForValue):
6798        (JSC::jsIsObjectType):
6799        (JSC::jsIsFunctionType):
6800        * runtime/Operations.h:
6801        (JSC::JSValue::equal):
6802        (JSC::JSValue::equalSlowCaseInline):
6803        (JSC::JSValue::strictEqual):
6804        (JSC::JSValue::strictEqualSlowCaseInline):
6805        (JSC::jsLess):
6806        (JSC::jsLessEq):
6807        (JSC::jsAdd):
6808        (JSC::countPrototypeChainEntriesAndCheckForProxies):
6809        (JSC::resolveBase):
6810        * runtime/PropertySlot.cpp:
6811        (JSC::PropertySlot::functionGetter):
6812        * runtime/PropertySlot.h:
6813        (JSC::PropertySlot::PropertySlot):
6814        (JSC::PropertySlot::getValue):
6815        (JSC::PropertySlot::putValue):
6816        (JSC::PropertySlot::setValueSlot):
6817        (JSC::PropertySlot::setValue):
6818        (JSC::PropertySlot::setCustom):
6819        (JSC::PropertySlot::setCustomIndex):
6820        (JSC::PropertySlot::slotBase):
6821        (JSC::PropertySlot::setBase):
6822        (JSC::PropertySlot::):
6823        * runtime/Protect.h:
6824        (JSC::gcProtect):
6825        (JSC::gcUnprotect):
6826        (JSC::ProtectedPtr::operator JSValue):
6827        (JSC::ProtectedJSValue::ProtectedJSValue):
6828        (JSC::ProtectedJSValue::get):
6829        (JSC::ProtectedJSValue::operator JSValue):
6830        (JSC::ProtectedJSValue::operator->):
6831        (JSC::ProtectedJSValue::~ProtectedJSValue):
6832        (JSC::ProtectedJSValue::operator=):
6833        (JSC::operator==):
6834        (JSC::operator!=):
6835        * runtime/RegExpConstructor.cpp:
6836        (JSC::RegExpConstructor::getBackref):
6837        (JSC::RegExpConstructor::getLastParen):
6838        (JSC::RegExpConstructor::getLeftContext):
6839        (JSC::RegExpConstructor::getRightContext):
6840        (JSC::regExpConstructorDollar1):
6841        (JSC::regExpConstructorDollar2):
6842        (JSC::regExpConstructorDollar3):
6843        (JSC::regExpConstructorDollar4):
6844        (JSC::regExpConstructorDollar5):
6845        (JSC::regExpConstructorDollar6):
6846        (JSC::regExpConstructorDollar7):
6847        (JSC::regExpConstructorDollar8):
6848        (JSC::regExpConstructorDollar9):
6849        (JSC::regExpConstructorInput):
6850        (JSC::regExpConstructorMultiline):
6851        (JSC::regExpConstructorLastMatch):
6852        (JSC::regExpConstructorLastParen):
6853        (JSC::regExpConstructorLeftContext):
6854        (JSC::regExpConstructorRightContext):
6855        (JSC::RegExpConstructor::put):
6856        (JSC::setRegExpConstructorInput):
6857        (JSC::setRegExpConstructorMultiline):
6858        (JSC::constructRegExp):
6859        (JSC::callRegExpConstructor):
6860        * runtime/RegExpConstructor.h:
6861        (JSC::RegExpConstructor::createStructure):
6862        (JSC::asRegExpConstructor):
6863        * runtime/RegExpMatchesArray.h:
6864        (JSC::RegExpMatchesArray::put):
6865        * runtime/RegExpObject.cpp:
6866        (JSC::regExpObjectGlobal):
6867        (JSC::regExpObjectIgnoreCase):
6868        (JSC::regExpObjectMultiline):
6869        (JSC::regExpObjectSource):
6870        (JSC::regExpObjectLastIndex):
6871        (JSC::RegExpObject::put):
6872        (JSC::setRegExpObjectLastIndex):
6873        (JSC::RegExpObject::test):
6874        (JSC::RegExpObject::exec):
6875        (JSC::callRegExpObject):
6876        * runtime/RegExpObject.h:
6877        (JSC::RegExpObject::createStructure):
6878        (JSC::asRegExpObject):
6879        * runtime/RegExpPrototype.cpp:
6880        (JSC::regExpProtoFuncTest):
6881        (JSC::regExpProtoFuncExec):
6882        (JSC::regExpProtoFuncCompile):
6883        (JSC::regExpProtoFuncToString):
6884        * runtime/StringConstructor.cpp:
6885        (JSC::stringFromCharCodeSlowCase):
6886        (JSC::stringFromCharCode):
6887        (JSC::callStringConstructor):
6888        * runtime/StringObject.cpp:
6889        (JSC::StringObject::put):
6890        * runtime/StringObject.h:
6891        (JSC::StringObject::createStructure):
6892        (JSC::asStringObject):
6893        * runtime/StringObjectThatMasqueradesAsUndefined.h:
6894        (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
6895        * runtime/StringPrototype.cpp:
6896        (JSC::stringProtoFuncReplace):
6897        (JSC::stringProtoFuncToString):
6898        (JSC::stringProtoFuncCharAt):
6899        (JSC::stringProtoFuncCharCodeAt):
6900        (JSC::stringProtoFuncConcat):
6901        (JSC::stringProtoFuncIndexOf):
6902        (JSC::stringProtoFuncLastIndexOf):
6903        (JSC::stringProtoFuncMatch):
6904        (JSC::stringProtoFuncSearch):
6905        (JSC::stringProtoFuncSlice):
6906        (JSC::stringProtoFuncSplit):
6907        (JSC::stringProtoFuncSubstr):
6908        (JSC::stringProtoFuncSubstring):
6909        (JSC::stringProtoFuncToLowerCase):
6910        (JSC::stringProtoFuncToUpperCase):
6911        (JSC::stringProtoFuncLocaleCompare):
6912        (JSC::stringProtoFuncBig):
6913        (JSC::stringProtoFuncSmall):
6914        (JSC::stringProtoFuncBlink):
6915        (JSC::stringProtoFuncBold):
6916        (JSC::stringProtoFuncFixed):
6917        (JSC::stringProtoFuncItalics):
6918        (JSC::stringProtoFuncStrike):
6919        (JSC::stringProtoFuncSub):
6920        (JSC::stringProtoFuncSup):
6921        (JSC::stringProtoFuncFontcolor):
6922        (JSC::stringProtoFuncFontsize):
6923        (JSC::stringProtoFuncAnchor):
6924        (JSC::stringProtoFuncLink):
6925        * runtime/Structure.cpp:
6926        (JSC::Structure::Structure):
6927        (JSC::Structure::changePrototypeTransition):
6928        * runtime/Structure.h:
6929        (JSC::Structure::create):
6930        (JSC::Structure::setPrototypeWithoutTransition):
6931        (JSC::Structure::storedPrototype):
6932
69332009-05-01  Geoffrey Garen  <ggaren@apple.com>
6934
6935        Reviewed by Sam "That doesn't look like what I thought it looks like" Weinig.
6936        
6937        Beefed up the JSValuePtr class and removed some non-JSValuePtr dependencies
6938        on JSImmediate, in prepapration for making JSImmediate an implementation
6939        detail of JSValuePtr.
6940        
6941        SunSpider reports no change.
6942
6943        * interpreter/Interpreter.cpp:
6944        (JSC::Interpreter::privateExecute):
6945        * jit/JIT.cpp:
6946        (JSC::JIT::privateCompileMainPass):
6947        * jit/JITArithmetic.cpp:
6948        (JSC::JIT::compileFastArith_op_mod):
6949        * runtime/JSGlobalObjectFunctions.cpp:
6950        (JSC::globalFuncParseInt): Updated for interface changes.
6951
6952        * runtime/JSImmediate.h:
6953        (JSC::JSValuePtr::JSValuePtr):
6954        * runtime/JSValue.h:
6955        (JSC::JSValuePtr::):
6956        (JSC::jsImpossibleValue):
6957        (JSC::jsNull):
6958        (JSC::jsUndefined):
6959        (JSC::jsBoolean):
6960        (JSC::JSValuePtr::encode):
6961        (JSC::JSValuePtr::decode):
6962        (JSC::JSValuePtr::JSValuePtr):
6963        (JSC::JSValuePtr::operator bool):
6964        (JSC::JSValuePtr::operator==):
6965        (JSC::JSValuePtr::operator!=):
6966        (JSC::JSValuePtr::isUndefined):
6967        (JSC::JSValuePtr::isNull): Changed jsImpossibleValue(), jsNull(),
6968        jsUndefined(), and jsBoolean() to operate in terms of JSValuePtr instead
6969        of JSImmediate.
6970
6971        * wtf/StdLibExtras.h:
6972        (WTF::bitwise_cast): Fixed up for clarity.
6973
69742009-04-30  Gavin Barraclough  <barraclough@apple.com>
6975
6976        Reviewed by Geoff Garen.
6977
6978        Bug fix for rdar:/6845379.  If a case-insensitive regex contains
6979        a character class containing a range with an upper bound of \uFFFF
6980        the parser will infinite-loop whist adding other-case characters
6981        for characters in the range that do have another case.
6982
6983        * yarr/RegexCompiler.cpp:
6984        (JSC::Yarr::CharacterClassConstructor::putRange):
6985
69862009-04-30  Gavin Barraclough  <barraclough@apple.com>
6987
6988        Reviewed by Oliver Hunt.
6989
6990        OPCODE_SAMPLING without CODEBLOCK_SAMPLING is currently broken,
6991        since SamplingTool::Sample::isNull() checks the m_codeBlock
6992        member (which is always null without CODEBLOCK_SAMPLING).
6993
6994        Restructure the checks so make this work again.
6995
6996        * bytecode/SamplingTool.cpp:
6997        (JSC::SamplingTool::doRun):
6998        * bytecode/SamplingTool.h:
6999        (JSC::SamplingTool::Sample::isNull):
7000
70012009-04-30  Maciej Stachowiak  <mjs@apple.com>
7002
7003        Reviewed by Gavin Barraclough.
7004
7005        - Concatenate final three strings in simple replace case at one go
7006
7007        ~0.2% SunSpider speedup
7008
7009        * runtime/StringPrototype.cpp:
7010        (JSC::stringProtoFuncReplace): Use new replaceRange helper instead of
7011        taking substrings and concatenating three strings.
7012        * runtime/UString.cpp:
7013        (JSC::UString::replaceRange): New helper function.
7014        * runtime/UString.h:
7015
70162009-04-30  Geoffrey Garen  <ggaren@apple.com>
7017
7018        Rubber Stamped by Gavin Barraclough.
7019        
7020        Changed JSValueEncodedAsPtr* => EncodedJSValuePtr to support a non-pointer
7021        encoding for JSValuePtrs.
7022
7023        * API/APICast.h:
7024        (toJS):
7025        * bytecompiler/BytecodeGenerator.h:
7026        (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue):
7027        (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue):
7028        * interpreter/Register.h:
7029        (JSC::Register::):
7030        * jit/JIT.cpp:
7031        (JSC::):
7032        * jit/JIT.h:
7033        * jit/JITCode.h:
7034        (JSC::):
7035        * jit/JITStubs.cpp:
7036        (JSC::JITStubs::cti_op_add):
7037        (JSC::JITStubs::cti_op_pre_inc):
7038        (JSC::JITStubs::cti_op_get_by_id_generic):
7039        (JSC::JITStubs::cti_op_get_by_id):
7040        (JSC::JITStubs::cti_op_get_by_id_second):
7041        (JSC::JITStubs::cti_op_get_by_id_self_fail):
7042        (JSC::JITStubs::cti_op_get_by_id_proto_list):
7043        (JSC::JITStubs::cti_op_get_by_id_proto_list_full):
7044        (JSC::JITStubs::cti_op_get_by_id_proto_fail):
7045        (JSC::JITStubs::cti_op_get_by_id_array_fail):
7046        (JSC::JITStubs::cti_op_get_by_id_string_fail):
7047        (JSC::JITStubs::cti_op_instanceof):
7048        (JSC::JITStubs::cti_op_del_by_id):
7049        (JSC::JITStubs::cti_op_mul):
7050        (JSC::JITStubs::cti_op_call_NotJSFunction):
7051        (JSC::JITStubs::cti_op_resolve):
7052        (JSC::JITStubs::cti_op_construct_NotJSConstruct):
7053        (JSC::JITStubs::cti_op_get_by_val):
7054        (JSC::JITStubs::cti_op_get_by_val_string):
7055        (JSC::JITStubs::cti_op_get_by_val_byte_array):
7056        (JSC::JITStubs::cti_op_sub):
7057        (JSC::JITStubs::cti_op_lesseq):
7058        (JSC::JITStubs::cti_op_negate):
7059        (JSC::JITStubs::cti_op_resolve_base):
7060        (JSC::JITStubs::cti_op_resolve_skip):
7061        (JSC::JITStubs::cti_op_resolve_global):
7062        (JSC::JITStubs::cti_op_div):
7063        (JSC::JITStubs::cti_op_pre_dec):
7064        (JSC::JITStubs::cti_op_not):
7065        (JSC::JITStubs::cti_op_eq):
7066        (JSC::JITStubs::cti_op_lshift):
7067        (JSC::JITStubs::cti_op_bitand):
7068        (JSC::JITStubs::cti_op_rshift):
7069        (JSC::JITStubs::cti_op_bitnot):
7070        (JSC::JITStubs::cti_op_mod):
7071        (JSC::JITStubs::cti_op_less):
7072        (JSC::JITStubs::cti_op_neq):
7073        (JSC::JITStubs::cti_op_urshift):
7074        (JSC::JITStubs::cti_op_bitxor):
7075        (JSC::JITStubs::cti_op_bitor):
7076        (JSC::JITStubs::cti_op_call_eval):
7077        (JSC::JITStubs::cti_op_throw):
7078        (JSC::JITStubs::cti_op_next_pname):
7079        (JSC::JITStubs::cti_op_typeof):
7080        (JSC::JITStubs::cti_op_is_undefined):
7081        (JSC::JITStubs::cti_op_is_boolean):
7082        (JSC::JITStubs::cti_op_is_number):
7083        (JSC::JITStubs::cti_op_is_string):
7084        (JSC::JITStubs::cti_op_is_object):
7085        (JSC::JITStubs::cti_op_is_function):
7086        (JSC::JITStubs::cti_op_stricteq):
7087        (JSC::JITStubs::cti_op_nstricteq):
7088        (JSC::JITStubs::cti_op_to_jsnumber):
7089        (JSC::JITStubs::cti_op_in):
7090        (JSC::JITStubs::cti_op_del_by_val):
7091        (JSC::JITStubs::cti_vm_throw):
7092        * jit/JITStubs.h:
7093        * runtime/JSValue.h:
7094        (JSC::JSValuePtr::encode):
7095        (JSC::JSValuePtr::decode):
7096
70972009-04-30  Gavin Barraclough  <barraclough@apple.com>
7098
7099        Reviewed by Oliver "Abandon Ship!" Hunt.
7100
7101        Fix a leak in Yarr.
7102
7103        All Disjunctions should be recorded in RegexPattern::m_disjunctions,
7104        so that they can be freed at the end of compilation - copyDisjunction
7105        is failing to do so.
7106
7107        * yarr/RegexCompiler.cpp:
7108        (JSC::Yarr::RegexPatternConstructor::copyDisjunction):
7109
71102009-04-30  Oliver Hunt  <oliver@apple.com>
7111
7112        Reviewed by Gavin Barraclough.
7113
7114        Add function to CallFrame for dumping the current JS caller
7115
7116        Added debug only method CallFrame::dumpCaller() that provide the call location
7117        of the deepest currently executing JS function.
7118
7119        * interpreter/CallFrame.cpp:
7120        (JSC::CallFrame::dumpCaller):
7121        * interpreter/CallFrame.h:
7122
71232009-04-30  Maciej Stachowiak  <mjs@apple.com>
7124
7125        Reviewed by Geoff Garen.
7126
7127        - make BaseStrings have themselves as a base, instead of nothing, to remove common branches
7128
7129        ~0.7% SunSpider speedup
7130
7131        * runtime/UString.h:
7132        (JSC::UString::Rep::Rep): For the constructor without a base, set self as base instead of null.
7133        (JSC::UString::Rep::baseString): Just read m_baseString - no more branching.
7134
71352009-04-30  Gavin Barraclough  <barraclough@apple.com>
7136
7137        Reviewed by Oliver Hunt.
7138
7139        Two quick improvements to SamplingFlags mechanism.
7140
7141        SamplingFlags::ScopedFlag class to provide support for automagically
7142        clearing a flag as it goes out of scope, and add a little more detail
7143        to the output generated by the tool.
7144
7145        * bytecode/SamplingTool.cpp:
7146        (JSC::SamplingFlags::stop):
7147        * bytecode/SamplingTool.h:
7148        (JSC::SamplingFlags::ScopedFlag::ScopedFlag):
7149        (JSC::SamplingFlags::ScopedFlag::~ScopedFlag):
7150
71512009-04-30  Adam Roben  <aroben@apple.com>
7152
7153        Restore build event steps that were truncated in r43082
7154
7155        Rubber-stamped by Steve Falkenburg.
7156
7157        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
7158        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
7159        * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops:
7160        Re-copied the command lines for the build events from the pre-r43082
7161        .vcproj files.
7162
7163        * JavaScriptCore.vcproj/jsc/jsc.vcproj: Removed an unnecessary
7164        attribute.
7165
71662009-04-30  Adam Roben  <aroben@apple.com>
7167
7168        Move settings from .vcproj files to .vsprops files within the
7169        JavaScriptCore directory
7170
7171        Moving the settings to a .vsprops file means that we will only have to
7172        change a single setting to affect all configurations, instead of one
7173        setting per configuration.
7174
7175        Reviewed by Steve Falkenburg.
7176
7177        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7178        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
7179        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
7180        * JavaScriptCore.vcproj/testapi/testapi.vcproj:
7181        Moved settings from these files to the new .vsprops files. Note that
7182        testapi.vcproj had a lot of overrides of default settings that were
7183        the same as the defaults, which I've removed.
7184
7185        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: Added.
7186        * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops: Added.
7187        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Added.
7188        * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: Added.
7189
71902009-04-30  Dimitri Glazkov  <dglazkov@chromium.org>
7191
7192        Reviewed by Timothy Hatcher.
7193
7194        https://bugs.webkit.org/show_bug.cgi?id=25470
7195        Extend the cover of ENABLE_JAVASCRIPT_DEBUGGER to profiler.
7196
7197        * Configurations/FeatureDefines.xcconfig: Added ENABLE_JAVASCRIPT_DEBUGGER define.
7198
71992009-04-30  Maciej Stachowiak  <mjs@apple.com>
7200
7201        Reviewed by Alexey Proskuryakov.
7202
7203        - speed up string concatenation by reorganizing some simple cases
7204
7205        0.7% SunSpider speedup
7206
7207        * runtime/UString.cpp:
7208        (JSC::concatenate): Put fast case for appending a single character
7209        before the empty string special cases; streamline code a bit to
7210        delay computing values that are not needed in the fast path.
7211
72122009-04-30  Gavin Barraclough  <barraclough@apple.com>
7213
7214        Reviewed by Maciej Stachowiak.
7215
7216        Add SamplingFlags mechanism.
7217
7218        This mechanism allows fine-grained JSC and JavaScript program aware
7219        performance measurement.  The mechanism provides a set of 32 flags,
7220        numbered #1..#32.  Flag #16 is initially set, and all other flags
7221        are cleared.  Flags may be set and cleared from within
7222
7223        Enable by setting ENABLE_SAMPLING_FLAGS to 1 in wtf/Platform.h.
7224        Disabled by default, no performance impact.  Flags may be modified
7225        by calling SamplingFlags::setFlag() and SamplingFlags::clearFlag()
7226        from within JSC implementation, or by calling setSamplingFlag() and
7227        clearSamplingFlag() from JavaScript.
7228
7229        The flags are sampled with a frequency of 10000Hz, and the highest
7230        set flag in recorded, allowing multiple events to be measured (with
7231        the highest flag number representing the highest priority).
7232
7233        Disabled by default; no performance impact.
7234
7235        * JavaScriptCore.exp:
7236        * bytecode/SamplingTool.cpp:
7237        (JSC::SamplingFlags::sample):
7238        (JSC::SamplingFlags::start):
7239        (JSC::SamplingFlags::stop):
7240        (JSC::SamplingThread::threadStartFunc):
7241        (JSC::SamplingThread::start):
7242        (JSC::SamplingThread::stop):
7243        (JSC::ScopeSampleRecord::sample):
7244        (JSC::SamplingTool::doRun):
7245        (JSC::SamplingTool::sample):
7246        (JSC::SamplingTool::start):
7247        (JSC::SamplingTool::stop):
7248        * bytecode/SamplingTool.h:
7249        (JSC::SamplingFlags::setFlag):
7250        (JSC::SamplingFlags::clearFlag):
7251        (JSC::SamplingTool::SamplingTool):
7252        * jsc.cpp:
7253        (GlobalObject::GlobalObject):
7254        (functionSetSamplingFlag):
7255        (functionClearSamplingFlag):
7256        (runWithScripts):
7257        * wtf/Platform.h:
7258
72592009-04-29  Sam Weinig  <sam@webkit.org>
7260
7261        Another attempt to fix the windows build.
7262
7263        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
7264        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
7265
72662009-04-29  Sam Weinig  <sam@webkit.org>
7267
7268        Try and fix the windows build.
7269
7270        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
7271        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
7272
72732009-04-29  Gavin Barraclough  <barraclough@apple.com>
7274
7275        Reviewed by Oliver "Peg-Leg" Hunt.
7276
7277        Coallesce input checking and reduce futzing with the index position
7278        between alternatives and iterations of the main loop of a regex,
7279        when run in YARR.
7280
7281        Consider the following regex:  /foo|bar/
7282        
7283        Prior to this patch, this will be implemented something like this pseudo-code description:
7284        
7285        loop:
7286            check_for_available_input(3) // this increments the index by 3, for the first alterantive.
7287                if (available) { test "foo" }
7288            decrement_index(3)
7289            check_for_available_input(3) // this increments the index by 3, for the second alterantive.
7290                if (available) { test "bar" }
7291            decrement_index(3)
7292            check_for_available_input(1) // can we loop again?
7293                if (available) { goto loop }
7294
7295        With these changes it will look more like this:
7296
7297            check_for_available_input(3) // this increments the index by 3, for the first alterantive.
7298            if (!available) { goto fail }
7299        loop:
7300            test "foo"
7301            test "bar"
7302            check_for_available_input(1) // can we loop again?
7303                if (available) { goto loop }
7304        fail:
7305
7306
7307        This gives about a 5% gain on v8-regex, no change on Sunspider.
7308
7309        * yarr/RegexJIT.cpp:
7310        (JSC::Yarr::RegexGenerator::TermGenerationState::linkAlternativeBacktracksTo):
7311        (JSC::Yarr::RegexGenerator::generateDisjunction):
7312
73132009-04-29  Oliver Hunt  <oliver@apple.com>
7314
7315        Reviewed by Gavin Barraclough.
7316
7317        Clean up ArgList to be a trivial type
7318
7319        Separate out old ArgList logic to handle buffering and marking arguments
7320        into a distinct MarkedArgumentBuffer type.  ArgList becomes a trivial
7321        struct of a pointer and length.
7322
7323        * API/JSObjectRef.cpp:
7324        (JSObjectMakeFunction):
7325        (JSObjectMakeArray):
7326        (JSObjectMakeDate):
7327        (JSObjectMakeError):
7328        (JSObjectMakeRegExp):
7329        (JSObjectCallAsFunction):
7330        (JSObjectCallAsConstructor):
7331        * JavaScriptCore.exp:
7332        * interpreter/CallFrame.h:
7333        (JSC::ExecState::emptyList):
7334        * runtime/ArgList.cpp:
7335        (JSC::ArgList::getSlice):
7336        (JSC::MarkedArgumentBuffer::markLists):
7337        (JSC::MarkedArgumentBuffer::slowAppend):
7338        * runtime/ArgList.h:
7339        (JSC::MarkedArgumentBuffer::MarkedArgumentBuffer):
7340        (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer):
7341        (JSC::ArgList::ArgList):
7342        (JSC::ArgList::at):
7343        (JSC::ArgList::isEmpty):
7344        (JSC::ArgList::size):
7345        (JSC::ArgList::begin):
7346        (JSC::ArgList::end):
7347        * runtime/Arguments.cpp:
7348        (JSC::Arguments::fillArgList):
7349        * runtime/Arguments.h:
7350        * runtime/ArrayPrototype.cpp:
7351        (JSC::arrayProtoFuncConcat):
7352        (JSC::arrayProtoFuncPush):
7353        (JSC::arrayProtoFuncSort):
7354        (JSC::arrayProtoFuncFilter):
7355        (JSC::arrayProtoFuncMap):
7356        (JSC::arrayProtoFuncEvery):
7357        (JSC::arrayProtoFuncForEach):
7358        (JSC::arrayProtoFuncSome):
7359        (JSC::arrayProtoFuncReduce):
7360        (JSC::arrayProtoFuncReduceRight):
7361        * runtime/Collector.cpp:
7362        (JSC::Heap::collect):
7363        * runtime/Collector.h:
7364        (JSC::Heap::markListSet):
7365        * runtime/CommonIdentifiers.h:
7366        * runtime/Error.cpp:
7367        (JSC::Error::create):
7368        * runtime/FunctionPrototype.cpp:
7369        (JSC::functionProtoFuncApply):
7370        * runtime/JSArray.cpp:
7371        (JSC::JSArray::JSArray):
7372        (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key):
7373        (JSC::JSArray::fillArgList):
7374        (JSC::constructArray):
7375        * runtime/JSArray.h:
7376        * runtime/JSGlobalData.cpp:
7377        (JSC::JSGlobalData::JSGlobalData):
7378        * runtime/JSGlobalData.h:
7379        * runtime/JSObject.cpp:
7380        (JSC::JSObject::put):
7381        * runtime/StringConstructor.cpp:
7382        (JSC::stringFromCharCodeSlowCase):
7383        * runtime/StringPrototype.cpp:
7384        (JSC::stringProtoFuncReplace):
7385        (JSC::stringProtoFuncConcat):
7386        (JSC::stringProtoFuncMatch):
7387
73882009-04-29  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
7389
7390        Reviewed by Sam Weinig.
7391
7392        https://bugs.webkit.org/show_bug.cgi?id=25334
7393
7394        Fix Qt build when ENABLE_JIT is explicitly set to 1
7395        to overrule defaults.
7396
7397        * JavaScriptCore.pri:
7398
73992009-04-29  Oliver Hunt  <oliver@apple.com>
7400
7401        Reviewed by Steve Falkenburg.
7402
7403        Crash in profiler due to incorrect assuming displayName would be a string.
7404
7405        Fixed by adding a type guard.
7406
7407        * runtime/InternalFunction.cpp:
7408        (JSC::InternalFunction::displayName):
7409
74102009-04-28  Geoffrey Garen  <ggaren@apple.com>
7411
7412        Rubber stamped by Beth Dakin.
7413        
7414        Removed scaffolding supporting dynamically converting between 32bit and
7415        64bit value representations. 
7416
7417        * API/JSCallbackConstructor.cpp:
7418        (JSC::constructJSCallback):
7419        * API/JSCallbackFunction.cpp:
7420        (JSC::JSCallbackFunction::call):
7421        * API/JSCallbackObjectFunctions.h:
7422        (JSC::::construct):
7423        (JSC::::call):
7424        * bytecode/CodeBlock.cpp:
7425        (JSC::CodeBlock::dump):
7426        * bytecode/CodeBlock.h:
7427        (JSC::CodeBlock::getConstant):
7428        * bytecompiler/BytecodeGenerator.cpp:
7429        (JSC::BytecodeGenerator::emitEqualityOp):
7430        * interpreter/CallFrame.cpp:
7431        (JSC::CallFrame::thisValue):
7432        * interpreter/Interpreter.cpp:
7433        (JSC::Interpreter::callEval):
7434        (JSC::Interpreter::throwException):
7435        (JSC::Interpreter::createExceptionScope):
7436        (JSC::Interpreter::privateExecute):
7437        (JSC::Interpreter::retrieveArguments):
7438        * interpreter/Register.h:
7439        (JSC::Register::):
7440        (JSC::Register::Register):
7441        (JSC::Register::jsValue):
7442        (JSC::Register::marked):
7443        (JSC::Register::mark):
7444        (JSC::Register::i):
7445        (JSC::Register::activation):
7446        (JSC::Register::arguments):
7447        (JSC::Register::callFrame):
7448        (JSC::Register::codeBlock):
7449        (JSC::Register::function):
7450        (JSC::Register::propertyNameIterator):
7451        (JSC::Register::scopeChain):
7452        (JSC::Register::vPC):
7453        * jit/JITStubs.cpp:
7454        (JSC::JITStubs::cti_op_call_NotJSFunction):
7455        (JSC::JITStubs::cti_op_load_varargs):
7456        (JSC::JITStubs::cti_op_call_eval):
7457        * jsc.cpp:
7458        (functionPrint):
7459        (functionDebug):
7460        (functionRun):
7461        (functionLoad):
7462        * runtime/ArgList.h:
7463        (JSC::ArgList::at):
7464        * runtime/Arguments.cpp:
7465        (JSC::Arguments::copyToRegisters):
7466        (JSC::Arguments::fillArgList):
7467        (JSC::Arguments::getOwnPropertySlot):
7468        * runtime/ArrayConstructor.cpp:
7469        (JSC::constructArrayWithSizeQuirk):
7470        * runtime/ArrayPrototype.cpp:
7471        (JSC::arrayProtoFuncJoin):
7472        (JSC::arrayProtoFuncConcat):
7473        (JSC::arrayProtoFuncPush):
7474        (JSC::arrayProtoFuncSlice):
7475        (JSC::arrayProtoFuncSort):
7476        (JSC::arrayProtoFuncSplice):
7477        (JSC::arrayProtoFuncUnShift):
7478        (JSC::arrayProtoFuncFilter):
7479        (JSC::arrayProtoFuncMap):
7480        (JSC::arrayProtoFuncEvery):
7481        (JSC::arrayProtoFuncForEach):
7482        (JSC::arrayProtoFuncSome):
7483        (JSC::arrayProtoFuncReduce):
7484        (JSC::arrayProtoFuncReduceRight):
7485        (JSC::arrayProtoFuncIndexOf):
7486        (JSC::arrayProtoFuncLastIndexOf):
7487        * runtime/BooleanConstructor.cpp:
7488        (JSC::constructBoolean):
7489        (JSC::callBooleanConstructor):
7490        * runtime/DateConstructor.cpp:
7491        (JSC::constructDate):
7492        (JSC::dateParse):
7493        (JSC::dateUTC):
7494        * runtime/DatePrototype.cpp:
7495        (JSC::formatLocaleDate):
7496        (JSC::fillStructuresUsingTimeArgs):
7497        (JSC::fillStructuresUsingDateArgs):
7498        (JSC::dateProtoFuncSetTime):
7499        (JSC::dateProtoFuncSetYear):
7500        * runtime/ErrorConstructor.cpp:
7501        (JSC::constructError):
7502        * runtime/FunctionConstructor.cpp:
7503        (JSC::constructFunction):
7504        * runtime/FunctionPrototype.cpp:
7505        (JSC::functionProtoFuncApply):
7506        (JSC::functionProtoFuncCall):
7507        * runtime/JSArray.cpp:
7508        (JSC::JSArray::JSArray):
7509        (JSC::constructArray):
7510        * runtime/JSArray.h:
7511        * runtime/JSGlobalObjectFunctions.cpp:
7512        (JSC::encode):
7513        (JSC::decode):
7514        (JSC::globalFuncEval):
7515        (JSC::globalFuncParseInt):
7516        (JSC::globalFuncParseFloat):
7517        (JSC::globalFuncIsNaN):
7518        (JSC::globalFuncIsFinite):
7519        (JSC::globalFuncEscape):
7520        (JSC::globalFuncUnescape):
7521        (JSC::globalFuncJSCPrint):
7522        * runtime/MathObject.cpp:
7523        (JSC::mathProtoFuncAbs):
7524        (JSC::mathProtoFuncACos):
7525        (JSC::mathProtoFuncASin):
7526        (JSC::mathProtoFuncATan):
7527        (JSC::mathProtoFuncATan2):
7528        (JSC::mathProtoFuncCeil):
7529        (JSC::mathProtoFuncCos):
7530        (JSC::mathProtoFuncExp):
7531        (JSC::mathProtoFuncFloor):
7532        (JSC::mathProtoFuncLog):
7533        (JSC::mathProtoFuncMax):
7534        (JSC::mathProtoFuncMin):
7535        (JSC::mathProtoFuncPow):
7536        (JSC::mathProtoFuncRound):
7537        (JSC::mathProtoFuncSin):
7538        (JSC::mathProtoFuncSqrt):
7539        (JSC::mathProtoFuncTan):
7540        * runtime/NativeErrorConstructor.cpp:
7541        (JSC::NativeErrorConstructor::construct):
7542        * runtime/NumberConstructor.cpp:
7543        (JSC::constructWithNumberConstructor):
7544        (JSC::callNumberConstructor):
7545        * runtime/NumberPrototype.cpp:
7546        (JSC::numberProtoFuncToString):
7547        (JSC::numberProtoFuncToFixed):
7548        (JSC::numberProtoFuncToExponential):
7549        (JSC::numberProtoFuncToPrecision):
7550        * runtime/ObjectConstructor.cpp:
7551        (JSC::constructObject):
7552        * runtime/ObjectPrototype.cpp:
7553        (JSC::objectProtoFuncHasOwnProperty):
7554        (JSC::objectProtoFuncIsPrototypeOf):
7555        (JSC::objectProtoFuncDefineGetter):
7556        (JSC::objectProtoFuncDefineSetter):
7557        (JSC::objectProtoFuncLookupGetter):
7558        (JSC::objectProtoFuncLookupSetter):
7559        (JSC::objectProtoFuncPropertyIsEnumerable):
7560        * runtime/PropertySlot.h:
7561        (JSC::PropertySlot::getValue):
7562        * runtime/RegExpConstructor.cpp:
7563        (JSC::constructRegExp):
7564        * runtime/RegExpObject.cpp:
7565        (JSC::RegExpObject::match):
7566        * runtime/RegExpPrototype.cpp:
7567        (JSC::regExpProtoFuncCompile):
7568        * runtime/StringConstructor.cpp:
7569        (JSC::stringFromCharCodeSlowCase):
7570        (JSC::stringFromCharCode):
7571        (JSC::constructWithStringConstructor):
7572        (JSC::callStringConstructor):
7573        * runtime/StringPrototype.cpp:
7574        (JSC::stringProtoFuncReplace):
7575        (JSC::stringProtoFuncCharAt):
7576        (JSC::stringProtoFuncCharCodeAt):
7577        (JSC::stringProtoFuncConcat):
7578        (JSC::stringProtoFuncIndexOf):
7579        (JSC::stringProtoFuncLastIndexOf):
7580        (JSC::stringProtoFuncMatch):
7581        (JSC::stringProtoFuncSearch):
7582        (JSC::stringProtoFuncSlice):
7583        (JSC::stringProtoFuncSplit):
7584        (JSC::stringProtoFuncSubstr):
7585        (JSC::stringProtoFuncSubstring):
7586        (JSC::stringProtoFuncLocaleCompare):
7587        (JSC::stringProtoFuncFontcolor):
7588        (JSC::stringProtoFuncFontsize):
7589        (JSC::stringProtoFuncAnchor):
7590        (JSC::stringProtoFuncLink):
7591
75922009-04-28  David Kilzer  <ddkilzer@apple.com>
7593
7594        A little more hardening for UString
7595
7596        Reviewed by Maciej Stachowiak.
7597
7598        Revised fix for <rdar://problem/5861045> in r42644.
7599
7600        * runtime/UString.cpp:
7601        (JSC::newCapacityWithOverflowCheck): Added.
7602        (JSC::concatenate): Used newCapacityWithOverflowCheck().
7603        (JSC::UString::append): Ditto.
7604
76052009-04-28  Oliver Hunt  <oliver@apple.com>
7606
7607        Reviewed by Gavin Barraclough.
7608
7609        Bring back r42969, this time with correct codegen
7610
7611        Add logic to the codegen for right shift to avoid jumping to a helper function
7612        when shifting a small floating point value.
7613
7614        * jit/JITArithmetic.cpp:
7615        (isSSE2Present):
7616        (JSC::JIT::compileFastArith_op_rshift):
7617        (JSC::JIT::compileFastArithSlow_op_rshift):
7618
76192009-04-28  Kevin Ollivier <kevino@theolliviers.com>
7620
7621        wxMSW build fix. Switch JSCore build back to static. 
7622
7623        * API/JSBase.h:
7624        * config.h:
7625        * jscore.bkl:
7626
76272009-04-28  Oliver Hunt  <oliver@apple.com>
7628
7629        Reviewed by NOBODY (Build fix).
7630
7631        Roll out r42969, due to hangs in build bot.
7632
7633        * jit/JITArithmetic.cpp:
7634        (JSC::JIT::compileFastArith_op_rshift):
7635        (JSC::JIT::compileFastArithSlow_op_rshift):
7636        (JSC::isSSE2Present):
7637
76382009-04-28  Xan Lopez  <xlopez@igalia.com>
7639
7640        Unreviewed: fix distcheck build, add (even more) missing files to list.
7641
7642        * GNUmakefile.am:
7643
76442009-04-28  Oliver Hunt  <oliver@apple.com>
7645
7646        Reviewed by Geoff Garen.
7647
7648        Improve performance of string indexing
7649
7650        Add a cti_get_by_val_string function to specialise indexing into a string object.
7651        This gives us a slight performance win on a number of string tests.
7652
7653        * jit/JITStubs.cpp:
7654        (JSC::JITStubs::cti_op_get_by_val):
7655        (JSC::JITStubs::cti_op_get_by_val_string):
7656        * jit/JITStubs.h:
7657
76582009-04-28  Oliver Hunt  <oliver@apple.com>
7659
7660        Reviewed by Geoff Garen.
7661
7662        Improve performance of right shifts of large or otherwise floating point values.
7663
7664        Add logic to the codegen for right shift to avoid jumping to a helper function
7665        when shifting a small floating point value.
7666
7667        * jit/JITArithmetic.cpp:
7668        (isSSE2Present): Moved to the head of file.
7669        (JSC::JIT::compileFastArith_op_rshift):
7670        (JSC::JIT::compileFastArithSlow_op_rshift):
7671
76722009-04-28  Xan Lopez  <xlopez@igalia.com>
7673
7674        Unreviewed: fix distcheck build, add (more) missing files to list.
7675
7676        * GNUmakefile.am:
7677
76782009-04-28  Xan Lopez  <xlopez@igalia.com>
7679
7680        Unreviewed: fix distcheck build, add missing header to file list.
7681
7682        * GNUmakefile.am:
7683
76842009-04-28  Gavin Barraclough  <barraclough@apple.com>
7685
7686        Rubber stamped by Maciej "Henry Morgan" Stachowiak.
7687
7688        Enable YARR.
7689        (Again.)
7690
7691        * wtf/Platform.h:
7692
76932009-04-27  Gavin Barraclough  <barraclough@apple.com>
7694
7695        Reviewed by Maciej Stachowiak.
7696
7697        Tweak a loop condition to keep GCC happy,
7698        some GCCs seem to be having issues with this. :-/
7699
7700        * bytecompiler/BytecodeGenerator.cpp:
7701        (JSC::BytecodeGenerator::breakTarget):
7702        * wtf/Platform.h:
7703
77042009-04-27  Adam Roben  <aroben@apple.com>
7705
7706        Windows Debug build fix
7707
7708        Not sure why the buildbots weren't affected by this problem.
7709
7710        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Let VS
7711        re-order the file list, and added JavaScriptCore[_debug].def to the
7712        project. This was not necessary for the fix, but made making the fix
7713        easier.
7714
7715        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
7716        Removed a function that no longer exists.
7717
77182009-04-26  Gavin Barraclough  <barraclough@apple.com>
7719
7720        Reviewed by Weinig Sam.
7721
7722        Fix for https://bugs.webkit.org/show_bug.cgi?id=25416
7723        "Cached prototype accesses unsafely hoist property storage load above structure checks."
7724        
7725        Do not hoist the load of the pointer to the property storage array.
7726
7727        No performance impact.
7728
7729        * jit/JITPropertyAccess.cpp:
7730        (JSC::JIT::privateCompileGetByIdProto):
7731        (JSC::JIT::privateCompileGetByIdProtoList):
7732
77332009-04-26  Gavin Barraclough  <barraclough@apple.com>
7734
7735        Reviewed by Geoffrey "Gaffe or energy?" Garen.
7736
7737        Randomize address requested by ExecutableAllocatorFixedVMPool.
7738
7739        * jit/ExecutableAllocatorFixedVMPool.cpp:
7740        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
7741
77422009-04-26  Sam Weinig  <sam@webkit.org>
7743
7744        Reviewed by Eric Seidel.
7745
7746        Remove scons-based build system.
7747
7748        * JavaScriptCore.scons: Removed.
7749
77502009-04-25  Oliver Hunt  <oliver@apple.com>
7751
7752        Reviewed by NOBODY (Buildfix).
7753
7754        Make HAVE_MADV_FREE darwin only for now
7755
7756        * wtf/Platform.h:
7757
77582009-04-25  Jan Michael Alonzo  <jmalonzo@webkit.org>
7759
7760        Reviewed by Oliver Hunt.
7761
7762        Gtk build fix - check if we have MADV_FREE before using it.
7763
7764        * interpreter/RegisterFile.cpp:
7765        (JSC::RegisterFile::releaseExcessCapacity):
7766        * wtf/Platform.h:
7767
77682009-04-24  Kevin Ollivier  <kevino@theolliviers.com>
7769
7770        wx build fix. Switching JSCore from a static lib to a dynamic lib
7771        to match the Apple build and fix symbol exports.
7772
7773        * jscore.bkl:
7774
77752009-04-24  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
7776
7777        Rubber-stamped by Mark Rowe.
7778
7779        https://bugs.webkit.org/show_bug.cgi?id=25337
7780        Move ThreadingQt.cpp under the qt directory.
7781
7782        * JavaScriptCore.pri:
7783        * wtf/ThreadingQt.cpp: Removed.
7784        * wtf/qt/ThreadingQt.cpp: Copied from JavaScriptCore/wtf/ThreadingQt.cpp.
7785
77862009-04-24  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
7787
7788        Rubber-stamped by Mark Rowe.
7789
7790        https://bugs.webkit.org/show_bug.cgi?id=25338
7791        Move ThreadingGtk.cpp under the gtk directory.
7792
7793        * GNUmakefile.am:
7794        * wtf/ThreadingGtk.cpp: Removed.
7795        * wtf/gtk/ThreadingGtk.cpp: Copied from JavaScriptCore/wtf/ThreadingGtk.cpp.
7796
77972009-04-24  Gavin Barraclough  <barraclough@apple.com>
7798
7799        Reviewed by Sam "Wesley" Weinig.
7800
7801        Improve performance to YARR interpreter.
7802        (From about 3x slower than PCRE on regex-dna to about 30% slower).
7803
7804        * yarr/RegexCompiler.cpp:
7805        (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets):
7806        * yarr/RegexInterpreter.cpp:
7807        (JSC::Yarr::Interpreter::checkCharacter):
7808        (JSC::Yarr::Interpreter::checkCasedCharacter):
7809        (JSC::Yarr::Interpreter::backtrackPatternCharacter):
7810        (JSC::Yarr::Interpreter::backtrackPatternCasedCharacter):
7811        (JSC::Yarr::Interpreter::matchParentheticalAssertionBegin):
7812        (JSC::Yarr::Interpreter::matchParentheticalAssertionEnd):
7813        (JSC::Yarr::Interpreter::backtrackParentheticalAssertionBegin):
7814        (JSC::Yarr::Interpreter::backtrackParentheticalAssertionEnd):
7815        (JSC::Yarr::Interpreter::matchDisjunction):
7816        (JSC::Yarr::Interpreter::interpret):
7817        (JSC::Yarr::ByteCompiler::atomPatternCharacter):
7818        (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin):
7819        (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin):
7820        (JSC::Yarr::ByteCompiler::closeAlternative):
7821        (JSC::Yarr::ByteCompiler::closeBodyAlternative):
7822        (JSC::Yarr::ByteCompiler::atomParenthesesEnd):
7823        (JSC::Yarr::ByteCompiler::regexBegin):
7824        (JSC::Yarr::ByteCompiler::regexEnd):
7825        (JSC::Yarr::ByteCompiler::alterantiveBodyDisjunction):
7826        (JSC::Yarr::ByteCompiler::alterantiveDisjunction):
7827        (JSC::Yarr::ByteCompiler::emitDisjunction):
7828        * yarr/RegexInterpreter.h:
7829        (JSC::Yarr::ByteTerm::):
7830        (JSC::Yarr::ByteTerm::ByteTerm):
7831        (JSC::Yarr::ByteTerm::BodyAlternativeBegin):
7832        (JSC::Yarr::ByteTerm::BodyAlternativeDisjunction):
7833        (JSC::Yarr::ByteTerm::BodyAlternativeEnd):
7834        (JSC::Yarr::ByteTerm::AlternativeBegin):
7835        (JSC::Yarr::ByteTerm::AlternativeDisjunction):
7836        (JSC::Yarr::ByteTerm::AlternativeEnd):
7837        (JSC::Yarr::ByteTerm::SubpatternBegin):
7838        (JSC::Yarr::ByteTerm::SubpatternEnd):
7839        * yarr/RegexJIT.cpp:
7840        (JSC::Yarr::RegexGenerator::generateParentheticalAssertion):
7841        * yarr/RegexPattern.h:
7842
78432009-04-24  Rob Raguet-Schofield  <ragfield@gmail.com>
7844
7845        Rubber-stamped by Mark Rowe.
7846
7847        * wtf/CurrentTime.h: Fix a typo in a comment.
7848
78492009-04-24  Oliver Hunt  <oliver@apple.com>
7850
7851        Reviewed by NOBODY (Build fix).
7852
7853        Add reinterpret_cast
7854
7855        * interpreter/RegisterFile.cpp:
7856        (JSC::RegisterFile::releaseExcessCapacity):
7857
78582009-04-23  Oliver Hunt  <oliver@apple.com>
7859
7860        Reviewed by Geoff Garen.
7861
7862        <rdar://problem/6050421> JavaScript register file should remap to release physical pages accumulated during deep recursion
7863
7864        We now track the maximum extent of the RegisterFile, and when we reach the final
7865        return from JS (so the stack portion of the registerfile becomes empty) we see
7866        if that extent is greater than maxExcessCapacity.  If it is we use madvise or
7867        VirtualFree to release the physical pages that were backing the excess.
7868
7869        * interpreter/RegisterFile.cpp:
7870        (JSC::RegisterFile::releaseExcessCapacity):
7871        * interpreter/RegisterFile.h:
7872        (JSC::RegisterFile::RegisterFile):
7873        (JSC::RegisterFile::shrink):
7874        (JSC::RegisterFile::grow):
7875
78762009-04-23  Mark Rowe  <mrowe@apple.com>
7877
7878        With great sadness and a heavy heart I switch us back from YARR to WREC in
7879        order to restore greenness to the world once more.
7880
7881        * wtf/Platform.h:
7882
78832009-04-23  Mark Rowe  <mrowe@apple.com>
7884
7885        More Windows build fixage.
7886
7887        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
7888        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def:
7889
78902009-04-23  Mark Rowe  <mrowe@apple.com>
7891
7892        Attempt to fix the Windows build.
7893
7894        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:  Remove a symbol that no longer exists.
7895
78962009-04-23  Francisco Tolmasky  <francisco@280north.com>
7897
7898        BUG 24604: WebKit profiler reports incorrect total times
7899        <https://bugs.webkit.org/show_bug.cgi?id=24604>
7900
7901        Reviewed by Timothy Hatcher and Kevin McCullough.
7902
7903        * JavaScriptCore.exp:
7904        * JavaScriptCore.xcodeproj/project.pbxproj:
7905        * profiler/CallIdentifier.h:
7906        (JSC::CallIdentifier::Hash::hash):
7907        (JSC::CallIdentifier::Hash::equal):
7908        (JSC::CallIdentifier::hash):
7909        (WTF::):
7910        * profiler/HeavyProfile.cpp: Removed.
7911        * profiler/HeavyProfile.h: Removed.
7912        * profiler/Profile.cpp: No more need for TreeProfile/HeavyProfile
7913        (JSC::Profile::create):
7914        * profiler/Profile.h:
7915        * profiler/ProfileNode.cpp:
7916        * profiler/ProfileNode.h:
7917        * profiler/TreeProfile.cpp: Removed.
7918        * profiler/TreeProfile.h: Removed.
7919
79202009-04-23  Gavin Barraclough  <barraclough@apple.com>
7921
7922        Not Reviewed.
7923
7924        Speculative Windows build fix II.
7925
7926        * yarr/RegexInterpreter.cpp:
7927
79282009-04-23  Gavin Barraclough  <barraclough@apple.com>
7929
7930        Not Reviewed.
7931
7932        Speculative Windows build fix.
7933
7934        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
7935        * runtime/RegExp.cpp:
7936
79372009-04-23  Gavin Barraclough  <barraclough@apple.com>
7938
7939        Rubber stamped by salty sea dogs Sam & Geoff.
7940
7941        Enable YARR_JIT by default (where supported), replacing WREC.
7942
7943        * wtf/Platform.h:
7944
79452009-04-23  Gavin Barraclough  <barraclough@apple.com>
7946
7947        Reviewed by Geoff "Dread Pirate Roberts" Garen.
7948
7949        Various small fixes to YARR JIT, in preparation for enabling it by default.
7950
7951        * Correctly index into the callframe when storing restart addresses for
7952          nested alternatives.
7953        * Allow backtracking back into matched alternatives of parentheses.
7954        * Fix callframe offset calculation for parenthetical assertions.
7955        * When a set of parenthese are quantified with a fixed and variable portion,
7956          and the variable portion is quantified once, this should not reset the
7957          pattern match on failure to match (the last match from the firxed portion
7958          should be preserved).
7959        * Up the pattern size limit to match PCRE's new limit.
7960        * Unlclosed parentheses should be reported with the message "missing )".
7961
7962        * wtf/Platform.h:
7963        * yarr/RegexCompiler.cpp:
7964        (JSC::Yarr::RegexPatternConstructor::quantifyAtom):
7965        (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets):
7966        * yarr/RegexInterpreter.cpp:
7967        (JSC::Yarr::Interpreter::matchParentheses):
7968        (JSC::Yarr::Interpreter::backtrackParentheses):
7969        (JSC::Yarr::ByteCompiler::emitDisjunction):
7970        * yarr/RegexJIT.cpp:
7971        (JSC::Yarr::RegexGenerator::loadFromFrameAndJump):
7972        (JSC::Yarr::RegexGenerator::generateParenthesesDisjunction):
7973        (JSC::Yarr::RegexGenerator::generateParentheticalAssertion):
7974        (JSC::Yarr::RegexGenerator::generateTerm):
7975        (JSC::Yarr::executeRegex):
7976        * yarr/RegexParser.h:
7977        (JSC::Yarr::Parser::):
7978        (JSC::Yarr::Parser::parseTokens):
7979        (JSC::Yarr::Parser::parse):
7980        * yarr/RegexPattern.h:
7981        (JSC::Yarr::PatternTerm::):
7982        (JSC::Yarr::PatternTerm::PatternTerm):
7983
79842009-04-22  Mark Rowe  <mrowe@apple.com>
7985
7986        Rubber-stamped by Gavin Barraclough.
7987
7988        Add the m_ prefix on FixedVMPoolAllocator's member variables, and fix typos in a few comments.
7989
7990        * jit/ExecutableAllocatorFixedVMPool.cpp:
7991        (JSC::FixedVMPoolAllocator::addToFreeList):
7992        (JSC::FixedVMPoolAllocator::coalesceFreeSpace):
7993        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
7994        (JSC::FixedVMPoolAllocator::alloc):
7995        (JSC::FixedVMPoolAllocator::free):
7996        (JSC::FixedVMPoolAllocator::isWithinVMPool):
7997
79982009-04-22  Mark Rowe  <mrowe@apple.com>
7999
8000        Rubber-stamped by Gavin Barraclough.
8001
8002        Add some assertions to FixedVMPoolAllocator to guard against cases where we
8003        attempt to free memory that didn't originate from the pool, or we attempt to
8004        hand out a bogus address from alloc.
8005
8006        * jit/ExecutableAllocatorFixedVMPool.cpp:
8007        (JSC::FixedVMPoolAllocator::release):
8008        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
8009        (JSC::FixedVMPoolAllocator::alloc):
8010        (JSC::FixedVMPoolAllocator::free):
8011        (JSC::FixedVMPoolAllocator::isWithinVMPool):
8012
80132009-04-22  Gavin Barraclough  <barraclough@apple.com>
8014
8015        Rubber stamped by Sam "Blackbeard" Weinig.
8016
8017        Although pirates do spell the word 'generate' as 'genertate',
8018        webkit developers do not.  Fixertate.
8019
8020        * yarr/RegexJIT.cpp:
8021        (JSC::Yarr::RegexGenerator::generateAssertionBOL):
8022        (JSC::Yarr::RegexGenerator::generateAssertionEOL):
8023        (JSC::Yarr::RegexGenerator::generateAssertionWordBoundary):
8024        (JSC::Yarr::RegexGenerator::generatePatternCharacterSingle):
8025        (JSC::Yarr::RegexGenerator::generatePatternCharacterPair):
8026        (JSC::Yarr::RegexGenerator::generatePatternCharacterFixed):
8027        (JSC::Yarr::RegexGenerator::generatePatternCharacterGreedy):
8028        (JSC::Yarr::RegexGenerator::generatePatternCharacterNonGreedy):
8029        (JSC::Yarr::RegexGenerator::generateCharacterClassSingle):
8030        (JSC::Yarr::RegexGenerator::generateCharacterClassFixed):
8031        (JSC::Yarr::RegexGenerator::generateCharacterClassGreedy):
8032        (JSC::Yarr::RegexGenerator::generateCharacterClassNonGreedy):
8033        (JSC::Yarr::RegexGenerator::generateTerm):
8034
80352009-04-22  Gavin Barraclough  <barraclough@apple.com>
8036
8037        Reviewed by Sam "Blackbeard" Weinig.
8038
8039        Improvements to YARR JIT.  This patch expands support in three key areas:
8040            * Add (temporary) support for falling back to PCRE for expressions not supported.
8041            * Add support for x86_64 and Windows.
8042            * Add support for singly quantified parentheses (? and ??), alternatives within
8043              parentheses, and parenthetical assertions.
8044
8045        * runtime/RegExp.cpp:
8046        (JSC::RegExp::match):
8047        * yarr/RegexJIT.cpp:
8048        (JSC::Yarr::RegexGenerator::storeToFrame):
8049        (JSC::Yarr::RegexGenerator::storeToFrameWithPatch):
8050        (JSC::Yarr::RegexGenerator::loadFromFrameAndJump):
8051        (JSC::Yarr::RegexGenerator::AlternativeBacktrackRecord::AlternativeBacktrackRecord):
8052        (JSC::Yarr::RegexGenerator::TermGenerationState::resetAlternative):
8053        (JSC::Yarr::RegexGenerator::TermGenerationState::resetTerm):
8054        (JSC::Yarr::RegexGenerator::TermGenerationState::jumpToBacktrack):
8055        (JSC::Yarr::RegexGenerator::TermGenerationState::plantJumpToBacktrackIfExists):
8056        (JSC::Yarr::RegexGenerator::TermGenerationState::addBacktrackJump):
8057        (JSC::Yarr::RegexGenerator::TermGenerationState::linkAlternativeBacktracks):
8058        (JSC::Yarr::RegexGenerator::TermGenerationState::propagateBacktrackingFrom):
8059        (JSC::Yarr::RegexGenerator::genertateAssertionBOL):
8060        (JSC::Yarr::RegexGenerator::genertateAssertionEOL):
8061        (JSC::Yarr::RegexGenerator::matchAssertionWordchar):
8062        (JSC::Yarr::RegexGenerator::genertateAssertionWordBoundary):
8063        (JSC::Yarr::RegexGenerator::genertatePatternCharacterSingle):
8064        (JSC::Yarr::RegexGenerator::genertatePatternCharacterPair):
8065        (JSC::Yarr::RegexGenerator::genertatePatternCharacterFixed):
8066        (JSC::Yarr::RegexGenerator::genertatePatternCharacterGreedy):
8067        (JSC::Yarr::RegexGenerator::genertatePatternCharacterNonGreedy):
8068        (JSC::Yarr::RegexGenerator::genertateCharacterClassSingle):
8069        (JSC::Yarr::RegexGenerator::genertateCharacterClassFixed):
8070        (JSC::Yarr::RegexGenerator::genertateCharacterClassGreedy):
8071        (JSC::Yarr::RegexGenerator::genertateCharacterClassNonGreedy):
8072        (JSC::Yarr::RegexGenerator::generateParenthesesDisjunction):
8073        (JSC::Yarr::RegexGenerator::generateParenthesesSingle):
8074        (JSC::Yarr::RegexGenerator::generateParentheticalAssertion):
8075        (JSC::Yarr::RegexGenerator::generateTerm):
8076        (JSC::Yarr::RegexGenerator::generateDisjunction):
8077        (JSC::Yarr::RegexGenerator::generateEnter):
8078        (JSC::Yarr::RegexGenerator::generateReturn):
8079        (JSC::Yarr::RegexGenerator::RegexGenerator):
8080        (JSC::Yarr::RegexGenerator::generate):
8081        (JSC::Yarr::RegexGenerator::compile):
8082        (JSC::Yarr::RegexGenerator::generationFailed):
8083        (JSC::Yarr::jitCompileRegex):
8084        (JSC::Yarr::executeRegex):
8085        * yarr/RegexJIT.h:
8086        (JSC::Yarr::RegexCodeBlock::RegexCodeBlock):
8087        (JSC::Yarr::RegexCodeBlock::~RegexCodeBlock):
8088
80892009-04-22  Sam Weinig  <sam@webkit.org>
8090
8091        Rubber-stamped by Darin Adler.
8092
8093        Fix for <rdar://problem/6816957>
8094        Turn off Geolocation by default
8095
8096        * Configurations/FeatureDefines.xcconfig:
8097
80982009-04-22  Oliver Hunt  <oliver@apple.com>
8099
8100        Reviewed by NOBODY (Buildfix).
8101
8102        * interpreter/CachedCall.h:
8103
81042009-04-21  Oliver Hunt  <oliver@apple.com>
8105
8106        Reviewed by NOBODY (Build fix).
8107
8108        * runtime/StringPrototype.cpp:
8109
81102009-04-21  Oliver Hunt  <oliver@apple.com>
8111
8112        Reviewed by Maciej Stachowiak.
8113
8114        Improve String.replace performance slightly
8115
8116        Apply our vm reentry caching logic to String.replace with global
8117        regexes.
8118
8119        * runtime/StringPrototype.cpp:
8120        (JSC::stringProtoFuncReplace):
8121
81222009-04-21  Geoffrey Garen  <ggaren@apple.com>
8123
8124        Reviewed by Cameron Zwarich and Oliver Hunt.
8125        
8126        Re-Fixed <rdar://problem/6406045> REGRESSION: Stack overflow on PowerPC on
8127        fast/workers/use-machine-stack.html (22531)
8128        
8129        SunSpider reports no change.
8130        
8131        Use a larger recursion limit on the main thread (because we can, and
8132        there's some evidence that it may improve compatibility), and a smaller
8133        recursion limit on secondary threads (because they tend to have smaller
8134        stacks).
8135
8136        * interpreter/Interpreter.cpp:
8137        (JSC::Interpreter::execute):
8138        (JSC::Interpreter::prepareForRepeatCall):
8139        * interpreter/Interpreter.h:
8140        (JSC::): Ditto. I wrote the recursion test slightly funny, so that the
8141        common case remains a simple compare to constant.
8142
8143        * runtime/ArrayPrototype.cpp:
8144        (JSC::arrayProtoFuncToString):
8145        (JSC::arrayProtoFuncToLocaleString):
8146        (JSC::arrayProtoFuncJoin): Conservatively, set the array recursion limits
8147        to the lower, secondary thread limit. We can do something fancier if
8148        compatibility moves us, but this seems sufficient for now.
8149
81502009-04-21  Geoffrey Garen  <ggaren@apple.com>
8151
8152        Rubber-stamped by Adam Roben.
8153        
8154        Disabled one more Mozilla JS test because it fails intermittently on Windows.
8155        (See https://bugs.webkit.org/show_bug.cgi?id=25160.)
8156
8157        * tests/mozilla/expected.html:
8158
81592009-04-21  Adam Roben  <aroben@apple.com>
8160
8161        Rename JavaScriptCore_debug.dll to JavaScriptCore.dll in the Debug
8162        configuration
8163
8164        This matches the naming scheme for WebKit.dll, and will be necessary
8165        once Safari links against JavaScriptCore.dll. This change also causes
8166        run-safari not to fail (because the launcher printed by FindSafari was
8167        always looking for JavaScriptCore.dll, never
8168        JavaScriptCore_debug.dll).
8169
8170        Part of Bug 25305: can't run safari or drt on windows
8171        <https://bugs.webkit.org/show_bug.cgi?id=25305>
8172
8173        Reviewed by Steve Falkenburg and Sam Weinig.
8174
8175        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
8176        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
8177        * JavaScriptCore.vcproj/testapi/testapi.vcproj:
8178        Use $(WebKitDLLConfigSuffix) for naming JavaScriptCore.{dll,lib}.
8179
81802009-04-21  Adam Roben  <aroben@apple.com>
8181
8182        Fix JavaScriptCore build on VC++ Express
8183
8184        Reviewed by Steve Falkenburg and Sam Weinig.
8185
8186        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Link
8187        explicitly against gdi32.lib and oleaut32.lib.
8188
81892009-04-21  Geoffrey Garen  <ggaren@apple.com>
8190
8191        Reviewed by Mark Rowe.
8192        
8193        Tiger crash fix: Put VM tags in their own header file, and fixed up the
8194        #ifdefs so they're not used on Tiger.
8195
8196        * JavaScriptCore.xcodeproj/project.pbxproj:
8197        * interpreter/RegisterFile.h:
8198        (JSC::RegisterFile::RegisterFile):
8199        * jit/ExecutableAllocatorFixedVMPool.cpp:
8200        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
8201        * jit/ExecutableAllocatorPosix.cpp:
8202        (JSC::ExecutablePool::systemAlloc):
8203        * runtime/Collector.cpp:
8204        (JSC::allocateBlock):
8205        * wtf/VMTags.h: Added.
8206
82072009-04-20  Steve Falkenburg  <sfalken@apple.com>
8208
8209        More Windows build fixes.
8210
8211        * JavaScriptCore.vcproj/JavaScriptCore.make: Copy DLLs, PDBs.
8212        * JavaScriptCore.vcproj/JavaScriptCore.resources: Added.
8213        * JavaScriptCore.vcproj/JavaScriptCore.resources/Info.plist: Added.
8214        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc: Added.
8215        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add version stamping, resource copying.
8216
82172009-04-20  Steve Falkenburg  <sfalken@apple.com>
8218
8219        Separate JavaScriptCore.dll from WebKit.dll.
8220        Slight performance improvement or no change on benchmarks.
8221        
8222        Allows us to break a circular dependency between CFNetwork and WebKit on Windows,
8223        and simplifies standalone JavaScriptCore builds.
8224
8225        Reviewed by Oliver Hunt.
8226
8227        * API/JSBase.h: Export symbols with JS_EXPORT when using MSVC.
8228        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
8229        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Build JavaScriptCore as a DLL instead of a static library.
8230        * config.h: Specify __declspec(dllexport/dllimport) appropriately when exporting data.
8231        * runtime/InternalFunction.h: Specify JS_EXPORTDATA on exported data.
8232        * runtime/JSArray.h: Specify JS_EXPORTDATA on exported data.
8233        * runtime/JSFunction.h: Specify JS_EXPORTDATA on exported data.
8234        * runtime/StringObject.h: Specify JS_EXPORTDATA on exported data.
8235        * runtime/UString.h: Specify JS_EXPORTDATA on exported data.
8236
82372009-04-20  Sam Weinig  <sam@webkit.org>
8238
8239        Reviewed by Kevin McCullough.
8240
8241        Always tag mmaped memory on darwin and clean up #defines
8242        now that they are a little bigger.
8243
8244        * interpreter/RegisterFile.h:
8245        (JSC::RegisterFile::RegisterFile):
8246        * jit/ExecutableAllocatorFixedVMPool.cpp:
8247        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
8248        * jit/ExecutableAllocatorPosix.cpp:
8249        (JSC::ExecutablePool::systemAlloc):
8250        * runtime/Collector.cpp:
8251        (JSC::allocateBlock):
8252
82532009-04-20  Sam Weinig  <sam@webkit.org>
8254
8255        Rubber-stamped by Tim Hatcher.
8256
8257        Add licenses for xcconfig files.
8258
8259        * Configurations/Base.xcconfig:
8260        * Configurations/DebugRelease.xcconfig:
8261        * Configurations/FeatureDefines.xcconfig:
8262        * Configurations/JavaScriptCore.xcconfig:
8263        * Configurations/Version.xcconfig:
8264
82652009-04-20  Ariya Hidayat  <ariya.hidayat@nokia.com>
8266
8267        Build fix for Qt port (after r42646). Not reviewed.
8268
8269        * wtf/unicode/qt4/UnicodeQt4.h: Added U16_PREV.
8270
82712009-04-19  Sam Weinig  <sam@webkit.org>
8272
8273        Reviewed by Darin Adler.
8274
8275        Better fix for JSStringCreateWithCFString hardening.
8276
8277        * API/JSStringRefCF.cpp:
8278        (JSStringCreateWithCFString):
8279
82802009-04-19  Sam Weinig  <sam@webkit.org>
8281
8282        Reviewed by Dan Bernstein.
8283
8284        Fix for <rdar://problem/5860954>
8285        Harden JSStringCreateWithCFString against malformed CFStringRefs.
8286
8287        * API/JSStringRefCF.cpp:
8288        (JSStringCreateWithCFString):
8289
82902009-04-19  David Kilzer  <ddkilzer@apple.com>
8291
8292        Make FEATURE_DEFINES completely dynamic
8293
8294        Reviewed by Darin Adler.
8295
8296        Make FEATURE_DEFINES depend on individual ENABLE_FEATURE_NAME
8297        variables for each feature, making it possible to remove all
8298        knowledge of FEATURE_DEFINES from build-webkit.
8299
8300        * Configurations/FeatureDefines.xcconfig: Extract a variable
8301        from FEATURE_DEFINES for each feature setting.
8302
83032009-04-18  Sam Weinig  <sam@webkit.org>
8304
8305        Reviewed by Dan Bernstein.
8306
8307        Fix typo.  s/VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE/VM_MEMORY_JAVASCRIPT_CORE/
8308
8309        * runtime/Collector.cpp:
8310        (JSC::allocateBlock): Fix bozo typo.
8311
83122009-04-18  Sam Weinig  <sam@webkit.org>
8313
8314        Reviewed by Anders Carlsson.
8315
8316        Fix for <rdar://problem/6801555> Tag JavaScript memory on SnowLeopard
8317
8318        * interpreter/RegisterFile.h:
8319        (JSC::RegisterFile::RegisterFile):
8320        * jit/ExecutableAllocatorFixedVMPool.cpp:
8321        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
8322        * jit/ExecutableAllocatorPosix.cpp:
8323        (JSC::ExecutablePool::systemAlloc):
8324        * runtime/Collector.cpp:
8325        (JSC::allocateBlock):
8326
83272009-04-18  Drew Wilson  <amw@apple.com>
8328
8329        <rdar://problem/6781407> VisiblePosition.characterAfter should return UChar32
8330
8331        Reviewed by Dan Bernstein.
8332
8333        * wtf/unicode/icu/UnicodeIcu.h:
8334        (WTF::Unicode::hasLineBreakingPropertyComplexContextOrIdeographic): Added.
8335
83362009-04-18  Sam Weinig  <sam@webkit.org>
8337
8338        Reviewed by Mark Rowe.
8339
8340        Fix for <rdar://problem/5861045>
8341        A little bit of hardening for UString.
8342
8343        * runtime/UString.cpp:
8344        (JSC::concatenate):
8345        (JSC::UString::append):
8346
83472009-04-18  Sam Weinig  <sam@webkit.org>
8348
8349        Reviewed by Mark Rowe and Dan Bernstein.
8350
8351        Fix for <rdar://problem/5861188>
8352        A little bit of hardening for Vector.
8353
8354        * wtf/Vector.h:
8355        (WTF::Vector<T, inlineCapacity>::append):
8356        (WTF::Vector<T, inlineCapacity>::insert):
8357
83582009-04-17  Gavin Barraclough  <barraclough@apple.com>
8359
8360        Reviewed by Geoff Garen.
8361
8362        On x86_64, make all JIT-code allocations from a new heap, managed
8363        by FixedVMPoolAllocator.  This class allocates a single large (2Gb)
8364        pool of virtual memory from which all further allocations take place.
8365        Since all JIT code is allocated from this pool, we can continue to
8366        safely assume (as is already asserted) that it will always be possible
8367        to link any JIT-code to JIT-code jumps and calls.
8368
8369        * JavaScriptCore.xcodeproj/project.pbxproj:
8370            Add new file.
8371        * jit/ExecutableAllocatorFixedVMPool.cpp: Added.
8372        (JSC::FreeListEntry::FreeListEntry):
8373        (JSC::AVLTreeAbstractorForFreeList::get_less):
8374        (JSC::AVLTreeAbstractorForFreeList::set_less):
8375        (JSC::AVLTreeAbstractorForFreeList::get_greater):
8376        (JSC::AVLTreeAbstractorForFreeList::set_greater):
8377        (JSC::AVLTreeAbstractorForFreeList::get_balance_factor):
8378        (JSC::AVLTreeAbstractorForFreeList::set_balance_factor):
8379        (JSC::AVLTreeAbstractorForFreeList::null):
8380        (JSC::AVLTreeAbstractorForFreeList::compare_key_key):
8381        (JSC::AVLTreeAbstractorForFreeList::compare_key_node):
8382        (JSC::AVLTreeAbstractorForFreeList::compare_node_node):
8383        (JSC::sortFreeListEntriesByPointer):
8384        (JSC::sortCommonSizedAllocations):
8385        (JSC::FixedVMPoolAllocator::release):
8386        (JSC::FixedVMPoolAllocator::reuse):
8387        (JSC::FixedVMPoolAllocator::addToFreeList):
8388        (JSC::FixedVMPoolAllocator::coalesceFreeSpace):
8389        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
8390        (JSC::FixedVMPoolAllocator::alloc):
8391        (JSC::FixedVMPoolAllocator::free):
8392        (JSC::ExecutableAllocator::intializePageSize):
8393        (JSC::ExecutablePool::systemAlloc):
8394        (JSC::ExecutablePool::systemRelease):
8395            The new 2Gb heap class!
8396        * jit/ExecutableAllocatorPosix.cpp:
8397            Disable use of this implementation on x86_64.
8398        * wtf/AVLTree.h:
8399            Add missing variable initialization.
8400        (WTF::::remove):
8401
84022009-04-17  Oliver Hunt  <oliver@apple.com>
8403
8404        Reviewed by Darin Adler.
8405
8406        Fix bug where the VM reentry cache would not correctly unroll the cached callframe
8407
8408        Fix a check that was intended to mark a cached call as invalid when the callframe could
8409        not be constructed.  Instead it was just checking that there was a place to put the
8410        exception.  This eventually results in a non-recoverable RegisterFile starvation.
8411
8412        * interpreter/CachedCall.h:
8413        (JSC::CachedCall::CachedCall):
8414        (JSC::CachedCall::call): add assertion to ensure we don't use a bad callframe
8415
84162009-04-17  David Kilzer  <ddkilzer@apple.com>
8417
8418        Simplify FEATURE_DEFINES definition
8419
8420        Reviewed by Darin Adler.
8421
8422        This moves FEATURE_DEFINES and its related ENABLE_FEATURE_NAME
8423        variables to their own FeatureDefines.xcconfig file.  It also
8424        extracts a new ENABLE_GEOLOCATION variable so that
8425        FEATURE_DEFINES only needs to be defined once.
8426
8427        * Configurations/FeatureDefines.xcconfig: Added.
8428        * Configurations/JavaScriptCore.xcconfig: Removed definition of
8429        ENABLE_SVG_DOM_OBJC_BINDINGS and FEATURE_DEFINES.  Added include
8430        of FeatureDefines.xcconfig.
8431        * JavaScriptCore.xcodeproj/project.pbxproj: Added
8432        FeatureDefines.xcconfig file.
8433
84342009-04-08  Mihnea Ovidenie  <mihnea@adobe.com>
8435
8436        Reviewed by Oliver Hunt.
8437
8438        Bug 25027: JavaScript parseInt wrong on negative numbers
8439        <https://bugs.webkit.org/show_bug.cgi?id=25027>
8440
8441        When dealing with negative numbers, parseInt should use ceil instead of floor.
8442
8443        * runtime/JSGlobalObjectFunctions.cpp:
8444        (JSC::globalFuncParseInt):
8445
84462009-04-16  Stephanie Lewis  <slewis@apple.com>
8447
8448        Reviewed by Oliver Hunt.
8449
8450        <rdar://problem/6744652> 32-bit to 64-bit: Javascript hash tables double in size
8451
8452        Remove perfect hash optimization which removes 1 MB of overhead on 32-bit and almost 2 MB on 64-bit.  Removing the optimization was not a regression on SunSpider and the acid 3 test still passes.
8453
8454        * create_hash_table:
8455        * runtime/Lookup.cpp:
8456        (JSC::HashTable::createTable):
8457        (JSC::HashTable::deleteTable):
8458        * runtime/Lookup.h:
8459        (JSC::HashEntry::initialize):
8460        (JSC::HashEntry::next):
8461        (JSC::HashTable::entry):
8462        * runtime/Structure.cpp:
8463        (JSC::Structure::getEnumerableNamesFromClassInfoTable):
8464
84652009-04-16  Oliver Hunt  <oliver@apple.com>
8466
8467        Reviewed by Gavin Barraclough.
8468
8469        Fix subtle error in optimised VM reentry in Array.sort
8470
8471        Basically to ensure we don't accidentally invalidate the cached callframe
8472        we should be using the cached callframe rather than our own exec state.
8473        While the old behaviour was wrong i have been unable to actually create a
8474        test case where anything actually ends up going wrong.
8475
8476        * interpreter/CachedCall.h:
8477        (JSC::CachedCall::newCallFrame):
8478        * runtime/JSArray.cpp:
8479        (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key):
8480
84812009-04-16  Oliver Hunt  <oliver@apple.com>
8482
8483        Reviewed by Gavin Barraclough.
8484
8485        Optimise op_resolve_base
8486
8487        If we can statically find a property we are trying to resolve
8488        the base of, the base is guaranteed to be the global object.
8489
8490        * bytecompiler/BytecodeGenerator.cpp:
8491        (JSC::BytecodeGenerator::emitResolveBase):
8492
84932009-04-16  Oliver Hunt  <oliver@apple.com>
8494
8495        Reviewed by Gavin Barraclough.
8496
8497        Improve performance of read-write-modify operators
8498
8499        Implement cross scope optimisation for read-write-modify
8500        operators, to avoid unnecessary calls to property resolve
8501        helper functions.
8502
8503        * bytecompiler/BytecodeGenerator.cpp:
8504        (JSC::BytecodeGenerator::BytecodeGenerator):
8505        (JSC::BytecodeGenerator::emitLoadGlobalObject):
8506        (JSC::BytecodeGenerator::emitResolveWithBase):
8507        * bytecompiler/BytecodeGenerator.h:
8508
85092009-04-16  Oliver Hunt  <oliver@apple.com>
8510
8511        Reviewed by Gavin Barraclough.
8512
8513        Improve performance of remaining array enumeration functions
8514
8515        Make use of function entry cache for remaining Array enumeration functions.
8516
8517        * runtime/ArrayPrototype.cpp:
8518        (JSC::arrayProtoFuncMap):
8519        (JSC::arrayProtoFuncEvery):
8520        (JSC::arrayProtoFuncForEach):
8521        (JSC::arrayProtoFuncSome):
8522
85232009-04-15  Oliver Hunt  <oliver@apple.com>
8524
8525        Reviewed by Gavin Barraclough.
8526
8527        Improve performance of Array.sort
8528
8529        Cache the VM entry for Array.sort when using a JS comparison function.
8530
8531        * runtime/JSArray.cpp:
8532        (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key):
8533        (JSC::JSArray::sort):
8534
85352009-04-15  Oliver Hunt  <oliver@apple.com>
8536
8537        Reviewed by Gavin Barraclough.
8538
8539        Bug 25229: Need support for Array.prototype.reduceRight
8540        <https://bugs.webkit.org/show_bug.cgi?id=25229>
8541
8542        Implement Array.reduceRight
8543
8544        * runtime/ArrayPrototype.cpp:
8545        (JSC::arrayProtoFuncReduceRight):
8546
85472009-04-15  Oliver Hunt  <oliver@apple.com>
8548
8549        Reviewed by Gavin Barraclough.
8550
8551        Bug 25227: Array.filter triggers an assertion when the target array shrinks while being filtered
8552        <https://bugs.webkit.org/show_bug.cgi?id=25227>
8553
8554        We correct this simply by making the fast array path fall back on the slow path if
8555        we ever discover the fast access is unsafe.
8556
8557        * runtime/ArrayPrototype.cpp:
8558        (JSC::arrayProtoFuncFilter):
8559
85602009-04-13  Oliver Hunt  <oliver@apple.com>
8561
8562        Reviewed by Gavin Barraclough.
8563
8564        Bug 25159: Support Array.prototype.reduce
8565        <https://bugs.webkit.org/show_bug.cgi?id=25159>
8566
8567        Implement Array.prototype.reduce
8568
8569        * runtime/ArrayPrototype.cpp:
8570        (JSC::arrayProtoFuncReduce):
8571
85722009-04-15  Oliver Hunt  <oliver@apple.com>
8573
8574        Reviewed by NOBODY (Build fix).
8575
8576        Move CallFrameClosure from inside the Interpreter class to its own file.
8577
8578        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
8579        * JavaScriptCore.xcodeproj/project.pbxproj:
8580        * interpreter/CachedCall.h:
8581        * interpreter/CallFrameClosure.h: Copied from JavaScriptCore/yarr/RegexJIT.h.
8582        (JSC::CallFrameClosure::setArgument):
8583        (JSC::CallFrameClosure::resetCallFrame):
8584        * interpreter/Interpreter.cpp:
8585        (JSC::Interpreter::prepareForRepeatCall):
8586        * interpreter/Interpreter.h:
8587
85882009-04-14  Oliver Hunt  <oliver@apple.com>
8589
8590        Reviewed by Cameron Zwarich.
8591
8592        Bug 25202: Improve performance of repeated callbacks into the VM
8593
8594        Add the concept of a CachedCall to native code for use in Array
8595        prototype and similar functions where a single callback function
8596        is called repeatedly with the same number of arguments.
8597
8598        Used Array.prototype.filter as the test function and got a 50% win
8599        over a naive non-caching specialised version.  This makes the native
8600        implementation of Array.prototype.filter faster than the JS one once
8601        more.
8602
8603        * JavaScriptCore.vcproj/JavaScriptCore.sln:
8604        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
8605        * JavaScriptCore.xcodeproj/project.pbxproj:
8606        * interpreter/CachedCall.h: Added.
8607        (JSC::CachedCall::CachedCall):
8608        (JSC::CachedCall::call):
8609        (JSC::CachedCall::setThis):
8610        (JSC::CachedCall::setArgument):
8611        (JSC::CachedCall::~CachedCall):
8612           CachedCall is a wrapper that automates the calling and teardown
8613           for a CallFrameClosure
8614        * interpreter/CallFrame.h:
8615        * interpreter/Interpreter.cpp:
8616        (JSC::Interpreter::prepareForRepeatCall):
8617           Create the basic entry closure for a function
8618        (JSC::Interpreter::execute):
8619           A new ::execute method to enter the interpreter from a closure
8620        (JSC::Interpreter::endRepeatCall):
8621           Clear the entry closure
8622        * interpreter/Interpreter.h:
8623        (JSC::Interpreter::CallFrameClosure::setArgument):
8624        (JSC::Interpreter::CallFrameClosure::resetCallFrame):
8625           Helper functions to simplify setting up the closure's callframe
8626        * runtime/ArrayPrototype.cpp:
8627        (JSC::arrayProtoFuncFilter):
8628
86292009-04-14  Xan Lopez  <xlopez@igalia.com>
8630
8631        Fix the build.
8632
8633        Add the yarr headers (and only the headers) to the build, so that
8634        RegExp.cpp can compile. The headers are ifdefed out with yarr
8635        disabled, so we don't need anything else for now.
8636
8637        * GNUmakefile.am:
8638
86392009-04-14  Adam Roben  <aroben@apple.com>
8640
8641        Remove support for profile-guided optimization on Windows
8642
8643        Rubber-stamped by Steve Falkenburg.
8644
8645        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Removed
8646        the Release_PGO configuration. Also let VS re-order the source files
8647        list.
8648
86492009-04-14  Xan Lopez  <xlopez@igalia.com>
8650
8651        Unreviewed build fix.
8652
8653        * GNUmakefile.am:
8654
86552009-04-14  Jan Michael Alonzo  <jmalonzo@webkit.org>
8656
8657        Gtk build fix when building minidom. Not reviewed.
8658
8659        Use C-style comment instead of C++ style since autotools builds
8660        minidom using gcc and not g++.
8661
8662        * wtf/Platform.h:
8663
86642009-04-14  Gavin Barraclough  <barraclough@apple.com>
8665
8666        Reviewed by NOBODY - speculative build fix.
8667
8668        * runtime/RegExp.h:
8669
86702009-04-13  Gavin Barraclough  <barraclough@apple.com>
8671
8672        Reviewed by Cap'n Geoff Garen.
8673
8674        Yarr!
8675        (Yet another regex runtime).
8676
8677        Currently disabled by default since the interpreter, whilst awesomely
8678        functional, has not been optimized and is likely slower than PCRE, and
8679        the JIT, whilst faster than WREC, is presently incomplete and does not
8680        fallback to using an interpreter for the cases it cannot handle.
8681
8682        * JavaScriptCore.xcodeproj/project.pbxproj:
8683        * assembler/MacroAssemblerX86Common.h:
8684        (JSC::MacroAssemblerX86Common::move):
8685        (JSC::MacroAssemblerX86Common::swap):
8686        (JSC::MacroAssemblerX86Common::signExtend32ToPtr):
8687        (JSC::MacroAssemblerX86Common::zeroExtend32ToPtr):
8688        (JSC::MacroAssemblerX86Common::branch32):
8689        (JSC::MacroAssemblerX86Common::branch16):
8690        * assembler/X86Assembler.h:
8691        (JSC::X86Assembler::cmpw_im):
8692        (JSC::X86Assembler::testw_rr):
8693        (JSC::X86Assembler::X86InstructionFormatter::immediate16):
8694        * runtime/RegExp.cpp:
8695        (JSC::RegExp::RegExp):
8696        (JSC::RegExp::~RegExp):
8697        (JSC::RegExp::create):
8698        (JSC::RegExp::compile):
8699        (JSC::RegExp::match):
8700        * runtime/RegExp.h:
8701        * wtf/Platform.h:
8702        * yarr: Added.
8703        * yarr/RegexCompiler.cpp: Added.
8704        (JSC::Yarr::CharacterClassConstructor::CharacterClassConstructor):
8705        (JSC::Yarr::CharacterClassConstructor::reset):
8706        (JSC::Yarr::CharacterClassConstructor::append):
8707        (JSC::Yarr::CharacterClassConstructor::putChar):
8708        (JSC::Yarr::CharacterClassConstructor::isUnicodeUpper):
8709        (JSC::Yarr::CharacterClassConstructor::isUnicodeLower):
8710        (JSC::Yarr::CharacterClassConstructor::putRange):
8711        (JSC::Yarr::CharacterClassConstructor::charClass):
8712        (JSC::Yarr::CharacterClassConstructor::addSorted):
8713        (JSC::Yarr::CharacterClassConstructor::addSortedRange):
8714        (JSC::Yarr::newlineCreate):
8715        (JSC::Yarr::digitsCreate):
8716        (JSC::Yarr::spacesCreate):
8717        (JSC::Yarr::wordcharCreate):
8718        (JSC::Yarr::nondigitsCreate):
8719        (JSC::Yarr::nonspacesCreate):
8720        (JSC::Yarr::nonwordcharCreate):
8721        (JSC::Yarr::RegexPatternConstructor::RegexPatternConstructor):
8722        (JSC::Yarr::RegexPatternConstructor::~RegexPatternConstructor):
8723        (JSC::Yarr::RegexPatternConstructor::reset):
8724        (JSC::Yarr::RegexPatternConstructor::assertionBOL):
8725        (JSC::Yarr::RegexPatternConstructor::assertionEOL):
8726        (JSC::Yarr::RegexPatternConstructor::assertionWordBoundary):
8727        (JSC::Yarr::RegexPatternConstructor::atomPatternCharacter):
8728        (JSC::Yarr::RegexPatternConstructor::atomBuiltInCharacterClass):
8729        (JSC::Yarr::RegexPatternConstructor::atomCharacterClassBegin):
8730        (JSC::Yarr::RegexPatternConstructor::atomCharacterClassAtom):
8731        (JSC::Yarr::RegexPatternConstructor::atomCharacterClassRange):
8732        (JSC::Yarr::RegexPatternConstructor::atomCharacterClassBuiltIn):
8733        (JSC::Yarr::RegexPatternConstructor::atomCharacterClassEnd):
8734        (JSC::Yarr::RegexPatternConstructor::atomParenthesesSubpatternBegin):
8735        (JSC::Yarr::RegexPatternConstructor::atomParentheticalAssertionBegin):
8736        (JSC::Yarr::RegexPatternConstructor::atomParenthesesEnd):
8737        (JSC::Yarr::RegexPatternConstructor::atomBackReference):
8738        (JSC::Yarr::RegexPatternConstructor::copyDisjunction):
8739        (JSC::Yarr::RegexPatternConstructor::copyTerm):
8740        (JSC::Yarr::RegexPatternConstructor::quantifyAtom):
8741        (JSC::Yarr::RegexPatternConstructor::disjunction):
8742        (JSC::Yarr::RegexPatternConstructor::regexBegin):
8743        (JSC::Yarr::RegexPatternConstructor::regexEnd):
8744        (JSC::Yarr::RegexPatternConstructor::regexError):
8745        (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets):
8746        (JSC::Yarr::RegexPatternConstructor::setupDisjunctionOffsets):
8747        (JSC::Yarr::RegexPatternConstructor::setupOffsets):
8748        (JSC::Yarr::compileRegex):
8749        * yarr/RegexCompiler.h: Added.
8750        * yarr/RegexInterpreter.cpp: Added.
8751        (JSC::Yarr::Interpreter::appendParenthesesDisjunctionContext):
8752        (JSC::Yarr::Interpreter::popParenthesesDisjunctionContext):
8753        (JSC::Yarr::Interpreter::DisjunctionContext::DisjunctionContext):
8754        (JSC::Yarr::Interpreter::DisjunctionContext::operator new):
8755        (JSC::Yarr::Interpreter::allocDisjunctionContext):
8756        (JSC::Yarr::Interpreter::freeDisjunctionContext):
8757        (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::ParenthesesDisjunctionContext):
8758        (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::operator new):
8759        (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::restoreOutput):
8760        (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::getDisjunctionContext):
8761        (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext):
8762        (JSC::Yarr::Interpreter::freeParenthesesDisjunctionContext):
8763        (JSC::Yarr::Interpreter::InputStream::InputStream):
8764        (JSC::Yarr::Interpreter::InputStream::next):
8765        (JSC::Yarr::Interpreter::InputStream::rewind):
8766        (JSC::Yarr::Interpreter::InputStream::read):
8767        (JSC::Yarr::Interpreter::InputStream::readChecked):
8768        (JSC::Yarr::Interpreter::InputStream::reread):
8769        (JSC::Yarr::Interpreter::InputStream::prev):
8770        (JSC::Yarr::Interpreter::InputStream::getPos):
8771        (JSC::Yarr::Interpreter::InputStream::setPos):
8772        (JSC::Yarr::Interpreter::InputStream::atStart):
8773        (JSC::Yarr::Interpreter::InputStream::atEnd):
8774        (JSC::Yarr::Interpreter::InputStream::checkInput):
8775        (JSC::Yarr::Interpreter::InputStream::uncheckInput):
8776        (JSC::Yarr::Interpreter::testCharacterClass):
8777        (JSC::Yarr::Interpreter::tryConsumeCharacter):
8778        (JSC::Yarr::Interpreter::checkCharacter):
8779        (JSC::Yarr::Interpreter::tryConsumeCharacterClass):
8780        (JSC::Yarr::Interpreter::checkCharacterClass):
8781        (JSC::Yarr::Interpreter::tryConsumeBackReference):
8782        (JSC::Yarr::Interpreter::matchAssertionBOL):
8783        (JSC::Yarr::Interpreter::matchAssertionEOL):
8784        (JSC::Yarr::Interpreter::matchAssertionWordBoundary):
8785        (JSC::Yarr::Interpreter::matchPatternCharacter):
8786        (JSC::Yarr::Interpreter::backtrackPatternCharacter):
8787        (JSC::Yarr::Interpreter::matchCharacterClass):
8788        (JSC::Yarr::Interpreter::backtrackCharacterClass):
8789        (JSC::Yarr::Interpreter::matchBackReference):
8790        (JSC::Yarr::Interpreter::backtrackBackReference):
8791        (JSC::Yarr::Interpreter::recordParenthesesMatch):
8792        (JSC::Yarr::Interpreter::resetMatches):
8793        (JSC::Yarr::Interpreter::resetAssertionMatches):
8794        (JSC::Yarr::Interpreter::parenthesesDoBacktrack):
8795        (JSC::Yarr::Interpreter::matchParenthesesOnceBegin):
8796        (JSC::Yarr::Interpreter::matchParenthesesOnceEnd):
8797        (JSC::Yarr::Interpreter::backtrackParenthesesOnceBegin):
8798        (JSC::Yarr::Interpreter::backtrackParenthesesOnceEnd):
8799        (JSC::Yarr::Interpreter::matchParentheticalAssertionOnceBegin):
8800        (JSC::Yarr::Interpreter::matchParentheticalAssertionOnceEnd):
8801        (JSC::Yarr::Interpreter::backtrackParentheticalAssertionOnceBegin):
8802        (JSC::Yarr::Interpreter::backtrackParentheticalAssertionOnceEnd):
8803        (JSC::Yarr::Interpreter::matchParentheses):
8804        (JSC::Yarr::Interpreter::backtrackParentheses):
8805        (JSC::Yarr::Interpreter::matchTerm):
8806        (JSC::Yarr::Interpreter::backtrackTerm):
8807        (JSC::Yarr::Interpreter::matchAlternative):
8808        (JSC::Yarr::Interpreter::matchDisjunction):
8809        (JSC::Yarr::Interpreter::matchNonZeroDisjunction):
8810        (JSC::Yarr::Interpreter::interpret):
8811        (JSC::Yarr::Interpreter::Interpreter):
8812        (JSC::Yarr::ByteCompiler::ParenthesesStackEntry::ParenthesesStackEntry):
8813        (JSC::Yarr::ByteCompiler::ByteCompiler):
8814        (JSC::Yarr::ByteCompiler::compile):
8815        (JSC::Yarr::ByteCompiler::checkInput):
8816        (JSC::Yarr::ByteCompiler::assertionBOL):
8817        (JSC::Yarr::ByteCompiler::assertionEOL):
8818        (JSC::Yarr::ByteCompiler::assertionWordBoundary):
8819        (JSC::Yarr::ByteCompiler::atomPatternCharacter):
8820        (JSC::Yarr::ByteCompiler::atomCharacterClass):
8821        (JSC::Yarr::ByteCompiler::atomBackReference):
8822        (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin):
8823        (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin):
8824        (JSC::Yarr::ByteCompiler::popParenthesesStack):
8825        (JSC::Yarr::ByteCompiler::dumpDisjunction):
8826        (JSC::Yarr::ByteCompiler::closeAlternative):
8827        (JSC::Yarr::ByteCompiler::atomParenthesesEnd):
8828        (JSC::Yarr::ByteCompiler::regexBegin):
8829        (JSC::Yarr::ByteCompiler::regexEnd):
8830        (JSC::Yarr::ByteCompiler::alterantiveDisjunction):
8831        (JSC::Yarr::ByteCompiler::emitDisjunction):
8832        (JSC::Yarr::byteCompileRegex):
8833        (JSC::Yarr::interpretRegex):
8834        * yarr/RegexInterpreter.h: Added.
8835        (JSC::Yarr::ByteTerm::):
8836        (JSC::Yarr::ByteTerm::ByteTerm):
8837        (JSC::Yarr::ByteTerm::BOL):
8838        (JSC::Yarr::ByteTerm::CheckInput):
8839        (JSC::Yarr::ByteTerm::EOL):
8840        (JSC::Yarr::ByteTerm::WordBoundary):
8841        (JSC::Yarr::ByteTerm::BackReference):
8842        (JSC::Yarr::ByteTerm::AlternativeBegin):
8843        (JSC::Yarr::ByteTerm::AlternativeDisjunction):
8844        (JSC::Yarr::ByteTerm::AlternativeEnd):
8845        (JSC::Yarr::ByteTerm::PatternEnd):
8846        (JSC::Yarr::ByteTerm::invert):
8847        (JSC::Yarr::ByteTerm::capture):
8848        (JSC::Yarr::ByteDisjunction::ByteDisjunction):
8849        (JSC::Yarr::BytecodePattern::BytecodePattern):
8850        (JSC::Yarr::BytecodePattern::~BytecodePattern):
8851        * yarr/RegexJIT.cpp: Added.
8852        (JSC::Yarr::RegexGenerator::optimizeAlternative):
8853        (JSC::Yarr::RegexGenerator::matchCharacterClassRange):
8854        (JSC::Yarr::RegexGenerator::matchCharacterClass):
8855        (JSC::Yarr::RegexGenerator::jumpIfNoAvailableInput):
8856        (JSC::Yarr::RegexGenerator::jumpIfAvailableInput):
8857        (JSC::Yarr::RegexGenerator::checkInput):
8858        (JSC::Yarr::RegexGenerator::atEndOfInput):
8859        (JSC::Yarr::RegexGenerator::notAtEndOfInput):
8860        (JSC::Yarr::RegexGenerator::jumpIfCharEquals):
8861        (JSC::Yarr::RegexGenerator::jumpIfCharNotEquals):
8862        (JSC::Yarr::RegexGenerator::readCharacter):
8863        (JSC::Yarr::RegexGenerator::storeToFrame):
8864        (JSC::Yarr::RegexGenerator::loadFromFrame):
8865        (JSC::Yarr::RegexGenerator::TermGenerationState::TermGenerationState):
8866        (JSC::Yarr::RegexGenerator::TermGenerationState::resetAlternative):
8867        (JSC::Yarr::RegexGenerator::TermGenerationState::alternativeValid):
8868        (JSC::Yarr::RegexGenerator::TermGenerationState::nextAlternative):
8869        (JSC::Yarr::RegexGenerator::TermGenerationState::alternative):
8870        (JSC::Yarr::RegexGenerator::TermGenerationState::resetTerm):
8871        (JSC::Yarr::RegexGenerator::TermGenerationState::termValid):
8872        (JSC::Yarr::RegexGenerator::TermGenerationState::nextTerm):
8873        (JSC::Yarr::RegexGenerator::TermGenerationState::term):
8874        (JSC::Yarr::RegexGenerator::TermGenerationState::lookaheadTerm):
8875        (JSC::Yarr::RegexGenerator::TermGenerationState::isSinglePatternCharacterLookaheadTerm):
8876        (JSC::Yarr::RegexGenerator::TermGenerationState::inputOffset):
8877        (JSC::Yarr::RegexGenerator::TermGenerationState::jumpToBacktrack):
8878        (JSC::Yarr::RegexGenerator::TermGenerationState::setBacktrackGenerated):
8879        (JSC::Yarr::RegexGenerator::jumpToBacktrackCheckEmitPending):
8880        (JSC::Yarr::RegexGenerator::genertateAssertionBOL):
8881        (JSC::Yarr::RegexGenerator::genertateAssertionEOL):
8882        (JSC::Yarr::RegexGenerator::matchAssertionWordchar):
8883        (JSC::Yarr::RegexGenerator::genertateAssertionWordBoundary):
8884        (JSC::Yarr::RegexGenerator::genertatePatternCharacterSingle):
8885        (JSC::Yarr::RegexGenerator::genertatePatternCharacterPair):
8886        (JSC::Yarr::RegexGenerator::genertatePatternCharacterFixed):
8887        (JSC::Yarr::RegexGenerator::genertatePatternCharacterGreedy):
8888        (JSC::Yarr::RegexGenerator::genertatePatternCharacterNonGreedy):
8889        (JSC::Yarr::RegexGenerator::genertateCharacterClassSingle):
8890        (JSC::Yarr::RegexGenerator::genertateCharacterClassFixed):
8891        (JSC::Yarr::RegexGenerator::genertateCharacterClassGreedy):
8892        (JSC::Yarr::RegexGenerator::genertateCharacterClassNonGreedy):
8893        (JSC::Yarr::RegexGenerator::generateParenthesesSingleDisjunctionOneAlternative):
8894        (JSC::Yarr::RegexGenerator::generateParenthesesSingle):
8895        (JSC::Yarr::RegexGenerator::generateTerm):
8896        (JSC::Yarr::RegexGenerator::generateDisjunction):
8897        (JSC::Yarr::RegexGenerator::RegexGenerator):
8898        (JSC::Yarr::RegexGenerator::generate):
8899        (JSC::Yarr::jitCompileRegex):
8900        (JSC::Yarr::executeRegex):
8901        * yarr/RegexJIT.h: Added.
8902        (JSC::Yarr::RegexCodeBlock::RegexCodeBlock):
8903        * yarr/RegexParser.h: Added.
8904        (JSC::Yarr::):
8905        (JSC::Yarr::Parser::):
8906        (JSC::Yarr::Parser::CharacterClassParserDelegate::CharacterClassParserDelegate):
8907        (JSC::Yarr::Parser::CharacterClassParserDelegate::begin):
8908        (JSC::Yarr::Parser::CharacterClassParserDelegate::atomPatternCharacterUnescaped):
8909        (JSC::Yarr::Parser::CharacterClassParserDelegate::atomPatternCharacter):
8910        (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBuiltInCharacterClass):
8911        (JSC::Yarr::Parser::CharacterClassParserDelegate::end):
8912        (JSC::Yarr::Parser::CharacterClassParserDelegate::assertionWordBoundary):
8913        (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBackReference):
8914        (JSC::Yarr::Parser::CharacterClassParserDelegate::flush):
8915        (JSC::Yarr::Parser::CharacterClassParserDelegate::):
8916        (JSC::Yarr::Parser::Parser):
8917        (JSC::Yarr::Parser::parseEscape):
8918        (JSC::Yarr::Parser::parseAtomEscape):
8919        (JSC::Yarr::Parser::parseCharacterClassEscape):
8920        (JSC::Yarr::Parser::parseCharacterClass):
8921        (JSC::Yarr::Parser::parseParenthesesBegin):
8922        (JSC::Yarr::Parser::parseParenthesesEnd):
8923        (JSC::Yarr::Parser::parseQuantifier):
8924        (JSC::Yarr::Parser::parseTokens):
8925        (JSC::Yarr::Parser::parse):
8926        (JSC::Yarr::Parser::saveState):
8927        (JSC::Yarr::Parser::restoreState):
8928        (JSC::Yarr::Parser::atEndOfPattern):
8929        (JSC::Yarr::Parser::peek):
8930        (JSC::Yarr::Parser::peekIsDigit):
8931        (JSC::Yarr::Parser::peekDigit):
8932        (JSC::Yarr::Parser::consume):
8933        (JSC::Yarr::Parser::consumeDigit):
8934        (JSC::Yarr::Parser::consumeNumber):
8935        (JSC::Yarr::Parser::consumeOctal):
8936        (JSC::Yarr::Parser::tryConsume):
8937        (JSC::Yarr::Parser::tryConsumeHex):
8938        (JSC::Yarr::parse):
8939        * yarr/RegexPattern.h: Added.
8940        (JSC::Yarr::CharacterRange::CharacterRange):
8941        (JSC::Yarr::):
8942        (JSC::Yarr::PatternTerm::):
8943        (JSC::Yarr::PatternTerm::PatternTerm):
8944        (JSC::Yarr::PatternTerm::BOL):
8945        (JSC::Yarr::PatternTerm::EOL):
8946        (JSC::Yarr::PatternTerm::WordBoundary):
8947        (JSC::Yarr::PatternTerm::invert):
8948        (JSC::Yarr::PatternTerm::capture):
8949        (JSC::Yarr::PatternTerm::quantify):
8950        (JSC::Yarr::PatternAlternative::PatternAlternative):
8951        (JSC::Yarr::PatternAlternative::lastTerm):
8952        (JSC::Yarr::PatternAlternative::removeLastTerm):
8953        (JSC::Yarr::PatternDisjunction::PatternDisjunction):
8954        (JSC::Yarr::PatternDisjunction::~PatternDisjunction):
8955        (JSC::Yarr::PatternDisjunction::addNewAlternative):
8956        (JSC::Yarr::RegexPattern::RegexPattern):
8957        (JSC::Yarr::RegexPattern::~RegexPattern):
8958        (JSC::Yarr::RegexPattern::reset):
8959        (JSC::Yarr::RegexPattern::containsIllegalBackReference):
8960        (JSC::Yarr::RegexPattern::newlineCharacterClass):
8961        (JSC::Yarr::RegexPattern::digitsCharacterClass):
8962        (JSC::Yarr::RegexPattern::spacesCharacterClass):
8963        (JSC::Yarr::RegexPattern::wordcharCharacterClass):
8964        (JSC::Yarr::RegexPattern::nondigitsCharacterClass):
8965        (JSC::Yarr::RegexPattern::nonspacesCharacterClass):
8966        (JSC::Yarr::RegexPattern::nonwordcharCharacterClass):
8967
89682009-04-13  Oliver Hunt  <oliver@apple.com>
8969
8970        Reviewed by NOBODY (Missed code from last patch).
8971
8972        * runtime/InternalFunction.cpp:
8973        (JSC::InternalFunction::displayName):
8974        (JSC::InternalFunction::calculatedDisplayName):
8975        * runtime/InternalFunction.h:
8976
89772009-04-13  Francisco Tolmasky  <francisco@280north.com>
8978
8979        Reviewed by Oliver Hunt.
8980        
8981        BUG 25171: It should be possible to manually set the name of an anonymous function
8982        <https://bugs.webkit.org/show_bug.cgi?id=25171>
8983
8984        This change adds the displayName property to functions, which when set overrides the 
8985        normal name when appearing in the console.
8986
8987        * profiler/Profiler.cpp:
8988        (JSC::createCallIdentifierFromFunctionImp): Changed call to InternalFunction::name to InternalFunction::calculatedDisplayName
8989        * runtime/CommonIdentifiers.h: Added displayName common identifier.
8990        * runtime/InternalFunction.cpp:
8991        (JSC::InternalFunction::displayName): Access to user settable displayName property
8992        (JSC::InternalFunction::calculatedDisplayName): Returns displayName if it exists, if not then the natural name
8993
89942009-04-13  Geoffrey Garen  <ggaren@apple.com>
8995
8996        Reviewed by Sam Weinig.
8997
8998        Disabled another JavaScriptCore test because it fails on Windows but
8999        not Mac, so it makes the bots red.
9000
9001        * tests/mozilla/expected.html:
9002
90032009-04-13  Geoffrey Garen  <ggaren@apple.com>
9004
9005        Reviewed by Sam Weinig.
9006        
9007        Disabled two JavaScriptCore tests because they fail on Window or Mac but
9008        not both, so they make the bots red.
9009
9010        * tests/mozilla/expected.html: Updated expected results.
9011
90122009-04-09  Ben Murdoch  <benm@google.com>
9013
9014        Reviewed by Alexey Proskuryakov.
9015
9016        https://bugs.webkit.org/show_bug.cgi?id=25091
9017        The Android platform requires threads to be registered with the VM.
9018        This patch implements this behaviour inside ThreadingPthreads.cpp.
9019
9020        * wtf/ThreadingPthreads.cpp: Add a level above threadEntryPoint that takes care of (un)registering threads with the VM.
9021        (WTF::runThreadWithRegistration): register the thread and run entryPoint. Unregister the thread afterwards.
9022        (WTF::createThreadInternal): call runThreadWithRegistration instead of entryPoint directly.
9023
90242009-04-09  David Kilzer  <ddkilzer@apple.com>
9025
9026        Reinstating <rdar://problem/6718589> Option to turn off SVG DOM Objective-C bindings
9027
9028        Rolled r42345 back in.  The build failure was caused by an
9029        internal script which had not been updated the same way that
9030        build-webkit was updated.
9031
9032        * Configurations/JavaScriptCore.xcconfig:
9033
90342009-04-09  Alexey Proskuryakov  <ap@webkit.org>
9035
9036        Reverting <rdar://problem/6718589> Option to turn off SVG DOM Objective-C bindings.
9037        It broke Mac build, and I don't know how to fix it.
9038
9039        * Configurations/JavaScriptCore.xcconfig:
9040
90412009-04-09  Xan Lopez  <xlopez@igalia.com>
9042
9043        Unreviewed build fix.
9044
9045        Checking for __GLIBCXX__ being bigger than some date is not enough
9046        to get std::tr1, C++0x has to be in use too. Add another check for
9047        __GXX_EXPERIMENTAL_CXX0X__.
9048
9049        * wtf/TypeTraits.h:
9050
90512009-04-08  Oliver Hunt  <oliver@apple.com>
9052
9053        Reviewed by Adam Roben.
9054
9055        Fix assertion failure in function.apply
9056
9057        The result of excess arguments to function.apply is irrelevant
9058        so we don't need to provide a result register.  We were providing
9059        temporary result register but not ref'ing it resulting in an
9060        assertion failure.
9061
9062        * parser/Nodes.cpp:
9063        (JSC::ApplyFunctionCallDotNode::emitBytecode):
9064
90652009-04-08  David Kilzer  <ddkilzer@apple.com>
9066
9067        <rdar://problem/6718589> Option to turn off SVG DOM Objective-C bindings
9068
9069        Reviewed by Darin Adler and Maciej Stachowiak.
9070
9071        Introduce the ENABLE_SVG_DOM_OBJC_BINDINGS feature define so
9072        that SVG DOM Objective-C bindings may be optionally disabled.
9073
9074        * Configurations/JavaScriptCore.xcconfig: Added
9075        ENABLE_SVG_DOM_OBJC_BINDINGS variable and use it in
9076        FEATURE_DEFINES.
9077
90782009-04-08  Paul Pedriana <ppedriana@ea.com>
9079
9080        Reviewed by Darin Adler.
9081
9082        https://bugs.webkit.org/show_bug.cgi?id=20422
9083        Allow custom memory allocation control.
9084        
9085        * wtf/FastAllocBase.h:
9086        New added file. Implements allocation base class.
9087        * wtf/TypeTraits.h:
9088        Augments existing type traits support as needed by FastAllocBase.
9089        * wtf/FastMalloc.h:
9090        Changed to support FastMalloc match validation.
9091        * wtf/FastMalloc.cpp:
9092        Changed to support FastMalloc match validation.
9093        * wtf/Platform.h:
9094        Added ENABLE_FAST_MALLOC_MATCH_VALIDATION; defaults to 0.
9095        * GNUmakefile.am:
9096        Updated to include added FastAllocBase.h.
9097        * JavaScriptCore.xcodeproj/project.pbxproj:
9098        Updated to include added FastAllocBase.h.
9099        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
9100        Updated to include added FastAllocBase.h.
9101
91022009-04-07  Oliver Hunt  <oliver@apple.com>
9103
9104        Reviewed by Geoff Garen.
9105
9106        Improve function.apply performance
9107
9108        Jump through a few hoops to improve performance of function.apply in the general case.
9109
9110        In the case of zero or one arguments, or if there are only two arguments and the
9111        second is an array literal we treat function.apply as function.call.
9112
9113        Otherwise we use the new opcodes op_load_varargs and op_call_varargs to do the .apply call
9114        without re-entering the virtual machine.
9115
9116        * bytecode/CodeBlock.cpp:
9117        (JSC::CodeBlock::dump):
9118        * bytecode/Opcode.h:
9119        * bytecompiler/BytecodeGenerator.cpp:
9120        (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
9121        (JSC::BytecodeGenerator::emitLoadVarargs):
9122        (JSC::BytecodeGenerator::emitCallVarargs):
9123        * bytecompiler/BytecodeGenerator.h:
9124        * interpreter/Interpreter.cpp:
9125        (JSC::Interpreter::privateExecute):
9126        * jit/JIT.cpp:
9127        (JSC::JIT::privateCompileMainPass):
9128        (JSC::JIT::privateCompileSlowCases):
9129        * jit/JIT.h:
9130        * jit/JITCall.cpp:
9131        (JSC::JIT::compileOpCallSetupArgs):
9132        (JSC::JIT::compileOpCallVarargsSetupArgs):
9133        (JSC::JIT::compileOpCallVarargs):
9134        (JSC::JIT::compileOpCallVarargsSlowCase):
9135        * jit/JITStubs.cpp:
9136        (JSC::JITStubs::cti_op_load_varargs):
9137        * jit/JITStubs.h:
9138        * parser/Grammar.y:
9139        * parser/Nodes.cpp:
9140        (JSC::ArrayNode::isSimpleArray):
9141        (JSC::ArrayNode::toArgumentList):
9142        (JSC::CallFunctionCallDotNode::emitBytecode):
9143        (JSC::ApplyFunctionCallDotNode::emitBytecode):
9144        * parser/Nodes.h:
9145        (JSC::ExpressionNode::):
9146        (JSC::ApplyFunctionCallDotNode::):
9147        * runtime/Arguments.cpp:
9148        (JSC::Arguments::copyToRegisters):
9149        (JSC::Arguments::fillArgList):
9150        * runtime/Arguments.h:
9151        (JSC::Arguments::numProvidedArguments):
9152        * runtime/FunctionPrototype.cpp:
9153        (JSC::FunctionPrototype::addFunctionProperties):
9154        * runtime/FunctionPrototype.h:
9155        * runtime/JSArray.cpp:
9156        (JSC::JSArray::copyToRegisters):
9157        * runtime/JSArray.h:
9158        * runtime/JSGlobalObject.cpp:
9159        (JSC::JSGlobalObject::reset):
9160        (JSC::JSGlobalObject::mark):
9161        * runtime/JSGlobalObject.h:
9162
91632009-04-08  Alexey Proskuryakov  <ap@webkit.org>
9164
9165        Reviewed by Darin Adler.
9166
9167        https://bugs.webkit.org/show_bug.cgi?id=25073
9168        JavaScriptCore tests don't run if time zone is not PST
9169
9170        * API/tests/testapi.c:
9171        (timeZoneIsPST): Added a function that checks whether the time zone is PST, using the same
9172        method as functions in DateMath.cpp do for formatting the result.
9173        (main): Skip date string format test if the time zone is not PST.
9174
91752009-04-07  David Levin  <levin@chromium.org>
9176
9177        Reviewed by Sam Weinig and Geoff Garen.
9178
9179        https://bugs.webkit.org/show_bug.cgi?id=25039
9180        UString refactoring to support UChar* sharing.
9181
9182        No change in sunspider perf.
9183
9184        * runtime/SmallStrings.cpp:
9185        (JSC::SmallStringsStorage::SmallStringsStorage):
9186        * runtime/UString.cpp:
9187        (JSC::initializeStaticBaseString):
9188        (JSC::initializeUString):
9189        (JSC::UString::BaseString::isShared):
9190        Encapsulate the meaning behind the refcount == 1 checks because
9191        this needs to do slightly more when sharing is added.
9192        (JSC::concatenate):
9193        (JSC::UString::append):
9194        (JSC::UString::operator=):
9195        * runtime/UString.h:
9196        Make m_baseString part of a union to get rid of casts, but make it protected because
9197        it is tricky to use it correctly since it is only valid when the Rep is not a BaseString.
9198        The void* will be filled in when sharing is added.
9199
9200        Add constructors due to the making members protected and it make ensuring proper
9201        initialization work better (like in SmallStringsStorage).
9202        (JSC::UString::Rep::create):
9203        (JSC::UString::Rep::Rep):
9204        (JSC::UString::Rep::):
9205        (JSC::UString::BaseString::BaseString):
9206        (JSC::UString::Rep::setBaseString):
9207        (JSC::UString::Rep::baseString):
9208
92092009-04-04  Xan Lopez  <xlopez@igalia.com>
9210
9211        Reviewed by Alexey Proskuryakov.
9212
9213        https://bugs.webkit.org/show_bug.cgi?id=25033
9214        dtoa.cpp segfaults with g++ 4.4.0
9215
9216        g++ 4.4.0 seems to be more strict about aliasing rules, so it
9217        produces incorrect code if dtoa.cpp is compiled with
9218        -fstrict-aliasing (it also emits a ton of warnings, so fair enough
9219        I guess). The problem was that we were only casting variables to
9220        union types in order to do type punning, but GCC and the C
9221        standard require that we actually use a union to store the value.
9222
9223        This patch does just that, the code is mostly copied from the dtoa
9224        version in GCC:
9225        http://gcc.gnu.org/viewcvs/trunk/libjava/classpath/native/fdlibm/dtoa.c?view=markup.
9226
9227        * wtf/dtoa.cpp:
9228        (WTF::ulp):
9229        (WTF::b2d):
9230        (WTF::ratio):
9231        (WTF::hexnan):
9232        (WTF::strtod):
9233        (WTF::dtoa):
9234
92352009-04-04  Kevin Ollivier  <kevino@theolliviers.com>
9236
9237        wx build fix for Win port. Build the assembler sources to get missing functions.
9238
9239        * JavaScriptCoreSources.bkl:
9240        * jscore.bkl:
9241        * wtf/Platform.h:
9242
92432009-04-02  Darin Adler  <darin@apple.com>
9244
9245        Reviewed by Kevin Decker.
9246
9247        <rdar://problem/6744471> crash in GC due to uninitialized callFunction pointer
9248
9249        * runtime/JSGlobalObject.h:
9250        (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Initialize
9251        callFunction as we do the other data members that are used in the mark function.
9252
92532009-04-02  Yael Aharon  <yael.aharon@nokia.com>
9254
9255        Reviewed by Simon Hausmann
9256
9257        https://bugs.webkit.org/show_bug.cgi?id=24490
9258
9259        Implement WTF::ThreadSpecific in the Qt build using
9260        QThreadStorage.
9261
9262        * wtf/ThreadSpecific.h:
9263
92642009-04-01  Greg Bolsinga  <bolsinga@apple.com>
9265
9266        Reviewed by Mark Rowe.
9267
9268        https://bugs.webkit.org/show_bug.cgi?id=24990
9269        Put SECTORDER_FLAGS into xcconfig files.
9270
9271        * Configurations/Base.xcconfig:
9272        * Configurations/DebugRelease.xcconfig:
9273        * JavaScriptCore.xcodeproj/project.pbxproj:
9274
92752009-03-27  Oliver Hunt  <oliver@apple.com>
9276
9277        Reviewed by NOBODY (Build fix).
9278
9279        Fix non-AllInOneFile builds.
9280
9281        * bytecompiler/BytecodeGenerator.cpp:
9282
92832009-03-27  Oliver Hunt  <oliver@apple.com>
9284
9285        Reviewed by Gavin Barraclough.
9286
9287        Improve performance of Function.prototype.call
9288        <https://bugs.webkit.org/show_bug.cgi?id=24907>
9289
9290        Optimistically assume that expression.call(..) is going to be a call to
9291        Function.prototype.call, and handle it specially to attempt to reduce the
9292        degree of VM reentrancy.
9293
9294        When everything goes right this removes the vm reentry improving .call()
9295        by around a factor of 10.
9296
9297        * JavaScriptCore.xcodeproj/project.pbxproj:
9298        * bytecode/CodeBlock.cpp:
9299        (JSC::CodeBlock::dump):
9300        * bytecode/Opcode.h:
9301        * bytecompiler/BytecodeGenerator.cpp:
9302        (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
9303        * bytecompiler/BytecodeGenerator.h:
9304        * interpreter/Interpreter.cpp:
9305        (JSC::Interpreter::privateExecute):
9306        * jit/JIT.cpp:
9307        (JSC::JIT::privateCompileMainPass):
9308        * parser/Grammar.y:
9309        * parser/Nodes.cpp:
9310        (JSC::CallFunctionCallDotNode::emitBytecode):
9311        * parser/Nodes.h:
9312        (JSC::CallFunctionCallDotNode::):
9313        * runtime/FunctionPrototype.cpp:
9314        (JSC::FunctionPrototype::addFunctionProperties):
9315        * runtime/FunctionPrototype.h:
9316        * runtime/JSGlobalObject.cpp:
9317        (JSC::JSGlobalObject::reset):
9318        (JSC::JSGlobalObject::mark):
9319        * runtime/JSGlobalObject.h:
9320
93212009-03-27  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
9322
9323        Reviewed by Darin Adler.
9324
9325        Bug 24884: Include strings.h for strcasecmp()
9326        https://bugs.webkit.org/show_bug.cgi?id=24884
9327
9328        * runtime/DateMath.cpp: Reversed previous change including strings.h
9329        * wtf/StringExtras.h: Include strings.h here is available
9330
93312009-03-26  Adam Roben  <aroben@apple.com>
9332
9333        Copy testapi.js to $WebKitOutputDir on Windows
9334
9335        Part of Bug 24856: run-javascriptcore-tests should run testapi on
9336        Windows
9337        <https://bugs.webkit.org/show_bug.cgi?id=24856>
9338
9339        This matches what Mac does, which will help once we enable running
9340        testapi from run-javascriptcore-tests on Windows.
9341
9342        Reviewed by Steve Falkenburg.
9343
9344        * JavaScriptCore.vcproj/testapi/testapi.vcproj: Copy testapi.js next
9345        to testapi.exe.
9346
93472009-03-25  Oliver Hunt  <oliver@apple.com>
9348
9349        Reviewed by Geoff Garen.
9350
9351        Fix exception handling for instanceof in the interpreter.
9352
9353        * interpreter/Interpreter.cpp:
9354        (JSC::Interpreter::privateExecute):
9355
93562009-03-25  Geoffrey Garen  <ggaren@apple.com>
9357
9358        Reviewed by Cameron Zwarich.
9359        
9360        Fixed <rdar://problem/6724011> Write to freed memory in JSC::Label::deref
9361        when reloading http://helpme.att.net/speedtest/
9362
9363        * bytecompiler/BytecodeGenerator.h: Reversed the declaration order for
9364        m_labelScopes and m_labels to reverse their destruction order.
9365        m_labelScopes has references to memory within m_labels, so its destructor
9366        needs to run first.
9367
93682009-03-24  Eli Fidler  <eli.fidler@torchmobile.com>
9369
9370        Reviewed by George Staikos.
9371
9372        Correct warnings which in some environments are treated as errors.
9373
9374        * wtf/dtoa.cpp:
9375        (WTF::b2d):
9376        (WTF::d2b):
9377        (WTF::strtod):
9378        (WTF::dtoa):
9379
93802009-03-24  Kevin Ollivier  <kevino@theolliviers.com>
9381
9382        Reviewed by Darin Adler.
9383        
9384        Explicitly define HAVE_LANGINFO_H on Darwin. Fixes the wx build bot jscore 
9385        test failure. 
9386        
9387        https://bugs.webkit.org/show_bug.cgi?id=24780
9388
9389        * wtf/Platform.h:
9390
93912009-03-23  Oliver Hunt  <oliver@apple.com>
9392
9393        Reviewed by Cameron Zwarich.
9394
9395        Fix className() for API defined class
9396
9397        * API/JSCallbackObjectFunctions.h:
9398        (JSC::::className):
9399        * API/tests/testapi.c:
9400        (EmptyObject_class):
9401        (main):
9402        * API/tests/testapi.js:
9403
94042009-03-23  Oliver Hunt  <oliver@apple.com>
9405
9406        Reviewed by Geoff Garen.
9407
9408        Make testapi assertions run in release builds, so that testapi actually
9409        works in a release build.
9410
9411        Many of the testapi assertions have side effects that are necessary, and
9412        given testapi is a testing program, perf impact of an assertion is not
9413        important, so it makes sense to apply the assertions in release builds
9414        anyway.
9415
9416        * API/tests/testapi.c:
9417        (EvilExceptionObject_hasInstance):
9418
94192009-03-23  David Kilzer  <ddkilzer@apple.com>
9420
9421        Provide JavaScript exception information after slow script timeout
9422
9423        Reviewed by Oliver Hunt.
9424
9425        * runtime/Completion.cpp:
9426        (JSC::evaluate): Set the exception object as the Completion
9427        object's value for slow script timeouts.  This is used in
9428        WebCore when reporting the exception.
9429        * runtime/ExceptionHelpers.cpp:
9430        (JSC::InterruptedExecutionError::toString): Added.  Provides a
9431        description message for the exception when it is reported.
9432
94332009-03-23  Gustavo Noronha Silva  <gns@gnome.org> and Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
9434
9435        Reviewed by Adam Roben.
9436
9437        https://bugs.webkit.org/show_bug.cgi?id=24674
9438        Crashes in !PLATFORM(MAC)'s formatLocaleDate, in very specific situations
9439
9440        Make sure strftime never returns 2-digits years to avoid ambiguity
9441        and a crash. We wrap this new code option in HAVE_LANGINFO_H,
9442        since it is apparently not available in all platforms.
9443
9444        * runtime/DatePrototype.cpp:
9445        (JSC::formatLocaleDate):
9446        * wtf/Platform.h:
9447
94482009-03-22  Oliver Hunt  <oliver@apple.com>
9449
9450        Reviewed by Cameron Zwarich.
9451
9452        Fix exception handling in API
9453
9454        We can't just use the ExecState exception slot for returning exceptions
9455        from class introspection functions provided through the API as many JSC
9456        functions will explicitly clear the ExecState exception when returning.
9457
9458        * API/JSCallbackObjectFunctions.h:
9459        (JSC::JSCallbackObject<Base>::getOwnPropertySlot):
9460        (JSC::JSCallbackObject<Base>::put):
9461        (JSC::JSCallbackObject<Base>::deleteProperty):
9462        (JSC::JSCallbackObject<Base>::construct):
9463        (JSC::JSCallbackObject<Base>::hasInstance):
9464        (JSC::JSCallbackObject<Base>::call):
9465        (JSC::JSCallbackObject<Base>::toNumber):
9466        (JSC::JSCallbackObject<Base>::toString):
9467        (JSC::JSCallbackObject<Base>::staticValueGetter):
9468        (JSC::JSCallbackObject<Base>::callbackGetter):
9469        * API/tests/testapi.c:
9470        (MyObject_hasProperty):
9471        (MyObject_getProperty):
9472        (MyObject_setProperty):
9473        (MyObject_deleteProperty):
9474        (MyObject_callAsFunction):
9475        (MyObject_callAsConstructor):
9476        (MyObject_hasInstance):
9477        (EvilExceptionObject_hasInstance):
9478        (EvilExceptionObject_convertToType):
9479        (EvilExceptionObject_class):
9480        (main):
9481        * API/tests/testapi.js:
9482        (EvilExceptionObject.hasInstance):
9483        (EvilExceptionObject.toNumber):
9484        (EvilExceptionObject.toStringExplicit):
9485
94862009-03-21  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
9487
9488        Reviewed by Oliver Hunt.
9489
9490        Bug 20049: testapi failure: MyObject - 0 should be NaN but instead is 1.
9491        <https://bugs.webkit.org/show_bug.cgi?id=20049>
9492        <rdar://problem/6079127>
9493
9494        In this case, the test is wrong. According to the ECMA spec, subtraction
9495        uses ToNumber, not ToPrimitive. Change the test to match the spec.
9496
9497        * API/tests/testapi.js:
9498
94992009-03-21  Oliver Hunt  <oliver@apple.com>
9500
9501        Reviewed by Cameron Zwarich.
9502
9503        Ensure that JSObjectMakeFunction doesn't produce incorrect line numbers.
9504
9505        Also make test api correctly propagate failures.
9506
9507        * API/tests/testapi.c:
9508        (main):
9509        * runtime/FunctionConstructor.cpp:
9510        (JSC::constructFunction):
9511
95122009-03-21  Oliver Hunt  <oliver@apple.com>
9513
9514        Reviewed by Mark Rowe.
9515
9516        Improve testapi by making it report failures in a way we can pick up
9517        from our test scripts.
9518
9519        * API/tests/testapi.c:
9520        (assertEqualsAsBoolean):
9521        (assertEqualsAsNumber):
9522        (assertEqualsAsUTF8String):
9523        (assertEqualsAsCharactersPtr):
9524        (main):
9525        * API/tests/testapi.js:
9526        (pass):
9527        (fail):
9528        (shouldBe):
9529        (shouldThrow):
9530
95312009-03-20  Norbert Leser  <norbert.leser@nokia.com>
9532
9533        Reviewed by Darin Adler.
9534
9535        https://bugs.webkit.org/show_bug.cgi?id=24535
9536
9537        Fixes missing line terminator character (;) after macro call.
9538        It is common practice to add the trailing ";" where macros are substituted
9539        and not where they are defined with #define.
9540        This change is consistent with other macro declarations across webkit,
9541        and it also solves compilation failure with symbian compilers. 
9542 
9543        * runtime/UString.cpp:
9544        * wtf/Assertions.h:
9545
95462009-03-20  Geoffrey Garen  <ggaren@apple.com>
9547
9548        Reviewed by Darin Adler.
9549        
9550        Fixed a JavaScriptCore crash on the Windows buildbot.
9551
9552        * bytecompiler/BytecodeGenerator.h: Reduced the AST recursion limit.
9553        Apparently, Windows has small stacks.
9554
95552009-03-20  Geoffrey Garen  <ggaren@apple.com>
9556
9557        Reviewed by Oliver Hunt.
9558        
9559        A little cleanup in the RegisterFile code.
9560        
9561        Moved large inline functions out of the class declaration, to make it
9562        more readable.
9563        
9564        Switched over to using the roundUpAllocationSize function to avoid
9565        duplicate code and subtle bugs.
9566        
9567        Renamed m_maxCommitted to m_commitEnd, to match m_end.
9568        
9569        Renamed allocationSize to commitSize because it's the chunk size for
9570        committing memory, not allocating memory.
9571        
9572        SunSpider reports no change.
9573
9574        * interpreter/RegisterFile.h:
9575        (JSC::RegisterFile::RegisterFile):
9576        (JSC::RegisterFile::shrink):
9577        (JSC::RegisterFile::grow):
9578        * jit/ExecutableAllocator.h:
9579        (JSC::roundUpAllocationSize):
9580
95812009-03-19  Geoffrey Garen  <ggaren@apple.com>
9582
9583        Reviewed by Oliver Hunt.
9584        
9585        Fixed <rdar://problem/6033712> -- a little bit of hardening in the Collector.
9586        
9587        SunSpider reports no change. I also verified in the disassembly that
9588        we end up with a single compare to constant.
9589
9590        * runtime/Collector.cpp:
9591        (JSC::Heap::heapAllocate):
9592
95932009-03-19  Geoffrey Garen  <ggaren@apple.com>
9594
9595        Reviewed by Cameron Zwarich and Oliver Hunt.
9596
9597        Fixed <rdar://problem/6406045> REGRESSION: Stack overflow on PowerPC on
9598        fast/workers/use-machine-stack.html (22531)
9599
9600        Dialed down the re-entry allowance to 64 (from 128).
9601        
9602        On a 512K stack, this leaves about 64K for other code on the stack while
9603        JavaScript is running. Not perfect, but it solves our crash on PPC.
9604
9605        Different platforms may want to dial this down even more.
9606
9607        Also, substantially shrunk BytecodeGenerator. Since we allocate one on
9608        the stack in order to throw a stack overflow exception -- well, let's
9609        just say the old code had an appreciation for irony.
9610
9611        SunSpider reports no change.
9612
9613        * bytecompiler/BytecodeGenerator.h:
9614        * interpreter/Interpreter.h:
9615        (JSC::):
9616
96172009-03-19  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
9618
9619        Reviewed by Oliver Hunt.
9620
9621        Bug 24350: REGRESSION: Safari 4 breaks SPAW wysiwyg editor multiple instances
9622        <https://bugs.webkit.org/show_bug.cgi?id=24350>
9623        <rdar://problem/6674182>
9624
9625        The SPAW editor's JavaScript assumes that toString() on a function
9626        constructed with the Function constructor produces a function with
9627        a newline after the opening brace.
9628
9629        * runtime/FunctionConstructor.cpp:
9630        (JSC::constructFunction): Add a newline after the opening brace of the
9631        function's source code.
9632
96332009-03-19  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
9634
9635        Reviewed by Geoff Garen.
9636
9637        Bug 23771: REGRESSION (r36016): JSObjectHasProperty freezes on global class without kJSClassAttributeNoAutomaticPrototype
9638        <https://bugs.webkit.org/show_bug.cgi?id=23771>
9639        <rdar://problem/6561016>
9640
9641        * API/tests/testapi.c:
9642        (main): Add a test for this bug.
9643        * runtime/JSGlobalObject.cpp:
9644        (JSC::JSGlobalObject::resetPrototype): Don't set the prototype of the
9645        last object in the prototype chain to the object prototype when the
9646        object prototype is already the last object in the prototype chain.
9647
96482009-03-19  Timothy Hatcher  <timothy@apple.com>
9649
9650        <rdar://problem/6687342> -[WebView scheduleInRunLoop:forMode:] has no affect on timers
9651
9652        Reviewed by Darin Adler.
9653
9654        * wtf/Platform.h: Added HAVE_RUNLOOP_TIMER for PLATFORM(MAC).
9655
96562009-03-19  Geoffrey Garen  <ggaren@apple.com>
9657
9658        Reviewed by Oliver Hunt.
9659        
9660        Fixed <rdar://problem/6279213> Regular expression run-time complexity
9661        limit too low for long inputs (21485)
9662        
9663        I raised PCRE's "matchLimit" (limit on backtracking) by an order of
9664        magnitude. This fixes all the reported examples of timing out on legitimate
9665        regular expression matches.
9666        
9667        In my testing on a Core Duo MacBook Pro, the longest you can get stuck
9668        trying to match a string is still under 1s, so this seems like a safe change.
9669        
9670        I can think of a number of better solutions that are more complicated,
9671        but this is a good improvement for now.
9672
9673        * pcre/pcre_exec.cpp:
9674
96752009-03-19  Geoffrey Garen  <ggaren@apple.com>
9676
9677        Reviewed by Sam Weinig.
9678        
9679        Fixed <rdar://problem/6603562> REGRESSION (Safari 4): regular expression
9680        pattern size limit lower than Safari 3.2, other browsers, breaks SAP (14873)
9681        
9682        Bumped the pattern size limit to 1MB, and standardized it between PCRE
9683        and WREC. (Empirical testing says that we can easily compile a 1MB regular
9684        expression without risking a hang. Other browsers support bigger regular
9685        expressions, but also hang.)
9686        
9687        SunSpider reports no change.
9688        
9689        I started with a patch posted to Bugzilla by Erik Corry (erikcorry@google.com).
9690        
9691        * pcre/pcre_internal.h:
9692        (put3ByteValue):
9693        (get3ByteValue):
9694        (put3ByteValueAndAdvance):
9695        (putLinkValueAllowZero):
9696        (getLinkValueAllowZero): Made PCRE's "LINK_SIZE" (the number of bytes
9697        used to record jumps between bytecodes) 3, to accomodate larger potential
9698        jumps. Bumped PCRE's "MAX_PATTERN_SIZE" to 1MB. (Technically, at this
9699        LINK_SIZE, we can support even larger patterns, but we risk a hang during
9700        compilation, and it's not clear that such large patterns are important
9701        on the web.)
9702
9703        * wrec/WREC.cpp:
9704        (JSC::WREC::Generator::compileRegExp): Match PCRE's maximum pattern size,
9705        to avoid quirks between platforms.
9706
97072009-03-18  Ada Chan  <adachan@apple.com>
9708
9709        Rolling out r41818 since it broke the windows build.
9710        Error: ..\..\runtime\DatePrototype.cpp(30) : fatal error C1083: Cannot open include file: 'langinfo.h': No such file or directory
9711
9712        * runtime/DatePrototype.cpp:
9713        (JSC::formatLocaleDate):
9714
97152009-03-17  Oliver Hunt  <oliver@apple.com>
9716
9717        Reviewed by Cameron Zwarich.
9718
9719        <rdar://problem/6692138> REGRESSION (Safari 4): Incorrect function return value when using IE "try ... finally" memory leak work-around (24654)
9720        <https://bugs.webkit.org/show_bug.cgi?id=24654>
9721
9722        If the return value for a function is in a local register we need
9723        to copy it before executing any finalisers, otherwise it is possible
9724        for the finaliser to clobber the result.
9725
9726        * bytecompiler/BytecodeGenerator.h:
9727        (JSC::BytecodeGenerator::hasFinaliser):
9728        * parser/Nodes.cpp:
9729        (JSC::ReturnNode::emitBytecode):
9730
97312009-03-17  Kevin Ollivier  <kevino@theolliviers.com>
9732
9733        Reviewed by Mark Rowe.
9734        
9735        Move BUILDING_ON_* defines into Platform.h to make them available to other ports.
9736        Also tweak the defines so that they work with the default values set by 
9737        AvailabilityMacros.h.
9738
9739        https://bugs.webkit.org/show_bug.cgi?id=24630
9740
9741        * JavaScriptCorePrefix.h:
9742        * wtf/Platform.h:
9743
97442009-03-15  Simon Fraser  <simon.fraser@apple.com>
9745
9746        Revert r41718 because it broke DumpRenderTree on Tiger.
9747
9748        * JavaScriptCorePrefix.h:
9749        * wtf/Platform.h:
9750
97512009-03-15  Kevin Ollivier  <kevino@theolliviers.com>
9752
9753        Non-Apple Mac ports build fix. Move defines for the BUILDING_ON_ macros into
9754        Platform.h so that they're defined for all ports building on Mac, and tweak
9755        the definitions of those macros based on Mark Rowe's suggestions to accomodate
9756        cases where the values may not be <= to the .0 release for that version.
9757
9758        * JavaScriptCorePrefix.h:
9759        * wtf/Platform.h:
9760
97612009-03-13  Mark Rowe  <mrowe@apple.com>
9762
9763        Rubber-stamped by Dan Bernstein.
9764
9765        Take advantage of the ability of recent versions of Xcode to easily switch the active
9766        architecture.
9767
9768        * Configurations/DebugRelease.xcconfig:
9769
97702009-03-13  Mark Rowe  <mrowe@apple.com>
9771
9772        Reviewed by David Kilzer.
9773
9774        Prevent AllInOneFile.cpp and ProfileGenerator.cpp from rebuilding unnecessarily when
9775        switching between building in Xcode and via build-webkit.
9776
9777        build-webkit passes FEATURE_DEFINES to xcodebuild, resulting in it being present in the
9778        Derived Sources build settings.  When building in Xcode, this setting isn't present so
9779        Xcode reruns the script build phases.  This results in a new version of TracingDtrace.h
9780        being generated, and the files that include it being rebuilt.
9781
9782        * JavaScriptCore.xcodeproj/project.pbxproj:  Don't regenerate TracingDtrace.h if it is
9783        already newer than the input file.
9784
97852009-03-13  Norbert Leser  <norbert.leser@nokia.com>
9786
9787        Reviewed by Darin Adler.
9788
9789        Resolved name conflict with globally defined tzname in Symbian.
9790        Replaced with different name instead of using namespace qualifier
9791        (appeared to be less clumsy).
9792
9793        * runtime/DateMath.cpp:
9794
97952009-03-12  Mark Rowe  <mrowe@apple.com>
9796
9797        Reviewed by Darin Adler.
9798
9799        <rdar://problem/6548446> TCMalloc_SystemRelease should use madvise rather than re-mmaping span of pages
9800
9801        * wtf/FastMalloc.cpp:
9802        (WTF::mergeDecommittedStates): If either of the spans has been released to the system, release the other
9803        span as well so that the flag in the merged span is accurate.
9804        * wtf/Platform.h:
9805        * wtf/TCSystemAlloc.cpp: Track decommitted spans when using MADV_FREE_REUSABLE / MADV_FREE_REUSE.
9806        (TCMalloc_SystemRelease): Use madvise with MADV_FREE_REUSABLE when it is available.
9807        (TCMalloc_SystemCommit): Use madvise with MADV_FREE_REUSE when it is available.
9808        * wtf/TCSystemAlloc.h:
9809
98102009-03-12  Adam Treat  <adam.treat@torchmobile.com>
9811
9812        Reviewed by NOBODY (Build fix).
9813
9814        Include string.h for strlen usage.
9815
9816        * wtf/Threading.cpp:
9817
98182009-03-12  David Kilzer  <ddkilzer@apple.com>
9819
9820        Add NO_RETURN attribute to runInteractive() when not using readline
9821
9822        Reviewed by Darin Adler.
9823
9824        * jsc.cpp:
9825        (runInteractive): If the readline library is not used, this method
9826        will never return, thus the NO_RETURN attribute is needed to prevent
9827        a gcc warning.
9828
98292009-03-12  Adam Roben  <aroben@apple.com>
9830
9831        Adopt setThreadNameInternal on Windows
9832
9833        Also changed a Windows-only assertion about thread name length to an
9834        all-platform log message.
9835
9836        Reviewed by Adam Treat.
9837
9838        * wtf/Threading.cpp:
9839        (WTF::createThread): Warn if the thread name is longer than 31
9840        characters, as Visual Studio will truncate names longer than that
9841        length.
9842
9843        * wtf/ThreadingWin.cpp:
9844        (WTF::setThreadNameInternal): Renamed from setThreadName and changed
9845        to always operate on the current thread.
9846        (WTF::initializeThreading): Changed to use setThreadNameInternal.
9847        (WTF::createThreadInternal): Removed call to setThreadName. This is
9848        now handled by threadEntryPoint and setThreadNameInternal.
9849
98502009-03-11  David Kilzer  <ddkilzer@apple.com>
9851
9852        Clarify comments regarding order of FEATURE_DEFINES
9853
9854        Rubber-stamped by Mark Rowe.
9855
9856        * Configurations/JavaScriptCore.xcconfig: Added warning about
9857        the consequences when FEATURE_DEFINES are not kept in sync.
9858
98592009-03-11  Dan Bernstein  <mitz@apple.com>
9860
9861        Reviewed by Darin Adler.
9862
9863        - WTF support for fixing <rdar://problem/3919124> Thai text selection
9864          in Safari is incorrect
9865
9866        * wtf/unicode/icu/UnicodeIcu.h:
9867        (WTF::Unicode::hasLineBreakingPropertyComplexContext): Added. Returns
9868        whether the character has Unicode line breaking property value SA
9869        ("Complex Context").
9870        * wtf/unicode/qt4/UnicodeQt4.h:
9871        (WTF::Unicode::hasLineBreakingPropertyComplexContext): Added an
9872        implementation that always returns false.
9873
98742009-03-11  Darin Adler  <darin@apple.com>
9875
9876        Reviewed by Mark Rowe.
9877
9878        Give threads names on platforms with pthread_setname_np.
9879
9880        * wtf/Threading.cpp:
9881        (WTF::NewThreadContext::NewThreadContext): Initialize thread name.
9882        (WTF::threadEntryPoint): Call setThreadNameInternal.
9883        (WTF::createThread): Pass thread name.
9884
9885        * wtf/Threading.h: Added new comments, setThreadNameInternal.
9886
9887        * wtf/ThreadingGtk.cpp:
9888        (WTF::setThreadNameInternal): Added. Empty.
9889        * wtf/ThreadingNone.cpp:
9890        (WTF::setThreadNameInternal): Added. Empty.
9891        * wtf/ThreadingPthreads.cpp:
9892        (WTF::setThreadNameInternal): Call pthread_setname_np when available.
9893        * wtf/ThreadingQt.cpp:
9894        (WTF::setThreadNameInternal): Added. Empty.
9895        * wtf/ThreadingWin.cpp:
9896        (WTF::setThreadNameInternal): Added. Empty.
9897
98982009-03-11  Adam Roben  <aroben@apple.com>
9899
9900        Change the Windows implementation of ThreadSpecific to use functions
9901        instead of extern globals
9902
9903        This will make it easier to export ThreadSpecific from WebKit.
9904
9905        Reviewed by John Sullivan.
9906
9907        * API/JSBase.cpp:
9908        (JSEvaluateScript): 
9909        Touched this file to force ThreadSpecific.h to be copied into
9910        $WebKitOutputDir.
9911
9912        * wtf/ThreadSpecific.h: Replaced g_tls_key_count with tlsKeyCount()
9913        and g_tls_keys with tlsKeys().
9914
9915        (WTF::::ThreadSpecific):
9916        (WTF::::~ThreadSpecific):
9917        (WTF::::get):
9918        (WTF::::set):
9919        (WTF::::destroy):
9920        Updated to use the new functions.
9921
9922        * wtf/ThreadSpecificWin.cpp:
9923        (WTF::tlsKeyCount):
9924        (WTF::tlsKeys):
9925        Added.
9926
9927        (WTF::ThreadSpecificThreadExit): Changed to use the new functions.
9928
99292009-03-10  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
9930
9931        Reviewed by Geoff Garen.
9932
9933        Bug 24291: REGRESSION (r38635): Single line JavaScript comment prevents HTML button click handler execution
9934        <https://bugs.webkit.org/show_bug.cgi?id=24291>
9935        <rdar://problem/6663472>
9936
9937        Add an extra newline to the end of the body of the program text constructed
9938        by the Function constructor for parsing. This allows single line comments to
9939        be handled correctly by the parser.
9940
9941        * runtime/FunctionConstructor.cpp:
9942        (JSC::constructFunction):
9943
99442009-03-09  Oliver Hunt  <oliver@apple.com>
9945
9946        Reviewed by Gavin Barraclough.
9947
9948        Bug 24447: REGRESSION (r41508): Google Maps does not complete initialization
9949        <rdar://problem/6657774>
9950
9951        r41508 actually exposed a pre-existing bug where we were not invalidating the result
9952        register cache at jump targets.  This causes problems when condition loads occur in an
9953        expression -- namely through the ?: and || operators.  This patch corrects these issues
9954        by marking the target of all forward jumps as being a jump target, and then clears the
9955        result register cache when ever it starts generating code for a targeted instruction.
9956
9957        I do not believe it is possible to cause this class of failure outside of a single
9958        expression, and expressions only provide forward branches, so this should resolve this
9959        entire class of bug.  That said i've included a test case that gets as close as possible
9960        to hitting this bug with a back branch, to hopefully prevent anyone from introducing the
9961        problem in future.
9962
9963        * assembler/AbstractMacroAssembler.h:
9964        (JSC::AbstractMacroAssembler::Label::isUsed):
9965        (JSC::AbstractMacroAssembler::Label::used):
9966        * assembler/X86Assembler.h:
9967        (JSC::X86Assembler::JmpDst::JmpDst):
9968        (JSC::X86Assembler::JmpDst::isUsed):
9969        (JSC::X86Assembler::JmpDst::used):
9970        * jit/JIT.cpp:
9971        (JSC::JIT::privateCompileMainPass):
9972
99732009-03-09  David Levin  <levin@chromium.org>
9974
9975        Reviewed by Darin Adler.
9976
9977        Bug 23175: String and UString should be able to share a UChar* buffer.
9978        <https://bugs.webkit.org/show_bug.cgi?id=23175>
9979
9980        Add CrossThreadRefCounted.
9981
9982        * wtf/CrossThreadRefCounted.h: Added.
9983        (WTF::CrossThreadRefCounted::create):
9984        (WTF::CrossThreadRefCounted::isShared):
9985        (WTF::CrossThreadRefCounted::dataAccessMustBeThreadSafe):
9986        (WTF::CrossThreadRefCounted::mayBePassedToAnotherThread):
9987        (WTF::CrossThreadRefCounted::CrossThreadRefCounted):
9988        (WTF::CrossThreadRefCounted::~CrossThreadRefCounted):
9989        (WTF::CrossThreadRefCounted::ref):
9990        (WTF::CrossThreadRefCounted::deref):
9991        (WTF::CrossThreadRefCounted::release):
9992        (WTF::CrossThreadRefCounted::copy):
9993        (WTF::CrossThreadRefCounted::threadSafeDeref):
9994        * wtf/RefCounted.h:
9995        * wtf/Threading.h:
9996        (WTF::ThreadSafeSharedBase::ThreadSafeSharedBase):
9997        (WTF::ThreadSafeSharedBase::derefBase):
9998        (WTF::ThreadSafeShared::ThreadSafeShared):
9999        (WTF::ThreadSafeShared::deref):
10000
100012009-03-09  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
10002
10003        Reviewed by George Staikos.
10004
10005        https://bugs.webkit.org/show_bug.cgi?id=24353
10006        Allow to overrule default build options for Qt build.
10007
10008        * JavaScriptCore.pri: Allow to overrule ENABLE_JIT
10009
100102009-03-08  Oliver Hunt  <oliver@apple.com>
10011
10012        Reviewed by NOBODY (build fix).
10013
10014        Build fix.
10015
10016        * runtime/ArrayPrototype.cpp:
10017        (JSC::arrayProtoFuncConcat):
10018
100192009-03-01  Oliver Hunt  <oliver@apple.com>
10020
10021        Reviewed by Cameron Zwarich.
10022
10023        Bug 24268: RuntimeArray is not a fully implemented JSArray
10024        <https://bugs.webkit.org/show_bug.cgi?id=24268>
10025
10026        Don't cast a type to JSArray, just because it reportsArray as a supertype
10027        in the JS type system.  Doesn't appear feasible to create a testcase
10028        unfortunately as setting up the failure conditions requires internal access 
10029        to JSC not present in DRT.
10030
10031        * runtime/ArrayPrototype.cpp:
10032        (JSC::arrayProtoFuncConcat):
10033
100342009-03-06  Gavin Barraclough  <barraclough@apple.com>
10035
10036        Reviewed by Oliver Hunt.
10037
10038        When preforming an op_mov, preserve any existing register mapping.
10039
10040        ~0.5% progression on v8 tests x86-64.
10041
10042        * jit/JIT.cpp:
10043        (JSC::JIT::privateCompileMainPass):
10044
100452009-03-05  Simone Fiorentino  <simone.fiorentino@consulenti.fastweb.it>
10046
10047        Bug 24382: request to add SH4 platform
10048
10049        <https://bugs.webkit.org/show_bug.cgi?id=24382>
10050
10051        Reviewed by David Kilzer.
10052
10053        * wtf/Platform.h: Added support for SH4 platform.
10054
100552009-03-05  Gavin Barraclough  <barraclough@apple.com>
10056
10057        Reviewed by Oliver Hunt.
10058
10059        Writes of constant values to SF registers should be made with direct memory
10060        writes where possible, rather than moving the value via a hardware register.
10061
10062        ~3% win on SunSpider tests on x86, ~1.5% win on v8 tests on x86-64.
10063
10064        * assembler/MacroAssemblerX86_64.h:
10065        (JSC::MacroAssemblerX86_64::storePtr):
10066        * assembler/X86Assembler.h:
10067        (JSC::X86Assembler::movq_i32m):
10068        * jit/JIT.cpp:
10069        (JSC::JIT::privateCompileMainPass):
10070
100712009-03-05  Mark Rowe  <mrowe@apple.com>
10072
10073        Fix the build.
10074
10075        Sprinkle "static" around NumberConstructor.cpp in order to please the compiler.
10076
10077        * runtime/NumberConstructor.cpp:
10078        (JSC::numberConstructorNaNValue):
10079        (JSC::numberConstructorNegInfinity):
10080        (JSC::numberConstructorPosInfinity):
10081        (JSC::numberConstructorMaxValue):
10082        (JSC::numberConstructorMinValue):
10083
100842009-03-04  Mark Rowe  <mrowe@apple.com>
10085
10086        Reviewed by Oliver Hunt.
10087
10088        <rdar://problem/6354858> FastMallocZone's enumeration code reports fragmented administration space
10089
10090        The handling of MALLOC_ADMIN_REGION_RANGE_TYPE in FastMalloc's zone was incorrect.  It was attempting
10091        to record the memory containing and individual span as an administrative region, when all memory
10092        allocated via MetaDataAlloc should in fact be recorded.  This was causing memory regions allocated
10093        via MetaDataAlloc to appear as "VM_ALLOCATE ?" in vmmap output.  They are now correctly reported as
10094        "MALLOC_OTHER" regions associated with the JavaScriptCore FastMalloc zone.
10095
10096        Memory is allocated via MetaDataAlloc from two locations: PageHeapAllocator, and TCMalloc_PageMap{2,3}.
10097        These two cases are handled differently.
10098
10099        PageHeapAllocator is extended to keep a linked list of memory regions that it has allocated.  The
10100        first object in an allocated region contains the link to the previously allocated region. To record
10101        the administrative regions of a PageHeapAllocator we can simply walk the linked list and record
10102        each allocated region we encounter.
10103
10104        TCMalloc_PageMaps allocate memory via MetaDataAlloc to store each level of the radix tree.  To record
10105        the administrative regions of a TCMalloc_PageMap we walk the tree and record the storage used for nodes
10106        at each position rather than the nodes themselves.
10107
10108        A small performance improvement is achieved by coalescing adjacent memory regions inside the PageMapMemoryUsageRecorder
10109        so that fewer calls in to the range recorder are necessary.  We further reduce the number of calls to the
10110        range recorder by aggregating the in-use ranges of a given memory region into a local buffer before recording
10111        them with a single call.  A similar approach is also used by AdminRegionRecorder.
10112
10113        * wtf/FastMalloc.cpp:
10114        (WTF::PageHeapAllocator::Init):
10115        (WTF::PageHeapAllocator::New):
10116        (WTF::PageHeapAllocator::recordAdministrativeRegions):
10117        (WTF::TCMallocStats::FreeObjectFinder::isFreeObject):
10118        (WTF::TCMallocStats::PageMapMemoryUsageRecorder::~PageMapMemoryUsageRecorder):
10119        (WTF::TCMallocStats::PageMapMemoryUsageRecorder::recordPendingRegions):
10120        (WTF::TCMallocStats::PageMapMemoryUsageRecorder::visit):
10121        (WTF::TCMallocStats::AdminRegionRecorder::AdminRegionRecorder):
10122        (WTF::TCMallocStats::AdminRegionRecorder::recordRegion):
10123        (WTF::TCMallocStats::AdminRegionRecorder::visit):
10124        (WTF::TCMallocStats::AdminRegionRecorder::recordPendingRegions):
10125        (WTF::TCMallocStats::AdminRegionRecorder::~AdminRegionRecorder):
10126        (WTF::TCMallocStats::FastMallocZone::enumerate):
10127        (WTF::TCMallocStats::FastMallocZone::FastMallocZone):
10128        (WTF::TCMallocStats::FastMallocZone::init):
10129        * wtf/TCPageMap.h:
10130        (TCMalloc_PageMap2::visitValues):
10131        (TCMalloc_PageMap2::visitAllocations):
10132        (TCMalloc_PageMap3::visitValues):
10133        (TCMalloc_PageMap3::visitAllocations):
10134
101352009-03-04  Antti Koivisto  <antti@apple.com>
10136
10137        Reviewed by Dave Hyatt.
10138
10139        https://bugs.webkit.org/show_bug.cgi?id=24359
10140        Repaint throttling mechanism
10141        
10142        Set ENABLE_REPAINT_THROTTLING to 0 by default.
10143
10144        * wtf/Platform.h:
10145
101462009-03-03  David Kilzer  <ddkilzer@apple.com>
10147
10148        <rdar://problem/6581203> WebCore and WebKit should install the same set of headers during installhdrs phase as build phase
10149
10150        Reviewed by Mark Rowe.
10151
10152        * Configurations/Base.xcconfig: Defined REAL_PLATFORM_NAME based
10153        on PLATFORM_NAME to work around the missing definition on Tiger.
10154        Updated HAVE_DTRACE to use REAL_PLATFORM_NAME.
10155
101562009-03-03  Kevin McCullough  <kmccullough@apple.com>
10157
10158        Reviewed by Oliver Hunt.
10159
10160        <rdar://problem/6639110> console.profile() doesn't work without a title
10161
10162        * profiler/Profiler.cpp:
10163        (JSC::Profiler::startProfiling): assert if there is not title to ensure
10164        we don't start profiling without one.
10165
101662009-03-02  Sam Weinig  <sam@webkit.org>
10167
10168        Reviewed by Mark Rowe.
10169
10170        Enable Geolocation (except on Tiger and Leopard).
10171
10172        * Configurations/JavaScriptCore.xcconfig:
10173
101742009-03-01  David Kilzer  <ddkilzer@apple.com>
10175
10176        <rdar://problem/6635688> Move HAVE_DTRACE check to Base.xcconfig
10177
10178        Reviewed by Mark Rowe.
10179
10180        * Configurations/Base.xcconfig: Set HAVE_DTRACE Xcode variable
10181        based on PLATFORM_NAME and MAC_OS_X_VERSION_MAJOR.  Also define
10182        it as a preprocessor macro by modifying
10183        GCC_PREPROCESSOR_DEFINITIONS.
10184        * JavaScriptCore.xcodeproj/project.pbxproj: Changed "Generate
10185        DTrace header" script phase to check for HAVE_DTRACE instead of
10186        MACOSX_DEPLOYMENT_TARGET.
10187        * wtf/Platform.h: Removed definition of HAVE_DTRACE macro since
10188        it's defined in Base.xcconfig now.
10189
101902009-03-01  Horia Olaru  <olaru@adobe.com>
10191
10192        By looking in grammar.y there are only a few types of statement nodes
10193        on which the debugger should stop. 
10194
10195        Removed isBlock and isLoop virtual calls. No need to emit debug hooks in
10196        the "statementListEmitCode" method as long as the necessary hooks can be
10197        added in each "emitCode".
10198
10199        https://bugs.webkit.org/show_bug.cgi?id=21073
10200
10201        Reviewed by Kevin McCullough.
10202
10203        * parser/Nodes.cpp:
10204        (JSC::ConstStatementNode::emitBytecode):
10205        (JSC::statementListEmitCode):
10206        (JSC::EmptyStatementNode::emitBytecode):
10207        (JSC::ExprStatementNode::emitBytecode):
10208        (JSC::VarStatementNode::emitBytecode):
10209        (JSC::IfNode::emitBytecode):
10210        (JSC::IfElseNode::emitBytecode):
10211        (JSC::DoWhileNode::emitBytecode):
10212        (JSC::WhileNode::emitBytecode):
10213        (JSC::ForNode::emitBytecode):
10214        (JSC::ForInNode::emitBytecode):
10215        (JSC::ContinueNode::emitBytecode):
10216        (JSC::BreakNode::emitBytecode):
10217        (JSC::ReturnNode::emitBytecode):
10218        (JSC::WithNode::emitBytecode):
10219        (JSC::SwitchNode::emitBytecode):
10220        (JSC::LabelNode::emitBytecode):
10221        (JSC::ThrowNode::emitBytecode):
10222        (JSC::TryNode::emitBytecode):
10223        * parser/Nodes.h:
10224
102252009-02-26  Gavin Barraclough  <barraclough@apple.com>
10226
10227        Reviewed by Geoff Garen.
10228
10229        Fix bug #23614.  Switches on double precision values were incorrectly
10230        truncating the scrutinee value.  E.g.:
10231
10232            switch (1.1) { case 1: print("FAIL"); }
10233
10234        Was resulting in FAIL.
10235
10236        * interpreter/Interpreter.cpp:
10237        (JSC::Interpreter::privateExecute):
10238        * jit/JITStubs.cpp:
10239        (JSC::JITStubs::cti_op_switch_imm):
10240
102412009-02-26  Gavin Barraclough  <barraclough@apple.com>
10242
10243        Reviewed by Oliver Hunt.
10244
10245        Integer Immediate representation need not be canonical in x86 JIT code.
10246        On x86-64 we already have loosened the requirement that the int immediate
10247        representation in canonical, we should bring x86 into line.
10248
10249        This patch is a minor (~0.5%) improvement on sunspider & v8-tests, and
10250        should reduce memory footoprint (reduces JIT code size).
10251
10252        * jit/JIT.cpp:
10253        (JSC::JIT::compileOpStrictEq):
10254        (JSC::JIT::privateCompileSlowCases):
10255        * jit/JIT.h:
10256        (JSC::JIT::emitJumpIfImmediateNumber):
10257        (JSC::JIT::emitJumpIfNotImmediateNumber):
10258        * jit/JITArithmetic.cpp:
10259        (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate):
10260        (JSC::JIT::compileBinaryArithOp):
10261
102622009-02-26  Carol Szabo  <carol.szabo@nokia.com>
10263
10264        Reviewed by Darin Adler.
10265
10266        https://bugs.webkit.org/show_bug.cgi?id=24099
10267        ARM Compiler Warnings in pcre_exec.cpp
10268
10269        * pcre/pcre_exec.cpp:
10270        (match):
10271
102722009-02-25  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
10273
10274        Reviewed by Gavin Barraclough.
10275
10276        Bug 24086: Regression (r40993): WebKit crashes after logging in to lists.zenbe
10277        <https://bugs.webkit.org/show_bug.cgi?id=24086>
10278        <rdar://problem/6625111>
10279
10280        The numeric sort optimization in r40993 generated bytecode for a function
10281        without generating JIT code. This breaks an assumption in some parts of
10282        the JIT's function calling logic that the presence of a CodeBlock implies
10283        the existence of JIT code.
10284
10285        In order to fix this, we simply generate JIT code whenever we check whether
10286        a function is a numeric sort function. This only incurs an additional cost
10287        in the case when the function is a numeric sort function, in which case it
10288        is not expensive to generate JIT code for it.
10289
10290        * runtime/ArrayPrototype.cpp:
10291        (JSC::isNumericCompareFunction):
10292
102932009-02-25  Geoffrey Garen  <ggaren@apple.com>
10294
10295        Reviewed by Maciej Stachowiak.
10296        
10297        Fixed <rdar://problem/6611174> REGRESSION (r36701): Unable to select
10298        messages on hotmail (24052)
10299        
10300        The bug was that for-in enumeration used a cached prototype chain without
10301        validating that it was up-to-date.
10302        
10303        This led me to refactor prototype chain caching so it was easier to work
10304        with and harder to get wrong.
10305        
10306        After a bit of inlining, this patch is performance-neutral on SunSpider
10307        and the v8 benchmarks.
10308
10309        * interpreter/Interpreter.cpp:
10310        (JSC::Interpreter::tryCachePutByID):
10311        (JSC::Interpreter::tryCacheGetByID):
10312        * jit/JITStubs.cpp:
10313        (JSC::JITStubs::tryCachePutByID):
10314        (JSC::JITStubs::tryCacheGetByID):
10315        (JSC::JITStubs::cti_op_get_by_id_proto_list): Use the new refactored goodness. See
10316        lines beginning with "-" and smile.
10317
10318        * runtime/JSGlobalObject.h:
10319        (JSC::Structure::prototypeForLookup): A shout out to const.
10320
10321        * runtime/JSPropertyNameIterator.h:
10322        (JSC::JSPropertyNameIterator::next): We can use a pointer comparison to
10323        see if our cached structure chain is equal to the object's structure chain,
10324        since in the case of a cache hit, we share references to the same structure
10325        chain.
10326
10327        * runtime/Operations.h:
10328        (JSC::countPrototypeChainEntriesAndCheckForProxies): Use the new refactored
10329        goodness.
10330
10331        * runtime/PropertyNameArray.h:
10332        (JSC::PropertyNameArray::PropertyNameArray):
10333        (JSC::PropertyNameArray::setShouldCache):
10334        (JSC::PropertyNameArray::shouldCache): Renamed "cacheable" to "shouldCache"
10335        to communicate that the client is specifying a recommendation, not a
10336        capability.
10337        
10338        * runtime/Structure.cpp:
10339        (JSC::Structure::Structure): No need to initialize a RefPtr.
10340        (JSC::Structure::getEnumerablePropertyNames): Moved some code into helper
10341        functions.
10342
10343        (JSC::Structure::prototypeChain): New centralized accessor for a prototype
10344        chain. Revalidates on every access, since the objects in the prototype
10345        chain may have mutated.
10346
10347        (JSC::Structure::isValid): Helper function for revalidating a cached
10348        prototype chain.
10349
10350        (JSC::Structure::getEnumerableNamesFromPropertyTable):
10351        (JSC::Structure::getEnumerableNamesFromClassInfoTable): Factored out of
10352        getEnumerablePropertyNames.
10353
10354        * runtime/Structure.h:
10355
10356        * runtime/StructureChain.cpp:
10357        (JSC::StructureChain::StructureChain):
10358        * runtime/StructureChain.h:
10359        (JSC::StructureChain::create): No need for structureChainsAreEqual, since
10360        we use pointer equality now. Refactored StructureChain to make a little
10361        more sense and eliminate special cases for null prototypes.
10362
103632009-02-25  Steve Falkenburg  <sfalken@apple.com>
10364
10365        Use timeBeginPeriod to enable timing resolution greater than 16ms in command line jsc for Windows.
10366        Allows more accurate reporting of benchmark times via command line jsc.exe. Doesn't affect WebKit's use of JavaScriptCore.
10367        
10368        Reviewed by Adam Roben.
10369
10370        * jsc.cpp:
10371        (main):
10372
103732009-02-24  Geoffrey Garen  <ggaren@apple.com>
10374
10375        Build fix?
10376
10377        * GNUmakefile.am:
10378
103792009-02-24  Mark Rowe  <mrowe@apple.com>
10380
10381        Reviewed by Oliver Hunt.
10382
10383        <rdar://problem/6259220> Rename AVAILABLE_AFTER_WEBKIT_VERSION_3_1 (etc.) to match the other macros
10384
10385        * API/JSBasePrivate.h:
10386        * API/JSContextRef.h:
10387        * API/JSObjectRef.h:
10388        * API/WebKitAvailability.h:
10389
103902009-02-23  Geoffrey Garen  <ggaren@apple.com>
10391
10392        Reviewed by Sam Weinig.
10393
10394        Next step in splitting JIT functionality out of the Interpreter class:
10395        Moved vptr storage from Interpreter to JSGlobalData, so it could be shared
10396        between Interpreter and JITStubs, and moved the *Trampoline JIT stubs
10397        into the JITStubs class. Also added a VPtrSet class to encapsulate vptr
10398        hacks during JSGlobalData initialization.
10399        
10400        SunSpider says 0.4% faster. Meh.
10401
10402        * JavaScriptCore.exp:
10403        * JavaScriptCore.xcodeproj/project.pbxproj:
10404        * interpreter/Interpreter.cpp:
10405        (JSC::Interpreter::Interpreter):
10406        (JSC::Interpreter::tryCacheGetByID):
10407        (JSC::Interpreter::privateExecute):
10408        * interpreter/Interpreter.h:
10409        * jit/JIT.cpp:
10410        (JSC::JIT::privateCompileMainPass):
10411        (JSC::JIT::privateCompile):
10412        (JSC::JIT::privateCompileCTIMachineTrampolines):
10413        * jit/JIT.h:
10414        (JSC::JIT::compileCTIMachineTrampolines):
10415        * jit/JITCall.cpp:
10416        (JSC::JIT::compileOpCall):
10417        (JSC::JIT::compileOpCallSlowCase):
10418        * jit/JITPropertyAccess.cpp:
10419        (JSC::JIT::privateCompilePatchGetArrayLength):
10420        * jit/JITStubs.cpp:
10421        (JSC::JITStubs::JITStubs):
10422        (JSC::JITStubs::tryCacheGetByID):
10423        (JSC::JITStubs::cti_vm_dontLazyLinkCall):
10424        (JSC::JITStubs::cti_op_get_by_val):
10425        (JSC::JITStubs::cti_op_get_by_val_byte_array):
10426        (JSC::JITStubs::cti_op_put_by_val):
10427        (JSC::JITStubs::cti_op_put_by_val_array):
10428        (JSC::JITStubs::cti_op_put_by_val_byte_array):
10429        (JSC::JITStubs::cti_op_is_string):
10430        * jit/JITStubs.h:
10431        (JSC::JITStubs::ctiArrayLengthTrampoline):
10432        (JSC::JITStubs::ctiStringLengthTrampoline):
10433        (JSC::JITStubs::ctiVirtualCallPreLink):
10434        (JSC::JITStubs::ctiVirtualCallLink):
10435        (JSC::JITStubs::ctiVirtualCall):
10436        * runtime/ArrayPrototype.cpp:
10437        (JSC::arrayProtoFuncPop):
10438        (JSC::arrayProtoFuncPush):
10439        * runtime/FunctionPrototype.cpp:
10440        (JSC::functionProtoFuncApply):
10441        * runtime/JSArray.h:
10442        (JSC::isJSArray):
10443        * runtime/JSByteArray.h:
10444        (JSC::asByteArray):
10445        (JSC::isJSByteArray):
10446        * runtime/JSCell.h:
10447        * runtime/JSFunction.h:
10448        * runtime/JSGlobalData.cpp:
10449        (JSC::VPtrSet::VPtrSet):
10450        (JSC::JSGlobalData::JSGlobalData):
10451        (JSC::JSGlobalData::create):
10452        (JSC::JSGlobalData::sharedInstance):
10453        * runtime/JSGlobalData.h:
10454        * runtime/JSString.h:
10455        (JSC::isJSString):
10456        * runtime/Operations.h:
10457        (JSC::jsLess):
10458        (JSC::jsLessEq):
10459        * wrec/WREC.cpp:
10460        (JSC::WREC::Generator::compileRegExp):
10461
104622009-02-23  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>
10463
10464        Reviewed by Oliver Hunt.
10465
10466        Bug 23787: Allow JIT to generate SSE2 code if using GCC
10467        <https://bugs.webkit.org/show_bug.cgi?id=23787>
10468
10469        GCC version of the cpuid check.
10470
10471        * jit/JITArithmetic.cpp:
10472        (JSC::isSSE2Present): previous assembly code fixed.
10473
104742009-02-23  David Levin  <levin@chromium.org>
10475
10476        Reviewed by Alexey Proskuryakov.
10477
10478        Bug 24047: Need to simplify nested if's in WorkerRunLoop::runInMode
10479        <https://bugs.webkit.org/show_bug.cgi?id=24047>
10480
10481        * wtf/MessageQueue.h:
10482        (WTF::MessageQueue::infiniteTime):
10483        Allows for one to call waitForMessageFilteredWithTimeout and wait forever.
10484
10485        (WTF::MessageQueue::alwaysTruePredicate):
10486        (WTF::MessageQueue::waitForMessage):
10487        Made waitForMessage call waitForMessageFilteredWithTimeout, so that there is less
10488        duplicate code.
10489
10490        (WTF::MessageQueue::waitForMessageFilteredWithTimeout):
10491
10492        * wtf/ThreadingQt.cpp:
10493        (WTF::ThreadCondition::timedWait):
10494        * wtf/ThreadingWin.cpp:
10495        (WTF::ThreadCondition::timedWait):
10496        Made these two implementations consistent with the pthread and gtk implementations.
10497        Currently, the time calculations would overflow when passed large values.
10498
104992009-02-23  Jeremy Moskovich  <jeremy@chromium.org>
10500
10501        Reviewed by Adam Roben.
10502
10503        https://bugs.webkit.org/show_bug.cgi?id=24096
10504        PLATFORM(MAC)->PLATFORM(CF) since we want to use the CF functions in Chrome on OS X.
10505
10506        * wtf/CurrentTime.cpp:
10507
105082009-02-22  Geoffrey Garen  <ggaren@apple.com>
10509
10510        Build fix?
10511
10512        * GNUmakefile.am:
10513
105142009-02-22  Geoffrey Garen  <ggaren@apple.com>
10515
10516        Build fix.
10517
10518        * GNUmakefile.am:
10519
105202009-02-22  Geoffrey Garen  <ggaren@apple.com>
10521
10522        Reviewed by Sam Weinig.
10523
10524        Next step in splitting JIT functionality out of the Interpreter class:
10525        Created a JITStubs class and renamed Interpreter::cti_* to JITStubs::cti_*.
10526        
10527        Also, moved timeout checking into its own class, located in JSGlobalData,
10528        so both the Interpreter and the JIT could have access to it.
10529
10530        * JavaScriptCore.exp:
10531        * JavaScriptCore.pri:
10532        * JavaScriptCore.scons:
10533        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
10534        * JavaScriptCore.xcodeproj/project.pbxproj:
10535        * JavaScriptCoreSources.bkl:
10536        * interpreter/CallFrame.h:
10537        * interpreter/Interpreter.cpp:
10538        (JSC::Interpreter::Interpreter):
10539        (JSC::Interpreter::privateExecute):
10540        * interpreter/Interpreter.h:
10541        * interpreter/Register.h:
10542        * jit/JIT.cpp:
10543        (JSC::):
10544        (JSC::JIT::emitTimeoutCheck):
10545        (JSC::JIT::privateCompileMainPass):
10546        (JSC::JIT::privateCompileSlowCases):
10547        (JSC::JIT::privateCompile):
10548        (JSC::JIT::privateCompileCTIMachineTrampolines):
10549        * jit/JIT.h:
10550        * jit/JITArithmetic.cpp:
10551        (JSC::JIT::compileFastArithSlow_op_lshift):
10552        (JSC::JIT::compileFastArithSlow_op_rshift):
10553        (JSC::JIT::compileFastArithSlow_op_bitand):
10554        (JSC::JIT::compileFastArithSlow_op_mod):
10555        (JSC::JIT::compileFastArith_op_mod):
10556        (JSC::JIT::compileFastArithSlow_op_post_inc):
10557        (JSC::JIT::compileFastArithSlow_op_post_dec):
10558        (JSC::JIT::compileFastArithSlow_op_pre_inc):
10559        (JSC::JIT::compileFastArithSlow_op_pre_dec):
10560        (JSC::JIT::compileFastArith_op_add):
10561        (JSC::JIT::compileFastArith_op_mul):
10562        (JSC::JIT::compileFastArith_op_sub):
10563        (JSC::JIT::compileBinaryArithOpSlowCase):
10564        (JSC::JIT::compileFastArithSlow_op_add):
10565        (JSC::JIT::compileFastArithSlow_op_mul):
10566        * jit/JITCall.cpp:
10567        (JSC::JIT::compileOpCall):
10568        (JSC::JIT::compileOpCallSlowCase):
10569        * jit/JITPropertyAccess.cpp:
10570        (JSC::JIT::compileGetByIdHotPath):
10571        (JSC::JIT::compilePutByIdHotPath):
10572        (JSC::JIT::compileGetByIdSlowCase):
10573        (JSC::JIT::compilePutByIdSlowCase):
10574        (JSC::JIT::privateCompilePutByIdTransition):
10575        (JSC::JIT::patchGetByIdSelf):
10576        (JSC::JIT::patchPutByIdReplace):
10577        (JSC::JIT::privateCompilePatchGetArrayLength):
10578        (JSC::JIT::privateCompileGetByIdSelf):
10579        (JSC::JIT::privateCompileGetByIdProto):
10580        (JSC::JIT::privateCompileGetByIdChain):
10581        (JSC::JIT::privateCompilePutByIdReplace):
10582        * jit/JITStubs.cpp:
10583        (JSC::JITStubs::tryCachePutByID):
10584        (JSC::JITStubs::tryCacheGetByID):
10585        (JSC::JITStubs::cti_op_convert_this):
10586        (JSC::JITStubs::cti_op_end):
10587        (JSC::JITStubs::cti_op_add):
10588        (JSC::JITStubs::cti_op_pre_inc):
10589        (JSC::JITStubs::cti_timeout_check):
10590        (JSC::JITStubs::cti_register_file_check):
10591        (JSC::JITStubs::cti_op_loop_if_less):
10592        (JSC::JITStubs::cti_op_loop_if_lesseq):
10593        (JSC::JITStubs::cti_op_new_object):
10594        (JSC::JITStubs::cti_op_put_by_id_generic):
10595        (JSC::JITStubs::cti_op_get_by_id_generic):
10596        (JSC::JITStubs::cti_op_put_by_id):
10597        (JSC::JITStubs::cti_op_put_by_id_second):
10598        (JSC::JITStubs::cti_op_put_by_id_fail):
10599        (JSC::JITStubs::cti_op_get_by_id):
10600        (JSC::JITStubs::cti_op_get_by_id_second):
10601        (JSC::JITStubs::cti_op_get_by_id_self_fail):
10602        (JSC::JITStubs::cti_op_get_by_id_proto_list):
10603        (JSC::JITStubs::cti_op_get_by_id_proto_list_full):
10604        (JSC::JITStubs::cti_op_get_by_id_proto_fail):
10605        (JSC::JITStubs::cti_op_get_by_id_array_fail):
10606        (JSC::JITStubs::cti_op_get_by_id_string_fail):
10607        (JSC::JITStubs::cti_op_instanceof):
10608        (JSC::JITStubs::cti_op_del_by_id):
10609        (JSC::JITStubs::cti_op_mul):
10610        (JSC::JITStubs::cti_op_new_func):
10611        (JSC::JITStubs::cti_op_call_JSFunction):
10612        (JSC::JITStubs::cti_op_call_arityCheck):
10613        (JSC::JITStubs::cti_vm_dontLazyLinkCall):
10614        (JSC::JITStubs::cti_vm_lazyLinkCall):
10615        (JSC::JITStubs::cti_op_push_activation):
10616        (JSC::JITStubs::cti_op_call_NotJSFunction):
10617        (JSC::JITStubs::cti_op_create_arguments):
10618        (JSC::JITStubs::cti_op_create_arguments_no_params):
10619        (JSC::JITStubs::cti_op_tear_off_activation):
10620        (JSC::JITStubs::cti_op_tear_off_arguments):
10621        (JSC::JITStubs::cti_op_profile_will_call):
10622        (JSC::JITStubs::cti_op_profile_did_call):
10623        (JSC::JITStubs::cti_op_ret_scopeChain):
10624        (JSC::JITStubs::cti_op_new_array):
10625        (JSC::JITStubs::cti_op_resolve):
10626        (JSC::JITStubs::cti_op_construct_JSConstruct):
10627        (JSC::JITStubs::cti_op_construct_NotJSConstruct):
10628        (JSC::JITStubs::cti_op_get_by_val):
10629        (JSC::JITStubs::cti_op_get_by_val_byte_array):
10630        (JSC::JITStubs::cti_op_resolve_func):
10631        (JSC::JITStubs::cti_op_sub):
10632        (JSC::JITStubs::cti_op_put_by_val):
10633        (JSC::JITStubs::cti_op_put_by_val_array):
10634        (JSC::JITStubs::cti_op_put_by_val_byte_array):
10635        (JSC::JITStubs::cti_op_lesseq):
10636        (JSC::JITStubs::cti_op_loop_if_true):
10637        (JSC::JITStubs::cti_op_negate):
10638        (JSC::JITStubs::cti_op_resolve_base):
10639        (JSC::JITStubs::cti_op_resolve_skip):
10640        (JSC::JITStubs::cti_op_resolve_global):
10641        (JSC::JITStubs::cti_op_div):
10642        (JSC::JITStubs::cti_op_pre_dec):
10643        (JSC::JITStubs::cti_op_jless):
10644        (JSC::JITStubs::cti_op_not):
10645        (JSC::JITStubs::cti_op_jtrue):
10646        (JSC::JITStubs::cti_op_post_inc):
10647        (JSC::JITStubs::cti_op_eq):
10648        (JSC::JITStubs::cti_op_lshift):
10649        (JSC::JITStubs::cti_op_bitand):
10650        (JSC::JITStubs::cti_op_rshift):
10651        (JSC::JITStubs::cti_op_bitnot):
10652        (JSC::JITStubs::cti_op_resolve_with_base):
10653        (JSC::JITStubs::cti_op_new_func_exp):
10654        (JSC::JITStubs::cti_op_mod):
10655        (JSC::JITStubs::cti_op_less):
10656        (JSC::JITStubs::cti_op_neq):
10657        (JSC::JITStubs::cti_op_post_dec):
10658        (JSC::JITStubs::cti_op_urshift):
10659        (JSC::JITStubs::cti_op_bitxor):
10660        (JSC::JITStubs::cti_op_new_regexp):
10661        (JSC::JITStubs::cti_op_bitor):
10662        (JSC::JITStubs::cti_op_call_eval):
10663        (JSC::JITStubs::cti_op_throw):
10664        (JSC::JITStubs::cti_op_get_pnames):
10665        (JSC::JITStubs::cti_op_next_pname):
10666        (JSC::JITStubs::cti_op_push_scope):
10667        (JSC::JITStubs::cti_op_pop_scope):
10668        (JSC::JITStubs::cti_op_typeof):
10669        (JSC::JITStubs::cti_op_is_undefined):
10670        (JSC::JITStubs::cti_op_is_boolean):
10671        (JSC::JITStubs::cti_op_is_number):
10672        (JSC::JITStubs::cti_op_is_string):
10673        (JSC::JITStubs::cti_op_is_object):
10674        (JSC::JITStubs::cti_op_is_function):
10675        (JSC::JITStubs::cti_op_stricteq):
10676        (JSC::JITStubs::cti_op_nstricteq):
10677        (JSC::JITStubs::cti_op_to_jsnumber):
10678        (JSC::JITStubs::cti_op_in):
10679        (JSC::JITStubs::cti_op_push_new_scope):
10680        (JSC::JITStubs::cti_op_jmp_scopes):
10681        (JSC::JITStubs::cti_op_put_by_index):
10682        (JSC::JITStubs::cti_op_switch_imm):
10683        (JSC::JITStubs::cti_op_switch_char):
10684        (JSC::JITStubs::cti_op_switch_string):
10685        (JSC::JITStubs::cti_op_del_by_val):
10686        (JSC::JITStubs::cti_op_put_getter):
10687        (JSC::JITStubs::cti_op_put_setter):
10688        (JSC::JITStubs::cti_op_new_error):
10689        (JSC::JITStubs::cti_op_debug):
10690        (JSC::JITStubs::cti_vm_throw):
10691        * jit/JITStubs.h:
10692        (JSC::):
10693        * runtime/JSFunction.h:
10694        * runtime/JSGlobalData.cpp:
10695        (JSC::JSGlobalData::JSGlobalData):
10696        * runtime/JSGlobalData.h:
10697        * runtime/JSGlobalObject.cpp:
10698        * runtime/JSGlobalObject.h:
10699        * runtime/TimeoutChecker.cpp: Copied from interpreter/Interpreter.cpp.
10700        (JSC::TimeoutChecker::TimeoutChecker):
10701        (JSC::TimeoutChecker::reset):
10702        (JSC::TimeoutChecker::didTimeOut):
10703        * runtime/TimeoutChecker.h: Copied from interpreter/Interpreter.h.
10704        (JSC::TimeoutChecker::setTimeoutInterval):
10705        (JSC::TimeoutChecker::ticksUntilNextCheck):
10706        (JSC::TimeoutChecker::start):
10707        (JSC::TimeoutChecker::stop):
10708
107092009-02-20  Gustavo Noronha Silva  <gns@gnome.org>
10710
10711        Unreviewed build fix after r41100.
10712
10713        * GNUmakefile.am:
10714
107152009-02-20  Oliver Hunt  <oliver@apple.com>
10716
10717        Reviewed by Mark Rowe.
10718
10719        <rdar://problem/6606660> 2==null returns true in 64bit jit
10720
10721        Code for op_eq_null and op_neq_null was incorrectly performing
10722        a 32bit compare, which truncated the type tag from an integer
10723        immediate, leading to incorrect behaviour.
10724
10725        * assembler/MacroAssembler.h:
10726        (JSC::MacroAssembler::setPtr):
10727        * assembler/MacroAssemblerX86_64.h:
10728        (JSC::MacroAssemblerX86_64::setPtr):
10729        * jit/JIT.cpp:
10730        (JSC::JIT::privateCompileMainPass):
10731
107322009-02-19  Geoffrey Garen  <ggaren@apple.com>
10733
10734        Reviewed by Gavin Barraclough.
10735        
10736        First step in splitting JIT functionality out of the Interpreter class:
10737        Created JITStubs.h/.cpp, and moved Interpreter::cti_* into JITStubs.cpp.
10738        
10739        Functions that the Interpreter and JITStubs share moved to Operations.h/.cpp.
10740
10741        * GNUmakefile.am:
10742        * JavaScriptCore.pri:
10743        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
10744        * JavaScriptCore.xcodeproj/project.pbxproj:
10745        * interpreter/Interpreter.cpp:
10746        (JSC::Interpreter::resolveBase):
10747        (JSC::Interpreter::checkTimeout):
10748        (JSC::Interpreter::privateExecute):
10749        * interpreter/Interpreter.h:
10750        * jit/JITStubs.cpp: Copied from interpreter/Interpreter.cpp.
10751        (JSC::Interpreter::cti_op_resolve_base):
10752        * jit/JITStubs.h: Copied from interpreter/Interpreter.h.
10753        * runtime/Operations.cpp:
10754        (JSC::jsAddSlowCase):
10755        (JSC::jsTypeStringForValue):
10756        (JSC::jsIsObjectType):
10757        (JSC::jsIsFunctionType):
10758        * runtime/Operations.h:
10759        (JSC::jsLess):
10760        (JSC::jsLessEq):
10761        (JSC::jsAdd):
10762        (JSC::cachePrototypeChain):
10763        (JSC::countPrototypeChainEntriesAndCheckForProxies):
10764        (JSC::resolveBase):
10765
107662009-02-19  Gavin Barraclough  <barraclough@apple.com>
10767
10768        Reviewed by Oliver Hunt.
10769
10770        Fix for x86-64. Where the JavaScriptCore text segment lies outside
10771        a 2gb range of the heap containing JIT generated code, callbacks
10772        from JIT code to the stub functions in Interpreter will be incorrectly
10773        linked.
10774
10775        No performance impact on Sunspider, 1% regression on v8-tests,
10776        due to a 3% regression on richards.
10777
10778        * assembler/AbstractMacroAssembler.h:
10779        (JSC::AbstractMacroAssembler::Call::Call):
10780        (JSC::AbstractMacroAssembler::Jump::link):
10781        (JSC::AbstractMacroAssembler::Jump::linkTo):
10782        (JSC::AbstractMacroAssembler::CodeLocationJump::relink):
10783        (JSC::AbstractMacroAssembler::CodeLocationCall::relink):
10784        (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction):
10785        (JSC::AbstractMacroAssembler::PatchBuffer::link):
10786        (JSC::AbstractMacroAssembler::PatchBuffer::linkTailRecursive):
10787        (JSC::AbstractMacroAssembler::differenceBetween):
10788        * assembler/MacroAssembler.h:
10789        (JSC::MacroAssembler::tailRecursiveCall):
10790        (JSC::MacroAssembler::makeTailRecursiveCall):
10791        * assembler/MacroAssemblerX86.h:
10792        (JSC::MacroAssemblerX86::call):
10793        * assembler/MacroAssemblerX86Common.h:
10794        * assembler/MacroAssemblerX86_64.h:
10795        (JSC::MacroAssemblerX86_64::call):
10796        (JSC::MacroAssemblerX86_64::moveWithPatch):
10797        (JSC::MacroAssemblerX86_64::branchPtrWithPatch):
10798        (JSC::MacroAssemblerX86_64::storePtrWithPatch):
10799        * assembler/X86Assembler.h:
10800        (JSC::X86Assembler::jmp_r):
10801        (JSC::X86Assembler::linkJump):
10802        (JSC::X86Assembler::patchJump):
10803        (JSC::X86Assembler::patchCall):
10804        (JSC::X86Assembler::linkCall):
10805        (JSC::X86Assembler::patchAddress):
10806        * interpreter/Interpreter.cpp:
10807        (JSC::Interpreter::tryCTICachePutByID):
10808        * jit/JIT.cpp:
10809        (JSC::JIT::privateCompile):
10810        (JSC::JIT::privateCompileCTIMachineTrampolines):
10811        * jit/JIT.h:
10812        * jit/JITArithmetic.cpp:
10813        (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate):
10814        (JSC::JIT::compileBinaryArithOp):
10815        * jit/JITPropertyAccess.cpp:
10816        (JSC::JIT::privateCompilePutByIdTransition):
10817        (JSC::JIT::privateCompileGetByIdSelf):
10818        (JSC::JIT::privateCompilePutByIdReplace):
10819
108202009-02-18  Geoffrey Garen  <ggaren@apple.com>
10821
10822        Reviewed by Oliver Hunt.
10823        
10824        Simplified .call and .apply in preparation for optimizing them. Also,
10825        a little cleanup.
10826
10827        * runtime/FunctionPrototype.cpp:
10828        (JSC::functionProtoFuncApply):
10829        (JSC::functionProtoFuncCall): No need to do any specific conversion on
10830        'this' -- op_convert_this will do it if necessary.
10831
10832        * runtime/JSImmediate.cpp:
10833        (JSC::JSImmediate::toThisObject): Slightly relaxed the rules on
10834        toThisObject to allow for 'undefined', which can be passed through
10835        .call and .apply.
10836
108372009-02-19  David Levin  <levin@chromium.org>
10838
10839        Reviewed by Alexey Proskuryakov.
10840
10841        Bug 23976: MessageQueue needs a way to wait for a message that satisfies an arbitrary criteria.
10842        <https://bugs.webkit.org/show_bug.cgi?id=23976>
10843
10844        * wtf/Deque.h:
10845        (WTF::Deque<T>::findIf):
10846        * wtf/MessageQueue.h:
10847        (WTF::MessageQueue<T>::waitForMessageFiltered):
10848
108492009-02-18  David Levin  <levin@chromium.org>
10850
10851        Reviewed by Alexey Proskuryakov.
10852
10853        Bug 23974: Deque::Remove would be a useful method.
10854        <https://bugs.webkit.org/show_bug.cgi?id=23974>
10855
10856        Add Deque::remove and DequeIteratorBase<T>::operator=.
10857
10858        Why was operator= added? Every concrete iterator (DequeIterator..DequeConstReverseIterator)
10859        was calling DequeIteratorBase::assign(), which called Base::operator=(). Base::operator=()
10860        was not implemented. This went unnoticed because the iterator copy code has been unused.
10861
10862        * wtf/Deque.h:
10863        (WTF::Deque<T>::remove):
10864        (WTF::DequeIteratorBase<T>::removeFromIteratorsList):
10865        (WTF::DequeIteratorBase<T>::operator=):
10866        (WTF::DequeIteratorBase<T>::~DequeIteratorBase):
10867
108682009-02-18  Gustavo Noronha Silva  <gns@gnome.org>
10869
10870        Reviewed by Holger Freyther.
10871
10872        Fix symbols.filter location, and add other missing files to the
10873        autotools build, so that make dist works.
10874
10875        * GNUmakefile.am:
10876
108772009-02-17  Geoffrey Garen  <ggaren@apple.com>
10878
10879        Reviewed by Sam Weinig.
10880        
10881        Fixed failure in js1_5/Regress/regress-168347.js, as seen on the Oliver
10882        bot.
10883        
10884        Technically, both behaviors are OK, but we might as well keep this test
10885        passing.
10886
10887        * runtime/FunctionPrototype.cpp:
10888        (JSC::insertSemicolonIfNeeded): No need to add a trailing semicolon
10889        after a trailing '}', since '}' ends a block, indicating the end of a
10890        statement.
10891
108922009-02-17  Geoffrey Garen  <ggaren@apple.com>
10893
10894        Build fix.
10895
10896        * runtime/FunctionPrototype.cpp:
10897
108982009-02-17  Oliver Hunt  <oliver@apple.com>
10899
10900        Reviewed by Geoff Garen.
10901
10902        Add assertion to guard against oversized pc relative calls.
10903
10904        * assembler/X86Assembler.h:
10905        (JSC::X86Assembler::link):
10906
109072009-02-17  Geoffrey Garen  <ggaren@apple.com>
10908
10909        Reviewed by Sam Weinig.
10910        
10911        Fixed <rdar://problem/6595040> REGRESSION: http://www.amnestyusa.org/
10912        fails to load.
10913        
10914        amnestyusa.org uses the Optimist JavaScript library, which adds event
10915        listeners by concatenating string-ified functions. This is only sure to
10916        be syntactically valid if the string-ified functions end in semicolons.
10917
10918        * parser/Lexer.cpp:
10919        (JSC::Lexer::isWhiteSpace):
10920        * parser/Lexer.h:
10921        (JSC::Lexer::isWhiteSpace):
10922        (JSC::Lexer::isLineTerminator): Added some helper functions for examining
10923        whitespace.
10924
10925        * runtime/FunctionPrototype.cpp:
10926        (JSC::appendSemicolonIfNeeded):
10927        (JSC::functionProtoFuncToString): When string-ifying a function, insert
10928        a semicolon in the last non-whitespace position, if one doesn't already exist.
10929
109302009-02-16  Oliver Hunt  <oliver@apple.com>
10931
10932        Reviewed by NOBODY (Build fix).
10933
10934        Roll out r41022 as it breaks qt and gtk builds
10935
10936        * jit/JITArithmetic.cpp:
10937        (JSC::isSSE2Present):
10938
109392009-02-16  Sam Weinig  <sam@webkit.org>
10940
10941        Reviewed by Geoffrey Garen.
10942
10943        Fix for <rdar://problem/6468156>
10944        REGRESSION (r36779): Adding link, images, flash in TinyMCE blocks entire page (21382)
10945
10946        No performance regression.
10947
10948        * runtime/Arguments.cpp:
10949        (JSC::Arguments::fillArgList): Add codepath for when the "length" property has been
10950        overridden.
10951
109522009-02-16  Mark Rowe  <mrowe@apple.com>
10953
10954        Build fix.
10955
10956        * wtf/FastMalloc.cpp:
10957        (WTF::TCMallocStats::):
10958        (WTF::TCMallocStats::FastMallocZone::FastMallocZone):
10959
109602009-02-16  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>
10961
10962        Reviewed by Oliver Hunt.
10963
10964        Bug 23787: Allow JIT to generate SSE2 code if using GCC
10965        <https://bugs.webkit.org/show_bug.cgi?id=23787>
10966
10967        GCC version of the cpuid check.
10968
10969        * jit/JITArithmetic.cpp:
10970        (JSC::isSSE2Present): GCC assembly code added.
10971        6.6% progression on x86 Linux with JIT and WREC on SunSpider if using SSE2 capable machine.
10972
109732009-02-13  Adam Treat  <adam.treat@torchmobile.com>
10974
10975        Reviewed by George Staikos.
10976
10977        https://bugs.webkit.org/show_bug.cgi?id=23960
10978        Crash Fix.
10979
10980        Don't depend on 'initializeThreading()' to come before a call to 'isMainThread()'
10981        as QtWebKit only calls 'initializeThreading()' during QWebPage construction.
10982
10983        A client app may well make a call to QWebSettings::iconForUrl() for instance
10984        before creating a QWebPage and that call to QWebSettings triggers an
10985        ASSERT(isMainThread()) deep within WebCore.
10986
10987        * wtf/ThreadingQt.cpp:
10988        (WTF::isMainThread):
10989
109902009-02-13  Gavin Barraclough  <barraclough@apple.com>
10991
10992        Reviewed by Darin Adler.
10993
10994        Some data in the instruction stream is potentially uninitialized - fix this.
10995
10996        Change the OperandTypes constructor so that uninitialized memory in the int
10997        is zeroed, and modify the Instruction constructor taking an Opcode so that
10998        if !HAVE(COMPUTED_GOTO) (i.e. when Opcode is an enum, and is potentially only
10999        a byte) it zeros the Instruction first before writing the opcode.
11000
11001        * bytecode/Instruction.h:
11002        (JSC::Instruction::Instruction):
11003        * parser/ResultType.h:
11004        (JSC::OperandTypes::OperandTypes):
11005
110062009-02-13  Geoffrey Garen  <ggaren@apple.com>
11007
11008        Build fix for non_JIT platforms.
11009
11010        * bytecode/CodeBlock.h:
11011        (JSC::CodeBlock::setIsNumericCompareFunction):
11012        (JSC::CodeBlock::isNumericCompareFunction):
11013
110142009-02-13  Geoffrey Garen  <ggaren@apple.com>
11015
11016        Reviewed by Darin Adler.
11017        
11018        Fixed <rdar://problem/6584057> Optimize sort by JS numeric comparison
11019        function not to run the comparison function
11020        
11021        * bytecode/CodeBlock.cpp:
11022        (JSC::CodeBlock::CodeBlock):
11023        * bytecode/CodeBlock.h:
11024        (JSC::CodeBlock::setIsNumericCompareFunction):
11025        (JSC::CodeBlock::isNumericCompareFunction): Added the ability to track
11026        whether a CodeBlock performs a sort-like numeric comparison.
11027
11028        * bytecompiler/BytecodeGenerator.cpp:
11029        (JSC::BytecodeGenerator::generate): Set the isNumericCompareFunction bit
11030        after compiling.
11031
11032        * parser/Nodes.cpp:
11033        (JSC::FunctionBodyNode::emitBytecode): Fixed a bug that caused us to
11034        codegen an extra return at the end of all functions (eek!), since this
11035        made it harder / weirder to detect the numeric comparison pattern in
11036        bytecode.
11037
11038        * runtime/ArrayPrototype.cpp:
11039        (JSC::arrayProtoFuncSort): Use the isNumericCompareFunction bit to do
11040        a faster sort if we can.
11041
11042        * runtime/FunctionConstructor.cpp:
11043        (JSC::extractFunctionBody):
11044        (JSC::constructFunction):
11045        * runtime/FunctionConstructor.h: Renamed and exported extractFunctionBody for
11046        use in initializing lazyNumericCompareFunction.
11047
11048        * runtime/JSArray.cpp:
11049        (JSC::compareNumbersForQSort):
11050        (JSC::compareByStringPairForQSort):
11051        (JSC::JSArray::sortNumeric):
11052        (JSC::JSArray::sort):
11053        * runtime/JSArray.h: Added a fast numeric sort. Renamed ArrayQSortPair
11054        to be more specific since we do different kinds of qsort now.
11055
11056        * runtime/JSGlobalData.cpp:
11057        (JSC::JSGlobalData::JSGlobalData):
11058        (JSC::JSGlobalData::numericCompareFunction):
11059        (JSC::JSGlobalData::ClientData::~ClientData):
11060        * runtime/JSGlobalData.h: Added helper data for computing the
11061        isNumericCompareFunction bit.
11062
110632009-02-13  Darin Adler  <darin@apple.com>
11064
11065        * Configurations/JavaScriptCore.xcconfig: Undo accidental commit of this file.
11066
110672009-02-12  Darin Adler  <darin@apple.com>
11068
11069        Reviewed by Oliver Hunt and Alexey Proskuryakov.
11070
11071        Speed up a couple string functions.
11072
11073        * runtime/StringPrototype.cpp:
11074        (JSC::stringProtoFuncIndexOf): Added a fast path for cases where the second
11075        argument is either missing or an integer.
11076        (JSC::stringProtoFuncBig): Use jsNontrivialString since the string is guaranteed
11077        to be 2 or more characters long.
11078        (JSC::stringProtoFuncSmall): Ditto.
11079        (JSC::stringProtoFuncBlink): Ditto.
11080        (JSC::stringProtoFuncBold): Ditto.
11081        (JSC::stringProtoFuncItalics): Ditto.
11082        (JSC::stringProtoFuncStrike): Ditto.
11083        (JSC::stringProtoFuncSub): Ditto.
11084        (JSC::stringProtoFuncSup): Ditto.
11085        (JSC::stringProtoFuncFontcolor): Ditto.
11086        (JSC::stringProtoFuncFontsize): Make the fast path Sam recently added even faster
11087        by avoiding all but the minimum memory allocation.
11088        (JSC::stringProtoFuncAnchor): Use jsNontrivialString.
11089        (JSC::stringProtoFuncLink): Added a fast path.
11090
11091        * runtime/UString.cpp:
11092        (JSC::UString::find): Added a fast path for single-character search strings.
11093
110942009-02-13  David Levin  <levin@chromium.org>
11095
11096        Reviewed by Darin Adler.
11097
11098        Bug 23926: Race condition in callOnMainThreadAndWait
11099        <https://bugs.webkit.org/show_bug.cgi?id=23926>
11100
11101        * wtf/MainThread.cpp:
11102        Removed callOnMainThreadAndWait since it isn't used.
11103
111042009-02-13  Oliver Hunt  <oliver@apple.com>
11105
11106        Reviewed by Jon Honeycutt.
11107
11108        Math.random is really slow on windows.
11109
11110        Math.random calls WTF::randomNumber which is implemented as
11111        the secure rand_s on windows.  Unfortunately rand_s is an order
11112        of magnitude slower than arc4random.  For this reason I've
11113        added "weakRandomNumber" for use by JavaScript's Math Object.
11114        In the long term we should look at using our own secure PRNG
11115        in place of the system, but this will do for now.
11116
11117        30% win on SunSpider on Windows, resolving most of the remaining
11118        disparity vs. Mac.
11119
11120        * runtime/MathObject.cpp:
11121        (JSC::MathObject::MathObject):
11122        (JSC::mathProtoFuncRandom):
11123        * wtf/RandomNumber.cpp:
11124        (WTF::weakRandomNumber):
11125        (WTF::randomNumber):
11126        * wtf/RandomNumber.h:
11127        * wtf/RandomNumberSeed.h:
11128        (WTF::initializeWeakRandomNumberGenerator):
11129
111302009-02-12  Mark Rowe  <mrowe@apple.com>
11131
11132        Fix the build for other platforms.
11133
11134        * wtf/RandomNumber.cpp:
11135        (WTF::randomNumber):
11136
111372009-02-12  Gavin Barraclough  <barraclough@apple.com>
11138
11139        Reviewed by Sam Weinig.
11140
11141        Remove (/reduce) use of hard-wired register names from the JIT.
11142        Currently there is no abstraction of registers used in the JIT,
11143        which has a number of negative consequences.  Hard-wiring x86
11144        register names makes the JIT less portable to other platforms,
11145        and prevents us from performing dynamic register allocation to
11146        attempt to maintain more temporary values in machine registers.
11147        (The latter will be more important on x86-64, where we have more
11148        registers to make use of).
11149
11150        Also, remove MacroAssembler::mod32.  This was not providing a
11151        useful abstraction, and was not in keeping with the rest of the
11152        MacroAssembler interface, in having specific register requirements.
11153
11154        * assembler/MacroAssemblerX86Common.h:
11155        * jit/JIT.cpp:
11156        (JSC::JIT::compileOpStrictEq):
11157        (JSC::JIT::emitSlowScriptCheck):
11158        (JSC::JIT::privateCompileMainPass):
11159        (JSC::JIT::privateCompileSlowCases):
11160        (JSC::JIT::privateCompile):
11161        (JSC::JIT::privateCompileCTIMachineTrampolines):
11162        * jit/JIT.h:
11163        * jit/JITArithmetic.cpp:
11164        (JSC::JIT::compileFastArith_op_lshift):
11165        (JSC::JIT::compileFastArithSlow_op_lshift):
11166        (JSC::JIT::compileFastArith_op_rshift):
11167        (JSC::JIT::compileFastArithSlow_op_rshift):
11168        (JSC::JIT::compileFastArith_op_bitand):
11169        (JSC::JIT::compileFastArithSlow_op_bitand):
11170        (JSC::JIT::compileFastArith_op_mod):
11171        (JSC::JIT::compileFastArithSlow_op_mod):
11172        (JSC::JIT::compileFastArith_op_post_inc):
11173        (JSC::JIT::compileFastArithSlow_op_post_inc):
11174        (JSC::JIT::compileFastArith_op_post_dec):
11175        (JSC::JIT::compileFastArithSlow_op_post_dec):
11176        (JSC::JIT::compileFastArith_op_pre_inc):
11177        (JSC::JIT::compileFastArithSlow_op_pre_inc):
11178        (JSC::JIT::compileFastArith_op_pre_dec):
11179        (JSC::JIT::compileFastArithSlow_op_pre_dec):
11180        (JSC::JIT::compileFastArith_op_add):
11181        (JSC::JIT::compileFastArith_op_mul):
11182        (JSC::JIT::compileFastArith_op_sub):
11183        (JSC::JIT::compileBinaryArithOp):
11184        * jit/JITCall.cpp:
11185        (JSC::JIT::compileOpCallInitializeCallFrame):
11186        (JSC::JIT::compileOpCallSetupArgs):
11187        (JSC::JIT::compileOpCallEvalSetupArgs):
11188        (JSC::JIT::compileOpConstructSetupArgs):
11189        (JSC::JIT::compileOpCall):
11190        (JSC::JIT::compileOpCallSlowCase):
11191        * jit/JITInlineMethods.h:
11192        (JSC::JIT::emitGetVirtualRegister):
11193        (JSC::JIT::emitPutVirtualRegister):
11194        (JSC::JIT::emitNakedCall):
11195        (JSC::JIT::restoreArgumentReference):
11196        (JSC::JIT::restoreArgumentReferenceForTrampoline):
11197        * jit/JITPropertyAccess.cpp:
11198        (JSC::JIT::compileGetByIdHotPath):
11199        (JSC::JIT::compilePutByIdHotPath):
11200        (JSC::JIT::compileGetByIdSlowCase):
11201        (JSC::JIT::compilePutByIdSlowCase):
11202        (JSC::JIT::privateCompilePutByIdTransition):
11203        (JSC::JIT::privateCompilePatchGetArrayLength):
11204        (JSC::JIT::privateCompileGetByIdSelf):
11205        (JSC::JIT::privateCompileGetByIdProto):
11206        (JSC::JIT::privateCompileGetByIdSelfList):
11207        (JSC::JIT::privateCompileGetByIdProtoList):
11208        (JSC::JIT::privateCompileGetByIdChainList):
11209        (JSC::JIT::privateCompileGetByIdChain):
11210        (JSC::JIT::privateCompilePutByIdReplace):
11211
112122009-02-12  Horia Olaru  <olaru@adobe.com>
11213
11214        Reviewed by Oliver Hunt.
11215
11216        https://bugs.webkit.org/show_bug.cgi?id=23400
11217
11218        When throwing an exception within an eval argument string, the dst parameter was
11219        modified in the functions below and the return value for eval was altered. Changed
11220        the emitNode call in JSC::ThrowNode::emitBytecode to use a temporary register
11221        to store its results instead of dst. The JSC::FunctionCallResolveNode::emitBytecode
11222        would load the function within the dst registry, also altering the result returned
11223        by eval. Replaced it with another temporary.
11224
11225        * parser/Nodes.cpp:
11226        (JSC::FunctionCallResolveNode::emitBytecode):
11227        (JSC::ThrowNode::emitBytecode):
11228
112292009-02-12  Sam Weinig  <sam@webkit.org>
11230
11231        Reviewed by Geoffrey Garen.
11232
11233        Speed up String.prototype.fontsize.
11234
11235        * runtime/StringPrototype.cpp:
11236        (JSC::stringProtoFuncFontsize): Specialize for defined/commonly used values.
11237
112382009-02-12  Geoffrey Garen  <ggaren@apple.com>
11239
11240        Reviewed by Sam Weinig.
11241        
11242        Correctness fix.
11243
11244        * wtf/RandomNumber.cpp:
11245        (WTF::randomNumber): Divide by the maximum representable value, which
11246        is different on each platform now, to get values between 0 and 1.
11247
112482009-02-12  Geoffrey Garen  <ggaren@apple.com>
11249
11250        Build fix.
11251
11252        * wtf/RandomNumber.cpp:
11253        (WTF::randomNumber):
11254
112552009-02-12  Geoffrey Garen  <ggaren@apple.com>
11256
11257        Reviewed by Sam Weinig.
11258        
11259        Fixed <rdar://problem/6582048>.
11260
11261        * wtf/RandomNumber.cpp:
11262        (WTF::randomNumber): Make only one call to the random number generator
11263        on platforms where the generator is cryptographically secure. The value
11264        of randomness over and above cryptographically secure randomness is not
11265        clear, and it caused some performance problems.
11266
112672009-02-12  Adam Roben  <aroben@apple.com>
11268
11269        Fix lots of Perl warnings when building JavaScriptCoreGenerated on
11270        Windows
11271
11272        Reviewed by John Sullivan.
11273
11274        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
11275        Create the docs/ directory so that we can write bytecode.html into it.
11276        This matches what JavaScriptCore.xcodeproj does.
11277
112782009-02-12  Simon Hausmann  <simon.hausmann@nokia.com>
11279
11280        Rubber-stamped by Lars.
11281
11282        Re-enable the JIT in the Qt build with -fno-stack-protector on Linux.
11283
11284        * JavaScriptCore.pri:
11285
112862009-02-11  Dmitry Titov  <dimich@chromium.org>
11287
11288        Reviewed by Alexey Proskuryakov.
11289
11290        https://bugs.webkit.org/show_bug.cgi?id=23705
11291        Fix the UI freeze caused by Worker generating a flood of messages.
11292        Measure time we spend in executing posted work items. If too much time is spent
11293        without returning to the run loop, exit and reschedule.
11294
11295        * wtf/MainThread.h:
11296        Added initializeMainThreadPlatform() to initialize low-level mechanism for posting
11297        work items from thread to thread. This removes #ifdefs for WIN and CHROMIUM from platform-independent code.
11298
11299        * wtf/MainThread.cpp:
11300        (WTF::initializeMainThread):
11301        (WTF::dispatchFunctionsFromMainThread):
11302        Instead of dispatching all work items in the queue, dispatch them one by one
11303        and measure elapsed time. After a threshold, reschedule and quit.
11304
11305        (WTF::callOnMainThread):
11306        (WTF::callOnMainThreadAndWait):
11307        Only schedule dispatch if the queue was empty - to avoid many posted messages in the run loop queue.
11308
11309        * wtf/mac/MainThreadMac.mm:
11310        (WTF::scheduleDispatchFunctionsOnMainThread):
11311        Use static instance of the mainThreadCaller instead of allocating and releasing it each time.
11312        (WTF::initializeMainThreadPlatform):
11313        * wtf/gtk/MainThreadChromium.cpp:
11314        (WTF::initializeMainThreadPlatform):
11315        * wtf/gtk/MainThreadGtk.cpp:
11316        (WTF::initializeMainThreadPlatform):
11317        * wtf/qt/MainThreadQt.cpp:
11318        (WTF::initializeMainThreadPlatform):
11319        * wtf/win/MainThreadWin.cpp:
11320        (WTF::initializeMainThreadPlatform):
11321        * wtf/wx/MainThreadWx.cpp:
11322        (WTF::initializeMainThreadPlatform):
11323
113242009-02-11  Sam Weinig  <sam@webkit.org>
11325
11326        Reviewed by Gavin Barraclough.
11327
11328        Style cleanup.
11329
11330        * assembler/AbstractMacroAssembler.h:
11331        (JSC::AbstractMacroAssembler::CodeLocationCommon::CodeLocationCommon):
11332        (JSC::AbstractMacroAssembler::CodeLocationCommon::operator bool):
11333        (JSC::AbstractMacroAssembler::CodeLocationCommon::reset):
11334        (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForSwitch):
11335        (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForExceptionHandler):
11336        (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForJSR):
11337        (JSC::AbstractMacroAssembler::CodeLocationLabel::getJumpDestination):
11338        (JSC::AbstractMacroAssembler::CodeLocationJump::relink):
11339        (JSC::AbstractMacroAssembler::CodeLocationJump::CodeLocationJump):
11340        (JSC::AbstractMacroAssembler::CodeLocationCall::relink):
11341        (JSC::AbstractMacroAssembler::CodeLocationCall::calleeReturnAddressValue):
11342        (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall):
11343        (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch):
11344        (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::CodeLocationDataLabel32):
11345        (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch):
11346        (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr):
11347        (JSC::AbstractMacroAssembler::ProcessorReturnAddress::ProcessorReturnAddress):
11348        (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction):
11349        (JSC::AbstractMacroAssembler::ProcessorReturnAddress::operator void*):
11350        (JSC::AbstractMacroAssembler::PatchBuffer::link):
11351        (JSC::::CodeLocationCommon::labelAtOffset):
11352        (JSC::::CodeLocationCommon::jumpAtOffset):
11353        (JSC::::CodeLocationCommon::callAtOffset):
11354        (JSC::::CodeLocationCommon::dataLabelPtrAtOffset):
11355        (JSC::::CodeLocationCommon::dataLabel32AtOffset):
11356
113572009-02-11  Sam Weinig  <sam@webkit.org>
11358
11359        Reviewed by Gavin Barraclough.
11360
11361        * assembler/AbstractMacroAssembler.h: Fix comments.
11362
113632009-02-11  Alexey Proskuryakov  <ap@webkit.org>
11364
11365        Trying to fix wx build.
11366
11367        * bytecode/JumpTable.h: Include "MacroAssembler.h", not <MacroAssembler.h>.
11368        * jscore.bkl: Added assembler directory to search paths.
11369
113702009-02-10  Gavin Barraclough  <barraclough@apple.com>
11371
11372        Build
11373        fix.
11374        (Narrow
11375        changelog
11376        for
11377        dhyatt).
11378
11379        * bytecode/Instruction.h:
11380        (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
11381        (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
11382
113832009-02-10  Gavin Barraclough  <barraclough@apple.com>
11384
11385        Reviewed by Oliver Hunt.
11386
11387        Reduce use of void* / reinterpret_cast in JIT repatching code,
11388        add strong types for Calls and for the various types of pointers
11389        we retain into the JIT generated instruction stream.
11390
11391        No performance impact.
11392
11393        * assembler/AbstractMacroAssembler.h:
11394        (JSC::AbstractMacroAssembler::ImmPtr::ImmPtr):
11395        (JSC::AbstractMacroAssembler::ImmPtr::asIntptr):
11396        (JSC::AbstractMacroAssembler::Imm32::Imm32):
11397        (JSC::AbstractMacroAssembler::Label::Label):
11398        (JSC::AbstractMacroAssembler::DataLabelPtr::DataLabelPtr):
11399        (JSC::AbstractMacroAssembler::Call::Call):
11400        (JSC::AbstractMacroAssembler::Call::link):
11401        (JSC::AbstractMacroAssembler::Call::linkTo):
11402        (JSC::AbstractMacroAssembler::Jump::Jump):
11403        (JSC::AbstractMacroAssembler::Jump::linkTo):
11404        (JSC::AbstractMacroAssembler::CodeLocationCommon::CodeLocationCommon):
11405        (JSC::AbstractMacroAssembler::CodeLocationCommon::operator bool):
11406        (JSC::AbstractMacroAssembler::CodeLocationCommon::reset):
11407        (JSC::AbstractMacroAssembler::CodeLocationLabel::CodeLocationLabel):
11408        (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForSwitch):
11409        (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForExceptionHandler):
11410        (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForJSR):
11411        (JSC::AbstractMacroAssembler::CodeLocationLabel::getJumpDestination):
11412        (JSC::AbstractMacroAssembler::CodeLocationJump::CodeLocationJump):
11413        (JSC::AbstractMacroAssembler::CodeLocationJump::relink):
11414        (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall):
11415        (JSC::AbstractMacroAssembler::CodeLocationCall::relink):
11416        (JSC::AbstractMacroAssembler::CodeLocationCall::calleeReturnAddressValue):
11417        (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::CodeLocationDataLabel32):
11418        (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch):
11419        (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr):
11420        (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch):
11421        (JSC::AbstractMacroAssembler::ProcessorReturnAddress::ProcessorReturnAddress):
11422        (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction):
11423        (JSC::AbstractMacroAssembler::ProcessorReturnAddress::operator void*):
11424        (JSC::AbstractMacroAssembler::PatchBuffer::entry):
11425        (JSC::AbstractMacroAssembler::PatchBuffer::trampolineAt):
11426        (JSC::AbstractMacroAssembler::PatchBuffer::link):
11427        (JSC::AbstractMacroAssembler::PatchBuffer::linkTailRecursive):
11428        (JSC::AbstractMacroAssembler::PatchBuffer::patch):
11429        (JSC::AbstractMacroAssembler::PatchBuffer::locationOf):
11430        (JSC::AbstractMacroAssembler::PatchBuffer::returnAddressOffset):
11431        (JSC::AbstractMacroAssembler::differenceBetween):
11432        (JSC::::CodeLocationCommon::labelAtOffset):
11433        (JSC::::CodeLocationCommon::jumpAtOffset):
11434        (JSC::::CodeLocationCommon::callAtOffset):
11435        (JSC::::CodeLocationCommon::dataLabelPtrAtOffset):
11436        (JSC::::CodeLocationCommon::dataLabel32AtOffset):
11437        * assembler/MacroAssemblerX86Common.h:
11438        (JSC::MacroAssemblerX86Common::call):
11439        * assembler/X86Assembler.h:
11440        (JSC::X86Assembler::getCallReturnOffset):
11441        * bytecode/CodeBlock.h:
11442        (JSC::CallLinkInfo::CallLinkInfo):
11443        (JSC::getStructureStubInfoReturnLocation):
11444        (JSC::getCallLinkInfoReturnLocation):
11445        * bytecode/Instruction.h:
11446        (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
11447        (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
11448        * bytecode/JumpTable.h:
11449        (JSC::StringJumpTable::ctiForValue):
11450        (JSC::SimpleJumpTable::ctiForValue):
11451        * bytecode/StructureStubInfo.h:
11452        (JSC::StructureStubInfo::StructureStubInfo):
11453        * bytecompiler/BytecodeGenerator.cpp:
11454        (JSC::BytecodeGenerator::emitCatch):
11455        (JSC::prepareJumpTableForStringSwitch):
11456        * interpreter/Interpreter.cpp:
11457        (JSC::Interpreter::cti_op_get_by_id_self_fail):
11458        (JSC::getPolymorphicAccessStructureListSlot):
11459        (JSC::Interpreter::cti_op_throw):
11460        (JSC::Interpreter::cti_op_switch_imm):
11461        (JSC::Interpreter::cti_op_switch_char):
11462        (JSC::Interpreter::cti_op_switch_string):
11463        (JSC::Interpreter::cti_vm_throw):
11464        * jit/JIT.cpp:
11465        (JSC::ctiSetReturnAddress):
11466        (JSC::ctiPatchCallByReturnAddress):
11467        (JSC::JIT::privateCompile):
11468        (JSC::JIT::privateCompileCTIMachineTrampolines):
11469        * jit/JIT.h:
11470        (JSC::CallRecord::CallRecord):
11471        (JSC::JIT::compileGetByIdSelf):
11472        (JSC::JIT::compileGetByIdProto):
11473        (JSC::JIT::compileGetByIdChain):
11474        (JSC::JIT::compilePutByIdReplace):
11475        (JSC::JIT::compilePutByIdTransition):
11476        (JSC::JIT::compilePatchGetArrayLength):
11477        (JSC::JIT::emitCTICall):
11478        * jit/JITCall.cpp:
11479        (JSC::JIT::unlinkCall):
11480        (JSC::JIT::linkCall):
11481        * jit/JITInlineMethods.h:
11482        (JSC::JIT::emitNakedCall):
11483        (JSC::JIT::emitCTICall_internal):
11484        * jit/JITPropertyAccess.cpp:
11485        (JSC::JIT::compileGetByIdSlowCase):
11486        (JSC::JIT::compilePutByIdSlowCase):
11487        (JSC::JIT::privateCompilePutByIdTransition):
11488        (JSC::JIT::patchGetByIdSelf):
11489        (JSC::JIT::patchPutByIdReplace):
11490        (JSC::JIT::privateCompilePatchGetArrayLength):
11491        (JSC::JIT::privateCompileGetByIdSelf):
11492        (JSC::JIT::privateCompileGetByIdProto):
11493        (JSC::JIT::privateCompileGetByIdSelfList):
11494        (JSC::JIT::privateCompileGetByIdProtoList):
11495        (JSC::JIT::privateCompileGetByIdChainList):
11496        (JSC::JIT::privateCompileGetByIdChain):
11497        (JSC::JIT::privateCompilePutByIdReplace):
11498
114992009-02-10  Adam Roben  <aroben@apple.com>
11500
11501        Windows build fix after r40813
11502
11503        * JavaScriptCore.vcproj/jsc/jsc.vcproj: Added profiler/ to the include
11504        path so that Profiler.h can be found.
11505
115062009-02-09  Gavin Barraclough  <barraclough@apple.com>
11507
11508        Reviewed by Oliver Hunt.
11509
11510        Provide a class type for a generated block of JIT code.
11511        Also changes the return address -> bytecode index map to
11512        track the return addess as an unsigned offset into the code
11513        instead of a ptrdiff_t in terms of void**s - the latter is
11514        equal to the actual offset / sizeof(void*), making it a
11515        potentially lossy representation.
11516
11517        * JavaScriptCore.xcodeproj/project.pbxproj:
11518        * assembler/AbstractMacroAssembler.h:
11519        (JSC::AbstractMacroAssembler::PatchBuffer::returnAddressOffset):
11520        * assembler/X86Assembler.h:
11521        (JSC::X86Assembler::getCallReturnOffset):
11522        * bytecode/CodeBlock.h:
11523        (JSC::CallReturnOffsetToBytecodeIndex::CallReturnOffsetToBytecodeIndex):
11524        (JSC::getCallReturnOffset):
11525        (JSC::CodeBlock::getBytecodeIndex):
11526        (JSC::CodeBlock::jitCode):
11527        (JSC::CodeBlock::callReturnIndexVector):
11528        * interpreter/Interpreter.cpp:
11529        (JSC::Interpreter::execute):
11530        (JSC::Interpreter::cti_vm_dontLazyLinkCall):
11531        (JSC::Interpreter::cti_vm_lazyLinkCall):
11532        * jit/JIT.cpp:
11533        (JSC::JIT::privateCompile):
11534        * jit/JIT.h:
11535        (JSC::):
11536        * jit/JITCall.cpp:
11537        (JSC::JIT::linkCall):
11538        * jit/JITCode.h: Added.
11539        (JSC::):
11540        (JSC::JITCode::JITCode):
11541        (JSC::JITCode::operator bool):
11542        (JSC::JITCode::addressForCall):
11543        (JSC::JITCode::offsetOf):
11544        (JSC::JITCode::execute):
11545
115462009-02-09  John Grabowski  <jrg@chromium.org>
11547
11548        Reviewed by Darin Adler.
11549
11550        https://bugs.webkit.org/show_bug.cgi?id=23856
11551        Change the definition of "main thread" for Chromium on OSX.
11552        It does not match the DARWIN definition.
11553
11554        * wtf/ThreadingPthreads.cpp:
11555        (WTF::initializeThreading):
11556        (WTF::isMainThread):
11557
115582009-02-09  Gavin Barraclough  <barraclough@apple.com>
11559
11560        Reviewed by Oliver Hunt.
11561
11562        Minor bugfix, incorrect check meant that subtraction causing integer overflow
11563        would be missed on x86-64 JIT.
11564
11565        * jit/JITArithmetic.cpp:
11566        (JSC::JIT::compileBinaryArithOp):
11567
115682009-02-09  Gavin Barraclough  <barraclough@apple.com>
11569
11570        Reviewed by Oliver Hunt.
11571
11572        A more sensible register allocation for x86-64.
11573
11574        When WREC was ported to x86-64 it stuck with the same register allocation as x86.
11575        This requires registers to be reordered on entry into WREC generated code, since
11576        argument passing is different on x86-64 and x86 (regparm(3)).  This patch switches
11577        x86-64 to use a native register allocation, that does not require argument registers
11578        to be reordered.
11579
11580        * wrec/WRECGenerator.cpp:
11581        (JSC::WREC::Generator::generateEnter):
11582        (JSC::WREC::Generator::generateReturnSuccess):
11583        (JSC::WREC::Generator::generateReturnFailure):
11584        * wrec/WRECGenerator.h:
11585
115862009-02-05  Adam Roben  <aroben@apple.com>
11587
11588        Build fix
11589
11590        Rubberstamped by Sam Weinig.
11591
11592        * wtf/TypeTraits.h: Include Platform.h, since this header uses macros
11593        defined there.
11594
115952009-02-05  Dimitri Glazkov  <dglazkov@chromium.org>
11596
11597        Reviewed by Eric Seidel.
11598
11599        https://bugs.webkit.org/show_bug.cgi?id=23747
11600        Add Chromium threading-related files.
11601
11602        * wtf/MainThread.cpp: Added platform guard to initializeMainThread.
11603        * wtf/chromium/ChromiumThreading.h: Added.
11604        * wtf/chromium/MainThreadChromium.cpp: Added.
11605        (WTF::initializeMainThread):
11606        (WTF::scheduleDispatchFunctionsOnMainThread):
11607
116082009-02-05  David Levin  <levin@chromium.org>
11609
11610        Reviewed by Darin Adler.
11611
11612        Bug 23713: COMPILE_ASSERTS should be moved out of TypeTraits.h and into .cpp file
11613        <https://bugs.webkit.org/show_bug.cgi?id=23713>
11614
11615        * GNUmakefile.am:
11616        * JavaScriptCore.pri:
11617        * JavaScriptCore.scons:
11618        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
11619        * JavaScriptCore.xcodeproj/project.pbxproj:
11620        * JavaScriptCoreSources.bkl:
11621
11622        * wtf/HashTraits.h:
11623        Remove unnecessary header file that I missed when moving out the type traits form this file.
11624
11625        * wtf/TypeTraits.cpp: Added.
11626        (WTF::):
11627        * wtf/TypeTraits.h:
11628        Moved the compile asserts into TypeTraits.cpp file.
11629
116302009-02-04  Gavin Barraclough  <barraclough@apple.com>
11631
11632        Reviewed by Oliver 'the nun' Hunt.
11633
11634        Add -e switch to jsc to enable evaluation of scripts passed on the command line.
11635
11636        * jsc.cpp:
11637        (Script::Script):
11638        (runWithScripts):
11639        (printUsageStatement):
11640        (parseArguments):
11641        (jscmain):
11642
116432009-02-04  Gavin Barraclough  <barraclough@apple.com>
11644
11645        Rubber stamped by Sam 'Big Mac' Weinig.
11646
11647        * assembler/AbstractMacroAssembler.h: Copied from assembler/MacroAssembler.h.
11648        * assembler/MacroAssemblerX86.h: Copied from assembler/MacroAssembler.h.
11649        * assembler/MacroAssemblerX86Common.h: Copied from assembler/MacroAssembler.h.
11650        * assembler/MacroAssemblerX86_64.h: Copied from assembler/MacroAssembler.h.
11651
116522009-02-04  Gavin Barraclough  <barraclough@apple.com>
11653
11654        Reviewed by Sam Weinig.
11655
11656        This patch tidies up the MacroAssembler, cleaning up the code and refactoring out the
11657        platform-specific parts.  The MacroAssembler gets split up like a beef burger, with the
11658        platform-agnostic data types being the lower bun (in the form of the class AbstractMacroAssembler),
11659        the plaform-specific code generation forming a big meaty patty of methods like 'add32',
11660        'branch32', etc (MacroAssemblerX86), and finally topped off with the bun-lid of the
11661        MacroAssembler class itself, providing covenience methods such as the stack peek & poke,
11662        and backwards branch methods, all of which can be described in a platform independent
11663        way using methods from the base class.  The AbstractMacroAssembler is templated on the
11664        type of the assembler class that will be used for code generation, and the three layers
11665        are held together with the cocktail stick of inheritance.
11666
11667        The above description is a slight simplification since the MacroAssemblerX86 is actually
11668        formed from two layers (in effect giving us a kind on bacon double cheeseburger) - with the
11669        bulk of methods that are common between x86 & x86-64 implemented in MacroAssemblerX86Common,
11670        which forms a base class for MacroAssemblerX86 and MacroAssemblerX86_64 (which add the methods
11671        specific to the given platform).
11672
11673        I'm landing these changes first without splitting the classes across multiple files,
11674        I will follow up with a second patch to split up the file MacroAssembler.h.
11675
11676        * assembler/MacroAssembler.h:
11677        (JSC::AbstractMacroAssembler::):
11678        (JSC::AbstractMacroAssembler::DataLabelPtr::DataLabelPtr):
11679        (JSC::AbstractMacroAssembler::DataLabelPtr::patch):
11680        (JSC::AbstractMacroAssembler::DataLabel32::DataLabel32):
11681        (JSC::AbstractMacroAssembler::DataLabel32::patch):
11682        (JSC::AbstractMacroAssembler::Label::Label):
11683        (JSC::AbstractMacroAssembler::Jump::Jump):
11684        (JSC::AbstractMacroAssembler::Jump::link):
11685        (JSC::AbstractMacroAssembler::Jump::linkTo):
11686        (JSC::AbstractMacroAssembler::Jump::patch):
11687        (JSC::AbstractMacroAssembler::JumpList::link):
11688        (JSC::AbstractMacroAssembler::JumpList::linkTo):
11689        (JSC::AbstractMacroAssembler::PatchBuffer::link):
11690        (JSC::AbstractMacroAssembler::PatchBuffer::addressOf):
11691        (JSC::AbstractMacroAssembler::PatchBuffer::setPtr):
11692        (JSC::AbstractMacroAssembler::size):
11693        (JSC::AbstractMacroAssembler::copyCode):
11694        (JSC::AbstractMacroAssembler::label):
11695        (JSC::AbstractMacroAssembler::align):
11696        (JSC::AbstractMacroAssembler::differenceBetween):
11697        (JSC::MacroAssemblerX86Common::xor32):
11698        (JSC::MacroAssemblerX86Common::load32WithAddressOffsetPatch):
11699        (JSC::MacroAssemblerX86Common::store32WithAddressOffsetPatch):
11700        (JSC::MacroAssemblerX86Common::move):
11701        (JSC::MacroAssemblerX86Common::swap):
11702        (JSC::MacroAssemblerX86Common::signExtend32ToPtr):
11703        (JSC::MacroAssemblerX86Common::zeroExtend32ToPtr):
11704        (JSC::MacroAssemblerX86Common::branch32):
11705        (JSC::MacroAssemblerX86Common::jump):
11706        (JSC::MacroAssemblerX86_64::add32):
11707        (JSC::MacroAssemblerX86_64::sub32):
11708        (JSC::MacroAssemblerX86_64::load32):
11709        (JSC::MacroAssemblerX86_64::store32):
11710        (JSC::MacroAssemblerX86_64::addPtr):
11711        (JSC::MacroAssemblerX86_64::andPtr):
11712        (JSC::MacroAssemblerX86_64::orPtr):
11713        (JSC::MacroAssemblerX86_64::rshiftPtr):
11714        (JSC::MacroAssemblerX86_64::subPtr):
11715        (JSC::MacroAssemblerX86_64::xorPtr):
11716        (JSC::MacroAssemblerX86_64::loadPtr):
11717        (JSC::MacroAssemblerX86_64::loadPtrWithAddressOffsetPatch):
11718        (JSC::MacroAssemblerX86_64::storePtr):
11719        (JSC::MacroAssemblerX86_64::storePtrWithAddressOffsetPatch):
11720        (JSC::MacroAssemblerX86_64::branchPtr):
11721        (JSC::MacroAssemblerX86_64::branchTestPtr):
11722        (JSC::MacroAssemblerX86_64::branchAddPtr):
11723        (JSC::MacroAssemblerX86_64::branchSubPtr):
11724        (JSC::MacroAssemblerX86_64::branchPtrWithPatch):
11725        (JSC::MacroAssemblerX86_64::storePtrWithPatch):
11726        (JSC::MacroAssemblerX86::add32):
11727        (JSC::MacroAssemblerX86::sub32):
11728        (JSC::MacroAssemblerX86::load32):
11729        (JSC::MacroAssemblerX86::store32):
11730        (JSC::MacroAssemblerX86::branch32):
11731        (JSC::MacroAssemblerX86::branchPtrWithPatch):
11732        (JSC::MacroAssemblerX86::storePtrWithPatch):
11733        (JSC::MacroAssembler::pop):
11734        (JSC::MacroAssembler::peek):
11735        (JSC::MacroAssembler::poke):
11736        (JSC::MacroAssembler::branchPtr):
11737        (JSC::MacroAssembler::branch32):
11738        (JSC::MacroAssembler::branch16):
11739        (JSC::MacroAssembler::branchTestPtr):
11740        (JSC::MacroAssembler::addPtr):
11741        (JSC::MacroAssembler::andPtr):
11742        (JSC::MacroAssembler::orPtr):
11743        (JSC::MacroAssembler::rshiftPtr):
11744        (JSC::MacroAssembler::subPtr):
11745        (JSC::MacroAssembler::xorPtr):
11746        (JSC::MacroAssembler::loadPtr):
11747        (JSC::MacroAssembler::loadPtrWithAddressOffsetPatch):
11748        (JSC::MacroAssembler::storePtr):
11749        (JSC::MacroAssembler::storePtrWithAddressOffsetPatch):
11750        (JSC::MacroAssembler::branchAddPtr):
11751        (JSC::MacroAssembler::branchSubPtr):
11752        * jit/JITArithmetic.cpp:
11753        (JSC::JIT::compileBinaryArithOp):
11754
117552009-02-04  Alexey Proskuryakov  <ap@webkit.org>
11756
11757        Reviewed by Sam Weinig.
11758
11759        https://bugs.webkit.org/show_bug.cgi?id=23681
11760        Worker tests crash in debug builds if run --singly
11761
11762        The crash happened because worker threads continued running while debug-only static objects
11763        were already being destroyed on main thread.
11764
11765        * runtime/Structure.cpp: Create static debug-only sets in heap, so that they don't get
11766        destroyed.
11767
11768        * wtf/ThreadingPthreads.cpp: Changed assertions to conventional form.
11769
117702009-02-03  Gavin Barraclough  <barraclough@apple.com>
11771
11772        Reviewed by Geoff Garen.
11773
11774        https://bugs.webkit.org/show_bug.cgi?id=23715
11775
11776        Simplify MacroAssembler interface, by combining comparison methods.
11777        Seprate operations are combined as follows:
11778            jz32/jnz32/jzPtr/jnzPtr -> branchTest32/branchTestPtr,
11779            j*(Add|Mul|Sub)32/j*(Add|Mul|Sub)Ptr -> branch(Add|Mul|Sub)32/branch(Add|Mul|Sub)Ptr
11780            j*32/j*Ptr (all other two op combparisons) -> branch32/brnachPtr
11781            set*32 -> set32
11782
11783        Also, represent the Scale of BaseIndex addresses as a plain enum (0,1,2,3),
11784        instead of as multiplicands (1,2,4,8).
11785
11786        This patch singificantly reduces replication of code, and increases functionality supported
11787        by the MacroAssembler.  No performance impact.
11788
11789        * assembler/MacroAssembler.h:
11790        (JSC::MacroAssembler::):
11791        (JSC::MacroAssembler::branchPtr):
11792        (JSC::MacroAssembler::branchPtrWithPatch):
11793        (JSC::MacroAssembler::branch32):
11794        (JSC::MacroAssembler::branch16):
11795        (JSC::MacroAssembler::branchTestPtr):
11796        (JSC::MacroAssembler::branchTest32):
11797        (JSC::MacroAssembler::branchAddPtr):
11798        (JSC::MacroAssembler::branchAdd32):
11799        (JSC::MacroAssembler::branchMul32):
11800        (JSC::MacroAssembler::branchSubPtr):
11801        (JSC::MacroAssembler::branchSub32):
11802        (JSC::MacroAssembler::set32):
11803        (JSC::MacroAssembler::setTest32):
11804        * assembler/X86Assembler.h:
11805        (JSC::X86Assembler::):
11806        (JSC::X86Assembler::jccRel32):
11807        (JSC::X86Assembler::setccOpcode):
11808        (JSC::X86Assembler::cmpq_mr):
11809        (JSC::X86Assembler::setcc_r):
11810        (JSC::X86Assembler::sete_r):
11811        (JSC::X86Assembler::setne_r):
11812        (JSC::X86Assembler::jne):
11813        (JSC::X86Assembler::je):
11814        (JSC::X86Assembler::jl):
11815        (JSC::X86Assembler::jb):
11816        (JSC::X86Assembler::jle):
11817        (JSC::X86Assembler::jbe):
11818        (JSC::X86Assembler::jge):
11819        (JSC::X86Assembler::jg):
11820        (JSC::X86Assembler::ja):
11821        (JSC::X86Assembler::jae):
11822        (JSC::X86Assembler::jo):
11823        (JSC::X86Assembler::jp):
11824        (JSC::X86Assembler::js):
11825        (JSC::X86Assembler::jcc):
11826        (JSC::X86Assembler::X86InstructionFormatter::putModRmSib):
11827        * jit/JIT.cpp:
11828        (JSC::JIT::compileOpStrictEq):
11829        (JSC::JIT::emitSlowScriptCheck):
11830        (JSC::JIT::privateCompileMainPass):
11831        (JSC::JIT::privateCompileSlowCases):
11832        (JSC::JIT::privateCompile):
11833        (JSC::JIT::privateCompileCTIMachineTrampolines):
11834        * jit/JITArithmetic.cpp:
11835        (JSC::JIT::compileFastArith_op_lshift):
11836        (JSC::JIT::compileFastArith_op_mod):
11837        (JSC::JIT::compileFastArith_op_post_inc):
11838        (JSC::JIT::compileFastArith_op_post_dec):
11839        (JSC::JIT::compileFastArith_op_pre_inc):
11840        (JSC::JIT::compileFastArith_op_pre_dec):
11841        (JSC::JIT::compileBinaryArithOp):
11842        (JSC::JIT::compileFastArith_op_add):
11843        (JSC::JIT::compileFastArith_op_mul):
11844        * jit/JITCall.cpp:
11845        (JSC::JIT::compileOpCall):
11846        (JSC::JIT::compileOpCallSlowCase):
11847        * jit/JITInlineMethods.h:
11848        (JSC::JIT::checkStructure):
11849        (JSC::JIT::emitJumpIfJSCell):
11850        (JSC::JIT::emitJumpIfNotJSCell):
11851        (JSC::JIT::emitJumpIfImmediateNumber):
11852        (JSC::JIT::emitJumpIfNotImmediateNumber):
11853        (JSC::JIT::emitJumpIfImmediateInteger):
11854        (JSC::JIT::emitJumpIfNotImmediateInteger):
11855        (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
11856        * jit/JITPropertyAccess.cpp:
11857        (JSC::JIT::compileGetByIdHotPath):
11858        (JSC::JIT::compilePutByIdHotPath):
11859        (JSC::JIT::privateCompilePutByIdTransition):
11860        (JSC::JIT::privateCompilePatchGetArrayLength):
11861        (JSC::JIT::privateCompileGetByIdProto):
11862        (JSC::JIT::privateCompileGetByIdProtoList):
11863        (JSC::JIT::privateCompileGetByIdChainList):
11864        (JSC::JIT::privateCompileGetByIdChain):
11865        * runtime/RegExp.cpp:
11866        (JSC::RegExp::match):
11867        * wrec/WRECGenerator.cpp:
11868        (JSC::WREC::Generator::generateEnter):
11869        (JSC::WREC::Generator::generateIncrementIndex):
11870        (JSC::WREC::Generator::generateLoadCharacter):
11871        (JSC::WREC::Generator::generateJumpIfNotEndOfInput):
11872        (JSC::WREC::Generator::generateBackreferenceQuantifier):
11873        (JSC::WREC::Generator::generateNonGreedyQuantifier):
11874        (JSC::WREC::Generator::generateGreedyQuantifier):
11875        (JSC::WREC::Generator::generatePatternCharacterPair):
11876        (JSC::WREC::Generator::generatePatternCharacter):
11877        (JSC::WREC::Generator::generateCharacterClassInvertedRange):
11878        (JSC::WREC::Generator::generateCharacterClassInverted):
11879        (JSC::WREC::Generator::generateAssertionBOL):
11880        (JSC::WREC::Generator::generateAssertionEOL):
11881        (JSC::WREC::Generator::generateAssertionWordBoundary):
11882        (JSC::WREC::Generator::generateBackreference):
11883
118842009-02-03  David Hyatt  <hyatt@apple.com>
11885
11886        Fix a bug in Vector's shrinkCapacity method.  It did not properly copy elements into the inline buffer
11887        when shrinking down from a size that was greater than the inline capacity.
11888
11889        Reviewed by Maciej
11890
11891        * wtf/Vector.h:
11892        (WTF::VectorBuffer::VectorBuffer):
11893        (WTF::VectorBuffer::allocateBuffer):
11894
118952009-02-03  Simon Hausmann  <simon.hausmann@nokia.com>
11896
11897        Reviewed by Tor Arne Vestbø.
11898
11899        Added accessor for JSByteArray storage.
11900
11901        * runtime/JSByteArray.h:
11902        (JSC::JSByteArray::storage):
11903
119042009-02-03  Dmitry Titov  <dimich@chromium.org>
11905
11906        Reviewed by Alexey Proskuryakov.
11907
11908        https://bugs.webkit.org/show_bug.cgi?id=23560
11909        Implement SharedTimer on WorkerRunLoop
11910
11911        * JavaScriptCore.exp:
11912        Forgot to expose ThreadCondition::timedWait() in one of previous patches.
11913
119142009-02-02  Oliver Hunt  <oliver@apple.com>
11915
11916        Reviewed by Gavin Barraclough.
11917
11918        <https://bugs.webkit.org/show_bug.cgi?id=21414> REGRESSION: Regular Expressions and character classes, shorthands and ranges
11919        <rdar://problem/6543487>
11920
11921        In certain circumstances when WREC::Generator::generateCharacterClassInvertedRange invokes
11922        itself recursively, it will incorrectly emit (and thus consume) the next single character
11923        match in the current character class.  As WREC uses a binary search this out of sequence
11924        codegen could result in a character match being missed and so cause the regex to produce
11925        incorrect results.
11926
11927        * wrec/WRECGenerator.cpp:
11928        (JSC::WREC::Generator::generateCharacterClassInvertedRange):
11929
119302009-02-02  Darin Adler  <darin@apple.com>
11931
11932        Reviewed by Dave Hyatt.
11933
11934        Bug 23676: Speed up uses of reserveCapacity on new vectors by adding a new reserveInitialCapacity
11935        https://bugs.webkit.org/show_bug.cgi?id=23676
11936
11937        * API/JSObjectRef.cpp:
11938        (JSObjectCopyPropertyNames): Use reserveInitialCapacity.
11939        * parser/Lexer.cpp:
11940        (JSC::Lexer::Lexer): Ditto.
11941        (JSC::Lexer::clear): Ditto.
11942
11943        * wtf/Vector.h: Added reserveInitialCapacity, a more efficient version of
11944        reserveCapacity for use when the vector is brand new (still size 0 with no
11945        capacity other than the inline capacity).
11946
119472009-01-30  Mark Rowe  <mrowe@apple.com>
11948
11949        Rubber-stamped by Oliver Hunt.
11950
11951        <rdar://problem/6391501> Enable the JIT on Mac OS X x86_64 as it passes all tests.
11952
11953        * wtf/Platform.h:
11954
119552009-01-30  Oliver Hunt  <oliver@apple.com>
11956
11957        Reviewed by Mark Rowe and Sam Weinig.
11958
11959        Finally fix load() to propagate exceptions correctly.
11960
11961        * jsc.cpp:
11962        (functionLoad):
11963
119642009-01-30  David Levin  <levin@chromium.org>
11965
11966        Reviewed by Darin Adler.
11967
11968        https://bugs.webkit.org/show_bug.cgi?id=23618
11969        Templated worker tasks should be more error proof to use.
11970        Fix Chromium build.
11971
11972        * wtf/TypeTraits.h:
11973        (WTF::IsConvertibleToInteger::IsConvertibleToDouble):
11974        Avoid "possible loss of data" warning when using Microsoft's C++ compiler
11975        by avoiding an implicit conversion of int types to doubles.
11976
119772009-01-30  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
11978
11979        Reviewed by Simon Hausmann.
11980
11981        Bug 23580: GNU mode RVCT compilation support
11982        <https://bugs.webkit.org/show_bug.cgi?id=23580>
11983
11984        * pcre/pcre_exec.cpp: Use COMPILER(GCC) instead of __GNUC__.
11985        * wtf/FastMalloc.cpp: Ditto.
11986        (WTF::TCMallocStats::):
11987        * wtf/Platform.h: Don't define COMPILER(GCC) with RVCT --gnu.
11988
119892009-01-30  David Levin  <levin@chromium.org>
11990
11991        Reviewed by Alexey Proskuryakov.
11992
11993        Bug 23618: Templated worker tasks should be more error proof to use
11994        <https://bugs.webkit.org/show_bug.cgi?id=23618>
11995
11996        Add the type traits needed for the generic worker tasks
11997        and compile asserts for them.
11998
11999        Add a summary header to the TypeTraits.h file to explain what is in there.
12000
12001        Add a note to explain IsPod's deficiencies.
12002
12003        * wtf/TypeTraits.h:
12004
120052009-01-30  David Levin  <levin@chromium.org>
12006
12007        Reviewed by Alexey Proskuryakov.
12008
12009        Bug 23616: Various "template helpers" should be consolidated from isolated files in JavaScriptCore.
12010        <https://bugs.webkit.org/show_bug.cgi?id=23616>
12011
12012        * wtf/TypeTraits.h: Moved RemovePointer, IsPod, IsInteger to this file.
12013
12014        * wtf/OwnPtr.h: Use RemovePointer from TypeTraits.h.
12015        * wtf/RetainPtr.h:  Ditto.
12016
12017        * wtf/HashTraits.h: Use IsInteger from TypeTraits.h.
12018
12019        * wtf/VectorTraits.h: Use IsPod from TypeTraits.h.
12020
12021        * GNUmakefile.am:
12022        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
12023        * JavaScriptCore.xcodeproj/project.pbxproj:
12024        Added TypeTraits.h.
12025
120262009-01-29  Stephanie Lewis <slewis@apple.com>
12027
12028        RS by Oliver Hunt.
12029
12030        Update the order files.
12031
12032        * JavaScriptCore.order:
12033
120342009-01-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
12035
12036        Reviewed by Oliver Hunt.
12037
12038        Bug 23551: Crash on page load with profiler enabled and running
12039        <https://bugs.webkit.org/show_bug.cgi?id=23551>
12040        <rdar://problem/6529521>
12041
12042        Interpreter::execute(FunctionBodyNode*, ...) calls Profiler::didExecute()
12043        with a stale CallFrame. If some part of the scope chain has already been
12044        freed, Profiler::didExecute() will crash when attempting to get the lexical
12045        global object. The fix is to make the didExecute() call use the caller's
12046        CallFrame, not the one made for the function call. In this case, the
12047        willExecute() call should also be changed to match.
12048
12049        Since this occurs in the actual inspector JS, it is difficult to reduce.
12050        I couldn't make a layout test.
12051
12052        * interpreter/Interpreter.cpp:
12053        (JSC::Interpreter::execute):
12054
120552009-01-28  Sam Weinig  <sam@webkit.org>
12056
12057        Reviewed by Gavin Barraclough.
12058
12059        Fix for <rdar://problem/6525537>
12060        Hang occurs when closing Installer window (iTunes, Aperture)
12061
12062        * JavaScriptCore.exp: Export JSGlobalData::sharedInstance.
12063
120642009-01-28  Sam Weinig  <sam@webkit.org>
12065
12066        Reviewed by Geoff Garen.
12067
12068        Initial patch by Mark Rowe.
12069
12070        <rdar://problem/6519356>
12071        REGRESSION (r36006): "out of memory" alert running dromaeo on Windows
12072
12073        Report the cost of the ArrayStorage vector more accurately/often.
12074
12075        * runtime/JSArray.cpp:
12076        (JSC::JSArray::JSArray): Report the extra cost even for a filled array
12077        because JSString using the single character optimization and immediates
12078        wont increase the cost themselves. 
12079        (JSC::JSArray::putSlowCase): Update the cost when increasing the size of
12080        the array.
12081        (JSC::JSArray::increaseVectorLength): Ditto.
12082
120832009-01-28  Sam Weinig  <sam@webkit.org>
12084
12085        Reviewed by Geoff Garen.
12086
12087        Fix for <rdar://problem/6129678>
12088        REGRESSION (Safari 3-4): Local variable not accessible from Dashcode console or variables view
12089
12090        Iterating the properties of activation objects accessed through the WebKit debugging
12091        APIs was broken by forced conversion of JSActivation to the global object. To fix this,
12092        we use a proxy activation object that acts more like a normal JSObject.
12093
12094        * debugger/DebuggerActivation.cpp: Added.
12095        (JSC::DebuggerActivation::DebuggerActivation):
12096        (JSC::DebuggerActivation::mark):
12097        (JSC::DebuggerActivation::className):
12098        (JSC::DebuggerActivation::getOwnPropertySlot):
12099        (JSC::DebuggerActivation::put):
12100        (JSC::DebuggerActivation::putWithAttributes):
12101        (JSC::DebuggerActivation::deleteProperty):
12102        (JSC::DebuggerActivation::getPropertyNames):
12103        (JSC::DebuggerActivation::getPropertyAttributes):
12104        (JSC::DebuggerActivation::defineGetter):
12105        (JSC::DebuggerActivation::defineSetter):
12106        (JSC::DebuggerActivation::lookupGetter):
12107        (JSC::DebuggerActivation::lookupSetter):
12108        * debugger/DebuggerActivation.h: Added.
12109        Proxy JSActivation object for Debugging.
12110
12111        * runtime/JSActivation.h:
12112        (JSC::JSActivation::isActivationObject): Added.
12113        * runtime/JSObject.h:
12114        (JSC::JSObject::isActivationObject): Added.
12115
121162009-01-28  David Kilzer  <ddkilzer@apple.com>
12117
12118        Bug 23490: Remove initialRefCount argument from RefCounted class
12119
12120        <https://bugs.webkit.org/show_bug.cgi?id=23490>
12121
12122        Reviewed by Darin Adler.
12123
12124        RefCountedBase now always starts with a ref count of 1, so there
12125        is no need to pass the initialRefCount into the class anymore.
12126
12127        * wtf/ByteArray.h:
12128        (WTF::ByteArray::ByteArray): Removed call to RefCounted(1).
12129        * wtf/RefCounted.h:
12130        (WTF::RefCountedBase::RefCountedBase): Changed to start with a
12131        ref count of 1.
12132        (WTF::RefCounted::RefCounted): Removed initialRefCount argument
12133        and removed call to RefCounted(1).
12134
121352009-01-26  Adele Peterson  <adele@apple.com>
12136
12137        Build fix.  
12138
12139        * debugger/Debugger.cpp:
12140
121412009-01-26  Gavin Barraclough  <barraclough@apple.com>
12142
12143        Reviewed by Darin Adler.
12144
12145        Fixes for eq null & neq null, on 64-bit JIT.
12146        https://bugs.webkit.org/show_bug.cgi?id=23559
12147
12148        This patch degrades 64-bit JIT performance on some benchmarks,
12149        due to the whole not-being-incorrect thing.
12150
12151        * jit/JIT.cpp:
12152        (JSC::JIT::privateCompileMainPass):
12153
121542009-01-26  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
12155
12156        Reviewed by Gavin Barraclough.
12157
12158        Bug 23552: Dashcode evaluator no longer works after making ExecStates actual call frames
12159        <https://bugs.webkit.org/show_bug.cgi?id=23552>
12160        <rdar://problem/6398839>
12161
12162        * JavaScriptCore.exp:
12163        * debugger/Debugger.cpp:
12164        (JSC::evaluateInGlobalCallFrame): Added so that WebScriptCallFrame can
12165        evaluate JS starting from a global call frame.
12166        * debugger/Debugger.h:
12167
121682009-01-25  Mark Rowe  <mrowe@apple.com>
12169
12170        Rubber-stamped by Dan Bernstein.
12171
12172        Improve the consistency of settings in our .xcconfig files.
12173
12174        * Configurations/Base.xcconfig: Enable GCC_OBJC_CALL_CXX_CDTORS to match other projects.
12175
121762009-01-25  Darin Adler  <darin@apple.com>
12177
12178        Reviewed by Mark Rowe.
12179
12180        Bug 23352: Turn on more compiler warnings in the Mac build
12181        https://bugs.webkit.org/show_bug.cgi?id=23352
12182
12183        Turn on the following warnings:
12184
12185            -Wcast-qual
12186            -Wextra-tokens
12187            -Wformat=2
12188            -Winit-self
12189            -Wmissing-noreturn
12190            -Wpacked
12191            -Wrendundant-decls
12192
12193        * Configurations/Base.xcconfig: Added the new warnings. Switched to -Wextra instead of
12194        -W for clarity since we don't have to support the older versions of gcc that require the
12195        old -W syntax. Since we now use -Wformat=2, removed -Wformat-security. Also removed
12196        -Wno-format-y2k since we can have that one on now.
12197
121982009-01-25  Judit Jasz  <jasy@inf.u-szeged.hu>
12199
12200        Reviewed by Darin Adler.
12201        
12202        Compilation problem fixing 
12203        http://bugs.webkit.org/show_bug.cgi?id=23497
12204
12205        * jit/JITCall.cpp:
12206        (JSC::JIT::compileOpCall): Use JSValuePtr::encode.
12207
122082009-01-25  Darin Adler  <darin@apple.com>
12209
12210        Reviewed by Sam Weinig.
12211
12212        Bug 23352: Turn on more compiler warnings in the Mac build
12213        https://bugs.webkit.org/show_bug.cgi?id=23352
12214
12215        Fourth patch: Deal with the last few stray warnings.
12216
12217        * parser/Parser.cpp: Only declare jscyyparse if it's not already declared.
12218        This makes both separate compilation and all-in-one compilation work with the
12219        -Wredundant-decls warning.
12220
122212009-01-25  Darin Adler  <darin@apple.com>
12222
12223        Reviewed by Sam Weinig.
12224
12225        Bug 23352: Turn on more compiler warnings in the Mac build
12226        https://bugs.webkit.org/show_bug.cgi?id=23352
12227
12228        Third patch: Use the noreturn attribute on functions that don't
12229        return to prepare for the use of the -Wmissing-noreturn warning.
12230
12231        * jit/JITCall.cpp:
12232        (JSC::unreachable): Added NO_RETURN.
12233        * jsc.cpp:
12234        (functionQuit): Ditto.
12235        (printUsageStatement): Ditto.
12236        * wtf/AlwaysInline.h: Added definition of NO_RETURN.
12237
122382009-01-24  Oliver Hunt  <oliver@apple.com>
12239
12240        Reviewed by Maciej Stachowiak.
12241
12242        Force inlining of Lexer::matchPunctuator
12243
12244        2.2% win when parsing jQuery, Mootools, Prototype, etc
12245
12246        * parser/Lexer.h:
12247
122482009-01-23  Gavin Barraclough  <barraclough@apple.com>
12249
12250        Reviewed by Geoff Garen.
12251
12252        Fix for <rdar://problem/6126212>
12253        Ensure that callbacks out from the JSC interface are only allowed
12254        to return in reverse-chronological order to that in which they were
12255        made.  If we allow earlier callbacks to return first, then this may
12256        result in setions of the RegisterFile in use by another thread
12257        being trampled.
12258
12259        See uber-comment in JSLock.h for details.
12260
12261        * runtime/JSLock.cpp:
12262        (JSC::JSLock::DropAllLocks::DropAllLocks):
12263        (JSC::JSLock::DropAllLocks::~DropAllLocks):
12264
122652009-01-23  Darin Adler  <darin@apple.com>
12266
12267        Try to fix WX build.
12268
12269        * runtime/JSGlobalObjectFunctions.h: Include <wtf/unicode/Unicode.h>
12270        for the definition of UChar.
12271
122722009-01-23  Anders Carlsson  <andersca@apple.com>
12273
12274        * Configurations/Base.xcconfig:
12275        GCC 4.0 build fix.
12276        
12277        * runtime/JSNumberCell.h:
12278        64-bit build fix.
12279
122802009-01-23  Anders Carlsson  <andersca@apple.com>
12281
12282        Reviewed by Sam Weinig.
12283        
12284        Turn on -Wmissing-prototypes and fix the warnings.
12285        
12286        * API/JSClassRef.cpp:
12287        (clearReferenceToPrototype):
12288        * Configurations/Base.xcconfig:
12289        * runtime/Collector.cpp:
12290        (JSC::getPlatformThreadRegisters):
12291        * runtime/ExceptionHelpers.cpp:
12292        (JSC::createError):
12293        * runtime/JSGlobalObjectFunctions.h:
12294        * runtime/JSNumberCell.h:
12295        * runtime/UString.cpp:
12296        (JSC::initializeStaticBaseString):
12297        (JSC::createRep):
12298        * wtf/FastMalloc.cpp:
12299        * wtf/Threading.cpp:
12300
123012009-01-22  Mark Rowe  <mrowe@apple.com>
12302
12303        Rubber-stamped by Anders Carlsson.
12304
12305        Disable GCC_WARN_ABOUT_MISSING_PROTOTYPES temporarily.
12306
12307        Current versions of Xcode only respect it for C and Objective-C files,
12308        and our code doesn't currently compile if it is applied to C++ and
12309        Objective-C++ files.
12310
12311        * Configurations/Base.xcconfig:
12312
123132009-01-22  Steve Falkenburg  <sfalken@apple.com>
12314
12315        https://bugs.webkit.org/show_bug.cgi?id=23489
12316        
12317        Return currentTime() in correct units for the two early return cases.
12318
12319        Reviewed by Mark Rowe.
12320
12321        * wtf/CurrentTime.cpp:
12322        (WTF::currentTime):
12323
123242009-01-22  Sam Weinig  <sam@webkit.org>
12325
12326        Reviewed by Mark Rowe.
12327
12328        Fix for <rdar://problem/6439247>
12329        FastMalloc allocating an extra 4MB of meta-data on 64-bit
12330
12331        Rely on the fact that on all known x86-64 platforms only use 48 bits of
12332        address space to shrink the initial size of the PageMap from ~4MB to 120K.
12333        For 64-bit we still use a 3-level radix tree, but now each level is only 12
12334        bits wide.
12335
12336        No performance change.
12337
12338        * wtf/FastMalloc.cpp:
12339        (WTF::MapSelector): Add specialization for 64 bit that takes into account the
12340        16 bits of unused address space on x86-64.
12341
123422009-01-22  Beth Dakin  <bdakin@apple.com>
12343
12344        Reviewed by Sam Weinig.
12345
12346        Fix for https://bugs.webkit.org/show_bug.cgi?id=23461 LayoutTests/
12347        fast/js/numeric-conversion.html is broken, and corresponding 
12348        <rdar://problem/6514842>
12349
12350        The basic problem here is that parseInt(Infinity) should be NaN, 
12351        but we were returning 0. NaN matches Safari 3.2.1 and Firefox.
12352
12353        * runtime/JSGlobalObjectFunctions.cpp:
12354        (JSC::globalFuncParseInt):
12355
123562009-01-22  Oliver Hunt  <oliver@apple.com>
12357
12358        Reviewed by Geoff Garen.
12359
12360        <rdar://problem/6516853> (r39682-r39736) JSFunFuzz: crash on "(function(){({ x2: x }), })()"
12361        <https://bugs.webkit.org/show_bug.cgi?id=23479>
12362
12363        Automatic semicolon insertion was resulting in this being accepted in the initial
12364        nodeless parsing, but subsequent reparsing for code generation would fail, leading
12365        to a crash.  The solution is to ensure that reparsing a function performs parsing
12366        in the same state as the initial parse.  We do this by modifying the saved source
12367        ranges to include rather than exclude the opening and closing braces.
12368
12369        * bytecode/CodeBlock.cpp:
12370        (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): add an assertion for successful recompile
12371        * parser/Lexer.h:
12372        (JSC::Lexer::sourceCode): include rather than exclude braces.
12373        * parser/Nodes.h:
12374        (JSC::FunctionBodyNode::toSourceString):  No need to append braces anymore.
12375
123762009-01-22  Dmitry Titov  <dimich@chromium.org>
12377
12378        Reviewed by Alexey Proskuryakov.
12379
12380        https://bugs.webkit.org/show_bug.cgi?id=23373
12381
12382        Implement ThreadCondition::timedWait().
12383        Since we borrow the code for condition variables from other sources,
12384        I did the same for timedWait(). See comments in ThreadingWin.cpp for
12385        rationale and more info.
12386
12387        * wtf/CONTRIBUTORS.pthreads-win32: 
12388        Added. A list of Pthreads-win32 contributors mentioned in their license. The license itself
12389        is included into wtf/ThreadingWin32.cpp.
12390
12391        * wtf/Threading.h:
12392        * wtf/ThreadingWin.cpp:
12393        Additional info and Pthreads-win32 license at the beginning.
12394        (WTF::PlatformCondition::timedWait): new method, derived from Pthreads-win32.
12395        (WTF::PlatformCondition::signal): same
12396        (WTF::ThreadCondition::ThreadCondition):
12397        (WTF::ThreadCondition::~ThreadCondition):
12398        (WTF::ThreadCondition::wait): this now calls PlatformCondition::timedWait.
12399        (WTF::ThreadCondition::timedWait): same
12400        (WTF::ThreadCondition::signal): this now calls PlatformCondition::signal.
12401        (WTF::ThreadCondition::broadcast): same
12402
124032009-01-21  Gavin Barraclough  <barraclough@apple.com>
12404
12405        Reviewed by Oliver Hunt.
12406
12407        Fix for https://bugs.webkit.org/show_bug.cgi?id=23469.
12408
12409        We need to check all numbers in integer switches, not just those
12410        represented as integer JSImmediates.
12411
12412        * interpreter/Interpreter.cpp:
12413        (JSC::Interpreter::privateExecute):
12414        (JSC::Interpreter::cti_op_switch_imm):
12415
124162009-01-21  Gavin Barraclough  <barraclough@apple.com>
12417
12418        Reviewed by Geoff Garen.
12419
12420        Fix for https://bugs.webkit.org/show_bug.cgi?id=23468.
12421
12422        * interpreter/Interpreter.cpp:
12423        (JSC::Interpreter::privateExecute):
12424
124252009-01-21  Alexey Proskuryakov  <ap@webkit.org>
12426
12427        Suggested by Oliver Hunt. Reviewed by Oliver Hunt.
12428
12429        https://bugs.webkit.org/show_bug.cgi?id=23456
12430        Function argument names leak
12431
12432        * parser/Nodes.cpp: (JSC::FunctionBodyNode::~FunctionBodyNode): Destruct parameter names.
12433
124342009-01-20  Oliver Hunt  <oliver@apple.com>
12435
12436        Reviewed by NOBODY (Build fix).
12437
12438        Windows build fix
12439
12440        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
12441
124422009-01-20  Gavin Barraclough  <barraclough@apple.com>
12443
12444        Reviewed by Mark Rowe.
12445
12446        Structure property table deleted offset maps are being leaked.
12447        Probably shouldn't be doing that.
12448
12449        https://bugs.webkit.org/show_bug.cgi?id=23442
12450
12451        * runtime/Structure.cpp:
12452        (JSC::Structure::~Structure):
12453
124542009-01-20  Oliver Hunt  <oliver@apple.com>
12455
12456        Reviewed by NOBODY (build fix).
12457
12458        Attempt to fix gtk build
12459
12460        * GNUmakefile.am:
12461
124622009-01-20  Darin Adler  <darin@apple.com>
12463
12464        * runtime/StringPrototype.cpp:
12465        (JSC::substituteBackreferences): Add back the initialization to fix the build.
12466
124672009-01-20  Darin Adler  <darin@apple.com>
12468
12469        Reviewed by Mark Rowe.
12470
12471        Bug 23352: Turn on more compiler warnings in the Mac build
12472        https://bugs.webkit.org/show_bug.cgi?id=23352
12473
12474        First patch: Fix some simple cases of various warnings.
12475
12476        * pcre/pcre_compile.cpp:
12477        (jsRegExpCompile): Use const_cast to change const-ness.
12478
12479        * runtime/StringPrototype.cpp:
12480        (JSC::substituteBackreferences): Remove unneeded initialization and
12481        use UChar instead of unsigned short for UTF-16 values.
12482
12483        * wtf/dtoa.cpp:
12484        (WTF::strtod): Use const_cast to change const-ness.
12485
124862009-01-20  Oliver Hunt  <oliver@apple.com>
12487
12488        Reviewed by NOBODY (build fix).
12489
12490        Whoops, remove runtime/ByteArray references from .pri and .scons builds, update .bkl
12491
12492        * JavaScriptCore.pri:
12493        * JavaScriptCore.scons:
12494        * JavaScriptCoreSources.bkl:
12495
124962009-01-20  Oliver Hunt  <oliver@apple.com>
12497
12498        RS=Dan Bernstein.
12499
12500        Move runtime/ByteArray to wtf/ByteArray
12501
12502        * GNUmakefile.am:
12503        * JavaScriptCore.exp:
12504        * JavaScriptCore.pri:
12505        * JavaScriptCore.scons:
12506        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
12507        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
12508        * JavaScriptCore.xcodeproj/project.pbxproj:
12509        * runtime/JSByteArray.cpp:
12510        * runtime/JSByteArray.h:
12511        * wtf/ByteArray.cpp: Renamed from JavaScriptCore/runtime/ByteArray.cpp.
12512        (WTF::ByteArray::create):
12513        * wtf/ByteArray.h: Renamed from JavaScriptCore/runtime/ByteArray.h.
12514        (WTF::ByteArray::length):
12515        (WTF::ByteArray::set):
12516        (WTF::ByteArray::get):
12517        (WTF::ByteArray::data):
12518        (WTF::ByteArray::deref):
12519        (WTF::ByteArray::ByteArray):
12520
125212009-01-19  Sam Weinig  <sam@webkit.org>
12522
12523        Rubber-stamped by Gavin Barraclough.
12524
12525        Remove temporary operator-> from JSValuePtr.
12526
12527        * API/JSCallbackFunction.cpp:
12528        (JSC::JSCallbackFunction::call):
12529        * API/JSCallbackObjectFunctions.h:
12530        (JSC::::call):
12531        (JSC::::toNumber):
12532        (JSC::::toString):
12533        * API/JSObjectRef.cpp:
12534        (JSObjectSetPrototype):
12535        * API/JSValueRef.cpp:
12536        (JSValueGetType):
12537        (JSValueIsUndefined):
12538        (JSValueIsNull):
12539        (JSValueIsBoolean):
12540        (JSValueIsNumber):
12541        (JSValueIsString):
12542        (JSValueIsObject):
12543        (JSValueIsObjectOfClass):
12544        (JSValueToBoolean):
12545        (JSValueToNumber):
12546        (JSValueToStringCopy):
12547        (JSValueToObject):
12548        * bytecode/CodeBlock.cpp:
12549        (JSC::valueToSourceString):
12550        (JSC::CodeBlock::mark):
12551        * bytecode/CodeBlock.h:
12552        (JSC::CodeBlock::isKnownNotImmediate):
12553        * bytecompiler/BytecodeGenerator.cpp:
12554        (JSC::BytecodeGenerator::emitEqualityOp):
12555        (JSC::keyForImmediateSwitch):
12556        * interpreter/Interpreter.cpp:
12557        (JSC::jsLess):
12558        (JSC::jsLessEq):
12559        (JSC::jsAddSlowCase):
12560        (JSC::jsAdd):
12561        (JSC::jsTypeStringForValue):
12562        (JSC::jsIsObjectType):
12563        (JSC::jsIsFunctionType):
12564        (JSC::isNotObject):
12565        (JSC::Interpreter::callEval):
12566        (JSC::Interpreter::throwException):
12567        (JSC::cachePrototypeChain):
12568        (JSC::Interpreter::tryCachePutByID):
12569        (JSC::countPrototypeChainEntriesAndCheckForProxies):
12570        (JSC::Interpreter::tryCacheGetByID):
12571        (JSC::Interpreter::privateExecute):
12572        (JSC::Interpreter::tryCTICachePutByID):
12573        (JSC::Interpreter::tryCTICacheGetByID):
12574        (JSC::Interpreter::cti_op_convert_this):
12575        (JSC::Interpreter::cti_op_add):
12576        (JSC::Interpreter::cti_op_pre_inc):
12577        (JSC::Interpreter::cti_op_put_by_id_generic):
12578        (JSC::Interpreter::cti_op_get_by_id_generic):
12579        (JSC::Interpreter::cti_op_put_by_id):
12580        (JSC::Interpreter::cti_op_put_by_id_second):
12581        (JSC::Interpreter::cti_op_put_by_id_fail):
12582        (JSC::Interpreter::cti_op_get_by_id):
12583        (JSC::Interpreter::cti_op_get_by_id_second):
12584        (JSC::Interpreter::cti_op_get_by_id_self_fail):
12585        (JSC::Interpreter::cti_op_get_by_id_proto_list):
12586        (JSC::Interpreter::cti_op_get_by_id_proto_list_full):
12587        (JSC::Interpreter::cti_op_get_by_id_proto_fail):
12588        (JSC::Interpreter::cti_op_get_by_id_array_fail):
12589        (JSC::Interpreter::cti_op_get_by_id_string_fail):
12590        (JSC::Interpreter::cti_op_instanceof):
12591        (JSC::Interpreter::cti_op_del_by_id):
12592        (JSC::Interpreter::cti_op_mul):
12593        (JSC::Interpreter::cti_op_call_JSFunction):
12594        (JSC::Interpreter::cti_op_call_NotJSFunction):
12595        (JSC::Interpreter::cti_op_construct_JSConstruct):
12596        (JSC::Interpreter::cti_op_construct_NotJSConstruct):
12597        (JSC::Interpreter::cti_op_get_by_val):
12598        (JSC::Interpreter::cti_op_get_by_val_byte_array):
12599        (JSC::Interpreter::cti_op_sub):
12600        (JSC::Interpreter::cti_op_put_by_val):
12601        (JSC::Interpreter::cti_op_put_by_val_array):
12602        (JSC::Interpreter::cti_op_put_by_val_byte_array):
12603        (JSC::Interpreter::cti_op_loop_if_true):
12604        (JSC::Interpreter::cti_op_negate):
12605        (JSC::Interpreter::cti_op_div):
12606        (JSC::Interpreter::cti_op_pre_dec):
12607        (JSC::Interpreter::cti_op_not):
12608        (JSC::Interpreter::cti_op_jtrue):
12609        (JSC::Interpreter::cti_op_post_inc):
12610        (JSC::Interpreter::cti_op_lshift):
12611        (JSC::Interpreter::cti_op_bitand):
12612        (JSC::Interpreter::cti_op_rshift):
12613        (JSC::Interpreter::cti_op_bitnot):
12614        (JSC::Interpreter::cti_op_mod):
12615        (JSC::Interpreter::cti_op_post_dec):
12616        (JSC::Interpreter::cti_op_urshift):
12617        (JSC::Interpreter::cti_op_bitxor):
12618        (JSC::Interpreter::cti_op_bitor):
12619        (JSC::Interpreter::cti_op_push_scope):
12620        (JSC::Interpreter::cti_op_is_undefined):
12621        (JSC::Interpreter::cti_op_is_boolean):
12622        (JSC::Interpreter::cti_op_is_number):
12623        (JSC::Interpreter::cti_op_to_jsnumber):
12624        (JSC::Interpreter::cti_op_in):
12625        (JSC::Interpreter::cti_op_put_by_index):
12626        (JSC::Interpreter::cti_op_switch_imm):
12627        (JSC::Interpreter::cti_op_switch_char):
12628        (JSC::Interpreter::cti_op_switch_string):
12629        (JSC::Interpreter::cti_op_del_by_val):
12630        (JSC::Interpreter::cti_op_put_getter):
12631        (JSC::Interpreter::cti_op_put_setter):
12632        (JSC::Interpreter::cti_op_new_error):
12633        * interpreter/Interpreter.h:
12634        (JSC::Interpreter::isJSArray):
12635        (JSC::Interpreter::isJSString):
12636        (JSC::Interpreter::isJSByteArray):
12637        * interpreter/Register.h:
12638        (JSC::Register::marked):
12639        (JSC::Register::mark):
12640        * jit/JITInlineMethods.h:
12641        (JSC::JIT::getConstantOperandImmediateInt):
12642        (JSC::JIT::isOperandConstantImmediateInt):
12643        * jsc.cpp:
12644        (functionPrint):
12645        (functionDebug):
12646        (functionRun):
12647        (functionLoad):
12648        (runWithScripts):
12649        (runInteractive):
12650        * parser/Nodes.cpp:
12651        (JSC::processClauseList):
12652        * profiler/ProfileGenerator.cpp:
12653        (JSC::ProfileGenerator::addParentForConsoleStart):
12654        * profiler/Profiler.cpp:
12655        (JSC::Profiler::createCallIdentifier):
12656        * runtime/ArrayConstructor.cpp:
12657        (JSC::constructArrayWithSizeQuirk):
12658        * runtime/ArrayPrototype.cpp:
12659        (JSC::arrayProtoFuncToString):
12660        (JSC::arrayProtoFuncToLocaleString):
12661        (JSC::arrayProtoFuncJoin):
12662        (JSC::arrayProtoFuncConcat):
12663        (JSC::arrayProtoFuncPop):
12664        (JSC::arrayProtoFuncPush):
12665        (JSC::arrayProtoFuncReverse):
12666        (JSC::arrayProtoFuncShift):
12667        (JSC::arrayProtoFuncSlice):
12668        (JSC::arrayProtoFuncSort):
12669        (JSC::arrayProtoFuncSplice):
12670        (JSC::arrayProtoFuncUnShift):
12671        (JSC::arrayProtoFuncFilter):
12672        (JSC::arrayProtoFuncMap):
12673        (JSC::arrayProtoFuncEvery):
12674        (JSC::arrayProtoFuncForEach):
12675        (JSC::arrayProtoFuncSome):
12676        (JSC::arrayProtoFuncIndexOf):
12677        (JSC::arrayProtoFuncLastIndexOf):
12678        * runtime/BooleanConstructor.cpp:
12679        (JSC::constructBoolean):
12680        (JSC::callBooleanConstructor):
12681        * runtime/BooleanPrototype.cpp:
12682        (JSC::booleanProtoFuncToString):
12683        (JSC::booleanProtoFuncValueOf):
12684        * runtime/Collector.cpp:
12685        (JSC::Heap::protect):
12686        (JSC::Heap::unprotect):
12687        (JSC::Heap::heap):
12688        (JSC::Heap::collect):
12689        (JSC::typeName):
12690        * runtime/Completion.cpp:
12691        (JSC::evaluate):
12692        * runtime/DateConstructor.cpp:
12693        (JSC::constructDate):
12694        (JSC::dateParse):
12695        (JSC::dateUTC):
12696        * runtime/DateInstance.h:
12697        (JSC::DateInstance::internalNumber):
12698        * runtime/DatePrototype.cpp:
12699        (JSC::formatLocaleDate):
12700        (JSC::fillStructuresUsingTimeArgs):
12701        (JSC::fillStructuresUsingDateArgs):
12702        (JSC::dateProtoFuncToString):
12703        (JSC::dateProtoFuncToUTCString):
12704        (JSC::dateProtoFuncToDateString):
12705        (JSC::dateProtoFuncToTimeString):
12706        (JSC::dateProtoFuncToLocaleString):
12707        (JSC::dateProtoFuncToLocaleDateString):
12708        (JSC::dateProtoFuncToLocaleTimeString):
12709        (JSC::dateProtoFuncGetTime):
12710        (JSC::dateProtoFuncGetFullYear):
12711        (JSC::dateProtoFuncGetUTCFullYear):
12712        (JSC::dateProtoFuncToGMTString):
12713        (JSC::dateProtoFuncGetMonth):
12714        (JSC::dateProtoFuncGetUTCMonth):
12715        (JSC::dateProtoFuncGetDate):
12716        (JSC::dateProtoFuncGetUTCDate):
12717        (JSC::dateProtoFuncGetDay):
12718        (JSC::dateProtoFuncGetUTCDay):
12719        (JSC::dateProtoFuncGetHours):
12720        (JSC::dateProtoFuncGetUTCHours):
12721        (JSC::dateProtoFuncGetMinutes):
12722        (JSC::dateProtoFuncGetUTCMinutes):
12723        (JSC::dateProtoFuncGetSeconds):
12724        (JSC::dateProtoFuncGetUTCSeconds):
12725        (JSC::dateProtoFuncGetMilliSeconds):
12726        (JSC::dateProtoFuncGetUTCMilliseconds):
12727        (JSC::dateProtoFuncGetTimezoneOffset):
12728        (JSC::dateProtoFuncSetTime):
12729        (JSC::setNewValueFromTimeArgs):
12730        (JSC::setNewValueFromDateArgs):
12731        (JSC::dateProtoFuncSetYear):
12732        (JSC::dateProtoFuncGetYear):
12733        * runtime/ErrorConstructor.cpp:
12734        (JSC::constructError):
12735        * runtime/ErrorPrototype.cpp:
12736        (JSC::errorProtoFuncToString):
12737        * runtime/ExceptionHelpers.cpp:
12738        (JSC::createError):
12739        (JSC::createErrorMessage):
12740        * runtime/FunctionConstructor.cpp:
12741        (JSC::constructFunction):
12742        * runtime/FunctionPrototype.cpp:
12743        (JSC::functionProtoFuncToString):
12744        (JSC::functionProtoFuncApply):
12745        (JSC::functionProtoFuncCall):
12746        * runtime/GetterSetter.cpp:
12747        (JSC::GetterSetter::toObject):
12748        * runtime/JSActivation.cpp:
12749        (JSC::JSActivation::getOwnPropertySlot):
12750        * runtime/JSArray.cpp:
12751        (JSC::JSArray::put):
12752        (JSC::JSArray::mark):
12753        (JSC::JSArray::sort):
12754        (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key):
12755        (JSC::JSArray::compactForSorting):
12756        * runtime/JSByteArray.h:
12757        (JSC::JSByteArray::setIndex):
12758        * runtime/JSCell.h:
12759        (JSC::asCell):
12760        * runtime/JSFunction.cpp:
12761        (JSC::JSFunction::call):
12762        (JSC::JSFunction::construct):
12763        * runtime/JSGlobalObject.cpp:
12764        (JSC::markIfNeeded):
12765        (JSC::lastInPrototypeChain):
12766        * runtime/JSGlobalObjectFunctions.cpp:
12767        (JSC::encode):
12768        (JSC::decode):
12769        (JSC::globalFuncEval):
12770        (JSC::globalFuncParseInt):
12771        (JSC::globalFuncParseFloat):
12772        (JSC::globalFuncIsNaN):
12773        (JSC::globalFuncIsFinite):
12774        (JSC::globalFuncEscape):
12775        (JSC::globalFuncUnescape):
12776        (JSC::globalFuncJSCPrint):
12777        * runtime/JSImmediate.cpp:
12778        (JSC::JSImmediate::toThisObject):
12779        (JSC::JSImmediate::toObject):
12780        (JSC::JSImmediate::prototype):
12781        (JSC::JSImmediate::toString):
12782        * runtime/JSImmediate.h:
12783        * runtime/JSObject.cpp:
12784        (JSC::JSObject::mark):
12785        (JSC::JSObject::put):
12786        (JSC::callDefaultValueFunction):
12787        (JSC::JSObject::getPrimitiveNumber):
12788        (JSC::JSObject::defineGetter):
12789        (JSC::JSObject::defineSetter):
12790        (JSC::JSObject::lookupGetter):
12791        (JSC::JSObject::lookupSetter):
12792        (JSC::JSObject::hasInstance):
12793        (JSC::JSObject::toNumber):
12794        (JSC::JSObject::toString):
12795        * runtime/JSObject.h:
12796        (JSC::JSObject::JSObject):
12797        (JSC::JSObject::inlineGetOwnPropertySlot):
12798        (JSC::JSObject::getOwnPropertySlotForWrite):
12799        (JSC::JSObject::getPropertySlot):
12800        (JSC::JSValuePtr::get):
12801        * runtime/JSPropertyNameIterator.h:
12802        (JSC::JSPropertyNameIterator::create):
12803        * runtime/JSString.cpp:
12804        (JSC::JSString::getOwnPropertySlot):
12805        * runtime/JSValue.h:
12806        * runtime/JSWrapperObject.cpp:
12807        (JSC::JSWrapperObject::mark):
12808        * runtime/JSWrapperObject.h:
12809        (JSC::JSWrapperObject::setInternalValue):
12810        * runtime/MathObject.cpp:
12811        (JSC::mathProtoFuncAbs):
12812        (JSC::mathProtoFuncACos):
12813        (JSC::mathProtoFuncASin):
12814        (JSC::mathProtoFuncATan):
12815        (JSC::mathProtoFuncATan2):
12816        (JSC::mathProtoFuncCeil):
12817        (JSC::mathProtoFuncCos):
12818        (JSC::mathProtoFuncExp):
12819        (JSC::mathProtoFuncFloor):
12820        (JSC::mathProtoFuncLog):
12821        (JSC::mathProtoFuncMax):
12822        (JSC::mathProtoFuncMin):
12823        (JSC::mathProtoFuncPow):
12824        (JSC::mathProtoFuncRound):
12825        (JSC::mathProtoFuncSin):
12826        (JSC::mathProtoFuncSqrt):
12827        (JSC::mathProtoFuncTan):
12828        * runtime/NativeErrorConstructor.cpp:
12829        (JSC::NativeErrorConstructor::NativeErrorConstructor):
12830        (JSC::NativeErrorConstructor::construct):
12831        * runtime/NumberConstructor.cpp:
12832        (JSC::constructWithNumberConstructor):
12833        (JSC::callNumberConstructor):
12834        * runtime/NumberPrototype.cpp:
12835        (JSC::numberProtoFuncToString):
12836        (JSC::numberProtoFuncToLocaleString):
12837        (JSC::numberProtoFuncValueOf):
12838        (JSC::numberProtoFuncToFixed):
12839        (JSC::numberProtoFuncToExponential):
12840        (JSC::numberProtoFuncToPrecision):
12841        * runtime/ObjectConstructor.cpp:
12842        (JSC::constructObject):
12843        * runtime/ObjectPrototype.cpp:
12844        (JSC::objectProtoFuncValueOf):
12845        (JSC::objectProtoFuncHasOwnProperty):
12846        (JSC::objectProtoFuncIsPrototypeOf):
12847        (JSC::objectProtoFuncDefineGetter):
12848        (JSC::objectProtoFuncDefineSetter):
12849        (JSC::objectProtoFuncLookupGetter):
12850        (JSC::objectProtoFuncLookupSetter):
12851        (JSC::objectProtoFuncPropertyIsEnumerable):
12852        (JSC::objectProtoFuncToLocaleString):
12853        (JSC::objectProtoFuncToString):
12854        * runtime/Operations.h:
12855        (JSC::JSValuePtr::equalSlowCaseInline):
12856        (JSC::JSValuePtr::strictEqual):
12857        (JSC::JSValuePtr::strictEqualSlowCaseInline):
12858        * runtime/Protect.h:
12859        (JSC::gcProtect):
12860        (JSC::gcUnprotect):
12861        * runtime/RegExpConstructor.cpp:
12862        (JSC::setRegExpConstructorInput):
12863        (JSC::setRegExpConstructorMultiline):
12864        (JSC::constructRegExp):
12865        * runtime/RegExpObject.cpp:
12866        (JSC::setRegExpObjectLastIndex):
12867        (JSC::RegExpObject::match):
12868        * runtime/RegExpPrototype.cpp:
12869        (JSC::regExpProtoFuncTest):
12870        (JSC::regExpProtoFuncExec):
12871        (JSC::regExpProtoFuncCompile):
12872        (JSC::regExpProtoFuncToString):
12873        * runtime/StringConstructor.cpp:
12874        (JSC::stringFromCharCodeSlowCase):
12875        (JSC::stringFromCharCode):
12876        (JSC::constructWithStringConstructor):
12877        (JSC::callStringConstructor):
12878        * runtime/StringPrototype.cpp:
12879        (JSC::stringProtoFuncReplace):
12880        (JSC::stringProtoFuncToString):
12881        (JSC::stringProtoFuncCharAt):
12882        (JSC::stringProtoFuncCharCodeAt):
12883        (JSC::stringProtoFuncConcat):
12884        (JSC::stringProtoFuncIndexOf):
12885        (JSC::stringProtoFuncLastIndexOf):
12886        (JSC::stringProtoFuncMatch):
12887        (JSC::stringProtoFuncSearch):
12888        (JSC::stringProtoFuncSlice):
12889        (JSC::stringProtoFuncSplit):
12890        (JSC::stringProtoFuncSubstr):
12891        (JSC::stringProtoFuncSubstring):
12892        (JSC::stringProtoFuncToLowerCase):
12893        (JSC::stringProtoFuncToUpperCase):
12894        (JSC::stringProtoFuncLocaleCompare):
12895        (JSC::stringProtoFuncBig):
12896        (JSC::stringProtoFuncSmall):
12897        (JSC::stringProtoFuncBlink):
12898        (JSC::stringProtoFuncBold):
12899        (JSC::stringProtoFuncFixed):
12900        (JSC::stringProtoFuncItalics):
12901        (JSC::stringProtoFuncStrike):
12902        (JSC::stringProtoFuncSub):
12903        (JSC::stringProtoFuncSup):
12904        (JSC::stringProtoFuncFontcolor):
12905        (JSC::stringProtoFuncFontsize):
12906        (JSC::stringProtoFuncAnchor):
12907        (JSC::stringProtoFuncLink):
12908        * runtime/Structure.cpp:
12909        (JSC::Structure::Structure):
12910        (JSC::Structure::getEnumerablePropertyNames):
12911        (JSC::Structure::createCachedPrototypeChain):
12912        * runtime/Structure.h:
12913        (JSC::Structure::mark):
12914        * runtime/StructureChain.cpp:
12915        (JSC::StructureChain::StructureChain):
12916
129172009-01-19  Darin Adler  <darin@apple.com>
12918
12919        Reviewed by Sam Weinig.
12920
12921        Bug 23409: REGRESSION: RegExp 'replace()' function improperly processes '$$'
12922        <https://bugs.webkit.org/show_bug.cgi?id=23409>
12923        <rdar://problem/6505723>
12924
12925        Test: fast/js/string-replace-3.html
12926
12927        * runtime/StringPrototype.cpp:
12928        (JSC::substituteBackreferences): Remove code that adds an extra $ -- not sure
12929        how this ever worked.
12930
129312009-01-16  Gavin Barraclough  <barraclough@apple.com>
12932
12933        Reviewed by Oliver Hunt.
12934
12935        On x86-64 jit, cache JSImmedate::TagMask & JSImmedate::TagTypeNumber in
12936        registers, save reloading them every time they're used.
12937
12938        Draws x86-64 jit performance close to that of i386 jit.
12939
12940        * assembler/MacroAssembler.h:
12941        (JSC::MacroAssembler::subPtr):
12942        (JSC::MacroAssembler::jnzPtr):
12943        (JSC::MacroAssembler::jzPtr):
12944        * jit/JIT.cpp:
12945        (JSC::JIT::privateCompileMainPass):
12946        * jit/JIT.h:
12947        * jit/JITArithmetic.cpp:
12948        (JSC::JIT::compileBinaryArithOpSlowCase):
12949        * jit/JITInlineMethods.h:
12950        (JSC::JIT::emitJumpIfJSCell):
12951        (JSC::JIT::emitJumpIfNotJSCell):
12952        (JSC::JIT::emitJumpIfImmediateNumber):
12953        (JSC::JIT::emitJumpIfNotImmediateNumber):
12954        (JSC::JIT::emitJumpIfImmediateInteger):
12955        (JSC::JIT::emitJumpIfNotImmediateInteger):
12956        (JSC::JIT::emitFastArithIntToImmNoCheck):
12957
129582009-01-16  Gavin Barraclough  <barraclough@apple.com>
12959
12960        Reviewed by Oliver Hunt.
12961
12962        Add support to x86-64 JIT for inline double precision arithmetic ops.
12963        +5/6% on x86-64, JIT enabled, sunspider.
12964
12965        * assembler/MacroAssembler.h:
12966        (JSC::MacroAssembler::addPtr):
12967        * assembler/X86Assembler.h:
12968        (JSC::X86Assembler::movq_rr):
12969        * jit/JIT.h:
12970        * jit/JITArithmetic.cpp:
12971        (JSC::JIT::compileFastArith_op_pre_inc):
12972        (JSC::JIT::compileBinaryArithOp):
12973        (JSC::JIT::compileBinaryArithOpSlowCase):
12974        (JSC::JIT::compileFastArith_op_add):
12975        (JSC::JIT::compileFastArithSlow_op_add):
12976        (JSC::JIT::compileFastArith_op_mul):
12977        (JSC::JIT::compileFastArithSlow_op_mul):
12978        (JSC::JIT::compileFastArith_op_sub):
12979        (JSC::JIT::compileFastArithSlow_op_sub):
12980        * parser/ResultType.h:
12981        (JSC::ResultType::isReusable):
12982        (JSC::ResultType::isInt32):
12983        (JSC::ResultType::definitelyIsNumber):
12984        (JSC::ResultType::mightBeNumber):
12985        (JSC::ResultType::isNotNumber):
12986        (JSC::ResultType::unknownType):
12987
129882009-01-16  Gavin Barraclough  <barraclough@apple.com>
12989
12990        Reviewed by Geoff Garen.
12991
12992        Fixes for SamplingTool.
12993
12994        https://bugs.webkit.org/show_bug.cgi?id=23390
12995
12996        * assembler/MacroAssembler.h:
12997        (JSC::MacroAssembler::storePtr):
12998        * bytecode/SamplingTool.cpp:
12999        (JSC::SamplingTool::run):
13000        (JSC::SamplingTool::dump):
13001        * bytecode/SamplingTool.h:
13002        (JSC::SamplingTool::encodeSample):
13003        * jit/JIT.cpp:
13004        (JSC::JIT::privateCompileMainPass):
13005        (JSC::JIT::privateCompile):
13006        * jit/JIT.h:
13007        (JSC::JIT::samplingToolTrackCodeBlock):
13008        * jit/JITCall.cpp:
13009        (JSC::JIT::compileOpCall):
13010        (JSC::JIT::compileOpCallSlowCase):
13011        * jit/JITInlineMethods.h:
13012        (JSC::JIT::emitCTICall_internal):
13013
130142009-01-16  Geoffrey Garen  <ggaren@apple.com>
13015
13016        Reviewed by Darin Adler.
13017        
13018        Fixed <rdar://problem/6452301> REGRESSION: Latest WebKit nightlies
13019        turn "c" into "" when stripping \\c_ character
13020
13021        * wrec/WRECParser.cpp:
13022        (JSC::WREC::Parser::consumeEscape): Mimic a Firefox quirk when parsing
13023        control escapes inside character classes.
13024
130252009-01-16  Adam Roben  <aroben@apple.com>
13026
13027        Windows build fix
13028
13029        * wrec/WRECParser.cpp:
13030        (JSC::WREC::Parser::parseParentheses): Removed unreachable code.
13031
130322009-01-15  Geoffrey Garen  <ggaren@apple.com>
13033
13034        Reviewed by Cameron Zwarich.
13035        
13036        Fixed <rdar://problem/6471394> REGRESSION (r39164): Discarding quantifier
13037        on assertion gives incorrect result (23075)
13038        
13039        https://bugs.webkit.org/show_bug.cgi?id=23075
13040
13041        * pcre/pcre_compile.cpp:
13042        (compileBranch): Throw away an assertion if it's followed by a quantifier
13043        with a 0 minimum, to match SpiderMonkey, v8, and the ECMA spec.
13044
13045        * wrec/WRECParser.cpp:
13046        (JSC::WREC::Parser::parseParentheses): Fall back on PCRE for the rare
13047        case of an assertion with a quantifier with a 0 minimum, since we
13048        don't handle quantified subexpressions yet, and in this special case,
13049        we can't just throw away the quantifier.
13050
130512009-01-15  Gavin Barraclough  <barraclough@apple.com>
13052
13053        Reviewed by Oliver Hunt.
13054
13055        Add support in ResultType to track that the results of bitops
13056        are always of type int32_t.
13057
13058        * parser/Nodes.cpp:
13059        (JSC::ReadModifyResolveNode::emitBytecode):
13060        (JSC::ReadModifyDotNode::emitBytecode):
13061        (JSC::ReadModifyBracketNode::emitBytecode):
13062        * parser/Nodes.h:
13063        (JSC::ExpressionNode::):
13064        (JSC::BooleanNode::):
13065        (JSC::NumberNode::):
13066        (JSC::StringNode::):
13067        (JSC::PrePostResolveNode::):
13068        (JSC::TypeOfResolveNode::):
13069        (JSC::TypeOfValueNode::):
13070        (JSC::UnaryPlusNode::):
13071        (JSC::NegateNode::):
13072        (JSC::BitwiseNotNode::):
13073        (JSC::LogicalNotNode::):
13074        (JSC::MultNode::):
13075        (JSC::DivNode::):
13076        (JSC::ModNode::):
13077        (JSC::SubNode::):
13078        (JSC::LeftShiftNode::):
13079        (JSC::RightShiftNode::):
13080        (JSC::UnsignedRightShiftNode::):
13081        (JSC::LessNode::):
13082        (JSC::GreaterNode::):
13083        (JSC::LessEqNode::):
13084        (JSC::GreaterEqNode::):
13085        (JSC::InstanceOfNode::):
13086        (JSC::EqualNode::):
13087        (JSC::NotEqualNode::):
13088        (JSC::StrictEqualNode::):
13089        (JSC::NotStrictEqualNode::):
13090        (JSC::BitAndNode::):
13091        (JSC::BitOrNode::):
13092        (JSC::BitXOrNode::):
13093        (JSC::LogicalOpNode::):
13094        * parser/ResultType.h:
13095        (JSC::ResultType::isInt32):
13096        (JSC::ResultType::isNotNumber):
13097        (JSC::ResultType::booleanType):
13098        (JSC::ResultType::numberType):
13099        (JSC::ResultType::numberTypeCanReuse):
13100        (JSC::ResultType::numberTypeCanReuseIsInt32):
13101        (JSC::ResultType::stringOrNumberTypeCanReuse):
13102        (JSC::ResultType::stringType):
13103        (JSC::ResultType::unknownType):
13104        (JSC::ResultType::forAdd):
13105        (JSC::ResultType::forBitOp):
13106        (JSC::OperandTypes::OperandTypes):
13107
131082009-01-15  Gavin Barraclough  <barraclough@apple.com>
13109
13110        Reviewed by Oliver Hunt.
13111
13112        Add support for integer addition, subtraction and multiplication
13113        in JIT code on x86-64.
13114
13115        * assembler/MacroAssembler.h:
13116        (JSC::MacroAssembler::mul32):
13117        (JSC::MacroAssembler::sub32):
13118        (JSC::MacroAssembler::joMul32):
13119        (JSC::MacroAssembler::joSub32):
13120        * jit/JIT.cpp:
13121        (JSC::JIT::privateCompileMainPass):
13122        (JSC::JIT::privateCompileSlowCases):
13123        * jit/JIT.h:
13124        * jit/JITArithmetic.cpp:
13125        (JSC::JIT::compileFastArith_op_add):
13126        (JSC::JIT::compileFastArithSlow_op_add):
13127        (JSC::JIT::compileFastArith_op_mul):
13128        (JSC::JIT::compileFastArithSlow_op_mul):
13129        (JSC::JIT::compileFastArith_op_sub):
13130        (JSC::JIT::compileFastArithSlow_op_sub):
13131
131322009-01-15  Gavin Barraclough  <barraclough@apple.com>
13133
13134        Reviewed by Geoff Garen.
13135
13136        On x86-64 allow JSImmediate to encode 64-bit double precision values.
13137        This patch only affects builds that set USE(ALTERNATE_JSIMMEDIATE).
13138        Updates the implementation of JSValuePtr:: and JSImmediate:: methods
13139        that operate on neumeric values to be be aware of the new representation.
13140        When this representation is in use, the class JSNumberCell is redundant
13141        and is compiled out.
13142
13143        The format of the new immediate representation is documented in JSImmediate.h.
13144
13145        * JavaScriptCore.exp:
13146        * assembler/MacroAssembler.h:
13147        (JSC::MacroAssembler::subPtr):
13148        * assembler/X86Assembler.h:
13149        (JSC::X86Assembler::):
13150        (JSC::X86Assembler::subq_rr):
13151        (JSC::X86Assembler::movq_rr):
13152        (JSC::X86Assembler::ucomisd_rr):
13153        (JSC::X86Assembler::X86InstructionFormatter::twoByteOp64):
13154        * interpreter/Interpreter.cpp:
13155        (JSC::Interpreter::cti_op_stricteq):
13156        (JSC::Interpreter::cti_op_nstricteq):
13157        * jit/JIT.cpp:
13158        (JSC::JIT::compileOpStrictEq):
13159        (JSC::JIT::privateCompileMainPass):
13160        (JSC::JIT::privateCompileSlowCases):
13161        * jit/JIT.h:
13162        * jit/JITArithmetic.cpp:
13163        (JSC::JIT::compileFastArith_op_lshift):
13164        (JSC::JIT::compileFastArith_op_rshift):
13165        (JSC::JIT::compileFastArith_op_bitand):
13166        (JSC::JIT::compileFastArith_op_mod):
13167        (JSC::JIT::compileFastArith_op_add):
13168        (JSC::JIT::compileFastArith_op_mul):
13169        (JSC::JIT::compileFastArith_op_post_inc):
13170        (JSC::JIT::compileFastArith_op_post_dec):
13171        (JSC::JIT::compileFastArith_op_pre_inc):
13172        (JSC::JIT::compileFastArith_op_pre_dec):
13173        (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate):
13174        (JSC::JIT::compileBinaryArithOp):
13175        * jit/JITInlineMethods.h:
13176        (JSC::JIT::emitJumpIfBothJSCells):
13177        (JSC::JIT::emitJumpIfEitherNumber):
13178        (JSC::JIT::emitJumpIfNotEitherNumber):
13179        (JSC::JIT::emitJumpIfImmediateIntegerNumber):
13180        (JSC::JIT::emitJumpIfNotImmediateIntegerNumber):
13181        (JSC::JIT::emitJumpIfNotImmediateIntegerNumbers):
13182        (JSC::JIT::emitJumpSlowCaseIfNotImmediateIntegerNumber):
13183        (JSC::JIT::emitJumpSlowCaseIfNotImmediateIntegerNumbers):
13184        (JSC::JIT::emitFastArithDeTagImmediate):
13185        (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
13186        (JSC::JIT::emitFastArithReTagImmediate):
13187        (JSC::JIT::emitFastArithIntToImmNoCheck):
13188        * runtime/JSCell.h:
13189        * runtime/JSGlobalData.cpp:
13190        (JSC::JSGlobalData::JSGlobalData):
13191        * runtime/JSImmediate.cpp:
13192        (JSC::JSImmediate::toThisObject):
13193        (JSC::JSImmediate::toObject):
13194        (JSC::JSImmediate::toString):
13195        * runtime/JSImmediate.h:
13196        (JSC::wtf_reinterpret_cast):
13197        (JSC::JSImmediate::isNumber):
13198        (JSC::JSImmediate::isIntegerNumber):
13199        (JSC::JSImmediate::isDoubleNumber):
13200        (JSC::JSImmediate::isPositiveIntegerNumber):
13201        (JSC::JSImmediate::areBothImmediateIntegerNumbers):
13202        (JSC::JSImmediate::makeInt):
13203        (JSC::JSImmediate::makeDouble):
13204        (JSC::JSImmediate::doubleValue):
13205        (JSC::doubleToBoolean):
13206        (JSC::JSImmediate::toBoolean):
13207        (JSC::JSImmediate::getTruncatedUInt32):
13208        (JSC::JSImmediate::makeOutOfIntegerRange):
13209        (JSC::JSImmediate::from):
13210        (JSC::JSImmediate::getTruncatedInt32):
13211        (JSC::JSImmediate::toDouble):
13212        (JSC::JSImmediate::getUInt32):
13213        (JSC::JSValuePtr::isInt32Fast):
13214        (JSC::JSValuePtr::isUInt32Fast):
13215        (JSC::JSValuePtr::areBothInt32Fast):
13216        (JSC::JSFastMath::canDoFastBitwiseOperations):
13217        (JSC::JSFastMath::xorImmediateNumbers):
13218        (JSC::JSFastMath::canDoFastRshift):
13219        (JSC::JSFastMath::canDoFastUrshift):
13220        (JSC::JSFastMath::rightShiftImmediateNumbers):
13221        (JSC::JSFastMath::canDoFastAdditiveOperations):
13222        (JSC::JSFastMath::addImmediateNumbers):
13223        (JSC::JSFastMath::subImmediateNumbers):
13224        * runtime/JSNumberCell.cpp:
13225        (JSC::jsNumberCell):
13226        * runtime/JSNumberCell.h:
13227        (JSC::createNumberStructure):
13228        (JSC::isNumberCell):
13229        (JSC::asNumberCell):
13230        (JSC::jsNumber):
13231        (JSC::JSValuePtr::isDoubleNumber):
13232        (JSC::JSValuePtr::getDoubleNumber):
13233        (JSC::JSValuePtr::isNumber):
13234        (JSC::JSValuePtr::uncheckedGetNumber):
13235        (JSC::jsNaN):
13236        (JSC::JSValuePtr::getNumber):
13237        (JSC::JSValuePtr::numberToInt32):
13238        (JSC::JSValuePtr::numberToUInt32):
13239        * runtime/JSValue.h:
13240        * runtime/NumberConstructor.cpp:
13241        (JSC::numberConstructorNegInfinity):
13242        (JSC::numberConstructorPosInfinity):
13243        (JSC::numberConstructorMaxValue):
13244        (JSC::numberConstructorMinValue):
13245        * runtime/NumberObject.cpp:
13246        (JSC::constructNumber):
13247        * runtime/NumberObject.h:
13248        * runtime/Operations.h:
13249        (JSC::JSValuePtr::equal):
13250        (JSC::JSValuePtr::equalSlowCaseInline):
13251        (JSC::JSValuePtr::strictEqual):
13252        (JSC::JSValuePtr::strictEqualSlowCaseInline):
13253        * wtf/Platform.h:
13254
132552009-01-15  Sam Weinig  <sam@webkit.org>
13256
13257        Reviewed by Geoffrey Garen.
13258
13259        <rdar://problem/6045018>
13260        REGRESSION (r34838): JavaScript objects appear to be leaked after loading google.com
13261
13262        Subtract the number of JSStrings cached in SmallStrings when calculating the
13263        number of live JSObjects.
13264
13265        * runtime/Collector.cpp:
13266        (JSC::Heap::objectCount):
13267        * runtime/SmallStrings.cpp:
13268        (JSC::SmallStrings::count):
13269        * runtime/SmallStrings.h:
13270
132712009-01-15  Sam Weinig  <sam@webkit.org>
13272
13273        Fix Qt build.
13274
13275        * runtime/Collector.cpp:
13276
132772009-01-15  Sam Weinig  <sam@webkit.org>
13278
13279        Reviewed by Gavin Barraclough.
13280
13281        Fix crash seen running fast/canvas.
13282
13283        Make sure to mark the ScopeNode and CodeBlock being created
13284        in the re-parse for exception information.
13285
13286        * bytecode/CodeBlock.cpp:
13287        (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
13288        * parser/Nodes.h:
13289        (JSC::ScopeNode::mark):
13290        * runtime/Collector.cpp:
13291        (JSC::Heap::collect):
13292        * runtime/JSGlobalData.cpp:
13293        (JSC::JSGlobalData::JSGlobalData):
13294        * runtime/JSGlobalData.h:
13295
132962009-01-15  Craig Schlenter  <craig.schlenter@gmail.com>
13297
13298        Reviewed by Darin Adler.
13299
13300        https://bugs.webkit.org/show_bug.cgi?id=23347
13301        Compilation of JavaScriptCore/wtf/ThreadingPthreads.cpp fails on Linux
13302
13303        * wtf/ThreadingPthreads.cpp: included limits.h as INT_MAX is defined there.
13304
133052009-01-15  Oliver Hunt  <oliver@apple.com>
13306
13307        Reviewed by Geoff Garen.
13308
13309        Bug 23225: REGRESSION: Assertion failure in reparseInPlace() (m_sourceElements) at sfgate.com
13310        <https://bugs.webkit.org/show_bug.cgi?id=23225> <rdar://problem/6487432>
13311
13312        Character position for open and closing brace was incorrectly referencing m_position to
13313        record their position in a source document, however this is unsafe as BOMs may lead to
13314        m_position being an arbitrary position from the real position of the current character.
13315
13316        * parser/Lexer.cpp:
13317        (JSC::Lexer::matchPunctuator):
13318
133192009-01-14  David Kilzer  <ddkilzer@apple.com>
13320
13321        Bug 23153: JSC build always touches JavaScriptCore/docs/bytecode.html
13322
13323        <https://bugs.webkit.org/show_bug.cgi?id=23153>
13324
13325        Reviewed by Darin Adler.
13326
13327        Instead of building bytecode.html into ${SRCROOT}/docs/bytecode.html, build it
13328        into ${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore/docs/bytecode.html.
13329
13330        Also fixes make-bytecode-docs.pl to actually generate documentation.
13331
13332        * DerivedSources.make: Changed bytecode.html to be built into local docs
13333        directory in ${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore.
13334        * JavaScriptCore.xcodeproj/project.pbxproj: Added "/docs" to the end of the
13335        "mkdir -p" command so that the docs subdirectory is automatically created.
13336        * docs/make-bytecode-docs.pl: Changed BEGIN_OPCODE to DEFINE_OPCODE so that
13337        documentation is actually generated.
13338
133392009-01-14  Adam Treat  <adam.treat@torchmobile.com>
13340
13341        Build fix for Qt from Dmitry Titov.
13342
13343        * wtf/ThreadingQt.cpp:
13344        (WTF::ThreadCondition::timedWait):
13345
133462009-01-14  Oliver Hunt  <oliver@apple.com>
13347
13348        Reviewed by Cameron Zwarich.
13349
13350        Bug 22903: REGRESSION (r36267): visiting this site reliably crashes WebKit nightly
13351
13352        EvalCodeBlock's do not reference the functions that are declared inside the eval
13353        code, this means that simply marking the EvalCodeBlock through the global object
13354        is insufficient to mark the declared functions.  This patch corrects this by
13355        explicitly marking the CodeBlocks of all the functions declared in the cached
13356        EvalNode.
13357
13358        * bytecode/CodeBlock.cpp:
13359        (JSC::CodeBlock::mark):
13360        * bytecode/CodeBlock.h:
13361        (JSC::CodeBlock::hasFunctions):
13362        * bytecode/EvalCodeCache.h:
13363        (JSC::EvalCodeCache::mark):
13364        * parser/Nodes.cpp:
13365        (JSC::ScopeNodeData::mark):
13366        (JSC::EvalNode::mark):
13367        * parser/Nodes.h:
13368
133692009-01-14  Dmitry Titov  <dimich@chromium.org>
13370
13371        Reviewed by Alexey Proskuryakov.
13372
13373        https://bugs.webkit.org/show_bug.cgi?id=23312
13374        Implement MessageQueue::waitForMessageTimed()
13375        Also fixed ThreadCondition::timedWait() to take absolute time, as discussed on webkit-dev.
13376        Win32 version of timedWait still has to be implemented.
13377
13378        * wtf/MessageQueue.h:
13379        (WTF::MessageQueueWaitResult: new enum for the result of MessageQueue::waitForMessageTimed.
13380        (WTF::MessageQueue::waitForMessage):
13381        (WTF::MessageQueue::waitForMessageTimed): New method.
13382        * wtf/Threading.h:
13383        * wtf/ThreadingGtk.cpp:
13384        (WTF::ThreadCondition::timedWait): changed to use absolute time instead of interval.
13385        * wtf/ThreadingNone.cpp:
13386        (WTF::ThreadCondition::timedWait): ditto.
13387        * wtf/ThreadingPthreads.cpp:
13388        (WTF::ThreadCondition::timedWait): ditto.
13389        * wtf/ThreadingQt.cpp:
13390        (WTF::ThreadCondition::timedWait): ditto.
13391        * wtf/ThreadingWin.cpp:
13392        (WTF::ThreadCondition::timedWait): ditto. The actual Win32 code is still to be implemented.
13393
133942009-01-14  Dean McNamee  <deanm@chromium.org>
13395
13396        Reviewed by Darin Adler and Oliver hunt.
13397
13398        Correctly match allocation functions by implementing a custom deref().
13399
13400        https://bugs.webkit.org/show_bug.cgi?id=23315
13401
13402        * runtime/ByteArray.h:
13403        (JSC::ByteArray::deref):
13404        (JSC::ByteArray::ByteArray):
13405
134062009-01-14  Dan Bernstein  <mitz@apple.com>
13407
13408        Reviewed by John Sullivan.
13409
13410        - update copyright
13411
13412        * Info.plist:
13413
134142009-01-13  Beth Dakin  <bdakin@apple.com>
13415
13416        Reviewed by Darin Adler and Oliver Hunt.
13417
13418        <rdar://problem/6489314> REGRESSION: Business widget's front side 
13419        fails to render correctly when flipping widget
13420
13421        The problem here is that parseInt was parsing NaN as 0. This patch 
13422        corrects that by parsing NaN as NaN. This matches our old behavior 
13423        and Firefox. 
13424
13425        * runtime/JSGlobalObjectFunctions.cpp:
13426        (JSC::globalFuncParseInt):
13427
134282009-01-13  Gavin Barraclough  <barraclough@apple.com>
13429
13430        Reviewed by Oliver Hunt.
13431
13432        Fix for: https://bugs.webkit.org/show_bug.cgi?id=23292
13433
13434        Implementation of two argument canDoFastAdditiveOperations does not correlate well with reality.
13435
13436        * runtime/JSImmediate.h:
13437        (JSC::JSFastMath::canDoFastAdditiveOperations):
13438
134392009-01-13  Zalan Bujtas  <zbujtas@gmail.com>
13440
13441        Reviewed by Darin Adler.
13442
13443        https://bugs.webkit.org/show_bug.cgi?id=23290
13444        Fix JSImmediate::isImmediate(src) to !src->isCell()
13445
13446        * interpreter/Interpreter.cpp:
13447        (JSC::Interpreter::privateExecute):
13448
134492009-01-13  Dmitry Titov  <dimich@chromium.org>
13450
13451        Reviewed by Darin Adler.
13452
13453        https://bugs.webkit.org/show_bug.cgi?id=23281
13454        Fix the Chromium Win build.
13455        Need to use PLATFORM(WIN_OS) instead of PLATFORM(WIN).
13456        Moved GTK and WX up in #if sequence because they could come with WIN_OS too,
13457        while they have their own implementation even on Windows.
13458
13459        * wtf/CurrentTime.cpp:
13460        (WTF::currentTime):
13461
134622009-01-12  Gavin Barraclough  <barraclough@apple.com>
13463
13464        Reviewed by Oliver Hunt.
13465
13466        Make the JSImmediate interface private.
13467
13468        All manipulation of JS values should be through the JSValuePtr class, not by using JSImmediate
13469        directly.  The key missing methods on JSValuePtr are:
13470
13471            * isCell() - check for values that are JSCell*s, and as such where asCell() may be used.
13472            * isInt32Fast() getInt32Fast() - fast check/access for integer immediates.
13473            * isUInt32Fast() getUInt32Fast() - ditto for unsigned integer immediates.
13474
13475        The JIT is allowed full access to JSImmediate, since it needs to be able to directly
13476        manipulate JSValuePtrs.  The Interpreter is provided access to perform operations directly
13477        on JSValuePtrs through the new JSFastMath interface.
13478
13479        No performance impact.
13480
13481        * API/JSCallbackObjectFunctions.h:
13482        (JSC::::toNumber):
13483        * API/JSValueRef.cpp:
13484        (JSValueIsEqual):
13485        (JSValueIsStrictEqual):
13486        * JavaScriptCore.exp:
13487        * bytecode/CodeBlock.h:
13488        (JSC::CodeBlock::isKnownNotImmediate):
13489        * bytecompiler/BytecodeGenerator.cpp:
13490        (JSC::keyForImmediateSwitch):
13491        * bytecompiler/BytecodeGenerator.h:
13492        (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue):
13493        (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue):
13494        * interpreter/Interpreter.cpp:
13495        (JSC::jsLess):
13496        (JSC::jsLessEq):
13497        (JSC::jsAdd):
13498        (JSC::jsIsObjectType):
13499        (JSC::cachePrototypeChain):
13500        (JSC::Interpreter::tryCachePutByID):
13501        (JSC::Interpreter::tryCacheGetByID):
13502        (JSC::Interpreter::privateExecute):
13503        (JSC::Interpreter::tryCTICachePutByID):
13504        (JSC::Interpreter::tryCTICacheGetByID):
13505        (JSC::Interpreter::cti_op_add):
13506        (JSC::Interpreter::cti_op_get_by_id_self_fail):
13507        (JSC::Interpreter::cti_op_get_by_id_proto_list):
13508        (JSC::Interpreter::cti_op_instanceof):
13509        (JSC::Interpreter::cti_op_mul):
13510        (JSC::Interpreter::cti_op_get_by_val):
13511        (JSC::Interpreter::cti_op_get_by_val_byte_array):
13512        (JSC::Interpreter::cti_op_sub):
13513        (JSC::Interpreter::cti_op_put_by_val):
13514        (JSC::Interpreter::cti_op_put_by_val_array):
13515        (JSC::Interpreter::cti_op_put_by_val_byte_array):
13516        (JSC::Interpreter::cti_op_negate):
13517        (JSC::Interpreter::cti_op_div):
13518        (JSC::Interpreter::cti_op_eq):
13519        (JSC::Interpreter::cti_op_lshift):
13520        (JSC::Interpreter::cti_op_bitand):
13521        (JSC::Interpreter::cti_op_rshift):
13522        (JSC::Interpreter::cti_op_bitnot):
13523        (JSC::Interpreter::cti_op_neq):
13524        (JSC::Interpreter::cti_op_urshift):
13525        (JSC::Interpreter::cti_op_call_eval):
13526        (JSC::Interpreter::cti_op_throw):
13527        (JSC::Interpreter::cti_op_is_undefined):
13528        (JSC::Interpreter::cti_op_stricteq):
13529        (JSC::Interpreter::cti_op_nstricteq):
13530        (JSC::Interpreter::cti_op_switch_imm):
13531        (JSC::Interpreter::cti_vm_throw):
13532        * interpreter/Interpreter.h:
13533        (JSC::Interpreter::isJSArray):
13534        (JSC::Interpreter::isJSString):
13535        (JSC::Interpreter::isJSByteArray):
13536        * jit/JIT.cpp:
13537        (JSC::JIT::compileOpStrictEq):
13538        (JSC::JIT::privateCompileMainPass):
13539        * jit/JIT.h:
13540        (JSC::JIT::isStrictEqCaseHandledInJITCode):
13541        * jit/JITArithmetic.cpp:
13542        (JSC::JIT::compileFastArith_op_rshift):
13543        (JSC::JIT::compileFastArith_op_bitand):
13544        (JSC::JIT::compileFastArith_op_mod):
13545        * jit/JITCall.cpp:
13546        (JSC::JIT::unlinkCall):
13547        (JSC::JIT::compileOpCall):
13548        * jit/JITInlineMethods.h:
13549        (JSC::JIT::getConstantOperandImmediateInt):
13550        (JSC::JIT::isOperandConstantImmediateInt):
13551        * parser/Nodes.cpp:
13552        (JSC::processClauseList):
13553        * runtime/ArrayPrototype.cpp:
13554        (JSC::arrayProtoFuncIndexOf):
13555        (JSC::arrayProtoFuncLastIndexOf):
13556        * runtime/BooleanPrototype.cpp:
13557        (JSC::booleanProtoFuncValueOf):
13558        * runtime/Collector.cpp:
13559        (JSC::Heap::protect):
13560        (JSC::Heap::unprotect):
13561        (JSC::Heap::heap):
13562        * runtime/JSByteArray.cpp:
13563        (JSC::JSByteArray::getOwnPropertySlot):
13564        * runtime/JSByteArray.h:
13565        (JSC::JSByteArray::getIndex):
13566        * runtime/JSCell.cpp:
13567        * runtime/JSCell.h:
13568        (JSC::JSValuePtr::isNumberCell):
13569        (JSC::JSValuePtr::asCell):
13570        (JSC::JSValuePtr::isNumber):
13571        * runtime/JSGlobalObjectFunctions.cpp:
13572        (JSC::globalFuncParseInt):
13573        * runtime/JSImmediate.h:
13574        (JSC::js0):
13575        (JSC::jsImpossibleValue):
13576        (JSC::JSValuePtr::toInt32):
13577        (JSC::JSValuePtr::toUInt32):
13578        (JSC::JSValuePtr::isCell):
13579        (JSC::JSValuePtr::isInt32Fast):
13580        (JSC::JSValuePtr::getInt32Fast):
13581        (JSC::JSValuePtr::isUInt32Fast):
13582        (JSC::JSValuePtr::getUInt32Fast):
13583        (JSC::JSValuePtr::makeInt32Fast):
13584        (JSC::JSValuePtr::areBothInt32Fast):
13585        (JSC::JSFastMath::canDoFastBitwiseOperations):
13586        (JSC::JSFastMath::equal):
13587        (JSC::JSFastMath::notEqual):
13588        (JSC::JSFastMath::andImmediateNumbers):
13589        (JSC::JSFastMath::xorImmediateNumbers):
13590        (JSC::JSFastMath::orImmediateNumbers):
13591        (JSC::JSFastMath::canDoFastRshift):
13592        (JSC::JSFastMath::canDoFastUrshift):
13593        (JSC::JSFastMath::rightShiftImmediateNumbers):
13594        (JSC::JSFastMath::canDoFastAdditiveOperations):
13595        (JSC::JSFastMath::addImmediateNumbers):
13596        (JSC::JSFastMath::subImmediateNumbers):
13597        (JSC::JSFastMath::incImmediateNumber):
13598        (JSC::JSFastMath::decImmediateNumber):
13599        * runtime/JSNumberCell.h:
13600        (JSC::JSValuePtr::asNumberCell):
13601        (JSC::jsNumber):
13602        (JSC::JSValuePtr::uncheckedGetNumber):
13603        (JSC::JSNumberCell::toInt32):
13604        (JSC::JSNumberCell::toUInt32):
13605        (JSC::JSValuePtr::toJSNumber):
13606        (JSC::JSValuePtr::getNumber):
13607        (JSC::JSValuePtr::numberToInt32):
13608        (JSC::JSValuePtr::numberToUInt32):
13609        * runtime/JSObject.h:
13610        (JSC::JSValuePtr::isObject):
13611        (JSC::JSValuePtr::get):
13612        (JSC::JSValuePtr::put):
13613        * runtime/JSValue.cpp:
13614        (JSC::JSValuePtr::toInteger):
13615        (JSC::JSValuePtr::toIntegerPreserveNaN):
13616        * runtime/JSValue.h:
13617        * runtime/Operations.cpp:
13618        (JSC::JSValuePtr::equalSlowCase):
13619        (JSC::JSValuePtr::strictEqualSlowCase):
13620        * runtime/Operations.h:
13621        (JSC::JSValuePtr::equal):
13622        (JSC::JSValuePtr::equalSlowCaseInline):
13623        (JSC::JSValuePtr::strictEqual):
13624        (JSC::JSValuePtr::strictEqualSlowCaseInline):
13625        * runtime/Protect.h:
13626        (JSC::gcProtect):
13627        (JSC::gcUnprotect):
13628        * runtime/StringPrototype.cpp:
13629        (JSC::stringProtoFuncCharAt):
13630        (JSC::stringProtoFuncCharCodeAt):
13631        * runtime/Structure.cpp:
13632        (JSC::Structure::createCachedPrototypeChain):
13633
136342009-01-12  Kevin Ollivier  <kevino@theolliviers.com>
13635
13636        Since date time functions have moved here, now the wx port JSC
13637        needs to depend on wx.
13638
13639        * jscore.bkl:
13640
136412009-01-11  David Levin  <levin@chromium.org>
13642
13643        Reviewed by Darin Adler.
13644
13645        https://bugs.webkit.org/show_bug.cgi?id=23245
13646
13647        Add initializeThreading to key places in JS API to ensure that
13648        UString is properly initialized.
13649
13650        * API/JSContextRef.cpp:
13651        (JSContextGroupCreate):
13652        (JSGlobalContextCreate):
13653        * API/JSObjectRef.cpp:
13654        (JSClassCreate):
13655        * API/JSStringRef.cpp:
13656        (JSStringCreateWithCharacters):
13657        (JSStringCreateWithUTF8CString):
13658        * API/JSStringRefCF.cpp:
13659        (JSStringCreateWithCFString):
13660
136612009-01-11  David Levin  <levin@chromium.org>
13662
13663        Reviewed by Darin Adler.
13664
13665        https://bugs.webkit.org/show_bug.cgi?id=23175
13666
13667        Separate out BaseString information from UString::Rep and make all baseString access go through
13668        a member function, so that it may be used for something else (in the future) in the BaseString
13669        case.
13670
13671        * runtime/SmallStrings.cpp:
13672        (JSC::SmallStringsStorage::rep):
13673        (JSC::SmallStringsStorage::SmallStringsStorage):
13674        (JSC::SmallStrings::SmallStrings):
13675        (JSC::SmallStrings::mark):
13676        Adjust to account for the changes in UString and put the UString in place in
13677        SmallStringsStorage to aid in locality of reference among the UChar[] and UString::Rep's.
13678
13679        * runtime/SmallStrings.h:
13680        * runtime/UString.cpp:
13681        (JSC::initializeStaticBaseString):
13682        (JSC::initializeUString):
13683        (JSC::UString::Rep::create):
13684        (JSC::UString::Rep::destroy):
13685        (JSC::UString::Rep::checkConsistency):
13686        (JSC::expandCapacity):
13687        (JSC::UString::expandPreCapacity):
13688        (JSC::concatenate):
13689        (JSC::UString::append):
13690        (JSC::UString::operator=):
13691        * runtime/UString.h:
13692        (JSC::UString::Rep::baseIsSelf):
13693        (JSC::UString::Rep::setBaseString):
13694        (JSC::UString::Rep::baseString):
13695        (JSC::UString::Rep::):
13696        (JSC::UString::Rep::null):
13697        (JSC::UString::Rep::empty):
13698        (JSC::UString::Rep::data):
13699        (JSC::UString::cost):
13700        Separate out the items out used by base strings from those used in Rep's that only
13701        point to base strings.  (This potentially saves 24 bytes per Rep.)
13702
137032009-01-11  Darin Adler  <darin@apple.com>
13704
13705        Reviewed by Dan Bernstein.
13706
13707        Bug 23239: improve handling of unused arguments in JavaScriptCore
13708        https://bugs.webkit.org/show_bug.cgi?id=23239
13709
13710        * runtime/DatePrototype.cpp: Moved LocaleDateTimeFormat enum outside #if
13711        so we can use this on all platforms. Changed valueOf to share the same
13712        function with getTime, since the contents of the two are identical. Removed
13713        a FIXME since the idea isn't really specific enough or helpful enough to
13714        need to sit here in the source code.
13715        (JSC::formatLocaleDate): Changed the Mac version of this function to take
13716        the same arguments as the non-Mac version so the caller doesn't have to
13717        special-case the two platforms. Also made the formatString array be const;
13718        before the characters were, but the array was a modifiable global variable.
13719        (JSC::dateProtoFuncToLocaleString): Changed to call the new unified
13720        version of formatLocaleDate and remove the ifdef.
13721        (JSC::dateProtoFuncToLocaleDateString): Ditto.
13722        (JSC::dateProtoFuncToLocaleTimeString): Ditto.
13723
13724        * runtime/JSNotAnObject.cpp:
13725        (JSC::JSNotAnObject::toObject): Use the new ASSERT_UNUSED instead of the
13726        old UNUSED_PARAM.
13727
13728        * runtime/RegExp.cpp:
13729        (JSC::RegExp::RegExp): Changed to only use UNUSED_PARAM when the parameter
13730        is actually unused.
13731
13732        * wtf/TCSystemAlloc.cpp:
13733        (TCMalloc_SystemRelease): Changed to only use UNUSED_PARAM when the parameter
13734        is actually unused.
13735        (TCMalloc_SystemCommit): Changed to omit the argument names instead of using
13736        UNUSED_PARAM.
13737
137382009-01-11  Oliver Hunt  <oliver@apple.com>
13739
13740        Reviewed by NOBODY (Build fix).
13741
13742        Fix the build (whoops)
13743
13744        * interpreter/Interpreter.cpp:
13745        (JSC::Interpreter::cti_op_get_by_val):
13746
137472009-01-11  Oliver Hunt  <oliver@apple.com>
13748
13749        Reviewed by Darin Adler and Anders Carlsson
13750
13751        Bug 23128: get/put_by_val need to respecialise in the face of ByteArray
13752
13753        Restructure the code slightly, and add comments per Darin's suggestions
13754
13755        * interpreter/Interpreter.cpp:
13756        (JSC::Interpreter::cti_op_get_by_val):
13757        (JSC::Interpreter::cti_op_get_by_val_byte_array):
13758        (JSC::Interpreter::cti_op_put_by_val):
13759        (JSC::Interpreter::cti_op_put_by_val_byte_array):
13760
137612009-01-11  Oliver Hunt  <oliver@apple.com>
13762
13763        Reviewed by Anders Carlsson.
13764
13765        Whoops, I accidentally removed an exception check from fast the
13766        fast path for string indexing when i originally landed the
13767        byte array logic.
13768
13769        * interpreter/Interpreter.cpp:
13770        (JSC::Interpreter::cti_op_get_by_val):
13771
137722009-01-11  Oliver Hunt  <oliver@apple.com>
13773
13774        Reviewed by Anders Carlsson.
13775
13776        Bug 23128: get/put_by_val need to respecialise in the face of ByteArray
13777        <https://bugs.webkit.org/show_bug.cgi?id=23128>
13778
13779        Fairly simple patch, add specialised versions of cti_op_get/put_by_val
13780        that assume ByteArray, thus avoiding a few branches in the case of bytearray
13781        manipulation.
13782
13783        No effect on SunSpider.  15% win on the original testcase.
13784
13785        * interpreter/Interpreter.cpp:
13786        (JSC::Interpreter::cti_op_get_by_val):
13787        (JSC::Interpreter::cti_op_get_by_val_byte_array):
13788        (JSC::Interpreter::cti_op_put_by_val):
13789        (JSC::Interpreter::cti_op_put_by_val_byte_array):
13790        * interpreter/Interpreter.h:
13791
137922009-01-11  Alexey Proskuryakov  <ap@webkit.org>
13793
13794        Try to fix Windows build.
13795
13796        * wtf/CurrentTime.cpp: Added a definition of msPerSecond (previously, this code was in
13797        DateMath.cpp, with constant definition in DateTime.h)
13798
137992009-01-11  Alexey Proskuryakov  <ap@webkit.org>
13800
13801        Try to fix Windows build.
13802
13803        * wtf/CurrentTime.cpp: Include <sys/types.h> and <sys/timeb.h>, as MSDN says to.
13804
138052009-01-11  Dmitry Titov  <dimich@chromium.org>
13806
13807        Reviewed by Darin Adler.
13808
13809        https://bugs.webkit.org/show_bug.cgi?id=23207
13810        Moved currentTime() to from WebCore to WTF.
13811
13812        * GNUmakefile.am:
13813        * JavaScriptCore.exp: added export for WTF::currentTime()
13814        * JavaScriptCore.pri:
13815        * JavaScriptCore.scons:
13816        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
13817        * JavaScriptCore.xcodeproj/project.pbxproj:
13818        * JavaScriptCoreSources.bkl:
13819        * runtime/DateMath.cpp:
13820        (JSC::getCurrentUTCTimeWithMicroseconds): This function had another implementation of currentTime(), essentially. Now uses WTF version.
13821        * wtf/CurrentTime.cpp: Added.
13822        (WTF::currentTime):
13823        (WTF::highResUpTime):
13824        (WTF::lowResUTCTime):
13825        (WTF::qpcAvailable):
13826        * wtf/CurrentTime.h: Added.
13827
138282009-01-09  Gavin Barraclough  <barraclough@apple.com>
13829
13830        Reviewed by Oliver Hunt.
13831
13832        Stage two of converting JSValue from a pointer to a class type.
13833        Remove the class JSValue.  The functionallity has been transitioned
13834        into the wrapper class type JSValuePtr.
13835
13836        The last stage will be to rename JSValuePtr to JSValue, remove the
13837        overloaded -> operator, and switch operations on JSValuePtrs from
13838        using '->' to use '.' instead.
13839
13840        * API/APICast.h:
13841        * JavaScriptCore.exp:
13842        * runtime/JSCell.h:
13843        (JSC::asCell):
13844        (JSC::JSValuePtr::asCell):
13845        (JSC::JSValuePtr::isNumber):
13846        (JSC::JSValuePtr::isString):
13847        (JSC::JSValuePtr::isGetterSetter):
13848        (JSC::JSValuePtr::isObject):
13849        (JSC::JSValuePtr::getNumber):
13850        (JSC::JSValuePtr::getString):
13851        (JSC::JSValuePtr::getObject):
13852        (JSC::JSValuePtr::getCallData):
13853        (JSC::JSValuePtr::getConstructData):
13854        (JSC::JSValuePtr::getUInt32):
13855        (JSC::JSValuePtr::getTruncatedInt32):
13856        (JSC::JSValuePtr::getTruncatedUInt32):
13857        (JSC::JSValuePtr::mark):
13858        (JSC::JSValuePtr::marked):
13859        (JSC::JSValuePtr::toPrimitive):
13860        (JSC::JSValuePtr::getPrimitiveNumber):
13861        (JSC::JSValuePtr::toBoolean):
13862        (JSC::JSValuePtr::toNumber):
13863        (JSC::JSValuePtr::toString):
13864        (JSC::JSValuePtr::toObject):
13865        (JSC::JSValuePtr::toThisObject):
13866        (JSC::JSValuePtr::needsThisConversion):
13867        (JSC::JSValuePtr::toThisString):
13868        (JSC::JSValuePtr::getJSNumber):
13869        * runtime/JSImmediate.h:
13870        (JSC::JSValuePtr::isUndefined):
13871        (JSC::JSValuePtr::isNull):
13872        (JSC::JSValuePtr::isUndefinedOrNull):
13873        (JSC::JSValuePtr::isBoolean):
13874        (JSC::JSValuePtr::getBoolean):
13875        (JSC::JSValuePtr::toInt32):
13876        (JSC::JSValuePtr::toUInt32):
13877        * runtime/JSNumberCell.h:
13878        (JSC::JSValuePtr::uncheckedGetNumber):
13879        (JSC::JSValuePtr::toJSNumber):
13880        * runtime/JSObject.h:
13881        (JSC::JSValuePtr::isObject):
13882        (JSC::JSValuePtr::get):
13883        (JSC::JSValuePtr::put):
13884        * runtime/JSString.h:
13885        (JSC::JSValuePtr::toThisJSString):
13886        * runtime/JSValue.cpp:
13887        (JSC::JSValuePtr::toInteger):
13888        (JSC::JSValuePtr::toIntegerPreserveNaN):
13889        (JSC::JSValuePtr::toInt32SlowCase):
13890        (JSC::JSValuePtr::toUInt32SlowCase):
13891        * runtime/JSValue.h:
13892        (JSC::JSValuePtr::makeImmediate):
13893        (JSC::JSValuePtr::immediateValue):
13894        (JSC::JSValuePtr::JSValuePtr):
13895        (JSC::JSValuePtr::operator->):
13896        (JSC::JSValuePtr::operator bool):
13897        (JSC::JSValuePtr::operator==):
13898        (JSC::JSValuePtr::operator!=):
13899        (JSC::JSValuePtr::encode):
13900        (JSC::JSValuePtr::decode):
13901        (JSC::JSValuePtr::toFloat):
13902        (JSC::JSValuePtr::asValue):
13903        (JSC::operator==):
13904        (JSC::operator!=):
13905
139062009-01-09  David Levin  <levin@chromium.org>
13907
13908        Reviewed by Oliver Hunt.
13909
13910        https://bugs.webkit.org/show_bug.cgi?id=23175
13911
13912        Adjustment to previous patch.  Remove call to initilizeThreading from JSGlobalCreate
13913        and fix jsc.cpp instead.
13914
13915        * jsc.cpp:
13916        (main):
13917        (jscmain):
13918        * runtime/JSGlobalData.cpp:
13919        (JSC::JSGlobalData::create):
13920
139212009-01-09  Sam Weinig  <sam@webkit.org>
13922
13923        Roll r39720 back in with a working interpreted mode.
13924
139252009-01-09  David Levin  <levin@chromium.org>
13926
13927        Reviewed by Oliver Hunt.
13928
13929        https://bugs.webkit.org/show_bug.cgi?id=23175
13930
13931        Added a template to make the pointer and flags combination
13932        in UString more readable and less error prone.
13933
13934        * GNUmakefile.am:
13935        * JavaScriptCore.exp:
13936        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
13937        * JavaScriptCore.xcodeproj/project.pbxproj:
13938        Added PtrAndFlags.h (and sorted the xcode project file).
13939
13940        * runtime/Identifier.cpp:
13941        (JSC::Identifier::add):
13942        (JSC::Identifier::addSlowCase):
13943        * runtime/InitializeThreading.cpp:
13944        (JSC::initializeThreadingOnce):
13945        Made the init threading initialize the UString globals.  Before
13946        these were initilized using {} but that became harder due to the
13947        addition of this tempalte class.
13948
13949        * runtime/JSGlobalData.cpp:
13950        (JSC::JSGlobalData::create):
13951        * runtime/PropertyNameArray.cpp:
13952        (JSC::PropertyNameArray::add):
13953        * runtime/UString.cpp:
13954        (JSC::initializeStaticBaseString):
13955        (JSC::initializeUString):
13956        (JSC::UString::Rep::create):
13957        (JSC::UString::Rep::createFromUTF8):
13958        (JSC::createRep):
13959        (JSC::UString::UString):
13960        (JSC::concatenate):
13961        (JSC::UString::operator=):
13962        (JSC::UString::makeNull):
13963        (JSC::UString::nullRep):
13964        * runtime/UString.h:
13965        (JSC::UString::Rep::identifierTable):
13966        (JSC::UString::Rep::setIdentifierTable):
13967        (JSC::UString::Rep::isStatic):
13968        (JSC::UString::Rep::setStatic):
13969        (JSC::UString::Rep::):
13970        (JSC::UString::Rep::null):
13971        (JSC::UString::Rep::empty):
13972        (JSC::UString::isNull):
13973        (JSC::UString::null):
13974        (JSC::UString::UString):
13975
13976        * wtf/PtrAndFlags.h: Added.
13977        (WTF::PtrAndFlags::PtrAndFlags):
13978        (WTF::PtrAndFlags::isFlagSet):
13979        (WTF::PtrAndFlags::setFlag):
13980        (WTF::PtrAndFlags::clearFlag):
13981        (WTF::PtrAndFlags::get):
13982        (WTF::PtrAndFlags::set):
13983        A simple way to layer together a pointer and 2 flags.  It relies on the pointer being 4 byte aligned,
13984        which should happen for all allocators (due to aligning pointers, int's, etc. on 4 byte boundaries).
13985
139862009-01-08  Gavin Barraclough  <barraclough@apple.com>
13987
13988        Reviewed by -O-l-i-v-e-r- -H-u-n-t- Sam Weinig (sorry, Sam!).
13989
13990        Encode immediates in the low word of JSValuePtrs, on x86-64.
13991
13992        On 32-bit platforms a JSValuePtr may represent a 31-bit signed integer.
13993        On 64-bit platforms, if USE(ALTERNATE_JSIMMEDIATE) is defined, a full
13994        32-bit integer may be stored in an immediate.
13995        
13996        Presently USE(ALTERNATE_JSIMMEDIATE) uses the same encoding as the default
13997        immediate format - the value is left shifted by one, so a one bit tag can
13998        be added to indicate the value is an immediate.  However this means that
13999        values must be commonly be detagged (by right shifting by one) before
14000        arithmetic operations can be performed on immediates.  This patch modifies
14001        the formattting so the the high bits of the immediate mark values as being
14002        integer.
14003
14004        * assembler/MacroAssembler.h:
14005        (JSC::MacroAssembler::not32):
14006        (JSC::MacroAssembler::orPtr):
14007        (JSC::MacroAssembler::zeroExtend32ToPtr):
14008        (JSC::MacroAssembler::jaePtr):
14009        (JSC::MacroAssembler::jbPtr):
14010        (JSC::MacroAssembler::jnzPtr):
14011        (JSC::MacroAssembler::jzPtr):
14012        * assembler/X86Assembler.h:
14013        (JSC::X86Assembler::):
14014        (JSC::X86Assembler::notl_r):
14015        (JSC::X86Assembler::testq_i32r):
14016        * jit/JIT.cpp:
14017        (JSC::JIT::privateCompileMainPass):
14018        (JSC::JIT::privateCompileSlowCases):
14019        (JSC::JIT::privateCompileCTIMachineTrampolines):
14020        * jit/JIT.h:
14021        * jit/JITArithmetic.cpp:
14022        (JSC::JIT::compileFastArith_op_lshift):
14023        (JSC::JIT::compileFastArith_op_rshift):
14024        (JSC::JIT::compileFastArith_op_bitand):
14025        (JSC::JIT::compileFastArithSlow_op_bitand):
14026        (JSC::JIT::compileFastArith_op_mod):
14027        (JSC::JIT::compileFastArithSlow_op_mod):
14028        (JSC::JIT::compileFastArith_op_add):
14029        (JSC::JIT::compileFastArith_op_mul):
14030        (JSC::JIT::compileFastArith_op_post_inc):
14031        (JSC::JIT::compileFastArith_op_post_dec):
14032        (JSC::JIT::compileFastArith_op_pre_inc):
14033        (JSC::JIT::compileFastArith_op_pre_dec):
14034        (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate):
14035        (JSC::JIT::compileBinaryArithOp):
14036        * jit/JITCall.cpp:
14037        (JSC::JIT::compileOpCallSlowCase):
14038        * jit/JITInlineMethods.h:
14039        (JSC::JIT::emitJumpIfJSCell):
14040        (JSC::JIT::emitJumpIfNotJSCell):
14041        (JSC::JIT::emitJumpIfImmNum):
14042        (JSC::JIT::emitJumpSlowCaseIfNotImmNum):
14043        (JSC::JIT::emitJumpSlowCaseIfNotImmNums):
14044        (JSC::JIT::emitFastArithDeTagImmediate):
14045        (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
14046        (JSC::JIT::emitFastArithReTagImmediate):
14047        (JSC::JIT::emitFastArithImmToInt):
14048        (JSC::JIT::emitFastArithIntToImmNoCheck):
14049        (JSC::JIT::emitTagAsBoolImmediate):
14050        * jit/JITPropertyAccess.cpp:
14051        (JSC::resizePropertyStorage):
14052        (JSC::JIT::privateCompilePutByIdTransition):
14053        (JSC::JIT::privateCompilePatchGetArrayLength):
14054        (JSC::JIT::privateCompileGetByIdSelf):
14055        (JSC::JIT::privateCompileGetByIdProto):
14056        (JSC::JIT::privateCompileGetByIdChain):
14057        (JSC::JIT::privateCompilePutByIdReplace):
14058        * runtime/JSImmediate.h:
14059        (JSC::JSImmediate::isNumber):
14060        (JSC::JSImmediate::isPositiveNumber):
14061        (JSC::JSImmediate::areBothImmediateNumbers):
14062        (JSC::JSImmediate::xorImmediateNumbers):
14063        (JSC::JSImmediate::rightShiftImmediateNumbers):
14064        (JSC::JSImmediate::canDoFastAdditiveOperations):
14065        (JSC::JSImmediate::addImmediateNumbers):
14066        (JSC::JSImmediate::subImmediateNumbers):
14067        (JSC::JSImmediate::makeInt):
14068        (JSC::JSImmediate::toBoolean):
14069        * wtf/Platform.h:
14070
140712009-01-08  Sam Weinig  <sam@webkit.org>
14072
14073        Revert r39720. It broke Interpreted mode.
14074
140752009-01-08  Sam Weinig  <sam@webkit.org>
14076
14077        Reviewed by Oliver Hunt.
14078
14079        Fix for https://bugs.webkit.org/show_bug.cgi?id=23197
14080        Delay creating the PCVector until an exception is thrown
14081        Part of <rdar://problem/6469060>
14082        Don't store exception information for a CodeBlock until first exception is thrown
14083
14084        - Change the process for re-parsing/re-generating bytecode for exception information
14085          to use data from the original CodeBlock (offsets of GlobalResolve instructions) to
14086          aid in creating an identical instruction stream on re-parse, instead of padding
14087          interchangeable opcodes, which would result in different JITed code.
14088        - Fix bug where the wrong ScopeChainNode was used when re-parsing/regenerating from
14089          within some odd modified scope chains.
14090        - Lazily create the pcVector by re-JITing the regenerated CodeBlock and stealing the
14091          the pcVector from it.
14092
14093        Saves ~2MB on Membuster head.
14094
14095        * bytecode/CodeBlock.cpp:
14096        (JSC::CodeBlock::dump):
14097        (JSC::CodeBlock::reparseForExceptionInfoIfNecessary):
14098        (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset):
14099        (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset):
14100        * bytecode/CodeBlock.h:
14101        (JSC::JITCodeRef::JITCodeRef):
14102        (JSC::GlobalResolveInfo::GlobalResolveInfo):
14103        (JSC::CodeBlock::getBytecodeIndex):
14104        (JSC::CodeBlock::addGlobalResolveInstruction):
14105        (JSC::CodeBlock::addGlobalResolveInfo):
14106        (JSC::CodeBlock::addFunctionRegisterInfo):
14107        (JSC::CodeBlock::hasExceptionInfo):
14108        (JSC::CodeBlock::pcVector):
14109        (JSC::EvalCodeBlock::EvalCodeBlock):
14110        (JSC::EvalCodeBlock::baseScopeDepth):
14111        * bytecode/Opcode.h:
14112        * bytecompiler/BytecodeGenerator.cpp:
14113        (JSC::BytecodeGenerator::BytecodeGenerator):
14114        (JSC::BytecodeGenerator::emitResolve):
14115        (JSC::BytecodeGenerator::emitGetScopedVar):
14116        * bytecompiler/BytecodeGenerator.h:
14117        (JSC::BytecodeGenerator::setRegeneratingForExceptionInfo):
14118        * interpreter/Interpreter.cpp:
14119        (JSC::bytecodeOffsetForPC):
14120        (JSC::Interpreter::unwindCallFrame):
14121        (JSC::Interpreter::privateExecute):
14122        (JSC::Interpreter::retrieveLastCaller):
14123        (JSC::Interpreter::cti_op_instanceof):
14124        (JSC::Interpreter::cti_op_call_NotJSFunction):
14125        (JSC::Interpreter::cti_op_resolve):
14126        (JSC::Interpreter::cti_op_construct_NotJSConstruct):
14127        (JSC::Interpreter::cti_op_resolve_func):
14128        (JSC::Interpreter::cti_op_resolve_skip):
14129        (JSC::Interpreter::cti_op_resolve_global):
14130        (JSC::Interpreter::cti_op_resolve_with_base):
14131        (JSC::Interpreter::cti_op_throw):
14132        (JSC::Interpreter::cti_op_in):
14133        (JSC::Interpreter::cti_vm_throw):
14134        * jit/JIT.cpp:
14135        (JSC::JIT::privateCompile):
14136        * parser/Nodes.cpp:
14137        (JSC::EvalNode::generateBytecode):
14138        (JSC::EvalNode::bytecodeForExceptionInfoReparse):
14139        (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse):
14140        * parser/Nodes.h:
14141
141422009-01-08  Jian Li  <jianli@chromium.org>
14143
14144        Reviewed by Alexey Proskuryakov.
14145
14146        Add Win32 implementation of ThreadSpecific.
14147        https://bugs.webkit.org/show_bug.cgi?id=22614
14148
14149        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
14150        * wtf/ThreadSpecific.h:
14151        (WTF::ThreadSpecific::ThreadSpecific):
14152        (WTF::ThreadSpecific::~ThreadSpecific):
14153        (WTF::ThreadSpecific::get):
14154        (WTF::ThreadSpecific::set):
14155        (WTF::ThreadSpecific::destroy):
14156        * wtf/ThreadSpecificWin.cpp: Added.
14157        (WTF::ThreadSpecificThreadExit):
14158        * wtf/ThreadingWin.cpp:
14159        (WTF::wtfThreadEntryPoint):
14160
141612009-01-08  Justin McPherson <justin.mcpherson@nokia.com>
14162
14163        Reviewed by Simon Hausmann.
14164
14165        Fix compilation with Qt on NetBSD.
14166
14167        * runtime/Collector.cpp:
14168        (JSC::currentThreadStackBase): Use PLATFORM(NETBSD) to enter the
14169        code path to retrieve the stack base using pthread_attr_get_np.
14170        The PTHREAD_NP_H define is not used because the header file does
14171        not exist on NetBSD, but the function is declared nevertheless.
14172        * wtf/Platform.h: Introduce WTF_PLATFORM_NETBSD.
14173
141742009-01-07  Sam Weinig  <sam@webkit.org>
14175
14176        Reviewed by Geoffrey Garen.
14177
14178        <rdar://problem/6469060> Don't store exception information for a CodeBlock until first exception is thrown
14179
14180        Don't initially store exception information (lineNumber/expressionRange/getByIdExcecptionInfo)
14181        in CodeBlocks blocks.  Instead, re-parse for the data on demand and cache it then.
14182
14183        One important change that was needed to make this work was to pad op_get_global_var with nops to
14184        be the same length as op_resolve_global, since one could be replaced for the other on re-parsing,
14185        and we want to keep the offsets bytecode offsets the same.
14186
14187        1.3MB improvement on Membuster head.
14188
14189        * bytecode/CodeBlock.cpp:
14190        (JSC::CodeBlock::dump): Update op_get_global_var to account for the padding.
14191        (JSC::CodeBlock::dumpStatistics): Add more statistic dumping.
14192        (JSC::CodeBlock::CodeBlock): Initialize m_exceptionInfo.
14193        (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): Re-parses the CodeBlocks
14194        associated SourceCode and steals the ExceptionInfo from it.
14195        (JSC::CodeBlock::lineNumberForBytecodeOffset): Creates the exception info on demand.
14196        (JSC::CodeBlock::expressionRangeForBytecodeOffset): Ditto.
14197        (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): Ditto.
14198        * bytecode/CodeBlock.h:
14199        (JSC::CodeBlock::numberOfExceptionHandlers): Updated to account for m_exceptionInfo indirection.
14200        (JSC::CodeBlock::addExceptionHandler): Ditto.
14201        (JSC::CodeBlock::exceptionHandler): Ditto.
14202        (JSC::CodeBlock::clearExceptionInfo): Ditto.
14203        (JSC::CodeBlock::addExpressionInfo): Ditto.
14204        (JSC::CodeBlock::addGetByIdExceptionInfo): Ditto.
14205        (JSC::CodeBlock::numberOfLineInfos): Ditto.
14206        (JSC::CodeBlock::addLineInfo): Ditto.
14207        (JSC::CodeBlock::lastLineInfo): Ditto.
14208
14209        * bytecode/Opcode.h: Change length of op_get_global_var to match op_resolve_global.
14210
14211        * bytecode/SamplingTool.cpp:
14212        (JSC::SamplingTool::dump): Add comment indicating why it is okay not to pass a CallFrame.
14213
14214        * bytecompiler/BytecodeGenerator.cpp:
14215        (JSC::BytecodeGenerator::generate): Clear the exception info after generation for Function and Eval
14216        Code when not in regenerate for exception info mode.
14217        (JSC::BytecodeGenerator::BytecodeGenerator): Initialize m_regeneratingForExceptionInfo to false.
14218        (JSC::BytecodeGenerator::emitGetScopedVar): Pad op_get_global_var with 2 nops.
14219        * bytecompiler/BytecodeGenerator.h:
14220        (JSC::BytecodeGenerator::setRegeneratingForExcpeptionInfo): Added.
14221
14222        * interpreter/Interpreter.cpp:
14223        (JSC::Interpreter::throwException): Pass the CallFrame to exception info accessors.
14224        (JSC::Interpreter::privateExecute): Ditto.
14225        (JSC::Interpreter::retrieveLastCaller): Ditto.
14226        (JSC::Interpreter::cti_op_new_error): Ditto.
14227
14228        * jit/JIT.cpp:
14229        (JSC::JIT::privateCompileMainPass): Pass the current bytecode offset instead of hard coding the
14230        line number, the stub will do the accessing if it gets called.
14231
14232        * parser/Nodes.cpp:
14233        (JSC::ProgramNode::emitBytecode): Moved.
14234        (JSC::ProgramNode::generateBytecode): Moved.
14235        (JSC::EvalNode::create): Moved.
14236        (JSC::EvalNode::bytecodeForExceptionInfoReparse): Added.
14237        (JSC::FunctionBodyNode::generateBytecode): Rename reparse to reparseInPlace.
14238        (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse): Addded.
14239
14240        * parser/Nodes.h:
14241        (JSC::ScopeNode::features): Added getter.
14242        * parser/Parser.cpp:
14243        (JSC::Parser::reparseInPlace): Renamed from reparse.
14244        * parser/Parser.h:
14245        (JSC::Parser::reparse): Added. Re-parses the passed in Node into
14246        a new Node.
14247        * runtime/ExceptionHelpers.cpp:
14248        (JSC::createUndefinedVariableError): Pass along CallFrame.
14249        (JSC::createInvalidParamError): Ditto.
14250        (JSC::createNotAConstructorError): Ditto.
14251        (JSC::createNotAFunctionError): Ditto.
14252        (JSC::createNotAnObjectError): Ditto.
14253
142542009-01-06  Gavin Barraclough  <baraclough@apple.com>
14255
14256        Reviewed by Maciej Stachowiak.
14257
14258        Replace accidentally removed references in BytecodeGenerator, deleting these
14259        will be hindering the sharing of constant numbers and strings.
14260
14261        The code to add a new constant (either number or string) to their respective
14262        map works by attempting to add a null entry, then checking the result of the
14263        add for null.  The first time, this should return the null (or noValue).
14264        The code checks for null (to see if this is the initial add), and then allocates
14265        a new number / string object.  This code relies on the result returned from
14266        the add to the map being stored as a reference, such that the allocated object
14267        will be stored in the map, and will be resused if the same constant is encountered
14268        again.  By failing to use a reference we will be leaking GC object for each
14269        additional entry added to the map.  As GC objects they should be clollected,
14270        be we should no be allocatin them in the first place.
14271
14272        https://bugs.webkit.org/show_bug.cgi?id=23158
14273
14274        * bytecompiler/BytecodeGenerator.cpp:
14275        (JSC::BytecodeGenerator::emitLoad):
14276
142772009-01-06  Oliver Hunt  <oliver@apple.com>
14278
14279        Reviewed by Gavin Barraclough.
14280
14281        <rdar://problem/6040850> JavaScript register file should use VirtualAlloc on Windows
14282
14283        Fairly simple, just reserve 4Mb of address space for the
14284        register file, and then commit one section at a time.  We
14285        don't release committed memory as we drop back, but then
14286        mac doesn't either so this probably not too much of a 
14287        problem.
14288
14289        * interpreter/RegisterFile.cpp:
14290        (JSC::RegisterFile::~RegisterFile):
14291        * interpreter/RegisterFile.h:
14292        (JSC::RegisterFile::RegisterFile):
14293        (JSC::RegisterFile::grow):
14294
142952009-01-06  Alexey Proskuryakov  <ap@webkit.org>
14296
14297        Reviewed by Darin Adler.
14298
14299        https://bugs.webkit.org/show_bug.cgi?id=23142
14300        ThreadGlobalData leaks seen on buildbot
14301
14302        * wtf/ThreadSpecific.h: (WTF::ThreadSpecific::destroy): Temporarily reset the thread
14303        specific value to make getter work on Mac OS X.
14304
14305        * wtf/Platform.h: Touch this file again to make sure all Windows builds use the most recent
14306        version of ThreadSpecific.h.
14307
143082009-01-05  Gavin Barraclough  <baraclough@apple.com>
14309
14310        Reviewed by Oliver Hunt.
14311
14312        Replace all uses of JSValue* with a new smart pointer type, JSValuePtr.
14313        
14314        A JavaScript value may be a heap object or boxed primitive, represented by a
14315        pointer, or may be an unboxed immediate value, such as an integer.  Since a
14316        value may dynamically need to contain either a pointer value or an immediate,
14317        we encode immediates as pointer values (since all valid JSCell pointers are
14318        allocated at alligned addesses, unaligned addresses are available to encode
14319        immediates).  As such all JavaScript values are represented using a JSValue*.
14320
14321        This implementation is encumbered by a number of constraints.  It ties the
14322        JSValue representation to the size of pointer on the platform, which, for
14323        example, means that we currently can represent different ranges of integers
14324        as immediates on x86 and x86-64.  It also prevents us from overloading the
14325        to-boolean conversion used to test for noValue() - effectively forcing us
14326        to represent noValue() as 0.  This would potentially be problematic were we
14327        to wish to encode integer values differently (e.g. were we to use the v8
14328        encoding, where pointers are tagged with 1 and integers with 0, then the
14329        immediate integer 0 would conflict with noValue()).
14330
14331        This patch replaces all usage of JSValue* with a new class, JSValuePtr,
14332        which encapsulates the pointer.  JSValuePtr maintains the same interface as
14333        JSValue*, overloading operator-> and operator bool such that previous
14334        operations in the code on variables of type JSValue* are still supported.
14335
14336        In order to provide a ProtectPtr<> type with support for the new value
14337        representation (without using the internal JSValue type directly), a new
14338        ProtectJSValuePtr type has been added, equivalent to the previous type
14339        ProtectPtr<JSValue>.
14340
14341        This patch is likely the first in a sequence of three changes.  With the
14342        value now encapsulated it will likely make sense to migrate the functionality
14343        from JSValue into JSValuePtr, such that the internal pointer representation
14344        need not be exposed.  Through migrating the functionality to the wrapper
14345        class the existing JSValue should be rendered redundant, and the class is
14346        likely to be removed (the JSValuePtr now wrapping a pointer to a JSCell).
14347        At this stage it will likely make sense to rename JSValuePtr to JSValue.
14348
14349        https://bugs.webkit.org/show_bug.cgi?id=23114
14350
14351        * API/APICast.h:
14352        (toJS):
14353        (toRef):
14354        * API/JSBase.cpp:
14355        (JSEvaluateScript):
14356        * API/JSCallbackConstructor.h:
14357        (JSC::JSCallbackConstructor::createStructure):
14358        * API/JSCallbackFunction.cpp:
14359        (JSC::JSCallbackFunction::call):
14360        * API/JSCallbackFunction.h:
14361        (JSC::JSCallbackFunction::createStructure):
14362        * API/JSCallbackObject.h:
14363        (JSC::JSCallbackObject::createStructure):
14364        * API/JSCallbackObjectFunctions.h:
14365        (JSC::::asCallbackObject):
14366        (JSC::::put):
14367        (JSC::::hasInstance):
14368        (JSC::::call):
14369        (JSC::::staticValueGetter):
14370        (JSC::::staticFunctionGetter):
14371        (JSC::::callbackGetter):
14372        * API/JSContextRef.cpp:
14373        * API/JSObjectRef.cpp:
14374        (JSObjectMakeConstructor):
14375        (JSObjectSetPrototype):
14376        (JSObjectGetProperty):
14377        (JSObjectSetProperty):
14378        (JSObjectGetPropertyAtIndex):
14379        (JSObjectSetPropertyAtIndex):
14380        * API/JSValueRef.cpp:
14381        (JSValueGetType):
14382        (JSValueIsUndefined):
14383        (JSValueIsNull):
14384        (JSValueIsBoolean):
14385        (JSValueIsNumber):
14386        (JSValueIsString):
14387        (JSValueIsObject):
14388        (JSValueIsObjectOfClass):
14389        (JSValueIsEqual):
14390        (JSValueIsStrictEqual):
14391        (JSValueIsInstanceOfConstructor):
14392        (JSValueToBoolean):
14393        (JSValueToNumber):
14394        (JSValueToStringCopy):
14395        (JSValueToObject):
14396        (JSValueProtect):
14397        (JSValueUnprotect):
14398        * JavaScriptCore.exp:
14399        * bytecode/CodeBlock.cpp:
14400        (JSC::valueToSourceString):
14401        (JSC::constantName):
14402        (JSC::CodeBlock::dump):
14403        * bytecode/CodeBlock.h:
14404        (JSC::CodeBlock::getConstant):
14405        (JSC::CodeBlock::addUnexpectedConstant):
14406        (JSC::CodeBlock::unexpectedConstant):
14407        * bytecode/EvalCodeCache.h:
14408        (JSC::EvalCodeCache::get):
14409        * bytecompiler/BytecodeGenerator.cpp:
14410        (JSC::BytecodeGenerator::BytecodeGenerator):
14411        (JSC::BytecodeGenerator::addConstant):
14412        (JSC::BytecodeGenerator::addUnexpectedConstant):
14413        (JSC::BytecodeGenerator::emitLoad):
14414        (JSC::BytecodeGenerator::emitLoadJSV):
14415        (JSC::BytecodeGenerator::emitGetScopedVar):
14416        (JSC::BytecodeGenerator::emitPutScopedVar):
14417        (JSC::BytecodeGenerator::emitNewError):
14418        (JSC::keyForImmediateSwitch):
14419        * bytecompiler/BytecodeGenerator.h:
14420        (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue):
14421        (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue):
14422        * debugger/DebuggerCallFrame.cpp:
14423        (JSC::DebuggerCallFrame::evaluate):
14424        * debugger/DebuggerCallFrame.h:
14425        (JSC::DebuggerCallFrame::DebuggerCallFrame):
14426        (JSC::DebuggerCallFrame::exception):
14427        * interpreter/CallFrame.cpp:
14428        (JSC::CallFrame::thisValue):
14429        * interpreter/CallFrame.h:
14430        (JSC::ExecState::setException):
14431        (JSC::ExecState::exception):
14432        (JSC::ExecState::exceptionSlot):
14433        (JSC::ExecState::hadException):
14434        * interpreter/Interpreter.cpp:
14435        (JSC::fastIsNumber):
14436        (JSC::fastToInt32):
14437        (JSC::fastToUInt32):
14438        (JSC::jsLess):
14439        (JSC::jsLessEq):
14440        (JSC::jsAddSlowCase):
14441        (JSC::jsAdd):
14442        (JSC::jsTypeStringForValue):
14443        (JSC::jsIsObjectType):
14444        (JSC::jsIsFunctionType):
14445        (JSC::Interpreter::resolve):
14446        (JSC::Interpreter::resolveSkip):
14447        (JSC::Interpreter::resolveGlobal):
14448        (JSC::inlineResolveBase):
14449        (JSC::Interpreter::resolveBase):
14450        (JSC::Interpreter::resolveBaseAndProperty):
14451        (JSC::Interpreter::resolveBaseAndFunc):
14452        (JSC::isNotObject):
14453        (JSC::Interpreter::callEval):
14454        (JSC::Interpreter::unwindCallFrame):
14455        (JSC::Interpreter::throwException):
14456        (JSC::Interpreter::execute):
14457        (JSC::Interpreter::checkTimeout):
14458        (JSC::Interpreter::createExceptionScope):
14459        (JSC::cachePrototypeChain):
14460        (JSC::Interpreter::tryCachePutByID):
14461        (JSC::countPrototypeChainEntriesAndCheckForProxies):
14462        (JSC::Interpreter::tryCacheGetByID):
14463        (JSC::Interpreter::privateExecute):
14464        (JSC::Interpreter::retrieveArguments):
14465        (JSC::Interpreter::retrieveCaller):
14466        (JSC::Interpreter::retrieveLastCaller):
14467        (JSC::Interpreter::tryCTICachePutByID):
14468        (JSC::Interpreter::tryCTICacheGetByID):
14469        (JSC::returnToThrowTrampoline):
14470        (JSC::Interpreter::cti_op_convert_this):
14471        (JSC::Interpreter::cti_op_add):
14472        (JSC::Interpreter::cti_op_pre_inc):
14473        (JSC::Interpreter::cti_op_loop_if_less):
14474        (JSC::Interpreter::cti_op_loop_if_lesseq):
14475        (JSC::Interpreter::cti_op_get_by_id_generic):
14476        (JSC::Interpreter::cti_op_get_by_id):
14477        (JSC::Interpreter::cti_op_get_by_id_second):
14478        (JSC::Interpreter::cti_op_get_by_id_self_fail):
14479        (JSC::Interpreter::cti_op_get_by_id_proto_list):
14480        (JSC::Interpreter::cti_op_get_by_id_proto_list_full):
14481        (JSC::Interpreter::cti_op_get_by_id_proto_fail):
14482        (JSC::Interpreter::cti_op_get_by_id_array_fail):
14483        (JSC::Interpreter::cti_op_get_by_id_string_fail):
14484        (JSC::Interpreter::cti_op_instanceof):
14485        (JSC::Interpreter::cti_op_del_by_id):
14486        (JSC::Interpreter::cti_op_mul):
14487        (JSC::Interpreter::cti_op_call_NotJSFunction):
14488        (JSC::Interpreter::cti_op_resolve):
14489        (JSC::Interpreter::cti_op_construct_NotJSConstruct):
14490        (JSC::Interpreter::cti_op_get_by_val):
14491        (JSC::Interpreter::cti_op_resolve_func):
14492        (JSC::Interpreter::cti_op_sub):
14493        (JSC::Interpreter::cti_op_put_by_val):
14494        (JSC::Interpreter::cti_op_put_by_val_array):
14495        (JSC::Interpreter::cti_op_lesseq):
14496        (JSC::Interpreter::cti_op_loop_if_true):
14497        (JSC::Interpreter::cti_op_negate):
14498        (JSC::Interpreter::cti_op_resolve_base):
14499        (JSC::Interpreter::cti_op_resolve_skip):
14500        (JSC::Interpreter::cti_op_resolve_global):
14501        (JSC::Interpreter::cti_op_div):
14502        (JSC::Interpreter::cti_op_pre_dec):
14503        (JSC::Interpreter::cti_op_jless):
14504        (JSC::Interpreter::cti_op_not):
14505        (JSC::Interpreter::cti_op_jtrue):
14506        (JSC::Interpreter::cti_op_post_inc):
14507        (JSC::Interpreter::cti_op_eq):
14508        (JSC::Interpreter::cti_op_lshift):
14509        (JSC::Interpreter::cti_op_bitand):
14510        (JSC::Interpreter::cti_op_rshift):
14511        (JSC::Interpreter::cti_op_bitnot):
14512        (JSC::Interpreter::cti_op_resolve_with_base):
14513        (JSC::Interpreter::cti_op_mod):
14514        (JSC::Interpreter::cti_op_less):
14515        (JSC::Interpreter::cti_op_neq):
14516        (JSC::Interpreter::cti_op_post_dec):
14517        (JSC::Interpreter::cti_op_urshift):
14518        (JSC::Interpreter::cti_op_bitxor):
14519        (JSC::Interpreter::cti_op_bitor):
14520        (JSC::Interpreter::cti_op_call_eval):
14521        (JSC::Interpreter::cti_op_throw):
14522        (JSC::Interpreter::cti_op_next_pname):
14523        (JSC::Interpreter::cti_op_typeof):
14524        (JSC::Interpreter::cti_op_is_undefined):
14525        (JSC::Interpreter::cti_op_is_boolean):
14526        (JSC::Interpreter::cti_op_is_number):
14527        (JSC::Interpreter::cti_op_is_string):
14528        (JSC::Interpreter::cti_op_is_object):
14529        (JSC::Interpreter::cti_op_is_function):
14530        (JSC::Interpreter::cti_op_stricteq):
14531        (JSC::Interpreter::cti_op_nstricteq):
14532        (JSC::Interpreter::cti_op_to_jsnumber):
14533        (JSC::Interpreter::cti_op_in):
14534        (JSC::Interpreter::cti_op_switch_imm):
14535        (JSC::Interpreter::cti_op_switch_char):
14536        (JSC::Interpreter::cti_op_switch_string):
14537        (JSC::Interpreter::cti_op_del_by_val):
14538        (JSC::Interpreter::cti_op_new_error):
14539        (JSC::Interpreter::cti_vm_throw):
14540        * interpreter/Interpreter.h:
14541        (JSC::Interpreter::isJSArray):
14542        (JSC::Interpreter::isJSString):
14543        * interpreter/Register.h:
14544        (JSC::Register::):
14545        (JSC::Register::Register):
14546        (JSC::Register::jsValue):
14547        (JSC::Register::getJSValue):
14548        * jit/JIT.cpp:
14549        (JSC::):
14550        (JSC::JIT::compileOpStrictEq):
14551        (JSC::JIT::privateCompileMainPass):
14552        (JSC::JIT::privateCompileSlowCases):
14553        * jit/JIT.h:
14554        (JSC::):
14555        (JSC::JIT::execute):
14556        * jit/JITArithmetic.cpp:
14557        (JSC::JIT::compileFastArith_op_rshift):
14558        (JSC::JIT::compileFastArithSlow_op_rshift):
14559        * jit/JITCall.cpp:
14560        (JSC::JIT::unlinkCall):
14561        (JSC::JIT::compileOpCallInitializeCallFrame):
14562        (JSC::JIT::compileOpCall):
14563        * jit/JITInlineMethods.h:
14564        (JSC::JIT::emitGetVirtualRegister):
14565        (JSC::JIT::getConstantOperand):
14566        (JSC::JIT::isOperandConstant31BitImmediateInt):
14567        (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
14568        (JSC::JIT::emitInitRegister):
14569        * jit/JITPropertyAccess.cpp:
14570        (JSC::resizePropertyStorage):
14571        (JSC::JIT::privateCompilePutByIdTransition):
14572        (JSC::JIT::patchGetByIdSelf):
14573        (JSC::JIT::patchPutByIdReplace):
14574        (JSC::JIT::privateCompileGetByIdSelf):
14575        (JSC::JIT::privateCompileGetByIdProto):
14576        (JSC::JIT::privateCompileGetByIdSelfList):
14577        (JSC::JIT::privateCompileGetByIdProtoList):
14578        (JSC::JIT::privateCompileGetByIdChainList):
14579        (JSC::JIT::privateCompileGetByIdChain):
14580        (JSC::JIT::privateCompilePutByIdReplace):
14581        * jsc.cpp:
14582        (functionPrint):
14583        (functionDebug):
14584        (functionGC):
14585        (functionVersion):
14586        (functionRun):
14587        (functionLoad):
14588        (functionReadline):
14589        (functionQuit):
14590        * parser/Nodes.cpp:
14591        (JSC::NullNode::emitBytecode):
14592        (JSC::ArrayNode::emitBytecode):
14593        (JSC::FunctionCallValueNode::emitBytecode):
14594        (JSC::FunctionCallResolveNode::emitBytecode):
14595        (JSC::VoidNode::emitBytecode):
14596        (JSC::ConstDeclNode::emitCodeSingle):
14597        (JSC::ReturnNode::emitBytecode):
14598        (JSC::processClauseList):
14599        (JSC::EvalNode::emitBytecode):
14600        (JSC::FunctionBodyNode::emitBytecode):
14601        (JSC::ProgramNode::emitBytecode):
14602        * profiler/ProfileGenerator.cpp:
14603        (JSC::ProfileGenerator::addParentForConsoleStart):
14604        * profiler/Profiler.cpp:
14605        (JSC::Profiler::willExecute):
14606        (JSC::Profiler::didExecute):
14607        (JSC::Profiler::createCallIdentifier):
14608        * profiler/Profiler.h:
14609        * runtime/ArgList.cpp:
14610        (JSC::ArgList::slowAppend):
14611        * runtime/ArgList.h:
14612        (JSC::ArgList::at):
14613        (JSC::ArgList::append):
14614        * runtime/Arguments.cpp:
14615        (JSC::Arguments::put):
14616        * runtime/Arguments.h:
14617        (JSC::Arguments::createStructure):
14618        (JSC::asArguments):
14619        * runtime/ArrayConstructor.cpp:
14620        (JSC::callArrayConstructor):
14621        * runtime/ArrayPrototype.cpp:
14622        (JSC::getProperty):
14623        (JSC::putProperty):
14624        (JSC::arrayProtoFuncToString):
14625        (JSC::arrayProtoFuncToLocaleString):
14626        (JSC::arrayProtoFuncJoin):
14627        (JSC::arrayProtoFuncConcat):
14628        (JSC::arrayProtoFuncPop):
14629        (JSC::arrayProtoFuncPush):
14630        (JSC::arrayProtoFuncReverse):
14631        (JSC::arrayProtoFuncShift):
14632        (JSC::arrayProtoFuncSlice):
14633        (JSC::arrayProtoFuncSort):
14634        (JSC::arrayProtoFuncSplice):
14635        (JSC::arrayProtoFuncUnShift):
14636        (JSC::arrayProtoFuncFilter):
14637        (JSC::arrayProtoFuncMap):
14638        (JSC::arrayProtoFuncEvery):
14639        (JSC::arrayProtoFuncForEach):
14640        (JSC::arrayProtoFuncSome):
14641        (JSC::arrayProtoFuncIndexOf):
14642        (JSC::arrayProtoFuncLastIndexOf):
14643        * runtime/BooleanConstructor.cpp:
14644        (JSC::callBooleanConstructor):
14645        (JSC::constructBooleanFromImmediateBoolean):
14646        * runtime/BooleanConstructor.h:
14647        * runtime/BooleanObject.h:
14648        (JSC::asBooleanObject):
14649        * runtime/BooleanPrototype.cpp:
14650        (JSC::booleanProtoFuncToString):
14651        (JSC::booleanProtoFuncValueOf):
14652        * runtime/CallData.cpp:
14653        (JSC::call):
14654        * runtime/CallData.h:
14655        * runtime/Collector.cpp:
14656        (JSC::Heap::protect):
14657        (JSC::Heap::unprotect):
14658        (JSC::Heap::heap):
14659        (JSC::Heap::collect):
14660        * runtime/Collector.h:
14661        * runtime/Completion.cpp:
14662        (JSC::evaluate):
14663        * runtime/Completion.h:
14664        (JSC::Completion::Completion):
14665        (JSC::Completion::value):
14666        (JSC::Completion::setValue):
14667        (JSC::Completion::isValueCompletion):
14668        * runtime/ConstructData.cpp:
14669        (JSC::construct):
14670        * runtime/ConstructData.h:
14671        * runtime/DateConstructor.cpp:
14672        (JSC::constructDate):
14673        (JSC::callDate):
14674        (JSC::dateParse):
14675        (JSC::dateNow):
14676        (JSC::dateUTC):
14677        * runtime/DateInstance.h:
14678        (JSC::asDateInstance):
14679        * runtime/DatePrototype.cpp:
14680        (JSC::dateProtoFuncToString):
14681        (JSC::dateProtoFuncToUTCString):
14682        (JSC::dateProtoFuncToDateString):
14683        (JSC::dateProtoFuncToTimeString):
14684        (JSC::dateProtoFuncToLocaleString):
14685        (JSC::dateProtoFuncToLocaleDateString):
14686        (JSC::dateProtoFuncToLocaleTimeString):
14687        (JSC::dateProtoFuncValueOf):
14688        (JSC::dateProtoFuncGetTime):
14689        (JSC::dateProtoFuncGetFullYear):
14690        (JSC::dateProtoFuncGetUTCFullYear):
14691        (JSC::dateProtoFuncToGMTString):
14692        (JSC::dateProtoFuncGetMonth):
14693        (JSC::dateProtoFuncGetUTCMonth):
14694        (JSC::dateProtoFuncGetDate):
14695        (JSC::dateProtoFuncGetUTCDate):
14696        (JSC::dateProtoFuncGetDay):
14697        (JSC::dateProtoFuncGetUTCDay):
14698        (JSC::dateProtoFuncGetHours):
14699        (JSC::dateProtoFuncGetUTCHours):
14700        (JSC::dateProtoFuncGetMinutes):
14701        (JSC::dateProtoFuncGetUTCMinutes):
14702        (JSC::dateProtoFuncGetSeconds):
14703        (JSC::dateProtoFuncGetUTCSeconds):
14704        (JSC::dateProtoFuncGetMilliSeconds):
14705        (JSC::dateProtoFuncGetUTCMilliseconds):
14706        (JSC::dateProtoFuncGetTimezoneOffset):
14707        (JSC::dateProtoFuncSetTime):
14708        (JSC::setNewValueFromTimeArgs):
14709        (JSC::setNewValueFromDateArgs):
14710        (JSC::dateProtoFuncSetMilliSeconds):
14711        (JSC::dateProtoFuncSetUTCMilliseconds):
14712        (JSC::dateProtoFuncSetSeconds):
14713        (JSC::dateProtoFuncSetUTCSeconds):
14714        (JSC::dateProtoFuncSetMinutes):
14715        (JSC::dateProtoFuncSetUTCMinutes):
14716        (JSC::dateProtoFuncSetHours):
14717        (JSC::dateProtoFuncSetUTCHours):
14718        (JSC::dateProtoFuncSetDate):
14719        (JSC::dateProtoFuncSetUTCDate):
14720        (JSC::dateProtoFuncSetMonth):
14721        (JSC::dateProtoFuncSetUTCMonth):
14722        (JSC::dateProtoFuncSetFullYear):
14723        (JSC::dateProtoFuncSetUTCFullYear):
14724        (JSC::dateProtoFuncSetYear):
14725        (JSC::dateProtoFuncGetYear):
14726        * runtime/DatePrototype.h:
14727        (JSC::DatePrototype::createStructure):
14728        * runtime/ErrorConstructor.cpp:
14729        (JSC::callErrorConstructor):
14730        * runtime/ErrorPrototype.cpp:
14731        (JSC::errorProtoFuncToString):
14732        * runtime/ExceptionHelpers.cpp:
14733        (JSC::createInterruptedExecutionException):
14734        (JSC::createError):
14735        (JSC::createStackOverflowError):
14736        (JSC::createUndefinedVariableError):
14737        (JSC::createErrorMessage):
14738        (JSC::createInvalidParamError):
14739        (JSC::createNotAConstructorError):
14740        (JSC::createNotAFunctionError):
14741        * runtime/ExceptionHelpers.h:
14742        * runtime/FunctionConstructor.cpp:
14743        (JSC::callFunctionConstructor):
14744        * runtime/FunctionPrototype.cpp:
14745        (JSC::callFunctionPrototype):
14746        (JSC::functionProtoFuncToString):
14747        (JSC::functionProtoFuncApply):
14748        (JSC::functionProtoFuncCall):
14749        * runtime/FunctionPrototype.h:
14750        (JSC::FunctionPrototype::createStructure):
14751        * runtime/GetterSetter.cpp:
14752        (JSC::GetterSetter::toPrimitive):
14753        (JSC::GetterSetter::getPrimitiveNumber):
14754        * runtime/GetterSetter.h:
14755        (JSC::asGetterSetter):
14756        * runtime/InitializeThreading.cpp:
14757        * runtime/InternalFunction.h:
14758        (JSC::InternalFunction::createStructure):
14759        (JSC::asInternalFunction):
14760        * runtime/JSActivation.cpp:
14761        (JSC::JSActivation::getOwnPropertySlot):
14762        (JSC::JSActivation::put):
14763        (JSC::JSActivation::putWithAttributes):
14764        (JSC::JSActivation::argumentsGetter):
14765        * runtime/JSActivation.h:
14766        (JSC::JSActivation::createStructure):
14767        (JSC::asActivation):
14768        * runtime/JSArray.cpp:
14769        (JSC::storageSize):
14770        (JSC::JSArray::JSArray):
14771        (JSC::JSArray::getOwnPropertySlot):
14772        (JSC::JSArray::put):
14773        (JSC::JSArray::putSlowCase):
14774        (JSC::JSArray::deleteProperty):
14775        (JSC::JSArray::getPropertyNames):
14776        (JSC::JSArray::setLength):
14777        (JSC::JSArray::pop):
14778        (JSC::JSArray::push):
14779        (JSC::JSArray::mark):
14780        (JSC::JSArray::sort):
14781        (JSC::JSArray::compactForSorting):
14782        (JSC::JSArray::checkConsistency):
14783        (JSC::constructArray):
14784        * runtime/JSArray.h:
14785        (JSC::JSArray::getIndex):
14786        (JSC::JSArray::setIndex):
14787        (JSC::JSArray::createStructure):
14788        (JSC::asArray):
14789        * runtime/JSCell.cpp:
14790        (JSC::JSCell::put):
14791        (JSC::JSCell::getJSNumber):
14792        * runtime/JSCell.h:
14793        (JSC::asCell):
14794        (JSC::JSValue::asCell):
14795        (JSC::JSValue::toPrimitive):
14796        (JSC::JSValue::getPrimitiveNumber):
14797        (JSC::JSValue::getJSNumber):
14798        * runtime/JSFunction.cpp:
14799        (JSC::JSFunction::call):
14800        (JSC::JSFunction::argumentsGetter):
14801        (JSC::JSFunction::callerGetter):
14802        (JSC::JSFunction::lengthGetter):
14803        (JSC::JSFunction::getOwnPropertySlot):
14804        (JSC::JSFunction::put):
14805        (JSC::JSFunction::construct):
14806        * runtime/JSFunction.h:
14807        (JSC::JSFunction::createStructure):
14808        (JSC::asFunction):
14809        * runtime/JSGlobalData.h:
14810        * runtime/JSGlobalObject.cpp:
14811        (JSC::markIfNeeded):
14812        (JSC::JSGlobalObject::put):
14813        (JSC::JSGlobalObject::putWithAttributes):
14814        (JSC::JSGlobalObject::reset):
14815        (JSC::JSGlobalObject::resetPrototype):
14816        * runtime/JSGlobalObject.h:
14817        (JSC::JSGlobalObject::createStructure):
14818        (JSC::JSGlobalObject::GlobalPropertyInfo::GlobalPropertyInfo):
14819        (JSC::asGlobalObject):
14820        (JSC::Structure::prototypeForLookup):
14821        * runtime/JSGlobalObjectFunctions.cpp:
14822        (JSC::encode):
14823        (JSC::decode):
14824        (JSC::globalFuncEval):
14825        (JSC::globalFuncParseInt):
14826        (JSC::globalFuncParseFloat):
14827        (JSC::globalFuncIsNaN):
14828        (JSC::globalFuncIsFinite):
14829        (JSC::globalFuncDecodeURI):
14830        (JSC::globalFuncDecodeURIComponent):
14831        (JSC::globalFuncEncodeURI):
14832        (JSC::globalFuncEncodeURIComponent):
14833        (JSC::globalFuncEscape):
14834        (JSC::globalFuncUnescape):
14835        (JSC::globalFuncJSCPrint):
14836        * runtime/JSGlobalObjectFunctions.h:
14837        * runtime/JSImmediate.cpp:
14838        (JSC::JSImmediate::toThisObject):
14839        (JSC::JSImmediate::toObject):
14840        (JSC::JSImmediate::prototype):
14841        (JSC::JSImmediate::toString):
14842        * runtime/JSImmediate.h:
14843        (JSC::JSImmediate::isImmediate):
14844        (JSC::JSImmediate::isNumber):
14845        (JSC::JSImmediate::isPositiveNumber):
14846        (JSC::JSImmediate::isBoolean):
14847        (JSC::JSImmediate::isUndefinedOrNull):
14848        (JSC::JSImmediate::isNegative):
14849        (JSC::JSImmediate::isEitherImmediate):
14850        (JSC::JSImmediate::isAnyImmediate):
14851        (JSC::JSImmediate::areBothImmediate):
14852        (JSC::JSImmediate::areBothImmediateNumbers):
14853        (JSC::JSImmediate::andImmediateNumbers):
14854        (JSC::JSImmediate::xorImmediateNumbers):
14855        (JSC::JSImmediate::orImmediateNumbers):
14856        (JSC::JSImmediate::rightShiftImmediateNumbers):
14857        (JSC::JSImmediate::canDoFastAdditiveOperations):
14858        (JSC::JSImmediate::addImmediateNumbers):
14859        (JSC::JSImmediate::subImmediateNumbers):
14860        (JSC::JSImmediate::incImmediateNumber):
14861        (JSC::JSImmediate::decImmediateNumber):
14862        (JSC::JSImmediate::makeValue):
14863        (JSC::JSImmediate::makeInt):
14864        (JSC::JSImmediate::makeBool):
14865        (JSC::JSImmediate::makeUndefined):
14866        (JSC::JSImmediate::makeNull):
14867        (JSC::JSImmediate::intValue):
14868        (JSC::JSImmediate::uintValue):
14869        (JSC::JSImmediate::boolValue):
14870        (JSC::JSImmediate::rawValue):
14871        (JSC::JSImmediate::trueImmediate):
14872        (JSC::JSImmediate::falseImmediate):
14873        (JSC::JSImmediate::undefinedImmediate):
14874        (JSC::JSImmediate::nullImmediate):
14875        (JSC::JSImmediate::zeroImmediate):
14876        (JSC::JSImmediate::oneImmediate):
14877        (JSC::JSImmediate::impossibleValue):
14878        (JSC::JSImmediate::toBoolean):
14879        (JSC::JSImmediate::getTruncatedUInt32):
14880        (JSC::JSImmediate::from):
14881        (JSC::JSImmediate::getTruncatedInt32):
14882        (JSC::JSImmediate::toDouble):
14883        (JSC::JSImmediate::getUInt32):
14884        (JSC::jsNull):
14885        (JSC::jsBoolean):
14886        (JSC::jsUndefined):
14887        (JSC::JSValue::isUndefined):
14888        (JSC::JSValue::isNull):
14889        (JSC::JSValue::isUndefinedOrNull):
14890        (JSC::JSValue::isBoolean):
14891        (JSC::JSValue::getBoolean):
14892        (JSC::JSValue::toInt32):
14893        (JSC::JSValue::toUInt32):
14894        (JSC::toInt32):
14895        (JSC::toUInt32):
14896        * runtime/JSNotAnObject.cpp:
14897        (JSC::JSNotAnObject::toPrimitive):
14898        (JSC::JSNotAnObject::getPrimitiveNumber):
14899        (JSC::JSNotAnObject::put):
14900        * runtime/JSNotAnObject.h:
14901        (JSC::JSNotAnObject::createStructure):
14902        * runtime/JSNumberCell.cpp:
14903        (JSC::JSNumberCell::toPrimitive):
14904        (JSC::JSNumberCell::getPrimitiveNumber):
14905        (JSC::JSNumberCell::getJSNumber):
14906        (JSC::jsNumberCell):
14907        (JSC::jsNaN):
14908        * runtime/JSNumberCell.h:
14909        (JSC::JSNumberCell::createStructure):
14910        (JSC::asNumberCell):
14911        (JSC::jsNumber):
14912        (JSC::JSValue::toJSNumber):
14913        * runtime/JSObject.cpp:
14914        (JSC::JSObject::mark):
14915        (JSC::JSObject::put):
14916        (JSC::JSObject::putWithAttributes):
14917        (JSC::callDefaultValueFunction):
14918        (JSC::JSObject::getPrimitiveNumber):
14919        (JSC::JSObject::defaultValue):
14920        (JSC::JSObject::defineGetter):
14921        (JSC::JSObject::defineSetter):
14922        (JSC::JSObject::lookupGetter):
14923        (JSC::JSObject::lookupSetter):
14924        (JSC::JSObject::hasInstance):
14925        (JSC::JSObject::toNumber):
14926        (JSC::JSObject::toString):
14927        (JSC::JSObject::fillGetterPropertySlot):
14928        * runtime/JSObject.h:
14929        (JSC::JSObject::getDirect):
14930        (JSC::JSObject::getDirectLocation):
14931        (JSC::JSObject::offsetForLocation):
14932        (JSC::JSObject::locationForOffset):
14933        (JSC::JSObject::getDirectOffset):
14934        (JSC::JSObject::putDirectOffset):
14935        (JSC::JSObject::createStructure):
14936        (JSC::asObject):
14937        (JSC::JSObject::prototype):
14938        (JSC::JSObject::setPrototype):
14939        (JSC::JSObject::inlineGetOwnPropertySlot):
14940        (JSC::JSObject::getOwnPropertySlotForWrite):
14941        (JSC::JSObject::getPropertySlot):
14942        (JSC::JSObject::get):
14943        (JSC::JSObject::putDirect):
14944        (JSC::JSObject::putDirectWithoutTransition):
14945        (JSC::JSObject::toPrimitive):
14946        (JSC::JSValue::get):
14947        (JSC::JSValue::put):
14948        (JSC::JSObject::allocatePropertyStorageInline):
14949        * runtime/JSPropertyNameIterator.cpp:
14950        (JSC::JSPropertyNameIterator::toPrimitive):
14951        (JSC::JSPropertyNameIterator::getPrimitiveNumber):
14952        * runtime/JSPropertyNameIterator.h:
14953        (JSC::JSPropertyNameIterator::create):
14954        (JSC::JSPropertyNameIterator::next):
14955        * runtime/JSStaticScopeObject.cpp:
14956        (JSC::JSStaticScopeObject::put):
14957        (JSC::JSStaticScopeObject::putWithAttributes):
14958        * runtime/JSStaticScopeObject.h:
14959        (JSC::JSStaticScopeObject::JSStaticScopeObject):
14960        (JSC::JSStaticScopeObject::createStructure):
14961        * runtime/JSString.cpp:
14962        (JSC::JSString::toPrimitive):
14963        (JSC::JSString::getPrimitiveNumber):
14964        (JSC::JSString::getOwnPropertySlot):
14965        * runtime/JSString.h:
14966        (JSC::JSString::createStructure):
14967        (JSC::asString):
14968        * runtime/JSValue.h:
14969        (JSC::JSValuePtr::makeImmediate):
14970        (JSC::JSValuePtr::immediateValue):
14971        (JSC::JSValuePtr::JSValuePtr):
14972        (JSC::JSValuePtr::operator->):
14973        (JSC::JSValuePtr::hasValue):
14974        (JSC::JSValuePtr::operator==):
14975        (JSC::JSValuePtr::operator!=):
14976        (JSC::JSValuePtr::encode):
14977        (JSC::JSValuePtr::decode):
14978        (JSC::JSValue::asValue):
14979        (JSC::noValue):
14980        (JSC::operator==):
14981        (JSC::operator!=):
14982        * runtime/JSVariableObject.h:
14983        (JSC::JSVariableObject::symbolTablePut):
14984        (JSC::JSVariableObject::symbolTablePutWithAttributes):
14985        * runtime/JSWrapperObject.cpp:
14986        (JSC::JSWrapperObject::mark):
14987        * runtime/JSWrapperObject.h:
14988        (JSC::JSWrapperObject::internalValue):
14989        (JSC::JSWrapperObject::setInternalValue):
14990        * runtime/Lookup.cpp:
14991        (JSC::setUpStaticFunctionSlot):
14992        * runtime/Lookup.h:
14993        (JSC::lookupPut):
14994        * runtime/MathObject.cpp:
14995        (JSC::mathProtoFuncAbs):
14996        (JSC::mathProtoFuncACos):
14997        (JSC::mathProtoFuncASin):
14998        (JSC::mathProtoFuncATan):
14999        (JSC::mathProtoFuncATan2):
15000        (JSC::mathProtoFuncCeil):
15001        (JSC::mathProtoFuncCos):
15002        (JSC::mathProtoFuncExp):
15003        (JSC::mathProtoFuncFloor):
15004        (JSC::mathProtoFuncLog):
15005        (JSC::mathProtoFuncMax):
15006        (JSC::mathProtoFuncMin):
15007        (JSC::mathProtoFuncPow):
15008        (JSC::mathProtoFuncRandom):
15009        (JSC::mathProtoFuncRound):
15010        (JSC::mathProtoFuncSin):
15011        (JSC::mathProtoFuncSqrt):
15012        (JSC::mathProtoFuncTan):
15013        * runtime/MathObject.h:
15014        (JSC::MathObject::createStructure):
15015        * runtime/NativeErrorConstructor.cpp:
15016        (JSC::callNativeErrorConstructor):
15017        * runtime/NumberConstructor.cpp:
15018        (JSC::numberConstructorNaNValue):
15019        (JSC::numberConstructorNegInfinity):
15020        (JSC::numberConstructorPosInfinity):
15021        (JSC::numberConstructorMaxValue):
15022        (JSC::numberConstructorMinValue):
15023        (JSC::callNumberConstructor):
15024        * runtime/NumberConstructor.h:
15025        (JSC::NumberConstructor::createStructure):
15026        * runtime/NumberObject.cpp:
15027        (JSC::NumberObject::getJSNumber):
15028        (JSC::constructNumberFromImmediateNumber):
15029        * runtime/NumberObject.h:
15030        * runtime/NumberPrototype.cpp:
15031        (JSC::numberProtoFuncToString):
15032        (JSC::numberProtoFuncToLocaleString):
15033        (JSC::numberProtoFuncValueOf):
15034        (JSC::numberProtoFuncToFixed):
15035        (JSC::numberProtoFuncToExponential):
15036        (JSC::numberProtoFuncToPrecision):
15037        * runtime/ObjectConstructor.cpp:
15038        (JSC::constructObject):
15039        (JSC::callObjectConstructor):
15040        * runtime/ObjectPrototype.cpp:
15041        (JSC::objectProtoFuncValueOf):
15042        (JSC::objectProtoFuncHasOwnProperty):
15043        (JSC::objectProtoFuncIsPrototypeOf):
15044        (JSC::objectProtoFuncDefineGetter):
15045        (JSC::objectProtoFuncDefineSetter):
15046        (JSC::objectProtoFuncLookupGetter):
15047        (JSC::objectProtoFuncLookupSetter):
15048        (JSC::objectProtoFuncPropertyIsEnumerable):
15049        (JSC::objectProtoFuncToLocaleString):
15050        (JSC::objectProtoFuncToString):
15051        * runtime/ObjectPrototype.h:
15052        * runtime/Operations.cpp:
15053        (JSC::equal):
15054        (JSC::equalSlowCase):
15055        (JSC::strictEqual):
15056        (JSC::strictEqualSlowCase):
15057        (JSC::throwOutOfMemoryError):
15058        * runtime/Operations.h:
15059        (JSC::equalSlowCaseInline):
15060        (JSC::strictEqualSlowCaseInline):
15061        * runtime/PropertySlot.cpp:
15062        (JSC::PropertySlot::functionGetter):
15063        * runtime/PropertySlot.h:
15064        (JSC::PropertySlot::PropertySlot):
15065        (JSC::PropertySlot::getValue):
15066        (JSC::PropertySlot::putValue):
15067        (JSC::PropertySlot::setValueSlot):
15068        (JSC::PropertySlot::setValue):
15069        (JSC::PropertySlot::setCustom):
15070        (JSC::PropertySlot::setCustomIndex):
15071        (JSC::PropertySlot::slotBase):
15072        (JSC::PropertySlot::setBase):
15073        (JSC::PropertySlot::):
15074        * runtime/Protect.h:
15075        (JSC::gcProtect):
15076        (JSC::gcUnprotect):
15077        (JSC::ProtectedPtr::ProtectedPtr):
15078        (JSC::ProtectedPtr::operator JSValuePtr):
15079        (JSC::ProtectedJSValuePtr::ProtectedJSValuePtr):
15080        (JSC::ProtectedJSValuePtr::get):
15081        (JSC::ProtectedJSValuePtr::operator JSValuePtr):
15082        (JSC::ProtectedJSValuePtr::operator->):
15083        (JSC::::ProtectedPtr):
15084        (JSC::::~ProtectedPtr):
15085        (JSC::::operator):
15086        (JSC::ProtectedJSValuePtr::~ProtectedJSValuePtr):
15087        (JSC::ProtectedJSValuePtr::operator=):
15088        (JSC::operator==):
15089        (JSC::operator!=):
15090        * runtime/RegExpConstructor.cpp:
15091        (JSC::RegExpConstructor::getBackref):
15092        (JSC::RegExpConstructor::getLastParen):
15093        (JSC::RegExpConstructor::getLeftContext):
15094        (JSC::RegExpConstructor::getRightContext):
15095        (JSC::regExpConstructorDollar1):
15096        (JSC::regExpConstructorDollar2):
15097        (JSC::regExpConstructorDollar3):
15098        (JSC::regExpConstructorDollar4):
15099        (JSC::regExpConstructorDollar5):
15100        (JSC::regExpConstructorDollar6):
15101        (JSC::regExpConstructorDollar7):
15102        (JSC::regExpConstructorDollar8):
15103        (JSC::regExpConstructorDollar9):
15104        (JSC::regExpConstructorInput):
15105        (JSC::regExpConstructorMultiline):
15106        (JSC::regExpConstructorLastMatch):
15107        (JSC::regExpConstructorLastParen):
15108        (JSC::regExpConstructorLeftContext):
15109        (JSC::regExpConstructorRightContext):
15110        (JSC::RegExpConstructor::put):
15111        (JSC::setRegExpConstructorInput):
15112        (JSC::setRegExpConstructorMultiline):
15113        (JSC::constructRegExp):
15114        (JSC::callRegExpConstructor):
15115        * runtime/RegExpConstructor.h:
15116        (JSC::RegExpConstructor::createStructure):
15117        (JSC::asRegExpConstructor):
15118        * runtime/RegExpMatchesArray.h:
15119        (JSC::RegExpMatchesArray::put):
15120        * runtime/RegExpObject.cpp:
15121        (JSC::regExpObjectGlobal):
15122        (JSC::regExpObjectIgnoreCase):
15123        (JSC::regExpObjectMultiline):
15124        (JSC::regExpObjectSource):
15125        (JSC::regExpObjectLastIndex):
15126        (JSC::RegExpObject::put):
15127        (JSC::setRegExpObjectLastIndex):
15128        (JSC::RegExpObject::test):
15129        (JSC::RegExpObject::exec):
15130        (JSC::callRegExpObject):
15131        * runtime/RegExpObject.h:
15132        (JSC::RegExpObject::createStructure):
15133        (JSC::asRegExpObject):
15134        * runtime/RegExpPrototype.cpp:
15135        (JSC::regExpProtoFuncTest):
15136        (JSC::regExpProtoFuncExec):
15137        (JSC::regExpProtoFuncCompile):
15138        (JSC::regExpProtoFuncToString):
15139        * runtime/StringConstructor.cpp:
15140        (JSC::stringFromCharCodeSlowCase):
15141        (JSC::stringFromCharCode):
15142        (JSC::callStringConstructor):
15143        * runtime/StringObject.cpp:
15144        (JSC::StringObject::put):
15145        * runtime/StringObject.h:
15146        (JSC::StringObject::createStructure):
15147        (JSC::asStringObject):
15148        * runtime/StringObjectThatMasqueradesAsUndefined.h:
15149        (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
15150        * runtime/StringPrototype.cpp:
15151        (JSC::stringProtoFuncReplace):
15152        (JSC::stringProtoFuncToString):
15153        (JSC::stringProtoFuncCharAt):
15154        (JSC::stringProtoFuncCharCodeAt):
15155        (JSC::stringProtoFuncConcat):
15156        (JSC::stringProtoFuncIndexOf):
15157        (JSC::stringProtoFuncLastIndexOf):
15158        (JSC::stringProtoFuncMatch):
15159        (JSC::stringProtoFuncSearch):
15160        (JSC::stringProtoFuncSlice):
15161        (JSC::stringProtoFuncSplit):
15162        (JSC::stringProtoFuncSubstr):
15163        (JSC::stringProtoFuncSubstring):
15164        (JSC::stringProtoFuncToLowerCase):
15165        (JSC::stringProtoFuncToUpperCase):
15166        (JSC::stringProtoFuncLocaleCompare):
15167        (JSC::stringProtoFuncBig):
15168        (JSC::stringProtoFuncSmall):
15169        (JSC::stringProtoFuncBlink):
15170        (JSC::stringProtoFuncBold):
15171        (JSC::stringProtoFuncFixed):
15172        (JSC::stringProtoFuncItalics):
15173        (JSC::stringProtoFuncStrike):
15174        (JSC::stringProtoFuncSub):
15175        (JSC::stringProtoFuncSup):
15176        (JSC::stringProtoFuncFontcolor):
15177        (JSC::stringProtoFuncFontsize):
15178        (JSC::stringProtoFuncAnchor):
15179        (JSC::stringProtoFuncLink):
15180        * runtime/Structure.cpp:
15181        (JSC::Structure::Structure):
15182        (JSC::Structure::changePrototypeTransition):
15183        (JSC::Structure::createCachedPrototypeChain):
15184        * runtime/Structure.h:
15185        (JSC::Structure::create):
15186        (JSC::Structure::setPrototypeWithoutTransition):
15187        (JSC::Structure::storedPrototype):
15188
151892009-01-06  Oliver Hunt  <oliver@apple.com>
15190
15191        Reviewed by Cameron Zwarich.
15192
15193        <https://bugs.webkit.org/show_bug.cgi?id=23085> [jsfunfuzz] Over released ScopeChainNode
15194        <rdar://problem/6474110>
15195
15196        So this delightful bug was caused by our unwind code using a ScopeChain to perform
15197        the unwind.  The ScopeChain would ref the initial top of the scope chain, then deref
15198        the resultant top of scope chain, which is incorrect.
15199
15200        This patch removes the dependency on ScopeChain for the unwind, and i've filed
15201        <https://bugs.webkit.org/show_bug.cgi?id=23144> to look into the unintuitive
15202        ScopeChain behaviour.
15203
15204        * interpreter/Interpreter.cpp:
15205        (JSC::Interpreter::throwException):
15206
152072009-01-06  Adam Roben  <aroben@apple.com>
15208
15209        Hopeful Windows crash-on-launch fix
15210
15211        * wtf/Platform.h: Force a world rebuild by touching this file.
15212
152132009-01-06  Holger Hans Peter Freyther  <zecke@selfish.org>
15214
15215        Reviewed by NOBODY (Build fix).
15216
15217        * GNUmakefile.am:Add ByteArray.cpp too
15218
152192009-01-06  Holger Hans Peter Freyther  <zecke@selfish.org>
15220
15221        Reviewed by NOBODY (Speculative build fix).
15222
15223        AllInOneFile.cpp does not include the JSByteArray.cpp include it...
15224
15225        * GNUmakefile.am:
15226
152272009-01-05  Oliver Hunt  <oliver@apple.com>
15228
15229        Reviewed by NOBODY (Build fix).
15230
15231        Fix Wx build
15232
15233        * JavaScriptCoreSources.bkl:
15234
152352009-01-05  Oliver Hunt  <oliver@apple.com>
15236
15237        Windows build fixes
15238
15239        Rubber-stamped by Alice Liu.
15240
15241        * interpreter/Interpreter.cpp:
15242        (JSC::Interpreter::Interpreter):
15243        * runtime/ByteArray.cpp:
15244        (JSC::ByteArray::create):
15245        * runtime/ByteArray.h:
15246
152472009-01-05  Oliver Hunt  <oliver@apple.com>
15248
15249        Reviewed by Gavin Barraclough.
15250
15251        CanvasPixelArray performance is too slow 
15252        <https://bugs.webkit.org/show_bug.cgi?id=23123>
15253
15254        The fix to this is to devirtualise get and put in a manner similar to
15255        JSString and JSArray.  To do this I've added a ByteArray implementation
15256        and JSByteArray wrapper to JSC.  We can then do vptr comparisons to
15257        devirtualise the calls.
15258
15259        This devirtualisation improves performance by 1.5-2x in my somewhat ad
15260        hoc tests.
15261
15262        * GNUmakefile.am:
15263        * JavaScriptCore.exp:
15264        * JavaScriptCore.pri:
15265        * JavaScriptCore.scons:
15266        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
15267        * JavaScriptCore.xcodeproj/project.pbxproj:
15268        * interpreter/Interpreter.cpp:
15269        (JSC::Interpreter::Interpreter):
15270        (JSC::Interpreter::privateExecute):
15271        (JSC::Interpreter::cti_op_get_by_val):
15272        (JSC::Interpreter::cti_op_put_by_val):
15273        * interpreter/Interpreter.h:
15274        (JSC::Interpreter::isJSByteArray):
15275        * runtime/ByteArray.cpp: Added.
15276        (JSC::ByteArray::create):
15277        * runtime/ByteArray.h: Added.
15278        (JSC::ByteArray::length):
15279        (JSC::ByteArray::set):
15280        (JSC::ByteArray::get):
15281        (JSC::ByteArray::data):
15282        (JSC::ByteArray::ByteArray):
15283        * runtime/JSByteArray.cpp: Added.
15284        (JSC::):
15285        (JSC::JSByteArray::JSByteArray):
15286        (JSC::JSByteArray::createStructure):
15287        (JSC::JSByteArray::getOwnPropertySlot):
15288        (JSC::JSByteArray::put):
15289        (JSC::JSByteArray::getPropertyNames):
15290        * runtime/JSByteArray.h: Added.
15291        (JSC::JSByteArray::canAccessIndex):
15292        (JSC::JSByteArray::getIndex):
15293        (JSC::JSByteArray::setIndex):
15294        (JSC::JSByteArray::classInfo):
15295        (JSC::JSByteArray::length):
15296        (JSC::JSByteArray::):
15297        (JSC::JSByteArray::JSByteArray):
15298        (JSC::asByteArray):
15299
153002009-01-05  Alexey Proskuryakov  <ap@webkit.org>
15301
15302        Reviewed by Darin Adler.
15303
15304        https://bugs.webkit.org/show_bug.cgi?id=23073
15305        <rdar://problem/6471129> Workers crash on Windows Release builds
15306
15307        * wtf/ThreadSpecific.h:
15308        (WTF::ThreadSpecific::destroy): Changed to clear the pointer only after data object
15309        destruction is finished - otherwise, WebCore::ThreadGlobalData destructor was re-creating
15310        the object in order to access atomic string table.
15311        (WTF::ThreadSpecific::operator T*): Symmetrically, set up the per-thread pointer before
15312        data constructor is called.
15313
15314        * wtf/ThreadingWin.cpp: (WTF::wtfThreadEntryPoint): Remove a Windows-only hack to finalize
15315        a thread - pthreadVC2 is a DLL, so it gets thread detached messages, and cleans up thread
15316        specific data automatically. Besides, this code wasn't even compiled in for some time now.
15317
153182009-01-05  Alexey Proskuryakov  <ap@webkit.org>
15319
15320        Reviewed by Darin Adler.
15321
15322        https://bugs.webkit.org/show_bug.cgi?id=23115
15323        Create a version of ASSERT for use with otherwise unused variables
15324
15325        * wtf/Assertions.h: Added ASSERT_UNUSED.
15326
15327        * jit/ExecutableAllocatorPosix.cpp:
15328        (JSC::ExecutablePool::systemRelease):
15329        * runtime/Collector.cpp:
15330        (JSC::Heap::destroy):
15331        (JSC::Heap::heapAllocate):
15332        * runtime/JSNotAnObject.cpp:
15333        (JSC::JSNotAnObject::toPrimitive):
15334        (JSC::JSNotAnObject::getPrimitiveNumber):
15335        (JSC::JSNotAnObject::toBoolean):
15336        (JSC::JSNotAnObject::toNumber):
15337        (JSC::JSNotAnObject::toString):
15338        (JSC::JSNotAnObject::getOwnPropertySlot):
15339        (JSC::JSNotAnObject::put):
15340        (JSC::JSNotAnObject::deleteProperty):
15341        (JSC::JSNotAnObject::getPropertyNames):
15342        * wtf/TCSystemAlloc.cpp:
15343        (TCMalloc_SystemRelease):
15344        Use it in some places that used other idioms for this purpose.
15345
153462009-01-04  Alice Liu  <alice.liu@apple.com>
15347
15348        <rdar://problem/6341776> Merge m_transitionCount and m_offset in Structure.
15349
15350        Reviewed by Darin Adler.
15351
15352        * runtime/Structure.cpp:
15353        (JSC::Structure::Structure): Remove m_transitionCount
15354        (JSC::Structure::addPropertyTransitionToExistingStructure): No need to wait until after the assignment to offset to assert if it's notFound; move it up.
15355        (JSC::Structure::addPropertyTransition): Use method for transitionCount instead of m_transitionCount. Remove line that maintains the m_transitionCount.
15356        (JSC::Structure::changePrototypeTransition): Remove line that maintains the m_transitionCount.
15357        (JSC::Structure::getterSetterTransition): Remove line that maintains the m_transitionCount.
15358        * runtime/Structure.h:
15359        Changed s_maxTransitionLength and m_offset from size_t to signed char.  m_offset will never become greater than 64 
15360        because the structure transitions to a dictionary at that time.
15361        (JSC::Structure::transitionCount): method to replace the data member
15362
153632009-01-04  Darin Adler  <darin@apple.com>
15364
15365        Reviewed by David Kilzer.
15366
15367        Bug 15114: Provide compile-time assertions for sizeof(UChar), sizeof(DeprecatedChar), etc.
15368        https://bugs.webkit.org/show_bug.cgi?id=15114
15369
15370        * wtf/unicode/Unicode.h: Assert size of UChar. There is no DeprecatedChar any more.
15371
153722009-01-03  Sam Weinig  <sam@webkit.org>
15373
15374        Reviewed by Oliver Hunt.
15375
15376        Change the pcVector from storing native code pointers to storing offsets
15377        from the base pointer. This will allow us to generate the pcVector on demand
15378        for exceptions.
15379
15380        * bytecode/CodeBlock.h:
15381        (JSC::PC::PC):
15382        (JSC::getNativePCOffset):
15383        (JSC::CodeBlock::getBytecodeIndex):
15384        * jit/JIT.cpp:
15385        (JSC::JIT::privateCompile):
15386
153872009-01-02  Oliver Hunt  <oliver@apple.com>
15388
15389        Reviewed by NOBODY (Build fix).
15390        
15391        * runtime/ScopeChain.cpp:
15392
153932009-01-02  Oliver Hunt  <oliver@apple.com>
15394
15395        Reviewed by Gavin Barraclough.
15396
15397        [jsfunfuzz] unwind logic for exceptions in eval fails to account for dynamic scope external to the eval
15398        https://bugs.webkit.org/show_bug.cgi?id=23078
15399
15400        This bug was caused by eval codeblocks being generated without accounting
15401        for the depth of the scope chain they inherited.  This meant that exception
15402        handlers would understate their expected scope chain depth, which in turn
15403        led to incorrectly removing nodes from the scope chain.
15404
15405        * bytecompiler/BytecodeGenerator.cpp:
15406        (JSC::BytecodeGenerator::BytecodeGenerator):
15407        (JSC::BytecodeGenerator::emitCatch):
15408        * bytecompiler/BytecodeGenerator.h:
15409        * interpreter/Interpreter.cpp:
15410        (JSC::depth):
15411        * runtime/ScopeChain.cpp:
15412        (JSC::ScopeChain::localDepth):
15413        * runtime/ScopeChain.h:
15414        (JSC::ScopeChainNode::deref):
15415        (JSC::ScopeChainNode::ref):
15416
154172009-01-02  David Smith  <catfish.man@gmail.com>
15418
15419        Reviewed by Darin Adler.
15420        
15421        https://bugs.webkit.org/show_bug.cgi?id=22699
15422        Enable NodeList caching for getElementsByTagName
15423
15424        * wtf/HashFunctions.h: Moved the definition of PHI here and renamed to stringHashingStartValue
15425
154262009-01-02  David Kilzer  <ddkilzer@apple.com>
15427
15428        Attempt to fix Qt Linux build after r39553
15429
15430        * wtf/RandomNumberSeed.h: Include <sys/time.h> for gettimeofday().
15431        Include <sys/types.h> and <unistd.h> for getpid().
15432
154332009-01-02  David Kilzer  <ddkilzer@apple.com>
15434
15435        Bug 23081: These files are no longer part of the KDE libraries
15436
15437        <https://bugs.webkit.org/show_bug.cgi?id=23081>
15438
15439        Reviewed by Darin Adler.
15440
15441        Removed "This file is part of the KDE libraries" comment from
15442        source files.  Added or updated Apple copyrights as well.
15443
15444        * parser/Lexer.h:
15445        * wtf/HashCountedSet.h:
15446        * wtf/RetainPtr.h:
15447        * wtf/VectorTraits.h:
15448
154492009-01-02  David Kilzer  <ddkilzer@apple.com>
15450
15451        Bug 23080: Remove last vestiges of KJS references
15452
15453        <https://bugs.webkit.org/show_bug.cgi?id=23080>
15454
15455        Reviewed by Darin Adler.
15456
15457        Also updated Apple copyright statements.
15458
15459        * DerivedSources.make: Changed bison "kjsyy" prefix to "jscyy".
15460        * GNUmakefile.am: Ditto.
15461        * JavaScriptCore.pri: Ditto.  Also changed KJSBISON to JSCBISON
15462        and kjsbison to jscbison.
15463
15464        * JavaScriptCoreSources.bkl: Changed JSCORE_KJS_SOURCES to
15465        JSCORE_JSC_SOURCES.
15466        * jscore.bkl: Ditto.
15467
15468        * create_hash_table: Updated copyright and removed old comment.
15469
15470        * parser/Grammar.y: Changed "kjsyy" prefix to "jscyy" prefix.
15471        * parser/Lexer.cpp: Ditto.  Also changed KJS_DEBUG_LEX to
15472        JSC_DEBUG_LEX.
15473        (jscyylex):
15474        (JSC::Lexer::lex):
15475        * parser/Parser.cpp: Ditto.
15476        (JSC::Parser::parse):
15477
15478        * pcre/dftables: Changed "kjs_pcre_" prefix to "jsc_pcre_".
15479        * pcre/pcre_compile.cpp: Ditto.
15480        (getOthercaseRange):
15481        (encodeUTF8):
15482        (compileBranch):
15483        (calculateCompiledPatternLength):
15484        * pcre/pcre_exec.cpp: Ditto.
15485        (matchRef):
15486        (getUTF8CharAndIncrementLength):
15487        (match):
15488        * pcre/pcre_internal.h: Ditto.
15489        (toLowerCase):
15490        (flipCase):
15491        (classBitmapForChar):
15492        (charTypeForChar):
15493        * pcre/pcre_tables.cpp: Ditto.
15494        * pcre/pcre_ucp_searchfuncs.cpp: Ditto.
15495        (jsc_pcre_ucp_othercase):
15496        * pcre/pcre_xclass.cpp: Ditto.
15497        (getUTF8CharAndAdvancePointer):
15498        (jsc_pcre_xclass):
15499
15500        * runtime/Collector.h: Updated header guards using the
15501        clean-header-guards script.
15502        * runtime/CollectorHeapIterator.h: Added missing header guard.
15503        * runtime/Identifier.h: Updated header guards.
15504        * runtime/JSFunction.h: Fixed end-of-namespace comment.
15505
15506        * runtime/JSGlobalObject.cpp:
15507        (JSC::JSGlobalObject::reset): Renamed "kjsprint" debug function
15508        to "jscprint".  Changed implementation method from
15509        globalFuncKJSPrint() to globalFuncJSCPrint().
15510        * runtime/JSGlobalObjectFunctions.cpp:
15511        (JSC::globalFuncJSCPrint): Renamed from globalFuncKJSPrint().
15512        * runtime/JSGlobalObjectFunctions.h: Ditto.
15513
15514        * runtime/JSImmediate.h: Updated header guards.
15515        * runtime/JSLock.h: Ditto.
15516        * runtime/JSType.h: Ditto.
15517        * runtime/JSWrapperObject.h: Ditto.
15518        * runtime/Lookup.h: Ditto.
15519        * runtime/Operations.h: Ditto.
15520        * runtime/Protect.h: Ditto.
15521        * runtime/RegExp.h: Ditto.
15522        * runtime/UString.h: Ditto.
15523
15524        * tests/mozilla/js1_5/Array/regress-157652.js: Changed "KJS"
15525        reference in comment to "JSC".
15526
15527        * wrec/CharacterClassConstructor.cpp: Change "kjs_pcre_" function
15528        prefixes to "jsc_pcre_".
15529        (JSC::WREC::CharacterClassConstructor::put):
15530        (JSC::WREC::CharacterClassConstructor::flush):
15531
15532        * wtf/unicode/Unicode.h: Change "KJS_" header guard to "WTF_".
15533        * wtf/unicode/icu/UnicodeIcu.h: Ditto.
15534        * wtf/unicode/qt4/UnicodeQt4.h: Ditto.
15535
155362009-01-02  Oliver Hunt  <oliver@apple.com>
15537
15538        Reviewed by Maciej Stachowiak.
15539
15540        Make randomNumber generate 2^53 values instead of 2^32 (or 2^31 for rand() platforms)
15541
15542        * wtf/RandomNumber.cpp:
15543        (WTF::randomNumber):
15544
155452009-01-02  David Kilzer  <ddkilzer@apple.com>
15546
15547        Remove declaration for JSC::Identifier::initializeIdentifierThreading()
15548
15549        Reviewed by Alexey Proskuryakov.
15550
15551        * runtime/Identifier.h:
15552        (JSC::Identifier::initializeIdentifierThreading): Removed
15553        declaration since the implementation was removed in r34412.
15554
155552009-01-01  Darin Adler  <darin@apple.com>
15556
15557        Reviewed by Oliver Hunt.
15558
15559        String.replace does not support $& replacement metacharacter when search term is not a RegExp
15560        <https://bugs.webkit.org/show_bug.cgi?id=21431>
15561        <rdar://problem/6274993>
15562
15563        Test: fast/js/string-replace-3.html
15564
15565        * runtime/StringPrototype.cpp:
15566        (JSC::substituteBackreferences): Added a null check here so we won't try to handle $$-$9
15567        backreferences when the search term is a string, not a RegExp. Added a check for 0 so we
15568        won't try to handle $0 or $00 as a backreference.
15569        (JSC::stringProtoFuncReplace): Added a call to substituteBackreferences.
15570
155712009-01-01  Gavin Barraclough  <barraclough@apple.com>
15572
15573        Reviewed by Darin Adler.
15574
15575        Allow 32-bit integers to be stored in JSImmediates, on x64-bit.
15576        Presently the top 32-bits of a 64-bit JSImmediate serve as a sign extension of a 31-bit
15577        int stored in the low word (shifted left by one, to make room for a tag).  In the new
15578        format, the top 31-bits serve as a sign extension of a 32-bit int, still shifted left by
15579        one.
15580
15581        The new behavior is enabled using a flag in Platform.h, 'WTF_USE_ALTERNATE_JSIMMEDIATE'.
15582        When this is set the constants defining the range of ints allowed to be stored as
15583        JSImmediate values is extended.  The code in JSImmediate.h can safely operate on either
15584        format.  This patch updates the JIT so that it can also operate with the new format.
15585
15586        ~2% progression on x86-64, with & without the JIT, on sunspider & v8 tests.
15587
15588        * assembler/MacroAssembler.h:
15589        (JSC::MacroAssembler::addPtr):
15590        (JSC::MacroAssembler::orPtr):
15591        (JSC::MacroAssembler::or32):
15592        (JSC::MacroAssembler::rshiftPtr):
15593        (JSC::MacroAssembler::rshift32):
15594        (JSC::MacroAssembler::subPtr):
15595        (JSC::MacroAssembler::xorPtr):
15596        (JSC::MacroAssembler::xor32):
15597        (JSC::MacroAssembler::move):
15598        (JSC::MacroAssembler::compareImm64ForBranch):
15599        (JSC::MacroAssembler::compareImm64ForBranchEquality):
15600        (JSC::MacroAssembler::jePtr):
15601        (JSC::MacroAssembler::jgePtr):
15602        (JSC::MacroAssembler::jlPtr):
15603        (JSC::MacroAssembler::jlePtr):
15604        (JSC::MacroAssembler::jnePtr):
15605        (JSC::MacroAssembler::jnzSubPtr):
15606        (JSC::MacroAssembler::joAddPtr):
15607        (JSC::MacroAssembler::jzSubPtr):
15608        * assembler/X86Assembler.h:
15609        (JSC::X86Assembler::addq_rr):
15610        (JSC::X86Assembler::orq_ir):
15611        (JSC::X86Assembler::subq_ir):
15612        (JSC::X86Assembler::xorq_rr):
15613        (JSC::X86Assembler::sarq_CLr):
15614        (JSC::X86Assembler::sarq_i8r):
15615        (JSC::X86Assembler::cmpq_ir):
15616        * jit/JIT.cpp:
15617        (JSC::JIT::compileOpStrictEq):
15618        (JSC::JIT::privateCompileMainPass):
15619        (JSC::JIT::privateCompileSlowCases):
15620        (JSC::JIT::privateCompileCTIMachineTrampolines):
15621        * jit/JIT.h:
15622        * jit/JITArithmetic.cpp:
15623        (JSC::JIT::compileFastArith_op_lshift):
15624        (JSC::JIT::compileFastArithSlow_op_lshift):
15625        (JSC::JIT::compileFastArith_op_rshift):
15626        (JSC::JIT::compileFastArithSlow_op_rshift):
15627        (JSC::JIT::compileFastArith_op_bitand):
15628        (JSC::JIT::compileFastArithSlow_op_bitand):
15629        (JSC::JIT::compileFastArith_op_mod):
15630        (JSC::JIT::compileFastArithSlow_op_mod):
15631        (JSC::JIT::compileFastArith_op_add):
15632        (JSC::JIT::compileFastArithSlow_op_add):
15633        (JSC::JIT::compileFastArith_op_mul):
15634        (JSC::JIT::compileFastArithSlow_op_mul):
15635        (JSC::JIT::compileFastArith_op_post_inc):
15636        (JSC::JIT::compileFastArithSlow_op_post_inc):
15637        (JSC::JIT::compileFastArith_op_post_dec):
15638        (JSC::JIT::compileFastArithSlow_op_post_dec):
15639        (JSC::JIT::compileFastArith_op_pre_inc):
15640        (JSC::JIT::compileFastArithSlow_op_pre_inc):
15641        (JSC::JIT::compileFastArith_op_pre_dec):
15642        (JSC::JIT::compileFastArithSlow_op_pre_dec):
15643        (JSC::JIT::compileBinaryArithOp):
15644        * jit/JITInlineMethods.h:
15645        (JSC::JIT::getConstantOperand):
15646        (JSC::JIT::getConstantOperandImmediateInt):
15647        (JSC::JIT::isOperandConstantImmediateInt):
15648        (JSC::JIT::isOperandConstant31BitImmediateInt):
15649        (JSC::JIT::emitFastArithDeTagImmediate):
15650        (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
15651        (JSC::JIT::emitFastArithReTagImmediate):
15652        (JSC::JIT::emitFastArithImmToInt):
15653        (JSC::JIT::emitFastArithIntToImmNoCheck):
15654        * runtime/JSImmediate.h:
15655        (JSC::JSImmediate::isPositiveNumber):
15656        (JSC::JSImmediate::isNegative):
15657        (JSC::JSImmediate::rightShiftImmediateNumbers):
15658        (JSC::JSImmediate::canDoFastAdditiveOperations):
15659        (JSC::JSImmediate::makeValue):
15660        (JSC::JSImmediate::makeInt):
15661        (JSC::JSImmediate::makeBool):
15662        (JSC::JSImmediate::intValue):
15663        (JSC::JSImmediate::rawValue):
15664        (JSC::JSImmediate::toBoolean):
15665        (JSC::JSImmediate::from):
15666        * wtf/Platform.h:
15667
156682008-12-31  Oliver Hunt  <oliver@apple.com>
15669
15670        Reviewed by Cameron Zwarich.
15671
15672        [jsfunfuzz] Assertion + incorrect behaviour with dynamically created local variable in a catch block
15673        <https://bugs.webkit.org/show_bug.cgi?id=23063>
15674
15675        Eval inside a catch block attempts to use the catch block's static scope in
15676        an unsafe way by attempting to add new properties to the scope.  This patch
15677        fixes this issue simply by preventing the catch block from using a static
15678        scope if it contains an eval.
15679
15680        * parser/Grammar.y:
15681        * parser/Nodes.cpp:
15682        (JSC::TryNode::emitBytecode):
15683        * parser/Nodes.h:
15684        (JSC::TryNode::):
15685
156862008-12-31  Oliver Hunt  <oliver@apple.com>
15687
15688        Reviewed by Gavin Barraclough.
15689
15690        [jsfunfuzz] Computed exception offset wrong when first instruction is attempt to resolve deleted eval
15691        <https://bugs.webkit.org/show_bug.cgi?id=23062>
15692
15693        This was caused by the expression information for the initial resolve of
15694        eval not being emitted.  If this resolve was the first instruction that
15695        could throw an exception the information search would fail leading to an
15696        assertion failure.  If it was not the first throwable opcode the wrong
15697        expression information would used.
15698
15699        Fix is simply to emit the expression info.
15700
15701        * parser/Nodes.cpp:
15702        (JSC::EvalFunctionCallNode::emitBytecode):
15703
157042008-12-31  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
15705
15706        Reviewed by Oliver Hunt.
15707
15708        Bug 23054: Caching of global lookups occurs even when the global object has become a dictionary
15709        <https://bugs.webkit.org/show_bug.cgi?id=23054>
15710        <rdar://problem/6469905>
15711
15712        * interpreter/Interpreter.cpp:
15713        (JSC::Interpreter::resolveGlobal): Do not cache lookup if the global
15714        object has transitioned to a dictionary.
15715        (JSC::Interpreter::cti_op_resolve_global): Do not cache lookup if the
15716        global object has transitioned to a dictionary.
15717
157182008-12-30  Oliver Hunt  <oliver@apple.com>
15719
15720        Reviewed by Darin Adler.
15721
15722        <https://bugs.webkit.org/show_bug.cgi?id=23049> [jsfunfuzz] With blocks do not correctly protect their scope object
15723        <rdar://problem/6469742> Crash in JSC::TypeInfo::hasStandardGetOwnPropertySlot() running jsfunfuzz
15724
15725        The problem that caused this was that with nodes were not correctly protecting
15726        the final object that was placed in the scope chain.  We correct this by forcing
15727        the use of a temporary register (which stops us relying on a local register
15728        protecting the scope) and changing the behaviour of op_push_scope so that it
15729        will store the final scope object.
15730
15731        * bytecompiler/BytecodeGenerator.cpp:
15732        (JSC::BytecodeGenerator::emitPushScope):
15733        * interpreter/Interpreter.cpp:
15734        (JSC::Interpreter::privateExecute):
15735        (JSC::Interpreter::cti_op_push_scope):
15736        * interpreter/Interpreter.h:
15737        * jit/JIT.cpp:
15738        (JSC::JIT::privateCompileMainPass):
15739        * parser/Nodes.cpp:
15740        (JSC::WithNode::emitBytecode):
15741
157422008-12-30  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
15743
15744        Reviewed by Sam Weinig.
15745
15746        Bug 23037: Parsing and reparsing disagree on automatic semicolon insertion
15747        <https://bugs.webkit.org/show_bug.cgi?id=23037>
15748        <rdar://problem/6467124>
15749
15750        Parsing and reparsing disagree about automatic semicolon insertion, so that a
15751        function like
15752
15753        function() { a = 1, }
15754
15755        is parsed as being syntactically valid but gets a syntax error upon reparsing.
15756        This leads to an assertion failure in Parser::reparse(). It is not that big of
15757        an issue in practice, because in a Release build such a function will return
15758        'undefined' when called.
15759
15760        In this case, we are not following the spec and it should be a syntax error.
15761        However, unless there is a newline separating the ',' and the '}', WebKit would
15762        not treat it as a syntax error in the past either. It would be a bit of work to
15763        make the automatic semicolon insertion match the spec exactly, so this patch
15764        changes it to match our past behaviour.
15765
15766        The problem is that even during reparsing, the Lexer adds a semicolon at the
15767        end of the input, which confuses allowAutomaticSemicolon(), because it is
15768        expecting either a '}', the end of input, or a terminator like a newline.
15769
15770        * parser/Lexer.cpp:
15771        (JSC::Lexer::Lexer): Initialize m_isReparsing to false.
15772        (JSC::Lexer::lex): Do not perform automatic semicolon insertion in the Lexer if
15773        we are in the middle of reparsing.
15774        (JSC::Lexer::clear): Set m_isReparsing to false.
15775        * parser/Lexer.h:
15776        (JSC::Lexer::setIsReparsing): Added.
15777        * parser/Parser.cpp:
15778        (JSC::Parser::reparse): Call Lexer::setIsReparsing() to notify the Lexer of
15779        reparsing.
15780
157812008-12-29  Oliver Hunt  <oliver@apple.com>
15782
15783        Reviewed by NOBODY (Build fix).
15784
15785        Yet another attempt to fix Tiger.
15786
15787        * wtf/RandomNumber.cpp:
15788        (WTF::randomNumber):
15789
157902008-12-29  Oliver Hunt  <oliver@apple.com>
15791
15792        Reviewed by NOBODY (Build fix).
15793
15794        Tiger build fix (correct this time)
15795
15796        * wtf/RandomNumber.cpp:
15797
157982008-12-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
15799
15800        Rubber-stamped by Alexey Proskuryakov.
15801
15802        Revert r39509, because kjsyydebug is used in the generated code if YYDEBUG is 1.
15803
15804        * parser/Grammar.y:
15805
158062008-12-29  Oliver Hunt  <oliver@apple.com>
15807
15808        Reviewed by NOBODY (Build fix).
15809
15810        Tiger build fix.
15811
15812        * wtf/RandomNumber.cpp:
15813
158142008-12-29  Oliver Hunt  <oliver@apple.com>
15815
15816        Reviewed by Mark Rowe.
15817
15818        <rdar://problem/6358108> Insecure randomness in Math.random() leads to user tracking
15819
15820        Switch to arc4random on PLATFORM(DARWIN), this is ~1.5x slower than random(), but the
15821        it is still so fast that there is no fathomable way it could be a bottleneck for anything.
15822
15823        randomNumber is called in two places
15824          * During form submission where it is called once per form
15825          * Math.random in JSC.  For this difference to show up you have to be looping on
15826            a cached local copy of random, for a large (>10000) calls.
15827
15828        No change in SunSpider.
15829
15830        * wtf/RandomNumber.cpp:
15831        (WTF::randomNumber):
15832        * wtf/RandomNumberSeed.h:
15833        (WTF::initializeRandomNumberGenerator):
15834
158352008-12-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
15836
15837        Rubber-stamped by Sam Weinig.
15838
15839        Remove unused kjsyydebug #define.
15840
15841        * parser/Grammar.y:
15842
158432008-12-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
15844
15845        Reviewed by Oliver Hunt and Sam Weinig.
15846
15847        Bug 23029: REGRESSION (r39337): jsfunfuzz generates identical test files
15848        <https://bugs.webkit.org/show_bug.cgi?id=23029>
15849        <rdar://problem/6469185>
15850
15851        The unification of random number generation in r39337 resulted in random()
15852        being initialized on Darwin, but rand() actually being used. Fix this by
15853        making randomNumber() use random() instead of rand() on Darwin.
15854
15855        * wtf/RandomNumber.cpp:
15856        (WTF::randomNumber):
15857
158582008-12-29  Sam Weinig  <sam@webkit.org>
15859
15860        Fix buildbots.
15861
15862        * runtime/Structure.cpp:
15863
158642008-12-29  Sam Weinig  <sam@webkit.org>
15865
15866        Reviewed by Oliver Hunt.
15867
15868        Patch for https://bugs.webkit.org/show_bug.cgi?id=23026
15869        Move the deleted offsets vector into the PropertyMap
15870
15871        Saves 3 words per Structure.
15872
15873        * runtime/PropertyMapHashTable.h:
15874        * runtime/Structure.cpp:
15875        (JSC::Structure::addPropertyTransition):
15876        (JSC::Structure::changePrototypeTransition):
15877        (JSC::Structure::getterSetterTransition):
15878        (JSC::Structure::toDictionaryTransition):
15879        (JSC::Structure::fromDictionaryTransition):
15880        (JSC::Structure::copyPropertyTable):
15881        (JSC::Structure::put):
15882        (JSC::Structure::remove):
15883        (JSC::Structure::rehashPropertyMapHashTable):
15884        * runtime/Structure.h:
15885        (JSC::Structure::propertyStorageSize):
15886
158872008-12-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
15888
15889        Reviewed by Oliver Hunt.
15890
15891        Change code using m_body.get() as a boolean to take advantage of the 
15892        implicit conversion of RefPtr to boolean.
15893
15894        * runtime/JSFunction.cpp:
15895        (JSC::JSFunction::~JSFunction):
15896
158972008-12-28  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
15898
15899        Reviewed by Oliver Hunt.
15900
15901        Bug 22840: REGRESSION (r38349): Gmail doesn't load with profiling enabled
15902        <https://bugs.webkit.org/show_bug.cgi?id=22840>
15903        <rdar://problem/6468077>
15904
15905        * bytecompiler/BytecodeGenerator.cpp:
15906        (JSC::BytecodeGenerator::emitNewArray): Add an assertion that the range
15907        of registers passed to op_new_array is sequential.
15908        (JSC::BytecodeGenerator::emitCall): Correct the relocation of registers
15909        when emitting profiler hooks so that registers aren't leaked. Also, add
15910        an assertion that the 'this' register is always ref'd (because it is),
15911        remove the needless protection of the 'this' register when relocating,
15912        and add an assertion that the range of registers passed to op_call for
15913        function call arguments is sequential.
15914        (JSC::BytecodeGenerator::emitConstruct): Correct the relocation of
15915        registers when emitting profiler hooks so that registers aren't leaked.
15916        Also, add an assertion that the range of registers passed to op_construct
15917        for function call arguments is sequential.
15918
159192008-12-26  Mark Rowe  <mrowe@apple.com>
15920
15921        Reviewed by Alexey Proskuryakov.
15922
15923        <rdar://problem/6467376> Race condition in WTF::currentThread can lead to a thread using two different identifiers during its lifetime
15924
15925        If a newly-created thread calls WTF::currentThread() before WTF::createThread calls establishIdentifierForPthreadHandle
15926        then more than one identifier will be used for the same thread.  We can avoid this by adding some extra synchronization
15927        during thread creation that delays the execution of the thread function until the thread identifier has been set up, and
15928        an assertion to catch this problem should it reappear in the future.
15929
15930        * wtf/Threading.cpp: Added.
15931        (WTF::NewThreadContext::NewThreadContext):
15932        (WTF::threadEntryPoint):
15933        (WTF::createThread): Add cross-platform createThread function that delays the execution of the thread function until
15934        after the thread identifier has been set up.
15935        * wtf/Threading.h:
15936        * wtf/ThreadingGtk.cpp:
15937        (WTF::establishIdentifierForThread):
15938        (WTF::createThreadInternal):
15939        * wtf/ThreadingNone.cpp:
15940        (WTF::createThreadInternal):
15941        * wtf/ThreadingPthreads.cpp:
15942        (WTF::establishIdentifierForPthreadHandle):
15943        (WTF::createThreadInternal):
15944        * wtf/ThreadingQt.cpp:
15945        (WTF::identifierByQthreadHandle):
15946        (WTF::establishIdentifierForThread):
15947        (WTF::createThreadInternal):
15948        * wtf/ThreadingWin.cpp:
15949        (WTF::storeThreadHandleByIdentifier):
15950        (WTF::createThreadInternal):
15951
15952        Add Threading.cpp to the build.
15953
15954        * GNUmakefile.am:
15955        * JavaScriptCore.pri:
15956        * JavaScriptCore.scons:
15957        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
15958        * JavaScriptCore.xcodeproj/project.pbxproj:
15959        * JavaScriptCoreSources.bkl:
15960
159612008-12-26  Sam Weinig  <sam@webkit.org>
15962
15963        Reviewed by Alexey Proskuryakov.
15964
15965        Remove unused method.
15966
15967        * runtime/Structure.h: Remove mutableTypeInfo.
15968
159692008-12-22  Gavin Barraclough  <barraclough@apple.com>
15970
15971        Reviewed by Oliver Hunt.
15972
15973        Fix rounding / bounds / signed comparison bug in ExecutableAllocator.
15974
15975        ExecutableAllocator::alloc assumed that m_freePtr would be aligned.  This was
15976        not always true, since the first allocation from an additional pool would not
15977        be rounded up.  Subsequent allocations would be unaligned, and too much memory
15978        could be erroneously allocated from the pool, when the size requested was
15979        available, but the size rounded up to word granularity was not available in the
15980        pool.  This may result in the value of m_freePtr being greater than m_end.
15981
15982        Under these circumstances, the unsigned check for space will always pass,
15983        resulting in pointers to memory outside of the arena being returned, and
15984        ultimately segfaulty goodness when attempting to memcpy the hot freshly jitted
15985        code from the AssemblerBuffer.
15986
15987        https://bugs.webkit.org/show_bug.cgi?id=22974
15988        ... and probably many, many more.
15989
15990        * jit/ExecutableAllocator.h:
15991        (JSC::ExecutablePool::alloc):
15992        (JSC::ExecutablePool::roundUpAllocationSize):
15993        (JSC::ExecutablePool::ExecutablePool):
15994        (JSC::ExecutablePool::poolAllocate):
15995
159962008-12-22  Sam Weinig  <sam@webkit.org>
15997
15998        Reviewed by Gavin Barraclough.
15999
16000        Rename all uses of the term "repatch" to "patch".
16001
16002        * assembler/MacroAssembler.h:
16003        (JSC::MacroAssembler::DataLabelPtr::patch):
16004        (JSC::MacroAssembler::DataLabel32::patch):
16005        (JSC::MacroAssembler::Jump::patch):
16006        (JSC::MacroAssembler::PatchBuffer::PatchBuffer):
16007        (JSC::MacroAssembler::PatchBuffer::setPtr):
16008        (JSC::MacroAssembler::loadPtrWithAddressOffsetPatch):
16009        (JSC::MacroAssembler::storePtrWithAddressOffsetPatch):
16010        (JSC::MacroAssembler::storePtrWithPatch):
16011        (JSC::MacroAssembler::jnePtrWithPatch):
16012        * assembler/X86Assembler.h:
16013        (JSC::X86Assembler::patchAddress):
16014        (JSC::X86Assembler::patchImmediate):
16015        (JSC::X86Assembler::patchPointer):
16016        (JSC::X86Assembler::patchBranchOffset):
16017        * interpreter/Interpreter.cpp:
16018        (JSC::Interpreter::tryCTICachePutByID):
16019        (JSC::Interpreter::tryCTICacheGetByID):
16020        (JSC::Interpreter::cti_op_put_by_id):
16021        (JSC::Interpreter::cti_op_get_by_id):
16022        (JSC::Interpreter::cti_op_get_by_id_self_fail):
16023        (JSC::Interpreter::cti_op_get_by_id_proto_list):
16024        (JSC::Interpreter::cti_vm_dontLazyLinkCall):
16025        * jit/JIT.cpp:
16026        (JSC::ctiPatchCallByReturnAddress):
16027        (JSC::JIT::privateCompileMainPass):
16028        (JSC::JIT::privateCompile):
16029        (JSC::JIT::privateCompileCTIMachineTrampolines):
16030        * jit/JIT.h:
16031        * jit/JITCall.cpp:
16032        (JSC::JIT::unlinkCall):
16033        (JSC::JIT::linkCall):
16034        (JSC::JIT::compileOpCall):
16035        * jit/JITPropertyAccess.cpp:
16036        (JSC::JIT::compileGetByIdHotPath):
16037        (JSC::JIT::compilePutByIdHotPath):
16038        (JSC::JIT::compileGetByIdSlowCase):
16039        (JSC::JIT::compilePutByIdSlowCase):
16040        (JSC::JIT::privateCompilePutByIdTransition):
16041        (JSC::JIT::patchGetByIdSelf):
16042        (JSC::JIT::patchPutByIdReplace):
16043        (JSC::JIT::privateCompilePatchGetArrayLength):
16044        (JSC::JIT::privateCompileGetByIdSelf):
16045        (JSC::JIT::privateCompileGetByIdProto):
16046        (JSC::JIT::privateCompileGetByIdSelfList):
16047        (JSC::JIT::privateCompileGetByIdProtoList):
16048        (JSC::JIT::privateCompileGetByIdChainList):
16049        (JSC::JIT::privateCompileGetByIdChain):
16050        (JSC::JIT::privateCompilePutByIdReplace):
16051
160522008-12-22  Adam Roben  <aroben@apple.com>
16053
16054        Build fix after r39428
16055
16056        * jit/JITCall.cpp:
16057        (JSC::JIT::compileOpCallSlowCase): Added a missing MacroAssembler::
16058
160592008-12-22  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>
16060
16061        Rubber-stamped by George Staikos.
16062
16063        Unify all TorchMobile copyright lines. Consolidate in a single line, as requested by Mark Rowe, some time ago.
16064
16065        * wtf/RandomNumber.cpp:
16066        * wtf/RandomNumber.h:
16067        * wtf/RandomNumberSeed.h:
16068
160692008-12-21  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>
16070
16071        Rubber-stamped by George Staikos.
16072
16073        Fix copyright of the new RandomNumber* files.
16074
16075        * wtf/RandomNumber.cpp:
16076        * wtf/RandomNumber.h:
16077        * wtf/RandomNumberSeed.h:
16078
160792008-12-21  Gavin Barraclough  <barraclough@apple.com>
16080
16081        Reviewed by Oliver Hunt & Cameron Zwarich.
16082
16083        Add support for call and property access repatching on x86-64.
16084
16085        No change in performance on current configurations (2x impovement on v8-tests with JIT enabled on x86-64).
16086
16087        * assembler/MacroAssembler.h:
16088        (JSC::MacroAssembler::DataLabelPtr::repatch):
16089        (JSC::MacroAssembler::DataLabelPtr::operator X86Assembler::JmpDst):
16090        (JSC::MacroAssembler::DataLabel32::repatch):
16091        (JSC::MacroAssembler::RepatchBuffer::addressOf):
16092        (JSC::MacroAssembler::add32):
16093        (JSC::MacroAssembler::sub32):
16094        (JSC::MacroAssembler::loadPtrWithAddressOffsetRepatch):
16095        (JSC::MacroAssembler::storePtrWithAddressOffsetRepatch):
16096        (JSC::MacroAssembler::jePtr):
16097        (JSC::MacroAssembler::jnePtr):
16098        (JSC::MacroAssembler::jnePtrWithRepatch):
16099        (JSC::MacroAssembler::differenceBetween):
16100        * assembler/X86Assembler.h:
16101        (JSC::X86Assembler::addl_im):
16102        (JSC::X86Assembler::subl_im):
16103        (JSC::X86Assembler::cmpl_rm):
16104        (JSC::X86Assembler::movq_rm_disp32):
16105        (JSC::X86Assembler::movq_mr_disp32):
16106        (JSC::X86Assembler::repatchPointer):
16107        (JSC::X86Assembler::X86InstructionFormatter::oneByteOp64_disp32):
16108        * jit/JIT.cpp:
16109        (JSC::JIT::privateCompile):
16110        (JSC::JIT::privateCompileCTIMachineTrampolines):
16111        * jit/JIT.h:
16112        * jit/JITCall.cpp:
16113        (JSC::JIT::unlinkCall):
16114        (JSC::JIT::linkCall):
16115        (JSC::JIT::compileOpCall):
16116        (JSC::JIT::compileOpCallSlowCase):
16117        * jit/JITInlineMethods.h:
16118        (JSC::JIT::restoreArgumentReferenceForTrampoline):
16119        * jit/JITPropertyAccess.cpp:
16120        (JSC::JIT::compileGetByIdHotPath):
16121        (JSC::JIT::compileGetByIdSlowCase):
16122        (JSC::JIT::compilePutByIdHotPath):
16123        (JSC::JIT::compilePutByIdSlowCase):
16124        (JSC::resizePropertyStorage):
16125        (JSC::JIT::privateCompilePutByIdTransition):
16126        (JSC::JIT::privateCompileGetByIdProto):
16127        (JSC::JIT::privateCompileGetByIdProtoList):
16128        (JSC::JIT::privateCompileGetByIdChainList):
16129        (JSC::JIT::privateCompileGetByIdChain):
16130        * wtf/Platform.h:
16131
161322008-12-20  Gavin Barraclough  <barraclough@apple.com>
16133
16134        Reviewed by Oliver Hunt.
16135
16136        Port optimized property access generation to the MacroAssembler.
16137
16138        * assembler/MacroAssembler.h:
16139        (JSC::MacroAssembler::AbsoluteAddress::AbsoluteAddress):
16140        (JSC::MacroAssembler::DataLabelPtr::repatch):
16141        (JSC::MacroAssembler::DataLabel32::DataLabel32):
16142        (JSC::MacroAssembler::DataLabel32::repatch):
16143        (JSC::MacroAssembler::Label::operator X86Assembler::JmpDst):
16144        (JSC::MacroAssembler::Jump::repatch):
16145        (JSC::MacroAssembler::JumpList::empty):
16146        (JSC::MacroAssembler::RepatchBuffer::link):
16147        (JSC::MacroAssembler::add32):
16148        (JSC::MacroAssembler::and32):
16149        (JSC::MacroAssembler::sub32):
16150        (JSC::MacroAssembler::loadPtrWithAddressRepatch):
16151        (JSC::MacroAssembler::storePtrWithAddressRepatch):
16152        (JSC::MacroAssembler::push):
16153        (JSC::MacroAssembler::ja32):
16154        (JSC::MacroAssembler::jePtr):
16155        (JSC::MacroAssembler::jnePtr):
16156        (JSC::MacroAssembler::jnePtrWithRepatch):
16157        (JSC::MacroAssembler::align):
16158        (JSC::MacroAssembler::differenceBetween):
16159        * assembler/X86Assembler.h:
16160        (JSC::X86Assembler::movl_rm_disp32):
16161        (JSC::X86Assembler::movl_mr_disp32):
16162        (JSC::X86Assembler::X86InstructionFormatter::oneByteOp_disp32):
16163        (JSC::X86Assembler::X86InstructionFormatter::memoryModRM):
16164        * jit/JIT.cpp:
16165        (JSC::ctiRepatchCallByReturnAddress):
16166        (JSC::JIT::privateCompileMainPass):
16167        (JSC::JIT::privateCompile):
16168        (JSC::JIT::privateCompileCTIMachineTrampolines):
16169        * jit/JIT.h:
16170        * jit/JITPropertyAccess.cpp:
16171        (JSC::JIT::compileGetByIdHotPath):
16172        (JSC::JIT::compileGetByIdSlowCase):
16173        (JSC::JIT::compilePutByIdHotPath):
16174        (JSC::JIT::compilePutByIdSlowCase):
16175        (JSC::resizePropertyStorage):
16176        (JSC::JIT::privateCompilePutByIdTransition):
16177        (JSC::JIT::patchGetByIdSelf):
16178        (JSC::JIT::patchPutByIdReplace):
16179        (JSC::JIT::privateCompilePatchGetArrayLength):
16180        (JSC::JIT::privateCompileGetByIdSelf):
16181        (JSC::JIT::privateCompileGetByIdProto):
16182        (JSC::JIT::privateCompileGetByIdSelfList):
16183        (JSC::JIT::privateCompileGetByIdProtoList):
16184        (JSC::JIT::privateCompileGetByIdChainList):
16185        (JSC::JIT::privateCompileGetByIdChain):
16186        (JSC::JIT::privateCompilePutByIdReplace):
16187        * wtf/RefCounted.h:
16188        (WTF::RefCountedBase::addressOfCount):
16189
161902008-12-19  Gustavo Noronha Silva  <gns@gnome.org>
16191
16192        Reviewed by Holger Freyther.
16193
16194        https://bugs.webkit.org/show_bug.cgi?id=22686
16195
16196        Added file which was missing to the javascriptcore_sources
16197        variable, so that it shows up in the tarball created by `make
16198        dist'.
16199
16200        * GNUmakefile.am:
16201
162022008-12-19  Holger Hans Peter Freyther  <zecke@selfish.org>
16203
16204        Reviewed by Antti Koivisto.
16205
16206        Build fix when building JS API tests with a c89 c compiler
16207
16208        Do not use C++ style comments and convert them to C comments.
16209
16210        * wtf/Platform.h:
16211
162122008-12-18  Gavin Barraclough  <barraclough@apple.com>
16213
16214        Reviewed by Sam Weinig.
16215
16216        Same as last revision, adding cases for pre & post inc & dec.
16217
16218        https://bugs.webkit.org/show_bug.cgi?id=22928
16219
16220        * jit/JIT.cpp:
16221        (JSC::JIT::privateCompileMainPass):
16222
162232008-12-18  Gavin Barraclough  <barraclough@apple.com>
16224
16225        Reviewed by Sam Weinig.
16226
16227        Fixes for the JIT's handling of JSImmediate values on x86-64.
16228        On 64-bit systems, the code in JSImmediate.h relies on the upper
16229        bits of a JSImmediate being a sign extension of the low 32-bits.
16230        This was not being enforced by the JIT, since a number of inline
16231        operations were being performed on 32-bit values in registers, and
16232        when a 32-bit result is written to a register on x86-64 the value
16233        is zero-extended to 64-bits.
16234        
16235        This fix honors previous behavoir.  A better fix in the long run
16236        (when the JIT is enabled by default) may be to change JSImmediate.h
16237        so it no longer relies on the upper bits of the pointer,... though
16238        if we're going to change JSImmediate.h for 64-bit, we probably may
16239        as well change the format so that the full range of 32-bit ints can
16240        be stored, rather than just 31-bits.
16241
16242        https://bugs.webkit.org/show_bug.cgi?id=22925
16243
16244        * assembler/MacroAssembler.h:
16245        (JSC::MacroAssembler::addPtr):
16246        (JSC::MacroAssembler::andPtr):
16247        (JSC::MacroAssembler::orPtr):
16248        (JSC::MacroAssembler::or32):
16249        (JSC::MacroAssembler::xor32):
16250        (JSC::MacroAssembler::xorPtr):
16251        (JSC::MacroAssembler::signExtend32ToPtr):
16252        * assembler/X86Assembler.h:
16253        (JSC::X86Assembler::):
16254        (JSC::X86Assembler::andq_rr):
16255        (JSC::X86Assembler::andq_ir):
16256        (JSC::X86Assembler::orq_rr):
16257        (JSC::X86Assembler::xorq_ir):
16258        (JSC::X86Assembler::movsxd_rr):
16259        * jit/JIT.cpp:
16260        (JSC::JIT::privateCompileMainPass):
16261        * jit/JITInlineMethods.h:
16262        (JSC::JIT::emitFastArithReTagImmediate):
16263        (JSC::JIT::emitFastArithPotentiallyReTagImmediate):
16264        (JSC::JIT::emitFastArithImmToInt):
16265
162662008-12-18  Gavin Barraclough  <barraclough@apple.com>
16267
16268        Reviewed by Sam Weinig.
16269
16270        Just a tidy up - rename & refactor some the #defines configuring the JIT.
16271
16272        * interpreter/Interpreter.cpp:
16273        (JSC::Interpreter::cti_op_convert_this):
16274        (JSC::Interpreter::cti_op_end):
16275        (JSC::Interpreter::cti_op_add):
16276        (JSC::Interpreter::cti_op_pre_inc):
16277        (JSC::Interpreter::cti_timeout_check):
16278        (JSC::Interpreter::cti_register_file_check):
16279        (JSC::Interpreter::cti_op_loop_if_less):
16280        (JSC::Interpreter::cti_op_loop_if_lesseq):
16281        (JSC::Interpreter::cti_op_new_object):
16282        (JSC::Interpreter::cti_op_put_by_id_generic):
16283        (JSC::Interpreter::cti_op_get_by_id_generic):
16284        (JSC::Interpreter::cti_op_put_by_id):
16285        (JSC::Interpreter::cti_op_put_by_id_second):
16286        (JSC::Interpreter::cti_op_put_by_id_fail):
16287        (JSC::Interpreter::cti_op_get_by_id):
16288        (JSC::Interpreter::cti_op_get_by_id_second):
16289        (JSC::Interpreter::cti_op_get_by_id_self_fail):
16290        (JSC::Interpreter::cti_op_get_by_id_proto_list):
16291        (JSC::Interpreter::cti_op_get_by_id_proto_list_full):
16292        (JSC::Interpreter::cti_op_get_by_id_proto_fail):
16293        (JSC::Interpreter::cti_op_get_by_id_array_fail):
16294        (JSC::Interpreter::cti_op_get_by_id_string_fail):
16295        (JSC::Interpreter::cti_op_instanceof):
16296        (JSC::Interpreter::cti_op_del_by_id):
16297        (JSC::Interpreter::cti_op_mul):
16298        (JSC::Interpreter::cti_op_new_func):
16299        (JSC::Interpreter::cti_op_call_JSFunction):
16300        (JSC::Interpreter::cti_op_call_arityCheck):
16301        (JSC::Interpreter::cti_vm_dontLazyLinkCall):
16302        (JSC::Interpreter::cti_vm_lazyLinkCall):
16303        (JSC::Interpreter::cti_op_push_activation):
16304        (JSC::Interpreter::cti_op_call_NotJSFunction):
16305        (JSC::Interpreter::cti_op_create_arguments):
16306        (JSC::Interpreter::cti_op_create_arguments_no_params):
16307        (JSC::Interpreter::cti_op_tear_off_activation):
16308        (JSC::Interpreter::cti_op_tear_off_arguments):
16309        (JSC::Interpreter::cti_op_profile_will_call):
16310        (JSC::Interpreter::cti_op_profile_did_call):
16311        (JSC::Interpreter::cti_op_ret_scopeChain):
16312        (JSC::Interpreter::cti_op_new_array):
16313        (JSC::Interpreter::cti_op_resolve):
16314        (JSC::Interpreter::cti_op_construct_JSConstruct):
16315        (JSC::Interpreter::cti_op_construct_NotJSConstruct):
16316        (JSC::Interpreter::cti_op_get_by_val):
16317        (JSC::Interpreter::cti_op_resolve_func):
16318        (JSC::Interpreter::cti_op_sub):
16319        (JSC::Interpreter::cti_op_put_by_val):
16320        (JSC::Interpreter::cti_op_put_by_val_array):
16321        (JSC::Interpreter::cti_op_lesseq):
16322        (JSC::Interpreter::cti_op_loop_if_true):
16323        (JSC::Interpreter::cti_op_negate):
16324        (JSC::Interpreter::cti_op_resolve_base):
16325        (JSC::Interpreter::cti_op_resolve_skip):
16326        (JSC::Interpreter::cti_op_resolve_global):
16327        (JSC::Interpreter::cti_op_div):
16328        (JSC::Interpreter::cti_op_pre_dec):
16329        (JSC::Interpreter::cti_op_jless):
16330        (JSC::Interpreter::cti_op_not):
16331        (JSC::Interpreter::cti_op_jtrue):
16332        (JSC::Interpreter::cti_op_post_inc):
16333        (JSC::Interpreter::cti_op_eq):
16334        (JSC::Interpreter::cti_op_lshift):
16335        (JSC::Interpreter::cti_op_bitand):
16336        (JSC::Interpreter::cti_op_rshift):
16337        (JSC::Interpreter::cti_op_bitnot):
16338        (JSC::Interpreter::cti_op_resolve_with_base):
16339        (JSC::Interpreter::cti_op_new_func_exp):
16340        (JSC::Interpreter::cti_op_mod):
16341        (JSC::Interpreter::cti_op_less):
16342        (JSC::Interpreter::cti_op_neq):
16343        (JSC::Interpreter::cti_op_post_dec):
16344        (JSC::Interpreter::cti_op_urshift):
16345        (JSC::Interpreter::cti_op_bitxor):
16346        (JSC::Interpreter::cti_op_new_regexp):
16347        (JSC::Interpreter::cti_op_bitor):
16348        (JSC::Interpreter::cti_op_call_eval):
16349        (JSC::Interpreter::cti_op_throw):
16350        (JSC::Interpreter::cti_op_get_pnames):
16351        (JSC::Interpreter::cti_op_next_pname):
16352        (JSC::Interpreter::cti_op_push_scope):
16353        (JSC::Interpreter::cti_op_pop_scope):
16354        (JSC::Interpreter::cti_op_typeof):
16355        (JSC::Interpreter::cti_op_is_undefined):
16356        (JSC::Interpreter::cti_op_is_boolean):
16357        (JSC::Interpreter::cti_op_is_number):
16358        (JSC::Interpreter::cti_op_is_string):
16359        (JSC::Interpreter::cti_op_is_object):
16360        (JSC::Interpreter::cti_op_is_function):
16361        (JSC::Interpreter::cti_op_stricteq):
16362        (JSC::Interpreter::cti_op_nstricteq):
16363        (JSC::Interpreter::cti_op_to_jsnumber):
16364        (JSC::Interpreter::cti_op_in):
16365        (JSC::Interpreter::cti_op_push_new_scope):
16366        (JSC::Interpreter::cti_op_jmp_scopes):
16367        (JSC::Interpreter::cti_op_put_by_index):
16368        (JSC::Interpreter::cti_op_switch_imm):
16369        (JSC::Interpreter::cti_op_switch_char):
16370        (JSC::Interpreter::cti_op_switch_string):
16371        (JSC::Interpreter::cti_op_del_by_val):
16372        (JSC::Interpreter::cti_op_put_getter):
16373        (JSC::Interpreter::cti_op_put_setter):
16374        (JSC::Interpreter::cti_op_new_error):
16375        (JSC::Interpreter::cti_op_debug):
16376        (JSC::Interpreter::cti_vm_throw):
16377        * interpreter/Interpreter.h:
16378        * jit/JIT.cpp:
16379        (JSC::):
16380        (JSC::JIT::privateCompileMainPass):
16381        (JSC::JIT::privateCompile):
16382        * jit/JIT.h:
16383        * jit/JITInlineMethods.h:
16384        (JSC::JIT::restoreArgumentReference):
16385        (JSC::JIT::restoreArgumentReferenceForTrampoline):
16386        * wtf/Platform.h:
16387
163882008-12-18  Cameron Zwarich  <zwarich@apple.com>
16389
16390        Reviewed by Geoff Garen.
16391
16392        Bug 21855: REGRESSION (r37323): Gmail complains about popup blocking when opening a link
16393        <https://bugs.webkit.org/show_bug.cgi?id=21855>
16394        <rdar://problem/6278244>
16395
16396        Move DynamicGlobalObjectScope to JSGlobalObject.h so that it can be used
16397        from WebCore.
16398
16399        * interpreter/Interpreter.cpp:
16400        * runtime/JSGlobalObject.h:
16401        (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
16402        (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope):
16403
164042008-12-17  Geoffrey Garen  <ggaren@apple.com>
16405
16406        Reviewed by Gavin Barraclough.
16407        
16408        Fixed https://bugs.webkit.org/show_bug.cgi?id=22393
16409        Segfault when caching property accesses to primitive cells.
16410        
16411        Changed some asObject casts to asCell casts in cases where a primitive
16412        value may be a cell and not an object.
16413        
16414        Re-enabled property caching for primitives in cases where it had been
16415        disabled because of this bug.
16416        
16417        Updated a comment to better explain something Darin thought needed
16418        explaining in an old patch review.
16419
16420        * interpreter/Interpreter.cpp:
16421        (JSC::countPrototypeChainEntriesAndCheckForProxies):
16422        (JSC::Interpreter::tryCacheGetByID):
16423        (JSC::Interpreter::tryCTICacheGetByID):
16424        (JSC::Interpreter::cti_op_get_by_id_self_fail):
16425        (JSC::Interpreter::cti_op_get_by_id_proto_list):
16426
164272008-12-17  Gavin Barraclough  <barraclough@apple.com>
16428
16429        Reviewed by Cameron Zwarich.
16430
16431        Fixes for Sunspider failures with the JIT enabled on x86-64.
16432
16433        * assembler/MacroAssembler.h:
16434            Switch the order of the RegisterID & Address form of je32, to keep it consistent with jne32.
16435        * jit/JIT.cpp:
16436        * jit/JIT.h:
16437        * jit/JITInlineMethods.h:
16438            Port the m_ctiVirtualCall tramopline generation to use the MacroAssembler interface.
16439        * jit/JITCall.cpp:
16440            Fix bug in the non-optimizing code path, vptr check should have been to the memory address pointer
16441            to by the register, not to the register itself.
16442        * wrec/WRECGenerator.cpp:
16443            See assembler/MacroAssembler.h, above.
16444
164452008-12-17  Gavin Barraclough  <barraclough@apple.com>
16446
16447        Reviewed by Sam Weinig.
16448
16449        print("Hello, 64-bit jitted world!");
16450        Get hello-world working through the JIT, on x86-64.
16451
16452        * assembler/X86Assembler.h:
16453            Fix encoding of opcode + RegisterID format instructions for 64-bit.
16454        * interpreter/Interpreter.cpp:
16455        * interpreter/Interpreter.h:
16456            Make VoidPtrPair actually be a pair of void*s.
16457            (Possibly should make this change for 32-bit Mac platforms, too - but won't change 32-bit behaviour in this patch).
16458        * jit/JIT.cpp:
16459        * jit/JIT.h:
16460            Provide names for the timeoutCheckRegister & callFrameRegister on x86-64,
16461            force x86-64 ctiTrampoline arguments onto the stack,
16462            implement the asm trampolines for x86-64,
16463            implement the restoreArgumentReference methods for x86-64 calling conventions.
16464        * jit/JITCall.cpp:
16465        * jit/JITInlineMethods.h:
16466        * wtf/Platform.h:
16467            Add switch settings to ENABLE(JIT), on PLATFORM(X86_64) (currently still disabled).
16468
164692008-12-17  Sam Weinig  <sam@webkit.org>
16470
16471        Reviewed by Gavin Barraclough.
16472
16473        Add more CodeBlock statistics.
16474
16475        * bytecode/CodeBlock.cpp:
16476        (JSC::CodeBlock::dumpStatistics):
16477
164782008-12-17  Sam Weinig  <sam@webkit.org>
16479
16480        Reviewed by Darin Adler.
16481
16482        Fix for https://bugs.webkit.org/show_bug.cgi?id=22897
16483        <rdar://problem/6428342>
16484        Look into feasibility of discarding bytecode after native codegen
16485
16486        Clear the bytecode Instruction vector at the end JIT generation.
16487
16488        Saves 4.8 MB on Membuster head.
16489
16490        * bytecode/CodeBlock.cpp:
16491        (JSC::CodeBlock::dump): Add logging for the case that someone tries
16492        to dump the instructions of a CodeBlock that has had its bytecode
16493        vector cleared.
16494        (JSC::CodeBlock::CodeBlock): Initialize the instructionCount
16495        (JSC::CodeBlock::handlerForBytecodeOffset): Use instructionCount instead
16496        of the size of the instruction vector in the assertion.
16497        (JSC::CodeBlock::lineNumberForBytecodeOffset): Ditto.
16498        (JSC::CodeBlock::expressionRangeForBytecodeOffset): Ditto.
16499        (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): Ditto.
16500        (JSC::CodeBlock::functionRegisterForBytecodeOffset): Ditto.
16501        * bytecode/CodeBlock.h:
16502        (JSC::CodeBlock::setInstructionCount): Store the instruction vector size
16503        in debug builds for assertions.
16504        * bytecompiler/BytecodeGenerator.cpp:
16505        (JSC::BytecodeGenerator::generate):
16506        * jit/JIT.cpp:
16507        (JSC::JIT::privateCompile): Clear the bytecode vector unless we
16508        have compiled with Opcode sampling where we will continue to require it
16509
165102008-12-17  Cary Clark  <caryclark@google.com>
16511
16512        Reviewed by Darin Adler.
16513        Landed by Adam Barth.
16514
16515        Add ENABLE_TEXT_CARET to permit the ANDROID platform
16516        to invalidate and draw the caret in a separate thread.
16517
16518        * wtf/Platform.h:
16519        Default ENABLE_TEXT_CARET to 1.
16520
165212008-12-17  Alexey Proskuryakov  <ap@webkit.org>
16522
16523        Reviewed by Darin Adler.
16524
16525        Don't use unique context group in JSGlobalContextCreate() on Tiger or Leopard, take two.
16526
16527        * API/JSContextRef.cpp: The previous patch that claimed to do this was making Tiger and
16528        Leopard always use unique context group instead.
16529
165302008-12-16  Sam Weinig  <sam@webkit.org>
16531
16532        Reviewed by Geoffrey Garen.
16533
16534        Fix for https://bugs.webkit.org/show_bug.cgi?id=22838
16535        Remove dependency on the bytecode Instruction buffer in Interpreter::throwException
16536        Part of <rdar://problem/6428342>
16537
16538        * bytecode/CodeBlock.cpp:
16539        (JSC::CodeBlock::functionRegisterForBytecodeOffset): Added. Function to get
16540        a function Register index in a callFrame for a bytecode offset.
16541        (JSC::CodeBlock::shrinkToFit): Shrink m_getByIdExceptionInfo and m_functionRegisterInfos.
16542        * bytecode/CodeBlock.h:
16543        (JSC::FunctionRegisterInfo::FunctionRegisterInfo): Added.
16544        (JSC::CodeBlock::addFunctionRegisterInfo):
16545        * bytecompiler/BytecodeGenerator.cpp:
16546        (JSC::BytecodeGenerator::emitCall):
16547        * interpreter/Interpreter.cpp:
16548        (JSC::Interpreter::throwException): Use functionRegisterForBytecodeOffset in JIT
16549        mode.
16550
165512008-12-16  Sam Weinig  <sam@webkit.org>
16552
16553        Reviewed by Gavin Barraclough.
16554
16555        Fix for https://bugs.webkit.org/show_bug.cgi?id=22837
16556        Remove dependency on the bytecode Instruction buffer in Interpreter::cti_op_call_NotJSFunction
16557        Part of <rdar://problem/6428342>
16558
16559        * interpreter/CallFrame.h: Added comment regarding returnPC storing a void*.
16560        * interpreter/Interpreter.cpp:
16561        (JSC::bytecodeOffsetForPC): We no longer have any cases of the PC
16562        being in the instruction stream for JIT, so we can remove the check.
16563        (JSC::Interpreter::cti_op_call_NotJSFunction): Use the CTI_RETURN_ADDRESS
16564        as the call frame returnPC as it is only necessary for looking up when
16565        throwing an exception.
16566        * interpreter/RegisterFile.h:
16567        (JSC::RegisterFile::): Added comment regarding returnPC storing a void*.
16568        * jit/JIT.h: Remove ARG_instr4.
16569        * jit/JITCall.cpp:
16570        (JSC::JIT::compileOpCallSetupArgs): Don't pass the instruction pointer.
16571
165722008-12-16  Darin Adler  <darin@apple.com>
16573
16574        Reviewed and landed by Cameron Zwarich.
16575
16576        Preparatory work for fixing
16577
16578        Bug 22887: Make UString::Rep use RefCounted rather than implementing its own ref counting
16579        <https://bugs.webkit.org/show_bug.cgi?id=22887>
16580
16581        Change the various string translators used by Identifier:add() so that
16582        they never zero the ref count of a newly created UString::Rep.
16583
16584        * runtime/Identifier.cpp:
16585        (JSC::CStringTranslator::translate):
16586        (JSC::Identifier::add):
16587        (JSC::UCharBufferTranslator::translate):
16588
165892008-12-16  Gavin Barraclough  <barraclough@apple.com>
16590
16591        Build fix for 'doze.
16592
16593        * assembler/AssemblerBuffer.h:
16594
165952008-12-16  Gavin Barraclough  <barraclough@apple.com>
16596
16597        Reviewed by Cameron Zwarich.
16598
16599        Make the JIT compile on x86-64.
16600        This largely involves populting the missing calls in MacroAssembler.h.
16601        In addition some reinterpret_casts need removing from the JIT, and the
16602        repatching property access code will need to be fully compiled out for
16603        now.  The changes in interpret.cpp are to reorder the functions so that
16604        the _generic forms come before all other property access methods, and
16605        then to place all property access methods other than the generic forms
16606        under control of the ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS macro.
16607
16608        No performance impact.
16609
16610        * assembler/AssemblerBuffer.h:
16611        (JSC::AssemblerBuffer::putInt64Unchecked):
16612        * assembler/MacroAssembler.h:
16613        (JSC::MacroAssembler::loadPtr):
16614        (JSC::MacroAssembler::load32):
16615        (JSC::MacroAssembler::storePtr):
16616        (JSC::MacroAssembler::storePtrWithRepatch):
16617        (JSC::MacroAssembler::store32):
16618        (JSC::MacroAssembler::poke):
16619        (JSC::MacroAssembler::move):
16620        (JSC::MacroAssembler::testImm64):
16621        (JSC::MacroAssembler::jePtr):
16622        (JSC::MacroAssembler::jnePtr):
16623        (JSC::MacroAssembler::jnzPtr):
16624        (JSC::MacroAssembler::jzPtr):
16625        * assembler/X86Assembler.h:
16626        (JSC::X86Assembler::):
16627        (JSC::X86Assembler::cmpq_rr):
16628        (JSC::X86Assembler::cmpq_rm):
16629        (JSC::X86Assembler::cmpq_im):
16630        (JSC::X86Assembler::testq_i32m):
16631        (JSC::X86Assembler::movl_mEAX):
16632        (JSC::X86Assembler::movl_i32r):
16633        (JSC::X86Assembler::movl_EAXm):
16634        (JSC::X86Assembler::movq_rm):
16635        (JSC::X86Assembler::movq_mEAX):
16636        (JSC::X86Assembler::movq_mr):
16637        (JSC::X86Assembler::movq_i64r):
16638        (JSC::X86Assembler::movl_mr):
16639        (JSC::X86Assembler::X86InstructionFormatter::oneByteOp64):
16640        (JSC::X86Assembler::X86InstructionFormatter::immediate64):
16641        * interpreter/Interpreter.cpp:
16642        (JSC::Interpreter::cti_op_put_by_id_generic):
16643        (JSC::Interpreter::cti_op_get_by_id_generic):
16644        (JSC::Interpreter::cti_op_put_by_id):
16645        (JSC::Interpreter::cti_op_put_by_id_second):
16646        * jit/JIT.cpp:
16647        (JSC::JIT::privateCompileMainPass):
16648        (JSC::JIT::privateCompile):
16649        (JSC::JIT::privateCompileCTIMachineTrampolines):
16650        * jit/JITCall.cpp:
16651        (JSC::JIT::compileOpCallSetupArgs):
16652        (JSC::JIT::compileOpCall):
16653        * jit/JITPropertyAccess.cpp:
16654        (JSC::JIT::compileGetByIdHotPath):
16655        (JSC::JIT::compilePutByIdHotPath):
16656        * runtime/JSImmediate.h:
16657        (JSC::JSImmediate::makeInt):
16658
166592008-12-16  Cameron Zwarich  <zwarich@apple.com>
16660
16661        Reviewed by Darin Adler.
16662
16663        Bug 22869: REGRESSION (r38407): http://news.cnet.com/8301-13579_3-9953533-37.html crashes
16664        <https://bugs.webkit.org/show_bug.cgi?id=22869>
16665        <rdar://problem/6402499>
16666
16667        Before r38407, Structure::m_nameInPrevious was ref'd due to it being
16668        stored in a PropertyMap. However, PropertyMaps are created lazily after
16669        r38407, so Structure::m_nameInPrevious is not necessarily ref'd while
16670        it is being used. Making it a RefPtr instead of a raw pointer fixes
16671        the problem.
16672
16673        Unfortunately, the crash in the bug is rather intermittent, and it is
16674        impossible to add an assertion in UString::Ref::ref() to catch this bug
16675        because some users of UString::Rep deliberately zero out the reference
16676        count. Therefore, there is no layout test accompanying this bug fix.
16677
16678        * runtime/Structure.cpp:
16679        (JSC::Structure::~Structure): Use get().
16680        (JSC::Structure::materializePropertyMap): Use get().
16681        (JSC::Structure::addPropertyTransitionToExistingStructure): Use get().
16682        (JSC::Structure::addPropertyTransition): Use get().
16683        * runtime/Structure.h: Make Structure::m_nameInPrevious a RefPtr instead
16684        of a raw pointer.
16685
166862008-12-16  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>
16687
16688        Not reviewed. Attempt to fix win build. No 'using namespace WTF' in this file, needs manual WTF:: prefix.
16689        Not sure why the build works as is here.
16690
16691        * runtime/MathObject.cpp:
16692        (JSC::mathProtoFuncRandom):
16693
166942008-12-16  Nikolas Zimmermann  <nikolas.zimmermann@torchmobile.com>
16695
16696        Reviewed by Darin Adler.
16697
16698        Fixes: https://bugs.webkit.org/show_bug.cgi?id=22876
16699
16700        Unify random number generation in JavaScriptCore & WebCore, by introducing
16701        wtf/RandomNumber.h and moving wtf_random/wtf_random_init out of MathExtras.h.
16702
16703        wtf_random_init() has been renamed to initializeRandomNumberGenerator() and
16704        lives in it's own private header: wtf/RandomNumberSeed.h, only intended to
16705        be used from within JavaScriptCore.
16706
16707        wtf_random() has been renamed to randomNumber() and lives in a public header
16708        wtf/RandomNumber.h, usable from within JavaScriptCore & WebCore. It encapsulates
16709        the code taking care of initializing the random number generator (only when
16710        building without ENABLE(JSC_MULTIPLE_THREADS), otherwhise initializeThreading()
16711        already took care of that).
16712
16713        Functional change on darwin: Use random() instead of rand(), as it got a larger
16714        period (more randomness). HTMLFormElement already contains this implementation
16715        and I just moved it in randomNumber(), as  special case for PLATFORM(DARWIN).
16716
16717        * GNUmakefile.am: Add RandomNumber.(cpp/h) / RandomNumberSeed.h.
16718        * JavaScriptCore.exp: Ditto.
16719        * JavaScriptCore.pri: Ditto.
16720        * JavaScriptCore.scons: Ditto.
16721        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto.
16722        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
16723        * JavaScriptCoreSources.bkl: Ditto.
16724        * runtime/MathObject.cpp: Use new WTF::randomNumber() functionality.
16725        (JSC::mathProtoFuncRandom):
16726        * wtf/MathExtras.h: Move wtf_random / wtf_random_init to new files.
16727        * wtf/RandomNumber.cpp: Added.
16728        (WTF::randomNumber):
16729        * wtf/RandomNumber.h: Added.
16730        * wtf/RandomNumberSeed.h: Added. Internal usage within JSC only.
16731        (WTF::initializeRandomNumberGenerator):
16732        * wtf/ThreadingGtk.cpp: Rename wtf_random_init() to initializeRandomNumberGenerator().
16733        (WTF::initializeThreading):
16734        * wtf/ThreadingPthreads.cpp: Ditto.
16735        (WTF::initializeThreading):
16736        * wtf/ThreadingQt.cpp: Ditto.
16737        (WTF::initializeThreading):
16738        * wtf/ThreadingWin.cpp: Ditto.
16739        (WTF::initializeThreading):
16740
167412008-12-16 Yael Aharon <yael.aharon@nokia.com>
16742
16743        Reviewed by Tor Arne Vestbø.
16744
16745        Qt/Win build fix
16746
16747        * JavaScriptCore.pri:
16748
167492008-12-15  Mark Rowe  <mrowe@apple.com>
16750
16751        Reviewed by Cameron Zwarich.
16752
16753        Fix the build with GCC 4.0.
16754
16755        * Configurations/JavaScriptCore.xcconfig:  GCC 4.0 appears to have a bug when compiling with -funwind-tables on,
16756        so don't use it with that compiler version.
16757
167582008-12-15  Mark Rowe  <mrowe@apple.com>
16759
16760        Rubber-stamped by Cameron Zwarich.
16761
16762        <rdar://problem/6289933> Change WebKit-related projects to build with GCC 4.2 on Leopard.
16763
16764        * Configurations/Base.xcconfig:
16765        * Configurations/DebugRelease.xcconfig:
16766
167672008-12-15  Alexey Proskuryakov  <ap@webkit.org>
16768
16769        Reviewed by Darin Adler.
16770
16771        Don't use unique context group in JSGlobalContextCreate() on Tiger or Leopard.
16772
16773        * API/JSContextRef.cpp: (JSGlobalContextCreate):
16774
167752008-12-15  Alexey Proskuryakov  <ap@webkit.org>
16776
16777        Reviewed by Darin Adler.
16778
16779        <rdar://problem/6445089> Mach ports leak from worker threads
16780
16781        * interpreter/Interpreter.cpp: (JSC::getCPUTime):
16782        Deallocate the thread self port.
16783
167842008-12-15  Gavin Barraclough  <barraclough@apple.com>
16785
16786        Reviewed by Mark Rowe.
16787
16788        Construct stack frames in JIT code, so that backtracing can still work.
16789        <rdar://problem/6447870> JIT should play nice with attempts to take stack traces
16790
16791        * jit/JIT.cpp:
16792        (JSC::):
16793        (JSC::JIT::privateCompileMainPass):
16794
167952008-12-15  Mark Rowe  <mrowe@apple.com>
16796
16797        Reviewed by Gavin Barraclough.
16798
16799        <rdar://problem/6402262> JavaScriptCore needs exception handling tables in order to get stack traces without frame pointers
16800
16801        * Configurations/JavaScriptCore.xcconfig:
16802
168032008-12-15  Gavin Barraclough  <barraclough@apple.com>
16804
16805        Rubber stamped by Mark Rowe.
16806
16807        Revert r39226 / Bug 22818: Unify JIT callback argument access OS X / Windows
16808        This causes Acid3 failures – reverting for now & will revisit later.
16809        https://bugs.webkit.org/show_bug.cgi?id=22873
16810
16811        * interpreter/Interpreter.h:
16812        * jit/JIT.cpp:
16813        (JSC::JIT::privateCompileCTIMachineTrampolines):
16814        * jit/JIT.h:
16815        * jit/JITInlineMethods.h:
16816        (JSC::JIT::restoreArgumentReference):
16817        (JSC::JIT::restoreArgumentReferenceForTrampoline):
16818        (JSC::JIT::emitCTICall_internal):
16819        * jit/JITPropertyAccess.cpp:
16820        (JSC::JIT::privateCompilePutByIdTransition):
16821        * wtf/Platform.h:
16822
168232008-12-15  Darin Adler  <darin@apple.com>
16824
16825        Reviewed by Sam Weinig.
16826
16827        - fix <rdar://problem/6427048> crash due to infinite recursion after setting window.__proto__ = window
16828
16829        Replaced toGlobalObject with the more generally useful unwrappedObject and used it to
16830        fix the cycle detection code in put(__proto__).
16831
16832        * JavaScriptCore.exp: Updated.
16833
16834        * runtime/JSGlobalObject.cpp: Removed toGlobalObject. We now use unwrappedObject instead.
16835        * runtime/JSGlobalObject.h:
16836        (JSC::JSGlobalObject::isGlobalObject): Ditto.
16837
16838        * runtime/JSGlobalObjectFunctions.cpp:
16839        (JSC::globalFuncEval): Use unwrappedObject and isGlobalObject here rather than toGlobalObject.
16840
16841        * runtime/JSObject.cpp:
16842        (JSC::JSObject::put): Rewrote prototype cycle checking loop. Use unwrappedObject in the loop now.
16843        (JSC::JSObject::unwrappedObject): Replaced toGlobalObject with this new function.
16844        * runtime/JSObject.h: More of the same.
16845
168462008-12-15  Steve Falkenburg  <sfalken@apple.com>
16847
16848        Windows build fix.
16849        
16850        Visual Studio requires visibility of forward declarations to match class declaration.
16851
16852        * assembler/X86Assembler.h:
16853
168542008-12-15  Gustavo Noronha Silva  <kov@kov.eti.br>
16855
16856        Reviewed by Mark Rowe.
16857
16858        https://bugs.webkit.org/show_bug.cgi?id=22686
16859
16860        GTK+ build fix.
16861
16862        * GNUmakefile.am:
16863
168642008-12-15  Gavin Barraclough  <barraclough@apple.com>
16865
16866        Reviewed by Geoff Garen.
16867
16868        Add support to X86Assembler emitting instructions that access all 16 registers on x86-64.
16869        Add a new formating class, that is reponsible for both emitting the opcode bytes and the
16870        ModRm  bytes of an instruction in a single call; this can insert the REX byte as necessary
16871        before the opcode, but has access to the register numbers to build the REX.
16872
16873        * assembler/AssemblerBuffer.h:
16874        (JSC::AssemblerBuffer::isAligned):
16875        (JSC::AssemblerBuffer::data):
16876        * assembler/MacroAssembler.h:
16877        (JSC::MacroAssembler::addPtr):
16878        (JSC::MacroAssembler::add32):
16879        (JSC::MacroAssembler::and32):
16880        (JSC::MacroAssembler::or32):
16881        (JSC::MacroAssembler::sub32):
16882        (JSC::MacroAssembler::xor32):
16883        (JSC::MacroAssembler::loadPtr):
16884        (JSC::MacroAssembler::load32):
16885        (JSC::MacroAssembler::load16):
16886        (JSC::MacroAssembler::storePtr):
16887        (JSC::MacroAssembler::storePtrWithRepatch):
16888        (JSC::MacroAssembler::store32):
16889        (JSC::MacroAssembler::pop):
16890        (JSC::MacroAssembler::push):
16891        (JSC::MacroAssembler::compareImm32ForBranch):
16892        (JSC::MacroAssembler::compareImm32ForBranchEquality):
16893        (JSC::MacroAssembler::testImm32):
16894        (JSC::MacroAssembler::jae32):
16895        (JSC::MacroAssembler::jb32):
16896        (JSC::MacroAssembler::je16):
16897        (JSC::MacroAssembler::jg32):
16898        (JSC::MacroAssembler::jnePtr):
16899        (JSC::MacroAssembler::jne32):
16900        (JSC::MacroAssembler::jump):
16901        * assembler/X86Assembler.h:
16902        (JSC::X86::):
16903        (JSC::X86Assembler::):
16904        (JSC::X86Assembler::size):
16905        (JSC::X86Assembler::push_r):
16906        (JSC::X86Assembler::pop_r):
16907        (JSC::X86Assembler::push_i32):
16908        (JSC::X86Assembler::push_m):
16909        (JSC::X86Assembler::pop_m):
16910        (JSC::X86Assembler::addl_rr):
16911        (JSC::X86Assembler::addl_mr):
16912        (JSC::X86Assembler::addl_ir):
16913        (JSC::X86Assembler::addq_ir):
16914        (JSC::X86Assembler::addl_im):
16915        (JSC::X86Assembler::andl_rr):
16916        (JSC::X86Assembler::andl_ir):
16917        (JSC::X86Assembler::orl_rr):
16918        (JSC::X86Assembler::orl_mr):
16919        (JSC::X86Assembler::orl_ir):
16920        (JSC::X86Assembler::subl_rr):
16921        (JSC::X86Assembler::subl_mr):
16922        (JSC::X86Assembler::subl_ir):
16923        (JSC::X86Assembler::subl_im):
16924        (JSC::X86Assembler::xorl_rr):
16925        (JSC::X86Assembler::xorl_ir):
16926        (JSC::X86Assembler::sarl_i8r):
16927        (JSC::X86Assembler::sarl_CLr):
16928        (JSC::X86Assembler::shll_i8r):
16929        (JSC::X86Assembler::shll_CLr):
16930        (JSC::X86Assembler::imull_rr):
16931        (JSC::X86Assembler::imull_i32r):
16932        (JSC::X86Assembler::idivl_r):
16933        (JSC::X86Assembler::cmpl_rr):
16934        (JSC::X86Assembler::cmpl_rm):
16935        (JSC::X86Assembler::cmpl_mr):
16936        (JSC::X86Assembler::cmpl_ir):
16937        (JSC::X86Assembler::cmpl_ir_force32):
16938        (JSC::X86Assembler::cmpl_im):
16939        (JSC::X86Assembler::cmpl_im_force32):
16940        (JSC::X86Assembler::cmpw_rm):
16941        (JSC::X86Assembler::testl_rr):
16942        (JSC::X86Assembler::testl_i32r):
16943        (JSC::X86Assembler::testl_i32m):
16944        (JSC::X86Assembler::testq_rr):
16945        (JSC::X86Assembler::testq_i32r):
16946        (JSC::X86Assembler::testb_i8r):
16947        (JSC::X86Assembler::sete_r):
16948        (JSC::X86Assembler::setz_r):
16949        (JSC::X86Assembler::setne_r):
16950        (JSC::X86Assembler::setnz_r):
16951        (JSC::X86Assembler::cdq):
16952        (JSC::X86Assembler::xchgl_rr):
16953        (JSC::X86Assembler::movl_rr):
16954        (JSC::X86Assembler::movl_rm):
16955        (JSC::X86Assembler::movl_mr):
16956        (JSC::X86Assembler::movl_i32r):
16957        (JSC::X86Assembler::movl_i32m):
16958        (JSC::X86Assembler::movq_rr):
16959        (JSC::X86Assembler::movq_rm):
16960        (JSC::X86Assembler::movq_mr):
16961        (JSC::X86Assembler::movzwl_mr):
16962        (JSC::X86Assembler::movzbl_rr):
16963        (JSC::X86Assembler::leal_mr):
16964        (JSC::X86Assembler::call):
16965        (JSC::X86Assembler::jmp):
16966        (JSC::X86Assembler::jmp_r):
16967        (JSC::X86Assembler::jmp_m):
16968        (JSC::X86Assembler::jne):
16969        (JSC::X86Assembler::jnz):
16970        (JSC::X86Assembler::je):
16971        (JSC::X86Assembler::jl):
16972        (JSC::X86Assembler::jb):
16973        (JSC::X86Assembler::jle):
16974        (JSC::X86Assembler::jbe):
16975        (JSC::X86Assembler::jge):
16976        (JSC::X86Assembler::jg):
16977        (JSC::X86Assembler::ja):
16978        (JSC::X86Assembler::jae):
16979        (JSC::X86Assembler::jo):
16980        (JSC::X86Assembler::jp):
16981        (JSC::X86Assembler::js):
16982        (JSC::X86Assembler::addsd_rr):
16983        (JSC::X86Assembler::addsd_mr):
16984        (JSC::X86Assembler::cvtsi2sd_rr):
16985        (JSC::X86Assembler::cvttsd2si_rr):
16986        (JSC::X86Assembler::movd_rr):
16987        (JSC::X86Assembler::movsd_rm):
16988        (JSC::X86Assembler::movsd_mr):
16989        (JSC::X86Assembler::mulsd_rr):
16990        (JSC::X86Assembler::mulsd_mr):
16991        (JSC::X86Assembler::pextrw_irr):
16992        (JSC::X86Assembler::subsd_rr):
16993        (JSC::X86Assembler::subsd_mr):
16994        (JSC::X86Assembler::ucomis_rr):
16995        (JSC::X86Assembler::int3):
16996        (JSC::X86Assembler::ret):
16997        (JSC::X86Assembler::predictNotTaken):
16998        (JSC::X86Assembler::label):
16999        (JSC::X86Assembler::align):
17000        (JSC::X86Assembler::link):
17001        (JSC::X86Assembler::executableCopy):
17002        (JSC::X86Assembler::X86InstructionFormater::prefix):
17003        (JSC::X86Assembler::X86InstructionFormater::oneByteOp):
17004        (JSC::X86Assembler::X86InstructionFormater::twoByteOp):
17005        (JSC::X86Assembler::X86InstructionFormater::oneByteOp64):
17006        (JSC::X86Assembler::X86InstructionFormater::oneByteOp8):
17007        (JSC::X86Assembler::X86InstructionFormater::twoByteOp8):
17008        (JSC::X86Assembler::X86InstructionFormater::instructionImmediate8):
17009        (JSC::X86Assembler::X86InstructionFormater::instructionImmediate32):
17010        (JSC::X86Assembler::X86InstructionFormater::instructionRel32):
17011        (JSC::X86Assembler::X86InstructionFormater::size):
17012        (JSC::X86Assembler::X86InstructionFormater::isAligned):
17013        (JSC::X86Assembler::X86InstructionFormater::data):
17014        (JSC::X86Assembler::X86InstructionFormater::executableCopy):
17015        (JSC::X86Assembler::X86InstructionFormater::registerModRM):
17016        (JSC::X86Assembler::X86InstructionFormater::memoryModRM):
17017        * jit/JIT.cpp:
17018        (JSC::JIT::privateCompileMainPass):
17019        (JSC::JIT::privateCompile):
17020        (JSC::JIT::privateCompileCTIMachineTrampolines):
17021        * jit/JITArithmetic.cpp:
17022        (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate):
17023        (JSC::JIT::compileBinaryArithOp):
17024        * jit/JITCall.cpp:
17025        (JSC::JIT::compileOpCall):
17026        (JSC::JIT::compileOpCallSlowCase):
17027        * jit/JITPropertyAccess.cpp:
17028        (JSC::JIT::compileGetByIdHotPath):
17029        (JSC::JIT::compilePutByIdHotPath):
17030        (JSC::JIT::privateCompilePutByIdTransition):
17031        (JSC::JIT::privateCompilePatchGetArrayLength):
17032        (JSC::JIT::privateCompileGetByIdProto):
17033        (JSC::JIT::privateCompileGetByIdProtoList):
17034        (JSC::JIT::privateCompileGetByIdChainList):
17035        (JSC::JIT::privateCompileGetByIdChain):
17036
170372008-12-15  Darin Adler  <darin@apple.com>
17038
17039        * interpreter/RegisterFile.h: Tweak include formatting.
17040
170412008-12-15  Holger Hans Peter Freyther  <zecke@selfish.org>
17042
17043        Build fix for Gtk+.
17044
17045        * interpreter/RegisterFile.h: Include stdio.h for fprintf
17046
170472008-12-15  Alexey Proskuryakov  <ap@webkit.org>
17048
17049        Reviewed by Oliver Hunt.
17050
17051        <rdar://problem/6444455> Worker Thread crash running multiple workers for a moderate amount of time
17052
17053        * interpreter/RegisterFile.h: (JSC::RegisterFile::RegisterFile):
17054        Improve error handling: if mmap fails, crash immediately, and print out the reason.
17055
170562008-12-13  Gavin Barraclough  <barraclough@apple.com>
17057
17058        Reviewed by Cameron Zwarich.
17059
17060        Re-enable WREC on 64-bit.
17061        Implements one of the MacroAssembler::jnzPtr methods, previously only implemented for 32-bit x86.
17062
17063        https://bugs.webkit.org/show_bug.cgi?id=22849
17064
17065        * assembler/MacroAssembler.h:
17066        (JSC::MacroAssembler::testImm64):
17067        (JSC::MacroAssembler::jnzPtr):
17068        * assembler/X86Assembler.h:
17069        (JSC::X86Assembler::testq_i32r):
17070        (JSC::X86Assembler::testq_rr):
17071        * wtf/Platform.h:
17072
170732008-12-13  Gavin Barraclough  <barraclough@apple.com>
17074
17075        Fix PPC builds.
17076
17077        * assembler/MacroAssembler.h:
17078
170792008-12-13  Gavin Barraclough  <barraclough@apple.com>
17080
17081        Build fix only, no review.
17082
17083        * bytecode/CodeBlock.h:
17084
170852008-12-13  Gavin Barraclough  <barraclough@apple.com>
17086
17087        Reviewed by Cameron Zwarich.
17088
17089        Port the remainder of the JIT, bar calling convention related code, and code
17090        implementing optimizations which can be disabled, to use the MacroAssembler.
17091
17092        * assembler/MacroAssembler.h:
17093        (JSC::MacroAssembler::DataLabelPtr::DataLabelPtr):
17094        (JSC::MacroAssembler::RepatchBuffer::RepatchBuffer):
17095        (JSC::MacroAssembler::RepatchBuffer::link):
17096        (JSC::MacroAssembler::RepatchBuffer::addressOf):
17097        (JSC::MacroAssembler::RepatchBuffer::setPtr):
17098        (JSC::MacroAssembler::addPtr):
17099        (JSC::MacroAssembler::lshift32):
17100        (JSC::MacroAssembler::mod32):
17101        (JSC::MacroAssembler::rshift32):
17102        (JSC::MacroAssembler::storePtrWithRepatch):
17103        (JSC::MacroAssembler::jnzPtr):
17104        (JSC::MacroAssembler::jzPtr):
17105        (JSC::MacroAssembler::jump):
17106        (JSC::MacroAssembler::label):
17107        * assembler/X86Assembler.h:
17108        (JSC::X86Assembler::):
17109        (JSC::X86Assembler::xchgl_rr):
17110        (JSC::X86Assembler::jmp_m):
17111        (JSC::X86Assembler::repatchAddress):
17112        (JSC::X86Assembler::getRelocatedAddress):
17113        * bytecode/CodeBlock.cpp:
17114        (JSC::CodeBlock::CodeBlock):
17115        * bytecode/CodeBlock.h:
17116        (JSC::JITCodeRef::JITCodeRef):
17117        (JSC::CodeBlock::setJITCode):
17118        (JSC::CodeBlock::jitCode):
17119        (JSC::CodeBlock::executablePool):
17120        * jit/JIT.cpp:
17121        (JSC::JIT::privateCompileMainPass):
17122        (JSC::JIT::privateCompileLinkPass):
17123        (JSC::JIT::privateCompile):
17124        (JSC::JIT::privateCompileCTIMachineTrampolines):
17125        * jit/JIT.h:
17126        (JSC::CallRecord::CallRecord):
17127        (JSC::JumpTable::JumpTable):
17128        (JSC::JIT::emitCTICall):
17129        (JSC::JIT::JSRInfo::JSRInfo):
17130        * jit/JITArithmetic.cpp:
17131        * jit/JITCall.cpp:
17132        * jit/JITInlineMethods.h:
17133        (JSC::JIT::emitNakedCall):
17134        (JSC::JIT::emitCTICall_internal):
17135        (JSC::JIT::checkStructure):
17136        (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
17137        (JSC::JIT::addSlowCase):
17138        (JSC::JIT::addJump):
17139        (JSC::JIT::emitJumpSlowToHot):
17140        * jit/JITPropertyAccess.cpp:
17141        (JSC::JIT::privateCompileGetByIdChainList):
17142        (JSC::JIT::privateCompileGetByIdChain):
17143
171442008-12-12  Cameron Zwarich  <zwarich@apple.com>
17145
17146        Reviewed by Sam Weinig.
17147
17148        Fix the failures of the following layout tests, which regressed in
17149        r39255:
17150
17151        fast/dom/StyleSheet/ownerNode-lifetime-2.html
17152        fast/xsl/transform-xhr-doc.xhtml
17153
17154        The binary search in CodeBlock::getByIdExceptionInfoForBytecodeOffset()
17155        doesn't guarantee that it actually finds a match, so add an explicit check
17156        for this.
17157
17158        * bytecode/CodeBlock.cpp:
17159        (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset):
17160
171612008-12-12  Gavin Barraclough  <barraclough@apple.com>
17162
17163        Reviewed by Cameron Zwarich.
17164
17165        Replace emitPutCallArg methods with emitPutJITStubArg methods.  Primarily to make the argument numbering
17166        more sensible (1-based incrementing by 1, rather than 0-based incrementing by 4).  The CTI name also seems
17167        to be being deprecated from the code generally.
17168
17169        * jit/JIT.cpp:
17170        (JSC::JIT::privateCompileMainPass):
17171        (JSC::JIT::privateCompileSlowCases):
17172        (JSC::JIT::privateCompileCTIMachineTrampolines):
17173        * jit/JIT.h:
17174        * jit/JITArithmetic.cpp:
17175        (JSC::JIT::compileBinaryArithOp):
17176        (JSC::JIT::compileBinaryArithOpSlowCase):
17177        * jit/JITCall.cpp:
17178        (JSC::JIT::compileOpCallSetupArgs):
17179        (JSC::JIT::compileOpCallEvalSetupArgs):
17180        (JSC::JIT::compileOpConstructSetupArgs):
17181        (JSC::JIT::compileOpCall):
17182        * jit/JITInlineMethods.h:
17183        (JSC::JIT::emitPutJITStubArg):
17184        (JSC::JIT::emitPutJITStubArgConstant):
17185        (JSC::JIT::emitGetJITStubArg):
17186        (JSC::JIT::emitPutJITStubArgFromVirtualRegister):
17187        * jit/JITPropertyAccess.cpp:
17188        (JSC::JIT::compileGetByIdHotPath):
17189        (JSC::JIT::compilePutByIdHotPath):
17190        (JSC::JIT::compileGetByIdSlowCase):
17191        (JSC::JIT::compilePutByIdSlowCase):
17192
171932008-12-12  Gavin Barraclough  <barraclough@apple.com>
17194
17195        Fix windows builds.
17196
17197        * jit/JIT.cpp:
17198        (JSC::JIT::privateCompileMainPass):
17199        (JSC::JIT::privateCompileSlowCases):
17200        (JSC::JIT::privateCompile):
17201
172022008-12-12  Gavin Barraclough  <barraclough@apple.com>
17203
17204        Reviewed by Geoff Garen.
17205
17206        Remove loop counter 'i' from the JIT generation passes, replace with a member m_bytecodeIndex.
17207
17208        No impact on performance.
17209
17210        * jit/JIT.cpp:
17211        (JSC::JIT::compileOpStrictEq):
17212        (JSC::JIT::emitSlowScriptCheck):
17213        (JSC::JIT::privateCompileMainPass):
17214        (JSC::JIT::privateCompileSlowCases):
17215        (JSC::JIT::privateCompile):
17216        * jit/JIT.h:
17217        (JSC::CallRecord::CallRecord):
17218        (JSC::JmpTable::JmpTable):
17219        (JSC::JIT::emitCTICall):
17220        * jit/JITArithmetic.cpp:
17221        (JSC::JIT::compileBinaryArithOp):
17222        (JSC::JIT::compileBinaryArithOpSlowCase):
17223        * jit/JITCall.cpp:
17224        (JSC::JIT::compileOpCall):
17225        (JSC::JIT::compileOpCallSlowCase):
17226        * jit/JITInlineMethods.h:
17227        (JSC::JIT::emitGetVirtualRegister):
17228        (JSC::JIT::emitGetVirtualRegisters):
17229        (JSC::JIT::emitNakedCall):
17230        (JSC::JIT::emitCTICall_internal):
17231        (JSC::JIT::emitJumpSlowCaseIfJSCell):
17232        (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
17233        (JSC::JIT::emitJumpSlowCaseIfNotImmNum):
17234        (JSC::JIT::emitJumpSlowCaseIfNotImmNums):
17235        (JSC::JIT::emitFastArithIntToImmOrSlowCase):
17236        (JSC::JIT::addSlowCase):
17237        (JSC::JIT::addJump):
17238        (JSC::JIT::emitJumpSlowToHot):
17239        * jit/JITPropertyAccess.cpp:
17240        (JSC::JIT::compileGetByIdHotPath):
17241        (JSC::JIT::compileGetByIdSlowCase):
17242        (JSC::JIT::compilePutByIdHotPath):
17243        (JSC::JIT::compilePutByIdSlowCase):
17244
172452008-12-12  Sam Weinig  <sam@webkit.org>
17246
17247        Reviewed by Cameron Zwarich.
17248
17249        <rdar://problem/6428342> Look into feasibility of discarding bytecode after native codegen
17250
17251        Move more JIT functionality to using offsets into the Instruction buffer
17252        instead of raw pointers. Two to go!
17253
17254        * interpreter/Interpreter.cpp:
17255        (JSC::bytecodeOffsetForPC): Rename from vPCForPC.
17256        (JSC::Interpreter::resolve): Pass offset to exception helper.
17257        (JSC::Interpreter::resolveSkip): Ditto.
17258        (JSC::Interpreter::resolveGlobal): Ditto.
17259        (JSC::Interpreter::resolveBaseAndProperty): Ditto.
17260        (JSC::Interpreter::resolveBaseAndFunc): Ditto.
17261        (JSC::isNotObject): Ditto.
17262        (JSC::Interpreter::unwindCallFrame): Call bytecodeOffsetForPC.
17263        (JSC::Interpreter::throwException): Use offsets instead of vPCs.
17264        (JSC::Interpreter::privateExecute): Pass offset to exception helper.
17265        (JSC::Interpreter::retrieveLastCaller): Ditto.
17266        (JSC::Interpreter::cti_op_instanceof): Ditto.
17267        (JSC::Interpreter::cti_op_call_NotJSFunction): Ditto.
17268        (JSC::Interpreter::cti_op_resolve): Pass offset to exception helper.
17269        (JSC::Interpreter::cti_op_construct_NotJSConstruct): Ditto.
17270        (JSC::Interpreter::cti_op_resolve_func): Ditto.
17271        (JSC::Interpreter::cti_op_resolve_skip): Ditto.
17272        (JSC::Interpreter::cti_op_resolve_global): Ditto.
17273        (JSC::Interpreter::cti_op_resolve_with_base): Ditto.
17274        (JSC::Interpreter::cti_op_throw): Ditto.
17275        (JSC::Interpreter::cti_op_in): Ditto.
17276        (JSC::Interpreter::cti_vm_throw): Ditto.
17277        * interpreter/Interpreter.h:
17278
17279        * jit/JIT.cpp:
17280        (JSC::JIT::privateCompileMainPass): Don't pass unnecessary vPC to stub.
17281        * jit/JIT.h: Remove ARG_instr1 - ARG_instr3 and ARG_instr5 - ARG_instr6.
17282        * jit/JITCall.cpp:
17283        (JSC::JIT::compileOpCallEvalSetupArgs): Don't pass unnecessary vPC to stub..
17284        (JSC::JIT::compileOpConstructSetupArgs): Ditto.
17285
17286        * runtime/ExceptionHelpers.cpp:
17287        (JSC::createUndefinedVariableError): Take an offset instead of vPC.
17288        (JSC::createInvalidParamError): Ditto.
17289        (JSC::createNotAConstructorError): Ditto.
17290        (JSC::createNotAFunctionError): Ditto.
17291        (JSC::createNotAnObjectError): Ditto.
17292        * runtime/ExceptionHelpers.h:
17293
172942008-12-12  Cameron Zwarich  <zwarich@apple.com>
17295
17296        Reviewed by Oliver Hunt.
17297
17298        Bug 22835: Crash during bytecode generation when comparing to null
17299        <https://bugs.webkit.org/show_bug.cgi?id=22835>
17300        <rdar://problem/6286749>
17301
17302        Change the special cases in bytecode generation for comparison to null
17303        to use tempDestination().
17304
17305        * parser/Nodes.cpp:
17306        (JSC::BinaryOpNode::emitBytecode):
17307        (JSC::EqualNode::emitBytecode):
17308
173092008-12-12  Gavin Barraclough  <barraclough@apple.com>
17310
17311        Reviewed by Geoff Garen.
17312
17313        Move slow-cases of JIT code generation over to the MacroAssembler interface.
17314
17315        * assembler/MacroAssembler.h:
17316        (JSC::MacroAssembler::Label::Label):
17317        (JSC::MacroAssembler::jae32):
17318        (JSC::MacroAssembler::jg32):
17319        (JSC::MacroAssembler::jzPtr):
17320        * jit/JIT.cpp:
17321        (JSC::JIT::privateCompileSlowCases):
17322        (JSC::JIT::privateCompile):
17323        (JSC::JIT::emitGetVariableObjectRegister):
17324        (JSC::JIT::emitPutVariableObjectRegister):
17325        * jit/JIT.h:
17326        (JSC::SlowCaseEntry::SlowCaseEntry):
17327        (JSC::JIT::getSlowCase):
17328        (JSC::JIT::linkSlowCase):
17329        * jit/JITArithmetic.cpp:
17330        (JSC::JIT::compileBinaryArithOpSlowCase):
17331        * jit/JITCall.cpp:
17332        (JSC::JIT::compileOpCallInitializeCallFrame):
17333        (JSC::JIT::compileOpCall):
17334        (JSC::JIT::compileOpCallSlowCase):
17335        * jit/JITInlineMethods.h:
17336        (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
17337        (JSC::JIT::linkSlowCaseIfNotJSCell):
17338        * jit/JITPropertyAccess.cpp:
17339        (JSC::JIT::compileGetByIdHotPath):
17340        (JSC::JIT::compilePutByIdHotPath):
17341        (JSC::JIT::compileGetByIdSlowCase):
17342        (JSC::JIT::compilePutByIdSlowCase):
17343
173442008-12-12  Cameron Zwarich  <zwarich@apple.com>
17345
17346        Reviewed by Sam Weinig.
17347
17348        Bug 22828: Do not inspect bytecode instruction stream for op_get_by_id exception information
17349        <https://bugs.webkit.org/show_bug.cgi?id=22828>
17350
17351        In order to remove the bytecode instruction stream after generating
17352        native code, all inspection of bytecode instructions at runtime must
17353        be removed. One particular instance of this is the special handling of
17354        exceptions thrown by the op_get_by_id emitted directly before an
17355        op_construct or an op_instanceof. This patch moves that information to
17356        an auxiliary data structure in CodeBlock.
17357
17358        * bytecode/CodeBlock.cpp:
17359        (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset):
17360        * bytecode/CodeBlock.h:
17361        (JSC::CodeBlock::addGetByIdExceptionInfo):
17362        * bytecompiler/BytecodeGenerator.cpp:
17363        (JSC::BytecodeGenerator::emitConstruct):
17364        * bytecompiler/BytecodeGenerator.h:
17365        (JSC::BytecodeGenerator::emitGetByIdExceptionInfo):
17366        * parser/Nodes.cpp:
17367        (JSC::InstanceOfNode::emitBytecode):
17368        * runtime/ExceptionHelpers.cpp:
17369        (JSC::createNotAnObjectError):
17370
173712008-12-12  Sam Weinig  <sam@webkit.org>
17372
17373        Reviewed by Geoffrey Garen.
17374
17375        Change exception information accessors to take offsets into the bytecode
17376        instruction buffer instead of pointers so that they can work even even
17377        if the bytecode buffer is purged.
17378
17379        * bytecode/CodeBlock.cpp:
17380        (JSC::instructionOffsetForNth):
17381        (JSC::CodeBlock::handlerForBytecodeOffset):
17382        (JSC::CodeBlock::lineNumberForBytecodeOffset):
17383        (JSC::CodeBlock::expressionRangeForBytecodeOffset):
17384        * bytecode/CodeBlock.h:
17385        * bytecode/SamplingTool.cpp:
17386        (JSC::SamplingTool::dump):
17387        * interpreter/Interpreter.cpp:
17388        (JSC::Interpreter::throwException):
17389        (JSC::Interpreter::privateExecute):
17390        (JSC::Interpreter::retrieveLastCaller):
17391        * jit/JIT.cpp:
17392        (JSC::JIT::privateCompileMainPass):
17393        * runtime/ExceptionHelpers.cpp:
17394        (JSC::createUndefinedVariableError):
17395        (JSC::createInvalidParamError):
17396        (JSC::createNotAConstructorError):
17397        (JSC::createNotAFunctionError):
17398        (JSC::createNotAnObjectError):
17399
174002008-12-12  Geoffrey Garen  <ggaren@apple.com>
17401
17402        Reviewed by Cameron Zwarich.
17403        
17404        Tiny bit of refactoring in quantifier generation.
17405
17406        * wrec/WRECGenerator.cpp:
17407        (JSC::WREC::Generator::generateNonGreedyQuantifier):
17408        (JSC::WREC::Generator::generateGreedyQuantifier):
17409
174102008-12-11  Sam Weinig  <sam@webkit.org>
17411
17412        Reviewed by Geoffrey Garen.
17413
17414        Remove dependancy on having the Instruction buffer in order to
17415        deref Structures used for property access and global resolves.
17416        Instead, we put references to the necessary Structures in auxiliary
17417        data structures on the CodeBlock. This is not an ideal solution,
17418        as we still pay for having the Structures in two places and we
17419        would like to eventually just hold on to offsets into the machine
17420        code buffer.
17421
17422        - Also removes CodeBlock bloat in non-JIT by #ifdefing the JIT
17423          only data structures.
17424
17425        * GNUmakefile.am:
17426        * JavaScriptCore.pri:
17427        * JavaScriptCore.scons:
17428        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
17429        * JavaScriptCore.xcodeproj/project.pbxproj:
17430        * JavaScriptCoreSources.bkl:
17431        * bytecode/CodeBlock.cpp:
17432        (JSC::isGlobalResolve):
17433        (JSC::isPropertyAccess):
17434        (JSC::instructionOffsetForNth):
17435        (JSC::printGlobalResolveInfo):
17436        (JSC::printStructureStubInfo):
17437        (JSC::CodeBlock::printStructures):
17438        (JSC::CodeBlock::dump):
17439        (JSC::CodeBlock::~CodeBlock):
17440        (JSC::CodeBlock::shrinkToFit):
17441        * bytecode/CodeBlock.h:
17442        (JSC::GlobalResolveInfo::GlobalResolveInfo):
17443        (JSC::getNativePC):
17444        (JSC::CodeBlock::instructions):
17445        (JSC::CodeBlock::getStubInfo):
17446        (JSC::CodeBlock::getBytecodeIndex):
17447        (JSC::CodeBlock::addPropertyAccessInstruction):
17448        (JSC::CodeBlock::addGlobalResolveInstruction):
17449        (JSC::CodeBlock::numberOfStructureStubInfos):
17450        (JSC::CodeBlock::addStructureStubInfo):
17451        (JSC::CodeBlock::structureStubInfo):
17452        (JSC::CodeBlock::addGlobalResolveInfo):
17453        (JSC::CodeBlock::globalResolveInfo):
17454        (JSC::CodeBlock::numberOfCallLinkInfos):
17455        (JSC::CodeBlock::addCallLinkInfo):
17456        (JSC::CodeBlock::callLinkInfo):
17457        * bytecode/Instruction.h:
17458        (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
17459        (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
17460        * bytecode/Opcode.h:
17461        (JSC::):
17462        * bytecode/StructureStubInfo.cpp: Copied from bytecode/CodeBlock.cpp.
17463        (JSC::StructureStubInfo::deref):
17464        * bytecode/StructureStubInfo.h: Copied from bytecode/CodeBlock.h.
17465        (JSC::StructureStubInfo::StructureStubInfo):
17466        (JSC::StructureStubInfo::initGetByIdSelf):
17467        (JSC::StructureStubInfo::initGetByIdProto):
17468        (JSC::StructureStubInfo::initGetByIdChain):
17469        (JSC::StructureStubInfo::initGetByIdSelfList):
17470        (JSC::StructureStubInfo::initGetByIdProtoList):
17471        (JSC::StructureStubInfo::initPutByIdTransition):
17472        (JSC::StructureStubInfo::initPutByIdReplace):
17473        (JSC::StructureStubInfo::):
17474        * bytecompiler/BytecodeGenerator.cpp:
17475        (JSC::BytecodeGenerator::emitResolve):
17476        (JSC::BytecodeGenerator::emitGetById):
17477        (JSC::BytecodeGenerator::emitPutById):
17478        (JSC::BytecodeGenerator::emitCall):
17479        (JSC::BytecodeGenerator::emitConstruct):
17480        (JSC::BytecodeGenerator::emitCatch):
17481        * interpreter/Interpreter.cpp:
17482        (JSC::Interpreter::tryCTICachePutByID):
17483        (JSC::Interpreter::tryCTICacheGetByID):
17484        (JSC::Interpreter::cti_op_get_by_id_self_fail):
17485        (JSC::getPolymorphicAccessStructureListSlot):
17486        (JSC::Interpreter::cti_op_get_by_id_proto_list):
17487        (JSC::Interpreter::cti_op_resolve_global):
17488        * jit/JIT.cpp:
17489        (JSC::JIT::JIT):
17490        (JSC::JIT::privateCompileMainPass):
17491        (JSC::JIT::privateCompileSlowCases):
17492        (JSC::JIT::privateCompile):
17493        * jit/JITPropertyAccess.cpp:
17494        (JSC::JIT::compileGetByIdHotPath):
17495        (JSC::JIT::compilePutByIdHotPath):
17496        (JSC::JIT::compileGetByIdSlowCase):
17497        (JSC::JIT::compilePutByIdSlowCase):
17498        (JSC::JIT::privateCompileGetByIdSelfList):
17499        (JSC::JIT::privateCompileGetByIdProtoList):
17500        (JSC::JIT::privateCompileGetByIdChainList):
17501
175022008-12-11  Gavin Barraclough  <barraclough@apple.com>
17503
17504        Reviewed by Oliver Hunt.
17505
17506        Remove CTI_ARGUMENTS mode, use va_start implementation on Windows,
17507        unifying JIT callback (cti_*) argument access on OS X & Windows
17508
17509        No performance impact.
17510
17511        * interpreter/Interpreter.h:
17512        * jit/JIT.cpp:
17513        (JSC::JIT::privateCompileCTIMachineTrampolines):
17514        * jit/JIT.h:
17515        * jit/JITInlineMethods.h:
17516        (JSC::JIT::emitCTICall):
17517        * jit/JITPropertyAccess.cpp:
17518        (JSC::JIT::privateCompilePutByIdTransition):
17519        * wtf/Platform.h:
17520
175212008-12-11  Holger Freyther  <zecke@selfish.org>
17522
17523        Reviewed by Simon Hausmann.
17524
17525        https://bugs.webkit.org/show_bug.cgi?id=20953
17526
17527        For Qt it is not pratical to have a FontCache and GlyphPageTreeNode
17528        implementation. This is one of the reasons why the Qt port is currently not
17529        using WebCore/platform/graphics/Font.cpp. By allowing to not use
17530        the simple/fast-path the Qt port will be able to use it.
17531
17532        Introduce USE(FONT_FAST_PATH) and define it for every port but the
17533        Qt one.
17534
17535        * wtf/Platform.h: Enable USE(FONT_FAST_PATH)
17536
175372008-12-11  Gabor Loki  <loki@inf.u-szeged.hu>
17538
17539        Reviewed by Darin Adler and landed by Holger Freyther.
17540
17541        <https://bugs.webkit.org/show_bug.cgi?id=22648>
17542        Fix threading on Qt-port and Gtk-port for Sampling tool.
17543
17544        * wtf/ThreadingGtk.cpp:
17545        (WTF::waitForThreadCompletion):
17546        * wtf/ThreadingQt.cpp:
17547        (WTF::waitForThreadCompletion):
17548
175492008-12-10  Cameron Zwarich  <zwarich@apple.com>
17550
17551        Reviewed by Oliver Hunt.
17552
17553        Bug 22734: Debugger crashes when stepping into a function call in a return statement
17554        <https://bugs.webkit.org/show_bug.cgi?id=22734>
17555        <rdar://problem/6426796>
17556
17557        * bytecompiler/BytecodeGenerator.cpp:
17558        (JSC::BytecodeGenerator::BytecodeGenerator): The DebuggerCallFrame uses
17559        the 'this' value stored in a callFrame, so op_convert_this should be
17560        emitted at the beginning of a function body when generating bytecode
17561        with debug hooks.
17562        * debugger/DebuggerCallFrame.cpp:
17563        (JSC::DebuggerCallFrame::thisObject): The assertion inherent in the call
17564        to asObject() here is valid, because any 'this' value should have been
17565        converted to a JSObject*.
17566
175672008-12-10  Gavin Barraclough  <barraclough@apple.com>
17568
17569        Reviewed by Geoff Garen.
17570
17571        Port more of the JIT to use the MacroAssembler interface.
17572        
17573        Everything in the main pass, bar a few corner cases (operations with required
17574        registers, or calling convention code).  Slightly refactors array creation,
17575        moving the offset calculation into the callFrame into C code (reducing code
17576        planted).
17577
17578        Overall this appears to be a 1% win on v8-tests, due to the smaller immediates
17579        being planted (in jfalse in particular).
17580
17581        * interpreter/Interpreter.cpp:
17582        (JSC::Interpreter::cti_op_new_array):
17583        * jit/JIT.cpp:
17584        (JSC::JIT::privateCompileMainPass):
17585        (JSC::JIT::privateCompileSlowCases):
17586        * jit/JIT.h:
17587        * wrec/WRECGenerator.cpp:
17588        (JSC::WREC::Generator::generateEnter):
17589
175902008-12-10  Sam Weinig  <sam@webkit.org>
17591
17592        Fix non-JIT builds.
17593
17594        * bytecode/CodeBlock.h:
17595
175962008-12-10  Sam Weinig  <sam@webkit.org>
17597
17598        Reviewed by Geoffrey Garen.
17599
17600        <rdar://problem/6428332> Remove the CTI return address table from CodeBlock
17601
17602        Step 2:
17603
17604        Convert the return address table from a HashMap to a sorted Vector.  This
17605        reduces the size of the data structure by ~4.5MB on Membuster head.
17606
17607        SunSpider reports a 0.5% progression.
17608
17609        * bytecode/CodeBlock.cpp:
17610        (JSC::sizeInBytes): Generic method to get the cost of a Vector.
17611        (JSC::CodeBlock::dumpStatistics): Add dumping of member sizes.
17612        * bytecode/CodeBlock.h:
17613        (JSC::PC::PC): Struct representing NativePC -> VirtualPC mappings.
17614        (JSC::getNativePC): Helper for binary chop.
17615        (JSC::CodeBlock::getBytecodeIndex): Used to get the VirtualPC from a
17616        NativePC using a binary chop of the pcVector.
17617        (JSC::CodeBlock::pcVector): Accessor.
17618
17619        * interpreter/Interpreter.cpp:
17620        (JSC::vPCForPC): Use getBytecodeIndex instead of jitReturnAddressVPCMap().get().
17621        (JSC::Interpreter::cti_op_instanceof): Ditto.
17622        (JSC::Interpreter::cti_op_resolve): Ditto.
17623        (JSC::Interpreter::cti_op_resolve_func): Ditto.
17624        (JSC::Interpreter::cti_op_resolve_skip): Ditto.
17625        (JSC::Interpreter::cti_op_resolve_with_base): Ditto.
17626        (JSC::Interpreter::cti_op_throw): Ditto.
17627        (JSC::Interpreter::cti_op_in): Ditto.
17628        (JSC::Interpreter::cti_vm_throw): Ditto.
17629
17630        * jit/JIT.cpp:
17631        (JSC::JIT::privateCompile): Reserve exact capacity and fill the pcVector.
17632
176332008-12-09  Geoffrey Garen  <ggaren@apple.com>
17634
17635        Reviewed by Oliver Hunt.
17636
17637        Added WREC support for an assertion followed by a quantifier. Fixed
17638        PCRE to match.
17639
17640        * wrec/WRECParser.cpp:
17641        (JSC::WREC::Parser::parseParentheses): Throw away the quantifier, since
17642        it's meaningless. (Firefox does the same.)
17643
17644        * pcre/pcre_compile.cpp:
17645        (compileBranch): ditto.
17646
176472008-12-09  Geoffrey Garen  <ggaren@apple.com>
17648
17649        Reviewed by Cameron Zwarich.
17650
17651        In preparation for compiling WREC without PCRE:
17652        
17653        Further relaxed WREC's parsing to be more web-compatible. Fixed PCRE to
17654        match in cases where it didn't already.
17655        
17656        Changed JavaScriptCore to report syntax errors detected by WREC, rather
17657        than falling back on PCRE any time WREC sees an error.
17658        
17659        * pcre/pcre_compile.cpp:
17660        (checkEscape): Relaxed parsing of \c and \N escapes to be more
17661        web-compatible.
17662        
17663        * runtime/RegExp.cpp:
17664        (JSC::RegExp::RegExp): Only fall back on PCRE if WREC has not reported
17665        a syntax error.
17666
17667        * wrec/WREC.cpp:
17668        (JSC::WREC::Generator::compileRegExp): Fixed some error reporting to
17669        match PCRE.
17670
17671        * wrec/WRECParser.cpp: Added error messages that match PCRE.
17672
17673        (JSC::WREC::Parser::consumeGreedyQuantifier):
17674        (JSC::WREC::Parser::parseParentheses):
17675        (JSC::WREC::Parser::parseCharacterClass):
17676        (JSC::WREC::Parser::parseNonCharacterEscape): Updated the above functions to
17677        use the new setError API.
17678
17679        (JSC::WREC::Parser::consumeEscape): Relaxed parsing of \c \N \u \x \B
17680        to be more web-compatible.
17681
17682        (JSC::WREC::Parser::parseAlternative): Distinguish between a malformed
17683        quantifier and a quantifier with no prefix, like PCRE does.
17684
17685        (JSC::WREC::Parser::consumeParenthesesType): Updated to use the new setError API.
17686
17687        * wrec/WRECParser.h:
17688        (JSC::WREC::Parser::error):
17689        (JSC::WREC::Parser::syntaxError):
17690        (JSC::WREC::Parser::parsePattern):
17691        (JSC::WREC::Parser::reset):
17692        (JSC::WREC::Parser::setError): Store error messages instead of error codes,
17693        to provide for exception messages. Use a setter for reporting errors, so
17694        errors detected early are not overwritten by errors detected later.
17695
176962008-12-09  Gavin Barraclough  <barraclough@apple.com>
17697
17698        Reviewed by Oliver Hunt.
17699
17700        Use va_args to access cti function arguments.
17701        https://bugs.webkit.org/show_bug.cgi?id=22774
17702
17703        This may be a minor regression, but we'll take the hit if so to reduce fragility.
17704
17705        * interpreter/Interpreter.cpp:
17706        * interpreter/Interpreter.h:
17707
177082008-12-09  Sam Weinig  <sam@webkit.org>
17709
17710        Reviewed twice by Cameron Zwarich.
17711
17712        Fix for https://bugs.webkit.org/show_bug.cgi?id=22752
17713        Clear SymbolTable after codegen for Function codeblocks that
17714        don't require an activation
17715
17716        This is a ~1.5MB improvement on Membuster-head.
17717
17718        * bytecode/CodeBlock.cpp:
17719        (JSC::CodeBlock::dumpStatistics): Add logging of non-empty symbol tables
17720        and total size used by symbol tables.
17721        * bytecompiler/BytecodeGenerator.cpp:
17722        (JSC::BytecodeGenerator::generate): Clear the symbol table here.
17723
177242008-12-09  Sam Weinig  <sam@webkit.org>
17725
17726        Reviewed by Geoffrey Garen.
17727
17728        Remove unnecessary extra lookup when throwing an exception.
17729        We used to first lookup the target offset using getHandlerForVPC
17730        and then we would lookup the native code stub using 
17731        nativeExceptionCodeForHandlerVPC.  Instead, we can just pass around
17732        the HandlerInfo.
17733
17734        * bytecode/CodeBlock.cpp:
17735        (JSC::CodeBlock::handlerForVPC): Return the HandlerInfo.
17736        * bytecode/CodeBlock.h: Remove nativeExceptionCodeForHandlerVPC.
17737
17738        * interpreter/Interpreter.cpp:
17739        (JSC::Interpreter::throwException): Return a HandlerInfo instead of
17740        and Instruction offset.
17741        (JSC::Interpreter::privateExecute): Get the offset from HandlerInfo.
17742        (JSC::Interpreter::cti_op_throw): Get the native code from the HandleInfo.
17743        (JSC::Interpreter::cti_vm_throw): Ditto.
17744        * interpreter/Interpreter.h:
17745
177462008-12-09  Eric Seidel  <eric@webkit.org>
17747
17748        Build fix only, no review.
17749
17750        Speculative fix for the Chromium-Windows bot.
17751        Add JavaScriptCore/os-win32 to the include path (for stdint.h)
17752        Strangely it builds fine on my local windows box (or at least doesn't hit this error)
17753
17754        * JavaScriptCore.scons:
17755
177562008-12-09  Eric Seidel  <eric@webkit.org>
17757
17758        No review, build fix only.
17759        
17760        Add ExecutableAllocator files missing from Scons build.
17761
17762        * JavaScriptCore.scons:
17763
177642008-12-09  Dimitri Glazkov  <dglazkov@chromium.org>
17765
17766        Reviewed by Timothy Hatcher.
17767
17768        https://bugs.webkit.org/show_bug.cgi?id=22631
17769        Allow ScriptCallFrame query names of functions in the call stack.
17770
17771        * JavaScriptCore.exp: added InternalFunction::name and
17772        UString operator==() as exported symbol
17773
177742008-12-08  Judit Jasz  <jasy@inf.u-szeged.hu>
17775
17776        Reviewed and tweaked by Cameron Zwarich.
17777
17778        Bug 22352: Annotate opcodes with their length
17779        <https://bugs.webkit.org/show_bug.cgi?id=22352>
17780
17781        * bytecode/Opcode.cpp:
17782        * bytecode/Opcode.h:
17783        * interpreter/Interpreter.cpp:
17784        (JSC::Interpreter::privateExecute):
17785        * jit/JIT.cpp:
17786        (JSC::JIT::privateCompileMainPass):
17787        (JSC::JIT::privateCompileSlowCases):
17788
177892008-12-08  Geoffrey Garen  <ggaren@apple.com>
17790
17791        Reviewed by Oliver Hunt.
17792        
17793        Implemented more of the relaxed and somewhat weird rules for deciding
17794        how to interpret a non-pattern-character.
17795        
17796        * wrec/Escapes.h:
17797        (JSC::WREC::Escape::):
17798        (JSC::WREC::Escape::Escape): Eliminated Escape::None because it was
17799        unused. If you see an '\\', it's either a valid escape or an error.
17800
17801        * wrec/Quantifier.h:
17802        (JSC::WREC::Quantifier::Quantifier):
17803        * wrec/WRECGenerator.cpp:
17804        (JSC::WREC::Generator::generateNonGreedyQuantifier):
17805        (JSC::WREC::Generator::generateGreedyQuantifier): Renamed "noMaxSpecified"
17806        to "Infinity", since that's what it means.
17807
17808        * wrec/WRECParser.cpp:
17809        (JSC::WREC::Parser::consumeGreedyQuantifier): Re-wrote {n,m} parsing rules
17810        because they were too strict before. Added support for backtracking
17811        in the case where the {n,m} fails to parse as a quantifier, and yet is
17812        not a syntax error.
17813
17814        (JSC::WREC::Parser::parseCharacterClass):
17815        (JSC::WREC::Parser::parseNonCharacterEscape): Eliminated Escape::None,
17816        as above.
17817
17818        (JSC::WREC::Parser::consumeEscape): Don't treat ASCII and _ escapes
17819        as syntax errors. See fast/regex/non-pattern-characters.html.
17820        
17821        * wrec/WRECParser.h:
17822        (JSC::WREC::Parser::SavedState::SavedState):
17823        (JSC::WREC::Parser::SavedState::restore): Added a state backtracker,
17824        since parsing {n,m} forms requires backtracking if the form turns out
17825        not to be a quantifier.
17826
178272008-12-08  Geoffrey Garen  <ggaren@apple.com>
17828
17829        Reviewed by Oliver Hunt.
17830        
17831        Refactored WREC parsing so that only one piece of code needs to know
17832        the relaxed and somewhat weird rules for deciding how to interpret a
17833        non-pattern-character, in preparation for implementing those rules.
17834        
17835        Also, implemented the relaxed and somewhat weird rules for '}' and ']'.
17836
17837        * wrec/WREC.cpp: Reduced the regular expression size limit. Now that
17838        WREC handles ']' properly, it compiles fast/js/regexp-charclass-crash.html,
17839        which makes it hang at the old limit. (The old limit was based on the
17840        misimpression that the same value in PCRE limited the regular expression
17841        pattern size; in reality, it limited the expected compiled regular
17842        expression size. WREC doesn't have a way to calculate an expected
17843        compiled regular expression size, but this should be good enough.)
17844
17845        * wrec/WRECParser.cpp:
17846        (JSC::WREC::parsePatternCharacterSequence): Nixed this function because
17847        it contained a second copy of the logic for handling non-pattern-characters,
17848        which is about to get a lot more complicated.
17849
17850        (JSC::WREC::PatternCharacterSequence::PatternCharacterSequence): 
17851        (JSC::WREC::PatternCharacterSequence::size):
17852        (JSC::WREC::PatternCharacterSequence::append):
17853        (JSC::WREC::PatternCharacterSequence::flush): Helper object for generating
17854        an optimized sequence of pattern characters.
17855
17856        (JSC::WREC::Parser::parseNonCharacterEscape): Renamed to reflect the fact
17857        that the main parseAlternative loop handles character escapes.
17858
17859        (JSC::WREC::Parser::parseAlternative): Moved pattern character sequence
17860        logic from parsePatternCharacterSequence to here, using
17861        PatternCharacterSequence to help with the details.
17862
17863        * wrec/WRECParser.h: Updated for renames.
17864
178652008-12-08  Alexey Proskuryakov  <ap@webkit.org>
17866
17867        Reviewed by Geoff Garen.
17868
17869        <rdar://problem/6166088> Give JSGlobalContextCreate a behavior that is concurrency aware,
17870        and un-deprecate it
17871
17872        * API/JSContextRef.cpp: (JSGlobalContextCreate):
17873        * API/JSContextRef.h:
17874        Use a unique context group for the context, unless the application was linked against old
17875        JavaScriptCore.
17876
178772008-12-08  Sam Weinig  <sam@webkit.org>
17878
17879        Reviewed by Cameron Zwarich.
17880
17881        Fix for <rdar://problem/6428332> Remove the CTI return address table from CodeBlock
17882
17883        Step 1:
17884
17885        Remove use of jitReturnAddressVPCMap when looking for vPC to store Structures
17886        in for cached lookup.  Instead, use the offset in the StructureStubInfo that is
17887        already required.
17888
17889        * bytecode/CodeBlock.cpp:
17890        (JSC::CodeBlock::dumpStatistics): Fix extraneous semicolon.
17891        * interpreter/Interpreter.cpp:
17892        (JSC::Interpreter::tryCTICachePutByID):
17893        (JSC::Interpreter::tryCTICacheGetByID):
17894        (JSC::Interpreter::cti_op_get_by_id_self_fail):
17895        (JSC::Interpreter::cti_op_get_by_id_proto_list):
17896        * jit/JIT.h:
17897        (JSC::JIT::compileGetByIdSelf):
17898        (JSC::JIT::compileGetByIdProto):
17899        (JSC::JIT::compileGetByIdChain):
17900        (JSC::JIT::compilePutByIdReplace):
17901        (JSC::JIT::compilePutByIdTransition):
17902        * jit/JITPropertyAccess.cpp:
17903        (JSC::JIT::privateCompilePutByIdTransition):
17904        (JSC::JIT::patchGetByIdSelf):
17905        (JSC::JIT::patchPutByIdReplace):
17906        (JSC::JIT::privateCompilePatchGetArrayLength): Remove extra call to getStubInfo.
17907        (JSC::JIT::privateCompileGetByIdSelf):
17908        (JSC::JIT::privateCompileGetByIdProto):
17909        (JSC::JIT::privateCompileGetByIdChain):
17910        (JSC::JIT::privateCompilePutByIdReplace):
17911
179122008-12-08  Gavin Barraclough  <barraclough@apple.com>
17913
17914        Reviewed by Oliver Hunt.
17915
17916        Port the op_j?n?eq_null JIT code generation to use the MacroAssembler,
17917        and clean up slightly at the same time.  The 'j' forms currently compare,
17918        then set a register, then compare again, then branch.  Branch directly on
17919        the result of the first compare.
17920
17921        Around a 1% progression on deltablue, crypto & early boyer, for about 1/2%
17922        overall on v8-tests.
17923
17924        * jit/JIT.cpp:
17925        (JSC::JIT::privateCompileMainPass):
17926        * jit/JITPropertyAccess.cpp:
17927        (JSC::JIT::compileGetByIdSlowCase):
17928
179292008-12-08  Gavin Barraclough  <barraclough@apple.com>
17930
17931        Reviewed by Geoff Garen.
17932
17933        Expand MacroAssembler to support more operations, required by the JIT.
17934
17935        Generally adds more operations and permutations of operands to the existing
17936        interface.  Rename 'jset' to 'jnz' and 'jnset' to 'jz', which seem clearer,
17937        and require that immediate pointer operands (though not pointer addresses to
17938        load and store instructions) are wrapped in a ImmPtr() type, akin to Imm32().
17939
17940        No performance impact.
17941
17942        * assembler/MacroAssembler.h:
17943        (JSC::MacroAssembler::):
17944        (JSC::MacroAssembler::ImmPtr::ImmPtr):
17945        (JSC::MacroAssembler::add32):
17946        (JSC::MacroAssembler::and32):
17947        (JSC::MacroAssembler::or32):
17948        (JSC::MacroAssembler::sub32):
17949        (JSC::MacroAssembler::xor32):
17950        (JSC::MacroAssembler::loadPtr):
17951        (JSC::MacroAssembler::load32):
17952        (JSC::MacroAssembler::storePtr):
17953        (JSC::MacroAssembler::store32):
17954        (JSC::MacroAssembler::poke):
17955        (JSC::MacroAssembler::move):
17956        (JSC::MacroAssembler::testImm32):
17957        (JSC::MacroAssembler::jae32):
17958        (JSC::MacroAssembler::jb32):
17959        (JSC::MacroAssembler::jePtr):
17960        (JSC::MacroAssembler::je32):
17961        (JSC::MacroAssembler::jnePtr):
17962        (JSC::MacroAssembler::jne32):
17963        (JSC::MacroAssembler::jnzPtr):
17964        (JSC::MacroAssembler::jnz32):
17965        (JSC::MacroAssembler::jzPtr):
17966        (JSC::MacroAssembler::jz32):
17967        (JSC::MacroAssembler::joSub32):
17968        (JSC::MacroAssembler::jump):
17969        (JSC::MacroAssembler::sete32):
17970        (JSC::MacroAssembler::setne32):
17971        (JSC::MacroAssembler::setnz32):
17972        (JSC::MacroAssembler::setz32):
17973        * assembler/X86Assembler.h:
17974        (JSC::X86Assembler::addl_mr):
17975        (JSC::X86Assembler::andl_i8r):
17976        (JSC::X86Assembler::cmpl_rm):
17977        (JSC::X86Assembler::cmpl_mr):
17978        (JSC::X86Assembler::cmpl_i8m):
17979        (JSC::X86Assembler::subl_mr):
17980        (JSC::X86Assembler::testl_i32m):
17981        (JSC::X86Assembler::xorl_i32r):
17982        (JSC::X86Assembler::movl_rm):
17983        (JSC::X86Assembler::modRm_opmsib):
17984        * jit/JIT.cpp:
17985        (JSC::JIT::privateCompileMainPass):
17986        * jit/JITInlineMethods.h:
17987        (JSC::JIT::emitGetVirtualRegister):
17988        (JSC::JIT::emitPutCTIArgConstant):
17989        (JSC::JIT::emitPutCTIParam):
17990        (JSC::JIT::emitPutImmediateToCallFrameHeader):
17991        (JSC::JIT::emitInitRegister):
17992        (JSC::JIT::checkStructure):
17993        (JSC::JIT::emitJumpIfJSCell):
17994        (JSC::JIT::emitJumpIfNotJSCell):
17995        (JSC::JIT::emitJumpSlowCaseIfNotImmNum):
17996
179972008-12-08  Geoffrey Garen  <ggaren@apple.com>
17998
17999        Reviewed by Sam Weinig.
18000        
18001        Fixed a bug where WREC would allow a quantifier whose minimum was
18002        greater than its maximum.
18003        
18004        * wrec/Quantifier.h:
18005        (JSC::WREC::Quantifier::Quantifier): ASSERT that the quantifier is not
18006        backwards.
18007        
18008        * wrec/WRECParser.cpp:
18009        (JSC::WREC::Parser::consumeGreedyQuantifier): Verify that the minimum
18010        is not greater than the maximum.
18011
180122008-12-08  Eric Seidel  <eric@webkit.org>
18013        
18014        Build fix only, no review.
18015
18016        * JavaScriptCore.scons: add bytecode/JumpTable.cpp
18017
180182008-12-08  Sam Weinig  <sam@webkit.org>
18019
18020        Reviewed by Geoffrey Garen.
18021
18022        Patch for https://bugs.webkit.org/show_bug.cgi?id=22716
18023        <rdar://problem/6428315>
18024        Add RareData structure to CodeBlock for infrequently used auxiliary data
18025        members.
18026
18027        Reduces memory on Membuster-head by ~.5MB 
18028
18029        * bytecode/CodeBlock.cpp:
18030        (JSC::CodeBlock::dump):
18031        (JSC::CodeBlock::dumpStatistics):
18032        (JSC::CodeBlock::mark):
18033        (JSC::CodeBlock::getHandlerForVPC):
18034        (JSC::CodeBlock::nativeExceptionCodeForHandlerVPC):
18035        (JSC::CodeBlock::shrinkToFit):
18036        * bytecode/CodeBlock.h:
18037        (JSC::CodeBlock::numberOfExceptionHandlers):
18038        (JSC::CodeBlock::addExceptionHandler):
18039        (JSC::CodeBlock::exceptionHandler):
18040        (JSC::CodeBlock::addFunction):
18041        (JSC::CodeBlock::function):
18042        (JSC::CodeBlock::addUnexpectedConstant):
18043        (JSC::CodeBlock::unexpectedConstant):
18044        (JSC::CodeBlock::addRegExp):
18045        (JSC::CodeBlock::regexp):
18046        (JSC::CodeBlock::numberOfImmediateSwitchJumpTables):
18047        (JSC::CodeBlock::addImmediateSwitchJumpTable):
18048        (JSC::CodeBlock::immediateSwitchJumpTable):
18049        (JSC::CodeBlock::numberOfCharacterSwitchJumpTables):
18050        (JSC::CodeBlock::addCharacterSwitchJumpTable):
18051        (JSC::CodeBlock::characterSwitchJumpTable):
18052        (JSC::CodeBlock::numberOfStringSwitchJumpTables):
18053        (JSC::CodeBlock::addStringSwitchJumpTable):
18054        (JSC::CodeBlock::stringSwitchJumpTable):
18055        (JSC::CodeBlock::evalCodeCache):
18056        (JSC::CodeBlock::createRareDataIfNecessary):
18057
180582008-11-26  Peter Kasting  <pkasting@google.com>
18059
18060        Reviewed by Anders Carlsson.
18061
18062        https://bugs.webkit.org/show_bug.cgi?id=16814
18063        Allow ports to disable ActiveX->NPAPI conversion for Media Player.
18064        Improve handling of miscellaneous ActiveX objects.
18065
18066        * wtf/Platform.h: Add another ENABLE(...).
18067
180682008-12-08  Sam Weinig  <sam@webkit.org>
18069
18070        Reviewed by Mark Rowe.
18071
18072        Add dumping of CodeBlock member structure usage.
18073
18074        * bytecode/CodeBlock.cpp:
18075        (JSC::CodeBlock::dumpStatistics):
18076        * bytecode/EvalCodeCache.h:
18077        (JSC::EvalCodeCache::isEmpty):
18078
180792008-12-08  David Kilzer  <ddkilzer@apple.com>
18080
18081        Bug 22555: Sort "children" sections in Xcode project files
18082
18083        <https://bugs.webkit.org/show_bug.cgi?id=22555>
18084
18085        Reviewed by Eric Seidel.
18086
18087        * JavaScriptCore.xcodeproj/project.pbxproj: Sorted.
18088
180892008-12-08  Tony Chang  <tony@chromium.org>
18090
18091        Reviewed by Eric Seidel.
18092
18093        Enable Pan scrolling only when building on PLATFORM(WIN_OS)
18094        Previously platforms like Apple Windows WebKit, Cairo Windows WebKit,
18095        Wx and Chromium were enabling it explicitly, now we just turn it on
18096        for all WIN_OS, later platforms can turn it off as needed on Windows
18097        (or turn it on under Linux, etc.)
18098        https://bugs.webkit.org/show_bug.cgi?id=22698
18099
18100        * wtf/Platform.h:
18101
181022008-12-08  Sam Weinig  <sam@webkit.org>
18103
18104        Reviewed by Cameron Zwarich.
18105
18106        Add basic memory statistics dumping for CodeBlock.
18107
18108        * bytecode/CodeBlock.cpp:
18109        (JSC::CodeBlock::dumpStatistics):
18110        (JSC::CodeBlock::CodeBlock):
18111        (JSC::CodeBlock::~CodeBlock):
18112        * bytecode/CodeBlock.h:
18113
181142008-12-08  Simon Hausmann  <simon.hausmann@nokia.com>
18115
18116        Fix the Linux build with newer gcc/glibc.
18117
18118        * jit/ExecutableAllocatorPosix.cpp: Include unistd.h for
18119        getpagesize(), according to
18120        http://opengroup.org/onlinepubs/007908775/xsh/getpagesize.html
18121
181222008-12-08  Simon Hausmann  <simon.hausmann@nokia.com>
18123
18124        Fix the build with Qt on Windows.
18125
18126        * JavaScriptCore.pri: Compile ExecutableAllocatorWin.cpp on Windows.
18127
181282008-12-07  Oliver Hunt  <oliver@apple.com>
18129
18130        Reviewed by NOBODY (Buildfix).
18131
18132        Fix non-WREC builds
18133
18134        * runtime/RegExp.cpp:
18135        (JSC::RegExp::RegExp):
18136
181372008-12-07  Oliver Hunt  <oliver@apple.com>
18138
18139        Reviewed by NOBODY (Build fix).
18140
18141        Put ENABLE(ASSEMBLER) guards around use of ExecutableAllocator in global data
18142
18143        Correct Qt and Gtk project files
18144
18145        * GNUmakefile.am:
18146        * JavaScriptCore.pri:
18147        * runtime/JSGlobalData.h:
18148
181492008-12-07  Oliver Hunt  <oliver@apple.com>
18150
18151        Reviewed by NOBODY (Build fix).
18152
18153        Add new files to other projects.
18154
18155        * GNUmakefile.am:
18156        * JavaScriptCore.pri:
18157        * JavaScriptCore.pro:
18158
181592008-12-07  Oliver Hunt  <oliver@apple.com>
18160
18161        Rubber stamped by Mark Rowe.
18162
18163        Rename ExecutableAllocatorMMAP to the more sensible ExecutableAllocatorPosix
18164
18165        * JavaScriptCore.xcodeproj/project.pbxproj:
18166        * jit/ExecutableAllocator.h:
18167        * jit/ExecutableAllocatorPosix.cpp: Renamed from JavaScriptCore/jit/ExecutableAllocatorMMAP.cpp.
18168        (JSC::ExecutableAllocator::intializePageSize):
18169        (JSC::ExecutablePool::systemAlloc):
18170        (JSC::ExecutablePool::systemRelease):
18171
181722008-12-07  Oliver Hunt  <oliver@apple.com>
18173
18174        Reviewed by Cameron Zwarich and Sam Weinig
18175
18176        <rdar://problem/6309878> Need more granular control over allocation of executable memory (21783)
18177        <https://bugs.webkit.org/show_bug.cgi?id=21783>
18178
18179        Add a new allocator for use by the JIT that provides executable pages, so
18180        we can get rid of the current hack that makes the entire heap executable.
18181
18182        1-2% progression on SunSpider-v8, 1% on SunSpider.  Reduces memory usage as well!
18183
18184        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
18185        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
18186        * JavaScriptCore.xcodeproj/project.pbxproj:
18187        * assembler/AssemblerBuffer.h:
18188        (JSC::AssemblerBuffer::size):
18189        (JSC::AssemblerBuffer::executableCopy):
18190        * assembler/MacroAssembler.h:
18191        (JSC::MacroAssembler::size):
18192        (JSC::MacroAssembler::copyCode):
18193        * assembler/X86Assembler.h:
18194        (JSC::X86Assembler::size):
18195        (JSC::X86Assembler::executableCopy):
18196        * bytecode/CodeBlock.cpp:
18197        (JSC::CodeBlock::~CodeBlock):
18198        * bytecode/CodeBlock.h:
18199        (JSC::CodeBlock::executablePool):
18200        (JSC::CodeBlock::setExecutablePool):
18201        * bytecode/Instruction.h:
18202        (JSC::PolymorphicAccessStructureList::derefStructures):
18203        * interpreter/Interpreter.cpp:
18204        (JSC::Interpreter::~Interpreter):
18205        * interpreter/Interpreter.h:
18206        * jit/ExecutableAllocator.cpp: Added.
18207        * jit/ExecutableAllocator.h: Added.
18208        (JSC::ExecutablePool::create):
18209        (JSC::ExecutablePool::alloc):
18210        (JSC::ExecutablePool::~ExecutablePool):
18211        (JSC::ExecutablePool::available):
18212        (JSC::ExecutablePool::ExecutablePool):
18213        (JSC::ExecutablePool::poolAllocate):
18214        (JSC::ExecutableAllocator::ExecutableAllocator):
18215        (JSC::ExecutableAllocator::poolForSize):
18216        (JSC::ExecutablePool::sizeForAllocation):
18217        * jit/ExecutableAllocatorMMAP.cpp: Added.
18218        (JSC::ExecutableAllocator::intializePageSize):
18219        (JSC::ExecutablePool::systemAlloc):
18220        (JSC::ExecutablePool::systemRelease):
18221        * jit/ExecutableAllocatorWin.cpp: Added.
18222        (JSC::ExecutableAllocator::intializePageSize):
18223        (JSC::ExecutablePool::systemAlloc):
18224        (JSC::ExecutablePool::systemRelease):
18225        * jit/JIT.cpp:
18226        (JSC::JIT::privateCompile):
18227        (JSC::JIT::privateCompileCTIMachineTrampolines):
18228        * jit/JIT.h:
18229        (JSC::JIT::compileCTIMachineTrampolines):
18230        * jit/JITPropertyAccess.cpp:
18231        (JSC::JIT::privateCompilePutByIdTransition):
18232        (JSC::JIT::privateCompilePatchGetArrayLength):
18233        (JSC::JIT::privateCompileGetByIdSelf):
18234        (JSC::JIT::privateCompileGetByIdProto):
18235        (JSC::JIT::privateCompileGetByIdSelfList):
18236        (JSC::JIT::privateCompileGetByIdProtoList):
18237        (JSC::JIT::privateCompileGetByIdChainList):
18238        (JSC::JIT::privateCompileGetByIdChain):
18239        (JSC::JIT::privateCompilePutByIdReplace):
18240        * parser/Nodes.cpp:
18241        (JSC::RegExpNode::emitBytecode):
18242        * runtime/JSGlobalData.h:
18243        (JSC::JSGlobalData::poolForSize):
18244        * runtime/RegExp.cpp:
18245        (JSC::RegExp::RegExp):
18246        (JSC::RegExp::create):
18247        (JSC::RegExp::~RegExp):
18248        * runtime/RegExp.h:
18249        * runtime/RegExpConstructor.cpp:
18250        (JSC::constructRegExp):
18251        * runtime/RegExpPrototype.cpp:
18252        (JSC::regExpProtoFuncCompile):
18253        * runtime/StringPrototype.cpp:
18254        (JSC::stringProtoFuncMatch):
18255        (JSC::stringProtoFuncSearch):
18256        * wrec/WREC.cpp:
18257        (JSC::WREC::Generator::compileRegExp):
18258        * wrec/WRECGenerator.h:
18259        * wtf/FastMalloc.cpp:
18260        * wtf/FastMalloc.h:
18261        * wtf/TCSystemAlloc.cpp:
18262        (TryMmap):
18263        (TryVirtualAlloc):
18264        (TryDevMem):
18265        (TCMalloc_SystemRelease):
18266
182672008-12-06  Sam Weinig  <sam@webkit.org>
18268
18269        Fix the Gtk build.
18270
18271        * jit/JITPropertyAccess.cpp:
18272        (JSC::JIT::compileGetByIdHotPath):
18273        (JSC::JIT::compilePutByIdHotPath):
18274
182752008-12-06  Sam Weinig  <sam@webkit.org>
18276
18277        Reviewed by Cameron Zwarich,
18278
18279        Move CodeBlock constructor into the .cpp file.
18280
18281        Sunspider reports a .7% progression, but I can only assume this
18282        is noise.
18283
18284        * bytecode/CodeBlock.cpp:
18285        (JSC::CodeBlock::CodeBlock):
18286        * bytecode/CodeBlock.h:
18287
182882008-12-06  Sam Weinig  <sam@webkit.org>
18289
18290        Reviewed by Cameron Zwarich.
18291
18292        Split JumpTable code into its own file.
18293
18294        * GNUmakefile.am:
18295        * JavaScriptCore.pri:
18296        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
18297        * JavaScriptCore.xcodeproj/project.pbxproj:
18298        * JavaScriptCoreSources.bkl:
18299        * bytecode/CodeBlock.cpp:
18300        * bytecode/CodeBlock.h:
18301        * bytecode/JumpTable.cpp: Copied from bytecode/CodeBlock.cpp.
18302        * bytecode/JumpTable.h: Copied from bytecode/CodeBlock.h.
18303
183042008-12-05  Sam Weinig  <sam@webkit.org>
18305
18306        Reviewed by Cameron Zwarich.
18307
18308        Fix for https://bugs.webkit.org/show_bug.cgi?id=22715
18309        Encapsulate more CodeBlock members in preparation
18310        of moving some of them to a rare data structure.
18311
18312        * bytecode/CodeBlock.cpp:
18313        (JSC::locationForOffset):
18314        (JSC::printConditionalJump):
18315        (JSC::printGetByIdOp):
18316        (JSC::printPutByIdOp):
18317        (JSC::CodeBlock::printStructure):
18318        (JSC::CodeBlock::printStructures):
18319        (JSC::CodeBlock::dump):
18320        (JSC::CodeBlock::~CodeBlock):
18321        (JSC::CodeBlock::unlinkCallers):
18322        (JSC::CodeBlock::derefStructures):
18323        (JSC::CodeBlock::refStructures):
18324        (JSC::CodeBlock::mark):
18325        (JSC::CodeBlock::getHandlerForVPC):
18326        (JSC::CodeBlock::nativeExceptionCodeForHandlerVPC):
18327        (JSC::CodeBlock::lineNumberForVPC):
18328        (JSC::CodeBlock::expressionRangeForVPC):
18329        (JSC::CodeBlock::shrinkToFit):
18330        * bytecode/CodeBlock.h:
18331        (JSC::CodeBlock::CodeBlock):
18332        (JSC::CodeBlock::addCaller):
18333        (JSC::CodeBlock::removeCaller):
18334        (JSC::CodeBlock::isKnownNotImmediate):
18335        (JSC::CodeBlock::isConstantRegisterIndex):
18336        (JSC::CodeBlock::getConstant):
18337        (JSC::CodeBlock::isTemporaryRegisterIndex):
18338        (JSC::CodeBlock::getStubInfo):
18339        (JSC::CodeBlock::getCallLinkInfo):
18340        (JSC::CodeBlock::instructions):
18341        (JSC::CodeBlock::setJITCode):
18342        (JSC::CodeBlock::jitCode):
18343        (JSC::CodeBlock::ownerNode):
18344        (JSC::CodeBlock::setGlobalData):
18345        (JSC::CodeBlock::setThisRegister):
18346        (JSC::CodeBlock::thisRegister):
18347        (JSC::CodeBlock::setNeedsFullScopeChain):
18348        (JSC::CodeBlock::needsFullScopeChain):
18349        (JSC::CodeBlock::setUsesEval):
18350        (JSC::CodeBlock::usesEval):
18351        (JSC::CodeBlock::setUsesArguments):
18352        (JSC::CodeBlock::usesArguments):
18353        (JSC::CodeBlock::codeType):
18354        (JSC::CodeBlock::source):
18355        (JSC::CodeBlock::sourceOffset):
18356        (JSC::CodeBlock::addGlobalResolveInstruction):
18357        (JSC::CodeBlock::numberOfPropertyAccessInstructions):
18358        (JSC::CodeBlock::addPropertyAccessInstruction):
18359        (JSC::CodeBlock::propertyAccessInstruction):
18360        (JSC::CodeBlock::numberOfCallLinkInfos):
18361        (JSC::CodeBlock::addCallLinkInfo):
18362        (JSC::CodeBlock::callLinkInfo):
18363        (JSC::CodeBlock::numberOfJumpTargets):
18364        (JSC::CodeBlock::addJumpTarget):
18365        (JSC::CodeBlock::jumpTarget):
18366        (JSC::CodeBlock::lastJumpTarget):
18367        (JSC::CodeBlock::numberOfExceptionHandlers):
18368        (JSC::CodeBlock::addExceptionHandler):
18369        (JSC::CodeBlock::exceptionHandler):
18370        (JSC::CodeBlock::addExpressionInfo):
18371        (JSC::CodeBlock::numberOfLineInfos):
18372        (JSC::CodeBlock::addLineInfo):
18373        (JSC::CodeBlock::lastLineInfo):
18374        (JSC::CodeBlock::jitReturnAddressVPCMap):
18375        (JSC::CodeBlock::numberOfIdentifiers):
18376        (JSC::CodeBlock::addIdentifier):
18377        (JSC::CodeBlock::identifier):
18378        (JSC::CodeBlock::numberOfConstantRegisters):
18379        (JSC::CodeBlock::addConstantRegister):
18380        (JSC::CodeBlock::constantRegister):
18381        (JSC::CodeBlock::addFunction):
18382        (JSC::CodeBlock::function):
18383        (JSC::CodeBlock::addFunctionExpression):
18384        (JSC::CodeBlock::functionExpression):
18385        (JSC::CodeBlock::addUnexpectedConstant):
18386        (JSC::CodeBlock::unexpectedConstant):
18387        (JSC::CodeBlock::addRegExp):
18388        (JSC::CodeBlock::regexp):
18389        (JSC::CodeBlock::symbolTable):
18390        (JSC::CodeBlock::evalCodeCache):
18391        New inline setters/getters.
18392
18393        (JSC::ProgramCodeBlock::ProgramCodeBlock):
18394        (JSC::ProgramCodeBlock::~ProgramCodeBlock):
18395        (JSC::ProgramCodeBlock::clearGlobalObject):
18396        * bytecode/SamplingTool.cpp:
18397        (JSC::ScopeSampleRecord::sample):
18398        (JSC::SamplingTool::dump):
18399        * bytecompiler/BytecodeGenerator.cpp:
18400        * bytecompiler/BytecodeGenerator.h:
18401        * bytecompiler/Label.h:
18402        * interpreter/CallFrame.cpp:
18403        * interpreter/Interpreter.cpp:
18404        * jit/JIT.cpp:
18405        * jit/JITCall.cpp:
18406        * jit/JITInlineMethods.h:
18407        * jit/JITPropertyAccess.cpp:
18408        * parser/Nodes.cpp:
18409        * runtime/Arguments.h:
18410        * runtime/ExceptionHelpers.cpp:
18411        * runtime/JSActivation.cpp:
18412        * runtime/JSActivation.h:
18413        * runtime/JSGlobalObject.cpp:
18414        Change direct access to use new getter/setters.
18415
184162008-12-05  Gavin Barraclough  <barraclough@apple.com>
18417
18418        Reviewed by Oliver Hunt.
18419
18420        Prevent GCC4.2 from hanging when trying to compile Interpreter.cpp.
18421        Added "-fno-var-tracking" compiler flag.
18422
18423        https://bugs.webkit.org/show_bug.cgi?id=22704
18424
18425        * JavaScriptCore.xcodeproj/project.pbxproj:
18426
184272008-12-05  Gavin Barraclough  <barraclough@apple.com>
18428
18429        Reviewed by Oliver Hunt.
18430
18431        Ordering of branch operands in MacroAssembler in unnecessarily  inconsistent.
18432
18433        je, jg etc take an immediate operand as the second argument, but for the
18434        equality branches (je, jne) the immediate operand was the first argument.  This
18435        was unnecessarily inconsistent.  Change je, jne methods to take the immediate
18436        as the second argument.
18437
18438        https://bugs.webkit.org/show_bug.cgi?id=22703
18439
18440        * assembler/MacroAssembler.h:
18441        (JSC::MacroAssembler::je32):
18442        (JSC::MacroAssembler::jne32):
18443        * jit/JIT.cpp:
18444        (JSC::JIT::compileOpStrictEq):
18445        * wrec/WRECGenerator.cpp:
18446        (JSC::WREC::Generator::generateEnter):
18447        (JSC::WREC::Generator::generateNonGreedyQuantifier):
18448        (JSC::WREC::Generator::generateGreedyQuantifier):
18449        (JSC::WREC::Generator::generatePatternCharacterPair):
18450        (JSC::WREC::Generator::generatePatternCharacter):
18451        (JSC::WREC::Generator::generateCharacterClassInvertedRange):
18452        (JSC::WREC::Generator::generateCharacterClassInverted):
18453        (JSC::WREC::Generator::generateAssertionBOL):
18454        (JSC::WREC::Generator::generateAssertionWordBoundary):
18455
184562008-12-05  Gavin Barraclough  <barraclough@apple.com>
18457
18458        Reviewed by Geoff Garen.
18459
18460        Second tranche of porting JIT.cpp to MacroAssembler interface.
18461
18462        * assembler/MacroAssembler.h:
18463        (JSC::MacroAssembler::mul32):
18464        (JSC::MacroAssembler::jl32):
18465        (JSC::MacroAssembler::jnzSub32):
18466        (JSC::MacroAssembler::joAdd32):
18467        (JSC::MacroAssembler::joMul32):
18468        (JSC::MacroAssembler::jzSub32):
18469        * jit/JIT.cpp:
18470        (JSC::JIT::emitSlowScriptCheck):
18471        (JSC::JIT::privateCompileMainPass):
18472        (JSC::JIT::privateCompileSlowCases):
18473        (JSC::JIT::privateCompileCTIMachineTrampolines):
18474        * jit/JIT.h:
18475        * jit/JITInlineMethods.h:
18476        (JSC::JIT::emitJumpIfNotJSCell):
18477        (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
18478
184792008-12-05  David Kilzer  <ddkilzer@apple.com>
18480
18481        Bug 22609: Provide a build-time choice when generating hash tables for properties of built-in DOM objects
18482
18483        <https://bugs.webkit.org/show_bug.cgi?id=22609>
18484        <rdar://problem/6331749>
18485
18486        Reviewed by Darin Adler.
18487
18488        Initial patch by Yosen Lin.  Adapted for ToT WebKit by David Kilzer.
18489
18490        Added back the code that generates a "compact" hash (instead of a
18491        perfect hash) as a build-time option using the
18492        ENABLE(PERFECT_HASH_SIZE) macro as defined in Lookup.h.
18493
18494        * create_hash_table: Rename variables to differentiate perfect hash
18495        values from compact hash values.  Added back code to compute compact
18496        hash tables.  Generate both hash table sizes and emit
18497        conditionalized code based on ENABLE(PERFECT_HASH_SIZE).
18498        * runtime/Lookup.cpp:
18499        (JSC::HashTable::createTable): Added version of createTable() for
18500        use with compact hash tables.
18501        (JSC::HashTable::deleteTable): Updated to work with compact hash
18502        tables.
18503        * runtime/Lookup.h: Defined ENABLE(PERFECT_HASH_SIZE) macro here.
18504        (JSC::HashEntry::initialize): Set m_next to zero when using compact
18505        hash tables.
18506        (JSC::HashEntry::setNext): Added for compact hash tables.
18507        (JSC::HashEntry::next): Added for compact hash tables.
18508        (JSC::HashTable::entry): Added version of entry() for use with
18509        compact hash tables.
18510        * runtime/Structure.cpp:
18511        (JSC::Structure::getEnumerablePropertyNames): Updated to work with
18512        compact hash tables.
18513
185142008-12-05  Gavin Barraclough  <barraclough@apple.com>
18515
18516        Reviewed by Geoff Garen.
18517
18518        Remove redundant calls to JIT::emitSlowScriptCheck.
18519        This is checked in the hot path, so is not needed on the slow path - and the code
18520        was being planted before the start of the slow case, so was completely unreachable!
18521
18522        * jit/JIT.cpp:
18523        (JSC::JIT::privateCompileSlowCases):
18524
185252008-12-05  Gavin Barraclough  <barraclough@apple.com>
18526
18527        Reviewed by Geoff Garen.
18528
18529        Move JIT::compileOpStrictEq to MacroAssembler interface.
18530
18531        The rewrite also looks like a small (<1%) performance progression.
18532
18533        https://bugs.webkit.org/show_bug.cgi?id=22697
18534
18535        * jit/JIT.cpp:
18536        (JSC::JIT::compileOpStrictEq):
18537        (JSC::JIT::privateCompileSlowCases):
18538        * jit/JIT.h:
18539        * jit/JITInlineMethods.h:
18540        (JSC::JIT::emitJumpIfJSCell):
18541        (JSC::JIT::emitJumpSlowCaseIfJSCell):
18542
185432008-12-05  Gavin Barraclough  <barraclough@apple.com>
18544
18545        Reviewed by Geoff Garen.
18546
18547        Remove m_assembler from MacroAssembler::Jump.
18548        Keeping a pointer allowed for some syntactic sugar - "link()" looks nicer
18549        than "link(this)".  But maintaining this doubles the size of Jump, which
18550        is even more unfortunate for the JIT, since there are many large structures
18551        holding JmpSrcs.  Probably best to remove it.
18552
18553        https://bugs.webkit.org/show_bug.cgi?id=22693
18554
18555        * assembler/MacroAssembler.h:
18556        (JSC::MacroAssembler::Jump::Jump):
18557        (JSC::MacroAssembler::Jump::link):
18558        (JSC::MacroAssembler::Jump::linkTo):
18559        (JSC::MacroAssembler::JumpList::link):
18560        (JSC::MacroAssembler::JumpList::linkTo):
18561        (JSC::MacroAssembler::jae32):
18562        (JSC::MacroAssembler::je32):
18563        (JSC::MacroAssembler::je16):
18564        (JSC::MacroAssembler::jg32):
18565        (JSC::MacroAssembler::jge32):
18566        (JSC::MacroAssembler::jl32):
18567        (JSC::MacroAssembler::jle32):
18568        (JSC::MacroAssembler::jnePtr):
18569        (JSC::MacroAssembler::jne32):
18570        (JSC::MacroAssembler::jnset32):
18571        (JSC::MacroAssembler::jset32):
18572        (JSC::MacroAssembler::jump):
18573        (JSC::MacroAssembler::jzSub32):
18574        (JSC::MacroAssembler::joAdd32):
18575        (JSC::MacroAssembler::call):
18576        * wrec/WREC.cpp:
18577        (JSC::WREC::Generator::compileRegExp):
18578        * wrec/WRECGenerator.cpp:
18579        (JSC::WREC::Generator::generateEnter):
18580        (JSC::WREC::Generator::generateBackreferenceQuantifier):
18581        (JSC::WREC::Generator::generateNonGreedyQuantifier):
18582        (JSC::WREC::Generator::generateGreedyQuantifier):
18583        (JSC::WREC::Generator::generatePatternCharacter):
18584        (JSC::WREC::Generator::generateCharacterClassInvertedRange):
18585        (JSC::WREC::Generator::generateCharacterClassInverted):
18586        (JSC::WREC::Generator::generateCharacterClass):
18587        (JSC::WREC::Generator::generateParenthesesAssertion):
18588        (JSC::WREC::Generator::generateParenthesesInvertedAssertion):
18589        (JSC::WREC::Generator::generateParenthesesNonGreedy):
18590        (JSC::WREC::Generator::generateParenthesesResetTrampoline):
18591        (JSC::WREC::Generator::generateAssertionBOL):
18592        (JSC::WREC::Generator::generateAssertionEOL):
18593        (JSC::WREC::Generator::generateAssertionWordBoundary):
18594        (JSC::WREC::Generator::generateBackreference):
18595        (JSC::WREC::Generator::terminateAlternative):
18596        (JSC::WREC::Generator::terminateDisjunction):
18597        * wrec/WRECParser.h:
18598
185992008-12-05  Gavin Barraclough  <barraclough@apple.com>
18600
18601        Reviewed by Geoffrey Garen.
18602
18603        Simplify JIT generated checks for timeout code, by moving more work into the C function.
18604        https://bugs.webkit.org/show_bug.cgi?id=22688
18605
18606        * interpreter/Interpreter.cpp:
18607        (JSC::Interpreter::cti_timeout_check):
18608        * interpreter/Interpreter.h:
18609        * jit/JIT.cpp:
18610        (JSC::JIT::emitSlowScriptCheck):
18611
186122008-12-05  Sam Weinig  <sam@webkit.org>
18613
18614        Reviewed by Geoffrey Garen.
18615
18616        Encapsulate access to jump tables in the CodeBlock in preparation
18617        of moving them to a rare data structure.
18618
18619        * bytecode/CodeBlock.cpp:
18620        (JSC::CodeBlock::dump):
18621        (JSC::CodeBlock::shrinkToFit):
18622        * bytecode/CodeBlock.h:
18623        (JSC::CodeBlock::numberOfImmediateSwitchJumpTables):
18624        (JSC::CodeBlock::addImmediateSwitchJumpTable):
18625        (JSC::CodeBlock::immediateSwitchJumpTable):
18626        (JSC::CodeBlock::numberOfCharacterSwitchJumpTables):
18627        (JSC::CodeBlock::addCharacterSwitchJumpTable):
18628        (JSC::CodeBlock::characterSwitchJumpTable):
18629        (JSC::CodeBlock::numberOfStringSwitchJumpTables):
18630        (JSC::CodeBlock::addStringSwitchJumpTable):
18631        (JSC::CodeBlock::stringSwitchJumpTable):
18632        * bytecompiler/BytecodeGenerator.cpp:
18633        (JSC::BytecodeGenerator::generate):
18634        (JSC::BytecodeGenerator::endSwitch):
18635        * interpreter/Interpreter.cpp:
18636        (JSC::Interpreter::privateExecute):
18637        (JSC::Interpreter::cti_op_switch_imm):
18638        (JSC::Interpreter::cti_op_switch_char):
18639        (JSC::Interpreter::cti_op_switch_string):
18640        * jit/JIT.cpp:
18641        (JSC::JIT::privateCompileMainPass):
18642
186432008-12-05  Adam Roben  <aroben@apple.com>
18644
18645        Windows build fix after r39020
18646
18647        * jit/JITInlineMethods.h:
18648        (JSC::JIT::restoreArgumentReference):
18649        (JSC::JIT::restoreArgumentReferenceForTrampoline):
18650        Add some apparently-missing __.
18651
186522008-12-04  Geoffrey Garen  <ggaren@apple.com>
18653
18654        Reviewed by Darin Adler.
18655        
18656        https://bugs.webkit.org/show_bug.cgi?id=22673
18657        
18658        Added support for the assertion (?=) and inverted assertion (?!) atoms
18659        in WREC.
18660
18661        * wrec/WRECGenerator.cpp:
18662        (JSC::WREC::Generator::generateParenthesesAssertion):
18663        (JSC::WREC::Generator::generateParenthesesInvertedAssertion): Split the
18664        old (unused) generateParentheses into these two functions, with more
18665        limited capabilities.
18666        
18667        * wrec/WRECGenerator.h:
18668        (JSC::WREC::Generator::): Moved an enum to the top of the class definition,
18669        to match the WebKit style, and removed a defunct comment.
18670
18671        * wrec/WRECParser.cpp:
18672        (JSC::WREC::Parser::parseParentheses):
18673        (JSC::WREC::Parser::consumeParenthesesType):
18674        * wrec/WRECParser.h:
18675        (JSC::WREC::Parser::): Added support for parsing (?=) and (?!).
18676
186772008-12-05  Simon Hausmann  <simon.hausmann@nokia.com>
18678
18679        Rubber-stamped by Tor Arne Vestbø.
18680
18681        Disable the JIT for the Qt build alltogether again, after observing
18682        more miscompilations in a wider range of newer gcc versions.
18683
18684        * JavaScriptCore.pri:
18685
186862008-12-05  Simon Hausmann  <simon.hausmann@nokia.com>
18687
18688        Reviewed by Tor Arne Vestbø.
18689
18690        Disable the JIT for the Qt build on Linux unless gcc is >= 4.2,
18691        due to miscompilations.
18692
18693        * JavaScriptCore.pri:
18694
186952008-12-04  Gavin Barraclough  <barraclough@apple.com>
18696
18697        Reviewed by Geoff Garen.
18698
18699        Start porting the JIT to use the MacroAssembler.
18700
18701        https://bugs.webkit.org/show_bug.cgi?id=22671
18702        No change in performance.
18703
18704        * assembler/MacroAssembler.h:
18705        (JSC::MacroAssembler::Jump::operator X86Assembler::JmpSrc):
18706        (JSC::MacroAssembler::add32):
18707        (JSC::MacroAssembler::and32):
18708        (JSC::MacroAssembler::lshift32):
18709        (JSC::MacroAssembler::rshift32):
18710        (JSC::MacroAssembler::storePtr):
18711        (JSC::MacroAssembler::store32):
18712        (JSC::MacroAssembler::poke):
18713        (JSC::MacroAssembler::move):
18714        (JSC::MacroAssembler::compareImm32ForBranchEquality):
18715        (JSC::MacroAssembler::jnePtr):
18716        (JSC::MacroAssembler::jnset32):
18717        (JSC::MacroAssembler::jset32):
18718        (JSC::MacroAssembler::jzeroSub32):
18719        (JSC::MacroAssembler::joverAdd32):
18720        (JSC::MacroAssembler::call):
18721        * assembler/X86Assembler.h:
18722        (JSC::X86Assembler::shll_i8r):
18723        * jit/JIT.cpp:
18724        (JSC::JIT::privateCompileMainPass):
18725        (JSC::JIT::privateCompile):
18726        (JSC::JIT::privateCompileCTIMachineTrampolines):
18727        * jit/JIT.h:
18728        * jit/JITArithmetic.cpp:
18729        (JSC::JIT::compileBinaryArithOp):
18730        * jit/JITInlineMethods.h:
18731        (JSC::JIT::emitGetVirtualRegister):
18732        (JSC::JIT::emitPutCTIArg):
18733        (JSC::JIT::emitPutCTIArgConstant):
18734        (JSC::JIT::emitGetCTIArg):
18735        (JSC::JIT::emitPutCTIArgFromVirtualRegister):
18736        (JSC::JIT::emitPutCTIParam):
18737        (JSC::JIT::emitGetCTIParam):
18738        (JSC::JIT::emitPutToCallFrameHeader):
18739        (JSC::JIT::emitPutImmediateToCallFrameHeader):
18740        (JSC::JIT::emitGetFromCallFrameHeader):
18741        (JSC::JIT::emitPutVirtualRegister):
18742        (JSC::JIT::emitInitRegister):
18743        (JSC::JIT::emitNakedCall):
18744        (JSC::JIT::restoreArgumentReference):
18745        (JSC::JIT::restoreArgumentReferenceForTrampoline):
18746        (JSC::JIT::emitCTICall):
18747        (JSC::JIT::checkStructure):
18748        (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
18749        (JSC::JIT::emitJumpSlowCaseIfNotImmNum):
18750        (JSC::JIT::emitJumpSlowCaseIfNotImmNums):
18751        (JSC::JIT::emitFastArithDeTagImmediate):
18752        (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
18753        (JSC::JIT::emitFastArithReTagImmediate):
18754        (JSC::JIT::emitFastArithPotentiallyReTagImmediate):
18755        (JSC::JIT::emitFastArithImmToInt):
18756        (JSC::JIT::emitFastArithIntToImmOrSlowCase):
18757        (JSC::JIT::emitFastArithIntToImmNoCheck):
18758        (JSC::JIT::emitTagAsBoolImmediate):
18759        * jit/JITPropertyAccess.cpp:
18760        (JSC::JIT::privateCompilePutByIdTransition):
18761
187622008-12-04  Geoffrey Garen  <ggaren@apple.com>
18763
18764        Reviewed by Oliver Hunt.
18765        
18766        Some refactoring for generateGreedyQuantifier.
18767        
18768        SunSpider reports no change (possibly a 0.3% speedup).
18769
18770        * wrec/WRECGenerator.cpp:
18771        (JSC::WREC::Generator::generateGreedyQuantifier): Clarified label
18772        meanings and unified some logic to simplify things.
18773
18774        * wrec/WRECParser.h:
18775        (JSC::WREC::Parser::parseAlternative): Added a version of parseAlternative
18776        that can jump to a Label, instead of a JumpList, upon failure. (Eventually,
18777        when we have a true Label class, this will be redundant.) This makes
18778        things easier for generateGreedyQuantifier, because it can avoid
18779        explicitly linking things.
18780
187812008-12-04  Simon Hausmann  <simon.hausmann@nokia.com>
18782
18783        Reviewed by Holger Freyther.
18784
18785        Fix crashes in the Qt build on Linux/i386 with non-executable memory
18786        by enabling TCSystemAlloc and the PROT_EXEC flag for mmap.
18787
18788        * JavaScriptCore.pri: Enable the use of TCSystemAlloc if the JIT is
18789        enabled.
18790        * wtf/TCSystemAlloc.cpp: Extend the PROT_EXEC permissions to
18791        PLATFORM(QT).
18792
187932008-12-04  Simon Hausmann  <simon.hausmann@nokia.com>
18794
18795        Reviewed by Tor Arne Vestbø.
18796
18797        Enable ENABLE_JIT_OPTIMIZE_CALL, ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS
18798        and ENABLE_JIT_OPTIMIZE_ARITHMETIC, as suggested by Niko.
18799
18800        * JavaScriptCore.pri: 
18801
188022008-12-04  Kent Hansen  <khansen@trolltech.com>
18803
18804        Reviewed by Simon Hausmann.
18805
18806        Enable the JSC jit for the Qt build by default for release builds on
18807        linux-g++ and win32-msvc.
18808
18809        * JavaScriptCore.pri:
18810
188112008-12-04  Gavin Barraclough  <barraclough@apple.com>
18812
18813        Reviewed by Oliver Hunt.
18814
18815        Allow JIT to function without property access repatching and arithmetic optimizations.
18816        Controlled by ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS and ENABLE_JIT_OPTIMIZE_ARITHMETIC switches.
18817
18818        https://bugs.webkit.org/show_bug.cgi?id=22643
18819
18820        * JavaScriptCore.xcodeproj/project.pbxproj:
18821        * jit/JIT.cpp:
18822        (JSC::JIT::privateCompileMainPass):
18823        (JSC::JIT::privateCompileSlowCases):
18824        * jit/JIT.h:
18825        * jit/JITArithmetic.cpp: Copied from jit/JIT.cpp.
18826        (JSC::JIT::compileBinaryArithOp):
18827        (JSC::JIT::compileBinaryArithOpSlowCase):
18828        * jit/JITPropertyAccess.cpp: Copied from jit/JIT.cpp.
18829        (JSC::JIT::compileGetByIdHotPath):
18830        (JSC::JIT::compileGetByIdSlowCase):
18831        (JSC::JIT::compilePutByIdHotPath):
18832        (JSC::JIT::compilePutByIdSlowCase):
18833        (JSC::resizePropertyStorage):
18834        (JSC::transitionWillNeedStorageRealloc):
18835        (JSC::JIT::privateCompilePutByIdTransition):
18836        (JSC::JIT::patchGetByIdSelf):
18837        (JSC::JIT::patchPutByIdReplace):
18838        (JSC::JIT::privateCompilePatchGetArrayLength):
18839        * wtf/Platform.h:
18840
188412008-12-03  Geoffrey Garen  <ggaren@apple.com>
18842
18843        Reviewed by Oliver Hunt.
18844        
18845        Optimized sequences of characters in regular expressions by comparing
18846        two characters at a time.
18847        
18848        1-2% speedup on SunSpider, 19-25% speedup on regexp-dna.
18849
18850        * assembler/MacroAssembler.h:
18851        (JSC::MacroAssembler::load32):
18852        (JSC::MacroAssembler::jge32): Filled out a few more macro methods.
18853
18854        * assembler/X86Assembler.h:
18855        (JSC::X86Assembler::movl_mr): Added a verion of movl_mr that operates
18856        without an offset, to allow the macro assembler to optmize for that case.
18857        
18858        * wrec/WREC.cpp:
18859        (JSC::WREC::Generator::compileRegExp): Test the saved value of index
18860        instead of the index register when checking for "end of input." The
18861        index register doesn't increment by 1 in an orderly fashion, so testing
18862        it for == "end of input" is not valid.
18863        
18864        Also, jump all the way to "return failure" upon reaching "end of input,"
18865        instead of executing the next alternative. This is more logical, and
18866        it's a slight optimization in the case of an expression with many alternatives.
18867
18868        * wrec/WRECGenerator.cpp:
18869        (JSC::WREC::Generator::generateIncrementIndex): Added support for
18870        jumping to a failure label in the case where the index has reached "end
18871        of input."
18872
18873        (JSC::WREC::Generator::generatePatternCharacterSequence):
18874        (JSC::WREC::Generator::generatePatternCharacterPair): This is the
18875        optmization. It's basically like generatePatternCharacter, but it runs two
18876        characters at a time.
18877        
18878        (JSC::WREC::Generator::generatePatternCharacter): Changed to use isASCII,
18879        since it's clearer than comparing to a magic hex value.
18880        
18881        * wrec/WRECGenerator.h:
18882
188832008-12-03  Gavin Barraclough  <barraclough@apple.com>
18884
18885        Reviewed by Cameron Zwarich.
18886
18887        Allow JIT to operate without the call-repatching optimization.
18888        Controlled by ENABLE(JIT_OPTIMIZE_CALL), defaults on, disabling
18889        this leads to significant performance regression.
18890
18891        https://bugs.webkit.org/show_bug.cgi?id=22639
18892
18893        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
18894        * JavaScriptCore.xcodeproj/project.pbxproj:
18895        * jit/JIT.cpp:
18896        (JSC::JIT::privateCompileSlowCases):
18897        * jit/JIT.h:
18898        * jit/JITCall.cpp: Copied from jit/JIT.cpp.
18899        (JSC::JIT::compileOpCallInitializeCallFrame):
18900        (JSC::JIT::compileOpCallSetupArgs):
18901        (JSC::JIT::compileOpCallEvalSetupArgs):
18902        (JSC::JIT::compileOpConstructSetupArgs):
18903        (JSC::JIT::compileOpCall):
18904        (JSC::JIT::compileOpCallSlowCase):
18905        (JSC::unreachable):
18906        * jit/JITInlineMethods.h: Copied from jit/JIT.cpp.
18907        (JSC::JIT::checkStructure):
18908        (JSC::JIT::emitFastArithPotentiallyReTagImmediate):
18909        (JSC::JIT::emitTagAsBoolImmediate):
18910        * wtf/Platform.h:
18911
189122008-12-03  Eric Seidel  <eric@webkit.org>
18913
18914        Rubber-stamped by David Hyatt.
18915
18916        Make HAVE_ACCESSIBILITY only define if !defined
18917
18918        * wtf/Platform.h:
18919
189202008-12-03  Sam Weinig  <sam@webkit.org>
18921
18922        Fix build.
18923
18924        * assembler/X86Assembler.h:
18925        (JSC::X86Assembler::orl_i32r):
18926
189272008-12-03  Sam Weinig  <sam@webkit.org>
18928
18929        Reviewed by Geoffrey Garen.
18930
18931        Remove shared AssemblerBuffer 1MB buffer and instead give AssemblerBuffer
18932        an 256 byte inline capacity.
18933
18934        1% progression on Sunspider.
18935
18936        * assembler/AssemblerBuffer.h:
18937        (JSC::AssemblerBuffer::AssemblerBuffer):
18938        (JSC::AssemblerBuffer::~AssemblerBuffer):
18939        (JSC::AssemblerBuffer::grow):
18940        * assembler/MacroAssembler.h:
18941        (JSC::MacroAssembler::MacroAssembler):
18942        * assembler/X86Assembler.h:
18943        (JSC::X86Assembler::X86Assembler):
18944        * interpreter/Interpreter.cpp:
18945        (JSC::Interpreter::Interpreter):
18946        * interpreter/Interpreter.h:
18947        * jit/JIT.cpp:
18948        (JSC::JIT::JIT):
18949        * parser/Nodes.cpp:
18950        (JSC::RegExpNode::emitBytecode):
18951        * runtime/RegExp.cpp:
18952        (JSC::RegExp::RegExp):
18953        (JSC::RegExp::create):
18954        * runtime/RegExp.h:
18955        * runtime/RegExpConstructor.cpp:
18956        (JSC::constructRegExp):
18957        * runtime/RegExpPrototype.cpp:
18958        (JSC::regExpProtoFuncCompile):
18959        * runtime/StringPrototype.cpp:
18960        (JSC::stringProtoFuncMatch):
18961        (JSC::stringProtoFuncSearch):
18962        * wrec/WREC.cpp:
18963        (JSC::WREC::Generator::compileRegExp):
18964        * wrec/WRECGenerator.h:
18965        (JSC::WREC::Generator::Generator):
18966        * wrec/WRECParser.h:
18967        (JSC::WREC::Parser::Parser):
18968
189692008-12-03  Geoffrey Garen  <ggaren@apple.com>
18970
18971        Reviewed by Oliver Hunt, with help from Gavin Barraclough.
18972        
18973        orl_i32r was actually coded as an 8bit OR. So, I renamed orl_i32r to
18974        orl_i8r, changed all orl_i32r clients to use orl_i8r, and then added
18975        a new orl_i32r that actually does a 32bit OR.
18976        
18977        (32bit OR is currently unused, but a patch I'm working on uses it.)
18978
18979        * assembler/MacroAssembler.h:
18980        (JSC::MacroAssembler::or32): Updated to choose between 8bit and 32bit OR.
18981
18982        * assembler/X86Assembler.h:
18983        (JSC::X86Assembler::orl_i8r): The old orl_i32r.
18984        (JSC::X86Assembler::orl_i32r): The new orl_i32r.
18985        
18986        * jit/JIT.cpp:
18987        (JSC::JIT::emitFastArithPotentiallyReTagImmediate):
18988        (JSC::JIT::emitTagAsBoolImmediate): Use orl_i8r, since we're ORing 8bit
18989        values.
18990
189912008-12-03  Dean Jackson  <dino@apple.com>
18992
18993        Reviewed by Dan Bernstein.
18994
18995        Helper functions for turn -> degrees.
18996        https://bugs.webkit.org/show_bug.cgi?id=22497
18997
18998        * wtf/MathExtras.h:
18999        (turn2deg):
19000        (deg2turn):
19001
190022008-12-02  Cameron Zwarich  <zwarich@apple.com>
19003
19004        Reviewed by Geoff Garen.
19005
19006        Bug 22504: Crashes during code generation occur due to refing of ignoredResult()
19007        <https://bugs.webkit.org/show_bug.cgi?id=22504>
19008
19009        Since ignoredResult() was implemented by casting 1 to a RegisterID*, any
19010        attempt to ref ignoredResult() results in a crash. This will occur in
19011        code generation of a function body where a node emits another node with
19012        the dst that was passed to it, and then refs the returned RegisterID*.
19013
19014        To fix this problem, make ignoredResult() a member function of
19015        BytecodeGenerator that simply returns a pointe to a fixed RegisterID
19016        member of BytecodeGenerator.
19017
19018        * bytecompiler/BytecodeGenerator.h:
19019        (JSC::BytecodeGenerator::ignoredResult):
19020        * bytecompiler/RegisterID.h:
19021        * parser/Nodes.cpp:
19022        (JSC::NullNode::emitBytecode):
19023        (JSC::BooleanNode::emitBytecode):
19024        (JSC::NumberNode::emitBytecode):
19025        (JSC::StringNode::emitBytecode):
19026        (JSC::RegExpNode::emitBytecode):
19027        (JSC::ThisNode::emitBytecode):
19028        (JSC::ResolveNode::emitBytecode):
19029        (JSC::ObjectLiteralNode::emitBytecode):
19030        (JSC::PostfixResolveNode::emitBytecode):
19031        (JSC::PostfixBracketNode::emitBytecode):
19032        (JSC::PostfixDotNode::emitBytecode):
19033        (JSC::DeleteValueNode::emitBytecode):
19034        (JSC::VoidNode::emitBytecode):
19035        (JSC::TypeOfResolveNode::emitBytecode):
19036        (JSC::TypeOfValueNode::emitBytecode):
19037        (JSC::PrefixResolveNode::emitBytecode):
19038        (JSC::AssignResolveNode::emitBytecode):
19039        (JSC::CommaNode::emitBytecode):
19040        (JSC::ForNode::emitBytecode):
19041        (JSC::ForInNode::emitBytecode):
19042        (JSC::ReturnNode::emitBytecode):
19043        (JSC::ThrowNode::emitBytecode):
19044        (JSC::FunctionBodyNode::emitBytecode):
19045        (JSC::FuncDeclNode::emitBytecode):
19046
190472008-12-02  Geoffrey Garen  <ggaren@apple.com>
19048
19049        Reviewed by Cameron Zwarich.
19050        
19051        Fixed https://bugs.webkit.org/show_bug.cgi?id=22537
19052        REGRESSION (r38745): Assertion failure in jsSubstring() at ge.com
19053
19054        The bug was that index would become greater than length, so our
19055        "end of input" checks, which all check "index == length", would fail.
19056        
19057        The solution is to check for end of input before incrementing index,
19058        to ensure that index is always <= length.
19059        
19060        As a side benefit, generateJumpIfEndOfInput can now use je instead of
19061        jg, which should be slightly faster.
19062
19063        * wrec/WREC.cpp:
19064        (JSC::WREC::Generator::compileRegExp):
19065        * wrec/WRECGenerator.cpp:
19066        (JSC::WREC::Generator::generateJumpIfEndOfInput):
19067
190682008-12-02  Gavin Barraclough  <barraclough@apple.com>
19069
19070        Reviewed by Geoffrey Garen.
19071
19072        Plant shift right immediate instructions, which are awesome.
19073        https://bugs.webkit.org/show_bug.cgi?id=22610
19074        ~5% on the v8-crypto test.
19075
19076        * jit/JIT.cpp:
19077        (JSC::JIT::privateCompileMainPass):
19078        (JSC::JIT::privateCompileSlowCases):
19079
190802008-12-02  Geoffrey Garen  <ggaren@apple.com>
19081
19082        Reviewed by Sam Weinig.
19083        
19084        Cleaned up SegmentedVector by abstracting segment access into helper
19085        functions.
19086        
19087        SunSpider reports no change.
19088
19089        * bytecompiler/SegmentedVector.h:
19090        (JSC::SegmentedVector::SegmentedVector):
19091        (JSC::SegmentedVector::~SegmentedVector):
19092        (JSC::SegmentedVector::size):
19093        (JSC::SegmentedVector::at):
19094        (JSC::SegmentedVector::operator[]):
19095        (JSC::SegmentedVector::last):
19096        (JSC::SegmentedVector::append):
19097        (JSC::SegmentedVector::removeLast):
19098        (JSC::SegmentedVector::grow):
19099        (JSC::SegmentedVector::clear):
19100        (JSC::SegmentedVector::deleteAllSegments):
19101        (JSC::SegmentedVector::segmentFor):
19102        (JSC::SegmentedVector::subscriptFor):
19103        (JSC::SegmentedVector::ensureSegmentsFor):
19104        (JSC::SegmentedVector::ensureSegment):
19105
191062008-12-02  Geoffrey Garen  <ggaren@apple.com>
19107
19108        Reviewed by Geoffrey Garen. (Patch by Cameron Zwarich <zwarich@apple.com>.)
19109        
19110        Fixed https://bugs.webkit.org/show_bug.cgi?id=22482
19111        REGRESSION (r37991): Occasionally see "Scene rendered incorrectly"
19112        message when running the V8 Raytrace benchmark
19113        
19114        Rolled out r37991. It didn't properly save xmm0, which is caller-save,
19115        before calling helper functions.
19116        
19117        SunSpider and v8 benchmarks show little change -- possibly a .2%
19118        SunSpider regression, possibly a .2% v8 benchmark speedup.
19119
19120        * assembler/X86Assembler.h:
19121        (JSC::X86Assembler::):
19122        * bytecode/CodeBlock.cpp:
19123        (JSC::CodeBlock::dump):
19124        * bytecode/Instruction.h:
19125        (JSC::Instruction::):
19126        * bytecompiler/BytecodeGenerator.cpp:
19127        (JSC::BytecodeGenerator::emitUnaryOp):
19128        * bytecompiler/BytecodeGenerator.h:
19129        (JSC::BytecodeGenerator::emitToJSNumber):
19130        (JSC::BytecodeGenerator::emitTypeOf):
19131        (JSC::BytecodeGenerator::emitGetPropertyNames):
19132        * interpreter/Interpreter.cpp:
19133        (JSC::Interpreter::privateExecute):
19134        * interpreter/Interpreter.h:
19135        * jit/JIT.cpp:
19136        (JSC::JIT::privateCompileMainPass):
19137        (JSC::JIT::privateCompileSlowCases):
19138        * jit/JIT.h:
19139        * parser/Nodes.cpp:
19140        (JSC::UnaryOpNode::emitBytecode):
19141        (JSC::BinaryOpNode::emitBytecode):
19142        (JSC::EqualNode::emitBytecode):
19143        * parser/ResultType.h:
19144        (JSC::ResultType::isReusable):
19145        (JSC::ResultType::mightBeNumber):
19146        * runtime/JSNumberCell.h:
19147
191482008-12-01  Gavin Barraclough  <barraclough@apple.com>
19149
19150        Reviewed by Geoffrey Garen.
19151
19152        Remove unused (sampling only, and derivable) argument to JIT::emitCTICall.
19153        https://bugs.webkit.org/show_bug.cgi?id=22587
19154
19155        * jit/JIT.cpp:
19156        (JSC::JIT::emitCTICall):
19157        (JSC::JIT::compileOpCall):
19158        (JSC::JIT::emitSlowScriptCheck):
19159        (JSC::JIT::compileBinaryArithOpSlowCase):
19160        (JSC::JIT::privateCompileMainPass):
19161        (JSC::JIT::privateCompileSlowCases):
19162        (JSC::JIT::privateCompile):
19163        * jit/JIT.h:
19164
191652008-12-02  Dimitri Glazkov  <dglazkov@chromium.org>
19166
19167        Reviewed by Eric Seidel.
19168        
19169        Fix the inheritance chain for JSFunction.
19170
19171        * runtime/JSFunction.cpp:
19172        (JSC::JSFunction::info): Add InternalFunction::info as parent class
19173
191742008-12-02  Simon Hausmann  <hausmann@webkit.org>
19175
19176        Reviewed by Tor Arne Vestbø.
19177
19178        Fix ability to include JavaScriptCore.pri from other .pro files.
19179
19180        * JavaScriptCore.pri: Moved -O3 setting into the .pro files.
19181        * JavaScriptCore.pro:
19182        * jsc.pro:
19183
191842008-12-01  Geoffrey Garen  <ggaren@apple.com>
19185
19186        Reviewed by Cameron Zwarich, with help from Gavin Barraclough.
19187        
19188        Fixed https://bugs.webkit.org/show_bug.cgi?id=22583.
19189
19190        Refactored regular expression parsing to parse sequences of characters
19191        as a single unit, in preparation for optimizing sequences of characters.
19192        
19193        SunSpider reports no change.
19194
19195        * JavaScriptCore.xcodeproj/project.pbxproj:
19196        * wrec/Escapes.h: Added. Set of classes for representing an escaped
19197        token in a pattern.
19198
19199        * wrec/Quantifier.h:
19200        (JSC::WREC::Quantifier::Quantifier): Simplified this constructor slightly,
19201        to match the new Escape constructor.
19202
19203        * wrec/WRECGenerator.cpp:
19204        (JSC::WREC::Generator::generatePatternCharacterSequence):
19205        * wrec/WRECGenerator.h: Added an interface for generating a sequence
19206        of pattern characters at a time. It doesn't do anything special yet.
19207
19208        * wrec/WRECParser.cpp:
19209        (JSC::WREC::Parser::consumeGreedyQuantifier):
19210        (JSC::WREC::Parser::consumeQuantifier): Renamed "parse" to "consume" in
19211        these functions, to match "consumeEscape."
19212
19213        (JSC::WREC::Parser::parsePatternCharacterSequence): New function for
19214        iteratively aggregating a sequence of characters in a pattern.
19215
19216        (JSC::WREC::Parser::parseCharacterClassQuantifier):
19217        (JSC::WREC::Parser::parseBackreferenceQuantifier): Renamed "parse" to
19218        "consume" in these functions, to match "consumeEscape."
19219
19220        (JSC::WREC::Parser::parseCharacterClass): Refactored to use the common
19221        escape processing code in consumeEscape.
19222
19223        (JSC::WREC::Parser::parseEscape): Refactored to use the common
19224        escape processing code in consumeEscape.
19225
19226        (JSC::WREC::Parser::consumeEscape): Factored escaped token processing
19227        into a common function, since we were doing this in a few places.
19228
19229        (JSC::WREC::Parser::parseTerm): Refactored to use the common
19230        escape processing code in consumeEscape.
19231
19232        * wrec/WRECParser.h:
19233        (JSC::WREC::Parser::consumeOctal): Refactored to use a helper function
19234        for reading a digit.
19235
192362008-12-01  Cameron Zwarich  <zwarich@apple.com>
19237
19238        Reviewed by Oliver Hunt.
19239
19240        Bug 20340: SegmentedVector segment allocations can lead to unsafe use of temporary registers
19241        <https://bugs.webkit.org/show_bug.cgi?id=20340>
19242
19243        SegmentedVector currently frees segments and reallocates them when used
19244        as a stack. This can lead to unsafe use of pointers into freed segments.
19245
19246        In order to fix this problem, SegmentedVector will be changed to only
19247        grow and never shrink. Also, rename the reserveCapacity() member
19248        function to grow() to match the actual usage in BytecodeGenerator, where
19249        this function is used to allocate a group of registers at once, rather
19250        than merely saving space for them.
19251
19252        * bytecompiler/BytecodeGenerator.cpp:
19253        (JSC::BytecodeGenerator::BytecodeGenerator): Use grow() instead of 
19254        reserveCapacity().
19255        * bytecompiler/SegmentedVector.h:
19256        (JSC::SegmentedVector::SegmentedVector):
19257        (JSC::SegmentedVector::last):
19258        (JSC::SegmentedVector::append):
19259        (JSC::SegmentedVector::removeLast):
19260        (JSC::SegmentedVector::grow): Renamed from reserveCapacity().
19261        (JSC::SegmentedVector::clear):
19262
192632008-12-01  Mark Rowe  <mrowe@apple.com>
19264
19265        Rubber-stamped by Anders Carlsson.
19266
19267        Disable WREC for x86_64 since memory allocated by the system allocator is not marked executable,
19268        which causes 64-bit debug builds to crash.  Once we have a dedicated allocator for executable
19269        memory we can turn this back on.
19270
19271        * wtf/Platform.h:
19272
192732008-12-01  Antti Koivisto  <antti@apple.com>
19274
19275        Reviewed by Maciej Stachowiak.
19276        
19277        Restore inline buffer after vector is shrunk back below its inline capacity.
19278
19279        * wtf/Vector.h:
19280        (WTF::):
19281        (WTF::VectorBuffer::restoreInlineBufferIfNeeded):
19282        (WTF::::shrinkCapacity):
19283
192842008-11-30  Antti Koivisto  <antti@apple.com>
19285
19286        Reviewed by Mark Rowe.
19287        
19288        Try to return free pages in the current thread cache too.
19289
19290        * wtf/FastMalloc.cpp:
19291        (WTF::TCMallocStats::releaseFastMallocFreeMemory):
19292
192932008-12-01  David Levin  <levin@chromium.org>
19294
19295        Reviewed by Alexey Proskuryakov.
19296
19297        https://bugs.webkit.org/show_bug.cgi?id=22567
19298        Make HashTable work as expected with respect to threads. Specifically, it has class-level
19299        thread safety and constant methods work on constant objects without synchronization.
19300        
19301        No observable change in behavior, so no test. This only affects debug builds.
19302
19303        * wtf/HashTable.cpp:
19304        (WTF::hashTableStatsMutex):
19305        (WTF::HashTableStats::~HashTableStats):
19306        (WTF::HashTableStats::recordCollisionAtCount):
19307        Guarded variable access with a mutex.
19308
19309        * wtf/HashTable.h:
19310        (WTF::::lookup):
19311        (WTF::::lookupForWriting):
19312        (WTF::::fullLookupForWriting):
19313        (WTF::::add):
19314        (WTF::::reinsert):
19315        (WTF::::remove):
19316        (WTF::::rehash):
19317        Changed increments of static variables to use atomicIncrement.
19318
19319        (WTF::::invalidateIterators):
19320        (WTF::addIterator):
19321        (WTF::removeIterator):
19322        Guarded mutable access with a mutex.
19323
193242008-11-29  Gavin Barraclough  <barraclough@apple.com>
19325
19326        Reviewed by Cameron Zwarich.
19327
19328        Enable WREC on PLATFORM(X86_64).  This change predominantly requires changes to the
19329        WREC::Generator::generateEnter method to support the x86-64 ABI, and addition of
19330        support for a limited number of quadword operations in the X86Assembler.
19331
19332        This patch will cause the JS heap to be allocated with RWX permissions on 64-bit Mac
19333        platforms.  This is a regression with respect to previous 64-bit behaviour, but is no
19334        more permissive than on 32-bit builds.  This issue should be addressed at some point.
19335        (This is tracked by bug #21783.)
19336
19337        https://bugs.webkit.org/show_bug.cgi?id=22554
19338        Greater than 4x speedup on regexp-dna, on x86-64.
19339
19340        * assembler/MacroAssembler.h:
19341        (JSC::MacroAssembler::addPtr):
19342        (JSC::MacroAssembler::loadPtr):
19343        (JSC::MacroAssembler::storePtr):
19344        (JSC::MacroAssembler::pop):
19345        (JSC::MacroAssembler::push):
19346        (JSC::MacroAssembler::move):
19347        * assembler/X86Assembler.h:
19348        (JSC::X86Assembler::):
19349        (JSC::X86Assembler::movq_rr):
19350        (JSC::X86Assembler::addl_i8m):
19351        (JSC::X86Assembler::addl_i32r):
19352        (JSC::X86Assembler::addq_i8r):
19353        (JSC::X86Assembler::addq_i32r):
19354        (JSC::X86Assembler::movq_mr):
19355        (JSC::X86Assembler::movq_rm):
19356        * wrec/WREC.h:
19357        * wrec/WRECGenerator.cpp:
19358        (JSC::WREC::Generator::generateEnter):
19359        (JSC::WREC::Generator::generateReturnSuccess):
19360        (JSC::WREC::Generator::generateReturnFailure):
19361        * wtf/Platform.h:
19362        * wtf/TCSystemAlloc.cpp:
19363
193642008-12-01  Cameron Zwarich  <zwarich@apple.com>
19365
19366        Reviewed by Sam Weinig.
19367
19368        Preliminary work for bug 20340: SegmentedVector segment allocations can lead to unsafe use of temporary registers
19369        <https://bugs.webkit.org/show_bug.cgi?id=20340>
19370
19371        SegmentedVector currently frees segments and reallocates them when used
19372        as a stack. This can lead to unsafe use of pointers into freed segments.
19373
19374        In order to fix this problem, SegmentedVector will be changed to only
19375        grow and never shrink, with the sole exception of clearing all of its
19376        data, a capability that is required by Lexer. This patch changes the
19377        public interface to only allow for these capabilities.
19378
19379        * bytecompiler/BytecodeGenerator.cpp:
19380        (JSC::BytecodeGenerator::BytecodeGenerator): Use reserveCapacity()
19381        instead of resize() for m_globals and m_parameters.
19382        * bytecompiler/SegmentedVector.h:
19383        (JSC::SegmentedVector::resize): Removed.
19384        (JSC::SegmentedVector::reserveCapacity): Added.
19385        (JSC::SegmentedVector::clear): Added.
19386        (JSC::SegmentedVector::shrink): Removed.
19387        (JSC::SegmentedVector::grow): Removed.
19388        * parser/Lexer.cpp:
19389        (JSC::Lexer::clear): Use clear() instead of resize(0).
19390
193912008-11-30  Sam Weinig  <sam@webkit.org>
19392
19393        Reviewed by Mark Rowe.
19394
19395        Renames jumps to m_jumps in JumpList.
19396
19397        * assembler/MacroAssembler.h:
19398        (JSC::MacroAssembler::JumpList::link):
19399        (JSC::MacroAssembler::JumpList::linkTo):
19400        (JSC::MacroAssembler::JumpList::append):
19401
194022008-11-30  Antti Koivisto  <antti@apple.com>
19403
19404        Reviewed by Mark Rowe.
19405        
19406        https://bugs.webkit.org/show_bug.cgi?id=22557
19407        
19408        Report free size in central and thread caches too.
19409
19410        * wtf/FastMalloc.cpp:
19411        (WTF::TCMallocStats::fastMallocStatistics):
19412        * wtf/FastMalloc.h:
19413
194142008-11-29  Antti Koivisto  <antti@apple.com>
19415
19416        Reviewed by Dan Bernstein.
19417        
19418        https://bugs.webkit.org/show_bug.cgi?id=22557
19419        Add statistics for JavaScript GC heap.
19420
19421        * JavaScriptCore.exp:
19422        * runtime/Collector.cpp:
19423        (JSC::Heap::objectCount):
19424        (JSC::addToStatistics):
19425        (JSC::Heap::statistics):
19426        * runtime/Collector.h:
19427
194282008-11-29  Antti Koivisto  <antti@apple.com>
19429
19430        Fix debug build by adding a stub method.
19431
19432        * wtf/FastMalloc.cpp:
19433        (WTF::fastMallocStatistics):
19434
194352008-11-29  Antti Koivisto  <antti@apple.com>
19436
19437        Reviewed by Alexey Proskuryakov.
19438        
19439        https://bugs.webkit.org/show_bug.cgi?id=22557
19440        
19441        Add function for getting basic statistics from FastMalloc.
19442
19443        * JavaScriptCore.exp:
19444        * wtf/FastMalloc.cpp:
19445        (WTF::DLL_Length):
19446        (WTF::TCMalloc_PageHeap::ReturnedBytes):
19447        (WTF::TCMallocStats::fastMallocStatistics):
19448        * wtf/FastMalloc.h:
19449
194502008-11-29  Cameron Zwarich  <zwarich@apple.com>
19451
19452        Not reviewed.
19453
19454        The C++ standard does not automatically grant the friendships of an
19455        enclosing class to its nested subclasses, so we should do so explicitly.
19456        This fixes the GCC 4.0 build, although both GCC 4.2 and Visual C++ 2005
19457        accept the incorrect code as it is.
19458
19459        * assembler/MacroAssembler.h:
19460
194612008-11-29  Gavin Barraclough  <barraclough@apple.com>
19462
19463        Reviewed by Cameron Zwarich.
19464
19465        Add the class MacroAssembler to provide some abstraction of code generation,
19466        and change WREC to make use of this class, rather than directly accessing
19467        the X86Assembler.
19468
19469        This patch also allows WREC to be compiled without the rest of the JIT enabled.
19470
19471        * JavaScriptCore.xcodeproj/project.pbxproj:
19472        * assembler/MacroAssembler.h: Added.
19473        (JSC::MacroAssembler::):
19474        (JSC::MacroAssembler::MacroAssembler):
19475        (JSC::MacroAssembler::copyCode):
19476        (JSC::MacroAssembler::Address::Address):
19477        (JSC::MacroAssembler::ImplicitAddress::ImplicitAddress):
19478        (JSC::MacroAssembler::BaseIndex::BaseIndex):
19479        (JSC::MacroAssembler::Label::Label):
19480        (JSC::MacroAssembler::Jump::Jump):
19481        (JSC::MacroAssembler::Jump::link):
19482        (JSC::MacroAssembler::Jump::linkTo):
19483        (JSC::MacroAssembler::JumpList::link):
19484        (JSC::MacroAssembler::JumpList::linkTo):
19485        (JSC::MacroAssembler::JumpList::append):
19486        (JSC::MacroAssembler::Imm32::Imm32):
19487        (JSC::MacroAssembler::add32):
19488        (JSC::MacroAssembler::or32):
19489        (JSC::MacroAssembler::sub32):
19490        (JSC::MacroAssembler::loadPtr):
19491        (JSC::MacroAssembler::load32):
19492        (JSC::MacroAssembler::load16):
19493        (JSC::MacroAssembler::storePtr):
19494        (JSC::MacroAssembler::store32):
19495        (JSC::MacroAssembler::pop):
19496        (JSC::MacroAssembler::push):
19497        (JSC::MacroAssembler::peek):
19498        (JSC::MacroAssembler::poke):
19499        (JSC::MacroAssembler::move):
19500        (JSC::MacroAssembler::compareImm32ForBranch):
19501        (JSC::MacroAssembler::compareImm32ForBranchEquality):
19502        (JSC::MacroAssembler::jae32):
19503        (JSC::MacroAssembler::je32):
19504        (JSC::MacroAssembler::je16):
19505        (JSC::MacroAssembler::jg32):
19506        (JSC::MacroAssembler::jge32):
19507        (JSC::MacroAssembler::jl32):
19508        (JSC::MacroAssembler::jle32):
19509        (JSC::MacroAssembler::jne32):
19510        (JSC::MacroAssembler::jump):
19511        (JSC::MacroAssembler::breakpoint):
19512        (JSC::MacroAssembler::ret):
19513        * assembler/X86Assembler.h:
19514        (JSC::X86Assembler::cmpw_rm):
19515        * interpreter/Interpreter.cpp:
19516        (JSC::Interpreter::Interpreter):
19517        * interpreter/Interpreter.h:
19518        (JSC::Interpreter::assemblerBuffer):
19519        * runtime/RegExp.cpp:
19520        (JSC::RegExp::RegExp):
19521        * wrec/WREC.cpp:
19522        (JSC::WREC::Generator::compileRegExp):
19523        * wrec/WREC.h:
19524        * wrec/WRECFunctors.cpp:
19525        (JSC::WREC::GeneratePatternCharacterFunctor::generateAtom):
19526        (JSC::WREC::GenerateCharacterClassFunctor::generateAtom):
19527        (JSC::WREC::GenerateBackreferenceFunctor::generateAtom):
19528        (JSC::WREC::GenerateParenthesesNonGreedyFunctor::generateAtom):
19529        * wrec/WRECFunctors.h:
19530        (JSC::WREC::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor):
19531        * wrec/WRECGenerator.cpp:
19532        (JSC::WREC::Generator::generateEnter):
19533        (JSC::WREC::Generator::generateReturnSuccess):
19534        (JSC::WREC::Generator::generateSaveIndex):
19535        (JSC::WREC::Generator::generateIncrementIndex):
19536        (JSC::WREC::Generator::generateLoadCharacter):
19537        (JSC::WREC::Generator::generateJumpIfEndOfInput):
19538        (JSC::WREC::Generator::generateJumpIfNotEndOfInput):
19539        (JSC::WREC::Generator::generateReturnFailure):
19540        (JSC::WREC::Generator::generateBacktrack1):
19541        (JSC::WREC::Generator::generateBacktrackBackreference):
19542        (JSC::WREC::Generator::generateBackreferenceQuantifier):
19543        (JSC::WREC::Generator::generateNonGreedyQuantifier):
19544        (JSC::WREC::Generator::generateGreedyQuantifier):
19545        (JSC::WREC::Generator::generatePatternCharacter):
19546        (JSC::WREC::Generator::generateCharacterClassInvertedRange):
19547        (JSC::WREC::Generator::generateCharacterClassInverted):
19548        (JSC::WREC::Generator::generateCharacterClass):
19549        (JSC::WREC::Generator::generateParentheses):
19550        (JSC::WREC::Generator::generateParenthesesNonGreedy):
19551        (JSC::WREC::Generator::generateParenthesesResetTrampoline):
19552        (JSC::WREC::Generator::generateAssertionBOL):
19553        (JSC::WREC::Generator::generateAssertionEOL):
19554        (JSC::WREC::Generator::generateAssertionWordBoundary):
19555        (JSC::WREC::Generator::generateBackreference):
19556        (JSC::WREC::Generator::terminateAlternative):
19557        (JSC::WREC::Generator::terminateDisjunction):
19558        * wrec/WRECGenerator.h:
19559        (JSC::WREC::Generator::Generator):
19560        * wrec/WRECParser.cpp:
19561        (JSC::WREC::Parser::parsePatternCharacterQualifier):
19562        (JSC::WREC::Parser::parseCharacterClassQuantifier):
19563        (JSC::WREC::Parser::parseBackreferenceQuantifier):
19564        (JSC::WREC::Parser::parseParentheses):
19565        (JSC::WREC::Parser::parseCharacterClass):
19566        (JSC::WREC::Parser::parseOctalEscape):
19567        (JSC::WREC::Parser::parseEscape):
19568        (JSC::WREC::Parser::parseTerm):
19569        (JSC::WREC::Parser::parseDisjunction):
19570        * wrec/WRECParser.h:
19571        (JSC::WREC::Parser::Parser):
19572        (JSC::WREC::Parser::parsePattern):
19573        (JSC::WREC::Parser::parseAlternative):
19574        * wtf/Platform.h:
19575
195762008-11-28  Simon Hausmann  <hausmann@webkit.org>
19577
19578        Reviewed by Tor Arne Vestbø.
19579
19580        Fix compilation on Windows CE
19581
19582        Port away from the use of errno after calling strtol(), instead
19583        detect conversion errors by checking the result and the stop
19584        position.
19585
19586        * runtime/DateMath.cpp:
19587        (JSC::parseLong):
19588        (JSC::parseDate):
19589
195902008-11-28  Joerg Bornemann  <joerg.bornemann@trolltech.com>
19591
19592        Reviewed by Simon Hausmann.
19593
19594        Implement lowResUTCTime() on Windows CE using GetSystemTime as _ftime() is not available.
19595
19596        * runtime/DateMath.cpp:
19597        (JSC::lowResUTCTime):
19598
195992008-11-28  Simon Hausmann  <hausmann@webkit.org>
19600
19601        Rubber-stamped by Tor Arne Vestbø.
19602
19603        Removed unnecessary inclusion of errno.h, which also fixes compilation on Windows CE.
19604
19605        * runtime/JSGlobalObjectFunctions.cpp:
19606
196072008-11-27  Cameron Zwarich  <zwarich@apple.com>
19608
19609        Not reviewed.
19610
19611        r38825 made JSFunction::m_body private, but some inspector code in
19612        WebCore sets the field. Add setters for it.
19613
19614        * runtime/JSFunction.h:
19615        (JSC::JSFunction::setBody):
19616
196172008-11-27  Sam Weinig  <sam@webkit.org>
19618
19619        Reviewed by Cameron Zwarich.
19620
19621        Fix FIXME by adding accessor for JSFunction's m_body property.
19622
19623        * interpreter/Interpreter.cpp:
19624        (JSC::Interpreter::cti_op_call_JSFunction):
19625        (JSC::Interpreter::cti_vm_dontLazyLinkCall):
19626        (JSC::Interpreter::cti_vm_lazyLinkCall):
19627        * profiler/Profiler.cpp:
19628        (JSC::createCallIdentifierFromFunctionImp):
19629        * runtime/Arguments.h:
19630        (JSC::Arguments::getArgumentsData):
19631        (JSC::Arguments::Arguments):
19632        * runtime/FunctionPrototype.cpp:
19633        (JSC::functionProtoFuncToString):
19634        * runtime/JSFunction.h:
19635        (JSC::JSFunction::JSFunction):
19636        (JSC::JSFunction::body):
19637
196382008-11-27  Sam Weinig  <sam@webkit.org>
19639
19640        Reviewed by Oliver Hunt.
19641
19642        Remove unused member variables from ProgramNode.
19643
19644        * parser/Nodes.h:
19645
196462008-11-27  Brent Fulgham  <bfulgham@gmail.com>
19647
19648        Reviewed by Alexey Proskuryakov.
19649
19650        Enable mouse panning feaure on Windows Cairo build.
19651        See http://bugs.webkit.org/show_bug.cgi?id=22525
19652
19653        * wtf/Platform.h: Enable mouse panning feaure on Windows Cairo build.
19654
196552008-11-27  Alp Toker  <alp@nuanti.com>
19656
19657        Change recently introduced C++ comments in Platform.h to C comments to
19658        fix the minidom build with traditional C.
19659
19660        Build GtkLauncher and minidom with the '-ansi' compiler flag to detect
19661        API header breakage at build time.
19662
19663        * GNUmakefile.am:
19664        * wtf/Platform.h:
19665
196662008-11-27  Alp Toker  <alp@nuanti.com>
19667
19668        Remove C++ comment from JavaScriptCore API headers (introduced r35449).
19669        Fixes build for ANSI C applications using the public API.
19670
19671        * API/WebKitAvailability.h:
19672
196732008-11-26  Eric Seidel  <eric@webkit.org>
19674
19675        No review, build fix only.
19676
19677        Fix the JSC Chromium Mac build by adding JavaScriptCore/icu into the include path
19678
19679        * JavaScriptCore.scons:
19680
196812008-11-25  Cameron Zwarich  <zwarich@apple.com>
19682
19683        Reviewed by Maciej Stachowiak.
19684
19685        Remove the unused member function JSFunction::getParameterName().
19686
19687        * runtime/JSFunction.cpp:
19688        * runtime/JSFunction.h:
19689
196902008-11-24  Gavin Barraclough  <barraclough@apple.com>
19691
19692        Reviewed by Geoff Garen.
19693
19694        Polymorpic caching for get by id chain.  Similar to the polymorphic caching already implemented
19695        for self and proto accesses (implemented by allowing multiple trampolines to be JIT genertaed,
19696        and linked together) - the get by id chain caching is implemented as a genericization of the
19697        proto list caching, allowing cached access lists to contain a mix of proto and proto chain
19698        accesses (since in JS style inheritance hierarchies you may commonly see a mix of properties
19699        being overridden on the direct prototype, or higher up its prototype chain).
19700
19701        In order to allow this patch to compile there is a fix to appease gcc 4.2 compiler issues
19702        (removing the jumps between fall-through cases in privateExecute).
19703        
19704        This patch also removes redundant immediate checking from the reptach code, and fixes a related
19705        memory leak (failure to deallocate trampolines). 
19706
19707        ~2% progression on v8 tests (bulk on the win on deltablue)
19708
19709        * bytecode/Instruction.h:
19710        (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::):
19711        (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
19712        (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
19713        (JSC::PolymorphicAccessStructureList::derefStructures):
19714        * interpreter/Interpreter.cpp:
19715        (JSC::countPrototypeChainEntriesAndCheckForProxies):
19716        (JSC::Interpreter::tryCacheGetByID):
19717        (JSC::Interpreter::privateExecute):
19718        (JSC::Interpreter::tryCTICacheGetByID):
19719        (JSC::Interpreter::cti_op_get_by_id_self_fail):
19720        (JSC::getPolymorphicAccessStructureListSlot):
19721        (JSC::Interpreter::cti_op_get_by_id_proto_list):
19722        * interpreter/Interpreter.h:
19723        * jit/JIT.cpp:
19724        (JSC::JIT::privateCompileGetByIdProto):
19725        (JSC::JIT::privateCompileGetByIdSelfList):
19726        (JSC::JIT::privateCompileGetByIdProtoList):
19727        (JSC::JIT::privateCompileGetByIdChainList):
19728        (JSC::JIT::privateCompileGetByIdChain):
19729        (JSC::JIT::privateCompilePatchGetArrayLength):
19730        * jit/JIT.h:
19731        (JSC::JIT::compileGetByIdChainList):
19732
197332008-11-25  Cameron Zwarich  <zwarich@apple.com>
19734
19735        Reviewed by Alexey Proskuryakov.
19736
19737        Move the collect() call in Heap::heapAllocate() that is conditionally
19738        compiled under COLLECT_ON_EVERY_ALLOCATION so that it is before we get
19739        information about the heap. This was causing assertion failures for me
19740        while I was reducing a bug.
19741
19742        * runtime/Collector.cpp:
19743        (JSC::Heap::heapAllocate):
19744
197452008-11-24  Cameron Zwarich  <zwarich@apple.com>
19746
19747        Reviewed by Geoff Garen.
19748
19749        Bug 13790: Function declarations are not treated as statements (used to affect starcraft2.com)
19750        <https://bugs.webkit.org/show_bug.cgi?id=13790>
19751
19752        Modify the parser to treat function declarations as statements,
19753        simplifying the grammar in the process. Technically, according to the
19754        grammar in the ECMA spec, function declarations are not statements and
19755        can not be used everywhere that statements can, but it is not worth the
19756        possibility compatibility issues just to stick to the spec in this case.
19757
19758        * parser/Grammar.y:
19759        * parser/Nodes.cpp:
19760        (JSC::FuncDeclNode::emitBytecode): Avoid returning ignoredResult()
19761        as a result, because it causes a crash in DoWhileNode::emitBytecode().
19762
197632008-11-24  Geoffrey Garen  <ggaren@apple.com>
19764
19765        Reviewed by Sam Weinig.
19766        
19767        Unroll the regexp matching loop by 1. 10% speedup on simple matching
19768        stress test. No change on SunSpider.
19769        
19770        (I decided not to unroll to arbitrary levels because the returns diminsh
19771        quickly.)
19772
19773        * wrec/WREC.cpp:
19774        (JSC::WREC::compileRegExp):
19775        * wrec/WRECGenerator.cpp:
19776        (JSC::WREC::Generator::generateJumpIfEndOfInput):
19777        (JSC::WREC::Generator::generateJumpIfNotEndOfInput):
19778        * wrec/WRECGenerator.h:
19779        * wrec/WRECParser.h:
19780        (JSC::WREC::Parser::error):
19781        (JSC::WREC::Parser::parsePattern):
19782
197832008-11-24  Geoffrey Garen  <ggaren@apple.com>
19784
19785        Reviewed by Sam Weinig.
19786        
19787        Removed some unnecessary "Generator::" prefixes.
19788
19789        * wrec/WRECGenerator.cpp:
19790        (JSC::WREC::Generator::generateEnter):
19791        (JSC::WREC::Generator::generateReturnSuccess):
19792        (JSC::WREC::Generator::generateSaveIndex):
19793        (JSC::WREC::Generator::generateIncrementIndex):
19794        (JSC::WREC::Generator::generateLoopIfNotEndOfInput):
19795        (JSC::WREC::Generator::generateReturnFailure):
19796
197972008-11-24  Geoffrey Garen  <ggaren@apple.com>
19798
19799        Reviewed by Sam Weinig.
19800        
19801        Made a bunch of WREC::Parser functions private, and added an explicit
19802        "reset()" function, so a parser can be reused.
19803
19804        * wrec/WRECParser.h:
19805        (JSC::WREC::Parser::Parser):
19806        (JSC::WREC::Parser::generator):
19807        (JSC::WREC::Parser::ignoreCase):
19808        (JSC::WREC::Parser::multiline):
19809        (JSC::WREC::Parser::recordSubpattern):
19810        (JSC::WREC::Parser::numSubpatterns):
19811        (JSC::WREC::Parser::parsePattern):
19812        (JSC::WREC::Parser::parseAlternative):
19813        (JSC::WREC::Parser::reset):
19814
198152008-11-24  Gavin Barraclough  <barraclough@apple.com>
19816
19817        Reviewed by Cameron Zwarich.
19818
19819        Implement repatching for get by id chain.
19820        Previously the access is performed in a function stub, in the repatch form
19821        the trampoline is not called to; instead the hot path is relinked to jump
19822        directly to the trampoline, if it fails it will jump to the slow case.
19823
19824        https://bugs.webkit.org/show_bug.cgi?id=22449
19825        3% progression on deltablue.
19826
19827        * jit/JIT.cpp:
19828        (JSC::JIT::privateCompileGetByIdProto):
19829        (JSC::JIT::privateCompileGetByIdChain):
19830
198312008-11-24  Joerg Bornemann  <joerg.bornemann@trolltech.com>
19832
19833        Reviewed by Simon Hausmann.
19834
19835        https://bugs.webkit.org/show_bug.cgi?id=20746
19836
19837        Various small compilation fixes to make the Qt port of WebKit
19838        compile on Windows CE.
19839
19840        * config.h: Don't set _CRT_RAND_S for CE, it's not available.
19841        * jsc.cpp: Disabled use of debugger includes for CE. It
19842          does not have the debugging functions.
19843        * runtime/DateMath.cpp: Use localtime() on Windows CE.
19844        * wtf/Assertions.cpp: Compile on Windows CE without debugger.
19845        * wtf/Assertions.h: Include windows.h before defining ASSERT.
19846        * wtf/MathExtras.h: Include stdlib.h instead of xmath.h.
19847        * wtf/Platform.h: Disable ERRNO_H and detect endianess based
19848          on the Qt endianess. On Qt for Windows CE the endianess is
19849          defined by the vendor specific build spec.
19850        * wtf/Threading.h: Use the volatile-less atomic functions.
19851        * wtf/dtoa.cpp: Compile without errno.
19852        * wtf/win/MainThreadWin.cpp: Don't include windows.h on CE after
19853        Assertions.h due to the redefinition of ASSERT.
19854
198552008-11-22  Gavin Barraclough  <barraclough@apple.com>
19856
19857        Reviewed by Cameron Zwarich.
19858
19859        Replace accidentally deleted immediate check from get by id chain trampoline.
19860        https://bugs.webkit.org/show_bug.cgi?id=22413
19861
19862        * jit/JIT.cpp:
19863        (JSC::JIT::privateCompileGetByIdChain):
19864
198652008-11-21  Gavin Barraclough  <barraclough@apple.com>
19866
19867        Reviewed by Oliver Hunt.
19868
19869        Add (really) polymorphic caching for get by id self.
19870        Very similar to caching of prototype accesses, described below.
19871
19872        Oh, also, probably shouldn't have been leaking those structure list objects.
19873        
19874        4% preogression on deltablue.
19875
19876        * bytecode/CodeBlock.cpp:
19877        (JSC::CodeBlock::dump):
19878        (JSC::CodeBlock::derefStructures):
19879        (JSC::PrototypeStructureList::derefStructures):
19880        * bytecode/Instruction.h:
19881        * bytecode/Opcode.h:
19882        * interpreter/Interpreter.cpp:
19883        (JSC::Interpreter::privateExecute):
19884        (JSC::Interpreter::cti_op_get_by_id_self_fail):
19885        * jit/JIT.cpp:
19886        (JSC::JIT::privateCompileMainPass):
19887        (JSC::JIT::privateCompileGetByIdSelfList):
19888        (JSC::JIT::patchGetByIdSelf):
19889        * jit/JIT.h:
19890        (JSC::JIT::compileGetByIdSelfList):
19891
198922008-11-21  Geoffrey Garen  <ggaren@apple.com>
19893
19894        Reviewed by Sam Weinig.
19895        
19896        Fixed many crashes seen 'round the world (but only in release builds).
19897        
19898        Update outputParameter offset to reflect slight re-ordering of push
19899        instructions in r38669.
19900
19901        * wrec/WRECGenerator.cpp:
19902
199032008-11-21  Geoffrey Garen  <ggaren@apple.com>
19904
19905        Reviewed by Sam Weinig.
19906        
19907        A little more RegExp refactoring.
19908        
19909        Deployed a helper function for reading the next character. Used the "link
19910        vector of jumps" helper in a place I missed before.
19911
19912        * wrec/WRECGenerator.cpp:
19913        (JSC::WREC::Generator::generateLoadCharacter):
19914        (JSC::WREC::Generator::generatePatternCharacter):
19915        (JSC::WREC::Generator::generateCharacterClass):
19916        (JSC::WREC::Generator::generateAssertionEOL):
19917        (JSC::WREC::Generator::generateAssertionWordBoundary):
19918        * wrec/WRECGenerator.h:
19919
199202008-11-21  Alexey Proskuryakov  <ap@webkit.org>
19921
19922        Reviewed by Dan Bernstein.
19923
19924        https://bugs.webkit.org/show_bug.cgi?id=22402
19925        Replace abort() with CRASH()
19926
19927        * wtf/Assertions.h: Added a different method to crash, which should work even is 0xbbadbeef
19928        is a valid memory address.
19929
19930        * runtime/Collector.cpp:
19931        * wtf/FastMalloc.cpp:
19932        * wtf/FastMalloc.h:
19933        * wtf/TCSpinLock.h:
19934        Replace abort() with CRASH().
19935
199362008-11-21  Alexey Proskuryakov  <ap@webkit.org>
19937
19938        Reverted fix for bug 22042 (Replace abort() with CRASH()), because it was breaking
19939        FOR_EACH_OPCODE_ID macro somehow, making Safari crash.
19940
19941        * runtime/Collector.cpp:
19942        (JSC::Heap::heapAllocate):
19943        (JSC::Heap::collect):
19944        * wtf/Assertions.h:
19945        * wtf/FastMalloc.cpp:
19946        (WTF::fastMalloc):
19947        (WTF::fastCalloc):
19948        (WTF::fastRealloc):
19949        (WTF::InitSizeClasses):
19950        (WTF::PageHeapAllocator::New):
19951        (WTF::TCMallocStats::do_malloc):
19952        * wtf/FastMalloc.h:
19953        * wtf/TCSpinLock.h:
19954        (TCMalloc_SpinLock::Init):
19955        (TCMalloc_SpinLock::Finalize):
19956        (TCMalloc_SpinLock::Lock):
19957        (TCMalloc_SpinLock::Unlock):
19958
199592008-11-21  Geoffrey Garen  <ggaren@apple.com>
19960
19961        Reviewed by Sam Weinig.
19962        
19963        A little more RegExp refactoring.
19964        
19965        Moved all assembly from WREC.cpp into WRECGenerator helper functions.
19966        This should help with portability and readability.
19967        
19968        Removed ASSERTs after calls to executableCopy(), and changed
19969        executableCopy() to ASSERT instead.
19970
19971        * assembler/X86Assembler.h:
19972        (JSC::X86Assembler::executableCopy):
19973        * jit/JIT.cpp:
19974        (JSC::JIT::privateCompile):
19975        (JSC::JIT::privateCompileGetByIdSelf):
19976        (JSC::JIT::privateCompileGetByIdProto):
19977        (JSC::JIT::privateCompileGetByIdChain):
19978        (JSC::JIT::privateCompilePutByIdReplace):
19979        (JSC::JIT::privateCompilePutByIdTransition):
19980        (JSC::JIT::privateCompileCTIMachineTrampolines):
19981        (JSC::JIT::privateCompilePatchGetArrayLength):
19982        * wrec/WREC.cpp:
19983        (JSC::WREC::compileRegExp):
19984        * wrec/WRECGenerator.cpp:
19985        (JSC::WREC::Generator::generateEnter):
19986        (JSC::WREC::Generator::generateReturnSuccess):
19987        (JSC::WREC::Generator::generateSaveIndex):
19988        (JSC::WREC::Generator::generateIncrementIndex):
19989        (JSC::WREC::Generator::generateLoopIfNotEndOfInput):
19990        (JSC::WREC::Generator::generateReturnFailure):
19991        * wrec/WRECGenerator.h:
19992        * wrec/WRECParser.h:
19993        (JSC::WREC::Parser::ignoreCase):
19994        (JSC::WREC::Parser::generator):
19995
199962008-11-21  Alexey Proskuryakov  <ap@webkit.org>
19997
19998        Build fix.
19999
20000        * wtf/Assertions.h: Use ::abort for C++ code.
20001
200022008-11-21  Alexey Proskuryakov  <ap@webkit.org>
20003
20004        Reviewed by Sam Weinig.
20005
20006        https://bugs.webkit.org/show_bug.cgi?id=22402
20007        Replace abort() with CRASH()
20008
20009        * wtf/Assertions.h: Added abort() after an attempt to crash for extra safety.
20010
20011        * runtime/Collector.cpp:
20012        * wtf/FastMalloc.cpp:
20013        * wtf/FastMalloc.h:
20014        * wtf/TCSpinLock.h:
20015        Replace abort() with CRASH().
20016
200172008-11-21  Geoffrey Garen  <ggaren@apple.com>
20018
20019        Reviewed by Sam Weinig.
20020        
20021        Renamed wrec => generator.
20022
20023        * wrec/WRECFunctors.cpp:
20024        (JSC::WREC::GeneratePatternCharacterFunctor::generateAtom):
20025        (JSC::WREC::GeneratePatternCharacterFunctor::backtrack):
20026        (JSC::WREC::GenerateCharacterClassFunctor::generateAtom):
20027        (JSC::WREC::GenerateCharacterClassFunctor::backtrack):
20028        (JSC::WREC::GenerateBackreferenceFunctor::generateAtom):
20029        (JSC::WREC::GenerateBackreferenceFunctor::backtrack):
20030        (JSC::WREC::GenerateParenthesesNonGreedyFunctor::generateAtom):
20031
200322008-11-19  Gavin Barraclough  <barraclough@apple.com>
20033
20034        Reviewed by Darin Adler.
20035
20036        Add support for (really) polymorphic caching of prototype accesses.
20037        
20038        If a cached prototype access misses, cti_op_get_by_id_proto_list is called.
20039        When this occurs the Structure pointers from the instruction stream are copied
20040        off into a new ProtoStubInfo object.  A second prototype access trampoline is
20041        generated, and chained onto the first.  Subsequent missed call to
20042        cti_op_get_by_id_proto_list_append, which append futher new trampolines, up to
20043        PROTOTYPE_LIST_CACHE_SIZE (currently 4).  If any of the misses result in an
20044        access other than to a direct prototype property, list formation is halted (or
20045        for the initial miss, does not take place at all).
20046
20047        Separate fail case functions are provided for each access since this contributes
20048        to the performance progression (enables better processor branch prediction).
20049
20050        Overall this is a near 5% progression on v8, with around 10% wins on richards
20051        and deltablue.
20052
20053        * bytecode/CodeBlock.cpp:
20054        (JSC::CodeBlock::dump):
20055        (JSC::CodeBlock::derefStructures):
20056        * bytecode/Instruction.h:
20057        (JSC::ProtoStructureList::ProtoStubInfo::set):
20058        (JSC::ProtoStructureList::ProtoStructureList):
20059        (JSC::Instruction::Instruction):
20060        (JSC::Instruction::):
20061        * bytecode/Opcode.h:
20062        * interpreter/Interpreter.cpp:
20063        (JSC::Interpreter::privateExecute):
20064        (JSC::Interpreter::tryCTICacheGetByID):
20065        (JSC::Interpreter::cti_op_put_by_id_fail):
20066        (JSC::Interpreter::cti_op_get_by_id_self_fail):
20067        (JSC::Interpreter::cti_op_get_by_id_proto_list):
20068        (JSC::Interpreter::cti_op_get_by_id_proto_list_append):
20069        (JSC::Interpreter::cti_op_get_by_id_proto_list_full):
20070        (JSC::Interpreter::cti_op_get_by_id_proto_fail):
20071        (JSC::Interpreter::cti_op_get_by_id_chain_fail):
20072        (JSC::Interpreter::cti_op_get_by_id_array_fail):
20073        (JSC::Interpreter::cti_op_get_by_id_string_fail):
20074        * interpreter/Interpreter.h:
20075        * jit/JIT.cpp:
20076        (JSC::JIT::privateCompileMainPass):
20077        (JSC::JIT::privateCompileGetByIdSelf):
20078        (JSC::JIT::privateCompileGetByIdProto):
20079        (JSC::JIT::privateCompileGetByIdProtoList):
20080        (JSC::JIT::privateCompileGetByIdChain):
20081        (JSC::JIT::privateCompileCTIMachineTrampolines):
20082        (JSC::JIT::privateCompilePatchGetArrayLength):
20083        * jit/JIT.h:
20084        (JSC::JIT::compileGetByIdProtoList):
20085
200862008-11-20  Sam Weinig  <sam@webkit.org>
20087
20088        Try and fix the tiger build.
20089
20090        * parser/Grammar.y:
20091
200922008-11-20  Eric Seidel  <eric@webkit.org>
20093
20094        Reviewed by Darin Adler.
20095
20096        Make JavaScriptCore Chromium build under Windows (cmd only, cygwin almost works)
20097        https://bugs.webkit.org/show_bug.cgi?id=22347
20098
20099        * JavaScriptCore.scons:
20100        * parser/Parser.cpp: Add using std::auto_ptr since we use auto_ptr
20101
201022008-11-20  Steve Falkenburg  <sfalken@apple.com>
20103
20104        Fix build.
20105        
20106        Reviewed by Sam Weinig.
20107
20108        * parser/Parser.cpp:
20109        (JSC::Parser::reparse):
20110
201112008-11-20  Geoffrey Garen  <ggaren@apple.com>
20112
20113        Reviewed by Sam Weinig.
20114
20115        A little more RegExp refactoring.
20116        
20117        Created a helper function in the assembler for linking a vector of
20118        JmpSrc to a location, and deployed it in a bunch of places.
20119
20120        * JavaScriptCore.xcodeproj/project.pbxproj:
20121        * assembler/X86Assembler.h:
20122        (JSC::X86Assembler::link):
20123        * wrec/WREC.cpp:
20124        (JSC::WREC::compileRegExp):
20125        * wrec/WRECGenerator.cpp:
20126        (JSC::WREC::Generator::generateNonGreedyQuantifier):
20127        (JSC::WREC::Generator::generateGreedyQuantifier):
20128        (JSC::WREC::Generator::generateCharacterClassInverted):
20129        (JSC::WREC::Generator::generateParentheses):
20130        (JSC::WREC::Generator::generateParenthesesResetTrampoline):
20131        (JSC::WREC::Generator::generateAssertionBOL):
20132        (JSC::WREC::Generator::generateAssertionEOL):
20133        (JSC::WREC::Generator::generateAssertionWordBoundary):
20134        (JSC::WREC::Generator::terminateAlternative):
20135        (JSC::WREC::Generator::terminateDisjunction):
20136        * wrec/WRECParser.cpp:
20137        * wrec/WRECParser.h:
20138        (JSC::WREC::Parser::consumeHex):
20139
201402008-11-20  Sam Weinig  <sam@webkit.org>
20141
20142        Fix non-mac builds.
20143
20144        * parser/Lexer.cpp:
20145        * parser/Parser.cpp:
20146
201472008-11-20  Sam Weinig  <sam@webkit.org>
20148
20149        Reviewed by Darin Adler.
20150
20151        Patch for https://bugs.webkit.org/show_bug.cgi?id=22385
20152        <rdar://problem/6390179>
20153        Lazily reparse FunctionBodyNodes on first execution.
20154
20155        - Saves 57MB on Membuster head.
20156
20157        * bytecompiler/BytecodeGenerator.cpp:
20158        (JSC::BytecodeGenerator::generate): Remove vector shrinking since this is now
20159        handled by destroying the ScopeNodeData after generation.
20160
20161        * parser/Grammar.y: Add alternate NoNode version of the grammar
20162        that does not create nodes.  This is used to lazily create FunctionBodyNodes
20163        on first execution.
20164
20165        * parser/Lexer.cpp:
20166        (JSC::Lexer::setCode): Fix bug where on reparse, the Lexer was confused about
20167        what position and length meant. Position is the current position in the original
20168        data buffer (important for getting correct line/column information) and length
20169        the end offset in the original buffer.
20170        * parser/Lexer.h:
20171        (JSC::Lexer::sourceCode): Positions are relative to the beginning of the buffer.
20172
20173        * parser/Nodes.cpp:
20174        (JSC::ScopeNodeData::ScopeNodeData): Move initialization of ScopeNode data here.
20175        (JSC::ScopeNode::ScopeNode): Add constructor that only sets the JSGlobalData
20176        for FunctionBodyNode stubs.
20177        (JSC::ScopeNode::~ScopeNode): Release m_children now that we don't inherit from
20178        BlockNode.
20179        (JSC::ScopeNode::releaseNodes): Ditto.
20180        (JSC::EvalNode::generateBytecode): Only shrink m_children, as we need to keep around
20181        the rest of the data.
20182        (JSC::FunctionBodyNode::FunctionBodyNode): Add constructor that only sets the
20183        JSGlobalData. 
20184        (JSC::FunctionBodyNode::create): Ditto.
20185        (JSC::FunctionBodyNode::generateBytecode): If we don't have the data, do a reparse
20186        to construct it. Then after generation, destroy the data.
20187        (JSC::ProgramNode::generateBytecode): After generation, destroy the AST data.
20188        * parser/Nodes.h:
20189        (JSC::ExpressionNode::): Add isFuncExprNode for FunctionConstructor.
20190        (JSC::StatementNode::): Add isExprStatementNode for FunctionConstructor.
20191        (JSC::ExprStatementNode::): Ditto.
20192        (JSC::ExprStatementNode::expr): Add accessor for FunctionConstructor.
20193        (JSC::FuncExprNode::): Add isFuncExprNode for FunctionConstructor
20194
20195        (JSC::ScopeNode::adoptData): Adopts a ScopeNodeData.
20196        (JSC::ScopeNode::data): Accessor for ScopeNodeData.
20197        (JSC::ScopeNode::destroyData): Deletes the ScopeNodeData.
20198        (JSC::ScopeNode::setFeatures): Added.
20199        (JSC::ScopeNode::varStack): Added assert.
20200        (JSC::ScopeNode::functionStack): Ditto.
20201        (JSC::ScopeNode::children): Ditto.
20202        (JSC::ScopeNode::neededConstants): Ditto.
20203        Factor m_varStack, m_functionStack, m_children and m_numConstants into ScopeNodeData.
20204
20205        * parser/Parser.cpp:
20206        (JSC::Parser::reparse): Reparse the SourceCode in the FunctionBodyNode and set
20207        set up the ScopeNodeData for it. 
20208        * parser/Parser.h:
20209
20210        * parser/SourceCode.h:
20211        (JSC::SourceCode::endOffset): Added for use in the lexer.
20212
20213        * runtime/FunctionConstructor.cpp:
20214        (JSC::getFunctionBody): Assuming a ProgramNode with one FunctionExpression in it,
20215        get the FunctionBodyNode.  Any issues signifies a parse failure in constructFunction. 
20216        (JSC::constructFunction): Make parsing functions in the form new Function(""), easier
20217        by concatenating the strings together (with some glue) and parsing the function expression
20218        as a ProgramNode from which we can receive the FunctionBodyNode. This has the added benefit
20219        of not having special parsing code for the arguments and lazily constructing the 
20220        FunctionBodyNode's AST on first execution.
20221
20222        * runtime/Identifier.h:
20223        (JSC::operator!=): Added.
20224
202252008-11-20  Sam Weinig  <sam@webkit.org>
20226
20227        Reviewed by Geoffrey Garen.
20228
20229        Speedup the lexer to offset coming re-parsing patch.
20230
20231        - .6% progression on Sunspider.
20232
20233        * bytecompiler/SegmentedVector.h:
20234        (JSC::SegmentedVector::shrink): Fixed bug where m_size would not be
20235        set when shrinking to 0.
20236
20237        * parser/Lexer.cpp:
20238        (JSC::Lexer::Lexer):
20239        (JSC::Lexer::isIdentStart): Use isASCIIAlpha and isASCII to avoid going into ICU in the common cases.
20240        (JSC::Lexer::isIdentPart): Use isASCIIAlphanumeric and isASCII to avoid going into ICU in the common cases
20241        (JSC::isDecimalDigit): Use version in ASCIICType.h. Inlining it was a regression.
20242        (JSC::Lexer::isHexDigit): Ditto.
20243        (JSC::Lexer::isOctalDigit): Ditto.
20244        (JSC::Lexer::clear): Resize the m_identifiers SegmentedVector to initial
20245        capacity
20246        * parser/Lexer.h: Remove unused m_strings vector. Make m_identifiers
20247        a SegmentedVector<Identifier> to avoid allocating a new Identifier* for
20248        each identifier found.  The SegmentedVector is need so we can passes 
20249        references to the Identifier to the parser, which remain valid even when
20250        the vector is resized.
20251        (JSC::Lexer::makeIdentifier): Inline and return a reference to the added
20252        Identifier.
20253
202542008-11-20  Sam Weinig  <sam@webkit.org>
20255
20256        Reviewed by Darin Adler.
20257
20258        Add isASCII to ASCIICType.  Use coming soon!
20259
20260        * wtf/ASCIICType.h:
20261        (WTF::isASCII):
20262
202632008-11-20  Sam Weinig  <sam@webkit.org>
20264
20265        Reviewed by Darin Adler.
20266
20267        Add OwnPtr constructor and OwnPtr::adopt that take an auto_ptr.
20268
20269        * wtf/OwnPtr.h:
20270        (WTF::OwnPtr::OwnPtr):
20271        (WTF::OwnPtr::adopt):
20272
202732008-11-20  Alexey Proskuryakov  <ap@webkit.org>
20274
20275        Reviewed by Darin Adler.
20276
20277        https://bugs.webkit.org/show_bug.cgi?id=22364
20278        Crashes seen on Tiger buildbots due to worker threads exhausting pthread keys
20279
20280        * runtime/Collector.cpp:
20281        (JSC::Heap::Heap):
20282        (JSC::Heap::destroy):
20283        (JSC::Heap::makeUsableFromMultipleThreads):
20284        (JSC::Heap::registerThread):
20285        * runtime/Collector.h:
20286        Pthread key for tracking threads is only created on request now, because this is a limited
20287        resource, and thread tracking is not needed for worker heaps, or for WebCore heap.
20288
20289        * API/JSContextRef.cpp: (JSGlobalContextCreateInGroup): Call makeUsableFromMultipleThreads().
20290
20291        * runtime/JSGlobalData.cpp: (JSC::JSGlobalData::sharedInstance): Ditto.
20292
20293        * runtime/JSGlobalData.h: (JSC::JSGlobalData::makeUsableFromMultipleThreads): Just forward
20294        the call to Heap, which clients need not know about, ideally.
20295
202962008-11-20  Geoffrey Garen  <ggaren@apple.com>
20297
20298        Reviewed by Sam Weinig.
20299        
20300        A little more WREC refactoring.
20301        
20302        Removed the "Register" suffix from register names in WREC, and renamed:
20303            currentPosition => index
20304            currentValue => character
20305            quantifierCount => repeatCount
20306            
20307        Added a top-level parsePattern function to the WREC parser, which
20308        allowed me to remove the error() and atEndOfPattern() accessors.
20309        
20310        Factored out an MSVC customization into a constant.
20311        
20312        Renamed nextLabel => beginPattern.
20313
20314        * wrec/WREC.cpp:
20315        (JSC::WREC::compileRegExp):
20316        * wrec/WRECGenerator.cpp:
20317        (JSC::WREC::Generator::generateBacktrack1):
20318        (JSC::WREC::Generator::generateBacktrackBackreference):
20319        (JSC::WREC::Generator::generateBackreferenceQuantifier):
20320        (JSC::WREC::Generator::generateNonGreedyQuantifier):
20321        (JSC::WREC::Generator::generateGreedyQuantifier):
20322        (JSC::WREC::Generator::generatePatternCharacter):
20323        (JSC::WREC::Generator::generateCharacterClassInvertedRange):
20324        (JSC::WREC::Generator::generateCharacterClassInverted):
20325        (JSC::WREC::Generator::generateCharacterClass):
20326        (JSC::WREC::Generator::generateParentheses):
20327        (JSC::WREC::Generator::generateParenthesesResetTrampoline):
20328        (JSC::WREC::Generator::generateAssertionBOL):
20329        (JSC::WREC::Generator::generateAssertionEOL):
20330        (JSC::WREC::Generator::generateAssertionWordBoundary):
20331        (JSC::WREC::Generator::generateBackreference):
20332        (JSC::WREC::Generator::generateDisjunction):
20333        (JSC::WREC::Generator::terminateDisjunction):
20334        * wrec/WRECGenerator.h:
20335        * wrec/WRECParser.h:
20336        (JSC::WREC::Parser::parsePattern):
20337
203382008-11-19  Geoffrey Garen  <ggaren@apple.com>
20339
20340        Reviewed by Darin Adler.
20341        
20342        https://bugs.webkit.org/show_bug.cgi?id=22361
20343        A little more RegExp refactoring.
20344        
20345        Consistently named variables holding the starting position at which
20346        regexp matching should begin to "startOffset".
20347        
20348        A few more "regExpObject" => "regExpConstructor" changes.
20349        
20350        Refactored RegExpObject::match for clarity, and replaced a slow "get"
20351        of the "global" property with a fast access to the global bit.
20352        
20353        Made the error message you see when RegExpObject::match has no input a
20354        little more informative, as in Firefox.
20355
20356        * runtime/RegExp.cpp:
20357        (JSC::RegExp::match):
20358        * runtime/RegExp.h:
20359        * runtime/RegExpObject.cpp:
20360        (JSC::RegExpObject::match):
20361        * runtime/StringPrototype.cpp:
20362        (JSC::stringProtoFuncReplace):
20363        (JSC::stringProtoFuncMatch):
20364        (JSC::stringProtoFuncSearch):
20365
203662008-11-19  Geoffrey Garen  <ggaren@apple.com>
20367
20368        Reviewed by Sam Weinig.
20369        
20370        A little more refactoring.
20371        
20372        Removed the "emit" and "emitUnlinked" prefixes from the assembler.
20373        
20374        Moved the JmpSrc and JmpDst class definitions to the top of the X86
20375        assembler class, in accordance with WebKit style guidelines.
20376
20377        * assembler/X86Assembler.h:
20378        (JSC::X86Assembler::JmpSrc::JmpSrc):
20379        (JSC::X86Assembler::JmpDst::JmpDst):
20380        (JSC::X86Assembler::int3):
20381        (JSC::X86Assembler::pushl_m):
20382        (JSC::X86Assembler::popl_m):
20383        (JSC::X86Assembler::movl_rr):
20384        (JSC::X86Assembler::addl_rr):
20385        (JSC::X86Assembler::addl_i8r):
20386        (JSC::X86Assembler::addl_i8m):
20387        (JSC::X86Assembler::addl_i32r):
20388        (JSC::X86Assembler::addl_mr):
20389        (JSC::X86Assembler::andl_rr):
20390        (JSC::X86Assembler::andl_i32r):
20391        (JSC::X86Assembler::cmpl_i8r):
20392        (JSC::X86Assembler::cmpl_rr):
20393        (JSC::X86Assembler::cmpl_rm):
20394        (JSC::X86Assembler::cmpl_mr):
20395        (JSC::X86Assembler::cmpl_i32r):
20396        (JSC::X86Assembler::cmpl_i32m):
20397        (JSC::X86Assembler::cmpl_i8m):
20398        (JSC::X86Assembler::cmpw_rm):
20399        (JSC::X86Assembler::orl_rr):
20400        (JSC::X86Assembler::orl_mr):
20401        (JSC::X86Assembler::orl_i32r):
20402        (JSC::X86Assembler::subl_rr):
20403        (JSC::X86Assembler::subl_i8r):
20404        (JSC::X86Assembler::subl_i8m):
20405        (JSC::X86Assembler::subl_i32r):
20406        (JSC::X86Assembler::subl_mr):
20407        (JSC::X86Assembler::testl_i32r):
20408        (JSC::X86Assembler::testl_i32m):
20409        (JSC::X86Assembler::testl_rr):
20410        (JSC::X86Assembler::xorl_i8r):
20411        (JSC::X86Assembler::xorl_rr):
20412        (JSC::X86Assembler::sarl_i8r):
20413        (JSC::X86Assembler::sarl_CLr):
20414        (JSC::X86Assembler::shl_i8r):
20415        (JSC::X86Assembler::shll_CLr):
20416        (JSC::X86Assembler::imull_rr):
20417        (JSC::X86Assembler::imull_i32r):
20418        (JSC::X86Assembler::idivl_r):
20419        (JSC::X86Assembler::negl_r):
20420        (JSC::X86Assembler::movl_mr):
20421        (JSC::X86Assembler::movzbl_rr):
20422        (JSC::X86Assembler::movzwl_mr):
20423        (JSC::X86Assembler::movl_rm):
20424        (JSC::X86Assembler::movl_i32r):
20425        (JSC::X86Assembler::movl_i32m):
20426        (JSC::X86Assembler::leal_mr):
20427        (JSC::X86Assembler::jmp_r):
20428        (JSC::X86Assembler::jmp_m):
20429        (JSC::X86Assembler::movsd_mr):
20430        (JSC::X86Assembler::xorpd_mr):
20431        (JSC::X86Assembler::movsd_rm):
20432        (JSC::X86Assembler::movd_rr):
20433        (JSC::X86Assembler::cvtsi2sd_rr):
20434        (JSC::X86Assembler::cvttsd2si_rr):
20435        (JSC::X86Assembler::addsd_mr):
20436        (JSC::X86Assembler::subsd_mr):
20437        (JSC::X86Assembler::mulsd_mr):
20438        (JSC::X86Assembler::addsd_rr):
20439        (JSC::X86Assembler::subsd_rr):
20440        (JSC::X86Assembler::mulsd_rr):
20441        (JSC::X86Assembler::ucomis_rr):
20442        (JSC::X86Assembler::pextrw_irr):
20443        (JSC::X86Assembler::call):
20444        (JSC::X86Assembler::jmp):
20445        (JSC::X86Assembler::jne):
20446        (JSC::X86Assembler::jnz):
20447        (JSC::X86Assembler::je):
20448        (JSC::X86Assembler::jl):
20449        (JSC::X86Assembler::jb):
20450        (JSC::X86Assembler::jle):
20451        (JSC::X86Assembler::jbe):
20452        (JSC::X86Assembler::jge):
20453        (JSC::X86Assembler::jg):
20454        (JSC::X86Assembler::ja):
20455        (JSC::X86Assembler::jae):
20456        (JSC::X86Assembler::jo):
20457        (JSC::X86Assembler::jp):
20458        (JSC::X86Assembler::js):
20459        (JSC::X86Assembler::predictNotTaken):
20460        (JSC::X86Assembler::convertToFastCall):
20461        (JSC::X86Assembler::restoreArgumentReference):
20462        (JSC::X86Assembler::restoreArgumentReferenceForTrampoline):
20463        (JSC::X86Assembler::modRm_rr):
20464        (JSC::X86Assembler::modRm_rr_Unchecked):
20465        (JSC::X86Assembler::modRm_rm):
20466        (JSC::X86Assembler::modRm_rm_Unchecked):
20467        (JSC::X86Assembler::modRm_rmsib):
20468        (JSC::X86Assembler::modRm_opr):
20469        (JSC::X86Assembler::modRm_opr_Unchecked):
20470        (JSC::X86Assembler::modRm_opm):
20471        (JSC::X86Assembler::modRm_opm_Unchecked):
20472        (JSC::X86Assembler::modRm_opmsib):
20473        * jit/JIT.cpp:
20474        (JSC::JIT::emitNakedCall):
20475        (JSC::JIT::emitNakedFastCall):
20476        (JSC::JIT::emitCTICall):
20477        (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
20478        (JSC::JIT::emitJumpSlowCaseIfNotImmNum):
20479        (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
20480        (JSC::JIT::emitFastArithIntToImmOrSlowCase):
20481        (JSC::JIT::emitArithIntToImmWithJump):
20482        (JSC::JIT::compileOpCall):
20483        (JSC::JIT::compileOpStrictEq):
20484        (JSC::JIT::emitSlowScriptCheck):
20485        (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate):
20486        (JSC::JIT::compileBinaryArithOp):
20487        (JSC::JIT::privateCompileMainPass):
20488        (JSC::JIT::privateCompileSlowCases):
20489        (JSC::JIT::privateCompile):
20490        (JSC::JIT::privateCompileGetByIdSelf):
20491        (JSC::JIT::privateCompileGetByIdProto):
20492        (JSC::JIT::privateCompileGetByIdChain):
20493        (JSC::JIT::privateCompilePutByIdReplace):
20494        (JSC::JIT::privateCompilePutByIdTransition):
20495        (JSC::JIT::privateCompileCTIMachineTrampolines):
20496        (JSC::JIT::privateCompilePatchGetArrayLength):
20497        * wrec/WREC.cpp:
20498        (JSC::WREC::compileRegExp):
20499        * wrec/WRECGenerator.cpp:
20500        (JSC::WREC::Generator::generateBackreferenceQuantifier):
20501        (JSC::WREC::Generator::generateNonGreedyQuantifier):
20502        (JSC::WREC::Generator::generateGreedyQuantifier):
20503        (JSC::WREC::Generator::generatePatternCharacter):
20504        (JSC::WREC::Generator::generateCharacterClassInvertedRange):
20505        (JSC::WREC::Generator::generateCharacterClassInverted):
20506        (JSC::WREC::Generator::generateCharacterClass):
20507        (JSC::WREC::Generator::generateParentheses):
20508        (JSC::WREC::Generator::generateParenthesesNonGreedy):
20509        (JSC::WREC::Generator::generateParenthesesResetTrampoline):
20510        (JSC::WREC::Generator::generateAssertionBOL):
20511        (JSC::WREC::Generator::generateAssertionEOL):
20512        (JSC::WREC::Generator::generateAssertionWordBoundary):
20513        (JSC::WREC::Generator::generateBackreference):
20514        (JSC::WREC::Generator::generateDisjunction):
20515
205162008-11-19  Simon Hausmann  <hausmann@webkit.org>
20517
20518        Sun CC build fix, removed trailing comman for last enum value.
20519
20520        * wtf/unicode/qt4/UnicodeQt4.h:
20521        (WTF::Unicode::):
20522
205232008-11-19  Mark Rowe  <mrowe@apple.com>
20524
20525        Reviewed by Alexey Proskuryakov.
20526
20527        Expand the workaround for Apple GCC compiler bug <rdar://problem/6354696> to all versions of GCC 4.0.1.
20528        It has been observed with builds 5465 (Xcode 3.0) and 5484 (Xcode 3.1), and there is no evidence
20529        that it has been fixed in newer builds of GCC 4.0.1.
20530
20531        This addresses <https://bugs.webkit.org/show_bug.cgi?id=22351> (WebKit nightly crashes on launch on 10.4.11).
20532
20533        * wtf/StdLibExtras.h:
20534
205352008-11-18  Cameron Zwarich  <zwarich@apple.com>
20536
20537        Reviewed by Maciej Stachowiak and Geoff Garen.
20538
20539        Bug 22287: ASSERTION FAILED: Not enough jumps linked in slow case codegen in CTI::privateCompileSlowCases())
20540        <https://bugs.webkit.org/show_bug.cgi?id=22287>
20541
20542        Fix a typo in the number cell reuse code where the first and second
20543        operands are sometimes confused.
20544
20545        * jit/JIT.cpp:
20546        (JSC::JIT::compileBinaryArithOpSlowCase):
20547
205482008-11-18  Dan Bernstein  <mitz@apple.com>
20549
20550        - try to fix the Windows build
20551
20552        * interpreter/Interpreter.cpp:
20553        (JSC::Interpreter::privateExecute):
20554
205552008-11-18  Geoffrey Garen  <ggaren@apple.com>
20556
20557        Reviewed by Sam Weinig.
20558        
20559        Minor RegExp cleanup.
20560        
20561        SunSpider says no change.
20562
20563        * runtime/RegExpObject.cpp:
20564        (JSC::RegExpObject::match): Renamed "regExpObj" to "regExpConstructor".
20565
20566        * wrec/WREC.cpp:
20567        (JSC::WREC::compileRegExp): Instead of checking for a NULL output vector,
20568        ASSERT that the output vector is not NULL. (The rest of WREC is not
20569        safe to use with a NULL output vector, and we probably don't want to
20570        spend the time and/or performance to make it safe.)
20571
205722008-11-18  Geoffrey Garen  <ggaren@apple.com>
20573
20574        Reviewed by Darin Adler.
20575        
20576        A little more renaming and refactoring.
20577        
20578        VM_CHECK_EXCEPTION() => CHECK_FOR_EXCEPTION().
20579        NEXT_INSTRUCTION => NEXT_INSTRUCTION().
20580
20581        Removed the "Error_" and "TempError_" prefixes from WREC error types.
20582
20583        Refactored the WREC parser so it doesn't need a "setError" function,
20584        and changed "isEndOfPattern" and its use -- they read kind of backwards
20585        before.
20586        
20587        Changed our "TODO:" error messages at least to say something, since you
20588        can't say "TODO:" in shipping software.
20589
20590        * interpreter/Interpreter.cpp:
20591        (JSC::Interpreter::privateExecute):
20592        (JSC::Interpreter::cti_op_convert_this):
20593        (JSC::Interpreter::cti_op_add):
20594        (JSC::Interpreter::cti_op_pre_inc):
20595        (JSC::Interpreter::cti_op_loop_if_less):
20596        (JSC::Interpreter::cti_op_loop_if_lesseq):
20597        (JSC::Interpreter::cti_op_put_by_id):
20598        (JSC::Interpreter::cti_op_put_by_id_second):
20599        (JSC::Interpreter::cti_op_put_by_id_generic):
20600        (JSC::Interpreter::cti_op_put_by_id_fail):
20601        (JSC::Interpreter::cti_op_get_by_id):
20602        (JSC::Interpreter::cti_op_get_by_id_second):
20603        (JSC::Interpreter::cti_op_get_by_id_generic):
20604        (JSC::Interpreter::cti_op_get_by_id_fail):
20605        (JSC::Interpreter::cti_op_instanceof):
20606        (JSC::Interpreter::cti_op_del_by_id):
20607        (JSC::Interpreter::cti_op_mul):
20608        (JSC::Interpreter::cti_op_call_NotJSFunction):
20609        (JSC::Interpreter::cti_op_resolve):
20610        (JSC::Interpreter::cti_op_construct_NotJSConstruct):
20611        (JSC::Interpreter::cti_op_get_by_val):
20612        (JSC::Interpreter::cti_op_resolve_func):
20613        (JSC::Interpreter::cti_op_sub):
20614        (JSC::Interpreter::cti_op_put_by_val):
20615        (JSC::Interpreter::cti_op_put_by_val_array):
20616        (JSC::Interpreter::cti_op_lesseq):
20617        (JSC::Interpreter::cti_op_loop_if_true):
20618        (JSC::Interpreter::cti_op_negate):
20619        (JSC::Interpreter::cti_op_resolve_skip):
20620        (JSC::Interpreter::cti_op_resolve_global):
20621        (JSC::Interpreter::cti_op_div):
20622        (JSC::Interpreter::cti_op_pre_dec):
20623        (JSC::Interpreter::cti_op_jless):
20624        (JSC::Interpreter::cti_op_not):
20625        (JSC::Interpreter::cti_op_jtrue):
20626        (JSC::Interpreter::cti_op_post_inc):
20627        (JSC::Interpreter::cti_op_eq):
20628        (JSC::Interpreter::cti_op_lshift):
20629        (JSC::Interpreter::cti_op_bitand):
20630        (JSC::Interpreter::cti_op_rshift):
20631        (JSC::Interpreter::cti_op_bitnot):
20632        (JSC::Interpreter::cti_op_resolve_with_base):
20633        (JSC::Interpreter::cti_op_mod):
20634        (JSC::Interpreter::cti_op_less):
20635        (JSC::Interpreter::cti_op_neq):
20636        (JSC::Interpreter::cti_op_post_dec):
20637        (JSC::Interpreter::cti_op_urshift):
20638        (JSC::Interpreter::cti_op_bitxor):
20639        (JSC::Interpreter::cti_op_bitor):
20640        (JSC::Interpreter::cti_op_push_scope):
20641        (JSC::Interpreter::cti_op_to_jsnumber):
20642        (JSC::Interpreter::cti_op_in):
20643        (JSC::Interpreter::cti_op_del_by_val):
20644        * wrec/WREC.cpp:
20645        (JSC::WREC::compileRegExp):
20646        * wrec/WRECParser.cpp:
20647        (JSC::WREC::Parser::parseGreedyQuantifier):
20648        (JSC::WREC::Parser::parseParentheses):
20649        (JSC::WREC::Parser::parseCharacterClass):
20650        (JSC::WREC::Parser::parseEscape):
20651        * wrec/WRECParser.h:
20652        (JSC::WREC::Parser::):
20653        (JSC::WREC::Parser::atEndOfPattern):
20654
206552008-11-18  Alexey Proskuryakov  <ap@webkit.org>
20656
20657        Reviewed by Darin Adler.
20658
20659        https://bugs.webkit.org/show_bug.cgi?id=22337
20660        Enable workers by default
20661
20662        * Configurations/JavaScriptCore.xcconfig: Define ENABLE_WORKERS.
20663
206642008-11-18  Alexey Proskuryakov  <ap@webkit.org>
20665
20666        - Windows build fix
20667
20668        * wrec/WRECFunctors.h:
20669        * wrec/WRECGenerator.h:
20670        * wrec/WRECParser.h:
20671        CharacterClass is a struct, not a class, fix forward declarations.
20672
206732008-11-18  Dan Bernstein  <mitz@apple.com>
20674
20675        - Windows build fix
20676
20677        * assembler/X86Assembler.h:
20678
206792008-11-17  Geoffrey Garen  <ggaren@apple.com>
20680
20681        Not reviewed.
20682        
20683        Try to fix gtk build.
20684
20685        * wrec/Quantifier.h:
20686
206872008-11-17  Geoffrey Garen  <ggaren@apple.com>
20688
20689        Not reviewed.
20690        
20691        Try to fix gtk build.
20692
20693        * assembler/AssemblerBuffer.h:
20694
206952008-11-17  Geoffrey Garen  <ggaren@apple.com>
20696
20697        Reviewed by Sam Weinig.
20698        
20699        Split WREC classes out into individual files, with a few modifications
20700        to more closely match the WebKit coding style.
20701
20702        * GNUmakefile.am:
20703        * JavaScriptCore.scons:
20704        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
20705        * JavaScriptCore.xcodeproj/project.pbxproj:
20706        * assembler/X86Assembler.h:
20707        * runtime/RegExp.cpp:
20708        * wrec/CharacterClass.cpp: Copied from wrec/CharacterClassConstructor.cpp.
20709        (JSC::WREC::CharacterClass::newline):
20710        (JSC::WREC::CharacterClass::digits):
20711        (JSC::WREC::CharacterClass::spaces):
20712        (JSC::WREC::CharacterClass::wordchar):
20713        (JSC::WREC::CharacterClass::nondigits):
20714        (JSC::WREC::CharacterClass::nonspaces):
20715        (JSC::WREC::CharacterClass::nonwordchar):
20716        * wrec/CharacterClass.h: Copied from wrec/CharacterClassConstructor.h.
20717        * wrec/CharacterClassConstructor.cpp:
20718        (JSC::WREC::CharacterClassConstructor::addSortedRange):
20719        (JSC::WREC::CharacterClassConstructor::append):
20720        * wrec/CharacterClassConstructor.h:
20721        * wrec/Quantifier.h: Copied from wrec/WREC.h.
20722        * wrec/WREC.cpp:
20723        (JSC::WREC::compileRegExp):
20724        * wrec/WREC.h:
20725        * wrec/WRECFunctors.cpp: Copied from wrec/WREC.cpp.
20726        * wrec/WRECFunctors.h: Copied from wrec/WREC.cpp.
20727        (JSC::WREC::GenerateAtomFunctor::~GenerateAtomFunctor):
20728        (JSC::WREC::GeneratePatternCharacterFunctor::GeneratePatternCharacterFunctor):
20729        (JSC::WREC::GenerateCharacterClassFunctor::GenerateCharacterClassFunctor):
20730        (JSC::WREC::GenerateBackreferenceFunctor::GenerateBackreferenceFunctor):
20731        (JSC::WREC::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor):
20732        * wrec/WRECGenerator.cpp: Copied from wrec/WREC.cpp.
20733        (JSC::WREC::Generator::generatePatternCharacter):
20734        (JSC::WREC::Generator::generateCharacterClassInvertedRange):
20735        (JSC::WREC::Generator::generateCharacterClassInverted):
20736        (JSC::WREC::Generator::generateCharacterClass):
20737        (JSC::WREC::Generator::generateParentheses):
20738        (JSC::WREC::Generator::generateAssertionBOL):
20739        (JSC::WREC::Generator::generateAssertionEOL):
20740        (JSC::WREC::Generator::generateAssertionWordBoundary):
20741        * wrec/WRECGenerator.h: Copied from wrec/WREC.h.
20742        * wrec/WRECParser.cpp: Copied from wrec/WREC.cpp.
20743        (JSC::WREC::Parser::parseGreedyQuantifier):
20744        (JSC::WREC::Parser::parseCharacterClassQuantifier):
20745        (JSC::WREC::Parser::parseParentheses):
20746        (JSC::WREC::Parser::parseCharacterClass):
20747        (JSC::WREC::Parser::parseEscape):
20748        (JSC::WREC::Parser::parseTerm):
20749        * wrec/WRECParser.h: Copied from wrec/WREC.h.
20750        (JSC::WREC::Parser::):
20751        (JSC::WREC::Parser::Parser):
20752        (JSC::WREC::Parser::setError):
20753        (JSC::WREC::Parser::error):
20754        (JSC::WREC::Parser::recordSubpattern):
20755        (JSC::WREC::Parser::numSubpatterns):
20756        (JSC::WREC::Parser::ignoreCase):
20757        (JSC::WREC::Parser::multiline):
20758
207592008-11-17  Geoffrey Garen  <ggaren@apple.com>
20760
20761        Not reviewed.
20762        
20763        Try to fix a few builds.
20764
20765        * JavaScriptCoreSources.bkl:
20766
207672008-11-17  Geoffrey Garen  <ggaren@apple.com>
20768
20769        Not reviewed.
20770        
20771        Try to fix a few builds.
20772
20773        * JavaScriptCore.pri:
20774        * JavaScriptCore.scons:
20775        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
20776
207772008-11-17  Geoffrey Garen  <ggaren@apple.com>
20778
20779        Reviewed by Sam Weinig.
20780        
20781        Moved VM/CTI.* => jit/JIT.*.
20782        
20783        Removed VM.
20784
20785        * GNUmakefile.am:
20786        * JavaScriptCore.pri:
20787        * JavaScriptCore.scons:
20788        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
20789        * JavaScriptCore.xcodeproj/project.pbxproj:
20790        * VM/CTI.cpp: Removed.
20791        * VM/CTI.h: Removed.
20792        * bytecode/CodeBlock.cpp:
20793        * interpreter/Interpreter.cpp:
20794        * jit: Added.
20795        * jit/JIT.cpp: Copied from VM/CTI.cpp.
20796        * jit/JIT.h: Copied from VM/CTI.h.
20797        * runtime/RegExp.cpp:
20798
207992008-11-17  Geoffrey Garen  <ggaren@apple.com>
20800
20801        Reviewed by Sam Weinig.
20802        
20803        Moved runtime/ExecState.* => interpreter/CallFrame.*.
20804
20805        * API/JSBase.cpp:
20806        * API/OpaqueJSString.cpp:
20807        * GNUmakefile.am:
20808        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
20809        * JavaScriptCore.xcodeproj/project.pbxproj:
20810        * debugger/DebuggerCallFrame.h:
20811        * interpreter/CallFrame.cpp: Copied from runtime/ExecState.cpp.
20812        * interpreter/CallFrame.h: Copied from runtime/ExecState.h.
20813        * interpreter/Interpreter.cpp:
20814        * parser/Nodes.cpp:
20815        * profiler/ProfileGenerator.cpp:
20816        * profiler/Profiler.cpp:
20817        * runtime/ClassInfo.h:
20818        * runtime/Collector.cpp:
20819        * runtime/Completion.cpp:
20820        * runtime/ExceptionHelpers.cpp:
20821        * runtime/ExecState.cpp: Removed.
20822        * runtime/ExecState.h: Removed.
20823        * runtime/Identifier.cpp:
20824        * runtime/JSFunction.cpp:
20825        * runtime/JSGlobalObjectFunctions.cpp:
20826        * runtime/JSLock.cpp:
20827        * runtime/JSNumberCell.h:
20828        * runtime/JSObject.h:
20829        * runtime/JSString.h:
20830        * runtime/Lookup.h:
20831        * runtime/PropertyNameArray.h:
20832
208332008-11-17  Geoffrey Garen  <ggaren@apple.com>
20834
20835        Not reviewed.
20836        
20837        Try to fix Windows build.
20838
20839        * API/APICast.h:
20840
208412008-11-17  Geoffrey Garen  <ggaren@apple.com>
20842
20843        Not reviewed.
20844        
20845        Try to fix Windows build.
20846
20847        * API/APICast.h:
20848        * runtime/ExecState.h:
20849
208502008-11-17  Geoffrey Garen  <ggaren@apple.com>
20851
20852        Reviewed by Sam Weinig.
20853        
20854        Moved VM/SamplingTool.* => bytecode/SamplingTool.*.
20855
20856        * GNUmakefile.am:
20857        * JavaScriptCore.pri:
20858        * JavaScriptCore.scons:
20859        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
20860        * JavaScriptCore.xcodeproj/project.pbxproj:
20861        * JavaScriptCoreSources.bkl:
20862        * VM/SamplingTool.cpp: Removed.
20863        * VM/SamplingTool.h: Removed.
20864        * bytecode/SamplingTool.cpp: Copied from VM/SamplingTool.cpp.
20865        * bytecode/SamplingTool.h: Copied from VM/SamplingTool.h.
20866        * jsc.cpp:
20867        (runWithScripts):
20868
208692008-11-17  Geoffrey Garen  <ggaren@apple.com>
20870
20871        Not reviewed.
20872        
20873        Try to fix Windows build.
20874
20875        * runtime/ExecState.h:
20876
208772008-11-17  Geoffrey Garen  <ggaren@apple.com>
20878
20879        Reviewed by Sam Weinig.
20880        
20881        Moved VM/ExceptionHelpers.cpp => runtime/ExceptionHelpers.cpp.
20882
20883        * GNUmakefile.am:
20884        * JavaScriptCore.pri:
20885        * JavaScriptCore.scons:
20886        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
20887        * JavaScriptCore.xcodeproj/project.pbxproj:
20888        * JavaScriptCoreSources.bkl:
20889        * VM/ExceptionHelpers.cpp: Removed.
20890        * runtime/ExceptionHelpers.cpp: Copied from VM/ExceptionHelpers.cpp.
20891
208922008-11-17  Geoffrey Garen  <ggaren@apple.com>
20893
20894        Reviewed by Sam Weinig.
20895        
20896        Moved VM/RegisterFile.cpp => interpreter/RegisterFile.cpp.
20897
20898        * AllInOneFile.cpp:
20899        * GNUmakefile.am:
20900        * JavaScriptCore.pri:
20901        * JavaScriptCore.scons:
20902        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
20903        * JavaScriptCore.xcodeproj/project.pbxproj:
20904        * JavaScriptCoreSources.bkl:
20905        * VM/RegisterFile.cpp: Removed.
20906        * interpreter/RegisterFile.cpp: Copied from VM/RegisterFile.cpp.
20907
209082008-11-17  Geoffrey Garen  <ggaren@apple.com>
20909
20910        Not reviewed.
20911        
20912        Try to fix Windows build.
20913
20914        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
20915
209162008-11-17  Geoffrey Garen  <ggaren@apple.com>
20917
20918        Not reviewed.
20919        
20920        Try to fix Windows build.
20921
20922        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
20923
209242008-11-17  Geoffrey Garen  <ggaren@apple.com>
20925
20926        Not reviewed.
20927        
20928        Try to fix Windows build.
20929
20930        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
20931
209322008-11-17  Geoffrey Garen  <ggaren@apple.com>
20933
20934        Reviewed by Sam Weinig.
20935        
20936        Moved:
20937            VM/ExceptionHelpers.h => runtime/ExceptionHelpers.h
20938            VM/Register.h => interpreter/Register.h
20939            VM/RegisterFile.h => interpreter/RegisterFile.h
20940        
20941        
20942        * GNUmakefile.am:
20943        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
20944        * JavaScriptCore.xcodeproj/project.pbxproj:
20945        * VM/ExceptionHelpers.h: Removed.
20946        * VM/Register.h: Removed.
20947        * VM/RegisterFile.h: Removed.
20948        * interpreter/Register.h: Copied from VM/Register.h.
20949        * interpreter/RegisterFile.h: Copied from VM/RegisterFile.h.
20950        * runtime/ExceptionHelpers.h: Copied from VM/ExceptionHelpers.h.
20951
209522008-11-17  Geoffrey Garen  <ggaren@apple.com>
20953
20954        Not reviewed.
20955        
20956        Try to fix Qt build.
20957
20958        * JavaScriptCore.pri:
20959
209602008-11-17  Geoffrey Garen  <ggaren@apple.com>
20961
20962        Reviewed by Sam Weinig.
20963        
20964        Moved VM/Machine.cpp => interpreter/Interpreter.cpp.
20965
20966        * DerivedSources.make:
20967        * GNUmakefile.am:
20968        * JavaScriptCore.pri:
20969        * JavaScriptCore.scons:
20970        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
20971        * JavaScriptCore.xcodeproj/project.pbxproj:
20972        * JavaScriptCoreSources.bkl:
20973        * VM/Machine.cpp: Removed.
20974        * interpreter/Interpreter.cpp: Copied from VM/Machine.cpp.
20975
209762008-11-17  Geoffrey Garen  <ggaren@apple.com>
20977
20978        Reviewed by Sam Weinig.
20979        
20980        Moved VM/Machine.h => interpreter/Interpreter.h
20981
20982        * GNUmakefile.am:
20983        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
20984        * JavaScriptCore.xcodeproj/project.pbxproj:
20985        * VM/CTI.cpp:
20986        * VM/CTI.h:
20987        * VM/ExceptionHelpers.cpp:
20988        * VM/Machine.cpp:
20989        * VM/Machine.h: Removed.
20990        * VM/SamplingTool.cpp:
20991        * bytecode/CodeBlock.cpp:
20992        * bytecompiler/BytecodeGenerator.cpp:
20993        * bytecompiler/BytecodeGenerator.h:
20994        * debugger/DebuggerCallFrame.cpp:
20995        * interpreter: Added.
20996        * interpreter/Interpreter.h: Copied from VM/Machine.h.
20997        * profiler/ProfileGenerator.cpp:
20998        * runtime/Arguments.h:
20999        * runtime/ArrayPrototype.cpp:
21000        * runtime/Collector.cpp:
21001        * runtime/Completion.cpp:
21002        * runtime/ExecState.h:
21003        * runtime/FunctionPrototype.cpp:
21004        * runtime/JSActivation.cpp:
21005        * runtime/JSFunction.cpp:
21006        * runtime/JSGlobalData.cpp:
21007        * runtime/JSGlobalObject.cpp:
21008        * runtime/JSGlobalObjectFunctions.cpp:
21009        * wrec/WREC.cpp:
21010
210112008-11-17  Geoffrey Garen  <ggaren@apple.com>
21012
21013        Reviewed by Sam Weinig.
21014        
21015        Moved runtime/Interpreter.cpp => runtime/Completion.cpp.
21016
21017        Moved functions from Interpreter.h to Completion.h, and removed
21018        Interpreter.h from the project.
21019
21020        * API/JSBase.cpp:
21021        * AllInOneFile.cpp:
21022        * GNUmakefile.am:
21023        * JavaScriptCore.pri:
21024        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
21025        * JavaScriptCore.xcodeproj/project.pbxproj:
21026        * JavaScriptCoreSources.bkl:
21027        * jsc.cpp:
21028        * runtime/Completion.cpp: Copied from runtime/Interpreter.cpp.
21029        * runtime/Completion.h:
21030        * runtime/Interpreter.cpp: Removed.
21031        * runtime/Interpreter.h: Removed.
21032
210332008-11-17  Gabor Loki  <loki@inf.u-szeged.hu>
21034
21035        Reviewed by Darin Adler.
21036
21037        <https://bugs.webkit.org/show_bug.cgi?id=22312>
21038        Fix PCRE include path problem on Qt-port
21039
21040        * JavaScriptCore.pri:
21041        * pcre/pcre.pri:
21042
210432008-11-17  Gabor Loki  <loki@inf.u-szeged.hu>
21044
21045        Reviewed by Darin Adler.
21046
21047        <https://bugs.webkit.org/show_bug.cgi?id=22313>
21048        Add missing CTI source to the build system on Qt-port
21049
21050        * JavaScriptCore.pri:
21051
210522008-11-17  Geoffrey Garen  <ggaren@apple.com>
21053
21054        Not reviewed.
21055        
21056        Try to fix JSGlue build.
21057
21058        * JavaScriptCore.xcodeproj/project.pbxproj:
21059
210602008-11-17  Geoffrey Garen  <ggaren@apple.com>
21061
21062        Not reviewed.
21063        
21064        Try to fix Qt build.
21065
21066        * jsc.pro:
21067
210682008-11-17  Geoffrey Garen  <ggaren@apple.com>
21069
21070        Not reviewed.
21071        
21072        Try to fix Qt build.
21073
21074        * JavaScriptCore.pri:
21075
210762008-11-17  Geoffrey Garen  <ggaren@apple.com>
21077
21078        Not reviewed.
21079        
21080        Try to fix Qt build.
21081
21082        * JavaScriptCore.pri:
21083
210842008-11-17  Geoffrey Garen  <ggaren@apple.com>
21085
21086        Reviewed by Sam Weinig.
21087        
21088        More file moves:
21089        
21090        VM/CodeBlock.* => bytecode/CodeBlock.*
21091        VM/EvalCodeCache.h => bytecode/EvalCodeCache.h
21092        VM/Instruction.h => bytecode/Instruction.h
21093        VM/Opcode.* => bytecode/Opcode.*
21094
21095        * GNUmakefile.am:
21096        * JavaScriptCore.scons:
21097        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
21098        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
21099        * JavaScriptCore.xcodeproj/project.pbxproj:
21100        * JavaScriptCoreSources.bkl:
21101        * VM/CodeBlock.cpp: Removed.
21102        * VM/CodeBlock.h: Removed.
21103        * VM/EvalCodeCache.h: Removed.
21104        * VM/Instruction.h: Removed.
21105        * VM/Opcode.cpp: Removed.
21106        * VM/Opcode.h: Removed.
21107        * bytecode: Added.
21108        * bytecode/CodeBlock.cpp: Copied from VM/CodeBlock.cpp.
21109        * bytecode/CodeBlock.h: Copied from VM/CodeBlock.h.
21110        * bytecode/EvalCodeCache.h: Copied from VM/EvalCodeCache.h.
21111        * bytecode/Instruction.h: Copied from VM/Instruction.h.
21112        * bytecode/Opcode.cpp: Copied from VM/Opcode.cpp.
21113        * bytecode/Opcode.h: Copied from VM/Opcode.h.
21114        * jsc.pro:
21115        * jscore.bkl:
21116
211172008-11-17  Geoffrey Garen  <ggaren@apple.com>
21118
21119        Not reviewed.
21120        
21121        Try to fix a few more builds.
21122
21123        * GNUmakefile.am:
21124        * JavaScriptCore.pri:
21125        * JavaScriptCore.scons:
21126        * JavaScriptCoreSources.bkl:
21127
211282008-11-17  Geoffrey Garen  <ggaren@apple.com>
21129
21130        Not reviewed.
21131        
21132        Try to fix gtk build.
21133
21134        * GNUmakefile.am:
21135
211362008-11-17  Geoffrey Garen  <ggaren@apple.com>
21137
21138        Not reviewed.
21139        
21140        Try to fix Windows build.
21141
21142        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
21143
211442008-11-17  Geoffrey Garen  <ggaren@apple.com>
21145
21146        Reviewed by Sam Weinig.
21147        
21148        Some file moves:
21149        
21150        VM/LabelID.h => bytecompiler/Label.h
21151        VM/RegisterID.h => bytecompiler/RegisterID.h
21152        VM/SegmentedVector.h => bytecompiler/SegmentedVector.h
21153        bytecompiler/CodeGenerator.* => bytecompiler/BytecodeGenerator.*
21154
21155        * AllInOneFile.cpp:
21156        * JavaScriptCore.xcodeproj/project.pbxproj:
21157        * VM/LabelID.h: Removed.
21158        * VM/RegisterID.h: Removed.
21159        * VM/SegmentedVector.h: Removed.
21160        * bytecompiler/BytecodeGenerator.cpp: Copied from bytecompiler/CodeGenerator.cpp.
21161        * bytecompiler/BytecodeGenerator.h: Copied from bytecompiler/CodeGenerator.h.
21162        * bytecompiler/CodeGenerator.cpp: Removed.
21163        * bytecompiler/CodeGenerator.h: Removed.
21164        * bytecompiler/Label.h: Copied from VM/LabelID.h.
21165        * bytecompiler/LabelScope.h:
21166        * bytecompiler/RegisterID.h: Copied from VM/RegisterID.h.
21167        * bytecompiler/SegmentedVector.h: Copied from VM/SegmentedVector.h.
21168        * jsc.cpp:
21169        * parser/Nodes.cpp:
21170
211712008-11-17  Geoffrey Garen  <ggaren@apple.com>
21172
21173        Not reviewed.
21174        
21175        Try to fix Windows build.
21176
21177        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
21178
211792008-11-17  Geoffrey Garen  <ggaren@apple.com>
21180
21181        Not reviewed.
21182        
21183        Try to fix Windows build.
21184
21185        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
21186
211872008-11-17  Geoffrey Garen  <ggaren@apple.com>
21188
21189        Not reviewed.
21190        
21191        Try to fix Windows build.
21192
21193        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
21194
211952008-11-16  Geoffrey Garen  <ggaren@apple.com>
21196
21197        Not reviewed.
21198        
21199        Try to fix Windows build.
21200
21201        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
21202
212032008-11-16  Geoffrey Garen  <ggaren@apple.com>
21204
21205        Not reviewed.
21206        
21207        Try to fix Windows build.
21208
21209        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
21210
212112008-11-16  Geoffrey Garen  <ggaren@apple.com>
21212
21213        Reviewed by Sam Weinig.
21214        
21215        Moved masm => assembler and split "AssemblerBuffer.h" out of "X86Assembler.h".
21216        
21217        Also renamed ENABLE_MASM to ENABLE_ASSEMBLER.
21218
21219        * GNUmakefile.am:
21220        * JavaScriptCore.xcodeproj/project.pbxproj:
21221        * assembler: Added.
21222        * assembler/AssemblerBuffer.h: Copied from masm/X86Assembler.h.
21223        (JSC::AssemblerBuffer::AssemblerBuffer):
21224        (JSC::AssemblerBuffer::~AssemblerBuffer):
21225        (JSC::AssemblerBuffer::ensureSpace):
21226        (JSC::AssemblerBuffer::isAligned):
21227        (JSC::AssemblerBuffer::putByteUnchecked):
21228        (JSC::AssemblerBuffer::putByte):
21229        (JSC::AssemblerBuffer::putShortUnchecked):
21230        (JSC::AssemblerBuffer::putShort):
21231        (JSC::AssemblerBuffer::putIntUnchecked):
21232        (JSC::AssemblerBuffer::putInt):
21233        (JSC::AssemblerBuffer::data):
21234        (JSC::AssemblerBuffer::size):
21235        (JSC::AssemblerBuffer::reset):
21236        (JSC::AssemblerBuffer::executableCopy):
21237        (JSC::AssemblerBuffer::grow):
21238        * assembler/X86Assembler.h: Copied from masm/X86Assembler.h.
21239        * masm: Removed.
21240        * masm/X86Assembler.h: Removed.
21241        * wtf/Platform.h:
21242
212432008-11-16  Geoffrey Garen  <ggaren@apple.com>
21244
21245        Not reviewed.
21246        
21247        Try to fix gtk build.
21248
21249        * GNUmakefile.am:
21250
212512008-11-16  Geoffrey Garen  <ggaren@apple.com>
21252
21253        Not reviewed.
21254        
21255        Fixed tyop.
21256
21257        * VM/CTI.cpp:
21258
212592008-11-16  Geoffrey Garen  <ggaren@apple.com>
21260
21261        Not reviewed.
21262        
21263        Try to fix windows build.
21264
21265        * VM/CTI.cpp:
21266
212672008-11-16  Geoffrey Garen  <ggaren@apple.com>
21268
21269        Not reviewed.
21270        
21271        Try to fix gtk build.
21272
21273        * GNUmakefile.am:
21274
212752008-11-16  Geoffrey Garen  <ggaren@apple.com>
21276
21277        Reviewed by Sam Weinig.
21278
21279        Renamed ENABLE_CTI and ENABLE(CTI) to ENABLE_JIT and ENABLE(JIT).
21280
21281        * VM/CTI.cpp:
21282        * VM/CTI.h:
21283        * VM/CodeBlock.cpp:
21284        (JSC::CodeBlock::~CodeBlock):
21285        * VM/CodeBlock.h:
21286        (JSC::CodeBlock::CodeBlock):
21287        * VM/Machine.cpp:
21288        (JSC::Interpreter::Interpreter):
21289        (JSC::Interpreter::initialize):
21290        (JSC::Interpreter::~Interpreter):
21291        (JSC::Interpreter::execute):
21292        (JSC::Interpreter::privateExecute):
21293        * VM/Machine.h:
21294        * bytecompiler/CodeGenerator.cpp:
21295        (JSC::prepareJumpTableForStringSwitch):
21296        * runtime/JSFunction.cpp:
21297        (JSC::JSFunction::~JSFunction):
21298        * runtime/JSGlobalData.h:
21299        * wrec/WREC.h:
21300        * wtf/Platform.h:
21301        * wtf/TCSystemAlloc.cpp:
21302
213032008-11-16  Geoffrey Garen  <ggaren@apple.com>
21304
21305        Not reviewed.
21306        
21307        Try to fix gtk build.
21308
21309        * VM/CTI.cpp:
21310
213112008-11-16  Geoffrey Garen  <ggaren@apple.com>
21312
21313        Reviewed by a few people on squirrelfish-dev.
21314        
21315        Renamed CTI => JIT.
21316
21317        * VM/CTI.cpp:
21318        (JSC::JIT::killLastResultRegister):
21319        (JSC::JIT::emitGetVirtualRegister):
21320        (JSC::JIT::emitGetVirtualRegisters):
21321        (JSC::JIT::emitPutCTIArgFromVirtualRegister):
21322        (JSC::JIT::emitPutCTIArg):
21323        (JSC::JIT::emitGetCTIArg):
21324        (JSC::JIT::emitPutCTIArgConstant):
21325        (JSC::JIT::getConstantImmediateNumericArg):
21326        (JSC::JIT::emitPutCTIParam):
21327        (JSC::JIT::emitGetCTIParam):
21328        (JSC::JIT::emitPutToCallFrameHeader):
21329        (JSC::JIT::emitGetFromCallFrameHeader):
21330        (JSC::JIT::emitPutVirtualRegister):
21331        (JSC::JIT::emitInitRegister):
21332        (JSC::JIT::printBytecodeOperandTypes):
21333        (JSC::JIT::emitAllocateNumber):
21334        (JSC::JIT::emitNakedCall):
21335        (JSC::JIT::emitNakedFastCall):
21336        (JSC::JIT::emitCTICall):
21337        (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
21338        (JSC::JIT::linkSlowCaseIfNotJSCell):
21339        (JSC::JIT::emitJumpSlowCaseIfNotImmNum):
21340        (JSC::JIT::emitJumpSlowCaseIfNotImmNums):
21341        (JSC::JIT::getDeTaggedConstantImmediate):
21342        (JSC::JIT::emitFastArithDeTagImmediate):
21343        (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
21344        (JSC::JIT::emitFastArithReTagImmediate):
21345        (JSC::JIT::emitFastArithPotentiallyReTagImmediate):
21346        (JSC::JIT::emitFastArithImmToInt):
21347        (JSC::JIT::emitFastArithIntToImmOrSlowCase):
21348        (JSC::JIT::emitFastArithIntToImmNoCheck):
21349        (JSC::JIT::emitArithIntToImmWithJump):
21350        (JSC::JIT::emitTagAsBoolImmediate):
21351        (JSC::JIT::JIT):
21352        (JSC::JIT::compileOpCallInitializeCallFrame):
21353        (JSC::JIT::compileOpCallSetupArgs):
21354        (JSC::JIT::compileOpCallEvalSetupArgs):
21355        (JSC::JIT::compileOpConstructSetupArgs):
21356        (JSC::JIT::compileOpCall):
21357        (JSC::JIT::compileOpStrictEq):
21358        (JSC::JIT::emitSlowScriptCheck):
21359        (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate):
21360        (JSC::JIT::compileBinaryArithOp):
21361        (JSC::JIT::compileBinaryArithOpSlowCase):
21362        (JSC::JIT::privateCompileMainPass):
21363        (JSC::JIT::privateCompileLinkPass):
21364        (JSC::JIT::privateCompileSlowCases):
21365        (JSC::JIT::privateCompile):
21366        (JSC::JIT::privateCompileGetByIdSelf):
21367        (JSC::JIT::privateCompileGetByIdProto):
21368        (JSC::JIT::privateCompileGetByIdChain):
21369        (JSC::JIT::privateCompilePutByIdReplace):
21370        (JSC::JIT::privateCompilePutByIdTransition):
21371        (JSC::JIT::unlinkCall):
21372        (JSC::JIT::linkCall):
21373        (JSC::JIT::privateCompileCTIMachineTrampolines):
21374        (JSC::JIT::freeCTIMachineTrampolines):
21375        (JSC::JIT::patchGetByIdSelf):
21376        (JSC::JIT::patchPutByIdReplace):
21377        (JSC::JIT::privateCompilePatchGetArrayLength):
21378        (JSC::JIT::emitGetVariableObjectRegister):
21379        (JSC::JIT::emitPutVariableObjectRegister):
21380        * VM/CTI.h:
21381        (JSC::JIT::compile):
21382        (JSC::JIT::compileGetByIdSelf):
21383        (JSC::JIT::compileGetByIdProto):
21384        (JSC::JIT::compileGetByIdChain):
21385        (JSC::JIT::compilePutByIdReplace):
21386        (JSC::JIT::compilePutByIdTransition):
21387        (JSC::JIT::compileCTIMachineTrampolines):
21388        (JSC::JIT::compilePatchGetArrayLength):
21389        * VM/CodeBlock.cpp:
21390        (JSC::CodeBlock::unlinkCallers):
21391        * VM/Machine.cpp:
21392        (JSC::Interpreter::initialize):
21393        (JSC::Interpreter::~Interpreter):
21394        (JSC::Interpreter::execute):
21395        (JSC::Interpreter::tryCTICachePutByID):
21396        (JSC::Interpreter::tryCTICacheGetByID):
21397        (JSC::Interpreter::cti_op_call_JSFunction):
21398        (JSC::Interpreter::cti_vm_dontLazyLinkCall):
21399        (JSC::Interpreter::cti_vm_lazyLinkCall):
21400        * VM/Machine.h:
21401        * VM/RegisterFile.h:
21402        * parser/Nodes.h:
21403        * runtime/JSArray.h:
21404        * runtime/JSCell.h:
21405        * runtime/JSFunction.h:
21406        * runtime/JSImmediate.h:
21407        * runtime/JSNumberCell.h:
21408        * runtime/JSObject.h:
21409        * runtime/JSString.h:
21410        * runtime/JSVariableObject.h:
21411        * runtime/ScopeChain.h:
21412        * runtime/Structure.h:
21413        * runtime/TypeInfo.h:
21414        * runtime/UString.h:
21415
214162008-11-16  Geoffrey Garen  <ggaren@apple.com>
21417
21418        Not reviewed.
21419        
21420        Try to fix wx build.
21421
21422        * jscore.bkl:
21423
214242008-11-16  Geoffrey Garen  <ggaren@apple.com>
21425
21426        Reviewed by Sam Weinig.
21427
21428        Nixed X86:: and X86Assembler:: prefixes in a lot of places using typedefs.
21429
21430        * VM/CTI.cpp:
21431        (JSC::CTI::emitGetVirtualRegister):
21432        (JSC::CTI::emitGetVirtualRegisters):
21433        (JSC::CTI::emitPutCTIArgFromVirtualRegister):
21434        (JSC::CTI::emitPutCTIArg):
21435        (JSC::CTI::emitGetCTIArg):
21436        (JSC::CTI::emitPutCTIParam):
21437        (JSC::CTI::emitGetCTIParam):
21438        (JSC::CTI::emitPutToCallFrameHeader):
21439        (JSC::CTI::emitGetFromCallFrameHeader):
21440        (JSC::CTI::emitPutVirtualRegister):
21441        (JSC::CTI::emitNakedCall):
21442        (JSC::CTI::emitNakedFastCall):
21443        (JSC::CTI::emitCTICall):
21444        (JSC::CTI::emitJumpSlowCaseIfNotJSCell):
21445        (JSC::CTI::emitJumpSlowCaseIfNotImmNum):
21446        (JSC::CTI::emitJumpSlowCaseIfNotImmNums):
21447        (JSC::CTI::emitFastArithDeTagImmediate):
21448        (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero):
21449        (JSC::CTI::emitFastArithReTagImmediate):
21450        (JSC::CTI::emitFastArithPotentiallyReTagImmediate):
21451        (JSC::CTI::emitFastArithImmToInt):
21452        (JSC::CTI::emitFastArithIntToImmOrSlowCase):
21453        (JSC::CTI::emitFastArithIntToImmNoCheck):
21454        (JSC::CTI::emitArithIntToImmWithJump):
21455        (JSC::CTI::emitTagAsBoolImmediate):
21456        (JSC::CTI::compileOpCall):
21457        (JSC::CTI::compileOpStrictEq):
21458        (JSC::CTI::emitSlowScriptCheck):
21459        (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate):
21460        (JSC::CTI::compileBinaryArithOp):
21461        (JSC::CTI::compileBinaryArithOpSlowCase):
21462        (JSC::CTI::privateCompileMainPass):
21463        (JSC::CTI::privateCompileSlowCases):
21464        (JSC::CTI::privateCompile):
21465        (JSC::CTI::privateCompileGetByIdSelf):
21466        (JSC::CTI::privateCompileGetByIdProto):
21467        (JSC::CTI::privateCompileGetByIdChain):
21468        (JSC::CTI::privateCompilePutByIdReplace):
21469        (JSC::CTI::privateCompilePutByIdTransition):
21470        (JSC::CTI::privateCompileCTIMachineTrampolines):
21471        (JSC::CTI::privateCompilePatchGetArrayLength):
21472        (JSC::CTI::emitGetVariableObjectRegister):
21473        (JSC::CTI::emitPutVariableObjectRegister):
21474        * VM/CTI.h:
21475        (JSC::CallRecord::CallRecord):
21476        (JSC::JmpTable::JmpTable):
21477        (JSC::SlowCaseEntry::SlowCaseEntry):
21478        (JSC::CTI::JSRInfo::JSRInfo):
21479        * wrec/WREC.h:
21480
214812008-11-16  Geoffrey Garen  <ggaren@apple.com>
21482
21483        Not reviewed.
21484        
21485        Try to fix Qt build.
21486
21487        * JavaScriptCore.pri:
21488
214892008-11-16  Geoffrey Garen  <ggaren@apple.com>
21490
21491        Reviewed by Sam Weinig.
21492        
21493        Renamed OBJECT_OFFSET => FIELD_OFFSET
21494
21495        Nixed use of OBJECT_OFFSET outside of CTI.cpp by making CTI a friend in
21496        more places.
21497
21498        * VM/CTI.cpp:
21499        (JSC::CTI::compileOpCallInitializeCallFrame):
21500        (JSC::CTI::compileOpCall):
21501        (JSC::CTI::emitSlowScriptCheck):
21502        (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate):
21503        (JSC::CTI::compileBinaryArithOp):
21504        (JSC::CTI::privateCompileMainPass):
21505        (JSC::CTI::privateCompileSlowCases):
21506        (JSC::CTI::privateCompile):
21507        (JSC::CTI::privateCompileGetByIdSelf):
21508        (JSC::CTI::privateCompileGetByIdProto):
21509        (JSC::CTI::privateCompileGetByIdChain):
21510        (JSC::CTI::privateCompilePutByIdReplace):
21511        (JSC::CTI::privateCompilePutByIdTransition):
21512        (JSC::CTI::privateCompileCTIMachineTrampolines):
21513        (JSC::CTI::privateCompilePatchGetArrayLength):
21514        (JSC::CTI::emitGetVariableObjectRegister):
21515        (JSC::CTI::emitPutVariableObjectRegister):
21516        * runtime/JSValue.h:
21517        * runtime/JSVariableObject.h:
21518
215192008-11-16  Geoffrey Garen  <ggaren@apple.com>
21520
21521        Reviewed by Sam Weinig.
21522        
21523        Renames:
21524        
21525        X86Assembler::copy => X86Assembler::executableCopy
21526        AssemblerBuffer::copy => AssemblerBuffer::executableCopy
21527
21528        * VM/CTI.cpp:
21529        (JSC::CTI::privateCompile):
21530        (JSC::CTI::privateCompileGetByIdSelf):
21531        (JSC::CTI::privateCompileGetByIdProto):
21532        (JSC::CTI::privateCompileGetByIdChain):
21533        (JSC::CTI::privateCompilePutByIdReplace):
21534        (JSC::CTI::privateCompilePutByIdTransition):
21535        (JSC::CTI::privateCompileCTIMachineTrampolines):
21536        (JSC::CTI::privateCompilePatchGetArrayLength):
21537        * masm/X86Assembler.h:
21538        (JSC::AssemblerBuffer::executableCopy):
21539        (JSC::X86Assembler::executableCopy):
21540        * wrec/WREC.cpp:
21541        (JSC::WREC::compileRegExp):
21542
215432008-11-16  Geoffrey Garen  <ggaren@apple.com>
21544
21545        Reviewed by Sam Weinig.
21546        
21547        Renamed WREC => JSC::WREC, removing JSC:: prefix in a lot of places.
21548        Renamed WRECFunction => WREC::CompiledRegExp, and deployed this type
21549        name in place of a few casts.
21550
21551        * runtime/RegExp.cpp:
21552        (JSC::RegExp::RegExp):
21553        (JSC::RegExp::~RegExp):
21554        (JSC::RegExp::match):
21555        * runtime/RegExp.h:
21556        * wrec/CharacterClassConstructor.cpp:
21557        * wrec/CharacterClassConstructor.h:
21558        * wrec/WREC.cpp:
21559        (JSC::WREC::compileRegExp):
21560        * wrec/WREC.h:
21561        (JSC::WREC::Generator::Generator):
21562        (JSC::WREC::Parser::Parser):
21563        (JSC::WREC::Parser::parseAlternative):
21564
215652008-11-16  Geoffrey Garen  <ggaren@apple.com>
21566
21567        Reviewed by Sam Weinig.
21568        
21569        Renamed BytecodeInterpreter => Interpreter.
21570
21571        * JavaScriptCore.exp:
21572        * VM/CTI.cpp:
21573        (JSC::):
21574        (JSC::CTI::compileOpCall):
21575        (JSC::CTI::emitSlowScriptCheck):
21576        (JSC::CTI::compileBinaryArithOpSlowCase):
21577        (JSC::CTI::privateCompileMainPass):
21578        (JSC::CTI::privateCompileSlowCases):
21579        (JSC::CTI::privateCompile):
21580        (JSC::CTI::privateCompileGetByIdSelf):
21581        (JSC::CTI::privateCompileGetByIdProto):
21582        (JSC::CTI::privateCompileGetByIdChain):
21583        (JSC::CTI::privateCompilePutByIdReplace):
21584        (JSC::CTI::privateCompilePutByIdTransition):
21585        (JSC::CTI::privateCompileCTIMachineTrampolines):
21586        (JSC::CTI::freeCTIMachineTrampolines):
21587        (JSC::CTI::patchGetByIdSelf):
21588        (JSC::CTI::patchPutByIdReplace):
21589        (JSC::CTI::privateCompilePatchGetArrayLength):
21590        * VM/CTI.h:
21591        * VM/CodeBlock.cpp:
21592        (JSC::CodeBlock::printStructures):
21593        (JSC::CodeBlock::derefStructures):
21594        (JSC::CodeBlock::refStructures):
21595        * VM/Machine.cpp:
21596        (JSC::jsLess):
21597        (JSC::jsLessEq):
21598        (JSC::Interpreter::resolve):
21599        (JSC::Interpreter::resolveSkip):
21600        (JSC::Interpreter::resolveGlobal):
21601        (JSC::Interpreter::resolveBase):
21602        (JSC::Interpreter::resolveBaseAndProperty):
21603        (JSC::Interpreter::resolveBaseAndFunc):
21604        (JSC::Interpreter::slideRegisterWindowForCall):
21605        (JSC::Interpreter::callEval):
21606        (JSC::Interpreter::Interpreter):
21607        (JSC::Interpreter::initialize):
21608        (JSC::Interpreter::~Interpreter):
21609        (JSC::Interpreter::dumpCallFrame):
21610        (JSC::Interpreter::dumpRegisters):
21611        (JSC::Interpreter::isOpcode):
21612        (JSC::Interpreter::unwindCallFrame):
21613        (JSC::Interpreter::throwException):
21614        (JSC::Interpreter::execute):
21615        (JSC::Interpreter::debug):
21616        (JSC::Interpreter::resetTimeoutCheck):
21617        (JSC::Interpreter::checkTimeout):
21618        (JSC::Interpreter::createExceptionScope):
21619        (JSC::Interpreter::tryCachePutByID):
21620        (JSC::Interpreter::uncachePutByID):
21621        (JSC::Interpreter::tryCacheGetByID):
21622        (JSC::Interpreter::uncacheGetByID):
21623        (JSC::Interpreter::privateExecute):
21624        (JSC::Interpreter::retrieveArguments):
21625        (JSC::Interpreter::retrieveCaller):
21626        (JSC::Interpreter::retrieveLastCaller):
21627        (JSC::Interpreter::findFunctionCallFrame):
21628        (JSC::Interpreter::tryCTICachePutByID):
21629        (JSC::Interpreter::tryCTICacheGetByID):
21630        (JSC::Interpreter::cti_op_convert_this):
21631        (JSC::Interpreter::cti_op_end):
21632        (JSC::Interpreter::cti_op_add):
21633        (JSC::Interpreter::cti_op_pre_inc):
21634        (JSC::Interpreter::cti_timeout_check):
21635        (JSC::Interpreter::cti_register_file_check):
21636        (JSC::Interpreter::cti_op_loop_if_less):
21637        (JSC::Interpreter::cti_op_loop_if_lesseq):
21638        (JSC::Interpreter::cti_op_new_object):
21639        (JSC::Interpreter::cti_op_put_by_id):
21640        (JSC::Interpreter::cti_op_put_by_id_second):
21641        (JSC::Interpreter::cti_op_put_by_id_generic):
21642        (JSC::Interpreter::cti_op_put_by_id_fail):
21643        (JSC::Interpreter::cti_op_get_by_id):
21644        (JSC::Interpreter::cti_op_get_by_id_second):
21645        (JSC::Interpreter::cti_op_get_by_id_generic):
21646        (JSC::Interpreter::cti_op_get_by_id_fail):
21647        (JSC::Interpreter::cti_op_instanceof):
21648        (JSC::Interpreter::cti_op_del_by_id):
21649        (JSC::Interpreter::cti_op_mul):
21650        (JSC::Interpreter::cti_op_new_func):
21651        (JSC::Interpreter::cti_op_call_JSFunction):
21652        (JSC::Interpreter::cti_op_call_arityCheck):
21653        (JSC::Interpreter::cti_vm_dontLazyLinkCall):
21654        (JSC::Interpreter::cti_vm_lazyLinkCall):
21655        (JSC::Interpreter::cti_op_push_activation):
21656        (JSC::Interpreter::cti_op_call_NotJSFunction):
21657        (JSC::Interpreter::cti_op_create_arguments):
21658        (JSC::Interpreter::cti_op_create_arguments_no_params):
21659        (JSC::Interpreter::cti_op_tear_off_activation):
21660        (JSC::Interpreter::cti_op_tear_off_arguments):
21661        (JSC::Interpreter::cti_op_profile_will_call):
21662        (JSC::Interpreter::cti_op_profile_did_call):
21663        (JSC::Interpreter::cti_op_ret_scopeChain):
21664        (JSC::Interpreter::cti_op_new_array):
21665        (JSC::Interpreter::cti_op_resolve):
21666        (JSC::Interpreter::cti_op_construct_JSConstruct):
21667        (JSC::Interpreter::cti_op_construct_NotJSConstruct):
21668        (JSC::Interpreter::cti_op_get_by_val):
21669        (JSC::Interpreter::cti_op_resolve_func):
21670        (JSC::Interpreter::cti_op_sub):
21671        (JSC::Interpreter::cti_op_put_by_val):
21672        (JSC::Interpreter::cti_op_put_by_val_array):
21673        (JSC::Interpreter::cti_op_lesseq):
21674        (JSC::Interpreter::cti_op_loop_if_true):
21675        (JSC::Interpreter::cti_op_negate):
21676        (JSC::Interpreter::cti_op_resolve_base):
21677        (JSC::Interpreter::cti_op_resolve_skip):
21678        (JSC::Interpreter::cti_op_resolve_global):
21679        (JSC::Interpreter::cti_op_div):
21680        (JSC::Interpreter::cti_op_pre_dec):
21681        (JSC::Interpreter::cti_op_jless):
21682        (JSC::Interpreter::cti_op_not):
21683        (JSC::Interpreter::cti_op_jtrue):
21684        (JSC::Interpreter::cti_op_post_inc):
21685        (JSC::Interpreter::cti_op_eq):
21686        (JSC::Interpreter::cti_op_lshift):
21687        (JSC::Interpreter::cti_op_bitand):
21688        (JSC::Interpreter::cti_op_rshift):
21689        (JSC::Interpreter::cti_op_bitnot):
21690        (JSC::Interpreter::cti_op_resolve_with_base):
21691        (JSC::Interpreter::cti_op_new_func_exp):
21692        (JSC::Interpreter::cti_op_mod):
21693        (JSC::Interpreter::cti_op_less):
21694        (JSC::Interpreter::cti_op_neq):
21695        (JSC::Interpreter::cti_op_post_dec):
21696        (JSC::Interpreter::cti_op_urshift):
21697        (JSC::Interpreter::cti_op_bitxor):
21698        (JSC::Interpreter::cti_op_new_regexp):
21699        (JSC::Interpreter::cti_op_bitor):
21700        (JSC::Interpreter::cti_op_call_eval):
21701        (JSC::Interpreter::cti_op_throw):
21702        (JSC::Interpreter::cti_op_get_pnames):
21703        (JSC::Interpreter::cti_op_next_pname):
21704        (JSC::Interpreter::cti_op_push_scope):
21705        (JSC::Interpreter::cti_op_pop_scope):
21706        (JSC::Interpreter::cti_op_typeof):
21707        (JSC::Interpreter::cti_op_is_undefined):
21708        (JSC::Interpreter::cti_op_is_boolean):
21709        (JSC::Interpreter::cti_op_is_number):
21710        (JSC::Interpreter::cti_op_is_string):
21711        (JSC::Interpreter::cti_op_is_object):
21712        (JSC::Interpreter::cti_op_is_function):
21713        (JSC::Interpreter::cti_op_stricteq):
21714        (JSC::Interpreter::cti_op_nstricteq):
21715        (JSC::Interpreter::cti_op_to_jsnumber):
21716        (JSC::Interpreter::cti_op_in):
21717        (JSC::Interpreter::cti_op_push_new_scope):
21718        (JSC::Interpreter::cti_op_jmp_scopes):
21719        (JSC::Interpreter::cti_op_put_by_index):
21720        (JSC::Interpreter::cti_op_switch_imm):
21721        (JSC::Interpreter::cti_op_switch_char):
21722        (JSC::Interpreter::cti_op_switch_string):
21723        (JSC::Interpreter::cti_op_del_by_val):
21724        (JSC::Interpreter::cti_op_put_getter):
21725        (JSC::Interpreter::cti_op_put_setter):
21726        (JSC::Interpreter::cti_op_new_error):
21727        (JSC::Interpreter::cti_op_debug):
21728        (JSC::Interpreter::cti_vm_throw):
21729        * VM/Machine.h:
21730        * VM/Register.h:
21731        * VM/SamplingTool.h:
21732        (JSC::SamplingTool::SamplingTool):
21733        * bytecompiler/CodeGenerator.cpp:
21734        (JSC::BytecodeGenerator::generate):
21735        (JSC::BytecodeGenerator::BytecodeGenerator):
21736        * jsc.cpp:
21737        (runWithScripts):
21738        * runtime/ExecState.h:
21739        (JSC::ExecState::interpreter):
21740        * runtime/JSCell.h:
21741        * runtime/JSFunction.h:
21742        * runtime/JSGlobalData.cpp:
21743        (JSC::JSGlobalData::JSGlobalData):
21744        * runtime/JSGlobalData.h:
21745        * runtime/JSString.h:
21746        * wrec/WREC.cpp:
21747        (WREC::compileRegExp):
21748        * wrec/WREC.h:
21749
217502008-11-16  Geoffrey Garen  <ggaren@apple.com>
21751
21752        Roll out r38461 (my last patch) because it broke the world.
21753
217542008-11-16  Geoffrey Garen  <ggaren@apple.com>
21755
21756        Reviewed by Sam Weinig.
21757
21758        A few more renames:
21759
21760        BytecodeInterpreter => Interpreter
21761        WREC => JSC::WREC, removing JSC:: prefix in a lot of places
21762        X86Assembler::copy => X86Assembler::executableCopy
21763        AssemblerBuffer::copy => AssemblerBuffer::executableCopy
21764        WRECFunction => WREC::RegExpFunction
21765        OBJECT_OFFSET => FIELD_OFFSET
21766        
21767        Also:
21768
21769        Nixed use of OBJECT_OFFSET outside of CTI.cpp by making CTI a friend in more places.
21770        Nixed X86:: and X86Assembler:: prefixes in a lot of places using typedefs
21771
21772        * JavaScriptCore.exp:
21773        * VM/CTI.cpp:
21774        (JSC::):
21775        (JSC::CTI::emitGetVirtualRegister):
21776        (JSC::CTI::emitGetVirtualRegisters):
21777        (JSC::CTI::emitPutCTIArgFromVirtualRegister):
21778        (JSC::CTI::emitPutCTIArg):
21779        (JSC::CTI::emitGetCTIArg):
21780        (JSC::CTI::emitPutCTIParam):
21781        (JSC::CTI::emitGetCTIParam):
21782        (JSC::CTI::emitPutToCallFrameHeader):
21783        (JSC::CTI::emitGetFromCallFrameHeader):
21784        (JSC::CTI::emitPutVirtualRegister):
21785        (JSC::CTI::emitNakedCall):
21786        (JSC::CTI::emitNakedFastCall):
21787        (JSC::CTI::emitCTICall):
21788        (JSC::CTI::emitJumpSlowCaseIfNotJSCell):
21789        (JSC::CTI::emitJumpSlowCaseIfNotImmNum):
21790        (JSC::CTI::emitJumpSlowCaseIfNotImmNums):
21791        (JSC::CTI::emitFastArithDeTagImmediate):
21792        (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero):
21793        (JSC::CTI::emitFastArithReTagImmediate):
21794        (JSC::CTI::emitFastArithPotentiallyReTagImmediate):
21795        (JSC::CTI::emitFastArithImmToInt):
21796        (JSC::CTI::emitFastArithIntToImmOrSlowCase):
21797        (JSC::CTI::emitFastArithIntToImmNoCheck):
21798        (JSC::CTI::emitArithIntToImmWithJump):
21799        (JSC::CTI::emitTagAsBoolImmediate):
21800        (JSC::CTI::compileOpCallInitializeCallFrame):
21801        (JSC::CTI::compileOpCall):
21802        (JSC::CTI::compileOpStrictEq):
21803        (JSC::CTI::emitSlowScriptCheck):
21804        (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate):
21805        (JSC::CTI::compileBinaryArithOp):
21806        (JSC::CTI::compileBinaryArithOpSlowCase):
21807        (JSC::CTI::privateCompileMainPass):
21808        (JSC::CTI::privateCompileSlowCases):
21809        (JSC::CTI::privateCompile):
21810        (JSC::CTI::privateCompileGetByIdSelf):
21811        (JSC::CTI::privateCompileGetByIdProto):
21812        (JSC::CTI::privateCompileGetByIdChain):
21813        (JSC::CTI::privateCompilePutByIdReplace):
21814        (JSC::CTI::privateCompilePutByIdTransition):
21815        (JSC::CTI::privateCompileCTIMachineTrampolines):
21816        (JSC::CTI::freeCTIMachineTrampolines):
21817        (JSC::CTI::patchGetByIdSelf):
21818        (JSC::CTI::patchPutByIdReplace):
21819        (JSC::CTI::privateCompilePatchGetArrayLength):
21820        (JSC::CTI::emitGetVariableObjectRegister):
21821        (JSC::CTI::emitPutVariableObjectRegister):
21822        * VM/CTI.h:
21823        (JSC::CallRecord::CallRecord):
21824        (JSC::JmpTable::JmpTable):
21825        (JSC::SlowCaseEntry::SlowCaseEntry):
21826        (JSC::CTI::JSRInfo::JSRInfo):
21827        * VM/CodeBlock.cpp:
21828        (JSC::CodeBlock::printStructures):
21829        (JSC::CodeBlock::derefStructures):
21830        (JSC::CodeBlock::refStructures):
21831        * VM/Machine.cpp:
21832        (JSC::jsLess):
21833        (JSC::jsLessEq):
21834        (JSC::Interpreter::resolve):
21835        (JSC::Interpreter::resolveSkip):
21836        (JSC::Interpreter::resolveGlobal):
21837        (JSC::Interpreter::resolveBase):
21838        (JSC::Interpreter::resolveBaseAndProperty):
21839        (JSC::Interpreter::resolveBaseAndFunc):
21840        (JSC::Interpreter::slideRegisterWindowForCall):
21841        (JSC::Interpreter::callEval):
21842        (JSC::Interpreter::Interpreter):
21843        (JSC::Interpreter::initialize):
21844        (JSC::Interpreter::~Interpreter):
21845        (JSC::Interpreter::dumpCallFrame):
21846        (JSC::Interpreter::dumpRegisters):
21847        (JSC::Interpreter::isOpcode):
21848        (JSC::Interpreter::unwindCallFrame):
21849        (JSC::Interpreter::throwException):
21850        (JSC::Interpreter::execute):
21851        (JSC::Interpreter::debug):
21852        (JSC::Interpreter::resetTimeoutCheck):
21853        (JSC::Interpreter::checkTimeout):
21854        (JSC::Interpreter::createExceptionScope):
21855        (JSC::Interpreter::tryCachePutByID):
21856        (JSC::Interpreter::uncachePutByID):
21857        (JSC::Interpreter::tryCacheGetByID):
21858        (JSC::Interpreter::uncacheGetByID):
21859        (JSC::Interpreter::privateExecute):
21860        (JSC::Interpreter::retrieveArguments):
21861        (JSC::Interpreter::retrieveCaller):
21862        (JSC::Interpreter::retrieveLastCaller):
21863        (JSC::Interpreter::findFunctionCallFrame):
21864        (JSC::Interpreter::tryCTICachePutByID):
21865        (JSC::Interpreter::tryCTICacheGetByID):
21866        (JSC::):
21867        (JSC::Interpreter::cti_op_convert_this):
21868        (JSC::Interpreter::cti_op_end):
21869        (JSC::Interpreter::cti_op_add):
21870        (JSC::Interpreter::cti_op_pre_inc):
21871        (JSC::Interpreter::cti_timeout_check):
21872        (JSC::Interpreter::cti_register_file_check):
21873        (JSC::Interpreter::cti_op_loop_if_less):
21874        (JSC::Interpreter::cti_op_loop_if_lesseq):
21875        (JSC::Interpreter::cti_op_new_object):
21876        (JSC::Interpreter::cti_op_put_by_id):
21877        (JSC::Interpreter::cti_op_put_by_id_second):
21878        (JSC::Interpreter::cti_op_put_by_id_generic):
21879        (JSC::Interpreter::cti_op_put_by_id_fail):
21880        (JSC::Interpreter::cti_op_get_by_id):
21881        (JSC::Interpreter::cti_op_get_by_id_second):
21882        (JSC::Interpreter::cti_op_get_by_id_generic):
21883        (JSC::Interpreter::cti_op_get_by_id_fail):
21884        (JSC::Interpreter::cti_op_instanceof):
21885        (JSC::Interpreter::cti_op_del_by_id):
21886        (JSC::Interpreter::cti_op_mul):
21887        (JSC::Interpreter::cti_op_new_func):
21888        (JSC::Interpreter::cti_op_call_JSFunction):
21889        (JSC::Interpreter::cti_op_call_arityCheck):
21890        (JSC::Interpreter::cti_vm_dontLazyLinkCall):
21891        (JSC::Interpreter::cti_vm_lazyLinkCall):
21892        (JSC::Interpreter::cti_op_push_activation):
21893        (JSC::Interpreter::cti_op_call_NotJSFunction):
21894        (JSC::Interpreter::cti_op_create_arguments):
21895        (JSC::Interpreter::cti_op_create_arguments_no_params):
21896        (JSC::Interpreter::cti_op_tear_off_activation):
21897        (JSC::Interpreter::cti_op_tear_off_arguments):
21898        (JSC::Interpreter::cti_op_profile_will_call):
21899        (JSC::Interpreter::cti_op_profile_did_call):
21900        (JSC::Interpreter::cti_op_ret_scopeChain):
21901        (JSC::Interpreter::cti_op_new_array):
21902        (JSC::Interpreter::cti_op_resolve):
21903        (JSC::Interpreter::cti_op_construct_JSConstruct):
21904        (JSC::Interpreter::cti_op_construct_NotJSConstruct):
21905        (JSC::Interpreter::cti_op_get_by_val):
21906        (JSC::Interpreter::cti_op_resolve_func):
21907        (JSC::Interpreter::cti_op_sub):
21908        (JSC::Interpreter::cti_op_put_by_val):
21909        (JSC::Interpreter::cti_op_put_by_val_array):
21910        (JSC::Interpreter::cti_op_lesseq):
21911        (JSC::Interpreter::cti_op_loop_if_true):
21912        (JSC::Interpreter::cti_op_negate):
21913        (JSC::Interpreter::cti_op_resolve_base):
21914        (JSC::Interpreter::cti_op_resolve_skip):
21915        (JSC::Interpreter::cti_op_resolve_global):
21916        (JSC::Interpreter::cti_op_div):
21917        (JSC::Interpreter::cti_op_pre_dec):
21918        (JSC::Interpreter::cti_op_jless):
21919        (JSC::Interpreter::cti_op_not):
21920        (JSC::Interpreter::cti_op_jtrue):
21921        (JSC::Interpreter::cti_op_post_inc):
21922        (JSC::Interpreter::cti_op_eq):
21923        (JSC::Interpreter::cti_op_lshift):
21924        (JSC::Interpreter::cti_op_bitand):
21925        (JSC::Interpreter::cti_op_rshift):
21926        (JSC::Interpreter::cti_op_bitnot):
21927        (JSC::Interpreter::cti_op_resolve_with_base):
21928        (JSC::Interpreter::cti_op_new_func_exp):
21929        (JSC::Interpreter::cti_op_mod):
21930        (JSC::Interpreter::cti_op_less):
21931        (JSC::Interpreter::cti_op_neq):
21932        (JSC::Interpreter::cti_op_post_dec):
21933        (JSC::Interpreter::cti_op_urshift):
21934        (JSC::Interpreter::cti_op_bitxor):
21935        (JSC::Interpreter::cti_op_new_regexp):
21936        (JSC::Interpreter::cti_op_bitor):
21937        (JSC::Interpreter::cti_op_call_eval):
21938        (JSC::Interpreter::cti_op_throw):
21939        (JSC::Interpreter::cti_op_get_pnames):
21940        (JSC::Interpreter::cti_op_next_pname):
21941        (JSC::Interpreter::cti_op_push_scope):
21942        (JSC::Interpreter::cti_op_pop_scope):
21943        (JSC::Interpreter::cti_op_typeof):
21944        (JSC::Interpreter::cti_op_is_undefined):
21945        (JSC::Interpreter::cti_op_is_boolean):
21946        (JSC::Interpreter::cti_op_is_number):
21947        (JSC::Interpreter::cti_op_is_string):
21948        (JSC::Interpreter::cti_op_is_object):
21949        (JSC::Interpreter::cti_op_is_function):
21950        (JSC::Interpreter::cti_op_stricteq):
21951        (JSC::Interpreter::cti_op_nstricteq):
21952        (JSC::Interpreter::cti_op_to_jsnumber):
21953        (JSC::Interpreter::cti_op_in):
21954        (JSC::Interpreter::cti_op_push_new_scope):
21955        (JSC::Interpreter::cti_op_jmp_scopes):
21956        (JSC::Interpreter::cti_op_put_by_index):
21957        (JSC::Interpreter::cti_op_switch_imm):
21958        (JSC::Interpreter::cti_op_switch_char):
21959        (JSC::Interpreter::cti_op_switch_string):
21960        (JSC::Interpreter::cti_op_del_by_val):
21961        (JSC::Interpreter::cti_op_put_getter):
21962        (JSC::Interpreter::cti_op_put_setter):
21963        (JSC::Interpreter::cti_op_new_error):
21964        (JSC::Interpreter::cti_op_debug):
21965        (JSC::Interpreter::cti_vm_throw):
21966        * VM/Machine.h:
21967        * VM/Register.h:
21968        * VM/SamplingTool.cpp:
21969        (JSC::SamplingTool::dump):
21970        * VM/SamplingTool.h:
21971        (JSC::SamplingTool::SamplingTool):
21972        * bytecompiler/CodeGenerator.cpp:
21973        (JSC::BytecodeGenerator::generate):
21974        (JSC::BytecodeGenerator::BytecodeGenerator):
21975        * jsc.cpp:
21976        (runWithScripts):
21977        * masm/X86Assembler.h:
21978        (JSC::AssemblerBuffer::executableCopy):
21979        (JSC::X86Assembler::executableCopy):
21980        * runtime/ExecState.h:
21981        (JSC::ExecState::interpreter):
21982        * runtime/JSCell.h:
21983        * runtime/JSFunction.h:
21984        * runtime/JSGlobalData.cpp:
21985        (JSC::JSGlobalData::JSGlobalData):
21986        * runtime/JSGlobalData.h:
21987        * runtime/JSImmediate.h:
21988        * runtime/JSString.h:
21989        * runtime/JSValue.h:
21990        * runtime/JSVariableObject.h:
21991        * runtime/RegExp.cpp:
21992        (JSC::RegExp::RegExp):
21993        (JSC::RegExp::~RegExp):
21994        (JSC::RegExp::match):
21995        * runtime/RegExp.h:
21996        * wrec/CharacterClassConstructor.cpp:
21997        * wrec/CharacterClassConstructor.h:
21998        * wrec/WREC.cpp:
21999        (JSC::WREC::compileRegExp):
22000        * wrec/WREC.h:
22001        (JSC::WREC::Generator::Generator):
22002        (JSC::WREC::Parser::):
22003        (JSC::WREC::Parser::Parser):
22004        (JSC::WREC::Parser::parseAlternative):
22005
220062008-11-16  Greg Bolsinga  <bolsinga@apple.com>
22007
22008        Reviewed by Darin Adler.
22009
22010        https://bugs.webkit.org/show_bug.cgi?id=21810
22011        Remove use of static C++ objects that are destroyed at exit time (destructors)
22012
22013        Conditionally have the DEFINE_STATIC_LOCAL workaround <rdar://problem/6354696> 
22014        (Codegen issue with C++ static reference in gcc build 5465) based upon the compiler 
22015        build versions. It will use the:
22016        static T& = *new T;
22017        style for all other compilers.
22018
22019        * wtf/StdLibExtras.h:
22020
220212008-11-16  Alexey Proskuryakov  <ap@webkit.org>
22022
22023        Reviewed by Dan Bernstein.
22024
22025        https://bugs.webkit.org/show_bug.cgi?id=22290
22026        Remove cross-heap GC and MessagePort multi-threading support
22027
22028        It is broken (and may not be implementable at all), and no longer needed, as we
22029        don't use MessagePorts for communication with workers any more.
22030
22031        * JavaScriptCore.exp:
22032        * runtime/Collector.cpp:
22033        (JSC::Heap::collect):
22034        * runtime/JSGlobalObject.cpp:
22035        * runtime/JSGlobalObject.h:
22036        Remove hooks for cross-heap GC.
22037
220382008-11-15  Sam Weinig  <sam@webkit.org>
22039
22040        Reviewed by Cameron Zwarich.
22041
22042        Cleanup jsc command line code a little.
22043
22044        * jsc.cpp:
22045        (functionQuit):
22046        (main): Use standard exit status macros
22047        (cleanupGlobalData): Factor out cleanup code into this function.
22048        (printUsageStatement): Use standard exit status macros.
22049
220502008-11-15  Sam Weinig  <sam@webkit.org>
22051
22052        Reviewed by Cameron Zwarich.
22053
22054        Cleanup BytecodeGenerator constructors.
22055
22056        * bytecompiler/CodeGenerator.cpp:
22057        (JSC::BytecodeGenerator::BytecodeGenerator):
22058        * bytecompiler/CodeGenerator.h:
22059        * parser/Nodes.cpp:
22060        (JSC::ProgramNode::generateBytecode):
22061
220622008-11-15  Darin Adler  <darin@apple.com>
22063
22064        Rubber stamped by Geoff Garen.
22065
22066        - do the long-planned StructureID -> Structure rename
22067
22068        * API/JSCallbackConstructor.cpp:
22069        (JSC::JSCallbackConstructor::JSCallbackConstructor):
22070        * API/JSCallbackConstructor.h:
22071        (JSC::JSCallbackConstructor::createStructure):
22072        * API/JSCallbackFunction.h:
22073        (JSC::JSCallbackFunction::createStructure):
22074        * API/JSCallbackObject.h:
22075        (JSC::JSCallbackObject::createStructure):
22076        * API/JSCallbackObjectFunctions.h:
22077        (JSC::::JSCallbackObject):
22078        * API/JSValueRef.cpp:
22079        (JSValueIsInstanceOfConstructor):
22080        * GNUmakefile.am:
22081        * JavaScriptCore.exp:
22082        * JavaScriptCore.pri:
22083        * JavaScriptCore.scons:
22084        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
22085        * JavaScriptCore.xcodeproj/project.pbxproj:
22086        * JavaScriptCoreSources.bkl:
22087        * VM/CTI.cpp:
22088        (JSC::CTI::compileBinaryArithOp):
22089        (JSC::CTI::privateCompileMainPass):
22090        (JSC::CTI::privateCompileGetByIdSelf):
22091        (JSC::CTI::privateCompileGetByIdProto):
22092        (JSC::CTI::privateCompileGetByIdChain):
22093        (JSC::CTI::privateCompilePutByIdReplace):
22094        (JSC::transitionWillNeedStorageRealloc):
22095        (JSC::CTI::privateCompilePutByIdTransition):
22096        (JSC::CTI::patchGetByIdSelf):
22097        (JSC::CTI::patchPutByIdReplace):
22098        * VM/CTI.h:
22099        (JSC::CTI::compileGetByIdSelf):
22100        (JSC::CTI::compileGetByIdProto):
22101        (JSC::CTI::compileGetByIdChain):
22102        (JSC::CTI::compilePutByIdReplace):
22103        (JSC::CTI::compilePutByIdTransition):
22104        * VM/CodeBlock.cpp:
22105        (JSC::CodeBlock::printStructure):
22106        (JSC::CodeBlock::printStructures):
22107        (JSC::CodeBlock::dump):
22108        (JSC::CodeBlock::~CodeBlock):
22109        (JSC::CodeBlock::derefStructures):
22110        (JSC::CodeBlock::refStructures):
22111        * VM/CodeBlock.h:
22112        * VM/Instruction.h:
22113        (JSC::Instruction::Instruction):
22114        (JSC::Instruction::):
22115        * VM/Machine.cpp:
22116        (JSC::jsTypeStringForValue):
22117        (JSC::jsIsObjectType):
22118        (JSC::BytecodeInterpreter::resolveGlobal):
22119        (JSC::BytecodeInterpreter::BytecodeInterpreter):
22120        (JSC::cachePrototypeChain):
22121        (JSC::BytecodeInterpreter::tryCachePutByID):
22122        (JSC::BytecodeInterpreter::uncachePutByID):
22123        (JSC::BytecodeInterpreter::tryCacheGetByID):
22124        (JSC::BytecodeInterpreter::uncacheGetByID):
22125        (JSC::BytecodeInterpreter::privateExecute):
22126        (JSC::BytecodeInterpreter::tryCTICachePutByID):
22127        (JSC::BytecodeInterpreter::tryCTICacheGetByID):
22128        (JSC::BytecodeInterpreter::cti_op_instanceof):
22129        (JSC::BytecodeInterpreter::cti_op_construct_JSConstruct):
22130        (JSC::BytecodeInterpreter::cti_op_resolve_global):
22131        (JSC::BytecodeInterpreter::cti_op_is_undefined):
22132        * runtime/Arguments.h:
22133        (JSC::Arguments::createStructure):
22134        * runtime/ArrayConstructor.cpp:
22135        (JSC::ArrayConstructor::ArrayConstructor):
22136        * runtime/ArrayConstructor.h:
22137        * runtime/ArrayPrototype.cpp:
22138        (JSC::ArrayPrototype::ArrayPrototype):
22139        * runtime/ArrayPrototype.h:
22140        * runtime/BatchedTransitionOptimizer.h:
22141        (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
22142        (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer):
22143        * runtime/BooleanConstructor.cpp:
22144        (JSC::BooleanConstructor::BooleanConstructor):
22145        * runtime/BooleanConstructor.h:
22146        * runtime/BooleanObject.cpp:
22147        (JSC::BooleanObject::BooleanObject):
22148        * runtime/BooleanObject.h:
22149        * runtime/BooleanPrototype.cpp:
22150        (JSC::BooleanPrototype::BooleanPrototype):
22151        * runtime/BooleanPrototype.h:
22152        * runtime/DateConstructor.cpp:
22153        (JSC::DateConstructor::DateConstructor):
22154        * runtime/DateConstructor.h:
22155        * runtime/DateInstance.cpp:
22156        (JSC::DateInstance::DateInstance):
22157        * runtime/DateInstance.h:
22158        * runtime/DatePrototype.cpp:
22159        (JSC::DatePrototype::DatePrototype):
22160        * runtime/DatePrototype.h:
22161        (JSC::DatePrototype::createStructure):
22162        * runtime/ErrorConstructor.cpp:
22163        (JSC::ErrorConstructor::ErrorConstructor):
22164        * runtime/ErrorConstructor.h:
22165        * runtime/ErrorInstance.cpp:
22166        (JSC::ErrorInstance::ErrorInstance):
22167        * runtime/ErrorInstance.h:
22168        * runtime/ErrorPrototype.cpp:
22169        (JSC::ErrorPrototype::ErrorPrototype):
22170        * runtime/ErrorPrototype.h:
22171        * runtime/FunctionConstructor.cpp:
22172        (JSC::FunctionConstructor::FunctionConstructor):
22173        * runtime/FunctionConstructor.h:
22174        * runtime/FunctionPrototype.cpp:
22175        (JSC::FunctionPrototype::FunctionPrototype):
22176        (JSC::FunctionPrototype::addFunctionProperties):
22177        * runtime/FunctionPrototype.h:
22178        (JSC::FunctionPrototype::createStructure):
22179        * runtime/GlobalEvalFunction.cpp:
22180        (JSC::GlobalEvalFunction::GlobalEvalFunction):
22181        * runtime/GlobalEvalFunction.h:
22182        * runtime/Identifier.h:
22183        * runtime/InternalFunction.cpp:
22184        (JSC::InternalFunction::InternalFunction):
22185        * runtime/InternalFunction.h:
22186        (JSC::InternalFunction::createStructure):
22187        (JSC::InternalFunction::InternalFunction):
22188        * runtime/JSActivation.cpp:
22189        (JSC::JSActivation::JSActivation):
22190        * runtime/JSActivation.h:
22191        (JSC::JSActivation::createStructure):
22192        * runtime/JSArray.cpp:
22193        (JSC::JSArray::JSArray):
22194        * runtime/JSArray.h:
22195        (JSC::JSArray::createStructure):
22196        * runtime/JSCell.h:
22197        (JSC::JSCell::JSCell):
22198        (JSC::JSCell::isObject):
22199        (JSC::JSCell::isString):
22200        (JSC::JSCell::structure):
22201        (JSC::JSValue::needsThisConversion):
22202        * runtime/JSFunction.cpp:
22203        (JSC::JSFunction::construct):
22204        * runtime/JSFunction.h:
22205        (JSC::JSFunction::JSFunction):
22206        (JSC::JSFunction::createStructure):
22207        * runtime/JSGlobalData.cpp:
22208        (JSC::JSGlobalData::JSGlobalData):
22209        (JSC::JSGlobalData::createLeaked):
22210        * runtime/JSGlobalData.h:
22211        * runtime/JSGlobalObject.cpp:
22212        (JSC::markIfNeeded):
22213        (JSC::JSGlobalObject::reset):
22214        * runtime/JSGlobalObject.h:
22215        (JSC::JSGlobalObject::JSGlobalObject):
22216        (JSC::JSGlobalObject::argumentsStructure):
22217        (JSC::JSGlobalObject::arrayStructure):
22218        (JSC::JSGlobalObject::booleanObjectStructure):
22219        (JSC::JSGlobalObject::callbackConstructorStructure):
22220        (JSC::JSGlobalObject::callbackFunctionStructure):
22221        (JSC::JSGlobalObject::callbackObjectStructure):
22222        (JSC::JSGlobalObject::dateStructure):
22223        (JSC::JSGlobalObject::emptyObjectStructure):
22224        (JSC::JSGlobalObject::errorStructure):
22225        (JSC::JSGlobalObject::functionStructure):
22226        (JSC::JSGlobalObject::numberObjectStructure):
22227        (JSC::JSGlobalObject::prototypeFunctionStructure):
22228        (JSC::JSGlobalObject::regExpMatchesArrayStructure):
22229        (JSC::JSGlobalObject::regExpStructure):
22230        (JSC::JSGlobalObject::stringObjectStructure):
22231        (JSC::JSGlobalObject::createStructure):
22232        (JSC::Structure::prototypeForLookup):
22233        * runtime/JSNotAnObject.h:
22234        (JSC::JSNotAnObject::createStructure):
22235        * runtime/JSNumberCell.h:
22236        (JSC::JSNumberCell::createStructure):
22237        (JSC::JSNumberCell::JSNumberCell):
22238        * runtime/JSObject.cpp:
22239        (JSC::JSObject::mark):
22240        (JSC::JSObject::put):
22241        (JSC::JSObject::deleteProperty):
22242        (JSC::JSObject::defineGetter):
22243        (JSC::JSObject::defineSetter):
22244        (JSC::JSObject::getPropertyAttributes):
22245        (JSC::JSObject::getPropertyNames):
22246        (JSC::JSObject::removeDirect):
22247        (JSC::JSObject::createInheritorID):
22248        * runtime/JSObject.h:
22249        (JSC::JSObject::getDirect):
22250        (JSC::JSObject::getDirectLocation):
22251        (JSC::JSObject::hasCustomProperties):
22252        (JSC::JSObject::hasGetterSetterProperties):
22253        (JSC::JSObject::createStructure):
22254        (JSC::JSObject::JSObject):
22255        (JSC::JSObject::~JSObject):
22256        (JSC::JSObject::prototype):
22257        (JSC::JSObject::setPrototype):
22258        (JSC::JSObject::setStructure):
22259        (JSC::JSObject::inheritorID):
22260        (JSC::JSObject::inlineGetOwnPropertySlot):
22261        (JSC::JSObject::getOwnPropertySlotForWrite):
22262        (JSC::JSCell::fastGetOwnPropertySlot):
22263        (JSC::JSObject::putDirect):
22264        (JSC::JSObject::putDirectWithoutTransition):
22265        (JSC::JSObject::transitionTo):
22266        * runtime/JSPropertyNameIterator.h:
22267        (JSC::JSPropertyNameIterator::next):
22268        * runtime/JSStaticScopeObject.h:
22269        (JSC::JSStaticScopeObject::JSStaticScopeObject):
22270        (JSC::JSStaticScopeObject::createStructure):
22271        * runtime/JSString.h:
22272        (JSC::JSString::JSString):
22273        (JSC::JSString::createStructure):
22274        * runtime/JSVariableObject.h:
22275        (JSC::JSVariableObject::JSVariableObject):
22276        * runtime/JSWrapperObject.h:
22277        (JSC::JSWrapperObject::JSWrapperObject):
22278        * runtime/MathObject.cpp:
22279        (JSC::MathObject::MathObject):
22280        * runtime/MathObject.h:
22281        (JSC::MathObject::createStructure):
22282        * runtime/NativeErrorConstructor.cpp:
22283        (JSC::NativeErrorConstructor::NativeErrorConstructor):
22284        * runtime/NativeErrorConstructor.h:
22285        * runtime/NativeErrorPrototype.cpp:
22286        (JSC::NativeErrorPrototype::NativeErrorPrototype):
22287        * runtime/NativeErrorPrototype.h:
22288        * runtime/NumberConstructor.cpp:
22289        (JSC::NumberConstructor::NumberConstructor):
22290        * runtime/NumberConstructor.h:
22291        (JSC::NumberConstructor::createStructure):
22292        * runtime/NumberObject.cpp:
22293        (JSC::NumberObject::NumberObject):
22294        * runtime/NumberObject.h:
22295        * runtime/NumberPrototype.cpp:
22296        (JSC::NumberPrototype::NumberPrototype):
22297        * runtime/NumberPrototype.h:
22298        * runtime/ObjectConstructor.cpp:
22299        (JSC::ObjectConstructor::ObjectConstructor):
22300        * runtime/ObjectConstructor.h:
22301        * runtime/ObjectPrototype.cpp:
22302        (JSC::ObjectPrototype::ObjectPrototype):
22303        * runtime/ObjectPrototype.h:
22304        * runtime/Operations.h:
22305        (JSC::equalSlowCaseInline):
22306        * runtime/PropertyNameArray.h:
22307        (JSC::PropertyNameArrayData::setCachedStructure):
22308        (JSC::PropertyNameArrayData::cachedStructure):
22309        (JSC::PropertyNameArrayData::setCachedPrototypeChain):
22310        (JSC::PropertyNameArrayData::cachedPrototypeChain):
22311        (JSC::PropertyNameArrayData::PropertyNameArrayData):
22312        * runtime/PrototypeFunction.cpp:
22313        (JSC::PrototypeFunction::PrototypeFunction):
22314        * runtime/PrototypeFunction.h:
22315        * runtime/RegExpConstructor.cpp:
22316        (JSC::RegExpConstructor::RegExpConstructor):
22317        * runtime/RegExpConstructor.h:
22318        (JSC::RegExpConstructor::createStructure):
22319        * runtime/RegExpObject.cpp:
22320        (JSC::RegExpObject::RegExpObject):
22321        * runtime/RegExpObject.h:
22322        (JSC::RegExpObject::createStructure):
22323        * runtime/RegExpPrototype.cpp:
22324        (JSC::RegExpPrototype::RegExpPrototype):
22325        * runtime/RegExpPrototype.h:
22326        * runtime/StringConstructor.cpp:
22327        (JSC::StringConstructor::StringConstructor):
22328        * runtime/StringConstructor.h:
22329        * runtime/StringObject.cpp:
22330        (JSC::StringObject::StringObject):
22331        * runtime/StringObject.h:
22332        (JSC::StringObject::createStructure):
22333        * runtime/StringObjectThatMasqueradesAsUndefined.h:
22334        (JSC::StringObjectThatMasqueradesAsUndefined::create):
22335        (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
22336        (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
22337        * runtime/StringPrototype.cpp:
22338        (JSC::StringPrototype::StringPrototype):
22339        * runtime/StringPrototype.h:
22340        * runtime/Structure.cpp: Copied from JavaScriptCore/runtime/StructureID.cpp.
22341        (JSC::Structure::dumpStatistics):
22342        (JSC::Structure::Structure):
22343        (JSC::Structure::~Structure):
22344        (JSC::Structure::startIgnoringLeaks):
22345        (JSC::Structure::stopIgnoringLeaks):
22346        (JSC::Structure::materializePropertyMap):
22347        (JSC::Structure::getEnumerablePropertyNames):
22348        (JSC::Structure::clearEnumerationCache):
22349        (JSC::Structure::growPropertyStorageCapacity):
22350        (JSC::Structure::addPropertyTransitionToExistingStructure):
22351        (JSC::Structure::addPropertyTransition):
22352        (JSC::Structure::removePropertyTransition):
22353        (JSC::Structure::changePrototypeTransition):
22354        (JSC::Structure::getterSetterTransition):
22355        (JSC::Structure::toDictionaryTransition):
22356        (JSC::Structure::fromDictionaryTransition):
22357        (JSC::Structure::addPropertyWithoutTransition):
22358        (JSC::Structure::removePropertyWithoutTransition):
22359        (JSC::Structure::createCachedPrototypeChain):
22360        (JSC::Structure::checkConsistency):
22361        (JSC::Structure::copyPropertyTable):
22362        (JSC::Structure::get):
22363        (JSC::Structure::put):
22364        (JSC::Structure::remove):
22365        (JSC::Structure::insertIntoPropertyMapHashTable):
22366        (JSC::Structure::createPropertyMapHashTable):
22367        (JSC::Structure::expandPropertyMapHashTable):
22368        (JSC::Structure::rehashPropertyMapHashTable):
22369        (JSC::Structure::getEnumerablePropertyNamesInternal):
22370        * runtime/Structure.h: Copied from JavaScriptCore/runtime/StructureID.h.
22371        (JSC::Structure::create):
22372        (JSC::Structure::previousID):
22373        (JSC::Structure::setCachedPrototypeChain):
22374        (JSC::Structure::cachedPrototypeChain):
22375        (JSC::Structure::):
22376        (JSC::Structure::get):
22377        * runtime/StructureChain.cpp: Copied from JavaScriptCore/runtime/StructureIDChain.cpp.
22378        (JSC::StructureChain::StructureChain):
22379        (JSC::structureChainsAreEqual):
22380        * runtime/StructureChain.h: Copied from JavaScriptCore/runtime/StructureIDChain.h.
22381        (JSC::StructureChain::create):
22382        (JSC::StructureChain::head):
22383        * runtime/StructureID.cpp: Removed.
22384        * runtime/StructureID.h: Removed.
22385        * runtime/StructureIDChain.cpp: Removed.
22386        * runtime/StructureIDChain.h: Removed.
22387        * runtime/StructureIDTransitionTable.h: Removed.
22388        * runtime/StructureTransitionTable.h: Copied from JavaScriptCore/runtime/StructureIDTransitionTable.h.
22389
223902008-11-15  Darin Adler  <darin@apple.com>
22391
22392        - fix non-WREC build
22393
22394        * runtime/RegExp.cpp: Put "using namespace WREC" inside #if ENABLE(WREC).
22395
223962008-11-15  Kevin Ollivier  <kevino@theolliviers.com>
22397
22398        Reviewed by Timothy Hatcher.
22399        
22400        As ThreadingNone doesn't implement threads, isMainThread should return true,
22401        not false.
22402        
22403        https://bugs.webkit.org/show_bug.cgi?id=22285
22404
22405        * wtf/ThreadingNone.cpp:
22406        (WTF::isMainThread):
22407
224082008-11-15  Geoffrey Garen  <ggaren@apple.com>
22409
22410        Reviewed by Sam Weinig.
22411        
22412        Moved all WREC-related code into WREC.cpp and put it in a WREC namespace.
22413        Removed the WREC prefix from class names.
22414
22415        * VM/CTI.cpp:
22416        * VM/CTI.h:
22417        * VM/Machine.h:
22418        (JSC::BytecodeInterpreter::assemblerBuffer):
22419        * masm/X86Assembler.h:
22420        * runtime/RegExp.cpp:
22421        (JSC::RegExp::RegExp):
22422        * wrec/CharacterClassConstructor.cpp:
22423        * wrec/CharacterClassConstructor.h:
22424        * wrec/WREC.cpp:
22425        (WREC::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor):
22426        (WREC::GeneratePatternCharacterFunctor::generateAtom):
22427        (WREC::GeneratePatternCharacterFunctor::backtrack):
22428        (WREC::GenerateCharacterClassFunctor::generateAtom):
22429        (WREC::GenerateCharacterClassFunctor::backtrack):
22430        (WREC::GenerateBackreferenceFunctor::generateAtom):
22431        (WREC::GenerateBackreferenceFunctor::backtrack):
22432        (WREC::GenerateParenthesesNonGreedyFunctor::generateAtom):
22433        (WREC::GenerateParenthesesNonGreedyFunctor::backtrack):
22434        (WREC::Generator::generateBacktrack1):
22435        (WREC::Generator::generateBacktrackBackreference):
22436        (WREC::Generator::generateBackreferenceQuantifier):
22437        (WREC::Generator::generateNonGreedyQuantifier):
22438        (WREC::Generator::generateGreedyQuantifier):
22439        (WREC::Generator::generatePatternCharacter):
22440        (WREC::Generator::generateCharacterClassInvertedRange):
22441        (WREC::Generator::generateCharacterClassInverted):
22442        (WREC::Generator::generateCharacterClass):
22443        (WREC::Generator::generateParentheses):
22444        (WREC::Generator::generateParenthesesNonGreedy):
22445        (WREC::Generator::generateParenthesesResetTrampoline):
22446        (WREC::Generator::generateAssertionBOL):
22447        (WREC::Generator::generateAssertionEOL):
22448        (WREC::Generator::generateAssertionWordBoundary):
22449        (WREC::Generator::generateBackreference):
22450        (WREC::Generator::generateDisjunction):
22451        (WREC::Generator::terminateDisjunction):
22452        (WREC::Parser::parseGreedyQuantifier):
22453        (WREC::Parser::parseQuantifier):
22454        (WREC::Parser::parsePatternCharacterQualifier):
22455        (WREC::Parser::parseCharacterClassQuantifier):
22456        (WREC::Parser::parseBackreferenceQuantifier):
22457        (WREC::Parser::parseParentheses):
22458        (WREC::Parser::parseCharacterClass):
22459        (WREC::Parser::parseOctalEscape):
22460        (WREC::Parser::parseEscape):
22461        (WREC::Parser::parseTerm):
22462        (WREC::Parser::parseDisjunction):
22463        (WREC::compileRegExp):
22464        * wrec/WREC.h:
22465        (WREC::Generator::Generator):
22466        (WREC::Parser::Parser):
22467        (WREC::Parser::parseAlternative):
22468
224692008-11-15  Geoffrey Garen  <ggaren@apple.com>
22470
22471        Reviewed by Sam Weinig.
22472        
22473        Changed another case of "m_jit" to "m_assembler".
22474
22475        * VM/CTI.cpp:
22476        * wrec/WREC.cpp:
22477        * wrec/WREC.h:
22478        (JSC::WRECGenerator::WRECGenerator):
22479        (JSC::WRECParser::WRECParser):
22480
224812008-11-15  Geoffrey Garen  <ggaren@apple.com>
22482
22483        Reviewed by Sam Weinig.
22484        
22485        Renamed "jit" to "assembler" and, for brevity, replaced *jit.* with __
22486        using a macro.
22487
22488        * VM/CTI.cpp:
22489        (JSC::CTI::emitGetVirtualRegister):
22490        (JSC::CTI::emitPutCTIArgFromVirtualRegister):
22491        (JSC::CTI::emitPutCTIArg):
22492        (JSC::CTI::emitGetCTIArg):
22493        (JSC::CTI::emitPutCTIArgConstant):
22494        (JSC::CTI::emitPutCTIParam):
22495        (JSC::CTI::emitGetCTIParam):
22496        (JSC::CTI::emitPutToCallFrameHeader):
22497        (JSC::CTI::emitGetFromCallFrameHeader):
22498        (JSC::CTI::emitPutVirtualRegister):
22499        (JSC::CTI::emitInitRegister):
22500        (JSC::CTI::emitAllocateNumber):
22501        (JSC::CTI::emitNakedCall):
22502        (JSC::CTI::emitNakedFastCall):
22503        (JSC::CTI::emitCTICall):
22504        (JSC::CTI::emitJumpSlowCaseIfNotJSCell):
22505        (JSC::CTI::linkSlowCaseIfNotJSCell):
22506        (JSC::CTI::emitJumpSlowCaseIfNotImmNum):
22507        (JSC::CTI::emitJumpSlowCaseIfNotImmNums):
22508        (JSC::CTI::emitFastArithDeTagImmediate):
22509        (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero):
22510        (JSC::CTI::emitFastArithReTagImmediate):
22511        (JSC::CTI::emitFastArithPotentiallyReTagImmediate):
22512        (JSC::CTI::emitFastArithImmToInt):
22513        (JSC::CTI::emitFastArithIntToImmOrSlowCase):
22514        (JSC::CTI::emitFastArithIntToImmNoCheck):
22515        (JSC::CTI::emitArithIntToImmWithJump):
22516        (JSC::CTI::emitTagAsBoolImmediate):
22517        (JSC::CTI::CTI):
22518        (JSC::CTI::compileOpCallInitializeCallFrame):
22519        (JSC::CTI::compileOpCall):
22520        (JSC::CTI::compileOpStrictEq):
22521        (JSC::CTI::emitSlowScriptCheck):
22522        (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate):
22523        (JSC::CTI::compileBinaryArithOp):
22524        (JSC::CTI::compileBinaryArithOpSlowCase):
22525        (JSC::CTI::privateCompileMainPass):
22526        (JSC::CTI::privateCompileLinkPass):
22527        (JSC::CTI::privateCompileSlowCases):
22528        (JSC::CTI::privateCompile):
22529        (JSC::CTI::privateCompileGetByIdSelf):
22530        (JSC::CTI::privateCompileGetByIdProto):
22531        (JSC::CTI::privateCompileGetByIdChain):
22532        (JSC::CTI::privateCompilePutByIdReplace):
22533        (JSC::CTI::privateCompilePutByIdTransition):
22534        (JSC::CTI::privateCompileCTIMachineTrampolines):
22535        (JSC::CTI::privateCompilePatchGetArrayLength):
22536        (JSC::CTI::emitGetVariableObjectRegister):
22537        (JSC::CTI::emitPutVariableObjectRegister):
22538        (JSC::CTI::compileRegExp):
22539        * VM/CTI.h:
22540        * wrec/WREC.cpp:
22541        (JSC::WRECGenerator::generateBacktrack1):
22542        (JSC::WRECGenerator::generateBacktrackBackreference):
22543        (JSC::WRECGenerator::generateBackreferenceQuantifier):
22544        (JSC::WRECGenerator::generateNonGreedyQuantifier):
22545        (JSC::WRECGenerator::generateGreedyQuantifier):
22546        (JSC::WRECGenerator::generatePatternCharacter):
22547        (JSC::WRECGenerator::generateCharacterClassInvertedRange):
22548        (JSC::WRECGenerator::generateCharacterClassInverted):
22549        (JSC::WRECGenerator::generateCharacterClass):
22550        (JSC::WRECGenerator::generateParentheses):
22551        (JSC::WRECGenerator::generateParenthesesNonGreedy):
22552        (JSC::WRECGenerator::generateParenthesesResetTrampoline):
22553        (JSC::WRECGenerator::generateAssertionBOL):
22554        (JSC::WRECGenerator::generateAssertionEOL):
22555        (JSC::WRECGenerator::generateAssertionWordBoundary):
22556        (JSC::WRECGenerator::generateBackreference):
22557        (JSC::WRECGenerator::generateDisjunction):
22558        (JSC::WRECGenerator::terminateDisjunction):
22559
225602008-11-15  Sam Weinig  <sam@webkit.org>
22561
22562        Reviewed by Geoffrey Garen.
22563
22564        Remove dead method declaration.
22565
22566        * bytecompiler/CodeGenerator.h:
22567
225682008-11-15  Geoffrey Garen  <ggaren@apple.com>
22569
22570        Reviewed by Sam Weinig.
22571        
22572        Renamed LabelID to Label, Label::isForwardLabel to Label::isForward.
22573
22574        * VM/LabelID.h:
22575        (JSC::Label::Label):
22576        (JSC::Label::isForward):
22577        * bytecompiler/CodeGenerator.cpp:
22578        (JSC::BytecodeGenerator::newLabel):
22579        (JSC::BytecodeGenerator::emitLabel):
22580        (JSC::BytecodeGenerator::emitJump):
22581        (JSC::BytecodeGenerator::emitJumpIfTrue):
22582        (JSC::BytecodeGenerator::emitJumpIfFalse):
22583        (JSC::BytecodeGenerator::pushFinallyContext):
22584        (JSC::BytecodeGenerator::emitComplexJumpScopes):
22585        (JSC::BytecodeGenerator::emitJumpScopes):
22586        (JSC::BytecodeGenerator::emitNextPropertyName):
22587        (JSC::BytecodeGenerator::emitCatch):
22588        (JSC::BytecodeGenerator::emitJumpSubroutine):
22589        (JSC::prepareJumpTableForImmediateSwitch):
22590        (JSC::prepareJumpTableForCharacterSwitch):
22591        (JSC::prepareJumpTableForStringSwitch):
22592        (JSC::BytecodeGenerator::endSwitch):
22593        * bytecompiler/CodeGenerator.h:
22594        * bytecompiler/LabelScope.h:
22595        (JSC::LabelScope::LabelScope):
22596        (JSC::LabelScope::breakTarget):
22597        (JSC::LabelScope::continueTarget):
22598        * parser/Nodes.cpp:
22599        (JSC::LogicalOpNode::emitBytecode):
22600        (JSC::ConditionalNode::emitBytecode):
22601        (JSC::IfNode::emitBytecode):
22602        (JSC::IfElseNode::emitBytecode):
22603        (JSC::DoWhileNode::emitBytecode):
22604        (JSC::WhileNode::emitBytecode):
22605        (JSC::ForNode::emitBytecode):
22606        (JSC::ForInNode::emitBytecode):
22607        (JSC::ReturnNode::emitBytecode):
22608        (JSC::CaseBlockNode::emitBytecodeForBlock):
22609        (JSC::TryNode::emitBytecode):
22610
226112008-11-15  Geoffrey Garen  <ggaren@apple.com>
22612
22613        Reviewed by Sam Weinig.
22614        
22615        Renamed JITCodeBuffer to AssemblerBuffer and renamed its data members
22616        to be more like the rest of our buffer classes, with a size and a
22617        capacity.
22618        
22619        Added an assert in the unchecked put case to match the test in the checked
22620        put case.
22621        
22622        Changed a C-style cast to a C++-style cast.
22623        
22624        Renamed MAX_INSTRUCTION_SIZE to maxInstructionSize.
22625
22626        * VM/CTI.cpp:
22627        (JSC::CTI::CTI):
22628        (JSC::CTI::compileRegExp):
22629        * VM/Machine.cpp:
22630        (JSC::BytecodeInterpreter::BytecodeInterpreter):
22631        * VM/Machine.h:
22632        (JSC::BytecodeInterpreter::assemblerBuffer):
22633        * masm/X86Assembler.h:
22634        (JSC::AssemblerBuffer::AssemblerBuffer):
22635        (JSC::AssemblerBuffer::~AssemblerBuffer):
22636        (JSC::AssemblerBuffer::ensureSpace):
22637        (JSC::AssemblerBuffer::isAligned):
22638        (JSC::AssemblerBuffer::putByteUnchecked):
22639        (JSC::AssemblerBuffer::putByte):
22640        (JSC::AssemblerBuffer::putShortUnchecked):
22641        (JSC::AssemblerBuffer::putShort):
22642        (JSC::AssemblerBuffer::putIntUnchecked):
22643        (JSC::AssemblerBuffer::putInt):
22644        (JSC::AssemblerBuffer::data):
22645        (JSC::AssemblerBuffer::size):
22646        (JSC::AssemblerBuffer::reset):
22647        (JSC::AssemblerBuffer::copy):
22648        (JSC::AssemblerBuffer::grow):
22649        (JSC::X86Assembler::):
22650        (JSC::X86Assembler::X86Assembler):
22651        (JSC::X86Assembler::testl_i32r):
22652        (JSC::X86Assembler::movl_mr):
22653        (JSC::X86Assembler::movl_rm):
22654        (JSC::X86Assembler::movl_i32m):
22655        (JSC::X86Assembler::emitCall):
22656        (JSC::X86Assembler::label):
22657        (JSC::X86Assembler::emitUnlinkedJmp):
22658        (JSC::X86Assembler::emitUnlinkedJne):
22659        (JSC::X86Assembler::emitUnlinkedJe):
22660        (JSC::X86Assembler::emitUnlinkedJl):
22661        (JSC::X86Assembler::emitUnlinkedJb):
22662        (JSC::X86Assembler::emitUnlinkedJle):
22663        (JSC::X86Assembler::emitUnlinkedJbe):
22664        (JSC::X86Assembler::emitUnlinkedJge):
22665        (JSC::X86Assembler::emitUnlinkedJg):
22666        (JSC::X86Assembler::emitUnlinkedJa):
22667        (JSC::X86Assembler::emitUnlinkedJae):
22668        (JSC::X86Assembler::emitUnlinkedJo):
22669        (JSC::X86Assembler::emitUnlinkedJp):
22670        (JSC::X86Assembler::emitUnlinkedJs):
22671        (JSC::X86Assembler::link):
22672        (JSC::X86Assembler::emitModRm_rr):
22673        (JSC::X86Assembler::emitModRm_rm):
22674        (JSC::X86Assembler::emitModRm_opr):
22675
226762008-11-15  Geoffrey Garen  <ggaren@apple.com>
22677
22678        Suggested by Maciej Stachowiak.
22679        
22680        Reverted most "opcode" => "bytecode" renames. We use "bytecode" as a
22681        mass noun to refer to a stream of instructions. Each instruction may be
22682        an opcode or an operand.
22683
22684        * VM/CTI.cpp:
22685        (JSC::CTI::emitCTICall):
22686        (JSC::CTI::compileOpCall):
22687        (JSC::CTI::compileBinaryArithOp):
22688        (JSC::CTI::compileBinaryArithOpSlowCase):
22689        (JSC::CTI::privateCompileMainPass):
22690        (JSC::CTI::privateCompileSlowCases):
22691        (JSC::CTI::privateCompile):
22692        * VM/CTI.h:
22693        * VM/CodeBlock.cpp:
22694        (JSC::CodeBlock::printStructureIDs):
22695        (JSC::CodeBlock::dump):
22696        (JSC::CodeBlock::derefStructureIDs):
22697        (JSC::CodeBlock::refStructureIDs):
22698        * VM/CodeBlock.h:
22699        * VM/ExceptionHelpers.cpp:
22700        (JSC::createNotAnObjectError):
22701        * VM/Instruction.h:
22702        (JSC::Instruction::Instruction):
22703        (JSC::Instruction::):
22704        * VM/Machine.cpp:
22705        (JSC::BytecodeInterpreter::isOpcode):
22706        (JSC::BytecodeInterpreter::throwException):
22707        (JSC::BytecodeInterpreter::tryCachePutByID):
22708        (JSC::BytecodeInterpreter::uncachePutByID):
22709        (JSC::BytecodeInterpreter::tryCacheGetByID):
22710        (JSC::BytecodeInterpreter::uncacheGetByID):
22711        (JSC::BytecodeInterpreter::privateExecute):
22712        (JSC::BytecodeInterpreter::tryCTICachePutByID):
22713        (JSC::BytecodeInterpreter::tryCTICacheGetByID):
22714        * VM/Machine.h:
22715        (JSC::BytecodeInterpreter::getOpcode):
22716        (JSC::BytecodeInterpreter::getOpcodeID):
22717        (JSC::BytecodeInterpreter::isCallBytecode):
22718        * VM/Opcode.cpp:
22719        (JSC::):
22720        (JSC::OpcodeStats::OpcodeStats):
22721        (JSC::compareOpcodeIndices):
22722        (JSC::compareOpcodePairIndices):
22723        (JSC::OpcodeStats::~OpcodeStats):
22724        (JSC::OpcodeStats::recordInstruction):
22725        (JSC::OpcodeStats::resetLastInstruction):
22726        * VM/Opcode.h:
22727        (JSC::):
22728        (JSC::padOpcodeName):
22729        * VM/SamplingTool.cpp:
22730        (JSC::ScopeSampleRecord::sample):
22731        (JSC::SamplingTool::run):
22732        (JSC::compareOpcodeIndicesSampling):
22733        (JSC::SamplingTool::dump):
22734        * VM/SamplingTool.h:
22735        (JSC::ScopeSampleRecord::ScopeSampleRecord):
22736        (JSC::SamplingTool::SamplingTool):
22737        * bytecompiler/CodeGenerator.cpp:
22738        (JSC::BytecodeGenerator::BytecodeGenerator):
22739        (JSC::BytecodeGenerator::emitLabel):
22740        (JSC::BytecodeGenerator::emitOpcode):
22741        (JSC::BytecodeGenerator::emitJump):
22742        (JSC::BytecodeGenerator::emitJumpIfTrue):
22743        (JSC::BytecodeGenerator::emitJumpIfFalse):
22744        (JSC::BytecodeGenerator::emitMove):
22745        (JSC::BytecodeGenerator::emitUnaryOp):
22746        (JSC::BytecodeGenerator::emitPreInc):
22747        (JSC::BytecodeGenerator::emitPreDec):
22748        (JSC::BytecodeGenerator::emitPostInc):
22749        (JSC::BytecodeGenerator::emitPostDec):
22750        (JSC::BytecodeGenerator::emitBinaryOp):
22751        (JSC::BytecodeGenerator::emitEqualityOp):
22752        (JSC::BytecodeGenerator::emitUnexpectedLoad):
22753        (JSC::BytecodeGenerator::emitInstanceOf):
22754        (JSC::BytecodeGenerator::emitResolve):
22755        (JSC::BytecodeGenerator::emitGetScopedVar):
22756        (JSC::BytecodeGenerator::emitPutScopedVar):
22757        (JSC::BytecodeGenerator::emitResolveBase):
22758        (JSC::BytecodeGenerator::emitResolveWithBase):
22759        (JSC::BytecodeGenerator::emitResolveFunction):
22760        (JSC::BytecodeGenerator::emitGetById):
22761        (JSC::BytecodeGenerator::emitPutById):
22762        (JSC::BytecodeGenerator::emitPutGetter):
22763        (JSC::BytecodeGenerator::emitPutSetter):
22764        (JSC::BytecodeGenerator::emitDeleteById):
22765        (JSC::BytecodeGenerator::emitGetByVal):
22766        (JSC::BytecodeGenerator::emitPutByVal):
22767        (JSC::BytecodeGenerator::emitDeleteByVal):
22768        (JSC::BytecodeGenerator::emitPutByIndex):
22769        (JSC::BytecodeGenerator::emitNewObject):
22770        (JSC::BytecodeGenerator::emitNewArray):
22771        (JSC::BytecodeGenerator::emitNewFunction):
22772        (JSC::BytecodeGenerator::emitNewRegExp):
22773        (JSC::BytecodeGenerator::emitNewFunctionExpression):
22774        (JSC::BytecodeGenerator::emitCall):
22775        (JSC::BytecodeGenerator::emitReturn):
22776        (JSC::BytecodeGenerator::emitUnaryNoDstOp):
22777        (JSC::BytecodeGenerator::emitConstruct):
22778        (JSC::BytecodeGenerator::emitPopScope):
22779        (JSC::BytecodeGenerator::emitDebugHook):
22780        (JSC::BytecodeGenerator::emitComplexJumpScopes):
22781        (JSC::BytecodeGenerator::emitJumpScopes):
22782        (JSC::BytecodeGenerator::emitNextPropertyName):
22783        (JSC::BytecodeGenerator::emitCatch):
22784        (JSC::BytecodeGenerator::emitNewError):
22785        (JSC::BytecodeGenerator::emitJumpSubroutine):
22786        (JSC::BytecodeGenerator::emitSubroutineReturn):
22787        (JSC::BytecodeGenerator::emitPushNewScope):
22788        (JSC::BytecodeGenerator::beginSwitch):
22789        * bytecompiler/CodeGenerator.h:
22790        * jsc.cpp:
22791        (runWithScripts):
22792        * masm/X86Assembler.h:
22793        (JSC::X86Assembler::):
22794        (JSC::X86Assembler::emitModRm_opr):
22795        (JSC::X86Assembler::emitModRm_opr_Unchecked):
22796        (JSC::X86Assembler::emitModRm_opm):
22797        (JSC::X86Assembler::emitModRm_opm_Unchecked):
22798        (JSC::X86Assembler::emitModRm_opmsib):
22799        * parser/Nodes.cpp:
22800        (JSC::UnaryOpNode::emitBytecode):
22801        (JSC::BinaryOpNode::emitBytecode):
22802        (JSC::ReverseBinaryOpNode::emitBytecode):
22803        (JSC::ThrowableBinaryOpNode::emitBytecode):
22804        (JSC::emitReadModifyAssignment):
22805        (JSC::ScopeNode::ScopeNode):
22806        * parser/Nodes.h:
22807        (JSC::UnaryPlusNode::):
22808        (JSC::NegateNode::):
22809        (JSC::BitwiseNotNode::):
22810        (JSC::LogicalNotNode::):
22811        (JSC::MultNode::):
22812        (JSC::DivNode::):
22813        (JSC::ModNode::):
22814        (JSC::AddNode::):
22815        (JSC::SubNode::):
22816        (JSC::LeftShiftNode::):
22817        (JSC::RightShiftNode::):
22818        (JSC::UnsignedRightShiftNode::):
22819        (JSC::LessNode::):
22820        (JSC::GreaterNode::):
22821        (JSC::LessEqNode::):
22822        (JSC::GreaterEqNode::):
22823        (JSC::InstanceOfNode::):
22824        (JSC::InNode::):
22825        (JSC::EqualNode::):
22826        (JSC::NotEqualNode::):
22827        (JSC::StrictEqualNode::):
22828        (JSC::NotStrictEqualNode::):
22829        (JSC::BitAndNode::):
22830        (JSC::BitOrNode::):
22831        (JSC::BitXOrNode::):
22832        * runtime/StructureID.cpp:
22833        (JSC::StructureID::fromDictionaryTransition):
22834        * wtf/Platform.h:
22835
228362008-11-15  Geoffrey Garen  <ggaren@apple.com>
22837
22838        Reviewed by Sam Weinig.
22839        
22840        Renames:
22841        
22842        CodeGenerator => BytecodeGenerator
22843        emitCodeForBlock => emitBytecodeForBlock
22844        generatedByteCode => generatedBytecode
22845        generateCode => generateBytecode
22846
22847        * JavaScriptCore.exp:
22848        * bytecompiler/CodeGenerator.cpp:
22849        (JSC::BytecodeGenerator::setDumpsGeneratedCode):
22850        (JSC::BytecodeGenerator::generate):
22851        (JSC::BytecodeGenerator::addVar):
22852        (JSC::BytecodeGenerator::addGlobalVar):
22853        (JSC::BytecodeGenerator::allocateConstants):
22854        (JSC::BytecodeGenerator::BytecodeGenerator):
22855        (JSC::BytecodeGenerator::addParameter):
22856        (JSC::BytecodeGenerator::registerFor):
22857        (JSC::BytecodeGenerator::constRegisterFor):
22858        (JSC::BytecodeGenerator::isLocal):
22859        (JSC::BytecodeGenerator::isLocalConstant):
22860        (JSC::BytecodeGenerator::newRegister):
22861        (JSC::BytecodeGenerator::newTemporary):
22862        (JSC::BytecodeGenerator::highestUsedRegister):
22863        (JSC::BytecodeGenerator::newLabelScope):
22864        (JSC::BytecodeGenerator::newLabel):
22865        (JSC::BytecodeGenerator::emitLabel):
22866        (JSC::BytecodeGenerator::emitBytecode):
22867        (JSC::BytecodeGenerator::retrieveLastBinaryOp):
22868        (JSC::BytecodeGenerator::retrieveLastUnaryOp):
22869        (JSC::BytecodeGenerator::rewindBinaryOp):
22870        (JSC::BytecodeGenerator::rewindUnaryOp):
22871        (JSC::BytecodeGenerator::emitJump):
22872        (JSC::BytecodeGenerator::emitJumpIfTrue):
22873        (JSC::BytecodeGenerator::emitJumpIfFalse):
22874        (JSC::BytecodeGenerator::addConstant):
22875        (JSC::BytecodeGenerator::addUnexpectedConstant):
22876        (JSC::BytecodeGenerator::addRegExp):
22877        (JSC::BytecodeGenerator::emitMove):
22878        (JSC::BytecodeGenerator::emitUnaryOp):
22879        (JSC::BytecodeGenerator::emitPreInc):
22880        (JSC::BytecodeGenerator::emitPreDec):
22881        (JSC::BytecodeGenerator::emitPostInc):
22882        (JSC::BytecodeGenerator::emitPostDec):
22883        (JSC::BytecodeGenerator::emitBinaryOp):
22884        (JSC::BytecodeGenerator::emitEqualityOp):
22885        (JSC::BytecodeGenerator::emitLoad):
22886        (JSC::BytecodeGenerator::emitUnexpectedLoad):
22887        (JSC::BytecodeGenerator::findScopedProperty):
22888        (JSC::BytecodeGenerator::emitInstanceOf):
22889        (JSC::BytecodeGenerator::emitResolve):
22890        (JSC::BytecodeGenerator::emitGetScopedVar):
22891        (JSC::BytecodeGenerator::emitPutScopedVar):
22892        (JSC::BytecodeGenerator::emitResolveBase):
22893        (JSC::BytecodeGenerator::emitResolveWithBase):
22894        (JSC::BytecodeGenerator::emitResolveFunction):
22895        (JSC::BytecodeGenerator::emitGetById):
22896        (JSC::BytecodeGenerator::emitPutById):
22897        (JSC::BytecodeGenerator::emitPutGetter):
22898        (JSC::BytecodeGenerator::emitPutSetter):
22899        (JSC::BytecodeGenerator::emitDeleteById):
22900        (JSC::BytecodeGenerator::emitGetByVal):
22901        (JSC::BytecodeGenerator::emitPutByVal):
22902        (JSC::BytecodeGenerator::emitDeleteByVal):
22903        (JSC::BytecodeGenerator::emitPutByIndex):
22904        (JSC::BytecodeGenerator::emitNewObject):
22905        (JSC::BytecodeGenerator::emitNewArray):
22906        (JSC::BytecodeGenerator::emitNewFunction):
22907        (JSC::BytecodeGenerator::emitNewRegExp):
22908        (JSC::BytecodeGenerator::emitNewFunctionExpression):
22909        (JSC::BytecodeGenerator::emitCall):
22910        (JSC::BytecodeGenerator::emitCallEval):
22911        (JSC::BytecodeGenerator::emitReturn):
22912        (JSC::BytecodeGenerator::emitUnaryNoDstOp):
22913        (JSC::BytecodeGenerator::emitConstruct):
22914        (JSC::BytecodeGenerator::emitPushScope):
22915        (JSC::BytecodeGenerator::emitPopScope):
22916        (JSC::BytecodeGenerator::emitDebugHook):
22917        (JSC::BytecodeGenerator::pushFinallyContext):
22918        (JSC::BytecodeGenerator::popFinallyContext):
22919        (JSC::BytecodeGenerator::breakTarget):
22920        (JSC::BytecodeGenerator::continueTarget):
22921        (JSC::BytecodeGenerator::emitComplexJumpScopes):
22922        (JSC::BytecodeGenerator::emitJumpScopes):
22923        (JSC::BytecodeGenerator::emitNextPropertyName):
22924        (JSC::BytecodeGenerator::emitCatch):
22925        (JSC::BytecodeGenerator::emitNewError):
22926        (JSC::BytecodeGenerator::emitJumpSubroutine):
22927        (JSC::BytecodeGenerator::emitSubroutineReturn):
22928        (JSC::BytecodeGenerator::emitPushNewScope):
22929        (JSC::BytecodeGenerator::beginSwitch):
22930        (JSC::BytecodeGenerator::endSwitch):
22931        (JSC::BytecodeGenerator::emitThrowExpressionTooDeepException):
22932        * bytecompiler/CodeGenerator.h:
22933        * jsc.cpp:
22934        (runWithScripts):
22935        * parser/Nodes.cpp:
22936        (JSC::ThrowableExpressionData::emitThrowError):
22937        (JSC::NullNode::emitBytecode):
22938        (JSC::BooleanNode::emitBytecode):
22939        (JSC::NumberNode::emitBytecode):
22940        (JSC::StringNode::emitBytecode):
22941        (JSC::RegExpNode::emitBytecode):
22942        (JSC::ThisNode::emitBytecode):
22943        (JSC::ResolveNode::isPure):
22944        (JSC::ResolveNode::emitBytecode):
22945        (JSC::ArrayNode::emitBytecode):
22946        (JSC::ObjectLiteralNode::emitBytecode):
22947        (JSC::PropertyListNode::emitBytecode):
22948        (JSC::BracketAccessorNode::emitBytecode):
22949        (JSC::DotAccessorNode::emitBytecode):
22950        (JSC::ArgumentListNode::emitBytecode):
22951        (JSC::NewExprNode::emitBytecode):
22952        (JSC::EvalFunctionCallNode::emitBytecode):
22953        (JSC::FunctionCallValueNode::emitBytecode):
22954        (JSC::FunctionCallResolveNode::emitBytecode):
22955        (JSC::FunctionCallBracketNode::emitBytecode):
22956        (JSC::FunctionCallDotNode::emitBytecode):
22957        (JSC::emitPreIncOrDec):
22958        (JSC::emitPostIncOrDec):
22959        (JSC::PostfixResolveNode::emitBytecode):
22960        (JSC::PostfixBracketNode::emitBytecode):
22961        (JSC::PostfixDotNode::emitBytecode):
22962        (JSC::PostfixErrorNode::emitBytecode):
22963        (JSC::DeleteResolveNode::emitBytecode):
22964        (JSC::DeleteBracketNode::emitBytecode):
22965        (JSC::DeleteDotNode::emitBytecode):
22966        (JSC::DeleteValueNode::emitBytecode):
22967        (JSC::VoidNode::emitBytecode):
22968        (JSC::TypeOfResolveNode::emitBytecode):
22969        (JSC::TypeOfValueNode::emitBytecode):
22970        (JSC::PrefixResolveNode::emitBytecode):
22971        (JSC::PrefixBracketNode::emitBytecode):
22972        (JSC::PrefixDotNode::emitBytecode):
22973        (JSC::PrefixErrorNode::emitBytecode):
22974        (JSC::UnaryOpNode::emitBytecode):
22975        (JSC::BinaryOpNode::emitBytecode):
22976        (JSC::EqualNode::emitBytecode):
22977        (JSC::StrictEqualNode::emitBytecode):
22978        (JSC::ReverseBinaryOpNode::emitBytecode):
22979        (JSC::ThrowableBinaryOpNode::emitBytecode):
22980        (JSC::InstanceOfNode::emitBytecode):
22981        (JSC::LogicalOpNode::emitBytecode):
22982        (JSC::ConditionalNode::emitBytecode):
22983        (JSC::emitReadModifyAssignment):
22984        (JSC::ReadModifyResolveNode::emitBytecode):
22985        (JSC::AssignResolveNode::emitBytecode):
22986        (JSC::AssignDotNode::emitBytecode):
22987        (JSC::ReadModifyDotNode::emitBytecode):
22988        (JSC::AssignErrorNode::emitBytecode):
22989        (JSC::AssignBracketNode::emitBytecode):
22990        (JSC::ReadModifyBracketNode::emitBytecode):
22991        (JSC::CommaNode::emitBytecode):
22992        (JSC::ConstDeclNode::emitCodeSingle):
22993        (JSC::ConstDeclNode::emitBytecode):
22994        (JSC::ConstStatementNode::emitBytecode):
22995        (JSC::statementListEmitCode):
22996        (JSC::BlockNode::emitBytecode):
22997        (JSC::EmptyStatementNode::emitBytecode):
22998        (JSC::DebuggerStatementNode::emitBytecode):
22999        (JSC::ExprStatementNode::emitBytecode):
23000        (JSC::VarStatementNode::emitBytecode):
23001        (JSC::IfNode::emitBytecode):
23002        (JSC::IfElseNode::emitBytecode):
23003        (JSC::DoWhileNode::emitBytecode):
23004        (JSC::WhileNode::emitBytecode):
23005        (JSC::ForNode::emitBytecode):
23006        (JSC::ForInNode::emitBytecode):
23007        (JSC::ContinueNode::emitBytecode):
23008        (JSC::BreakNode::emitBytecode):
23009        (JSC::ReturnNode::emitBytecode):
23010        (JSC::WithNode::emitBytecode):
23011        (JSC::CaseBlockNode::emitBytecodeForBlock):
23012        (JSC::SwitchNode::emitBytecode):
23013        (JSC::LabelNode::emitBytecode):
23014        (JSC::ThrowNode::emitBytecode):
23015        (JSC::TryNode::emitBytecode):
23016        (JSC::EvalNode::emitBytecode):
23017        (JSC::EvalNode::generateBytecode):
23018        (JSC::FunctionBodyNode::generateBytecode):
23019        (JSC::FunctionBodyNode::emitBytecode):
23020        (JSC::ProgramNode::emitBytecode):
23021        (JSC::ProgramNode::generateBytecode):
23022        (JSC::FuncDeclNode::emitBytecode):
23023        (JSC::FuncExprNode::emitBytecode):
23024        * parser/Nodes.h:
23025        (JSC::ExpressionNode::):
23026        (JSC::BooleanNode::):
23027        (JSC::NumberNode::):
23028        (JSC::StringNode::):
23029        (JSC::ProgramNode::):
23030        (JSC::EvalNode::):
23031        (JSC::FunctionBodyNode::):
23032        * runtime/Arguments.h:
23033        (JSC::Arguments::getArgumentsData):
23034        (JSC::JSActivation::copyRegisters):
23035        * runtime/JSActivation.cpp:
23036        (JSC::JSActivation::mark):
23037        * runtime/JSActivation.h:
23038        (JSC::JSActivation::JSActivationData::JSActivationData):
23039        * runtime/JSFunction.cpp:
23040        (JSC::JSFunction::~JSFunction):
23041
230422008-11-15  Geoffrey Garen  <ggaren@apple.com>
23043
23044        Reviewed by Sam Weinig.
23045        
23046        Renamed all forms of "byte code" "opcode" "op code" "code" "bitcode"
23047        etc. to "bytecode".
23048
23049        * VM/CTI.cpp:
23050        (JSC::CTI::printBytecodeOperandTypes):
23051        (JSC::CTI::emitAllocateNumber):
23052        (JSC::CTI::emitNakedCall):
23053        (JSC::CTI::emitNakedFastCall):
23054        (JSC::CTI::emitCTICall):
23055        (JSC::CTI::emitJumpSlowCaseIfNotJSCell):
23056        (JSC::CTI::emitJumpSlowCaseIfNotImmNum):
23057        (JSC::CTI::emitJumpSlowCaseIfNotImmNums):
23058        (JSC::CTI::emitFastArithIntToImmOrSlowCase):
23059        (JSC::CTI::compileOpCall):
23060        (JSC::CTI::emitSlowScriptCheck):
23061        (JSC::CTI::compileBinaryArithOp):
23062        (JSC::CTI::compileBinaryArithOpSlowCase):
23063        (JSC::CTI::privateCompileMainPass):
23064        (JSC::CTI::privateCompileSlowCases):
23065        (JSC::CTI::privateCompile):
23066        * VM/CTI.h:
23067        (JSC::CallRecord::CallRecord):
23068        (JSC::SwitchRecord::SwitchRecord):
23069        * VM/CodeBlock.cpp:
23070        (JSC::CodeBlock::printStructureIDs):
23071        (JSC::CodeBlock::dump):
23072        (JSC::CodeBlock::~CodeBlock):
23073        (JSC::CodeBlock::derefStructureIDs):
23074        (JSC::CodeBlock::refStructureIDs):
23075        * VM/CodeBlock.h:
23076        (JSC::StructureStubInfo::StructureStubInfo):
23077        * VM/ExceptionHelpers.cpp:
23078        (JSC::createNotAnObjectError):
23079        * VM/Instruction.h:
23080        (JSC::Instruction::Instruction):
23081        (JSC::Instruction::):
23082        * VM/Machine.cpp:
23083        (JSC::BytecodeInterpreter::isBytecode):
23084        (JSC::BytecodeInterpreter::throwException):
23085        (JSC::BytecodeInterpreter::execute):
23086        (JSC::BytecodeInterpreter::tryCachePutByID):
23087        (JSC::BytecodeInterpreter::uncachePutByID):
23088        (JSC::BytecodeInterpreter::tryCacheGetByID):
23089        (JSC::BytecodeInterpreter::uncacheGetByID):
23090        (JSC::BytecodeInterpreter::privateExecute):
23091        (JSC::BytecodeInterpreter::tryCTICachePutByID):
23092        (JSC::BytecodeInterpreter::tryCTICacheGetByID):
23093        (JSC::BytecodeInterpreter::cti_op_call_JSFunction):
23094        (JSC::BytecodeInterpreter::cti_vm_dontLazyLinkCall):
23095        (JSC::BytecodeInterpreter::cti_vm_lazyLinkCall):
23096        * VM/Machine.h:
23097        (JSC::BytecodeInterpreter::getBytecode):
23098        (JSC::BytecodeInterpreter::getBytecodeID):
23099        (JSC::BytecodeInterpreter::isCallBytecode):
23100        * VM/Opcode.cpp:
23101        (JSC::):
23102        (JSC::BytecodeStats::BytecodeStats):
23103        (JSC::compareBytecodeIndices):
23104        (JSC::compareBytecodePairIndices):
23105        (JSC::BytecodeStats::~BytecodeStats):
23106        (JSC::BytecodeStats::recordInstruction):
23107        (JSC::BytecodeStats::resetLastInstruction):
23108        * VM/Opcode.h:
23109        (JSC::):
23110        (JSC::padBytecodeName):
23111        * VM/SamplingTool.cpp:
23112        (JSC::ScopeSampleRecord::sample):
23113        (JSC::SamplingTool::run):
23114        (JSC::compareBytecodeIndicesSampling):
23115        (JSC::SamplingTool::dump):
23116        * VM/SamplingTool.h:
23117        (JSC::ScopeSampleRecord::ScopeSampleRecord):
23118        (JSC::SamplingTool::SamplingTool):
23119        * bytecompiler/CodeGenerator.cpp:
23120        (JSC::CodeGenerator::generate):
23121        (JSC::CodeGenerator::CodeGenerator):
23122        (JSC::CodeGenerator::emitLabel):
23123        (JSC::CodeGenerator::emitBytecode):
23124        (JSC::CodeGenerator::emitJump):
23125        (JSC::CodeGenerator::emitJumpIfTrue):
23126        (JSC::CodeGenerator::emitJumpIfFalse):
23127        (JSC::CodeGenerator::emitMove):
23128        (JSC::CodeGenerator::emitUnaryOp):
23129        (JSC::CodeGenerator::emitPreInc):
23130        (JSC::CodeGenerator::emitPreDec):
23131        (JSC::CodeGenerator::emitPostInc):
23132        (JSC::CodeGenerator::emitPostDec):
23133        (JSC::CodeGenerator::emitBinaryOp):
23134        (JSC::CodeGenerator::emitEqualityOp):
23135        (JSC::CodeGenerator::emitUnexpectedLoad):
23136        (JSC::CodeGenerator::emitInstanceOf):
23137        (JSC::CodeGenerator::emitResolve):
23138        (JSC::CodeGenerator::emitGetScopedVar):
23139        (JSC::CodeGenerator::emitPutScopedVar):
23140        (JSC::CodeGenerator::emitResolveBase):
23141        (JSC::CodeGenerator::emitResolveWithBase):
23142        (JSC::CodeGenerator::emitResolveFunction):
23143        (JSC::CodeGenerator::emitGetById):
23144        (JSC::CodeGenerator::emitPutById):
23145        (JSC::CodeGenerator::emitPutGetter):
23146        (JSC::CodeGenerator::emitPutSetter):
23147        (JSC::CodeGenerator::emitDeleteById):
23148        (JSC::CodeGenerator::emitGetByVal):
23149        (JSC::CodeGenerator::emitPutByVal):
23150        (JSC::CodeGenerator::emitDeleteByVal):
23151        (JSC::CodeGenerator::emitPutByIndex):
23152        (JSC::CodeGenerator::emitNewObject):
23153        (JSC::CodeGenerator::emitNewArray):
23154        (JSC::CodeGenerator::emitNewFunction):
23155        (JSC::CodeGenerator::emitNewRegExp):
23156        (JSC::CodeGenerator::emitNewFunctionExpression):
23157        (JSC::CodeGenerator::emitCall):
23158        (JSC::CodeGenerator::emitReturn):
23159        (JSC::CodeGenerator::emitUnaryNoDstOp):
23160        (JSC::CodeGenerator::emitConstruct):
23161        (JSC::CodeGenerator::emitPopScope):
23162        (JSC::CodeGenerator::emitDebugHook):
23163        (JSC::CodeGenerator::emitComplexJumpScopes):
23164        (JSC::CodeGenerator::emitJumpScopes):
23165        (JSC::CodeGenerator::emitNextPropertyName):
23166        (JSC::CodeGenerator::emitCatch):
23167        (JSC::CodeGenerator::emitNewError):
23168        (JSC::CodeGenerator::emitJumpSubroutine):
23169        (JSC::CodeGenerator::emitSubroutineReturn):
23170        (JSC::CodeGenerator::emitPushNewScope):
23171        (JSC::CodeGenerator::beginSwitch):
23172        (JSC::CodeGenerator::endSwitch):
23173        * bytecompiler/CodeGenerator.h:
23174        (JSC::CodeGenerator::emitNode):
23175        * jsc.cpp:
23176        (runWithScripts):
23177        * masm/X86Assembler.h:
23178        (JSC::X86Assembler::):
23179        (JSC::X86Assembler::emitModRm_opr):
23180        (JSC::X86Assembler::emitModRm_opr_Unchecked):
23181        (JSC::X86Assembler::emitModRm_opm):
23182        (JSC::X86Assembler::emitModRm_opm_Unchecked):
23183        (JSC::X86Assembler::emitModRm_opmsib):
23184        * parser/Nodes.cpp:
23185        (JSC::NullNode::emitBytecode):
23186        (JSC::BooleanNode::emitBytecode):
23187        (JSC::NumberNode::emitBytecode):
23188        (JSC::StringNode::emitBytecode):
23189        (JSC::RegExpNode::emitBytecode):
23190        (JSC::ThisNode::emitBytecode):
23191        (JSC::ResolveNode::emitBytecode):
23192        (JSC::ArrayNode::emitBytecode):
23193        (JSC::ObjectLiteralNode::emitBytecode):
23194        (JSC::PropertyListNode::emitBytecode):
23195        (JSC::BracketAccessorNode::emitBytecode):
23196        (JSC::DotAccessorNode::emitBytecode):
23197        (JSC::ArgumentListNode::emitBytecode):
23198        (JSC::NewExprNode::emitBytecode):
23199        (JSC::EvalFunctionCallNode::emitBytecode):
23200        (JSC::FunctionCallValueNode::emitBytecode):
23201        (JSC::FunctionCallResolveNode::emitBytecode):
23202        (JSC::FunctionCallBracketNode::emitBytecode):
23203        (JSC::FunctionCallDotNode::emitBytecode):
23204        (JSC::PostfixResolveNode::emitBytecode):
23205        (JSC::PostfixBracketNode::emitBytecode):
23206        (JSC::PostfixDotNode::emitBytecode):
23207        (JSC::PostfixErrorNode::emitBytecode):
23208        (JSC::DeleteResolveNode::emitBytecode):
23209        (JSC::DeleteBracketNode::emitBytecode):
23210        (JSC::DeleteDotNode::emitBytecode):
23211        (JSC::DeleteValueNode::emitBytecode):
23212        (JSC::VoidNode::emitBytecode):
23213        (JSC::TypeOfResolveNode::emitBytecode):
23214        (JSC::TypeOfValueNode::emitBytecode):
23215        (JSC::PrefixResolveNode::emitBytecode):
23216        (JSC::PrefixBracketNode::emitBytecode):
23217        (JSC::PrefixDotNode::emitBytecode):
23218        (JSC::PrefixErrorNode::emitBytecode):
23219        (JSC::UnaryOpNode::emitBytecode):
23220        (JSC::BinaryOpNode::emitBytecode):
23221        (JSC::EqualNode::emitBytecode):
23222        (JSC::StrictEqualNode::emitBytecode):
23223        (JSC::ReverseBinaryOpNode::emitBytecode):
23224        (JSC::ThrowableBinaryOpNode::emitBytecode):
23225        (JSC::InstanceOfNode::emitBytecode):
23226        (JSC::LogicalOpNode::emitBytecode):
23227        (JSC::ConditionalNode::emitBytecode):
23228        (JSC::emitReadModifyAssignment):
23229        (JSC::ReadModifyResolveNode::emitBytecode):
23230        (JSC::AssignResolveNode::emitBytecode):
23231        (JSC::AssignDotNode::emitBytecode):
23232        (JSC::ReadModifyDotNode::emitBytecode):
23233        (JSC::AssignErrorNode::emitBytecode):
23234        (JSC::AssignBracketNode::emitBytecode):
23235        (JSC::ReadModifyBracketNode::emitBytecode):
23236        (JSC::CommaNode::emitBytecode):
23237        (JSC::ConstDeclNode::emitBytecode):
23238        (JSC::ConstStatementNode::emitBytecode):
23239        (JSC::BlockNode::emitBytecode):
23240        (JSC::EmptyStatementNode::emitBytecode):
23241        (JSC::DebuggerStatementNode::emitBytecode):
23242        (JSC::ExprStatementNode::emitBytecode):
23243        (JSC::VarStatementNode::emitBytecode):
23244        (JSC::IfNode::emitBytecode):
23245        (JSC::IfElseNode::emitBytecode):
23246        (JSC::DoWhileNode::emitBytecode):
23247        (JSC::WhileNode::emitBytecode):
23248        (JSC::ForNode::emitBytecode):
23249        (JSC::ForInNode::emitBytecode):
23250        (JSC::ContinueNode::emitBytecode):
23251        (JSC::BreakNode::emitBytecode):
23252        (JSC::ReturnNode::emitBytecode):
23253        (JSC::WithNode::emitBytecode):
23254        (JSC::SwitchNode::emitBytecode):
23255        (JSC::LabelNode::emitBytecode):
23256        (JSC::ThrowNode::emitBytecode):
23257        (JSC::TryNode::emitBytecode):
23258        (JSC::ScopeNode::ScopeNode):
23259        (JSC::EvalNode::emitBytecode):
23260        (JSC::FunctionBodyNode::emitBytecode):
23261        (JSC::ProgramNode::emitBytecode):
23262        (JSC::FuncDeclNode::emitBytecode):
23263        (JSC::FuncExprNode::emitBytecode):
23264        * parser/Nodes.h:
23265        (JSC::UnaryPlusNode::):
23266        (JSC::NegateNode::):
23267        (JSC::BitwiseNotNode::):
23268        (JSC::LogicalNotNode::):
23269        (JSC::MultNode::):
23270        (JSC::DivNode::):
23271        (JSC::ModNode::):
23272        (JSC::AddNode::):
23273        (JSC::SubNode::):
23274        (JSC::LeftShiftNode::):
23275        (JSC::RightShiftNode::):
23276        (JSC::UnsignedRightShiftNode::):
23277        (JSC::LessNode::):
23278        (JSC::GreaterNode::):
23279        (JSC::LessEqNode::):
23280        (JSC::GreaterEqNode::):
23281        (JSC::InstanceOfNode::):
23282        (JSC::InNode::):
23283        (JSC::EqualNode::):
23284        (JSC::NotEqualNode::):
23285        (JSC::StrictEqualNode::):
23286        (JSC::NotStrictEqualNode::):
23287        (JSC::BitAndNode::):
23288        (JSC::BitOrNode::):
23289        (JSC::BitXOrNode::):
23290        (JSC::ProgramNode::):
23291        (JSC::EvalNode::):
23292        (JSC::FunctionBodyNode::):
23293        * runtime/JSNotAnObject.h:
23294        * runtime/StructureID.cpp:
23295        (JSC::StructureID::fromDictionaryTransition):
23296        * wtf/Platform.h:
23297
232982008-11-15  Geoffrey Garen  <ggaren@apple.com>
23299
23300        Reviewed by Sam Weinig.
23301        
23302        Renamed Machine to BytecodeInterpreter.
23303        
23304        Nixed the Interpreter class, and changed its two functions to stand-alone
23305        functions.
23306
23307        * JavaScriptCore.exp:
23308        * VM/CTI.cpp:
23309        (JSC::):
23310        (JSC::CTI::emitCTICall):
23311        (JSC::CTI::CTI):
23312        (JSC::CTI::compileOpCall):
23313        (JSC::CTI::emitSlowScriptCheck):
23314        (JSC::CTI::compileBinaryArithOpSlowCase):
23315        (JSC::CTI::privateCompileMainPass):
23316        (JSC::CTI::privateCompileSlowCases):
23317        (JSC::CTI::privateCompile):
23318        (JSC::CTI::privateCompileGetByIdSelf):
23319        (JSC::CTI::privateCompileGetByIdProto):
23320        (JSC::CTI::privateCompileGetByIdChain):
23321        (JSC::CTI::privateCompilePutByIdReplace):
23322        (JSC::CTI::privateCompilePutByIdTransition):
23323        (JSC::CTI::privateCompileCTIMachineTrampolines):
23324        (JSC::CTI::freeCTIMachineTrampolines):
23325        (JSC::CTI::patchGetByIdSelf):
23326        (JSC::CTI::patchPutByIdReplace):
23327        (JSC::CTI::privateCompilePatchGetArrayLength):
23328        (JSC::CTI::compileRegExp):
23329        * VM/CTI.h:
23330        * VM/CodeBlock.cpp:
23331        (JSC::CodeBlock::printStructureIDs):
23332        (JSC::CodeBlock::dump):
23333        (JSC::CodeBlock::derefStructureIDs):
23334        (JSC::CodeBlock::refStructureIDs):
23335        * VM/ExceptionHelpers.cpp:
23336        (JSC::createNotAnObjectError):
23337        * VM/Machine.cpp:
23338        (JSC::jsLess):
23339        (JSC::jsLessEq):
23340        (JSC::BytecodeInterpreter::resolve):
23341        (JSC::BytecodeInterpreter::resolveSkip):
23342        (JSC::BytecodeInterpreter::resolveGlobal):
23343        (JSC::BytecodeInterpreter::resolveBase):
23344        (JSC::BytecodeInterpreter::resolveBaseAndProperty):
23345        (JSC::BytecodeInterpreter::resolveBaseAndFunc):
23346        (JSC::BytecodeInterpreter::slideRegisterWindowForCall):
23347        (JSC::BytecodeInterpreter::callEval):
23348        (JSC::BytecodeInterpreter::BytecodeInterpreter):
23349        (JSC::BytecodeInterpreter::initialize):
23350        (JSC::BytecodeInterpreter::~BytecodeInterpreter):
23351        (JSC::BytecodeInterpreter::dumpCallFrame):
23352        (JSC::BytecodeInterpreter::dumpRegisters):
23353        (JSC::BytecodeInterpreter::isOpcode):
23354        (JSC::BytecodeInterpreter::unwindCallFrame):
23355        (JSC::BytecodeInterpreter::throwException):
23356        (JSC::BytecodeInterpreter::execute):
23357        (JSC::BytecodeInterpreter::debug):
23358        (JSC::BytecodeInterpreter::resetTimeoutCheck):
23359        (JSC::BytecodeInterpreter::checkTimeout):
23360        (JSC::BytecodeInterpreter::createExceptionScope):
23361        (JSC::BytecodeInterpreter::tryCachePutByID):
23362        (JSC::BytecodeInterpreter::uncachePutByID):
23363        (JSC::BytecodeInterpreter::tryCacheGetByID):
23364        (JSC::BytecodeInterpreter::uncacheGetByID):
23365        (JSC::BytecodeInterpreter::privateExecute):
23366        (JSC::BytecodeInterpreter::retrieveArguments):
23367        (JSC::BytecodeInterpreter::retrieveCaller):
23368        (JSC::BytecodeInterpreter::retrieveLastCaller):
23369        (JSC::BytecodeInterpreter::findFunctionCallFrame):
23370        (JSC::BytecodeInterpreter::tryCTICachePutByID):
23371        (JSC::BytecodeInterpreter::tryCTICacheGetByID):
23372        (JSC::BytecodeInterpreter::cti_op_convert_this):
23373        (JSC::BytecodeInterpreter::cti_op_end):
23374        (JSC::BytecodeInterpreter::cti_op_add):
23375        (JSC::BytecodeInterpreter::cti_op_pre_inc):
23376        (JSC::BytecodeInterpreter::cti_timeout_check):
23377        (JSC::BytecodeInterpreter::cti_register_file_check):
23378        (JSC::BytecodeInterpreter::cti_op_loop_if_less):
23379        (JSC::BytecodeInterpreter::cti_op_loop_if_lesseq):
23380        (JSC::BytecodeInterpreter::cti_op_new_object):
23381        (JSC::BytecodeInterpreter::cti_op_put_by_id):
23382        (JSC::BytecodeInterpreter::cti_op_put_by_id_second):
23383        (JSC::BytecodeInterpreter::cti_op_put_by_id_generic):
23384        (JSC::BytecodeInterpreter::cti_op_put_by_id_fail):
23385        (JSC::BytecodeInterpreter::cti_op_get_by_id):
23386        (JSC::BytecodeInterpreter::cti_op_get_by_id_second):
23387        (JSC::BytecodeInterpreter::cti_op_get_by_id_generic):
23388        (JSC::BytecodeInterpreter::cti_op_get_by_id_fail):
23389        (JSC::BytecodeInterpreter::cti_op_instanceof):
23390        (JSC::BytecodeInterpreter::cti_op_del_by_id):
23391        (JSC::BytecodeInterpreter::cti_op_mul):
23392        (JSC::BytecodeInterpreter::cti_op_new_func):
23393        (JSC::BytecodeInterpreter::cti_op_call_JSFunction):
23394        (JSC::BytecodeInterpreter::cti_op_call_arityCheck):
23395        (JSC::BytecodeInterpreter::cti_vm_dontLazyLinkCall):
23396        (JSC::BytecodeInterpreter::cti_vm_lazyLinkCall):
23397        (JSC::BytecodeInterpreter::cti_op_push_activation):
23398        (JSC::BytecodeInterpreter::cti_op_call_NotJSFunction):
23399        (JSC::BytecodeInterpreter::cti_op_create_arguments):
23400        (JSC::BytecodeInterpreter::cti_op_create_arguments_no_params):
23401        (JSC::BytecodeInterpreter::cti_op_tear_off_activation):
23402        (JSC::BytecodeInterpreter::cti_op_tear_off_arguments):
23403        (JSC::BytecodeInterpreter::cti_op_profile_will_call):
23404        (JSC::BytecodeInterpreter::cti_op_profile_did_call):
23405        (JSC::BytecodeInterpreter::cti_op_ret_scopeChain):
23406        (JSC::BytecodeInterpreter::cti_op_new_array):
23407        (JSC::BytecodeInterpreter::cti_op_resolve):
23408        (JSC::BytecodeInterpreter::cti_op_construct_JSConstruct):
23409        (JSC::BytecodeInterpreter::cti_op_construct_NotJSConstruct):
23410        (JSC::BytecodeInterpreter::cti_op_get_by_val):
23411        (JSC::BytecodeInterpreter::cti_op_resolve_func):
23412        (JSC::BytecodeInterpreter::cti_op_sub):
23413        (JSC::BytecodeInterpreter::cti_op_put_by_val):
23414        (JSC::BytecodeInterpreter::cti_op_put_by_val_array):
23415        (JSC::BytecodeInterpreter::cti_op_lesseq):
23416        (JSC::BytecodeInterpreter::cti_op_loop_if_true):
23417        (JSC::BytecodeInterpreter::cti_op_negate):
23418        (JSC::BytecodeInterpreter::cti_op_resolve_base):
23419        (JSC::BytecodeInterpreter::cti_op_resolve_skip):
23420        (JSC::BytecodeInterpreter::cti_op_resolve_global):
23421        (JSC::BytecodeInterpreter::cti_op_div):
23422        (JSC::BytecodeInterpreter::cti_op_pre_dec):
23423        (JSC::BytecodeInterpreter::cti_op_jless):
23424        (JSC::BytecodeInterpreter::cti_op_not):
23425        (JSC::BytecodeInterpreter::cti_op_jtrue):
23426        (JSC::BytecodeInterpreter::cti_op_post_inc):
23427        (JSC::BytecodeInterpreter::cti_op_eq):
23428        (JSC::BytecodeInterpreter::cti_op_lshift):
23429        (JSC::BytecodeInterpreter::cti_op_bitand):
23430        (JSC::BytecodeInterpreter::cti_op_rshift):
23431        (JSC::BytecodeInterpreter::cti_op_bitnot):
23432        (JSC::BytecodeInterpreter::cti_op_resolve_with_base):
23433        (JSC::BytecodeInterpreter::cti_op_new_func_exp):
23434        (JSC::BytecodeInterpreter::cti_op_mod):
23435        (JSC::BytecodeInterpreter::cti_op_less):
23436        (JSC::BytecodeInterpreter::cti_op_neq):
23437        (JSC::BytecodeInterpreter::cti_op_post_dec):
23438        (JSC::BytecodeInterpreter::cti_op_urshift):
23439        (JSC::BytecodeInterpreter::cti_op_bitxor):
23440        (JSC::BytecodeInterpreter::cti_op_new_regexp):
23441        (JSC::BytecodeInterpreter::cti_op_bitor):
23442        (JSC::BytecodeInterpreter::cti_op_call_eval):
23443        (JSC::BytecodeInterpreter::cti_op_throw):
23444        (JSC::BytecodeInterpreter::cti_op_get_pnames):
23445        (JSC::BytecodeInterpreter::cti_op_next_pname):
23446        (JSC::BytecodeInterpreter::cti_op_push_scope):
23447        (JSC::BytecodeInterpreter::cti_op_pop_scope):
23448        (JSC::BytecodeInterpreter::cti_op_typeof):
23449        (JSC::BytecodeInterpreter::cti_op_is_undefined):
23450        (JSC::BytecodeInterpreter::cti_op_is_boolean):
23451        (JSC::BytecodeInterpreter::cti_op_is_number):
23452        (JSC::BytecodeInterpreter::cti_op_is_string):
23453        (JSC::BytecodeInterpreter::cti_op_is_object):
23454        (JSC::BytecodeInterpreter::cti_op_is_function):
23455        (JSC::BytecodeInterpreter::cti_op_stricteq):
23456        (JSC::BytecodeInterpreter::cti_op_nstricteq):
23457        (JSC::BytecodeInterpreter::cti_op_to_jsnumber):
23458        (JSC::BytecodeInterpreter::cti_op_in):
23459        (JSC::BytecodeInterpreter::cti_op_push_new_scope):
23460        (JSC::BytecodeInterpreter::cti_op_jmp_scopes):
23461        (JSC::BytecodeInterpreter::cti_op_put_by_index):
23462        (JSC::BytecodeInterpreter::cti_op_switch_imm):
23463        (JSC::BytecodeInterpreter::cti_op_switch_char):
23464        (JSC::BytecodeInterpreter::cti_op_switch_string):
23465        (JSC::BytecodeInterpreter::cti_op_del_by_val):
23466        (JSC::BytecodeInterpreter::cti_op_put_getter):
23467        (JSC::BytecodeInterpreter::cti_op_put_setter):
23468        (JSC::BytecodeInterpreter::cti_op_new_error):
23469        (JSC::BytecodeInterpreter::cti_op_debug):
23470        (JSC::BytecodeInterpreter::cti_vm_throw):
23471        * VM/Machine.h:
23472        * VM/Register.h:
23473        * VM/SamplingTool.cpp:
23474        (JSC::SamplingTool::run):
23475        * VM/SamplingTool.h:
23476        (JSC::SamplingTool::SamplingTool):
23477        * bytecompiler/CodeGenerator.cpp:
23478        (JSC::CodeGenerator::generate):
23479        (JSC::CodeGenerator::CodeGenerator):
23480        (JSC::CodeGenerator::emitOpcode):
23481        * debugger/DebuggerCallFrame.cpp:
23482        (JSC::DebuggerCallFrame::evaluate):
23483        * jsc.cpp:
23484        (runWithScripts):
23485        * parser/Nodes.cpp:
23486        (JSC::ScopeNode::ScopeNode):
23487        * profiler/ProfileGenerator.cpp:
23488        (JSC::ProfileGenerator::addParentForConsoleStart):
23489        * runtime/ArrayPrototype.cpp:
23490        (JSC::arrayProtoFuncPop):
23491        (JSC::arrayProtoFuncPush):
23492        * runtime/Collector.cpp:
23493        (JSC::Heap::collect):
23494        * runtime/ExecState.h:
23495        (JSC::ExecState::interpreter):
23496        * runtime/FunctionPrototype.cpp:
23497        (JSC::functionProtoFuncApply):
23498        * runtime/Interpreter.cpp:
23499        (JSC::Interpreter::evaluate):
23500        * runtime/JSCell.h:
23501        * runtime/JSFunction.cpp:
23502        (JSC::JSFunction::call):
23503        (JSC::JSFunction::argumentsGetter):
23504        (JSC::JSFunction::callerGetter):
23505        (JSC::JSFunction::construct):
23506        * runtime/JSFunction.h:
23507        * runtime/JSGlobalData.cpp:
23508        (JSC::JSGlobalData::JSGlobalData):
23509        (JSC::JSGlobalData::~JSGlobalData):
23510        * runtime/JSGlobalData.h:
23511        * runtime/JSGlobalObject.cpp:
23512        (JSC::JSGlobalObject::~JSGlobalObject):
23513        (JSC::JSGlobalObject::setTimeoutTime):
23514        (JSC::JSGlobalObject::startTimeoutCheck):
23515        (JSC::JSGlobalObject::stopTimeoutCheck):
23516        (JSC::JSGlobalObject::mark):
23517        * runtime/JSGlobalObjectFunctions.cpp:
23518        (JSC::globalFuncEval):
23519        * runtime/JSString.h:
23520        * runtime/RegExp.cpp:
23521        (JSC::RegExp::RegExp):
23522
235232008-11-15  Maciej Stachowiak  <mjs@apple.com>
23524
23525        Reviewed by Sam Weinig.
23526        
23527        - Remove SymbolTable from FunctionBodyNode and move it to CodeBlock
23528        
23529        It's not needed for functions that have never been executed, so no
23530        need to waste the memory. Saves ~4M on membuster after 30 pages.
23531
23532        * VM/CodeBlock.h:
23533        * VM/Machine.cpp:
23534        (JSC::Machine::retrieveArguments):
23535        * parser/Nodes.cpp:
23536        (JSC::EvalNode::generateCode):
23537        (JSC::FunctionBodyNode::generateCode):
23538        * parser/Nodes.h:
23539        * runtime/JSActivation.h:
23540        (JSC::JSActivation::JSActivationData::JSActivationData):
23541
235422008-11-14  Cameron Zwarich  <zwarich@apple.com>
23543
23544        Reviewed by Darin Adler.
23545
23546        Bug 22259: Make all opcodes use eax as their final result register
23547        <https://bugs.webkit.org/show_bug.cgi?id=22259>
23548
23549        Change one case of op_add (and the corresponding slow case) to use eax
23550        rather than edx. Also, change the order in which the two results of
23551        resolve_func and resolve_base are emitted so that the retrieved value is
23552        put last into eax.
23553
23554        This gives no performance change on SunSpider or the V8 benchmark suite
23555        when run in either harness.
23556
23557        * VM/CTI.cpp:
23558        (JSC::CTI::privateCompileMainPass):
23559        (JSC::CTI::privateCompileSlowCases):
23560
235612008-11-14  Gavin Barraclough  <barraclough@apple.com>
23562
23563        Reviewed by Geoff Garen.
23564
23565        Geoff has this wacky notion that emitGetArg and emitPutArg should be related to
23566        doing the same thing.  Crazy.
23567        
23568        Rename the methods for accessing virtual registers to say 'VirtualRegister' in the
23569        name, and those for setting up the arguments for CTI methods to contain 'CTIArg'.
23570
23571        * VM/CTI.cpp:
23572        (JSC::CTI::emitGetVirtualRegister):
23573        (JSC::CTI::emitGetVirtualRegisters):
23574        (JSC::CTI::emitPutCTIArgFromVirtualRegister):
23575        (JSC::CTI::emitPutCTIArg):
23576        (JSC::CTI::emitGetCTIArg):
23577        (JSC::CTI::emitPutCTIArgConstant):
23578        (JSC::CTI::emitPutVirtualRegister):
23579        (JSC::CTI::compileOpCallSetupArgs):
23580        (JSC::CTI::compileOpCallEvalSetupArgs):
23581        (JSC::CTI::compileOpConstructSetupArgs):
23582        (JSC::CTI::compileOpCall):
23583        (JSC::CTI::compileOpStrictEq):
23584        (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate):
23585        (JSC::CTI::compileBinaryArithOp):
23586        (JSC::CTI::compileBinaryArithOpSlowCase):
23587        (JSC::CTI::privateCompileMainPass):
23588        (JSC::CTI::privateCompileSlowCases):
23589        (JSC::CTI::privateCompileCTIMachineTrampolines):
23590        * VM/CTI.h:
23591
235922008-11-14  Greg Bolsinga  <bolsinga@apple.com>
23593
23594        Reviewed by Antti Koivisto
23595
23596        Fix potential build break by adding StdLibExtras.h
23597        
23598        * GNUmakefile.am:
23599        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
23600
236012008-11-14  Gavin Barraclough  <barraclough@apple.com>
23602
23603        Reviewed by Geoff Garen.
23604
23605        Generate less code for the slow cases of op_call and op_construct.
23606        https://bugs.webkit.org/show_bug.cgi?id=22272
23607
23608        1% progression on v8 tests.
23609
23610        * VM/CTI.cpp:
23611        (JSC::CTI::emitRetrieveArg):
23612        (JSC::CTI::emitNakedCall):
23613        (JSC::CTI::compileOpCallInitializeCallFrame):
23614        (JSC::CTI::compileOpCall):
23615        (JSC::CTI::privateCompileSlowCases):
23616        (JSC::CTI::privateCompileCTIMachineTrampolines):
23617        * VM/CTI.h:
23618        * VM/CodeBlock.h:
23619        (JSC::getCallLinkInfoReturnLocation):
23620        (JSC::CodeBlock::getCallLinkInfo):
23621        * VM/Machine.cpp:
23622        (JSC::Machine::Machine):
23623        (JSC::Machine::cti_vm_dontLazyLinkCall):
23624        (JSC::Machine::cti_vm_lazyLinkCall):
23625        * VM/Machine.h:
23626
236272008-11-14  Greg Bolsinga  <bolsinga@apple.com>
23628
23629        Reviewed by Darin Alder.
23630
23631        https://bugs.webkit.org/show_bug.cgi?id=21810
23632        Remove use of static C++ objects that are destroyed at exit time (destructors)
23633
23634        Create DEFINE_STATIC_LOCAL macro. Change static local objects to leak to avoid 
23635        exit-time destructor. Update code that was changed to fix this issue that ran 
23636        into a gcc bug (<rdar://problem/6354696> Codegen issue with C++ static reference 
23637        in gcc build 5465). Also typdefs for template types needed to be added in some 
23638        cases so the type could make it through the macro successfully.
23639
23640        Basically code of the form:
23641        static T m;
23642        becomes:
23643        DEFINE_STATIC_LOCAL(T, m, ());
23644
23645        Also any code of the form:
23646        static T& m = *new T;
23647        also becomes:
23648        DEFINE_STATIC_LOCAL(T, m, ());
23649
23650        * JavaScriptCore.xcodeproj/project.pbxproj:
23651        * wtf/MainThread.cpp:
23652        (WTF::mainThreadFunctionQueueMutex):
23653        (WTF::functionQueue):
23654        * wtf/StdLibExtras.h: Added. Add DEFINE_STATIC_LOCAL macro
23655        * wtf/ThreadingPthreads.cpp:
23656        (WTF::threadMapMutex):
23657        (WTF::threadMap):
23658        (WTF::identifierByPthreadHandle):
23659
236602008-11-13  Sam Weinig  <sam@webkit.org>
23661
23662        Reviewed by Darin Adler
23663
23664        Fix for https://bugs.webkit.org/show_bug.cgi?id=22269
23665        Reduce PropertyMap usage
23666
23667        From observation of StructureID statistics, it became clear that many
23668        StructureID's were not being used as StructureIDs themselves, but rather
23669        only being necessary as links in the transition chain.  Acknowledging this
23670        and that PropertyMaps stored in StructureIDs can be treated as caches, that
23671        is that they can be reconstructed on demand, it became clear that we could
23672        reduce the memory consumption of StructureIDs by only keeping PropertyMaps
23673        for the StructureIDs that need them the most.
23674
23675        The specific strategy used to reduce the number of StructureIDs with
23676        PropertyMaps is to take the previous StructureIDs PropertyMap when initially
23677        transitioning (addPropertyTransition) from it and clearing out the pointer 
23678        in the process.  The next time we need to do the same transition, for instance
23679        repeated calls to the same constructor, we use the new addPropertyTransitionToExistingStructure
23680        first, which allows us not to need the PropertyMap to determine if the property
23681        exists already, since a transition to that property would require it not already
23682        be present in the StructureID.  Should there be no transition, the PropertyMap
23683        can be constructed on demand (via materializePropertyMap) to determine if the put is a 
23684        replace or a transition to a new StructureID.
23685
23686        Reduces memory use on Membuster head test (30 pages open) by ~15MB.
23687
23688        * JavaScriptCore.exp:
23689        * runtime/JSObject.h:
23690        (JSC::JSObject::putDirect): First use addPropertyTransitionToExistingStructure
23691        so that we can avoid building the PropertyMap on subsequent similar object
23692        creations.
23693        * runtime/PropertyMapHashTable.h:
23694        (JSC::PropertyMapEntry::PropertyMapEntry): Add version of constructor which takes
23695        all values to be used when lazily building the PropertyMap. 
23696        * runtime/StructureID.cpp:
23697        (JSC::StructureID::dumpStatistics): Add statistics on the number of StructureIDs
23698        with PropertyMaps.
23699        (JSC::StructureID::StructureID): Rename m_cachedTransistionOffset to m_offset
23700        (JSC::isPowerOf2):
23701        (JSC::nextPowerOf2):
23702        (JSC::sizeForKeyCount): Returns the expected size of a PropertyMap for a key count.
23703        (JSC::StructureID::materializePropertyMap): Builds the PropertyMap out of its previous pointer chain.
23704        (JSC::StructureID::addPropertyTransitionToExistingStructure): Only transitions if there is a
23705        an existing transition.
23706        (JSC::StructureID::addPropertyTransition): Instead of always copying the ProperyMap, try and take
23707        it from it previous pointer.
23708        (JSC::StructureID::removePropertyTransition): Simplify by calling toDictionaryTransition() to do
23709        transition work.
23710        (JSC::StructureID::changePrototypeTransition): Build the PropertyMap if necessary before transitioning
23711        because once you have transitioned, you will not be able to reconstruct it afterwards as there is no
23712        previous pointer, pinning the ProperyMap as well.
23713        (JSC::StructureID::getterSetterTransition): Ditto.
23714        (JSC::StructureID::toDictionaryTransition): Pin the PropertyMap so that it is not destroyed on further transitions.
23715        (JSC::StructureID::fromDictionaryTransition): We can only transition back from a dictionary transition if there
23716        are no deleted offsets.
23717        (JSC::StructureID::addPropertyWithoutTransition): Build PropertyMap on demands and pin.
23718        (JSC::StructureID::removePropertyWithoutTransition): Ditto.
23719        (JSC::StructureID::get): Build on demand.
23720        (JSC::StructureID::createPropertyMapHashTable): Add version of create that takes a size
23721        for on demand building.
23722        (JSC::StructureID::expandPropertyMapHashTable):
23723        (JSC::StructureID::rehashPropertyMapHashTable):
23724        (JSC::StructureID::getEnumerablePropertyNamesInternal): Build PropertyMap on demand.
23725        * runtime/StructureID.h:
23726        (JSC::StructureID::propertyStorageSize): Account for StructureIDs without PropertyMaps.
23727        (JSC::StructureID::isEmpty): Ditto.
23728        (JSC::StructureID::materializePropertyMapIfNecessary):
23729        (JSC::StructureID::get): Build PropertyMap on demand
23730
237312008-11-14  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>
23732
23733        Reviewed by Simon Hausmann.
23734
23735        <https://bugs.webkit.org/show_bug.cgi?id=21500>
23736
23737        JavaScriptCore build with -O3 flag instead of -O2 (gcc).
23738        2.02% speedup on SunSpider (Qt-port on Linux)
23739        1.10% speedup on V8 (Qt-port on Linux)
23740        3.45% speedup on WindScorpion (Qt-port on Linux)
23741
23742        * JavaScriptCore.pri:
23743
237442008-11-14  Kristian Amlie  <kristian.amlie@trolltech.com>
23745
23746        Reviewed by Darin Adler.
23747
23748        Compile fix for RVCT.
23749
23750        In reality, it is two fixes:
23751
23752        1. Remove typename. I believe typename can only be used when the named
23753        type depends on the template parameters, which it doesn't in this
23754        case, so I think this is more correct.
23755        2. Replace ::iterator scope with specialized typedef. This is to work
23756        around a bug in RVCT.
23757
23758        https://bugs.webkit.org/show_bug.cgi?id=22260
23759
23760        * wtf/ListHashSet.h:
23761        (WTF::::find):
23762
237632008-11-14  Kristian Amlie  <kristian.amlie@trolltech.com>
23764
23765        Reviewed by Darin Adler.
23766
23767        Compile fix for WINSCW.
23768
23769        This fix doesn't protect against implicit conversions from bool to
23770        integers, but most likely that will be caught on another platform.
23771
23772        https://bugs.webkit.org/show_bug.cgi?id=22260
23773
23774        * wtf/PassRefPtr.h:
23775        (WTF::PassRefPtr::operator bool):
23776        * wtf/RefPtr.h:
23777        (WTF::RefPtr::operator bool):
23778
237792008-11-14  Cameron Zwarich  <zwarich@apple.com>
23780
23781        Reviewed by Darin Adler.
23782
23783        Bug 22245: Move wtf/dtoa.h into the WTF namespace
23784        <https://bugs.webkit.org/show_bug.cgi?id=22245>
23785
23786        Move wtf/dtoa.h into the WTF namespace from the JSC namespace. This
23787        introduces some ambiguities in name lookups, so I changed all uses of
23788        the functions in wtf/dtoa.h to explicitly state the namespace.
23789
23790        * JavaScriptCore.exp:
23791        * parser/Lexer.cpp:
23792        (JSC::Lexer::lex):
23793        * runtime/InitializeThreading.cpp:
23794        * runtime/JSGlobalObjectFunctions.cpp:
23795        (JSC::parseInt):
23796        * runtime/NumberPrototype.cpp:
23797        (JSC::integerPartNoExp):
23798        (JSC::numberProtoFuncToExponential):
23799        * runtime/UString.cpp:
23800        (JSC::concatenate):
23801        (JSC::UString::from):
23802        (JSC::UString::toDouble):
23803        * wtf/dtoa.cpp:
23804        * wtf/dtoa.h:
23805
238062008-11-14  Cameron Zwarich  <zwarich@apple.com>
23807
23808        Reviewed by Maciej Stachowiak.
23809
23810        Bug 22257: Enable redundant read optimizations for results generated by compileBinaryArithOp()
23811        <https://bugs.webkit.org/show_bug.cgi?id=22257>
23812
23813        This shows no change in performance on either SunSpider or the V8
23814        benchmark suite, but it removes an ugly special case and allows for
23815        future optimizations to be implemented in a cleaner fashion.
23816
23817        This patch was essentially given to me by Gavin Barraclough upon my
23818        request, but I did regression and performance testing so that he could
23819        work on something else.
23820
23821        * VM/CTI.cpp:
23822        (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): Move the final
23823        result to eax if it is not already there.
23824        (JSC::CTI::compileBinaryArithOp): Remove the killing of the final result
23825        register that disables the optimization.
23826
238272008-11-13  Eric Seidel  <eric@webkit.org>
23828
23829        Reviewed by Adam Roben.
23830
23831        Add a Scons-based build system for building
23832        the Chromium-Mac build of JavaScriptCore.
23833        https://bugs.webkit.org/show_bug.cgi?id=21991
23834
23835        * JavaScriptCore.scons: Added.
23836        * SConstruct: Added.
23837
238382008-11-13  Eric Seidel  <eric@webkit.org>
23839
23840        Reviewed by Adam Roben.
23841        
23842        Add PLATFORM(CHROMIUM) to the "we don't use cairo" blacklist
23843        until https://bugs.webkit.org/show_bug.cgi?id=22250 is fixed.
23844
23845        * wtf/Platform.h:
23846
238472008-11-13  Cameron Zwarich  <zwarich@apple.com>
23848
23849        Reviewed by Sam Weinig.
23850
23851        In r38375 the 'jsc' shell was changed to improve teardown on quit. The
23852        main() function in jsc.cpp uses Structured Exception Handling, so Visual
23853        C++ emits a warning when destructors are used.
23854        
23855        In order to speculatively fix the Windows build, this patch changes that
23856        code to use explicit pointer manipulation and locking rather than smart
23857        pointers and RAII.
23858
23859        * jsc.cpp:
23860        (main):
23861
238622008-11-13  Cameron Zwarich  <zwarich@apple.com>
23863
23864        Reviewed by Darin Adler.
23865
23866        Bug 22246: Get arguments for opcodes together to eliminate more redundant memory reads
23867        <https://bugs.webkit.org/show_bug.cgi?id=22246>
23868
23869        It is common for opcodes to read their first operand into eax and their
23870        second operand into edx. If the value intended for the second operand is
23871        in eax, we should first move eax to the register for the second operand
23872        and then read the first operand into eax.
23873
23874        This is a 0.5% speedup on SunSpider and a 2.0% speedup on the V8
23875        benchmark suite when measured using the V8 harness.
23876
23877        * VM/CTI.cpp:
23878        (JSC::CTI::emitGetArgs):
23879        (JSC::CTI::compileOpStrictEq):
23880        (JSC::CTI::compileBinaryArithOp):
23881        (JSC::CTI::privateCompileMainPass):
23882        (JSC::CTI::privateCompileSlowCases):
23883        * VM/CTI.h:
23884
238852008-11-13  Cameron Zwarich  <zwarich@apple.com>
23886
23887        Reviewed by Darin Adler.
23888
23889        Bug 22238: Avoid unnecessary reads of temporaries when the target machine register is not eax
23890        <https://bugs.webkit.org/show_bug.cgi?id=22238>
23891
23892        Enable the optimization of not reading a value back from memory that we
23893        just wrote when the target machine register is not eax. In order to do
23894        this, the code generation for op_put_global_var must be changed to
23895        read its argument into a register before overwriting eax.
23896
23897        This is a 0.5% speedup on SunSpider and shows no change on the V8
23898        benchmark suite when run in either harness.
23899
23900        * VM/CTI.cpp:
23901        (JSC::CTI::emitGetArg):
23902        (JSC::CTI::privateCompileMainPass):
23903
239042008-11-13  Cameron Zwarich  <zwarich@apple.com>
23905
23906        Reviewed by Alexey Proskuryakov.
23907
23908        Perform teardown in the 'jsc' shell in order to suppress annoying and
23909        misleading leak messages. There is still a lone JSC::Node leaking when
23910        quit() is called, but hopefully that can be fixed as well.
23911
23912        * jsc.cpp:
23913        (functionQuit):
23914        (main):
23915
239162008-11-13  Mike Pinkerton  <pinkerton@chromium.org>
23917
23918        Reviewed by Sam Weinig.
23919
23920        Fix for https://bugs.webkit.org/show_bug.cgi?id=22087
23921        Need correct platform defines for Mac Chromium
23922
23923        Set the appropriate platform defines for Mac Chromium, which is
23924        similar to PLATFORM(MAC), but isn't.
23925
23926        * wtf/Platform.h:
23927
239282008-11-13  Maciej Stachowiak  <mjs@apple.com>
23929
23930        Reviewed by Cameron Zwarich.
23931        
23932        - remove immediate checks from native codegen for known non-immediate cases like "this"
23933        
23934        ~.5% speedup on v8 benchmarks
23935        
23936        In the future we can extend this model to remove all sorts of
23937        typechecks based on local type info or type inference.
23938        
23939        I also added an assertion to verify that all slow cases linked as
23940        many slow case jumps as the corresponding fast case generated, and
23941        fixed the pre-existing cases where this was not true.
23942        
23943        * VM/CTI.cpp:
23944        (JSC::CTI::emitJumpSlowCaseIfNotJSCell):
23945        (JSC::CTI::linkSlowCaseIfNotJSCell):
23946        (JSC::CTI::compileBinaryArithOp):
23947        (JSC::CTI::compileBinaryArithOpSlowCase):
23948        (JSC::CTI::privateCompileMainPass):
23949        (JSC::CTI::privateCompileSlowCases):
23950        * VM/CTI.h:
23951        * VM/CodeBlock.h:
23952        (JSC::CodeBlock::isKnownNotImmediate):
23953
239542008-11-13  Cameron Zwarich  <zwarich@apple.com>
23955
23956        Reviewed by Maciej Stachowiak.
23957
23958        Bug 21943: Avoid needless reads of temporary values in CTI code
23959        <https://bugs.webkit.org/show_bug.cgi?id=21943>
23960
23961        If an opcode needs to load a virtual register and a previous opcode left
23962        the contents of that virtual register in a machine register, use the
23963        value in the machine register rather than getting it from memory.
23964
23965        In order to perform this optimization, it is necessary to know the
23966        jump tagets in the CodeBlock. For temporaries, the only problematic
23967        jump targets are binary logical operators and the ternary conditional
23968        operator. However, if this optimization were to be extended to local 
23969        variable registers as well, other jump targets would need to be
23970        included, like switch statement cases and the beginnings of catch
23971        blocks.
23972
23973        This optimization also requires that the fast case and the slow case
23974        of an opcode use emitPutResult() on the same register, which was chosen
23975        to be eax, as that is the register into which we read the first operand
23976        of opcodes. In order to make this the case, we needed to add some mov
23977        instructions to the slow cases of some instructions.
23978
23979        This optimizaton is not applied whenever compileBinaryArithOp() is used
23980        to compile an opcode, because different machine registers may be used to
23981        store the final result. It seems possible to rewrite the code generation
23982        in compileBinaryArithOp() to allow for this optimization.
23983
23984        This optimization is also not applied when generating slow cases,
23985        because some fast cases overwrite the value of eax before jumping to the
23986        slow case. In the future, it may be possible to apply this optimization
23987        to slow cases as well, but it did not seem to be a speedup when testing
23988        an early version of this patch.
23989
23990        This is a 1.0% speedup on SunSpider and a 6.3% speedup on the V8
23991        benchmark suite.
23992
23993        * VM/CTI.cpp:
23994        (JSC::CTI::killLastResultRegister):
23995        (JSC::CTI::emitGetArg):
23996        (JSC::CTI::emitGetPutArg):
23997        (JSC::CTI::emitGetCTIParam):
23998        (JSC::CTI::emitGetFromCallFrameHeader):
23999        (JSC::CTI::emitPutResult):
24000        (JSC::CTI::emitCTICall):
24001        (JSC::CTI::CTI):
24002        (JSC::CTI::compileOpCall):
24003        (JSC::CTI::compileOpStrictEq):
24004        (JSC::CTI::emitSlowScriptCheck):
24005        (JSC::CTI::compileBinaryArithOp):
24006        (JSC::CTI::privateCompileMainPass):
24007        (JSC::CTI::privateCompileSlowCases):
24008        (JSC::CTI::privateCompileGetByIdProto):
24009        (JSC::CTI::privateCompilePatchGetArrayLength):
24010        * VM/CTI.h:
24011        * VM/CodeBlock.h:
24012        (JSC::CodeBlock::isTemporaryRegisterIndex):
24013        * bytecompiler/CodeGenerator.cpp:
24014        (JSC::CodeGenerator::emitLabel):
24015
240162008-11-12  Alp Toker  <alp@nuanti.com>
24017
24018        autotools build system fix-up only. Add FloatQuad.h to the source
24019        lists and sort them.
24020
24021        * GNUmakefile.am:
24022
240232008-11-12  Geoffrey Garen  <ggaren@apple.com>
24024
24025        Reviewed by Sam Weinig.
24026        
24027        Fixed https://bugs.webkit.org/show_bug.cgi?id=22192
24028        +37 failures in fast/profiler
24029        
24030        along with Darin's review comments in
24031        https://bugs.webkit.org/show_bug.cgi?id=22174
24032        Simplified op_call by nixing its responsibility for moving the value of
24033        "this" into the first argument slot
24034
24035        * VM/Machine.cpp:
24036        (JSC::returnToThrowTrampoline):
24037        (JSC::throwStackOverflowError):
24038        (JSC::Machine::cti_register_file_check):
24039        (JSC::Machine::cti_op_call_arityCheck):
24040        (JSC::Machine::cti_vm_throw): Moved the throw logic into a function, since
24041        functions are better than macros.
24042
24043        * bytecompiler/CodeGenerator.cpp:
24044        (JSC::CodeGenerator::emitCall):
24045        (JSC::CodeGenerator::emitConstruct): Ensure that the function register
24046        is preserved if profiling is enabled, since the profiler uses that
24047        register.
24048
24049        * runtime/JSGlobalData.h: Renamed throwReturnAddress to exceptionLocation,
24050        because I had a hard time understanding what "throwReturnAddress" meant.
24051
240522008-11-12  Geoffrey Garen  <ggaren@apple.com>
24053
24054        Reviewed by Sam Weinig.
24055
24056        Roll in r38322, now that test failures have been fixed.
24057
24058        * VM/CTI.cpp:
24059        (JSC::CTI::compileOpCallSetupArgs):
24060        (JSC::CTI::compileOpCallEvalSetupArgs):
24061        (JSC::CTI::compileOpConstructSetupArgs):
24062        (JSC::CTI::compileOpCall):
24063        (JSC::CTI::privateCompileMainPass):
24064        (JSC::CTI::privateCompileSlowCases):
24065        * VM/CTI.h:
24066        * VM/CodeBlock.cpp:
24067        (JSC::CodeBlock::dump):
24068        * VM/Machine.cpp:
24069        (JSC::Machine::callEval):
24070        (JSC::Machine::dumpCallFrame):
24071        (JSC::Machine::dumpRegisters):
24072        (JSC::Machine::execute):
24073        (JSC::Machine::privateExecute):
24074        (JSC::Machine::cti_register_file_check):
24075        (JSC::Machine::cti_op_call_arityCheck):
24076        (JSC::Machine::cti_op_call_NotJSFunction):
24077        (JSC::Machine::cti_op_construct_JSConstruct):
24078        (JSC::Machine::cti_op_construct_NotJSConstruct):
24079        (JSC::Machine::cti_op_call_eval):
24080        (JSC::Machine::cti_vm_throw):
24081        * VM/Machine.h:
24082        * bytecompiler/CodeGenerator.cpp:
24083        (JSC::CodeGenerator::emitCall):
24084        (JSC::CodeGenerator::emitCallEval):
24085        (JSC::CodeGenerator::emitConstruct):
24086        * bytecompiler/CodeGenerator.h:
24087        * parser/Nodes.cpp:
24088        (JSC::EvalFunctionCallNode::emitCode):
24089        (JSC::FunctionCallValueNode::emitCode):
24090        (JSC::FunctionCallResolveNode::emitCode):
24091        (JSC::FunctionCallBracketNode::emitCode):
24092        (JSC::FunctionCallDotNode::emitCode):
24093        * parser/Nodes.h:
24094        (JSC::ScopeNode::neededConstants):
24095
240962008-11-12  Gavin Barraclough  <barraclough@apple.com>
24097
24098        Reviewed by Cameron Zwarich.
24099
24100        Fix for https://bugs.webkit.org/show_bug.cgi?id=22201
24101        Integer conversion in array.length was safe signed values,
24102        but the length is unsigned.
24103
24104        * VM/CTI.cpp:
24105        (JSC::CTI::privateCompilePatchGetArrayLength):
24106
241072008-11-12  Cameron Zwarich  <zwarich@apple.com>
24108
24109        Rubber-stamped by Mark Rowe.
24110
24111        Roll out r38322 due to test failures on the bots.
24112
24113        * VM/CTI.cpp:
24114        (JSC::CTI::compileOpCallSetupArgs):
24115        (JSC::CTI::compileOpCall):
24116        (JSC::CTI::privateCompileMainPass):
24117        (JSC::CTI::privateCompileSlowCases):
24118        * VM/CTI.h:
24119        * VM/CodeBlock.cpp:
24120        (JSC::CodeBlock::dump):
24121        * VM/Machine.cpp:
24122        (JSC::Machine::callEval):
24123        (JSC::Machine::dumpCallFrame):
24124        (JSC::Machine::dumpRegisters):
24125        (JSC::Machine::execute):
24126        (JSC::Machine::privateExecute):
24127        (JSC::Machine::throwStackOverflowPreviousFrame):
24128        (JSC::Machine::cti_register_file_check):
24129        (JSC::Machine::cti_op_call_arityCheck):
24130        (JSC::Machine::cti_op_call_NotJSFunction):
24131        (JSC::Machine::cti_op_construct_JSConstruct):
24132        (JSC::Machine::cti_op_construct_NotJSConstruct):
24133        (JSC::Machine::cti_op_call_eval):
24134        (JSC::Machine::cti_vm_throw):
24135        * VM/Machine.h:
24136        * bytecompiler/CodeGenerator.cpp:
24137        (JSC::CodeGenerator::emitCall):
24138        (JSC::CodeGenerator::emitCallEval):
24139        (JSC::CodeGenerator::emitConstruct):
24140        * bytecompiler/CodeGenerator.h:
24141        * parser/Nodes.cpp:
24142        (JSC::EvalFunctionCallNode::emitCode):
24143        (JSC::FunctionCallValueNode::emitCode):
24144        (JSC::FunctionCallResolveNode::emitCode):
24145        (JSC::FunctionCallBracketNode::emitCode):
24146        (JSC::FunctionCallDotNode::emitCode):
24147        * parser/Nodes.h:
24148        (JSC::ScopeNode::neededConstants):
24149
241502008-11-11  Geoffrey Garen  <ggaren@apple.com>
24151
24152        Reviewed by Darin Adler.
24153        
24154        Fixed https://bugs.webkit.org/show_bug.cgi?id=22174
24155        Simplified op_call by nixing its responsibility for moving the value of
24156        "this" into the first argument slot.
24157
24158        Instead, the caller emits an explicit load or mov instruction, or relies
24159        on implicit knowledge that "this" is already in the first argument slot.
24160        As a result, two operands to op_call are gone: firstArg and thisVal.
24161        
24162        SunSpider and v8 tests show no change in bytecode or CTI.
24163
24164        * VM/CTI.cpp:
24165        (JSC::CTI::compileOpCallSetupArgs):
24166        (JSC::CTI::compileOpCallEvalSetupArgs):
24167        (JSC::CTI::compileOpConstructSetupArgs): Split apart these three versions
24168        of setting up arguments to op_call, because they're more different than
24169        they are the same -- even more so with this patch.
24170
24171        (JSC::CTI::compileOpCall): Updated for the fact that op_construct doesn't
24172        match op_call anymore.
24173
24174        (JSC::CTI::privateCompileMainPass):
24175        (JSC::CTI::privateCompileSlowCases): Merged a few call cases. Updated
24176        for changes mentioned above.
24177
24178        * VM/CTI.h:
24179
24180        * VM/CodeBlock.cpp:
24181        (JSC::CodeBlock::dump): Updated for new bytecode format of call / construct.
24182
24183        * VM/Machine.cpp:
24184        (JSC::Machine::callEval): Updated for new bytecode format of call / construct.
24185
24186        (JSC::Machine::dumpCallFrame):
24187        (JSC::Machine::dumpRegisters): Simplified these debugging functions, 
24188        taking advantage of the new call frame layout.
24189
24190        (JSC::Machine::execute): Fixed up the eval version of execute to be
24191        friendlier to calls in the new format.
24192
24193        (JSC::Machine::privateExecute): Implemented the new call format in
24194        bytecode.
24195
24196        (JSC::Machine::cti_op_call_NotJSFunction):
24197        (JSC::Machine::cti_op_construct_JSConstruct):
24198        (JSC::Machine::cti_op_construct_NotJSConstruct):
24199        (JSC::Machine::cti_op_call_eval): Updated CTI helpers to match the new
24200        call format.
24201        
24202        Fixed a latent bug in stack overflow checking that is now hit because
24203        the register layout has changed a bit -- namely: when throwing a stack
24204        overflow exception inside an op_call helper, we need to account for the
24205        fact that the current call frame is only half-constructed, and use the
24206        parent call frame instead.
24207
24208        * VM/Machine.h:
24209
24210        * bytecompiler/CodeGenerator.cpp:
24211        (JSC::CodeGenerator::emitCall):
24212        (JSC::CodeGenerator::emitCallEval):
24213        (JSC::CodeGenerator::emitConstruct):
24214        * bytecompiler/CodeGenerator.h: Updated codegen to match the new call
24215        format.
24216
24217        * parser/Nodes.cpp:
24218        (JSC::EvalFunctionCallNode::emitCode):
24219        (JSC::FunctionCallValueNode::emitCode):
24220        (JSC::FunctionCallResolveNode::emitCode):
24221        (JSC::FunctionCallBracketNode::emitCode):
24222        (JSC::FunctionCallDotNode::emitCode):
24223        * parser/Nodes.h:
24224        (JSC::ScopeNode::neededConstants): ditto
24225
242262008-11-11  Cameron Zwarich  <zwarich@apple.com>
24227
24228        Reviewed by Geoff Garen.
24229
24230        Remove an unused forwarding header for a file that no longer exists.
24231
24232        * ForwardingHeaders/JavaScriptCore/JSLock.h: Removed.
24233
242342008-11-11  Mark Rowe  <mrowe@apple.com>
24235
24236        Fix broken dependencies building JavaScriptCore on a freezing cold cat, caused
24237        by failure to update all instances of "kjs" to their new locations.
24238
24239        * JavaScriptCore.xcodeproj/project.pbxproj:
24240
242412008-11-11  Alexey Proskuryakov  <ap@webkit.org>
24242
24243        Rubber-stamped by Adam Roben.
24244
24245        * wtf/AVLTree.h: (WTF::AVLTree::Iterator::start_iter):
24246        Fix indentation a little more.
24247
242482008-11-11  Cameron Zwarich  <zwarich@apple.com>
24249
24250        Rubber-stamped by Sam Weinig.
24251
24252        Clean up EvalCodeCache to match our coding style a bit more.
24253
24254        * VM/EvalCodeCache.h:
24255        (JSC::EvalCodeCache::get):
24256
242572008-11-11  Cameron Zwarich  <zwarich@apple.com>
24258
24259        Rubber-stamped by Sam Weinig.
24260
24261        Bug 22179: Move EvalCodeCache from CodeBlock.h into its own file
24262        <https://bugs.webkit.org/show_bug.cgi?id=22179>
24263
24264        * GNUmakefile.am:
24265        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
24266        * JavaScriptCore.xcodeproj/project.pbxproj:
24267        * VM/CodeBlock.h:
24268        * VM/EvalCodeCache.h: Copied from VM/CodeBlock.h.
24269        * VM/Machine.cpp:
24270
242712008-11-11  Cameron Zwarich  <zwarich@apple.com>
24272
24273        Reviewed by Sam Weinig.
24274
24275        Remove the 'm_' prefix from the fields of the SwitchRecord struct.
24276
24277        * VM/CTI.cpp:
24278        (JSC::CTI::privateCompile):
24279        * VM/CTI.h:
24280        (JSC::SwitchRecord):
24281        (JSC::SwitchRecord::SwitchRecord):
24282
242832008-11-11  Cameron Zwarich  <zwarich@apple.com>
24284
24285        Rubber-stamped by Sam Weinig.
24286
24287        Make asInteger() a static function so that it has internal linkage.
24288
24289        * VM/CTI.cpp:
24290        (JSC::asInteger):
24291
242922008-11-11  Maciej Stachowiak  <mjs@apple.com>
24293
24294        Reviewed by Mark Rowe.
24295        
24296        - shrink CodeBlock and AST related Vectors to exact fit (5-10M savings on membuster test)
24297        
24298        No perf regression combined with the last patch (each seems like a small regression individually)
24299
24300        * bytecompiler/CodeGenerator.cpp:
24301        (JSC::CodeGenerator::generate):
24302        * parser/Nodes.h:
24303        (JSC::SourceElements::releaseContentsIntoVector):
24304        * wtf/Vector.h:
24305        (WTF::Vector::shrinkToFit):
24306
243072008-11-11  Maciej Stachowiak  <mjs@apple.com>
24308
24309        Reviewed by Mark Rowe.
24310        
24311        - remove inline capacity from declaration stacks (15M savings on membuster test)
24312
24313        No perf regression on SunSpider or V8 test combined with other upcoming memory improvement patch.
24314        
24315        * JavaScriptCore.exp:
24316        * parser/Nodes.h:
24317
243182008-11-11  Cameron Zwarich  <zwarich@apple.com>
24319
24320        Reviewed by Oliver Hunt.
24321
24322        While r38286 removed the need for the m_callFrame member variable of
24323        CTI, it should be also be removed.
24324
24325        * VM/CTI.h:
24326
243272008-11-10  Cameron Zwarich  <zwarich@apple.com>
24328
24329        Reviewed by Oliver Hunt.
24330
24331        Make CTI::asInteger() a non-member function, since it needs no access to
24332        any of CTI's member variables.
24333
24334        * VM/CTI.cpp:
24335        (JSC::asInteger):
24336        * VM/CTI.h:
24337
243382008-11-10  Cameron Zwarich  <zwarich@apple.com>
24339
24340        Reviewed by Maciej Stachowiak.
24341
24342        Use 'value' instead of 'js' in CTI as a name for JSValue* to match our
24343        usual convention elsewhere.
24344
24345        * VM/CTI.cpp:
24346        (JSC::CTI::emitGetArg):
24347        (JSC::CTI::emitGetPutArg):
24348        (JSC::CTI::getConstantImmediateNumericArg):
24349        (JSC::CTI::printOpcodeOperandTypes):
24350
243512008-11-10  Cameron Zwarich  <zwarich@apple.com>
24352
24353        Reviewed by Maciej Stachowiak.
24354
24355        Make CTI::getConstant() a member function of CodeBlock instead.
24356
24357        * VM/CTI.cpp:
24358        (JSC::CTI::emitGetArg):
24359        (JSC::CTI::emitGetPutArg):
24360        (JSC::CTI::getConstantImmediateNumericArg):
24361        (JSC::CTI::printOpcodeOperandTypes):
24362        (JSC::CTI::privateCompileMainPass):
24363        * VM/CTI.h:
24364        * VM/CodeBlock.h:
24365        (JSC::CodeBlock::getConstant):
24366
243672008-11-10  Cameron Zwarich  <zwarich@apple.com>
24368
24369        Reviewed by Sam Weinig.
24370
24371        Rename CodeBlock::isConstant() to isConstantRegisterIndex().
24372
24373        * VM/CTI.cpp:
24374        (JSC::CTI::emitGetArg):
24375        (JSC::CTI::emitGetPutArg):
24376        (JSC::CTI::getConstantImmediateNumericArg):
24377        (JSC::CTI::printOpcodeOperandTypes):
24378        (JSC::CTI::privateCompileMainPass):
24379        * VM/CodeBlock.h:
24380        (JSC::CodeBlock::isConstantRegisterIndex):
24381        * bytecompiler/CodeGenerator.cpp:
24382        (JSC::CodeGenerator::emitEqualityOp):
24383
243842008-11-10  Gavin Barraclough  <barraclough@apple.com>
24385
24386        Build fix for non-CTI builds.
24387
24388        * VM/Machine.cpp:
24389        (JSC::Machine::initialize):
24390
243912008-11-10  Cameron Zwarich  <zwarich@apple.com>
24392
24393        Reviewed by Sam Weinig.
24394
24395        Remove the unused labels member variable of CodeBlock.
24396
24397        * VM/CodeBlock.h:
24398        * VM/LabelID.h:
24399        (JSC::LabelID::setLocation):
24400
244012008-11-10  Gavin Barraclough  <barraclough@apple.com>
24402
24403        Reviewed by Cameron Zwarich.
24404
24405        Batch compile the set of static trampolines at the point Machine is constructed, using a single allocation.
24406        Refactor out m_callFrame from CTI, since this is only needed to access the global data (instead store a
24407        pointer to the global data directly, since this is available at the point the Machine is constructed).
24408        Add a method to align the code buffer, to allow JIT generation for multiple trampolines in one block.
24409
24410        * VM/CTI.cpp:
24411        (JSC::CTI::getConstant):
24412        (JSC::CTI::emitGetArg):
24413        (JSC::CTI::emitGetPutArg):
24414        (JSC::CTI::getConstantImmediateNumericArg):
24415        (JSC::CTI::printOpcodeOperandTypes):
24416        (JSC::CTI::CTI):
24417        (JSC::CTI::compileBinaryArithOp):
24418        (JSC::CTI::privateCompileMainPass):
24419        (JSC::CTI::privateCompileGetByIdProto):
24420        (JSC::CTI::privateCompileGetByIdChain):
24421        (JSC::CTI::privateCompileCTIMachineTrampolines):
24422        (JSC::CTI::freeCTIMachineTrampolines):
24423        * VM/CTI.h:
24424        (JSC::CTI::compile):
24425        (JSC::CTI::compileGetByIdSelf):
24426        (JSC::CTI::compileGetByIdProto):
24427        (JSC::CTI::compileGetByIdChain):
24428        (JSC::CTI::compilePutByIdReplace):
24429        (JSC::CTI::compilePutByIdTransition):
24430        (JSC::CTI::compileCTIMachineTrampolines):
24431        (JSC::CTI::compilePatchGetArrayLength):
24432        * VM/Machine.cpp:
24433        (JSC::Machine::initialize):
24434        (JSC::Machine::~Machine):
24435        (JSC::Machine::execute):
24436        (JSC::Machine::tryCTICachePutByID):
24437        (JSC::Machine::tryCTICacheGetByID):
24438        (JSC::Machine::cti_op_call_JSFunction):
24439        (JSC::Machine::cti_vm_lazyLinkCall):
24440        * VM/Machine.h:
24441        * masm/X86Assembler.h:
24442        (JSC::JITCodeBuffer::isAligned):
24443        (JSC::X86Assembler::):
24444        (JSC::X86Assembler::align):
24445        * runtime/JSGlobalData.cpp:
24446        (JSC::JSGlobalData::JSGlobalData):
24447
244482008-11-10  Maciej Stachowiak  <mjs@apple.com>
24449
24450        Reviewed by Antti Koivisto.
24451        
24452        - Make Vector::clear() release the Vector's memory (1MB savings on membuster)
24453        https://bugs.webkit.org/show_bug.cgi?id=22170
24454
24455        * wtf/Vector.h:
24456        (WTF::VectorBufferBase::deallocateBuffer): Set capacity to 0 as
24457        well as size, otherwise shrinking capacity to 0 can fail to reset
24458        the capacity and thus cause a future crash.
24459        (WTF::Vector::~Vector): Shrink size not capacity; we only need
24460        to call destructors, the buffer will be freed anyway.
24461        (WTF::Vector::clear): Change this to shrinkCapacity(0), not just shrink(0).
24462        (WTF::::shrinkCapacity): Use shrink() instead of resize() for case where
24463        the size is greater than the new capacity, to work with types that have no
24464        default constructor.
24465
244662008-11-10  Cameron Zwarich  <zwarich@apple.com>
24467
24468        Reviewed by Maciej Stachowiak.
24469
24470        Split multiple definitions into separate lines.
24471
24472        * VM/CTI.cpp:
24473        (JSC::CTI::compileBinaryArithOp):
24474
244752008-11-10  Cameron Zwarich  <zwarich@apple.com>
24476
24477        Reviewed by Geoff Garen.
24478
24479        Bug 22162: Remove cachedValueGetter from the JavaScriptCore API implementation
24480        <https://bugs.webkit.org/show_bug.cgi?id=22162>
24481
24482        There is no more need for the cachedValueGetter hack now that we have
24483        PropertySlot::setValue(), so we should remove it.
24484
24485        * API/JSCallbackObject.h:
24486        * API/JSCallbackObjectFunctions.h:
24487        (JSC::::getOwnPropertySlot):
24488
244892008-11-10  Cameron Zwarich  <zwarich@apple.com>
24490
24491        Reviewed by Darin Adler.
24492
24493        Bug 22152: Remove asObject() call from JSCallbackObject::getOwnPropertySlot()
24494        <https://bugs.webkit.org/show_bug.cgi?id=22152>
24495
24496        With the recent change to adopt asType() style cast functions with
24497        assertions instead of static_casts in many places, the assertion for
24498        the asObject() call in JSCallbackObject::getOwnPropertySlot() has been
24499        failing when using any nontrivial client of the JavaScriptCore API.
24500        The cast isn't even necessary to call slot.setCustom(), so it should
24501        be removed.
24502
24503        * API/JSCallbackObjectFunctions.h:
24504        (JSC::JSCallbackObject::getOwnPropertySlot):
24505
245062008-11-10  Alexey Proskuryakov  <ap@webkit.org>
24507
24508        Reviewed by Adam Roben.
24509
24510        A few coding style fixes for AVLTree.
24511
24512        * wtf/AVLTree.h: Moved to WTF namespace, Removed "KJS_" from include guards.
24513        (WTF::AVLTree::Iterator::start_iter): Fixed indentation
24514
24515        * runtime/JSArray.cpp: Added "using namepace WTF".
24516
245172008-11-09  Cameron Zwarich  <zwarich@apple.com>
24518
24519        Not reviewed.
24520
24521        Speculatively fix the non-AllInOne build.
24522
24523        * runtime/NativeErrorConstructor.cpp:
24524
245252008-11-09  Darin Adler  <darin@apple.com>
24526
24527        Reviewed by Tim Hatcher.
24528
24529        - https://bugs.webkit.org/show_bug.cgi?id=22149
24530          remove unused code from the parser
24531
24532        * AllInOneFile.cpp: Removed nodes2string.cpp.
24533        * GNUmakefile.am: Ditto.
24534        * JavaScriptCore.exp: Ditto.
24535        * JavaScriptCore.pri: Ditto.
24536        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
24537        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
24538        * JavaScriptCoreSources.bkl: Ditto.
24539
24540        * VM/CodeBlock.h: Added include.
24541
24542        * VM/Machine.cpp: (JSC::Machine::execute): Use the types from
24543        DeclarationStacks as DeclarationStacks:: rather than Node:: since
24544        "Node" really has little to do with it.
24545        * bytecompiler/CodeGenerator.cpp:
24546        (JSC::CodeGenerator::CodeGenerator): Ditto.
24547
24548        * jsc.cpp:
24549        (Options::Options): Removed prettyPrint option.
24550        (runWithScripts): Ditto.
24551        (printUsageStatement): Ditto.
24552        (parseArguments): Ditto.
24553        (jscmain): Ditto.
24554
24555        * parser/Grammar.y: Removed use of obsolete ImmediateNumberNode.
24556
24557        * parser/Nodes.cpp:
24558        (JSC::ThrowableExpressionData::emitThrowError): Use inline functions
24559        instead of direct member access for ThrowableExpressionData values.
24560        (JSC::BracketAccessorNode::emitCode): Ditto.
24561        (JSC::DotAccessorNode::emitCode): Ditto.
24562        (JSC::NewExprNode::emitCode): Ditto.
24563        (JSC::EvalFunctionCallNode::emitCode): Ditto.
24564        (JSC::FunctionCallValueNode::emitCode): Ditto.
24565        (JSC::FunctionCallResolveNode::emitCode): Ditto.
24566        (JSC::FunctionCallBracketNode::emitCode): Ditto.
24567        (JSC::FunctionCallDotNode::emitCode): Ditto.
24568        (JSC::PostfixResolveNode::emitCode): Ditto.
24569        (JSC::PostfixBracketNode::emitCode): Ditto.
24570        (JSC::PostfixDotNode::emitCode): Ditto.
24571        (JSC::DeleteResolveNode::emitCode): Ditto.
24572        (JSC::DeleteBracketNode::emitCode): Ditto.
24573        (JSC::DeleteDotNode::emitCode): Ditto.
24574        (JSC::PrefixResolveNode::emitCode): Ditto.
24575        (JSC::PrefixBracketNode::emitCode): Ditto.
24576        (JSC::PrefixDotNode::emitCode): Ditto.
24577        (JSC::ThrowableBinaryOpNode::emitCode): Ditto.
24578        (JSC::InstanceOfNode::emitCode): Ditto.
24579        (JSC::ReadModifyResolveNode::emitCode): Ditto.
24580        (JSC::AssignResolveNode::emitCode): Ditto.
24581        (JSC::AssignDotNode::emitCode): Ditto.
24582        (JSC::ReadModifyDotNode::emitCode): Ditto.
24583        (JSC::AssignBracketNode::emitCode): Ditto.
24584        (JSC::ReadModifyBracketNode::emitCode): Ditto.
24585        (JSC::statementListEmitCode): Take a const StatementVector instead
24586        of a non-const one. Also removed unused statementListPushFIFO.
24587        (JSC::ForInNode::emitCode): Inline functions instead of member access.
24588        (JSC::ThrowNode::emitCode): Ditto.
24589        (JSC::EvalNode::emitCode): Ditto.
24590        (JSC::FunctionBodyNode::emitCode): Ditto.
24591        (JSC::ProgramNode::emitCode): Ditto.
24592
24593        * parser/Nodes.h: Removed unused includes and forward declarations.
24594        Removed Precedence enum. Made many more members private instead of
24595        protected or public. Removed unused NodeStack typedef. Moved the
24596        VarStack and FunctionStack typedefs from Node to ScopeNode. Made
24597        Node::emitCode pure virtual and changed classes that don't emit
24598        any code to inherit from ParserRefCounted rather than Node.
24599        Moved isReturnNode from Node to StatementNode. Removed the
24600        streamTo, precedence, and needsParensIfLeftmost functions from
24601        all classes. Removed the ImmediateNumberNode class and make
24602        NumberNode::setValue nonvirtual.
24603
24604        * parser/nodes2string.cpp: Removed.
24605
246062008-11-09  Darin Adler  <darin@apple.com>
24607
24608        Reviewed by Sam Weinig and Maciej Stachowiak.
24609        Includes some work done by Chris Brichford.
24610
24611        - fix https://bugs.webkit.org/show_bug.cgi?id=14886
24612          Stack overflow due to deeply nested parse tree doing repeated string concatentation
24613
24614        Test: fast/js/large-expressions.html
24615
24616        1) Code generation is recursive, so takes stack proportional to the complexity
24617           of the source code expression. Fixed by setting an arbitrary recursion limit
24618           of 10,000 nodes.
24619
24620        2) Destruction of the syntax tree was recursive. Fixed by introducing a
24621           non-recursive mechanism for destroying the tree.
24622
24623        * bytecompiler/CodeGenerator.cpp:
24624        (JSC::CodeGenerator::CodeGenerator): Initialize depth to 0.
24625        (JSC::CodeGenerator::emitThrowExpressionTooDeepException): Added. Emits the code
24626        to throw a "too deep" exception.
24627        * bytecompiler/CodeGenerator.h:
24628        (JSC::CodeGenerator::emitNode): Check depth and emit an exception if we exceed
24629        the maximum depth.
24630
24631        * parser/Nodes.cpp:
24632        (JSC::NodeReleaser::releaseAllNodes): Added. To be called inside node destructors
24633        to avoid recursive calls to destructors for nodes inside this one.
24634        (JSC::NodeReleaser::release): Added. To be called inside releaseNodes functions.
24635        Also added releaseNodes functions and calls to releaseAllNodes inside destructors
24636        for each class derived from Node that has RefPtr to other nodes.
24637        (JSC::NodeReleaser::adopt): Added. Used by the release function.
24638        (JSC::NodeReleaser::adoptFunctionBodyNode): Added.
24639
24640        * parser/Nodes.h: Added declarations of releaseNodes and destructors in all classes
24641        that needed it. Eliminated use of ListRefPtr and releaseNext, which are the two parts
24642        of an older solution to the non-recursive destruction problem that works only for
24643        lists, whereas the new solution works for other graphs. Changed ReverseBinaryOpNode
24644        to use BinaryOpNode as a base class to avoid some duplicated code.
24645
246462008-11-08  Kevin Ollivier  <kevino@theolliviers.com>
24647        
24648        wx build fixes after addition of JSCore parser and bycompiler dirs. Also cleanup
24649        the JSCore Bakefile's group names to be consistent.
24650
24651        * JavaScriptCoreSources.bkl:
24652        * jscore.bkl:
24653
246542008-11-07  Cameron Zwarich  <zwarich@apple.com>
24655
24656        Reviewed by Geoff Garen.
24657
24658        Bug 21801: REGRESSION (r37821): YUI date formatting JavaScript puts the letter 'd' in place of the day
24659        <https://bugs.webkit.org/show_bug.cgi?id=21801>
24660
24661        Fix the constant register check in the 'typeof' optimization in
24662        CodeGenerator, which was completely broken after r37821.
24663
24664        * bytecompiler/CodeGenerator.cpp:
24665        (JSC::CodeGenerator::emitEqualityOp):
24666
246672008-11-07  Cameron Zwarich  <zwarich@apple.com>
24668
24669        Reviewed by Geoff Garen.
24670
24671        Bug 22129: Move CTI::isConstant() to CodeBlock
24672        <https://bugs.webkit.org/show_bug.cgi?id=22129>
24673
24674        * VM/CTI.cpp:
24675        (JSC::CTI::emitGetArg):
24676        (JSC::CTI::emitGetPutArg):
24677        (JSC::CTI::getConstantImmediateNumericArg):
24678        (JSC::CTI::printOpcodeOperandTypes):
24679        (JSC::CTI::privateCompileMainPass):
24680        * VM/CTI.h:
24681        * VM/CodeBlock.h:
24682        (JSC::CodeBlock::isConstant):
24683
246842008-11-07  Alp Toker  <alp@nuanti.com>
24685
24686        autotools fix. Always use the configured perl binary (which may be
24687        different to the one in $PATH) when generating sources.
24688
24689        * GNUmakefile.am:
24690
246912008-11-07  Cameron Zwarich  <zwarich@apple.com>
24692
24693        Not reviewed.
24694
24695        Change grammar.cpp to Grammar.cpp and grammar.h to Grammar.h in several
24696        build scripts.
24697
24698        * DerivedSources.make:
24699        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
24700        * JavaScriptCoreSources.bkl:
24701
247022008-11-07  Alp Toker  <alp@nuanti.com>
24703
24704        More grammar.cpp -> Grammar.cpp build fixes.
24705
24706        * AllInOneFile.cpp:
24707        * GNUmakefile.am:
24708
247092008-11-07  Simon Hausmann  <hausmann@webkit.org>
24710
24711        Fix the build on case-sensitive file systems. grammar.y was renamed to
24712        Grammar.y but Lexer.cpp includes grammar.h. The build bots didn't
24713        notice this change because of stale files.
24714
24715        * parser/Lexer.cpp:
24716
247172008-11-07  Cameron Zwarich  <zwarich@apple.com>
24718
24719        Reviewed by Alexey Proskuryakov.
24720
24721        Rename the m_nextGlobal, m_nextParameter, and m_nextConstant member
24722        variables of CodeGenerator to m_nextGlobalIndex, m_nextParameterIndex,
24723        and m_nextConstantIndex respectively. This is to distinguish these from
24724        member variables like m_lastConstant, which are actually RefPtrs to
24725        Registers.
24726
24727        * bytecompiler/CodeGenerator.cpp:
24728        (JSC::CodeGenerator::addGlobalVar):
24729        (JSC::CodeGenerator::allocateConstants):
24730        (JSC::CodeGenerator::CodeGenerator):
24731        (JSC::CodeGenerator::addParameter):
24732        (JSC::CodeGenerator::addConstant):
24733        * bytecompiler/CodeGenerator.h:
24734
247352008-11-06  Gavin Barraclough  barraclough@apple.com
24736
24737        Reviewed by Oliver Hunt.
24738
24739        Do not make a cti_* call to perform an op_call unless either:
24740        (1) The codeblock for the function body has not been generated.
24741        (2) The number of arguments passed does not match the callee arity.
24742
24743        ~1% progression on sunspider --v8
24744
24745        * VM/CTI.cpp:
24746        (JSC::CTI::compileOpCallInitializeCallFrame):
24747        (JSC::CTI::compileOpCall):
24748        (JSC::CTI::privateCompileSlowCases):
24749        * VM/CTI.h:
24750        * VM/Machine.cpp:
24751        (JSC::Machine::cti_op_call_JSFunction):
24752        (JSC::Machine::cti_op_call_arityCheck):
24753        (JSC::Machine::cti_op_construct_JSConstruct):
24754        * VM/Machine.h:
24755        * kjs/nodes.h:
24756
247572008-11-06  Cameron Zwarich  <zwarich@apple.com>
24758
24759        Reviewed by Geoff Garen.
24760
24761        Move the remaining files in the kjs subdirectory of JavaScriptCore to
24762        a new parser subdirectory, and remove the kjs subdirectory entirely.
24763
24764        * AllInOneFile.cpp:
24765        * DerivedSources.make:
24766        * GNUmakefile.am:
24767        * JavaScriptCore.pri:
24768        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
24769        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
24770        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
24771        * JavaScriptCore.xcodeproj/project.pbxproj:
24772        * JavaScriptCoreSources.bkl:
24773        * VM/CodeBlock.h:
24774        * VM/ExceptionHelpers.cpp:
24775        * VM/SamplingTool.h:
24776        * bytecompiler/CodeGenerator.h:
24777        * jsc.pro:
24778        * jscore.bkl:
24779        * kjs: Removed.
24780        * kjs/NodeInfo.h: Removed.
24781        * kjs/Parser.cpp: Removed.
24782        * kjs/Parser.h: Removed.
24783        * kjs/ResultType.h: Removed.
24784        * kjs/SourceCode.h: Removed.
24785        * kjs/SourceProvider.h: Removed.
24786        * kjs/grammar.y: Removed.
24787        * kjs/keywords.table: Removed.
24788        * kjs/lexer.cpp: Removed.
24789        * kjs/lexer.h: Removed.
24790        * kjs/nodes.cpp: Removed.
24791        * kjs/nodes.h: Removed.
24792        * kjs/nodes2string.cpp: Removed.
24793        * parser: Added.
24794        * parser/Grammar.y: Copied from kjs/grammar.y.
24795        * parser/Keywords.table: Copied from kjs/keywords.table.
24796        * parser/Lexer.cpp: Copied from kjs/lexer.cpp.
24797        * parser/Lexer.h: Copied from kjs/lexer.h.
24798        * parser/NodeInfo.h: Copied from kjs/NodeInfo.h.
24799        * parser/Nodes.cpp: Copied from kjs/nodes.cpp.
24800        * parser/Nodes.h: Copied from kjs/nodes.h.
24801        * parser/Parser.cpp: Copied from kjs/Parser.cpp.
24802        * parser/Parser.h: Copied from kjs/Parser.h.
24803        * parser/ResultType.h: Copied from kjs/ResultType.h.
24804        * parser/SourceCode.h: Copied from kjs/SourceCode.h.
24805        * parser/SourceProvider.h: Copied from kjs/SourceProvider.h.
24806        * parser/nodes2string.cpp: Copied from kjs/nodes2string.cpp.
24807        * pcre/pcre.pri:
24808        * pcre/pcre_exec.cpp:
24809        * runtime/FunctionConstructor.cpp:
24810        * runtime/JSActivation.h:
24811        * runtime/JSFunction.h:
24812        * runtime/JSGlobalData.cpp:
24813        * runtime/JSGlobalObjectFunctions.cpp:
24814        * runtime/JSObject.cpp:
24815        (JSC::JSObject::toNumber):
24816        * runtime/RegExp.cpp:
24817
248182008-11-06  Adam Roben  <aroben@apple.com>
24819
24820        Windows build fix after r38196
24821
24822        * JavaScriptCore.vcproj/jsc/jsc.vcproj: Added bytecompiler/ to the
24823        include path.
24824
248252008-11-06  Cameron Zwarich  <zwarich@apple.com>
24826
24827        Rubber-stamped by Sam Weinig.
24828
24829        Create a new bytecompiler subdirectory of JavaScriptCore and move some
24830        relevant files to it.
24831
24832        * AllInOneFile.cpp:
24833        * GNUmakefile.am:
24834        * JavaScriptCore.pri:
24835        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
24836        * JavaScriptCore.xcodeproj/project.pbxproj:
24837        * JavaScriptCoreSources.bkl:
24838        * VM/CodeGenerator.cpp: Removed.
24839        * VM/CodeGenerator.h: Removed.
24840        * bytecompiler: Added.
24841        * bytecompiler/CodeGenerator.cpp: Copied from VM/CodeGenerator.cpp.
24842        * bytecompiler/CodeGenerator.h: Copied from VM/CodeGenerator.h.
24843        * bytecompiler/LabelScope.h: Copied from kjs/LabelScope.h.
24844        * jscore.bkl:
24845        * kjs/LabelScope.h: Removed.
24846
248472008-11-06  Adam Roben  <aroben@apple.com>
24848
24849        Windows clean build fix after r38155
24850
24851        Rubberstamped by Cameron Zwarich.
24852
24853        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update
24854        the post-build event for the move of create_hash_table out of kjs/.
24855
248562008-11-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
24857
24858        Reviewed by Darin Adler.
24859
24860        https://bugs.webkit.org/show_bug.cgi?id=22107
24861
24862        Bug uncovered during RVCT port in functions not used. get_lt() and
24863        get_gt() takes only one argument - remove second argument where
24864        applicable.
24865
24866        * wtf/AVLTree.h:
24867        (JSC::AVLTree::remove): Remove second argument of get_lt/get_gt().
24868        (JSC::AVLTree::subst): Ditto.
24869
248702008-11-06  Alp Toker  <alp@nuanti.com>
24871
24872        Reviewed by Cameron Zwarich.
24873
24874        https://bugs.webkit.org/show_bug.cgi?id=22033
24875        [GTK] CTI/Linux r38064 crashes; JIT requires executable memory
24876
24877        Mark pages allocated by the FastMalloc mmap code path executable with
24878        PROT_EXEC. This fixes crashes seen on CPUs and kernels that enforce
24879        non-executable memory (like ExecShield on Fedora Linux) when the JIT
24880        is enabled.
24881
24882        This patch does not resolve the issue on debug builds so affected
24883        developers may still need to pass --disable-jit to configure.
24884
24885        * wtf/TCSystemAlloc.cpp:
24886        (TryMmap):
24887        (TryDevMem):
24888        (TCMalloc_SystemRelease):
24889
248902008-11-06  Peter Gal  <galpeter@inf.u-szeged.hu>
24891
24892        Reviewed by Cameron Zwarich.
24893
24894        Bug 22099: Make the Qt port build the JSC shell in the correct place
24895        <https://bugs.webkit.org/show_bug.cgi?id=22099>
24896
24897        Adjust include paths and build destination dir for the 'jsc' executable
24898        in the Qt build.
24899
24900        * jsc.pro:
24901
249022008-11-06  Kristian Amlie  <kristian.amlie@nokia.com>
24903
24904        Reviewed by Simon Hausmann.
24905
24906        Implemented the block allocation on Symbian through heap allocation.
24907
24908        Unfortunately there is no way to allocate virtual memory. The Posix
24909        layer provides mmap() but no anonymous mapping. So this is a very slow
24910        solution but it should work as a start.
24911
24912        * runtime/Collector.cpp:
24913        (JSC::allocateBlock):
24914        (JSC::freeBlock):
24915
249162008-11-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
24917
24918        Reviewed by Simon Hausmann.
24919
24920        Borrow some math functions from the MSVC port to the build with the
24921        RVCT compiler.
24922
24923        * wtf/MathExtras.h:
24924        (isinf):
24925        (isnan):
24926        (signbit):
24927
249282008-11-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
24929
24930        Reviewed by Simon Hausmann.
24931
24932        Include strings.h for strncasecmp().
24933        This is needed for compilation inside Symbian and it is also
24934        confirmed by the man-page on Linux.
24935
24936        * runtime/DateMath.cpp:
24937
249382008-11-06  Norbert Leser  <norbert.leser@nokia.com>
24939
24940        Reviewed by Simon Hausmann.
24941
24942        Implemented currentThreadStackBase for Symbian.
24943
24944        * runtime/Collector.cpp:
24945        (JSC::currentThreadStackBase):
24946
249472008-11-06  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
24948
24949        Reviewed by Simon Hausmann.
24950
24951        RVCT does not support tm_gmtoff field, so disable that code just like
24952        for MSVC.
24953
24954        * runtime/DateMath.h:
24955        (JSC::GregorianDateTime::GregorianDateTime):
24956        (JSC::GregorianDateTime::operator tm):
24957
249582008-11-06  Kristian Amlie  <kristian.amlie@nokia.com>
24959
24960        Reviewed by Simon Hausmann.
24961
24962        Define PLATFORM(UNIX) for S60. Effectively WebKit on S60 is compiled
24963        on top of the Posix layer.
24964
24965        * wtf/Platform.h:
24966
249672008-11-06  Norbert Leser  <norbert.leser@nokia.com>
24968
24969        Reviewed by Simon Hausmann.
24970
24971        Added __SYMBIAN32__ condition for defining PLATFORM(SYMBIAN).
24972
24973        * wtf/Platform.h:
24974
249752008-11-06  Ariya Hidayat  <ariya.hidayat@trolltech.com>
24976
24977        Reviewed by Simon Hausmann.
24978
24979        Added WINSCW compiler define for Symbian S60.
24980
24981        * wtf/Platform.h:
24982
249832008-11-06  Kristian Amlie  <kristian.amlie@nokia.com>
24984
24985        Reviewed by Simon Hausmann.
24986
24987        Use the GCC defines of the WTF_ALIGN* macros for the RVCT and the
24988        MINSCW compiler.
24989
24990        * wtf/Vector.h:
24991
249922008-11-06  Kristian Amlie  <kristian.amlie@nokia.com>
24993
24994        Reviewed by Simon Hausmann.
24995
24996        Define capabilities of the SYMBIAN platform. Some of the system
24997        headers are actually dependent on RVCT.
24998
24999        * wtf/Platform.h:
25000
250012008-11-06  Kristian Amlie  <kristian.amlie@nokia.com>
25002
25003        Reviewed by Simon Hausmann.
25004
25005        Add missing stddef.h header needed for compilation in Symbian.
25006
25007        * runtime/Collector.h:
25008
250092008-11-06  Kristian Amlie  <kristian.amlie@nokia.com>
25010
25011        Reviewed by Simon Hausmann.
25012
25013        Added COMPILER(RVCT) to detect the ARM RVCT compiler used in the Symbian environment.
25014
25015        * wtf/Platform.h:
25016
250172008-11-06  Simon Hausmann  <hausmann@webkit.org>
25018
25019        Fix the Qt build, adjust include paths after move of jsc.pro.
25020
25021        * jsc.pro:
25022
250232008-11-06  Cameron Zwarich  <zwarich@apple.com>
25024
25025        Rubber-stamped by Sam Weinig.
25026
25027        Move kjs/Shell.cpp to the top level of the JavaScriptCore directory and
25028        rename it to jsc.cpp to reflect the name of the binary compiled from it.
25029
25030        * GNUmakefile.am:
25031        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
25032        * JavaScriptCore.xcodeproj/project.pbxproj:
25033        * jsc.cpp: Copied from kjs/Shell.cpp.
25034        * jsc.pro:
25035        * jscore.bkl:
25036        * kjs/Shell.cpp: Removed.
25037
250382008-11-06  Cameron Zwarich  <zwarich@apple.com>
25039
25040        Rubber-stamped by Sam Weinig.
25041
25042        Move create_hash_table and jsc.pro out of the kjs directory and into the
25043        root directory of JavaScriptCore.
25044
25045        * DerivedSources.make:
25046        * JavaScriptCore.pri:
25047        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
25048        * JavaScriptCore.xcodeproj/project.pbxproj:
25049        * create_hash_table: Copied from kjs/create_hash_table.
25050        * jsc.pro: Copied from kjs/jsc.pro.
25051        * kjs/create_hash_table: Removed.
25052        * kjs/jsc.pro: Removed.
25053        * make-generated-sources.sh:
25054
250552008-11-05  Gavin Barraclough  <barraclough@apple.com>
25056
25057        Reviewed by Maciej Stachowiak.
25058
25059        https://bugs.webkit.org/show_bug.cgi?id=22094
25060
25061        Fix for bug where the callee incorrectly recieves the caller's lexical
25062        global object as this, rather than its own.  Implementation closely
25063        follows the spec, passing jsNull, checking in the callee and replacing
25064        with the global object where necessary.
25065
25066        * VM/CTI.cpp:
25067        (JSC::CTI::compileOpCall):
25068        * VM/Machine.cpp:
25069        (JSC::Machine::cti_op_call_NotJSFunction):
25070        (JSC::Machine::cti_op_call_eval):
25071        * runtime/JSCell.h:
25072        (JSC::JSValue::toThisObject):
25073        * runtime/JSImmediate.cpp:
25074        (JSC::JSImmediate::toThisObject):
25075        * runtime/JSImmediate.h:
25076
250772008-11-05  Kevin Ollivier  <kevino@theolliviers.com>
25078
25079        wx build fix after Operations.cpp move.
25080
25081        * JavaScriptCoreSources.bkl:
25082
250832008-11-05  Cameron Zwarich  <zwarich@apple.com>
25084
25085        Not reviewed.
25086
25087        Fix the build for case-sensitive build systems and wxWindows.
25088
25089        * JavaScriptCoreSources.bkl:
25090        * kjs/create_hash_table:
25091
250922008-11-05  Cameron Zwarich  <zwarich@apple.com>
25093
25094        Not reviewed.
25095
25096        Fix the build for case-sensitive build systems.
25097
25098        * JavaScriptCoreSources.bkl:
25099        * kjs/Shell.cpp:
25100        * runtime/Interpreter.cpp:
25101        * runtime/JSArray.cpp:
25102
251032008-11-05  Cameron Zwarich  <zwarich@apple.com>
25104
25105        Not reviewed.
25106
25107        Fix the build for case-sensitive build systems.
25108
25109        * API/JSBase.cpp:
25110        * API/JSObjectRef.cpp:
25111        * runtime/CommonIdentifiers.h:
25112        * runtime/Identifier.cpp:
25113        * runtime/InitializeThreading.cpp:
25114        * runtime/InternalFunction.h:
25115        * runtime/JSString.h:
25116        * runtime/Lookup.h:
25117        * runtime/PropertyNameArray.h:
25118        * runtime/PropertySlot.h:
25119        * runtime/StructureID.cpp:
25120        * runtime/StructureID.h:
25121        * runtime/UString.cpp:
25122
251232008-11-05  Cameron Zwarich  <zwarich@apple.com>
25124
25125        Rubber-stamped by Sam Weinig.
25126
25127        Move more files to the runtime subdirectory of JavaScriptCore.
25128
25129        * API/APICast.h:
25130        * API/JSBase.cpp:
25131        * API/JSCallbackObject.cpp:
25132        * API/JSClassRef.cpp:
25133        * API/JSClassRef.h:
25134        * API/JSStringRefCF.cpp:
25135        * API/JSValueRef.cpp:
25136        * API/OpaqueJSString.cpp:
25137        * API/OpaqueJSString.h:
25138        * AllInOneFile.cpp:
25139        * GNUmakefile.am:
25140        * JavaScriptCore.pri:
25141        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
25142        * JavaScriptCore.xcodeproj/project.pbxproj:
25143        * JavaScriptCoreSources.bkl:
25144        * VM/CodeBlock.h:
25145        * VM/CodeGenerator.cpp:
25146        * VM/Machine.cpp:
25147        * VM/RegisterFile.h:
25148        * debugger/Debugger.h:
25149        * kjs/SourceProvider.h:
25150        * kjs/TypeInfo.h: Removed.
25151        * kjs/collector.cpp: Removed.
25152        * kjs/collector.h: Removed.
25153        * kjs/completion.h: Removed.
25154        * kjs/create_hash_table:
25155        * kjs/identifier.cpp: Removed.
25156        * kjs/identifier.h: Removed.
25157        * kjs/interpreter.cpp: Removed.
25158        * kjs/interpreter.h: Removed.
25159        * kjs/lexer.cpp:
25160        * kjs/lexer.h:
25161        * kjs/lookup.cpp: Removed.
25162        * kjs/lookup.h: Removed.
25163        * kjs/nodes.cpp:
25164        * kjs/nodes.h:
25165        * kjs/operations.cpp: Removed.
25166        * kjs/operations.h: Removed.
25167        * kjs/protect.h: Removed.
25168        * kjs/regexp.cpp: Removed.
25169        * kjs/regexp.h: Removed.
25170        * kjs/ustring.cpp: Removed.
25171        * kjs/ustring.h: Removed.
25172        * pcre/pcre_exec.cpp:
25173        * profiler/CallIdentifier.h:
25174        * profiler/Profile.h:
25175        * runtime/ArrayConstructor.cpp:
25176        * runtime/ArrayPrototype.cpp:
25177        * runtime/ArrayPrototype.h:
25178        * runtime/Collector.cpp: Copied from kjs/collector.cpp.
25179        * runtime/Collector.h: Copied from kjs/collector.h.
25180        * runtime/CollectorHeapIterator.h:
25181        * runtime/Completion.h: Copied from kjs/completion.h.
25182        * runtime/ErrorPrototype.cpp:
25183        * runtime/Identifier.cpp: Copied from kjs/identifier.cpp.
25184        * runtime/Identifier.h: Copied from kjs/identifier.h.
25185        * runtime/InitializeThreading.cpp:
25186        * runtime/Interpreter.cpp: Copied from kjs/interpreter.cpp.
25187        * runtime/Interpreter.h: Copied from kjs/interpreter.h.
25188        * runtime/JSCell.h:
25189        * runtime/JSGlobalData.cpp:
25190        * runtime/JSGlobalData.h:
25191        * runtime/JSLock.cpp:
25192        * runtime/JSNumberCell.cpp:
25193        * runtime/JSNumberCell.h:
25194        * runtime/JSObject.cpp:
25195        * runtime/JSValue.h:
25196        * runtime/Lookup.cpp: Copied from kjs/lookup.cpp.
25197        * runtime/Lookup.h: Copied from kjs/lookup.h.
25198        * runtime/MathObject.cpp:
25199        * runtime/NativeErrorPrototype.cpp:
25200        * runtime/NumberPrototype.cpp:
25201        * runtime/Operations.cpp: Copied from kjs/operations.cpp.
25202        * runtime/Operations.h: Copied from kjs/operations.h.
25203        * runtime/PropertyMapHashTable.h:
25204        * runtime/Protect.h: Copied from kjs/protect.h.
25205        * runtime/RegExp.cpp: Copied from kjs/regexp.cpp.
25206        * runtime/RegExp.h: Copied from kjs/regexp.h.
25207        * runtime/RegExpConstructor.cpp:
25208        * runtime/RegExpObject.h:
25209        * runtime/RegExpPrototype.cpp:
25210        * runtime/SmallStrings.h:
25211        * runtime/StringObjectThatMasqueradesAsUndefined.h:
25212        * runtime/StructureID.cpp:
25213        * runtime/StructureID.h:
25214        * runtime/StructureIDTransitionTable.h:
25215        * runtime/SymbolTable.h:
25216        * runtime/TypeInfo.h: Copied from kjs/TypeInfo.h.
25217        * runtime/UString.cpp: Copied from kjs/ustring.cpp.
25218        * runtime/UString.h: Copied from kjs/ustring.h.
25219        * wrec/CharacterClassConstructor.h:
25220        * wrec/WREC.h:
25221
252222008-11-05  Geoffrey Garen  <ggaren@apple.com>
25223
25224        Suggested by Darin Adler.
25225        
25226        Removed two copy constructors that the compiler can generate for us
25227        automatically.
25228
25229        * VM/LabelID.h:
25230        (JSC::LabelID::setLocation):
25231        (JSC::LabelID::offsetFrom):
25232        (JSC::LabelID::ref):
25233        (JSC::LabelID::refCount):
25234        * kjs/LabelScope.h:
25235
252362008-11-05  Anders Carlsson  <andersca@apple.com>
25237
25238        Fix Snow Leopard build.
25239        
25240        * JavaScriptCore.xcodeproj/project.pbxproj:
25241
252422008-11-04  Cameron Zwarich  <zwarich@apple.com>
25243
25244        Rubber-stamped by Steve Falkenburg.
25245
25246        Move dtoa.cpp and dtoa.h to the WTF Visual Studio project to reflect
25247        their movement in the filesystem.
25248
25249        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
25250        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
25251
252522008-11-04  Cameron Zwarich  <zwarich@apple.com>
25253
25254        Rubber-stamped by Sam Weinig.
25255
25256        Move kjs/dtoa.h to the wtf subdirectory of JavaScriptCore.
25257
25258        * AllInOneFile.cpp:
25259        * GNUmakefile.am:
25260        * JavaScriptCore.pri:
25261        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
25262        * JavaScriptCore.xcodeproj/project.pbxproj:
25263        * JavaScriptCoreSources.bkl:
25264        * kjs/dtoa.cpp: Removed.
25265        * kjs/dtoa.h: Removed.
25266        * wtf/dtoa.cpp: Copied from kjs/dtoa.cpp.
25267        * wtf/dtoa.h: Copied from kjs/dtoa.h.
25268
252692008-11-04  Cameron Zwarich  <zwarich@apple.com>
25270
25271        Rubber-stamped by Sam Weinig.
25272
25273        Move kjs/config.h to the top level of JavaScriptCore.
25274
25275        * GNUmakefile.am:
25276        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
25277        * JavaScriptCore.xcodeproj/project.pbxproj:
25278        * config.h: Copied from kjs/config.h.
25279        * kjs/config.h: Removed.
25280
252812008-11-04  Darin Adler  <darin@apple.com>
25282
25283        Reviewed by Tim Hatcher.
25284
25285        * wtf/ThreadingNone.cpp: Tweak formatting.
25286
252872008-11-03  Darin Adler  <darin@apple.com>
25288
25289        Reviewed by Tim Hatcher.
25290
25291        - https://bugs.webkit.org/show_bug.cgi?id=22061
25292          create script to check for exit-time destructors
25293
25294        * JavaScriptCore.exp: Changed to export functions rather than
25295        a global for the atomically initialized static mutex.
25296
25297        * JavaScriptCore.xcodeproj/project.pbxproj: Added a script
25298        phase that runs the check-for-exit-time-destructors script.
25299
25300        * wtf/MainThread.cpp:
25301        (WTF::mainThreadFunctionQueueMutex): Changed to leak an object
25302        rather than using an exit time destructor.
25303        (WTF::functionQueue): Ditto.
25304        * wtf/unicode/icu/CollatorICU.cpp:
25305        (WTF::cachedCollatorMutex): Ditto.
25306
25307        * wtf/Threading.h: Changed other platforms to share the Windows
25308        approach where the mutex is internal and the functions are exported.
25309        * wtf/ThreadingGtk.cpp:
25310        (WTF::lockAtomicallyInitializedStaticMutex): Ditto.
25311        (WTF::unlockAtomicallyInitializedStaticMutex): Ditto.
25312        * wtf/ThreadingNone.cpp:
25313        (WTF::lockAtomicallyInitializedStaticMutex): Ditto.
25314        (WTF::unlockAtomicallyInitializedStaticMutex): Ditto.
25315        * wtf/ThreadingPthreads.cpp:
25316        (WTF::threadMapMutex): Changed to leak an object rather than using
25317        an exit time destructor.
25318        (WTF::lockAtomicallyInitializedStaticMutex): Mutex change.
25319        (WTF::unlockAtomicallyInitializedStaticMutex): Ditto.
25320        (WTF::threadMap): Changed to leak an object rather than using
25321        an exit time destructor.
25322        * wtf/ThreadingQt.cpp:
25323        (WTF::lockAtomicallyInitializedStaticMutex): Mutex change.
25324        (WTF::unlockAtomicallyInitializedStaticMutex): Ditto.
25325        * wtf/ThreadingWin.cpp:
25326        (WTF::lockAtomicallyInitializedStaticMutex): Added an assertion.
25327
253282008-11-04  Adam Roben  <aroben@apple.com>
25329
25330        Windows build fix
25331
25332        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update
25333        the location of JSStaticScopeObject.{cpp,h}.
25334
253352008-11-04  Cameron Zwarich  <zwarich@apple.com>
25336
25337        Reviewed by Alexey Proskuryakov.
25338
25339        Move AllInOneFile.cpp to the top level of JavaScriptCore.
25340
25341        * AllInOneFile.cpp: Copied from kjs/AllInOneFile.cpp.
25342        * GNUmakefile.am:
25343        * JavaScriptCore.xcodeproj/project.pbxproj:
25344        * kjs/AllInOneFile.cpp: Removed.
25345
253462008-11-04  Cameron Zwarich  <zwarich@apple.com>
25347
25348        Rubber-stamped by Alexey Proskuryakov.
25349
25350        Add NodeInfo.h to the JavaScriptCore Xcode project.
25351
25352        * JavaScriptCore.xcodeproj/project.pbxproj:
25353
253542008-11-03  Cameron Zwarich  <zwarich@apple.com>
25355
25356        Rubber-stamped by Maciej Stachowiak.
25357
25358        Move more files into the runtime subdirectory of JavaScriptCore.
25359
25360        * API/JSBase.cpp:
25361        * API/JSCallbackConstructor.cpp:
25362        * API/JSCallbackFunction.cpp:
25363        * API/JSClassRef.cpp:
25364        * API/OpaqueJSString.cpp:
25365        * GNUmakefile.am:
25366        * JavaScriptCore.pri:
25367        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
25368        * JavaScriptCore.xcodeproj/project.pbxproj:
25369        * JavaScriptCoreSources.bkl:
25370        * kjs/AllInOneFile.cpp:
25371        * kjs/ArgList.cpp: Removed.
25372        * kjs/ArgList.h: Removed.
25373        * kjs/Arguments.cpp: Removed.
25374        * kjs/Arguments.h: Removed.
25375        * kjs/BatchedTransitionOptimizer.h: Removed.
25376        * kjs/CollectorHeapIterator.h: Removed.
25377        * kjs/CommonIdentifiers.cpp: Removed.
25378        * kjs/CommonIdentifiers.h: Removed.
25379        * kjs/ExecState.cpp: Removed.
25380        * kjs/ExecState.h: Removed.
25381        * kjs/GetterSetter.cpp: Removed.
25382        * kjs/GetterSetter.h: Removed.
25383        * kjs/InitializeThreading.cpp: Removed.
25384        * kjs/InitializeThreading.h: Removed.
25385        * kjs/JSActivation.cpp: Removed.
25386        * kjs/JSActivation.h: Removed.
25387        * kjs/JSGlobalData.cpp: Removed.
25388        * kjs/JSGlobalData.h: Removed.
25389        * kjs/JSLock.cpp: Removed.
25390        * kjs/JSLock.h: Removed.
25391        * kjs/JSStaticScopeObject.cpp: Removed.
25392        * kjs/JSStaticScopeObject.h: Removed.
25393        * kjs/JSType.h: Removed.
25394        * kjs/PropertyNameArray.cpp: Removed.
25395        * kjs/PropertyNameArray.h: Removed.
25396        * kjs/ScopeChain.cpp: Removed.
25397        * kjs/ScopeChain.h: Removed.
25398        * kjs/ScopeChainMark.h: Removed.
25399        * kjs/SymbolTable.h: Removed.
25400        * kjs/Tracing.d: Removed.
25401        * kjs/Tracing.h: Removed.
25402        * runtime/ArgList.cpp: Copied from kjs/ArgList.cpp.
25403        * runtime/ArgList.h: Copied from kjs/ArgList.h.
25404        * runtime/Arguments.cpp: Copied from kjs/Arguments.cpp.
25405        * runtime/Arguments.h: Copied from kjs/Arguments.h.
25406        * runtime/BatchedTransitionOptimizer.h: Copied from kjs/BatchedTransitionOptimizer.h.
25407        * runtime/CollectorHeapIterator.h: Copied from kjs/CollectorHeapIterator.h.
25408        * runtime/CommonIdentifiers.cpp: Copied from kjs/CommonIdentifiers.cpp.
25409        * runtime/CommonIdentifiers.h: Copied from kjs/CommonIdentifiers.h.
25410        * runtime/ExecState.cpp: Copied from kjs/ExecState.cpp.
25411        * runtime/ExecState.h: Copied from kjs/ExecState.h.
25412        * runtime/GetterSetter.cpp: Copied from kjs/GetterSetter.cpp.
25413        * runtime/GetterSetter.h: Copied from kjs/GetterSetter.h.
25414        * runtime/InitializeThreading.cpp: Copied from kjs/InitializeThreading.cpp.
25415        * runtime/InitializeThreading.h: Copied from kjs/InitializeThreading.h.
25416        * runtime/JSActivation.cpp: Copied from kjs/JSActivation.cpp.
25417        * runtime/JSActivation.h: Copied from kjs/JSActivation.h.
25418        * runtime/JSGlobalData.cpp: Copied from kjs/JSGlobalData.cpp.
25419        * runtime/JSGlobalData.h: Copied from kjs/JSGlobalData.h.
25420        * runtime/JSLock.cpp: Copied from kjs/JSLock.cpp.
25421        * runtime/JSLock.h: Copied from kjs/JSLock.h.
25422        * runtime/JSStaticScopeObject.cpp: Copied from kjs/JSStaticScopeObject.cpp.
25423        * runtime/JSStaticScopeObject.h: Copied from kjs/JSStaticScopeObject.h.
25424        * runtime/JSType.h: Copied from kjs/JSType.h.
25425        * runtime/PropertyNameArray.cpp: Copied from kjs/PropertyNameArray.cpp.
25426        * runtime/PropertyNameArray.h: Copied from kjs/PropertyNameArray.h.
25427        * runtime/ScopeChain.cpp: Copied from kjs/ScopeChain.cpp.
25428        * runtime/ScopeChain.h: Copied from kjs/ScopeChain.h.
25429        * runtime/ScopeChainMark.h: Copied from kjs/ScopeChainMark.h.
25430        * runtime/SymbolTable.h: Copied from kjs/SymbolTable.h.
25431        * runtime/Tracing.d: Copied from kjs/Tracing.d.
25432        * runtime/Tracing.h: Copied from kjs/Tracing.h.
25433
254342008-11-03  Sam Weinig  <sam@webkit.org>
25435
25436        Reviewed by Mark Rowe.
25437
25438        Move #define to turn on dumping StructureID statistics to StructureID.cpp so that
25439        turning it on does not require a full rebuild. 
25440
25441        * runtime/StructureID.cpp:
25442        (JSC::StructureID::dumpStatistics):
25443        * runtime/StructureID.h:
25444
254452008-11-03  Alp Toker  <alp@nuanti.com>
25446
25447        Reviewed by Geoffrey Garen.
25448
25449        Fix warning when building on Darwin without JSC_MULTIPLE_THREADS
25450        enabled.
25451
25452        * kjs/InitializeThreading.cpp:
25453
254542008-11-02  Matt Lilek  <webkit@mattlilek.com>
25455
25456        Reviewed by Cameron Zwarich.
25457
25458        Bug 22042: REGRESSION(r38066): ASSERTION FAILED: source in CodeBlock
25459        <https://bugs.webkit.org/show_bug.cgi?id=22042>
25460
25461        Rename parameter name to avoid ASSERT.
25462
25463        * VM/CodeBlock.h:
25464        (JSC::CodeBlock::CodeBlock):
25465        (JSC::ProgramCodeBlock::ProgramCodeBlock):
25466        (JSC::EvalCodeBlock::EvalCodeBlock):
25467
254682008-11-02  Cameron Zwarich  <zwarich@apple.com>
25469
25470        Reviewed by Oliver Hunt.
25471
25472        Bug 22035: Remove the '_' suffix on constructor parameter names for structs
25473        <https://bugs.webkit.org/show_bug.cgi?id=22035>
25474
25475        * API/JSCallbackObject.h:
25476        (JSC::JSCallbackObject::JSCallbackObjectData::JSCallbackObjectData):
25477        * VM/CodeBlock.h:
25478        (JSC::CodeBlock::CodeBlock):
25479        (JSC::ProgramCodeBlock::ProgramCodeBlock):
25480        (JSC::EvalCodeBlock::EvalCodeBlock):
25481        * wrec/WREC.h:
25482        (JSC::Quantifier::Quantifier):
25483
254842008-10-31  Cameron Zwarich  <zwarich@apple.com>
25485
25486        Rubber-stamped by Geoff Garen.
25487
25488        Rename SourceRange.h to SourceCode.h.
25489
25490        * API/JSBase.cpp:
25491        * GNUmakefile.am:
25492        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
25493        * JavaScriptCore.xcodeproj/project.pbxproj:
25494        * VM/CodeBlock.h:
25495        * kjs/SourceCode.h: Copied from kjs/SourceRange.h.
25496        * kjs/SourceRange.h: Removed.
25497        * kjs/grammar.y:
25498        * kjs/lexer.h:
25499        * kjs/nodes.cpp:
25500        (JSC::ForInNode::ForInNode):
25501        * kjs/nodes.h:
25502        (JSC::ThrowableExpressionData::setExceptionSourceCode):
25503
255042008-10-31  Cameron Zwarich  <zwarich@apple.com>
25505
25506        Reviewed by Darin Adler.
25507
25508        Bug 22019: Move JSC::Interpreter::shouldPrintExceptions() to WebCore::Console
25509        <https://bugs.webkit.org/show_bug.cgi?id=22019>
25510
25511        The JSC::Interpreter::shouldPrintExceptions() function is not used at
25512        all in JavaScriptCore, so it should be moved to WebCore::Console, its
25513        only user.
25514
25515        * JavaScriptCore.exp:
25516        * kjs/interpreter.cpp:
25517        * kjs/interpreter.h:
25518
255192008-10-31  Cameron Zwarich  <zwarich@apple.com>
25520
25521        Not reviewed.
25522
25523        Windows build fix.
25524
25525        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
25526
255272008-10-31  Cameron Zwarich  <zwarich@apple.com>
25528
25529        Rubber-stamped by Sam Weinig.
25530
25531        Remove the call to Interpreter::setShouldPrintExceptions() from the
25532        GlobalObject constructor in the shell. The shouldPrintExceptions()
25533        information is not used anywhere in JavaScriptCore, only in WebCore.
25534
25535        * kjs/Shell.cpp:
25536        (GlobalObject::GlobalObject):
25537
255382008-10-31  Kevin Ollivier  <kevino@theolliviers.com>
25539
25540        wxMSW build fix.
25541
25542        * wtf/Threading.h:
25543
255442008-10-31  Cameron Zwarich  <zwarich@apple.com>
25545
25546        Rubber-stamped by Sam Weinig.
25547
25548        Move more files from the kjs subdirectory of JavaScriptCore to the
25549        runtime subdirectory.
25550
25551        * GNUmakefile.am:
25552        * JavaScriptCore.pri:
25553        * JavaScriptCore.xcodeproj/project.pbxproj:
25554        * JavaScriptCoreSources.bkl:
25555        * kjs/AllInOneFile.cpp:
25556        * kjs/RegExpConstructor.cpp: Removed.
25557        * kjs/RegExpConstructor.h: Removed.
25558        * kjs/RegExpMatchesArray.h: Removed.
25559        * kjs/RegExpObject.cpp: Removed.
25560        * kjs/RegExpObject.h: Removed.
25561        * kjs/RegExpPrototype.cpp: Removed.
25562        * kjs/RegExpPrototype.h: Removed.
25563        * runtime/RegExpConstructor.cpp: Copied from kjs/RegExpConstructor.cpp.
25564        * runtime/RegExpConstructor.h: Copied from kjs/RegExpConstructor.h.
25565        * runtime/RegExpMatchesArray.h: Copied from kjs/RegExpMatchesArray.h.
25566        * runtime/RegExpObject.cpp: Copied from kjs/RegExpObject.cpp.
25567        * runtime/RegExpObject.h: Copied from kjs/RegExpObject.h.
25568        * runtime/RegExpPrototype.cpp: Copied from kjs/RegExpPrototype.cpp.
25569        * runtime/RegExpPrototype.h: Copied from kjs/RegExpPrototype.h.
25570
255712008-10-31  Mark Rowe  <mrowe@apple.com>
25572
25573        Revert an incorrect portion of r38034.
25574
25575        * profiler/ProfilerServer.mm:
25576
255772008-10-31  Mark Rowe  <mrowe@apple.com>
25578
25579        Fix the 64-bit build.
25580
25581        Disable strict aliasing in ProfilerServer.mm as it leads to the compiler being unhappy
25582        with the common Obj-C idiom self = [super init];
25583
25584        * JavaScriptCore.xcodeproj/project.pbxproj:
25585
255862008-10-31  Cameron Zwarich  <zwarich@apple.com>
25587
25588        Reviewed by Alexey Proskuryakov.
25589
25590        Change a header guard to match our coding style.
25591
25592        * kjs/InitializeThreading.h:
25593
255942008-10-30  Geoffrey Garen  <ggaren@apple.com>
25595
25596        Reviewed by Oliver Hunt.
25597        
25598        Fixed a small bit of https://bugs.webkit.org/show_bug.cgi?id=21962
25599        AST uses way too much memory
25600        
25601        Removed a word from StatementNode by nixing LabelStack and turning it
25602        into a compile-time data structure managed by CodeGenerator.
25603        
25604        v8 tests and SunSpider, run by Gavin, report no change.
25605
25606        * GNUmakefile.am:
25607        * JavaScriptCore.order:
25608        * JavaScriptCore.pri:
25609        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
25610        * JavaScriptCore.xcodeproj/project.pbxproj:
25611        * kjs/AllInOneFile.cpp:
25612        * JavaScriptCoreSources.bkl: I sure hope this builds!
25613        
25614        * VM/CodeGenerator.cpp:
25615        (JSC::CodeGenerator::CodeGenerator):
25616        (JSC::CodeGenerator::newLabelScope):
25617        (JSC::CodeGenerator::breakTarget):
25618        (JSC::CodeGenerator::continueTarget):
25619        * VM/CodeGenerator.h: Nixed the JumpContext system because it depended
25620        on a LabelStack in the AST, and it was a little cumbersome on the client
25621        side. Replaced with LabelScope, which tracks all break / continue
25622        information in the CodeGenerator, just like we track LabelIDs and other
25623        stacks of compile-time data.
25624
25625        * kjs/LabelScope.h: Added.
25626        (JSC::LabelScope::):
25627        (JSC::LabelScope::LabelScope):
25628        (JSC::LabelScope::ref):
25629        (JSC::LabelScope::deref):
25630        (JSC::LabelScope::refCount):
25631        (JSC::LabelScope::breakTarget):
25632        (JSC::LabelScope::continueTarget):
25633        (JSC::LabelScope::type):
25634        (JSC::LabelScope::name):
25635        (JSC::LabelScope::scopeDepth): Simple abstraction for holding everything
25636        you might want to know about a break-able / continue-able scope.
25637
25638        * kjs/LabelStack.cpp: Removed.
25639        * kjs/LabelStack.h: Removed.
25640
25641        * kjs/grammar.y: No need to push labels at parse time -- we don't store
25642        LabelStacks in the AST anymore.
25643
25644        * kjs/nodes.cpp:
25645        (JSC::DoWhileNode::emitCode):
25646        (JSC::WhileNode::emitCode):
25647        (JSC::ForNode::emitCode):
25648        (JSC::ForInNode::emitCode):
25649        (JSC::ContinueNode::emitCode):
25650        (JSC::BreakNode::emitCode):
25651        (JSC::SwitchNode::emitCode):
25652        (JSC::LabelNode::emitCode):
25653        * kjs/nodes.h:
25654        (JSC::StatementNode::):
25655        (JSC::LabelNode::): Use LabelScope where we used to use JumpContext.
25656        Simplified a bunch of code. Touched up label-related error messages a
25657        bit.
25658
25659        * kjs/nodes2string.cpp:
25660        (JSC::LabelNode::streamTo): Updated for rename.
25661
256622008-10-31  Cameron Zwarich  <zwarich@apple.com>
25663
25664        Reviewed by Darin Adler.
25665
25666        Bug 22005: Move StructureIDChain into its own file
25667        <https://bugs.webkit.org/show_bug.cgi?id=22005>
25668
25669        * GNUmakefile.am:
25670        * JavaScriptCore.pri:
25671        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
25672        * JavaScriptCore.xcodeproj/project.pbxproj:
25673        * JavaScriptCoreSources.bkl:
25674        * runtime/StructureID.cpp:
25675        * runtime/StructureID.h:
25676        * runtime/StructureIDChain.cpp: Copied from runtime/StructureID.cpp.
25677        * runtime/StructureIDChain.h: Copied from runtime/StructureID.h.
25678
256792008-10-31  Steve Falkenburg  <sfalken@apple.com>
25680
25681        Build fix.
25682
25683        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
25684
256852008-10-31  Steve Falkenburg  <sfalken@apple.com>
25686
25687        Build fix.
25688
25689        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
25690
256912008-10-31  Darin Adler  <darin@apple.com>
25692
25693        Reviewed by Dan Bernstein.
25694
25695        - fix storage leak seen on buildbot
25696
25697        Some other cleanup too. The storage leak was caused by the fact
25698        that HashTraits<CallIdentifier>::needsDestruction was false, so
25699        the call identifier objects didn't get deleted.
25700
25701        * profiler/CallIdentifier.h:
25702        
25703        Added a default constructor to create empty call identifiers.
25704
25705        Changed the normal constructor to use const UString&
25706        to avoid extra copying and reference count thrash.
25707        
25708        Removed the explicit copy constructor definition, since it's what
25709        the compiler will automatically generate. (Rule of thumb: Either
25710        you need both a custom copy constructor and a custom assignment
25711        operator, or neither.)
25712
25713        Moved the CallIdentifier hash function out of the WTF namespace;
25714        there's no reason to put it there.
25715
25716        Changed the CallIdentifier hash function to be a struct rather than
25717        a specialization of the IntHash struct template. Having it be
25718        a specialization made no sense, since CallIdentifier is not an integer,
25719        and did no good.
25720
25721        Removed explicit definition of emptyValueIsZero in the hash traits,
25722        since inheriting from GenericHashTraits already makes that false.
25723
25724        Removed explicit definition of emptyValue, instead relying on the
25725        default constructor and GenericHashTraits.
25726
25727        Removed explicit definition of needsDestruction, because we want it
25728        to have its default value: true, not false. This fixes the leak!
25729
25730        Changed constructDeletedValue and isDeletedValue to use a line number
25731        of numeric_limits<unsigned>::max() to indicate a value is deleted.
25732        Previously this used empty strings for the empty value and null strings
25733        for the deleted value, but it's more efficient to use null for both.
25734
257352008-10-31  Timothy Hatcher  <timothy@apple.com>
25736
25737        Emit the WillExecuteStatement debugger hook before the for loop body
25738        when the statement node for the body isn't a block. This allows
25739        breakpoints on those statements in the Web Inspector.
25740
25741        https://bugs.webkit.org/show_bug.cgi?id=22004
25742
25743        Reviewed by Darin Adler.
25744
25745        * kjs/nodes.cpp:
25746        (JSC::ForNode::emitCode): Emit the WillExecuteStatement
25747        debugger hook before the statement node if isn't a block.
25748        Also emit the WillExecuteStatement debugger hook for the
25749        loop as the first op-code.
25750        (JSC::ForInNode::emitCode): Ditto.
25751
257522008-10-31  Timothy Hatcher  <timothy@apple.com>
25753
25754        Fixes console warnings about not having an autorelease pool.
25755        Also fixes the build for Snow Leopard, by including individual
25756        Foundation headers instead of Foundation.h.
25757
25758        https://bugs.webkit.org/show_bug.cgi?id=21995
25759
25760        Reviewed by Oliver Hunt.
25761
25762        * profiler/ProfilerServer.mm:
25763        (-[ProfilerServer init]): Create a NSAutoreleasePool and drain it.
25764
257652008-10-31  Cameron Zwarich  <zwarich@apple.com>
25766
25767        Not reviewed.
25768
25769        Speculative wxWindows build fix.
25770
25771        * JavaScriptCoreSources.bkl:
25772        * jscore.bkl:
25773
257742008-10-31  Cameron Zwarich  <zwarich@apple.com>
25775
25776        Rubber-stamped by Maciej Stachowiak.
25777
25778        Move VM/JSPropertyNameIterator.cpp and VM/JSPropertyNameIterator.h to
25779        the runtime directory.
25780
25781        * GNUmakefile.am:
25782        * JavaScriptCore.pri:
25783        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
25784        * JavaScriptCore.xcodeproj/project.pbxproj:
25785        * JavaScriptCoreSources.bkl:
25786        * VM/JSPropertyNameIterator.cpp: Removed.
25787        * VM/JSPropertyNameIterator.h: Removed.
25788        * runtime/JSPropertyNameIterator.cpp: Copied from VM/JSPropertyNameIterator.cpp.
25789        * runtime/JSPropertyNameIterator.h: Copied from VM/JSPropertyNameIterator.h.
25790
257912008-10-31  Cameron Zwarich  <zwarich@apple.com>
25792
25793        Not reviewed.
25794
25795        Speculative wxWindows build fix.
25796
25797        * jscore.bkl:
25798
257992008-10-30  Mark Rowe  <mrowe@apple.com>
25800
25801        Reviewed by Jon Homeycutt.
25802
25803        Explicitly default to building for only the native architecture in debug and release builds.
25804
25805        * Configurations/DebugRelease.xcconfig:
25806
258072008-10-30  Cameron Zwarich  <zwarich@apple.com>
25808
25809        Rubber-stamped by Sam Weinig.
25810
25811        Create a debugger directory in JavaScriptCore and move the relevant
25812        files to it.
25813
25814        * GNUmakefile.am:
25815        * JavaScriptCore.pri:
25816        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
25817        * JavaScriptCore.xcodeproj/project.pbxproj:
25818        * VM/CodeBlock.cpp:
25819        * VM/CodeGenerator.h:
25820        * VM/Machine.cpp:
25821        * debugger: Added.
25822        * debugger/Debugger.cpp: Copied from kjs/debugger.cpp.
25823        * debugger/Debugger.h: Copied from kjs/debugger.h.
25824        * debugger/DebuggerCallFrame.cpp: Copied from kjs/DebuggerCallFrame.cpp.
25825        * debugger/DebuggerCallFrame.h: Copied from kjs/DebuggerCallFrame.h.
25826        * kjs/AllInOneFile.cpp:
25827        * kjs/DebuggerCallFrame.cpp: Removed.
25828        * kjs/DebuggerCallFrame.h: Removed.
25829        * kjs/Parser.cpp:
25830        * kjs/Parser.h:
25831        * kjs/debugger.cpp: Removed.
25832        * kjs/debugger.h: Removed.
25833        * kjs/interpreter.cpp:
25834        * kjs/nodes.cpp:
25835        * runtime/FunctionConstructor.cpp:
25836        * runtime/JSGlobalObject.cpp:
25837
258382008-10-30  Benjamin K. Stuhl  <bks24@cornell.edu>
25839
25840        gcc 4.3.3/linux-x86 generates "suggest parentheses around && within ||"
25841        warnings; add some parentheses to disambiguate things. No functional
25842        changes, so no tests.
25843
25844        https://bugs.webkit.org/show_bug.cgi?id=21973
25845        Add parentheses to clean up some gcc warnings
25846
25847        Reviewed by Dan Bernstein.
25848
25849        * wtf/ASCIICType.h:
25850        (WTF::isASCIIAlphanumeric):
25851        (WTF::isASCIIHexDigit):
25852
258532008-10-30  Kevin Lindeman  <klindeman@apple.com>
25854
25855        Adds ProfilerServer, which is a distributed notification listener
25856        that allows starting and stopping the profiler remotely for use
25857        in conjunction with the profiler's DTace probes.
25858
25859        https://bugs.webkit.org/show_bug.cgi?id=21719
25860
25861        Reviewed by Timothy Hatcher.
25862
25863        * JavaScriptCore.xcodeproj/project.pbxproj:
25864        * kjs/JSGlobalData.cpp:
25865        (JSC::JSGlobalData::JSGlobalData): Calls startProfilerServerIfNeeded.
25866        * profiler/ProfilerServer.h: Added.
25867        * profiler/ProfilerServer.mm: Added.
25868        (+[ProfilerServer sharedProfileServer]):
25869        (-[ProfilerServer init]):
25870        (-[ProfilerServer startProfiling]):
25871        (-[ProfilerServer stopProfiling]):
25872        (JSC::startProfilerServerIfNeeded):
25873
258742008-10-30  Kevin Ollivier  <kevino@theolliviers.com>
25875
25876        wx build fix after PropertyMap and StructureID merge.
25877
25878        * JavaScriptCoreSources.bkl:
25879
258802008-10-30  Cameron Zwarich  <zwarich@apple.com>
25881
25882        Reviewed by Mark Rowe.
25883
25884        Change the JavaScriptCore Xcode project to use relative paths for the
25885        PCRE source files.
25886
25887        * JavaScriptCore.xcodeproj/project.pbxproj:
25888
258892008-10-30  Sam Weinig  <sam@webkit.org>
25890
25891        Reviewed by Cameron Zwarich and Geoffrey Garen.
25892
25893        Fix for https://bugs.webkit.org/show_bug.cgi?id=21989
25894        Merge PropertyMap and StructureID
25895
25896        - Move PropertyMap code into StructureID in preparation for lazily
25897          creating the map on gets.
25898        - Make remove with transition explicit by adding removePropertyTransition.
25899        - Make the put/remove without transition explicit.
25900        - Make cache invalidation part of put/remove without transition.
25901
25902        1% speedup on SunSpider; 0.5% speedup on v8 suite.
25903
25904        * GNUmakefile.am:
25905        * JavaScriptCore.exp:
25906        * JavaScriptCore.pri:
25907        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
25908        * JavaScriptCore.xcodeproj/project.pbxproj:
25909        * JavaScriptCoreSources.bkl:
25910        * kjs/AllInOneFile.cpp:
25911        * kjs/identifier.h:
25912        * runtime/JSObject.cpp:
25913        (JSC::JSObject::removeDirect):
25914        * runtime/JSObject.h:
25915        (JSC::JSObject::putDirect):
25916        * runtime/PropertyMap.cpp: Removed.
25917        * runtime/PropertyMap.h: Removed.
25918        * runtime/PropertyMapHashTable.h: Copied from runtime/PropertyMap.h.
25919        * runtime/StructureID.cpp:
25920        (JSC::StructureID::dumpStatistics):
25921        (JSC::StructureID::StructureID):
25922        (JSC::StructureID::~StructureID):
25923        (JSC::StructureID::getEnumerablePropertyNames):
25924        (JSC::StructureID::addPropertyTransition):
25925        (JSC::StructureID::removePropertyTransition):
25926        (JSC::StructureID::toDictionaryTransition):
25927        (JSC::StructureID::changePrototypeTransition):
25928        (JSC::StructureID::getterSetterTransition):
25929        (JSC::StructureID::addPropertyWithoutTransition):
25930        (JSC::StructureID::removePropertyWithoutTransition):
25931        (JSC::PropertyMapStatisticsExitLogger::~PropertyMapStatisticsExitLogger):
25932        (JSC::StructureID::checkConsistency):
25933        (JSC::StructureID::copyPropertyTable):
25934        (JSC::StructureID::get):
25935        (JSC::StructureID::put):
25936        (JSC::StructureID::remove):
25937        (JSC::StructureID::insertIntoPropertyMapHashTable):
25938        (JSC::StructureID::expandPropertyMapHashTable):
25939        (JSC::StructureID::createPropertyMapHashTable):
25940        (JSC::StructureID::rehashPropertyMapHashTable):
25941        (JSC::comparePropertyMapEntryIndices):
25942        (JSC::StructureID::getEnumerablePropertyNamesInternal):
25943        * runtime/StructureID.h:
25944        (JSC::StructureID::propertyStorageSize):
25945        (JSC::StructureID::isEmpty):
25946        (JSC::StructureID::get):
25947
259482008-10-30  Cameron Zwarich  <zwarich@apple.com>
25949
25950        Reviewed by Oliver Hunt.
25951
25952        Bug 21987: CTI::putDoubleResultToJSNumberCellOrJSImmediate() hardcodes its result register
25953        <https://bugs.webkit.org/show_bug.cgi?id=21987>
25954
25955        CTI::putDoubleResultToJSNumberCellOrJSImmediate() hardcodes its result
25956        register as ecx, but it should be tempReg1, which is ecx at all of its
25957        callsites.
25958
25959        * VM/CTI.cpp:
25960        (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate):
25961
259622008-10-30  Cameron Zwarich  <zwarich@apple.com>
25963
25964        Reviewed by Sam Weinig.
25965
25966        Bug 21985: Opcodes should use eax as their destination register whenever possible
25967        <https://bugs.webkit.org/show_bug.cgi?id=21985>
25968
25969        Change more opcodes to use eax as the register for their final result,
25970        and change calls to emitPutResult() that pass eax to rely on the default
25971        value of eax.
25972
25973        * VM/CTI.cpp:
25974        (JSC::CTI::privateCompileMainPass):
25975
259762008-10-30  Alp Toker  <alp@nuanti.com>
25977
25978        Build fix attempt for older gcc on the trunk-mac-intel build bot
25979        (error: initializer for scalar variable requires one element).
25980
25981        Modify the initializer syntax slightly with an additional comma.
25982
25983        * VM/Machine.cpp:
25984        (JSC::Machine::cti_op_call_JSFunction):
25985        (JSC::Machine::cti_op_construct_JSConstruct):
25986        (JSC::Machine::cti_op_resolve_func):
25987        (JSC::Machine::cti_op_post_inc):
25988        (JSC::Machine::cti_op_resolve_with_base):
25989        (JSC::Machine::cti_op_post_dec):
25990
259912008-10-30  Alp Toker  <alp@nuanti.com>
25992
25993        Reviewed by Alexey Proskuryakov.
25994
25995        https://bugs.webkit.org/show_bug.cgi?id=21571
25996        VoidPtrPair breaks CTI on Linux
25997
25998        The VoidPtrPair return change made in r37457 does not work on Linux
25999        since POD structs aren't passed in registers.
26000
26001        This patch uses a union to vectorize VoidPtrPair to a uint64_t and
26002        matches Darwin/MSVC fixing CTI/WREC on Linux.
26003
26004        Alexey reports no measurable change in Mac performance with this fix.
26005
26006        * VM/Machine.cpp:
26007        (JSC::Machine::cti_op_call_JSFunction):
26008        (JSC::Machine::cti_op_construct_JSConstruct):
26009        (JSC::Machine::cti_op_resolve_func):
26010        (JSC::Machine::cti_op_post_inc):
26011        (JSC::Machine::cti_op_resolve_with_base):
26012        (JSC::Machine::cti_op_post_dec):
26013        * VM/Machine.h:
26014        (JSC::):
26015
260162008-10-29  Oliver Hunt  <oliver@apple.com>
26017
26018        Reviewed by Geoff Garen.
26019
26020        Initial work to reduce cost of JSNumberCell allocation
26021
26022        This does the initial work needed to bring more of number
26023        allocation into CTI code directly, rather than just falling
26024        back onto the slow paths if we can't guarantee that a number
26025        cell can be reused.
26026
26027        Initial implementation only used by op_negate to make sure
26028        it all works.  In a negate heavy (though not dominated) test
26029        it results in a 10% win in the non-reusable cell case.
26030
26031        * VM/CTI.cpp:
26032        (JSC::):
26033        (JSC::CTI::emitAllocateNumber):
26034        (JSC::CTI::emitNakedFastCall):
26035        (JSC::CTI::emitArithIntToImmWithJump):
26036        (JSC::CTI::privateCompileMainPass):
26037        (JSC::CTI::privateCompileSlowCases):
26038        * VM/CTI.h:
26039        * VM/CodeBlock.cpp:
26040        (JSC::CodeBlock::dump):
26041        * VM/CodeGenerator.cpp:
26042        (JSC::CodeGenerator::emitUnaryOp):
26043        * VM/CodeGenerator.h:
26044        (JSC::CodeGenerator::emitToJSNumber):
26045        (JSC::CodeGenerator::emitTypeOf):
26046        (JSC::CodeGenerator::emitGetPropertyNames):
26047        * VM/Machine.cpp:
26048        (JSC::Machine::privateExecute):
26049        * VM/Machine.h:
26050        * kjs/ResultType.h:
26051        (JSC::ResultType::isReusableNumber):
26052        (JSC::ResultType::toInt):
26053        * kjs/nodes.cpp:
26054        (JSC::UnaryOpNode::emitCode):
26055        (JSC::BinaryOpNode::emitCode):
26056        (JSC::EqualNode::emitCode):
26057        * masm/X86Assembler.h:
26058        (JSC::X86Assembler::):
26059        (JSC::X86Assembler::negl_r):
26060        (JSC::X86Assembler::xorpd_mr):
26061        * runtime/JSNumberCell.h:
26062        (JSC::JSNumberCell::JSNumberCell):
26063
260642008-10-29  Steve Falkenburg  <sfalken@apple.com>
26065
26066        <rdar://problem/6326563> Crash on launch
26067
26068        For Windows, export explicit functions rather than exporting data for atomicallyInitializedStaticMutex.
26069        
26070        Exporting data from a DLL on Windows requires specifying __declspec(dllimport) in the header used by
26071        callers, but __declspec(dllexport) when defined in the DLL implementation. By instead exporting
26072        the explicit lock/unlock functions, we can avoid this.
26073        
26074        Fixes a crash on launch, since we were previously erroneously exporting atomicallyInitializedStaticMutex as a function.
26075        
26076        Reviewed by Darin Adler.
26077
26078        * wtf/Threading.h:
26079        (WTF::lockAtomicallyInitializedStaticMutex):
26080        (WTF::unlockAtomicallyInitializedStaticMutex):
26081        * wtf/ThreadingWin.cpp:
26082        (WTF::lockAtomicallyInitializedStaticMutex):
26083        (WTF::unlockAtomicallyInitializedStaticMutex):
26084
260852008-10-29  Sam Weinig  <sam@webkit.org>
26086
26087        Reviewed by Oliver Hunt.
26088
26089        Remove direct use of PropertyMap.
26090
26091        * JavaScriptCore.exp:
26092        * runtime/JSObject.cpp:
26093        (JSC::JSObject::mark):
26094        (JSC::JSObject::put):
26095        (JSC::JSObject::deleteProperty):
26096        (JSC::JSObject::getPropertyAttributes):
26097        (JSC::JSObject::removeDirect):
26098        * runtime/JSObject.h:
26099        (JSC::JSObject::getDirect):
26100        (JSC::JSObject::getDirectLocation):
26101        (JSC::JSObject::hasCustomProperties):
26102        (JSC::JSObject::JSObject):
26103        (JSC::JSObject::putDirect):
26104        * runtime/PropertyMap.cpp:
26105        (JSC::PropertyMap::get):
26106        * runtime/PropertyMap.h:
26107        (JSC::PropertyMap::isEmpty):
26108        (JSC::PropertyMap::get):
26109        * runtime/StructureID.cpp:
26110        (JSC::StructureID::dumpStatistics):
26111        * runtime/StructureID.h:
26112        (JSC::StructureID::propertyStorageSize):
26113        (JSC::StructureID::get):
26114        (JSC::StructureID::put):
26115        (JSC::StructureID::remove):
26116        (JSC::StructureID::isEmpty):
26117
261182008-10-29  Sam Weinig  <sam@webkit.org>
26119
26120        Reviewed by Geoffrey Garen.
26121
26122        Rename and move the StructureID transition table to its own file.
26123
26124        * GNUmakefile.am:
26125        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
26126        * JavaScriptCore.xcodeproj/project.pbxproj:
26127        * runtime/StructureID.cpp:
26128        (JSC::StructureID::addPropertyTransition):
26129        * runtime/StructureID.h:
26130        (JSC::StructureID::):
26131        * runtime/StructureIDTransitionTable.h: Copied from runtime/StructureID.h.
26132        (JSC::StructureIDTransitionTableHash::hash):
26133        (JSC::StructureIDTransitionTableHash::equal):
26134
261352008-10-29  Sam Weinig  <sam@webkit.org>
26136
26137        Reviewed by Cameron Zwarich.
26138
26139        Fix for https://bugs.webkit.org/show_bug.cgi?id=21958
26140        Pack bits in StructureID to reduce the size of each StructureID by 2 words.
26141
26142        * runtime/PropertyMap.h:
26143        (JSC::PropertyMap::propertyMapSize):
26144        * runtime/StructureID.cpp:
26145        (JSC::StructureID::dumpStatistics): Add additional size statistics when dumping.
26146        (JSC::StructureID::StructureID):
26147        * runtime/StructureID.h:
26148
261492008-10-29  Kevin Ollivier  <kevino@theolliviers.com>
26150
26151        wx build fixes after addition of runtime and ImageBuffer changes.
26152
26153        * JavaScriptCoreSources.bkl:
26154        * jscore.bkl:
26155
261562008-10-29  Timothy Hatcher  <timothy@apple.com>
26157
26158        Emit the WillExecuteStatement debugger hook before the "else" body
26159        when there is no block for the "else" body. This allows breakpoints
26160        on those statements in the Web Inspector.
26161
26162        https://bugs.webkit.org/show_bug.cgi?id=21944
26163
26164        Reviewed by Maciej Stachowiak.
26165
26166        * kjs/nodes.cpp:
26167        (JSC::IfElseNode::emitCode): Emit the WillExecuteStatement
26168        debugger hook before the else node if isn't a block.
26169
261702008-10-29  Alexey Proskuryakov  <ap@webkit.org>
26171
26172        Build fix.
26173
26174        * JavaScriptCore.exp: Export HashTable::deleteTable().
26175
261762008-10-28  Alp Toker  <alp@nuanti.com>
26177
26178        Fix builddir != srcdir builds after kjs -> runtime breakage. Sources
26179        may now be generated in both kjs/ and runtime/.
26180
26181        Also sort the sources list for readability.
26182
26183        * GNUmakefile.am:
26184
261852008-10-28  Alp Toker  <alp@nuanti.com>
26186
26187        Reviewed by Cameron Zwarich.
26188
26189        Build fix attempt after kjs -> runtime rename.
26190
26191        * GNUmakefile.am:
26192
261932008-10-28  Cameron Zwarich  <zwarich@apple.com>
26194
26195        Not reviewed.
26196
26197        Remove a duplicate includes directory.
26198
26199        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
26200
262012008-10-28  Cameron Zwarich  <zwarich@apple.com>
26202
26203        Not reviewed.
26204
26205        Attempt to fix the Windows build.
26206
26207        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
26208        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
26209
262102008-10-28  Dan Bernstein  <mitz@apple.com>
26211
26212        Reviewed by Mark Rowe.
26213
26214        - export WTF::atomicallyInitializedStaticMutex
26215
26216        * JavaScriptCore.exp:
26217
262182008-10-28  Geoffrey Garen  <ggaren@apple.com>
26219
26220        Reviewed by Cameron Zwarich.
26221        
26222        Fixed CodeBlock dumping to accurately report constant register indices.
26223
26224        * VM/CodeBlock.cpp:
26225        (JSC::CodeBlock::dump):
26226
262272008-10-28  Cameron Zwarich  <zwarich@apple.com>
26228
26229        Not reviewed.
26230
26231        More Qt build fixes.
26232
26233        * JavaScriptCore.pri:
26234
262352008-10-28  Cameron Zwarich  <zwarich@apple.com>
26236
26237        Not reviewed.
26238
26239        Fix the Qt build, hopefully for real this time.
26240
26241        * JavaScriptCore.pri:
26242
262432008-10-28  Cameron Zwarich  <zwarich@apple.com>
26244
26245        Not reviewed.
26246
26247        Fix the Qt build.
26248
26249        * JavaScriptCore.pri:
26250
262512008-10-28  Cameron Zwarich  <zwarich@apple.com>
26252
26253        Not reviewed.
26254
26255        Fix the Windows build.
26256
26257        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
26258
262592008-10-28  Cameron Zwarich  <zwarich@apple.com>
26260
26261        Rubber-stamped by Sam Weinig.
26262
26263        Create a runtime directory in JavaScriptCore and begin moving files to
26264        it. This is the first step towards removing the kjs directory and
26265        placing files in more meaningful subdirectories of JavaScriptCore.
26266
26267        * API/JSBase.cpp:
26268        * API/JSCallbackConstructor.cpp:
26269        * API/JSCallbackConstructor.h:
26270        * API/JSCallbackFunction.cpp:
26271        * API/JSClassRef.cpp:
26272        * API/JSClassRef.h:
26273        * API/JSStringRefCF.cpp:
26274        * API/JSValueRef.cpp:
26275        * API/OpaqueJSString.cpp:
26276        * DerivedSources.make:
26277        * GNUmakefile.am:
26278        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
26279        * JavaScriptCore.xcodeproj/project.pbxproj:
26280        * kjs/AllInOneFile.cpp:
26281        * kjs/ArrayConstructor.cpp: Removed.
26282        * kjs/ArrayConstructor.h: Removed.
26283        * kjs/ArrayPrototype.cpp: Removed.
26284        * kjs/ArrayPrototype.h: Removed.
26285        * kjs/BooleanConstructor.cpp: Removed.
26286        * kjs/BooleanConstructor.h: Removed.
26287        * kjs/BooleanObject.cpp: Removed.
26288        * kjs/BooleanObject.h: Removed.
26289        * kjs/BooleanPrototype.cpp: Removed.
26290        * kjs/BooleanPrototype.h: Removed.
26291        * kjs/CallData.cpp: Removed.
26292        * kjs/CallData.h: Removed.
26293        * kjs/ClassInfo.h: Removed.
26294        * kjs/ConstructData.cpp: Removed.
26295        * kjs/ConstructData.h: Removed.
26296        * kjs/DateConstructor.cpp: Removed.
26297        * kjs/DateConstructor.h: Removed.
26298        * kjs/DateInstance.cpp: Removed.
26299        * kjs/DateInstance.h: Removed.
26300        * kjs/DateMath.cpp: Removed.
26301        * kjs/DateMath.h: Removed.
26302        * kjs/DatePrototype.cpp: Removed.
26303        * kjs/DatePrototype.h: Removed.
26304        * kjs/Error.cpp: Removed.
26305        * kjs/Error.h: Removed.
26306        * kjs/ErrorConstructor.cpp: Removed.
26307        * kjs/ErrorConstructor.h: Removed.
26308        * kjs/ErrorInstance.cpp: Removed.
26309        * kjs/ErrorInstance.h: Removed.
26310        * kjs/ErrorPrototype.cpp: Removed.
26311        * kjs/ErrorPrototype.h: Removed.
26312        * kjs/FunctionConstructor.cpp: Removed.
26313        * kjs/FunctionConstructor.h: Removed.
26314        * kjs/FunctionPrototype.cpp: Removed.
26315        * kjs/FunctionPrototype.h: Removed.
26316        * kjs/GlobalEvalFunction.cpp: Removed.
26317        * kjs/GlobalEvalFunction.h: Removed.
26318        * kjs/InternalFunction.cpp: Removed.
26319        * kjs/InternalFunction.h: Removed.
26320        * kjs/JSArray.cpp: Removed.
26321        * kjs/JSArray.h: Removed.
26322        * kjs/JSCell.cpp: Removed.
26323        * kjs/JSCell.h: Removed.
26324        * kjs/JSFunction.cpp: Removed.
26325        * kjs/JSFunction.h: Removed.
26326        * kjs/JSGlobalObject.cpp: Removed.
26327        * kjs/JSGlobalObject.h: Removed.
26328        * kjs/JSGlobalObjectFunctions.cpp: Removed.
26329        * kjs/JSGlobalObjectFunctions.h: Removed.
26330        * kjs/JSImmediate.cpp: Removed.
26331        * kjs/JSImmediate.h: Removed.
26332        * kjs/JSNotAnObject.cpp: Removed.
26333        * kjs/JSNotAnObject.h: Removed.
26334        * kjs/JSNumberCell.cpp: Removed.
26335        * kjs/JSNumberCell.h: Removed.
26336        * kjs/JSObject.cpp: Removed.
26337        * kjs/JSObject.h: Removed.
26338        * kjs/JSString.cpp: Removed.
26339        * kjs/JSString.h: Removed.
26340        * kjs/JSValue.cpp: Removed.
26341        * kjs/JSValue.h: Removed.
26342        * kjs/JSVariableObject.cpp: Removed.
26343        * kjs/JSVariableObject.h: Removed.
26344        * kjs/JSWrapperObject.cpp: Removed.
26345        * kjs/JSWrapperObject.h: Removed.
26346        * kjs/MathObject.cpp: Removed.
26347        * kjs/MathObject.h: Removed.
26348        * kjs/NativeErrorConstructor.cpp: Removed.
26349        * kjs/NativeErrorConstructor.h: Removed.
26350        * kjs/NativeErrorPrototype.cpp: Removed.
26351        * kjs/NativeErrorPrototype.h: Removed.
26352        * kjs/NumberConstructor.cpp: Removed.
26353        * kjs/NumberConstructor.h: Removed.
26354        * kjs/NumberObject.cpp: Removed.
26355        * kjs/NumberObject.h: Removed.
26356        * kjs/NumberPrototype.cpp: Removed.
26357        * kjs/NumberPrototype.h: Removed.
26358        * kjs/ObjectConstructor.cpp: Removed.
26359        * kjs/ObjectConstructor.h: Removed.
26360        * kjs/ObjectPrototype.cpp: Removed.
26361        * kjs/ObjectPrototype.h: Removed.
26362        * kjs/PropertyMap.cpp: Removed.
26363        * kjs/PropertyMap.h: Removed.
26364        * kjs/PropertySlot.cpp: Removed.
26365        * kjs/PropertySlot.h: Removed.
26366        * kjs/PrototypeFunction.cpp: Removed.
26367        * kjs/PrototypeFunction.h: Removed.
26368        * kjs/PutPropertySlot.h: Removed.
26369        * kjs/SmallStrings.cpp: Removed.
26370        * kjs/SmallStrings.h: Removed.
26371        * kjs/StringConstructor.cpp: Removed.
26372        * kjs/StringConstructor.h: Removed.
26373        * kjs/StringObject.cpp: Removed.
26374        * kjs/StringObject.h: Removed.
26375        * kjs/StringObjectThatMasqueradesAsUndefined.h: Removed.
26376        * kjs/StringPrototype.cpp: Removed.
26377        * kjs/StringPrototype.h: Removed.
26378        * kjs/StructureID.cpp: Removed.
26379        * kjs/StructureID.h: Removed.
26380        * kjs/completion.h:
26381        * kjs/interpreter.h:
26382        * runtime: Added.
26383        * runtime/ArrayConstructor.cpp: Copied from kjs/ArrayConstructor.cpp.
26384        * runtime/ArrayConstructor.h: Copied from kjs/ArrayConstructor.h.
26385        * runtime/ArrayPrototype.cpp: Copied from kjs/ArrayPrototype.cpp.
26386        * runtime/ArrayPrototype.h: Copied from kjs/ArrayPrototype.h.
26387        * runtime/BooleanConstructor.cpp: Copied from kjs/BooleanConstructor.cpp.
26388        * runtime/BooleanConstructor.h: Copied from kjs/BooleanConstructor.h.
26389        * runtime/BooleanObject.cpp: Copied from kjs/BooleanObject.cpp.
26390        * runtime/BooleanObject.h: Copied from kjs/BooleanObject.h.
26391        * runtime/BooleanPrototype.cpp: Copied from kjs/BooleanPrototype.cpp.
26392        * runtime/BooleanPrototype.h: Copied from kjs/BooleanPrototype.h.
26393        * runtime/CallData.cpp: Copied from kjs/CallData.cpp.
26394        * runtime/CallData.h: Copied from kjs/CallData.h.
26395        * runtime/ClassInfo.h: Copied from kjs/ClassInfo.h.
26396        * runtime/ConstructData.cpp: Copied from kjs/ConstructData.cpp.
26397        * runtime/ConstructData.h: Copied from kjs/ConstructData.h.
26398        * runtime/DateConstructor.cpp: Copied from kjs/DateConstructor.cpp.
26399        * runtime/DateConstructor.h: Copied from kjs/DateConstructor.h.
26400        * runtime/DateInstance.cpp: Copied from kjs/DateInstance.cpp.
26401        * runtime/DateInstance.h: Copied from kjs/DateInstance.h.
26402        * runtime/DateMath.cpp: Copied from kjs/DateMath.cpp.
26403        * runtime/DateMath.h: Copied from kjs/DateMath.h.
26404        * runtime/DatePrototype.cpp: Copied from kjs/DatePrototype.cpp.
26405        * runtime/DatePrototype.h: Copied from kjs/DatePrototype.h.
26406        * runtime/Error.cpp: Copied from kjs/Error.cpp.
26407        * runtime/Error.h: Copied from kjs/Error.h.
26408        * runtime/ErrorConstructor.cpp: Copied from kjs/ErrorConstructor.cpp.
26409        * runtime/ErrorConstructor.h: Copied from kjs/ErrorConstructor.h.
26410        * runtime/ErrorInstance.cpp: Copied from kjs/ErrorInstance.cpp.
26411        * runtime/ErrorInstance.h: Copied from kjs/ErrorInstance.h.
26412        * runtime/ErrorPrototype.cpp: Copied from kjs/ErrorPrototype.cpp.
26413        * runtime/ErrorPrototype.h: Copied from kjs/ErrorPrototype.h.
26414        * runtime/FunctionConstructor.cpp: Copied from kjs/FunctionConstructor.cpp.
26415        * runtime/FunctionConstructor.h: Copied from kjs/FunctionConstructor.h.
26416        * runtime/FunctionPrototype.cpp: Copied from kjs/FunctionPrototype.cpp.
26417        * runtime/FunctionPrototype.h: Copied from kjs/FunctionPrototype.h.
26418        * runtime/GlobalEvalFunction.cpp: Copied from kjs/GlobalEvalFunction.cpp.
26419        * runtime/GlobalEvalFunction.h: Copied from kjs/GlobalEvalFunction.h.
26420        * runtime/InternalFunction.cpp: Copied from kjs/InternalFunction.cpp.
26421        * runtime/InternalFunction.h: Copied from kjs/InternalFunction.h.
26422        * runtime/JSArray.cpp: Copied from kjs/JSArray.cpp.
26423        * runtime/JSArray.h: Copied from kjs/JSArray.h.
26424        * runtime/JSCell.cpp: Copied from kjs/JSCell.cpp.
26425        * runtime/JSCell.h: Copied from kjs/JSCell.h.
26426        * runtime/JSFunction.cpp: Copied from kjs/JSFunction.cpp.
26427        * runtime/JSFunction.h: Copied from kjs/JSFunction.h.
26428        * runtime/JSGlobalObject.cpp: Copied from kjs/JSGlobalObject.cpp.
26429        * runtime/JSGlobalObject.h: Copied from kjs/JSGlobalObject.h.
26430        * runtime/JSGlobalObjectFunctions.cpp: Copied from kjs/JSGlobalObjectFunctions.cpp.
26431        * runtime/JSGlobalObjectFunctions.h: Copied from kjs/JSGlobalObjectFunctions.h.
26432        * runtime/JSImmediate.cpp: Copied from kjs/JSImmediate.cpp.
26433        * runtime/JSImmediate.h: Copied from kjs/JSImmediate.h.
26434        * runtime/JSNotAnObject.cpp: Copied from kjs/JSNotAnObject.cpp.
26435        * runtime/JSNotAnObject.h: Copied from kjs/JSNotAnObject.h.
26436        * runtime/JSNumberCell.cpp: Copied from kjs/JSNumberCell.cpp.
26437        * runtime/JSNumberCell.h: Copied from kjs/JSNumberCell.h.
26438        * runtime/JSObject.cpp: Copied from kjs/JSObject.cpp.
26439        * runtime/JSObject.h: Copied from kjs/JSObject.h.
26440        * runtime/JSString.cpp: Copied from kjs/JSString.cpp.
26441        * runtime/JSString.h: Copied from kjs/JSString.h.
26442        * runtime/JSValue.cpp: Copied from kjs/JSValue.cpp.
26443        * runtime/JSValue.h: Copied from kjs/JSValue.h.
26444        * runtime/JSVariableObject.cpp: Copied from kjs/JSVariableObject.cpp.
26445        * runtime/JSVariableObject.h: Copied from kjs/JSVariableObject.h.
26446        * runtime/JSWrapperObject.cpp: Copied from kjs/JSWrapperObject.cpp.
26447        * runtime/JSWrapperObject.h: Copied from kjs/JSWrapperObject.h.
26448        * runtime/MathObject.cpp: Copied from kjs/MathObject.cpp.
26449        * runtime/MathObject.h: Copied from kjs/MathObject.h.
26450        * runtime/NativeErrorConstructor.cpp: Copied from kjs/NativeErrorConstructor.cpp.
26451        * runtime/NativeErrorConstructor.h: Copied from kjs/NativeErrorConstructor.h.
26452        * runtime/NativeErrorPrototype.cpp: Copied from kjs/NativeErrorPrototype.cpp.
26453        * runtime/NativeErrorPrototype.h: Copied from kjs/NativeErrorPrototype.h.
26454        * runtime/NumberConstructor.cpp: Copied from kjs/NumberConstructor.cpp.
26455        * runtime/NumberConstructor.h: Copied from kjs/NumberConstructor.h.
26456        * runtime/NumberObject.cpp: Copied from kjs/NumberObject.cpp.
26457        * runtime/NumberObject.h: Copied from kjs/NumberObject.h.
26458        * runtime/NumberPrototype.cpp: Copied from kjs/NumberPrototype.cpp.
26459        * runtime/NumberPrototype.h: Copied from kjs/NumberPrototype.h.
26460        * runtime/ObjectConstructor.cpp: Copied from kjs/ObjectConstructor.cpp.
26461        * runtime/ObjectConstructor.h: Copied from kjs/ObjectConstructor.h.
26462        * runtime/ObjectPrototype.cpp: Copied from kjs/ObjectPrototype.cpp.
26463        * runtime/ObjectPrototype.h: Copied from kjs/ObjectPrototype.h.
26464        * runtime/PropertyMap.cpp: Copied from kjs/PropertyMap.cpp.
26465        * runtime/PropertyMap.h: Copied from kjs/PropertyMap.h.
26466        * runtime/PropertySlot.cpp: Copied from kjs/PropertySlot.cpp.
26467        * runtime/PropertySlot.h: Copied from kjs/PropertySlot.h.
26468        * runtime/PrototypeFunction.cpp: Copied from kjs/PrototypeFunction.cpp.
26469        * runtime/PrototypeFunction.h: Copied from kjs/PrototypeFunction.h.
26470        * runtime/PutPropertySlot.h: Copied from kjs/PutPropertySlot.h.
26471        * runtime/SmallStrings.cpp: Copied from kjs/SmallStrings.cpp.
26472        * runtime/SmallStrings.h: Copied from kjs/SmallStrings.h.
26473        * runtime/StringConstructor.cpp: Copied from kjs/StringConstructor.cpp.
26474        * runtime/StringConstructor.h: Copied from kjs/StringConstructor.h.
26475        * runtime/StringObject.cpp: Copied from kjs/StringObject.cpp.
26476        * runtime/StringObject.h: Copied from kjs/StringObject.h.
26477        * runtime/StringObjectThatMasqueradesAsUndefined.h: Copied from kjs/StringObjectThatMasqueradesAsUndefined.h.
26478        * runtime/StringPrototype.cpp: Copied from kjs/StringPrototype.cpp.
26479        * runtime/StringPrototype.h: Copied from kjs/StringPrototype.h.
26480        * runtime/StructureID.cpp: Copied from kjs/StructureID.cpp.
26481        * runtime/StructureID.h: Copied from kjs/StructureID.h.
26482
264832008-10-28  Geoffrey Garen  <ggaren@apple.com>
26484
26485        Reviewed by Sam Weinig.
26486        
26487        Fixed https://bugs.webkit.org/show_bug.cgi?id=21919
26488        Sampler reports bogus time in op_enter during 3d-raytrace.js
26489        
26490        Fixed a bug where we would pass the incorrect Instruction* during some
26491        parts of CTI codegen.
26492
26493        * VM/CTI.cpp:
26494        (JSC::CTI::privateCompileMainPass):
26495        (JSC::CTI::privateCompileSlowCases):
26496        * VM/SamplingTool.cpp:
26497        (JSC::SamplingTool::run):
26498        * wtf/Platform.h:
26499
265002008-10-28  Kevin McCullough  <kmccullough@apple.com>
26501
26502        Reviewed by Dan Bernstein.
26503
26504        -Removed unused includes.
26505        Apparent .4% speedup in Sunspider
26506
26507        * kjs/JSObject.cpp:
26508        * kjs/interpreter.cpp:
26509
265102008-10-28  Alp Toker  <alp@nuanti.com>
26511
26512        Include copyright license files in the autotools dist target.
26513
26514        Change suggested by Mike Hommey.
26515
26516        * GNUmakefile.am:
26517
265182008-10-27  Geoffrey Garen  <ggaren@apple.com>
26519
26520        Reviewed by Maciej Stachowiak.
26521        
26522        Stop discarding CodeBlock samples that can't be charged to a specific
26523        opcode. Instead, charge the relevant CodeBlock, and provide a footnote
26524        explaining the situation.
26525        
26526        This will help us tell which CodeBlocks are hot, even if we can't
26527        identify specific lines of code within the CodeBlocks.
26528
26529        * VM/SamplingTool.cpp:
26530        (JSC::ScopeSampleRecord::sample):
26531        (JSC::compareScopeSampleRecords):
26532        (JSC::SamplingTool::dump):
26533
26534        * VM/SamplingTool.h:
26535        (JSC::ScopeSampleRecord::ScopeSampleRecord):
26536        (JSC::ScopeSampleRecord::~ScopeSampleRecord):
26537
265382008-10-27  Geoffrey Garen  <ggaren@apple.com>
26539
26540        Reviewed by Sam Weinig.
26541        
26542        Added a mutex around the SamplingTool's ScopeNode* map, to solve a crash
26543        when sampling the v8 tests.
26544
26545        * VM/SamplingTool.cpp:
26546        (JSC::SamplingTool::run):
26547        (JSC::SamplingTool::notifyOfScope):
26548        * VM/SamplingTool.h: Since new ScopeNodes can be created after
26549        the SamplingTools has begun sampling, reads and writes to / from the
26550        map need to be synchronized. Shark says this doesn't measurably increase
26551        sampling overhead.
26552
265532008-10-25  Geoffrey Garen  <ggaren@apple.com>
26554
26555        Not reviewed.
26556        
26557        Try to fix Windows build.
26558
26559        * VM/Machine.cpp:
26560        (JSC::Machine::privateExecute): Provide a dummy value to the
26561        HostCallRecord in CTI non-sampling builds, to silence compiler warning.
26562
265632008-10-25  Geoffrey Garen  <ggaren@apple.com>
26564
26565        Not reviewed.
26566        
26567        Try to fix Windows build.
26568
26569        * VM/SamplingTool.h:
26570        (JSC::SamplingTool::encodeSample): Explicitly cast bool to int, to
26571        silence compiler warning.
26572
265732008-10-25  Geoffrey Garen  <ggaren@apple.com>
26574
26575        Reviewed by Sam Weinig, with Gavin Barraclough's help.
26576        
26577        Fixed Sampling Tool:
26578            - Made CodeBlock sampling work with CTI
26579            - Improved accuracy by unifying most sampling data into a single
26580              32bit word, which can be written / read atomically.
26581            - Split out three different #ifdefs for modularity: OPCODE_SAMPLING;
26582              CODEBLOCK_SAMPLING; OPCODE_STATS.
26583            - Improved reporting clarity
26584            - Refactored for code clarity
26585
26586        * JavaScriptCore.exp: Exported another symbol.
26587
26588        * VM/CTI.cpp:
26589        (JSC::CTI::emitCTICall):
26590        (JSC::CTI::compileOpCall):
26591        (JSC::CTI::emitSlowScriptCheck):
26592        (JSC::CTI::compileBinaryArithOpSlowCase):
26593        (JSC::CTI::privateCompileMainPass):
26594        (JSC::CTI::privateCompileSlowCases):
26595        (JSC::CTI::privateCompile):
26596        * VM/CTI.h: Updated CTI codegen to use the unified SamplingTool interface
26597        for encoding samples. (This required passing the current vPC to a lot
26598        more functions, since the unified interface samples the current vPC.)
26599        Added hooks for writing the current CodeBlock* on function entry and
26600        after a function call, for the sake of the CodeBlock sampler. Removed
26601        obsolete hook for clearing the current sample inside op_end. Also removed
26602        the custom enum used to differentiate flavors of op_call, since the
26603        OpcodeID enum works just as well. (This was important in an earlier
26604        version of the patch, but now it's just cleanup.)
26605
26606        * VM/CodeBlock.cpp:
26607        (JSC::CodeBlock::lineNumberForVPC):
26608        * VM/CodeBlock.h: Upated for refactored #ifdefs. Changed lineNumberForVPC
26609        to be robust against vPCs not recorded for exception handling, since
26610        the Sampler may ask for an arbitrary vPC.
26611
26612        * VM/Machine.cpp:
26613        (JSC::Machine::execute):
26614        (JSC::Machine::privateExecute):
26615        (JSC::Machine::cti_op_call_NotJSFunction):
26616        (JSC::Machine::cti_op_construct_NotJSConstruct):
26617        * VM/Machine.h:
26618        (JSC::Machine::setSampler):
26619        (JSC::Machine::sampler):
26620        (JSC::Machine::jitCodeBuffer): Upated for refactored #ifdefs. Changed
26621        Machine to use SamplingTool helper objects to record movement in and
26622        out of host code. This makes samples a bit more precise.
26623        
26624        * VM/Opcode.cpp:
26625        (JSC::OpcodeStats::~OpcodeStats):
26626        * VM/Opcode.h: Upated for refactored #ifdefs. Added a little more padding,
26627        to accomodate our more verbose opcode names.
26628
26629        * VM/SamplingTool.cpp:
26630        (JSC::ScopeSampleRecord::sample): Only count a sample toward our total
26631        if we actually record it. This solves cases where a CodeBlock will
26632        claim to have been sampled many times, with reported samples that don't
26633        match.
26634
26635        (JSC::SamplingTool::run): Read the current sample into a Sample helper
26636        object, to ensure that the data doesn't change while we're analyzing it,
26637        and to help decode the data. Only access the CodeBlock sampling hash
26638        table if CodeBlock sampling has been enabled, so non-CodeBlock sampling
26639        runs can operate with even less overhead.
26640
26641        (JSC::SamplingTool::dump): I reorganized this code a lot to print the
26642        most important info at the top, print as a table, annotate and document
26643        the stuff I didn't understand when I started, etc.
26644
26645        * VM/SamplingTool.h: New helper classes, described above.
26646
26647        * kjs/Parser.h:
26648        * kjs/Shell.cpp:
26649        (runWithScripts):
26650        * kjs/nodes.cpp:
26651        (JSC::ScopeNode::ScopeNode): Updated for new sampling APIs.
26652
26653        * wtf/Platform.h: Moved sampling #defines here, since our custom is to
26654        put ENABLE #defines into Platform.h. Made explicit the fact that
26655        CODEBLOCK_SAMPLING depends on OPCODE_SAMPLING.
26656
266572008-10-25  Jan Michael Alonzo  <jmalonzo@webkit.org>
26658
26659        JSC Build fix, not reviewed.
26660
26661        * VM/CTI.cpp: add missing include stdio.h for debug builds
26662
266632008-10-24  Eric Seidel  <eric@webkit.org>
26664
26665        Reviewed by Darin Adler.
26666        
26667        Get rid of a bonus ASSERT when using a null string as a regexp.
26668        Specifically calling: RegularExpression::match() with String::empty()
26669        will hit this ASSERT.
26670        Chromium hits this, but I don't know of any way to make a layout test.
26671
26672        * pcre/pcre_exec.cpp:
26673        (jsRegExpExecute):
26674
266752008-10-24  Alexey Proskuryakov  <ap@webkit.org>
26676
26677        Suggested and rubber-stamped by Geoff Garen.
26678
26679        Fix a crash when opening Font Picker.
26680
26681        The change also hopefully fixes this bug, which I could never reproduce:
26682        https://bugs.webkit.org/show_bug.cgi?id=20241
26683        <rdar://problem/6290576> Safari crashes at JSValueUnprotect() when fontpicker view close
26684
26685        * API/JSContextRef.cpp: (JSContextGetGlobalObject): Use lexical global object instead of
26686        dynamic one.
26687
266882008-10-24  Cameron Zwarich  <zwarich@apple.com>
26689
26690        Reviewed by Geoff Garen.
26691
26692        Remove ScopeChainNode::bottom() and inline it into its only caller,
26693        ScopeChainnode::globalObject().
26694
26695        * kjs/JSGlobalObject.h:
26696        (JSC::ScopeChainNode::globalObject):
26697        * kjs/ScopeChain.h:
26698        (JSC::ScopeChain::bottom):
26699
267002008-10-24  Cameron Zwarich  <zwarich@apple.com>
26701
26702        Reviewed by Maciej Stachowiak.
26703
26704        Bug 21862: Create JSFunction prototype property lazily
26705        <https://bugs.webkit.org/show_bug.cgi?id=21862>
26706
26707        This is a 1.5% speedup on SunSpider and a 1.4% speedup on the V8
26708        benchmark suite, including a 3.8% speedup on Earley-Boyer.
26709
26710        * kjs/JSFunction.cpp:
26711        (JSC::JSFunction::getOwnPropertySlot):
26712        * kjs/nodes.cpp:
26713        (JSC::FuncDeclNode::makeFunction):
26714        (JSC::FuncExprNode::makeFunction):
26715
267162008-10-24  Greg Bolsinga  <bolsinga@apple.com>
26717
26718        Reviewed by Sam Weinig.
26719
26720        https://bugs.webkit.org/show_bug.cgi?id=21475
26721        
26722        Provide support for the Geolocation API
26723        
26724        http://dev.w3.org/geo/api/spec-source.html
26725
26726        * wtf/Platform.h: ENABLE_GEOLOCATION defaults to 0
26727
267282008-10-24  Darin Adler  <darin@apple.com>
26729
26730        - finish rolling out https://bugs.webkit.org/show_bug.cgi?id=21732
26731
26732        * API/APICast.h:
26733        * API/JSCallbackConstructor.h:
26734        * API/JSCallbackFunction.cpp:
26735        * API/JSCallbackFunction.h:
26736        * API/JSCallbackObject.h:
26737        * API/JSCallbackObjectFunctions.h:
26738        * API/JSContextRef.cpp:
26739        * API/JSObjectRef.cpp:
26740        * API/JSValueRef.cpp:
26741        * VM/CTI.cpp:
26742        * VM/CTI.h:
26743        * VM/CodeBlock.cpp:
26744        * VM/CodeBlock.h:
26745        * VM/CodeGenerator.cpp:
26746        * VM/CodeGenerator.h:
26747        * VM/ExceptionHelpers.cpp:
26748        * VM/ExceptionHelpers.h:
26749        * VM/JSPropertyNameIterator.cpp:
26750        * VM/JSPropertyNameIterator.h:
26751        * VM/Machine.cpp:
26752        * VM/Machine.h:
26753        * VM/Register.h:
26754        * kjs/ArgList.cpp:
26755        * kjs/ArgList.h:
26756        * kjs/Arguments.cpp:
26757        * kjs/Arguments.h:
26758        * kjs/ArrayConstructor.cpp:
26759        * kjs/ArrayPrototype.cpp:
26760        * kjs/BooleanConstructor.cpp:
26761        * kjs/BooleanConstructor.h:
26762        * kjs/BooleanObject.h:
26763        * kjs/BooleanPrototype.cpp:
26764        * kjs/CallData.cpp:
26765        * kjs/CallData.h:
26766        * kjs/ConstructData.cpp:
26767        * kjs/ConstructData.h:
26768        * kjs/DateConstructor.cpp:
26769        * kjs/DateInstance.h:
26770        * kjs/DatePrototype.cpp:
26771        * kjs/DatePrototype.h:
26772        * kjs/DebuggerCallFrame.cpp:
26773        * kjs/DebuggerCallFrame.h:
26774        * kjs/ErrorConstructor.cpp:
26775        * kjs/ErrorPrototype.cpp:
26776        * kjs/ExecState.cpp:
26777        * kjs/ExecState.h:
26778        * kjs/FunctionConstructor.cpp:
26779        * kjs/FunctionPrototype.cpp:
26780        * kjs/FunctionPrototype.h:
26781        * kjs/GetterSetter.cpp:
26782        * kjs/GetterSetter.h:
26783        * kjs/InternalFunction.h:
26784        * kjs/JSActivation.cpp:
26785        * kjs/JSActivation.h:
26786        * kjs/JSArray.cpp:
26787        * kjs/JSArray.h:
26788        * kjs/JSCell.cpp:
26789        * kjs/JSCell.h:
26790        * kjs/JSFunction.cpp:
26791        * kjs/JSFunction.h:
26792        * kjs/JSGlobalData.h:
26793        * kjs/JSGlobalObject.cpp:
26794        * kjs/JSGlobalObject.h:
26795        * kjs/JSGlobalObjectFunctions.cpp:
26796        * kjs/JSGlobalObjectFunctions.h:
26797        * kjs/JSImmediate.cpp:
26798        * kjs/JSImmediate.h:
26799        * kjs/JSNotAnObject.cpp:
26800        * kjs/JSNotAnObject.h:
26801        * kjs/JSNumberCell.cpp:
26802        * kjs/JSNumberCell.h:
26803        * kjs/JSObject.cpp:
26804        * kjs/JSObject.h:
26805        * kjs/JSStaticScopeObject.cpp:
26806        * kjs/JSStaticScopeObject.h:
26807        * kjs/JSString.cpp:
26808        * kjs/JSString.h:
26809        * kjs/JSValue.h:
26810        * kjs/JSVariableObject.h:
26811        * kjs/JSWrapperObject.h:
26812        * kjs/MathObject.cpp:
26813        * kjs/MathObject.h:
26814        * kjs/NativeErrorConstructor.cpp:
26815        * kjs/NumberConstructor.cpp:
26816        * kjs/NumberConstructor.h:
26817        * kjs/NumberObject.cpp:
26818        * kjs/NumberObject.h:
26819        * kjs/NumberPrototype.cpp:
26820        * kjs/ObjectConstructor.cpp:
26821        * kjs/ObjectPrototype.cpp:
26822        * kjs/ObjectPrototype.h:
26823        * kjs/PropertyMap.h:
26824        * kjs/PropertySlot.cpp:
26825        * kjs/PropertySlot.h:
26826        * kjs/RegExpConstructor.cpp:
26827        * kjs/RegExpConstructor.h:
26828        * kjs/RegExpMatchesArray.h:
26829        * kjs/RegExpObject.cpp:
26830        * kjs/RegExpObject.h:
26831        * kjs/RegExpPrototype.cpp:
26832        * kjs/Shell.cpp:
26833        * kjs/StringConstructor.cpp:
26834        * kjs/StringObject.cpp:
26835        * kjs/StringObject.h:
26836        * kjs/StringObjectThatMasqueradesAsUndefined.h:
26837        * kjs/StringPrototype.cpp:
26838        * kjs/StructureID.cpp:
26839        * kjs/StructureID.h:
26840        * kjs/collector.cpp:
26841        * kjs/collector.h:
26842        * kjs/completion.h:
26843        * kjs/grammar.y:
26844        * kjs/interpreter.cpp:
26845        * kjs/interpreter.h:
26846        * kjs/lookup.cpp:
26847        * kjs/lookup.h:
26848        * kjs/nodes.h:
26849        * kjs/operations.cpp:
26850        * kjs/operations.h:
26851        * kjs/protect.h:
26852        * profiler/ProfileGenerator.cpp:
26853        * profiler/Profiler.cpp:
26854        * profiler/Profiler.h:
26855        Use JSValue* instead of JSValuePtr.
26856
268572008-10-24  David Kilzer  <ddkilzer@apple.com>
26858
26859        Rolled out r37840.
26860
26861        * wtf/Platform.h:
26862
268632008-10-23  Greg Bolsinga  <bolsinga@apple.com>
26864
26865        Reviewed by Sam Weinig.
26866
26867        https://bugs.webkit.org/show_bug.cgi?id=21475
26868        
26869        Provide support for the Geolocation API
26870        
26871        http://dev.w3.org/geo/api/spec-source.html
26872
26873        * wtf/Platform.h: ENABLE_GEOLOCATION defaults to 0
26874
268752008-10-23  David Kilzer  <ddkilzer@apple.com>
26876
26877        Bug 21832: Fix scripts using 'new File::Temp' for Perl 5.10
26878
26879        <https://bugs.webkit.org/show_bug.cgi?id=21832>
26880
26881        Reviewed by Sam Weinig.
26882
26883        * pcre/dftables: Use imported tempfile() from File::Temp instead of
26884        'new File::Temp' to make the script work with Perl 5.10.
26885
268862008-10-23  Gavin Barraclough  <barraclough@apple.com>
26887
26888        Reviewed by Oliver Hunt.
26889
26890        Fix hideous pathological case performance when looking up repatch info, bug #21727.
26891
26892        When repatching JIT code to optimize we look up records providing information about
26893        the generated code (also used to track recsources used in linking to be later released). 
26894        The lookup was being performed using a linear scan of all such records.
26895
26896        (1) Split up the different types of reptach information.  This means we can search them
26897            separately, and in some cases should reduce their size.
26898        (2) In the case of property accesses, search with a binary chop over the data.
26899        (3) In the case of calls, pass a pointer to the repatch info into the relink function.
26900
26901        * VM/CTI.cpp:
26902        (JSC::CTI::CTI):
26903        (JSC::CTI::compileOpCall):
26904        (JSC::CTI::privateCompileMainPass):
26905        (JSC::CTI::privateCompileSlowCases):
26906        (JSC::CTI::privateCompile):
26907        (JSC::CTI::unlinkCall):
26908        (JSC::CTI::linkCall):
26909        * VM/CTI.h:
26910        * VM/CodeBlock.cpp:
26911        (JSC::CodeBlock::dump):
26912        (JSC::CodeBlock::~CodeBlock):
26913        (JSC::CodeBlock::unlinkCallers):
26914        (JSC::CodeBlock::derefStructureIDs):
26915        * VM/CodeBlock.h:
26916        (JSC::StructureStubInfo::StructureStubInfo):
26917        (JSC::CallLinkInfo::CallLinkInfo):
26918        (JSC::CallLinkInfo::setUnlinked):
26919        (JSC::CallLinkInfo::isLinked):
26920        (JSC::getStructureStubInfoReturnLocation):
26921        (JSC::binaryChop):
26922        (JSC::CodeBlock::addCaller):
26923        (JSC::CodeBlock::getStubInfo):
26924        * VM/CodeGenerator.cpp:
26925        (JSC::CodeGenerator::emitResolve):
26926        (JSC::CodeGenerator::emitGetById):
26927        (JSC::CodeGenerator::emitPutById):
26928        (JSC::CodeGenerator::emitCall):
26929        (JSC::CodeGenerator::emitConstruct):
26930        * VM/Machine.cpp:
26931        (JSC::Machine::cti_vm_lazyLinkCall):
26932
269332008-10-23  Peter Kasting  <pkasting@google.com>
26934
26935        Reviewed by Adam Roben.
26936
26937        https://bugs.webkit.org/show_bug.cgi?id=21833
26938        Place JavaScript Debugger hooks under #if ENABLE(JAVASCRIPT_DEBUGGER).
26939
26940        * wtf/Platform.h:
26941
269422008-10-23  David Kilzer  <ddkilzer@apple.com>
26943
26944        Bug 21831: Fix create_hash_table for Perl 5.10
26945
26946        <https://bugs.webkit.org/show_bug.cgi?id=21831>
26947
26948        Reviewed by Sam Weinig.
26949
26950        * kjs/create_hash_table: Escaped square brackets so that Perl 5.10
26951        doesn't try to use @nameEntries.
26952
269532008-10-23  Darin Adler  <darin@apple.com>
26954
26955        - roll out https://bugs.webkit.org/show_bug.cgi?id=21732
26956          to remove the JSValuePtr class, to fix two problems
26957
26958            1) slowness under MSVC, since it doesn't handle a
26959               class with a single pointer in it as efficiently
26960               as a pointer
26961
26962            2) uninitialized pointers in Vector
26963
26964        * JavaScriptCore.exp: Updated.
26965
26966        * API/APICast.h:
26967        (toRef):
26968        * VM/CTI.cpp:
26969        (JSC::CTI::asInteger):
26970        * VM/CodeGenerator.cpp:
26971        (JSC::CodeGenerator::addConstant):
26972        * VM/CodeGenerator.h:
26973        (JSC::CodeGenerator::JSValueHashTraits::constructDeletedValue):
26974        (JSC::CodeGenerator::JSValueHashTraits::isDeletedValue):
26975        * VM/Machine.cpp:
26976        (JSC::Machine::cti_op_add):
26977        (JSC::Machine::cti_op_pre_inc):
26978        (JSC::Machine::cti_op_get_by_id):
26979        (JSC::Machine::cti_op_get_by_id_second):
26980        (JSC::Machine::cti_op_get_by_id_generic):
26981        (JSC::Machine::cti_op_get_by_id_fail):
26982        (JSC::Machine::cti_op_instanceof):
26983        (JSC::Machine::cti_op_del_by_id):
26984        (JSC::Machine::cti_op_mul):
26985        (JSC::Machine::cti_op_call_NotJSFunction):
26986        (JSC::Machine::cti_op_resolve):
26987        (JSC::Machine::cti_op_construct_NotJSConstruct):
26988        (JSC::Machine::cti_op_get_by_val):
26989        (JSC::Machine::cti_op_sub):
26990        (JSC::Machine::cti_op_lesseq):
26991        (JSC::Machine::cti_op_negate):
26992        (JSC::Machine::cti_op_resolve_base):
26993        (JSC::Machine::cti_op_resolve_skip):
26994        (JSC::Machine::cti_op_resolve_global):
26995        (JSC::Machine::cti_op_div):
26996        (JSC::Machine::cti_op_pre_dec):
26997        (JSC::Machine::cti_op_not):
26998        (JSC::Machine::cti_op_eq):
26999        (JSC::Machine::cti_op_lshift):
27000        (JSC::Machine::cti_op_bitand):
27001        (JSC::Machine::cti_op_rshift):
27002        (JSC::Machine::cti_op_bitnot):
27003        (JSC::Machine::cti_op_mod):
27004        (JSC::Machine::cti_op_less):
27005        (JSC::Machine::cti_op_neq):
27006        (JSC::Machine::cti_op_urshift):
27007        (JSC::Machine::cti_op_bitxor):
27008        (JSC::Machine::cti_op_bitor):
27009        (JSC::Machine::cti_op_call_eval):
27010        (JSC::Machine::cti_op_throw):
27011        (JSC::Machine::cti_op_next_pname):
27012        (JSC::Machine::cti_op_typeof):
27013        (JSC::Machine::cti_op_is_undefined):
27014        (JSC::Machine::cti_op_is_boolean):
27015        (JSC::Machine::cti_op_is_number):
27016        (JSC::Machine::cti_op_is_string):
27017        (JSC::Machine::cti_op_is_object):
27018        (JSC::Machine::cti_op_is_function):
27019        (JSC::Machine::cti_op_stricteq):
27020        (JSC::Machine::cti_op_nstricteq):
27021        (JSC::Machine::cti_op_to_jsnumber):
27022        (JSC::Machine::cti_op_in):
27023        (JSC::Machine::cti_op_del_by_val):
27024        (JSC::Machine::cti_vm_throw):
27025        Removed calls to payload functions.
27026
27027        * VM/Register.h:
27028        (JSC::Register::Register): Removed overload for JSCell and call
27029        to payload function.
27030
27031        * kjs/JSCell.h: Changed JSCell to derive from JSValue again.
27032        Removed JSValuePtr constructor.
27033        (JSC::asCell): Changed cast from reinterpret_cast to static_cast.
27034
27035        * kjs/JSImmediate.h: Removed JSValuePtr class. Added typedef back.
27036
27037        * kjs/JSValue.h:
27038        (JSC::JSValue::JSValue): Added empty protected inline constructor back.
27039        (JSC::JSValue::~JSValue): Same for destructor.
27040        Removed == and != operator for JSValuePtr.
27041
27042        * kjs/PropertySlot.h:
27043        (JSC::PropertySlot::PropertySlot): Chnaged argument to const JSValue*
27044        and added a const_cast.
27045
27046        * kjs/protect.h: Removed overloads and specialization for JSValuePtr.
27047
270482008-10-22  Oliver Hunt  <oliver@apple.com>
27049
27050        Reviewed by Maciej Stachowiak.
27051
27052        Really "fix" CTI mode on windows 2k3.
27053
27054        This adds new methods fastMallocExecutable and fastFreeExecutable
27055        to wrap allocation for cti code.  This still just makes fastMalloc
27056        return executable memory all the time, which will be fixed in a
27057        later patch.
27058
27059        However in windows debug builds all executable allocations will be
27060        allocated on separate executable pages, which should resolve any
27061        remaining 2k3 issues.  Conveniently the 2k3 bot will now also fail
27062        if there are any fastFree vs. fastFreeExecutable errors.
27063
27064        * ChangeLog:
27065        * VM/CodeBlock.cpp:
27066        (JSC::CodeBlock::~CodeBlock):
27067        * kjs/regexp.cpp:
27068        (JSC::RegExp::~RegExp):
27069        * masm/X86Assembler.h:
27070        (JSC::JITCodeBuffer::copy):
27071        * wtf/FastMalloc.cpp:
27072        (WTF::fastMallocExecutable):
27073        (WTF::fastFreeExecutable):
27074        (WTF::TCMallocStats::fastMallocExecutable):
27075        (WTF::TCMallocStats::fastFreeExecutable):
27076        * wtf/FastMalloc.h:
27077
270782008-10-22  Darin Adler  <darin@apple.com>
27079
27080        Reviewed by Sam Weinig.
27081
27082        - fix https://bugs.webkit.org/show_bug.cgi?id=21294
27083          Bug 21294: Devirtualize getOwnPropertySlot()
27084
27085        A bit over 3% faster on V8 tests.
27086
27087        * JavascriptCore.exp: Export leak-related functions..
27088
27089        * API/JSCallbackConstructor.h:
27090        (JSC::JSCallbackConstructor::createStructureID): Set HasStandardGetOwnPropertySlot
27091        since this class doesn't override getPropertySlot.
27092        * API/JSCallbackFunction.h:
27093        (JSC::JSCallbackFunction::createStructureID): Ditto.
27094
27095        * VM/ExceptionHelpers.cpp:
27096        (JSC::InterruptedExecutionError::InterruptedExecutionError): Use a structure
27097        that's created just for this class instead of trying to share a single "null
27098        prototype" structure.
27099
27100        * VM/Machine.cpp:
27101        (JSC::Machine::cti_op_create_arguments_no_params): Rename
27102        Arguments::ArgumentsNoParameters to Arguments::NoParameters.
27103        
27104        * kjs/Arguments.h: Rename the enum from Arguments::ArgumentsParameters to
27105        Arguments::NoParametersType and the value from Arguments::ArgumentsNoParameters
27106        to Arguments::NoParameters.
27107        (JSC::Arguments::createStructureID): Added. Returns a structure without
27108        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.
27109        (JSC::Arguments::Arguments): Added an assertion that there are no parameters.
27110
27111        * kjs/DatePrototype.h:
27112        (JSC::DatePrototype::createStructureID): Added. Returns a structure without
27113        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.
27114
27115        * kjs/FunctionPrototype.h:
27116        (JSC::FunctionPrototype::createStructureID): Set HasStandardGetOwnPropertySlot
27117        since this class doesn't override getPropertySlot.
27118        * kjs/InternalFunction.h:
27119        (JSC::InternalFunction::createStructureID): Ditto.
27120
27121        * kjs/JSArray.h:
27122        (JSC::JSArray::createStructureID): Added. Returns a structure without
27123        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.
27124
27125        * kjs/JSCell.h: Added declaration of fastGetOwnPropertySlot; a non-virtual
27126        version that uses the structure bit to decide whether to call the virtual
27127        version.
27128
27129        * kjs/JSFunction.h:
27130        (JSC::JSFunction::createStructureID): Added. Returns a structure without
27131        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.
27132
27133        * kjs/JSGlobalData.cpp:
27134        (JSC::JSGlobalData::JSGlobalData): Initialize new structures; removed
27135        nullProtoStructureID.
27136        * kjs/JSGlobalData.h: Added new structures. Removed nullProtoStructureID.
27137
27138        * kjs/JSGlobalObject.h:
27139        (JSC::JSGlobalObject::createStructureID): Added. Returns a structure without
27140        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.
27141
27142        * kjs/JSNotAnObject.h:
27143        (JSC::JSNotAnObjectErrorStub::JSNotAnObjectErrorStub): Use a structure
27144        that's created just for this class instead of trying to share a single "null
27145        prototype" structure.
27146        (JSC::JSNotAnObjectErrorStub::isNotAnObjectErrorStub): Marked this function
27147        virtual for clarity and made it private since no one should call it if they
27148        already have a pointer to this specific type.
27149        (JSC::JSNotAnObject::JSNotAnObject): Use a structure that's created just
27150        for this class instead of trying to share a single "null prototype" structure.
27151        (JSC::JSNotAnObject::createStructureID): Added. Returns a structure without
27152        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.
27153
27154        * kjs/JSObject.h:
27155        (JSC::JSObject::createStructureID): Added HasStandardGetOwnPropertySlot.
27156        (JSC::JSObject::inlineGetOwnPropertySlot): Added. Used so we can share code
27157        between getOwnPropertySlot and fastGetOwnPropertySlot.
27158        (JSC::JSObject::getOwnPropertySlot): Moved so that functions are above the
27159        functions that call them. Moved the guts of this function into
27160        inlineGetOwnPropertySlot.
27161        (JSC::JSCell::fastGetOwnPropertySlot): Added. Checks the
27162        HasStandardGetOwnPropertySlot bit and if it's set, calls
27163        inlineGetOwnPropertySlot, otherwise calls getOwnPropertySlot.
27164        (JSC::JSObject::getPropertySlot): Changed to call fastGetOwnPropertySlot.
27165        (JSC::JSValue::get): Changed to call fastGetOwnPropertySlot.
27166
27167        * kjs/JSWrapperObject.h: Made constructor protected to emphasize that
27168        this class is only a base class and never instantiated.
27169
27170        * kjs/MathObject.h:
27171        (JSC::MathObject::createStructureID): Added. Returns a structure without
27172        HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot.
27173        * kjs/NumberConstructor.h:
27174        (JSC::NumberConstructor::createStructureID): Ditto.
27175        * kjs/RegExpConstructor.h:
27176        (JSC::RegExpConstructor::createStructureID): Ditto.
27177        * kjs/RegExpObject.h:
27178        (JSC::RegExpObject::createStructureID): Ditto.
27179        * kjs/StringObject.h:
27180        (JSC::StringObject::createStructureID): Ditto.
27181
27182        * kjs/TypeInfo.h: Added HasStandardGetOwnPropertySlot flag and
27183        hasStandardGetOwnPropertySlot accessor function.
27184
271852008-10-22  Cameron Zwarich  <zwarich@apple.com>
27186
27187        Reviewed by Geoff Garen.
27188
27189        Bug 21803: Fuse op_jfalse with op_eq_null and op_neq_null
27190        <https://bugs.webkit.org/show_bug.cgi?id=21803>
27191
27192        Fuse op_jfalse with op_eq_null and op_neq_null to make the new opcodes
27193        op_jeq_null and op_jneq_null.
27194
27195        This is a 2.6% speedup on the V8 Raytrace benchmark, and strangely also
27196        a 4.7% speedup on the V8 Arguments benchmark, even though it uses
27197        neither of the two new opcodes.
27198
27199        * VM/CTI.cpp:
27200        (JSC::CTI::privateCompileMainPass):
27201        * VM/CodeBlock.cpp:
27202        (JSC::CodeBlock::dump):
27203        * VM/CodeGenerator.cpp:
27204        (JSC::CodeGenerator::emitJumpIfTrue):
27205        (JSC::CodeGenerator::emitJumpIfFalse):
27206        * VM/Machine.cpp:
27207        (JSC::Machine::privateExecute):
27208        * VM/Opcode.h:
27209
272102008-10-22  Darin Fisher  <darin@chromium.org>
27211
27212        Reviewed by Eric Seidel.
27213
27214        Should not define PLATFORM(WIN,MAC,GTK) when PLATFORM(CHROMIUM) is defined
27215        https://bugs.webkit.org/show_bug.cgi?id=21757
27216
27217        PLATFORM(CHROMIUM) implies HAVE_ACCESSIBILITY
27218
27219        * wtf/Platform.h:
27220
272212008-10-22  Cameron Zwarich  <zwarich@apple.com>
27222
27223        Reviewed by Alexey Proskuryakov.
27224
27225        Correct opcode names in documentation.
27226
27227        * VM/Machine.cpp:
27228        (JSC::Machine::privateExecute):
27229
272302008-10-21  Oliver Hunt <oliver@apple.com>
27231
27232        RS=Maciej Stachowiak.
27233
27234        Force FastMalloc to make all allocated pages executable in
27235        a vague hope this will allow the Win2k3 bot to be able to
27236        run tests.
27237
27238        Filed Bug 21783: Need more granular control over allocation of executable memory
27239        to cover a more granular version of this patch.
27240
27241        * wtf/TCSystemAlloc.cpp:
27242        (TryVirtualAlloc):
27243
272442008-10-21  Alexey Proskuryakov  <ap@webkit.org>
27245
27246        Reviewed by Darin Adler.
27247
27248        https://bugs.webkit.org/show_bug.cgi?id=21769
27249        MessagePort should be GC protected if there are messages to be delivered
27250
27251        * wtf/MessageQueue.h:
27252        (WTF::::isEmpty): Added. Also added a warning for methods that return a snapshot of queue
27253        state, thus likely to cause race conditions.
27254
272552008-10-21  Darin Adler  <darin@apple.com>
27256
27257        Reviewed by Maciej Stachowiak.
27258
27259        - convert post-increment to pre-increment in a couple more places for speed
27260
27261        Speeds up V8 benchmarks a little on most computers. (But, strangely, slows
27262        them down a little on my computer.)
27263
27264        * kjs/nodes.cpp:
27265        (JSC::statementListEmitCode): Removed default argument, since we always want
27266        to specify this explicitly.
27267        (JSC::ForNode::emitCode): Tolerate ignoredResult() as the dst -- means the
27268        same thing as 0.
27269        (JSC::ReturnNode::emitCode): Ditto.
27270        (JSC::ThrowNode::emitCode): Ditto.
27271        (JSC::FunctionBodyNode::emitCode): Pass ignoredResult() so that we know we
27272        don't have to compute the result of function statements.
27273
272742008-10-21  Peter Kasting  <pkasting@google.com>
27275
27276        Reviewed by Maciej Stachowiak.
27277
27278        Fix an include of a non-public header to use "" instead of <>.
27279
27280        * API/JSProfilerPrivate.cpp:
27281
272822008-10-20  Sam Weinig  <sam@webkit.org>
27283
27284        Reviewed by Cameron Zwarich.
27285
27286        Fix for https://bugs.webkit.org/show_bug.cgi?id=21766
27287        REGRESSION: 12 JSC tests fail
27288
27289        The JSGlobalObject was mutating the shared nullProtoStructureID when
27290        used in jsc.  Instead of using nullProtoStructureID, use a new StructureID.
27291
27292        * API/JSCallbackObject.h:
27293        * API/JSCallbackObjectFunctions.h:
27294        (JSC::::JSCallbackObject):
27295        * API/JSContextRef.cpp:
27296        (JSGlobalContextCreateInGroup):
27297        * kjs/JSGlobalObject.h:
27298        (JSC::JSGlobalObject::JSGlobalObject):
27299        * kjs/Shell.cpp:
27300        (GlobalObject::GlobalObject):
27301        (jscmain):
27302
273032008-10-20  Cameron Zwarich  <zwarich@apple.com>
27304
27305        Reviewed by Maciej Stachowiak.
27306
27307        Remove an untaken branch in CodeGenerator::emitJumpIfFalse(). This
27308        function is never called with a backwards target LabelID, and there is
27309        even an assertion to this effect at the top of the function body.
27310
27311        * VM/CodeGenerator.cpp:
27312        (JSC::CodeGenerator::emitJumpIfFalse):
27313
273142008-10-20  Cameron Zwarich  <zwarich@apple.com>
27315
27316        Rubber-stamped by Sam Weinig.
27317
27318        Add opcode documentation for undocumented opcodes.
27319
27320        * VM/Machine.cpp:
27321        (JSC::Machine::privateExecute):
27322
273232008-10-16  Sam Weinig  <sam@webkit.org>
27324
27325        Reviewed by Cameron Zwarich.
27326
27327        Fix for https://bugs.webkit.org/show_bug.cgi?id=21683
27328        Don't create intermediate StructureIDs for builtin objects
27329
27330        Second stage in reduce number of StructureIDs created when initializing the
27331        JSGlobalObject.
27332
27333        - Use putDirectWithoutTransition for the remaining singleton objects to reduce
27334          the number of StructureIDs create for about:blank from 132 to 73.
27335
27336        * kjs/ArrayConstructor.cpp:
27337        (JSC::ArrayConstructor::ArrayConstructor):
27338        * kjs/BooleanConstructor.cpp:
27339        (JSC::BooleanConstructor::BooleanConstructor):
27340        * kjs/BooleanPrototype.cpp:
27341        (JSC::BooleanPrototype::BooleanPrototype):
27342        * kjs/DateConstructor.cpp:
27343        (JSC::DateConstructor::DateConstructor):
27344        * kjs/ErrorConstructor.cpp:
27345        (JSC::ErrorConstructor::ErrorConstructor):
27346        * kjs/ErrorPrototype.cpp:
27347        (JSC::ErrorPrototype::ErrorPrototype):
27348        * kjs/FunctionConstructor.cpp:
27349        (JSC::FunctionConstructor::FunctionConstructor):
27350        * kjs/FunctionPrototype.cpp:
27351        (JSC::FunctionPrototype::FunctionPrototype):
27352        (JSC::FunctionPrototype::addFunctionProperties):
27353        * kjs/FunctionPrototype.h:
27354        (JSC::FunctionPrototype::createStructureID):
27355        * kjs/InternalFunction.cpp:
27356        * kjs/InternalFunction.h:
27357        (JSC::InternalFunction::InternalFunction):
27358        * kjs/JSGlobalObject.cpp:
27359        (JSC::JSGlobalObject::reset):
27360        * kjs/JSObject.h:
27361        * kjs/MathObject.cpp:
27362        (JSC::MathObject::MathObject):
27363        * kjs/NumberConstructor.cpp:
27364        (JSC::NumberConstructor::NumberConstructor):
27365        * kjs/NumberPrototype.cpp:
27366        (JSC::NumberPrototype::NumberPrototype):
27367        * kjs/ObjectConstructor.cpp:
27368        (JSC::ObjectConstructor::ObjectConstructor):
27369        * kjs/RegExpConstructor.cpp:
27370        (JSC::RegExpConstructor::RegExpConstructor):
27371        * kjs/RegExpPrototype.cpp:
27372        (JSC::RegExpPrototype::RegExpPrototype):
27373        * kjs/StringConstructor.cpp:
27374        (JSC::StringConstructor::StringConstructor):
27375        * kjs/StringPrototype.cpp:
27376        (JSC::StringPrototype::StringPrototype):
27377        * kjs/StructureID.cpp:
27378        (JSC::StructureID::dumpStatistics):
27379        * kjs/StructureID.h:
27380        (JSC::StructureID::setPrototypeWithoutTransition):
27381
273822008-10-20  Alp Toker  <alp@nuanti.com>
27383
27384        Fix autotools dist build target by listing recently added header
27385        files only. Not reviewed.
27386
27387        * GNUmakefile.am:
27388
273892008-10-20  Geoffrey Garen  <ggaren@apple.com>
27390
27391        Reviewed by Anders Carlsson.
27392
27393        * VM/Machine.cpp:
27394        (JSC::Machine::tryCacheGetByID): Removed a redundant and sometimes
27395        incorrect cast, which started ASSERTing after Darin's last checkin.
27396
273972008-10-20  Geoffrey Garen  <ggaren@apple.com>
27398
27399        Not reviewed.
27400        
27401        Re-enable CTI, which I accidentally disabled while checking in fixes
27402        to bytecode.
27403
27404        * wtf/Platform.h:
27405
274062008-10-20  Alp Toker  <alp@nuanti.com>
27407
27408        Rubber-stamped by Mark Rowe.
27409
27410        Typo fix in function name: mimimum -> minimum.
27411
27412        * kjs/DateMath.cpp:
27413        (JSC::minimumYearForDST):
27414        (JSC::equivalentYearForDST):
27415
274162008-10-20  Alp Toker  <alp@nuanti.com>
27417
27418        Reviewed by Mark Rowe.
27419
27420        Use pthread instead of GThread where possible in the GTK+ port. This
27421        fixes issues with global initialisation, particularly on GTK+/Win32
27422        where a late g_thread_init() will cause hangs.
27423
27424        * GNUmakefile.am:
27425        * wtf/Platform.h:
27426        * wtf/Threading.h:
27427        * wtf/ThreadingGtk.cpp:
27428        * wtf/ThreadingPthreads.cpp:
27429
274302008-10-20  Geoffrey Garen  <ggaren@apple.com>
27431
27432        Reviewed by Darin Adler.
27433        
27434        Fixed https://bugs.webkit.org/show_bug.cgi?id=21735
27435        Emit profiling instrumentation only if the Web Inspector's profiling
27436        feature is enabled
27437
27438        22.2% speedup on empty function call benchmark.
27439        2.9% speedup on v8 benchmark.
27440        0.7% speedup on SunSpider.
27441        
27442        Lesser but similar speedups in bytecode.
27443
27444        * VM/CTI.cpp:
27445        (JSC::CTI::compileOpCall):
27446        (JSC::CTI::privateCompileMainPass):
27447        (JSC::CTI::privateCompileSlowCases): Nixed JITed profiler hooks. Profiler
27448        hooks now have their own opcodes. Added support for compiling profiler
27449        hook opcodes.
27450        
27451        (JSC::CodeBlock::dump): Dump support for the new profiling opcodes.
27452
27453        * VM/CodeGenerator.h:
27454        * VM/CodeGenerator.cpp:
27455        (JSC::CodeGenerator::CodeGenerator):
27456        (JSC::CodeGenerator::emitCall):
27457        (JSC::CodeGenerator::emitConstruct): Conditionally emit profiling hooks
27458        around call and construct, at the call site. (It's easier to get things
27459        right this way, if you have profiled code calling non-profiled code.
27460        Also, you get a slightly more accurate profile, since you charge the full
27461        cost of the call / construct operation to the callee.)
27462        
27463        Also, fixed a bug where construct would fetch the ".prototype" property
27464        from the constructor before evaluating the arguments to the constructor,
27465        incorrectly allowing an "invalid constructor" exception to short-circuit
27466        argument evaluation. I encountered this bug when trying to make
27467        constructor exceptions work with profiling.
27468
27469        * VM/Machine.cpp:
27470        (JSC::Machine::callEval): Removed obsolete profiler hooks.
27471
27472        (JSC::Machine::throwException): Added a check for an exception thrown
27473        within a call instruction. We didn't need this before because the call
27474        instruction would check for a valid call before involing the profiler.
27475        (JSC::Machine::execute): Added a didExecute hook at the end of top-level
27476        function invocation, since op_ret no longer does this for us.
27477
27478        (JSC::Machine::privateExecute): Removed obsolete profiler hooks. Added
27479        profiler opcodes. Changed some ++vPC to vPC[x] notation, since the
27480        latter is better for performance, and it makes reasoning about the
27481        current opcode in exception handling much simpler.
27482
27483        (JSC::Machine::cti_op_call_NotJSFunction): Removed obsolete profiler
27484        hooks.
27485
27486        (JSC::Machine::cti_op_create_arguments_no_params): Added missing
27487        CTI_STACK_HACK that I noticed when adding CTI_STACK_HACK to the new
27488        profiler opcode functions.
27489
27490        (JSC::Machine::cti_op_profile_will_call):
27491        (JSC::Machine::cti_op_profile_did_call): The new profiler opcode
27492        functions.
27493
27494        (JSC::Machine::cti_op_construct_NotJSConstruct): Removed obsolete profiler
27495        hooks.
27496
27497        * VM/Machine.h:
27498        (JSC::Machine::isCallOpcode): Helper for exception handling.
27499
27500        * VM/Opcode.h: Declare new opcodes.
27501
27502        * kjs/JSGlobalObject.h:
27503        (JSC::JSGlobalObject::supportsProfiling): Added virtual interface that
27504        allows WebCore to specify whether the target global object has the Web
27505        Inspector's profiling feature enabled.
27506
27507        * profiler/Profiler.cpp:
27508        (JSC::Profiler::willExecute):
27509        (JSC::Profiler::didExecute):
27510        (JSC::Profiler::createCallIdentifier):
27511        * profiler/Profiler.h: Added support for invoking the profiler with
27512        an arbitrary JSValue*, and not a known object. We didn't need this
27513        before because the call instruction would check for a valid call before
27514        involing the profiler.
27515
275162008-10-20  Darin Adler  <darin@apple.com>
27517
27518        Reviewed by Geoff Garen.
27519
27520        - get CTI working on Windows again
27521
27522        * VM/CTI.cpp:
27523        (JSC::CTI::emitCTICall): Add an overload for functions that
27524        return JSObject*.
27525        * VM/CTI.h: Use JSValue* and JSObject* as return types for
27526        cti_op functions. Apparently, MSVC doesn't handle returning
27527        the JSValuePtr struct in a register. We'll have to look into
27528        this more.
27529
27530        * VM/Machine.cpp:
27531        (JSC::Machine::cti_op_convert_this):
27532        (JSC::Machine::cti_op_add):
27533        (JSC::Machine::cti_op_pre_inc):
27534        (JSC::Machine::cti_op_new_object):
27535        (JSC::Machine::cti_op_get_by_id):
27536        (JSC::Machine::cti_op_get_by_id_second):
27537        (JSC::Machine::cti_op_get_by_id_generic):
27538        (JSC::Machine::cti_op_get_by_id_fail):
27539        (JSC::Machine::cti_op_instanceof):
27540        (JSC::Machine::cti_op_del_by_id):
27541        (JSC::Machine::cti_op_mul):
27542        (JSC::Machine::cti_op_new_func):
27543        (JSC::Machine::cti_op_push_activation):
27544        (JSC::Machine::cti_op_call_NotJSFunction):
27545        (JSC::Machine::cti_op_new_array):
27546        (JSC::Machine::cti_op_resolve):
27547        (JSC::Machine::cti_op_construct_JSConstructFast):
27548        (JSC::Machine::cti_op_construct_NotJSConstruct):
27549        (JSC::Machine::cti_op_get_by_val):
27550        (JSC::Machine::cti_op_sub):
27551        (JSC::Machine::cti_op_lesseq):
27552        (JSC::Machine::cti_op_negate):
27553        (JSC::Machine::cti_op_resolve_base):
27554        (JSC::Machine::cti_op_resolve_skip):
27555        (JSC::Machine::cti_op_resolve_global):
27556        (JSC::Machine::cti_op_div):
27557        (JSC::Machine::cti_op_pre_dec):
27558        (JSC::Machine::cti_op_not):
27559        (JSC::Machine::cti_op_eq):
27560        (JSC::Machine::cti_op_lshift):
27561        (JSC::Machine::cti_op_bitand):
27562        (JSC::Machine::cti_op_rshift):
27563        (JSC::Machine::cti_op_bitnot):
27564        (JSC::Machine::cti_op_new_func_exp):
27565        (JSC::Machine::cti_op_mod):
27566        (JSC::Machine::cti_op_less):
27567        (JSC::Machine::cti_op_neq):
27568        (JSC::Machine::cti_op_urshift):
27569        (JSC::Machine::cti_op_bitxor):
27570        (JSC::Machine::cti_op_new_regexp):
27571        (JSC::Machine::cti_op_bitor):
27572        (JSC::Machine::cti_op_call_eval):
27573        (JSC::Machine::cti_op_throw):
27574        (JSC::Machine::cti_op_next_pname):
27575        (JSC::Machine::cti_op_typeof):
27576        (JSC::Machine::cti_op_is_undefined):
27577        (JSC::Machine::cti_op_is_boolean):
27578        (JSC::Machine::cti_op_is_number):
27579        (JSC::Machine::cti_op_is_string):
27580        (JSC::Machine::cti_op_is_object):
27581        (JSC::Machine::cti_op_is_function):
27582        (JSC::Machine::cti_op_stricteq):
27583        (JSC::Machine::cti_op_nstricteq):
27584        (JSC::Machine::cti_op_to_jsnumber):
27585        (JSC::Machine::cti_op_in):
27586        (JSC::Machine::cti_op_push_new_scope):
27587        (JSC::Machine::cti_op_del_by_val):
27588        (JSC::Machine::cti_op_new_error):
27589        (JSC::Machine::cti_vm_throw):
27590        Change these functions to return pointer types, and never
27591        JSValuePtr.
27592        * VM/Machine.h: Ditto.
27593
275942008-10-20  Geoffrey Garen  <ggaren@apple.com>
27595
27596        Reviewed by Darin Adler.
27597        
27598        Fixed some recent break-age in bytecode mode.
27599
27600        * VM/CodeBlock.cpp:
27601        (JSC::CodeBlock::printStructureIDs): Fixed up an ASSERT caused by
27602        Gavin's last checkin. This is a temporary fix so I can keep on moving.
27603        I'll send email about what I think is an underlying problem soon.
27604
27605        * VM/Machine.cpp:
27606        (JSC::Machine::privateExecute): Removed a redundant and sometimes
27607        incorrect cast, which started ASSERTing after Darin's last checkin.
27608
276092008-10-20  Darin Adler  <darin@apple.com>
27610
27611        - another similar Windows build fix
27612
27613        * VM/CTI.cpp: Changed return type to JSObject* instead of JSValuePtr.
27614
276152008-10-20  Darin Adler  <darin@apple.com>
27616
27617        - try to fix Windows build
27618
27619        * VM/CTI.cpp: Use JSValue* instead of JSValuePtr for ctiTrampoline.
27620        * VM/CTI.h: Ditto.
27621
276222008-10-19  Darin Adler  <darin@apple.com>
27623
27624        Reviewed by Cameron Zwarich.
27625
27626        - finish https://bugs.webkit.org/show_bug.cgi?id=21732
27627          improve performance by eliminating JSValue as a base class for JSCell
27628
27629        * VM/Machine.cpp:
27630        (JSC::Machine::cti_op_call_profiler): Use asFunction.
27631        (JSC::Machine::cti_vm_lazyLinkCall): Ditto.
27632        (JSC::Machine::cti_op_construct_JSConstructFast): Use asObject.
27633
27634        * kjs/JSCell.h: Re-sort friend classes. Eliminate inheritance from
27635        JSValue. Changed cast in asCell from static_cast to reinterpret_cast.
27636        Removed JSValue::getNumber(double&) and one of JSValue::getObject
27637        overloads.
27638
27639        * kjs/JSValue.h: Made the private constructor and destructor both
27640        non-virtual and also remove the definitions. This class can never
27641        be instantiated or derived.
27642
276432008-10-19  Darin Adler  <darin@apple.com>
27644
27645        Reviewed by Cameron Zwarich.
27646
27647        - next step of https://bugs.webkit.org/show_bug.cgi?id=21732
27648          improve performance by eliminating JSValue as a base class for JSCell
27649
27650        Change JSValuePtr from a typedef into a class. This allows us to support
27651        conversion from JSCell* to JSValuePtr even if JSCell isn't derived from
27652        JSValue.
27653
27654        * JavaScriptCore.exp: Updated symbols that involve JSValuePtr, since
27655        it's now a distinct type.
27656
27657        * API/APICast.h:
27658        (toRef): Extract the JSValuePtr payload explicitly since we can't just
27659        cast any more.
27660        * VM/CTI.cpp:
27661        (JSC::CTI::asInteger): Ditto.
27662
27663        * VM/CodeGenerator.cpp:
27664        (JSC::CodeGenerator::addConstant): Get at the payload directly.
27665        (JSC::CodeGenerator::emitLoad): Added an overload of JSCell* because
27666        otherwise classes derived from JSValue end up calling the bool
27667        overload instead of JSValuePtr.
27668        * VM/CodeGenerator.h: Ditto. Also update traits to use JSValue*
27669        and the payload functions.
27670
27671        * VM/Register.h: Added a JSCell* overload and use of payload functions.
27672
27673        * kjs/JSCell.h:
27674        (JSC::asCell): Use payload function.
27675        (JSC::JSValue::asCell): Use JSValue* instead of JSValuePtr.
27676        (JSC::JSValuePtr::JSValuePtr): Added. Constructor that takes JSCell*
27677        and creates a JSValuePtr.
27678
27679        * kjs/JSImmediate.h: Added JSValuePtr class. Also updated makeValue
27680        and makeInt to work with JSValue* and the payload function.
27681
27682        * kjs/JSValue.h: Added == and != operators for JSValuePtr. Put them
27683        here because eventually all the JSValue functions should go here
27684        except what's needed by JSImmediate. Also fix asValue to use
27685        JSValue* instead of JSValuePtr.
27686
27687        * kjs/PropertySlot.h: Change constructor to take JSValuePtr.
27688
27689        * kjs/protect.h: Update gcProtect functions to work with JSCell*
27690        as well as JSValuePtr. Also updated the ProtectedPtr<JSValuePtr>
27691        specialization to work more directly. Also changed all the call
27692        sites to use gcProtectNullTolerant.
27693
276942008-10-19  Darin Adler  <darin@apple.com>
27695
27696        Reviewed by Oliver Hunt.
27697
27698        - next step of https://bugs.webkit.org/show_bug.cgi?id=21732
27699          improve performance by eliminating JSValue as a base class for JSCell
27700
27701        Remove most uses of JSValue, which will be removed in a future patch.
27702
27703        * VM/Machine.cpp:
27704        (JSC::fastToUInt32): Call toUInt32SlowCase function; no longer a member
27705        of JSValue.
27706        * kjs/JSNumberCell.h:
27707        (JSC::JSNumberCell::toInt32): Ditto.
27708        (JSC::JSNumberCell::toUInt32): Ditto.
27709
27710        * kjs/JSValue.cpp:
27711        (JSC::toInt32SlowCase): Made a non-member function.
27712        (JSC::JSValue::toInt32SlowCase): Changed to call non-member function.
27713        (JSC::toUInt32SlowCase): More of the same.
27714        (JSC::JSValue::toUInt32SlowCase): Ditto.
27715
27716        * kjs/JSValue.h: Moved static member function so they are no longer
27717        member functions at all.
27718
27719        * VM/CTI.h: Removed forward declaration of JSValue.
27720        * VM/ExceptionHelpers.h: Ditto.
27721        * kjs/CallData.h: Ditto.
27722        * kjs/ConstructData.h: Ditto.
27723        * kjs/JSGlobalObjectFunctions.h: Ditto.
27724        * kjs/PropertyMap.h: Ditto.
27725        * kjs/StructureID.h: Ditto.
27726        * kjs/collector.h: Ditto.
27727        * kjs/completion.h: Ditto.
27728
27729        * kjs/grammar.y:
27730        (JSC::makeBitwiseNotNode): Call new non-member toInt32 function.
27731        (JSC::makeLeftShiftNode): More of the same.
27732        (JSC::makeRightShiftNode): Ditto.
27733
27734        * kjs/protect.h: Added a specialization for ProtectedPtr<JSValuePtr>
27735        so this can be used with JSValuePtr.
27736
277372008-10-18  Darin Adler  <darin@apple.com>
27738
27739        Reviewed by Oliver Hunt.
27740
27741        - next step of https://bugs.webkit.org/show_bug.cgi?id=21732
27742          improve performance by eliminating JSValue as a base class for JSCell
27743
27744        Tweak a little more to get closer to where we can make JSValuePtr a class.
27745
27746        * API/APICast.h:
27747        (toJS): Change back to JSValue* here, since we're converting the
27748        pointer type.
27749        * VM/CTI.cpp:
27750        (JSC::CTI::unlinkCall): Call asPointer.
27751        * VM/CTI.h: Cast to JSValue* here, since it's a pointer cast.
27752        * kjs/DebuggerCallFrame.h:
27753        (JSC::DebuggerCallFrame::DebuggerCallFrame): Call noValue.
27754        * kjs/JSGlobalData.cpp:
27755        (JSC::JSGlobalData::JSGlobalData): Call noValue.
27756        * kjs/JSImmediate.cpp:
27757        (JSC::JSImmediate::toObject): Remove unneeded const_cast.
27758        * kjs/JSWrapperObject.h:
27759        (JSC::JSWrapperObject::JSWrapperObject): Call noValue.
27760
277612008-10-18  Darin Adler  <darin@apple.com>
27762
27763        - fix non-all-in-one build
27764
27765        * kjs/completion.h:
27766        (JSC::Completion::Completion): Add include of JSValue.h.
27767
277682008-10-18  Darin Adler  <darin@apple.com>
27769
27770        Reviewed by Oliver Hunt.
27771
27772        - fix assertions I introduced with my casting changes
27773
27774        These were showing up as failures in the JavaScriptCore tests.
27775
27776        * VM/Machine.cpp:
27777        (JSC::Machine::cti_op_instanceof): Remove the bogus asCell casting that
27778        was at the top of the function, and instead cast at the point of use.
27779        (JSC::Machine::cti_op_construct_NotJSConstruct): Moved the cast to
27780        object after checking the construct type.
27781
277822008-10-18  Darin Adler  <darin@apple.com>
27783
27784        - fix non-all-in-one build
27785
27786        * kjs/JSGlobalObjectFunctions.h: Add include of JSImmedate.h (for now).
27787
277882008-10-18  Darin Adler  <darin@apple.com>
27789
27790        - fix build
27791
27792        * kjs/interpreter.h: Include JSValue.h instead of JSImmediate.h.
27793
277942008-10-18  Darin Adler  <darin@apple.com>
27795
27796        * kjs/interpreter.h: Fix include of JSImmediate.h.
27797
277982008-10-18  Darin Adler  <darin@apple.com>
27799
27800        - fix non-all-in-one build
27801
27802        * kjs/interpreter.h: Add include of JSImmediate.h.
27803
278042008-10-18  Darin Adler  <darin@apple.com>
27805
27806        - fix non-all-in-one build
27807
27808        * kjs/ConstructData.h: Add include of JSImmedate.h (for now).
27809
278102008-10-18  Darin Adler  <darin@apple.com>
27811
27812        - try to fix Windows build
27813
27814        * VM/Machine.cpp:
27815        (JSC::Machine::Machine): Use JSCell* type since MSVC seems to only allow
27816        calling ~JSCell directly if it's a JSCell*.
27817
278182008-10-18  Darin Adler  <darin@apple.com>
27819
27820        Reviewed by Cameron Zwarich.
27821
27822        - next step on https://bugs.webkit.org/show_bug.cgi?id=21732
27823          improve performance by eliminating JSValue as a base class for JSCell
27824
27825        Use JSValuePtr everywhere instead of JSValue*. In the future, we'll be
27826        changing JSValuePtr to be a class, and then eventually renaming it
27827        to JSValue once that's done.
27828
27829        * JavaScriptCore.exp: Update entry points, since some now take JSValue*
27830        instead of const JSValue*.
27831
27832        * API/APICast.h:
27833        * API/JSCallbackConstructor.h:
27834        * API/JSCallbackFunction.cpp:
27835        * API/JSCallbackFunction.h:
27836        * API/JSCallbackObject.h:
27837        * API/JSCallbackObjectFunctions.h:
27838        * API/JSContextRef.cpp:
27839        * API/JSObjectRef.cpp:
27840        * API/JSValueRef.cpp:
27841        * VM/CTI.cpp:
27842        * VM/CTI.h:
27843        * VM/CodeBlock.cpp:
27844        * VM/CodeBlock.h:
27845        * VM/CodeGenerator.cpp:
27846        * VM/CodeGenerator.h:
27847        * VM/ExceptionHelpers.cpp:
27848        * VM/ExceptionHelpers.h:
27849        * VM/JSPropertyNameIterator.cpp:
27850        * VM/JSPropertyNameIterator.h:
27851        * VM/Machine.cpp:
27852        * VM/Machine.h:
27853        * VM/Register.h:
27854        * kjs/ArgList.cpp:
27855        * kjs/ArgList.h:
27856        * kjs/Arguments.cpp:
27857        * kjs/Arguments.h:
27858        * kjs/ArrayConstructor.cpp:
27859        * kjs/ArrayPrototype.cpp:
27860        * kjs/BooleanConstructor.cpp:
27861        * kjs/BooleanConstructor.h:
27862        * kjs/BooleanObject.h:
27863        * kjs/BooleanPrototype.cpp:
27864        * kjs/CallData.cpp:
27865        * kjs/CallData.h:
27866        * kjs/ConstructData.cpp:
27867        * kjs/ConstructData.h:
27868        * kjs/DateConstructor.cpp:
27869        * kjs/DateInstance.h:
27870        * kjs/DatePrototype.cpp:
27871        * kjs/DebuggerCallFrame.cpp:
27872        * kjs/DebuggerCallFrame.h:
27873        * kjs/ErrorConstructor.cpp:
27874        * kjs/ErrorPrototype.cpp:
27875        * kjs/ExecState.cpp:
27876        * kjs/ExecState.h:
27877        * kjs/FunctionConstructor.cpp:
27878        * kjs/FunctionPrototype.cpp:
27879        * kjs/GetterSetter.cpp:
27880        * kjs/GetterSetter.h:
27881        * kjs/InternalFunction.h:
27882        * kjs/JSActivation.cpp:
27883        * kjs/JSActivation.h:
27884        * kjs/JSArray.cpp:
27885        * kjs/JSArray.h:
27886        * kjs/JSCell.cpp:
27887        * kjs/JSCell.h:
27888        * kjs/JSFunction.cpp:
27889        * kjs/JSFunction.h:
27890        * kjs/JSGlobalData.h:
27891        * kjs/JSGlobalObject.cpp:
27892        * kjs/JSGlobalObject.h:
27893        * kjs/JSGlobalObjectFunctions.cpp:
27894        * kjs/JSGlobalObjectFunctions.h:
27895        * kjs/JSImmediate.cpp:
27896        * kjs/JSImmediate.h:
27897        * kjs/JSNotAnObject.cpp:
27898        * kjs/JSNotAnObject.h:
27899        * kjs/JSNumberCell.cpp:
27900        * kjs/JSNumberCell.h:
27901        * kjs/JSObject.cpp:
27902        * kjs/JSObject.h:
27903        * kjs/JSStaticScopeObject.cpp:
27904        * kjs/JSStaticScopeObject.h:
27905        * kjs/JSString.cpp:
27906        * kjs/JSString.h:
27907        * kjs/JSValue.h:
27908        * kjs/JSVariableObject.h:
27909        * kjs/JSWrapperObject.h:
27910        * kjs/MathObject.cpp:
27911        * kjs/NativeErrorConstructor.cpp:
27912        * kjs/NumberConstructor.cpp:
27913        * kjs/NumberConstructor.h:
27914        * kjs/NumberObject.cpp:
27915        * kjs/NumberObject.h:
27916        * kjs/NumberPrototype.cpp:
27917        * kjs/ObjectConstructor.cpp:
27918        * kjs/ObjectPrototype.cpp:
27919        * kjs/ObjectPrototype.h:
27920        * kjs/PropertyMap.h:
27921        * kjs/PropertySlot.cpp:
27922        * kjs/PropertySlot.h:
27923        * kjs/RegExpConstructor.cpp:
27924        * kjs/RegExpConstructor.h:
27925        * kjs/RegExpMatchesArray.h:
27926        * kjs/RegExpObject.cpp:
27927        * kjs/RegExpObject.h:
27928        * kjs/RegExpPrototype.cpp:
27929        * kjs/Shell.cpp:
27930        * kjs/StringConstructor.cpp:
27931        * kjs/StringObject.cpp:
27932        * kjs/StringObject.h:
27933        * kjs/StringObjectThatMasqueradesAsUndefined.h:
27934        * kjs/StringPrototype.cpp:
27935        * kjs/StructureID.cpp:
27936        * kjs/StructureID.h:
27937        * kjs/collector.cpp:
27938        * kjs/collector.h:
27939        * kjs/completion.h:
27940        * kjs/grammar.y:
27941        * kjs/interpreter.cpp:
27942        * kjs/interpreter.h:
27943        * kjs/lookup.cpp:
27944        * kjs/lookup.h:
27945        * kjs/nodes.h:
27946        * kjs/operations.cpp:
27947        * kjs/operations.h:
27948        * kjs/protect.h:
27949        * profiler/ProfileGenerator.cpp:
27950        Replace JSValue* with JSValuePtr.
27951
279522008-10-18  Darin Adler  <darin@apple.com>
27953
27954        * VM/Machine.cpp:
27955        (JSC::Machine::cti_op_call_eval): Removed stray parentheses from my
27956        last check-in.
27957
279582008-10-18  Darin Adler  <darin@apple.com>
27959
27960        Reviewed by Oliver Hunt.
27961
27962        - first step of https://bugs.webkit.org/show_bug.cgi?id=21732
27963          improve performance by eliminating JSValue as a base class for JSCell
27964
27965        Remove casts from JSValue* to derived classes, replacing them with
27966        calls to inline casting functions. These functions are also a bit
27967        better than aidrect cast because they also do a runtime assertion.
27968
27969        Removed use of 0 as for JSValue*, changing call sites to use a
27970        noValue() function instead.
27971
27972        Move things needed by classes derived from JSValue out of the class,
27973        since the classes won't be deriving from JSValue any more soon.
27974
27975        I did most of these changes by changing JSValue to not be JSValue* any
27976        more, then fixing a lot of the compilation problems, then rolling out
27977        the JSValue change.
27978
27979        1.011x as fast on SunSpider (presumably due to some of the Machine.cpp changes)
27980
27981        * API/APICast.h: Removed unneeded forward declarations.
27982
27983        * API/JSCallbackObject.h: Added an asCallbackObject function for casting.
27984        * API/JSCallbackObjectFunctions.h:
27985        (JSC::JSCallbackObject::asCallbackObject): Added.
27986        (JSC::JSCallbackObject::getOwnPropertySlot): Use asObject.
27987        (JSC::JSCallbackObject::call): Use noValue.
27988        (JSC::JSCallbackObject::staticValueGetter): Use asCallbackObject.
27989        (JSC::JSCallbackObject::staticFunctionGetter): Ditto.
27990        (JSC::JSCallbackObject::callbackGetter): Ditto.
27991
27992        * JavaScriptCore.exp: Updated.
27993
27994        * JavaScriptCore.xcodeproj/project.pbxproj: Added RegExpMatchesArray.h.
27995
27996        * VM/CTI.cpp:
27997        (JSC::CTI::asInteger): Added. For use casting a JSValue to an integer.
27998        (JSC::CTI::emitGetArg): Use asInteger.
27999        (JSC::CTI::emitGetPutArg): Ditto.
28000        (JSC::CTI::getConstantImmediateNumericArg): Ditto. Also use noValue.
28001        (JSC::CTI::emitInitRegister): Use asInteger.
28002        (JSC::CTI::getDeTaggedConstantImmediate): Ditto.
28003        (JSC::CTI::compileOpCallInitializeCallFrame): Ditto.
28004        (JSC::CTI::compileOpCall): Ditto.
28005        (JSC::CTI::compileOpStrictEq): Ditto.
28006        (JSC::CTI::privateCompileMainPass): Ditto.
28007        (JSC::CTI::privateCompileGetByIdProto): Ditto.
28008        (JSC::CTI::privateCompileGetByIdChain): Ditto.
28009        (JSC::CTI::privateCompilePutByIdTransition): Ditto.
28010        * VM/CTI.h: Rewrite the ARG-related macros to use C++ casts instead of
28011        C casts and get rid of some extra parentheses. Addd declaration of
28012        asInteger.
28013
28014        * VM/CodeGenerator.cpp:
28015        (JSC::CodeGenerator::emitEqualityOp): Use asString.
28016        (JSC::CodeGenerator::emitLoad): Use noValue.
28017        (JSC::CodeGenerator::findScopedProperty): Change globalObject argument
28018        to JSObject* instead of JSValue*.
28019        (JSC::CodeGenerator::emitResolve): Remove unneeded cast.
28020        (JSC::CodeGenerator::emitGetScopedVar): Use asCell.
28021        (JSC::CodeGenerator::emitPutScopedVar): Ditto.
28022        * VM/CodeGenerator.h: Changed out argument of findScopedProperty.
28023        Also change the JSValueMap to use PtrHash explicitly instead of
28024        getting it from DefaultHash.
28025
28026        * VM/JSPropertyNameIterator.cpp:
28027        (JSC::JSPropertyNameIterator::toPrimitive): Use noValue.
28028        * VM/JSPropertyNameIterator.h:
28029        (JSC::JSPropertyNameIterator::next): Ditto.
28030
28031        * VM/Machine.cpp:
28032        (JSC::fastIsNumber): Moved isImmediate check here instead of
28033        checking for 0 inside Heap::isNumber. Use asCell and asNumberCell.
28034        (JSC::fastToInt32): Ditto.
28035        (JSC::fastToUInt32): Ditto.
28036        (JSC::jsLess): Use asString.
28037        (JSC::jsLessEq): Ditto.
28038        (JSC::jsAdd): Ditto.
28039        (JSC::jsTypeStringForValue): Use asObject.
28040        (JSC::jsIsObjectType): Ditto.
28041        (JSC::jsIsFunctionType): Ditto.
28042        (JSC::inlineResolveBase): Use noValue.
28043        (JSC::Machine::callEval): Use asString. Initialize result to
28044        undefined, not 0.
28045        (JSC::Machine::Machine): Remove unneeded casts to JSCell*.
28046        (JSC::Machine::throwException): Use asObject.
28047        (JSC::Machine::debug): Remove explicit calls to the DebuggerCallFrame
28048        constructor.
28049        (JSC::Machine::checkTimeout): Use noValue.
28050        (JSC::cachePrototypeChain): Use asObject.
28051        (JSC::Machine::tryCachePutByID): Use asCell.
28052        (JSC::Machine::tryCacheGetByID): Use aCell and asObject.
28053        (JSC::Machine::privateExecute): Use noValue, asCell, asObject, asString,
28054        asArray, asActivation, asFunction. Changed code that creates call frames
28055        for host functions to pass 0 for the function pointer -- the call frame
28056        needs a JSFunction* and a host function object is not one. This was
28057        caught by the assertions in the casting functions. Also remove some
28058        unneeded casts in cases where two values are compared.
28059        (JSC::Machine::retrieveLastCaller): Use noValue.
28060        (JSC::Machine::tryCTICachePutByID): Use asCell.
28061        (JSC::Machine::tryCTICacheGetByID): Use aCell and asObject.
28062        (JSC::setUpThrowTrampolineReturnAddress): Added this function to restore
28063        the PIC-branch-avoidance that was recently lost.
28064        (JSC::Machine::cti_op_add): Use asString.
28065        (JSC::Machine::cti_op_instanceof): Use asCell and asObject.
28066        (JSC::Machine::cti_op_call_JSFunction): Use asFunction.
28067        (JSC::Machine::cti_op_call_NotJSFunction): Changed code to pass 0 for
28068        the function pointer, since we don't have a JSFunction. Use asObject.
28069        (JSC::Machine::cti_op_tear_off_activation): Use asActivation.
28070        (JSC::Machine::cti_op_construct_JSConstruct): Use asFunction and asObject.
28071        (JSC::Machine::cti_op_construct_NotJSConstruct): use asObject.
28072        (JSC::Machine::cti_op_get_by_val): Use asArray and asString.
28073        (JSC::Machine::cti_op_resolve_func): Use asPointer; this helps prepare
28074        us for a situation where JSValue is not a pointer.
28075        (JSC::Machine::cti_op_put_by_val): Use asArray.
28076        (JSC::Machine::cti_op_put_by_val_array): Ditto.
28077        (JSC::Machine::cti_op_resolve_global): Use asGlobalObject.
28078        (JSC::Machine::cti_op_post_inc): Change VM_CHECK_EXCEPTION_2 to
28079        VM_CHECK_EXCEPTION_AT_END, since there's no observable work done after
28080        that point. Also use asPointer.
28081        (JSC::Machine::cti_op_resolve_with_base): Use asPointer.
28082        (JSC::Machine::cti_op_post_dec): Change VM_CHECK_EXCEPTION_2 to
28083        VM_CHECK_EXCEPTION_AT_END, since there's no observable work done after
28084        that point. Also use asPointer.
28085        (JSC::Machine::cti_op_call_eval): Use asObject, noValue, and change
28086        VM_CHECK_EXCEPTION_ARG to VM_THROW_EXCEPTION_AT_END.
28087        (JSC::Machine::cti_op_throw): Change return value to a JSValue*.
28088        (JSC::Machine::cti_op_in): Use asObject.
28089        (JSC::Machine::cti_op_switch_char): Use asString.
28090        (JSC::Machine::cti_op_switch_string): Ditto.
28091        (JSC::Machine::cti_op_put_getter): Use asObject.
28092        (JSC::Machine::cti_op_put_setter): Ditto.
28093        (JSC::Machine::cti_vm_throw): Change return value to a JSValue*.
28094        Use noValue.
28095        * VM/Machine.h: Change return values of both cti_op_throw and
28096        cti_vm_throw to JSValue*.
28097
28098        * VM/Register.h: Remove nullJSValue, which is the same thing
28099        as noValue(). Also removed unneeded definition of JSValue.
28100
28101        * kjs/ArgList.h: Removed unneeded definition of JSValue.
28102
28103        * kjs/Arguments.h:
28104        (JSC::asArguments): Added.
28105
28106        * kjs/ArrayPrototype.cpp:
28107        (JSC::getProperty): Use noValue.
28108        (JSC::arrayProtoFuncToString): Use asArray.
28109        (JSC::arrayProtoFuncToLocaleString): Ditto.
28110        (JSC::arrayProtoFuncConcat): Ditto.
28111        (JSC::arrayProtoFuncPop): Ditto. Also removed unneeded initialization
28112        of the result, which is set in both sides of the branch.
28113        (JSC::arrayProtoFuncPush): Ditto.
28114        (JSC::arrayProtoFuncShift): Removed unneeded initialization
28115        of the result, which is set in both sides of the branch.
28116        (JSC::arrayProtoFuncSort): Use asArray.
28117
28118        * kjs/BooleanObject.h:
28119        (JSC::asBooleanObject): Added.
28120
28121        * kjs/BooleanPrototype.cpp:
28122        (JSC::booleanProtoFuncToString): Use asBooleanObject.
28123        (JSC::booleanProtoFuncValueOf): Ditto.
28124
28125        * kjs/CallData.cpp:
28126        (JSC::call): Use asObject and asFunction.
28127        * kjs/ConstructData.cpp:
28128        (JSC::construct): Ditto.
28129
28130        * kjs/DateConstructor.cpp:
28131        (JSC::constructDate): Use asDateInstance.
28132
28133        * kjs/DateInstance.h:
28134        (JSC::asDateInstance): Added.
28135
28136        * kjs/DatePrototype.cpp:
28137        (JSC::dateProtoFuncToString): Use asDateInstance.
28138        (JSC::dateProtoFuncToUTCString): Ditto.
28139        (JSC::dateProtoFuncToDateString): Ditto.
28140        (JSC::dateProtoFuncToTimeString): Ditto.
28141        (JSC::dateProtoFuncToLocaleString): Ditto.
28142        (JSC::dateProtoFuncToLocaleDateString): Ditto.
28143        (JSC::dateProtoFuncToLocaleTimeString): Ditto.
28144        (JSC::dateProtoFuncValueOf): Ditto.
28145        (JSC::dateProtoFuncGetTime): Ditto.
28146        (JSC::dateProtoFuncGetFullYear): Ditto.
28147        (JSC::dateProtoFuncGetUTCFullYear): Ditto.
28148        (JSC::dateProtoFuncToGMTString): Ditto.
28149        (JSC::dateProtoFuncGetMonth): Ditto.
28150        (JSC::dateProtoFuncGetUTCMonth): Ditto.
28151        (JSC::dateProtoFuncGetDate): Ditto.
28152        (JSC::dateProtoFuncGetUTCDate): Ditto.
28153        (JSC::dateProtoFuncGetDay): Ditto.
28154        (JSC::dateProtoFuncGetUTCDay): Ditto.
28155        (JSC::dateProtoFuncGetHours): Ditto.
28156        (JSC::dateProtoFuncGetUTCHours): Ditto.
28157        (JSC::dateProtoFuncGetMinutes): Ditto.
28158        (JSC::dateProtoFuncGetUTCMinutes): Ditto.
28159        (JSC::dateProtoFuncGetSeconds): Ditto.
28160        (JSC::dateProtoFuncGetUTCSeconds): Ditto.
28161        (JSC::dateProtoFuncGetMilliSeconds): Ditto.
28162        (JSC::dateProtoFuncGetUTCMilliseconds): Ditto.
28163        (JSC::dateProtoFuncGetTimezoneOffset): Ditto.
28164        (JSC::dateProtoFuncSetTime): Ditto.
28165        (JSC::setNewValueFromTimeArgs): Ditto.
28166        (JSC::setNewValueFromDateArgs): Ditto.
28167        (JSC::dateProtoFuncSetYear): Ditto.
28168        (JSC::dateProtoFuncGetYear): Ditto.
28169
28170        * kjs/DebuggerCallFrame.cpp:
28171        (JSC::DebuggerCallFrame::thisObject): Use asObject.
28172        (JSC::DebuggerCallFrame::evaluate): Use noValue.
28173        * kjs/DebuggerCallFrame.h: Added a constructor that
28174        takes only a callFrame.
28175
28176        * kjs/ExecState.h:
28177        (JSC::ExecState::clearException): Use noValue.
28178
28179        * kjs/FunctionPrototype.cpp:
28180        (JSC::functionProtoFuncToString): Use asFunction.
28181        (JSC::functionProtoFuncApply): Use asArguments and asArray.
28182
28183        * kjs/GetterSetter.cpp:
28184        (JSC::GetterSetter::getPrimitiveNumber): Use noValue.
28185
28186        * kjs/GetterSetter.h:
28187        (JSC::asGetterSetter): Added.
28188
28189        * kjs/InternalFunction.cpp:
28190        (JSC::InternalFunction::name): Use asString.
28191
28192        * kjs/InternalFunction.h:
28193        (JSC::asInternalFunction): Added.
28194
28195        * kjs/JSActivation.cpp:
28196        (JSC::JSActivation::argumentsGetter): Use asActivation.
28197
28198        * kjs/JSActivation.h:
28199        (JSC::asActivation): Added.
28200
28201        * kjs/JSArray.cpp:
28202        (JSC::JSArray::putSlowCase): Use noValue.
28203        (JSC::JSArray::deleteProperty): Ditto.
28204        (JSC::JSArray::increaseVectorLength): Ditto.
28205        (JSC::JSArray::setLength): Ditto.
28206        (JSC::JSArray::pop): Ditto.
28207        (JSC::JSArray::sort): Ditto.
28208        (JSC::JSArray::compactForSorting): Ditto.
28209        * kjs/JSArray.h:
28210        (JSC::asArray): Added.
28211
28212        * kjs/JSCell.cpp:
28213        (JSC::JSCell::getJSNumber): Use noValue.
28214
28215        * kjs/JSCell.h:
28216        (JSC::asCell): Added.
28217        (JSC::JSValue::asCell): Changed to not preserve const.
28218        Given the wide use of JSValue* and JSCell*, it's not
28219        really useful to use const.
28220        (JSC::JSValue::isNumber): Use asValue.
28221        (JSC::JSValue::isString): Ditto.
28222        (JSC::JSValue::isGetterSetter): Ditto.
28223        (JSC::JSValue::isObject): Ditto.
28224        (JSC::JSValue::getNumber): Ditto.
28225        (JSC::JSValue::getString): Ditto.
28226        (JSC::JSValue::getObject): Ditto.
28227        (JSC::JSValue::getCallData): Ditto.
28228        (JSC::JSValue::getConstructData): Ditto.
28229        (JSC::JSValue::getUInt32): Ditto.
28230        (JSC::JSValue::getTruncatedInt32): Ditto.
28231        (JSC::JSValue::getTruncatedUInt32): Ditto.
28232        (JSC::JSValue::mark): Ditto.
28233        (JSC::JSValue::marked): Ditto.
28234        (JSC::JSValue::toPrimitive): Ditto.
28235        (JSC::JSValue::getPrimitiveNumber): Ditto.
28236        (JSC::JSValue::toBoolean): Ditto.
28237        (JSC::JSValue::toNumber): Ditto.
28238        (JSC::JSValue::toString): Ditto.
28239        (JSC::JSValue::toObject): Ditto.
28240        (JSC::JSValue::toThisObject): Ditto.
28241        (JSC::JSValue::needsThisConversion): Ditto.
28242        (JSC::JSValue::toThisString): Ditto.
28243        (JSC::JSValue::getJSNumber): Ditto.
28244
28245        * kjs/JSFunction.cpp:
28246        (JSC::JSFunction::argumentsGetter): Use asFunction.
28247        (JSC::JSFunction::callerGetter): Ditto.
28248        (JSC::JSFunction::lengthGetter): Ditto.
28249        (JSC::JSFunction::construct): Use asObject.
28250
28251        * kjs/JSFunction.h:
28252        (JSC::asFunction): Added.
28253
28254        * kjs/JSGlobalObject.cpp:
28255        (JSC::lastInPrototypeChain): Use asObject.
28256
28257        * kjs/JSGlobalObject.h:
28258        (JSC::asGlobalObject): Added.
28259        (JSC::ScopeChainNode::globalObject): Use asGlobalObject.
28260
28261        * kjs/JSImmediate.h: Added noValue, asPointer, and makeValue
28262        functions. Use rawValue, makeValue, and noValue consistently
28263        instead of doing reinterpret_cast in various functions.
28264
28265        * kjs/JSNumberCell.h:
28266        (JSC::asNumberCell): Added.
28267        (JSC::JSValue::uncheckedGetNumber): Use asValue and asNumberCell.
28268        (JSC::JSValue::toJSNumber): Use asValue.
28269
28270        * kjs/JSObject.cpp:
28271        (JSC::JSObject::put): Use asObject and asGetterSetter.
28272        (JSC::callDefaultValueFunction): Use noValue.
28273        (JSC::JSObject::defineGetter): Use asGetterSetter.
28274        (JSC::JSObject::defineSetter): Ditto.
28275        (JSC::JSObject::lookupGetter): Ditto. Also use asObject.
28276        (JSC::JSObject::lookupSetter): Ditto.
28277        (JSC::JSObject::hasInstance): Use asObject.
28278        (JSC::JSObject::fillGetterPropertySlot): Use asGetterSetter.
28279
28280        * kjs/JSObject.h:
28281        (JSC::JSObject::getDirect): Use noValue.
28282        (JSC::asObject): Added.
28283        (JSC::JSValue::isObject): Use asValue.
28284        (JSC::JSObject::get): Removed unneeded const_cast.
28285        (JSC::JSObject::getPropertySlot): Use asObject.
28286        (JSC::JSValue::get): Removed unneeded const_cast.
28287        Use asValue, asCell, and asObject.
28288        (JSC::JSValue::put): Ditto.
28289        (JSC::JSObject::allocatePropertyStorageInline): Fixed spelling
28290        of "oldPropertStorage".
28291
28292        * kjs/JSString.cpp:
28293        (JSC::JSString::getOwnPropertySlot): Use asObject.
28294
28295        * kjs/JSString.h:
28296        (JSC::asString): Added.
28297        (JSC::JSValue::toThisJSString): Use asValue.
28298
28299        * kjs/JSValue.h: Make PreferredPrimitiveType a top level enum
28300        instead of a member of JSValue. Added an asValue function that
28301        returns this. Removed overload of asCell for const. Use asValue
28302        instead of getting right at this.
28303
28304        * kjs/ObjectPrototype.cpp:
28305        (JSC::objectProtoFuncIsPrototypeOf): Use asObject.
28306        (JSC::objectProtoFuncDefineGetter): Ditto.
28307        (JSC::objectProtoFuncDefineSetter): Ditto.
28308
28309        * kjs/PropertySlot.h:
28310        (JSC::PropertySlot::PropertySlot): Take a const JSValue* so the
28311        callers don't have to worry about const.
28312        (JSC::PropertySlot::clearBase): Use noValue.
28313        (JSC::PropertySlot::clearValue): Ditto.
28314
28315        * kjs/RegExpConstructor.cpp:
28316        (JSC::regExpConstructorDollar1): Use asRegExpConstructor.
28317        (JSC::regExpConstructorDollar2): Ditto.
28318        (JSC::regExpConstructorDollar3): Ditto.
28319        (JSC::regExpConstructorDollar4): Ditto.
28320        (JSC::regExpConstructorDollar5): Ditto.
28321        (JSC::regExpConstructorDollar6): Ditto.
28322        (JSC::regExpConstructorDollar7): Ditto.
28323        (JSC::regExpConstructorDollar8): Ditto.
28324        (JSC::regExpConstructorDollar9): Ditto.
28325        (JSC::regExpConstructorInput): Ditto.
28326        (JSC::regExpConstructorMultiline): Ditto.
28327        (JSC::regExpConstructorLastMatch): Ditto.
28328        (JSC::regExpConstructorLastParen): Ditto.
28329        (JSC::regExpConstructorLeftContext): Ditto.
28330        (JSC::regExpConstructorRightContext): Ditto.
28331        (JSC::setRegExpConstructorInput): Ditto.
28332        (JSC::setRegExpConstructorMultiline): Ditto.
28333        (JSC::constructRegExp): Use asObject.
28334
28335        * kjs/RegExpConstructor.h:
28336        (JSC::asRegExpConstructor): Added.
28337
28338        * kjs/RegExpObject.cpp:
28339        (JSC::regExpObjectGlobal): Use asRegExpObject.
28340        (JSC::regExpObjectIgnoreCase): Ditto.
28341        (JSC::regExpObjectMultiline): Ditto.
28342        (JSC::regExpObjectSource): Ditto.
28343        (JSC::regExpObjectLastIndex): Ditto.
28344        (JSC::setRegExpObjectLastIndex): Ditto.
28345        (JSC::callRegExpObject): Ditto.
28346
28347        * kjs/RegExpObject.h:
28348        (JSC::asRegExpObject): Added.
28349
28350        * kjs/RegExpPrototype.cpp:
28351        (JSC::regExpProtoFuncTest): Use asRegExpObject.
28352        (JSC::regExpProtoFuncExec): Ditto.
28353        (JSC::regExpProtoFuncCompile): Ditto.
28354        (JSC::regExpProtoFuncToString): Ditto.
28355
28356        * kjs/StringObject.h:
28357        (JSC::StringObject::internalValue): Use asString.
28358        (JSC::asStringObject): Added.
28359
28360        * kjs/StringPrototype.cpp:
28361        (JSC::stringProtoFuncReplace): Use asRegExpObject.
28362        (JSC::stringProtoFuncToString): Ue asStringObject.
28363        (JSC::stringProtoFuncMatch): Use asRegExpObject.
28364        (JSC::stringProtoFuncSearch): Ditto.
28365        (JSC::stringProtoFuncSplit): Ditto.
28366
28367        * kjs/StructureID.cpp:
28368        (JSC::StructureID::getEnumerablePropertyNames): Use asObject.
28369        (JSC::StructureID::createCachedPrototypeChain): Ditto.
28370        (JSC::StructureIDChain::StructureIDChain): Use asCell and asObject.
28371
28372        * kjs/collector.h:
28373        (JSC::Heap::isNumber): Removed null handling. This can only be called
28374        on valid cells.
28375        (JSC::Heap::cellBlock): Removed overload for const and non-const.
28376        Whether the JSCell* is const or not really should have no effect on
28377        whether you can modify the collector block it's in.
28378
28379        * kjs/interpreter.cpp:
28380        (JSC::Interpreter::evaluate): Use noValue and noObject.
28381
28382        * kjs/nodes.cpp:
28383        (JSC::FunctionCallResolveNode::emitCode): Use JSObject for the global
28384        object rather than JSValue.
28385        (JSC::PostfixResolveNode::emitCode): Ditto.
28386        (JSC::PrefixResolveNode::emitCode): Ditto.
28387        (JSC::ReadModifyResolveNode::emitCode): Ditto.
28388        (JSC::AssignResolveNode::emitCode): Ditto.
28389
28390        * kjs/operations.h:
28391        (JSC::equalSlowCaseInline): Use asString, asCell, asNumberCell, 
28392        (JSC::strictEqualSlowCaseInline): Ditto.
28393
283942008-10-18  Cameron Zwarich  <zwarich@apple.com>
28395
28396        Reviewed by Oliver Hunt.
28397
28398        Bug 21702: Special op_create_activation for the case where there are no named parameters
28399        <https://bugs.webkit.org/show_bug.cgi?id=21702>
28400
28401        This is a 2.5% speedup on the V8 Raytrace benchmark and a 1.1% speedup
28402        on the V8 Earley-Boyer benchmark.
28403
28404        * VM/CTI.cpp:
28405        (JSC::CTI::privateCompileMainPass):
28406        * VM/Machine.cpp:
28407        (JSC::Machine::cti_op_create_arguments_no_params):
28408        * VM/Machine.h:
28409        * kjs/Arguments.h:
28410        (JSC::Arguments::):
28411        (JSC::Arguments::Arguments):
28412
284132008-10-17  Maciej Stachowiak  <mjs@apple.com>
28414
28415        Reviewed by Cameron Zwarich.
28416        
28417        - in debug builds, alter the stack to avoid blowing out MallocStackLogging
28418        
28419        (In essence, while executing a CTI function we alter the return
28420        address to jscGeneratedNativeCode so that a single consistent
28421        function is on the stack instead of many random functions without
28422        symbols.)
28423
28424        * VM/CTI.h:
28425        * VM/Machine.cpp:
28426        (JSC::doSetReturnAddress):
28427        (JSC::):
28428        (JSC::StackHack::StackHack):
28429        (JSC::StackHack::~StackHack):
28430        (JSC::Machine::cti_op_convert_this):
28431        (JSC::Machine::cti_op_end):
28432        (JSC::Machine::cti_op_add):
28433        (JSC::Machine::cti_op_pre_inc):
28434        (JSC::Machine::cti_timeout_check):
28435        (JSC::Machine::cti_register_file_check):
28436        (JSC::Machine::cti_op_loop_if_less):
28437        (JSC::Machine::cti_op_loop_if_lesseq):
28438        (JSC::Machine::cti_op_new_object):
28439        (JSC::Machine::cti_op_put_by_id):
28440        (JSC::Machine::cti_op_put_by_id_second):
28441        (JSC::Machine::cti_op_put_by_id_generic):
28442        (JSC::Machine::cti_op_put_by_id_fail):
28443        (JSC::Machine::cti_op_get_by_id):
28444        (JSC::Machine::cti_op_get_by_id_second):
28445        (JSC::Machine::cti_op_get_by_id_generic):
28446        (JSC::Machine::cti_op_get_by_id_fail):
28447        (JSC::Machine::cti_op_instanceof):
28448        (JSC::Machine::cti_op_del_by_id):
28449        (JSC::Machine::cti_op_mul):
28450        (JSC::Machine::cti_op_new_func):
28451        (JSC::Machine::cti_op_call_profiler):
28452        (JSC::Machine::cti_op_call_JSFunction):
28453        (JSC::Machine::cti_vm_lazyLinkCall):
28454        (JSC::Machine::cti_vm_compile):
28455        (JSC::Machine::cti_op_push_activation):
28456        (JSC::Machine::cti_op_call_NotJSFunction):
28457        (JSC::Machine::cti_op_create_arguments):
28458        (JSC::Machine::cti_op_tear_off_activation):
28459        (JSC::Machine::cti_op_tear_off_arguments):
28460        (JSC::Machine::cti_op_ret_profiler):
28461        (JSC::Machine::cti_op_ret_scopeChain):
28462        (JSC::Machine::cti_op_new_array):
28463        (JSC::Machine::cti_op_resolve):
28464        (JSC::Machine::cti_op_construct_JSConstructFast):
28465        (JSC::Machine::cti_op_construct_JSConstruct):
28466        (JSC::Machine::cti_op_construct_NotJSConstruct):
28467        (JSC::Machine::cti_op_get_by_val):
28468        (JSC::Machine::cti_op_resolve_func):
28469        (JSC::Machine::cti_op_sub):
28470        (JSC::Machine::cti_op_put_by_val):
28471        (JSC::Machine::cti_op_put_by_val_array):
28472        (JSC::Machine::cti_op_lesseq):
28473        (JSC::Machine::cti_op_loop_if_true):
28474        (JSC::Machine::cti_op_negate):
28475        (JSC::Machine::cti_op_resolve_base):
28476        (JSC::Machine::cti_op_resolve_skip):
28477        (JSC::Machine::cti_op_resolve_global):
28478        (JSC::Machine::cti_op_div):
28479        (JSC::Machine::cti_op_pre_dec):
28480        (JSC::Machine::cti_op_jless):
28481        (JSC::Machine::cti_op_not):
28482        (JSC::Machine::cti_op_jtrue):
28483        (JSC::Machine::cti_op_post_inc):
28484        (JSC::Machine::cti_op_eq):
28485        (JSC::Machine::cti_op_lshift):
28486        (JSC::Machine::cti_op_bitand):
28487        (JSC::Machine::cti_op_rshift):
28488        (JSC::Machine::cti_op_bitnot):
28489        (JSC::Machine::cti_op_resolve_with_base):
28490        (JSC::Machine::cti_op_new_func_exp):
28491        (JSC::Machine::cti_op_mod):
28492        (JSC::Machine::cti_op_less):
28493        (JSC::Machine::cti_op_neq):
28494        (JSC::Machine::cti_op_post_dec):
28495        (JSC::Machine::cti_op_urshift):
28496        (JSC::Machine::cti_op_bitxor):
28497        (JSC::Machine::cti_op_new_regexp):
28498        (JSC::Machine::cti_op_bitor):
28499        (JSC::Machine::cti_op_call_eval):
28500        (JSC::Machine::cti_op_throw):
28501        (JSC::Machine::cti_op_get_pnames):
28502        (JSC::Machine::cti_op_next_pname):
28503        (JSC::Machine::cti_op_push_scope):
28504        (JSC::Machine::cti_op_pop_scope):
28505        (JSC::Machine::cti_op_typeof):
28506        (JSC::Machine::cti_op_is_undefined):
28507        (JSC::Machine::cti_op_is_boolean):
28508        (JSC::Machine::cti_op_is_number):
28509        (JSC::Machine::cti_op_is_string):
28510        (JSC::Machine::cti_op_is_object):
28511        (JSC::Machine::cti_op_is_function):
28512        (JSC::Machine::cti_op_stricteq):
28513        (JSC::Machine::cti_op_nstricteq):
28514        (JSC::Machine::cti_op_to_jsnumber):
28515        (JSC::Machine::cti_op_in):
28516        (JSC::Machine::cti_op_push_new_scope):
28517        (JSC::Machine::cti_op_jmp_scopes):
28518        (JSC::Machine::cti_op_put_by_index):
28519        (JSC::Machine::cti_op_switch_imm):
28520        (JSC::Machine::cti_op_switch_char):
28521        (JSC::Machine::cti_op_switch_string):
28522        (JSC::Machine::cti_op_del_by_val):
28523        (JSC::Machine::cti_op_put_getter):
28524        (JSC::Machine::cti_op_put_setter):
28525        (JSC::Machine::cti_op_new_error):
28526        (JSC::Machine::cti_op_debug):
28527        (JSC::Machine::cti_vm_throw):
28528
285292008-10-17  Gavin Barraclough  <barraclough@apple.com>
28530
28531        Optimize op_call by allowing call sites to be directly linked to callees.
28532
28533        For the hot path of op_call, CTI now generates a check (initially for an impossible
28534        value), and the first time the call is executed we attempt to link the call directly
28535        to the callee.  We can currently only do so if the arity of the caller and callee
28536        match.  The (optimized) setup for the call on the hot path is linked directly to
28537        the ctiCode for the callee, without indirection.
28538        
28539        Two forms of the slow case of the call are generated, the first will be executed the
28540        first time the call is reached.  As well as this path attempting to link the call to
28541        a callee, it also relinks the slow case to a second slow case, which will not continue
28542        to attempt relinking the call.  (This policy could be changed in future, but for not
28543        this is intended to prevent thrashing).
28544
28545        If a callee that the caller has been linked to is garbage collected, then the link
28546        in the caller's JIt code will be reset back to a value that cannot match - to prevent
28547        any false positive matches.
28548
28549        ~20% progression on deltablue & richards, >12% overall reduction in v8-tests
28550        runtime, one or two percent progression on sunspider.
28551
28552        Reviewed by Oliver Hunt.
28553
28554        * VM/CTI.cpp:
28555        (JSC::):
28556        (JSC::CTI::emitNakedCall):
28557        (JSC::unreachable):
28558        (JSC::CTI::compileOpCallInitializeCallFrame):
28559        (JSC::CTI::compileOpCallSetupArgs):
28560        (JSC::CTI::compileOpCall):
28561        (JSC::CTI::privateCompileMainPass):
28562        (JSC::CTI::privateCompileSlowCases):
28563        (JSC::CTI::privateCompile):
28564        (JSC::CTI::unlinkCall):
28565        (JSC::CTI::linkCall):
28566        * VM/CTI.h:
28567        * VM/CodeBlock.cpp:
28568        (JSC::CodeBlock::~CodeBlock):
28569        (JSC::CodeBlock::unlinkCallers):
28570        (JSC::CodeBlock::derefStructureIDs):
28571        * VM/CodeBlock.h:
28572        (JSC::StructureStubInfo::StructureStubInfo):
28573        (JSC::CallLinkInfo::CallLinkInfo):
28574        (JSC::CodeBlock::addCaller):
28575        (JSC::CodeBlock::removeCaller):
28576        (JSC::CodeBlock::getStubInfo):
28577        * VM/CodeGenerator.cpp:
28578        (JSC::CodeGenerator::emitCall):
28579        (JSC::CodeGenerator::emitConstruct):
28580        * VM/Machine.cpp:
28581        (JSC::Machine::cti_op_call_profiler):
28582        (JSC::Machine::cti_op_call_JSFunction):
28583        (JSC::Machine::cti_vm_lazyLinkCall):
28584        (JSC::Machine::cti_op_construct_JSConstructFast):
28585        (JSC::Machine::cti_op_construct_JSConstruct):
28586        (JSC::Machine::cti_op_construct_NotJSConstruct):
28587        * VM/Machine.h:
28588        * kjs/JSFunction.cpp:
28589        (JSC::JSFunction::~JSFunction):
28590        * kjs/JSFunction.h:
28591        * kjs/nodes.h:
28592        (JSC::FunctionBodyNode::):
28593        * masm/X86Assembler.h:
28594        (JSC::X86Assembler::getDifferenceBetweenLabels):
28595
285962008-10-17  Maciej Stachowiak  <mjs@apple.com>
28597
28598        Reviewed by Geoff Garen.
28599        
28600        - remove ASSERT that makes the leaks buildbot cry
28601
28602        * kjs/JSFunction.cpp:
28603        (JSC::JSFunction::JSFunction):
28604
286052008-10-17  Maciej Stachowiak  <mjs@apple.com>
28606
28607        Reviewed by Cameron Zwarich
28608        
28609        - don't bother to do arguments tearoff when it will have no effect
28610
28611        ~1% on v8 raytrace
28612        
28613        * VM/CodeGenerator.cpp:
28614        (JSC::CodeGenerator::emitReturn):
28615
286162008-10-17  Marco Barisione  <marco.barisione@collabora.co.uk>
28617
28618        Reviewed by Sam Weinig. Landed by Jan Alonzo.
28619
28620        https://bugs.webkit.org/show_bug.cgi?id=21603
28621        [GTK] Minor fixes to GOwnPtr
28622
28623        * wtf/GOwnPtr.cpp:
28624        (WTF::GError):
28625        (WTF::GList):
28626        (WTF::GCond):
28627        (WTF::GMutex):
28628        (WTF::GPatternSpec):
28629        (WTF::GDir):
28630        * wtf/GOwnPtr.h:
28631        (WTF::freeOwnedGPtr):
28632        (WTF::GOwnPtr::~GOwnPtr):
28633        (WTF::GOwnPtr::outPtr):
28634        (WTF::GOwnPtr::set):
28635        (WTF::GOwnPtr::clear):
28636        * wtf/Threading.h:
28637
286382008-10-17  Maciej Stachowiak  <mjs@apple.com>
28639
28640        Reviewed by Cameron Zwarich.
28641        
28642        - speed up transitions that resize the property storage a fair bit
28643        
28644        ~3% speedup on v8 RayTrace benchmark, ~1% on DeltaBlue
28645
28646        * VM/CTI.cpp:
28647        (JSC::resizePropertyStorage): renamed from transitionObject, and reduced to just resize
28648        the object's property storage with one inline call.
28649        (JSC::CTI::privateCompilePutByIdTransition): Use a separate function for property storage
28650        resize, but still do all the rest of the work in assembly in that case, and pass the known
28651        compile-time constants of old and new size rather than structureIDs, saving a bunch of
28652        redundant memory access.
28653        * kjs/JSObject.cpp:
28654        (JSC::JSObject::allocatePropertyStorage): Just call the inline version.
28655        * kjs/JSObject.h:
28656        (JSC::JSObject::allocatePropertyStorageInline): Inline version of allocatePropertyStorage
28657        * masm/X86Assembler.h:
28658        (JSC::X86Assembler::):
28659        (JSC::X86Assembler::pushl_i32): Add code to assmeble push of a constant; code originally by Cameron Zwarich.
28660
286612008-10-17  Cameron Zwarich  <zwarich@apple.com>
28662
28663        Reviewed by Maciej Stachowiak.
28664
28665        Remove some C style casts.
28666
28667        * masm/X86Assembler.h:
28668        (JSC::JITCodeBuffer::putIntUnchecked):
28669        (JSC::X86Assembler::link):
28670        (JSC::X86Assembler::linkAbsoluteAddress):
28671        (JSC::X86Assembler::getRelocatedAddress):
28672
286732008-10-17  Cameron Zwarich  <zwarich@apple.com>
28674
28675        Rubber-stamped by Maciej Stachowiak.
28676
28677        Remove some C style casts.
28678
28679        * VM/CTI.cpp:
28680        (JSC::CTI::patchGetByIdSelf):
28681        (JSC::CTI::patchPutByIdReplace):
28682        * VM/Machine.cpp:
28683        (JSC::Machine::tryCTICachePutByID):
28684        (JSC::Machine::tryCTICacheGetByID):
28685        (JSC::Machine::cti_op_put_by_id):
28686        (JSC::Machine::cti_op_put_by_id_fail):
28687        (JSC::Machine::cti_op_get_by_id):
28688        (JSC::Machine::cti_op_get_by_id_fail):
28689
286902008-10-17  Maciej Stachowiak  <mjs@apple.com>
28691
28692        Reviewed by Cameron Zwarich.
28693        
28694        - Avoid restoring the caller's 'r' value in op_ret
28695        https://bugs.webkit.org/show_bug.cgi?id=21319
28696
28697        This patch stops writing the call frame at call and return points;
28698        instead it does so immediately before any CTI call.
28699        
28700        0.5% speedup or so on the v8 benchmark
28701               
28702        * VM/CTI.cpp:
28703        (JSC::CTI::emitCTICall):
28704        (JSC::CTI::compileOpCall):
28705        (JSC::CTI::emitSlowScriptCheck):
28706        (JSC::CTI::compileBinaryArithOpSlowCase):
28707        (JSC::CTI::privateCompileMainPass):
28708        (JSC::CTI::privateCompileSlowCases):
28709        (JSC::CTI::privateCompile):
28710        * VM/CTI.h:
28711
287122008-10-17  Cameron Zwarich  <zwarich@apple.com>
28713
28714        Reviewed by Sam Weinig.
28715
28716        Make WREC require CTI because it won't actually compile otherwise.
28717
28718        * wtf/Platform.h:
28719
287202008-10-16  Maciej Stachowiak  <mjs@apple.com>
28721
28722        Reviewed by Geoff Garen.
28723
28724        - fixed <rdar://problem/5806316> JavaScriptCore should not force building with gcc 4.0
28725        - use gcc 4.2 when building with Xcode 3.1 or newer on Leopard, even though this is not the default
28726
28727        This time there is no performance regression; we can avoid having
28728        to use the fastcall calling convention for CTI functions by using
28729        varargs to prevent the compiler from moving things around on the
28730        stack.
28731        
28732        * Configurations/DebugRelease.xcconfig:
28733        * JavaScriptCore.xcodeproj/project.pbxproj:
28734        * VM/CTI.cpp:
28735        * VM/Machine.h:
28736        * wtf/Platform.h:
28737
287382008-10-16  Maciej Stachowiak  <mjs@apple.com>
28739
28740        Reviewed by Oliver Hunt.
28741
28742        - fix for REGRESSION: r37631 causing crashes on buildbot
28743        https://bugs.webkit.org/show_bug.cgi?id=21682
28744        
28745        * kjs/collector.cpp:
28746        (JSC::Heap::collect): Avoid crashing when a GC occurs while no global objects are live.
28747
287482008-10-16  Sam Weinig  <sam@webkit.org>
28749
28750        Reviewed by Maciej Stachowiak.
28751
28752        Fix for https://bugs.webkit.org/show_bug.cgi?id=21683
28753        Don't create intermediate StructureIDs for builtin objects
28754
28755        First step in reduce number of StructureIDs created when initializing the
28756        JSGlobalObject.
28757
28758        - In order to avoid creating the intermediate StructureIDs use the new putDirectWithoutTransition
28759          and putDirectFunctionWithoutTransition to add properties to JSObjects without transitioning
28760          the StructureID.  This patch just implements this strategy for ObjectPrototype but alone
28761          reduces the number of StructureIDs create for about:blank by 10, from 142 to 132.
28762
28763        * kjs/JSGlobalObject.cpp:
28764        (JSC::JSGlobalObject::reset):
28765        * kjs/JSObject.cpp:
28766        (JSC::JSObject::putDirectFunctionWithoutTransition):
28767        * kjs/JSObject.h:
28768        (JSC::JSObject::putDirectWithoutTransition):
28769        * kjs/ObjectPrototype.cpp:
28770        (JSC::ObjectPrototype::ObjectPrototype):
28771        * kjs/ObjectPrototype.h:
28772        * kjs/StructureID.cpp:
28773        (JSC::StructureID::addPropertyWithoutTransition):
28774        * kjs/StructureID.h:
28775
287762008-10-16  Maciej Stachowiak  <mjs@apple.com>
28777
28778        Reviewed by Cameron Zwarich.
28779        
28780        - fix for: REGRESSION: over 100 StructureIDs leak loading about:blank (result of fix for bug 21633)
28781        
28782        Apparent slight progression (< 0.5%) on v8 benchmarks and SunSpider.
28783
28784        * kjs/StructureID.cpp:
28785        (JSC::StructureID::~StructureID): Don't deref this object's parent's pointer to
28786        itself from the destructor; that doesn't even make sense.
28787        (JSC::StructureID::addPropertyTransition): Don't refer the single transition;
28788        the rule is that parent StructureIDs are ref'd but child ones are not. Refing
28789        the child creates a cycle.
28790
287912008-10-15  Alexey Proskuryakov  <ap@webkit.org>
28792
28793        Reviewed by Darin Adler.
28794
28795        https://bugs.webkit.org/show_bug.cgi?id=21609
28796        Make MessagePorts protect their peers across heaps
28797
28798        * JavaScriptCore.exp:
28799        * kjs/JSGlobalObject.cpp:
28800        (JSC::JSGlobalObject::markCrossHeapDependentObjects):
28801        * kjs/JSGlobalObject.h:
28802        * kjs/collector.cpp:
28803        (JSC::Heap::collect):
28804        Before GC sweep phase, a function supplied by global object is now called for all global
28805        objects in the heap, making it possible to implement cross-heap dependencies.
28806
288072008-10-15  Alexey Proskuryakov  <ap@webkit.org>
28808
28809        Reviewed by Darin Adler.
28810
28811        https://bugs.webkit.org/show_bug.cgi?id=21610
28812        run-webkit-threads --threaded crashes in StructureID destructor
28813
28814        * kjs/StructureID.cpp:
28815        (JSC::StructureID::StructureID):
28816        (JSC::StructureID::~StructureID):
28817        Protect access to a static (debug-only) HashSet with a lock.
28818
288192008-10-15  Sam Weinig  <sam@webkit.org>
28820
28821        Reviewed by Goeffrey Garen.
28822
28823        Add function to dump statistics for StructureIDs.
28824
28825        * kjs/StructureID.cpp:
28826        (JSC::StructureID::dumpStatistics):
28827        (JSC::StructureID::StructureID):
28828        (JSC::StructureID::~StructureID):
28829        * kjs/StructureID.h:
28830
288312008-10-15  Cameron Zwarich  <zwarich@apple.com>
28832
28833        Reviewed by Maciej Stachowiak.
28834
28835        Bug 21633: Avoid using a HashMap when there is only a single transition
28836        <https://bugs.webkit.org/show_bug.cgi?id=21633>
28837
28838        This is a 0.8% speedup on SunSpider and between a 0.5% and 1.0% speedup
28839        on the V8 benchmark suite, depending on which harness we use. It will
28840        also slightly reduce the memory footprint of a StructureID.
28841
28842        * kjs/StructureID.cpp:
28843        (JSC::StructureID::StructureID):
28844        (JSC::StructureID::~StructureID):
28845        (JSC::StructureID::addPropertyTransition):
28846        * kjs/StructureID.h:
28847        (JSC::StructureID::):
28848
288492008-10-15  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>
28850
28851        Reviewed by Geoffrey Garen.
28852
28853        1.40% speedup on SunSpider, 1.44% speedup on V8. (Linux)
28854        
28855        No change on Mac.
28856
28857        * VM/Machine.cpp:
28858        (JSC::fastIsNumber): ALWAYS_INLINE modifier added.
28859
288602008-10-15  Geoffrey Garen  <ggaren@apple.com>
28861
28862        Reviewed by Cameron Zwarich.
28863
28864        Fixed https://bugs.webkit.org/show_bug.cgi?id=21345
28865        Start the debugger without reloading the inspected page
28866
28867        * JavaScriptCore.exp: New symbols.
28868        * JavaScriptCore.xcodeproj/project.pbxproj: New files.
28869
28870        * VM/CodeBlock.h:
28871        (JSC::EvalCodeCache::get): Updated for tweak to parsing API.
28872
28873        * kjs/CollectorHeapIterator.h: Added. An iterator for the object heap,
28874        which we use to find all the live functions and recompile them.
28875
28876        * kjs/DebuggerCallFrame.cpp:
28877        (JSC::DebuggerCallFrame::evaluate): Updated for tweak to parsing API.
28878
28879        * kjs/FunctionConstructor.cpp:
28880        (JSC::constructFunction): Updated for tweak to parsing API.
28881
28882        * kjs/JSFunction.cpp:
28883        (JSC::JSFunction::JSFunction): Try to validate our SourceCode in debug
28884        builds by ASSERTing that it's syntactically valid. This doesn't catch
28885        all SourceCode bugs, but it catches a lot of them.
28886
28887        * kjs/JSGlobalObjectFunctions.cpp:
28888        (JSC::globalFuncEval): Updated for tweak to parsing API.
28889
28890        * kjs/Parser.cpp:
28891        (JSC::Parser::parse):
28892        * kjs/Parser.h:
28893        (JSC::Parser::parse): Tweaked the parser to make it possible to parse
28894        without an ExecState, and to allow the client to specify a debugger to
28895        notify (or not) about the source we parse. This allows the inspector
28896        to recompile even though no JavaScript is executing, then notify the
28897        debugger about all source code when it's done.
28898
28899        * kjs/Shell.cpp:
28900        (prettyPrintScript): Updated for tweak to parsing API.
28901
28902        * kjs/SourceRange.h:
28903        (JSC::SourceCode::isNull): Added to help with ASSERTs.
28904
28905        * kjs/collector.cpp:
28906        (JSC::Heap::heapAllocate):
28907        (JSC::Heap::sweep):
28908        (JSC::Heap::primaryHeapBegin):
28909        (JSC::Heap::primaryHeapEnd):
28910        * kjs/collector.h:
28911        (JSC::): Moved a bunch of declarations around to enable compilation of
28912        CollectorHeapIterator.
28913
28914        * kjs/interpreter.cpp:
28915        (JSC::Interpreter::checkSyntax):
28916        (JSC::Interpreter::evaluate): Updated for tweak to parsing API.
28917
28918        * kjs/lexer.h:
28919        (JSC::Lexer::sourceCode): BUG FIX: Calculate SourceCode ranges relative
28920        to the SourceCode range in which we're lexing, otherwise nested functions
28921        that are compiled individually get SourceCode ranges that don't reflect
28922        their nesting.
28923
28924        * kjs/nodes.cpp:
28925        (JSC::FunctionBodyNode::FunctionBodyNode):
28926        (JSC::FunctionBodyNode::finishParsing):
28927        (JSC::FunctionBodyNode::create):
28928        (JSC::FunctionBodyNode::copyParameters):
28929        * kjs/nodes.h:
28930        (JSC::ScopeNode::setSource):
28931        (JSC::FunctionBodyNode::parameterCount): Added some helper functions for
28932        copying one FunctionBodyNode's parameters to another. The recompiler uses
28933        these when calling "finishParsing".
28934
289352008-10-15  Joerg Bornemann  <joerg.bornemann@trolltech.com>
28936
28937        Reviewed by Darin Adler.
28938
28939        - part of https://bugs.webkit.org/show_bug.cgi?id=20746
28940          Fix compilation on Windows CE.
28941
28942        str(n)icmp, strdup and vsnprintf are not available on Windows CE,
28943        they are called _str(n)icmp, etc. instead
28944
28945        * wtf/StringExtras.h: Added inline function implementations.
28946
289472008-10-15  Gabor Loki  <loki@inf.u-szeged.hu>
28948
28949        Reviewed by Cameron Zwarich.
28950
28951        <https://bugs.webkit.org/show_bug.cgi?id=20912>
28952        Use simple uint32_t multiplication on op_mul if both operands are
28953        immediate number and they are between zero and 0x7FFF.
28954
28955        * VM/Machine.cpp:
28956        (JSC::Machine::privateExecute):
28957
289582008-10-09  Darin Fisher  <darin@chromium.org>
28959
28960        Reviewed by Sam Weinig.
28961
28962        Make pan scrolling a platform configurable option.
28963        https://bugs.webkit.org/show_bug.cgi?id=21515
28964
28965        * wtf/Platform.h: Add ENABLE_PAN_SCROLLING
28966
289672008-10-14  Maciej Stachowiak  <mjs@apple.com>
28968
28969        Rubber stamped by Sam Weinig.
28970        
28971        - revert r37572 and r37581 for now
28972        
28973        Turns out GCC 4.2 is still a (small) regression, we'll have to do
28974        more work to turn it on.
28975
28976        * Configurations/DebugRelease.xcconfig:
28977        * JavaScriptCore.xcodeproj/project.pbxproj:
28978        * VM/CTI.cpp:
28979        * VM/CTI.h:
28980        * VM/Machine.cpp:
28981        (JSC::Machine::cti_op_convert_this):
28982        (JSC::Machine::cti_op_end):
28983        (JSC::Machine::cti_op_add):
28984        (JSC::Machine::cti_op_pre_inc):
28985        (JSC::Machine::cti_timeout_check):
28986        (JSC::Machine::cti_register_file_check):
28987        (JSC::Machine::cti_op_loop_if_less):
28988        (JSC::Machine::cti_op_loop_if_lesseq):
28989        (JSC::Machine::cti_op_new_object):
28990        (JSC::Machine::cti_op_put_by_id):
28991        (JSC::Machine::cti_op_put_by_id_second):
28992        (JSC::Machine::cti_op_put_by_id_generic):
28993        (JSC::Machine::cti_op_put_by_id_fail):
28994        (JSC::Machine::cti_op_get_by_id):
28995        (JSC::Machine::cti_op_get_by_id_second):
28996        (JSC::Machine::cti_op_get_by_id_generic):
28997        (JSC::Machine::cti_op_get_by_id_fail):
28998        (JSC::Machine::cti_op_instanceof):
28999        (JSC::Machine::cti_op_del_by_id):
29000        (JSC::Machine::cti_op_mul):
29001        (JSC::Machine::cti_op_new_func):
29002        (JSC::Machine::cti_op_call_JSFunction):
29003        (JSC::Machine::cti_vm_compile):
29004        (JSC::Machine::cti_op_push_activation):
29005        (JSC::Machine::cti_op_call_NotJSFunction):
29006        (JSC::Machine::cti_op_create_arguments):
29007        (JSC::Machine::cti_op_tear_off_activation):
29008        (JSC::Machine::cti_op_tear_off_arguments):
29009        (JSC::Machine::cti_op_ret_profiler):
29010        (JSC::Machine::cti_op_ret_scopeChain):
29011        (JSC::Machine::cti_op_new_array):
29012        (JSC::Machine::cti_op_resolve):
29013        (JSC::Machine::cti_op_construct_JSConstruct):
29014        (JSC::Machine::cti_op_construct_NotJSConstruct):
29015        (JSC::Machine::cti_op_get_by_val):
29016        (JSC::Machine::cti_op_resolve_func):
29017        (JSC::Machine::cti_op_sub):
29018        (JSC::Machine::cti_op_put_by_val):
29019        (JSC::Machine::cti_op_put_by_val_array):
29020        (JSC::Machine::cti_op_lesseq):
29021        (JSC::Machine::cti_op_loop_if_true):
29022        (JSC::Machine::cti_op_negate):
29023        (JSC::Machine::cti_op_resolve_base):
29024        (JSC::Machine::cti_op_resolve_skip):
29025        (JSC::Machine::cti_op_resolve_global):
29026        (JSC::Machine::cti_op_div):
29027        (JSC::Machine::cti_op_pre_dec):
29028        (JSC::Machine::cti_op_jless):
29029        (JSC::Machine::cti_op_not):
29030        (JSC::Machine::cti_op_jtrue):
29031        (JSC::Machine::cti_op_post_inc):
29032        (JSC::Machine::cti_op_eq):
29033        (JSC::Machine::cti_op_lshift):
29034        (JSC::Machine::cti_op_bitand):
29035        (JSC::Machine::cti_op_rshift):
29036        (JSC::Machine::cti_op_bitnot):
29037        (JSC::Machine::cti_op_resolve_with_base):
29038        (JSC::Machine::cti_op_new_func_exp):
29039        (JSC::Machine::cti_op_mod):
29040        (JSC::Machine::cti_op_less):
29041        (JSC::Machine::cti_op_neq):
29042        (JSC::Machine::cti_op_post_dec):
29043        (JSC::Machine::cti_op_urshift):
29044        (JSC::Machine::cti_op_bitxor):
29045        (JSC::Machine::cti_op_new_regexp):
29046        (JSC::Machine::cti_op_bitor):
29047        (JSC::Machine::cti_op_call_eval):
29048        (JSC::Machine::cti_op_throw):
29049        (JSC::Machine::cti_op_get_pnames):
29050        (JSC::Machine::cti_op_next_pname):
29051        (JSC::Machine::cti_op_push_scope):
29052        (JSC::Machine::cti_op_pop_scope):
29053        (JSC::Machine::cti_op_typeof):
29054        (JSC::Machine::cti_op_is_undefined):
29055        (JSC::Machine::cti_op_is_boolean):
29056        (JSC::Machine::cti_op_is_number):
29057        (JSC::Machine::cti_op_is_string):
29058        (JSC::Machine::cti_op_is_object):
29059        (JSC::Machine::cti_op_is_function):
29060        (JSC::Machine::cti_op_stricteq):
29061        (JSC::Machine::cti_op_nstricteq):
29062        (JSC::Machine::cti_op_to_jsnumber):
29063        (JSC::Machine::cti_op_in):
29064        (JSC::Machine::cti_op_push_new_scope):
29065        (JSC::Machine::cti_op_jmp_scopes):
29066        (JSC::Machine::cti_op_put_by_index):
29067        (JSC::Machine::cti_op_switch_imm):
29068        (JSC::Machine::cti_op_switch_char):
29069        (JSC::Machine::cti_op_switch_string):
29070        (JSC::Machine::cti_op_del_by_val):
29071        (JSC::Machine::cti_op_put_getter):
29072        (JSC::Machine::cti_op_put_setter):
29073        (JSC::Machine::cti_op_new_error):
29074        (JSC::Machine::cti_op_debug):
29075        (JSC::Machine::cti_vm_throw):
29076        * VM/Machine.h:
29077        * masm/X86Assembler.h:
29078        (JSC::X86Assembler::emitRestoreArgumentReference):
29079        (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline):
29080        * wtf/Platform.h:
29081
290822008-10-14  Alexey Proskuryakov  <ap@webkit.org>
29083
29084        Reviewed by Darin Adler.
29085
29086        https://bugs.webkit.org/show_bug.cgi?id=20256
29087        Array.push and other standard methods disappear
29088
29089        * kjs/JSGlobalData.cpp:
29090        (JSC::JSGlobalData::JSGlobalData):
29091        (JSC::JSGlobalData::~JSGlobalData):
29092        Don't use static hash tables even on platforms that don't enable JSC_MULTIPLE_THREADS -
29093        these tables reference IdentifierTable, which is always per-GlobalData.
29094
290952008-10-14  Maciej Stachowiak  <mjs@apple.com>
29096
29097        Reviewed by Cameron Zwarich.
29098        
29099        - always use CTI_ARGUMENTS and CTI_ARGUMENTS_FASTCALL
29100        
29101        This is a small regression for GCC 4.0, but simplifies the code
29102        for future improvements and lets us focus on GCC 4.2+ and MSVC.
29103
29104        * VM/CTI.cpp:
29105        * VM/CTI.h:
29106        * VM/Machine.cpp:
29107        (JSC::Machine::cti_op_convert_this):
29108        (JSC::Machine::cti_op_end):
29109        (JSC::Machine::cti_op_add):
29110        (JSC::Machine::cti_op_pre_inc):
29111        (JSC::Machine::cti_timeout_check):
29112        (JSC::Machine::cti_register_file_check):
29113        (JSC::Machine::cti_op_loop_if_less):
29114        (JSC::Machine::cti_op_loop_if_lesseq):
29115        (JSC::Machine::cti_op_new_object):
29116        (JSC::Machine::cti_op_put_by_id):
29117        (JSC::Machine::cti_op_put_by_id_second):
29118        (JSC::Machine::cti_op_put_by_id_generic):
29119        (JSC::Machine::cti_op_put_by_id_fail):
29120        (JSC::Machine::cti_op_get_by_id):
29121        (JSC::Machine::cti_op_get_by_id_second):
29122        (JSC::Machine::cti_op_get_by_id_generic):
29123        (JSC::Machine::cti_op_get_by_id_fail):
29124        (JSC::Machine::cti_op_instanceof):
29125        (JSC::Machine::cti_op_del_by_id):
29126        (JSC::Machine::cti_op_mul):
29127        (JSC::Machine::cti_op_new_func):
29128        (JSC::Machine::cti_op_call_JSFunction):
29129        (JSC::Machine::cti_vm_compile):
29130        (JSC::Machine::cti_op_push_activation):
29131        (JSC::Machine::cti_op_call_NotJSFunction):
29132        (JSC::Machine::cti_op_create_arguments):
29133        (JSC::Machine::cti_op_tear_off_activation):
29134        (JSC::Machine::cti_op_tear_off_arguments):
29135        (JSC::Machine::cti_op_ret_profiler):
29136        (JSC::Machine::cti_op_ret_scopeChain):
29137        (JSC::Machine::cti_op_new_array):
29138        (JSC::Machine::cti_op_resolve):
29139        (JSC::Machine::cti_op_construct_JSConstruct):
29140        (JSC::Machine::cti_op_construct_NotJSConstruct):
29141        (JSC::Machine::cti_op_get_by_val):
29142        (JSC::Machine::cti_op_resolve_func):
29143        (JSC::Machine::cti_op_sub):
29144        (JSC::Machine::cti_op_put_by_val):
29145        (JSC::Machine::cti_op_put_by_val_array):
29146        (JSC::Machine::cti_op_lesseq):
29147        (JSC::Machine::cti_op_loop_if_true):
29148        (JSC::Machine::cti_op_negate):
29149        (JSC::Machine::cti_op_resolve_base):
29150        (JSC::Machine::cti_op_resolve_skip):
29151        (JSC::Machine::cti_op_resolve_global):
29152        (JSC::Machine::cti_op_div):
29153        (JSC::Machine::cti_op_pre_dec):
29154        (JSC::Machine::cti_op_jless):
29155        (JSC::Machine::cti_op_not):
29156        (JSC::Machine::cti_op_jtrue):
29157        (JSC::Machine::cti_op_post_inc):
29158        (JSC::Machine::cti_op_eq):
29159        (JSC::Machine::cti_op_lshift):
29160        (JSC::Machine::cti_op_bitand):
29161        (JSC::Machine::cti_op_rshift):
29162        (JSC::Machine::cti_op_bitnot):
29163        (JSC::Machine::cti_op_resolve_with_base):
29164        (JSC::Machine::cti_op_new_func_exp):
29165        (JSC::Machine::cti_op_mod):
29166        (JSC::Machine::cti_op_less):
29167        (JSC::Machine::cti_op_neq):
29168        (JSC::Machine::cti_op_post_dec):
29169        (JSC::Machine::cti_op_urshift):
29170        (JSC::Machine::cti_op_bitxor):
29171        (JSC::Machine::cti_op_new_regexp):
29172        (JSC::Machine::cti_op_bitor):
29173        (JSC::Machine::cti_op_call_eval):
29174        (JSC::Machine::cti_op_throw):
29175        (JSC::Machine::cti_op_get_pnames):
29176        (JSC::Machine::cti_op_next_pname):
29177        (JSC::Machine::cti_op_push_scope):
29178        (JSC::Machine::cti_op_pop_scope):
29179        (JSC::Machine::cti_op_typeof):
29180        (JSC::Machine::cti_op_is_undefined):
29181        (JSC::Machine::cti_op_is_boolean):
29182        (JSC::Machine::cti_op_is_number):
29183        (JSC::Machine::cti_op_is_string):
29184        (JSC::Machine::cti_op_is_object):
29185        (JSC::Machine::cti_op_is_function):
29186        (JSC::Machine::cti_op_stricteq):
29187        (JSC::Machine::cti_op_nstricteq):
29188        (JSC::Machine::cti_op_to_jsnumber):
29189        (JSC::Machine::cti_op_in):
29190        (JSC::Machine::cti_op_push_new_scope):
29191        (JSC::Machine::cti_op_jmp_scopes):
29192        (JSC::Machine::cti_op_put_by_index):
29193        (JSC::Machine::cti_op_switch_imm):
29194        (JSC::Machine::cti_op_switch_char):
29195        (JSC::Machine::cti_op_switch_string):
29196        (JSC::Machine::cti_op_del_by_val):
29197        (JSC::Machine::cti_op_put_getter):
29198        (JSC::Machine::cti_op_put_setter):
29199        (JSC::Machine::cti_op_new_error):
29200        (JSC::Machine::cti_op_debug):
29201        (JSC::Machine::cti_vm_throw):
29202        * VM/Machine.h:
29203        * masm/X86Assembler.h:
29204        (JSC::X86Assembler::emitRestoreArgumentReference):
29205        (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline):
29206        * wtf/Platform.h:
29207
292082008-10-13  Maciej Stachowiak  <mjs@apple.com>
29209
29210        Reviewed by Cameron Zwarich.
29211        
29212        - make Machine::getArgumentsData an Arguments method and inline it
29213        
29214        ~2% on v8 raytrace
29215
29216        * VM/Machine.cpp:
29217        * kjs/Arguments.h:
29218        (JSC::Machine::getArgumentsData):
29219
292202008-10-13  Alp Toker  <alp@nuanti.com>
29221
29222        Fix autotools dist build target by listing recently added header
29223        files only. Not reviewed.
29224
29225        * GNUmakefile.am:
29226
292272008-10-13  Maciej Stachowiak  <mjs@apple.com>
29228
29229        Rubber stamped by Mark Rowe.
29230        
29231        - fixed <rdar://problem/5806316> JavaScriptCore should not force building with gcc 4.0
29232        - use gcc 4.2 when building with Xcode 3.1 or newer on Leopard, even though this is not the default
29233
29234        * Configurations/DebugRelease.xcconfig:
29235        * JavaScriptCore.xcodeproj/project.pbxproj:
29236
292372008-10-13  Cameron Zwarich  <zwarich@apple.com>
29238
29239        Reviewed by Geoff Garen.
29240
29241        Bug 21541: Move RegisterFile growth check to callee
29242        <https://bugs.webkit.org/show_bug.cgi?id=21541>
29243
29244        Move the RegisterFile growth check to the callee in the common case,
29245        where some of the information is known statically at JIT time. There is
29246        still a check in the caller in the case where the caller provides too
29247        few arguments.
29248
29249        This is a 2.1% speedup on the V8 benchmark, including a 5.1% speedup on
29250        the Richards benchmark, a 4.1% speedup on the DeltaBlue benchmark, and a
29251        1.4% speedup on the Earley-Boyer benchmark. It is also a 0.5% speedup on
29252        SunSpider.
29253
29254        * VM/CTI.cpp:
29255        (JSC::CTI::privateCompile):
29256        * VM/Machine.cpp:
29257        (JSC::Machine::cti_register_file_check):
29258        (JSC::Machine::cti_op_call_JSFunction):
29259        (JSC::Machine::cti_op_construct_JSConstruct):
29260        * VM/Machine.h:
29261        * VM/RegisterFile.h:
29262        * masm/X86Assembler.h:
29263        (JSC::X86Assembler::):
29264        (JSC::X86Assembler::cmpl_mr):
29265        (JSC::X86Assembler::emitUnlinkedJg):
29266
292672008-10-13  Sam Weinig  <sam@webkit.org>
29268
29269        Reviewed by Dan Bernstein.
29270
29271        Fix for https://bugs.webkit.org/show_bug.cgi?id=21577
29272        5 false positive StructureID leaks
29273
29274        - Add leak ignore set to StructureID to selectively ignore leaking some StructureIDs.
29275        - Add create method to JSGlolalData to be used when the data will be intentionally
29276          leaked and ignore all leaks caused the StructureIDs stored in it.
29277
29278        * JavaScriptCore.exp:
29279        * kjs/JSGlobalData.cpp:
29280        (JSC::JSGlobalData::createLeaked):
29281        * kjs/JSGlobalData.h:
29282        * kjs/StructureID.cpp:
29283        (JSC::StructureID::StructureID):
29284        (JSC::StructureID::~StructureID):
29285        (JSC::StructureID::startIgnoringLeaks):
29286        (JSC::StructureID::stopIgnoringLeaks):
29287        * kjs/StructureID.h:
29288
292892008-10-13  Marco Barisione  <marco.barisione@collabora.co.uk>
29290
29291        Reviewed by Darin Adler. Landed by Jan Alonzo.
29292
29293        WebKit GTK Port needs a smartpointer to handle g_free (GFreePtr?)
29294        http://bugs.webkit.org/show_bug.cgi?id=20483
29295
29296        Add a GOwnPtr smart pointer (similar to OwnPtr) to handle memory
29297        allocated by GLib and start the conversion to use it.
29298
29299        * GNUmakefile.am:
29300        * wtf/GOwnPtr.cpp: Added.
29301        (WTF::GError):
29302        (WTF::GList):
29303        (WTF::GCond):
29304        (WTF::GMutex):
29305        (WTF::GPatternSpec):
29306        (WTF::GDir):
29307        * wtf/GOwnPtr.h: Added.
29308        (WTF::freeOwnedPtr):
29309        (WTF::GOwnPtr::GOwnPtr):
29310        (WTF::GOwnPtr::~GOwnPtr):
29311        (WTF::GOwnPtr::get):
29312        (WTF::GOwnPtr::release):
29313        (WTF::GOwnPtr::rawPtr):
29314        (WTF::GOwnPtr::set):
29315        (WTF::GOwnPtr::clear):
29316        (WTF::GOwnPtr::operator*):
29317        (WTF::GOwnPtr::operator->):
29318        (WTF::GOwnPtr::operator!):
29319        (WTF::GOwnPtr::operator UnspecifiedBoolType):
29320        (WTF::GOwnPtr::swap):
29321        (WTF::swap):
29322        (WTF::operator==):
29323        (WTF::operator!=):
29324        (WTF::getPtr):
29325        * wtf/Threading.h:
29326        * wtf/ThreadingGtk.cpp:
29327        (WTF::Mutex::~Mutex):
29328        (WTF::Mutex::lock):
29329        (WTF::Mutex::tryLock):
29330        (WTF::Mutex::unlock):
29331        (WTF::ThreadCondition::~ThreadCondition):
29332        (WTF::ThreadCondition::wait):
29333        (WTF::ThreadCondition::timedWait):
29334        (WTF::ThreadCondition::signal):
29335        (WTF::ThreadCondition::broadcast):
29336
293372008-10-12  Gabriella Toth  <gtoth@inf.u-szeged.hu>
29338
29339        Reviewed by Darin Adler.
29340
29341        - part of https://bugs.webkit.org/show_bug.cgi?id=21055
29342          Bug 21055: not invoked functions
29343
29344        * kjs/nodes.cpp: Deleted a function that is not invoked:
29345        statementListInitializeVariableAccessStack.
29346
293472008-10-12  Darin Adler  <darin@apple.com>
29348
29349        Reviewed by Sam Weinig.
29350
29351        * wtf/unicode/icu/UnicodeIcu.h: Fixed indentation to match WebKit coding style.
29352        * wtf/unicode/qt4/UnicodeQt4.h: Ditto.
29353
293542008-10-12  Darin Adler  <darin@apple.com>
29355
29356        Reviewed by Sam Weinig.
29357
29358        - https://bugs.webkit.org/show_bug.cgi?id=21556
29359          Bug 21556: non-ASCII digits are allowed in places where only ASCII should be
29360
29361        * wtf/unicode/icu/UnicodeIcu.h: Removed isDigit, digitValue, and isFormatChar.
29362        * wtf/unicode/qt4/UnicodeQt4.h: Ditto.
29363
293642008-10-12  Anders Carlsson  <andersca@apple.com>
29365
29366        Reviewed by Darin Adler.
29367
29368        Make the append method that takes a Vector more strict - it now requires the elements 
29369        of the vector to be appended same type as the elements of the Vector they're being appended to.
29370        
29371        This would cause problems when dealing with Vectors containing other Vectors.
29372        
29373        * wtf/Vector.h:
29374        (WTF::::append):
29375
293762008-10-11  Cameron Zwarich  <zwarich@apple.com>
29377
29378        Reviewed by Sam Weinig.
29379
29380        Clean up RegExpMatchesArray.h to match our coding style.
29381
29382        * kjs/RegExpMatchesArray.h:
29383        (JSC::RegExpMatchesArray::getOwnPropertySlot):
29384        (JSC::RegExpMatchesArray::put):
29385        (JSC::RegExpMatchesArray::deleteProperty):
29386        (JSC::RegExpMatchesArray::getPropertyNames):
29387
293882008-10-11  Cameron Zwarich  <zwarich@apple.com>
29389
29390        Reviewed by Sam Weinig.
29391
29392        Bug 21525: 55 StructureID leaks on Wikitravel's main page
29393        <https://bugs.webkit.org/show_bug.cgi?id=21525>
29394
29395        Bug 21533: Simple JavaScript code leaks StructureIDs
29396        <https://bugs.webkit.org/show_bug.cgi?id=21533>
29397
29398        StructureID::getEnumerablePropertyNames() ends up calling back to itself
29399        via JSObject::getPropertyNames(), which causes the PropertyNameArray to
29400        be cached twice. This leads to a memory leak in almost every use of
29401        JSObject::getPropertyNames() on an object. The fix here is based on a
29402        suggestion of Sam Weinig.
29403
29404        This patch also fixes every StructureID leaks that occurs while running
29405        the Mozilla MemBuster test.
29406
29407        * kjs/PropertyNameArray.h:
29408        (JSC::PropertyNameArray::PropertyNameArray):
29409        (JSC::PropertyNameArray::setCacheable):
29410        (JSC::PropertyNameArray::cacheable):
29411        * kjs/StructureID.cpp:
29412        (JSC::StructureID::getEnumerablePropertyNames):
29413
294142008-10-10  Oliver Hunt  <oliver@apple.com>
29415
29416        Reviewed by Cameron Zwarich.
29417
29418        Use fastcall calling convention on GCC > 4.0
29419
29420        Results in a 2-3% improvement in GCC 4.2 performance, so
29421        that it is no longer a regression vs. GCC 4.0
29422
29423        * VM/CTI.cpp:
29424        * VM/Machine.h:
29425        * wtf/Platform.h:
29426
294272008-10-10  Sam Weinig  <sam@webkit.org>
29428
29429        Reviewed by Darin Adler.
29430
29431        - Add a workaround for a bug in ceil in Darwin libc.
29432        - Remove old workarounds for JS math functions that are not needed
29433          anymore.
29434
29435        The math functions are heavily tested by fast/js/math.html.
29436
29437        * kjs/MathObject.cpp:
29438        (JSC::mathProtoFuncAbs): Remove workaround.
29439        (JSC::mathProtoFuncCeil): Ditto.
29440        (JSC::mathProtoFuncFloor): Ditto.
29441        * wtf/MathExtras.h:
29442        (wtf_ceil): Add ceil workaround for darwin.
29443
294442008-10-10  Sam Weinig  <sam@webkit.org>
29445
29446        Reviewed by Darin Adler
29447
29448        Add Assertions to JSObject constructor.
29449
29450        * kjs/JSObject.h:
29451        (JSC::JSObject::JSObject):
29452
294532008-10-10  Sam Weinig  <sam@webkit.org>
29454
29455        Reviewed by Cameron Zwarich.
29456
29457        Remove now unused m_getterSetterFlag variable from PropertyMap.
29458
29459        * kjs/PropertyMap.cpp:
29460        (JSC::PropertyMap::operator=):
29461        * kjs/PropertyMap.h:
29462        (JSC::PropertyMap::PropertyMap):
29463
294642008-10-09  Sam Weinig  <sam@webkit.org>
29465
29466        Reviewed by Maciej Stachowiak.
29467
29468        Add leaks checking to StructureID.
29469
29470        * kjs/StructureID.cpp:
29471        (JSC::StructureID::StructureID):
29472        (JSC::StructureID::~StructureID):
29473
294742008-10-09  Alp Toker  <alp@nuanti.com>
29475
29476        Reviewed by Mark Rowe.
29477
29478        https://bugs.webkit.org/show_bug.cgi?id=20760
29479        Implement support for x86 Linux in CTI
29480
29481        Prepare to enable CTI/WREC on supported architectures.
29482
29483        Make it possible to use the CTI_ARGUMENT workaround with GCC as well
29484        as MSVC by fixing some preprocessor conditionals.
29485
29486        Note that CTI/WREC no longer requires CTI_ARGUMENT on Linux so we
29487        don't actually enable it except when building with MSVC. GCC on Win32
29488        remains untested.
29489
29490        Adapt inline ASM code to use the global symbol underscore prefix only
29491        on Darwin and to call the properly mangled Machine::cti_vm_throw
29492        symbol name depending on CTI_ARGUMENT.
29493
29494        Also avoid global inclusion of the JIT infrastructure headers
29495        throughout WebCore and WebKit causing recompilation of about ~1500
29496        source files after modification to X86Assembler.h, CTI.h, WREC.h,
29497        which are only used deep inside JavaScriptCore.
29498
29499        * GNUmakefile.am:
29500        * VM/CTI.cpp:
29501        * VM/CTI.h:
29502        * VM/Machine.cpp:
29503        * VM/Machine.h:
29504        * kjs/regexp.cpp:
29505        (JSC::RegExp::RegExp):
29506        (JSC::RegExp::~RegExp):
29507        (JSC::RegExp::match):
29508        * kjs/regexp.h:
29509        * masm/X86Assembler.h:
29510        (JSC::X86Assembler::emitConvertToFastCall):
29511        (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline):
29512        (JSC::X86Assembler::emitRestoreArgumentReference):
29513
295142008-10-09  Gavin Barraclough  <barraclough@apple.com>
29515
29516        Reviewed by Cameron Zwarich.
29517
29518        Fix for bug #21160, x=0;1/(x*-1) == -Infinity
29519
29520        * ChangeLog:
29521        * VM/CTI.cpp:
29522        (JSC::CTI::emitFastArithDeTagImmediate):
29523        (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero):
29524        (JSC::CTI::compileBinaryArithOp):
29525        (JSC::CTI::compileBinaryArithOpSlowCase):
29526        (JSC::CTI::privateCompileMainPass):
29527        (JSC::CTI::privateCompileSlowCases):
29528        * VM/CTI.h:
29529        * masm/X86Assembler.h:
29530        (JSC::X86Assembler::):
29531        (JSC::X86Assembler::emitUnlinkedJs):
29532
295332008-10-09  Cameron Zwarich  <zwarich@apple.com>
29534
29535        Reviewed by Oliver Hunt.
29536
29537        Bug 21459: REGRESSION (r37324): Safari crashes inside JavaScriptCore while browsing hulu.com
29538        <https://bugs.webkit.org/show_bug.cgi?id=21459>
29539
29540        After r37324, an Arguments object does not mark an associated activation
29541        object. This change was made because Arguments no longer directly used
29542        the activation object in any way. However, if an activation is torn off,
29543        then the backing store of Arguments becomes the register array of the
29544        activation object. Arguments directly marks all of the arguments, but
29545        the activation object is being collected, which causes its register
29546        array to be freed and new memory to be allocated in its place.
29547
29548        Unfortunately, it does not seem possible to reproduce this issue in a
29549        layout test.
29550
29551        * kjs/Arguments.cpp:
29552        (JSC::Arguments::mark):
29553        * kjs/Arguments.h:
29554        (JSC::Arguments::setActivation):
29555        (JSC::Arguments::Arguments):
29556        (JSC::JSActivation::copyRegisters):
29557
295582008-10-09  Ariya Hidayat  <ariya.hidayat@trolltech.com>
29559
29560        Reviewed by Simon.
29561
29562        Build fix for MinGW.
29563
29564        * wtf/AlwaysInline.h:
29565
295662008-10-08  Cameron Zwarich  <zwarich@apple.com>
29567
29568        Reviewed by Maciej Stachowiak.
29569
29570        Bug 21497: REGRESSION (r37433): Bytecode JSC tests are severely broken
29571        <https://bugs.webkit.org/show_bug.cgi?id=21497>
29572
29573        Fix a typo in r37433 that causes the failure of a large number of JSC
29574        tests with the bytecode interpreter enabled.
29575
29576        * VM/Machine.cpp:
29577        (JSC::Machine::privateExecute):
29578
295792008-10-08  Mark Rowe  <mrowe@apple.com>
29580
29581        Windows build fix.
29582
29583        * VM/CTI.cpp:
29584        (JSC::): Update type of argument to ctiTrampoline.
29585
295862008-10-08  Darin Adler  <darin@apple.com>
29587
29588        Reviewed by Cameron Zwarich.
29589
29590        - https://bugs.webkit.org/show_bug.cgi?id=21403
29591          Bug 21403: use new CallFrame class rather than Register* for call frame manipulation
29592
29593        Add CallFrame as a synonym for ExecState. Arguably, some day we should switch every
29594        client over to the new name.
29595
29596        Use CallFrame* consistently rather than Register* or ExecState* in low-level code such
29597        as Machine.cpp and CTI.cpp. Similarly, use callFrame rather than r as its name and use
29598        accessor functions to get at things in the frame.
29599
29600        Eliminate other uses of ExecState* that aren't needed, replacing in some cases with
29601        JSGlobalData* and in other cases eliminating them entirely.
29602
29603        * API/JSObjectRef.cpp:
29604        (JSObjectMakeFunctionWithCallback):
29605        (JSObjectMakeFunction):
29606        (JSObjectHasProperty):
29607        (JSObjectGetProperty):
29608        (JSObjectSetProperty):
29609        (JSObjectDeleteProperty):
29610        * API/OpaqueJSString.cpp:
29611        * API/OpaqueJSString.h:
29612        * VM/CTI.cpp:
29613        (JSC::CTI::getConstant):
29614        (JSC::CTI::emitGetArg):
29615        (JSC::CTI::emitGetPutArg):
29616        (JSC::CTI::getConstantImmediateNumericArg):
29617        (JSC::CTI::printOpcodeOperandTypes):
29618        (JSC::CTI::CTI):
29619        (JSC::CTI::compileOpCall):
29620        (JSC::CTI::compileBinaryArithOp):
29621        (JSC::CTI::privateCompileMainPass):
29622        (JSC::CTI::privateCompile):
29623        (JSC::CTI::privateCompileGetByIdProto):
29624        (JSC::CTI::privateCompileGetByIdChain):
29625        (JSC::CTI::compileRegExp):
29626        * VM/CTI.h:
29627        * VM/CodeBlock.h:
29628        * VM/CodeGenerator.cpp:
29629        (JSC::CodeGenerator::emitEqualityOp):
29630        (JSC::CodeGenerator::emitLoad):
29631        (JSC::CodeGenerator::emitUnexpectedLoad):
29632        (JSC::CodeGenerator::emitConstruct):
29633        * VM/CodeGenerator.h:
29634        * VM/Machine.cpp:
29635        (JSC::jsLess):
29636        (JSC::jsLessEq):
29637        (JSC::jsAddSlowCase):
29638        (JSC::jsAdd):
29639        (JSC::jsTypeStringForValue):
29640        (JSC::Machine::resolve):
29641        (JSC::Machine::resolveSkip):
29642        (JSC::Machine::resolveGlobal):
29643        (JSC::inlineResolveBase):
29644        (JSC::Machine::resolveBase):
29645        (JSC::Machine::resolveBaseAndProperty):
29646        (JSC::Machine::resolveBaseAndFunc):
29647        (JSC::Machine::slideRegisterWindowForCall):
29648        (JSC::isNotObject):
29649        (JSC::Machine::callEval):
29650        (JSC::Machine::dumpCallFrame):
29651        (JSC::Machine::dumpRegisters):
29652        (JSC::Machine::unwindCallFrame):
29653        (JSC::Machine::throwException):
29654        (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
29655        (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope):
29656        (JSC::Machine::execute):
29657        (JSC::Machine::debug):
29658        (JSC::Machine::createExceptionScope):
29659        (JSC::cachePrototypeChain):
29660        (JSC::Machine::tryCachePutByID):
29661        (JSC::Machine::tryCacheGetByID):
29662        (JSC::Machine::privateExecute):
29663        (JSC::Machine::retrieveArguments):
29664        (JSC::Machine::retrieveCaller):
29665        (JSC::Machine::retrieveLastCaller):
29666        (JSC::Machine::findFunctionCallFrame):
29667        (JSC::Machine::getArgumentsData):
29668        (JSC::Machine::tryCTICachePutByID):
29669        (JSC::Machine::getCTIArrayLengthTrampoline):
29670        (JSC::Machine::getCTIStringLengthTrampoline):
29671        (JSC::Machine::tryCTICacheGetByID):
29672        (JSC::Machine::cti_op_convert_this):
29673        (JSC::Machine::cti_op_end):
29674        (JSC::Machine::cti_op_add):
29675        (JSC::Machine::cti_op_pre_inc):
29676        (JSC::Machine::cti_timeout_check):
29677        (JSC::Machine::cti_op_loop_if_less):
29678        (JSC::Machine::cti_op_loop_if_lesseq):
29679        (JSC::Machine::cti_op_new_object):
29680        (JSC::Machine::cti_op_put_by_id):
29681        (JSC::Machine::cti_op_put_by_id_second):
29682        (JSC::Machine::cti_op_put_by_id_generic):
29683        (JSC::Machine::cti_op_put_by_id_fail):
29684        (JSC::Machine::cti_op_get_by_id):
29685        (JSC::Machine::cti_op_get_by_id_second):
29686        (JSC::Machine::cti_op_get_by_id_generic):
29687        (JSC::Machine::cti_op_get_by_id_fail):
29688        (JSC::Machine::cti_op_instanceof):
29689        (JSC::Machine::cti_op_del_by_id):
29690        (JSC::Machine::cti_op_mul):
29691        (JSC::Machine::cti_op_new_func):
29692        (JSC::Machine::cti_op_call_JSFunction):
29693        (JSC::Machine::cti_vm_compile):
29694        (JSC::Machine::cti_op_push_activation):
29695        (JSC::Machine::cti_op_call_NotJSFunction):
29696        (JSC::Machine::cti_op_create_arguments):
29697        (JSC::Machine::cti_op_tear_off_activation):
29698        (JSC::Machine::cti_op_tear_off_arguments):
29699        (JSC::Machine::cti_op_ret_profiler):
29700        (JSC::Machine::cti_op_ret_scopeChain):
29701        (JSC::Machine::cti_op_new_array):
29702        (JSC::Machine::cti_op_resolve):
29703        (JSC::Machine::cti_op_construct_JSConstruct):
29704        (JSC::Machine::cti_op_construct_NotJSConstruct):
29705        (JSC::Machine::cti_op_get_by_val):
29706        (JSC::Machine::cti_op_resolve_func):
29707        (JSC::Machine::cti_op_sub):
29708        (JSC::Machine::cti_op_put_by_val):
29709        (JSC::Machine::cti_op_put_by_val_array):
29710        (JSC::Machine::cti_op_lesseq):
29711        (JSC::Machine::cti_op_loop_if_true):
29712        (JSC::Machine::cti_op_negate):
29713        (JSC::Machine::cti_op_resolve_base):
29714        (JSC::Machine::cti_op_resolve_skip):
29715        (JSC::Machine::cti_op_resolve_global):
29716        (JSC::Machine::cti_op_div):
29717        (JSC::Machine::cti_op_pre_dec):
29718        (JSC::Machine::cti_op_jless):
29719        (JSC::Machine::cti_op_not):
29720        (JSC::Machine::cti_op_jtrue):
29721        (JSC::Machine::cti_op_post_inc):
29722        (JSC::Machine::cti_op_eq):
29723        (JSC::Machine::cti_op_lshift):
29724        (JSC::Machine::cti_op_bitand):
29725        (JSC::Machine::cti_op_rshift):
29726        (JSC::Machine::cti_op_bitnot):
29727        (JSC::Machine::cti_op_resolve_with_base):
29728        (JSC::Machine::cti_op_new_func_exp):
29729        (JSC::Machine::cti_op_mod):
29730        (JSC::Machine::cti_op_less):
29731        (JSC::Machine::cti_op_neq):
29732        (JSC::Machine::cti_op_post_dec):
29733        (JSC::Machine::cti_op_urshift):
29734        (JSC::Machine::cti_op_bitxor):
29735        (JSC::Machine::cti_op_new_regexp):
29736        (JSC::Machine::cti_op_bitor):
29737        (JSC::Machine::cti_op_call_eval):
29738        (JSC::Machine::cti_op_throw):
29739        (JSC::Machine::cti_op_get_pnames):
29740        (JSC::Machine::cti_op_next_pname):
29741        (JSC::Machine::cti_op_push_scope):
29742        (JSC::Machine::cti_op_pop_scope):
29743        (JSC::Machine::cti_op_typeof):
29744        (JSC::Machine::cti_op_to_jsnumber):
29745        (JSC::Machine::cti_op_in):
29746        (JSC::Machine::cti_op_push_new_scope):
29747        (JSC::Machine::cti_op_jmp_scopes):
29748        (JSC::Machine::cti_op_put_by_index):
29749        (JSC::Machine::cti_op_switch_imm):
29750        (JSC::Machine::cti_op_switch_char):
29751        (JSC::Machine::cti_op_switch_string):
29752        (JSC::Machine::cti_op_del_by_val):
29753        (JSC::Machine::cti_op_put_getter):
29754        (JSC::Machine::cti_op_put_setter):
29755        (JSC::Machine::cti_op_new_error):
29756        (JSC::Machine::cti_op_debug):
29757        (JSC::Machine::cti_vm_throw):
29758        * VM/Machine.h:
29759        * VM/Register.h:
29760        * VM/RegisterFile.h:
29761        * kjs/Arguments.h:
29762        * kjs/DebuggerCallFrame.cpp:
29763        (JSC::DebuggerCallFrame::functionName):
29764        (JSC::DebuggerCallFrame::type):
29765        (JSC::DebuggerCallFrame::thisObject):
29766        (JSC::DebuggerCallFrame::evaluate):
29767        * kjs/DebuggerCallFrame.h:
29768        * kjs/ExecState.cpp:
29769        (JSC::CallFrame::thisValue):
29770        * kjs/ExecState.h:
29771        * kjs/FunctionConstructor.cpp:
29772        (JSC::constructFunction):
29773        * kjs/JSActivation.cpp:
29774        (JSC::JSActivation::JSActivation):
29775        (JSC::JSActivation::argumentsGetter):
29776        * kjs/JSActivation.h:
29777        * kjs/JSGlobalObject.cpp:
29778        (JSC::JSGlobalObject::init):
29779        * kjs/JSGlobalObjectFunctions.cpp:
29780        (JSC::globalFuncEval):
29781        * kjs/JSVariableObject.h:
29782        * kjs/Parser.cpp:
29783        (JSC::Parser::parse):
29784        * kjs/RegExpConstructor.cpp:
29785        (JSC::constructRegExp):
29786        * kjs/RegExpPrototype.cpp:
29787        (JSC::regExpProtoFuncCompile):
29788        * kjs/Shell.cpp:
29789        (prettyPrintScript):
29790        * kjs/StringPrototype.cpp:
29791        (JSC::stringProtoFuncMatch):
29792        (JSC::stringProtoFuncSearch):
29793        * kjs/identifier.cpp:
29794        (JSC::Identifier::checkSameIdentifierTable):
29795        * kjs/interpreter.cpp:
29796        (JSC::Interpreter::checkSyntax):
29797        (JSC::Interpreter::evaluate):
29798        * kjs/nodes.cpp:
29799        (JSC::ThrowableExpressionData::emitThrowError):
29800        (JSC::RegExpNode::emitCode):
29801        (JSC::ArrayNode::emitCode):
29802        (JSC::InstanceOfNode::emitCode):
29803        * kjs/nodes.h:
29804        * kjs/regexp.cpp:
29805        (JSC::RegExp::RegExp):
29806        (JSC::RegExp::create):
29807        * kjs/regexp.h:
29808        * profiler/HeavyProfile.h:
29809        * profiler/Profile.h:
29810        * wrec/WREC.cpp:
29811        * wrec/WREC.h:
29812
298132008-10-08  Mark Rowe  <mrowe@apple.com>
29814
29815        Typed by Maciej Stachowiak, reviewed by Mark Rowe.
29816
29817        Fix crash in fast/js/constant-folding.html with CTI disabled.
29818
29819        * VM/Machine.cpp:
29820        (JSC::Machine::privateExecute):
29821
298222008-10-08  Timothy Hatcher  <timothy@apple.com>
29823
29824        Roll out r37427 because it causes an infinite recursion loading about:blank.
29825
29826        https://bugs.webkit.org/show_bug.cgi?id=21476
29827
298282008-10-08  Darin Adler  <darin@apple.com>
29829
29830        Reviewed by Cameron Zwarich.
29831
29832        - https://bugs.webkit.org/show_bug.cgi?id=21403
29833          Bug 21403: use new CallFrame class rather than Register* for call frame manipulation
29834
29835        Add CallFrame as a synonym for ExecState. Arguably, some day we should switch every
29836        client over to the new name.
29837
29838        Use CallFrame* consistently rather than Register* or ExecState* in low-level code such
29839        as Machine.cpp and CTI.cpp. Similarly, use callFrame rather than r as its name and use
29840        accessor functions to get at things in the frame.
29841
29842        Eliminate other uses of ExecState* that aren't needed, replacing in some cases with
29843        JSGlobalData* and in other cases eliminating them entirely.
29844
29845        * API/JSObjectRef.cpp:
29846        (JSObjectMakeFunctionWithCallback):
29847        (JSObjectMakeFunction):
29848        (JSObjectHasProperty):
29849        (JSObjectGetProperty):
29850        (JSObjectSetProperty):
29851        (JSObjectDeleteProperty):
29852        * API/OpaqueJSString.cpp:
29853        * API/OpaqueJSString.h:
29854        * VM/CTI.cpp:
29855        (JSC::CTI::getConstant):
29856        (JSC::CTI::emitGetArg):
29857        (JSC::CTI::emitGetPutArg):
29858        (JSC::CTI::getConstantImmediateNumericArg):
29859        (JSC::CTI::printOpcodeOperandTypes):
29860        (JSC::CTI::CTI):
29861        (JSC::CTI::compileOpCall):
29862        (JSC::CTI::compileBinaryArithOp):
29863        (JSC::CTI::privateCompileMainPass):
29864        (JSC::CTI::privateCompile):
29865        (JSC::CTI::privateCompileGetByIdProto):
29866        (JSC::CTI::privateCompileGetByIdChain):
29867        (JSC::CTI::compileRegExp):
29868        * VM/CTI.h:
29869        * VM/CodeBlock.h:
29870        * VM/CodeGenerator.cpp:
29871        (JSC::CodeGenerator::emitEqualityOp):
29872        (JSC::CodeGenerator::emitLoad):
29873        (JSC::CodeGenerator::emitUnexpectedLoad):
29874        (JSC::CodeGenerator::emitConstruct):
29875        * VM/CodeGenerator.h:
29876        * VM/Machine.cpp:
29877        (JSC::jsLess):
29878        (JSC::jsLessEq):
29879        (JSC::jsAddSlowCase):
29880        (JSC::jsAdd):
29881        (JSC::jsTypeStringForValue):
29882        (JSC::Machine::resolve):
29883        (JSC::Machine::resolveSkip):
29884        (JSC::Machine::resolveGlobal):
29885        (JSC::inlineResolveBase):
29886        (JSC::Machine::resolveBase):
29887        (JSC::Machine::resolveBaseAndProperty):
29888        (JSC::Machine::resolveBaseAndFunc):
29889        (JSC::Machine::slideRegisterWindowForCall):
29890        (JSC::isNotObject):
29891        (JSC::Machine::callEval):
29892        (JSC::Machine::dumpCallFrame):
29893        (JSC::Machine::dumpRegisters):
29894        (JSC::Machine::unwindCallFrame):
29895        (JSC::Machine::throwException):
29896        (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
29897        (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope):
29898        (JSC::Machine::execute):
29899        (JSC::Machine::debug):
29900        (JSC::Machine::createExceptionScope):
29901        (JSC::cachePrototypeChain):
29902        (JSC::Machine::tryCachePutByID):
29903        (JSC::Machine::tryCacheGetByID):
29904        (JSC::Machine::privateExecute):
29905        (JSC::Machine::retrieveArguments):
29906        (JSC::Machine::retrieveCaller):
29907        (JSC::Machine::retrieveLastCaller):
29908        (JSC::Machine::findFunctionCallFrame):
29909        (JSC::Machine::getArgumentsData):
29910        (JSC::Machine::tryCTICachePutByID):
29911        (JSC::Machine::getCTIArrayLengthTrampoline):
29912        (JSC::Machine::getCTIStringLengthTrampoline):
29913        (JSC::Machine::tryCTICacheGetByID):
29914        (JSC::Machine::cti_op_convert_this):
29915        (JSC::Machine::cti_op_end):
29916        (JSC::Machine::cti_op_add):
29917        (JSC::Machine::cti_op_pre_inc):
29918        (JSC::Machine::cti_timeout_check):
29919        (JSC::Machine::cti_op_loop_if_less):
29920        (JSC::Machine::cti_op_loop_if_lesseq):
29921        (JSC::Machine::cti_op_new_object):
29922        (JSC::Machine::cti_op_put_by_id):
29923        (JSC::Machine::cti_op_put_by_id_second):
29924        (JSC::Machine::cti_op_put_by_id_generic):
29925        (JSC::Machine::cti_op_put_by_id_fail):
29926        (JSC::Machine::cti_op_get_by_id):
29927        (JSC::Machine::cti_op_get_by_id_second):
29928        (JSC::Machine::cti_op_get_by_id_generic):
29929        (JSC::Machine::cti_op_get_by_id_fail):
29930        (JSC::Machine::cti_op_instanceof):
29931        (JSC::Machine::cti_op_del_by_id):
29932        (JSC::Machine::cti_op_mul):
29933        (JSC::Machine::cti_op_new_func):
29934        (JSC::Machine::cti_op_call_JSFunction):
29935        (JSC::Machine::cti_vm_compile):
29936        (JSC::Machine::cti_op_push_activation):
29937        (JSC::Machine::cti_op_call_NotJSFunction):
29938        (JSC::Machine::cti_op_create_arguments):
29939        (JSC::Machine::cti_op_tear_off_activation):
29940        (JSC::Machine::cti_op_tear_off_arguments):
29941        (JSC::Machine::cti_op_ret_profiler):
29942        (JSC::Machine::cti_op_ret_scopeChain):
29943        (JSC::Machine::cti_op_new_array):
29944        (JSC::Machine::cti_op_resolve):
29945        (JSC::Machine::cti_op_construct_JSConstruct):
29946        (JSC::Machine::cti_op_construct_NotJSConstruct):
29947        (JSC::Machine::cti_op_get_by_val):
29948        (JSC::Machine::cti_op_resolve_func):
29949        (JSC::Machine::cti_op_sub):
29950        (JSC::Machine::cti_op_put_by_val):
29951        (JSC::Machine::cti_op_put_by_val_array):
29952        (JSC::Machine::cti_op_lesseq):
29953        (JSC::Machine::cti_op_loop_if_true):
29954        (JSC::Machine::cti_op_negate):
29955        (JSC::Machine::cti_op_resolve_base):
29956        (JSC::Machine::cti_op_resolve_skip):
29957        (JSC::Machine::cti_op_resolve_global):
29958        (JSC::Machine::cti_op_div):
29959        (JSC::Machine::cti_op_pre_dec):
29960        (JSC::Machine::cti_op_jless):
29961        (JSC::Machine::cti_op_not):
29962        (JSC::Machine::cti_op_jtrue):
29963        (JSC::Machine::cti_op_post_inc):
29964        (JSC::Machine::cti_op_eq):
29965        (JSC::Machine::cti_op_lshift):
29966        (JSC::Machine::cti_op_bitand):
29967        (JSC::Machine::cti_op_rshift):
29968        (JSC::Machine::cti_op_bitnot):
29969        (JSC::Machine::cti_op_resolve_with_base):
29970        (JSC::Machine::cti_op_new_func_exp):
29971        (JSC::Machine::cti_op_mod):
29972        (JSC::Machine::cti_op_less):
29973        (JSC::Machine::cti_op_neq):
29974        (JSC::Machine::cti_op_post_dec):
29975        (JSC::Machine::cti_op_urshift):
29976        (JSC::Machine::cti_op_bitxor):
29977        (JSC::Machine::cti_op_new_regexp):
29978        (JSC::Machine::cti_op_bitor):
29979        (JSC::Machine::cti_op_call_eval):
29980        (JSC::Machine::cti_op_throw):
29981        (JSC::Machine::cti_op_get_pnames):
29982        (JSC::Machine::cti_op_next_pname):
29983        (JSC::Machine::cti_op_push_scope):
29984        (JSC::Machine::cti_op_pop_scope):
29985        (JSC::Machine::cti_op_typeof):
29986        (JSC::Machine::cti_op_to_jsnumber):
29987        (JSC::Machine::cti_op_in):
29988        (JSC::Machine::cti_op_push_new_scope):
29989        (JSC::Machine::cti_op_jmp_scopes):
29990        (JSC::Machine::cti_op_put_by_index):
29991        (JSC::Machine::cti_op_switch_imm):
29992        (JSC::Machine::cti_op_switch_char):
29993        (JSC::Machine::cti_op_switch_string):
29994        (JSC::Machine::cti_op_del_by_val):
29995        (JSC::Machine::cti_op_put_getter):
29996        (JSC::Machine::cti_op_put_setter):
29997        (JSC::Machine::cti_op_new_error):
29998        (JSC::Machine::cti_op_debug):
29999        (JSC::Machine::cti_vm_throw):
30000        * VM/Machine.h:
30001        * VM/Register.h:
30002        * VM/RegisterFile.h:
30003        * kjs/Arguments.h:
30004        * kjs/DebuggerCallFrame.cpp:
30005        (JSC::DebuggerCallFrame::functionName):
30006        (JSC::DebuggerCallFrame::type):
30007        (JSC::DebuggerCallFrame::thisObject):
30008        (JSC::DebuggerCallFrame::evaluate):
30009        * kjs/DebuggerCallFrame.h:
30010        * kjs/ExecState.cpp:
30011        (JSC::CallFrame::thisValue):
30012        * kjs/ExecState.h:
30013        * kjs/FunctionConstructor.cpp:
30014        (JSC::constructFunction):
30015        * kjs/JSActivation.cpp:
30016        (JSC::JSActivation::JSActivation):
30017        (JSC::JSActivation::argumentsGetter):
30018        * kjs/JSActivation.h:
30019        * kjs/JSGlobalObject.cpp:
30020        (JSC::JSGlobalObject::init):
30021        * kjs/JSGlobalObjectFunctions.cpp:
30022        (JSC::globalFuncEval):
30023        * kjs/JSVariableObject.h:
30024        * kjs/Parser.cpp:
30025        (JSC::Parser::parse):
30026        * kjs/RegExpConstructor.cpp:
30027        (JSC::constructRegExp):
30028        * kjs/RegExpPrototype.cpp:
30029        (JSC::regExpProtoFuncCompile):
30030        * kjs/Shell.cpp:
30031        (prettyPrintScript):
30032        * kjs/StringPrototype.cpp:
30033        (JSC::stringProtoFuncMatch):
30034        (JSC::stringProtoFuncSearch):
30035        * kjs/identifier.cpp:
30036        (JSC::Identifier::checkSameIdentifierTable):
30037        * kjs/interpreter.cpp:
30038        (JSC::Interpreter::checkSyntax):
30039        (JSC::Interpreter::evaluate):
30040        * kjs/nodes.cpp:
30041        (JSC::ThrowableExpressionData::emitThrowError):
30042        (JSC::RegExpNode::emitCode):
30043        (JSC::ArrayNode::emitCode):
30044        (JSC::InstanceOfNode::emitCode):
30045        * kjs/nodes.h:
30046        * kjs/regexp.cpp:
30047        (JSC::RegExp::RegExp):
30048        (JSC::RegExp::create):
30049        * kjs/regexp.h:
30050        * profiler/HeavyProfile.h:
30051        * profiler/Profile.h:
30052        * wrec/WREC.cpp:
30053        * wrec/WREC.h:
30054
300552008-10-08  Prasanth Ullattil  <pullatti@trolltech.com>
30056
30057        Reviewed by Oliver Hunt.
30058
30059        Avoid endless loops when compiling without the computed goto
30060        optimization.
30061
30062        NEXT_OPCODE expands to "continue", which will not work inside
30063        loops.
30064
30065        * VM/Machine.cpp:
30066        (JSC::Machine::privateExecute):
30067
300682008-10-08  Maciej Stachowiak  <mjs@apple.com>
30069
30070        Reviewed by Oliver Hunt.
30071
30072        Re-landing the following fix with the crashing bug in it fixed (r37405):
30073        
30074        - optimize away multiplication by constant 1.0
30075        
30076        2.3% speedup on v8 RayTrace benchmark
30077
30078        Apparently it's not uncommon for JavaScript code to multiply by
30079        constant 1.0 in the mistaken belief that this converts integer to
30080        floating point and that there is any operational difference.
30081
30082        * VM/CTI.cpp:
30083        (JSC::CTI::privateCompileMainPass): Optimize to_jsnumber for
30084        case where parameter is already number.
30085        (JSC::CTI::privateCompileSlowCases): ditto
30086        * VM/Machine.cpp:
30087        (JSC::Machine::privateExecute): ditto
30088        * kjs/grammar.y:
30089        (makeMultNode): Transform as follows:
30090        +FOO * BAR ==> FOO * BAR
30091        FOO * +BAR ==> FOO * BAR
30092        FOO * 1 ==> +FOO
30093        1 * FOO ==> +FOO
30094        (makeDivNode): Transform as follows:
30095        +FOO / BAR ==> FOO / BAR
30096        FOO / +BAR ==> FOO / BAR
30097        (makeSubNode): Transform as follows:
30098        +FOO - BAR ==> FOO - BAR
30099        FOO - +BAR ==> FOO - BAR
30100        * kjs/nodes.h:
30101        (JSC::ExpressionNode::stripUnaryPlus): Helper for above
30102        grammar.y changes
30103        (JSC::UnaryPlusNode::stripUnaryPlus): ditto
30104
301052008-10-08  Maciej Stachowiak  <mjs@apple.com>
30106
30107        Reviewed by Oliver Hunt.
30108        
30109        - correctly handle appending -0 to a string, it should stringify as just 0
30110
30111        * kjs/ustring.cpp:
30112        (JSC::concatenate):
30113
301142008-10-08  Prasanth Ullattil  <pullatti@trolltech.com>
30115
30116        Reviewed by Simon.
30117
30118        Fix WebKit compilation with VC2008SP1
30119
30120        Apply the TR1 workaround for JavaScriptCore, too.
30121
30122        * JavaScriptCore.pro:
30123
301242008-10-08  Prasanth Ullattil  <pullatti@trolltech.com>
30125
30126        Reviewed by Simon.
30127
30128        Fix compilation errors on VS2008 64Bit
30129
30130        * kjs/collector.cpp:
30131        (JSC::currentThreadStackBase):
30132
301332008-10-08  André Pönitz  <apoenitz@trolltech.com>
30134
30135        Reviewed by Simon.
30136
30137        Fix compilation with Qt namespaces.
30138
30139        * wtf/Threading.h:
30140
301412008-10-07  Sam Weinig  <sam@webkit.org>
30142
30143        Roll out r37405.
30144
301452008-10-07  Oliver Hunt  <oliver@apple.com>
30146
30147        Reviewed by Cameron Zwarich.
30148
30149        Switch CTI runtime calls to the fastcall calling convention
30150
30151        Basically this means that we get to store the argument for CTI
30152        calls in the ECX register, which saves a register->memory write
30153        and subsequent memory->register read.
30154        
30155        This is a 1.7% progression in SunSpider and 2.4% on commandline
30156        v8 tests on Windows
30157
30158        * VM/CTI.cpp:
30159        (JSC::):
30160        (JSC::CTI::privateCompilePutByIdTransition):
30161        (JSC::CTI::privateCompilePatchGetArrayLength):
30162        * VM/CTI.h:
30163        * VM/Machine.h:
30164        * masm/X86Assembler.h:
30165        (JSC::X86Assembler::emitRestoreArgumentReference):
30166        (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline):
30167          We need this to correctly reload ecx from inside certain property access
30168          trampolines.
30169        * wtf/Platform.h:
30170
301712008-10-07  Maciej Stachowiak  <mjs@apple.com>
30172
30173        Reviewed by Mark Rowe.
30174        
30175        - optimize away multiplication by constant 1.0
30176        
30177        2.3% speedup on v8 RayTrace benchmark
30178
30179        Apparently it's not uncommon for JavaScript code to multiply by
30180        constant 1.0 in the mistaken belief that this converts integer to
30181        floating point and that there is any operational difference.
30182        
30183        * VM/CTI.cpp:
30184        (JSC::CTI::privateCompileMainPass): Optimize to_jsnumber for
30185        case where parameter is already number.
30186        (JSC::CTI::privateCompileSlowCases): ditto
30187        * VM/Machine.cpp:
30188        (JSC::Machine::privateExecute): ditto
30189        * kjs/grammar.y:
30190        (makeMultNode): Transform as follows:
30191        +FOO * BAR ==> FOO * BAR
30192        FOO * +BAR ==> FOO * BAR
30193        FOO * 1 ==> +FOO
30194        1 * FOO ==> +FOO
30195        (makeDivNode): Transform as follows:
30196        +FOO / BAR ==> FOO / BAR
30197        FOO / +BAR ==> FOO / BAR
30198        (makeSubNode): Transform as follows:
30199        +FOO - BAR ==> FOO - BAR
30200        FOO - +BAR ==> FOO - BAR
30201        * kjs/nodes.h:
30202        (JSC::ExpressionNode::stripUnaryPlus): Helper for above
30203        grammar.y changes
30204        (JSC::UnaryPlusNode::stripUnaryPlus): ditto
30205
302062008-10-07  Maciej Stachowiak  <mjs@apple.com>
30207
30208        Reviewed by Oliver Hunt.
30209        
30210        - make constant folding code more consistent
30211        
30212        Added a makeSubNode to match add, mult and div; use the makeFooNode functions always,
30213        instead of allocating nodes directly in other places in the grammar.
30214
30215        * kjs/grammar.y:
30216
302172008-10-07  Sam Weinig  <sam@webkit.org>
30218
30219        Reviewed by Cameron Zwarich.
30220
30221        Move hasGetterSetterProperties flag from PropertyMap to StructureID.
30222
30223        * kjs/JSObject.cpp:
30224        (JSC::JSObject::put):
30225        (JSC::JSObject::defineGetter):
30226        (JSC::JSObject::defineSetter):
30227        * kjs/JSObject.h:
30228        (JSC::JSObject::hasGetterSetterProperties):
30229        (JSC::JSObject::getOwnPropertySlotForWrite):
30230        (JSC::JSObject::getOwnPropertySlot):
30231        * kjs/PropertyMap.h:
30232        * kjs/StructureID.cpp:
30233        (JSC::StructureID::StructureID):
30234        (JSC::StructureID::addPropertyTransition):
30235        (JSC::StructureID::toDictionaryTransition):
30236        (JSC::StructureID::changePrototypeTransition):
30237        (JSC::StructureID::getterSetterTransition):
30238        * kjs/StructureID.h:
30239        (JSC::StructureID::hasGetterSetterProperties):
30240        (JSC::StructureID::setHasGetterSetterProperties):
30241
302422008-10-07  Sam Weinig  <sam@webkit.org>
30243
30244        Reviewed by Cameron Zwarich.
30245
30246        Roll r37370 back in with bug fixes.
30247
30248        - PropertyMap::storageSize() should reflect the number of keys + deletedOffsets
30249          and has nothing to do with the internal deletedSentinel count anymore.
30250
302512008-10-07  Gavin Barraclough  <barraclough@apple.com>
30252
30253        Reviewed by Oliver Hunt.
30254
30255        Move callframe initialization into JIT code, again.
30256        
30257        As a part of the restructuring the second result from functions is now
30258        returned in edx, allowing the new value of 'r' to be returned via a
30259        register, and stored to the stack from JIT code, too.
30260
30261        4.5% progression on v8-tests. (3% in their harness)
30262
30263        * VM/CTI.cpp:
30264        (JSC::):
30265        (JSC::CTI::emitCall):
30266        (JSC::CTI::compileOpCall):
30267        (JSC::CTI::privateCompileMainPass):
30268        (JSC::CTI::privateCompileSlowCases):
30269        (JSC::CTI::privateCompile):
30270        * VM/CTI.h:
30271        (JSC::CallRecord::CallRecord):
30272        * VM/Machine.cpp:
30273        (JSC::Machine::cti_op_call_JSFunction):
30274        (JSC::Machine::cti_op_construct_JSConstruct):
30275        (JSC::Machine::cti_op_resolve_func):
30276        (JSC::Machine::cti_op_post_inc):
30277        (JSC::Machine::cti_op_resolve_with_base):
30278        (JSC::Machine::cti_op_post_dec):
30279        * VM/Machine.h:
30280        * kjs/JSFunction.h:
30281        * kjs/ScopeChain.h:
30282
302832008-10-07  Mark Rowe  <mrowe@apple.com>
30284
30285        Fix typo in method name.
30286
30287        * wrec/WREC.cpp:
30288        * wrec/WREC.h:
30289
302902008-10-07  Cameron Zwarich  <zwarich@apple.com>
30291
30292        Rubber-stamped by Mark Rowe.
30293
30294        Roll out r37370.
30295
302962008-10-06  Sam Weinig  <sam@webkit.org>
30297
30298        Reviewed by Cameron Zwarich.
30299
30300        Fix for https://bugs.webkit.org/show_bug.cgi?id=21415
30301        Improve the division between PropertyStorageArray and PropertyMap
30302
30303        - Rework ProperyMap to store offsets in the value so that they don't
30304          change when rehashing.  This allows us not to have to keep the 
30305          PropertyStorageArray in sync and thus not have to pass it in.
30306        - Rename PropertyMap::getOffset -> PropertyMap::get since put/remove
30307          now also return offsets.
30308        - A Vector of deleted offsets is now needed since the storage is out of
30309          band.
30310
30311        1% win on SunSpider.  Wash on V8 suite.
30312
30313        * JavaScriptCore.exp:
30314        * VM/CTI.cpp:
30315        (JSC::transitionWillNeedStorageRealloc):
30316        * VM/Machine.cpp:
30317        (JSC::Machine::privateExecute):
30318        Transition logic can be greatly simplified by the fact that
30319        the storage capacity is always known, and is correct for the
30320        inline case.
30321        * kjs/JSObject.cpp:
30322        (JSC::JSObject::put): Rename getOffset -> get.
30323        (JSC::JSObject::deleteProperty): Ditto.
30324        (JSC::JSObject::getPropertyAttributes): Ditto.
30325        (JSC::JSObject::removeDirect): Use returned offset to
30326        clear the value in the PropertyNameArray.
30327        (JSC::JSObject::allocatePropertyStorage): Add assert.
30328        * kjs/JSObject.h:
30329        (JSC::JSObject::getDirect): Rename getOffset -> get
30330        (JSC::JSObject::getDirectLocation): Rename getOffset -> get
30331        (JSC::JSObject::putDirect): Use propertyStorageCapacity to determine whether
30332        or not to resize.  Also, since put now returns an offset (and thus 
30333        addPropertyTransition does also) setting of the PropertyStorageArray is
30334        now done here.
30335        (JSC::JSObject::transitionTo):
30336        * kjs/PropertyMap.cpp:
30337        (JSC::PropertyMap::checkConsistency): PropertyStorageArray is no longer 
30338        passed in.
30339        (JSC::PropertyMap::operator=): Copy the delete offsets vector.
30340        (JSC::PropertyMap::put): Instead of setting the PropertyNameArray
30341        explicitly, return the offset where the value should go.
30342        (JSC::PropertyMap::remove): Instead of removing from the PropertyNameArray
30343        explicitly, return the offset where the value should be removed.
30344        (JSC::PropertyMap::get): Switch to using the stored offset, instead
30345        of the implicit one.
30346        (JSC::PropertyMap::insert):
30347        (JSC::PropertyMap::expand): This is never called when m_table is null,
30348        so remove that branch and add it as an assertion.
30349        (JSC::PropertyMap::createTable): Consistency checks no longer take
30350        a PropertyNameArray.
30351        (JSC::PropertyMap::rehash): No need to rehash the PropertyNameArray
30352        now that it is completely out of band.
30353        * kjs/PropertyMap.h:
30354        (JSC::PropertyMapEntry::PropertyMapEntry): Store offset into PropertyNameArray.
30355        (JSC::PropertyMap::get): Switch to using the stored offset, instead
30356        of the implicit one.
30357        * kjs/StructureID.cpp:
30358        (JSC::StructureID::StructureID): Initialize the propertyStorageCapacity to 
30359        JSObject::inlineStorageCapacity.
30360        (JSC::StructureID::growPropertyStorageCapacity): Grow the storage capacity as
30361        described below.
30362        (JSC::StructureID::addPropertyTransition): Copy the storage capacity.
30363        (JSC::StructureID::toDictionaryTransition): Ditto.
30364        (JSC::StructureID::changePrototypeTransition): Ditto.
30365        (JSC::StructureID::getterSetterTransition): Ditto.
30366        * kjs/StructureID.h:
30367        (JSC::StructureID::propertyStorageCapacity): Add propertyStorageCapacity
30368        which is the current capacity for the JSObjects PropertyStorageArray.
30369        It starts at the JSObject::inlineStorageCapacity (currently 2), then
30370        when it first needs to be resized moves to the JSObject::nonInlineBaseStorageCapacity
30371        (currently 16), and after that doubles each time.
30372
303732008-10-06  Cameron Zwarich  <zwarich@apple.com>
30374
30375        Reviewed by Oliver Hunt.
30376
30377        Bug 21396: Remove the OptionalCalleeActivation call frame slot
30378        <https://bugs.webkit.org/show_bug.cgi?id=21396>
30379
30380        Remove the OptionalCalleeActivation call frame slot. We have to be
30381        careful to store the activation object in a register, because objects
30382        in the scope chain do not get marked.
30383
30384        This is a 0.3% speedup on both SunSpider and the V8 benchmark.
30385
30386        * VM/CTI.cpp:
30387        (JSC::CTI::privateCompileMainPass):
30388        * VM/CodeBlock.cpp:
30389        (JSC::CodeBlock::dump):
30390        * VM/CodeGenerator.cpp:
30391        (JSC::CodeGenerator::CodeGenerator):
30392        (JSC::CodeGenerator::emitReturn):
30393        * VM/CodeGenerator.h:
30394        * VM/Machine.cpp:
30395        (JSC::Machine::dumpRegisters):
30396        (JSC::Machine::unwindCallFrame):
30397        (JSC::Machine::privateExecute):
30398        (JSC::Machine::cti_op_call_JSFunction):
30399        (JSC::Machine::cti_op_push_activation):
30400        (JSC::Machine::cti_op_tear_off_activation):
30401        (JSC::Machine::cti_op_construct_JSConstruct):
30402        * VM/Machine.h:
30403        (JSC::Machine::initializeCallFrame):
30404        * VM/RegisterFile.h:
30405        (JSC::RegisterFile::):
30406
304072008-10-06  Tony Chang  <tony@chromium.org>
30408
30409        Reviewed by Alexey Proskuryakov.
30410
30411        Chromium doesn't use pthreads on windows, so make its use conditional.
30412        
30413        Also convert a WORD to a DWORD to avoid a compiler warning.  This
30414        matches the other methods around it.
30415
30416        * wtf/ThreadingWin.cpp:
30417        (WTF::wtfThreadEntryPoint):
30418        (WTF::ThreadCondition::broadcast):
30419
304202008-10-06  Mark Mentovai  <mark@moxienet.com>
30421
30422        Reviewed by Tim Hatcher.
30423
30424        Allow ENABLE_DASHBOARD_SUPPORT and ENABLE_MAC_JAVA_BRIDGE to be
30425        disabled on the Mac.
30426
30427        https://bugs.webkit.org/show_bug.cgi?id=21333
30428
30429        * wtf/Platform.h:
30430
304312008-10-06  Steve Falkenburg  <sfalken@apple.com>
30432
30433        https://bugs.webkit.org/show_bug.cgi?id=21416
30434        Pass 0 for size to VirtualAlloc, as documented by MSDN.
30435        Identified by Application Verifier.
30436        
30437        Reviewed by Darin Adler.
30438
30439        * kjs/collector.cpp:
30440        (KJS::freeBlock):
30441
304422008-10-06  Kevin McCullough  <kmccullough@apple.com>
30443
30444        Reviewed by Tim Hatcheri and Oliver Hunt.
30445
30446        https://bugs.webkit.org/show_bug.cgi?id=21412
30447        Bug 21412: Refactor user initiated profile count to be more stable
30448        - Export UString::from for use with creating the profile title.
30449
30450        * JavaScriptCore.exp:
30451
304522008-10-06  Maciej Stachowiak  <mjs@apple.com>
30453
30454        Not reviewed. Build fix.
30455        
30456        - revert toBoolean changes (r37333 and r37335); need to make WebCore work with these
30457
30458        * API/JSValueRef.cpp:
30459        (JSValueToBoolean):
30460        * ChangeLog:
30461        * JavaScriptCore.exp:
30462        * VM/CodeBlock.cpp:
30463        (JSC::CodeBlock::dump):
30464        * VM/Machine.cpp:
30465        (JSC::Machine::privateExecute):
30466        (JSC::Machine::cti_op_loop_if_true):
30467        (JSC::Machine::cti_op_not):
30468        (JSC::Machine::cti_op_jtrue):
30469        * kjs/ArrayPrototype.cpp:
30470        (JSC::arrayProtoFuncFilter):
30471        (JSC::arrayProtoFuncEvery):
30472        (JSC::arrayProtoFuncSome):
30473        * kjs/BooleanConstructor.cpp:
30474        (JSC::constructBoolean):
30475        (JSC::callBooleanConstructor):
30476        * kjs/GetterSetter.h:
30477        * kjs/JSCell.h:
30478        (JSC::JSValue::toBoolean):
30479        * kjs/JSNumberCell.cpp:
30480        (JSC::JSNumberCell::toBoolean):
30481        * kjs/JSNumberCell.h:
30482        * kjs/JSObject.cpp:
30483        (JSC::JSObject::toBoolean):
30484        * kjs/JSObject.h:
30485        * kjs/JSString.cpp:
30486        (JSC::JSString::toBoolean):
30487        * kjs/JSString.h:
30488        * kjs/JSValue.h:
30489        * kjs/RegExpConstructor.cpp:
30490        (JSC::setRegExpConstructorMultiline):
30491        * kjs/RegExpObject.cpp:
30492        (JSC::RegExpObject::match):
30493        * kjs/RegExpPrototype.cpp:
30494        (JSC::regExpProtoFuncToString):
30495
304962008-10-06  Maciej Stachowiak  <mjs@apple.com>
30497
30498        Reviewed by Sam Weinig.
30499        
30500        - optimize op_jtrue, op_loop_if_true and op_not in various ways
30501        https://bugs.webkit.org/show_bug.cgi?id=21404
30502        
30503        1) Make JSValue::toBoolean nonvirtual and completely inline by
30504        making use of the StructureID type field.
30505        
30506        2) Make JSValue::toBoolean not take an ExecState; doesn't need it.
30507        
30508        3) Make op_not, op_loop_if_true and op_jtrue not read the
30509        ExecState (toBoolean doesn't need it any more) and not check
30510        exceptions (toBoolean can't throw).
30511
30512        * API/JSValueRef.cpp:
30513        (JSValueToBoolean):
30514        * JavaScriptCore.exp:
30515        * VM/CodeBlock.cpp:
30516        (JSC::CodeBlock::dump):
30517        * VM/Machine.cpp:
30518        (JSC::Machine::privateExecute):
30519        (JSC::Machine::cti_op_loop_if_true):
30520        (JSC::Machine::cti_op_not):
30521        (JSC::Machine::cti_op_jtrue):
30522        * kjs/ArrayPrototype.cpp:
30523        (JSC::arrayProtoFuncFilter):
30524        (JSC::arrayProtoFuncEvery):
30525        (JSC::arrayProtoFuncSome):
30526        * kjs/BooleanConstructor.cpp:
30527        (JSC::constructBoolean):
30528        (JSC::callBooleanConstructor):
30529        * kjs/GetterSetter.h:
30530        * kjs/JSCell.h:
30531        (JSC::JSValue::toBoolean):
30532        * kjs/JSNumberCell.cpp:
30533        * kjs/JSNumberCell.h:
30534        (JSC::JSNumberCell::toBoolean):
30535        * kjs/JSObject.cpp:
30536        * kjs/JSObject.h:
30537        (JSC::JSObject::toBoolean):
30538        (JSC::JSCell::toBoolean):
30539        * kjs/JSString.cpp:
30540        * kjs/JSString.h:
30541        (JSC::JSString::toBoolean):
30542        * kjs/JSValue.h:
30543        * kjs/RegExpConstructor.cpp:
30544        (JSC::setRegExpConstructorMultiline):
30545        * kjs/RegExpObject.cpp:
30546        (JSC::RegExpObject::match):
30547        * kjs/RegExpPrototype.cpp:
30548        (JSC::regExpProtoFuncToString):
30549
305502008-10-06  Ariya Hidayat  <ariya.hidayat@trolltech.com>
30551
30552        Reviewed by Simon.
30553
30554        Build fix for MinGW.
30555
30556        * JavaScriptCore.pri:
30557        * kjs/DateMath.cpp:
30558        (JSC::highResUpTime):
30559
305602008-10-05  Cameron Zwarich  <zwarich@apple.com>
30561
30562        Reviewed by Oliver Hunt.
30563
30564        Remove ScopeNode::containsClosures() now that it is unused.
30565
30566        * kjs/nodes.h:
30567        (JSC::ScopeNode::containsClosures):
30568
305692008-10-05  Maciej Stachowiak  <mjs@apple.com>
30570
30571        Reviewed by Cameron Zwarich.
30572        
30573        - fix releas-only test failures caused by the fix to bug 21375
30574
30575        * VM/Machine.cpp:
30576        (JSC::Machine::unwindCallFrame): Update ExecState while unwinding call frames;
30577        it now matters more to have a still-valid ExecState, since dynamicGlobalObject
30578        will make use of the ExecState's scope chain.
30579        * VM/Machine.h:
30580
305812008-10-05  Cameron Zwarich  <zwarich@apple.com>
30582
30583        Reviewed by Oliver Hunt.
30584
30585        Bug 21364: Remove the branch in op_ret for OptionalCalleeActivation and OptionalCalleeArguments
30586        <https://bugs.webkit.org/show_bug.cgi?id=21364>
30587
30588        Use information from the parser to detect whether an activation is
30589        needed or 'arguments' is used, and emit explicit instructions to tear
30590        them off before op_ret. This allows a branch to be removed from op_ret
30591        and simplifies some other code. This does cause a small change in the
30592        behaviour of 'f.arguments'; it is no longer live when 'arguments' is not
30593        mentioned in the lexical scope of the function.
30594
30595        It should now be easy to remove the OptionaCalleeActivation slot in the
30596        call frame, but this will be done in a later patch.
30597
30598        * VM/CTI.cpp:
30599        (JSC::CTI::privateCompileMainPass):
30600        * VM/CodeBlock.cpp:
30601        (JSC::CodeBlock::dump):
30602        * VM/CodeGenerator.cpp:
30603        (JSC::CodeGenerator::emitReturn):
30604        * VM/CodeGenerator.h:
30605        * VM/Machine.cpp:
30606        (JSC::Machine::unwindCallFrame):
30607        (JSC::Machine::privateExecute):
30608        (JSC::Machine::retrieveArguments):
30609        (JSC::Machine::cti_op_create_arguments):
30610        (JSC::Machine::cti_op_tear_off_activation):
30611        (JSC::Machine::cti_op_tear_off_arguments):
30612        * VM/Machine.h:
30613        * VM/Opcode.h:
30614        * kjs/Arguments.cpp:
30615        (JSC::Arguments::mark):
30616        * kjs/Arguments.h:
30617        (JSC::Arguments::isTornOff):
30618        (JSC::Arguments::Arguments):
30619        (JSC::Arguments::copyRegisters):
30620        (JSC::JSActivation::copyRegisters):
30621        * kjs/JSActivation.cpp:
30622        (JSC::JSActivation::argumentsGetter):
30623        * kjs/JSActivation.h:
30624
306252008-10-05  Maciej Stachowiak  <mjs@apple.com>
30626
30627        Reviewed by Oliver Hunt.
30628        
30629        - fixed "REGRESSION (r37297): fast/js/deep-recursion-test takes too long and times out"
30630        https://bugs.webkit.org/show_bug.cgi?id=21375
30631        
30632        The problem is that dynamicGlobalObject had become O(N) in number
30633        of call frames, but unwinding the stack for an exception called it
30634        for every call frame, resulting in O(N^2) behavior for an
30635        exception thrown from inside deep recursion.
30636
30637        Instead of doing it that way, stash the dynamic global object in JSGlobalData.
30638        
30639        * JavaScriptCore.exp:
30640        * VM/Machine.cpp:
30641        (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Helper class to temporarily
30642        store and later restore a dynamicGlobalObject in JSGlobalData.
30643        (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope):
30644        (JSC::Machine::execute): In each version, establish a DynamicGlobalObjectScope.
30645        For ProgramNode, always establish set new dynamicGlobalObject, for FunctionBody and Eval,
30646        only if none is currently set.
30647        * VM/Machine.h:
30648        * kjs/ExecState.h:
30649        * kjs/JSGlobalData.cpp:
30650        (JSC::JSGlobalData::JSGlobalData): Ininitalize new dynamicGlobalObject field to 0.
30651        * kjs/JSGlobalData.h:
30652        * kjs/JSGlobalObject.h:
30653        (JSC::ExecState::dynamicGlobalObject): Moved here from ExecState for benefit of inlining.
30654        Return lexical global object if this is a globalExec(), otherwise look in JSGlobalData
30655        for the one stashed there.
30656
306572008-10-05  Sam Weinig  <sam@webkit.org>
30658
30659        Reviewed by Maciej Stachowiak.
30660
30661        Avoid an extra lookup when transitioning to an existing StructureID
30662        by caching the offset of property that caused the transition.
30663
30664        1% win on V8 suite.  Wash on SunSpider.
30665
30666        * kjs/PropertyMap.cpp:
30667        (JSC::PropertyMap::put):
30668        * kjs/PropertyMap.h:
30669        * kjs/StructureID.cpp:
30670        (JSC::StructureID::StructureID):
30671        (JSC::StructureID::addPropertyTransition):
30672        * kjs/StructureID.h:
30673        (JSC::StructureID::setCachedTransistionOffset):
30674        (JSC::StructureID::cachedTransistionOffset):
30675
306762008-10-05  Cameron Zwarich  <zwarich@apple.com>
30677
30678        Reviewed by Maciej Stachowiak.
30679
30680        Bug 21364: Remove the branch in op_ret for OptionalCalleeActivation and OptionalCalleeArguments
30681        <https://bugs.webkit.org/show_bug.cgi?id=21364>
30682
30683        This patch does not yet remove the branch, but it does a bit of refactoring
30684        so that a CodeGenerator now knows whether the associated CodeBlock will need
30685        a full scope before doing any code generation. This makes it possible to emit
30686        explicit tear-off instructions before every op_ret.
30687
30688        * VM/CodeBlock.h:
30689        (JSC::CodeBlock::CodeBlock):
30690        * VM/CodeGenerator.cpp:
30691        (JSC::CodeGenerator::generate):
30692        (JSC::CodeGenerator::CodeGenerator):
30693        (JSC::CodeGenerator::emitPushScope):
30694        (JSC::CodeGenerator::emitPushNewScope):
30695        * kjs/nodes.h:
30696        (JSC::ScopeNode::needsActivation):
30697
306982008-10-05  Gavin Barraclough  <barraclough@apple.com>
30699
30700        Reviewed by Cameron Zwarich.
30701
30702        Fix for bug #21387 - using SamplingTool with CTI.
30703
30704        (1) A repatch offset offset changes due to an additional instruction to update SamplingTool state.
30705        (2) Fix an incusion order problem due to ExecState changes.
30706        (3) Change to a MACHINE_SAMPLING macro, use of exec should now be accessing global data.
30707
30708        * VM/CTI.h:
30709        (JSC::CTI::execute):
30710        * VM/SamplingTool.h:
30711        (JSC::SamplingTool::privateExecuteReturned):
30712        * kjs/Shell.cpp:
30713
307142008-10-04  Mark Rowe  <mrowe@apple.com>
30715
30716        Reviewed by Tim Hatcher.
30717
30718        Add a 'Check For Weak VTables' build phase to catch weak vtables as early as possible.
30719
30720        * JavaScriptCore.xcodeproj/project.pbxproj:
30721
307222008-10-04  Sam Weinig  <sam@webkit.org>
30723
30724        Reviewed by Oliver Hunt.
30725
30726        Fix https://bugs.webkit.org/show_bug.cgi?id=21320
30727        leaks of PropertyNameArrayData seen on buildbot
30728
30729        - Fix RefPtr cycle by making PropertyNameArrayData's pointer back
30730          to the StructureID a weak pointer.
30731
30732        * kjs/PropertyNameArray.h:
30733        (JSC::PropertyNameArrayData::setCachedStructureID):
30734        (JSC::PropertyNameArrayData::cachedStructureID):
30735        * kjs/StructureID.cpp:
30736        (JSC::StructureID::getEnumerablePropertyNames):
30737        (JSC::StructureID::clearEnumerationCache):
30738        (JSC::StructureID::~StructureID):
30739
307402008-10-04  Darin Adler  <darin@apple.com>
30741
30742        Reviewed by Cameron Zwarich.
30743
30744        - https://bugs.webkit.org/show_bug.cgi?id=21295
30745          Bug 21295: Replace ExecState with a call frame Register pointer
30746
30747        10% faster on Richards; other v8 benchmarks faster too.
30748        A wash on SunSpider.
30749
30750        This does the minimum necessary to get the speedup. Next step in
30751        cleaning this up is to replace ExecState with a CallFrame class,
30752        and be more judicious about when to pass a call frame and when
30753        to pass a global data pointer, global object pointer, or perhaps
30754        something else entirely.
30755
30756        * VM/CTI.cpp: Remove the debug-only check of the exception in
30757        ctiVMThrowTrampoline -- already checked in the code the trampoline
30758        jumps to, so not all that useful. Removed the exec argument from
30759        ctiTrampoline. Removed emitDebugExceptionCheck -- no longer needed.
30760        (JSC::CTI::emitCall): Removed code to set ExecState::m_callFrame.
30761        (JSC::CTI::privateCompileMainPass): Removed code in catch to extract
30762        the exception from ExecState::m_exception; instead, the code that
30763        jumps into catch will make sure the exception is already in eax.
30764        * VM/CTI.h: Removed exec from the ctiTrampoline. Also removed the
30765        non-helpful "volatile". Temporarily left ARG_exec in as a synonym
30766        for ARG_r; I'll change that on a future cleanup pass when introducing
30767        more use of the CallFrame type.
30768        (JSC::CTI::execute): Removed the ExecState* argument.
30769
30770        * VM/ExceptionHelpers.cpp:
30771        (JSC::InterruptedExecutionError::InterruptedExecutionError): Take
30772        JSGlobalData* instead of ExecState*.
30773        (JSC::createInterruptedExecutionException): Ditto.
30774        * VM/ExceptionHelpers.h: Ditto. Also removed an unneeded include.
30775
30776        * VM/Machine.cpp:
30777        (JSC::slideRegisterWindowForCall): Removed the exec and
30778        exceptionValue arguments. Changed to return 0 when there's a stack
30779        overflow rather than using a separate exception argument to cut
30780        down on memory accesses in the calling convention.
30781        (JSC::Machine::unwindCallFrame): Removed the exec argument when
30782        constructing a DebuggerCallFrame. Also removed code to set
30783        ExecState::m_callFrame.
30784        (JSC::Machine::throwException): Removed the exec argument when
30785        construction a DebuggerCallFrame.
30786        (JSC::Machine::execute): Updated to use the register instead of
30787        ExecState and also removed various uses of ExecState.
30788        (JSC::Machine::debug):
30789        (JSC::Machine::privateExecute): Put globalData into a local
30790        variable so it can be used throughout the interpreter. Changed
30791        the VM_CHECK_EXCEPTION to get the exception in globalData instead
30792        of through ExecState.
30793        (JSC::Machine::retrieveLastCaller): Turn exec into a registers
30794        pointer by calling registers() instead of by getting m_callFrame.
30795        (JSC::Machine::callFrame): Ditto.
30796        Tweaked exception macros. Made new versions for when you know
30797        you have an exception. Get at global exception with ARG_globalData.
30798        Got rid of the need to pass in the return value type.
30799        (JSC::Machine::cti_op_add): Update to use new version of exception
30800        macros.
30801        (JSC::Machine::cti_op_pre_inc): Ditto.
30802        (JSC::Machine::cti_timeout_check): Ditto.
30803        (JSC::Machine::cti_op_instanceof): Ditto.
30804        (JSC::Machine::cti_op_new_func): Ditto.
30805        (JSC::Machine::cti_op_call_JSFunction): Optimized by using the
30806        ARG values directly instead of through local variables -- this gets
30807        rid of code that just shuffles things around in the stack frame.
30808        Also get rid of ExecState and update for the new way exceptions are
30809        handled in slideRegisterWindowForCall.
30810        (JSC::Machine::cti_vm_compile): Update to make exec out of r since
30811        they are both the same thing now.
30812        (JSC::Machine::cti_op_call_NotJSFunction): Ditto.
30813        (JSC::Machine::cti_op_init_arguments): Ditto.
30814        (JSC::Machine::cti_op_resolve): Ditto.
30815        (JSC::Machine::cti_op_construct_JSConstruct): Ditto.
30816        (JSC::Machine::cti_op_construct_NotJSConstruct): Ditto.
30817        (JSC::Machine::cti_op_resolve_func): Ditto.
30818        (JSC::Machine::cti_op_put_by_val): Ditto.
30819        (JSC::Machine::cti_op_put_by_val_array): Ditto.
30820        (JSC::Machine::cti_op_resolve_skip): Ditto.
30821        (JSC::Machine::cti_op_resolve_global): Ditto.
30822        (JSC::Machine::cti_op_post_inc): Ditto.
30823        (JSC::Machine::cti_op_resolve_with_base): Ditto.
30824        (JSC::Machine::cti_op_post_dec): Ditto.
30825        (JSC::Machine::cti_op_call_eval): Ditto.
30826        (JSC::Machine::cti_op_throw): Ditto. Also rearranged to return
30827        the exception value as the return value so it can be used by
30828        op_catch.
30829        (JSC::Machine::cti_op_push_scope): Ditto.
30830        (JSC::Machine::cti_op_in): Ditto.
30831        (JSC::Machine::cti_op_del_by_val): Ditto.
30832        (JSC::Machine::cti_vm_throw): Ditto. Also rearranged to return
30833        the exception value as the return value so it can be used by
30834        op_catch.
30835
30836        * kjs/DebuggerCallFrame.cpp:
30837        (JSC::DebuggerCallFrame::functionName): Pass globalData.
30838        (JSC::DebuggerCallFrame::evaluate): Eliminated code to make a
30839        new ExecState.
30840        * kjs/DebuggerCallFrame.h: Removed ExecState argument from
30841        constructor.
30842
30843        * kjs/ExecState.h: Eliminated all data members and made ExecState
30844        inherit privately from Register instead. Also added a typedef to
30845        the future name for this class, which is CallFrame. It's just a
30846        Register* that knows it's a pointer at a call frame. The new class
30847        can't be constructed or copied. Changed all functions to use
30848        the this pointer instead of m_callFrame. Changed exception-related
30849        functions to access an exception in JSGlobalData. Removed functions
30850        used by CTI to pass the return address to the throw machinery --
30851        this is now done directly with a global in the global data.
30852
30853        * kjs/FunctionPrototype.cpp:
30854        (JSC::functionProtoFuncToString): Pass globalData instead of exec.
30855
30856        * kjs/InternalFunction.cpp:
30857        (JSC::InternalFunction::name): Take globalData instead of exec.
30858        * kjs/InternalFunction.h: Ditto.
30859
30860        * kjs/JSGlobalData.cpp: Initialize the new exception global to 0.
30861        * kjs/JSGlobalData.h: Declare two new globals. One for the current
30862        exception and another for the return address used by CTI to
30863        implement the throw operation.
30864
30865        * kjs/JSGlobalObject.cpp:
30866        (JSC::JSGlobalObject::init): Removed code to set up globalExec,
30867        which is now the same thing as globalCallFrame.
30868        (JSC::JSGlobalObject::reset): Get globalExec from our globalExec
30869        function so we don't have to repeat the logic twice.
30870        (JSC::JSGlobalObject::mark): Removed code to mark the exception;
30871        the exception is now stored in JSGlobalData and marked there.
30872        (JSC::JSGlobalObject::globalExec): Return a pointer to the end
30873        of the global call frame.
30874        * kjs/JSGlobalObject.h: Removed the globalExec data member.
30875
30876        * kjs/JSObject.cpp:
30877        (JSC::JSObject::putDirectFunction): Pass globalData instead of exec.
30878
30879        * kjs/collector.cpp:
30880        (JSC::Heap::collect): Mark the global exception.
30881
30882        * profiler/ProfileGenerator.cpp:
30883        (JSC::ProfileGenerator::addParentForConsoleStart): Pass globalData
30884        instead of exec to createCallIdentifier.
30885
30886        * profiler/Profiler.cpp:
30887        (JSC::Profiler::willExecute): Pass globalData instead of exec to
30888        createCallIdentifier.
30889        (JSC::Profiler::didExecute): Ditto.
30890        (JSC::Profiler::createCallIdentifier): Take globalData instead of
30891        exec.
30892        (JSC::createCallIdentifierFromFunctionImp): Ditto.
30893        * profiler/Profiler.h: Change interface to take a JSGlobalData
30894        instead of an ExecState.
30895
308962008-10-04  Cameron Zwarich  <zwarich@apple.com>
30897
30898        Reviewed by Darin Adler.
30899
30900        Bug 21369: Add opcode documentation for all undocumented opcodes
30901        <https://bugs.webkit.org/show_bug.cgi?id=21369>
30902
30903        This patch adds opcode documentation for all undocumented opcodes, and
30904        it also renames op_init_arguments to op_create_arguments.
30905
30906        * VM/CTI.cpp:
30907        (JSC::CTI::privateCompileMainPass):
30908        * VM/CodeBlock.cpp:
30909        (JSC::CodeBlock::dump):
30910        * VM/CodeGenerator.cpp:
30911        (JSC::CodeGenerator::CodeGenerator):
30912        * VM/Machine.cpp:
30913        (JSC::Machine::privateExecute):
30914        (JSC::Machine::cti_op_create_arguments):
30915        * VM/Machine.h:
30916        * VM/Opcode.h:
30917
309182008-10-03  Maciej Stachowiak  <mjs@apple.com>
30919
30920        Reviewed by Cameron Zwarich.
30921        
30922        - "this" object in methods called on primitives should be wrapper object
30923        https://bugs.webkit.org/show_bug.cgi?id=21362
30924
30925        I changed things so that functions which use "this" do a fast
30926        version of toThisObject conversion if needed. Currently we miss
30927        the conversion entirely, at least for primitive types. Using
30928        TypeInfo and the primitive check, I made the fast case bail out
30929        pretty fast.
30930        
30931        This is inexplicably an 1.007x SunSpider speedup (and a wash on V8 benchmarks).
30932     
30933        Also renamed some opcodes for clarity:
30934        
30935        init ==> enter
30936        init_activation ==> enter_with_activation
30937        
30938        * VM/CTI.cpp:
30939        (JSC::CTI::privateCompileMainPass):
30940        (JSC::CTI::privateCompileSlowCases):
30941        * VM/CodeBlock.cpp:
30942        (JSC::CodeBlock::dump):
30943        * VM/CodeGenerator.cpp:
30944        (JSC::CodeGenerator::generate):
30945        (JSC::CodeGenerator::CodeGenerator):
30946        * VM/Machine.cpp:
30947        (JSC::Machine::privateExecute):
30948        (JSC::Machine::cti_op_convert_this):
30949        * VM/Machine.h:
30950        * VM/Opcode.h:
30951        * kjs/JSActivation.cpp:
30952        (JSC::JSActivation::JSActivation):
30953        * kjs/JSActivation.h:
30954        (JSC::JSActivation::createStructureID):
30955        * kjs/JSCell.h:
30956        (JSC::JSValue::needsThisConversion):
30957        * kjs/JSGlobalData.cpp:
30958        (JSC::JSGlobalData::JSGlobalData):
30959        * kjs/JSGlobalData.h:
30960        * kjs/JSNumberCell.h:
30961        (JSC::JSNumberCell::createStructureID):
30962        * kjs/JSStaticScopeObject.h:
30963        (JSC::JSStaticScopeObject::JSStaticScopeObject):
30964        (JSC::JSStaticScopeObject::createStructureID):
30965        * kjs/JSString.h:
30966        (JSC::JSString::createStructureID):
30967        * kjs/JSValue.h:
30968        * kjs/TypeInfo.h:
30969        (JSC::TypeInfo::needsThisConversion):
30970        * kjs/nodes.h:
30971        (JSC::ScopeNode::usesThis):
30972
309732008-10-03  Cameron Zwarich  <zwarich@apple.com>
30974
30975        Reviewed by Maciej Stachowiak.
30976
30977        Bug 21356: The size of the RegisterFile differs depending on 32-bit / 64-bit and Debug / Release
30978        <https://bugs.webkit.org/show_bug.cgi?id=21356>
30979
30980        The RegisterFile decreases in size (measured in terms of numbers of
30981        Registers) as the size of a Register increases. This causes
30982
30983            js1_5/Regress/regress-159334.js
30984
30985        to fail in 64-bit debug builds. This fix makes the RegisterFile on all
30986        platforms the same size that it is in 32-bit Release builds.
30987
30988        * VM/RegisterFile.h:
30989        (JSC::RegisterFile::RegisterFile):
30990
309912008-10-03  Maciej Stachowiak  <mjs@apple.com>
30992
30993        Reviewed by Cameron Zwarich.
30994        
30995        - Some code cleanup to how we handle code features.
30996        
30997        1) Rename FeatureInfo typedef to CodeFeatures.
30998        2) Rename NodeFeatureInfo template to NodeInfo.
30999        3) Keep CodeFeature bitmask in ScopeNode instead of trying to break it out into individual bools.
31000        4) Rename misleadingly named "needsClosure" method to "containsClosures", which better describes the meaning
31001        of ClosureFeature.
31002        5) Make setUsersArguments() not take an argument since it only goes one way.
31003
31004        * JavaScriptCore.exp:
31005        * VM/CodeBlock.h:
31006        (JSC::CodeBlock::CodeBlock):
31007        * kjs/NodeInfo.h:
31008        * kjs/Parser.cpp:
31009        (JSC::Parser::didFinishParsing):
31010        * kjs/Parser.h:
31011        (JSC::Parser::parse):
31012        * kjs/grammar.y:
31013        * kjs/nodes.cpp:
31014        (JSC::ScopeNode::ScopeNode):
31015        (JSC::ProgramNode::ProgramNode):
31016        (JSC::ProgramNode::create):
31017        (JSC::EvalNode::EvalNode):
31018        (JSC::EvalNode::create):
31019        (JSC::FunctionBodyNode::FunctionBodyNode):
31020        (JSC::FunctionBodyNode::create):
31021        * kjs/nodes.h:
31022        (JSC::ScopeNode::usesEval):
31023        (JSC::ScopeNode::containsClosures):
31024        (JSC::ScopeNode::usesArguments):
31025        (JSC::ScopeNode::setUsesArguments):
31026
310272008-10-03  Cameron Zwarich  <zwarich@apple.com>
31028
31029        Reviewed by Maciej Stachowiak.
31030
31031        Bug 21343: REGRESSSION (r37160): ecma_3/ExecutionContexts/10.1.3-1.js and js1_4/Functions/function-001.js fail on 64-bit
31032        <https://bugs.webkit.org/show_bug.cgi?id=21343>
31033
31034        A fix was landed for this issue in r37253, and the ChangeLog assumes
31035        that it is a compiler bug, but it turns out that it is a subtle issue
31036        with mixing signed and unsigned 32-bit values in a 64-bit environment.
31037        In order to properly fix this bug, we should convert our signed offsets
31038        into the register file to use ptrdiff_t.
31039
31040        This may not be the only instance of this issue, but I will land this
31041        fix first and look for more later.
31042
31043        * VM/Machine.cpp:
31044        (JSC::Machine::getArgumentsData):
31045        * VM/Machine.h:
31046        * kjs/Arguments.cpp:
31047        (JSC::Arguments::getOwnPropertySlot):
31048        * kjs/Arguments.h:
31049        (JSC::Arguments::init):
31050
310512008-10-03  Darin Adler  <darin@apple.com>
31052
31053        * VM/CTI.cpp: Another Windows build fix. Change the args of ctiTrampoline.
31054
31055        * kjs/JSNumberCell.h: A build fix for newer versions of gcc. Added
31056        declarations of JSGlobalData overloads of jsNumberCell.
31057
310582008-10-03  Darin Adler  <darin@apple.com>
31059
31060        - try to fix Windows build
31061
31062        * kjs/ScopeChain.h: Add forward declaration of JSGlobalData.
31063
310642008-10-03  Darin Adler  <darin@apple.com>
31065
31066        Reviewed by Geoff Garen.
31067
31068        - next step of https://bugs.webkit.org/show_bug.cgi?id=21295
31069          Turn ExecState into a call frame pointer.
31070
31071        Remove m_globalObject and m_globalData from ExecState.
31072
31073        SunSpider says this is a wash (slightly faster but not statistically
31074        significant); which is good enough since it's a preparation step and
31075        not supposed to be a spedup.
31076
31077        * API/JSCallbackFunction.cpp:
31078        (JSC::JSCallbackFunction::JSCallbackFunction):
31079        * kjs/ArrayConstructor.cpp:
31080        (JSC::ArrayConstructor::ArrayConstructor):
31081        * kjs/BooleanConstructor.cpp:
31082        (JSC::BooleanConstructor::BooleanConstructor):
31083        * kjs/DateConstructor.cpp:
31084        (JSC::DateConstructor::DateConstructor):
31085        * kjs/ErrorConstructor.cpp:
31086        (JSC::ErrorConstructor::ErrorConstructor):
31087        * kjs/FunctionPrototype.cpp:
31088        (JSC::FunctionPrototype::FunctionPrototype):
31089        * kjs/JSFunction.cpp:
31090        (JSC::JSFunction::JSFunction):
31091        * kjs/NativeErrorConstructor.cpp:
31092        (JSC::NativeErrorConstructor::NativeErrorConstructor):
31093        * kjs/NumberConstructor.cpp:
31094        (JSC::NumberConstructor::NumberConstructor):
31095        * kjs/ObjectConstructor.cpp:
31096        (JSC::ObjectConstructor::ObjectConstructor):
31097        * kjs/PrototypeFunction.cpp:
31098        (JSC::PrototypeFunction::PrototypeFunction):
31099        * kjs/RegExpConstructor.cpp:
31100        (JSC::RegExpConstructor::RegExpConstructor):
31101        * kjs/StringConstructor.cpp:
31102        (JSC::StringConstructor::StringConstructor):
31103        Pass JSGlobalData* instead of ExecState* to the InternalFunction
31104        constructor.
31105
31106        * API/OpaqueJSString.cpp: Added now-needed include.
31107
31108        * JavaScriptCore.exp: Updated.
31109
31110        * VM/CTI.cpp:
31111        (JSC::CTI::emitSlowScriptCheck): Changed to use ARGS_globalData
31112        instead of ARGS_exec.
31113
31114        * VM/CTI.h: Added a new argument to the CTI, the global data pointer.
31115        While it's possible to get to the global data pointer using the
31116        ExecState pointer, it's slow enough that it's better to just keep
31117        it around in the CTI arguments.
31118
31119        * VM/CodeBlock.h: Moved the CodeType enum here from ExecState.h.
31120
31121        * VM/Machine.cpp:
31122        (JSC::Machine::execute): Pass fewer arguments when constructing
31123        ExecState, and pass the global data pointer when invoking CTI.
31124        (JSC::Machine::firstCallFrame): Added. Used to get the dynamic global
31125        object, which is in the scope chain of the first call frame.
31126        (JSC::Machine::cti_op_add): Use globalData instead of exec when
31127        possible, to keep fast cases fast, since it's now more expensive to
31128        get to it through the exec pointer.
31129        (JSC::Machine::cti_timeout_check): Ditto.
31130        (JSC::Machine::cti_op_put_by_id_second): Ditto.
31131        (JSC::Machine::cti_op_get_by_id_second): Ditto.
31132        (JSC::Machine::cti_op_mul): Ditto.
31133        (JSC::Machine::cti_vm_compile): Ditto.
31134        (JSC::Machine::cti_op_get_by_val): Ditto.
31135        (JSC::Machine::cti_op_sub): Ditto.
31136        (JSC::Machine::cti_op_put_by_val): Ditto.
31137        (JSC::Machine::cti_op_put_by_val_array): Ditto.
31138        (JSC::Machine::cti_op_negate): Ditto.
31139        (JSC::Machine::cti_op_div): Ditto.
31140        (JSC::Machine::cti_op_pre_dec): Ditto.
31141        (JSC::Machine::cti_op_post_inc): Ditto.
31142        (JSC::Machine::cti_op_lshift): Ditto.
31143        (JSC::Machine::cti_op_bitand): Ditto.
31144        (JSC::Machine::cti_op_rshift): Ditto.
31145        (JSC::Machine::cti_op_bitnot): Ditto.
31146        (JSC::Machine::cti_op_mod): Ditto.
31147        (JSC::Machine::cti_op_post_dec): Ditto.
31148        (JSC::Machine::cti_op_urshift): Ditto.
31149        (JSC::Machine::cti_op_bitxor): Ditto.
31150        (JSC::Machine::cti_op_bitor): Ditto.
31151        (JSC::Machine::cti_op_call_eval): Ditto.
31152        (JSC::Machine::cti_op_throw): Ditto.
31153        (JSC::Machine::cti_op_is_string): Ditto.
31154        (JSC::Machine::cti_op_debug): Ditto.
31155        (JSC::Machine::cti_vm_throw): Ditto.
31156
31157        * VM/Machine.h: Added firstCallFrame.
31158
31159        * kjs/DebuggerCallFrame.cpp:
31160        (JSC::DebuggerCallFrame::evaluate): Pass fewer arguments when
31161        constructing ExecState.
31162
31163        * kjs/ExecState.cpp: Deleted contents. Later we'll remove the
31164        file altogether.
31165
31166        * kjs/ExecState.h: Removed m_globalObject and m_globalData.
31167        Moved CodeType into another header.
31168        (JSC::ExecState::ExecState): Take only a single argument, a
31169        call frame pointer.
31170        (JSC::ExecState::dynamicGlobalObject): Get the object from
31171        the first call frame since it's no longer stored.
31172        (JSC::ExecState::globalData): Get the global data from the
31173        scope chain, since we no longer store a pointer to it here.
31174        (JSC::ExecState::identifierTable): Ditto.
31175        (JSC::ExecState::propertyNames): Ditto.
31176        (JSC::ExecState::emptyList): Ditto.
31177        (JSC::ExecState::lexer): Ditto.
31178        (JSC::ExecState::parser): Ditto.
31179        (JSC::ExecState::machine): Ditto.
31180        (JSC::ExecState::arrayTable): Ditto.
31181        (JSC::ExecState::dateTable): Ditto.
31182        (JSC::ExecState::mathTable): Ditto.
31183        (JSC::ExecState::numberTable): Ditto.
31184        (JSC::ExecState::regExpTable): Ditto.
31185        (JSC::ExecState::regExpConstructorTable): Ditto.
31186        (JSC::ExecState::stringTable): Ditto.
31187        (JSC::ExecState::heap): Ditto.
31188
31189        * kjs/FunctionConstructor.cpp:
31190        (JSC::FunctionConstructor::FunctionConstructor): Pass
31191        JSGlobalData* instead of ExecState* to the InternalFunction
31192        constructor.
31193        (JSC::constructFunction): Pass the global data pointer when
31194        constructing a new scope chain.
31195
31196        * kjs/InternalFunction.cpp:
31197        (JSC::InternalFunction::InternalFunction): Take a JSGlobalData*
31198        instead of an ExecState*. Later we can change more places to
31199        work this way -- it's more efficient to take the type you need
31200        since the caller might already have it.
31201        * kjs/InternalFunction.h: Ditto.
31202
31203        * kjs/JSCell.h:
31204        (JSC::JSCell::operator new): Added an overload that takes a
31205        JSGlobalData* so you can construct without an ExecState*.
31206
31207        * kjs/JSGlobalObject.cpp:
31208        (JSC::JSGlobalObject::init): Moved creation of the global scope
31209        chain in here, since it now requires a pointer to the global data.
31210        Moved the initialization of the call frame in here since it requires
31211        the global scope chain node. Removed the extra argument to ExecState
31212        when creating the global ExecState*.
31213        * kjs/JSGlobalObject.h: Removed initialization of globalScopeChain
31214        and the call frame from the JSGlobalObjectData constructor. Added
31215        a thisValue argument to the init function.
31216
31217        * kjs/JSNumberCell.cpp: Added versions of jsNumberCell that take
31218        JSGlobalData* rather than ExecState*.
31219        * kjs/JSNumberCell.h:
31220        (JSC::JSNumberCell::operator new): Added a version that takes
31221        JSGlobalData*.
31222        (JSC::JSNumberCell::JSNumberCell): Ditto.
31223        (JSC::jsNumber): Ditto.
31224        * kjs/JSString.cpp:
31225        (JSC::jsString): Ditto.
31226        (JSC::jsSubstring): Ditto.
31227        (JSC::jsOwnedString): Ditto.
31228        * kjs/JSString.h:
31229        (JSC::JSString::JSString): Changed to take JSGlobalData*.
31230        (JSC::jsEmptyString): Added a version that takes JSGlobalData*.
31231        (JSC::jsSingleCharacterString): Ditto.
31232        (JSC::jsSingleCharacterSubstring): Ditto.
31233        (JSC::jsNontrivialString): Ditto.
31234        (JSC::JSString::getIndex): Ditto.
31235        (JSC::jsString): Ditto.
31236        (JSC::jsSubstring): Ditto.
31237        (JSC::jsOwnedString): Ditto.
31238
31239        * kjs/ScopeChain.h: Added a globalData pointer to each node.
31240        (JSC::ScopeChainNode::ScopeChainNode): Initialize the globalData
31241        pointer.
31242        (JSC::ScopeChainNode::push): Set the global data pointer in the
31243        new node.
31244        (JSC::ScopeChain::ScopeChain): Take a globalData argument.
31245
31246        * kjs/SmallStrings.cpp:
31247        (JSC::SmallStrings::createEmptyString): Take JSGlobalData* instead of
31248        ExecState*.
31249        (JSC::SmallStrings::createSingleCharacterString): Ditto.
31250        * kjs/SmallStrings.h:
31251        (JSC::SmallStrings::emptyString): Ditto.
31252        (JSC::SmallStrings::singleCharacterString): Ditto.
31253
312542008-10-03  Cameron Zwarich  <zwarich@apple.com>
31255
31256        Reviewed by Geoff Garen.
31257
31258        Bug 21343: REGRESSSION (r37160): ecma_3/ExecutionContexts/10.1.3-1.js and js1_4/Functions/function-001.js fail on 64-bit
31259        <https://bugs.webkit.org/show_bug.cgi?id=21343>
31260
31261        Add a workaround for a bug in GCC, which affects GCC 4.0, GCC 4.2, and
31262        llvm-gcc 4.2. I put it in an #ifdef because it was a slight regression
31263        on SunSpider in 32-bit, although that might be entirely random.
31264
31265        * kjs/Arguments.cpp:
31266        (JSC::Arguments::getOwnPropertySlot):
31267
312682008-10-03  Darin Adler  <darin@apple.com>
31269
31270        Rubber stamped by Alexey Proskuryakov.
31271
31272        * kjs/Shell.cpp: (main): Don't delete JSGlobalData. Later, we need to change
31273        this tool to use public JavaScriptCore API instead.
31274
312752008-10-03  Darin Adler  <darin@apple.com>
31276
31277        Suggested by Alexey Proskuryakov.
31278
31279        * kjs/JSGlobalData.cpp:
31280        (JSC::JSGlobalData::~JSGlobalData): Remove call to heap.destroy() because
31281        it's too late to ref the JSGlobalData object once it's already being
31282        destroyed. In practice this is not a problem because WebCore's JSGlobalData
31283        is never destroyed and JSGlobalContextRelease takes care of calling
31284        heap.destroy() in advance.
31285
312862008-10-02  Oliver Hunt  <oliver@apple.com>
31287
31288        Reviewed by Maciej Stachowiak.
31289
31290        Replace SSE3 check with an SSE2 check, and implement SSE2 check on windows.
31291
31292        5.6% win on SunSpider on windows.
31293
31294        * VM/CTI.cpp:
31295        (JSC::isSSE2Present):
31296        (JSC::CTI::compileBinaryArithOp):
31297        (JSC::CTI::compileBinaryArithOpSlowCase):
31298
312992008-10-03  Maciej Stachowiak  <mjs@apple.com>
31300
31301        Rubber stamped by Cameron Zwarich.
31302        
31303        - fix mistaken change of | to || which caused a big perf regression on EarleyBoyer
31304
31305        * kjs/grammar.y:
31306
313072008-10-02  Darin Adler  <darin@apple.com>
31308
31309        Reviewed by Geoff Garen.
31310
31311        - https://bugs.webkit.org/show_bug.cgi?id=21321
31312          Bug 21321: speed up JavaScriptCore by inlining Heap in JSGlobalData
31313
31314        1.019x as fast on SunSpider.
31315
31316        * API/JSBase.cpp:
31317        (JSEvaluateScript): Use heap. instead of heap-> to work with the heap.
31318        (JSCheckScriptSyntax): Ditto.
31319        (JSGarbageCollect): Ditto.
31320        (JSReportExtraMemoryCost): Ditto.
31321        * API/JSContextRef.cpp:
31322        (JSGlobalContextRetain): Ditto.
31323        (JSGlobalContextRelease): Destroy the heap with the destroy function instead
31324        of the delete operator.
31325        (JSContextGetGlobalObject): Use heap. instead of heap-> to work with the heap.
31326        * API/JSObjectRef.cpp:
31327        (JSObjectMake): Use heap. instead of heap-> to work with the heap.
31328        (JSObjectMakeFunctionWithCallback): Ditto.
31329        (JSObjectMakeConstructor): Ditto.
31330        (JSObjectMakeFunction): Ditto.
31331        (JSObjectMakeArray): Ditto.
31332        (JSObjectMakeDate): Ditto.
31333        (JSObjectMakeError): Ditto.
31334        (JSObjectMakeRegExp): Ditto.
31335        (JSObjectHasProperty): Ditto.
31336        (JSObjectGetProperty): Ditto.
31337        (JSObjectSetProperty): Ditto.
31338        (JSObjectGetPropertyAtIndex): Ditto.
31339        (JSObjectSetPropertyAtIndex): Ditto.
31340        (JSObjectDeleteProperty): Ditto.
31341        (JSObjectCallAsFunction): Ditto.
31342        (JSObjectCallAsConstructor): Ditto.
31343        (JSObjectCopyPropertyNames): Ditto.
31344        (JSPropertyNameAccumulatorAddName): Ditto.
31345        * API/JSValueRef.cpp:
31346        (JSValueIsEqual): Ditto.
31347        (JSValueIsInstanceOfConstructor): Ditto.
31348        (JSValueMakeNumber): Ditto.
31349        (JSValueMakeString): Ditto.
31350        (JSValueToNumber): Ditto.
31351        (JSValueToStringCopy): Ditto.
31352        (JSValueToObject): Ditto.
31353        (JSValueProtect): Ditto.
31354        (JSValueUnprotect): Ditto.
31355
31356        * kjs/ExecState.h:
31357        (JSC::ExecState::heap): Update to use the & operator.
31358
31359        * kjs/JSGlobalData.cpp:
31360        (JSC::JSGlobalData::JSGlobalData): Update to initialize a heap member
31361        instead of calling new to make a heap.
31362        (JSC::JSGlobalData::~JSGlobalData): Destroy the heap with the destroy
31363        function instead of the delete operator.
31364        * kjs/JSGlobalData.h: Change from Heap* to a Heap.
31365        * kjs/JSGlobalObject.cpp:
31366        (JSC::JSGlobalObject::mark): Use the & operator here.
31367        (JSC::JSGlobalObject::operator new): Use heap. instead of heap-> to work
31368        with the heap.
31369
313702008-10-02  Cameron Zwarich  <zwarich@apple.com>
31371
31372        Reviewed by Geoff Garen.
31373
31374        Bug 21317: Replace RegisterFile size and capacity information with Register pointers
31375        <https://bugs.webkit.org/show_bug.cgi?id=21317>
31376
31377        This is a 2.3% speedup on the V8 DeltaBlue benchmark, a 3.3% speedup on
31378        the V8 Raytrace benchmark, and a 1.0% speedup on SunSpider.
31379
31380        * VM/Machine.cpp:
31381        (JSC::slideRegisterWindowForCall):
31382        (JSC::Machine::callEval):
31383        (JSC::Machine::execute):
31384        (JSC::Machine::privateExecute):
31385        (JSC::Machine::cti_op_call_JSFunction):
31386        (JSC::Machine::cti_op_construct_JSConstruct):
31387        * VM/RegisterFile.cpp:
31388        (JSC::RegisterFile::~RegisterFile):
31389        * VM/RegisterFile.h:
31390        (JSC::RegisterFile::RegisterFile):
31391        (JSC::RegisterFile::start):
31392        (JSC::RegisterFile::end):
31393        (JSC::RegisterFile::size):
31394        (JSC::RegisterFile::shrink):
31395        (JSC::RegisterFile::grow):
31396        (JSC::RegisterFile::lastGlobal):
31397        (JSC::RegisterFile::markGlobals):
31398        (JSC::RegisterFile::markCallFrames):
31399        * kjs/JSGlobalObject.cpp:
31400        (JSC::JSGlobalObject::copyGlobalsTo):
31401
314022008-10-02  Cameron Zwarich  <zwarich@apple.com>
31403
31404        Rubber-stamped by Darin Adler.
31405
31406        Change bitwise operations introduced in r37166 to boolean operations. We
31407        only use bitwise operations over boolean operations for increasing
31408        performance in extremely hot code, but that does not apply to anything
31409        in the parser.
31410
31411        * kjs/grammar.y:
31412
314132008-10-02  Gavin Barraclough  <barraclough@apple.com>
31414
31415        Reviewed by Darin Adler.
31416
31417        Fix for bug #21232 - should reset m_isPendingDash on flush,
31418        and should allow '\-' as beginning or end of a range (though
31419        not to specifiy a range itself).
31420
31421        * ChangeLog:
31422        * wrec/CharacterClassConstructor.cpp:
31423        (JSC::CharacterClassConstructor::put):
31424        (JSC::CharacterClassConstructor::flush):
31425        * wrec/CharacterClassConstructor.h:
31426        (JSC::CharacterClassConstructor::flushBeforeEscapedHyphen):
31427        * wrec/WREC.cpp:
31428        (JSC::WRECGenerator::generateDisjunction):
31429        (JSC::WRECParser::parseCharacterClass):
31430        (JSC::WRECParser::parseDisjunction):
31431        * wrec/WREC.h:
31432
314332008-10-02  Darin Adler  <darin@apple.com>
31434
31435        Reviewed by Sam Weinig.
31436
31437        - remove the "static" from declarations in a header file, since we
31438          don't want them to have internal linkage
31439
31440        * VM/Machine.h: Remove the static keyword from the constant and the
31441        three inline functions that Geoff just moved here.
31442
314432008-10-02  Geoffrey Garen  <ggaren@apple.com>
31444
31445        Reviewed by Sam Weinig.
31446        
31447        Fixed https://bugs.webkit.org/show_bug.cgi?id=21283.
31448        Profiler Crashes When Started
31449
31450        * VM/Machine.cpp:
31451        * VM/Machine.h:
31452        (JSC::makeHostCallFramePointer):
31453        (JSC::isHostCallFrame):
31454        (JSC::stripHostCallFrameBit): Moved some things to the header so
31455        JSGlobalObject could use them.
31456
31457        * kjs/JSGlobalObject.h:
31458        (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Call the
31459        new makeHostCallFramePointer API, since 0 no longer indicates a host
31460        call frame.
31461
314622008-10-02  Alexey Proskuryakov  <ap@webkit.org>
31463
31464        Reviewed by Darin Adler.
31465
31466        https://bugs.webkit.org/show_bug.cgi?id=21304
31467        Stop using a static wrapper map for WebCore JS bindings
31468
31469        * kjs/JSGlobalData.cpp:
31470        (JSC::JSGlobalData::JSGlobalData):
31471        (JSC::JSGlobalData::~JSGlobalData):
31472        (JSC::JSGlobalData::ClientData::~ClientData):
31473        * kjs/JSGlobalData.h:
31474        Added a client data member to JSGlobalData. WebCore will use it to store bindings-related
31475        global data.
31476
31477        * JavaScriptCore.exp: Export virtual ClientData destructor.
31478
314792008-10-02  Geoffrey Garen  <ggaren@apple.com>
31480
31481        Not reviewed.
31482        
31483        Try to fix Qt build.
31484
31485        * kjs/Error.h:
31486
314872008-10-01  Geoffrey Garen  <ggaren@apple.com>
31488
31489        Reviewed by Darin Adler and Cameron Zwarich.
31490
31491        Preliminary step toward dynamic recompilation: Standardized and
31492        simplified the parsing interface.
31493        
31494        The main goal in this patch is to make it easy to ask for a duplicate
31495        compilation, and get back a duplicate result -- same source URL, same
31496        debugger / profiler ID, same toString behavior, etc.
31497        
31498        The basic unit of compilation and evaluation is now SourceCode, which
31499        encompasses a SourceProvider, a range in that provider, and a starting
31500        line number.
31501
31502        A SourceProvider now encompasses a source URL, and *is* a source ID,
31503        since a pointer is a unique identifier.
31504
31505        * API/JSBase.cpp:
31506        (JSEvaluateScript):
31507        (JSCheckScriptSyntax): Provide a SourceCode to the Interpreter, since
31508        other APIs are no longer supported.
31509        
31510        * VM/CodeBlock.h:
31511        (JSC::EvalCodeCache::get): Provide a SourceCode to the Interpreter, since
31512        other APIs are no longer supported.
31513        (JSC::CodeBlock::CodeBlock): ASSERT something that used to be ASSERTed
31514        by our caller -- this is a better bottleneck.
31515
31516        * VM/CodeGenerator.cpp:
31517        (JSC::CodeGenerator::CodeGenerator): Updated for the fact that
31518        FunctionBodyNode's parameters are no longer a WTF::Vector.
31519
31520        * kjs/Arguments.cpp:
31521        (JSC::Arguments::Arguments): ditto
31522
31523        * kjs/DebuggerCallFrame.cpp:
31524        (JSC::DebuggerCallFrame::evaluate): Provide a SourceCode to the Parser,
31525        since other APIs are no longer supported.
31526
31527        * kjs/FunctionConstructor.cpp:
31528        (JSC::constructFunction): Provide a SourceCode to the Parser, since
31529        other APIs are no longer supported. Adopt FunctionBodyNode's new
31530        "finishParsing" API.
31531
31532        * kjs/JSFunction.cpp:
31533        (JSC::JSFunction::lengthGetter):
31534        (JSC::JSFunction::getParameterName): Updated for the fact that
31535        FunctionBodyNode's parameters are no longer a wtf::Vector.
31536
31537        * kjs/JSFunction.h: Nixed some cruft.
31538
31539        * kjs/JSGlobalObjectFunctions.cpp:
31540        (JSC::globalFuncEval): Provide a SourceCode to the Parser, since
31541        other APIs are no longer supported. 
31542
31543        * kjs/Parser.cpp:
31544        (JSC::Parser::parse): Require a SourceCode argument, instead of a bunch
31545        of broken out parameters. Stop tracking sourceId as an integer, since we
31546        use the SourceProvider pointer for this now. Don't clamp the
31547        startingLineNumber, since SourceCode does that now.
31548
31549        * kjs/Parser.h:
31550        (JSC::Parser::parse): Standardized the parsing interface to require a
31551        SourceCode.
31552
31553        * kjs/Shell.cpp:
31554        (functionRun):
31555        (functionLoad):
31556        (prettyPrintScript):
31557        (runWithScripts):
31558        (runInteractive): Provide a SourceCode to the Interpreter, since
31559        other APIs are no longer supported.
31560
31561        * kjs/SourceProvider.h:
31562        (JSC::SourceProvider::SourceProvider):
31563        (JSC::SourceProvider::url):
31564        (JSC::SourceProvider::asId):
31565        (JSC::UStringSourceProvider::create):
31566        (JSC::UStringSourceProvider::UStringSourceProvider): Added new
31567        responsibilities described above.
31568
31569        * kjs/SourceRange.h:
31570        (JSC::SourceCode::SourceCode):
31571        (JSC::SourceCode::toString):
31572        (JSC::SourceCode::provider):
31573        (JSC::SourceCode::firstLine):
31574        (JSC::SourceCode::data):
31575        (JSC::SourceCode::length): Added new responsibilities described above.
31576        Renamed SourceRange to SourceCode, based on review feedback. Added
31577        a makeSource function for convenience.
31578
31579        * kjs/debugger.h: Provide a SourceCode to the client, since other APIs
31580        are no longer supported.
31581
31582        * kjs/grammar.y: Provide startingLineNumber when creating a SourceCode.
31583
31584        * kjs/debugger.h: Treat sourceId as intptr_t to avoid loss of precision
31585        on 64bit platforms.
31586
31587        * kjs/interpreter.cpp:
31588        (JSC::Interpreter::checkSyntax):
31589        (JSC::Interpreter::evaluate):
31590        * kjs/interpreter.h: Require a SourceCode instead of broken out arguments.
31591
31592        * kjs/lexer.cpp:
31593        (JSC::Lexer::setCode):
31594        * kjs/lexer.h:
31595        (JSC::Lexer::sourceRange): Fold together the SourceProvider and line number
31596        into a SourceCode. Fixed a bug where the Lexer would accidentally keep
31597        alive the last SourceProvider forever.
31598
31599        * kjs/nodes.cpp:
31600        (JSC::ScopeNode::ScopeNode):
31601        (JSC::ProgramNode::ProgramNode):
31602        (JSC::ProgramNode::create):
31603        (JSC::EvalNode::EvalNode):
31604        (JSC::EvalNode::generateCode):
31605        (JSC::EvalNode::create):
31606        (JSC::FunctionBodyNode::FunctionBodyNode):
31607        (JSC::FunctionBodyNode::finishParsing):
31608        (JSC::FunctionBodyNode::create):
31609        (JSC::FunctionBodyNode::generateCode):
31610        (JSC::ProgramNode::generateCode):
31611        (JSC::FunctionBodyNode::paramString):
31612        * kjs/nodes.h:
31613        (JSC::ScopeNode::):
31614        (JSC::ScopeNode::sourceId):
31615        (JSC::FunctionBodyNode::):
31616        (JSC::FunctionBodyNode::parameterCount):
31617        (JSC::FuncExprNode::):
31618        (JSC::FuncDeclNode::): Store a SourceCode in all ScopeNodes, since
31619        SourceCode is now responsible for tracking URL, ID, etc. Streamlined
31620        some ad hoc FunctionBodyNode fixups into a "finishParsing" function, to
31621        help make clear what you need to do in order to finish parsing a
31622        FunctionBodyNode.
31623
31624        * wtf/Vector.h:
31625        (WTF::::releaseBuffer): Don't ASSERT that releaseBuffer() is only called
31626        when buffer is not 0, since FunctionBodyNode is more than happy
31627        to get back a 0 buffer, and other functions like RefPtr::release() allow
31628        for 0, too.
31629
316302008-10-01  Cameron Zwarich  <zwarich@apple.com>
31631
31632        Reviewed by Maciej Stachowiak.
31633
31634        Bug 21289: REGRESSION (r37160): Inspector crashes on load
31635        <https://bugs.webkit.org/show_bug.cgi?id=21289>
31636
31637        The code in Arguments::mark() in r37160 was wrong. It marks indices in
31638        d->registers, but that makes no sense (they are local variables, not
31639        arguments). It should mark those indices in d->registerArray instead.
31640
31641        This patch also changes Arguments::copyRegisters() to use d->numParameters
31642        instead of recomputing it.
31643
31644        * kjs/Arguments.cpp:
31645        (JSC::Arguments::mark):
31646        * kjs/Arguments.h:
31647        (JSC::Arguments::copyRegisters):
31648
316492008-09-30  Darin Adler  <darin@apple.com>
31650
31651        Reviewed by Eric Seidel.
31652
31653        - https://bugs.webkit.org/show_bug.cgi?id=21214
31654          work on getting rid of ExecState
31655
31656        Eliminate some unneeded uses of dynamicGlobalObject.
31657
31658        * API/JSClassRef.cpp:
31659        (OpaqueJSClass::contextData): Changed to use a map in the global data instead
31660        of on the global object. Also fixed to use only a single hash table lookup.
31661
31662        * API/JSObjectRef.cpp:
31663        (JSObjectMakeConstructor): Use lexicalGlobalObject rather than dynamicGlobalObject
31664        to get the object prototype.
31665
31666        * kjs/ArrayPrototype.cpp:
31667        (JSC::arrayProtoFuncToString): Use arrayVisitedElements set in global data rather
31668        than in the global object.
31669        (JSC::arrayProtoFuncToLocaleString): Ditto.
31670        (JSC::arrayProtoFuncJoin): Ditto.
31671
31672        * kjs/JSGlobalData.cpp:
31673        (JSC::JSGlobalData::JSGlobalData): Don't initialize opaqueJSClassData, since
31674        it's no longer a pointer.
31675        (JSC::JSGlobalData::~JSGlobalData): We still need to delete all the values, but
31676        we don't need to delete the map since it's no longer a pointer.
31677
31678        * kjs/JSGlobalData.h: Made opaqueJSClassData a map instead of a pointer to a map.
31679        Also added arrayVisitedElements.
31680
31681        * kjs/JSGlobalObject.h: Removed arrayVisitedElements.
31682
31683        * kjs/Shell.cpp:
31684        (functionRun): Use lexicalGlobalObject instead of dynamicGlobalObject.
31685        (functionLoad): Ditto.
31686
316872008-10-01  Cameron Zwarich  <zwarich@apple.com>
31688
31689        Not reviewed.
31690
31691        Speculative Windows build fix.
31692
31693        * kjs/grammar.y:
31694
316952008-10-01  Cameron Zwarich  <zwarich@apple.com>
31696
31697        Reviewed by Darin Adler.
31698
31699        Bug 21123: using "arguments" in a function should not force creation of an activation object
31700        <https://bugs.webkit.org/show_bug.cgi?id=21123>
31701
31702        Make the 'arguments' object not require a JSActivation. We store the
31703        'arguments' object in the OptionalCalleeArguments call frame slot. We
31704        need to be able to get the original 'arguments' object to tear it off
31705        when returning from a function, but 'arguments' may be assigned to in a
31706        number of ways.
31707
31708        Therefore, we use the OptionalCalleeArguments slot when we want to get
31709        the original activation or we know that 'arguments' was not assigned a
31710        different value. When 'arguments' may have been assigned a new value,
31711        we use a new local variable that is initialized with 'arguments'. Since
31712        a function parameter named 'arguments' may overwrite the value of
31713        'arguments', we also need to be careful to look up 'arguments' in the
31714        symbol table, so we get the parameter named 'arguments' instead of the
31715        local variable that we have added for holding the 'arguments' object.
31716
31717        This is a 19.1% win on the V8 Raytrace benchmark using the SunSpider
31718        harness, and a 20.7% win using the V8 harness. This amounts to a 6.5%
31719        total speedup on the V8 benchmark suite using the V8 harness.
31720
31721        * VM/CTI.cpp:
31722        (JSC::CTI::privateCompileMainPass):
31723        * VM/CodeBlock.h:
31724        * VM/CodeGenerator.cpp:
31725        (JSC::CodeGenerator::CodeGenerator):
31726        * VM/Machine.cpp:
31727        (JSC::Machine::unwindCallFrame):
31728        (JSC::Machine::privateExecute):
31729        (JSC::Machine::retrieveArguments):
31730        (JSC::Machine::cti_op_init_arguments):
31731        (JSC::Machine::cti_op_ret_activation_arguments):
31732        * VM/Machine.h:
31733        * VM/RegisterFile.h:
31734        (JSC::RegisterFile::):
31735        * kjs/Arguments.cpp:
31736        (JSC::Arguments::mark):
31737        (JSC::Arguments::fillArgList):
31738        (JSC::Arguments::getOwnPropertySlot):
31739        (JSC::Arguments::put):
31740        * kjs/Arguments.h:
31741        (JSC::Arguments::setRegisters):
31742        (JSC::Arguments::init):
31743        (JSC::Arguments::Arguments):
31744        (JSC::Arguments::copyRegisters):
31745        (JSC::JSActivation::copyRegisters):
31746        * kjs/JSActivation.cpp:
31747        (JSC::JSActivation::argumentsGetter):
31748        * kjs/JSActivation.h:
31749        (JSC::JSActivation::JSActivationData::JSActivationData):
31750        * kjs/grammar.y:
31751        * kjs/nodes.h:
31752        (JSC::ScopeNode::setUsesArguments):
31753        * masm/X86Assembler.h:
31754        (JSC::X86Assembler::):
31755        (JSC::X86Assembler::orl_mr):
31756
317572008-10-01  Kevin McCullough  <kmccullough@apple.com>
31758
31759        Rubberstamped by Geoff Garen.
31760
31761        Remove BreakpointCheckStatement because it's not used anymore.
31762        No effect on sunspider or the jsc tests.
31763
31764        * kjs/nodes.cpp:
31765        * kjs/nodes.h:
31766
317672008-09-30  Oliver Hunt  <oliver@apple.com>
31768
31769        Reviewed by Geoff Garen.
31770
31771        Improve performance of CTI on windows.
31772
31773        Currently on platforms where the compiler doesn't allow us to safely
31774        index relative to the address of a parameter we need to actually
31775        provide a pointer to CTI runtime call arguments.  This patch improves
31776        performance in this case by making the CTI logic for restoring this
31777        parameter much less conservative by only resetting it before we actually
31778        make a call, rather than between each and every SF bytecode we generate
31779        code for.
31780
31781        This results in a 3.6% progression on the v8 benchmark when compiled with MSVC.
31782
31783        * VM/CTI.cpp:
31784        (JSC::CTI::emitCall):
31785        (JSC::CTI::compileOpCall):
31786        (JSC::CTI::privateCompileMainPass):
31787        (JSC::CTI::privateCompileSlowCases):
31788        (JSC::CTI::privateCompilePutByIdTransition):
31789        * VM/CTI.h:
31790        * masm/X86Assembler.h:
31791        * wtf/Platform.h:
31792
317932008-09-30  Maciej Stachowiak  <mjs@apple.com>
31794
31795        Reviewed by Oliver Hunt.
31796
31797        - track uses of "this", "with" and "catch" in the parser
31798        
31799        Knowing this up front will be useful for future optimizations.
31800        
31801        Perf and correctness remain the same.
31802        
31803        * kjs/NodeInfo.h:
31804        * kjs/grammar.y:
31805
318062008-09-30  Sam Weinig  <sam@webkit.org>
31807
31808        Reviewed by Mark Rowe.
31809
31810        Add WebKitAvailability macros for JSObjectMakeArray, JSObjectMakeDate, JSObjectMakeError,
31811        and JSObjectMakeRegExp
31812
31813        * API/JSObjectRef.h:
31814
318152008-09-30  Darin Adler  <darin@apple.com>
31816
31817        Reviewed by Geoff Garen.
31818
31819        - https://bugs.webkit.org/show_bug.cgi?id=21214
31820          work on getting rid of ExecState
31821
31822        Replaced the m_prev field of ExecState with a bit in the
31823        call frame pointer to indicate "host" call frames.
31824
31825        * VM/Machine.cpp:
31826        (JSC::makeHostCallFramePointer): Added. Sets low bit.
31827        (JSC::isHostCallFrame): Added. Checks low bit.
31828        (JSC::stripHostCallFrameBit): Added. Clears low bit.
31829        (JSC::Machine::unwindCallFrame): Replaced null check that was
31830        formerly used to detect host call frames with an isHostCallFrame check.
31831        (JSC::Machine::execute): Pass in a host call frame pointer rather than
31832        always passing 0 when starting execution from the host. This allows us
31833        to follow the entire call frame pointer chain when desired, or to stop
31834        at the host calls when that's desired.
31835        (JSC::Machine::privateExecute): Replaced null check that was
31836        formerly used to detect host call frames with an isHostCallFrame check.
31837        (JSC::Machine::retrieveCaller): Ditto.
31838        (JSC::Machine::retrieveLastCaller): Ditto.
31839        (JSC::Machine::callFrame): Removed the code to walk up m_prev pointers
31840        and replaced it with code that uses the caller pointer and uses the
31841        stripHostCallFrameBit function.
31842
31843        * kjs/ExecState.cpp: Removed m_prev.
31844        * kjs/ExecState.h: Ditto.
31845
318462008-09-30  Cameron Zwarich  <zwarich@apple.com>
31847
31848        Reviewed by Geoff Garen.
31849
31850        Move all detection of 'arguments' in a lexical scope to the parser, in
31851        preparation for fixing
31852
31853        Bug 21123: using "arguments" in a function should not force creation of an activation object
31854        <https://bugs.webkit.org/show_bug.cgi?id=21123>
31855
31856        * VM/CodeGenerator.cpp:
31857        (JSC::CodeGenerator::CodeGenerator):
31858        * kjs/NodeInfo.h:
31859        * kjs/grammar.y:
31860
318612008-09-30  Geoffrey Garen  <ggaren@apple.com>
31862
31863        Not reviewed.
31864
31865        * kjs/Shell.cpp:
31866        (runWithScripts): Fixed indentation.
31867
318682008-09-30  Mark Rowe  <mrowe@apple.com>
31869
31870        Rubber-stamped by Sam Weinig.
31871
31872        Build fix.  Move InternalFunction::classInfo implementation into the .cpp
31873        file to prevent the vtable for InternalFunction being generated as a weak symbol.
31874        Has no effect on SunSpider.
31875
31876        * kjs/InternalFunction.cpp:
31877        (JSC::InternalFunction::classInfo):
31878        * kjs/InternalFunction.h:
31879
318802008-09-29  Maciej Stachowiak  <mjs@apple.com>
31881
31882        Reviewed by Darin Adler.
31883        
31884        - optimize appending a number to a string
31885        https://bugs.webkit.org/show_bug.cgi?id=21203
31886        
31887        It's pretty common in real-world code (and on some of the v8
31888        benchmarks) to append a number to a string, so I made this one of
31889        the fast cases, and also added support to UString to do it
31890        directly without allocating a temporary UString.
31891        
31892        ~1% speedup on v8 benchmark.
31893
31894        * VM/Machine.cpp:
31895        (JSC::jsAddSlowCase): Make this NEVER_INLINE because somehow otherwise
31896        the change is a regression.
31897        (JSC::jsAdd): Handle number + string special case.
31898        (JSC::Machine::cti_op_add): Integrate much of the logic of jsAdd to
31899        avoid exception check in the str + str, num + num and str + num cases.
31900        * kjs/ustring.cpp:
31901        (JSC::expandedSize): Make this a non-member function, since it needs to be 
31902        called in non-member functions but not outside this file.
31903        (JSC::expandCapacity): Ditto.
31904        (JSC::UString::expandCapacity): Call the non-member version. 
31905        (JSC::createRep): Helper to make a rep from a char*.
31906        (JSC::UString::UString): Use above helper.
31907        (JSC::concatenate): Guts of concatenating constructor for cases where first
31908        item is a UString::Rep, and second is a UChar* and length, or a char*.
31909        (JSC::UString::append): Implement for cases where first item is a UString::Rep,
31910        and second is an int or double. Sadly duplicates logic of UString::from(int)
31911        and UString::from(double).
31912        * kjs/ustring.h:
31913
319142008-09-29  Darin Adler  <darin@apple.com>
31915
31916        Reviewed by Sam Weinig.
31917
31918        - https://bugs.webkit.org/show_bug.cgi?id=21214
31919          work on getting rid of ExecState
31920
31921        * JavaScriptCore.exp: Updated since JSGlobalObject::init
31922        no longer takes a parameter.
31923
31924        * VM/Machine.cpp:
31925        (JSC::Machine::execute): Removed m_registerFile argument
31926        for ExecState constructors.
31927
31928        * kjs/DebuggerCallFrame.cpp:
31929        (JSC::DebuggerCallFrame::evaluate): Removed globalThisValue
31930        argument for ExecState constructor.
31931
31932        * kjs/ExecState.cpp:
31933        (JSC::ExecState::ExecState): Removed globalThisValue and
31934        registerFile arguments to constructors.
31935
31936        * kjs/ExecState.h: Removed m_globalThisValue and
31937        m_registerFile data members.
31938
31939        * kjs/JSGlobalObject.cpp:
31940        (JSC::JSGlobalObject::init): Removed globalThisValue
31941        argument for ExecState constructor.
31942
31943        * kjs/JSGlobalObject.h:
31944        (JSC::JSGlobalObject::JSGlobalObject): Got rid of parameter
31945        for the init function.
31946
319472008-09-29  Geoffrey Garen  <ggaren@apple.com>
31948
31949        Rubber-stamped by Cameron Zwarich.
31950        
31951        Fixed https://bugs.webkit.org/show_bug.cgi?id=21225
31952        Machine::retrieveLastCaller should check for a NULL codeBlock
31953        
31954        In order to crash, you would need to call retrieveCaller in a situation
31955        where you had two host call frames in a row in the register file. I
31956        don't know how to make that happen, or if it's even possible, so I don't
31957        have a test case -- but better safe than sorry!
31958
31959        * VM/Machine.cpp:
31960        (JSC::Machine::retrieveLastCaller):
31961
319622008-09-29  Geoffrey Garen  <ggaren@apple.com>
31963
31964        Reviewed by Cameron Zwarich.
31965        
31966        Store the callee ScopeChain, not the caller ScopeChain, in the call frame
31967        header. Nix the "scopeChain" local variable and ExecState::m_scopeChain, and
31968        access the callee ScopeChain through the call frame header instead.
31969
31970        Profit: call + return are simpler, because they don't have to update the
31971        "scopeChain" local variable, or ExecState::m_scopeChain.
31972        
31973        Because CTI keeps "r" in a register, reading the callee ScopeChain relative
31974        to "r" can be very fast, in any cases we care to optimize.
31975
31976        0% speedup on empty function call benchmark. (5.5% speedup in bytecode.)
31977        0% speedup on SunSpider. (7.5% speedup on controlflow-recursive.)
31978        2% speedup on SunSpider --v8.
31979        2% speedup on v8 benchmark.
31980
31981        * VM/CTI.cpp: Changed scope chain access to read the scope chain from
31982        the call frame header. Sped up op_ret by changing it not to fuss with
31983        the "scopeChain" local variable or ExecState::m_scopeChain.
31984
31985        * VM/CTI.h: Updated CTI trampolines not to take a ScopeChainNode*
31986        argument, since that's stored in the call frame header now.
31987
31988        * VM/Machine.cpp: Access "scopeChain" and "codeBlock" through new helper
31989        functions that read from the call frame header. Updated functions operating
31990        on ExecState::m_callFrame to account for / take advantage of the fact that
31991        Exec:m_callFrame is now never NULL.
31992        
31993        Fixed a bug in op_construct, where it would use the caller's default
31994        object prototype, rather than the callee's, when constructing a new object.
31995
31996        * VM/Machine.h: Made some helper functions available. Removed
31997        ScopeChainNode* arguments to a lot of functions, since the ScopeChainNode*
31998        is now stored in the call frame header.
31999
32000        * VM/RegisterFile.h: Renamed "CallerScopeChain" to "ScopeChain", since
32001        that's what it is now.
32002
32003        * kjs/DebuggerCallFrame.cpp: Updated for change to ExecState signature.
32004
32005        * kjs/ExecState.cpp:
32006        * kjs/ExecState.h: Nixed ExecState::m_callFrame, along with the unused
32007        isGlobalObject function.
32008
32009        * kjs/JSGlobalObject.cpp:
32010        * kjs/JSGlobalObject.h: Gave the global object a fake call frame in
32011        which to store the global scope chain, since our code now assumes that
32012        it can always read the scope chain out of the ExecState's call frame.
32013
320142008-09-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
32015
32016        Reviewed by Sam Weinig.
32017
32018        Remove the isActivationObject() virtual method on JSObject and use
32019        StructureID information instead. This should be slightly faster, but
32020        isActivationObject() is only used in assertions and unwinding the stack
32021        for exceptions.
32022
32023        * VM/Machine.cpp:
32024        (JSC::depth):
32025        (JSC::Machine::unwindCallFrame):
32026        (JSC::Machine::privateExecute):
32027        (JSC::Machine::cti_op_ret_activation):
32028        * kjs/JSActivation.cpp:
32029        * kjs/JSActivation.h:
32030        * kjs/JSObject.h:
32031
320322008-09-29  Peter Gal  <galpeter@inf.u-szeged.hu>
32033
32034        Reviewed and tweaked by Darin Adler.
32035
32036        Fix build for non-all-in-one platforms.
32037
32038        * kjs/StringPrototype.cpp: Added missing ASCIICType.h include.
32039
320402008-09-29  Bradley T. Hughes  <bradley.hughes@nokia.com>
32041
32042        Reviewed by Simon Hausmann.
32043
32044        Fix compilation with icpc
32045
32046        * wtf/HashSet.h:
32047        (WTF::::find):
32048        (WTF::::contains):
32049
320502008-09-29  Thiago Macieira  <thiago.macieira@nokia.com>
32051
32052        Reviewed by Simon Hausmann.
32053
32054        Changed copyright from Trolltech ASA to Nokia.
32055        
32056        Nokia acquired Trolltech ASA, assets were transferred on September 26th 2008.
32057        
32058
32059        * wtf/qt/MainThreadQt.cpp:
32060
320612008-09-29  Simon Hausmann  <hausmann@webkit.org>
32062
32063        Reviewed by Lars Knoll.
32064
32065        Don't accidentially install libJavaScriptCore.a for the build inside
32066        Qt.
32067
32068        * JavaScriptCore.pro:
32069
320702008-09-28  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
32071
32072        Reviewed by Maciej Stachowiak.
32073
32074        Bug 21200: Allow direct access to 'arguments' without using op_resolve
32075        <https://bugs.webkit.org/show_bug.cgi?id=21200>
32076
32077        Allow fast access to the 'arguments' object by adding an extra slot to
32078        the callframe to store it.
32079
32080        This is a 3.0% speedup on the V8 Raytrace benchmark.
32081
32082        * JavaScriptCore.exp:
32083        * VM/CTI.cpp:
32084        (JSC::CTI::privateCompileMainPass):
32085        * VM/CodeBlock.cpp:
32086        (JSC::CodeBlock::dump):
32087        * VM/CodeGenerator.cpp:
32088        (JSC::CodeGenerator::CodeGenerator):
32089        (JSC::CodeGenerator::registerFor):
32090        * VM/CodeGenerator.h:
32091        (JSC::CodeGenerator::registerFor):
32092        * VM/Machine.cpp:
32093        (JSC::Machine::initializeCallFrame):
32094        (JSC::Machine::dumpRegisters):
32095        (JSC::Machine::privateExecute):
32096        (JSC::Machine::retrieveArguments):
32097        (JSC::Machine::cti_op_call_JSFunction):
32098        (JSC::Machine::cti_op_create_arguments):
32099        (JSC::Machine::cti_op_construct_JSConstruct):
32100        * VM/Machine.h:
32101        * VM/Opcode.h:
32102        * VM/RegisterFile.h:
32103        (JSC::RegisterFile::):
32104        * kjs/JSActivation.cpp:
32105        (JSC::JSActivation::mark):
32106        (JSC::JSActivation::argumentsGetter):
32107        * kjs/JSActivation.h:
32108        (JSC::JSActivation::JSActivationData::JSActivationData):
32109        * kjs/NodeInfo.h:
32110        * kjs/Parser.cpp:
32111        (JSC::Parser::didFinishParsing):
32112        * kjs/Parser.h:
32113        (JSC::Parser::parse):
32114        * kjs/grammar.y:
32115        * kjs/nodes.cpp:
32116        (JSC::ScopeNode::ScopeNode):
32117        (JSC::ProgramNode::ProgramNode):
32118        (JSC::ProgramNode::create):
32119        (JSC::EvalNode::EvalNode):
32120        (JSC::EvalNode::create):
32121        (JSC::FunctionBodyNode::FunctionBodyNode):
32122        (JSC::FunctionBodyNode::create):
32123        * kjs/nodes.h:
32124        (JSC::ScopeNode::usesArguments):
32125
321262008-09-28  Mark Rowe  <mrowe@apple.com>
32127
32128        Reviewed by Sam Weinig.
32129
32130        Add an ASCII fast-path to toLowerCase and toUpperCase.
32131
32132        The fast path speeds up the common case of an ASCII-only string by up to 60% while adding a less than 5% penalty
32133        to the less common non-ASCII case.
32134
32135        This also removes stringProtoFuncToLocaleLowerCase and stringProtoFuncToLocaleUpperCase, which were identical
32136        to the non-locale variants of the functions.  toLocaleLowerCase and toLocaleUpperCase now use the non-locale
32137        variants of the functions directly.
32138
32139        * kjs/StringPrototype.cpp:
32140        (JSC::stringProtoFuncToLowerCase):
32141        (JSC::stringProtoFuncToUpperCase):
32142
321432008-09-28  Mark Rowe  <mrowe@apple.com>
32144
32145        Reviewed by Cameron Zwarich.
32146
32147        Speed up parseInt and parseFloat.
32148
32149        Repeatedly indexing into a UString is slow, so retrieve a pointer into the underlying buffer once up front
32150        and use that instead.  This is a 7% win on a parseInt/parseFloat micro-benchmark.
32151
32152        * kjs/JSGlobalObjectFunctions.cpp:
32153        (JSC::parseInt):
32154        (JSC::parseFloat):
32155
321562008-09-28  Simon Hausmann  <hausmann@webkit.org>
32157
32158        Reviewed by David Hyatt.
32159
32160        In Qt's initializeThreading re-use an existing thread identifier for the main
32161        thread if it exists.
32162
32163        currentThread() implicitly creates new identifiers and it could be that
32164        it is called before initializeThreading().
32165
32166        * wtf/ThreadingQt.cpp:
32167        (WTF::initializeThreading):
32168
321692008-09-27  Keishi Hattori  <casey.hattori@gmail.com>
32170
32171        Added Machine::retrieveCaller to the export list.
32172
32173        Reviewed by Kevin McCullough and Tim Hatcher.
32174
32175        * JavaScriptCore.exp: Added Machine::retrieveCaller.
32176
321772008-09-27  Anders Carlsson  <andersca@apple.com>
32178
32179        Fix build.
32180
32181        * VM/CTI.cpp:
32182        (JSC::):
32183
321842008-09-27  Geoffrey Garen  <ggaren@apple.com>
32185
32186        Reviewed by Cameron Zwarich.
32187        
32188        https://bugs.webkit.org/show_bug.cgi?id=21175
32189
32190        Store the callee CodeBlock, not the caller CodeBlock, in the call frame
32191        header. Nix the "codeBlock" local variable, and access the callee
32192        CodeBlock through the call frame header instead.
32193        
32194        Profit: call + return are simpler, because they don't have to update the
32195        "codeBlock" local variable.
32196        
32197        Because CTI keeps "r" in a register, reading the callee CodeBlock relative
32198        to "r" can be very fast, in any cases we care to optimize. Presently,
32199        no such cases seem important.
32200        
32201        Also, stop writing "dst" to the call frame header. CTI doesn't use it.
32202        
32203        21.6% speedup on empty function call benchmark.
32204        3.8% speedup on SunSpider --v8.
32205        2.1% speedup on v8 benchmark.
32206        0.7% speedup on SunSpider (6% speedup on controlflow-recursive).
32207        
32208        Small regression in bytecode, because currently every op_ret reads the
32209        callee CodeBlock to check needsFullScopeChain, and bytecode does not
32210        keep "r" in a register. On-balance, this is probably OK, since CTI is
32211        our high-performance execution model. Also, this should go away once
32212        we make needsFullScopeChain statically determinable at parse time.
32213
32214        * VM/CTI.cpp:
32215        (JSC::CTI::compileOpCall): The speedup!
32216        (JSC::CTI::privateCompileSlowCases): ditto
32217
32218        * VM/CTI.h:
32219        (JSC::): Fixed up magic trampoline constants to account for the nixed
32220        "codeBlock" argument.
32221        (JSC::CTI::execute): Changed trampoline function not to take a "codeBlock"
32222        argument, since codeBlock is now stored in the call frame header.
32223        
32224        * VM/Machine.cpp: Read the callee CodeBlock from the register file. Use
32225        a NULL CallerRegisters in the call frame header to signal a built-in
32226        caller, since CodeBlock is now never NULL.
32227
32228        * VM/Machine.h: Made some stand-alone functions Machine member functions
32229        so they could call the private codeBlock() accessor in the Register
32230        class, of which Machine is a friend. Renamed "CallerCodeBlock" to
32231        "CodeBlock", since it's no longer the caller's CodeBlock.
32232
32233        * VM/RegisterFile.h: Marked some methods const to accommodate a 
32234        const RegisterFile* being passed around in Machine.cpp.
32235
322362008-09-26  Jan Michael Alonzo  <jmalonzo@webkit.org>
32237
32238        Gtk build fix. Not reviewed.
32239
32240        Narrow-down the target of the JavaScriptCore .lut.h generator so
32241        it won't try to create the WebCore .lut.hs.
32242
32243        * GNUmakefile.am:
32244
322452008-09-26  Matt Lilek  <webkit@mattlilek.com>
32246
32247        Reviewed by Tim Hatcher.
32248
32249        Update FEATURE_DEFINES after ENABLE_CROSS_DOCUMENT_MESSAGING was removed.
32250
32251        * Configurations/JavaScriptCore.xcconfig:
32252
322532008-09-26  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
32254
32255        Rubber-stamped by Anders Carlson.
32256
32257        Change the name 'sc' to 'scopeChainNode' in a few places.
32258
32259        * kjs/nodes.cpp:
32260        (JSC::EvalNode::generateCode):
32261        (JSC::FunctionBodyNode::generateCode):
32262        (JSC::ProgramNode::generateCode):
32263
322642008-09-26  Sam Weinig  <sam@webkit.org>
32265
32266        Reviewed by Darin Adler.
32267
32268        Patch for https://bugs.webkit.org/show_bug.cgi?id=21152
32269        Speedup static property get/put
32270
32271        Convert getting/setting static property values to use static functions
32272        instead of storing an integer and switching in getValueProperty/putValueProperty.
32273
32274        * kjs/JSObject.cpp:
32275        (JSC::JSObject::deleteProperty):
32276        (JSC::JSObject::getPropertyAttributes):
32277        * kjs/MathObject.cpp:
32278        (JSC::MathObject::getOwnPropertySlot):
32279        * kjs/NumberConstructor.cpp:
32280        (JSC::numberConstructorNaNValue):
32281        (JSC::numberConstructorNegInfinity):
32282        (JSC::numberConstructorPosInfinity):
32283        (JSC::numberConstructorMaxValue):
32284        (JSC::numberConstructorMinValue):
32285        * kjs/PropertySlot.h:
32286        (JSC::PropertySlot::):
32287        * kjs/RegExpConstructor.cpp:
32288        (JSC::regExpConstructorDollar1):
32289        (JSC::regExpConstructorDollar2):
32290        (JSC::regExpConstructorDollar3):
32291        (JSC::regExpConstructorDollar4):
32292        (JSC::regExpConstructorDollar5):
32293        (JSC::regExpConstructorDollar6):
32294        (JSC::regExpConstructorDollar7):
32295        (JSC::regExpConstructorDollar8):
32296        (JSC::regExpConstructorDollar9):
32297        (JSC::regExpConstructorInput):
32298        (JSC::regExpConstructorMultiline):
32299        (JSC::regExpConstructorLastMatch):
32300        (JSC::regExpConstructorLastParen):
32301        (JSC::regExpConstructorLeftContext):
32302        (JSC::regExpConstructorRightContext):
32303        (JSC::setRegExpConstructorInput):
32304        (JSC::setRegExpConstructorMultiline):
32305        (JSC::RegExpConstructor::setInput):
32306        (JSC::RegExpConstructor::setMultiline):
32307        (JSC::RegExpConstructor::multiline):
32308        * kjs/RegExpConstructor.h:
32309        * kjs/RegExpObject.cpp:
32310        (JSC::regExpObjectGlobal):
32311        (JSC::regExpObjectIgnoreCase):
32312        (JSC::regExpObjectMultiline):
32313        (JSC::regExpObjectSource):
32314        (JSC::regExpObjectLastIndex):
32315        (JSC::setRegExpObjectLastIndex):
32316        * kjs/RegExpObject.h:
32317        (JSC::RegExpObject::setLastIndex):
32318        (JSC::RegExpObject::lastIndex):
32319        (JSC::RegExpObject::RegExpObjectData::RegExpObjectData):
32320        * kjs/StructureID.cpp:
32321        (JSC::StructureID::getEnumerablePropertyNames):
32322        * kjs/create_hash_table:
32323        * kjs/lexer.cpp:
32324        (JSC::Lexer::lex):
32325        * kjs/lookup.cpp:
32326        (JSC::HashTable::createTable):
32327        (JSC::HashTable::deleteTable):
32328        (JSC::setUpStaticFunctionSlot):
32329        * kjs/lookup.h:
32330        (JSC::HashEntry::initialize):
32331        (JSC::HashEntry::setKey):
32332        (JSC::HashEntry::key):
32333        (JSC::HashEntry::attributes):
32334        (JSC::HashEntry::function):
32335        (JSC::HashEntry::functionLength):
32336        (JSC::HashEntry::propertyGetter):
32337        (JSC::HashEntry::propertyPutter):
32338        (JSC::HashEntry::lexerValue):
32339        (JSC::HashEntry::):
32340        (JSC::HashTable::entry):
32341        (JSC::getStaticPropertySlot):
32342        (JSC::getStaticValueSlot):
32343        (JSC::lookupPut):
32344
323452008-09-26  Gavin Barraclough  <barraclough@apple.com>
32346
32347        Reviewed by Maciej Stachowiak & Oliver Hunt.
32348
32349        Add support for reusing temporary JSNumberCells.  This change is based on the observation
32350        that if the result of certain operations is a JSNumberCell and is consumed by a subsequent
32351        operation that would produce a JSNumberCell, we can reuse the object rather than allocating
32352        a fresh one.  E.g. given the expression ((a * b) * c), we can statically determine that
32353        (a * b) will have a numeric result (or else it will have thrown an exception), so the result
32354        will either be a JSNumberCell or a JSImmediate.
32355
32356        This patch changes three areas of JSC:
32357            * The AST now tracks type information about the result of each node.
32358            * This information is consumed in bytecode compilation, and certain bytecode operations
32359              now carry the statically determined type information about their operands.
32360            * CTI uses the information in a number of fashions:
32361                * Where an operand to certain arithmetic operations is reusable, it will plant code
32362                  to try to perform the operation in JIT code & reuse the cell, where appropriate.
32363                * Where it can be statically determined that an operand can only be numeric (typically
32364                  the result of another arithmetic operation) the code will not redundantly check that
32365                  the JSCell is a JSNumberCell.
32366                * Where either of the operands to an add are non-numeric do not plant an optimized
32367                  arithmetic code path, just call straight out to the C function.
32368
32369        +6% Sunspider (10% progression on 3D, 16% progression on math, 60% progression on access-nbody),
32370        +1% v8-tests (improvements in raytrace & crypto)
32371
32372        * VM/CTI.cpp: Add optimized code generation with reuse of temporary JSNumberCells.
32373        * VM/CTI.h:
32374        * kjs/JSNumberCell.h:
32375        * masm/X86Assembler.h:
32376
32377        * VM/CodeBlock.cpp: Add type information to specific bytecodes.
32378        * VM/CodeGenerator.cpp:
32379        * VM/CodeGenerator.h:
32380        * VM/Machine.cpp:
32381
32382        * kjs/nodes.cpp: Track static type information for nodes.
32383        * kjs/nodes.h:
32384        * kjs/ResultDescriptor.h: (Added)
32385        * JavaScriptCore.xcodeproj/project.pbxproj:
32386
323872008-09-26  Yichao Yin  <yichao.yin@torchmobile.com.cn>
32388
32389        Reviewed by George Staikos, Maciej Stachowiak.
32390
32391        Add utility functions needed for upcoming WML code.
32392
32393        * wtf/ASCIICType.h:
32394        (WTF::isASCIIPrintable):
32395
323962008-09-26  Geoffrey Garen  <ggaren@apple.com>
32397
32398        Reviewed by Darin Adler.
32399        
32400        Reverted the part of r36614 that used static data because static data
32401        is not thread-safe.
32402
324032008-09-26  Geoffrey Garen  <ggaren@apple.com>
32404
32405        Reviewed by Maciej Stachowiak.
32406        
32407        Removed dynamic check for whether the callee needs an activation object.
32408        Replaced with callee code to create the activation object.
32409
32410        0.5% speedup on SunSpider.
32411        No change on v8 benchmark. (Might be a speedup, but it's in range of the
32412        variance.)
32413
32414        0.7% speedup on v8 benchmark in bytecode.
32415        1.3% speedup on empty call benchmark in bytecode.
32416
32417        * VM/CTI.cpp:
32418        (JSC::CTI::privateCompileMainPass): Added support for op_init_activation,
32419        the new opcode that specifies that the callee's initialization should
32420        create an activation object.
32421        (JSC::CTI::privateCompile): Removed previous code that did a similar
32422        thing in an ad-hoc way.
32423
32424        * VM/CodeBlock.cpp:
32425        (JSC::CodeBlock::dump): Added a case for dumping op_init_activation.
32426
32427        * VM/CodeGenerator.cpp:
32428        (JSC::CodeGenerator::generate): Added fixup code to change op_init to
32429        op_init_activation if necessary. (With a better parser, we would know
32430        which to use from the beginning.)
32431
32432        * VM/Instruction.h:
32433        (JSC::Instruction::Instruction):
32434        (WTF::): Faster traits for the instruction vector. An earlier version
32435        of this patch relied on inserting at the beginning of the vector, and
32436        depended on this change for speed.
32437
32438        * VM/Machine.cpp:
32439        (JSC::Machine::execute): Removed clients of setScopeChain, the old
32440        abstraction for dynamically checking for whether an activation object
32441        needed to be created.
32442        (JSC::Machine::privateExecute): ditto
32443
32444        (JSC::Machine::cti_op_push_activation): Renamed this function from
32445        cti_vm_updateScopeChain, and made it faster by removing the call to 
32446        setScopeChain.
32447        * VM/Machine.h:
32448
32449        * VM/Opcode.h: Declared op_init_activation.
32450
324512008-09-24  Geoffrey Garen  <ggaren@apple.com>
32452
32453        Reviewed by Maciej Stachowiak.
32454        
32455        Move most of the return code back into the callee, now that the callee
32456        doesn't have to calculate anything dynamically.
32457        
32458        11.5% speedup on empty function call benchmark.
32459        
32460        SunSpider says 0.3% faster. SunSpider --v8 says no change.
32461
32462        * VM/CTI.cpp:
32463        (JSC::CTI::compileOpCall):
32464        (JSC::CTI::privateCompileMainPass):
32465        (JSC::CTI::privateCompileSlowCases):
32466
324672008-09-24  Sam Weinig  <sam@webkit.org>
32468
32469        Reviewed by Maciej Stachowiak.
32470
32471        Remove staticFunctionGetter.  There is only one remaining user of
32472        staticFunctionGetter and it can be converted to use setUpStaticFunctionSlot.
32473
32474        * JavaScriptCore.exp:
32475        * kjs/lookup.cpp:
32476        * kjs/lookup.h:
32477
324782008-09-24  Maciej Stachowiak  <mjs@apple.com>
32479
32480        Reviewed by Oliver Hunt.
32481        
32482        - inline JIT fast case of op_neq
32483        - remove extra level of function call indirection from slow cases of eq and neq
32484        
32485        1% speedup on Richards
32486
32487        * VM/CTI.cpp:
32488        (JSC::CTI::privateCompileMainPass):
32489        (JSC::CTI::privateCompileSlowCases):
32490        * VM/Machine.cpp:
32491        (JSC::Machine::privateExecute):
32492        (JSC::Machine::cti_op_eq):
32493        (JSC::Machine::cti_op_neq):
32494        * kjs/operations.cpp:
32495        (JSC::equal):
32496        (JSC::equalSlowCase):
32497        * kjs/operations.h:
32498        (JSC::equalSlowCaseInline):
32499
325002008-09-24  Sam Weinig  <sam@webkit.org>
32501
32502        Reviewed by Darin Adler.
32503
32504        Fix for https://bugs.webkit.org/show_bug.cgi?id=21080
32505        <rdar://problem/6243534>
32506        Crash below Function.apply when using a runtime array as the argument list
32507
32508        Test: plugins/bindings-array-apply-crash.html
32509
32510        * kjs/FunctionPrototype.cpp:
32511        (JSC::functionProtoFuncApply): Revert to the slow case if the object inherits from 
32512        JSArray (via ClassInfo) but is not a JSArray.
32513
325142008-09-24  Kevin McCullough  <kmccullough@apple.com>
32515
32516        Style change.
32517
32518        * kjs/nodes.cpp:
32519        (JSC::statementListEmitCode):
32520
325212008-09-24  Kevin McCullough  <kmccullough@apple.com>
32522
32523        Reviewed by Geoff.
32524
32525        Bug 21031: Breakpoints in the condition of loops only breaks the first
32526        time
32527        - Now when setting breakpoints in the condition of a loop (for, while,
32528        for in, and do while) will successfully break each time throught the
32529        loop.
32530        - For 'for' loops we need a little more complicated behavior that cannot
32531        be accomplished without some more significant changes:
32532        https://bugs.webkit.org/show_bug.cgi?id=21073
32533
32534        * kjs/nodes.cpp:
32535        (JSC::statementListEmitCode): We don't want to blindly emit a debug hook
32536        at the first line of loops, instead let the loop emit the debug hooks.
32537        (JSC::DoWhileNode::emitCode):
32538        (JSC::WhileNode::emitCode):
32539        (JSC::ForNode::emitCode):
32540        (JSC::ForInNode::emitCode):
32541        * kjs/nodes.h:
32542        (JSC::StatementNode::):
32543        (JSC::DoWhileNode::):
32544        (JSC::WhileNode::):
32545        (JSC::ForInNode::):
32546
325472008-09-24  Geoffrey Garen  <ggaren@apple.com>
32548
32549        Reviewed by Darin Adler.
32550        
32551        Fixed <rdar://problem/5605532> Need a SPI for telling JS the size of
32552        the objects it retains
32553
32554        * API/tests/testapi.c: Test the new SPI a little.
32555
32556        * API/JSSPI.cpp: Add the new SPI.
32557        * API/JSSPI.h: Add the new SPI.
32558        * JavaScriptCore.exp: Add the new SPI.
32559        * JavaScriptCore.xcodeproj/project.pbxproj: Add the new SPI.
32560
325612008-09-24  Geoffrey Garen  <ggaren@apple.com>
32562
32563        Reviewed by Darin Adler.
32564
32565        * API/JSBase.h: Filled in some missing function names.
32566
325672008-09-24  Geoffrey Garen  <ggaren@apple.com>
32568
32569        Reviewed by Cameron Zwarich.
32570        
32571        Fixed https://bugs.webkit.org/show_bug.cgi?id=21057
32572        Crash in RegisterID::deref() running fast/canvas/canvas-putImageData.html
32573
32574        * VM/CodeGenerator.h: Changed declaration order to ensure the
32575        m_lastConstant, which is a RefPtr that points into m_calleeRegisters,
32576        has its destructor called before the destructor for m_calleeRegisters.
32577
325782008-09-24  Darin Adler  <darin@apple.com>
32579
32580        Reviewed by Sam Weinig.
32581
32582        - https://bugs.webkit.org/show_bug.cgi?id=21047
32583          speed up ret_activation with inlining
32584
32585        About 1% on v8-raytrace.
32586
32587        * JavaScriptCore.exp: Removed JSVariableObject::setRegisters.
32588
32589        * kjs/JSActivation.cpp: Moved copyRegisters to the header to make it inline.
32590        * kjs/JSActivation.h:
32591        (JSC::JSActivation::copyRegisters): Moved here. Also removed the registerArraySize
32592        argument to setRegisters, since the object doesn't need to store the number of
32593        registers.
32594
32595        * kjs/JSGlobalObject.cpp:
32596        (JSC::JSGlobalObject::reset): Removed unnecessary clearing left over from when we
32597        used this on objects that weren't brand new. These days, this function is really
32598        just part of the constructor.
32599
32600        * kjs/JSGlobalObject.h: Added registerArraySize to JSGlobalObjectData, since
32601        JSVariableObjectData no longer needs it. Added a setRegisters override here
32602        that handles storing the size.
32603
32604        * kjs/JSStaticScopeObject.h: Removed code to set registerArraySize, since it
32605        no longer exists.
32606
32607        * kjs/JSVariableObject.cpp: Moved copyRegisterArray and setRegisters to the
32608        header to make them inline.
32609        * kjs/JSVariableObject.h: Removed registerArraySize from JSVariableObjectData,
32610        since it was only used for the global object.
32611        (JSC::JSVariableObject::copyRegisterArray): Moved here ot make it inline.
32612        (JSC::JSVariableObject::setRegisters): Moved here to make it inline. Also
32613        removed the code to set registerArraySize and changed an if statement into
32614        an assert to save an unnnecessary branch.
32615
326162008-09-24  Maciej Stachowiak  <mjs@apple.com>
32617
32618        Reviewed by Oliver Hunt.
32619        
32620        - inline PropertyMap::getOffset to speed up polymorphic lookups
32621        
32622        ~1.5% speedup on v8 benchmark
32623        no effect on SunSpider
32624
32625        * JavaScriptCore.exp:
32626        * kjs/PropertyMap.cpp:
32627        * kjs/PropertyMap.h:
32628        (JSC::PropertyMap::getOffset):
32629
326302008-09-24  Jan Michael Alonzo  <jmalonzo@webkit.org>
32631
32632        Reviewed by Alp Toker.
32633
32634        https://bugs.webkit.org/show_bug.cgi?id=20992
32635        Build fails on GTK+ Mac OS
32636
32637        * wtf/ThreadingGtk.cpp: Remove platform ifdef as suggested by
32638          Richard Hult.
32639        (WTF::initializeThreading):
32640
326412008-09-23  Oliver Hunt  <oliver@apple.com>
32642
32643        Reviewed by Maciej Stachowiak.
32644
32645        Bug 19968: Slow Script at www.huffingtonpost.com
32646        <https://bugs.webkit.org/show_bug.cgi?id=19968>
32647
32648        Finally found the cause of this accursed issue.  It is triggered
32649        by synchronous creation of a new global object from JS.  The new
32650        global object resets the timer state in this execution group's
32651        Machine, taking timerCheckCount to 0.  Then when JS returns the
32652        timerCheckCount is decremented making it non-zero.  The next time
32653        we execute JS we will start the timeout counter, however the non-zero
32654        timeoutCheckCount means we don't reset the timer information. This
32655        means that the timeout check is now checking the cumulative time
32656        since the creation of the global object rather than the time since
32657        JS was last entered.  At this point the slow script dialog is guaranteed
32658        to eventually be displayed incorrectly unless a page is loaded
32659        asynchronously (which will reset everything into a sane state).
32660
32661        The fix for this is rather trivial -- the JSGlobalObject constructor
32662        should not be resetting the machine timer state.
32663
32664        * VM/Machine.cpp:
32665        (JSC::Machine::Machine):
32666          Now that we can't rely on the GlobalObject initialising the timeout
32667          state, we do it in the Machine constructor.
32668
32669        * VM/Machine.h:
32670        (JSC::Machine::stopTimeoutCheck):
32671          Add assertions to guard against this happening.
32672
32673        * kjs/JSGlobalObject.cpp:
32674        (JSC::JSGlobalObject::init):
32675          Don't reset the timeout state.
32676
326772008-09-23  Geoffrey Garen  <ggaren@apple.com>
32678
32679        Reviewed by Oliver Hunt.
32680        
32681        Fixed https://bugs.webkit.org/show_bug.cgi?id=21038 | <rdar://problem/6240812>
32682        Uncaught exceptions in regex replace callbacks crash webkit
32683        
32684        This was a combination of two problems:
32685        
32686        (1) the replace function would continue execution after an exception
32687        had been thrown.
32688        
32689        (2) In some cases, the Machine would return 0 in the case of an exception,
32690        despite the fact that a few clients dereference the Machine's return
32691        value without first checking for an exception.
32692        
32693        * VM/Machine.cpp:
32694        (JSC::Machine::execute):
32695        
32696        ^ Return jsNull() instead of 0 in the case of an exception, since some
32697        clients depend on using our return value.
32698        
32699        ^ ASSERT that execution does not continue after an exception has been
32700        thrown, to help catch problems like this in the future.
32701
32702        * kjs/StringPrototype.cpp:
32703        (JSC::stringProtoFuncReplace):
32704        
32705        ^ Stop execution if an exception has been thrown.
32706
327072008-09-23  Geoffrey Garen  <ggaren@apple.com>
32708
32709        Try to fix the windows build.
32710
32711        * VM/CTI.cpp:
32712        (JSC::CTI::compileOpCall):
32713        (JSC::CTI::privateCompileMainPass):
32714
327152008-09-23  Alp Toker  <alp@nuanti.com>
32716
32717        Build fix.
32718
32719        * VM/CTI.h:
32720
327212008-09-23  Geoffrey Garen  <ggaren@apple.com>
32722
32723        Reviewed by Darin Adler.
32724
32725        * wtf/Platform.h: Removed duplicate #if.
32726
327272008-09-23  Geoffrey Garen  <ggaren@apple.com>
32728
32729        Reviewed by Darin Adler.
32730        
32731        Changed the layout of the call frame from
32732        
32733        { header, parameters, locals | constants, temporaries }
32734        
32735        to
32736        
32737        { parameters, header | locals, constants, temporaries }
32738        
32739        This simplifies function entry+exit, and enables a number of future
32740        optimizations.
32741        
32742        13.5% speedup on empty call benchmark for bytecode; 23.6% speedup on
32743        empty call benchmark for CTI.
32744        
32745        SunSpider says no change. SunSpider --v8 says 1% faster.
32746
32747        * VM/CTI.cpp:
32748        
32749        Added a bit of abstraction for calculating whether a register is a
32750        constant, since this patch changes that calculation:
32751        (JSC::CTI::isConstant):
32752        (JSC::CTI::getConstant):
32753        (JSC::CTI::emitGetArg):
32754        (JSC::CTI::emitGetPutArg):
32755        (JSC::CTI::getConstantImmediateNumericArg):
32756
32757        Updated for changes to callframe header location:
32758        (JSC::CTI::emitPutToCallFrameHeader):
32759        (JSC::CTI::emitGetFromCallFrameHeader):
32760        (JSC::CTI::printOpcodeOperandTypes):
32761        
32762        Renamed to spite Oliver:
32763        (JSC::CTI::emitInitRegister):
32764        
32765        Added an abstraction for emitting a call through a register, so that
32766        calls through registers generate exception info, too:
32767        (JSC::CTI::emitCall):
32768
32769        Updated to match the new callframe header layout, and to support calls
32770        through registers, which have no destination address:
32771        (JSC::CTI::compileOpCall):
32772        (JSC::CTI::privateCompileMainPass):
32773        (JSC::CTI::privateCompileSlowCases):
32774        (JSC::CTI::privateCompile):
32775
32776        * VM/CTI.h:
32777
32778        More of the above:
32779        (JSC::CallRecord::CallRecord):
32780
32781        * VM/CodeBlock.cpp:
32782
32783        Updated for new register layout:
32784        (JSC::registerName):
32785        (JSC::CodeBlock::dump):
32786
32787        * VM/CodeBlock.h:
32788        
32789        Updated CodeBlock to track slightly different information about the
32790        register frame, and tweaked the style of an ASSERT_NOT_REACHED.
32791        (JSC::CodeBlock::CodeBlock):
32792        (JSC::CodeBlock::getStubInfo):
32793
32794        * VM/CodeGenerator.cpp:
32795        
32796        Added some abstraction around constant register allocation, since this
32797        patch changes it, changed codegen to account for the new callframe
32798        layout, and added abstraction around register fetching code
32799        that used to assume that all local registers lived at negative indices,
32800        since vars now live at positive indices:
32801        (JSC::CodeGenerator::generate):
32802        (JSC::CodeGenerator::addVar):
32803        (JSC::CodeGenerator::addGlobalVar):
32804        (JSC::CodeGenerator::allocateConstants):
32805        (JSC::CodeGenerator::CodeGenerator):
32806        (JSC::CodeGenerator::addParameter):
32807        (JSC::CodeGenerator::registerFor):
32808        (JSC::CodeGenerator::constRegisterFor):
32809        (JSC::CodeGenerator::newRegister):
32810        (JSC::CodeGenerator::newTemporary):
32811        (JSC::CodeGenerator::highestUsedRegister):
32812        (JSC::CodeGenerator::addConstant):
32813        
32814        ASSERT that our caller referenced the registers it passed to us.
32815        Otherwise, we might overwrite them with parameters:
32816        (JSC::CodeGenerator::emitCall):
32817        (JSC::CodeGenerator::emitConstruct):
32818
32819        * VM/CodeGenerator.h:
32820        
32821        Added some abstraction for getting a RegisterID for a given index,
32822        since the rules are a little weird:
32823        (JSC::CodeGenerator::registerFor):
32824
32825        * VM/Machine.cpp:
32826
32827        Utility function to transform a machine return PC to a virtual machine
32828        return VPC, for the sake of stack unwinding, since both PCs are stored
32829        in the same location now:
32830        (JSC::vPCForPC):
32831
32832        Tweaked to account for new call frame:
32833        (JSC::Machine::initializeCallFrame):
32834        
32835        Tweaked to account for registerOffset supplied by caller:
32836        (JSC::slideRegisterWindowForCall):
32837
32838        Tweaked to account for new register layout:
32839        (JSC::scopeChainForCall):
32840        (JSC::Machine::callEval):
32841        (JSC::Machine::dumpRegisters):
32842        (JSC::Machine::unwindCallFrame):
32843        (JSC::Machine::execute):
32844
32845        Changed op_call and op_construct to implement the new calling convention:
32846        (JSC::Machine::privateExecute):
32847
32848        Tweaked to account for the new register layout:
32849        (JSC::Machine::retrieveArguments):
32850        (JSC::Machine::retrieveCaller):
32851        (JSC::Machine::retrieveLastCaller):
32852        (JSC::Machine::callFrame):
32853        (JSC::Machine::getArgumentsData):
32854
32855        Changed CTI call helpers to implement the new calling convention:
32856        (JSC::Machine::cti_op_call_JSFunction):
32857        (JSC::Machine::cti_op_call_NotJSFunction):
32858        (JSC::Machine::cti_op_ret_activation):
32859        (JSC::Machine::cti_op_ret_profiler):
32860        (JSC::Machine::cti_op_construct_JSConstruct):
32861        (JSC::Machine::cti_op_construct_NotJSConstruct):
32862        (JSC::Machine::cti_op_call_eval):
32863
32864        * VM/Machine.h:
32865
32866        * VM/Opcode.h:
32867        
32868        Renamed op_initialise_locals to op_init, because this opcode
32869        doesn't initialize all locals, and it doesn't initialize only locals.
32870        Also, to spite Oliver.
32871        
32872        * VM/RegisterFile.h:
32873        
32874        New call frame enumeration values:
32875        (JSC::RegisterFile::):
32876
32877        Simplified the calculation of whether a RegisterID is a temporary,
32878        since we can no longer assume that all positive non-constant registers
32879        are temporaries:
32880        * VM/RegisterID.h:
32881        (JSC::RegisterID::RegisterID):
32882        (JSC::RegisterID::setTemporary):
32883        (JSC::RegisterID::isTemporary):
32884
32885        Renamed firstArgumentIndex to firstParameterIndex because the assumption
32886        that this variable pertained to the actual arguments supplied by the
32887        caller caused me to write some buggy code:
32888        * kjs/Arguments.cpp:
32889        (JSC::ArgumentsData::ArgumentsData):
32890        (JSC::Arguments::Arguments):
32891        (JSC::Arguments::fillArgList):
32892        (JSC::Arguments::getOwnPropertySlot):
32893        (JSC::Arguments::put):
32894
32895        Updated for new call frame layout:
32896        * kjs/DebuggerCallFrame.cpp:
32897        (JSC::DebuggerCallFrame::functionName):
32898        (JSC::DebuggerCallFrame::type):
32899        * kjs/DebuggerCallFrame.h:
32900
32901        Changed the activation object to account for the fact that a call frame
32902        header now sits between parameters and local variables. This change
32903        requires all variable objects to do their own marking, since they
32904        now use their register storage differently:
32905        * kjs/JSActivation.cpp:
32906        (JSC::JSActivation::mark):
32907        (JSC::JSActivation::copyRegisters):
32908        (JSC::JSActivation::createArgumentsObject):
32909        * kjs/JSActivation.h:
32910
32911        Updated global object to use the new interfaces required by the change
32912        to JSActivation above:
32913        * kjs/JSGlobalObject.cpp:
32914        (JSC::JSGlobalObject::reset):
32915        (JSC::JSGlobalObject::mark):
32916        (JSC::JSGlobalObject::copyGlobalsFrom):
32917        (JSC::JSGlobalObject::copyGlobalsTo):
32918        * kjs/JSGlobalObject.h:
32919        (JSC::JSGlobalObject::addStaticGlobals):
32920
32921        Updated static scope object to use the new interfaces required by the 
32922        change to JSActivation above:
32923        * kjs/JSStaticScopeObject.cpp:
32924        (JSC::JSStaticScopeObject::mark):
32925        (JSC::JSStaticScopeObject::~JSStaticScopeObject):
32926        * kjs/JSStaticScopeObject.h:
32927        (JSC::JSStaticScopeObject::JSStaticScopeObject):
32928        (JSC::JSStaticScopeObject::d):
32929
32930        Updated variable object to use the new interfaces required by the 
32931        change to JSActivation above:
32932        * kjs/JSVariableObject.cpp:
32933        (JSC::JSVariableObject::copyRegisterArray):
32934        (JSC::JSVariableObject::setRegisters):
32935        * kjs/JSVariableObject.h:
32936
32937        Changed the bit twiddling in symbol table not to assume that all indices
32938        are negative, since they can be positive now:
32939        * kjs/SymbolTable.h:
32940        (JSC::SymbolTableEntry::SymbolTableEntry):
32941        (JSC::SymbolTableEntry::isNull):
32942        (JSC::SymbolTableEntry::getIndex):
32943        (JSC::SymbolTableEntry::getAttributes):
32944        (JSC::SymbolTableEntry::setAttributes):
32945        (JSC::SymbolTableEntry::isReadOnly):
32946        (JSC::SymbolTableEntry::pack):
32947        (JSC::SymbolTableEntry::isValidIndex):
32948
32949        Changed call and construct nodes to ref their functions and/or bases,
32950        so that emitCall/emitConstruct doesn't overwrite them with parameters.
32951        Also, updated for rename to registerFor:
32952        * kjs/nodes.cpp:
32953        (JSC::ResolveNode::emitCode):
32954        (JSC::NewExprNode::emitCode):
32955        (JSC::EvalFunctionCallNode::emitCode):
32956        (JSC::FunctionCallValueNode::emitCode):
32957        (JSC::FunctionCallResolveNode::emitCode):
32958        (JSC::FunctionCallBracketNode::emitCode):
32959        (JSC::FunctionCallDotNode::emitCode):
32960        (JSC::PostfixResolveNode::emitCode):
32961        (JSC::DeleteResolveNode::emitCode):
32962        (JSC::TypeOfResolveNode::emitCode):
32963        (JSC::PrefixResolveNode::emitCode):
32964        (JSC::ReadModifyResolveNode::emitCode):
32965        (JSC::AssignResolveNode::emitCode):
32966        (JSC::ConstDeclNode::emitCodeSingle):
32967        (JSC::ForInNode::emitCode):
32968
32969        Added abstraction for getting exception info out of a call through a
32970        register:
32971        * masm/X86Assembler.h:
32972        (JSC::X86Assembler::emitCall):
32973        
32974        Removed duplicate #if:
32975        * wtf/Platform.h:
32976
329772008-09-23  Kevin McCullough  <kmccullough@apple.com>
32978
32979        Reviewed by Darin.
32980
32981        Bug 21030: The JS debugger breaks on the do of a do-while not the while
32982        (where the conditional statement is)
32983        https://bugs.webkit.org/show_bug.cgi?id=21030
32984        Now the statementListEmitCode detects if a do-while node is being
32985        emited and emits the debug hook on the last line instead of the first.
32986
32987        This change had no effect on sunspider.
32988
32989        * kjs/nodes.cpp:
32990        (JSC::statementListEmitCode):
32991        * kjs/nodes.h:
32992        (JSC::StatementNode::isDoWhile):
32993        (JSC::DoWhileNode::isDoWhile):
32994
329952008-09-23  Maciej Stachowiak  <mjs@apple.com>
32996
32997        Reviewed by Cameron Zwarich.
32998
32999        - inline the fast case of instanceof
33000        https://bugs.webkit.org/show_bug.cgi?id=20818
33001
33002        ~2% speedup on EarleyBoyer test.
33003        
33004        * VM/CTI.cpp:
33005        (JSC::CTI::privateCompileMainPass):
33006        (JSC::CTI::privateCompileSlowCases):
33007        * VM/Machine.cpp:
33008        (JSC::Machine::cti_op_instanceof):
33009
330102008-09-23  Maciej Stachowiak  <mjs@apple.com>
33011
33012        Reviewed by Cameron Zwarich.
33013        
33014        - add forgotten slow case logic for !==
33015
33016        * VM/CTI.cpp:
33017        (JSC::CTI::privateCompileSlowCases):
33018
330192008-09-23  Maciej Stachowiak  <mjs@apple.com>
33020
33021        Reviewed by Cameron Zwarich.
33022
33023        - inline the fast cases of !==, same as for ===
33024        
33025        2.9% speedup on EarleyBoyer benchmark
33026
33027        * VM/CTI.cpp:
33028        (JSC::CTI::compileOpStrictEq): Factored stricteq codegen into this function,
33029        and parameterized so it can do the reverse version as well.
33030        (JSC::CTI::privateCompileMainPass): Use the above for stricteq and nstricteq.
33031        * VM/CTI.h:
33032        (JSC::CTI::): Declare above stuff.
33033        * VM/Machine.cpp:
33034        (JSC::Machine::cti_op_nstricteq): Removed fast cases, now handled inline.
33035
330362008-09-23  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
33037
33038        Reviewed by Oliver Hunt.
33039
33040        Bug 20989: Aguments constructor should put 'callee' and 'length' properties in a more efficient way
33041        <https://bugs.webkit.org/show_bug.cgi?id=20989>
33042
33043        Make special cases for the 'callee' and 'length' properties in the
33044        Arguments object.
33045
33046        This is somewhere between a 7.8% speedup and a 10% speedup on the V8
33047        Raytrace benchmark, depending on whether it is run alone or with the
33048        other V8 benchmarks.
33049
33050        * kjs/Arguments.cpp:
33051        (JSC::ArgumentsData::ArgumentsData):
33052        (JSC::Arguments::Arguments):
33053        (JSC::Arguments::mark):
33054        (JSC::Arguments::getOwnPropertySlot):
33055        (JSC::Arguments::put):
33056        (JSC::Arguments::deleteProperty):
33057
330582008-09-23  Maciej Stachowiak  <mjs@apple.com>
33059
33060        Reviewed by Darin.
33061
33062        - speed up instanceof some more
33063        https://bugs.webkit.org/show_bug.cgi?id=20818
33064        
33065        ~2% speedup on EarleyBoyer
33066
33067        The idea here is to record in the StructureID whether the class
33068        needs a special hasInstance or if it can use the normal logic from
33069        JSObject. 
33070        
33071        Based on this I inlined the real work directly into
33072        cti_op_instanceof and put the fastest checks up front and the
33073        error handling at the end (so it should be fairly straightforward
33074        to split off the beginning to be inlined if desired).
33075
33076        I only did this for CTI, not the bytecode interpreter.
33077        
33078        * API/JSCallbackObject.h:
33079        (JSC::JSCallbackObject::createStructureID):
33080        * ChangeLog:
33081        * VM/Machine.cpp:
33082        (JSC::Machine::cti_op_instanceof):
33083        * kjs/JSImmediate.h:
33084        (JSC::JSImmediate::isAnyImmediate):
33085        * kjs/TypeInfo.h:
33086        (JSC::TypeInfo::overridesHasInstance):
33087        (JSC::TypeInfo::flags):
33088
330892008-09-22  Darin Adler  <darin@apple.com>
33090
33091        Reviewed by Sam Weinig.
33092
33093        - https://bugs.webkit.org/show_bug.cgi?id=21019
33094          make FunctionBodyNode::ref/deref fast
33095
33096        Speeds up v8-raytrace by 7.2%.
33097
33098        * kjs/nodes.cpp:
33099        (JSC::FunctionBodyNode::FunctionBodyNode): Initialize m_refCount to 0.
33100        * kjs/nodes.h:
33101        (JSC::FunctionBodyNode::ref): Call base class ref once, and thereafter use
33102        m_refCount.
33103        (JSC::FunctionBodyNode::deref): Ditto, but the deref side.
33104
331052008-09-22  Darin Adler  <darin@apple.com>
33106
33107        Pointed out by Sam Weinig.
33108
33109        * kjs/Arguments.cpp:
33110        (JSC::Arguments::fillArgList): Fix bad copy and paste. Oops!
33111
331122008-09-22  Darin Adler  <darin@apple.com>
33113
33114        Reviewed by Cameron Zwarich.
33115
33116        - https://bugs.webkit.org/show_bug.cgi?id=20983
33117          ArgumentsData should have some room to allocate some extra arguments inline
33118
33119        Speeds up v8-raytrace by 5%.
33120
33121        * kjs/Arguments.cpp:
33122        (JSC::ArgumentsData::ArgumentsData): Use a fixed buffer if there are 4 or fewer
33123        extra arguments.
33124        (JSC::Arguments::Arguments): Use a fixed buffer if there are 4 or fewer
33125        extra arguments.
33126        (JSC::Arguments::~Arguments): Delete the buffer if necessary.
33127        (JSC::Arguments::mark): Update since extraArguments are now Register.
33128        (JSC::Arguments::fillArgList): Added special case for the only case that's
33129        actually used in the practice, when there are no parameters. There are some
33130        other special cases in there too, but that's the only one that matters.
33131        (JSC::Arguments::getOwnPropertySlot): Updated to use setValueSlot since there's
33132        no operation to get you at the JSValue* inside a Register as a "slot".
33133
331342008-09-22  Sam Weinig  <sam@webkit.org>
33135
33136        Reviewed by Maciej Stachowiak.
33137
33138        Patch for https://bugs.webkit.org/show_bug.cgi?id=21014
33139        Speed up for..in by using StructureID to avoid calls to hasProperty
33140
33141        Speeds up fasta by 8%.
33142
33143        * VM/JSPropertyNameIterator.cpp:
33144        (JSC::JSPropertyNameIterator::invalidate):
33145        * VM/JSPropertyNameIterator.h:
33146        (JSC::JSPropertyNameIterator::next):
33147        * kjs/PropertyNameArray.h:
33148        (JSC::PropertyNameArrayData::begin):
33149        (JSC::PropertyNameArrayData::end):
33150        (JSC::PropertyNameArrayData::setCachedStructureID):
33151        (JSC::PropertyNameArrayData::cachedStructureID):
33152        * kjs/StructureID.cpp:
33153        (JSC::StructureID::getEnumerablePropertyNames):
33154        (JSC::structureIDChainsAreEqual):
33155        * kjs/StructureID.h:
33156
331572008-09-22  Kelvin Sherlock  <ksherlock@gmail.com>
33158
33159        Updated and tweaked by Sam Weinig.
33160
33161        Reviewed by Geoffrey Garen.
33162
33163        Bug 20020: Proposed enhancement to JavaScriptCore API
33164        <https://bugs.webkit.org/show_bug.cgi?id=20020>
33165
33166        Add JSObjectMakeArray, JSObjectMakeDate, JSObjectMakeError, and JSObjectMakeRegExp
33167        functions to create JavaScript Array, Date, Error, and RegExp objects, respectively.
33168
33169        * API/JSObjectRef.cpp: The functions
33170        * API/JSObjectRef.h: Function prototype and documentation
33171        * JavaScriptCore.exp: Added functions to exported function list
33172        * API/tests/testapi.c: Added basic functionality tests.
33173
33174        * kjs/DateConstructor.cpp:
33175        Replaced static JSObject* constructDate(ExecState* exec, JSObject*, const ArgList& args)
33176        with JSObject* constructDate(ExecState* exec, const ArgList& args).
33177        Added static JSObject* constructWithDateConstructor(ExecState* exec, JSObject*, const ArgList& args) function
33178
33179        * kjs/DateConstructor.h:
33180        added prototype for JSObject* constructDate(ExecState* exec, const ArgList& args)
33181
33182        * kjs/ErrorConstructor.cpp:
33183        removed static qualifier from ErrorInstance* constructError(ExecState* exec, const ArgList& args)
33184
33185        * kjs/ErrorConstructor.h:
33186        added prototype for ErrorInstance* constructError(ExecState* exec, const ArgList& args)
33187
33188        * kjs/RegExpConstructor.cpp:
33189        removed static qualifier from JSObject* constructRegExp(ExecState* exec, const ArgList& args)
33190
33191        * kjs/RegExpConstructor.h:
33192        added prototype for JSObject* constructRegExp(ExecState* exec, const ArgList& args)
33193
331942008-09-22  Matt Lilek  <webkit@mattlilek.com>
33195
33196        Not reviewed, Windows build fix.
33197
33198        * kjs/Arguments.cpp:
33199        * kjs/FunctionPrototype.cpp:
33200
332012008-09-22  Sam Weinig  <sam@webkit.org>
33202
33203        Reviewed by Darin Adler.
33204
33205        Patch for https://bugs.webkit.org/show_bug.cgi?id=20982
33206        Speed up the apply method of functions by special-casing array and 'arguments' objects
33207
33208        1% speedup on v8-raytrace.
33209
33210        Test: fast/js/function-apply.html
33211
33212        * kjs/Arguments.cpp:
33213        (JSC::Arguments::fillArgList):
33214        * kjs/Arguments.h:
33215        * kjs/FunctionPrototype.cpp:
33216        (JSC::functionProtoFuncApply):
33217        * kjs/JSArray.cpp:
33218        (JSC::JSArray::fillArgList):
33219        * kjs/JSArray.h:
33220
332212008-09-22  Darin Adler  <darin@apple.com>
33222
33223        Reviewed by Sam Weinig.
33224
33225        - https://bugs.webkit.org/show_bug.cgi?id=20993
33226          Array.push/pop need optimized cases for JSArray
33227
33228        3% or so speedup on DeltaBlue benchmark.
33229
33230        * kjs/ArrayPrototype.cpp:
33231        (JSC::arrayProtoFuncPop): Call JSArray::pop when appropriate.
33232        (JSC::arrayProtoFuncPush): Call JSArray::push when appropriate.
33233
33234        * kjs/JSArray.cpp:
33235        (JSC::JSArray::putSlowCase): Set m_fastAccessCutoff when appropriate, getting
33236        us into the fast code path.
33237        (JSC::JSArray::pop): Added.
33238        (JSC::JSArray::push): Added.
33239        * kjs/JSArray.h: Added push and pop.
33240
33241        * kjs/operations.cpp:
33242        (JSC::throwOutOfMemoryError): Don't inline this. Helps us avoid PIC branches.
33243
332442008-09-22  Maciej Stachowiak  <mjs@apple.com>
33245
33246        Reviewed by Cameron Zwarich.
33247        
33248        - speed up instanceof operator by replacing implementsHasInstance method with a TypeInfo flag
33249
33250        Partial work towards <https://bugs.webkit.org/show_bug.cgi?id=20818>
33251        
33252        2.2% speedup on EarleyBoyer benchmark.
33253
33254        * API/JSCallbackConstructor.cpp:
33255        * API/JSCallbackConstructor.h:
33256        (JSC::JSCallbackConstructor::createStructureID):
33257        * API/JSCallbackFunction.cpp:
33258        * API/JSCallbackFunction.h:
33259        (JSC::JSCallbackFunction::createStructureID):
33260        * API/JSCallbackObject.h:
33261        (JSC::JSCallbackObject::createStructureID):
33262        * API/JSCallbackObjectFunctions.h:
33263        (JSC::::hasInstance):
33264        * API/JSValueRef.cpp:
33265        (JSValueIsInstanceOfConstructor):
33266        * JavaScriptCore.exp:
33267        * VM/Machine.cpp:
33268        (JSC::Machine::privateExecute):
33269        (JSC::Machine::cti_op_instanceof):
33270        * kjs/InternalFunction.cpp:
33271        * kjs/InternalFunction.h:
33272        (JSC::InternalFunction::createStructureID):
33273        * kjs/JSObject.cpp:
33274        * kjs/JSObject.h:
33275        * kjs/TypeInfo.h:
33276        (JSC::TypeInfo::implementsHasInstance):
33277
332782008-09-22  Maciej Stachowiak  <mjs@apple.com>
33279
33280        Reviewed by Dave Hyatt.
33281        
33282        Based on initial work by Darin Adler.
33283        
33284        - replace masqueradesAsUndefined virtual method with a flag in TypeInfo
33285        - use this to JIT inline code for eq_null and neq_null
33286        https://bugs.webkit.org/show_bug.cgi?id=20823
33287
33288        0.5% speedup on SunSpider
33289        ~4% speedup on Richards benchmark
33290        
33291        * VM/CTI.cpp:
33292        (JSC::CTI::privateCompileMainPass):
33293        * VM/Machine.cpp:
33294        (JSC::jsTypeStringForValue):
33295        (JSC::jsIsObjectType):
33296        (JSC::Machine::privateExecute):
33297        (JSC::Machine::cti_op_is_undefined):
33298        * VM/Machine.h:
33299        * kjs/JSCell.h:
33300        * kjs/JSValue.h:
33301        * kjs/StringObjectThatMasqueradesAsUndefined.h:
33302        (JSC::StringObjectThatMasqueradesAsUndefined::create):
33303        (JSC::StringObjectThatMasqueradesAsUndefined::createStructureID):
33304        * kjs/StructureID.h:
33305        (JSC::StructureID::mutableTypeInfo):
33306        * kjs/TypeInfo.h:
33307        (JSC::TypeInfo::TypeInfo):
33308        (JSC::TypeInfo::masqueradesAsUndefined):
33309        * kjs/operations.cpp:
33310        (JSC::equal):
33311        * masm/X86Assembler.h:
33312        (JSC::X86Assembler::):
33313        (JSC::X86Assembler::setne_r):
33314        (JSC::X86Assembler::setnz_r):
33315        (JSC::X86Assembler::testl_i32m):
33316
333172008-09-22  Tor Arne Vestbø  <tavestbo@trolltech.com>
33318
33319        Reviewed by Simon.
33320
33321        Initialize QCoreApplication in kjs binary/Shell.cpp
33322        
33323        This allows us to use QCoreApplication::instance() to
33324        get the main thread in ThreadingQt.cpp
33325
33326        * kjs/Shell.cpp:
33327        (main):
33328        * wtf/ThreadingQt.cpp:
33329        (WTF::initializeThreading):
33330
333312008-09-21  Darin Adler  <darin@apple.com>
33332
33333        - blind attempt to fix non-all-in-one builds
33334
33335        * kjs/JSGlobalObject.cpp: Added includes of Arguments.h and RegExpObject.h.
33336
333372008-09-21  Darin Adler  <darin@apple.com>
33338
33339        - fix debug build
33340
33341        * kjs/StructureID.cpp:
33342        (JSC::StructureID::addPropertyTransition): Use typeInfo().type() instead of m_type.
33343        (JSC::StructureID::createCachedPrototypeChain): Ditto.
33344
333452008-09-21  Maciej Stachowiak  <mjs@apple.com>
33346
33347        Reviewed by Darin Adler.
33348        
33349        - introduce a TypeInfo class, for holding per-type (in the C++ class sense) date in StructureID
33350        https://bugs.webkit.org/show_bug.cgi?id=20981
33351
33352        * JavaScriptCore.exp:
33353        * JavaScriptCore.xcodeproj/project.pbxproj:
33354        * VM/CTI.cpp:
33355        (JSC::CTI::privateCompileMainPass):
33356        (JSC::CTI::privateCompilePutByIdTransition):
33357        * VM/Machine.cpp:
33358        (JSC::jsIsObjectType):
33359        (JSC::Machine::Machine):
33360        * kjs/AllInOneFile.cpp:
33361        * kjs/JSCell.h:
33362        (JSC::JSCell::isObject):
33363        (JSC::JSCell::isString):
33364        * kjs/JSGlobalData.cpp:
33365        (JSC::JSGlobalData::JSGlobalData):
33366        * kjs/JSGlobalObject.cpp:
33367        (JSC::JSGlobalObject::reset):
33368        * kjs/JSGlobalObject.h:
33369        (JSC::StructureID::prototypeForLookup):
33370        * kjs/JSNumberCell.h:
33371        (JSC::JSNumberCell::createStructureID):
33372        * kjs/JSObject.cpp:
33373        (JSC::JSObject::createInheritorID):
33374        * kjs/JSObject.h:
33375        (JSC::JSObject::createStructureID):
33376        * kjs/JSString.h:
33377        (JSC::JSString::createStructureID):
33378        * kjs/NativeErrorConstructor.cpp:
33379        (JSC::NativeErrorConstructor::NativeErrorConstructor):
33380        * kjs/RegExpConstructor.cpp:
33381        * kjs/RegExpMatchesArray.h: Added.
33382        (JSC::RegExpMatchesArray::getOwnPropertySlot):
33383        (JSC::RegExpMatchesArray::put):
33384        (JSC::RegExpMatchesArray::deleteProperty):
33385        (JSC::RegExpMatchesArray::getPropertyNames):
33386        * kjs/StructureID.cpp:
33387        (JSC::StructureID::StructureID):
33388        (JSC::StructureID::addPropertyTransition):
33389        (JSC::StructureID::toDictionaryTransition):
33390        (JSC::StructureID::changePrototypeTransition):
33391        (JSC::StructureID::getterSetterTransition):
33392        * kjs/StructureID.h:
33393        (JSC::StructureID::create):
33394        (JSC::StructureID::typeInfo):
33395        * kjs/TypeInfo.h: Added.
33396        (JSC::TypeInfo::TypeInfo):
33397        (JSC::TypeInfo::type):
33398
333992008-09-21  Darin Adler  <darin@apple.com>
33400
33401        Reviewed by Cameron Zwarich.
33402
33403        - fix crash logging into Gmail due to recent Arguments change
33404
33405        * kjs/Arguments.cpp:
33406        (JSC::Arguments::Arguments): Fix window where mark() function could
33407        see d->extraArguments with uninitialized contents.
33408        (JSC::Arguments::mark): Check d->extraArguments for 0 to handle two
33409        cases: 1) Inside the constructor before it's initialized.
33410        2) numArguments <= numParameters.
33411
334122008-09-21  Darin Adler  <darin@apple.com>
33413
33414        - fix loose end from the "duplicate constant values" patch
33415
33416        * VM/CodeGenerator.cpp:
33417        (JSC::CodeGenerator::emitLoad): Add a special case for values the
33418        hash table can't handle.
33419
334202008-09-21  Mark Rowe  <mrowe@apple.com>
33421
33422        Fix the non-AllInOneFile build.
33423
33424        * kjs/Arguments.cpp: Add missing #include.
33425
334262008-09-21  Darin Adler  <darin@apple.com>
33427
33428        Reviewed by Cameron Zwarich and Mark Rowe.
33429
33430        - fix test failure caused by my recent IndexToNameMap patch
33431
33432        * kjs/Arguments.cpp:
33433        (JSC::Arguments::deleteProperty): Added the accidentally-omitted
33434        check of the boolean result from toArrayIndex.
33435
334362008-09-21  Darin Adler  <darin@apple.com>
33437
33438        Reviewed by Maciej Stachowiak.
33439
33440        - https://bugs.webkit.org/show_bug.cgi?id=20975
33441          inline immediate-number case of ==
33442
33443        * VM/CTI.h: Renamed emitJumpSlowCaseIfNotImm to
33444        emitJumpSlowCaseIfNotImmNum, since the old name was incorrect.
33445
33446        * VM/CTI.cpp: Updated for new name.
33447        (JSC::CTI::privateCompileMainPass): Added op_eq.
33448        (JSC::CTI::privateCompileSlowCases): Added op_eq.
33449
33450        * VM/Machine.cpp:
33451        (JSC::Machine::cti_op_eq): Removed fast case, since it's now
33452        compiled.
33453
334542008-09-21  Peter Gal  <galpter@inf.u-szeged.hu>
33455
33456        Reviewed by Tim Hatcher and Eric Seidel.
33457
33458        Fix the QT/Linux JavaScriptCore segmentation fault.
33459        https://bugs.webkit.org/show_bug.cgi?id=20914
33460
33461        * wtf/ThreadingQt.cpp:
33462        (WTF::initializeThreading): Use currentThread() if
33463        platform is not a MAC (like in pre 36541 revisions)
33464
334652008-09-21  Darin Adler  <darin@apple.com>
33466
33467        Reviewed by Sam Weinig.
33468
33469        * kjs/debugger.h: Removed some unneeded includes and declarations.
33470
334712008-09-21  Darin Adler  <darin@apple.com>
33472
33473        Reviewed by Sam Weinig.
33474
33475        - https://bugs.webkit.org/show_bug.cgi?id=20972
33476          speed up Arguments further by eliminating the IndexToNameMap
33477
33478        No change on SunSpider. 1.29x as fast on V8 Raytrace.
33479
33480        * kjs/Arguments.cpp: Moved ArgumentsData in here. Eliminated the
33481        indexToNameMap and hadDeletes data members. Changed extraArguments into
33482        an OwnArrayPtr and added deletedArguments, another OwnArrayPtr.
33483        Replaced numExtraArguments with numParameters, since that's what's
33484        used more directly in hot code paths.
33485        (JSC::Arguments::Arguments): Pass in argument count instead of ArgList.
33486        Initialize ArgumentsData the new way.
33487        (JSC::Arguments::mark): Updated.
33488        (JSC::Arguments::getOwnPropertySlot): Overload for the integer form so
33489        we don't have to convert integers to identifiers just to get an argument.
33490        Integrated the deleted case with the fast case.
33491        (JSC::Arguments::put): Ditto.
33492        (JSC::Arguments::deleteProperty): Ditto.
33493
33494        * kjs/Arguments.h: Minimized includes. Made everything private. Added
33495        overloads for the integral property name case. Eliminated mappedIndexSetter.
33496        Moved ArgumentsData into the .cpp file.
33497
33498        * kjs/IndexToNameMap.cpp: Emptied out and prepared for deletion.
33499        * kjs/IndexToNameMap.h: Ditto.
33500
33501        * kjs/JSActivation.cpp:
33502        (JSC::JSActivation::createArgumentsObject): Elminated ArgList.
33503
33504        * GNUmakefile.am:
33505        * JavaScriptCore.pri:
33506        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
33507        * JavaScriptCore.xcodeproj/project.pbxproj:
33508        * JavaScriptCoreSources.bkl:
33509        * kjs/AllInOneFile.cpp:
33510        Removed IndexToNameMap.
33511
335122008-09-21  Darin Adler  <darin@apple.com>
33513
33514        * VM/CodeGenerator.cpp:
33515        (JSC::CodeGenerator::emitLoad): One more tweak: Wrote this in a slightly
33516        clearer style.
33517
335182008-09-21  Judit Jasz  <jasy@inf.u-szeged.hu>
33519
33520        Reviewed and tweaked by Darin Adler.
33521
33522        - https://bugs.webkit.org/show_bug.cgi?id=20645
33523          Elminate duplicate constant values in CodeBlocks.
33524
33525        Seems to be a wash on SunSpider.
33526
33527        * VM/CodeGenerator.cpp:
33528        (JSC::CodeGenerator::emitLoad): Use m_numberMap and m_stringMap to guarantee
33529        we emit the same JSValue* for identical numbers and strings.
33530        * VM/CodeGenerator.h: Added overload of emitLoad for const Identifier&.
33531        Add NumberMap and IdentifierStringMap types and m_numberMap and m_stringMap.
33532        * kjs/nodes.cpp:
33533        (JSC::StringNode::emitCode): Call the new emitLoad and let it do the
33534        JSString creation.
33535
335362008-09-21  Paul Pedriana  <webkit@pedriana.com>
33537
33538        Reviewed and tweaked by Darin Adler.
33539
33540        - https://bugs.webkit.org/show_bug.cgi?id=16925
33541          Fixed lack of Vector buffer alignment for both GCC and MSVC.
33542          Since there's no portable way to do this, for now we don't support
33543          other compilers.
33544
33545        * wtf/Vector.h: Added WTF_ALIGH_ON, WTF_ALIGNED, AlignedBufferChar, and AlignedBuffer.
33546        Use AlignedBuffer insteadof an array of char in VectorBuffer.
33547
335482008-09-21  Gabor Loki  <loki@inf.u-szeged.hu>
33549
33550        Reviewed by Darin Adler.
33551
33552        - https://bugs.webkit.org/show_bug.cgi?id=19408
33553          Add lightweight constant folding to the parser for *, /, + (only for numbers), <<, >>, ~ operators.
33554
33555        1.008x as fast on SunSpider.
33556
33557        * kjs/grammar.y:
33558        (makeNegateNode): Fold if expression is a number > 0.
33559        (makeBitwiseNotNode): Fold if expression is a number.
33560        (makeMultNode): Fold if expressions are both numbers.
33561        (makeDivNode): Fold if expressions are both numbers.
33562        (makeAddNode): Fold if expressions are both numbers.
33563        (makeLeftShiftNode): Fold if expressions are both numbers.
33564        (makeRightShiftNode): Fold if expressions are both numbers.
33565
335662008-09-21  Maciej Stachowiak  <mjs@apple.com>
33567
33568        Reviewed by Oliver.
33569        
33570        - speed up === operator by generating inline machine code for the fast paths
33571        https://bugs.webkit.org/show_bug.cgi?id=20820
33572
33573        * VM/CTI.cpp:
33574        (JSC::CTI::emitJumpSlowCaseIfNotImmediateNumber):
33575        (JSC::CTI::emitJumpSlowCaseIfNotImmediateNumbers):
33576        (JSC::CTI::emitJumpSlowCaseIfNotImmediates):
33577        (JSC::CTI::emitTagAsBoolImmediate):
33578        (JSC::CTI::privateCompileMainPass):
33579        (JSC::CTI::privateCompileSlowCases):
33580        * VM/CTI.h:
33581        * VM/Machine.cpp:
33582        (JSC::Machine::cti_op_stricteq):
33583        * masm/X86Assembler.h:
33584        (JSC::X86Assembler::):
33585        (JSC::X86Assembler::sete_r):
33586        (JSC::X86Assembler::setz_r):
33587        (JSC::X86Assembler::movzbl_rr):
33588        (JSC::X86Assembler::emitUnlinkedJnz):
33589
335902008-09-21  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
33591
33592        Reviewed by Maciej Stachowiak.
33593
33594        Free memory allocated for extra arguments in the destructor of the
33595        Arguments object.
33596
33597        * kjs/Arguments.cpp:
33598        (JSC::Arguments::~Arguments):
33599        * kjs/Arguments.h:
33600
336012008-09-21  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
33602
33603        Reviewed by Maciej Stachowiak.
33604
33605        Bug 20815: 'arguments' object creation is non-optimal
33606        <https://bugs.webkit.org/show_bug.cgi?id=20815>
33607
33608        Fix our inefficient way of creating the arguments object by only
33609        creating named properties for each of the arguments after a use of the
33610        'delete' statement. This patch also speeds up access to the 'arguments'
33611        object slightly, but it still does not use the array fast path for
33612        indexed access that exists for many opcodes.
33613
33614        This is about a 20% improvement on the V8 Raytrace benchmark, and a 1.5%
33615        improvement on the Earley-Boyer benchmark, which gives a 4% improvement
33616        overall.
33617
33618        * kjs/Arguments.cpp:
33619        (JSC::Arguments::Arguments):
33620        (JSC::Arguments::mark):
33621        (JSC::Arguments::getOwnPropertySlot):
33622        (JSC::Arguments::put):
33623        (JSC::Arguments::deleteProperty):
33624        * kjs/Arguments.h:
33625        (JSC::Arguments::ArgumentsData::ArgumentsData):
33626        * kjs/IndexToNameMap.h:
33627        (JSC::IndexToNameMap::size):
33628        * kjs/JSActivation.cpp:
33629        (JSC::JSActivation::createArgumentsObject):
33630        * kjs/JSActivation.h:
33631        (JSC::JSActivation::uncheckedSymbolTableGet):
33632        (JSC::JSActivation::uncheckedSymbolTableGetValue):
33633        (JSC::JSActivation::uncheckedSymbolTablePut):
33634        * kjs/JSFunction.h:
33635        (JSC::JSFunction::numParameters):
33636
336372008-09-20  Darin Adler  <darin@apple.com>
33638
33639        Reviewed by Mark Rowe.
33640
33641        - fix crash seen on buildbot
33642
33643        * kjs/JSGlobalObject.cpp:
33644        (JSC::JSGlobalObject::mark): Add back mark of arrayPrototype,
33645        deleted by accident in my recent check-in.
33646
336472008-09-20  Maciej Stachowiak  <mjs@apple.com>
33648
33649        Not reviewed, build fix.
33650        
33651        - speculative fix for non-AllInOne builds
33652
33653        * kjs/operations.h:
33654
336552008-09-20  Maciej Stachowiak  <mjs@apple.com>
33656
33657        Reviewed by Darin Adler.
33658        
33659        - assorted optimizations to === and !== operators
33660        (work towards <https://bugs.webkit.org/show_bug.cgi?id=20820>)
33661        
33662        2.5% speedup on earley-boyer test
33663
33664        * VM/Machine.cpp:
33665        (JSC::Machine::cti_op_stricteq): Use inline version of
33666        strictEqualSlowCase; remove unneeded exception check.
33667        (JSC::Machine::cti_op_nstricteq): ditto
33668        * kjs/operations.cpp:
33669        (JSC::strictEqual): Use strictEqualSlowCaseInline
33670        (JSC::strictEqualSlowCase): ditto
33671        * kjs/operations.h:
33672        (JSC::strictEqualSlowCaseInline): Version of strictEqualSlowCase that can be inlined,
33673        since the extra function call indirection is a lose for CTI.
33674
336752008-09-20  Darin Adler  <darin@apple.com>
33676
33677        Reviewed by Maciej Stachowiak.
33678
33679        - finish https://bugs.webkit.org/show_bug.cgi?id=20858
33680          make each distinct C++ class get a distinct JSC::Structure
33681
33682        This also includes some optimizations that make the change an overall
33683        small speedup. Without those it was a bit of a slowdown.
33684
33685        * API/JSCallbackConstructor.cpp:
33686        (JSC::JSCallbackConstructor::JSCallbackConstructor): Take a structure.
33687        * API/JSCallbackConstructor.h: Ditto.
33688        * API/JSCallbackFunction.cpp:
33689        (JSC::JSCallbackFunction::JSCallbackFunction): Pass a structure.
33690        * API/JSCallbackObject.h: Take a structure.
33691        * API/JSCallbackObjectFunctions.h:
33692        (JSC::JSCallbackObject::JSCallbackObject): Ditto.
33693
33694        * API/JSClassRef.cpp:
33695        (OpaqueJSClass::prototype): Pass in a structure. Call setPrototype
33696        if there's a custom prototype involved.
33697        * API/JSObjectRef.cpp:
33698        (JSObjectMake): Ditto.
33699        (JSObjectMakeConstructor): Pass in a structure.
33700
33701        * JavaScriptCore.exp: Updated.
33702
33703        * VM/Machine.cpp:
33704        (JSC::jsLess): Added a special case for when both arguments are strings.
33705        This avoids converting both strings to with UString::toDouble.
33706        (JSC::jsLessEq): Ditto.
33707        (JSC::Machine::privateExecute): Pass in a structure.
33708        (JSC::Machine::cti_op_construct_JSConstruct): Ditto.
33709        (JSC::Machine::cti_op_new_regexp): Ditto.
33710        (JSC::Machine::cti_op_is_string): Ditto.
33711        * VM/Machine.h: Made isJSString public so it can be used in the CTI.
33712
33713        * kjs/Arguments.cpp:
33714        (JSC::Arguments::Arguments): Pass in a structure.
33715
33716        * kjs/JSCell.h: Mark constructor explicit.
33717
33718        * kjs/JSGlobalObject.cpp:
33719        (JSC::markIfNeeded): Added an overload for marking structures.
33720        (JSC::JSGlobalObject::reset): Eliminate code to set data members to
33721        zero. We now do that in the constructor, and we no longer use this
33722        anywhere except in the constructor. Added code to create structures.
33723        Pass structures rather than prototypes when creating objects.
33724        (JSC::JSGlobalObject::mark): Mark the structures.
33725
33726        * kjs/JSGlobalObject.h: Removed unneeded class declarations.
33727        Added initializers for raw pointers in JSGlobalObjectData so
33728        everything starts with a 0. Added structure data and accessor
33729        functions.
33730
33731        * kjs/JSImmediate.cpp:
33732        (JSC::JSImmediate::nonInlineNaN): Added.
33733        * kjs/JSImmediate.h:
33734        (JSC::JSImmediate::toDouble): Rewrote to avoid PIC branches.
33735
33736        * kjs/JSNumberCell.cpp:
33737        (JSC::jsNumberCell): Made non-inline to avoid PIC branches
33738        in functions that call this one.
33739        (JSC::jsNaN): Ditto.
33740        * kjs/JSNumberCell.h: Ditto.
33741
33742        * kjs/JSObject.h: Removed constructor that takes a prototype.
33743        All callers now pass structures.
33744
33745        * kjs/ArrayConstructor.cpp:
33746        (JSC::ArrayConstructor::ArrayConstructor):
33747        (JSC::constructArrayWithSizeQuirk):
33748        * kjs/ArrayConstructor.h:
33749        * kjs/ArrayPrototype.cpp:
33750        (JSC::ArrayPrototype::ArrayPrototype):
33751        * kjs/ArrayPrototype.h:
33752        * kjs/BooleanConstructor.cpp:
33753        (JSC::BooleanConstructor::BooleanConstructor):
33754        (JSC::constructBoolean):
33755        (JSC::constructBooleanFromImmediateBoolean):
33756        * kjs/BooleanConstructor.h:
33757        * kjs/BooleanObject.cpp:
33758        (JSC::BooleanObject::BooleanObject):
33759        * kjs/BooleanObject.h:
33760        * kjs/BooleanPrototype.cpp:
33761        (JSC::BooleanPrototype::BooleanPrototype):
33762        * kjs/BooleanPrototype.h:
33763        * kjs/DateConstructor.cpp:
33764        (JSC::DateConstructor::DateConstructor):
33765        (JSC::constructDate):
33766        * kjs/DateConstructor.h:
33767        * kjs/DateInstance.cpp:
33768        (JSC::DateInstance::DateInstance):
33769        * kjs/DateInstance.h:
33770        * kjs/DatePrototype.cpp:
33771        (JSC::DatePrototype::DatePrototype):
33772        * kjs/DatePrototype.h:
33773        * kjs/ErrorConstructor.cpp:
33774        (JSC::ErrorConstructor::ErrorConstructor):
33775        (JSC::constructError):
33776        * kjs/ErrorConstructor.h:
33777        * kjs/ErrorInstance.cpp:
33778        (JSC::ErrorInstance::ErrorInstance):
33779        * kjs/ErrorInstance.h:
33780        * kjs/ErrorPrototype.cpp:
33781        (JSC::ErrorPrototype::ErrorPrototype):
33782        * kjs/ErrorPrototype.h:
33783        * kjs/FunctionConstructor.cpp:
33784        (JSC::FunctionConstructor::FunctionConstructor):
33785        * kjs/FunctionConstructor.h:
33786        * kjs/FunctionPrototype.cpp:
33787        (JSC::FunctionPrototype::FunctionPrototype):
33788        (JSC::FunctionPrototype::addFunctionProperties):
33789        * kjs/FunctionPrototype.h:
33790        * kjs/GlobalEvalFunction.cpp:
33791        (JSC::GlobalEvalFunction::GlobalEvalFunction):
33792        * kjs/GlobalEvalFunction.h:
33793        * kjs/InternalFunction.cpp:
33794        (JSC::InternalFunction::InternalFunction):
33795        * kjs/InternalFunction.h:
33796        (JSC::InternalFunction::InternalFunction):
33797        * kjs/JSArray.cpp:
33798        (JSC::JSArray::JSArray):
33799        (JSC::constructEmptyArray):
33800        (JSC::constructArray):
33801        * kjs/JSArray.h:
33802        * kjs/JSFunction.cpp:
33803        (JSC::JSFunction::JSFunction):
33804        (JSC::JSFunction::construct):
33805        * kjs/JSObject.cpp:
33806        (JSC::constructEmptyObject):
33807        * kjs/JSString.cpp:
33808        (JSC::StringObject::create):
33809        * kjs/JSWrapperObject.h:
33810        * kjs/MathObject.cpp:
33811        (JSC::MathObject::MathObject):
33812        * kjs/MathObject.h:
33813        * kjs/NativeErrorConstructor.cpp:
33814        (JSC::NativeErrorConstructor::NativeErrorConstructor):
33815        (JSC::NativeErrorConstructor::construct):
33816        * kjs/NativeErrorConstructor.h:
33817        * kjs/NativeErrorPrototype.cpp:
33818        (JSC::NativeErrorPrototype::NativeErrorPrototype):
33819        * kjs/NativeErrorPrototype.h:
33820        * kjs/NumberConstructor.cpp:
33821        (JSC::NumberConstructor::NumberConstructor):
33822        (JSC::constructWithNumberConstructor):
33823        * kjs/NumberConstructor.h:
33824        * kjs/NumberObject.cpp:
33825        (JSC::NumberObject::NumberObject):
33826        (JSC::constructNumber):
33827        (JSC::constructNumberFromImmediateNumber):
33828        * kjs/NumberObject.h:
33829        * kjs/NumberPrototype.cpp:
33830        (JSC::NumberPrototype::NumberPrototype):
33831        * kjs/NumberPrototype.h:
33832        * kjs/ObjectConstructor.cpp:
33833        (JSC::ObjectConstructor::ObjectConstructor):
33834        (JSC::constructObject):
33835        * kjs/ObjectConstructor.h:
33836        * kjs/ObjectPrototype.cpp:
33837        (JSC::ObjectPrototype::ObjectPrototype):
33838        * kjs/ObjectPrototype.h:
33839        * kjs/PrototypeFunction.cpp:
33840        (JSC::PrototypeFunction::PrototypeFunction):
33841        * kjs/PrototypeFunction.h:
33842        * kjs/RegExpConstructor.cpp:
33843        (JSC::RegExpConstructor::RegExpConstructor):
33844        (JSC::RegExpMatchesArray::RegExpMatchesArray):
33845        (JSC::constructRegExp):
33846        * kjs/RegExpConstructor.h:
33847        * kjs/RegExpObject.cpp:
33848        (JSC::RegExpObject::RegExpObject):
33849        * kjs/RegExpObject.h:
33850        * kjs/RegExpPrototype.cpp:
33851        (JSC::RegExpPrototype::RegExpPrototype):
33852        * kjs/RegExpPrototype.h:
33853        * kjs/Shell.cpp:
33854        (GlobalObject::GlobalObject):
33855        * kjs/StringConstructor.cpp:
33856        (JSC::StringConstructor::StringConstructor):
33857        (JSC::constructWithStringConstructor):
33858        * kjs/StringConstructor.h:
33859        * kjs/StringObject.cpp:
33860        (JSC::StringObject::StringObject):
33861        * kjs/StringObject.h:
33862        * kjs/StringObjectThatMasqueradesAsUndefined.h:
33863        (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
33864        * kjs/StringPrototype.cpp:
33865        (JSC::StringPrototype::StringPrototype):
33866        * kjs/StringPrototype.h:
33867        Take and pass structures.
33868
338692008-09-19  Alp Toker  <alp@nuanti.com>
33870
33871        Build fix for the 'gold' linker and recent binutils. New behaviour
33872        requires that we link to used libraries explicitly.
33873
33874        * GNUmakefile.am:
33875
338762008-09-19  Sam Weinig  <sam@webkit.org>
33877
33878        Roll r36694 back in.  It did not cause the crash.
33879
33880        * JavaScriptCore.exp:
33881        * VM/JSPropertyNameIterator.cpp:
33882        (JSC::JSPropertyNameIterator::~JSPropertyNameIterator):
33883        (JSC::JSPropertyNameIterator::invalidate):
33884        * VM/JSPropertyNameIterator.h:
33885        (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
33886        (JSC::JSPropertyNameIterator::create):
33887        * kjs/JSObject.cpp:
33888        (JSC::JSObject::getPropertyNames):
33889        * kjs/PropertyMap.cpp:
33890        (JSC::PropertyMap::getEnumerablePropertyNames):
33891        * kjs/PropertyMap.h:
33892        * kjs/PropertyNameArray.cpp:
33893        (JSC::PropertyNameArray::add):
33894        * kjs/PropertyNameArray.h:
33895        (JSC::PropertyNameArrayData::create):
33896        (JSC::PropertyNameArrayData::propertyNameVector):
33897        (JSC::PropertyNameArrayData::setCachedPrototypeChain):
33898        (JSC::PropertyNameArrayData::cachedPrototypeChain):
33899        (JSC::PropertyNameArrayData::begin):
33900        (JSC::PropertyNameArrayData::end):
33901        (JSC::PropertyNameArrayData::PropertyNameArrayData):
33902        (JSC::PropertyNameArray::PropertyNameArray):
33903        (JSC::PropertyNameArray::addKnownUnique):
33904        (JSC::PropertyNameArray::size):
33905        (JSC::PropertyNameArray::operator[]):
33906        (JSC::PropertyNameArray::begin):
33907        (JSC::PropertyNameArray::end):
33908        (JSC::PropertyNameArray::setData):
33909        (JSC::PropertyNameArray::data):
33910        (JSC::PropertyNameArray::releaseData):
33911        * kjs/StructureID.cpp:
33912        (JSC::structureIDChainsAreEqual):
33913        (JSC::StructureID::getEnumerablePropertyNames):
33914        (JSC::StructureID::clearEnumerationCache):
33915        (JSC::StructureID::createCachedPrototypeChain):
33916        * kjs/StructureID.h:
33917
339182008-09-19  Sam Weinig  <sam@webkit.org>
33919
33920        Roll out r36694.
33921
33922        * JavaScriptCore.exp:
33923        * VM/JSPropertyNameIterator.cpp:
33924        (JSC::JSPropertyNameIterator::~JSPropertyNameIterator):
33925        (JSC::JSPropertyNameIterator::invalidate):
33926        * VM/JSPropertyNameIterator.h:
33927        (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
33928        (JSC::JSPropertyNameIterator::create):
33929        * kjs/JSObject.cpp:
33930        (JSC::JSObject::getPropertyNames):
33931        * kjs/PropertyMap.cpp:
33932        (JSC::PropertyMap::getEnumerablePropertyNames):
33933        * kjs/PropertyMap.h:
33934        * kjs/PropertyNameArray.cpp:
33935        (JSC::PropertyNameArray::add):
33936        * kjs/PropertyNameArray.h:
33937        (JSC::PropertyNameArray::PropertyNameArray):
33938        (JSC::PropertyNameArray::addKnownUnique):
33939        (JSC::PropertyNameArray::begin):
33940        (JSC::PropertyNameArray::end):
33941        (JSC::PropertyNameArray::size):
33942        (JSC::PropertyNameArray::operator[]):
33943        (JSC::PropertyNameArray::releaseIdentifiers):
33944        * kjs/StructureID.cpp:
33945        (JSC::StructureID::getEnumerablePropertyNames):
33946        * kjs/StructureID.h:
33947        (JSC::StructureID::clearEnumerationCache):
33948
339492008-09-19  Oliver Hunt  <oliver@apple.com>
33950
33951        Reviewed by Maciej Stachowiak.
33952
33953        Improve peformance of local variable initialisation.
33954
33955        Pull local and constant initialisation out of slideRegisterWindowForCall
33956        and into its own opcode.  This allows the JIT to generate the initialisation
33957        code for a function directly into the instruction stream and so avoids a few
33958        branches on function entry.
33959
33960        Results a 1% progression in SunSpider, particularly in a number of the bitop
33961        tests where the called functions are very fast. 
33962
33963        * VM/CTI.cpp:
33964        (JSC::CTI::emitInitialiseRegister):
33965        (JSC::CTI::privateCompileMainPass):
33966        * VM/CTI.h:
33967        * VM/CodeBlock.cpp:
33968        (JSC::CodeBlock::dump):
33969        * VM/CodeGenerator.cpp:
33970        (JSC::CodeGenerator::CodeGenerator):
33971        * VM/Machine.cpp:
33972        (JSC::slideRegisterWindowForCall):
33973        (JSC::Machine::privateExecute):
33974        * VM/Opcode.h:
33975
339762008-09-19  Sam Weinig  <sam@webkit.org>
33977
33978        Reviewed by Darin Adler.
33979
33980        Patch for https://bugs.webkit.org/show_bug.cgi?id=20928
33981        Speed up JS property enumeration by caching entire PropertyNameArray
33982
33983        1.3% speedup on Sunspider, 30% on string-fasta.
33984
33985        * JavaScriptCore.exp:
33986        * VM/JSPropertyNameIterator.cpp:
33987        (JSC::JSPropertyNameIterator::~JSPropertyNameIterator):
33988        (JSC::JSPropertyNameIterator::invalidate):
33989        * VM/JSPropertyNameIterator.h:
33990        (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
33991        (JSC::JSPropertyNameIterator::create):
33992        * kjs/JSObject.cpp:
33993        (JSC::JSObject::getPropertyNames):
33994        * kjs/PropertyMap.cpp:
33995        (JSC::PropertyMap::getEnumerablePropertyNames):
33996        * kjs/PropertyMap.h:
33997        * kjs/PropertyNameArray.cpp:
33998        (JSC::PropertyNameArray::add):
33999        * kjs/PropertyNameArray.h:
34000        (JSC::PropertyNameArrayData::create):
34001        (JSC::PropertyNameArrayData::propertyNameVector):
34002        (JSC::PropertyNameArrayData::setCachedPrototypeChain):
34003        (JSC::PropertyNameArrayData::cachedPrototypeChain):
34004        (JSC::PropertyNameArrayData::begin):
34005        (JSC::PropertyNameArrayData::end):
34006        (JSC::PropertyNameArrayData::PropertyNameArrayData):
34007        (JSC::PropertyNameArray::PropertyNameArray):
34008        (JSC::PropertyNameArray::addKnownUnique):
34009        (JSC::PropertyNameArray::size):
34010        (JSC::PropertyNameArray::operator[]):
34011        (JSC::PropertyNameArray::begin):
34012        (JSC::PropertyNameArray::end):
34013        (JSC::PropertyNameArray::setData):
34014        (JSC::PropertyNameArray::data):
34015        (JSC::PropertyNameArray::releaseData):
34016        * kjs/ScopeChain.cpp:
34017        (JSC::ScopeChainNode::print):
34018        * kjs/StructureID.cpp:
34019        (JSC::structureIDChainsAreEqual):
34020        (JSC::StructureID::getEnumerablePropertyNames):
34021        (JSC::StructureID::clearEnumerationCache):
34022        (JSC::StructureID::createCachedPrototypeChain):
34023        * kjs/StructureID.h:
34024
340252008-09-19  Holger Hans Peter Freyther  <zecke@selfish.org>
34026
34027        Reviewed by Maciej Stachowiak.
34028
34029        Fix a mismatched new[]/delete in JSObject::allocatePropertyStorage
34030
34031        * kjs/JSObject.cpp:
34032        (JSC::JSObject::allocatePropertyStorage): Spotted by valgrind.
34033
340342008-09-19  Darin Adler  <darin@apple.com>
34035
34036        Reviewed by Sam Weinig.
34037
34038        - part 2 of https://bugs.webkit.org/show_bug.cgi?id=20858
34039          make each distinct C++ class get a distinct JSC::Structure
34040
34041        * JavaScriptCore.exp: Exported constructEmptyObject for use in WebCore.
34042
34043        * kjs/JSGlobalObject.h: Changed the protected constructor to take a
34044        structure instead of a prototype.
34045
34046        * kjs/JSVariableObject.h: Removed constructor that takes a prototype.
34047
340482008-09-19  Julien Chaffraix  <jchaffraix@pleyo.com>
34049
34050        Reviewed by Alexey Proskuryakov.
34051
34052        Use the template hoisting technique on the RefCounted class. This reduces the code bloat due to
34053        non-template methods' code been copied for each instance of the template.
34054        The patch splits RefCounted between a base class that holds non-template methods and attributes
34055        and the template RefCounted class that keeps the same functionnality.
34056
34057        On my Linux with gcc 4.3 for the Gtk port, this is:
34058        - a ~600KB save on libwebkit.so in release.
34059        - a ~1.6MB save on libwebkit.so in debug.
34060
34061        It is a wash on Sunspider and a small win on Dromaeo (not sure it is relevant).
34062        On the whole, it should be a small win as we reduce the compiled code size and the only
34063        new function call should be inlined by the compiler.
34064
34065        * wtf/RefCounted.h:
34066        (WTF::RefCountedBase::ref): Copied from RefCounted.
34067        (WTF::RefCountedBase::hasOneRef): Ditto.
34068        (WTF::RefCountedBase::refCount): Ditto.
34069        (WTF::RefCountedBase::RefCountedBase): Ditto.
34070        (WTF::RefCountedBase::~RefCountedBase): Ditto.
34071        (WTF::RefCountedBase::derefBase): Tweaked from the RefCounted version to remove
34072        template section.
34073        (WTF::RefCounted::RefCounted):
34074        (WTF::RefCounted::deref): Small wrapper around RefCountedBase::derefBase().
34075        (WTF::RefCounted::~RefCounted): Keep private destructor.
34076
340772008-09-18  Darin Adler  <darin@apple.com>
34078
34079        Reviewed by Maciej Stachowiak.
34080
34081        - part 1 of https://bugs.webkit.org/show_bug.cgi?id=20858
34082          make each distinct C++ class get a distinct JSC::Structure
34083
34084        * kjs/lookup.h: Removed things here that were used only in WebCore:
34085        cacheGlobalObject, JSC_DEFINE_PROTOTYPE, JSC_DEFINE_PROTOTYPE_WITH_PROTOTYPE,
34086        and JSC_IMPLEMENT_PROTOTYPE.
34087
340882008-09-18  Darin Adler  <darin@apple.com>
34089
34090        Reviewed by Maciej Stachowiak.
34091
34092        - https://bugs.webkit.org/show_bug.cgi?id=20927
34093          simplify/streamline the code to turn strings into identifiers while parsing
34094
34095        * kjs/grammar.y: Get rid of string from the union, and use ident for STRING as
34096        well as for IDENT.
34097
34098        * kjs/lexer.cpp:
34099        (JSC::Lexer::lex): Use makeIdentifier instead of makeUString for String.
34100        * kjs/lexer.h: Remove makeUString.
34101
34102        * kjs/nodes.h: Changed StringNode to hold an Identifier instead of UString.
34103
34104        * VM/CodeGenerator.cpp:
34105        (JSC::keyForCharacterSwitch): Updated since StringNode now holds an Identifier.
34106        (JSC::prepareJumpTableForStringSwitch): Ditto.
34107        * kjs/nodes.cpp:
34108        (JSC::StringNode::emitCode): Ditto. The comment from here is now in the lexer.
34109        (JSC::processClauseList): Ditto.
34110        * kjs/nodes2string.cpp:
34111        (JSC::StringNode::streamTo): Ditto.
34112
341132008-09-18  Sam Weinig  <sam@webkit.org>
34114
34115        Fix style.
34116
34117        * VM/Instruction.h:
34118        (JSC::Instruction::Instruction):
34119
341202008-09-18  Oliver Hunt  <oliver@apple.com>
34121
34122        Reviewed by Maciej Stachowiak.
34123
34124        Bug 20911: REGRESSION(r36480?): Reproducible assertion failure below derefStructureIDs 64-bit JavaScriptCore
34125        <https://bugs.webkit.org/show_bug.cgi?id=20911>
34126
34127        The problem was simply caused by the int constructor for Instruction
34128        failing to initialise the full struct in 64bit builds.
34129
34130        * VM/Instruction.h:
34131        (JSC::Instruction::Instruction):
34132
341332008-09-18  Darin Adler  <darin@apple.com>
34134
34135        - fix release build
34136
34137        * wtf/RefCountedLeakCounter.cpp: Removed stray "static".
34138
341392008-09-18  Darin Adler  <darin@apple.com>
34140
34141        Reviewed by Sam Weinig.
34142
34143        * kjs/JSGlobalObject.h: Tiny style guideline tweak.
34144
341452008-09-18  Darin Adler  <darin@apple.com>
34146
34147        Reviewed by Sam Weinig.
34148
34149        - fix https://bugs.webkit.org/show_bug.cgi?id=20925
34150          LEAK messages appear every time I quit
34151
34152        * JavaScriptCore.exp: Updated, and also added an export
34153        needed for future WebCore use of JSC::StructureID.
34154
34155        * wtf/RefCountedLeakCounter.cpp:
34156        (WTF::RefCountedLeakCounter::suppressMessages): Added.
34157        (WTF::RefCountedLeakCounter::cancelMessageSuppression): Added.
34158        (WTF::RefCountedLeakCounter::RefCountedLeakCounter): Tweaked a bit.
34159        (WTF::RefCountedLeakCounter::~RefCountedLeakCounter): Added code to
34160        log the reason there was no leak checking done.
34161        (WTF::RefCountedLeakCounter::increment): Tweaked a bit.
34162        (WTF::RefCountedLeakCounter::decrement): Ditto.
34163
34164        * wtf/RefCountedLeakCounter.h: Replaced setLogLeakMessages with two
34165        new functions, suppressMessages and cancelMessageSuppression. Also
34166        added m_ prefixes to the data member names.
34167
341682008-09-18  Holger Hans Peter Freyther  <zecke@selfish.org>
34169
34170        Reviewed by Mark Rowe.
34171
34172        https://bugs.webkit.org/show_bug.cgi?id=20437
34173
34174        Add a proper #define to define which XML Parser implementation to use. Client
34175        code can use #if USE(QXMLSTREAM) to decide if the Qt XML StreamReader
34176        implementation is going to be used.
34177
34178        * wtf/Platform.h:
34179
341802008-09-18  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
34181
34182        Reviewed by Maciej Stachowiak.
34183
34184        Make a Unicode non-breaking space count as a whitespace character in
34185        PCRE. This change was already made in WREC, and it fixes one of the
34186        Mozilla JS tests. Since it is now fixed in PCRE as well, we can check
34187        in a new set of expected test results.
34188
34189        * pcre/pcre_internal.h:
34190        (isSpaceChar):
34191        * tests/mozilla/expected.html:
34192
341932008-09-18  Stephanie Lewis  <slewis@apple.com>
34194
34195        Reviewed by Mark Rowe and Maciej Stachowiak.
34196
34197        add an option use arch to specify which architecture to run.
34198
34199        * tests/mozilla/jsDriver.pl:
34200
342012008-09-17  Oliver Hunt  <oliver@apple.com>
34202
34203        Correctly restore argument reference prior to SFX runtime calls.
34204        
34205        Reviewed by Steve Falkenburg.
34206
34207        * VM/CTI.cpp:
34208        (JSC::CTI::privateCompileSlowCases):
34209        (JSC::CTI::privateCompile):
34210
342112008-09-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
34212
34213        Reviewed by Maciej Stachowiak.
34214
34215        Bug 20876: REGRESSION (r36417, r36427): fast/js/exception-expression-offset.html fails
34216        <https://bugs.webkit.org/show_bug.cgi?id=20876>
34217
34218        r36417 and r36427 caused an get_by_id opcode to be emitted before the
34219        instanceof and construct opcodes, in order to enable inline caching of
34220        the prototype property. Unfortunately, this regressed some tests dealing
34221        with exceptions thrown by 'instanceof' and the 'new' operator. We fix
34222        these problems by detecting whether an "is not an object" exception is
34223        thrown before op_instanceof or op_construct, and emit the proper
34224        exception in those cases.
34225
34226        * VM/CodeGenerator.cpp:
34227        (JSC::CodeGenerator::emitConstruct):
34228        * VM/CodeGenerator.h:
34229        * VM/ExceptionHelpers.cpp:
34230        (JSC::createInvalidParamError):
34231        (JSC::createNotAConstructorError):
34232        (JSC::createNotAnObjectError):
34233        * VM/ExceptionHelpers.h:
34234        * VM/Machine.cpp:
34235        (JSC::Machine::getOpcode):
34236        (JSC::Machine::privateExecute):
34237        * VM/Machine.h:
34238        * kjs/nodes.cpp:
34239        (JSC::NewExprNode::emitCode):
34240        (JSC::InstanceOfNode::emitCode):
34241
342422008-09-17  Gavin Barraclough  <barraclough@apple.com>
34243
34244        Reviewed by Oliver Hunt.
34245
34246        JIT generation cti_op_construct_verify.
34247        
34248        Quarter to half percent progression on v8-tests.
34249        Roughly not change on SunSpider (possible minor progression).
34250
34251        * VM/CTI.cpp:
34252        (JSC::CTI::privateCompileMainPass):
34253        * VM/Machine.cpp:
34254        * VM/Machine.h:
34255
342562008-09-15  Steve Falkenburg  <sfalken@apple.com>
34257
34258        Improve timer accuracy for JavaScript Date object on Windows.
34259        
34260        Use a combination of ftime and QueryPerformanceCounter.
34261        ftime returns the information we want, but doesn't have sufficient resolution.
34262        QueryPerformanceCounter has high resolution, but is only usable to measure time intervals.
34263        To combine them, we call ftime and QueryPerformanceCounter initially. Later calls will use
34264        QueryPerformanceCounter by itself, adding the delta to the saved ftime.  We re-sync to
34265        correct for drift if the low-res and high-res elapsed time between calls differs by more
34266        than twice the low-resolution timer resolution.
34267        
34268        QueryPerformanceCounter may be inaccurate due to a problems with:
34269        - some PCI bridge chipsets (http://support.microsoft.com/kb/274323)
34270        - BIOS bugs (http://support.microsoft.com/kb/895980/)
34271        - BIOS/HAL bugs on multiprocessor/multicore systems (http://msdn.microsoft.com/en-us/library/ms644904.aspx)
34272        
34273        Reviewed by Darin Adler.
34274
34275        * kjs/DateMath.cpp:
34276        (JSC::highResUpTime):
34277        (JSC::lowResUTCTime):
34278        (JSC::qpcAvailable):
34279        (JSC::getCurrentUTCTimeWithMicroseconds):
34280
342812008-09-17  Gavin Barraclough  <barraclough@apple.com>
34282
34283        Reviewed by Geoff Garen.
34284
34285        Implement JIT generation of CallFrame initialization, for op_call.
34286
34287        1% sunspider 2.5% v8-tests.
34288
34289        * VM/CTI.cpp:
34290        (JSC::CTI::compileOpCall):
34291        * VM/Machine.cpp:
34292        (JSC::Machine::cti_op_call_JSFunction):
34293        (JSC::Machine::cti_op_call_NotJSFunction):
34294
342952008-09-17  Gavin Barraclough  <barraclough@apple.com>
34296
34297        Reviewed by Geoff Garen.
34298
34299        Optimizations for op_call in CTI.  Move check for (ctiCode == 0) into JIT code,
34300        move copying of scopeChain for CodeBlocks that needFullScopeChain into head of
34301        functions, instead of checking prior to making the call.
34302
34303        3% on v8-tests (4% on richards, 6% in delta-blue)
34304
34305        * VM/CTI.cpp:
34306        (JSC::CTI::compileOpCall):
34307        (JSC::CTI::privateCompileSlowCases):
34308        (JSC::CTI::privateCompile):
34309        * VM/Machine.cpp:
34310        (JSC::Machine::execute):
34311        (JSC::Machine::cti_op_call_JSFunction):
34312        (JSC::Machine::cti_vm_compile):
34313        (JSC::Machine::cti_vm_updateScopeChain):
34314        (JSC::Machine::cti_op_construct_JSConstruct):
34315        * VM/Machine.h:
34316
343172008-09-17  Tor Arne Vestbø  <tavestbo@trolltech.com>
34318
34319        Fix the QtWebKit/Mac build
34320
34321        * wtf/ThreadingQt.cpp:
34322        (WTF::initializeThreading): use QCoreApplication to get the main thread
34323
343242008-09-16  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
34325
34326        Reviewed by Maciej Stachowiak.
34327
34328        Bug 20857: REGRESSION (r36427): ASSERTION FAILED: m_refCount >= 0 in RegisterID::deref()
34329        <https://bugs.webkit.org/show_bug.cgi?id=20857>
34330
34331        Fix a problem stemming from the slightly unsafe behaviour of the
34332        CodeGenerator::finalDestination() method by putting the "func" argument
34333        of the emitConstruct() method in a RefPtr in its caller. Also, add an
34334        assertion guaranteeing that this is always the case.
34335
34336        CodeGenerator::finalDestination() is still incorrect and can cause
34337        problems with a different allocator; see bug 20340 for more details.
34338
34339        * VM/CodeGenerator.cpp:
34340        (JSC::CodeGenerator::emitConstruct):
34341        * kjs/nodes.cpp:
34342        (JSC::NewExprNode::emitCode):
34343
343442008-09-16  Alice Liu  <alice.liu@apple.com>
34345
34346        build fix.
34347
34348        * VM/CTI.cpp:
34349        (JSC::CTI::privateCompileMainPass):
34350
343512008-09-16  Gavin Barraclough  <barraclough@apple.com>
34352
34353        Reviewed by Geoff Garen.
34354
34355        CTI code generation for op_ret.  The majority of the work
34356        (updating variables on the stack & on exec) can be performed
34357        directly in generated code.
34358
34359        We still need to check, & to call out to C-code to handle
34360        activation records, profiling, and full scope chains.
34361
34362        +1.5% Sunspider, +5/6% v8 tests.
34363
34364        * VM/CTI.cpp:
34365        (JSC::CTI::emitPutCTIParam):
34366        (JSC::CTI::compileOpCall):
34367        (JSC::CTI::privateCompileMainPass):
34368        * VM/CTI.h:
34369        * VM/Machine.cpp:
34370        (JSC::Machine::cti_op_ret_activation):
34371        (JSC::Machine::cti_op_ret_profiler):
34372        (JSC::Machine::cti_op_ret_scopeChain):
34373        * VM/Machine.h:
34374
343752008-09-16  Dimitri Glazkov  <dglazkov@chromium.org>
34376
34377        Fix the Windows build.
34378
34379        Add some extra parentheses to stop MSVC from complaining so much.
34380
34381        * VM/Machine.cpp:
34382        (JSC::Machine::privateExecute):
34383        (JSC::Machine::cti_op_stricteq):
34384        (JSC::Machine::cti_op_nstricteq):
34385        * kjs/operations.cpp:
34386        (JSC::strictEqual):
34387
343882008-09-15  Maciej Stachowiak  <mjs@apple.com>
34389
34390        Reviewed by Cameron Zwarich.
34391        
34392        - speed up the === and !== operators by choosing the fast cases better
34393        
34394        No effect on SunSpider but speeds up the V8 EarlyBoyer benchmark about 4%.
34395
34396        * VM/Machine.cpp:
34397        (JSC::Machine::privateExecute):
34398        (JSC::Machine::cti_op_stricteq):
34399        (JSC::Machine::cti_op_nstricteq):
34400        * kjs/JSImmediate.h:
34401        (JSC::JSImmediate::areBothImmediate):
34402        * kjs/operations.cpp:
34403        (JSC::strictEqual):
34404        (JSC::strictEqualSlowCase):
34405        * kjs/operations.h:
34406
344072008-09-15  Oliver Hunt  <oliver@apple.com>
34408
34409        RS=Sam Weinig.
34410
34411        Coding style cleanup.
34412
34413        * VM/Machine.cpp:
34414        (JSC::Machine::privateExecute):
34415
344162008-09-15  Oliver Hunt  <oliver@apple.com>
34417
34418        Reviewed by Cameron Zwarich.
34419
34420        Bug 20874: op_resolve does not do any form of caching
34421        <https://bugs.webkit.org/show_bug.cgi?id=20874>
34422
34423        This patch adds an op_resolve_global opcode to handle (and cache)
34424        property lookup we can statically determine must occur on the global
34425        object (if at all).
34426
34427        3% progression on sunspider, 3.2x improvement to bitops-bitwise-and, and
34428        10% in math-partial-sums
34429
34430        * VM/CTI.cpp:
34431        (JSC::CTI::privateCompileMainPass):
34432        * VM/CTI.h:
34433        * VM/CodeBlock.cpp:
34434        (JSC::CodeBlock::dump):
34435        * VM/CodeGenerator.cpp:
34436        (JSC::CodeGenerator::findScopedProperty):
34437        (JSC::CodeGenerator::emitResolve):
34438        * VM/Machine.cpp:
34439        (JSC::resolveGlobal):
34440        (JSC::Machine::privateExecute):
34441        (JSC::Machine::cti_op_resolve_global):
34442        * VM/Machine.h:
34443        * VM/Opcode.h:
34444
344452008-09-15  Sam Weinig  <sam@webkit.org>
34446
34447        Roll out r36462.  It broke document.all.
34448
34449        * VM/CTI.cpp:
34450        (JSC::CTI::privateCompileMainPass):
34451        (JSC::CTI::privateCompileSlowCases):
34452        * VM/CTI.h:
34453        * VM/Machine.cpp:
34454        (JSC::Machine::Machine):
34455        (JSC::Machine::cti_op_eq_null):
34456        (JSC::Machine::cti_op_neq_null):
34457        * VM/Machine.h:
34458        (JSC::Machine::isJSString):
34459        * kjs/JSCell.h:
34460        * kjs/JSWrapperObject.h:
34461        * kjs/StringObject.h:
34462        * kjs/StringObjectThatMasqueradesAsUndefined.h:
34463
344642008-09-15  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
34465
34466        Reviewed by Maciej Stachowiak.
34467
34468        Bug 20863: ASSERTION FAILED: addressOffset < instructions.size() in CodeBlock::getHandlerForVPC
34469        <https://bugs.webkit.org/show_bug.cgi?id=20863>
34470
34471        r36427 changed the number of arguments to op_construct without changing
34472        the argument index for the vPC in the call to initializeCallFrame() in
34473        the CTI case. This caused a JSC test failure. Correcting the argument
34474        index fixes the test failure.
34475
34476        * VM/Machine.cpp:
34477        (JSC::Machine::cti_op_construct_JSConstruct):
34478
344792008-09-15  Mark Rowe  <mrowe@apple.com>
34480
34481        Fix GCC 4.2 build.
34482
34483        * VM/CTI.h:
34484
344852008-09-15  Geoffrey Garen  <ggaren@apple.com>
34486
34487        Reviewed by Maciej Stachowiak.
34488        
34489        Fixed a typo in op_get_by_id_chain that caused it to miss every time
34490        in the interpreter.
34491        
34492        Also, a little cleanup.
34493
34494        * VM/Machine.cpp:
34495        (JSC::Machine::privateExecute): Set up baseObject before entering the
34496        loop, so we compare against the right values.
34497
344982008-09-15  Geoffrey Garen  <ggaren@apple.com>
34499
34500        Reviewed by Sam Weinig.
34501        
34502        Removed the CalledAsConstructor flag from the call frame header. Now,
34503        we use an explicit opcode at the call site to fix up constructor results.
34504
34505        SunSpider says 0.4% faster.
34506        
34507        cti_op_construct_verify is an out-of-line function call for now, but we
34508        can fix that once StructureID holds type information like isObject.
34509
34510        * VM/CTI.cpp:
34511        (JSC::CTI::privateCompileMainPass): Codegen for the new opcode.
34512
34513        * VM/CodeBlock.cpp:
34514        (JSC::CodeBlock::dump):
34515
34516        * VM/CodeGenerator.cpp: Codegen for the new opcode. Also...
34517        (JSC::CodeGenerator::emitCall): ... don't test for known non-zero value.
34518        (JSC::CodeGenerator::emitConstruct): ... ditto.
34519
34520        * VM/Machine.cpp: No more CalledAsConstructor
34521        (JSC::Machine::privateExecute): Implementation for the new opcode.
34522        (JSC::Machine::cti_op_ret): The speedup: no need to check whether we were
34523        called as a constructor.
34524        (JSC::Machine::cti_op_construct_verify): Implementation for the new opcode.
34525        * VM/Machine.h:
34526
34527        * VM/Opcode.h: Declare new opcode.
34528
34529        * VM/RegisterFile.h:
34530        (JSC::RegisterFile::): No more CalledAsConstructor
34531
345322008-09-15  Gavin Barraclough  <barraclough@apple.com>
34533
34534        Reviewed by Geoff Garen.
34535
34536        Inline code generation of eq_null/neq_null for CTI.  Uses vptr checking for
34537        StringObjectsThatAreMasqueradingAsBeingUndefined.  In the long run, the
34538        masquerading may be handled differently (through the StructureIDs - see bug
34539        #20823).
34540
34541        >1% on v8-tests.
34542
34543        * VM/CTI.cpp:
34544        (JSC::CTI::emitJumpSlowCaseIfIsJSCell):
34545        (JSC::CTI::privateCompileMainPass):
34546        (JSC::CTI::privateCompileSlowCases):
34547        * VM/CTI.h:
34548        * VM/Machine.cpp:
34549        (JSC::Machine::Machine):
34550        (JSC::Machine::cti_op_eq_null):
34551        (JSC::Machine::cti_op_neq_null):
34552        * VM/Machine.h:
34553        (JSC::Machine::doesMasqueradesAsUndefined):
34554        * kjs/JSWrapperObject.h:
34555        (JSC::JSWrapperObject::):
34556        (JSC::JSWrapperObject::JSWrapperObject):
34557        * kjs/StringObject.h:
34558        (JSC::StringObject::StringObject):
34559        * kjs/StringObjectThatMasqueradesAsUndefined.h:
34560        (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
34561
345622008-09-15  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
34563
34564        Rubber-stamped by Oliver Hunt.
34565
34566        r36427 broke CodeBlock::dump() by changing the number of arguments to
34567        op_construct without changing the code that prints it. This patch fixes
34568        it by printing the additional argument.
34569
34570        * JavaScriptCore.xcodeproj/project.pbxproj:
34571        * VM/CodeBlock.cpp:
34572        (JSC::CodeBlock::dump):
34573
345742008-09-15  Adam Roben  <aroben@apple.com>
34575
34576        Build fix
34577
34578        * kjs/StructureID.cpp: Removed a stray semicolon.
34579
345802008-09-15  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
34581
34582        Reviewed by Maciej Stachowiak.
34583
34584        Fix a crash in fast/js/exception-expression-offset.html caused by not
34585        updating all mentions of the length of op_construct in r36427.
34586
34587        * VM/Machine.cpp:
34588        (JSC::Machine::cti_op_construct_NotJSConstruct):
34589
345902008-09-15  Maciej Stachowiak  <mjs@apple.com>
34591
34592        Reviewed by Cameron Zwarich.
34593        
34594        - fix layout test failure introduced by fix for 20849
34595        
34596        (The failing test was fast/js/delete-then-put.html)
34597
34598        * kjs/JSObject.cpp:
34599        (JSC::JSObject::removeDirect): Clear enumeration cache
34600        in the dictionary case.
34601        * kjs/JSObject.h:
34602        (JSC::JSObject::putDirect): Ditto.
34603        * kjs/StructureID.h:
34604        (JSC::StructureID::clearEnumerationCache): Inline to handle the
34605        clear.
34606
346072008-09-15  Maciej Stachowiak  <mjs@apple.com>
34608
34609        Reviewed by Cameron Zwarich.
34610        
34611        - fix JSC test failures introduced by fix for 20849
34612
34613        * kjs/PropertyMap.cpp:
34614        (JSC::PropertyMap::getEnumerablePropertyNames): Use the correct count.
34615
346162008-09-15  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
34617
34618        Reviewed by Maciej Stachowiak.
34619
34620        Bug 20851: REGRESSION (r36410): fast/js/kde/GlobalObject.html fails
34621        <https://bugs.webkit.org/show_bug.cgi?id=20851>
34622
34623        r36410 introduced an optimization for parseInt() that is incorrect when
34624        its argument is larger than the range of a 32-bit integer. If the
34625        argument is a number that is not an immediate integer, then the correct
34626        behaviour is to return the floor of its value, unless it is an infinite
34627        value, in which case the correct behaviour is to return 0.
34628
34629        * kjs/JSGlobalObjectFunctions.cpp:
34630        (JSC::globalFuncParseInt):
34631
346322008-09-15  Sam Weinig  <sam@webkit.org>
34633
34634        Reviewed by Maciej Stachowiak.
34635
34636        Patch for https://bugs.webkit.org/show_bug.cgi?id=20849
34637        Cache property names for getEnumerablePropertyNames in the StructureID.
34638
34639        ~0.5% speedup on Sunspider overall (9.7% speedup on string-fasta).  ~1% speedup
34640        on the v8 test suite.
34641
34642        * kjs/JSObject.cpp:
34643        (JSC::JSObject::getPropertyNames):
34644        * kjs/PropertyMap.cpp:
34645        (JSC::PropertyMap::getEnumerablePropertyNames):
34646        * kjs/PropertyMap.h:
34647        * kjs/StructureID.cpp:
34648        (JSC::StructureID::StructureID):
34649        (JSC::StructureID::getEnumerablePropertyNames):
34650        * kjs/StructureID.h:
34651
346522008-09-14  Maciej Stachowiak  <mjs@apple.com>
34653
34654        Reviewed by Cameron Zwarich.
34655        
34656        - speed up JS construction by extracting "prototype" lookup so PIC applies.
34657        
34658        ~0.5% speedup on SunSpider
34659        Speeds up some of the V8 tests as well, most notably earley-boyer.
34660
34661        * VM/CTI.cpp:
34662        (JSC::CTI::compileOpCall): Account for extra arg for prototype.
34663        (JSC::CTI::privateCompileMainPass): Account for increased size of op_construct.
34664        * VM/CodeGenerator.cpp:
34665        (JSC::CodeGenerator::emitConstruct): Emit separate lookup to get prototype property.
34666        * VM/Machine.cpp:
34667        (JSC::Machine::privateExecute): Expect prototype arg in op_construct.
34668        (JSC::Machine::cti_op_construct_JSConstruct): ditto
34669        (JSC::Machine::cti_op_construct_NotJSConstruct): ditto
34670
346712008-09-10  Alexey Proskuryakov  <ap@webkit.org>
34672
34673        Reviewed by Eric Seidel.
34674
34675        Add a protected destructor for RefCounted.
34676
34677        It is wrong to call its destructor directly, because (1) this should be taken care of by
34678        deref(), and (2) many classes that use RefCounted have non-virtual destructors.
34679
34680        No change in behavior.
34681
34682        * wtf/RefCounted.h: (WTF::RefCounted::~RefCounted):
34683
346842008-09-14  Gavin Barraclough  <barraclough@apple.com>
34685
34686        Reviewed by Sam Weinig.
34687
34688        Accelerated property accesses.
34689
34690        Inline more of the array access code into the JIT code for get/put_by_val.
34691        Accelerate get/put_by_id by speculatively inlining a disable direct access
34692        into the hot path of the code, and repatch this with the correct StructureID
34693        and property map offset once these are known.  In the case of accesses to the
34694        prototype and reading the array-length a trampoline is genertaed, and the
34695        branch to the slow-case is relinked to jump to this.
34696
34697        By repatching, we mean rewriting the x86 instruction stream.  Instructions are
34698        only modified in a simple fasion - altering immediate operands, memory access
34699        deisplacements, and branch offsets.
34700        
34701        For regular get_by_id/put_by_id accesses to an object, a StructureID in an
34702        instruction's immediate operant is updateded, and a memory access operation's
34703        displacement is updated to access the correct field on the object.  In the case
34704        of more complex accesses (array length and get_by_id_prototype) the offset on
34705        the branch to slow-case is updated, to now jump to a trampoline.
34706
34707        +2.8% sunspider, +13% v8-tests
34708
34709        * VM/CTI.cpp:
34710        (JSC::CTI::emitCall):
34711        (JSC::CTI::emitJumpSlowCaseIfNotJSCell):
34712        (JSC::CTI::CTI):
34713        (JSC::CTI::privateCompileMainPass):
34714        (JSC::CTI::privateCompileSlowCases):
34715        (JSC::CTI::privateCompile):
34716        (JSC::CTI::privateCompileGetByIdSelf):
34717        (JSC::CTI::privateCompileGetByIdProto):
34718        (JSC::CTI::privateCompileGetByIdChain):
34719        (JSC::CTI::privateCompilePutByIdReplace):
34720        (JSC::CTI::privateCompilePutByIdTransition):
34721        (JSC::CTI::privateCompileArrayLengthTrampoline):
34722        (JSC::CTI::privateCompileStringLengthTrampoline):
34723        (JSC::CTI::patchGetByIdSelf):
34724        (JSC::CTI::patchPutByIdReplace):
34725        (JSC::CTI::privateCompilePatchGetArrayLength):
34726        (JSC::CTI::privateCompilePatchGetStringLength):
34727        * VM/CTI.h:
34728        (JSC::CTI::compileGetByIdSelf):
34729        (JSC::CTI::compileGetByIdProto):
34730        (JSC::CTI::compileGetByIdChain):
34731        (JSC::CTI::compilePutByIdReplace):
34732        (JSC::CTI::compilePutByIdTransition):
34733        (JSC::CTI::compileArrayLengthTrampoline):
34734        (JSC::CTI::compileStringLengthTrampoline):
34735        (JSC::CTI::compilePatchGetArrayLength):
34736        (JSC::CTI::compilePatchGetStringLength):
34737        * VM/CodeBlock.cpp:
34738        (JSC::CodeBlock::dump):
34739        (JSC::CodeBlock::~CodeBlock):
34740        * VM/CodeBlock.h:
34741        (JSC::StructureStubInfo::StructureStubInfo):
34742        (JSC::CodeBlock::getStubInfo):
34743        * VM/Machine.cpp:
34744        (JSC::Machine::tryCTICachePutByID):
34745        (JSC::Machine::tryCTICacheGetByID):
34746        (JSC::Machine::cti_op_put_by_val_array):
34747        * VM/Machine.h:
34748        * masm/X86Assembler.h:
34749        (JSC::X86Assembler::):
34750        (JSC::X86Assembler::cmpl_i8m):
34751        (JSC::X86Assembler::emitUnlinkedJa):
34752        (JSC::X86Assembler::getRelocatedAddress):
34753        (JSC::X86Assembler::getDifferenceBetweenLabels):
34754        (JSC::X86Assembler::emitModRm_opmsib):
34755
347562008-09-14  Maciej Stachowiak  <mjs@apple.com>
34757
34758        Reviewed by Cameron Zwarich.
34759        
34760        - split the "prototype" lookup for hasInstance into opcode stream so it can be cached
34761        
34762        ~5% speedup on v8 earley-boyer test
34763
34764        * API/JSCallbackObject.h: Add a parameter for the pre-looked-up prototype.
34765        * API/JSCallbackObjectFunctions.h:
34766        (JSC::::hasInstance): Ditto.
34767        * API/JSValueRef.cpp:
34768        (JSValueIsInstanceOfConstructor): Look up and pass in prototype.
34769        * JavaScriptCore.exp:
34770        * VM/CTI.cpp:
34771        (JSC::CTI::privateCompileMainPass): Pass along prototype.
34772        * VM/CodeBlock.cpp:
34773        (JSC::CodeBlock::dump): Print third arg.
34774        * VM/CodeGenerator.cpp:
34775        (JSC::CodeGenerator::emitInstanceOf): Implement this, now that there
34776        is a third argument.
34777        * VM/CodeGenerator.h:
34778        * VM/Machine.cpp:
34779        (JSC::Machine::privateExecute): Pass along the prototype.
34780        (JSC::Machine::cti_op_instanceof): ditto
34781        * kjs/JSObject.cpp:
34782        (JSC::JSObject::hasInstance): Expect to get a pre-looked-up prototype.
34783        * kjs/JSObject.h:
34784        * kjs/nodes.cpp:
34785        (JSC::InstanceOfNode::emitCode): Emit a get_by_id of the prototype
34786        property and pass that register to instanceof.
34787        * kjs/nodes.h:
34788
347892008-09-14  Gavin Barraclough  <barraclough@apple.com>
34790
34791        Reviewed by Sam Weinig.
34792
34793        Remove unnecessary virtual function call from cti_op_call_JSFunction -
34794        ~5% on richards, ~2.5% on v8-tests, ~0.5% on sunspider.
34795
34796        * VM/Machine.cpp:
34797        (JSC::Machine::cti_op_call_JSFunction):
34798
347992008-09-14  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
34800
34801        Reviewed by Maciej Stachowiak.
34802
34803        Bug 20827: the 'typeof' operator is slow
34804        <https://bugs.webkit.org/show_bug.cgi?id=20827>
34805
34806        Optimize the 'typeof' operator when its result is compared to a constant
34807        string.
34808
34809        This is a 5.5% speedup on the V8 Earley-Boyer test.
34810
34811        * VM/CTI.cpp:
34812        (JSC::CTI::privateCompileMainPass):
34813        * VM/CodeBlock.cpp:
34814        (JSC::CodeBlock::dump):
34815        * VM/CodeGenerator.cpp:
34816        (JSC::CodeGenerator::emitEqualityOp):
34817        * VM/CodeGenerator.h:
34818        * VM/Machine.cpp:
34819        (JSC::jsIsObjectType):
34820        (JSC::jsIsFunctionType):
34821        (JSC::Machine::privateExecute):
34822        (JSC::Machine::cti_op_is_undefined):
34823        (JSC::Machine::cti_op_is_boolean):
34824        (JSC::Machine::cti_op_is_number):
34825        (JSC::Machine::cti_op_is_string):
34826        (JSC::Machine::cti_op_is_object):
34827        (JSC::Machine::cti_op_is_function):
34828        * VM/Machine.h:
34829        * VM/Opcode.h:
34830        * kjs/nodes.cpp:
34831        (JSC::BinaryOpNode::emitCode):
34832        (JSC::EqualNode::emitCode):
34833        (JSC::StrictEqualNode::emitCode):
34834        * kjs/nodes.h:
34835
348362008-09-14  Sam Weinig  <sam@webkit.org>
34837
34838        Reviewed by Cameron Zwarich.
34839
34840        Patch for https://bugs.webkit.org/show_bug.cgi?id=20844
34841        Speed up parseInt for numbers
34842
34843        Sunspider reports this as 1.029x as fast overall and 1.37x as fast on string-unpack-code.
34844        No change on the v8 suite.
34845
34846        * kjs/JSGlobalObjectFunctions.cpp:
34847        (JSC::globalFuncParseInt): Don't convert numbers to strings just to
34848        convert them back to numbers.
34849
348502008-09-14  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
34851
34852        Reviewed by Oliver Hunt.
34853
34854        Bug 20816: op_lesseq should be optimized
34855        <https://bugs.webkit.org/show_bug.cgi?id=20816>
34856
34857        Add a loop_if_lesseq opcode that is similar to the loop_if_less opcode.
34858
34859        This is a 9.4% speedup on the V8 Crypto benchmark.
34860
34861        * VM/CTI.cpp:
34862        (JSC::CTI::privateCompileMainPass):
34863        (JSC::CTI::privateCompileSlowCases):
34864        * VM/CodeBlock.cpp:
34865        (JSC::CodeBlock::dump):
34866        * VM/CodeGenerator.cpp:
34867        (JSC::CodeGenerator::emitJumpIfTrue):
34868        * VM/Machine.cpp:
34869        (JSC::Machine::privateExecute):
34870        (JSC::Machine::cti_op_loop_if_lesseq):
34871        * VM/Machine.h:
34872        * VM/Opcode.h:
34873
348742008-09-14  Sam Weinig  <sam@webkit.org>
34875
34876        Reviewed by Cameron Zwarich.
34877
34878        Cleanup Sampling code.
34879
34880        * VM/CTI.cpp:
34881        (JSC::CTI::emitCall):
34882        (JSC::CTI::privateCompileMainPass):
34883        * VM/CTI.h:
34884        (JSC::CTI::execute):
34885        * VM/SamplingTool.cpp:
34886        (JSC::):
34887        (JSC::SamplingTool::run):
34888        (JSC::SamplingTool::dump):
34889        * VM/SamplingTool.h:
34890        (JSC::SamplingTool::callingHostFunction):
34891
348922008-09-13  Oliver Hunt  <oliver@apple.com>
34893
34894        Reviewed by Cameron Zwarich.
34895
34896        Bug 20821: Cache property transitions to speed up object initialization
34897        https://bugs.webkit.org/show_bug.cgi?id=20821
34898
34899        Implement a transition cache to improve the performance of new properties
34900        being added to objects.  This is extremely beneficial in constructors and
34901        shows up as a 34% improvement on access-binary-trees in SunSpider (0.8%
34902        overall)
34903
34904        * VM/CTI.cpp:
34905        (JSC::CTI::privateCompileMainPass):
34906        (JSC::):
34907        (JSC::transitionWillNeedStorageRealloc):
34908        (JSC::CTI::privateCompilePutByIdTransition):
34909        * VM/CTI.h:
34910        (JSC::CTI::compilePutByIdTransition):
34911        * VM/CodeBlock.cpp:
34912        (JSC::printPutByIdOp):
34913        (JSC::CodeBlock::printStructureIDs):
34914        (JSC::CodeBlock::dump):
34915        (JSC::CodeBlock::derefStructureIDs):
34916        (JSC::CodeBlock::refStructureIDs):
34917        * VM/CodeGenerator.cpp:
34918        (JSC::CodeGenerator::emitPutById):
34919        * VM/Machine.cpp:
34920        (JSC::cachePrototypeChain):
34921        (JSC::Machine::tryCachePutByID):
34922        (JSC::Machine::tryCacheGetByID):
34923        (JSC::Machine::privateExecute):
34924        (JSC::Machine::tryCTICachePutByID):
34925        (JSC::Machine::tryCTICacheGetByID):
34926        * VM/Machine.h:
34927        * VM/Opcode.h:
34928        * kjs/JSObject.h:
34929        (JSC::JSObject::putDirect):
34930        (JSC::JSObject::transitionTo):
34931        * kjs/PutPropertySlot.h:
34932        (JSC::PutPropertySlot::PutPropertySlot):
34933        (JSC::PutPropertySlot::wasTransition):
34934        (JSC::PutPropertySlot::setWasTransition):
34935        * kjs/StructureID.cpp:
34936        (JSC::StructureID::transitionTo):
34937        (JSC::StructureIDChain::StructureIDChain):
34938        * kjs/StructureID.h:
34939        (JSC::StructureID::previousID):
34940        (JSC::StructureID::setCachedPrototypeChain):
34941        (JSC::StructureID::cachedPrototypeChain):
34942        (JSC::StructureID::propertyMap):
34943        * masm/X86Assembler.h:
34944        (JSC::X86Assembler::addl_i8m):
34945        (JSC::X86Assembler::subl_i8m):
34946
349472008-09-12  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
34948
34949        Reviewed by Maciej Stachowiak.
34950
34951        Bug 20819: JSValue::isObject() is slow
34952        <https://bugs.webkit.org/show_bug.cgi?id=20819>
34953
34954        Optimize JSCell::isObject() and JSCell::isString() by making them
34955        non-virtual calls that rely on the StructureID type information.
34956
34957        This is a 0.7% speedup on SunSpider and a 1.0% speedup on the V8
34958        benchmark suite.
34959
34960        * JavaScriptCore.exp:
34961        * kjs/JSCell.cpp:
34962        * kjs/JSCell.h:
34963        (JSC::JSCell::isObject):
34964        (JSC::JSCell::isString):
34965        * kjs/JSObject.cpp:
34966        * kjs/JSObject.h:
34967        * kjs/JSString.cpp:
34968        * kjs/JSString.h:
34969        (JSC::JSString::JSString):
34970        * kjs/StructureID.h:
34971        (JSC::StructureID::type):
34972
349732008-09-11  Stephanie Lewis  <slewis@apple.com>
34974
34975        Reviewed by Oliver Hunt.
34976
34977        Turn off PGO Optimization on CTI.cpp -> <rdar://problem/6207709>.  Fixes
34978        crash on CNN and on Dromaeo.
34979        Fix Missing close tag in vcproj. 
34980
34981        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
34982
349832008-09-11  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
34984
34985        Not reviewed.
34986
34987        Correct an SVN problem with the last commit and actually add the new
34988        files.
34989
34990        * wrec/CharacterClassConstructor.cpp: Added.
34991        (JSC::):
34992        (JSC::getCharacterClassNewline):
34993        (JSC::getCharacterClassDigits):
34994        (JSC::getCharacterClassSpaces):
34995        (JSC::getCharacterClassWordchar):
34996        (JSC::getCharacterClassNondigits):
34997        (JSC::getCharacterClassNonspaces):
34998        (JSC::getCharacterClassNonwordchar):
34999        (JSC::CharacterClassConstructor::addSorted):
35000        (JSC::CharacterClassConstructor::addSortedRange):
35001        (JSC::CharacterClassConstructor::put):
35002        (JSC::CharacterClassConstructor::flush):
35003        (JSC::CharacterClassConstructor::append):
35004        * wrec/CharacterClassConstructor.h: Added.
35005        (JSC::CharacterClassConstructor::CharacterClassConstructor):
35006        (JSC::CharacterClassConstructor::isUpsideDown):
35007        (JSC::CharacterClassConstructor::charClass):
35008
350092008-09-11  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
35010
35011        Reviewed by Maciej Stachowiak.
35012
35013        Bug 20788: Split CharacterClassConstructor into its own file
35014        <https://bugs.webkit.org/show_bug.cgi?id=20788>
35015
35016        Split CharacterClassConstructor into its own file and clean up some
35017        style issues.
35018
35019        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
35020        * JavaScriptCore.xcodeproj/project.pbxproj:
35021        * wrec/CharacterClassConstructor.cpp: Added.
35022        (JSC::):
35023        (JSC::getCharacterClassNewline):
35024        (JSC::getCharacterClassDigits):
35025        (JSC::getCharacterClassSpaces):
35026        (JSC::getCharacterClassWordchar):
35027        (JSC::getCharacterClassNondigits):
35028        (JSC::getCharacterClassNonspaces):
35029        (JSC::getCharacterClassNonwordchar):
35030        (JSC::CharacterClassConstructor::addSorted):
35031        (JSC::CharacterClassConstructor::addSortedRange):
35032        (JSC::CharacterClassConstructor::put):
35033        (JSC::CharacterClassConstructor::flush):
35034        (JSC::CharacterClassConstructor::append):
35035        * wrec/CharacterClassConstructor.h: Added.
35036        (JSC::CharacterClassConstructor::CharacterClassConstructor):
35037        (JSC::CharacterClassConstructor::isUpsideDown):
35038        (JSC::CharacterClassConstructor::charClass):
35039        * wrec/WREC.cpp:
35040        (JSC::WRECParser::parseCharacterClass):
35041
350422008-09-10  Simon Hausmann  <hausmann@webkit.org>
35043
35044        Not reviewed but trivial one-liner for yet unused macro.
35045
35046        Changed PLATFORM(WINCE) to PLATFORM(WIN_CE) as requested by Mark.
35047
35048        (part of https://bugs.webkit.org/show_bug.cgi?id=20746)
35049
35050        * wtf/Platform.h:
35051
350522008-09-10  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
35053
35054        Rubber-stamped by Oliver Hunt.
35055
35056        Fix a typo by renaming the overloaded orl_rr that takes an immediate to
35057        orl_i32r.
35058
35059        * VM/CTI.cpp:
35060        (JSC::CTI::emitFastArithPotentiallyReTagImmediate):
35061        * masm/X86Assembler.h:
35062        (JSC::X86Assembler::orl_i32r):
35063        * wrec/WREC.cpp:
35064        (JSC::WRECGenerator::generatePatternCharacter):
35065        (JSC::WRECGenerator::generateCharacterClassInverted):
35066
350672008-09-10  Sam Weinig  <sam@webkit.org>
35068
35069        Reviewed by Geoff Garen.
35070
35071        Add inline property storage for JSObject.
35072
35073        1.2% progression on Sunspider. .5% progression on the v8 test suite.
35074
35075        * JavaScriptCore.exp:
35076        * VM/CTI.cpp:
35077        (JSC::CTI::privateCompileGetByIdProto):
35078        (JSC::CTI::privateCompileGetByIdChain):
35079        * kjs/JSObject.cpp:
35080        (JSC::JSObject::mark): There is no reason to check storageSize now that
35081        we start from 0.
35082        (JSC::JSObject::allocatePropertyStorage): Allocates/reallocates heap storage.
35083        * kjs/JSObject.h:
35084        (JSC::JSObject::offsetForLocation): m_propertyStorage is not an OwnArrayPtr
35085        now so there is no reason to .get()
35086        (JSC::JSObject::usingInlineStorage):
35087        (JSC::JSObject::JSObject): Start with m_propertyStorage pointing to the
35088        inline storage.
35089        (JSC::JSObject::~JSObject): Free the heap storage if not using the inline
35090        storage.
35091        (JSC::JSObject::putDirect): Switch to the heap storage only when we know
35092        we know that we are about to add a property that will overflow the inline
35093        storage.
35094        * kjs/PropertyMap.cpp:
35095        (JSC::PropertyMap::createTable): Don't allocate the propertyStorage, that is
35096        now handled by JSObject.
35097        (JSC::PropertyMap::rehash): PropertyStorage is not a OwnArrayPtr anymore.
35098        * kjs/PropertyMap.h:
35099        (JSC::PropertyMap::storageSize): Rename from markingCount.
35100        * kjs/StructureID.cpp:
35101        (JSC::StructureID::addPropertyTransition): Don't resize the property storage
35102        if we are using inline storage.
35103        * kjs/StructureID.h:
35104
351052008-09-10  Oliver Hunt  <oliver@apple.com>
35106
35107        Reviewed by Geoff Garen.
35108
35109        Inline immediate number version of op_mul.
35110
35111        Renamed mull_rr to imull_rr as that's what it's 
35112        actually doing, and added imull_i32r for the constant
35113        case immediate multiply.
35114
35115        1.1% improvement to SunSpider.
35116
35117        * VM/CTI.cpp:
35118        (JSC::CTI::privateCompileMainPass):
35119        (JSC::CTI::privateCompileSlowCases):
35120        * masm/X86Assembler.h:
35121        (JSC::X86Assembler::):
35122        (JSC::X86Assembler::imull_rr):
35123        (JSC::X86Assembler::imull_i32r):
35124
351252008-09-10  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
35126
35127        Not reviewed.
35128
35129        Mac build fix.
35130
35131        * JavaScriptCore.xcodeproj/project.pbxproj:
35132
351332008-09-09  Oliver Hunt  <oliver@apple.com>
35134
35135        Reviewed by Maciej Stachowiak.
35136
35137        Add optimised access to known properties on the global object.
35138
35139        Improve cross scope access to the global object by emitting
35140        code to access it directly rather than by walking the scope chain.
35141
35142        This is a 0.8% win in SunSpider and a 1.7% win in the v8 benchmarks.
35143
35144        * VM/CTI.cpp:
35145        (JSC::CTI::privateCompileMainPass):
35146        (JSC::CTI::emitGetVariableObjectRegister):
35147        (JSC::CTI::emitPutVariableObjectRegister):
35148        * VM/CTI.h:
35149        * VM/CodeBlock.cpp:
35150        (JSC::CodeBlock::dump):
35151        * VM/CodeGenerator.cpp:
35152        (JSC::CodeGenerator::findScopedProperty):
35153        (JSC::CodeGenerator::emitResolve):
35154        (JSC::CodeGenerator::emitGetScopedVar):
35155        (JSC::CodeGenerator::emitPutScopedVar):
35156        * VM/CodeGenerator.h:
35157        * VM/Machine.cpp:
35158        (JSC::Machine::privateExecute):
35159        * VM/Opcode.h:
35160        * kjs/nodes.cpp:
35161        (JSC::FunctionCallResolveNode::emitCode):
35162        (JSC::PostfixResolveNode::emitCode):
35163        (JSC::PrefixResolveNode::emitCode):
35164        (JSC::ReadModifyResolveNode::emitCode):
35165        (JSC::AssignResolveNode::emitCode):
35166
351672008-09-10  Maciej Stachowiak  <mjs@apple.com>
35168
35169        Reviewed by Oliver.
35170        
35171        - enable polymorphic inline caching of properties of primitives
35172        
35173        1.012x speedup on SunSpider.
35174
35175        We create special structure IDs for JSString and
35176        JSNumberCell. Unlike normal structure IDs, these cannot hold the
35177        true prototype. Due to JS autoboxing semantics, the prototype used
35178        when looking up string or number properties depends on the lexical
35179        global object of the call site, not the creation site. Thus we
35180        enable StructureIDs to handle this quirk for primitives.
35181        
35182        Everything else should be straightforward.
35183        
35184        * VM/CTI.cpp:
35185        (JSC::CTI::privateCompileGetByIdProto):
35186        (JSC::CTI::privateCompileGetByIdChain):
35187        * VM/CTI.h:
35188        (JSC::CTI::compileGetByIdProto):
35189        (JSC::CTI::compileGetByIdChain):
35190        * VM/JSPropertyNameIterator.h:
35191        (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
35192        * VM/Machine.cpp:
35193        (JSC::Machine::Machine):
35194        (JSC::cachePrototypeChain):
35195        (JSC::Machine::tryCachePutByID):
35196        (JSC::Machine::tryCacheGetByID):
35197        (JSC::Machine::privateExecute):
35198        (JSC::Machine::tryCTICachePutByID):
35199        (JSC::Machine::tryCTICacheGetByID):
35200        * kjs/GetterSetter.h:
35201        (JSC::GetterSetter::GetterSetter):
35202        * kjs/JSCell.h:
35203        * kjs/JSGlobalData.cpp:
35204        (JSC::JSGlobalData::JSGlobalData):
35205        * kjs/JSGlobalData.h:
35206        * kjs/JSGlobalObject.h:
35207        (JSC::StructureID::prototypeForLookup):
35208        * kjs/JSNumberCell.h:
35209        (JSC::JSNumberCell::JSNumberCell):
35210        (JSC::jsNumberCell):
35211        * kjs/JSObject.h:
35212        (JSC::JSObject::prototype):
35213        * kjs/JSString.cpp:
35214        (JSC::jsString):
35215        (JSC::jsSubstring):
35216        (JSC::jsOwnedString):
35217        * kjs/JSString.h:
35218        (JSC::JSString::JSString):
35219        (JSC::JSString::):
35220        (JSC::jsSingleCharacterString):
35221        (JSC::jsSingleCharacterSubstring):
35222        (JSC::jsNontrivialString):
35223        * kjs/SmallStrings.cpp:
35224        (JSC::SmallStrings::createEmptyString):
35225        (JSC::SmallStrings::createSingleCharacterString):
35226        * kjs/StructureID.cpp:
35227        (JSC::StructureID::StructureID):
35228        (JSC::StructureID::addPropertyTransition):
35229        (JSC::StructureID::getterSetterTransition):
35230        (JSC::StructureIDChain::StructureIDChain):
35231        * kjs/StructureID.h:
35232        (JSC::StructureID::create):
35233        (JSC::StructureID::storedPrototype):
35234
352352008-09-09  Joerg Bornemann  <joerg.bornemann@trolltech.com>
35236
35237        Reviewed by Sam Weinig.
35238
35239        https://bugs.webkit.org/show_bug.cgi?id=20746
35240
35241        Added WINCE platform macro.
35242
35243        * wtf/Platform.h:
35244
352452008-09-09  Sam Weinig  <sam@webkit.org>
35246
35247        Reviewed by Mark Rowe.
35248
35249        Remove unnecessary override of getOffset.
35250
35251        Sunspider reports this as a .6% progression.
35252
35253        * JavaScriptCore.exp:
35254        * kjs/JSObject.h:
35255        (JSC::JSObject::getDirectLocation):
35256        (JSC::JSObject::getOwnPropertySlotForWrite):
35257        (JSC::JSObject::putDirect):
35258        * kjs/PropertyMap.cpp:
35259        * kjs/PropertyMap.h:
35260
352612008-09-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
35262
35263        Reviewed by Maciej Stachowiak.
35264
35265        Bug 20759: Remove MacroAssembler
35266        <https://bugs.webkit.org/show_bug.cgi?id=20759>
35267
35268        Remove MacroAssembler and move its functionality to X86Assembler.
35269
35270        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
35271        * JavaScriptCore.xcodeproj/project.pbxproj:
35272        * VM/CTI.cpp:
35273        (JSC::CTI::emitGetArg):
35274        (JSC::CTI::emitGetPutArg):
35275        (JSC::CTI::emitPutArg):
35276        (JSC::CTI::emitPutCTIParam):
35277        (JSC::CTI::emitGetCTIParam):
35278        (JSC::CTI::emitPutToCallFrameHeader):
35279        (JSC::CTI::emitGetFromCallFrameHeader):
35280        (JSC::CTI::emitPutResult):
35281        (JSC::CTI::emitDebugExceptionCheck):
35282        (JSC::CTI::emitJumpSlowCaseIfNotImm):
35283        (JSC::CTI::emitJumpSlowCaseIfNotImms):
35284        (JSC::CTI::emitFastArithDeTagImmediate):
35285        (JSC::CTI::emitFastArithReTagImmediate):
35286        (JSC::CTI::emitFastArithPotentiallyReTagImmediate):
35287        (JSC::CTI::emitFastArithImmToInt):
35288        (JSC::CTI::emitFastArithIntToImmOrSlowCase):
35289        (JSC::CTI::emitFastArithIntToImmNoCheck):
35290        (JSC::CTI::compileOpCall):
35291        (JSC::CTI::emitSlowScriptCheck):
35292        (JSC::CTI::privateCompileMainPass):
35293        (JSC::CTI::privateCompileSlowCases):
35294        (JSC::CTI::privateCompile):
35295        (JSC::CTI::privateCompileGetByIdSelf):
35296        (JSC::CTI::privateCompileGetByIdProto):
35297        (JSC::CTI::privateCompileGetByIdChain):
35298        (JSC::CTI::privateCompilePutByIdReplace):
35299        (JSC::CTI::privateArrayLengthTrampoline):
35300        (JSC::CTI::privateStringLengthTrampoline):
35301        (JSC::CTI::compileRegExp):
35302        * VM/CTI.h:
35303        (JSC::CallRecord::CallRecord):
35304        (JSC::JmpTable::JmpTable):
35305        (JSC::SlowCaseEntry::SlowCaseEntry):
35306        (JSC::CTI::JSRInfo::JSRInfo):
35307        * masm/MacroAssembler.h: Removed.
35308        * masm/MacroAssemblerWin.cpp: Removed.
35309        * masm/X86Assembler.h:
35310        (JSC::X86Assembler::emitConvertToFastCall):
35311        (JSC::X86Assembler::emitRestoreArgumentReference):
35312        * wrec/WREC.h:
35313        (JSC::WRECGenerator::WRECGenerator):
35314        (JSC::WRECParser::WRECParser):
35315
353162008-09-09  Sam Weinig  <sam@webkit.org>
35317
35318        Reviewed by Cameron Zwarich.
35319
35320        Don't waste the first item in the PropertyStorage.
35321
35322        - Fix typo (makingCount -> markingCount)
35323        - Remove undefined method declaration.
35324
35325        No change on Sunspider.
35326
35327        * kjs/JSObject.cpp:
35328        (JSC::JSObject::mark):
35329        * kjs/PropertyMap.cpp:
35330        (JSC::PropertyMap::put):
35331        (JSC::PropertyMap::remove):
35332        (JSC::PropertyMap::getOffset):
35333        (JSC::PropertyMap::insert):
35334        (JSC::PropertyMap::rehash):
35335        (JSC::PropertyMap::resizePropertyStorage):
35336        (JSC::PropertyMap::checkConsistency):
35337        * kjs/PropertyMap.h:
35338        (JSC::PropertyMap::markingCount): Fix typo.
35339
353402008-09-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
35341
35342        Not reviewed.
35343
35344        Speculative Windows build fix.
35345
35346        * masm/MacroAssemblerWin.cpp:
35347        (JSC::MacroAssembler::emitConvertToFastCall):
35348        (JSC::MacroAssembler::emitRestoreArgumentReference):
35349
353502008-09-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
35351
35352        Reviewed by Maciej Stachowiak.
35353
35354        Bug 20755: Create an X86 namespace for register names and other things
35355        <https://bugs.webkit.org/show_bug.cgi?id=20755>
35356
35357        Create an X86 namespace to put X86 register names. Perhaps I will move
35358        opcode names here later as well.
35359
35360        * VM/CTI.cpp:
35361        (JSC::CTI::emitGetArg):
35362        (JSC::CTI::emitGetPutArg):
35363        (JSC::CTI::emitPutArg):
35364        (JSC::CTI::emitPutArgConstant):
35365        (JSC::CTI::emitPutCTIParam):
35366        (JSC::CTI::emitGetCTIParam):
35367        (JSC::CTI::emitPutToCallFrameHeader):
35368        (JSC::CTI::emitGetFromCallFrameHeader):
35369        (JSC::CTI::emitPutResult):
35370        (JSC::CTI::emitDebugExceptionCheck):
35371        (JSC::CTI::emitJumpSlowCaseIfNotImms):
35372        (JSC::CTI::compileOpCall):
35373        (JSC::CTI::emitSlowScriptCheck):
35374        (JSC::CTI::privateCompileMainPass):
35375        (JSC::CTI::privateCompileSlowCases):
35376        (JSC::CTI::privateCompile):
35377        (JSC::CTI::privateCompileGetByIdSelf):
35378        (JSC::CTI::privateCompileGetByIdProto):
35379        (JSC::CTI::privateCompileGetByIdChain):
35380        (JSC::CTI::privateCompilePutByIdReplace):
35381        (JSC::CTI::privateArrayLengthTrampoline):
35382        (JSC::CTI::privateStringLengthTrampoline):
35383        (JSC::CTI::compileRegExp):
35384        * VM/CTI.h:
35385        * masm/X86Assembler.h:
35386        (JSC::X86::):
35387        (JSC::X86Assembler::emitModRm_rm):
35388        (JSC::X86Assembler::emitModRm_rm_Unchecked):
35389        (JSC::X86Assembler::emitModRm_rmsib):
35390        * wrec/WREC.cpp:
35391        (JSC::WRECGenerator::generateNonGreedyQuantifier):
35392        (JSC::WRECGenerator::generateGreedyQuantifier):
35393        (JSC::WRECGenerator::generateParentheses):
35394        (JSC::WRECGenerator::generateBackreference):
35395        (JSC::WRECGenerator::gernerateDisjunction):
35396        * wrec/WREC.h:
35397
353982008-09-09  Sam Weinig  <sam@webkit.org>
35399
35400        Reviewed by Geoffrey Garen.
35401
35402        Remove unnecessary friend declaration.
35403
35404        * kjs/PropertyMap.h:
35405
354062008-09-09  Sam Weinig  <sam@webkit.org>
35407
35408        Reviewed by Geoffrey Garen.
35409
35410        Replace uses of PropertyMap::get and PropertyMap::getLocation with
35411        PropertyMap::getOffset.
35412
35413        Sunspider reports this as a .6% improvement.
35414
35415        * JavaScriptCore.exp:
35416        * kjs/JSObject.cpp:
35417        (JSC::JSObject::put):
35418        (JSC::JSObject::deleteProperty):
35419        (JSC::JSObject::getPropertyAttributes):
35420        * kjs/JSObject.h:
35421        (JSC::JSObject::getDirect):
35422        (JSC::JSObject::getDirectLocation):
35423        (JSC::JSObject::locationForOffset):
35424        * kjs/PropertyMap.cpp:
35425        (JSC::PropertyMap::remove):
35426        (JSC::PropertyMap::getOffset):
35427        * kjs/PropertyMap.h:
35428
354292008-09-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
35430
35431        Reviewed by Sam Weinig.
35432
35433        Bug 20754: Remove emit prefix from assembler opcode methods
35434        <https://bugs.webkit.org/show_bug.cgi?id=20754>
35435
35436        * VM/CTI.cpp:
35437        (JSC::CTI::emitGetArg):
35438        (JSC::CTI::emitGetPutArg):
35439        (JSC::CTI::emitPutArg):
35440        (JSC::CTI::emitPutArgConstant):
35441        (JSC::CTI::emitPutCTIParam):
35442        (JSC::CTI::emitGetCTIParam):
35443        (JSC::CTI::emitPutToCallFrameHeader):
35444        (JSC::CTI::emitGetFromCallFrameHeader):
35445        (JSC::CTI::emitPutResult):
35446        (JSC::CTI::emitDebugExceptionCheck):
35447        (JSC::CTI::emitCall):
35448        (JSC::CTI::emitJumpSlowCaseIfNotImm):
35449        (JSC::CTI::emitJumpSlowCaseIfNotImms):
35450        (JSC::CTI::emitFastArithDeTagImmediate):
35451        (JSC::CTI::emitFastArithReTagImmediate):
35452        (JSC::CTI::emitFastArithPotentiallyReTagImmediate):
35453        (JSC::CTI::emitFastArithImmToInt):
35454        (JSC::CTI::emitFastArithIntToImmOrSlowCase):
35455        (JSC::CTI::emitFastArithIntToImmNoCheck):
35456        (JSC::CTI::compileOpCall):
35457        (JSC::CTI::emitSlowScriptCheck):
35458        (JSC::CTI::privateCompileMainPass):
35459        (JSC::CTI::privateCompileSlowCases):
35460        (JSC::CTI::privateCompile):
35461        (JSC::CTI::privateCompileGetByIdSelf):
35462        (JSC::CTI::privateCompileGetByIdProto):
35463        (JSC::CTI::privateCompileGetByIdChain):
35464        (JSC::CTI::privateCompilePutByIdReplace):
35465        (JSC::CTI::privateArrayLengthTrampoline):
35466        (JSC::CTI::privateStringLengthTrampoline):
35467        (JSC::CTI::compileRegExp):
35468        * masm/MacroAssemblerWin.cpp:
35469        (JSC::MacroAssembler::emitConvertToFastCall):
35470        (JSC::MacroAssembler::emitRestoreArgumentReference):
35471        * masm/X86Assembler.h:
35472        (JSC::X86Assembler::pushl_r):
35473        (JSC::X86Assembler::pushl_m):
35474        (JSC::X86Assembler::popl_r):
35475        (JSC::X86Assembler::popl_m):
35476        (JSC::X86Assembler::movl_rr):
35477        (JSC::X86Assembler::addl_rr):
35478        (JSC::X86Assembler::addl_i8r):
35479        (JSC::X86Assembler::addl_i32r):
35480        (JSC::X86Assembler::addl_mr):
35481        (JSC::X86Assembler::andl_rr):
35482        (JSC::X86Assembler::andl_i32r):
35483        (JSC::X86Assembler::cmpl_i8r):
35484        (JSC::X86Assembler::cmpl_rr):
35485        (JSC::X86Assembler::cmpl_rm):
35486        (JSC::X86Assembler::cmpl_i32r):
35487        (JSC::X86Assembler::cmpl_i32m):
35488        (JSC::X86Assembler::cmpw_rm):
35489        (JSC::X86Assembler::orl_rr):
35490        (JSC::X86Assembler::subl_rr):
35491        (JSC::X86Assembler::subl_i8r):
35492        (JSC::X86Assembler::subl_i32r):
35493        (JSC::X86Assembler::subl_mr):
35494        (JSC::X86Assembler::testl_i32r):
35495        (JSC::X86Assembler::testl_rr):
35496        (JSC::X86Assembler::xorl_i8r):
35497        (JSC::X86Assembler::xorl_rr):
35498        (JSC::X86Assembler::sarl_i8r):
35499        (JSC::X86Assembler::sarl_CLr):
35500        (JSC::X86Assembler::shl_i8r):
35501        (JSC::X86Assembler::shll_CLr):
35502        (JSC::X86Assembler::mull_rr):
35503        (JSC::X86Assembler::idivl_r):
35504        (JSC::X86Assembler::cdq):
35505        (JSC::X86Assembler::movl_mr):
35506        (JSC::X86Assembler::movzwl_mr):
35507        (JSC::X86Assembler::movl_rm):
35508        (JSC::X86Assembler::movl_i32r):
35509        (JSC::X86Assembler::movl_i32m):
35510        (JSC::X86Assembler::leal_mr):
35511        (JSC::X86Assembler::ret):
35512        (JSC::X86Assembler::jmp_r):
35513        (JSC::X86Assembler::jmp_m):
35514        (JSC::X86Assembler::call_r):
35515        * wrec/WREC.cpp:
35516        (JSC::WRECGenerator::generateBacktrack1):
35517        (JSC::WRECGenerator::generateBacktrackBackreference):
35518        (JSC::WRECGenerator::generateBackreferenceQuantifier):
35519        (JSC::WRECGenerator::generateNonGreedyQuantifier):
35520        (JSC::WRECGenerator::generateGreedyQuantifier):
35521        (JSC::WRECGenerator::generatePatternCharacter):
35522        (JSC::WRECGenerator::generateCharacterClassInvertedRange):
35523        (JSC::WRECGenerator::generateCharacterClassInverted):
35524        (JSC::WRECGenerator::generateCharacterClass):
35525        (JSC::WRECGenerator::generateParentheses):
35526        (JSC::WRECGenerator::gererateParenthesesResetTrampoline):
35527        (JSC::WRECGenerator::generateAssertionBOL):
35528        (JSC::WRECGenerator::generateAssertionEOL):
35529        (JSC::WRECGenerator::generateAssertionWordBoundary):
35530        (JSC::WRECGenerator::generateBackreference):
35531        (JSC::WRECGenerator::gernerateDisjunction):
35532
355332008-09-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
35534
35535        Reviewed by Maciej Stachowiak.
35536
35537        Clean up the WREC code some more.
35538
35539        * VM/CTI.cpp:
35540        (JSC::CTI::compileRegExp):
35541        * wrec/WREC.cpp:
35542        (JSC::getCharacterClassNewline):
35543        (JSC::getCharacterClassDigits):
35544        (JSC::getCharacterClassSpaces):
35545        (JSC::getCharacterClassWordchar):
35546        (JSC::getCharacterClassNondigits):
35547        (JSC::getCharacterClassNonspaces):
35548        (JSC::getCharacterClassNonwordchar):
35549        (JSC::WRECGenerator::generateBacktrack1):
35550        (JSC::WRECGenerator::generateBacktrackBackreference):
35551        (JSC::WRECGenerator::generateBackreferenceQuantifier):
35552        (JSC::WRECGenerator::generateNonGreedyQuantifier):
35553        (JSC::WRECGenerator::generateGreedyQuantifier):
35554        (JSC::WRECGenerator::generatePatternCharacter):
35555        (JSC::WRECGenerator::generateCharacterClassInvertedRange):
35556        (JSC::WRECGenerator::generateCharacterClassInverted):
35557        (JSC::WRECGenerator::generateCharacterClass):
35558        (JSC::WRECGenerator::generateParentheses):
35559        (JSC::WRECGenerator::gererateParenthesesResetTrampoline):
35560        (JSC::WRECGenerator::generateAssertionBOL):
35561        (JSC::WRECGenerator::generateAssertionEOL):
35562        (JSC::WRECGenerator::generateAssertionWordBoundary):
35563        (JSC::WRECGenerator::generateBackreference):
35564        (JSC::WRECGenerator::gernerateDisjunction):
35565        (JSC::WRECParser::parseCharacterClass):
35566        (JSC::WRECParser::parseEscape):
35567        (JSC::WRECParser::parseTerm):
35568        * wrec/WREC.h:
35569
355702008-09-09  Mark Rowe  <mrowe@apple.com>
35571
35572        Build fix, rubber-stamped by Anders Carlsson.
35573
35574        Silence spurious build warnings about missing format attributes on functions in Assertions.cpp.
35575
35576        * JavaScriptCore.xcodeproj/project.pbxproj:
35577
355782008-09-09  Mark Rowe  <mrowe@apple.com>
35579
35580        Rubber-stamped by Oliver Hunt.
35581
35582        Fix builds using the "debug" variant.
35583
35584        This reverts r36130 and tweaks Identifier to export the same symbols for Debug
35585        and Release configurations.
35586
35587        * Configurations/JavaScriptCore.xcconfig:
35588        * DerivedSources.make:
35589        * JavaScriptCore.Debug.exp: Removed.
35590        * JavaScriptCore.base.exp: Removed.
35591        * JavaScriptCore.exp: Added.
35592        * JavaScriptCore.xcodeproj/project.pbxproj:
35593        * kjs/identifier.cpp:
35594        (JSC::Identifier::addSlowCase): #ifdef the call to checkSameIdentifierTable so that
35595        there is no overhead in Release builds.
35596        (JSC::Identifier::checkSameIdentifierTable): Add empty functions for Release builds.
35597        * kjs/identifier.h:
35598        (JSC::Identifier::add): #ifdef the calls to checkSameIdentifierTable so that there is
35599        no overhead in Release builds, and remove the inline definitions of checkSameIdentifierTable.
35600
356012008-09-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
35602
35603        Reviewed by Maciej Stachowiak.
35604
35605        Clean up WREC a bit to bring it closer to our coding style guidelines.
35606
35607        * wrec/WREC.cpp:
35608        (JSC::):
35609        (JSC::getCharacterClass_newline):
35610        (JSC::getCharacterClass_d):
35611        (JSC::getCharacterClass_s):
35612        (JSC::getCharacterClass_w):
35613        (JSC::getCharacterClass_D):
35614        (JSC::getCharacterClass_S):
35615        (JSC::getCharacterClass_W):
35616        (JSC::CharacterClassConstructor::append):
35617        (JSC::WRECGenerator::generateNonGreedyQuantifier):
35618        (JSC::WRECGenerator::generateGreedyQuantifier):
35619        (JSC::WRECGenerator::generateCharacterClassInverted):
35620        (JSC::WRECParser::parseQuantifier):
35621        (JSC::WRECParser::parsePatternCharacterQualifier):
35622        (JSC::WRECParser::parseCharacterClassQuantifier):
35623        (JSC::WRECParser::parseBackreferenceQuantifier):
35624        * wrec/WREC.h:
35625        (JSC::Quantifier::):
35626        (JSC::Quantifier::Quantifier):
35627
356282008-09-09  Jungshik Shin  <jungshik.shin@gmail.com>
35629
35630        Reviewed by Alexey Proskuryakov.
35631
35632        Try MIME charset names before trying IANA names 
35633        ( https://bugs.webkit.org/show_bug.cgi?id=17537 )
35634
35635        * wtf/StringExtras.h: (strcasecmp): Added.
35636
356372008-09-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
35638
35639        Reviewed by Mark Rowe.
35640
35641        Bug 20719: REGRESSION (r36135-36244): Hangs, then crashes after several seconds
35642        <https://bugs.webkit.org/show_bug.cgi?id=20719>
35643        <rdar://problem/6205787>
35644
35645        Fix a typo in the case-insensitive matching of character patterns.
35646
35647        * wrec/WREC.cpp:
35648        (JSC::WRECGenerator::generatePatternCharacter):
35649
356502008-09-09  Maciej Stachowiak  <mjs@apple.com>
35651
35652        Reviewed by Sam Weinig.
35653        
35654        - allow polymorphic inline cache to handle Math object functions and possibly other similar things
35655        
35656        1.012x speedup on SunSpider.
35657
35658        * kjs/MathObject.cpp:
35659        (JSC::MathObject::getOwnPropertySlot):
35660        * kjs/lookup.cpp:
35661        (JSC::setUpStaticFunctionSlot):
35662        * kjs/lookup.h:
35663        (JSC::getStaticPropertySlot):
35664
356652008-09-08  Sam Weinig  <sam@webkit.org>
35666
35667        Reviewed by Maciej Stachowiak and Oliver Hunt.
35668
35669        Split storage of properties out of the PropertyMap and into the JSObject
35670        to allow sharing PropertyMap on the StructureID.  In order to get this
35671        function correctly, the StructureID's transition mappings were changed to
35672        transition based on property name and attribute pairs, instead of just
35673        property name.
35674
35675        - Removes the single property optimization now that the PropertyMap is shared.
35676          This will be replaced by in-lining some values on the JSObject.
35677
35678        This is a wash on Sunspider and a 6.7% win on the v8 test suite.
35679
35680        * JavaScriptCore.base.exp:
35681        * VM/CTI.cpp:
35682        (JSC::CTI::privateCompileGetByIdSelf): Get the storage directly off the JSObject.
35683        (JSC::CTI::privateCompileGetByIdProto): Ditto.
35684        (JSC::CTI::privateCompileGetByIdChain): Ditto.
35685        (JSC::CTI::privateCompilePutByIdReplace): Ditto.
35686        * kjs/JSObject.cpp:
35687        (JSC::JSObject::mark): Mark the PropertyStorage.
35688        (JSC::JSObject::put): Update to get the propertyMap of the StructureID.
35689        (JSC::JSObject::deleteProperty): Ditto.
35690        (JSC::JSObject::defineGetter): Return early if the property is already a getter/setter.
35691        (JSC::JSObject::defineSetter): Ditto.
35692        (JSC::JSObject::getPropertyAttributes): Update to get the propertyMap of the StructureID
35693        (JSC::JSObject::getPropertyNames): Ditto.
35694        (JSC::JSObject::removeDirect): Ditto.
35695        * kjs/JSObject.h: Remove PropertyMap and add PropertyStorage.
35696        (JSC::JSObject::propertyStorage): return the PropertyStorage.
35697        (JSC::JSObject::getDirect): Update to get the propertyMap of the StructureID.
35698        (JSC::JSObject::getDirectLocation): Ditto.
35699        (JSC::JSObject::offsetForLocation): Compute location directly.
35700        (JSC::JSObject::hasCustomProperties): Update to get the propertyMap of the StructureID.
35701        (JSC::JSObject::hasGetterSetterProperties): Ditto.
35702        (JSC::JSObject::getDirectOffset): Get by indexing into PropertyStorage.
35703        (JSC::JSObject::putDirectOffset): Put by indexing into PropertyStorage.
35704        (JSC::JSObject::getOwnPropertySlotForWrite): Update to get the propertyMap of the StructureID.
35705        (JSC::JSObject::getOwnPropertySlot): Ditto.
35706        (JSC::JSObject::putDirect): Move putting into the StructureID unless the property already exists.
35707        * kjs/PropertyMap.cpp: Use the propertyStorage as the storage for the JSValues.
35708        (JSC::PropertyMap::checkConsistency): 
35709        (JSC::PropertyMap::operator=):
35710        (JSC::PropertyMap::~PropertyMap):
35711        (JSC::PropertyMap::get):
35712        (JSC::PropertyMap::getLocation):
35713        (JSC::PropertyMap::put):
35714        (JSC::PropertyMap::getOffset):
35715        (JSC::PropertyMap::insert):
35716        (JSC::PropertyMap::expand):
35717        (JSC::PropertyMap::rehash):
35718        (JSC::PropertyMap::createTable):
35719        (JSC::PropertyMap::resizePropertyStorage): Resize the storage to match the size of the map
35720        (JSC::PropertyMap::remove):
35721        (JSC::PropertyMap::getEnumerablePropertyNames):
35722        * kjs/PropertyMap.h: 
35723        (JSC::PropertyMapEntry::PropertyMapEntry):
35724        (JSC::PropertyMap::isEmpty):
35725        (JSC::PropertyMap::size):
35726        (JSC::PropertyMap::makingCount):
35727        (JSC::PropertyMap::PropertyMap):
35728
35729        * kjs/StructureID.cpp: 
35730        (JSC::StructureID::addPropertyTransition): Transitions now are based off the property name
35731        and attributes. 
35732        (JSC::StructureID::toDictionaryTransition): Copy the map.
35733        (JSC::StructureID::changePrototypeTransition): Copy the map.
35734        (JSC::StructureID::getterSetterTransition): Copy the map.
35735        (JSC::StructureID::~StructureID): 
35736        * kjs/StructureID.h:
35737        (JSC::TransitionTableHash::hash): Custom hash for transition map.
35738        (JSC::TransitionTableHash::equal): Ditto.
35739        (JSC::TransitionTableHashTraits::emptyValue): Custom traits for transition map
35740        (JSC::TransitionTableHashTraits::constructDeletedValue): Ditto.
35741        (JSC::TransitionTableHashTraits::isDeletedValue): Ditto.
35742        (JSC::StructureID::propertyMap): Added.
35743
357442008-09-08  Oliver Hunt  <oliver@apple.com>
35745
35746        Reviewed by Mark Rowe.
35747
35748        Bug 20694: Slow Script error pops up when running Dromaeo tests
35749
35750        Correct error in timeout logic where execution tick count would
35751        be reset to incorrect value due to incorrect offset and indirection.
35752        Codegen for the slow script dialog was factored out into a separate
35753        method (emitSlowScriptCheck) rather than having multiple copies of
35754        the same code.  Also added calls to generate slow script checks
35755        for loop_if_less and loop_if_true opcodes.
35756
35757        * VM/CTI.cpp:
35758        (JSC::CTI::emitSlowScriptCheck):
35759        (JSC::CTI::privateCompileMainPass):
35760        (JSC::CTI::privateCompileSlowCases):
35761        * VM/CTI.h:
35762
357632008-09-08  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
35764
35765        Reviewed by Maciej Stachowiak.
35766
35767        Remove references to the removed WRECompiler class.
35768
35769        * VM/Machine.h:
35770        * wrec/WREC.h:
35771
357722008-09-08  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
35773
35774        Rubber-stamped by Mark Rowe.
35775
35776        Fix the build with CTI enabled but WREC disabled.
35777
35778        * VM/CTI.cpp:
35779        * VM/CTI.h:
35780
357812008-09-08  Dan Bernstein  <mitz@apple.com>
35782
35783        - build fix
35784
35785        * kjs/nodes.h:
35786        (JSC::StatementNode::):
35787        (JSC::BlockNode::):
35788
357892008-09-08  Kevin McCullough  <kmccullough@apple.com>
35790
35791        Reviewed by Geoff.
35792
35793       <rdar://problem/6134407> Breakpoints in for loops, while loops or
35794       conditions without curly braces don't break. (19306)
35795       -Statement Lists already emit debug hooks but conditionals without
35796       brackets are not lists.
35797
35798        * kjs/nodes.cpp:
35799        (KJS::IfNode::emitCode):
35800        (KJS::IfElseNode::emitCode):
35801        (KJS::DoWhileNode::emitCode):
35802        (KJS::WhileNode::emitCode):
35803        (KJS::ForNode::emitCode):
35804        (KJS::ForInNode::emitCode):
35805        * kjs/nodes.h:
35806        (KJS::StatementNode::):
35807        (KJS::BlockNode::):
35808
358092008-09-08  Maciej Stachowiak  <mjs@apple.com>
35810
35811        Reviewed by Anders Carlsson.
35812        
35813        - Cache the code generated for eval to speed up SunSpider and web sites
35814        https://bugs.webkit.org/show_bug.cgi?id=20718
35815        
35816        1.052x on SunSpider
35817        2.29x on date-format-tofte
35818        
35819        Lots of real sites seem to get many hits on this cache as well,
35820        including GMail, Google Spreadsheets, Slate and Digg (the last of
35821        these gets over 100 hits on initial page load).
35822
35823        * VM/CodeBlock.h:
35824        (JSC::EvalCodeCache::get):
35825        * VM/Machine.cpp:
35826        (JSC::Machine::callEval):
35827        (JSC::Machine::privateExecute):
35828        (JSC::Machine::cti_op_call_eval):
35829        * VM/Machine.h:
35830
358312008-09-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
35832
35833        Reviewed by Oliver Hunt.
35834
35835        Bug 20711: Change KJS prefix on preprocessor macros to JSC
35836        <https://bugs.webkit.org/show_bug.cgi?id=20711>
35837
35838        * kjs/CommonIdentifiers.cpp:
35839        (JSC::CommonIdentifiers::CommonIdentifiers):
35840        * kjs/CommonIdentifiers.h:
35841        * kjs/PropertySlot.h:
35842        (JSC::PropertySlot::getValue):
35843        (JSC::PropertySlot::putValue):
35844        (JSC::PropertySlot::setValueSlot):
35845        (JSC::PropertySlot::setValue):
35846        (JSC::PropertySlot::setRegisterSlot):
35847        * kjs/lookup.h:
35848        * kjs/nodes.cpp:
35849        * kjs/nodes.h:
35850        (JSC::Node::):
35851        (JSC::ExpressionNode::):
35852        (JSC::StatementNode::):
35853        (JSC::NullNode::):
35854        (JSC::BooleanNode::):
35855        (JSC::NumberNode::):
35856        (JSC::ImmediateNumberNode::):
35857        (JSC::StringNode::):
35858        (JSC::RegExpNode::):
35859        (JSC::ThisNode::):
35860        (JSC::ResolveNode::):
35861        (JSC::ElementNode::):
35862        (JSC::ArrayNode::):
35863        (JSC::PropertyNode::):
35864        (JSC::PropertyListNode::):
35865        (JSC::ObjectLiteralNode::):
35866        (JSC::BracketAccessorNode::):
35867        (JSC::DotAccessorNode::):
35868        (JSC::ArgumentListNode::):
35869        (JSC::ArgumentsNode::):
35870        (JSC::NewExprNode::):
35871        (JSC::EvalFunctionCallNode::):
35872        (JSC::FunctionCallValueNode::):
35873        (JSC::FunctionCallResolveNode::):
35874        (JSC::FunctionCallBracketNode::):
35875        (JSC::FunctionCallDotNode::):
35876        (JSC::PrePostResolveNode::):
35877        (JSC::PostfixResolveNode::):
35878        (JSC::PostfixBracketNode::):
35879        (JSC::PostfixDotNode::):
35880        (JSC::PostfixErrorNode::):
35881        (JSC::DeleteResolveNode::):
35882        (JSC::DeleteBracketNode::):
35883        (JSC::DeleteDotNode::):
35884        (JSC::DeleteValueNode::):
35885        (JSC::VoidNode::):
35886        (JSC::TypeOfResolveNode::):
35887        (JSC::TypeOfValueNode::):
35888        (JSC::PrefixResolveNode::):
35889        (JSC::PrefixBracketNode::):
35890        (JSC::PrefixDotNode::):
35891        (JSC::PrefixErrorNode::):
35892        (JSC::UnaryPlusNode::):
35893        (JSC::NegateNode::):
35894        (JSC::BitwiseNotNode::):
35895        (JSC::LogicalNotNode::):
35896        (JSC::MultNode::):
35897        (JSC::DivNode::):
35898        (JSC::ModNode::):
35899        (JSC::AddNode::):
35900        (JSC::SubNode::):
35901        (JSC::LeftShiftNode::):
35902        (JSC::RightShiftNode::):
35903        (JSC::UnsignedRightShiftNode::):
35904        (JSC::LessNode::):
35905        (JSC::GreaterNode::):
35906        (JSC::LessEqNode::):
35907        (JSC::GreaterEqNode::):
35908        (JSC::ThrowableBinaryOpNode::):
35909        (JSC::InstanceOfNode::):
35910        (JSC::InNode::):
35911        (JSC::EqualNode::):
35912        (JSC::NotEqualNode::):
35913        (JSC::StrictEqualNode::):
35914        (JSC::NotStrictEqualNode::):
35915        (JSC::BitAndNode::):
35916        (JSC::BitOrNode::):
35917        (JSC::BitXOrNode::):
35918        (JSC::LogicalOpNode::):
35919        (JSC::ConditionalNode::):
35920        (JSC::ReadModifyResolveNode::):
35921        (JSC::AssignResolveNode::):
35922        (JSC::ReadModifyBracketNode::):
35923        (JSC::AssignBracketNode::):
35924        (JSC::AssignDotNode::):
35925        (JSC::ReadModifyDotNode::):
35926        (JSC::AssignErrorNode::):
35927        (JSC::CommaNode::):
35928        (JSC::VarDeclCommaNode::):
35929        (JSC::ConstDeclNode::):
35930        (JSC::ConstStatementNode::):
35931        (JSC::EmptyStatementNode::):
35932        (JSC::DebuggerStatementNode::):
35933        (JSC::ExprStatementNode::):
35934        (JSC::VarStatementNode::):
35935        (JSC::IfNode::):
35936        (JSC::IfElseNode::):
35937        (JSC::DoWhileNode::):
35938        (JSC::WhileNode::):
35939        (JSC::ForNode::):
35940        (JSC::ContinueNode::):
35941        (JSC::BreakNode::):
35942        (JSC::ReturnNode::):
35943        (JSC::WithNode::):
35944        (JSC::LabelNode::):
35945        (JSC::ThrowNode::):
35946        (JSC::TryNode::):
35947        (JSC::ParameterNode::):
35948        (JSC::ScopeNode::):
35949        (JSC::ProgramNode::):
35950        (JSC::EvalNode::):
35951        (JSC::FunctionBodyNode::):
35952        (JSC::FuncExprNode::):
35953        (JSC::FuncDeclNode::):
35954        (JSC::CaseClauseNode::):
35955        (JSC::ClauseListNode::):
35956        (JSC::CaseBlockNode::):
35957        (JSC::SwitchNode::):
35958
359592008-09-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
35960
35961        Reviewed by Maciej Stachowiak.
35962
35963        Bug 20704: Replace the KJS namespace
35964        <https://bugs.webkit.org/show_bug.cgi?id=20704>
35965
35966        Rename the KJS namespace to JSC. There are still some uses of KJS in
35967        preprocessor macros and comments, but these will also be changed some
35968        time in the near future.
35969
35970        * API/APICast.h:
35971        (toJS):
35972        (toRef):
35973        (toGlobalRef):
35974        * API/JSBase.cpp:
35975        * API/JSCallbackConstructor.cpp:
35976        * API/JSCallbackConstructor.h:
35977        * API/JSCallbackFunction.cpp:
35978        * API/JSCallbackFunction.h:
35979        * API/JSCallbackObject.cpp:
35980        * API/JSCallbackObject.h:
35981        * API/JSCallbackObjectFunctions.h:
35982        * API/JSClassRef.cpp:
35983        (OpaqueJSClass::staticValues):
35984        (OpaqueJSClass::staticFunctions):
35985        * API/JSClassRef.h:
35986        * API/JSContextRef.cpp:
35987        * API/JSObjectRef.cpp:
35988        * API/JSProfilerPrivate.cpp:
35989        * API/JSStringRef.cpp:
35990        * API/JSValueRef.cpp:
35991        (JSValueGetType):
35992        * API/OpaqueJSString.cpp:
35993        * API/OpaqueJSString.h:
35994        * JavaScriptCore.Debug.exp:
35995        * JavaScriptCore.base.exp:
35996        * VM/CTI.cpp:
35997        (JSC::):
35998        * VM/CTI.h:
35999        * VM/CodeBlock.cpp:
36000        * VM/CodeBlock.h:
36001        * VM/CodeGenerator.cpp:
36002        * VM/CodeGenerator.h:
36003        * VM/ExceptionHelpers.cpp:
36004        * VM/ExceptionHelpers.h:
36005        * VM/Instruction.h:
36006        * VM/JSPropertyNameIterator.cpp:
36007        * VM/JSPropertyNameIterator.h:
36008        * VM/LabelID.h:
36009        * VM/Machine.cpp:
36010        * VM/Machine.h:
36011        * VM/Opcode.cpp:
36012        * VM/Opcode.h:
36013        * VM/Register.h:
36014        (WTF::):
36015        * VM/RegisterFile.cpp:
36016        * VM/RegisterFile.h:
36017        * VM/RegisterID.h:
36018        (WTF::):
36019        * VM/SamplingTool.cpp:
36020        * VM/SamplingTool.h:
36021        * VM/SegmentedVector.h:
36022        * kjs/ArgList.cpp:
36023        * kjs/ArgList.h:
36024        * kjs/Arguments.cpp:
36025        * kjs/Arguments.h:
36026        * kjs/ArrayConstructor.cpp:
36027        * kjs/ArrayConstructor.h:
36028        * kjs/ArrayPrototype.cpp:
36029        * kjs/ArrayPrototype.h:
36030        * kjs/BatchedTransitionOptimizer.h:
36031        * kjs/BooleanConstructor.cpp:
36032        * kjs/BooleanConstructor.h:
36033        * kjs/BooleanObject.cpp:
36034        * kjs/BooleanObject.h:
36035        * kjs/BooleanPrototype.cpp:
36036        * kjs/BooleanPrototype.h:
36037        * kjs/CallData.cpp:
36038        * kjs/CallData.h:
36039        * kjs/ClassInfo.h:
36040        * kjs/CommonIdentifiers.cpp:
36041        * kjs/CommonIdentifiers.h:
36042        * kjs/ConstructData.cpp:
36043        * kjs/ConstructData.h:
36044        * kjs/DateConstructor.cpp:
36045        * kjs/DateConstructor.h:
36046        * kjs/DateInstance.cpp:
36047        (JSC::DateInstance::msToGregorianDateTime):
36048        * kjs/DateInstance.h:
36049        * kjs/DateMath.cpp:
36050        * kjs/DateMath.h:
36051        * kjs/DatePrototype.cpp:
36052        * kjs/DatePrototype.h:
36053        * kjs/DebuggerCallFrame.cpp:
36054        * kjs/DebuggerCallFrame.h:
36055        * kjs/Error.cpp:
36056        * kjs/Error.h:
36057        * kjs/ErrorConstructor.cpp:
36058        * kjs/ErrorConstructor.h:
36059        * kjs/ErrorInstance.cpp:
36060        * kjs/ErrorInstance.h:
36061        * kjs/ErrorPrototype.cpp:
36062        * kjs/ErrorPrototype.h:
36063        * kjs/ExecState.cpp:
36064        * kjs/ExecState.h:
36065        * kjs/FunctionConstructor.cpp:
36066        * kjs/FunctionConstructor.h:
36067        * kjs/FunctionPrototype.cpp:
36068        * kjs/FunctionPrototype.h:
36069        * kjs/GetterSetter.cpp:
36070        * kjs/GetterSetter.h:
36071        * kjs/GlobalEvalFunction.cpp:
36072        * kjs/GlobalEvalFunction.h:
36073        * kjs/IndexToNameMap.cpp:
36074        * kjs/IndexToNameMap.h:
36075        * kjs/InitializeThreading.cpp:
36076        * kjs/InitializeThreading.h:
36077        * kjs/InternalFunction.cpp:
36078        * kjs/InternalFunction.h:
36079        (JSC::InternalFunction::InternalFunction):
36080        * kjs/JSActivation.cpp:
36081        * kjs/JSActivation.h:
36082        * kjs/JSArray.cpp:
36083        * kjs/JSArray.h:
36084        * kjs/JSCell.cpp:
36085        * kjs/JSCell.h:
36086        * kjs/JSFunction.cpp:
36087        * kjs/JSFunction.h:
36088        (JSC::JSFunction::JSFunction):
36089        * kjs/JSGlobalData.cpp:
36090        (JSC::JSGlobalData::JSGlobalData):
36091        * kjs/JSGlobalData.h:
36092        * kjs/JSGlobalObject.cpp:
36093        * kjs/JSGlobalObject.h:
36094        * kjs/JSGlobalObjectFunctions.cpp:
36095        * kjs/JSGlobalObjectFunctions.h:
36096        * kjs/JSImmediate.cpp:
36097        * kjs/JSImmediate.h:
36098        * kjs/JSLock.cpp:
36099        * kjs/JSLock.h:
36100        * kjs/JSNotAnObject.cpp:
36101        * kjs/JSNotAnObject.h:
36102        * kjs/JSNumberCell.cpp:
36103        * kjs/JSNumberCell.h:
36104        * kjs/JSObject.cpp:
36105        * kjs/JSObject.h:
36106        * kjs/JSStaticScopeObject.cpp:
36107        * kjs/JSStaticScopeObject.h:
36108        * kjs/JSString.cpp:
36109        * kjs/JSString.h:
36110        * kjs/JSType.h:
36111        * kjs/JSValue.cpp:
36112        * kjs/JSValue.h:
36113        * kjs/JSVariableObject.cpp:
36114        * kjs/JSVariableObject.h:
36115        * kjs/JSWrapperObject.cpp:
36116        * kjs/JSWrapperObject.h:
36117        * kjs/LabelStack.cpp:
36118        * kjs/LabelStack.h:
36119        * kjs/MathObject.cpp:
36120        * kjs/MathObject.h:
36121        * kjs/NativeErrorConstructor.cpp:
36122        * kjs/NativeErrorConstructor.h:
36123        * kjs/NativeErrorPrototype.cpp:
36124        * kjs/NativeErrorPrototype.h:
36125        * kjs/NodeInfo.h:
36126        * kjs/NumberConstructor.cpp:
36127        * kjs/NumberConstructor.h:
36128        * kjs/NumberObject.cpp:
36129        * kjs/NumberObject.h:
36130        * kjs/NumberPrototype.cpp:
36131        * kjs/NumberPrototype.h:
36132        * kjs/ObjectConstructor.cpp:
36133        * kjs/ObjectConstructor.h:
36134        * kjs/ObjectPrototype.cpp:
36135        * kjs/ObjectPrototype.h:
36136        * kjs/Parser.cpp:
36137        * kjs/Parser.h:
36138        * kjs/PropertyMap.cpp:
36139        (JSC::PropertyMapStatisticsExitLogger::~PropertyMapStatisticsExitLogger):
36140        * kjs/PropertyMap.h:
36141        * kjs/PropertyNameArray.cpp:
36142        * kjs/PropertyNameArray.h:
36143        * kjs/PropertySlot.cpp:
36144        * kjs/PropertySlot.h:
36145        * kjs/PrototypeFunction.cpp:
36146        * kjs/PrototypeFunction.h:
36147        * kjs/PutPropertySlot.h:
36148        * kjs/RegExpConstructor.cpp:
36149        * kjs/RegExpConstructor.h:
36150        * kjs/RegExpObject.cpp:
36151        * kjs/RegExpObject.h:
36152        * kjs/RegExpPrototype.cpp:
36153        * kjs/RegExpPrototype.h:
36154        * kjs/ScopeChain.cpp:
36155        * kjs/ScopeChain.h:
36156        * kjs/ScopeChainMark.h:
36157        * kjs/Shell.cpp:
36158        (jscmain):
36159        * kjs/SmallStrings.cpp:
36160        * kjs/SmallStrings.h:
36161        * kjs/SourceProvider.h:
36162        * kjs/SourceRange.h:
36163        * kjs/StringConstructor.cpp:
36164        * kjs/StringConstructor.h:
36165        * kjs/StringObject.cpp:
36166        * kjs/StringObject.h:
36167        * kjs/StringObjectThatMasqueradesAsUndefined.h:
36168        * kjs/StringPrototype.cpp:
36169        * kjs/StringPrototype.h:
36170        * kjs/StructureID.cpp:
36171        * kjs/StructureID.h:
36172        * kjs/SymbolTable.h:
36173        * kjs/collector.cpp:
36174        * kjs/collector.h:
36175        * kjs/completion.h:
36176        * kjs/create_hash_table:
36177        * kjs/debugger.cpp:
36178        * kjs/debugger.h:
36179        * kjs/dtoa.cpp:
36180        * kjs/dtoa.h:
36181        * kjs/grammar.y:
36182        * kjs/identifier.cpp:
36183        * kjs/identifier.h:
36184        (JSC::Identifier::equal):
36185        * kjs/interpreter.cpp:
36186        * kjs/interpreter.h:
36187        * kjs/lexer.cpp:
36188        (JSC::Lexer::Lexer):
36189        (JSC::Lexer::clear):
36190        (JSC::Lexer::makeIdentifier):
36191        * kjs/lexer.h:
36192        * kjs/lookup.cpp:
36193        * kjs/lookup.h:
36194        * kjs/nodes.cpp:
36195        * kjs/nodes.h:
36196        * kjs/nodes2string.cpp:
36197        * kjs/operations.cpp:
36198        * kjs/operations.h:
36199        * kjs/protect.h:
36200        * kjs/regexp.cpp:
36201        * kjs/regexp.h:
36202        * kjs/ustring.cpp:
36203        * kjs/ustring.h:
36204        (JSC::operator!=):
36205        (JSC::IdentifierRepHash::hash):
36206        (WTF::):
36207        * masm/MacroAssembler.h:
36208        * masm/MacroAssemblerWin.cpp:
36209        * masm/X86Assembler.h:
36210        * pcre/pcre_exec.cpp:
36211        * profiler/CallIdentifier.h:
36212        (WTF::):
36213        * profiler/HeavyProfile.cpp:
36214        * profiler/HeavyProfile.h:
36215        * profiler/Profile.cpp:
36216        * profiler/Profile.h:
36217        * profiler/ProfileGenerator.cpp:
36218        * profiler/ProfileGenerator.h:
36219        * profiler/ProfileNode.cpp:
36220        * profiler/ProfileNode.h:
36221        * profiler/Profiler.cpp:
36222        * profiler/Profiler.h:
36223        * profiler/TreeProfile.cpp:
36224        * profiler/TreeProfile.h:
36225        * wrec/WREC.cpp:
36226        * wrec/WREC.h:
36227        * wtf/AVLTree.h:
36228
362292008-09-07  Maciej Stachowiak  <mjs@apple.com>
36230
36231        Reviewed by Dan Bernstein.
36232        
36233        - rename IA32MacroAssembler class to X86Assembler
36234        
36235        We otherwise call the platform X86, and also, I don't see any macros.
36236
36237        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
36238        * JavaScriptCore.xcodeproj/project.pbxproj:
36239        * masm/IA32MacroAsm.h: Removed.
36240        * masm/MacroAssembler.h:
36241        (KJS::MacroAssembler::MacroAssembler):
36242        * masm/MacroAssemblerWin.cpp:
36243        (KJS::MacroAssembler::emitRestoreArgumentReference):
36244        * masm/X86Assembler.h: Copied from masm/IA32MacroAsm.h.
36245        (KJS::X86Assembler::X86Assembler):
36246        * wrec/WREC.cpp:
36247        (KJS::WRECGenerator::generateNonGreedyQuantifier):
36248        (KJS::WRECGenerator::generateGreedyQuantifier):
36249        (KJS::WRECGenerator::generateParentheses):
36250        (KJS::WRECGenerator::generateBackreference):
36251        (KJS::WRECGenerator::gernerateDisjunction):
36252        * wrec/WREC.h:
36253
362542008-09-07  Cameron Zwarich  <cwzwarich@webkit.org>
36255
36256        Not reviewed.
36257
36258        Visual C++ seems to have some odd casting rules, so just convert the
36259        offending cast back to a C-style cast for now.
36260
36261        * kjs/collector.cpp:
36262        (KJS::otherThreadStackPointer):
36263
362642008-09-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
36265
36266        Reviewed by Mark Rowe.
36267
36268        Attempt to fix the Windows build by using a const_cast to cast regs.Esp
36269        to a uintptr_t instead of a reinterpret_cast.
36270
36271        * kjs/collector.cpp:
36272        (KJS::otherThreadStackPointer):
36273
362742008-09-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
36275
36276        Reviewed by Sam Weinig.
36277
36278        Remove C-style casts from kjs/collector.cpp.
36279
36280        * kjs/collector.cpp:
36281        (KJS::Heap::heapAllocate):
36282        (KJS::currentThreadStackBase):
36283        (KJS::Heap::markConservatively):
36284        (KJS::otherThreadStackPointer):
36285        (KJS::Heap::markOtherThreadConservatively):
36286        (KJS::Heap::sweep):
36287
362882008-09-07  Mark Rowe  <mrowe@apple.com>
36289
36290        Build fix for the debug variant.
36291
36292        * DerivedSources.make: Also use the .Debug.exp exports file when building the debug variant.
36293
362942008-09-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
36295
36296        Reviewed by Timothy Hatcher.
36297
36298        Remove C-style casts from the CTI code.
36299
36300        * VM/CTI.cpp:
36301        (KJS::CTI::emitGetArg):
36302        (KJS::CTI::emitGetPutArg):
36303        (KJS::ctiRepatchCallByReturnAddress):
36304        (KJS::CTI::compileOpCall):
36305        (KJS::CTI::privateCompileMainPass):
36306        (KJS::CTI::privateCompileGetByIdSelf):
36307        (KJS::CTI::privateCompileGetByIdProto):
36308        (KJS::CTI::privateCompileGetByIdChain):
36309        (KJS::CTI::privateCompilePutByIdReplace):
36310        (KJS::CTI::privateArrayLengthTrampoline):
36311        (KJS::CTI::privateStringLengthTrampoline):
36312
36313=== End merge of squirrelfish-extreme ===
36314
363152008-09-06  Gavin Barraclough  <barraclough@apple.com>
36316
36317        Reviewed by Sam Weinig. Adapted somewhat by Maciej Stachowiak.
36318        
36319        - refactor WREC to share more of the JIT infrastructure with CTI
36320
36321        * VM/CTI.cpp:
36322        (KJS::CTI::emitGetArg):
36323        (KJS::CTI::emitGetPutArg):
36324        (KJS::CTI::emitPutArg):
36325        (KJS::CTI::emitPutArgConstant):
36326        (KJS::CTI::emitPutCTIParam):
36327        (KJS::CTI::emitGetCTIParam):
36328        (KJS::CTI::emitPutToCallFrameHeader):
36329        (KJS::CTI::emitGetFromCallFrameHeader):
36330        (KJS::CTI::emitPutResult):
36331        (KJS::CTI::emitDebugExceptionCheck):
36332        (KJS::CTI::emitJumpSlowCaseIfNotImm):
36333        (KJS::CTI::emitJumpSlowCaseIfNotImms):
36334        (KJS::CTI::emitFastArithDeTagImmediate):
36335        (KJS::CTI::emitFastArithReTagImmediate):
36336        (KJS::CTI::emitFastArithPotentiallyReTagImmediate):
36337        (KJS::CTI::emitFastArithImmToInt):
36338        (KJS::CTI::emitFastArithIntToImmOrSlowCase):
36339        (KJS::CTI::emitFastArithIntToImmNoCheck):
36340        (KJS::CTI::CTI):
36341        (KJS::CTI::compileOpCall):
36342        (KJS::CTI::privateCompileMainPass):
36343        (KJS::CTI::privateCompileSlowCases):
36344        (KJS::CTI::privateCompile):
36345        (KJS::CTI::privateCompileGetByIdSelf):
36346        (KJS::CTI::privateCompileGetByIdProto):
36347        (KJS::CTI::privateCompileGetByIdChain):
36348        (KJS::CTI::privateCompilePutByIdReplace):
36349        (KJS::CTI::privateArrayLengthTrampoline):
36350        (KJS::CTI::privateStringLengthTrampoline):
36351        (KJS::CTI::compileRegExp):
36352        * VM/CTI.h:
36353        (KJS::CallRecord::CallRecord):
36354        (KJS::JmpTable::JmpTable):
36355        (KJS::SlowCaseEntry::SlowCaseEntry):
36356        (KJS::CTI::JSRInfo::JSRInfo):
36357        * kjs/regexp.cpp:
36358        (KJS::RegExp::RegExp):
36359        * wrec/WREC.cpp:
36360        (KJS::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor):
36361        (KJS::GeneratePatternCharacterFunctor::generateAtom):
36362        (KJS::GeneratePatternCharacterFunctor::backtrack):
36363        (KJS::GenerateCharacterClassFunctor::generateAtom):
36364        (KJS::GenerateCharacterClassFunctor::backtrack):
36365        (KJS::GenerateBackreferenceFunctor::generateAtom):
36366        (KJS::GenerateBackreferenceFunctor::backtrack):
36367        (KJS::GenerateParenthesesNonGreedyFunctor::generateAtom):
36368        (KJS::GenerateParenthesesNonGreedyFunctor::backtrack):
36369        (KJS::WRECGenerate::generateBacktrack1):
36370        (KJS::WRECGenerate::generateBacktrackBackreference):
36371        (KJS::WRECGenerate::generateBackreferenceQuantifier):
36372        (KJS::WRECGenerate::generateNonGreedyQuantifier):
36373        (KJS::WRECGenerate::generateGreedyQuantifier):
36374        (KJS::WRECGenerate::generatePatternCharacter):
36375        (KJS::WRECGenerate::generateCharacterClassInvertedRange):
36376        (KJS::WRECGenerate::generateCharacterClassInverted):
36377        (KJS::WRECGenerate::generateCharacterClass):
36378        (KJS::WRECGenerate::generateParentheses):
36379        (KJS::WRECGenerate::generateParenthesesNonGreedy):
36380        (KJS::WRECGenerate::gererateParenthesesResetTrampoline):
36381        (KJS::WRECGenerate::generateAssertionBOL):
36382        (KJS::WRECGenerate::generateAssertionEOL):
36383        (KJS::WRECGenerate::generateAssertionWordBoundary):
36384        (KJS::WRECGenerate::generateBackreference):
36385        (KJS::WRECGenerate::gernerateDisjunction):
36386        (KJS::WRECGenerate::terminateDisjunction):
36387        (KJS::WRECParser::parseGreedyQuantifier):
36388        (KJS::WRECParser::parseQuantifier):
36389        (KJS::WRECParser::parsePatternCharacterQualifier):
36390        (KJS::WRECParser::parseCharacterClassQuantifier):
36391        (KJS::WRECParser::parseBackreferenceQuantifier):
36392        (KJS::WRECParser::parseParentheses):
36393        (KJS::WRECParser::parseCharacterClass):
36394        (KJS::WRECParser::parseOctalEscape):
36395        (KJS::WRECParser::parseEscape):
36396        (KJS::WRECParser::parseTerm):
36397        (KJS::WRECParser::parseDisjunction):
36398        * wrec/WREC.h:
36399        (KJS::WRECGenerate::WRECGenerate):
36400        (KJS::WRECParser::):
36401        (KJS::WRECParser::WRECParser):
36402        (KJS::WRECParser::parseAlternative):
36403        (KJS::WRECParser::isEndOfPattern):
36404
364052008-09-06  Oliver Hunt  <oliver@apple.com>
36406
36407        Reviewed by NOBODY (Build fix).
36408
36409        Fix the sampler build.
36410
36411        * VM/SamplingTool.h:
36412
364132008-09-06  Oliver Hunt  <oliver@apple.com>
36414
36415        Reviewed by Maciej Stachowiak.
36416
36417        Jump through the necessary hoops required to make MSVC cooperate with SFX
36418
36419        We now explicitly declare the calling convention on all cti_op_* cfunctions,
36420        and return int instead of bool where appropriate (despite the cdecl calling
36421        convention seems to state MSVC generates code that returns the result value
36422        through ecx).  SFX behaves slightly differently under MSVC, specifically it
36423        stores the base argument address for the cti_op_* functions in the first
36424        argument, and then does the required stack manipulation through that pointer.
36425        This is necessary as MSVC's optimisations assume they have complete control
36426        of the stack, and periodically elide our stack manipulations, or move
36427        values in unexpected ways.  MSVC also frequently produces tail calls which may
36428        clobber the first argument, so the MSVC path is slightly less efficient due
36429        to the need to restore it.
36430
36431        * JavaScriptCore.xcodeproj/project.pbxproj:
36432        * VM/CTI.cpp:
36433        (KJS::):
36434        (KJS::CTI::compileOpCall):
36435        (KJS::CTI::privateCompileMainPass):
36436        (KJS::CTI::privateCompileSlowCases):
36437        * VM/CTI.h:
36438        * VM/Machine.cpp:
36439        * VM/Machine.h:
36440        * masm/MacroAssembler.h:
36441        (KJS::MacroAssembler::emitConvertToFastCall):
36442        * masm/MacroAssemblerIA32GCC.cpp: Removed.
36443           For performance reasons we need these no-op functions to be inlined.
36444
36445        * masm/MacroAssemblerWin.cpp:
36446        (KJS::MacroAssembler::emitRestoreArgumentReference):
36447        * wtf/Platform.h:
36448
364492008-09-05  Geoffrey Garen  <ggaren@apple.com>
36450
36451        Reviewed by Maciej Stachowiak, or maybe the other way around.
36452        
36453        Added the ability to coalesce JITCode buffer grow operations by first
36454        growing the buffer and then executing unchecked puts to it.
36455        
36456        About a 2% speedup on date-format-tofte.
36457
36458        * VM/CTI.cpp:
36459        (KJS::CTI::compileOpCall):
36460        * masm/IA32MacroAsm.h:
36461        (KJS::JITCodeBuffer::ensureSpace):
36462        (KJS::JITCodeBuffer::putByteUnchecked):
36463        (KJS::JITCodeBuffer::putByte):
36464        (KJS::JITCodeBuffer::putShortUnchecked):
36465        (KJS::JITCodeBuffer::putShort):
36466        (KJS::JITCodeBuffer::putIntUnchecked):
36467        (KJS::JITCodeBuffer::putInt):
36468        (KJS::IA32MacroAssembler::emitTestl_i32r):
36469        (KJS::IA32MacroAssembler::emitMovl_mr):
36470        (KJS::IA32MacroAssembler::emitMovl_rm):
36471        (KJS::IA32MacroAssembler::emitMovl_i32m):
36472        (KJS::IA32MacroAssembler::emitUnlinkedJe):
36473        (KJS::IA32MacroAssembler::emitModRm_rr):
36474        (KJS::IA32MacroAssembler::emitModRm_rr_Unchecked):
36475        (KJS::IA32MacroAssembler::emitModRm_rm_Unchecked):
36476        (KJS::IA32MacroAssembler::emitModRm_rm):
36477        (KJS::IA32MacroAssembler::emitModRm_opr):
36478        (KJS::IA32MacroAssembler::emitModRm_opr_Unchecked):
36479        (KJS::IA32MacroAssembler::emitModRm_opm_Unchecked):
36480
364812008-09-05  Mark Rowe  <mrowe@apple.com>
36482
36483        Reviewed by Sam Weinig.
36484
36485        Disable WREC and CTI on platforms that we have not yet had a chance to test with.
36486
36487        * wtf/Platform.h:
36488
364892008-09-05  Geoffrey Garen  <ggaren@apple.com>
36490
36491        Reviewed by Sam Weinig.
36492        
36493        Use jo instead of a mask compare when fetching array.length and
36494        string.length. 4% speedup on array.length / string.length torture
36495        test.
36496
36497        * VM/CTI.cpp:
36498        (KJS::CTI::privateArrayLengthTrampoline):
36499        (KJS::CTI::privateStringLengthTrampoline):
36500
365012008-09-05  Geoffrey Garen  <ggaren@apple.com>
36502
36503        Reviewed by Sam Weinig.
36504
36505        Removed a CTI compilation pass by recording labels during bytecode
36506        generation. This is more to reduce complexity than it is to improve
36507        performance.
36508
36509        SunSpider reports no change.
36510
36511        CodeBlock now keeps a "labels" set, which holds the offsets of all the
36512        instructions that can be jumped to.
36513
36514        * VM/CTI.cpp: Nixed a pass.
36515
36516        * VM/CodeBlock.h: Added a "labels" set.
36517
36518        * VM/LabelID.h: No need for a special LableID for holding jump
36519        destinations, since the CodeBlock now knows all jump destinations.
36520
36521        * wtf/HashTraits.h: New hash traits to accomodate putting offset 0 in
36522        the set.
36523
36524        * kjs/nodes.cpp:
36525        (KJS::TryNode::emitCode): Emit a dummy label to record sret targets.
36526
365272008-09-05  Mark Rowe  <mrowe@apple.com>
36528
36529        Reviewed by Oliver Hunt and Gavin Barraclough.
36530
36531        Move the JITCodeBuffer onto Machine and remove the static variables.
36532
36533        * VM/CTI.cpp: Initialize m_jit with the Machine's code buffer.
36534        * VM/Machine.cpp:
36535        (KJS::Machine::Machine): Allocate a JITCodeBuffer.
36536        * VM/Machine.h:
36537        * kjs/RegExpConstructor.cpp:
36538        (KJS::constructRegExp): Pass the ExecState through.
36539        * kjs/RegExpPrototype.cpp:
36540        (KJS::regExpProtoFuncCompile): Ditto.
36541        * kjs/StringPrototype.cpp:
36542        (KJS::stringProtoFuncMatch): Ditto.
36543        (KJS::stringProtoFuncSearch): Ditto.
36544        * kjs/nodes.cpp:
36545        (KJS::RegExpNode::emitCode): Compile the pattern at code generation time
36546        so that we have access to an ExecState.
36547        * kjs/nodes.h:
36548        (KJS::RegExpNode::):
36549        * kjs/nodes2string.cpp:
36550        * kjs/regexp.cpp:
36551        (KJS::RegExp::RegExp): Pass the ExecState through.
36552        (KJS::RegExp::create): Ditto.
36553        * kjs/regexp.h:
36554        * masm/IA32MacroAsm.h:
36555        (KJS::IA32MacroAssembler::IA32MacroAssembler): Reset the JITCodeBuffer when we are
36556        constructed.
36557        * wrec/WREC.cpp:
36558        (KJS::WRECompiler::compile): Retrieve the JITCodeBuffer from the Machine.
36559        * wrec/WREC.h:
36560
365612008-09-05  Mark Rowe  <mrowe@apple.com>
36562
36563        Reviewed by Oliver Hunt and Gavin Barraclough.
36564
36565        Fix the build when CTI is disabled.
36566
36567        * VM/CodeBlock.cpp:
36568        (KJS::CodeBlock::~CodeBlock):
36569        * VM/CodeGenerator.cpp:
36570        (KJS::prepareJumpTableForStringSwitch):
36571        * VM/Machine.cpp:
36572        (KJS::Machine::Machine):
36573        (KJS::Machine::~Machine):
36574
365752008-09-05  Gavin Barraclough  <barraclough@apple.com>
36576
36577        Reviewed by Mark Rowe.
36578
36579        Fix some windows abi issues.
36580
36581        * VM/CTI.cpp:
36582        (KJS::CTI::privateCompileMainPass):
36583        (KJS::CTI::privateCompileSlowCases):
36584        * VM/CTI.h:
36585        (KJS::CallRecord::CallRecord):
36586        (KJS::):
36587        * VM/Machine.cpp:
36588        (KJS::Machine::cti_op_resolve_func):
36589        (KJS::Machine::cti_op_post_inc):
36590        (KJS::Machine::cti_op_resolve_with_base):
36591        (KJS::Machine::cti_op_post_dec):
36592        * VM/Machine.h:
36593
365942008-09-05  Mark Rowe  <mrowe@apple.com>
36595
36596        Reviewed by Sam Weinig.
36597
36598        Fix ecma/FunctionObjects/15.3.5.3.js after I broke it in r93.
36599
36600        * VM/Machine.cpp:
36601        (KJS::Machine::cti_op_call_NotJSFunction): Restore m_callFrame to the correct value after making the native call.
36602        (KJS::Machine::cti_op_construct_NotJSConstruct): Ditto.
36603
366042008-09-04  Mark Rowe  <mrowe@apple.com>
36605
36606        Reviewed by Sam Weinig.
36607
36608        Fix fast/dom/Window/console-functions.html.
36609
36610        The call frame on the ExecState was not being updated on calls into native functions.  This meant that functions
36611        such as console.log would use the line number of the last JS function on the call stack.
36612
36613        * VM/Machine.cpp:
36614        (KJS::Machine::cti_op_call_NotJSFunction): Update the ExecState's call frame before making a native function call,
36615        and restore it when the function is done.
36616        (KJS::Machine::cti_op_construct_NotJSConstruct): Ditto.
36617
366182008-09-05  Oliver Hunt  <oliver@apple.com>
36619
36620        Start bringing up SFX on windows.
36621
36622        Reviewed by Mark Rowe and Sam Weinig
36623
36624        Start doing the work to bring up SFX on windows.  Initially
36625        just working on WREC, as it does not make any calls so reduces
36626        the amount of code that needs to be corrected.
36627        
36628        Start abstracting the CTI JIT codegen engine.
36629
36630        * ChangeLog:
36631        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
36632        * JavaScriptCore.xcodeproj/project.pbxproj:
36633        * VM/CTI.cpp:
36634        * masm/IA32MacroAsm.h:
36635        * masm/MacroAssembler.h: Added.
36636        (KJS::MacroAssembler::MacroAssembler):
36637        * masm/MacroAssemblerIA32GCC.cpp: Added.
36638        (KJS::MacroAssembler::emitConvertToFastCall):
36639        * masm/MacroAssemblerWin.cpp: Added.
36640        (KJS::MacroAssembler::emitConvertToFastCall):
36641        * wrec/WREC.cpp:
36642        (KJS::WRECompiler::parseGreedyQuantifier):
36643        (KJS::WRECompiler::parseCharacterClass):
36644        (KJS::WRECompiler::parseEscape):
36645        (KJS::WRECompiler::compilePattern):
36646        * wrec/WREC.h:
36647
366482008-09-04  Gavin Barraclough  <barraclough@apple.com>
36649
36650        Reviewed by Sam Weinig.
36651
36652        Support for slow scripts (timeout checking).
36653
36654        * VM/CTI.cpp:
36655        (KJS::CTI::privateCompileMainPass):
36656        (KJS::CTI::privateCompile):
36657        * VM/Machine.cpp:
36658        (KJS::slideRegisterWindowForCall):
36659        (KJS::Machine::cti_timeout_check):
36660        (KJS::Machine::cti_vm_throw):
36661
366622008-09-04  Sam Weinig  <sam@webkit.org>
36663
36664        Reviewed by Mark Rowe.
36665
36666        Third round of style cleanup.
36667
36668        * VM/CTI.cpp:
36669        * VM/CTI.h:
36670        * VM/CodeBlock.h:
36671        * VM/Machine.cpp:
36672        * VM/Machine.h:
36673        * kjs/ExecState.h:
36674
366752008-09-04  Sam Weinig  <sam@webkit.org>
36676
36677        Reviewed by Jon Honeycutt.
36678
36679        Second round of style cleanup.
36680
36681        * VM/CTI.cpp:
36682        * VM/CTI.h:
36683        * wrec/WREC.h:
36684
366852008-09-04  Sam Weinig  <sam@webkit.org>
36686
36687        Reviewed by Mark Rowe.
36688
36689        First round of style cleanup.
36690
36691        * VM/CTI.cpp:
36692        * VM/CTI.h:
36693        * masm/IA32MacroAsm.h:
36694        * wrec/WREC.cpp:
36695        * wrec/WREC.h:
36696
366972008-09-04  Geoffrey Garen  <ggaren@apple.com>
36698
36699        Reviewed by Mark Rowe.
36700        
36701        Merged http://trac.webkit.org/changeset/36081 to work with CTI.
36702
36703        * VM/Machine.cpp:
36704        (KJS::Machine::tryCtiCacheGetByID):
36705
367062008-09-04  Gavin Barraclough  <barraclough@apple.com>
36707
36708        Reviewed by Sam Weinig.
36709
36710        Enable profiling in CTI.
36711
36712        * VM/CTI.h:
36713        (KJS::):
36714        (KJS::CTI::execute):
36715        * VM/Machine.cpp:
36716        (KJS::Machine::cti_op_call_JSFunction):
36717        (KJS::Machine::cti_op_call_NotJSFunction):
36718        (KJS::Machine::cti_op_ret):
36719        (KJS::Machine::cti_op_construct_JSConstruct):
36720        (KJS::Machine::cti_op_construct_NotJSConstruct):
36721
367222008-09-04  Victor Hernandez  <vhernandez@apple.com>
36723
36724        Reviewed by Geoffrey Garen.
36725        
36726        Fixed an #if to support using WREC without CTI.
36727
36728        * kjs/regexp.cpp:
36729        (KJS::RegExp::match):
36730
367312008-09-04  Gavin Barraclough  <barraclough@apple.com>
36732
36733        Reviewed by Oliver Hunt.
36734
36735        The array/string length trampolines are owned by the Machine, not the codeblock that compiled them.
36736
36737        * VM/CTI.cpp:
36738        (KJS::CTI::privateArrayLengthTrampoline):
36739        (KJS::CTI::privateStringLengthTrampoline):
36740        * VM/Machine.cpp:
36741        (KJS::Machine::~Machine):
36742        * VM/Machine.h:
36743
367442008-09-04  Mark Rowe  <mrowe@apple.com>
36745
36746        Reviewed by Gavin Barraclough and Sam Weinig.
36747
36748        Fix a crash on launch of jsc when GuardMalloc is enabled.
36749
36750        * kjs/ScopeChain.h:
36751        (KJS::ScopeChain::ScopeChain): Initialize m_node to 0 when we have no valid scope chain.
36752        (KJS::ScopeChain::~ScopeChain): Null-check m_node before calling deref.
36753
367542008-09-03  Oliver Hunt  <oliver@apple.com>
36755
36756        Reviewed by Gavin Barraclough and Geoff Garen.
36757
36758        Fix inspector and fast array access so that it bounds
36759        checks correctly.
36760
36761        * VM/CTI.cpp:
36762        (KJS::CTI::privateCompile_pass2_Main):
36763        * masm/IA32MacroAsm.h:
36764        (KJS::IA32MacroAssembler::):
36765        (KJS::IA32MacroAssembler::emitUnlinkedJb):
36766        (KJS::IA32MacroAssembler::emitUnlinkedJbe):
36767
367682008-09-03  Mark Rowe  <mrowe@apple.com>
36769
36770        Move the assertion after the InitializeAndReturn block, as
36771        that is used even when CTI is enabled.
36772
36773        * VM/Machine.cpp:
36774        (KJS::Machine::privateExecute):
36775
367762008-09-03  Mark Rowe  <mrowe@apple.com>
36777
36778        Reviewed by Sam Weinig.
36779
36780        Replace calls to exit with ASSERT_WITH_MESSAGE or ASSERT_NOT_REACHED.
36781
36782        * VM/CTI.cpp:
36783        (KJS::CTI::privateCompile_pass1_Scan):
36784        (KJS::CTI::privateCompile_pass2_Main):
36785        (KJS::CTI::privateCompile_pass4_SlowCases):
36786        * VM/Machine.cpp:
36787        (KJS::Machine::privateExecute):
36788        (KJS::Machine::cti_vm_throw):
36789
367902008-09-03  Mark Rowe  <mrowe@apple.com>
36791
36792        Reviewed by Sam Weinig.
36793
36794        Tweak JavaScriptCore to compile on non-x86 platforms.  This is achieved
36795        by wrapping more code with ENABLE(CTI), ENABLE(WREC), and PLATFORM(X86)
36796        #if's.
36797
36798        * VM/CTI.cpp:
36799        * VM/CTI.h:
36800        * VM/CodeBlock.cpp:
36801        (KJS::CodeBlock::printStructureIDs): Use %td as the format specifier for
36802        printing a ptrdiff_t.
36803        * VM/Machine.cpp:
36804        * VM/Machine.h:
36805        * kjs/regexp.cpp:
36806        (KJS::RegExp::RegExp):
36807        (KJS::RegExp::~RegExp):
36808        (KJS::RegExp::match):
36809        * kjs/regexp.h:
36810        * masm/IA32MacroAsm.h:
36811        * wrec/WREC.cpp:
36812        * wrec/WREC.h:
36813        * wtf/Platform.h: Only enable CTI and WREC on x86.  Add an extra define to
36814        track whether any MASM-using features are enabled.
36815
368162008-09-03  Gavin Barraclough  <barraclough@apple.com>
36817
36818        Reviewed by Oliver Hunt.
36819
36820        Copy Geoff's array/string length optimization for CTI.
36821
36822        * VM/CTI.cpp:
36823        (KJS::CTI::privateArrayLengthTrampoline):
36824        (KJS::CTI::privateStringLengthTrampoline):
36825        * VM/CTI.h:
36826        (KJS::CTI::compileArrayLengthTrampoline):
36827        (KJS::CTI::compileStringLengthTrampoline):
36828        * VM/Machine.cpp:
36829        (KJS::Machine::Machine):
36830        (KJS::Machine::getCtiArrayLengthTrampoline):
36831        (KJS::Machine::getCtiStringLengthTrampoline):
36832        (KJS::Machine::tryCtiCacheGetByID):
36833        (KJS::Machine::cti_op_get_by_id_second):
36834        * VM/Machine.h:
36835        * kjs/JSString.h:
36836        * kjs/ustring.h:
36837
368382008-09-03  Gavin Barraclough  <barraclough@apple.com>
36839
36840        Reviewed by Oliver Hunt.
36841
36842        Implement fast array accesses in CTI - 2-3% progression on sunspider.
36843
36844        * VM/CTI.cpp:
36845        (KJS::CTI::emitFastArithIntToImmNoCheck):
36846        (KJS::CTI::compileOpCall):
36847        (KJS::CTI::privateCompile_pass2_Main):
36848        (KJS::CTI::privateCompile_pass4_SlowCases):
36849        * VM/CTI.h:
36850        * kjs/JSArray.h:
36851
368522008-09-02  Gavin Barraclough  <barraclough@apple.com>
36853
36854        Reviewed by Oliver Hunt.
36855
36856        Enable fast property access support in CTI.
36857
36858        * VM/CTI.cpp:
36859        (KJS::ctiSetReturnAddress):
36860        (KJS::ctiRepatchCallByReturnAddress):
36861        (KJS::CTI::privateCompile_pass2_Main):
36862        (KJS::CTI::privateCompile):
36863        (KJS::CTI::privateCompileGetByIdSelf):
36864        (KJS::CTI::privateCompileGetByIdProto):
36865        (KJS::CTI::privateCompileGetByIdChain):
36866        (KJS::CTI::privateCompilePutByIdReplace):
36867        * VM/CTI.h:
36868        (KJS::CTI::compileGetByIdSelf):
36869        (KJS::CTI::compileGetByIdProto):
36870        (KJS::CTI::compileGetByIdChain):
36871        (KJS::CTI::compilePutByIdReplace):
36872        * VM/CodeBlock.cpp:
36873        (KJS::CodeBlock::~CodeBlock):
36874        * VM/CodeBlock.h:
36875        * VM/Machine.cpp:
36876        (KJS::doSetReturnAddressVmThrowTrampoline):
36877        (KJS::Machine::tryCtiCachePutByID):
36878        (KJS::Machine::tryCtiCacheGetByID):
36879        (KJS::Machine::cti_op_put_by_id):
36880        (KJS::Machine::cti_op_put_by_id_second):
36881        (KJS::Machine::cti_op_put_by_id_generic):
36882        (KJS::Machine::cti_op_put_by_id_fail):
36883        (KJS::Machine::cti_op_get_by_id):
36884        (KJS::Machine::cti_op_get_by_id_second):
36885        (KJS::Machine::cti_op_get_by_id_generic):
36886        (KJS::Machine::cti_op_get_by_id_fail):
36887        (KJS::Machine::cti_op_throw):
36888        (KJS::Machine::cti_vm_throw):
36889        * VM/Machine.h:
36890        * kjs/JSCell.h:
36891        * kjs/JSObject.h:
36892        * kjs/PropertyMap.h:
36893        * kjs/StructureID.cpp:
36894        (KJS::StructureIDChain::StructureIDChain):
36895        * masm/IA32MacroAsm.h:
36896        (KJS::IA32MacroAssembler::emitCmpl_i32m):
36897        (KJS::IA32MacroAssembler::emitMovl_mr):
36898        (KJS::IA32MacroAssembler::emitMovl_rm):
36899
369002008-09-02  Sam Weinig  <sam@webkit.org>
36901
36902        Reviewed by Gavin Barraclough and Mark Rowe.
36903
36904        A backslash (\) at the of a RegEx should produce an error.
36905        Fixes fast/regex/test1.html.
36906
36907        * wrec/WREC.cpp:
36908        (KJS::WRECompiler::parseEscape):
36909
369102008-09-02  Sam Weinig  <sam@webkit.org>
36911
36912        Reviewed by Geoff Garen.
36913
36914        Link jumps for the slow case of op_loop_if_less.  Fixes acid3.
36915
36916        * VM/CTI.cpp:
36917        (KJS::CTI::privateCompile_pass4_SlowCases):
36918
369192008-09-01  Sam Weinig  <sam@webkit.org>
36920
36921        Rubber-stamped by Maciej Stachowiak.
36922
36923        Switch WREC on by default.
36924
36925        * wtf/Platform.h:
36926
369272008-09-01  Sam Weinig  <sam@webkit.org>
36928
36929        Reviewed by Mark Rowe.
36930
36931        Fix two failures in fast/regex/test1.html
36932          - \- in a character class should be treated as a literal -
36933          - A missing max quantifier needs to be treated differently than
36934            a null max quantifier.
36935
36936        * wrec/WREC.cpp:
36937        (KJS::WRECompiler::generateNonGreedyQuantifier):
36938        (KJS::WRECompiler::generateGreedyQuantifier):
36939        (KJS::WRECompiler::parseCharacterClass):
36940        * wrec/WREC.h:
36941        (KJS::Quantifier::Quantifier):
36942
369432008-09-01  Sam Weinig  <sam@webkit.org>
36944
36945        Reviewed by Mark Rowe.
36946
36947        Fix crash in fast/js/kde/evil-n.html
36948
36949        * kjs/regexp.cpp: Always pass a non-null offset vector to the wrec function.
36950
369512008-09-01  Sam Weinig  <sam@webkit.org>
36952
36953        Reviewed by Gavin Barraclough and Mark Rowe.
36954
36955        Add pattern length limit fixing one test in fast/js.
36956
36957        * wrec/WREC.cpp:
36958        (KJS::WRECompiler::compile):
36959        * wrec/WREC.h:
36960        (KJS::WRECompiler::):
36961
369622008-09-01  Sam Weinig  <sam@webkit.org>
36963
36964        Reviewed by Gavin Barraclough and Mark Rowe.
36965
36966        Make octal escape parsing/back-reference parsing more closely match 
36967        prior behavior fixing one test in fast/js.
36968
36969        * wrec/WREC.cpp:
36970        (KJS::WRECompiler::parseCharacterClass): 8 and 9 should be IdentityEscaped
36971        (KJS::WRECompiler::parseEscape):
36972        * wrec/WREC.h:
36973        (KJS::WRECompiler::peekDigit):
36974
369752008-09-01  Sam Weinig  <sam@webkit.org>
36976
36977        Reviewed by Gavin Barraclough and Mark Rowe.
36978
36979        Fix one mozilla test.
36980
36981        * wrec/WREC.cpp:
36982        (KJS::WRECompiler::generateCharacterClassInverted): Fix incorrect not
36983        ascii upper check.
36984
369852008-09-01  Sam Weinig  <sam@webkit.org>
36986
36987        Reviewed by Gavin Barraclough and Mark Rowe.
36988
36989        Parse octal escapes in character classes fixing one mozilla test.
36990
36991        * wrec/WREC.cpp:
36992        (KJS::WRECompiler::parseCharacterClass):
36993        (KJS::WRECompiler::parseOctalEscape):
36994        * wrec/WREC.h:
36995        (KJS::WRECompiler::consumeOctal):
36996
369972008-09-01  Sam Weinig  <sam@webkit.org>
36998
36999        Reviewed by Oliver Hunt.
37000
37001        Fixes two mozilla tests with WREC enabled.
37002
37003        * wrec/WREC.cpp:
37004        (KJS::CharacterClassConstructor::append): Keep the character class sorted
37005        when appending another character class.
37006
370072008-09-01  Sam Weinig  <sam@webkit.org>
37008
37009        Reviewed by Gavin Barraclough and Mark Rowe.
37010
37011        Fixes two mozilla tests with WREC enabled.
37012
37013        * wrec/WREC.cpp:
37014        (KJS::CharacterClassConstructor::addSortedRange): Insert the range at the correct position
37015        instead of appending it to the end.
37016
370172008-09-01  Gavin Barraclough  <barraclough@apple.com>
37018
37019        Reviewed by Oliver Hunt.
37020
37021        Move cross-compilation unit call into NEVER_INLINE function.
37022
37023        * VM/Machine.cpp:
37024        (KJS::doSetReturnAddressVmThrowTrampoline):
37025
370262008-09-01  Sam Weinig  <sam@webkit.org>
37027
37028        Reviewed by Gavin Barraclough and Geoff Garen.
37029
37030        Fix one test in fast/js.
37031
37032        * VM/Machine.cpp:
37033        (KJS::Machine::cti_op_construct_NotJSConstruct): Throw a createNotAConstructorError,
37034        instead of a createNotAFunctionError.
37035
370362008-08-31  Gavin Barraclough  <barraclough@apple.com>
37037
37038        Reviewed by Maciej Stachowiak.
37039        
37040        Zero-cost exception handling.  This patch takes the exception checking
37041        back of the hot path.  When an exception occurs in a Machine::cti*
37042        method, the return address to JIT code is recorded, and is then
37043        overwritten with a pointer to a trampoline routine.  When the method
37044        returns the trampoline will cause the cti_vm_throw method to be invoked.
37045
37046        cti_vm_throw uses the return address preserved above, to discover the
37047        vPC of the bytecode that raised the exception (using a map build during
37048        translation).  From the VPC of the faulting bytecode the vPC of a catch
37049        routine may be discovered (unwinding the stack where necesary), and then
37050        a bytecode address for the catch routine is looked up.  Final cti_vm_throw
37051        overwrites its return address to JIT code again, to trampoline directly
37052        to the catch routine.
37053        
37054        cti_op_throw is handled in a similar fashion.
37055
37056        * VM/CTI.cpp:
37057        (KJS::CTI::emitPutCTIParam):
37058        (KJS::CTI::emitPutToCallFrameHeader):
37059        (KJS::CTI::emitGetFromCallFrameHeader):
37060        (KJS::ctiSetReturnAddressForArgs):
37061        (KJS::CTI::emitDebugExceptionCheck):
37062        (KJS::CTI::printOpcodeOperandTypes):
37063        (KJS::CTI::emitCall):
37064        (KJS::CTI::compileOpCall):
37065        (KJS::CTI::privateCompile_pass2_Main):
37066        (KJS::CTI::privateCompile):
37067        * VM/CTI.h:
37068        (KJS::CallRecord::CallRecord):
37069        (KJS::):
37070        (KJS::CTI::execute):
37071        * VM/CodeBlock.h:
37072        * VM/Machine.cpp:
37073        (KJS::Machine::privateExecute):
37074        (KJS::Machine::cti_op_instanceof):
37075        (KJS::Machine::cti_op_call_NotJSFunction):
37076        (KJS::Machine::cti_op_resolve):
37077        (KJS::Machine::cti_op_resolve_func):
37078        (KJS::Machine::cti_op_resolve_skip):
37079        (KJS::Machine::cti_op_resolve_with_base):
37080        (KJS::Machine::cti_op_throw):
37081        (KJS::Machine::cti_op_in):
37082        (KJS::Machine::cti_vm_throw):
37083        * VM/RegisterFile.h:
37084        (KJS::RegisterFile::):
37085        * kjs/ExecState.h:
37086        (KJS::ExecState::setCtiReturnAddress):
37087        (KJS::ExecState::ctiReturnAddress):
37088        * masm/IA32MacroAsm.h:
37089        (KJS::IA32MacroAssembler::):
37090        (KJS::IA32MacroAssembler::emitPushl_m):
37091        (KJS::IA32MacroAssembler::emitPopl_m):
37092        (KJS::IA32MacroAssembler::getRelocatedAddress):
37093
370942008-08-31  Mark Rowe  <mrowe@apple.com>
37095
37096        Reviewed by Oliver Hunt.
37097
37098        Fall back to PCRE for any regexp containing parentheses until we correctly backtrack within them.
37099
37100        * wrec/WREC.cpp:
37101        (KJS::WRECompiler::parseParentheses):
37102        * wrec/WREC.h:
37103        (KJS::WRECompiler::):
37104
371052008-08-31  Mark Rowe  <mrowe@apple.com>
37106
37107        Reviewed by Oliver Hunt.
37108
37109        Fix several issues within ecma_3/RegExp/perlstress-001.js with WREC enabled.
37110
37111        * wrec/WREC.cpp:
37112        (KJS::WRECompiler::generateNonGreedyQuantifier): Compare with the maximum quantifier count rather than the minimum.
37113        (KJS::WRECompiler::generateAssertionEOL): Do a register-to-register comparison rather than immediate-to-register.
37114        (KJS::WRECompiler::parseCharacterClass): Pass through the correct inversion flag.
37115
371162008-08-30  Mark Rowe  <mrowe@apple.com>
37117
37118        Reviewed by Oliver Hunt.
37119
37120        Re-fix the six remaining failures in the Mozilla JavaScript tests in a manner that does not kill performance.
37121        This shows up as a 0.6% progression on SunSpider on my machine.
37122
37123        Grow the JITCodeBuffer's underlying buffer when we run out of space rather than just bailing out.
37124
37125        * VM/CodeBlock.h:
37126        (KJS::CodeBlock::~CodeBlock): Switch to using fastFree now that JITCodeBuffer::copy uses fastMalloc.
37127        * kjs/regexp.cpp: Ditto.
37128        * masm/IA32MacroAsm.h:
37129        (KJS::JITCodeBuffer::growBuffer):
37130        (KJS::JITCodeBuffer::JITCodeBuffer):
37131        (KJS::JITCodeBuffer::~JITCodeBuffer):
37132        (KJS::JITCodeBuffer::putByte):
37133        (KJS::JITCodeBuffer::putShort):
37134        (KJS::JITCodeBuffer::putInt):
37135        (KJS::JITCodeBuffer::reset):
37136        (KJS::JITCodeBuffer::copy):
37137
371382008-08-29  Oliver Hunt  <oliver@apple.com>
37139
37140        RS=Maciej
37141
37142        Roll out previous patch as it causes a 5% performance regression
37143
37144        * JavaScriptCore.xcodeproj/project.pbxproj:
37145        * VM/CTI.cpp:
37146        (KJS::getJCB):
37147        (KJS::CTI::privateCompile):
37148        * VM/CodeBlock.h:
37149        (KJS::CodeBlock::~CodeBlock):
37150        * masm/IA32MacroAsm.h:
37151        (KJS::JITCodeBuffer::JITCodeBuffer):
37152        (KJS::JITCodeBuffer::putByte):
37153        (KJS::JITCodeBuffer::putShort):
37154        (KJS::JITCodeBuffer::putInt):
37155        (KJS::JITCodeBuffer::getEIP):
37156        (KJS::JITCodeBuffer::start):
37157        (KJS::JITCodeBuffer::getOffset):
37158        (KJS::JITCodeBuffer::reset):
37159        (KJS::JITCodeBuffer::copy):
37160        (KJS::IA32MacroAssembler::emitModRm_rr):
37161        (KJS::IA32MacroAssembler::emitModRm_rm):
37162        (KJS::IA32MacroAssembler::emitModRm_rmsib):
37163        (KJS::IA32MacroAssembler::IA32MacroAssembler):
37164        (KJS::IA32MacroAssembler::emitInt3):
37165        (KJS::IA32MacroAssembler::emitPushl_r):
37166        (KJS::IA32MacroAssembler::emitPopl_r):
37167        (KJS::IA32MacroAssembler::emitMovl_rr):
37168        (KJS::IA32MacroAssembler::emitAddl_rr):
37169        (KJS::IA32MacroAssembler::emitAddl_i8r):
37170        (KJS::IA32MacroAssembler::emitAddl_i32r):
37171        (KJS::IA32MacroAssembler::emitAddl_mr):
37172        (KJS::IA32MacroAssembler::emitAndl_rr):
37173        (KJS::IA32MacroAssembler::emitAndl_i32r):
37174        (KJS::IA32MacroAssembler::emitCmpl_i8r):
37175        (KJS::IA32MacroAssembler::emitCmpl_rr):
37176        (KJS::IA32MacroAssembler::emitCmpl_rm):
37177        (KJS::IA32MacroAssembler::emitCmpl_i32r):
37178        (KJS::IA32MacroAssembler::emitCmpl_i32m):
37179        (KJS::IA32MacroAssembler::emitCmpw_rm):
37180        (KJS::IA32MacroAssembler::emitOrl_rr):
37181        (KJS::IA32MacroAssembler::emitOrl_i8r):
37182        (KJS::IA32MacroAssembler::emitSubl_rr):
37183        (KJS::IA32MacroAssembler::emitSubl_i8r):
37184        (KJS::IA32MacroAssembler::emitSubl_i32r):
37185        (KJS::IA32MacroAssembler::emitSubl_mr):
37186        (KJS::IA32MacroAssembler::emitTestl_i32r):
37187        (KJS::IA32MacroAssembler::emitTestl_rr):
37188        (KJS::IA32MacroAssembler::emitXorl_i8r):
37189        (KJS::IA32MacroAssembler::emitXorl_rr):
37190        (KJS::IA32MacroAssembler::emitSarl_i8r):
37191        (KJS::IA32MacroAssembler::emitSarl_CLr):
37192        (KJS::IA32MacroAssembler::emitShl_i8r):
37193        (KJS::IA32MacroAssembler::emitShll_CLr):
37194        (KJS::IA32MacroAssembler::emitMull_rr):
37195        (KJS::IA32MacroAssembler::emitIdivl_r):
37196        (KJS::IA32MacroAssembler::emitCdq):
37197        (KJS::IA32MacroAssembler::emitMovl_mr):
37198        (KJS::IA32MacroAssembler::emitMovzwl_mr):
37199        (KJS::IA32MacroAssembler::emitMovl_rm):
37200        (KJS::IA32MacroAssembler::emitMovl_i32r):
37201        (KJS::IA32MacroAssembler::emitMovl_i32m):
37202        (KJS::IA32MacroAssembler::emitLeal_mr):
37203        (KJS::IA32MacroAssembler::emitRet):
37204        (KJS::IA32MacroAssembler::emitJmpN_r):
37205        (KJS::IA32MacroAssembler::emitJmpN_m):
37206        (KJS::IA32MacroAssembler::emitCall):
37207        (KJS::IA32MacroAssembler::label):
37208        (KJS::IA32MacroAssembler::emitUnlinkedJmp):
37209        (KJS::IA32MacroAssembler::emitUnlinkedJne):
37210        (KJS::IA32MacroAssembler::emitUnlinkedJe):
37211        (KJS::IA32MacroAssembler::emitUnlinkedJl):
37212        (KJS::IA32MacroAssembler::emitUnlinkedJle):
37213        (KJS::IA32MacroAssembler::emitUnlinkedJge):
37214        (KJS::IA32MacroAssembler::emitUnlinkedJae):
37215        (KJS::IA32MacroAssembler::emitUnlinkedJo):
37216        (KJS::IA32MacroAssembler::link):
37217        * wrec/WREC.cpp:
37218        (KJS::WRECompiler::compilePattern):
37219        (KJS::WRECompiler::compile):
37220        * wrec/WREC.h:
37221
372222008-08-29  Mark Rowe  <mrowe@apple.com>
37223
37224        Reviewed by Oliver Hunt.
37225
37226        Have JITCodeBuffer manage a Vector containing the generated code so that it can grow
37227        as needed when generating code for a large function.  This fixes all six remaining failures
37228        in Mozilla tests in both debug and release builds.
37229
37230        * VM/CTI.cpp:
37231        (KJS::CTI::privateCompile):
37232        * VM/CodeBlock.h:
37233        (KJS::CodeBlock::~CodeBlock):
37234        * masm/IA32MacroAsm.h:
37235        (KJS::JITCodeBuffer::putByte):
37236        (KJS::JITCodeBuffer::putShort):
37237        (KJS::JITCodeBuffer::putInt):
37238        (KJS::JITCodeBuffer::getEIP):
37239        (KJS::JITCodeBuffer::start):
37240        (KJS::JITCodeBuffer::getOffset):
37241        (KJS::JITCodeBuffer::getCode):
37242        (KJS::IA32MacroAssembler::emitModRm_rr):
37243        * wrec/WREC.cpp:
37244        (KJS::WRECompiler::compilePattern):
37245        * wrec/WREC.h:
37246
372472008-08-29  Mark Rowe  <mrowe@apple.com>
37248
37249        Reviewed by Oliver Hunt.
37250
37251        Implement parsing of octal escapes in regular expressions.  This fixes three Mozilla tests.
37252
37253        * wrec/WREC.cpp:
37254        (KJS::WRECompiler::parseOctalEscape):
37255        (KJS::WRECompiler::parseEscape): Parse the escape sequence as an octal escape if it has a leading zero.
37256        Add a FIXME about treating invalid backreferences as octal escapes in the future.
37257        * wrec/WREC.h:
37258        (KJS::WRECompiler::consumeNumber): Multiply by 10 rather than 0 so that we handle numbers with more than
37259        one digit.
37260        * wtf/ASCIICType.h:
37261        (WTF::isASCIIOctalDigit):
37262
372632008-08-29  Sam Weinig  <sam@webkit.org>
37264
37265        Reviewed by Mark Rowe.
37266
37267        Pass vPC to instanceof method.  Fixes 2 mozilla tests in debug.
37268
37269        * VM/CTI.cpp:
37270        (KJS::CTI::privateCompile_pass2_Main):
37271        * VM/Machine.cpp:
37272        (KJS::Machine::cti_op_instanceof):
37273
372742008-08-29  Sam Weinig  <sam@webkit.org>
37275
37276        Reviewed by Mark Rowe.
37277
37278        Pass vPCs to resolve methods for correct exception creation.  Fixes
37279        17 mozilla tests in debug.
37280
37281        * VM/CTI.cpp:
37282        (KJS::CTI::privateCompile_pass2_Main):
37283        * VM/CTI.h:
37284        * VM/Machine.cpp:
37285        (KJS::Machine::cti_op_resolve):
37286        (KJS::Machine::cti_op_resolve_func):
37287        (KJS::Machine::cti_op_resolve_skip):
37288        (KJS::Machine::cti_op_resolve_with_base):
37289
372902008-08-29  Gavin Barraclough  <barraclough@apple.com>
37291
37292        Reviewed by Oliver Hunt.
37293
37294        Remembering to actually throw the exception passed to op throw helps.
37295        Regressions 19 -> 6.
37296
37297        * VM/Machine.cpp:
37298        (KJS::Machine::cti_op_throw):
37299        (KJS::Machine::cti_vm_throw):
37300
373012008-08-29  Gavin Barraclough  <barraclough@apple.com>
37302
37303        Reviewed by Sam Weinig.
37304
37305        Support for exception unwinding the stack.
37306        
37307        Once upon a time, Sam asked me for a bettr ChangeLog entry.  The return address
37308        is now preserved on entry to a JIT code function (if we preserve lazily we need
37309        restore the native return address during exception stack unwind).  This takes
37310        the number of regressions down from ~150 to 19.
37311
37312        * VM/CTI.cpp:
37313        (KJS::getJCB):
37314        (KJS::CTI::emitExceptionCheck):
37315        (KJS::CTI::compileOpCall):
37316        (KJS::CTI::privateCompile_pass2_Main):
37317        (KJS::CTI::privateCompile):
37318        * VM/CTI.h:
37319        (KJS::):
37320        * VM/Machine.cpp:
37321        (KJS::Machine::throwException):
37322        (KJS::Machine::cti_op_call_JSFunction):
37323        (KJS::Machine::cti_op_call_NotJSFunction):
37324        (KJS::Machine::cti_op_construct_JSConstruct):
37325        (KJS::Machine::cti_op_construct_NotJSConstruct):
37326        (KJS::Machine::cti_op_throw):
37327        (KJS::Machine::cti_vm_throw):
37328
373292008-08-29  Mark Rowe  <mrowe@apple.com>
37330
37331        Reviewed by Oliver Hunt.
37332
37333        Fix js1_2/regexp/word_boundary.js and four other Mozilla tests with WREC enabled.
37334
37335        * wrec/WREC.cpp:
37336        (KJS::WRECompiler::generateCharacterClassInvertedRange): If none of the exact matches
37337        succeeded, jump to failure.
37338        (KJS::WRECompiler::compilePattern): Restore and increment the current position stored
37339        on the stack to ensure that it will be reset to the correct position after a failed
37340        match has consumed input.
37341
373422008-08-29  Mark Rowe  <mrowe@apple.com>
37343
37344        Reviewed by Oliver Hunt.
37345
37346        Fix a hang in ecma_3/RegExp/15.10.2-1.js with WREC enabled.
37347        A backreference with a quantifier would get stuck in an infinite
37348        loop if the captured range was empty.
37349
37350        * wrec/WREC.cpp:
37351        (KJS::WRECompiler::generateBackreferenceQuantifier): If the captured range
37352        was empty, do not attempt to match the backreference.
37353        (KJS::WRECompiler::parseBackreferenceQuantifier):
37354        * wrec/WREC.h:
37355        (KJS::Quantifier::):
37356
373572008-08-28  Sam Weinig  <sam@webkit.org>
37358
37359        Reviewed by Oliver Hunt.
37360
37361        Implement op_debug.
37362
37363        * VM/CTI.cpp:
37364        (KJS::CTI::privateCompile_pass1_Scan):
37365        (KJS::CTI::privateCompile_pass2_Main):
37366        * VM/Machine.cpp:
37367        (KJS::Machine::debug):
37368        (KJS::Machine::privateExecute):
37369        (KJS::Machine::cti_op_debug):
37370        * VM/Machine.h:
37371
373722008-08-28  Sam Weinig  <sam@webkit.org>
37373
37374        Reviewed by Gavin Barraclough and Geoff Garen.
37375
37376        Implement op_switch_string fixing 1 mozilla test and one test in fast/js.
37377
37378        * VM/CTI.cpp:
37379        (KJS::CTI::privateCompile_pass1_Scan):
37380        (KJS::CTI::privateCompile_pass2_Main):
37381        (KJS::CTI::privateCompile):
37382        * VM/CTI.h:
37383        (KJS::SwitchRecord::):
37384        (KJS::SwitchRecord::SwitchRecord):
37385        * VM/CodeBlock.cpp:
37386        (KJS::CodeBlock::dump):
37387        * VM/CodeBlock.h:
37388        (KJS::ExpressionRangeInfo::):
37389        (KJS::StringJumpTable::offsetForValue):
37390        (KJS::StringJumpTable::ctiForValue):
37391        (KJS::SimpleJumpTable::add):
37392        (KJS::SimpleJumpTable::ctiForValue):
37393        * VM/CodeGenerator.cpp:
37394        (KJS::prepareJumpTableForStringSwitch):
37395        * VM/Machine.cpp:
37396        (KJS::Machine::privateExecute):
37397        (KJS::Machine::cti_op_switch_string):
37398        * VM/Machine.h:
37399
374002008-08-28  Gavin Barraclough  <barraclough@apple.com>
37401
37402        Reviewed by Oliver Hunt.
37403
37404        Do not recurse on the machine stack when executing op_call.
37405
37406        * VM/CTI.cpp:
37407        (KJS::CTI::emitGetPutArg):
37408        (KJS::CTI::emitPutArg):
37409        (KJS::CTI::emitPutArgConstant):
37410        (KJS::CTI::compileOpCall):
37411        (KJS::CTI::privateCompile_pass2_Main):
37412        (KJS::CTI::privateCompile):
37413        * VM/CTI.h:
37414        (KJS::):
37415        (KJS::CTI::compile):
37416        (KJS::CTI::execute):
37417        (KJS::CTI::):
37418        * VM/Machine.cpp:
37419        (KJS::Machine::Machine):
37420        (KJS::Machine::execute):
37421        (KJS::Machine::cti_op_call_JSFunction):
37422        (KJS::Machine::cti_op_call_NotJSFunction):
37423        (KJS::Machine::cti_op_ret):
37424        (KJS::Machine::cti_op_construct_JSConstruct):
37425        (KJS::Machine::cti_op_construct_NotJSConstruct):
37426        (KJS::Machine::cti_op_call_eval):
37427        * VM/Machine.h:
37428        * VM/Register.h:
37429        (KJS::Register::Register):
37430        * VM/RegisterFile.h:
37431        (KJS::RegisterFile::):
37432        * kjs/InternalFunction.h:
37433        (KJS::InternalFunction::InternalFunction):
37434        * kjs/JSFunction.h:
37435        (KJS::JSFunction::JSFunction):
37436        * kjs/ScopeChain.h:
37437        (KJS::ScopeChain::ScopeChain):
37438        * masm/IA32MacroAsm.h:
37439        (KJS::IA32MacroAssembler::):
37440        (KJS::IA32MacroAssembler::emitModRm_opm):
37441        (KJS::IA32MacroAssembler::emitCmpl_i32m):
37442        (KJS::IA32MacroAssembler::emitCallN_r):
37443
374442008-08-28  Sam Weinig  <sam@webkit.org>
37445
37446        Reviewed by Mark Rowe.
37447
37448        Exit instead of crashing in ctiUnsupported and ctiTimedOut.
37449
37450        * VM/Machine.cpp:
37451        (KJS::ctiUnsupported):
37452        (KJS::ctiTimedOut):
37453
374542008-08-28  Oliver Hunt  <oliver@apple.com>
37455
37456        Reviewed by Maciej Stachowiak.
37457
37458        Implement codegen for op_jsr and op_sret.
37459
37460        * VM/CTI.cpp:
37461        (KJS::CTI::privateCompile_pass1_Scan):
37462        (KJS::CTI::privateCompile_pass2_Main):
37463        (KJS::CTI::privateCompile):
37464        * VM/CTI.h:
37465        (KJS::CTI::JSRInfo::JSRInfo):
37466        * masm/IA32MacroAsm.h:
37467        (KJS::IA32MacroAssembler::emitJmpN_m):
37468        (KJS::IA32MacroAssembler::linkAbsoluteAddress):
37469
374702008-08-28  Gavin Barraclough  <barraclough@apple.com>
37471
37472        Reviewed by Oliver Hunt.
37473
37474        Initial support for exceptions (throw / catch must occur in same CodeBlock).
37475
37476        * VM/CTI.cpp:
37477        (KJS::CTI::emitExceptionCheck):
37478        (KJS::CTI::emitCall):
37479        (KJS::CTI::privateCompile_pass2_Main):
37480        (KJS::CTI::privateCompile_pass4_SlowCases):
37481        (KJS::CTI::privateCompile):
37482        * VM/CTI.h:
37483        * VM/CodeBlock.cpp:
37484        (KJS::CodeBlock::nativeExceptionCodeForHandlerVPC):
37485        * VM/CodeBlock.h:
37486        * VM/CodeGenerator.cpp:
37487        (KJS::CodeGenerator::emitCatch):
37488        * VM/Machine.cpp:
37489        (KJS::Machine::throwException):
37490        (KJS::Machine::privateExecute):
37491        (KJS::ctiUnsupported):
37492        (KJS::ctiTimedOut):
37493        (KJS::Machine::cti_op_add):
37494        (KJS::Machine::cti_op_pre_inc):
37495        (KJS::Machine::cti_timeout_check):
37496        (KJS::Machine::cti_op_loop_if_less):
37497        (KJS::Machine::cti_op_put_by_id):
37498        (KJS::Machine::cti_op_get_by_id):
37499        (KJS::Machine::cti_op_instanceof):
37500        (KJS::Machine::cti_op_del_by_id):
37501        (KJS::Machine::cti_op_mul):
37502        (KJS::Machine::cti_op_call):
37503        (KJS::Machine::cti_op_resolve):
37504        (KJS::Machine::cti_op_construct):
37505        (KJS::Machine::cti_op_get_by_val):
37506        (KJS::Machine::cti_op_resolve_func):
37507        (KJS::Machine::cti_op_sub):
37508        (KJS::Machine::cti_op_put_by_val):
37509        (KJS::Machine::cti_op_lesseq):
37510        (KJS::Machine::cti_op_loop_if_true):
37511        (KJS::Machine::cti_op_negate):
37512        (KJS::Machine::cti_op_resolve_skip):
37513        (KJS::Machine::cti_op_div):
37514        (KJS::Machine::cti_op_pre_dec):
37515        (KJS::Machine::cti_op_jless):
37516        (KJS::Machine::cti_op_not):
37517        (KJS::Machine::cti_op_jtrue):
37518        (KJS::Machine::cti_op_post_inc):
37519        (KJS::Machine::cti_op_eq):
37520        (KJS::Machine::cti_op_lshift):
37521        (KJS::Machine::cti_op_bitand):
37522        (KJS::Machine::cti_op_rshift):
37523        (KJS::Machine::cti_op_bitnot):
37524        (KJS::Machine::cti_op_resolve_with_base):
37525        (KJS::Machine::cti_op_mod):
37526        (KJS::Machine::cti_op_less):
37527        (KJS::Machine::cti_op_neq):
37528        (KJS::Machine::cti_op_post_dec):
37529        (KJS::Machine::cti_op_urshift):
37530        (KJS::Machine::cti_op_bitxor):
37531        (KJS::Machine::cti_op_bitor):
37532        (KJS::Machine::cti_op_call_eval):
37533        (KJS::Machine::cti_op_throw):
37534        (KJS::Machine::cti_op_push_scope):
37535        (KJS::Machine::cti_op_stricteq):
37536        (KJS::Machine::cti_op_nstricteq):
37537        (KJS::Machine::cti_op_to_jsnumber):
37538        (KJS::Machine::cti_op_in):
37539        (KJS::Machine::cti_op_del_by_val):
37540        (KJS::Machine::cti_vm_throw):
37541        * VM/Machine.h:
37542        * kjs/ExecState.h:
37543        * masm/IA32MacroAsm.h:
37544        (KJS::IA32MacroAssembler::emitCmpl_i32m):
37545
375462008-08-28  Mark Rowe  <mrowe@apple.com>
37547
37548        Rubber-stamped by Oliver Hunt.
37549
37550        Print debugging info to stderr so that run-webkit-tests can capture it.
37551        This makes it easy to check whether test failures are due to unimplemented
37552        op codes, missing support for exceptions, etc.
37553
37554        * VM/CTI.cpp:
37555        (KJS::CTI::privateCompile_pass1_Scan):
37556        (KJS::CTI::printOpcodeOperandTypes):
37557        (KJS::CTI::privateCompile_pass2_Main):
37558        (KJS::CTI::privateCompile_pass4_SlowCases):
37559        (KJS::CTI::privateCompile):
37560        * VM/Machine.cpp:
37561        (KJS::Machine::privateExecute):
37562        (KJS::ctiException):
37563        (KJS::ctiUnsupported):
37564        (KJS::Machine::cti_op_call):
37565        (KJS::Machine::cti_op_resolve):
37566        (KJS::Machine::cti_op_construct):
37567        (KJS::Machine::cti_op_get_by_val):
37568        (KJS::Machine::cti_op_resolve_func):
37569        (KJS::Machine::cti_op_resolve_skip):
37570        (KJS::Machine::cti_op_resolve_with_base):
37571        (KJS::Machine::cti_op_call_eval):
37572
375732008-08-27  Mark Rowe  <mrowe@apple.com>
37574
37575        Reviewed by Gavin Barraclough and Maciej Stachowiak.
37576
37577        Fix fast/js/bitwise-and-on-undefined.html.
37578
37579        A temporary value in the slow path of op_bitand was being stored in edx, but was
37580        being clobbered by emitGetPutArg before we used it.  To fix this, emitGetPutArg
37581        now takes a third argument that specifies the scratch register to use when loading
37582        from memory.  This allows us to avoid clobbering the temporary in op_bitand.
37583
37584        * VM/CTI.cpp:
37585        (KJS::CTI::emitGetPutArg):
37586        (KJS::CTI::privateCompile_pass2_Main):
37587        (KJS::CTI::privateCompile_pass4_SlowCases):
37588        * VM/CTI.h:
37589
375902008-08-27  Mark Rowe  <mrowe@apple.com>
37591
37592        Rubber-stamped by Oliver Hunt.
37593
37594        Switch CTI on by default.
37595
37596        * wtf/Platform.h:
37597
375982008-08-27  Mark Rowe  <mrowe@apple.com>
37599
37600        Reviewed by Oliver Hunt.
37601
37602        Fix the build of the full WebKit stack.
37603
37604        * JavaScriptCore.xcodeproj/project.pbxproj: Mark two new headers as private so they can be pulled in from WebCore.
37605        * VM/CTI.h: Fix build issues that show up when compiled with GCC 4.2 as part of WebCore.
37606        * wrec/WREC.h: Ditto.
37607
376082008-08-27  Mark Rowe  <mrowe@apple.com>
37609
37610        Reviewed by Sam Weinig.
37611
37612        Implement op_new_error.  Does not fix any tests as it is always followed by the unimplemented op_throw.
37613
37614        * VM/CTI.cpp:
37615        (KJS::CTI::privateCompile_pass1_Scan):
37616        (KJS::CTI::privateCompile_pass2_Main):
37617        * VM/Machine.cpp:
37618        (KJS::Machine::cti_op_new_error):
37619        * VM/Machine.h:
37620
376212008-08-27  Sam Weinig  <sam@webkit.org>
37622
37623        Reviewed by Gavin Barraclough and Geoff Garen.
37624
37625        Implement op_put_getter and op_put_setter.
37626
37627        * VM/CTI.cpp:
37628        (KJS::CTI::privateCompile_pass1_Scan):
37629        (KJS::CTI::privateCompile_pass2_Main):
37630        * VM/Machine.cpp:
37631        (KJS::Machine::cti_op_put_getter):
37632        (KJS::Machine::cti_op_put_setter):
37633        * VM/Machine.h:
37634
376352008-08-27  Sam Weinig  <sam@webkit.org>
37636
37637        Reviewed by Gavin Barraclough and Geoff Garen.
37638
37639        Implement op_del_by_val fixing 3 mozilla tests.
37640
37641        * VM/CTI.cpp:
37642        (KJS::CTI::privateCompile_pass1_Scan):
37643        (KJS::CTI::privateCompile_pass2_Main):
37644        * VM/Machine.cpp:
37645        (KJS::Machine::cti_op_del_by_val):
37646        * VM/Machine.h:
37647
376482008-08-27  Gavin Barraclough  <barraclough@apple.com>
37649
37650        Reviewed by Oliver Hunt.
37651
37652        Quick & dirty fix to get SamplingTool sampling op_call.
37653
37654        * VM/SamplingTool.h:
37655        (KJS::SamplingTool::callingHostFunction):
37656
376572008-08-27  Sam Weinig  <sam@webkit.org>
37658
37659        Reviewed by Gavin Barraclough and Geoff Garen.
37660
37661        Fix op_put_by_index.
37662
37663        * VM/CTI.cpp:
37664        (KJS::CTI::privateCompile_pass2_Main): Use emitPutArgConstant instead of emitGetPutArg
37665        for the property value.
37666        * VM/Machine.cpp:
37667        (KJS::Machine::cti_op_put_by_index): Get the property value from the correct argument.
37668
376692008-08-27  Sam Weinig  <sam@webkit.org>
37670
37671        Reviewed by Gavin Barraclough and Geoff Garen.
37672
37673        Implement op_switch_imm in the CTI fixing 13 mozilla tests.
37674
37675        * VM/CTI.cpp:
37676        (KJS::CTI::privateCompile_pass1_Scan):
37677        (KJS::CTI::privateCompile_pass2_Main):
37678        * VM/Machine.cpp:
37679        (KJS::Machine::cti_op_switch_imm):
37680        * VM/Machine.h:
37681
376822008-08-27  Gavin Barraclough  <barraclough@apple.com>
37683
37684        Reviewed by Oliver Hunt.
37685
37686        Implement op_switch_char in CTI.
37687
37688        * VM/CTI.cpp:
37689        (KJS::CTI::emitCall):
37690        (KJS::CTI::privateCompile_pass1_Scan):
37691        (KJS::CTI::privateCompile_pass2_Main):
37692        (KJS::CTI::privateCompile):
37693        * VM/CTI.h:
37694        (KJS::CallRecord::CallRecord):
37695        (KJS::SwitchRecord::SwitchRecord):
37696        * VM/CodeBlock.h:
37697        (KJS::SimpleJumpTable::SimpleJumpTable::ctiForValue):
37698        * VM/Machine.cpp:
37699        (KJS::Machine::cti_op_switch_char):
37700        * VM/Machine.h:
37701        * masm/IA32MacroAsm.h:
37702        (KJS::IA32MacroAssembler::):
37703        (KJS::IA32MacroAssembler::emitJmpN_r):
37704        (KJS::IA32MacroAssembler::getRelocatedAddress):
37705        * wtf/Platform.h:
37706
377072008-08-26  Sam Weinig  <sam@webkit.org>
37708
37709        Reviewed by Mark Rowe.
37710
37711        Implement op_put_by_index to fix 1 mozilla test.
37712
37713        * VM/CTI.cpp:
37714        (KJS::CTI::privateCompile_pass1_Scan):
37715        (KJS::CTI::privateCompile_pass2_Main):
37716        * VM/Machine.cpp:
37717        (KJS::Machine::cti_op_put_by_index):
37718        * VM/Machine.h:
37719
377202008-08-26  Gavin Barraclough  <barraclough@apple.com>
37721
37722        Reviewed by Geoff Garen.
37723
37724        More fixes from Geoff's review.
37725
37726        * VM/CTI.cpp:
37727        (KJS::CTI::emitGetArg):
37728        (KJS::CTI::emitGetPutArg):
37729        (KJS::CTI::emitPutArg):
37730        (KJS::CTI::emitPutArgConstant):
37731        (KJS::CTI::getConstantImmediateNumericArg):
37732        (KJS::CTI::emitGetCTIParam):
37733        (KJS::CTI::emitPutResult):
37734        (KJS::CTI::emitCall):
37735        (KJS::CTI::emitJumpSlowCaseIfNotImm):
37736        (KJS::CTI::emitJumpSlowCaseIfNotImms):
37737        (KJS::CTI::getDeTaggedConstantImmediate):
37738        (KJS::CTI::emitFastArithDeTagImmediate):
37739        (KJS::CTI::emitFastArithReTagImmediate):
37740        (KJS::CTI::emitFastArithPotentiallyReTagImmediate):
37741        (KJS::CTI::emitFastArithImmToInt):
37742        (KJS::CTI::emitFastArithIntToImmOrSlowCase):
37743        (KJS::CTI::privateCompile_pass2_Main):
37744        (KJS::CTI::privateCompile_pass4_SlowCases):
37745        (KJS::CTI::privateCompile):
37746        * VM/CTI.h:
37747
377482008-08-26  Mark Rowe  <mrowe@apple.com>
37749
37750        Reviewed by Gavin Barraclough and Geoff Garen.
37751
37752        Implement op_jmp_scopes to fix 2 Mozilla tests.
37753
37754        * VM/CTI.cpp:
37755        (KJS::CTI::privateCompile_pass1_Scan):
37756        (KJS::CTI::privateCompile_pass2_Main):
37757        * VM/Machine.cpp:
37758        (KJS::Machine::cti_op_push_new_scope): Update ExecState::m_scopeChain after calling ARG_setScopeChain.
37759        (KJS::Machine::cti_op_jmp_scopes):
37760        * VM/Machine.h:
37761
377622008-08-26  Gavin Barraclough  <barraclough@apple.com>
37763
37764        Reviewed by Oliver Hunt.
37765
37766        WebKit Regular Expression Compiler. (set ENABLE_WREC = 1 in Platform.h).
37767
37768        * JavaScriptCore.xcodeproj/project.pbxproj:
37769        * kjs/regexp.cpp:
37770        * kjs/regexp.h:
37771        * wrec: Added.
37772        * wrec/WREC.cpp: Added.
37773        * wrec/WREC.h: Added.
37774        * wtf/Platform.h:
37775
377762008-08-26  Sam Weinig  <sam@webkit.org>
37777
37778        Rubber-stamped by Oliver Hunt.
37779
37780        Remove bogus assertion.
37781
37782        * VM/Machine.cpp:
37783        (KJS::Machine::cti_op_del_by_id):
37784
377852008-08-26  Mark Rowe  <mrowe@apple.com>
37786
37787        Reviewed by Sam Weinig.
37788
37789        Implement op_push_new_scope and stub out op_catch.  This fixes 11 Mozilla tests.
37790
37791        * VM/CTI.cpp:
37792        (KJS::CTI::privateCompile_pass1_Scan):
37793        (KJS::CTI::privateCompile_pass2_Main):
37794        * VM/Machine.cpp:
37795        (KJS::Machine::cti_op_push_new_scope):
37796        (KJS::Machine::cti_op_catch):
37797        * VM/Machine.h:
37798
377992008-08-26  Mark Rowe  <mrowe@apple.com>
37800
37801        Reviewed by Sam Weinig.
37802
37803        Clean up op_resolve_base so that it shares its implementation with the bytecode interpreter.
37804
37805        * VM/Machine.cpp:
37806        (KJS::inlineResolveBase):
37807        (KJS::resolveBase):
37808
378092008-08-26  Oliver Hunt  <oliver@apple.com>
37810
37811        Reviewed by Sam Weinig.
37812
37813        Add codegen support for op_instanceof, fixing 15 mozilla tests.
37814
37815        * VM/CTI.cpp:
37816        (KJS::CTI::privateCompile_pass1_Scan):
37817        (KJS::CTI::privateCompile_pass2_Main):
37818        * VM/Machine.cpp:
37819        (KJS::Machine::cti_op_instanceof):
37820        (KJS::Machine::cti_op_del_by_id):
37821        * VM/Machine.h:
37822        * wtf/Platform.h:
37823
378242008-08-26  Gavin Barraclough  <barraclough@apple.com>
37825
37826        Reviewed by Geoff Garen.
37827
37828        Fixes for initial review comments.
37829
37830        * VM/CTI.cpp:
37831        (KJS::CTI::ctiCompileGetArg):
37832        (KJS::CTI::ctiCompileGetPutArg):
37833        (KJS::CTI::ctiCompilePutResult):
37834        (KJS::CTI::ctiCompileCall):
37835        (KJS::CTI::CTI):
37836        (KJS::CTI::privateCompile_pass1_Scan):
37837        (KJS::CTI::printOpcodeOperandTypes):
37838        (KJS::CTI::privateCompile_pass2_Main):
37839        (KJS::CTI::privateCompile_pass4_SlowCases):
37840        (KJS::CTI::privateCompile):
37841        * VM/CTI.h:
37842        * VM/Register.h:
37843        * kjs/JSValue.h:
37844
378452008-08-26  Sam Weinig  <sam@webkit.org>
37846
37847        Reviewed by Gavin Barraclough and Geoff Garen.
37848
37849        Fix up exception checking code.
37850
37851        * VM/Machine.cpp:
37852        (KJS::Machine::cti_op_call):
37853        (KJS::Machine::cti_op_resolve):
37854        (KJS::Machine::cti_op_construct):
37855        (KJS::Machine::cti_op_resolve_func):
37856        (KJS::Machine::cti_op_resolve_skip):
37857        (KJS::Machine::cti_op_resolve_with_base):
37858        (KJS::Machine::cti_op_call_eval):
37859
378602008-08-26  Sam Weinig  <sam@webkit.org>
37861
37862        Reviewed by Oliver Hunt.
37863
37864        Fix slowcase for op_post_inc and op_post_dec fixing 2 mozilla tests.
37865
37866        * VM/CTI.cpp:
37867        (KJS::CTI::privateCompile_pass4_SlowCases):
37868
378692008-08-26  Mark Rowe  <mrowe@apple.com>
37870
37871        Reviewed by Sam Weinig.
37872
37873        Implement op_in, fixing 8 mozilla tests.
37874
37875        * VM/CTI.cpp:
37876        (KJS::CTI::privateCompile_pass1_Scan):
37877        (KJS::CTI::privateCompile_pass2_Main):
37878        * VM/Machine.cpp:
37879        (KJS::Machine::cti_op_in):
37880        * VM/Machine.h:
37881
378822008-08-26  Mark Rowe  <mrowe@apple.com>
37883
37884        Rubber-stamped by Oliver Hunt.
37885
37886        Don't hardcode the size of a Register for op_new_array.  Fixes a crash
37887        seen during the Mozilla tests.
37888
37889        * VM/CTI.cpp:
37890        (KJS::CTI::privateCompile_pass2_Main):
37891
378922008-08-26  Sam Weinig  <sam@webkit.org>
37893
37894        Reviewed by Gavin Barraclough and Geoff Garen.
37895
37896        Add support for op_push_scope and op_pop_scope, fixing 20 mozilla tests.
37897
37898        * VM/CTI.cpp:
37899        (KJS::CTI::privateCompile_pass1_Scan):
37900        (KJS::CTI::privateCompile_pass2_Main):
37901        * VM/CTI.h:
37902        * VM/Machine.cpp:
37903        (KJS::Machine::cti_op_push_scope):
37904        (KJS::Machine::cti_op_pop_scope):
37905        * VM/Machine.h:
37906
379072008-08-26  Oliver Hunt  <oliver@apple.com>
37908
37909        Reviewed by Maciej Stachowiak.
37910
37911        Add codegen support for op_del_by_id, fixing 49 mozilla tests.
37912
37913        * VM/CTI.cpp:
37914        (KJS::CTI::privateCompile_pass1_Scan):
37915        (KJS::CTI::privateCompile_pass2_Main):
37916        * VM/Machine.cpp:
37917        (KJS::Machine::cti_op_del_by_id):
37918        * VM/Machine.h:
37919
379202008-08-26  Sam Weinig  <sam@webkit.org>
37921
37922        Reviewed by Gavin Barraclough and Geoff Garen.
37923
37924        Don't hardcode the size of a Register for op_get_scoped_var and op_put_scoped_var 
37925        fixing 513 mozilla tests in debug build.
37926
37927        * VM/CTI.cpp:
37928        (KJS::CTI::privateCompile_pass2_Main):
37929
379302008-08-26  Oliver Hunt  <oliver@apple.com>
37931
37932        Reviewed by Maciej Stachowiak.
37933        
37934        Added code generator support for op_loop, fixing around 60 mozilla tests.
37935
37936        * VM/CTI.cpp:
37937        (KJS::CTI::privateCompile_pass1_Scan):
37938        (KJS::CTI::privateCompile_pass2_Main):
37939
379402008-08-26  Mark Rowe  <mrowe@apple.com>
37941
37942        Reviewed by Sam Weinig.
37943
37944        Set -fomit-frame-pointer in the correct location.
37945
37946        * Configurations/JavaScriptCore.xcconfig:
37947        * JavaScriptCore.xcodeproj/project.pbxproj:
37948
379492008-08-26  Gavin Barraclough  <barraclough@apple.com>
37950
37951        Reviewed by Geoff Garen.
37952        
37953        Inital cut of CTI, Geoff's review fixes to follow.
37954
37955        * JavaScriptCore.xcodeproj/project.pbxproj:
37956        * VM/CTI.cpp: Added.
37957        (KJS::getJCB):
37958        (KJS::CTI::ctiCompileGetArg):
37959        (KJS::CTI::ctiCompileGetPutArg):
37960        (KJS::CTI::ctiCompilePutArg):
37961        (KJS::CTI::ctiCompilePutArgImm):
37962        (KJS::CTI::ctiImmediateNumericArg):
37963        (KJS::CTI::ctiCompileGetCTIParam):
37964        (KJS::CTI::ctiCompilePutResult):
37965        (KJS::CTI::ctiCompileCall):
37966        (KJS::CTI::slowCaseIfNotImm):
37967        (KJS::CTI::slowCaseIfNotImms):
37968        (KJS::CTI::ctiFastArithDeTagConstImmediate):
37969        (KJS::CTI::ctiFastArithDeTagImmediate):
37970        (KJS::CTI::ctiFastArithReTagImmediate):
37971        (KJS::CTI::ctiFastArithPotentiallyReTagImmediate):
37972        (KJS::CTI::ctiFastArithImmToInt):
37973        (KJS::CTI::ctiFastArithIntToImmOrSlowCase):
37974        (KJS::CTI::CTI):
37975        (KJS::CTI::privateCompile_pass1_Scan):
37976        (KJS::CTI::ctiCompileAdd):
37977        (KJS::CTI::ctiCompileAddImm):
37978        (KJS::CTI::ctiCompileAddImmNotInt):
37979        (KJS::CTI::TEMP_HACK_PRINT_TYPES):
37980        (KJS::CTI::privateCompile_pass2_Main):
37981        (KJS::CTI::privateCompile_pass3_Link):
37982        (KJS::CTI::privateCompile_pass4_SlowCases):
37983        (KJS::CTI::privateCompile):
37984        * VM/CTI.h: Added.
37985        (KJS::CTI2Result::CTI2Result):
37986        (KJS::CallRecord::CallRecord):
37987        (KJS::JmpTable::JmpTable):
37988        (KJS::SlowCaseEntry::SlowCaseEntry):
37989        (KJS::CTI::compile):
37990        (KJS::CTI::LabelInfo::LabelInfo):
37991        * VM/CodeBlock.h:
37992        (KJS::CodeBlock::CodeBlock):
37993        (KJS::CodeBlock::~CodeBlock):
37994        * VM/Machine.cpp:
37995        (KJS::Machine::execute):
37996        (KJS::Machine::privateExecute):
37997        (KJS::ctiException):
37998        (KJS::ctiUnsupported):
37999        (KJS::ctiTimedOut):
38000        (KJS::Machine::cti_op_end):
38001        (KJS::Machine::cti_op_add):
38002        (KJS::Machine::cti_op_pre_inc):
38003        (KJS::Machine::cti_timeout_check):
38004        (KJS::Machine::cti_op_loop_if_less):
38005        (KJS::Machine::cti_op_new_object):
38006        (KJS::Machine::cti_op_put_by_id):
38007        (KJS::Machine::cti_op_get_by_id):
38008        (KJS::Machine::cti_op_mul):
38009        (KJS::Machine::cti_op_new_func):
38010        (KJS::Machine::cti_op_call):
38011        (KJS::Machine::cti_op_ret):
38012        (KJS::Machine::cti_op_new_array):
38013        (KJS::Machine::cti_op_resolve):
38014        (KJS::Machine::cti_op_construct):
38015        (KJS::Machine::cti_op_get_by_val):
38016        (KJS::Machine::cti_op_resolve_func):
38017        (KJS::Machine::cti_op_sub):
38018        (KJS::Machine::cti_op_put_by_val):
38019        (KJS::Machine::cti_op_lesseq):
38020        (KJS::Machine::cti_op_loop_if_true):
38021        (KJS::Machine::cti_op_negate):
38022        (KJS::Machine::cti_op_resolve_base):
38023        (KJS::Machine::cti_op_resolve_skip):
38024        (KJS::Machine::cti_op_div):
38025        (KJS::Machine::cti_op_pre_dec):
38026        (KJS::Machine::cti_op_jless):
38027        (KJS::Machine::cti_op_not):
38028        (KJS::Machine::cti_op_jtrue):
38029        (KJS::Machine::cti_op_post_inc):
38030        (KJS::Machine::cti_op_eq):
38031        (KJS::Machine::cti_op_lshift):
38032        (KJS::Machine::cti_op_bitand):
38033        (KJS::Machine::cti_op_rshift):
38034        (KJS::Machine::cti_op_bitnot):
38035        (KJS::Machine::cti_op_resolve_with_base):
38036        (KJS::Machine::cti_op_new_func_exp):
38037        (KJS::Machine::cti_op_mod):
38038        (KJS::Machine::cti_op_less):
38039        (KJS::Machine::cti_op_neq):
38040        (KJS::Machine::cti_op_post_dec):
38041        (KJS::Machine::cti_op_urshift):
38042        (KJS::Machine::cti_op_bitxor):
38043        (KJS::Machine::cti_op_new_regexp):
38044        (KJS::Machine::cti_op_bitor):
38045        (KJS::Machine::cti_op_call_eval):
38046        (KJS::Machine::cti_op_throw):
38047        (KJS::Machine::cti_op_get_pnames):
38048        (KJS::Machine::cti_op_next_pname):
38049        (KJS::Machine::cti_op_typeof):
38050        (KJS::Machine::cti_op_stricteq):
38051        (KJS::Machine::cti_op_nstricteq):
38052        (KJS::Machine::cti_op_to_jsnumber):
38053        * VM/Machine.h:
38054        * VM/Register.h:
38055        (KJS::Register::jsValue):
38056        (KJS::Register::getJSValue):
38057        (KJS::Register::codeBlock):
38058        (KJS::Register::scopeChain):
38059        (KJS::Register::i):
38060        (KJS::Register::r):
38061        (KJS::Register::vPC):
38062        (KJS::Register::jsPropertyNameIterator):
38063        * VM/SamplingTool.cpp:
38064        (KJS::):
38065        (KJS::SamplingTool::run):
38066        (KJS::SamplingTool::dump):
38067        * VM/SamplingTool.h:
38068        * kjs/JSImmediate.h:
38069        (KJS::JSImmediate::zeroImmediate):
38070        (KJS::JSImmediate::oneImmediate):
38071        * kjs/JSValue.h:
38072        * kjs/JSVariableObject.h:
38073        (KJS::JSVariableObject::JSVariableObjectData::offsetOf_registers):
38074        (KJS::JSVariableObject::offsetOf_d):
38075        (KJS::JSVariableObject::offsetOf_Data_registers):
38076        * masm: Added.
38077        * masm/IA32MacroAsm.h: Added.
38078        (KJS::JITCodeBuffer::JITCodeBuffer):
38079        (KJS::JITCodeBuffer::putByte):
38080        (KJS::JITCodeBuffer::putShort):
38081        (KJS::JITCodeBuffer::putInt):
38082        (KJS::JITCodeBuffer::getEIP):
38083        (KJS::JITCodeBuffer::start):
38084        (KJS::JITCodeBuffer::getOffset):
38085        (KJS::JITCodeBuffer::reset):
38086        (KJS::JITCodeBuffer::copy):
38087        (KJS::IA32MacroAssembler::):
38088        (KJS::IA32MacroAssembler::emitModRm_rr):
38089        (KJS::IA32MacroAssembler::emitModRm_rm):
38090        (KJS::IA32MacroAssembler::emitModRm_rmsib):
38091        (KJS::IA32MacroAssembler::emitModRm_opr):
38092        (KJS::IA32MacroAssembler::emitModRm_opm):
38093        (KJS::IA32MacroAssembler::IA32MacroAssembler):
38094        (KJS::IA32MacroAssembler::emitInt3):
38095        (KJS::IA32MacroAssembler::emitPushl_r):
38096        (KJS::IA32MacroAssembler::emitPopl_r):
38097        (KJS::IA32MacroAssembler::emitMovl_rr):
38098        (KJS::IA32MacroAssembler::emitAddl_rr):
38099        (KJS::IA32MacroAssembler::emitAddl_i8r):
38100        (KJS::IA32MacroAssembler::emitAddl_i32r):
38101        (KJS::IA32MacroAssembler::emitAddl_mr):
38102        (KJS::IA32MacroAssembler::emitAndl_rr):
38103        (KJS::IA32MacroAssembler::emitAndl_i32r):
38104        (KJS::IA32MacroAssembler::emitCmpl_i8r):
38105        (KJS::IA32MacroAssembler::emitCmpl_rr):
38106        (KJS::IA32MacroAssembler::emitCmpl_rm):
38107        (KJS::IA32MacroAssembler::emitCmpl_i32r):
38108        (KJS::IA32MacroAssembler::emitCmpw_rm):
38109        (KJS::IA32MacroAssembler::emitOrl_rr):
38110        (KJS::IA32MacroAssembler::emitOrl_i8r):
38111        (KJS::IA32MacroAssembler::emitSubl_rr):
38112        (KJS::IA32MacroAssembler::emitSubl_i8r):
38113        (KJS::IA32MacroAssembler::emitSubl_i32r):
38114        (KJS::IA32MacroAssembler::emitSubl_mr):
38115        (KJS::IA32MacroAssembler::emitTestl_i32r):
38116        (KJS::IA32MacroAssembler::emitTestl_rr):
38117        (KJS::IA32MacroAssembler::emitXorl_i8r):
38118        (KJS::IA32MacroAssembler::emitXorl_rr):
38119        (KJS::IA32MacroAssembler::emitSarl_i8r):
38120        (KJS::IA32MacroAssembler::emitSarl_CLr):
38121        (KJS::IA32MacroAssembler::emitShl_i8r):
38122        (KJS::IA32MacroAssembler::emitShll_CLr):
38123        (KJS::IA32MacroAssembler::emitMull_rr):
38124        (KJS::IA32MacroAssembler::emitIdivl_r):
38125        (KJS::IA32MacroAssembler::emitCdq):
38126        (KJS::IA32MacroAssembler::emitMovl_mr):
38127        (KJS::IA32MacroAssembler::emitMovzwl_mr):
38128        (KJS::IA32MacroAssembler::emitMovl_rm):
38129        (KJS::IA32MacroAssembler::emitMovl_i32r):
38130        (KJS::IA32MacroAssembler::emitMovl_i32m):
38131        (KJS::IA32MacroAssembler::emitLeal_mr):
38132        (KJS::IA32MacroAssembler::emitRet):
38133        (KJS::IA32MacroAssembler::JmpSrc::JmpSrc):
38134        (KJS::IA32MacroAssembler::JmpDst::JmpDst):
38135        (KJS::IA32MacroAssembler::emitCall):
38136        (KJS::IA32MacroAssembler::label):
38137        (KJS::IA32MacroAssembler::emitUnlinkedJmp):
38138        (KJS::IA32MacroAssembler::emitUnlinkedJne):
38139        (KJS::IA32MacroAssembler::emitUnlinkedJe):
38140        (KJS::IA32MacroAssembler::emitUnlinkedJl):
38141        (KJS::IA32MacroAssembler::emitUnlinkedJle):
38142        (KJS::IA32MacroAssembler::emitUnlinkedJge):
38143        (KJS::IA32MacroAssembler::emitUnlinkedJae):
38144        (KJS::IA32MacroAssembler::emitUnlinkedJo):
38145        (KJS::IA32MacroAssembler::emitPredictionNotTaken):
38146        (KJS::IA32MacroAssembler::link):
38147        (KJS::IA32MacroAssembler::copy):
38148        * wtf/Platform.h:
38149
381502008-08-26  Oliver Hunt  <oliver@apple.com>
38151
38152        RS=Maciej.
38153
38154        Enabled -fomit-frame-pointer on Release and Production builds, add additional Profiling build config for shark, etc.
38155
38156        * JavaScriptCore.xcodeproj/project.pbxproj:
38157
38158=== Start merge of squirrelfish-extreme ===
38159
381602008-09-06  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
38161
38162        Reviewed by Maciej Stachowiak.
38163
38164        Fix the Mac Debug build by adding symbols that are exported only in a
38165        Debug configuration.
38166
38167        * Configurations/JavaScriptCore.xcconfig:
38168        * DerivedSources.make:
38169        * JavaScriptCore.Debug.exp: Added.
38170        * JavaScriptCore.base.exp: Copied from JavaScriptCore.exp.
38171        * JavaScriptCore.exp: Removed.
38172        * JavaScriptCore.xcodeproj/project.pbxproj:
38173
381742008-09-05  Darin Adler  <darin@apple.com>
38175
38176        Reviewed by Cameron Zwarich.
38177
38178        - https://bugs.webkit.org/show_bug.cgi?id=20681
38179          JSPropertyNameIterator functions need to be inlined
38180
38181        1.007x as fast on SunSpider overall
38182        1.081x as fast on SunSpider math-cordic
38183
38184        * VM/JSPropertyNameIterator.cpp: Moved functions out of here.
38185        * VM/JSPropertyNameIterator.h:
38186        (KJS::JSPropertyNameIterator::JSPropertyNameIterator): Moved
38187        this into the header and marked it inline.
38188        (KJS::JSPropertyNameIterator::create): Ditto.
38189        (KJS::JSPropertyNameIterator::next): Ditto.
38190
381912008-09-05  Darin Adler  <darin@apple.com>
38192
38193        Reviewed by Geoffrey Garen.
38194
38195        - fix https://bugs.webkit.org/show_bug.cgi?id=20673
38196          single-character strings are churning in the Identifier table
38197
38198        1.007x as fast on SunSpider overall
38199        1.167x as fast on SunSpider string-fasta
38200
38201        * JavaScriptCore.exp: Updated.
38202        * kjs/SmallStrings.cpp:
38203        (KJS::SmallStrings::singleCharacterStringRep): Added.
38204        * kjs/SmallStrings.h: Added singleCharacterStringRep for clients that
38205        need just a UString, not a JSString.
38206        * kjs/identifier.cpp:
38207        (KJS::Identifier::add): Added special cases for single character strings
38208        so that the UString::Rep that ends up in the identifier table is the one
38209        from the single-character string optimization; otherwise we end up having
38210        to look it up in the identifier table over and over again.
38211        (KJS::Identifier::addSlowCase): Ditto.
38212        (KJS::Identifier::checkSameIdentifierTable): Made this function an empty
38213        inline in release builds so that callers don't have to put #ifndef NDEBUG
38214        at each call site.
38215        * kjs/identifier.h:
38216        (KJS::Identifier::add): Removed #ifndef NDEBUG around the calls to
38217        checkSameIdentifierTable.
38218        (KJS::Identifier::checkSameIdentifierTable): Added. Empty inline version
38219        for NDEBUG builds.
38220
382212008-09-05  Mark Rowe  <mrowe@apple.com>
38222
38223        Build fix.
38224
38225        * kjs/JSObject.h: Move the inline virtual destructor after a non-inline
38226        virtual function so that the symbol for the vtable is not marked as a
38227        weakly exported symbol.
38228
382292008-09-05  Darin Adler  <darin@apple.com>
38230
38231        Reviewed by Sam Weinig.
38232
38233        - fix https://bugs.webkit.org/show_bug.cgi?id=20671
38234          JavaScriptCore string manipulation spends too much time in memcpy
38235
38236        1.011x as fast on SunSpider overall
38237        1.028x as fast on SunSpider string tests
38238
38239        For small strings, use a loop rather than calling memcpy. The loop can
38240        be faster because there's no function call overhead, and because it can
38241        assume the pointers are aligned instead of checking that. Currently the
38242        threshold is set at 20 characters, based on some testing on one particular
38243        computer. Later we can tune this for various platforms by setting
38244        USTRING_COPY_CHARS_INLINE_CUTOFF appropriately, but it does no great harm
38245        if not perfectly tuned.
38246
38247        * kjs/ustring.cpp:
38248        (KJS::overflowIndicator): Removed bogus const.
38249        (KJS::maxUChars): Ditto.
38250        (KJS::copyChars): Added.
38251        (KJS::UString::Rep::createCopying): Call copyChars instead of memcpy.
38252        Also eliminated need for const_cast.
38253        (KJS::UString::expandPreCapacity): Ditto.
38254        (KJS::concatenate): Ditto.
38255        (KJS::UString::spliceSubstringsWithSeparators): Ditto.
38256        (KJS::UString::append): Ditto.
38257
382582008-09-05  Kevin McCullough  <kmccullough@apple.com>
38259
38260        Reviewed by Sam and Alexey.
38261
38262        Make the profiler work with a null exec state.  This will allow other
38263        applications start the profiler to get DTrace probes going without
38264        needing a WebView.
38265
38266        * ChangeLog:
38267        * profiler/ProfileGenerator.cpp:
38268        (KJS::ProfileGenerator::ProfileGenerator):
38269        (KJS::ProfileGenerator::willExecute):
38270        (KJS::ProfileGenerator::didExecute):
38271        * profiler/Profiler.cpp:
38272        (KJS::Profiler::startProfiling):
38273        (KJS::Profiler::stopProfiling):
38274        (KJS::dispatchFunctionToProfiles):
38275
382762008-09-04  Gavin Barraclough  <barraclough@apple.com>
38277
38278        Reviewed by Geoffrey Garen.
38279        
38280        Fixed an off-by-one error that would cause the StructureIDChain to
38281        be one object too short.
38282        
38283        Can't construct a test case because other factors make this not crash
38284        (yet!).
38285
38286        * kjs/StructureID.cpp:
38287        (KJS::StructureIDChain::StructureIDChain):
38288
382892008-09-04  Kevin Ollivier  <kevino@theolliviers.com>
38290
38291        wx build fixes.
38292
38293        * JavaScriptCoreSources.bkl:
38294
382952008-09-04  Mark Rowe  <mrowe@apple.com>
38296
38297        Reviewed by Eric Seidel.
38298
38299        Fix https://bugs.webkit.org/show_bug.cgi?id=20639.
38300        Bug 20639: ENABLE_DASHBOARD_SUPPORT does not need to be a FEATURE_DEFINE
38301
38302        * Configurations/JavaScriptCore.xcconfig: Remove ENABLE_DASHBOARD_SUPPORT from FEATURE_DEFINES.
38303        * wtf/Platform.h: Set ENABLE_DASHBOARD_SUPPORT for PLATFORM(MAC).
38304
383052008-09-04  Adele Peterson  <adele@apple.com>
38306
38307        Build fix.
38308
38309        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
38310        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
38311        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
38312
383132008-09-04  Mark Rowe  <mrowe@apple.com>
38314
38315        Mac build fix.
38316
38317        * kjs/config.h: Only check the value of HAVE_CONFIG_H if it is defined.
38318
383192008-09-04  Marco Barisione  <marco.barisione@collabora.co.uk>
38320
38321        Reviewed by Eric Seidel.
38322
38323        http://bugs.webkit.org/show_bug.cgi?id=20380
38324        [GTK][AUTOTOOLS] Include autotoolsconfig.h from config.h
38325
38326        * kjs/config.h: Include the configuration header generated by
38327        autotools if available.
38328
383292008-09-04  Tor Arne Vestbø  <tavestbo@trolltech.com>
38330
38331        Reviewed by Simon.
38332
38333        Fix the QtWebKit build to match changes in r36016
38334
38335        * JavaScriptCore.pri:
38336
383372008-09-04  Mark Rowe  <mrowe@apple.com>
38338
38339        Fix the 64-bit build.
38340
38341        * VM/CodeBlock.cpp:
38342        (KJS::CodeBlock::printStructureID): Store the instruction offset into an unsigned local
38343        to avoid a warning related to format specifiers.
38344        (KJS::CodeBlock::printStructureIDs): Ditto.
38345
383462008-09-04  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
38347
38348        Rubber-stamped by Oliver Hunt.
38349
38350        Correct the spelling of 'entryIndices'.
38351
38352        * kjs/PropertyMap.cpp:
38353        (KJS::PropertyMap::get):
38354        (KJS::PropertyMap::getLocation):
38355        (KJS::PropertyMap::put):
38356        (KJS::PropertyMap::insert):
38357        (KJS::PropertyMap::remove):
38358        (KJS::PropertyMap::checkConsistency):
38359        * kjs/PropertyMap.h:
38360        (KJS::PropertyMapHashTable::entries):
38361        (KJS::PropertyMap::getOffset):
38362        (KJS::PropertyMap::putOffset):
38363        (KJS::PropertyMap::offsetForTableLocation):
38364
383652008-09-03  Geoffrey Garen  <ggaren@apple.com>
38366
38367        Reviewed by Cameron Zwarich.
38368        
38369        Fixed <rdar://problem/6193925> REGRESSION: Crash occurs at
38370        KJS::Machine::privateExecute() when attempting to load my Mobile Gallery
38371        (http://www.me.com/gallery/#home)
38372        
38373        also
38374        
38375        https://bugs.webkit.org/show_bug.cgi?id=20633 Crash in privateExecute
38376        @ cs.byu.edu
38377        
38378        The underlying problem was that we would cache prototype properties
38379        even if the prototype was a dictionary.
38380        
38381        The fix is to transition a prototype back from dictionary to normal
38382        status when an opcode caches access to it. (This is better than just
38383        refusing to cache, since a heavily accessed prototype is almost
38384        certainly not a true dictionary.)
38385
38386        * VM/Machine.cpp:
38387        (KJS::Machine::tryCacheGetByID):
38388        * kjs/JSObject.h:
38389
383902008-09-03  Eric Seidel  <eric@webkit.org>
38391
38392        Reviewed by Sam.
38393
38394        Clean up Platform.h and add PLATFORM(CHROMIUM), PLATFORM(SKIA) and USE(V8_BINDINGS)
38395
38396        * Configurations/JavaScriptCore.xcconfig: add missing ENABLE_*
38397        * wtf/ASCIICType.h: include <wtf/Assertions.h> since it depends on it.
38398        * wtf/Platform.h:
38399
384002008-09-03  Kevin McCullough  <kmccullough@apple.com>
38401
38402        Reviewed by Tim.
38403
38404        Remove the rest of the "zombie" code from the profiler.
38405        - There is no longer a need for the ProfilerClient callback mechanism.
38406
38407        * API/JSProfilerPrivate.cpp:
38408        (JSStartProfiling):
38409        * JavaScriptCore.exp:
38410        * profiler/HeavyProfile.h:
38411        * profiler/ProfileGenerator.cpp:
38412        (KJS::ProfileGenerator::create):
38413        (KJS::ProfileGenerator::ProfileGenerator):
38414        * profiler/ProfileGenerator.h:
38415        (KJS::ProfileGenerator::profileGroup):
38416        * profiler/Profiler.cpp:
38417        (KJS::Profiler::startProfiling):
38418        (KJS::Profiler::stopProfiling): Immediately return the profile when
38419        stopped instead of using a callback.
38420        * profiler/Profiler.h:
38421        * profiler/TreeProfile.h:
38422
384232008-09-03  Adele Peterson  <adele@apple.com>
38424
38425        Build fix.
38426
38427        * wtf/win/MainThreadWin.cpp:
38428
384292008-09-02  Kevin McCullough  <kmccullough@apple.com>
38430
38431        Reviewed by Darin and Tim.
38432
38433        Remove most of the "zombie" mode from the profiler.  Next we will need
38434        to remove the client callback mechanism in profiles.
38435
38436        - This simplifies the code, leverages the recent changes I've made in
38437        getting line numbers from SquirrelFish, and is a slight speed
38438        improvement on SunSpider.
38439        - Also the "zombie" mode was a constant source of odd edge cases and
38440        obscure bugs so it's good to remove since all of its issues may not have
38441        been found.
38442
38443        * API/JSProfilerPrivate.cpp: No need to call didFinishAllExecution() any
38444        more.
38445        (JSEndProfiling):
38446        * JavaScriptCore.exp: Export the new signature of retrieveLastCaller()
38447        * VM/Machine.cpp:
38448        (KJS::Machine::execute): No need to call didFinishAllExecution() any
38449        more.
38450        (KJS::Machine::retrieveCaller): Now operates on InternalFunctions now
38451        since the RegisterFile is no longer guaranteeded to store only
38452        JSFunctions
38453        (KJS::Machine::retrieveLastCaller): Now also retrieve the function's
38454        name
38455        (KJS::Machine::callFrame): A result of changing retrieveCaller()
38456        * VM/Machine.h:
38457        * VM/Register.h: 
38458        * kjs/JSGlobalObject.cpp:
38459        (KJS::JSGlobalObject::~JSGlobalObject):
38460        * kjs/nodes.h:
38461        * profiler/ProfileGenerator.cpp:
38462        (KJS::ProfileGenerator::create): Now pass the original exec and get the
38463        global exec and client when necessary.  We need the original exec so we
38464        can have the stack frame where profiling started.
38465        (KJS::ProfileGenerator::ProfileGenerator): ditto.
38466        (KJS::ProfileGenerator::addParentForConsoleStart): This is where the 
38467        parent to star of the profile is added, if there is one.
38468        (KJS::ProfileGenerator::willExecute): Remove uglyness!
38469        (KJS::ProfileGenerator::didExecute): Ditto!
38470        (KJS::ProfileGenerator::stopProfiling):
38471        (KJS::ProfileGenerator::removeProfileStart): Use a better way to find
38472        and remove the function we are looking for.
38473        (KJS::ProfileGenerator::removeProfileEnd): Ditto.
38474        * profiler/ProfileGenerator.h:
38475        (KJS::ProfileGenerator::client):
38476        * profiler/ProfileNode.cpp:
38477        (KJS::ProfileNode::removeChild): Add a better way to remove a child from
38478        a ProfileNode.
38479        (KJS::ProfileNode::stopProfiling):
38480        (KJS::ProfileNode::debugPrintData): Modified a debug-only diagnostic
38481        function to be sane.
38482        * profiler/ProfileNode.h:
38483        * profiler/Profiler.cpp: Change to pass the original exec state.
38484        (KJS::Profiler::startProfiling):
38485        (KJS::Profiler::stopProfiling):
38486        (KJS::Profiler::willExecute):
38487        (KJS::Profiler::didExecute):
38488        (KJS::Profiler::createCallIdentifier):
38489        * profiler/Profiler.h:
38490
384912008-09-01  Alexey Proskuryakov  <ap@webkit.org>
38492
38493        Reviewed by Darin Adler.
38494
38495        Implement callOnMainThreadAndWait().
38496
38497        This will be useful when a background thread needs to perform UI calls synchronously
38498        (e.g. an openDatabase() call cannot return until the user answers to a confirmation dialog).
38499
38500        * wtf/MainThread.cpp:
38501        (WTF::FunctionWithContext::FunctionWithContext): Added a ThreadCondition member. When
38502        non-zero, the condition is signalled after the function is called.
38503        (WTF::mainThreadFunctionQueueMutex): Renamed from functionQueueMutex, sinc this is no longer
38504        static. Changed to be initialized from initializeThreading() to avoid lock contention.
38505        (WTF::initializeMainThread): On non-Windows platforms, just call mainThreadFunctionQueueMutex.
38506        (WTF::dispatchFunctionsFromMainThread): Signal synchronous calls when done.
38507        (WTF::callOnMainThread): Updated for functionQueueMutex rename.
38508        (WTF::callOnMainThreadAndWait):  Added.
38509
38510        * wtf/MainThread.h: Added callOnMainThreadAndWait(); initializeMainThread() now exists on
38511        all platforms.
38512
38513        * wtf/win/MainThreadWin.cpp: (WTF::initializeMainThread): Added a callOnMainThreadAndWait()
38514        call to initialize function queue mutex.
38515
38516        * wtf/ThreadingGtk.cpp: (WTF::initializeThreading):
38517        * wtf/ThreadingPthreads.cpp: (WTF::initializeThreading):
38518        * wtf/ThreadingQt.cpp: (WTF::initializeThreading):
38519        Only initialize mainThreadIdentifier on non-Darwin platforms. It was not guaranteed to be
38520        accurate on Darwin.
38521
385222008-09-03  Geoffrey Garen  <ggaren@apple.com>
38523
38524        Reviewed by Darin Adler.
38525        
38526        Use isUndefinedOrNull() instead of separate checks for each in op_eq_null
38527        and op_neq_null.
38528
38529        * VM/Machine.cpp:
38530        (KJS::Machine::privateExecute):
38531
385322008-09-02  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>
38533
38534        Reviewed by Darin Adler.
38535
38536        Bug 20296: OpcodeStats doesn't build on platforms which don't have mergesort().
38537        <https://bugs.webkit.org/show_bug.cgi?id=20296>
38538
38539        * VM/Opcode.cpp:
38540        (KJS::OpcodeStats::~OpcodeStats): mergesort() replaced with qsort()
38541
385422008-09-02  Geoffrey Garen  <ggaren@apple.com>
38543
38544        Reviewed by Oliver Hunt.
38545        
38546        Fast path for array.length and string.length.
38547        
38548        SunSpider says 0.5% faster.
38549
385502008-09-02  Geoffrey Garen  <ggaren@apple.com>
38551
38552        Reviewed by Anders Carlsson.
38553        
38554        Added optimized paths for comparing to null.
38555        
38556        SunSpider says 0.5% faster.
38557
385582008-09-02  Geoffrey Garen  <ggaren@apple.com>
38559
38560        Reviewed by Sam Weinig.
38561
38562        Changed jsDriver.pl to dump the exact text you would need in order to
38563        reproduce a test result. This enables a fast workflow where you copy
38564        and paste a test failure in the terminal.
38565
38566        * tests/mozilla/jsDriver.pl:
38567
385682008-09-02  Geoffrey Garen  <ggaren@apple.com>
38569
38570        Reviewed by Sam Weinig.
38571        
38572        Implemented the rest of Darin's review comments for the 09-01 inline
38573        caching patch.
38574        
38575        SunSpider says 0.5% faster, but that seems like noise.
38576
38577        * JavaScriptCore.xcodeproj/project.pbxproj: Put PutPropertySlot into
38578        its own file, and added BatchedTransitionOptimizer.
38579
38580        * VM/CodeBlock.cpp:
38581        (KJS::CodeBlock::~CodeBlock): Use array indexing instead of a pointer
38582        iterator.
38583
38584        * VM/CodeGenerator.cpp:
38585        (KJS::CodeGenerator::CodeGenerator): Used BatchedTransitionOptimizer to
38586        make batched put and remove for declared variables fast, without forever
38587        pessimizing the global object. Removed the old getDirect/removeDirect hack
38588        that tried to do the same in a more limited way.
38589
38590        * VM/CodeGenerator.h: Moved IdentifierRepHash to the KJS namespace since
38591        it doesn't specialize anything in WTF.
38592
38593        * VM/Machine.cpp:
38594        (KJS::Machine::Machine): Nixed the DummyConstruct tag because it was
38595        confusingly named.
38596
38597        (KJS::Machine::execute):  Used BatchedTransitionOptimizer, as above. Fixed
38598        up some comments.
38599
38600        (KJS::cachePrototypeChain): Cast to JSObject*, since it's more specific.
38601
38602        (KJS::Machine::tryCachePutByID): Use isNull() instead of comparing to
38603        jsNull(), since isNull() leaves more options open for the future.
38604        (KJS::Machine::tryCacheGetByID): ditto
38605        (KJS::Machine::privateExecute): ditto
38606
38607        * VM/SamplingTool.cpp:
38608        (KJS::SamplingTool::dump): Use C++-style cast, to match our style
38609        guidelines.
38610
38611        * kjs/BatchedTransitionOptimizer.h: Added. New class that allows host
38612        code to add a batch of properties to an object in an efficient way.
38613
38614        * kjs/JSActivation.cpp: Use isNull(), as above.
38615
38616        * kjs/JSArray.cpp: Get rid of DummyConstruct tag, as above.
38617        * kjs/JSArray.h:
38618
38619        * kjs/JSGlobalData.cpp: Nixed two unused StructureIDs.
38620        * kjs/JSGlobalData.h:
38621
38622        * kjs/JSImmediate.cpp: Use isNull(), as above.
38623
38624        * kjs/JSObject.cpp:
38625        (KJS::JSObject::mark): Moved mark tracing code elsewhere, to make this
38626        function more readable.
38627
38628        (KJS::JSObject::put): Use isNull(), as above.
38629
38630        (KJS::JSObject::createInheritorID): Return a raw pointer, since the
38631        object is owned by a data member, not necessarily the caller.
38632        * kjs/JSObject.h:
38633
38634        * kjs/JSString.cpp: Use isNull(), as above.
38635
38636        * kjs/PropertyMap.h: Updated to use PropertySlot::invalidOffset.
38637
38638        * kjs/PropertySlot.h: Changed KJS_INVALID_OFFSET to WTF::notFound
38639        because C macros are so 80's.
38640
38641        * kjs/PutPropertySlot.h: Added. Split out of PropertySlot.h. Also renamed
38642        PutPropertySlot::SlotType to PutPropertySlot::Type, and slotBase to base,
38643        since "slot" was redundant.
38644
38645        * kjs/StructureID.cpp: Added a new transition *away* from dictionary
38646        status, to support BatchedTransitionOptimizer.
38647
38648        (KJS::StructureIDChain::StructureIDChain): No need to store m_size as
38649        a data member, so keep it in a local, which might be faster.
38650        * kjs/StructureID.h:
38651
38652        * kjs/SymbolTable.h: Moved IdentifierRepHash to KJS namespace, as above.
38653        * kjs/ustring.h:
38654
386552008-09-02  Adam Roben  <aroben@apple.com>
38656
38657        Windows build fixes
38658
38659        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add
38660        StructureID.{cpp,h} to the project. Also let VS reorder this file.
38661        * VM/CodeBlock.cpp: Include StringExtras so that snprintf will be
38662        defined on Windows.
38663
386642008-09-01  Sam Weinig  <sam@webkit.org>
38665
38666        Fix release build.
38667
38668        * JavaScriptCore.exp:
38669
386702008-09-01  Jan Michael Alonzo  <jmalonzo@webkit.org>
38671
38672        Reviewed by Oliver Hunt.
38673
38674        Gtk buildfix
38675
38676        * GNUmakefile.am:
38677        * kjs/PropertyMap.cpp: rename Identifier.h to identifier.h
38678        * kjs/StructureID.cpp: include JSObject.h
38679
386802008-09-01  Geoffrey Garen  <ggaren@apple.com>
38681
38682        Reviewed by Darin Adler.
38683
38684        First cut at inline caching for access to vanilla JavaScript properties.
38685        
38686        SunSpider says 4% faster. Tests heavy on dictionary-like access have
38687        regressed a bit -- we have a lot of room to improve in this area,
38688        but this patch is over-ripe as-is.
38689        
38690        JSCells now have a StructureID that uniquely identifies their layout,
38691        and holds their prototype.
38692        
38693        JSValue::put takes a PropertySlot& argument, so it can fill in details
38694        about where it put a value, for the sake of caching.
38695
38696        * VM/CodeGenerator.cpp:
38697        (KJS::CodeGenerator::CodeGenerator): Avoid calling removeDirect if we
38698        can, since it disables inline caching in the global object. This can
38699        probably improve in the future.
38700
38701        * kjs/JSGlobalObject.cpp: Nixed reset(), since it complicates caching, and
38702        wasn't really necessary.
38703
38704        * kjs/JSObject.cpp: Tweaked getter / setter behavior not to rely on the
38705        IsGetterSetter flag, since the flag was buggy. This is necessary in order
38706        to avoid accidentally accessing a getter / setter as a normal property.
38707        
38708        Also changed getter / setter creation to honor ReadOnly, matching Mozilla.
38709        
38710        * kjs/PropertyMap.cpp: Nixed clear(), since it complicates caching and
38711        isn't necessary.
38712
38713        * kjs/Shell.cpp: Moved SamplingTool dumping outside the loop. This allows
38714        you to aggregate sampling of multiple files (or the same file repeatedly),
38715        which helped me track down regressions.
38716
38717        * kjs/ustring.h: Moved IdentifierRepHash here to share it.
38718
387192008-09-01  Geoffrey Garen  <ggaren@apple.com>
38720
38721        Reviewed by Sam Weinig.
38722
38723        Eagerly allocate the Math object's numeric constants. This avoids
38724        constantly reallocating them in loops, and also ensures that the Math
38725        object will not use the single property optimization, which makes
38726        properties ineligible for caching.
38727
38728        SunSpider reports a small speedup, in combination with inline caching.
38729
38730        * kjs/MathObject.cpp:
38731        (KJS::MathObject::MathObject):
38732        (KJS::MathObject::getOwnPropertySlot):
38733        * kjs/MathObject.h:
38734
387352008-09-01  Jan Michael Alonzo  <jmalonzo@webkit.org>
38736
38737        Gtk build fix, not reviewed.
38738
38739        * GNUmakefile.am: Add SmallStrings.cpp in both release and debug builds
38740
387412008-08-31  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
38742
38743        Reviewed by Maciej Stachowiak.
38744
38745        Bug 20577: REGRESSION (r36006): Gmail is broken
38746        <https://bugs.webkit.org/show_bug.cgi?id=20577>
38747
38748        r36006 changed stringProtoFuncSubstr() so that it is uses the more
38749        efficient jsSubstring(), rather than using UString::substr() and then
38750        calling jsString(). However, the change did not account for the case
38751        where the start and the length of the substring extend beyond the length
38752        of the original string. This patch corrects that.
38753
38754        * kjs/StringPrototype.cpp:
38755        (KJS::stringProtoFuncSubstr):
38756
387572008-08-31  Simon Hausmann  <hausmann@wekit.org>
38758
38759        Unreviewed build fix (with gcc 4.3)
38760
38761        * kjs/ustring.h: Properly forward declare operator== for UString and
38762        the the concatenate functions inside the KJS namespace.
38763
387642008-08-30  Darin Adler  <darin@apple.com>
38765
38766        Reviewed by Maciej.
38767
38768        - https://bugs.webkit.org/show_bug.cgi?id=20333
38769          improve JavaScript speed when handling single-character strings
38770
38771        1.035x as fast on SunSpider overall.
38772        1.127x as fast on SunSpider string tests.
38773        1.910x as fast on SunSpider string-base64 test.
38774
38775        * API/JSObjectRef.cpp:
38776        (JSObjectMakeFunction): Removed unneeded explicit construction of UString.
38777
38778        * GNUmakefile.am: Added SmallStrings.h and SmallStrings.cpp.
38779        * JavaScriptCore.pri: Ditto.
38780        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
38781        Ditto.
38782        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
38783        * JavaScriptCoreSources.bkl: Ditto.
38784
38785        * JavaScriptCore.exp: Updated.
38786
38787        * VM/Machine.cpp:
38788        (KJS::jsAddSlowCase): Changed to use a code path that doesn't involve
38789        a UString constructor. This avoids an extra jump caused by the "in charge"
38790        vs. "not in charge" constructors.
38791        (KJS::jsAdd): Ditto.
38792        (KJS::jsTypeStringForValue): Adopted jsNontrivialString.
38793
38794        * kjs/ArrayPrototype.cpp:
38795        (KJS::arrayProtoFuncToString): Adopted jsEmptyString.
38796        (KJS::arrayProtoFuncToLocaleString): Ditto.
38797        (KJS::arrayProtoFuncJoin): Ditto.
38798        * kjs/BooleanPrototype.cpp:
38799        (KJS::booleanProtoFuncToString): Adopted jsNontrivialString.
38800        * kjs/DateConstructor.cpp:
38801        (KJS::callDate): Ditto.
38802        * kjs/DatePrototype.cpp:
38803        (KJS::formatLocaleDate): Adopted jsEmptyString and jsNontrivialString.
38804        (KJS::dateProtoFuncToString): Ditto.
38805        (KJS::dateProtoFuncToUTCString): Ditto.
38806        (KJS::dateProtoFuncToDateString): Ditto.
38807        (KJS::dateProtoFuncToTimeString): Ditto.
38808        (KJS::dateProtoFuncToLocaleString): Ditto.
38809        (KJS::dateProtoFuncToLocaleDateString): Ditto.
38810        (KJS::dateProtoFuncToLocaleTimeString): Ditto.
38811        (KJS::dateProtoFuncToGMTString): Ditto.
38812
38813        * kjs/ErrorPrototype.cpp:
38814        (KJS::ErrorPrototype::ErrorPrototype): Ditto.
38815        (KJS::errorProtoFuncToString): Ditto.
38816
38817        * kjs/JSGlobalData.h: Added SmallStrings.
38818
38819        * kjs/JSString.cpp:
38820        (KJS::jsString): Eliminated the overload that takes a const char*.
38821        Added code to use SmallStrings to get strings of small sizes rather
38822        than creating a new JSString every time.
38823        (KJS::jsSubstring): Added. Used when creating a string from a substring
38824        to avoid creating a JSString in cases where the substring will end up
38825        empty or as one character.
38826        (KJS::jsOwnedString): Added the same code as in jsString.
38827
38828        * kjs/JSString.h: Added new functions jsEmptyString, jsSingleCharacterString,
38829        jsSingleCharacterSubstring, jsSubstring, and jsNontrivialString for various
38830        cases where we want to create JSString, and want special handling for small
38831        strings.
38832        (KJS::JSString::JSString): Added an overload that takes a PassRefPtr of
38833        a UString::Rep so you don't have to construct a UString; PassRefPtr can be
38834        more efficient.
38835        (KJS::jsEmptyString): Added.
38836        (KJS::jsSingleCharacterString): Added.
38837        (KJS::jsSingleCharacterSubstring): Added.
38838        (KJS::jsNontrivialString): Added.
38839        (KJS::JSString::getIndex): Adopted jsSingleCharacterSubstring.
38840        (KJS::JSString::getStringPropertySlot): Ditto.
38841
38842        * kjs/NumberPrototype.cpp:
38843        (KJS::numberProtoFuncToFixed): Adopted jsNontrivialString.
38844        (KJS::numberProtoFuncToExponential): Ditto.
38845        (KJS::numberProtoFuncToPrecision): Ditto.
38846
38847        * kjs/ObjectPrototype.cpp:
38848        (KJS::objectProtoFuncToLocaleString): Adopted toThisJSString.
38849        (KJS::objectProtoFuncToString): Adopted jsNontrivialString.
38850
38851        * kjs/RegExpConstructor.cpp: Separated the lastInput value that's used
38852        with the lastOvector to return matches from the input value that can be
38853        changed via JavaScript. They will be equal in many cases, but not all.
38854        (KJS::RegExpConstructor::performMatch): Set input.
38855        (KJS::RegExpMatchesArray::RegExpMatchesArray): Ditto.
38856        (KJS::RegExpMatchesArray::fillArrayInstance): Adopted jsSubstring. Also,
38857        use input rather than lastInput in the appropriate place.
38858        (KJS::RegExpConstructor::getBackref): Adopted jsSubstring and jsEmptyString.
38859        Added code to handle the case where there is no backref -- before this
38860        depended on range checking in UString::substr which is not present in
38861        jsSubstring.
38862        (KJS::RegExpConstructor::getLastParen): Ditto.
38863        (KJS::RegExpConstructor::getLeftContext): Ditto.
38864        (KJS::RegExpConstructor::getRightContext): Ditto.
38865        (KJS::RegExpConstructor::getValueProperty): Use input rather than lastInput.
38866        Also adopt jsEmptyString.
38867        (KJS::RegExpConstructor::putValueProperty): Ditto.
38868        (KJS::RegExpConstructor::input): Ditto.
38869
38870        * kjs/RegExpPrototype.cpp:
38871        (KJS::regExpProtoFuncToString): Adopt jsNonTrivialString. Also changed to
38872        use UString::append to append single characters rather than using += and
38873        a C-style string.
38874
38875        * kjs/SmallStrings.cpp: Added.
38876        (KJS::SmallStringsStorage::SmallStringsStorage): Construct the
38877        buffer and UString::Rep for all 256 single-character strings for
38878        the U+0000 through U+00FF. This covers all the values used in
38879        the base64 test as well as most values seen elsewhere on the web
38880        as well. It's possible that later we might fix this to only work
38881        for U+0000 through U+007F but the others are used quite a bit in
38882        the current version of the base64 test.
38883        (KJS::SmallStringsStorage::~SmallStringsStorage): Free memory.
38884        (KJS::SmallStrings::SmallStrings): Create a set of small strings,
38885        initially not created; created later when they are used.
38886        (KJS::SmallStrings::~SmallStrings): Deallocate. Not left compiler
38887        generated because the SmallStringsStorage class's destructor needs
38888        to be visible.
38889        (KJS::SmallStrings::mark): Mark all the strings.
38890        (KJS::SmallStrings::createEmptyString): Create a cell for the
38891        empty string. Called only the first time.
38892        (KJS::SmallStrings::createSingleCharacterString): Create a cell
38893        for one of the single-character strings. Called only the first time.
38894        * kjs/SmallStrings.h: Added.
38895
38896        * kjs/StringConstructor.cpp:
38897        (KJS::stringFromCharCodeSlowCase): Factored out of strinFromCharCode.
38898        Only used for cases where the caller does not pass exactly one argument.
38899        (KJS::stringFromCharCode): Adopted jsSingleCharacterString.
38900        (KJS::callStringConstructor): Adopted jsEmptyString.
38901
38902        * kjs/StringObject.cpp:
38903        (KJS::StringObject::StringObject): Adopted jsEmptyString.
38904
38905        * kjs/StringPrototype.cpp:
38906        (KJS::stringProtoFuncReplace): Adopted jsSubstring.
38907        (KJS::stringProtoFuncCharAt): Adopted jsEmptyString and
38908        jsSingleCharacterSubstring and also added a special case when the
38909        index is an immediate number to avoid conversion to and from floating
38910        point, since that's the common case.
38911        (KJS::stringProtoFuncCharCodeAt): Ditto.
38912        (KJS::stringProtoFuncMatch): Adopted jsSubstring and jsEmptyString.
38913        (KJS::stringProtoFuncSlice): Adopted jsSubstring and
38914        jsSingleCharacterSubstring. Also got rid of some unneeded locals and
38915        removed unneeded code to set the length property of the array, since it
38916        is automatically updated as values are added to the array.
38917        (KJS::stringProtoFuncSplit): Adopted jsEmptyString.
38918        (KJS::stringProtoFuncSubstr): Adopted jsSubstring.
38919        (KJS::stringProtoFuncSubstring): Ditto.
38920
38921        * kjs/collector.cpp:
38922        (KJS::Heap::collect): Added a call to mark SmallStrings.
38923
38924        * kjs/ustring.cpp:
38925        (KJS::UString::expandedSize): Made this a static member function since
38926        it doesn't need to look at any data members.
38927        (KJS::UString::expandCapacity): Use a non-inline function, makeNull, to
38928        set the rep to null in failure cases. This avoids adding a PIC branch for
38929        the normal case when there is no failure.
38930        (KJS::UString::expandPreCapacity): Ditto.
38931        (KJS::UString::UString): Ditto.
38932        (KJS::concatenate): Refactored the concatenation constructor into this
38933        separate function. Calling the concatenation constructor was leading to
38934        an extra branch because of the in-charge vs. not-in-charge versions not
38935        both being inlined, and this was showing up as nearly 1% on Shark. Also
38936        added a special case for when the second string is a single character,
38937        since it's a common idiom to build up a string that way and we can do
38938        things much more quickly, without involving memcpy for example. Also
38939        adopted the non-inline function, nullRep, for the same reason given for
38940        makeNull above.
38941        (KJS::UString::append): Adopted makeNull for failure cases.
38942        (KJS::UString::operator=): Ditto.
38943        (KJS::UString::toDouble): Added a special case for converting single
38944        character strings to numbers. We're doing this a ton of times while
38945        running the base64 test.
38946        (KJS::operator==): Added special cases so we can compare single-character
38947        strings without calling memcmp. Later we might want to special case other
38948        short lengths similarly.
38949        (KJS::UString::makeNull): Added.
38950        (KJS::UString::nullRep): Added.
38951        * kjs/ustring.h: Added declarations for the nullRep and makeNull. Changed
38952        expandedSize to be a static member function. Added a declaration of the
38953        concatenate function. Removed the concatenation constructor. Rewrote
38954        operator+ to use the concatenate function.
38955
389562008-08-29  Anders Carlsson  <andersca@apple.com>
38957
38958        Build fix.
38959
38960        * VM/Machine.cpp:
38961        (KJS::getCPUTime):
38962
389632008-08-29  Anders Carlsson  <andersca@apple.com>
38964
38965        Reviewed by Darin Adler.
38966
38967        <rdar://problem/6174667> 
38968        When a machine is under heavy load, the Slow Script dialog often comes up many times and just gets in the way
38969        
38970        Instead of using clock time, use the CPU time spent executing the current thread when
38971        determining if the script has been running for too long.
38972        
38973        * VM/Machine.cpp:
38974        (KJS::getCPUTime):
38975        (KJS::Machine::checkTimeout):
38976
389772008-08-28  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
38978
38979        Rubber-stamped by Sam Weinig.
38980
38981        Change 'term' to 'expr' in variable names to standardize terminology.
38982
38983        * kjs/nodes.cpp:
38984        (KJS::BinaryOpNode::emitCode):
38985        (KJS::ReverseBinaryOpNode::emitCode):
38986        (KJS::ThrowableBinaryOpNode::emitCode):
38987        * kjs/nodes.h:
38988        (KJS::BinaryOpNode::BinaryOpNode):
38989        (KJS::ReverseBinaryOpNode::ReverseBinaryOpNode):
38990        (KJS::MultNode::):
38991        (KJS::DivNode::):
38992        (KJS::ModNode::):
38993        (KJS::AddNode::):
38994        (KJS::SubNode::):
38995        (KJS::LeftShiftNode::):
38996        (KJS::RightShiftNode::):
38997        (KJS::UnsignedRightShiftNode::):
38998        (KJS::LessNode::):
38999        (KJS::GreaterNode::):
39000        (KJS::LessEqNode::):
39001        (KJS::GreaterEqNode::):
39002        (KJS::ThrowableBinaryOpNode::):
39003        (KJS::InstanceOfNode::):
39004        (KJS::InNode::):
39005        (KJS::EqualNode::):
39006        (KJS::NotEqualNode::):
39007        (KJS::StrictEqualNode::):
39008        (KJS::NotStrictEqualNode::):
39009        (KJS::BitAndNode::):
39010        (KJS::BitOrNode::):
39011        (KJS::BitXOrNode::):
39012        * kjs/nodes2string.cpp:
39013        (KJS::MultNode::streamTo):
39014        (KJS::DivNode::streamTo):
39015        (KJS::ModNode::streamTo):
39016        (KJS::AddNode::streamTo):
39017        (KJS::SubNode::streamTo):
39018        (KJS::LeftShiftNode::streamTo):
39019        (KJS::RightShiftNode::streamTo):
39020        (KJS::UnsignedRightShiftNode::streamTo):
39021        (KJS::LessNode::streamTo):
39022        (KJS::GreaterNode::streamTo):
39023        (KJS::LessEqNode::streamTo):
39024        (KJS::GreaterEqNode::streamTo):
39025        (KJS::InstanceOfNode::streamTo):
39026        (KJS::InNode::streamTo):
39027        (KJS::EqualNode::streamTo):
39028        (KJS::NotEqualNode::streamTo):
39029        (KJS::StrictEqualNode::streamTo):
39030        (KJS::NotStrictEqualNode::streamTo):
39031        (KJS::BitAndNode::streamTo):
39032        (KJS::BitXOrNode::streamTo):
39033        (KJS::BitOrNode::streamTo):
39034
390352008-08-28  Alp Toker  <alp@nuanti.com>
39036
39037        GTK+ dist/build fix. List newly added header files.
39038
39039        * GNUmakefile.am:
39040
390412008-08-28  Sam Weinig  <sam@webkit.org>
39042
39043        Reviewed by Oliver Hunt.
39044
39045        Change to throw a ReferenceError at runtime instead of a ParseError
39046        at parse time, when the left hand side expression of a for-in statement
39047        is not an lvalue.
39048
39049        * kjs/grammar.y:
39050        * kjs/nodes.cpp:
39051        (KJS::ForInNode::emitCode):
39052
390532008-08-28  Alexey Proskuryakov  <ap@webkit.org>
39054
39055        Not reviewed, build fix (at least for OpenBSD, posssibly more).
39056
39057        https://bugs.webkit.org/show_bug.cgi?id=20545
39058        missing #include <unistd.h> in JavaScriptCore/VM/SamplingTool.cpp
39059
39060        * VM/SamplingTool.cpp: add the missing include.
39061
390622008-08-26  Kevin McCullough  <kmccullough@apple.com>
39063
39064        Reviewed by Geoff and Cameron.
39065
39066        <rdar://problem/6174603> Hitting assertion in Register::codeBlock when
39067        loading facebook (20516).
39068
39069        - This was a result of my line numbers change.  After a host function is
39070        called the stack does not get reset correctly.
39071        - Oddly this also appears to be a slight speedup on SunSpider.
39072
39073        * VM/Machine.cpp:
39074        (KJS::Machine::privateExecute):
39075
390762008-08-26  Alexey Proskuryakov  <ap@webkit.org>
39077
39078        Reviewed by Geoff and Tim.
39079
39080        Export new API methods.
39081
39082        * JavaScriptCore.exp:
39083
390842008-08-25  Kevin McCullough  <kmccullough@apple.com>
39085
39086        Reviewed by Geoff, Tim and Mark.
39087
39088        <rdar://problem/6150623> JSProfiler: It would be nice if the profiles
39089        in the console said what file and line number they came from
39090        - Lay the foundation for getting line numbers and other data from the
39091        JavaScript engine.  With the cleanup in kjs/ExecState this is actually
39092        a slight performance improvement.
39093
39094        * JavaScriptCore.exp: Export retrieveLastCaller() for WebCore.
39095        * JavaScriptCore.xcodeproj/project.pbxproj:
39096        * VM/Machine.cpp: Now Host and JS functions set a call frame on the
39097        exec state, so this and the profiler code were pulled out of the
39098        branches.
39099        (KJS::Machine::privateExecute):
39100        (KJS::Machine::retrieveLastCaller): This get's the lineNumber, sourceID
39101        and sourceURL for the previously called function.
39102        * VM/Machine.h:
39103        * kjs/ExecState.cpp: Remove references to JSFunction since it's not used
39104        anywhere.
39105        * kjs/ExecState.h:
39106
391072008-08-25  Alexey Proskuryakov  <ap@webkit.org>
39108
39109        Reviewed by Darin Adler.
39110
39111        Ensure that JSGlobalContextRelease() performs garbage collection, even if there are other
39112        contexts in the current context's group.
39113
39114        This is only really necessary when the last reference is released, but there is no way to
39115        determine that, and no harm in collecting slightly more often.
39116
39117        * API/JSContextRef.cpp: (JSGlobalContextRelease): Explicitly collect the heap if it is not
39118        being destroyed.
39119
391202008-08-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
39121
39122        Reviewed by Oliver Hunt.
39123
39124        Bug 20093: JSC shell does not clear exceptions after it executes toString on an expression
39125        <https://bugs.webkit.org/show_bug.cgi?id=20093>
39126
39127        Clear exceptions after evaluating any code in the JSC shell. We do not
39128        report exceptions that are caused by calling toString on the final
39129        valued, but at least we avoid incorrect behaviour.
39130
39131        Also, print any exceptions that occurred while evaluating code at the
39132        interactive prompt, not just while evaluating code from a file.
39133
39134        * kjs/Shell.cpp:
39135        (runWithScripts):
39136        (runInteractive):
39137
391382008-08-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
39139
39140        Reviewed by Oliver.
39141
39142        Remove an unnecessary RefPtr to a RegisterID.
39143
39144        * kjs/nodes.cpp:
39145        (KJS::DeleteBracketNode::emitCode):
39146
391472008-08-24  Mark Rowe  <mrowe@apple.com>
39148
39149        Reviewed by Oliver Hunt.
39150
39151        Use the correct version number for when JSGlobalContextCreate was introduced.
39152
39153        * API/JSContextRef.h:
39154
391552008-08-23  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
39156
39157        Rubber-stamped by Mark Rowe.
39158
39159        Remove modelines.
39160
39161        * API/APICast.h:
39162        * API/JSBase.cpp:
39163        * API/JSCallbackConstructor.cpp:
39164        * API/JSCallbackConstructor.h:
39165        * API/JSCallbackFunction.cpp:
39166        * API/JSCallbackFunction.h:
39167        * API/JSCallbackObject.cpp:
39168        * API/JSCallbackObject.h:
39169        * API/JSCallbackObjectFunctions.h:
39170        * API/JSClassRef.cpp:
39171        * API/JSContextRef.cpp:
39172        * API/JSObjectRef.cpp:
39173        * API/JSProfilerPrivate.cpp:
39174        * API/JSStringRef.cpp:
39175        * API/JSStringRefBSTR.cpp:
39176        * API/JSStringRefCF.cpp:
39177        * API/JSValueRef.cpp:
39178        * API/tests/JSNode.c:
39179        * API/tests/JSNode.h:
39180        * API/tests/JSNodeList.c:
39181        * API/tests/JSNodeList.h:
39182        * API/tests/Node.c:
39183        * API/tests/Node.h:
39184        * API/tests/NodeList.c:
39185        * API/tests/NodeList.h:
39186        * API/tests/minidom.c:
39187        * API/tests/minidom.js:
39188        * API/tests/testapi.c:
39189        * API/tests/testapi.js:
39190        * JavaScriptCore.pro:
39191        * kjs/FunctionConstructor.h:
39192        * kjs/FunctionPrototype.h:
39193        * kjs/JSArray.h:
39194        * kjs/JSString.h:
39195        * kjs/JSWrapperObject.cpp:
39196        * kjs/NumberConstructor.h:
39197        * kjs/NumberObject.h:
39198        * kjs/NumberPrototype.h:
39199        * kjs/lexer.h:
39200        * kjs/lookup.h:
39201        * wtf/Assertions.cpp:
39202        * wtf/Assertions.h:
39203        * wtf/HashCountedSet.h:
39204        * wtf/HashFunctions.h:
39205        * wtf/HashIterators.h:
39206        * wtf/HashMap.h:
39207        * wtf/HashSet.h:
39208        * wtf/HashTable.h:
39209        * wtf/HashTraits.h:
39210        * wtf/ListHashSet.h:
39211        * wtf/ListRefPtr.h:
39212        * wtf/Noncopyable.h:
39213        * wtf/OwnArrayPtr.h:
39214        * wtf/OwnPtr.h:
39215        * wtf/PassRefPtr.h:
39216        * wtf/Platform.h:
39217        * wtf/RefPtr.h:
39218        * wtf/RefPtrHashMap.h:
39219        * wtf/RetainPtr.h:
39220        * wtf/UnusedParam.h:
39221        * wtf/Vector.h:
39222        * wtf/VectorTraits.h:
39223        * wtf/unicode/Unicode.h:
39224        * wtf/unicode/icu/UnicodeIcu.h:
39225
392262008-08-22  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
39227
39228        Reviewed by Oliver.
39229
39230        Some cleanup to match our coding style.
39231
39232        * VM/CodeGenerator.h:
39233        * VM/Machine.cpp:
39234        (KJS::Machine::privateExecute):
39235        * kjs/ExecState.cpp:
39236        * kjs/ExecState.h:
39237        * kjs/completion.h:
39238        * kjs/identifier.cpp:
39239        (KJS::Identifier::equal):
39240        (KJS::CStringTranslator::hash):
39241        (KJS::CStringTranslator::equal):
39242        (KJS::CStringTranslator::translate):
39243        (KJS::UCharBufferTranslator::equal):
39244        (KJS::UCharBufferTranslator::translate):
39245        (KJS::Identifier::remove):
39246        * kjs/operations.h:
39247
392482008-08-20  Alexey Proskuryakov  <ap@webkit.org>
39249
39250        Windows build fix.
39251
39252        * API/WebKitAvailability.h: Define DEPRECATED_ATTRIBUTE.
39253
392542008-08-19  Alexey Proskuryakov  <ap@webkit.org>
39255
39256        Reviewed by Geoff Garen.
39257
39258        Bring back shared JSGlobalData and implicit locking, because too many clients rely on it.
39259
39260        * kjs/JSGlobalData.cpp:
39261        (KJS::JSGlobalData::~JSGlobalData):
39262        (KJS::JSGlobalData::JSGlobalData): Re-add shared instance.
39263        (KJS::JSGlobalData::sharedInstanceExists): Ditto.
39264        (KJS::JSGlobalData::sharedInstance): Ditto.
39265        (KJS::JSGlobalData::sharedInstanceInternal): Ditto.
39266
39267        * API/JSContextRef.h: Deprecated JSGlobalContextCreate(). Added a very conservative
39268        description of its threading model (nothing is allowed).
39269
39270        * API/JSContextRef.cpp:
39271        (JSGlobalContextCreate): Use shared JSGlobalData.
39272        (JSGlobalContextCreateInGroup): Support passing NULL group to request a unique one.
39273        (JSGlobalContextRetain): Added back locking.
39274        (JSGlobalContextRelease): Ditto.
39275        (JSContextGetGlobalObject): Ditto.
39276
39277        * API/tests/minidom.c: (main):
39278        * API/tests/testapi.c: (main):
39279        Switched to JSGlobalContextCreateInGroup() to avoid deprecation warnings.
39280
39281        * JavaScriptCore.exp: Re-added JSLock methods. Added JSGlobalContextCreateInGroup (d'oh!).
39282
39283        * API/JSBase.cpp:
39284        (JSEvaluateScript):
39285        (JSCheckScriptSyntax):
39286        (JSGarbageCollect):
39287        * API/JSCallbackConstructor.cpp:
39288        (KJS::constructJSCallback):
39289        * API/JSCallbackFunction.cpp:
39290        (KJS::JSCallbackFunction::call):
39291        * API/JSCallbackObjectFunctions.h:
39292        (KJS::::init):
39293        (KJS::::getOwnPropertySlot):
39294        (KJS::::put):
39295        (KJS::::deleteProperty):
39296        (KJS::::construct):
39297        (KJS::::hasInstance):
39298        (KJS::::call):
39299        (KJS::::getPropertyNames):
39300        (KJS::::toNumber):
39301        (KJS::::toString):
39302        (KJS::::staticValueGetter):
39303        (KJS::::callbackGetter):
39304        * API/JSObjectRef.cpp:
39305        (JSObjectMake):
39306        (JSObjectMakeFunctionWithCallback):
39307        (JSObjectMakeConstructor):
39308        (JSObjectMakeFunction):
39309        (JSObjectHasProperty):
39310        (JSObjectGetProperty):
39311        (JSObjectSetProperty):
39312        (JSObjectGetPropertyAtIndex):
39313        (JSObjectSetPropertyAtIndex):
39314        (JSObjectDeleteProperty):
39315        (JSObjectCallAsFunction):
39316        (JSObjectCallAsConstructor):
39317        (JSObjectCopyPropertyNames):
39318        (JSPropertyNameArrayRelease):
39319        (JSPropertyNameAccumulatorAddName):
39320        * API/JSValueRef.cpp:
39321        (JSValueIsEqual):
39322        (JSValueIsInstanceOfConstructor):
39323        (JSValueMakeNumber):
39324        (JSValueMakeString):
39325        (JSValueToNumber):
39326        (JSValueToStringCopy):
39327        (JSValueToObject):
39328        (JSValueProtect):
39329        (JSValueUnprotect):
39330        * ForwardingHeaders/JavaScriptCore/JSLock.h: Added.
39331        * GNUmakefile.am:
39332        * JavaScriptCore.pri:
39333        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
39334        * JavaScriptCore.xcodeproj/project.pbxproj:
39335        * JavaScriptCoreSources.bkl:
39336        * kjs/AllInOneFile.cpp:
39337        * kjs/JSGlobalData.h:
39338        * kjs/JSGlobalObject.cpp:
39339        (KJS::JSGlobalObject::~JSGlobalObject):
39340        (KJS::JSGlobalObject::init):
39341        * kjs/JSLock.cpp: Added.
39342        (KJS::createJSLockCount):
39343        (KJS::JSLock::lockCount):
39344        (KJS::setLockCount):
39345        (KJS::JSLock::JSLock):
39346        (KJS::JSLock::lock):
39347        (KJS::JSLock::unlock):
39348        (KJS::JSLock::currentThreadIsHoldingLock):
39349        (KJS::JSLock::DropAllLocks::DropAllLocks):
39350        (KJS::JSLock::DropAllLocks::~DropAllLocks):
39351        * kjs/JSLock.h: Added.
39352        (KJS::JSLock::JSLock):
39353        (KJS::JSLock::~JSLock):
39354        * kjs/Shell.cpp:
39355        (functionGC):
39356        (jscmain):
39357        * kjs/collector.cpp:
39358        (KJS::Heap::~Heap):
39359        (KJS::Heap::heapAllocate):
39360        (KJS::Heap::setGCProtectNeedsLocking):
39361        (KJS::Heap::protect):
39362        (KJS::Heap::unprotect):
39363        (KJS::Heap::collect):
39364        * kjs/identifier.cpp:
39365        * kjs/interpreter.cpp:
39366        (KJS::Interpreter::checkSyntax):
39367        (KJS::Interpreter::evaluate):
39368        Re-added implicit locking.
39369
393702008-08-19  Kevin McCullough  <kmccullough@apple.com>
39371
39372        Reviewed by Tim and Mark.
39373
39374        Implement DTrace hooks for dashcode and instruments.
39375
39376        * API/JSProfilerPrivate.cpp: Added. Expose SPI so that profiling can be
39377        turned on from a client.  The DTrace probes were added within the
39378        profiler mechanism for performance reasons so the profiler must be
39379        started to enable tracing.
39380        (JSStartProfiling):
39381        (JSEndProfiling):
39382        * API/JSProfilerPrivate.h: Added. Ditto.
39383        * JavaScriptCore.exp: Exposing the start/stop methods to clients.
39384        * JavaScriptCore.xcodeproj/project.pbxproj:
39385        * kjs/Tracing.d: Define the DTrace probes.
39386        * kjs/Tracing.h: Ditto.
39387        * profiler/ProfileGenerator.cpp: Implement the DTrace probes in the
39388        profiler.
39389        (KJS::ProfileGenerator::willExecute):
39390        (KJS::ProfileGenerator::didExecute):
39391
393922008-08-19  Steve Falkenburg  <sfalken@apple.com>
39393
39394        Build fix.
39395        
39396        * kjs/operations.cpp:
39397        (KJS::equal):
39398
393992008-08-18  Timothy Hatcher  <timothy@apple.com>
39400
39401        Fix an assertion when generating a heavy profile because the
39402        empty value and deleted value of CallIdentifier where equal.
39403
39404        https://bugs.webkit.org/show_bug.cgi?id=20439
39405
39406        Reviewed by Dan Bernstein.
39407
39408        * profiler/CallIdentifier.h: Make the emptyValue for CallIdentifier
39409        use empty strings for URL and function name.
39410
394112008-08-12  Darin Adler  <darin@apple.com>
39412
39413        Reviewed by Geoff.
39414
39415        - eliminate JSValue::type()
39416
39417        This will make it slightly easier to change the JSImmediate design without
39418        having to touch so many call sites.
39419
39420        SunSpider says this change is a wash (looked like a slight speedup, but not
39421        statistically significant).
39422
39423        * API/JSStringRef.cpp: Removed include of JSType.h.
39424        * API/JSValueRef.cpp: Removed include of JSType.h.
39425        (JSValueGetType): Replaced use of JSValue::type() with
39426        JSValue::is functions.
39427
39428        * JavaScriptCore.exp: Updated.
39429
39430        * VM/JSPropertyNameIterator.cpp: Removed type() implementation.
39431        (KJS::JSPropertyNameIterator::toPrimitive): Changed to take
39432        PreferredPrimitiveType argument instead of JSType.
39433        * VM/JSPropertyNameIterator.h: Ditto.
39434
39435        * VM/Machine.cpp:
39436        (KJS::fastIsNumber): Updated for name change.
39437        (KJS::fastToInt32): Ditto.
39438        (KJS::fastToUInt32): Ditto.
39439        (KJS::jsAddSlowCase): Updated toPrimitive caller for change from
39440        JSType to PreferredPrimitiveType.
39441        (KJS::jsAdd): Replaced calls to JSValue::type() with calls to
39442        JSValue::isString().
39443        (KJS::jsTypeStringForValue): Replaced calls to JSValue::type()
39444        with multiple calls to JSValue::is -- we could make this a
39445        virtual function instead if we want to have faster performance.
39446        (KJS::Machine::privateExecute): Renamed JSImmediate::toTruncatedUInt32
39447        to JSImmediate::getTruncatedUInt32 for consistency with other functions.
39448        Changed two calls of JSValue::type() to JSValue::isString().
39449
39450        * kjs/GetterSetter.cpp:
39451        (KJS::GetterSetter::toPrimitive): Changed to take
39452        PreferredPrimitiveType argument instead of JSType.
39453        (KJS::GetterSetter::isGetterSetter): Added.
39454        * kjs/GetterSetter.h:
39455
39456        * kjs/JSCell.cpp:
39457        (KJS::JSCell::isString): Added.
39458        (KJS::JSCell::isGetterSetter): Added.
39459        (KJS::JSCell::isObject): Added.
39460
39461        * kjs/JSCell.h: Eliminated type function. Added isGetterSetter.
39462        Made isString and isObject virtual. Changed toPrimitive to take
39463        PreferredPrimitiveType argument instead of JSType.
39464        (KJS::JSCell::isNumber): Use Heap::isNumber for faster performance.
39465        (KJS::JSValue::isGetterSetter): Added.
39466        (KJS::JSValue::toPrimitive): Changed to take
39467        PreferredPrimitiveType argument instead of JSType.
39468
39469        * kjs/JSImmediate.h: Removed JSValue::type() and replaced
39470        JSValue::toTruncatedUInt32 with JSValue::getTruncatedUInt32.
39471        (KJS::JSImmediate::isEitherImmediate): Added.
39472
39473        * kjs/JSNotAnObject.cpp:
39474        (KJS::JSNotAnObject::toPrimitive): Changed to take
39475        PreferredPrimitiveType argument instead of JSType.
39476        * kjs/JSNotAnObject.h: Ditto.
39477        * kjs/JSNumberCell.cpp:
39478        (KJS::JSNumberCell::toPrimitive): Ditto.
39479        * kjs/JSNumberCell.h:
39480        (KJS::JSNumberCell::toInt32): Renamed from fastToInt32. There's no
39481        other "slow" version of this once you have a JSNumberCell, so there's
39482        no need for "fast" in the name. It's a feature that this hides the
39483        base class toInt32, which does the same job less efficiently (and has
39484        an additional ExecState argument).
39485        (KJS::JSNumberCell::toUInt32): Ditto.
39486
39487        * kjs/JSObject.cpp:
39488        (KJS::callDefaultValueFunction): Use isGetterSetter instead of type.
39489        (KJS::JSObject::getPrimitiveNumber): Use PreferredPrimitiveType.
39490        (KJS::JSObject::defaultValue): Ditto.
39491        (KJS::JSObject::defineGetter): Use isGetterSetter.
39492        (KJS::JSObject::defineSetter): Ditto.
39493        (KJS::JSObject::lookupGetter): Ditto.
39494        (KJS::JSObject::lookupSetter): Ditto.
39495        (KJS::JSObject::toNumber): Use PreferredPrimitiveType.
39496        (KJS::JSObject::toString): Ditto.
39497        (KJS::JSObject::isObject): Added.
39498
39499        * kjs/JSObject.h:
39500        (KJS::JSObject::inherits): Call the isObject from JSCell; it's now
39501        hidden by our override of isObject.
39502        (KJS::JSObject::getOwnPropertySlotForWrite): Use isGetterSetter
39503        instead of type.
39504        (KJS::JSObject::getOwnPropertySlot): Ditto.
39505        (KJS::JSObject::toPrimitive): Use PreferredPrimitiveType.
39506
39507        * kjs/JSString.cpp:
39508        (KJS::JSString::toPrimitive): Use PreferredPrimitiveType.
39509        (KJS::JSString::isString): Added.
39510        * kjs/JSString.h: Ditto.
39511
39512        * kjs/JSValue.h: Removed type(), added isGetterSetter(). Added
39513        PreferredPrimitiveType enum and used it as the argument for the
39514        toPrimitive function.
39515        (KJS::JSValue::getBoolean): Simplified a bit an removed a branch.
39516
39517        * kjs/collector.cpp:
39518        (KJS::typeName): Changed to use JSCell::is functions instead of
39519        calling JSCell::type.
39520
39521        * kjs/collector.h:
39522        (KJS::Heap::isNumber): Renamed from fastIsNumber.
39523
39524        * kjs/nodes.h: Added now-needed include of JSType, since the type
39525        is used here to record types of values in the tree.
39526
39527        * kjs/operations.cpp:
39528        (KJS::equal): Rewrote to no longer depend on type().
39529        (KJS::strictEqual): Ditto.
39530
395312008-08-18  Kevin McCullough  <kmccullough@apple.com>
39532
39533        Reviewed by Tim.
39534
39535        If there are no nodes in a profile all the time should be attributed to
39536        (idle)
39537
39538        * profiler/Profile.cpp: If ther are no nodes make sure we still process
39539        the head.
39540        (KJS::Profile::forEach):
39541        * profiler/ProfileGenerator.cpp: Remove some useless code.
39542        (KJS::ProfileGenerator::stopProfiling):
39543
395442008-08-18  Alexey Proskuryakov  <ap@webkit.org>
39545
39546        Reviewed by Maciej.
39547
39548        Make JSGlobalContextRetain/Release actually work.
39549
39550        * API/JSContextRef.cpp:
39551        (JSGlobalContextRetain):
39552        (JSGlobalContextRelease):
39553        Ref/deref global data to give checking for globalData.refCount() some sense.
39554
39555        * API/tests/testapi.c: (main): Added a test for this bug.
39556
39557        * kjs/JSGlobalData.cpp:
39558        (KJS::JSGlobalData::~JSGlobalData):
39559        While checking for memory leaks, found that JSGlobalData::emptyList has changed to
39560        a pointer, but it was not destructed, causing a huge leak in run-webkit-tests --threaded.
39561
395622008-08-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
39563
39564        Reviewed by Maciej.
39565
39566        Change the counting of constants so that preincrement and predecrement of
39567        const local variables are considered unexpected loads.
39568
39569        * kjs/nodes.cpp:
39570        (KJS::PrefixResolveNode::emitCode):
39571        * kjs/nodes.h:
39572        (KJS::ScopeNode::neededConstants):
39573
395742008-08-17  Oliver Hunt  <oliver@apple.com>
39575
39576        Reviewed by Cameron Zwarich.
39577
39578        <rdar://problem/6150322> In Gmail, a crash occurs at KJS::Machine::privateExecute() when applying list styling to text after a quote had been removed
39579        <https://bugs.webkit.org/show_bug.cgi?id=20386>
39580
39581        This crash was caused by "depth()" incorrectly determining the scope depth 
39582        of a 0 depth function without a full scope chain.  Because such a function
39583        would not have an activation the depth function would return the scope depth
39584        of the parent frame, thus triggering an incorrect unwind.  Any subsequent 
39585        look up that walked the scope chain would result in incorrect behaviour,
39586        leading to a crash or incorrect variable resolution.  This can only actually
39587        happen in try...finally statements as that's the only path that can result in
39588        the need to unwind the scope chain, but not force the function to need a
39589        full scope chain.
39590
39591        The fix is simply to check for this case before attempting to walk the scope chain.
39592
39593        * VM/Machine.cpp:
39594        (KJS::depth):
39595        (KJS::Machine::throwException):
39596
395972008-08-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
39598
39599        Reviewed by Maciej.
39600
39601        Bug 20419: Remove op_jless
39602        <https://bugs.webkit.org/show_bug.cgi?id=20419>
39603
39604        Remove op_jless, which is rarely used now that we have op_loop_if_less.
39605
39606        * VM/CodeBlock.cpp:
39607        (KJS::CodeBlock::dump):
39608        * VM/CodeGenerator.cpp:
39609        (KJS::CodeGenerator::emitJumpIfTrue):
39610        * VM/Machine.cpp:
39611        (KJS::Machine::privateExecute):
39612        * VM/Opcode.h:
39613
396142008-08-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
39615
39616        Reviewed by Dan Bernstein.
39617
39618        Fix a typo in r35807 that is also causing build failures for
39619        non-AllInOne builds.
39620
39621        * kjs/NumberConstructor.cpp:
39622
396232008-08-17  Geoffrey Garen  <ggaren@apple.com>
39624
39625        Reviewed by Cameron Zwarich.
39626
39627        Made room for a free word in JSCell.
39628        
39629        SunSpider says no change.
39630        
39631        I changed JSCallbackObjectData, Arguments, JSArray, and RegExpObject to
39632        store auxiliary data in a secondary structure.
39633
39634        I changed InternalFunction to store the function's name in the property
39635        map.
39636        
39637        I changed JSGlobalObjectData to use a virtual destructor, so WebCore's
39638        JSDOMWindowBaseData could inherit from it safely. (It's a strange design
39639        for JSDOMWindowBase to allocate an object that JSGlobalObject deletes,
39640        but that's really our only option, given the size constraint.)
39641        
39642        I also added a bunch of compile-time ASSERTs, and removed lots of comments
39643        in JSObject.h because they were often out of date, and they got in the
39644        way of reading what was actually going on.
39645        
39646        Also renamed JSArray::getLength to JSArray::length, to match our style
39647        guidelines.
39648
396492008-08-16  Geoffrey Garen  <ggaren@apple.com>
39650
39651        Reviewed by Oliver Hunt.
39652        
39653        Sped up property access for array.length and string.length by adding a
39654        mechanism for returning a temporary value directly instead of returning
39655        a pointer to a function that retrieves the value.
39656        
39657        Also removed some unused cruft from PropertySlot.
39658        
39659        SunSpider says 0.5% - 1.2% faster.
39660
39661        NOTE: This optimization is not a good idea in general, because it's
39662        actually a pessimization in the case of resolve for assignment,
39663        and it may get in the way of other optimizations in the future.
39664        
396652008-08-16  Dan Bernstein  <mitz@apple.com>
39666
39667        Reviewed by Geoffrey Garen.
39668
39669        Disable dead code stripping in debug builds.
39670
39671        * Configurations/Base.xcconfig:
39672        * JavaScriptCore.xcodeproj/project.pbxproj:
39673
396742008-08-15  Mark Rowe  <mrowe@apple.com>
39675
39676        Reviewed by Oliver Hunt.
39677
39678        <rdar://problem/6143072> FastMallocZone's enumeration code makes assumptions about handling of remote memory regions that overlap
39679
39680        * wtf/FastMalloc.cpp:
39681        (WTF::TCMalloc_Central_FreeList::enumerateFreeObjects): Don't directly compare pointers mapped into the local process with
39682        a pointer that has not been mapped.  Instead, calculate a local address for the pointer and compare with that.
39683        (WTF::TCMallocStats::FreeObjectFinder::findFreeObjects): Pass in the remote address of the central free list so that it can
39684        be used when calculating local addresses.
39685        (WTF::TCMallocStats::FastMallocZone::enumerate): Ditto.
39686
396872008-08-15  Mark Rowe  <mrowe@apple.com>
39688
39689        Rubber-stamped by Geoff Garen.
39690
39691        <rdar://problem/6139914> Please include a _debug version of JavaScriptCore framework
39692
39693        * Configurations/Base.xcconfig: Factor out the debug-only settings so that they can shared
39694        between the Debug configuration and debug Production variant.
39695        * JavaScriptCore.xcodeproj/project.pbxproj: Enable the debug variant.
39696
396972008-08-15  Mark Rowe  <mrowe@apple.com>
39698
39699        Fix the 64-bit build.
39700
39701        Add extra cast to avoid warnings about loss of precision when casting from
39702        JSValue* to an integer type.
39703
39704        * kjs/JSImmediate.h:
39705        (KJS::JSImmediate::intValue):
39706        (KJS::JSImmediate::uintValue):
39707
397082008-08-15  Alexey Proskuryakov  <ap@webkit.org>
39709
39710        Still fixing Windows build.
39711
39712        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Added OpaqueJSString
39713        to yet another place.
39714
397152008-08-15  Alexey Proskuryakov  <ap@webkit.org>
39716
39717        Trying to fix non-Apple builds.
39718
39719        * ForwardingHeaders/JavaScriptCore/OpaqueJSString.h: Added.
39720
397212008-08-15  Gavin Barraclough  <barraclough@apple.com>
39722
39723        Reviewed by Geoff Garen.
39724
39725        Allow JSImmediate to hold 31 bit signed integer immediate values.  The low two bits of a
39726        JSValue* are a tag, with the tag value 00 indicating the JSValue* is a pointer to a
39727        JSCell.  Non-zero tag values used to indicate that the JSValue* is not a real pointer,
39728        but instead holds an immediate value encoded within the pointer.  This patch changes the
39729        encoding so both the tag values 01 and 11 indicate the value is a signed integer, allowing
39730        a 31 bit value to be stored.  All other immediates are tagged with the value 10, and
39731        distinguished by a secondary tag.
39732
39733        Roughly +2% on SunSpider.
39734
39735        * kjs/JSImmediate.h: Encoding of JSImmediates has changed - see comment at head of file for
39736                             descption of new layout.
39737
397382008-08-15  Alexey Proskuryakov  <ap@webkit.org>
39739
39740        More build fixes.
39741
39742        * API/OpaqueJSString.h: Add a namespace to friend declaration to appease MSVC.
39743        * API/JSStringRefCF.h: (JSStringCreateWithCFString) Cast UniChar* to UChar* explicitly.
39744        * JavaScriptCore.exp: Added OpaqueJSString::create(const KJS::UString&) to fix WebCore build.
39745
397462008-08-15  Alexey Proskuryakov  <ap@webkit.org>
39747
39748        Build fix.
39749
39750        * JavaScriptCore.xcodeproj/project.pbxproj: Marked OpaqueJSString as private
39751
39752        * kjs/identifier.cpp:
39753        (KJS::Identifier::checkSameIdentifierTable):
39754        * kjs/identifier.h:
39755        (KJS::Identifier::add):
39756        Since checkSameIdentifierTable is exported for debug build's sake, gcc wants it to be
39757        non-inline in release builds, too.
39758
39759        * JavaScriptCore.exp: Don't export inline OpaqueJSString destructor.
39760
397612008-08-15  Alexey Proskuryakov  <ap@webkit.org>
39762
39763        Reviewed by Geoff Garen.
39764
39765        JSStringRef is created context-free, but can get linked to one via an identifier table,
39766        breaking an implicit API contract.
39767
39768        Made JSStringRef point to OpaqueJSString, which is a new string object separate from UString.
39769
39770        * API/APICast.h: Removed toRef/toJS conversions for JSStringRef, as this is no longer a
39771        simple typecast.
39772
39773        * kjs/identifier.cpp:
39774        (KJS::Identifier::checkSameIdentifierTable):
39775        * kjs/identifier.h:
39776        (KJS::Identifier::add):
39777        (KJS::UString::checkSameIdentifierTable):
39778        Added assertions to verify that an identifier is not being added to a different JSGlobalData.
39779
39780        * API/JSObjectRef.cpp:
39781        (OpaqueJSPropertyNameArray::OpaqueJSPropertyNameArray): Changed OpaqueJSPropertyNameArray to
39782        hold JSStringRefs. This is necessary to avoid having to construct (and leak) a new instance
39783        in JSPropertyNameArrayGetNameAtIndex(), now that making a JSStringRef is not just a typecast.
39784
39785        * API/OpaqueJSString.cpp: Added.
39786        (OpaqueJSString::create):
39787        (OpaqueJSString::ustring):
39788        (OpaqueJSString::identifier):
39789        * API/OpaqueJSString.h: Added.
39790        (OpaqueJSString::create):
39791        (OpaqueJSString::characters):
39792        (OpaqueJSString::length):
39793        (OpaqueJSString::OpaqueJSString):
39794        (OpaqueJSString::~OpaqueJSString):
39795
39796        * API/JSBase.cpp:
39797        (JSEvaluateScript):
39798        (JSCheckScriptSyntax):
39799        * API/JSCallbackObjectFunctions.h:
39800        (KJS::::getOwnPropertySlot):
39801        (KJS::::put):
39802        (KJS::::deleteProperty):
39803        (KJS::::staticValueGetter):
39804        (KJS::::callbackGetter):
39805        * API/JSStringRef.cpp:
39806        (JSStringCreateWithCharacters):
39807        (JSStringCreateWithUTF8CString):
39808        (JSStringRetain):
39809        (JSStringRelease):
39810        (JSStringGetLength):
39811        (JSStringGetCharactersPtr):
39812        (JSStringGetMaximumUTF8CStringSize):
39813        (JSStringGetUTF8CString):
39814        (JSStringIsEqual):
39815        * API/JSStringRefCF.cpp:
39816        (JSStringCreateWithCFString):
39817        (JSStringCopyCFString):
39818        * API/JSValueRef.cpp:
39819        (JSValueMakeString):
39820        (JSValueToStringCopy):
39821        Updated to use OpaqueJSString.
39822
39823        * GNUmakefile.am:
39824        * JavaScriptCore.exp:
39825        * JavaScriptCore.pri:
39826        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
39827        * JavaScriptCore.xcodeproj/project.pbxproj:
39828        * JavaScriptCoreSources.bkl:
39829        Added OpaqueJSString.
39830
398312008-08-14  Kevin McCullough  <kmccullough@apple.com>
39832
39833        Reviewed by Tim.
39834
39835        <rdar://problem/6115819> Notify of profile in console
39836        - Profiles now have a unique ID so that they can be linked to the
39837        console message that announces that a profile completed.
39838
39839        * profiler/HeavyProfile.cpp: 
39840        (KJS::HeavyProfile::HeavyProfile):
39841        * profiler/Profile.cpp:
39842        (KJS::Profile::create):
39843        (KJS::Profile::Profile):
39844        * profiler/Profile.h:
39845        (KJS::Profile::uid):
39846        * profiler/ProfileGenerator.cpp:
39847        (KJS::ProfileGenerator::create):
39848        (KJS::ProfileGenerator::ProfileGenerator):
39849        * profiler/ProfileGenerator.h:
39850        * profiler/Profiler.cpp:
39851        (KJS::Profiler::startProfiling):
39852        * profiler/TreeProfile.cpp:
39853        (KJS::TreeProfile::create):
39854        (KJS::TreeProfile::TreeProfile):
39855        * profiler/TreeProfile.h:
39856
398572008-08-13  Geoffrey Garen  <ggaren@apple.com>
39858
39859        Reviewed by Oliver Hunt.
39860        
39861        Nixed a PIC branch from JSObject::getOwnPropertySlot, by forcing
39862        fillGetterProperty, which references a global function pointer,
39863        out-of-line.
39864        
39865        .2% SunSpider speedup, 4.3% access-nbody speedup, 8.7% speedup on a
39866        custom property access benchmark for objects with one property.
39867
39868        * kjs/JSObject.cpp:
39869        (KJS::JSObject::fillGetterPropertySlot):
39870
398712008-08-13  Alp Toker  <alp@nuanti.com>
39872
39873        Reviewed by Eric Seidel.
39874
39875        https://bugs.webkit.org/show_bug.cgi?id=20349
39876        WTF::initializeThreading() fails if threading is already initialized
39877
39878        Fix threading initialization logic to support cases where
39879        g_thread_init() has already been called elsewhere.
39880
39881        Resolves database-related crashers reported in several applications.
39882
39883        * wtf/ThreadingGtk.cpp:
39884        (WTF::initializeThreading):
39885
398862008-08-13  Brad Hughes <bhughes@trolltech.com>
39887
39888        Reviewed by Simon.
39889
39890        Fix compiling of QtWebKit in release mode with the Intel C++ Compiler for Linux
39891
39892        The latest upgrade of the intel compiler allows us to compile all of
39893        Qt with optimizations enabled (yay!).
39894
39895        * JavaScriptCore.pro:
39896
398972008-08-12  Oliver Hunt  <oliver@apple.com>
39898
39899        Reviewed by Geoff Garen.
39900
39901        Add peephole optimisation to 'op_not... jfalse...' (eg. if(!...) )
39902
39903        This is a very slight win in sunspider, and a fairly substantial win
39904        in hot code that does if(!...), etc.
39905
39906        * VM/CodeGenerator.cpp:
39907        (KJS::CodeGenerator::retrieveLastUnaryOp):
39908        (KJS::CodeGenerator::rewindBinaryOp):
39909        (KJS::CodeGenerator::rewindUnaryOp):
39910        (KJS::CodeGenerator::emitJumpIfFalse):
39911        * VM/CodeGenerator.h:
39912
399132008-08-12  Dan Bernstein  <mitz@apple.com>
39914
39915        - JavaScriptCore part of <rdar://problem/6121636>
39916          Make fast*alloc() abort() on failure and add "try" variants that
39917          return NULL on failure.
39918
39919        Reviewed by Darin Adler.
39920
39921        * JavaScriptCore.exp: Exported tryFastCalloc().
39922        * VM/RegisterFile.h:
39923        (KJS::RegisterFile::RegisterFile): Removed an ASSERT().
39924        * kjs/JSArray.cpp:
39925        (KJS::JSArray::putSlowCase): Changed to use tryFastRealloc().
39926        (KJS::JSArray::increaseVectorLength): Ditto.
39927        * kjs/ustring.cpp:
39928        (KJS::allocChars): Changed to use tryFastMalloc().
39929        (KJS::reallocChars): Changed to use tryFastRealloc().
39930        * wtf/FastMalloc.cpp:
39931        (WTF::fastZeroedMalloc): Removed null checking of fastMalloc()'s result
39932        and removed extra call to InvokeNewHook().
39933        (WTF::tryFastZeroedMalloc): Added. Uses tryFastMalloc().
39934        (WTF::tryFastMalloc): Renamed fastMalloc() to this.
39935        (WTF::fastMalloc): Added. This version abort()s if allocation fails.
39936        (WTF::tryFastCalloc): Renamed fastCalloc() to this.
39937        (WTF::fastCalloc): Added. This version abort()s if allocation fails.
39938        (WTF::tryFastRealloc): Renamed fastRealloc() to this.
39939        (WTF::fastRealloc): Added. This version abort()s if allocation fails.
39940        (WTF::do_malloc): Made this a function template. When the abortOnFailure
39941        template parameter is set, the function abort()s on failure to allocate.
39942        Otherwise, it sets errno to ENOMEM and returns zero.
39943        (WTF::TCMallocStats::fastMalloc): Defined to abort() on failure.
39944        (WTF::TCMallocStats::tryFastMalloc): Added. Does not abort() on
39945        failure.
39946        (WTF::TCMallocStats::fastCalloc): Defined to abort() on failure.
39947        (WTF::TCMallocStats::tryFastCalloc): Added. Does not abort() on
39948        failure.
39949        (WTF::TCMallocStats::fastRealloc): Defined to abort() on failure.
39950        (WTF::TCMallocStats::tryFastRealloc): Added. Does not abort() on
39951        failure.
39952        * wtf/FastMalloc.h: Declared the "try" variants.
39953
399542008-08-11  Adam Roben  <aroben@apple.com>
39955
39956        Move WTF::notFound into its own header so that it can be used
39957        independently of Vector
39958
39959        Rubberstamped by Darin Adler.
39960
39961        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
39962        * JavaScriptCore.xcodeproj/project.pbxproj:
39963        Added NotFound.h to the project.
39964        * wtf/NotFound.h: Added. Moved the notFound constant here...
39965        * wtf/Vector.h: ...from here.
39966
399672008-08-11  Alexey Proskuryakov  <ap@webkit.org>
39968
39969        Reviewed by Mark Rowe.
39970
39971        <rdar://problem/6130393> REGRESSION: PhotoBooth hangs after launching under TOT Webkit
39972
39973        * API/JSContextRef.cpp: (JSGlobalContextRelease): Corrected a comment.
39974
39975        * kjs/collector.cpp: (KJS::Heap::~Heap): Ensure that JSGlobalData is not deleted while
39976        sweeping the heap.
39977
39978== Rolled over to ChangeLog-2008-08-10 ==
39979