Changeset 35662 in webkit for trunk/JavaScriptCore


Ignore:
Timestamp:
Aug 10, 2008, 10:07:42 PM (17 years ago)
Author:
[email protected]
Message:

Roll over three large ChangeLogs.

Location:
trunk/JavaScriptCore
Files:
1 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r35658 r35662  
    1 2008-08-10  Jan Michael Alonzo  <[email protected]>
    2 
    3         Reviewed (and updated) by Alp Toker.
    4 
    5         https://bugs.webkit.org/show_bug.cgi?id=16620
    6         [GTK] Autotools make dist and make check support
    7 
    8         Get make dist working.
    9 
    10         Note that not all possible configurations have been tested yet.
    11 
    12         * GNUmakefile.am:
    13 
    14 2008-08-09  Alexey Proskuryakov  <[email protected]>
    15 
    16         Reviewed by Sam Weinig.
    17 
    18         Added same heap debug checks to more code paths.
    19 
    20         * kjs/JSActivation.cpp:
    21         (KJS::JSActivation::put):
    22         (KJS::JSActivation::putWithAttributes):
    23         * kjs/JSGlobalObject.cpp:
    24         (KJS::JSGlobalObject::putWithAttributes):
    25         * kjs/JSObject.h:
    26         (KJS::JSObject::putDirect):
    27         * kjs/JSVariableObject.h:
    28         (KJS::JSVariableObject::symbolTablePut):
    29         (KJS::JSVariableObject::symbolTablePutWithAttributes):
    30 
    31 2008-08-09  Cameron Zwarich  <[email protected]>
    32 
    33         Reviewed by Maciej.
    34 
    35         Fix some style issues in the sampling tool.
    36 
    37         * VM/SamplingTool.cpp:
    38         (KJS::sleepForMicroseconds):
    39         (KJS::SamplingTool::dump):
    40 
    41 2008-08-09  Cameron Zwarich  <[email protected]>
    42 
    43         Reviewed by Oliver.
    44 
    45         Revision 35651, despite being a rather trivial change, introduced a
    46         large regression on the regexp-dna SunSpider test. This regression
    47         stemmed from an increase in the size of CodeBlock::dump(). There is
    48         no reason for this method (and several related methods) to be compiled
    49         in non-debug builds with the sampling tool disabled. This patch
    50         conditionally compiles them, reversing the regression on SunSpider.
    51 
    52         * JavaScriptCore.exp:
    53         * VM/CodeBlock.cpp:
    54         * VM/CodeBlock.h:
    55         * VM/Machine.cpp:
    56 
    57 2008-08-08  Cameron Zwarich  <[email protected]>
    58 
    59         Reviewed by Oliver.
    60 
    61         Bug 20330: JSCore crash loading any filehurricane media page
    62         <https://bugs.webkit.org/show_bug.cgi?id=20330>
    63 
    64         Fix a typo in the constant loading patch. Also, add a case for
    65         op_unexpected_load to CodeBlock::dump().
    66 
    67         * VM/CodeBlock.cpp:
    68         (KJS::CodeBlock::dump):
    69         * VM/CodeGenerator.cpp:
    70         (KJS::CodeGenerator::addUnexpectedConstant):
    71 
    72 2008-08-08  Matt Lilek  <[email protected]>
    73 
    74         Not reviewed, build fix.
    75 
    76         * JavaScriptCore.exp:
    77 
    78 2008-08-08  Oliver Hunt  <[email protected]>
    79 
    80         Reviewed by Cameron Zwarich.
    81 
    82         Improve performance of arithmetic operators
    83 
    84         Added a fast (non-virtual) mechanism to determine if a non-immediate JSValue*
    85         is a JSNumberCell.  We then use this to allow improved specialisation in many
    86         arithmetic operators.  SunSpider reports a 2.5% progression overall, with greater
    87         than 10% progressions on a number of arithmetic heavy tests.
    88 
    89         * VM/Machine.cpp:
    90         (KJS::fastIsNumber):
    91         (KJS::fastToInt32):
    92         (KJS::fastToUInt32):
    93         (KJS::jsLess):
    94         (KJS::jsLessEq):
    95         (KJS::jsAdd):
    96         (KJS::Machine::privateExecute):
    97         * kjs/JSNumberCell.h:
    98         (KJS::JSNumberCell::fastToInt32):
    99         (KJS::JSNumberCell::fastToUInt32):
    100         * kjs/collector.cpp:
    101         (KJS::allocateBlock):
    102         (KJS::Heap::heapAllocate):
    103         * kjs/collector.h:
    104         (KJS::Heap::fastIsNumber):
    105 
    106 2008-08-06  Adam Roben  <[email protected]>
    107 
    108         Try to fix the Windows build bots
    109 
    110         * API/JSBase.cpp: Touch this to force JSC to rebuild and re-copy the
    111         WTF headers.
    112 
    113 2008-08-06  Tor Arne Vestbø  <[email protected]>
    114 
    115         Revert change 35595.
    116 
    117         * wtf/RetainPtr.h:
    118 
    119 2008-08-06  Ariya Hidayat  <[email protected]>
    120 
    121         Fix non-Mac build.
    122 
    123         * wtf/RetainPtr.h: CoreFoundation only for PLATFORM(MAC)
    124 
    125 2008-08-06  Ariya Hidayat  <[email protected]>
    126 
    127         Fix non-Mac build.
    128 
    129         * wtf/RetainPtr.h: CoreFoundation only for PLATFORM(MAC)
    130 
    131 2008-08-06  Csaba Osztrogonac  <[email protected]>
    132 
    133         Reviewed by Darin. Landed by Cameron.
    134 
    135         Bug 20272: typo in JavaScriptCore
    136         <https://bugs.webkit.org/show_bug.cgi?id=20272>
    137 
    138         Correct the documentation for op_not. (typo)
    139         Fix #undef. (typo)
    140 
    141         * VM/Machine.cpp:
    142         (KJS::Machine::privateExecute):
    143 
    144 2008-08-06  Cameron Zwarich  <[email protected]>
    145 
    146         Reviewed by Maciej.
    147 
    148         Bug 20286: Load constants all at once instead of using op_load
    149         <https://bugs.webkit.org/show_bug.cgi?id=20286>
    150 
    151         Load constants all at once into temporary registers instead of using
    152         individual instances of op_load.
    153 
    154         This is a 2.6% speedup on SunSpider.
    155 
    156         * JavaScriptCore.exp:
    157         * VM/CodeBlock.cpp:
    158         (KJS::CodeBlock::dump):
    159         (KJS::CodeBlock::mark):
    160         * VM/CodeBlock.h:
    161         * VM/CodeGenerator.cpp:
    162         (KJS::CodeGenerator::CodeGenerator):
    163         (KJS::CodeGenerator::newTemporary):
    164         (KJS::CodeGenerator::addConstant):
    165         (KJS::CodeGenerator::addUnexpectedConstant):
    166         (KJS::CodeGenerator::emitLoad):
    167         (KJS::CodeGenerator::emitUnexpectedLoad):
    168         (KJS::CodeGenerator::emitNewError):
    169         * VM/CodeGenerator.h:
    170         * VM/Machine.cpp:
    171         (KJS::slideRegisterWindowForCall):
    172         (KJS::Machine::unwindCallFrame):
    173         (KJS::Machine::throwException):
    174         (KJS::Machine::execute):
    175         (KJS::Machine::privateExecute):
    176         * VM/Machine.h:
    177         * VM/Opcode.h:
    178         * VM/RegisterID.h:
    179         (KJS::RegisterID::RegisterID):
    180         (KJS::RegisterID::makeConstant):
    181         (KJS::RegisterID::isTemporary):
    182         * kjs/NodeInfo.h:
    183         * kjs/Parser.cpp:
    184         (KJS::Parser::didFinishParsing):
    185         * kjs/Parser.h:
    186         (KJS::Parser::parse):
    187         * kjs/grammar.y:
    188         * kjs/nodes.cpp:
    189         (KJS::NullNode::emitCode):
    190         (KJS::BooleanNode::emitCode):
    191         (KJS::NumberNode::emitCode):
    192         (KJS::StringNode::emitCode):
    193         (KJS::ArrayNode::emitCode):
    194         (KJS::DeleteResolveNode::emitCode):
    195         (KJS::DeleteValueNode::emitCode):
    196         (KJS::VoidNode::emitCode):
    197         (KJS::ConstDeclNode::emitCodeSingle):
    198         (KJS::ReturnNode::emitCode):
    199         (KJS::ScopeNode::ScopeNode):
    200         (KJS::ProgramNode::ProgramNode):
    201         (KJS::ProgramNode::create):
    202         (KJS::EvalNode::EvalNode):
    203         (KJS::EvalNode::create):
    204         (KJS::FunctionBodyNode::FunctionBodyNode):
    205         (KJS::FunctionBodyNode::create):
    206         (KJS::FunctionBodyNode::emitCode):
    207         * kjs/nodes.h:
    208         (KJS::ScopeNode::neededConstants):
    209 
    210 2008-08-05  Maciej Stachowiak  <[email protected]>
    211 
    212         Reviewed by Cameron.
    213 
    214         - add fast path for immediates to % operator, as we have for many other math ops
    215        
    216         This fixes handling for a 0 divisor relative to the last patch. Only an 0.2% speedup on SunSpider but
    217         still a 1.4x win on Oliver's prime test.
    218        
    219         * VM/Machine.cpp:
    220         (KJS::Machine::privateExecute):
    221 
    222 2008-08-05  Cameron Zwarich  <[email protected]>
    223 
    224         Reviewed by Darin.
    225 
    226         Bug 20293: Crash in JavaScript codegen for eval("const a;")
    227         <https://bugs.webkit.org/show_bug.cgi?id=20293>
    228 
    229         Correctly handle constant declarations in eval code with no initializer.
    230 
    231         * kjs/nodes.cpp:
    232         (KJS::ConstDeclNode::emitCodeSingle):
    233 
    234 2008-08-05  Cameron Zwarich  <[email protected]>
    235 
    236         Reviewed by Oliver.
    237 
    238         Roll out r35555 because of correctness issues.
    239 
    240         * VM/Machine.cpp:
    241         (KJS::Machine::privateExecute):
    242 
    243 2008-08-05  Maciej Stachowiak  <[email protected]>
    244 
    245         Reviewed by Geoff.
    246        
    247         - add fast path for immediates to % operator, as we have for many other math ops
    248        
    249         0.6% speedup on SunSpider. 1.4x speedup on a prime testing torture test that Oliver whipped up.
    250 
    251         * VM/Machine.cpp:
    252         (KJS::Machine::privateExecute):
    253 
    254 2008-07-31  Oliver Hunt  <[email protected]>
    255 
    256         Reviewed by Cameron Zwarich.
    257 
    258         Bug 19359: JavaScriptCore behaves differently from FF2/3 and IE when handling context in catch statement
    259         <https://bugs.webkit.org/show_bug.cgi?id=19359>
    260 
    261         Make our catch behave like Firefox and IE, we do this by using a StaticScopeObject
    262         instead of a generic JSObject for the scope node.  We still don't make use of the
    263         fact that we have a static scope inside the catch block, so the internal performance
    264         of the catch block is not improved, even though technically it would be possible to
    265         do so.
    266 
    267         * VM/CodeBlock.cpp:
    268         (KJS::CodeBlock::dump):
    269         * VM/CodeGenerator.cpp:
    270         (KJS::CodeGenerator::emitPushNewScope):
    271         * VM/CodeGenerator.h:
    272         * VM/Machine.cpp:
    273         (KJS::createExceptionScope):
    274         (KJS::Machine::privateExecute):
    275         * VM/Machine.h:
    276         * VM/Opcode.h:
    277         * kjs/JSStaticScopeObject.cpp:
    278         (KJS::JSStaticScopeObject::toThisObject):
    279         (KJS::JSStaticScopeObject::put):
    280         * kjs/JSStaticScopeObject.h:
    281         * kjs/nodes.cpp:
    282         (KJS::TryNode::emitCode):
    283 
    284 2008-08-02  Rob Gowin  <[email protected]>
    285 
    286         Reviewed by Eric Seidel.
    287 
    288         Added JavaScriptCore/API/WebKitAvailability to list of files in
    289         javascriptcore_h_api.
    290 
    291         * GNUmakefile.am:
    292 
    293 2008-08-01  Alexey Proskuryakov  <[email protected]>
    294 
    295         Rubber-stamped by Maciej.
    296 
    297         Remove JSGlobalData::DataInstance. It was only needed when we had per-thread JSGlobalData
    298         instances.
    299 
    300         * kjs/JSGlobalData.h:
    301 
    302 2008-07-31  Kevin Ollivier <[email protected]>
    303 
    304         Second attempt at Windows/wx build fix. Instead of avoiding inclusion of windows.h,
    305         use defines, etc. to avoid conflicts in each affected file. Also, change PLATFORM(WIN)
    306         to PLATFORM(WIN_OS) so that other ports using Windows headers get the right impls.
    307 
    308         * VM/SamplingTool.cpp:
    309         * wtf/Threading.h:
    310 
    311 2008-07-31  Anders Carlsson  <[email protected]>
    312 
    313         Reviewed by Adam.
    314 
    315         Fix Windows build.
    316        
    317         * kjs/collector.h:
    318         * wtf/FastMalloc.cpp:
    319 
    320 2008-07-31  Csaba Osztrogonac  <[email protected]>
    321 
    322         Reviewed by Simon.
    323 
    324         Bug 20170: [Qt] missing namespace defines in JavaScriptCore.pro
    325         <https://bugs.webkit.org/show_bug.cgi?id=20170>
    326 
    327         * JavaScriptCore.pro: Added missing define.
    328 
    329 2008-07-31  Alexey Proskuryakov  <[email protected]>
    330 
    331         Rubber-stamped by Maciej.
    332 
    333         Eliminate JSLock (it was already disabled, removing the stub implementaion and all
    334         call sites now).
    335 
    336         * API/JSBase.cpp:
    337         (JSEvaluateScript):
    338         (JSCheckScriptSyntax):
    339         (JSGarbageCollect):
    340         * API/JSCallbackConstructor.cpp:
    341         (KJS::constructJSCallback):
    342         * API/JSCallbackFunction.cpp:
    343         (KJS::JSCallbackFunction::call):
    344         * API/JSCallbackObjectFunctions.h:
    345         (KJS::::init):
    346         (KJS::::getOwnPropertySlot):
    347         (KJS::::put):
    348         (KJS::::deleteProperty):
    349         (KJS::::construct):
    350         (KJS::::hasInstance):
    351         (KJS::::call):
    352         (KJS::::getPropertyNames):
    353         (KJS::::toNumber):
    354         (KJS::::toString):
    355         (KJS::::staticValueGetter):
    356         (KJS::::callbackGetter):
    357         * API/JSContextRef.cpp:
    358         (JSGlobalContextCreateInGroup):
    359         (JSGlobalContextRetain):
    360         (JSGlobalContextRelease):
    361         * API/JSObjectRef.cpp:
    362         (JSObjectMake):
    363         (JSObjectMakeFunctionWithCallback):
    364         (JSObjectMakeConstructor):
    365         (JSObjectMakeFunction):
    366         (JSObjectHasProperty):
    367         (JSObjectGetProperty):
    368         (JSObjectSetProperty):
    369         (JSObjectGetPropertyAtIndex):
    370         (JSObjectSetPropertyAtIndex):
    371         (JSObjectDeleteProperty):
    372         (JSObjectCallAsFunction):
    373         (JSObjectCallAsConstructor):
    374         (JSObjectCopyPropertyNames):
    375         (JSPropertyNameArrayRelease):
    376         (JSPropertyNameAccumulatorAddName):
    377         * API/JSStringRef.cpp:
    378         (JSStringRelease):
    379         * API/JSValueRef.cpp:
    380         (JSValueIsEqual):
    381         (JSValueIsInstanceOfConstructor):
    382         (JSValueMakeNumber):
    383         (JSValueMakeString):
    384         (JSValueToNumber):
    385         (JSValueToStringCopy):
    386         (JSValueToObject):
    387         (JSValueProtect):
    388         (JSValueUnprotect):
    389         * ForwardingHeaders/JavaScriptCore/JSLock.h: Removed.
    390         * GNUmakefile.am:
    391         * JavaScriptCore.exp:
    392         * JavaScriptCore.order:
    393         * JavaScriptCore.pri:
    394         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    395         * JavaScriptCore.xcodeproj/project.pbxproj:
    396         * JavaScriptCoreSources.bkl:
    397         * kjs/AllInOneFile.cpp:
    398         * kjs/JSGlobalData.cpp:
    399         (KJS::JSGlobalData::JSGlobalData):
    400         * kjs/JSGlobalData.h:
    401         * kjs/JSGlobalObject.cpp:
    402         (KJS::JSGlobalObject::~JSGlobalObject):
    403         (KJS::JSGlobalObject::init):
    404         * kjs/JSLock.cpp: Removed.
    405         * kjs/JSLock.h: Removed.
    406         * kjs/Shell.cpp:
    407         (functionGC):
    408         (jscmain):
    409         * kjs/collector.cpp:
    410         (KJS::Heap::~Heap):
    411         (KJS::Heap::heapAllocate):
    412         (KJS::Heap::setGCProtectNeedsLocking):
    413         (KJS::Heap::protect):
    414         (KJS::Heap::unprotect):
    415         (KJS::Heap::collect):
    416         * kjs/identifier.cpp:
    417         * kjs/interpreter.cpp:
    418         (KJS::Interpreter::checkSyntax):
    419         (KJS::Interpreter::evaluate):
    420 
    421 2008-07-31  Alexey Proskuryakov  <[email protected]>
    422 
    423         Rubber-stamped by Oliver Hunt.
    424 
    425         Fix the Mac project to not display "test/" as part of file name for tests.
    426 
    427         * JavaScriptCore.xcodeproj/project.pbxproj:
    428 
    429 2008-07-31  Eric Seidel  <[email protected]>
    430 
    431         Reviewed by Alexey Proskuryakov.
    432        
    433         Rename USE(MULTIPLE_THREADS) to ENABLE(JSC_MULTIPLE_THREADS)
    434         to better match the use/enable pattern (and better describe
    435         the usage of the feature in question.)
    436        
    437         I also fixed a couple other ENABLE_ macros to be pre-processor
    438         definition override-able to match the rest of the ENABLE_ macros
    439         since it seems to be our convention that build systems can set
    440         ENABLE_ macros in Makefiles.
    441 
    442         * kjs/InitializeThreading.cpp:
    443         (KJS::initializeThreadingOnce):
    444         * kjs/JSGlobalData.cpp:
    445         (KJS::JSGlobalData::JSGlobalData):
    446         (KJS::JSGlobalData::~JSGlobalData):
    447         * kjs/MathObject.cpp:
    448         * kjs/collector.cpp:
    449         (KJS::Heap::Heap):
    450         (KJS::Heap::~Heap):
    451         (KJS::allocateBlock):
    452         (KJS::Heap::markStackObjectsConservatively):
    453         * kjs/collector.h:
    454         * kjs/dtoa.cpp:
    455         (KJS::pow5mult):
    456         (KJS::rv_alloc):
    457         (KJS::freedtoa):
    458         (KJS::dtoa):
    459         * wtf/FastMalloc.cpp:
    460         * wtf/Platform.h:
    461         * wtf/RefCountedLeakCounter.cpp:
    462 
    463 2008-07-30  Eric Seidel  <[email protected]>
    464 
    465         Reviewed by Mark Rowe.
    466        
    467         Try to clean up our usage of USE(MULTIPLE_THREADS) vs. USE(PTHREADS) a little.
    468         It looks like JSC assumes that if MULTIPLE_THREADS is defined, then pthreads will always be available
    469         I'm not sure that's always the case for gtk, certainly not for Windows.  We should eventually go back
    470         and fix wtf/Threading.h to cover all these cases some day.
    471 
    472         * kjs/JSLock.cpp:
    473         * kjs/collector.h:
    474         * wtf/Platform.h:
    475 
    476 2008-07-30  Eric Seidel  <[email protected]>
    477 
    478         Reviewed by Oliver.
    479        
    480         MSVC warns when structs are called classes or vice versa.
    481         Make all the source refer to JSGlobalData as a class.
    482 
    483         * kjs/CommonIdentifiers.h:
    484         * kjs/JSGlobalData.h:
    485         * kjs/Parser.h:
    486         * kjs/lexer.h:
    487 
    488 2008-07-30  Alexey Proskuryakov  <[email protected]>
    489 
    490         Reviewed by Geoff Garen.
    491 
    492         Add consistency checks to UString to document and enforce its design.
    493 
    494         * kjs/ustring.cpp:
    495         (KJS::UString::Rep::create):
    496         (KJS::UString::Rep::destroy):
    497         (KJS::UString::Rep::checkConsistency):
    498         (KJS::UString::expandCapacity):
    499         (KJS::UString::expandPreCapacity):
    500         (KJS::UString::UString):
    501         (KJS::UString::spliceSubstringsWithSeparators):
    502         (KJS::UString::append):
    503         * kjs/ustring.h:
    504         (KJS::UString::Rep::checkConsistency):
    505 
    506 2008-07-30  Gavin Barraclough  <[email protected]>
    507 
    508         Reviewed by Geoff Garen.
    509 
    510         Fixes for Windows and non-AllInOne file build with SamplingTool, plus review fixes.
    511 
    512         * GNUmakefile.am:              Adding SamplingTool.cpp to build.
    513         * JavaScriptCore.exp:          Export hooks to init & control SamplingTool.
    514         * JavaScriptCore.pri:          Adding SamplingTool.cpp to build.
    515         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Adding SamplingTool.cpp to build.
    516         * JavaScriptCore.xcodeproj/project.pbxproj: Adding SamplingTool.cpp to build.
    517         * JavaScriptCoreSources.bkl:   Adding SamplingTool.cpp to build.
    518         * VM/Machine.cpp:              MACHINE_SAMPLING_callingNativeFunction renamed MACHINE_SAMPLING_callingHostFunction
    519         * VM/Machine.h:
    520         * VM/Opcode.cpp:               SamplingTool moved to SamplingTool.cpp/.h, opcodeNames generated from FOR_EACH_OPCODE_ID.
    521         * VM/Opcode.h:
    522         * VM/SamplingTool.cpp:         Added .cpp/.h for SamplingTool.
    523         * VM/SamplingTool.h:
    524         * kjs/Shell.cpp:               Switched SAMPLING_TOOL_ENABLED to ENABLE_SAMPLING_TOOL.
    525         * wtf/Platform.h:              Added ENABLE_SAMPLING_TOOL config option.
    526         * kjs/nodes.cpp:               Header include to fix non-AllInOne builds.
    527 
    528 2008-07-30  Ariya Hidayat  <[email protected]>
    529 
    530         Reviewed by Alexey Proskuryakov.
    531 
    532         Fix compilation without multi-threading support.
    533 
    534         * kjs/collector.cpp:
    535         (KJS::Heap::Heap):
    536 
    537 2008-07-30  Anders Carlsson  <[email protected]>
    538        
    539         Add WebKitAvailability.h forwarding header.
    540        
    541         * ForwardingHeaders/JavaScriptCore/WebKitAvailability.h: Added.
    542 
    543 2008-07-30  Anders Carlsson  <[email protected]>
    544 
    545         Fix the else.
    546        
    547         * API/WebKitAvailability.h:
    548 
    549 2008-07-30  Anders Carlsson  <[email protected]>
    550 
    551         * API/WebKitAvailability.h:
    552         Fix Windows (and other non-Mac builds).
    553        
    554         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    555         Add WebKitAvailability.h to the project.
    556 
    557 2008-07-30  Anders Carlsson  <[email protected]>
    558 
    559         One step closer towards fixing the Windows build.
    560        
    561         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
    562         Make sure to copy WebKitAvailability.h
    563 
    564 2008-07-29  Gavin Barraclough  <[email protected]>
    565 
    566         Reviewed by Geoff Garen.
    567 
    568         Bug 20209: Atomize constant strings
    569         <https://bugs.webkit.org/show_bug.cgi?id=20209>
    570 
    571         Prevents significant performance degradation seen when a script contains multiple
    572         identical strings that are used as keys to identify properties on objects.
    573 
    574         No performance change on SunSpider.
    575 
    576         * kjs/nodes.cpp: Atomize constant strings.
    577 
    578 2008-07-30  Oliver Hunt  <[email protected]>
    579 
    580         Reviewed by Alexey Proskuryakov.
    581 
    582         <rdar://problem/6111648> JavaScript exceptions fail if the scope chain includes the global object
    583 
    584         In an attempt to remove the branch I just added to KJS::depth I
    585         used the existence of a Variable Object at a point in the scope
    586         chain as an indicator of function or global scope activation.
    587         However this assumption results in incorrect behaviour if the
    588         global object is injected into the scope chain with 'with'.
    589 
    590         * VM/Machine.cpp:
    591         (KJS::depth):
    592 
    593 2008-07-30  Alexey Proskuryakov  <[email protected]>
    594 
    595         Reviewed by Geoff Garen.
    596 
    597         Don't call JSGarbageCollect() on a released context.
    598 
    599         * API/testapi.c: (main):
    600 
    601 2008-07-29  Alexey Proskuryakov  <[email protected]>
    602 
    603         Reviewed by Geoff Garen.
    604 
    605         Implement JSContextGroup APIs to make concurrent execution possible for
    606         JavaScriptCore clients.
    607 
    608         This changes the behavior of JSGlobalContextCreate(), so that it now uses a private context
    609         group for each context, making JSlock implicit locking unnecessary.
    610 
    611         * API/JSContextRef.h:
    612         * API/JSContextRef.cpp:
    613         (JSContextGroupCreate):
    614         (JSContextGroupRetain):
    615         (JSContextGroupRelease):
    616         (JSGlobalContextCreate):
    617         (JSGlobalContextCreateInGroup):
    618         (JSGlobalContextRelease):
    619         (JSContextGetGroup):
    620         Added new methods. JSGlobalContextCreate() calls JSGlobalContextCreateInGroup() now.
    621 
    622         * API/APICast.h: (toJS): (toRef): Added converters for JSContextGroupRef.
    623         * API/JSBase.cpp: (JSGarbageCollect): JSGarbageCollect(0) is now a no-op, and the passed in
    624         context is actually used.
    625 
    626         * API/JSBase.h: Aded a typedef for JSContextGroupRef. Updated documentation for
    627         JSGarbageCollect().
    628 
    629         * JavaScriptCore.exp: Removed JSGlobalData::sharedInstance().
    630 
    631         * kjs/JSGlobalData.cpp:
    632         * kjs/JSGlobalData.h:
    633         Removed support for JSGlobalData shared instance. JSGlobalData::isSharedInstance member
    634         variable still remains, to be deleted in a followup patch.
    635 
    636         * kjs/JSLock.cpp: (KJS::JSLock::JSLock): Disabled JSLock, to be deleted in a follow-up patch.
    637        
    638         * kjs/collector.cpp:
    639         (KJS::Heap::markOtherThreadConservatively): Removed an assertion that referenced
    640         JSGlobalData::sharedInstance.
    641 
    642         * kjs/collector.h: Made Heap destructor public, so that JSContextRelease can use it.
    643 
    644 2008-07-29  Alexey Proskuryakov  <[email protected]>
    645 
    646         Reviewed by Geoff Garen.
    647 
    648         Fix a leak of ThreadRegistrar objects.
    649 
    650         As the heap is usually deleted when registered threads still exist, ThreadSpecific doesn't
    651         have a chance to clean up per-thread object. Switched to native pthread calls, storing a
    652         plain pointer that doesn't require cleanup.
    653 
    654         * kjs/collector.cpp:
    655         (KJS::PlatformThread::PlatformThread):
    656         (KJS::Heap::Thread::Thread):
    657         (KJS::Heap::Heap):
    658         (KJS::Heap::~Heap):
    659         (KJS::Heap::registerThread):
    660         (KJS::Heap::unregisterThread):
    661         * kjs/collector.h:
    662 
    663 2008-07-29  Alexey Proskuryakov  <[email protected]>
    664 
    665         Reviewed by Sam Weinig.
    666 
    667         https://bugs.webkit.org/show_bug.cgi?id=20169
    668         Memory allocated with fastMalloc is freed with delete
    669 
    670         * VM/JSPropertyNameIterator.cpp:
    671         (KJS::JSPropertyNameIterator::invalidate): Free the array properly.
    672         (KJS::JSPropertyNameIterator::~JSPropertyNameIterator): Delete the array by calling
    673         invalidate().
    674 
    675 2008-07-29  Mark Rowe  <[email protected]>
    676 
    677         Attempt to fix the Qt build.
    678 
    679         * wtf/ThreadingQt.cpp: Add the extra argument to createThread.
    680 
    681 2008-07-29  Adam Roben  <[email protected]>
    682 
    683         Change Vector::find to return an index instead of an iterator
    684 
    685         Indices are more natural than iterators when working with Vector.
    686 
    687         Reviewed by John Sullivan.
    688 
    689         * wtf/Vector.h:
    690         (WTF::Vector::find): Changed to iterate the Vector manually and return
    691         the index of the found item, rather than an iterator. When the item
    692         could not be found, we return WTF::notFound.
    693 
    694 2008-07-29  Adam Roben  <[email protected]>
    695 
    696         Windows build fix
    697 
    698         * wtf/ThreadingWin.cpp:
    699         (WTF::setThreadName): Move a misplaced assertion to here...
    700         (WTF::createThread): ...from here.
    701 
    702 2008-07-29  Adam Roben  <[email protected]>
    703 
    704         Add support for setting thread names on Windows
    705 
    706         These thread names make it much easier to identify particular threads
    707         in Visual Studio's Threads panel.
    708 
    709         WTF::createThread now takes a const char* representing the thread's
    710         name. On Windows, we throw a special exception to set this string as
    711         the thread's name. Other platforms do nothing with this name for now.
    712 
    713         Reviewed by Anders Carlsson.
    714 
    715         * JavaScriptCore.exp: Export the new version of createThread that
    716         takes 3 arguments (the old one continues to be exported for backward
    717         compatibility).
    718         * wtf/Threading.h: Add a threadName argument to createThread.
    719 
    720         * wtf/ThreadingGtk.cpp:
    721         (WTF::createThread):
    722         * wtf/ThreadingNone.cpp:
    723         (WTF::createThread):
    724         Updated for function signature change.
    725 
    726         * wtf/ThreadingPthreads.cpp:
    727         (WTF::createThread): Updated for function signature change. We keep
    728         around the old 2-argument version of createThread for backward
    729         compatibility.
    730 
    731         * wtf/ThreadingWin.cpp:
    732         (WTF::setThreadName): Added. This function's implementation came from
    733         MSDN.
    734         (WTF::initializeThreading): Set the name of the main thread.
    735         (WTF::createThread): Call setThreadName. We keep around the old
    736         2-argument version of createThread for backward compatibility.
    737 
    738 2008-07-29  Alexey Proskuryakov  <[email protected]>
    739 
    740         Reviewed by Oliver Hunt.
    741 
    742         Store UString::Rep::isStatic bit in identifierTable pointer instead of reportedCost for
    743         slightly nicer code and a 0.5% SunSpider improvement.
    744 
    745         * API/JSClassRef.cpp:
    746         (OpaqueJSClass::~OpaqueJSClass):
    747         (OpaqueJSClassContextData::OpaqueJSClassContextData):
    748         * API/JSStringRef.cpp:
    749         (JSStringRelease):
    750         * kjs/PropertyNameArray.cpp:
    751         (KJS::PropertyNameArray::add):
    752         * kjs/identifier.cpp:
    753         (KJS::IdentifierTable::~IdentifierTable):
    754         (KJS::IdentifierTable::add):
    755         (KJS::Identifier::addSlowCase):
    756         (KJS::Identifier::remove):
    757         * kjs/identifier.h:
    758         (KJS::Identifier::add):
    759         * kjs/ustring.cpp:
    760         (KJS::):
    761         (KJS::UString::Rep::create):
    762         (KJS::UString::Rep::destroy):
    763         * kjs/ustring.h:
    764         (KJS::UString::Rep::identifierTable):
    765         (KJS::UString::Rep::setIdentifierTable):
    766         (KJS::UString::Rep::isStatic):
    767         (KJS::UString::Rep::setStatic):
    768         (KJS::UString::cost):
    769 
    770 2008-07-28  Geoffrey Garen  <[email protected]>
    771 
    772         Reviewed by Sam Weinig.
    773 
    774         Renamed "ConstructTypeNative" => "ConstructTypeHost".
    775        
    776 2008-07-26  Mark Rowe  <[email protected]>
    777 
    778         Speculative fix for the wx build.
    779 
    780         * JavaScriptCoreSources.bkl:  Add JSStaticScopeObject.cpp to the list of source files.
    781 
    782 2008-07-25  Oliver Hunt  <[email protected]>
    783 
    784         RS=Cameron Zwarich.
    785 
    786         Whoops, forgot to save style correction.
    787 
    788         * kjs/JSStaticScopeObject.h:
    789 
    790 2008-07-25  Oliver Hunt  <[email protected]>
    791 
    792         Reviewed by Cameron Zwarich.
    793 
    794         Bug 19718: Named anonymous functions are slow accessing global variables
    795         <https://bugs.webkit.org/show_bug.cgi?id=19718>
    796 
    797         To fix this we switch over to an activation-like scope object for
    798         on which we attach the function name property, and add logic to
    799         prevent cross scope assignment to read only properties.
    800 
    801         * GNUmakefile.am:
    802         * JavaScriptCore.pri:
    803         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    804         * JavaScriptCore.xcodeproj/project.pbxproj:
    805         * VM/CodeGenerator.cpp:
    806         (KJS::CodeGenerator::findScopedProperty):
    807         (KJS::CodeGenerator::emitResolve):
    808         * VM/CodeGenerator.h:
    809         * kjs/AllInOneFile.cpp:
    810         * kjs/JSStaticScopeObject.cpp: Added.
    811         (KJS::JSStaticScopeObject::putWithAttributes):
    812         (KJS::JSStaticScopeObject::isDynamicScope):
    813         (KJS::JSStaticScopeObject::~JSStaticScopeObject):
    814         (KJS::JSStaticScopeObject::getOwnPropertySlot):
    815         * kjs/JSStaticScopeObject.h: Added.
    816         (KJS::JSStaticScopeObject::JSStaticScopeObjectData::JSStaticScopeObjectData):
    817         (KJS::JSStaticScopeObject::JSStaticScopeObject):
    818         * kjs/nodes.cpp:
    819         (KJS::FunctionCallResolveNode::emitCode):
    820         (KJS::PostfixResolveNode::emitCode):
    821         (KJS::PrefixResolveNode::emitCode):
    822         (KJS::ReadModifyResolveNode::emitCode):
    823         (KJS::AssignResolveNode::emitCode):
    824         (KJS::FuncExprNode::makeFunction):
    825 
    826 2008-07-25  kevino  <[email protected]>
    827 
    828         wx build fix for Win.
    829        
    830         On wx/Win, including windows.h in Threading.h causes multiply-defined symbol errors
    831         for libjpeg and wx, and also wx needs to include windows.h itself first for wx
    832         includes to work right. So until we can find a better solution to this problem,
    833         on wx, we work around the need to include windows.h here.
    834 
    835         * wtf/Threading.h:
    836 
    837 2008-07-25  Adam Roben  <[email protected]>
    838 
    839         Windows build fix
    840 
    841         * JavaScriptCore.vcproj/testapi/testapi.vcproj: Add API/ to the
    842         include path.
    843 
    844 2008-07-25  Simon Hausmann  <[email protected]>
    845 
    846         Fix the build of jsc on Qt/Windows, make sure os-win32 is in the
    847         include search path (added by WebKit.pri).
    848 
    849         * kjs/jsc.pro:
    850 
    851 2008-07-25  Alexey Proskuryakov  <[email protected]>
    852 
    853         Reviewed by Simon Hausmann.
    854 
    855         Move JavaScriptCore API tests into a subdirectory of their own to avoid header name
    856         conflicts and developer confusion.
    857 
    858         * API/JSNode.c: Removed.
    859         * API/JSNode.h: Removed.
    860         * API/JSNodeList.c: Removed.
    861         * API/JSNodeList.h: Removed.
    862         * API/Node.c: Removed.
    863         * API/Node.h: Removed.
    864         * API/NodeList.c: Removed.
    865         * API/NodeList.h: Removed.
    866         * API/minidom.c: Removed.
    867         * API/minidom.html: Removed.
    868         * API/minidom.js: Removed.
    869         * API/testapi.c: Removed.
    870         * API/testapi.js: Removed.
    871         * API/tests: Added.
    872         * API/tests/JSNode.c: Copied from JavaScriptCore/API/JSNode.c.
    873         * API/tests/JSNode.h: Copied from JavaScriptCore/API/JSNode.h.
    874         * API/tests/JSNodeList.c: Copied from JavaScriptCore/API/JSNodeList.c.
    875         * API/tests/JSNodeList.h: Copied from JavaScriptCore/API/JSNodeList.h.
    876         * API/tests/Node.c: Copied from JavaScriptCore/API/Node.c.
    877         * API/tests/Node.h: Copied from JavaScriptCore/API/Node.h.
    878         * API/tests/NodeList.c: Copied from JavaScriptCore/API/NodeList.c.
    879         * API/tests/NodeList.h: Copied from JavaScriptCore/API/NodeList.h.
    880         * API/tests/minidom.c: Copied from JavaScriptCore/API/minidom.c.
    881         * API/tests/minidom.html: Copied from JavaScriptCore/API/minidom.html.
    882         * API/tests/minidom.js: Copied from JavaScriptCore/API/minidom.js.
    883         * API/tests/testapi.c: Copied from JavaScriptCore/API/testapi.c.
    884         * API/tests/testapi.js: Copied from JavaScriptCore/API/testapi.js.
    885         * GNUmakefile.am:
    886         * JavaScriptCore.vcproj/testapi/testapi.vcproj:
    887         * JavaScriptCore.xcodeproj/project.pbxproj:
    888 
    889 2008-07-25  Simon Hausmann  <[email protected]>
    890 
    891         Prospective WX build fix, add JavaScriptCore/API to the include search
    892         path.
    893 
    894         * jscore.bkl:
    895 
    896 2008-07-25  Simon Hausmann  <[email protected]>
    897 
    898         Rubber-stamped by Lars.
    899 
    900         Fix the build on Windows. operator new for ArgList is implemented using fastMalloc()
    901         but operator delete was not implemented. Unfortunately MSVC decides to call/reference
    902         the function, so a simple implementation using fastFree() fixes the build.
    903 
    904         * kjs/ArgList.h:
    905         (KJS::ArgList::operator delete):
    906 
    907 2008-07-25  Simon Hausmann  <[email protected]>
    908 
    909         Discussed with and rubber-stamped by Lars.
    910 
    911         Fix the build system for the Qt port.
    912 
    913         Recent JavaScriptCore changes require the addition of JavaScriptCore/API to the
    914         include search path. With a build process that combines JavaScriptCore and
    915         WebCore in one build process/Makefile the existance of
    916         JavaScriptCore/API/Node.h and WebCore/dom/Node.h causes include conflicts.
    917 
    918         This commit solves this by introducing a separate build of JavaScriptCore into
    919         a static library.
    920 
    921         As a result of the split-up a race-condition due to broken dependencies of
    922         regular source files to header files of generated sources showed up very
    923         frequently when doing parallel builds (which the buildbot does). This commit at
    924         the same time tries to address the dependency problem by making the
    925         addExtraCompiler() function also generate a pseudo extra compiler that
    926         represents the header file output, so that qmake is aware of the creation of
    927         the header file for dependency calculation.
    928 
    929         At the same time I removed a lot of cruft from the pro files to ease maintenance.
    930 
    931         * JavaScriptCore.pri:
    932         * JavaScriptCore.pro: Added.
    933         * kjs/jsc.pro:
    934 
    935 2008-07-24  Geoffrey Garen  <[email protected]>
    936 
    937         Reviewed by Maciej Stachowiak.
    938        
    939         Fixed a strict aliasing violation, which caused hash tables with floating
    940         point keys not to find items that were indeed in the tables
    941         (intermittently, and only in release builds, of course).
    942        
    943         SunSpider reports no change.
    944        
    945         This bug doesn't seem to affect any existing code, but it causes obvious
    946         crashes in some new code I'm working on.
    947 
    948         * wtf/HashFunctions.h:
    949         (WTF::FloatHash::hash): Use a union when punning between a float / double
    950         and an unsigned (bucket of bits). With strict aliasing enabled, unions
    951         are the only safe way to do this kind of type punning.
    952 
    953         * wtf/HashTable.h: When rehashing, ASSERT that the item we just added to
    954         the table is indeed in the table. In the buggy case described above, this
    955         ASSERT fires.
    956 
    957 2008-07-24  Oliver Hunt  <[email protected]>
    958 
    959         Reviewed by Alexey Proskuryakov.
    960 
    961         Bug 20142: REGRESSION(r35245): /=/ weirdness
    962         <https://bugs.webkit.org/show_bug.cgi?id=20142>
    963 
    964         When adding all the meta data needed for exception error messages
    965         I accidentally clobbered the handling of regex beginning with /=.
    966 
    967         * kjs/grammar.y:
    968 
    969 2008-07-23  Alp Toker  <[email protected]>
    970 
    971         Build fix after r35293: Add API/ to the include path.
    972 
    973         * GNUmakefile.am:
    974 
    975 2008-07-23  Adam Roben  <[email protected]>
    976 
    977         Windows build fixes
    978 
    979         Build fix after r35293:
    980 
    981         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add API/
    982         to the include path.
    983 
    984         Build fix after r35305:
    985 
    986         * VM/Machine.cpp:
    987         * VM/Machine.h:
    988         * VM/Opcode.cpp:
    989         * VM/Opcode.h:
    990         Completely compile out all sampler-related code when
    991         SAMPLING_TOOL_ENABLED is 0. The sampler code can't be compiled 1) on
    992         non-AllInOne configurations due to circular header dependencies, and
    993         2) on platforms that don't have a usleep() function, such as Windows.
    994 
    995 2008-07-23  Oliver Hunt  <[email protected]>
    996 
    997         Reviewed by Geoff Garen and Sam Weinig.
    998 
    999         Improve switch performance.
    1000 
    1001         Improve switch performance by converting to a hashmap based jump
    1002         table to avoid the sequence of dispatches that would otherwise be
    1003         needed.  This results in a 9-19x performance win for string switches
    1004         based on ad hoc testing, and a 6x improvement for integer switch
    1005         statements.  SunSpider reports a 1.2% progression.
    1006 
    1007         * VM/CodeBlock.cpp:
    1008         (KJS::CodeBlock::dump):
    1009         (KJS::SimpleJumpTable::offsetForValue):
    1010         * VM/CodeBlock.h:
    1011         * VM/CodeGenerator.cpp:
    1012         (KJS::CodeGenerator::beginSwitch):
    1013         (KJS::prepareJumpTableForImmediateSwitch):
    1014         (KJS::prepareJumpTableForCharacterSwitch):
    1015         (KJS::prepareJumpTableForStringSwitch):
    1016         (KJS::CodeGenerator::endSwitch):
    1017         * VM/CodeGenerator.h:
    1018         * VM/Machine.cpp:
    1019         (KJS::offsetForStringSwitch):
    1020         (KJS::Machine::privateExecute):
    1021         * VM/Opcode.cpp:
    1022         (KJS::):
    1023         * VM/Opcode.h:
    1024         * kjs/JSImmediate.h:
    1025         * kjs/nodes.cpp:
    1026         (KJS::):
    1027         (KJS::processClauseList):
    1028         (KJS::CaseBlockNode::tryOptimisedSwitch):
    1029         (KJS::CaseBlockNode::emitCodeForBlock):
    1030         * kjs/nodes.h:
    1031         (KJS::SwitchInfo::):
    1032 
    1033 2008-07-23  Gavin Barraclough  <[email protected]>
    1034 
    1035         Reviewed by Geoff Garen.
    1036 
    1037         Sampling tool to analyze cost of instruction execution and identify hot regions of JS code.
    1038         Enable Switches by setting SAMPLING_TOOL_ENABLED in Opcode.h.
    1039 
    1040         * JavaScriptCore.exp: Export symbols for Shell.cpp.
    1041         * VM/Machine.cpp:     Added sampling hooks.
    1042         * VM/Machine.h:       Machine contains a pointer to a sampler, when sampling.
    1043         * VM/Opcode.cpp:      Tool implementation.
    1044         * VM/Opcode.h:        Tool declaration.
    1045         * kjs/Shell.cpp:      Initialize the sampler, if enabled.
    1046         * kjs/nodes.cpp:      Added sampling hooks.
    1047 
    1048 2008-07-23  Gabor Loki  <[email protected]>
    1049 
    1050         Bug 20097: [Qt] 20% Sunspider slow-down
    1051 
    1052         <https://bugs.webkit.org/show_bug.cgi?id=20097>
    1053 
    1054         Reviewed by Simon Hausmann.
    1055 
    1056         * kjs/jsc.pro: Added missing NDEBUG define for release builds.
    1057 
    1058 2008-07-23  Alexey Proskuryakov  <[email protected]>
    1059 
    1060         Reviewed by Geoff Garen.
    1061 
    1062         JSClassRef is created context-free, but gets infatuated with the first context it sees.
    1063 
    1064         The implicit API contract is that JSClassRef can be used with any context on any thread.
    1065         This no longer worked, because UStrings in the class were turned into per-context
    1066         identifiers, and the cached JSObject prototype was tied to JSGlobalData, too.
    1067 
    1068         * API/JSClassRef.h: Made a separate struct for context-dependent parts of OpaqueJSClass.
    1069         * API/JSClassRef.cpp:
    1070         (OpaqueJSClass::OpaqueJSClass): Updated for renames and changed member variable order.
    1071         (OpaqueJSClass::~OpaqueJSClass): Assert that string members are not identifiers.
    1072         (clearReferenceToPrototype): Update for the new reference location.
    1073         (OpaqueJSClassContextData::OpaqueJSClassContextData): Make a deep copy of all strings.
    1074         (OpaqueJSClass::contextData): Added a function that finds the per-context part of
    1075         OpaqueJSClass in JSGlobalData, or creates it if not found.
    1076         (OpaqueJSClass::className): Always make a deep copy. Callers of this function do not have
    1077         a way to access JSGlobalData, so a per-context copy could not be made.
    1078         (OpaqueJSClass::staticValues): Updated for new data location.
    1079         (OpaqueJSClass::staticFunctions): Ditto.
    1080         (OpaqueJSClass::prototype): Changed to take an internal type for consistency.
    1081 
    1082         * kjs/JSGlobalData.cpp:
    1083         (KJS::JSGlobalData::JSGlobalData):
    1084         (KJS::JSGlobalData::~JSGlobalData):
    1085         * kjs/JSGlobalData.h:
    1086         Keep a HashMap to access per-context JSClass data given a pointr to the shared part.
    1087 
    1088         * API/JSCallbackObjectFunctions.h:
    1089         (KJS::::className):
    1090         (KJS::::getOwnPropertySlot):
    1091         (KJS::::put):
    1092         (KJS::::deleteProperty):
    1093         (KJS::::getPropertyNames):
    1094         (KJS::::staticValueGetter):
    1095         (KJS::::staticFunctionGetter):j
    1096         Use function accessors instead of accessing OpaqueJSClass members directly.
    1097 
    1098         * API/JSContextRef.cpp: (JSGlobalContextCreate): Updated for the change in
    1099         OpaqueJSClass::prototype() argument type.
    1100 
    1101         * API/JSObjectRef.cpp:
    1102         (JSObjectMake): Updated for the change in OpaqueJSClass::prototype() argument type.
    1103         (JSObjectMakeConstructor): Ditto.
    1104 
    1105 2008-07-23  Alexey Proskuryakov  <[email protected]>
    1106 
    1107         Build fix.
    1108 
    1109         * kjs/ArgList.h: (KJS::ArgList::operator new): removed an extraneous "ArgList::" inside the
    1110         class definition.
    1111 
    1112 2008-07-22  Geoffrey Garen  <[email protected]>
    1113 
    1114         Reviewed by Oliver Hunt and Sam Weinig.
    1115 
    1116         Next step toward putting doubles in registers: Prepare the Register class
    1117         and its clients for registers that don't contain JSValue*s.
    1118        
    1119         This means a few things:
    1120        
    1121         1. Register::jsValue() clients, including ArgList clients, must now supply
    1122         an ExecState* when accessing an entry in an ArgList, in case the entry
    1123         will need to create a JSValue* on the fly.
    1124        
    1125         2. Register clients that definitely don't want to create a JSValue* on
    1126         the fly now use different APIs: getJSValue() for clients that know
    1127         the register contains a JSValue*, and v() for clients who just want a
    1128         void*.
    1129        
    1130         3. I had to change some headers around in order to resolve dependency
    1131         problems created by using a Register in the ArgList header.
    1132        
    1133         SunSpider reports no change.
    1134        
    1135 2008-07-22  Gavin Barraclough  <[email protected]>
    1136 
    1137         Reviewed by Alexey Proskuryakov.
    1138 
    1139         Prevent integer overflow when reallocating storage vector for arrays.
    1140 
    1141         Sunspider reports 1.005x as fast (no change expected).
    1142 
    1143         * kjs/JSArray.cpp:
    1144 
    1145 2008-07-21  Mark Rowe  <[email protected]>
    1146 
    1147         Reviewed by Sam Weinig.
    1148 
    1149         <rdar://problem/6091287> Revamp the handling of CFBundleShortVersionString to be fixed at the major component of the version number.
    1150 
    1151         * Configurations/Version.xcconfig:
    1152         * Info.plist:
    1153 
    1154 2008-07-21  Adam Roben  <[email protected]>
    1155 
    1156         Add Vector::find
    1157 
    1158         This is a convenience wrapper around std::find.
    1159 
    1160         Reviewed by Anders Carlsson.
    1161 
    1162         * wtf/Vector.h:
    1163 
    1164 2008-07-19  Oliver Hunt  <[email protected]>
    1165 
    1166         Reviewed by Cameron Zwarich.
    1167 
    1168         Bug 20104: Exception in tables/mozilla_expected_failures/bugs/bug92868_1.html includes the equals operator in the quoted expression
    1169         <https://bugs.webkit.org/show_bug.cgi?id=20104>
    1170 
    1171         To make this correct we make the dot and bracket assign nodes emit the information to indicate
    1172         the failure range is the dot/bracket accessor.
    1173 
    1174         * kjs/grammar.y:
    1175 
    1176 2008-07-18  Steve Falkenburg  <[email protected]>
    1177 
    1178         Windows build fix.
    1179 
    1180         * kjs/JSGlobalObjectFunctions.cpp:
    1181         (KJS::isStrWhiteSpace):
    1182 
    1183 2008-07-18  Steve Falkenburg  <[email protected]>
    1184 
    1185         Windows build fix.
    1186 
    1187         * kjs/nodes.h:
    1188         (KJS::ThrowableExpressionData::ThrowableExpressionData):
    1189 
    1190 2008-07-18  Oliver Hunt  <[email protected]>
    1191 
    1192         Reviewed by Cameron Zwarich.
    1193 
    1194         Bug 18774: SQUIRRELFISH: print meaningful error messages <https://bugs.webkit.org/show_bug.cgi?id=18774>
    1195         <rdar://problem/5769353> SQUIRRELFISH: JavaScript error messages are missing informative text
    1196 
    1197         Add support for decent error messages in JavaScript.  This patch achieves this by providing
    1198         ensuring the common errors and exceptions have messages that provide the text of expression
    1199         that trigger the exception.  In addition it attaches a number of properties to the exception
    1200         object detailing where in the source the expression came from.
    1201 
    1202         * JavaScriptCore.exp:
    1203         * VM/CodeBlock.cpp:
    1204         (KJS::CodeBlock::lineNumberForVPC):
    1205         (KJS::CodeBlock::expressionRangeForVPC):
    1206             Function to recover the expression range for an instruction
    1207             that triggered an exception.
    1208         * VM/CodeBlock.h:
    1209         (KJS::ExpressionRangeInfo::):
    1210         (KJS::CodeBlock::CodeBlock):
    1211         * VM/CodeGenerator.cpp:
    1212         (KJS::CodeGenerator::emitCall):
    1213         (KJS::CodeGenerator::emitCallEval):
    1214             Emit call needed to be modified so to place the expression range info internally,
    1215             as the CodeGenerator emits the arguments nodes itself, rather than the various call
    1216             nodes.
    1217         * VM/CodeGenerator.h:
    1218         (KJS::CodeGenerator::emitExpressionInfo):
    1219             Record the expression range info.
    1220         * VM/ExceptionHelpers.cpp:
    1221         (KJS::createErrorMessage):
    1222         (KJS::createInvalidParamError):
    1223         (KJS::createUndefinedVariableError):
    1224         (KJS::createNotAConstructorError):
    1225         (KJS::createNotAFunctionError):
    1226         (KJS::createNotAnObjectErrorStub):
    1227         (KJS::createNotAnObjectError):
    1228             Rewrite all the code for the error messages so that they make use of the newly available
    1229             information.
    1230         * VM/ExceptionHelpers.h:
    1231         * VM/Machine.cpp:
    1232         (KJS::isNotObject):  Now needs vPC and codeBlock
    1233         (KJS::Machine::throwException):
    1234             New logic to handle the NotAnObjectErrorStub and to handle the absurd "no default value" edge case
    1235         (KJS::Machine::privateExecute):
    1236         * VM/Machine.h:
    1237         * kjs/DebuggerCallFrame.cpp:
    1238         (KJS::DebuggerCallFrame::evaluate):
    1239         * kjs/Error.cpp:
    1240         (KJS::Error::create):
    1241         * kjs/Error.h:
    1242         * kjs/JSGlobalObjectFunctions.cpp:
    1243         * kjs/JSImmediate.cpp:
    1244         (KJS::JSImmediate::toObject):
    1245         (KJS::JSImmediate::prototype):
    1246             My changes to the JSNotAnObject constructor needed to be handled here.
    1247         * kjs/JSNotAnObject.h:
    1248         (KJS::JSNotAnObjectErrorStub::JSNotAnObjectErrorStub):
    1249         (KJS::JSNotAnObjectErrorStub::isNull):
    1250         (KJS::JSNotAnObjectErrorStub::isNotAnObjectErrorStub):
    1251             Added a JSNotAnObjectErrorStub class to ease the handling of toObject failure exceptions,
    1252             and potentially allow even more detailed error messages in future.
    1253         * kjs/JSObject.h:
    1254         * kjs/Parser.h:
    1255         (KJS::Parser::parse):
    1256         * kjs/SourceRange.h:
    1257         * kjs/grammar.y:
    1258             Large amounts of position propagation.
    1259         * kjs/lexer.cpp:
    1260         (KJS::Lexer::Lexer):
    1261         (KJS::Lexer::shift):
    1262         (KJS::Lexer::lex):
    1263             The lexer needed a few changes to be able to correctly track token character positions.
    1264         * kjs/lexer.h:
    1265         * kjs/nodes.cpp:
    1266         (KJS::ThrowableExpressionData::emitThrowError):
    1267         (KJS::StatementNode::StatementNode):
    1268         (KJS::ResolveNode::emitCode):
    1269         (KJS::BracketAccessorNode::emitCode):
    1270         (KJS::DotAccessorNode::emitCode):
    1271         (KJS::NewExprNode::emitCode):
    1272         (KJS::EvalFunctionCallNode::emitCode):
    1273         (KJS::FunctionCallValueNode::emitCode):
    1274         (KJS::FunctionCallResolveNode::emitCode):
    1275         (KJS::FunctionCallBracketNode::emitCode):
    1276         (KJS::FunctionCallDotNode::emitCode):
    1277         (KJS::PostfixResolveNode::emitCode):
    1278         (KJS::PostfixBracketNode::emitCode):
    1279         (KJS::PostfixDotNode::emitCode):
    1280         (KJS::DeleteResolveNode::emitCode):
    1281         (KJS::DeleteBracketNode::emitCode):
    1282         (KJS::DeleteDotNode::emitCode):
    1283         (KJS::PrefixResolveNode::emitCode):
    1284         (KJS::PrefixBracketNode::emitCode):
    1285         (KJS::PrefixDotNode::emitCode):
    1286         (KJS::ThrowableBinaryOpNode::emitCode):
    1287         (KJS::ReadModifyResolveNode::emitCode):
    1288         (KJS::AssignResolveNode::emitCode):
    1289         (KJS::AssignDotNode::emitCode):
    1290         (KJS::ReadModifyDotNode::emitCode):
    1291         (KJS::AssignBracketNode::emitCode):
    1292         (KJS::ReadModifyBracketNode::emitCode):
    1293         (KJS::ForInNode::ForInNode):
    1294         (KJS::ForInNode::emitCode):
    1295         (KJS::WithNode::emitCode):
    1296         (KJS::LabelNode::emitCode):
    1297         (KJS::ThrowNode::emitCode):
    1298         (KJS::ProgramNode::ProgramNode):
    1299         (KJS::ProgramNode::create):
    1300         (KJS::EvalNode::generateCode):
    1301         (KJS::FunctionBodyNode::create):
    1302         (KJS::FunctionBodyNode::generateCode):
    1303         (KJS::ProgramNode::generateCode):
    1304             All of these methods were handling the position information. 
    1305             Constructors and create methods were modified to store the information.
    1306             All the emitCall implementations listed needed to be updated to actually
    1307             record the position information we have so carefully collected.
    1308         * kjs/nodes.h:
    1309         (KJS::ThrowableExpressionData::ThrowableExpressionData):
    1310         (KJS::ThrowableExpressionData::setExceptionSourceRange):
    1311         (KJS::ThrowableExpressionData::divot):
    1312         (KJS::ThrowableExpressionData::startOffset):
    1313         (KJS::ThrowableExpressionData::endOffset):
    1314         (KJS::ThrowableSubExpressionData::ThrowableSubExpressionData):
    1315         (KJS::ThrowableSubExpressionData::setSubexpressionInfo):
    1316         (KJS::ThrowablePrefixedSubExpressionData::ThrowablePrefixedSubExpressionData):
    1317         (KJS::ThrowablePrefixedSubExpressionData::setSubexpressionInfo):
    1318             ThrowableExpressionData is just a uniform mechanism for storing the position
    1319             information.
    1320         (KJS::ResolveNode::):
    1321         (KJS::PrePostResolveNode::):
    1322         (KJS::ThrowableBinaryOpNode::):
    1323         (KJS::WithNode::):
    1324 
    1325 2008-07-18  Geoffrey Garen  <[email protected]>
    1326 
    1327         Reviewed by Cameron Zwarich.
    1328        
    1329         Three renames:
    1330        
    1331         "CallTypeNative" => "CallTypeHost"
    1332         "code" => "byteCode"
    1333         "generatedCode" => "generatedByteCode"
    1334 
    1335 2008-07-18  Geoffrey Garen  <[email protected]>
    1336 
    1337         Reviewed by Oliver Hunt.
    1338        
    1339         Optimized <= for immediate number cases.
    1340        
    1341         SunSpider reports no overall change, but a 10% speedup on access-nsieve.
    1342 
    1343 2008-07-18  Mark Rowe  <[email protected]>
    1344 
    1345         Rubber-stamped by Sam Weinig.
    1346 
    1347         Fix some casts added in a previous build fix to match the style used
    1348         throughout WebKit.
    1349 
    1350         * VM/Machine.cpp:
    1351         (KJS::Machine::initializeCallFrame):
    1352         * VM/Register.h:
    1353         (KJS::Register::Register):
    1354 
    1355 2008-07-18  Landry Breuil  <[email protected]>
    1356 
    1357         Bug 19975: [OpenBSD] Patches to enable build of WebKit
    1358 
    1359         <https://bugs.webkit.org/show_bug.cgi?id=19975>
    1360 
    1361         Reviewed by David Kilzer.
    1362 
    1363         Support for OpenBSD, mostly threading and libm tweaks.
    1364 
    1365         * kjs/collector.cpp: #include <pthread.h>
    1366         (KJS::currentThreadStackBase): use pthread_stackseg_np() to get stack base
    1367         * kjs/config.h: OpenBSD also provides <pthread_np.h>
    1368         * wtf/MathExtras.h: #include <sys/types.h> and <machine/ieee.h>
    1369         (isfinite), (signbit): as long as we don't have those functions provide fallback implementations
    1370         * wtf/Platform.h: Add support for PLATFORM(OPENBSD) and PLATFORM(SPARC64) macro
    1371 
    1372 2008-07-17  Geoffrey Garen  <[email protected]>
    1373 
    1374         Reviewed by Oliver Hunt.
    1375        
    1376         Next step toward putting doubles in registers: Store constant pool
    1377         entries as registers, not JSValue*s.
    1378        
    1379         SunSpider reports no change.
    1380 
    1381 2008-07-17  Geoffrey Garen  <[email protected]>
    1382 
    1383         Reviewed by John Sullivan and Oliver Hunt.
    1384        
    1385         A tiny bit of tidying in function call register allocation.
    1386        
    1387         This patch saves one register when invoking a function expression and/or
    1388         a new expression that is stored in a temporary.
    1389        
    1390         Since it's just one register, I can't make a testcase for it.
    1391 
    1392         * VM/CodeGenerator.cpp:
    1393         (KJS::CodeGenerator::emitCall): No need to ref the function we're calling
    1394         or its base. We'd like the call frame to overlap with them, if possible.
    1395         op_call will read the function and its base before writing the call frame,
    1396         so this is safe.
    1397 
    1398         * kjs/nodes.cpp:
    1399         (KJS::NewExprNode::emitCode): No need to ref the function we're new-ing,
    1400         for the same reasons stated above.
    1401        
    1402         (KJS::FunctionCallValueNode::emitCode): ditto
    1403 
    1404 2008-07-17  Steve Falkenburg  <[email protected]>
    1405 
    1406         Build fix.
    1407        
    1408         * kjs/InternalFunction.cpp:
    1409 
    1410 2008-07-17  Sam Weinig  <[email protected]>
    1411 
    1412         Roll out r35199 as it is causing failures on the PPC build.
    1413 
    1414 2008-07-17  Geoffrey Garen  <[email protected]>
    1415 
    1416         Reviewed by David Kilzer.
    1417        
    1418         Fixed https://bugs.webkit.org/show_bug.cgi?id=20067
    1419         Support function.name (Firefox extension)
    1420        
    1421         Pretty straight-forward.
    1422 
    1423 2008-07-17  Geoffrey Garen  <[email protected]>
    1424 
    1425         Reviewed by Oliver Hunt.
    1426        
    1427         Fixed <rdar://problem/6081636> Functions calls use more temporary
    1428         registers than necessary
    1429        
    1430         Holding a reference to the last statement result register caused each
    1431         successive statement to output its result to an even higher register.
    1432        
    1433         Happily, statements don't actually need to return a result register
    1434         at all. I hope to make this clearer in a future cleanup patch,
    1435         but this change will fix the major bug for now.
    1436 
    1437         * kjs/nodes.cpp:
    1438         (KJS::statementListEmitCode):
    1439 
    1440 2008-07-17  Gavin Barraclough  <[email protected]>
    1441 
    1442         Reviewed by Sam Weinig.
    1443 
    1444         Merge pre&post dot nodes to simplify the parse tree.
    1445         Sunspider results show 0.6% progression (no performance change expected).
    1446 
    1447         * kjs/grammar.y:
    1448         * kjs/nodes.cpp:
    1449         * kjs/nodes.h:
    1450         * kjs/nodes2string.cpp:
    1451 
    1452 2008-07-17  Gavin Barraclough  <[email protected]>
    1453 
    1454         Reviewed by Cameron Zwarich.
    1455 
    1456         Merge pre&post resolve nodes to simplify the parse tree.
    1457         Sunspider results show no performance change.
    1458 
    1459         * kjs/grammar.y:
    1460         * kjs/nodes.cpp:
    1461         * kjs/nodes.h:
    1462         * kjs/nodes2string.cpp:
    1463 
    1464 2008-07-17  Gavin Barraclough  <[email protected]>
    1465 
    1466         Reviewed by Cameron Zwarich.
    1467 
    1468         Merge logical nodes to simplify the parse tree.
    1469         Sunspider results show 0.6% progression (no performance change expected).
    1470 
    1471         * kjs/grammar.y:
    1472         * kjs/nodes.cpp:
    1473         * kjs/nodes.h:
    1474         * kjs/nodes2string.cpp:
    1475 
    1476 2008-07-17  Ariya Hidayat  <[email protected]>
    1477 
    1478         Reviewed by Simon.
    1479 
    1480         Fix MinGW build (broken in r35198) and simplify getLocalTime().
    1481 
    1482         * kjs/DateMath.cpp:
    1483         (KJS::getLocalTime):
    1484 
    1485 2008-07-17  Gavin Barraclough  <[email protected]>
    1486 
    1487         Reviewed by Sam Weinig.
    1488 
    1489         Merge pre&post bracket nodes to simplify the parse tree.
    1490         Sunspider results show no performance change.
    1491 
    1492         * kjs/grammar.y:
    1493         * kjs/nodes.cpp:
    1494         * kjs/nodes.h:
    1495         * kjs/nodes2string.cpp:
    1496 
    1497 2008-07-17  Ariya Hidayat  <[email protected]>
    1498 
    1499         Reviewed by Simon.
    1500 
    1501         Fix the 32-bit gcc builds, conversion from "long int" to Register is
    1502         ambiguous. Explicitly choose the intptr_t constructor.
    1503 
    1504         * VM/Machine.cpp:
    1505         (KJS::Machine::initializeCallFrame):
    1506         * VM/Register.h:
    1507         (KJS::Register::Register):
    1508 
    1509 2008-07-16  Mark Rowe  <[email protected]>
    1510 
    1511         Rubber-stamped by Geoff Garen.
    1512 
    1513         Fix JavaScript in 64-bit by using a pointer-sized integer
    1514         type in the Register union.  Also includes a rename of
    1515         the intType constant to IntType.
    1516 
    1517         * VM/Machine.cpp:
    1518         (KJS::Machine::initializeCallFrame):
    1519         * VM/Register.h:
    1520         (KJS::Register::):
    1521         (KJS::Register::Register):
    1522 
    1523 2008-07-17  Geoffrey Garen  <[email protected]>
    1524 
    1525         Reviewed by Oliver Hunt.
    1526        
    1527         First step toward putting doubles in registers: Turned Register into a
    1528         proper abstraction layer. It is no longer possible to cast a Register
    1529         to a JSValue*, or a Register& to a JSValue*&, or to access the union
    1530         inside a Register directly.
    1531        
    1532         SunSpider reports no change.
    1533        
    1534         In support of this change, I had to make the following mechanical changes
    1535         in a lot of places:
    1536        
    1537         1. Clients now use explicit accessors to read data out of Registers, and
    1538         implicit copy constructors to write data into registers.
    1539        
    1540         So, assignment that used to look like
    1541        
    1542             x.u.jsValue = y;
    1543        
    1544         now looks like
    1545        
    1546             x = y;
    1547            
    1548         And access that used to look like
    1549        
    1550             x = y.u.jsValue;
    1551        
    1552         now looks like
    1553        
    1554             x = y.jsValue();
    1555 
    1556         2. I made generic flow control specific in opcodes that made their flow
    1557         control generic by treating a Register& as a JSValue*&. This had the
    1558         added benefit of removing some exception checking branches from immediate
    1559         number code.
    1560 
    1561         3. I beefed up PropertySlot to support storing a Register* in a property
    1562         slot. For now, only JSVariableObject's symbolTableGet and symbolTablePut
    1563         use this functionality, but I expect more clients to use it in the future.
    1564        
    1565         4. I changed ArgList to be a buffer of Registers, not JSValue*'s, and I
    1566         changed ArgList iterator clients to iterate Registers, not JSValue*'s.
    1567 
    1568 2008-07-16  Ada Chan  <[email protected]>
    1569 
    1570         Fixed build.
    1571 
    1572         * kjs/JSGlobalObject.cpp:
    1573 
    1574 2008-07-16  Kevin McCullough  <[email protected]>
    1575 
    1576         Reviewed by Sam and Geoff.
    1577 
    1578         <rdar://problem/5958840> Navigating to another page while profiler is
    1579         attached results in slow JavaScript for all time.
    1580 
    1581         - The UNLIKELY keeps this from being a sunspider performance regression.
    1582 
    1583         * kjs/JSGlobalObject.cpp:
    1584         (KJS::JSGlobalObject::~JSGlobalObject): Stop the profiler associated
    1585         with this exec state.
    1586 
    1587 2008-07-16  Sam Weinig  <[email protected]>
    1588 
    1589         Reviewed by Steve Falkenburg.
    1590 
    1591         Replace adopting UString constructor in favor of explicit
    1592         static adopt method.
    1593 
    1594         * API/JSStringRefCF.cpp:
    1595         (JSStringCreateWithCFString):
    1596         * kjs/StringConstructor.cpp:
    1597         (KJS::stringFromCharCode):
    1598         * kjs/StringPrototype.cpp:
    1599         (KJS::stringProtoFuncToLowerCase):
    1600         (KJS::stringProtoFuncToUpperCase):
    1601         (KJS::stringProtoFuncToLocaleLowerCase):
    1602         (KJS::stringProtoFuncToLocaleUpperCase):
    1603         * kjs/ustring.cpp:
    1604         (KJS::UString::adopt):
    1605         * kjs/ustring.h:
    1606         (KJS::UString::UString):
    1607         (KJS::UString::~UString):
    1608 
    1609 2008-07-16  Ariya Hidayat  <[email protected]>
    1610 
    1611         Reviewed by Simon.
    1612 
    1613         http://trolltech.com/developer/task-tracker/index_html?method=entry&id=216179
    1614         Fix potential crash (on Qt for Windows port) when performing JavaScript date
    1615         conversion.
    1616 
    1617         * kjs/DateMath.cpp:
    1618         (KJS::getLocalTime): For the Qt port, prefer to use Windows code, i.e.
    1619         localtime_s() instead of localtime() since the latter might crash (on Windows)
    1620         given a non-sensible, e.g. NaN, argument.
    1621 
    1622 2008-07-16  Alexey Proskuryakov  <[email protected]>
    1623 
    1624         Reviewed by Anders and Geoff.
    1625 
    1626         https://bugs.webkit.org/show_bug.cgi?id=20023
    1627         Failed assertion in PropertyNameArray.cpp
    1628 
    1629         This is already tested by testapi.
    1630 
    1631         * API/JSObjectRef.cpp: (JSPropertyNameAccumulatorAddName): Add the string to identifier
    1632         table to appease PropertyNameArray.
    1633 
    1634 2008-07-16  Alexey Proskuryakov  <[email protected]>
    1635 
    1636         Reviewed by Geoff.
    1637 
    1638         Dereference identifiers when deleting a hash table (fixes leaks with private JSGlobalData
    1639         objects).
    1640 
    1641         * kjs/JSGlobalData.cpp: (KJS::JSGlobalData::~JSGlobalData):
    1642         * kjs/lookup.cpp: (KJS::HashTable::deleteTable):
    1643         * kjs/lookup.h:
    1644         * kjs/lexer.cpp: (KJS::Lexer::~Lexer)
    1645         HashTable cannot have a destructor, because check-for-global-initializers complains about
    1646         having a global constructor then.
    1647 
    1648 2008-07-16  Alexey Proskuryakov  <[email protected]>
    1649 
    1650         Reviewed by Geoff.
    1651 
    1652         Check pthread_key_create return value.
    1653 
    1654         This check was helpful when debugging a crash in run-webkit-tests --threaded that happened
    1655         because JSGlobalData objects were not deleted, and we were running out of pthread keys soon.
    1656         It also looks useful for production builds.
    1657 
    1658         * wtf/ThreadSpecific.h: (WTF::::ThreadSpecific):
    1659 
    1660 2008-07-15  Kevin McCullough  <[email protected]>
    1661 
    1662         Reviewed by Geoff.
    1663 
    1664         Rename pageGroupIdentifier to profileGroup to keep mention of a
    1665         pageGroup out of JavaScriptCore.
    1666 
    1667         * kjs/JSGlobalObject.cpp:
    1668         (KJS::JSGlobalObject::init):
    1669         * kjs/JSGlobalObject.h:
    1670         (KJS::JSGlobalObject::setProfileGroup):
    1671         (KJS::JSGlobalObject::profileGroup):
    1672         * profiler/ProfileGenerator.cpp:
    1673         (KJS::ProfileGenerator::create):
    1674         (KJS::ProfileGenerator::ProfileGenerator):
    1675         * profiler/ProfileGenerator.h:
    1676         (KJS::ProfileGenerator::profileGroup):
    1677         * profiler/Profiler.cpp:
    1678         (KJS::Profiler::startProfiling):
    1679         (KJS::dispatchFunctionToProfiles):
    1680         (KJS::Profiler::willExecute):
    1681         (KJS::Profiler::didExecute):
    1682 
    1683 2008-07-14  Mark Rowe  <[email protected]>
    1684 
    1685         Reviewed by Sam Weinig.
    1686 
    1687         Fix https://bugs.webkit.org/show_bug.cgi?id=20037
    1688         Bug 20037: GCC 4.2 build broken due to strict aliasing violation.
    1689 
    1690         * kjs/ustring.cpp:
    1691         (KJS::UString::Rep::computeHash): Add a version of computeHash that takes a char* and explicit length.
    1692         * kjs/ustring.h:
    1693         * profiler/CallIdentifier.h:
    1694         (WTF::): Use new version of computeHash that takes a char* and explicit length to avoid unsafe aliasing.
    1695 
    1696 2008-07-14  David Hyatt  <[email protected]>
    1697 
    1698         Fix a crashing bug in ListHashSet's -- operator.  Make sure that end() can be -- by special-casing the null
    1699         position.
    1700 
    1701         Reviewed by Maciej
    1702 
    1703         * wtf/ListHashSet.h:
    1704         (WTF::ListHashSetConstIterator::operator--):
    1705 
    1706 2008-07-14  David Hyatt  <[email protected]>
    1707 
    1708         Buidl fix.  Make sure the second insertBefore method returns a value.
    1709 
    1710         * wtf/ListHashSet.h:
    1711         (WTF::::insertBefore):
    1712 
    1713 2008-07-14  Adam Roben  <[email protected]>
    1714 
    1715         Windows build fix
    1716 
    1717         * JavaScriptCore.vcproj/jsc/jsc.vcproj: Added include/pthreads to the
    1718         include path.
    1719 
    1720 2008-07-14  Alexey Proskuryakov  <[email protected]>
    1721 
    1722         Reviewed by Kevin McCullough.
    1723 
    1724         Make JSGlobalData refcounted in preparation to adding a way to create contexts that share
    1725         global data.
    1726 
    1727         * JavaScriptCore.exp:
    1728         * kjs/JSGlobalData.cpp:
    1729         (KJS::JSGlobalData::create):
    1730         * kjs/JSGlobalData.h:
    1731         Made contructor private, and added a static create() method. Made the class inherit from
    1732         RefCounted.
    1733 
    1734         * kjs/JSGlobalObject.h:
    1735         (KJS::JSGlobalObject::globalData):
    1736         JSGlobalData is now owned by JSGlobalObject (except for the shared one, and the common
    1737         WebCore one, which are never deleted).
    1738 
    1739         * kjs/Shell.cpp: (main): Create JSGlobalData with create() method.
    1740 
    1741 2008-07-14  Simon Hausmann  <[email protected]>
    1742 
    1743         Fix the single-threaded build.
    1744 
    1745         * kjs/JSLock.cpp: Removed undeclared registerThread() function.
    1746         * kjs/collector.cpp:
    1747         (KJS::Heap::registerThread): Added dummy implementation.
    1748 
    1749 2008-07-14  Alexey Proskuryakov  <[email protected]>
    1750 
    1751         Reviewed by Geoff Garen.
    1752 
    1753         Eliminate per-thread JavaScript global data instance support and make arbitrary
    1754         global data/global object combinations possible.
    1755 
    1756         * kjs/collector.cpp:
    1757         (KJS::Heap::Heap): Store a JSGlobalData pointer instead of multiple pointers to its members.
    1758         This allows for going from any JS object to its associated global data, currently used in
    1759         JSGlobalObject constructor to initialize its JSGlobalData pointer.
    1760         (KJS::Heap::registerThread): Changed thread registration data to be per-heap. Previously,
    1761         only the shared heap could be used from multiple threads, so it was the only one that needed
    1762         thread registration, but now this can happen to any heap.
    1763         (KJS::Heap::unregisterThread): Ditto.
    1764         (KJS::Heap::markStackObjectsConservatively): Adapt for the above changes.
    1765         (KJS::Heap::setGCProtectNeedsLocking): Ditto.
    1766         (KJS::Heap::protect): Ditto.
    1767         (KJS::Heap::unprotect): Ditto.
    1768         (KJS::Heap::collect): Ditto.
    1769         (KJS::Heap::globalObjectCount): Use global object list associated with the current heap,
    1770         not the late per-thread one.
    1771         (KJS::Heap::protectedGlobalObjectCount): Ditto.
    1772 
    1773         * kjs/collector.h:
    1774         (KJS::Heap::ThreadRegistrar): Added a helper object that unregisters a thread when it is
    1775         destroyed.
    1776 
    1777         * kjs/JSLock.cpp:
    1778         (KJS::JSLock::JSLock):
    1779         * kjs/JSLock.h:
    1780         (KJS::JSLock::JSLock):
    1781         Don't use JSLock to implicitly register threads. I've added registerThread() calls to most
    1782         places that use JSLock - we cannot guarantee absolute safety unless we always mark all
    1783         threads in the process, but these implicit registration calls should cover reasonable usage
    1784         scenarios, I hope.
    1785 
    1786         * API/JSBase.cpp:
    1787         (JSEvaluateScript): Explicitly register the current thread.
    1788         (JSCheckScriptSyntax): Explicitly register the current thread.
    1789         (JSGarbageCollect): Changed to use the passed in context. Unfortunately, this creates a race
    1790         condition for clients that pass an already released context to JSGarbageCollect - but it is
    1791         unlikely to create real life problems.
    1792         To maintain compatibility, the shared heap is collected if NULL is passed.
    1793 
    1794         * API/JSContextRef.cpp:
    1795         (JSGlobalContextCreate): Use a new syntax for JSGlobalObject allocation.
    1796         (JSGlobalContextRetain): Register the thread.
    1797         (JSContextGetGlobalObject): Register the thread.
    1798 
    1799         * API/JSObjectRef.cpp:
    1800         (JSObjectMake):
    1801         (JSObjectMakeFunctionWithCallback):
    1802         (JSObjectMakeConstructor):
    1803         (JSObjectMakeFunction):
    1804         (JSObjectHasProperty):
    1805         (JSObjectGetProperty):
    1806         (JSObjectSetProperty):
    1807         (JSObjectGetPropertyAtIndex):
    1808         (JSObjectSetPropertyAtIndex):
    1809         (JSObjectDeleteProperty):
    1810         (JSObjectCallAsFunction):
    1811         (JSObjectCallAsConstructor):
    1812         (JSObjectCopyPropertyNames):
    1813         (JSPropertyNameAccumulatorAddName):
    1814         * API/JSValueRef.cpp:
    1815         (JSValueIsEqual):
    1816         (JSValueIsInstanceOfConstructor):
    1817         (JSValueMakeNumber):
    1818         (JSValueMakeString):
    1819         (JSValueToNumber):
    1820         (JSValueToStringCopy):
    1821         (JSValueToObject):
    1822         (JSValueProtect):
    1823         (JSValueUnprotect):
    1824         Register the thread.
    1825 
    1826         * API/JSStringRef.cpp: (JSStringRelease): Changed a comment to not mention per-thread contexts.
    1827 
    1828         * API/JSStringRefCF.cpp: Removed an unnecessary include of JSLock.h.
    1829 
    1830         * JavaScriptCore.exp: Export JSGlobalData constructor/destructor, now that anyone can have
    1831         their own instances. Adapt to other changes, too.
    1832 
    1833         * JavaScriptCore.xcodeproj/project.pbxproj: Made ThreadSpecific.h private, as it is now
    1834         included by collector.h and is thus needed in other projects.
    1835 
    1836         * kjs/InitializeThreading.cpp: (KJS::initializeThreadingOnce): Don't initialize per-thread
    1837         global data, as it no longer exists.
    1838 
    1839         * kjs/JSGlobalData.cpp:
    1840         (KJS::JSGlobalData::JSGlobalData):
    1841         (KJS::JSGlobalData::~JSGlobalData):
    1842         * kjs/JSGlobalData.h:
    1843         Removed support for per-thread instance. Made constructor and destructor public.
    1844 
    1845         * kjs/JSGlobalObject.cpp: (KJS::JSGlobalObject::init): Get to now arbitrary  JSGlobalData
    1846         via the heap.
    1847         (KJS::JSGlobalObject::operator new): Changed ot take JSGlobalDatra pointer.
    1848         * kjs/JSGlobalObject.h:
    1849 
    1850         * kjs/Shell.cpp:
    1851         (main):
    1852         (jscmain):
    1853         Changed to maintain a custom JSGlobalData pointer instead of a per-thread one.
    1854 
    1855 2008-07-13  Ada Chan  <[email protected]>
    1856 
    1857         Windows build fix: Add wtf/RefCountedLeakCounter to the project.
    1858 
    1859         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
    1860 
    1861 2008-07-12  Jan Michael Alonzo  <[email protected]>
    1862 
    1863         Gtk, Qt and Wx build fix: Add wtf/RefCountedLeakCounter in the
    1864         build scripts
    1865 
    1866         * GNUmakefile.am:
    1867         * JavaScriptCore.pri:
    1868         * JavaScriptCoreSources.bkl:
    1869 
    1870 2008-07-11  Stephanie Lewis  <[email protected]>
    1871 
    1872         Reviewed by Darin Adler and Oliver Hunt.
    1873 
    1874         Refactor RefCounting Leak counting code into a common class.
    1875 
    1876         In order to export the symbols I needed to put the debug defines inside the function names
    1877        
    1878         Before we had a separate channel for each Logging each Leak type.  Since the leak channels were only used in one location, and only at quit for simplicity I combined them all into one leak channel.
    1879 
    1880         * JavaScriptCore.exp:
    1881         * JavaScriptCore.xcodeproj/project.pbxproj: add new class
    1882         * kjs/nodes.cpp: remove old leak counting code
    1883         * wtf/RefCountedLeakCounter.cpp: Added. create a common leak counting class
    1884         * wtf/RefCountedLeakCounter.h: Added.
    1885 
    1886 2008-07-11  David Hyatt  <[email protected]>
    1887 
    1888         Add an insertBefore method to ListHashSet to allow for insertions in the middle of the list (rather than just
    1889         at the end).
    1890 
    1891         Reviewed by Anders
    1892 
    1893         * wtf/ListHashSet.h:
    1894         (WTF::::insertBefore):
    1895         (WTF::::insertNodeBefore):
    1896 
    1897 2008-07-11  Sam Weinig  <[email protected]>
    1898 
    1899         Rubber-stamped by Darin Adler.
    1900 
    1901         Move call function to CallData.cpp and construct to ConstructData.cpp.
    1902 
    1903         * GNUmakefile.am:
    1904         * JavaScriptCore.pri:
    1905         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    1906         * JavaScriptCore.xcodeproj/project.pbxproj:
    1907         * JavaScriptCoreSources.bkl:
    1908         * kjs/AllInOneFile.cpp:
    1909         * kjs/CallData.cpp: Copied from kjs/JSValue.cpp.
    1910         * kjs/ConstructData.cpp: Copied from kjs/JSValue.cpp.
    1911         * kjs/JSValue.cpp:
    1912 
    1913 2008-07-10  Mark Rowe  <[email protected]>
    1914 
    1915         Reviewed by Sam Weinig.
    1916 
    1917         Define WEBKIT_VERSION_MIN_REQUIRED=WEBKIT_VERSION_LATEST when building WebKit to ensure that no symbols end up with the weak_import attribute.
    1918 
    1919         * Configurations/Base.xcconfig:
    1920 
    1921 2008-07-10  Mark Rowe  <[email protected]>
    1922 
    1923         Reviewed by Sam Weinig.
    1924 
    1925         Fix the Tiger build by omitting annotations from methods declared in categories when using old versions of GCC.
    1926 
    1927         * API/WebKitAvailability.h:
    1928 
    1929 2008-07-10  Kevin McCullough  <[email protected]>
    1930 
    1931         Reviewed by Darin.
    1932 
    1933         -Minor cleanup. Renamed callTree() to head() and no longer use m_head
    1934         directly but instead keep it private and access via a method().
    1935 
    1936         * profiler/HeavyProfile.cpp:
    1937         (KJS::HeavyProfile::HeavyProfile):
    1938         (KJS::HeavyProfile::generateHeavyStructure):
    1939         (KJS::HeavyProfile::addNode):
    1940         * profiler/Profile.h:
    1941         (KJS::Profile::head):
    1942         * profiler/ProfileGenerator.cpp:
    1943         (KJS::ProfileGenerator::ProfileGenerator):
    1944 
    1945 2008-07-10  Alexey Proskuryakov  <[email protected]>
    1946 
    1947         Reviewed by Mark Rowe.
    1948 
    1949         Eliminate CollectorHeapIntrospector.
    1950 
    1951         CollectorHeapIntrospector was added primarily in the hopes to improve leaks tool output,
    1952         a result that it didn't deliver. Also, it helped by labeling JSC heap regions as reported by
    1953         vmmap tool, but at the same time, it made them mislabeled as malloc'd ones - the correct
    1954         way to label mapped regions is to use a VM tag.
    1955 
    1956         So, it makes more sense to remove it completely than to make it work with multiple heaps.
    1957 
    1958         * JavaScriptCore.exp:
    1959         * JavaScriptCore.xcodeproj/project.pbxproj:
    1960         * kjs/AllInOneFile.cpp:
    1961         * kjs/InitializeThreading.cpp:
    1962         (KJS::initializeThreading):
    1963         * kjs/collector.cpp:
    1964         * kjs/collector.h:
    1965         * kjs/CollectorHeapIntrospector.cpp: Removed.
    1966         * kjs/CollectorHeapIntrospector.h: Removed.
    1967 
    1968 2008-07-09  Kevin McCullough  <[email protected]>
    1969 
    1970         Reviewed by Darin.
    1971 
    1972         <rdar://problem/5951532> JSProfiler: Implement heavy (or bottom-up)
    1973         view (19228)
    1974         - Implemented the time and call count portionof heavy.  Now all that we
    1975         need is some UI.
    1976 
    1977         * profiler/CallIdentifier.h: Removed an unused constructor.
    1978         * profiler/HeavyProfile.cpp:
    1979         (KJS::HeavyProfile::HeavyProfile): Set the initial time of the head
    1980         node so that percentages work correctly.
    1981         (KJS::HeavyProfile::mergeProfiles): Sum the times and call count of
    1982         nodes being merged.
    1983         * profiler/ProfileNode.cpp: Set the intital values of time and call
    1984         count when copying ProfileNodes.
    1985         (KJS::ProfileNode::ProfileNode):
    1986 
    1987 2008-07-10  Jan Michael Alonzo  <[email protected]>
    1988 
    1989         Gtk build fix.
    1990 
    1991         * GNUmakefile.am: Add HeavyProfile.cpp
    1992 
    1993 2008-07-09  Mark Rowe  <[email protected]>
    1994 
    1995         Reviewed by Geoff Garen.
    1996 
    1997         Don't warn about deprecated functions in production builds.
    1998 
    1999         * Configurations/Base.xcconfig:
    2000         * Configurations/DebugRelease.xcconfig:
    2001 
    2002 2008-07-09  Darin Adler  <[email protected]>
    2003 
    2004         * JavaScriptCore.pri: Fix Qt build by adding HeavyProfile.cpp.
    2005 
    2006 2008-07-09  Kevin Ollivier  <[email protected]>
    2007 
    2008         wx biuld fix. Add HeavyProfile.cpp to build files.
    2009 
    2010         * JavaScriptCoreSources.bkl:
    2011 
    2012 2008-07-09  Kevin McCullough  <[email protected]>
    2013 
    2014         - Windows build fix.
    2015 
    2016         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    2017 
    2018 2008-07-09  Kevin McCullough  <[email protected]>
    2019 
    2020         - Build fix.
    2021 
    2022         * profiler/HeavyProfile.cpp:
    2023         (KJS::HeavyProfile::mergeProfiles):
    2024 
    2025 2008-07-09  Kevin McCullough  <[email protected]>
    2026 
    2027         Reviewed by Geoff and Adam.
    2028 
    2029         <rdar://problem/5951532> JSProfiler: Implement Bottom-Up view (19228)
    2030         - This is the plumbing for bottom-up, but does not include calculating
    2031         time, mostly because I'm still undclear about what the end result should
    2032         look like.
    2033         - This, obviously, does not include the UI to expose this in the
    2034         inspector yet.
    2035 
    2036         * JavaScriptCore.xcodeproj/project.pbxproj:
    2037         * profiler/CallIdentifier.h:
    2038         (KJS::CallIdentifier::CallIdentifier):
    2039         (WTF::): Added HashTraits for CallIdentifiers to be used by a HashMap.
    2040         * profiler/HeavyProfile.cpp: Added.
    2041         (KJS::HeavyProfile::HeavyProfile):
    2042         (KJS::HeavyProfile::generateHeavyStructure):
    2043         (KJS::HeavyProfile::addNode):
    2044         (KJS::HeavyProfile::mergeProfiles):
    2045         (KJS::HeavyProfile::addAncestorsAsChildren):
    2046         * profiler/HeavyProfile.h: Added.
    2047         (KJS::HeavyProfile::create):
    2048         (KJS::HeavyProfile::heavyProfile):
    2049         (KJS::HeavyProfile::treeProfile):
    2050         * profiler/Profile.cpp: Removed old commented out includes.
    2051         * profiler/Profile.h: The m_head is needed by the HeavyProfile so it
    2052         is now protected as opposed to private.
    2053         * profiler/ProfileNode.cpp:
    2054         (KJS::ProfileNode::ProfileNode): Created a constructor to copy
    2055         ProfileNodes.
    2056         (KJS::ProfileNode::findChild): Added a null check to make HeavyProfile
    2057         children finding easier and avoid a potential crasher.
    2058         * profiler/ProfileNode.h: Mostly moved things around but also added some
    2059         functionality needed by HeavyProfile.
    2060         (KJS::ProfileNode::create):
    2061         (KJS::ProfileNode::functionName):
    2062         (KJS::ProfileNode::url):
    2063         (KJS::ProfileNode::lineNumber):
    2064         (KJS::ProfileNode::head):
    2065         (KJS::ProfileNode::setHead):
    2066         (KJS::ProfileNode::setNextSibling):
    2067         (KJS::ProfileNode::actualTotalTime):
    2068         (KJS::ProfileNode::actualSelfTime):
    2069         * profiler/TreeProfile.cpp: Implemented the ability to get a
    2070         HeavyProfile.
    2071         (KJS::TreeProfile::heavyProfile):
    2072         * profiler/TreeProfile.h:
    2073 
    2074 2008-07-08  Geoffrey Garen  <[email protected]>
    2075 
    2076         Reviewed by Oliver Hunt.
    2077        
    2078         Added support for checking if an object has custom properties in its
    2079         property map. WebCore uses this to optimize marking DOM wrappers.
    2080 
    2081 2008-07-08  Simon Hausmann  <[email protected]>
    2082 
    2083         Prospective Gtk/Wx build fixes, add ProfileGenerator.cpp to the build.
    2084 
    2085         * GNUmakefile.am:
    2086         * JavaScriptCoreSources.bkl:
    2087 
    2088 2008-07-08  Simon Hausmann  <[email protected]>
    2089 
    2090         Fix the Qt build, add ProfileGenerator.cpp to the build.
    2091 
    2092         * JavaScriptCore.pri:
    2093 
    2094 2008-07-07  David Kilzer  <[email protected]>
    2095 
    2096         releaseFastMallocFreeMemory() should always be defined
    2097 
    2098         Reviewed by Darin.
    2099 
    2100         * JavaScriptCore.exp: Changed to export C++ binding for
    2101         WTF::releaseFastMallocFreeMemory() instead of C binding for
    2102         releaseFastMallocFreeMemory().
    2103         * wtf/FastMalloc.cpp: Moved definitions of
    2104         releaseFastMallocFreeMemory() to be in the WTF namespace
    2105         regardless whether FORCE_SYSTEM_MALLOC is defined.
    2106         * wtf/FastMalloc.h: Moved releaseFastMallocFreeMemory() from
    2107         extern "C" binding to WTF::releaseFastMallocFreeMemory().
    2108 
    2109 2008-07-07  Cameron Zwarich  <[email protected]>
    2110 
    2111         Reviewed by Geoff.
    2112 
    2113         Bug 19926: URL causes crash within a minute
    2114         <https://bugs.webkit.org/show_bug.cgi?id=19926>
    2115 
    2116         Add a check that lastGlobalObject is non-null in Machine::execute()
    2117         before copying its globals to the current register file.
    2118 
    2119         In theory, it is possible to make a test case for this, but it will
    2120         take a while to get it right.
    2121 
    2122         * VM/Machine.cpp:
    2123         (KJS::Machine::execute):
    2124 
    2125 2008-07-07  Darin Adler  <[email protected]>
    2126 
    2127         Rubber stamped by Adele.
    2128 
    2129         * VM/Machine.cpp:
    2130         (KJS::Machine::privateExecute): Fix a typo in a comment.
    2131 
    2132 2008-07-07  Steve Falkenburg  <[email protected]>
    2133 
    2134         Build fixes.
    2135 
    2136         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    2137         * JavaScriptCore.vcproj/testapi/testapi.vcproj:
    2138 
    2139 2008-07-07  Kevin McCullough  <[email protected]>
    2140 
    2141         Reviewed by Darin.
    2142 
    2143         When the profiler is running it gathers information and creates a
    2144         Profile.  After it finishes the Profile can be sorted and have other
    2145         data refinements run over it.  Both of these were done in the same class
    2146         before.  Now I split the gathering operations into a new class called
    2147         ProfileGenerator.
    2148 
    2149         * JavaScriptCore.xcodeproj/project.pbxproj:
    2150         * profiler/Profile.cpp: Removed code related to the gather stage of a
    2151         Profile's creation. 
    2152         (KJS::Profile::create):
    2153         (KJS::Profile::Profile):
    2154         * profiler/Profile.h: Ditto.
    2155         (KJS::Profile::title):
    2156         (KJS::Profile::callTree):
    2157         (KJS::Profile::setHead):
    2158         * profiler/ProfileGenerator.cpp: Added. This is the class that will
    2159         handle the stage of creating a Profile.  Once the Profile is finished
    2160         being created, this class goes away.
    2161         (KJS::ProfileGenerator::create):
    2162         (KJS::ProfileGenerator::ProfileGenerator):
    2163         (KJS::ProfileGenerator::title):
    2164         (KJS::ProfileGenerator::willExecute):
    2165         (KJS::ProfileGenerator::didExecute):
    2166         (KJS::ProfileGenerator::stopProfiling):
    2167         (KJS::ProfileGenerator::didFinishAllExecution):
    2168         (KJS::ProfileGenerator::removeProfileStart):
    2169         (KJS::ProfileGenerator::removeProfileEnd):
    2170         * profiler/ProfileGenerator.h: Added.
    2171         (KJS::ProfileGenerator::profile):
    2172         (KJS::ProfileGenerator::originatingGlobalExec):
    2173         (KJS::ProfileGenerator::pageGroupIdentifier):
    2174         (KJS::ProfileGenerator::client):
    2175         (KJS::ProfileGenerator::stoppedProfiling):
    2176         * profiler/Profiler.cpp: Now operates with the ProfileGenerator instead
    2177         of the Profile.
    2178         (KJS::Profiler::startProfiling):
    2179         (KJS::Profiler::stopProfiling):
    2180         (KJS::Profiler::didFinishAllExecution): It is here that the Profile is
    2181         handed off to its client and the Profile Generator is no longer needed.
    2182         (KJS::dispatchFunctionToProfiles):
    2183         (KJS::Profiler::willExecute):
    2184         (KJS::Profiler::didExecute):
    2185         * profiler/Profiler.h: Cleaned up the includes and subsequently the
    2186         forward declarations.  Also use the new ProfileGenerator.
    2187         (KJS::ProfilerClient::~ProfilerClient):
    2188         (KJS::Profiler::currentProfiles):
    2189         * profiler/TreeProfile.cpp: Use Profile's new interface.
    2190         (KJS::TreeProfile::create):
    2191         (KJS::TreeProfile::TreeProfile):
    2192         * profiler/TreeProfile.h:
    2193 
    2194 2008-07-07  Sam Weinig  <[email protected]>
    2195 
    2196         Reviewed by Cameron Zwarich.
    2197 
    2198         Third step in broad cleanup effort.
    2199 
    2200         [ File list elided ]
    2201 
    2202 2008-07-06  Sam Weinig  <[email protected]>
    2203 
    2204         Reviewed by Cameron Zwarich.
    2205 
    2206         Second step in broad cleanup effort.
    2207 
    2208         [ File list elided ]
    2209 
    2210 2008-07-05  Sam Weinig  <[email protected]>
    2211 
    2212         Reviewed by Cameron Zwarich.
    2213 
    2214         First step in broad cleanup effort.
    2215 
    2216         [ File list elided ]
    2217 
    2218 2008-07-05  Sam Weinig  <[email protected]>
    2219 
    2220         Rubber-stamped by Cameron Zwarich.
    2221 
    2222         Rename list.h/cpp to ArgList.h/cpp.
    2223 
    2224         * GNUmakefile.am:
    2225         * JavaScriptCore.pri:
    2226         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    2227         * JavaScriptCore.xcodeproj/project.pbxproj:
    2228         * JavaScriptCoreSources.bkl:
    2229         * VM/Machine.h:
    2230         * kjs/AllInOneFile.cpp:
    2231         * kjs/ArgList.cpp: Copied from JavaScriptCore/kjs/list.cpp.
    2232         * kjs/ArgList.h: Copied from JavaScriptCore/kjs/list.h.
    2233         * kjs/IndexToNameMap.cpp:
    2234         * kjs/JSGlobalData.cpp:
    2235         * kjs/JSGlobalData.h:
    2236         * kjs/JSObject.h:
    2237         * kjs/collector.cpp:
    2238         * kjs/list.cpp: Removed.
    2239         * kjs/list.h: Removed.
    2240 
    2241 2008-07-05  Sam Weinig  <[email protected]>
    2242 
    2243         Fix non-AllInOne builds again.
    2244 
    2245         * kjs/BooleanPrototype.cpp:
    2246         * kjs/ErrorPrototype.cpp:
    2247         * kjs/FunctionPrototype.cpp:
    2248         * kjs/NumberPrototype.cpp:
    2249         * kjs/ObjectPrototype.cpp:
    2250 
    2251 2008-07-05  Sam Weinig  <[email protected]>
    2252 
    2253         Fix build on case-sensitive build systems.
    2254 
    2255         * kjs/IndexToNameMap.cpp:
    2256 
    2257 2008-07-05  Sam Weinig  <[email protected]>
    2258 
    2259         Fix build.
    2260 
    2261         * kjs/Arguments.cpp:
    2262         * kjs/BooleanPrototype.cpp:
    2263         * kjs/DateConstructor.cpp:
    2264         * kjs/ErrorPrototype.cpp:
    2265         * kjs/FunctionPrototype.cpp:
    2266         * kjs/NumberPrototype.cpp:
    2267         * kjs/ObjectPrototype.cpp:
    2268         * kjs/RegExpPrototype.cpp:
    2269         * kjs/StringConstructor.cpp:
    2270         * kjs/lookup.cpp:
    2271 
    2272 2008-07-05  Sam Weinig  <[email protected]>
    2273 
    2274         Fix non-AllInOne build.
    2275 
    2276         * kjs/JSGlobalObject.cpp:
    2277 
    2278 2008-07-05  Sam Weinig  <[email protected]>
    2279 
    2280         Rubber-stamped by Cameron Zwarich.
    2281 
    2282         Split Arguments, IndexToNameMap, PrototypeFunction, GlobalEvalFunction and
    2283         the functions on the global object out of JSFunction.h/cpp.
    2284 
    2285         * GNUmakefile.am:
    2286         * JavaScriptCore.pri:
    2287         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    2288         * JavaScriptCore.xcodeproj/project.pbxproj:
    2289         * JavaScriptCoreSources.bkl:
    2290         * VM/Machine.cpp:
    2291         * kjs/AllInOneFile.cpp:
    2292         * kjs/Arguments.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
    2293         * kjs/Arguments.h: Copied from JavaScriptCore/kjs/JSFunction.h.
    2294         * kjs/GlobalEvalFunction.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
    2295         * kjs/GlobalEvalFunction.h: Copied from JavaScriptCore/kjs/JSFunction.h.
    2296         * kjs/IndexToNameMap.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
    2297         * kjs/IndexToNameMap.h: Copied from JavaScriptCore/kjs/JSFunction.h.
    2298         * kjs/JSActivation.cpp:
    2299         * kjs/JSFunction.cpp:
    2300         * kjs/JSFunction.h:
    2301         * kjs/JSGlobalObject.cpp:
    2302         * kjs/JSGlobalObjectFunctions.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
    2303         * kjs/JSGlobalObjectFunctions.h: Copied from JavaScriptCore/kjs/JSFunction.h.
    2304         The functions on the global object should be in JSGlobalObject.cpp, but putting them there
    2305         was a 0.5% regression.
    2306 
    2307         * kjs/PrototypeFunction.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
    2308         * kjs/PrototypeFunction.h: Copied from JavaScriptCore/kjs/JSFunction.h.
    2309         * kjs/Shell.cpp:
    2310         * kjs/lexer.cpp:
    2311         * kjs/ustring.cpp:
    2312 
    2313 2008-07-04  Sam Weinig  <[email protected]>
    2314 
    2315         Really fix the mac build.
    2316 
    2317         * JavaScriptCore.xcodeproj/project.pbxproj:
    2318 
    2319 2008-07-04  Sam Weinig  <[email protected]>
    2320 
    2321         Fix mac build.
    2322 
    2323         * JavaScriptCore.xcodeproj/project.pbxproj:
    2324 
    2325 2008-07-04  Sam Weinig  <[email protected]>
    2326 
    2327         Fix non-AllInOne builds.
    2328 
    2329         * kjs/Error.cpp:
    2330         * kjs/GetterSetter.cpp:
    2331         * kjs/JSImmediate.cpp:
    2332         * kjs/operations.cpp:
    2333 
    2334 2008-07-04  Sam Weinig  <[email protected]>
    2335 
    2336         Rubber-stamped by Dan Bernstein.
    2337 
    2338         Split Error and GetterSetter out of JSObject.h.
    2339 
    2340         * API/JSCallbackObjectFunctions.h:
    2341         * GNUmakefile.am:
    2342         * JavaScriptCore.pri:
    2343         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    2344         * JavaScriptCore.xcodeproj/project.pbxproj:
    2345         * JavaScriptCoreSources.bkl:
    2346         * kjs/AllInOneFile.cpp:
    2347         * kjs/ClassInfo.h: Copied from JavaScriptCore/kjs/JSObject.h.
    2348         * kjs/Error.cpp: Copied from JavaScriptCore/kjs/JSObject.cpp.
    2349         * kjs/Error.h: Copied from JavaScriptCore/kjs/JSObject.h.
    2350         * kjs/GetterSetter.cpp:
    2351         * kjs/GetterSetter.h: Copied from JavaScriptCore/kjs/JSObject.h.
    2352         * kjs/JSObject.cpp:
    2353         * kjs/JSObject.h:
    2354         * kjs/nodes.h:
    2355 
    2356 2008-07-04  Simon Hausmann  <[email protected]>
    2357 
    2358         Fix the Wx build, added TreeProfile.cpp to the build.
    2359 
    2360         * JavaScriptCoreSources.bkl:
    2361 
    2362 2008-07-03  Mark Rowe  <[email protected]>
    2363 
    2364         Reviewed by Oliver Hunt.
    2365 
    2366         Fix output path of recently-added script phase to reference the correct file.
    2367         This prevents Xcode from running the script phase unnecessarily, which caused
    2368         the generated header to be recreated and lead to AllInOneFile.cpp rebuilding.
    2369 
    2370         * JavaScriptCore.xcodeproj/project.pbxproj:
    2371 
    2372 2008-07-03  Mark Rowe  <[email protected]>
    2373 
    2374         Follow-up to the 64-bit build fix.  Use intptr_t rather than ssize_t as
    2375         the latter is non-standard and does not exist on Windows.
    2376 
    2377         * kjs/JSLock.cpp:
    2378         (KJS::JSLock::lockCount):
    2379         (KJS::JSLock::lock):
    2380         (KJS::JSLock::unlock):
    2381         (KJS::JSLock::DropAllLocks::DropAllLocks):
    2382         * kjs/JSLock.h:
    2383 
    2384 2008-07-02  Mark Rowe  <[email protected]>
    2385 
    2386         Fix the 64-bit build.  pthread_getspecific works with pointer-sized values,
    2387         so use ssize_t rather than int to track the lock count to avoid warnings about
    2388         truncating the result of pthread_getspecific.
    2389 
    2390         * kjs/JSLock.cpp:
    2391         (KJS::JSLock::lockCount):
    2392         (KJS::JSLock::lock):
    2393         (KJS::JSLock::unlock):
    2394         (KJS::JSLock::DropAllLocks::DropAllLocks):
    2395         * kjs/JSLock.h:
    2396 
    2397 2008-07-03  Geoffrey Garen  <[email protected]>
    2398 
    2399         Reviewed by Sam Weinig.
    2400        
    2401         Removed checking for the array get/put fast case from the array code.
    2402         Callers who want the fast case should call getIndex and/or setIndex
    2403         instead. (get_by_val and put_by_val already do this.)
    2404        
    2405         SunSpider reports no change overall, but a 1.4% speedup on fannkuch and
    2406         a 3.6% speedup on nsieve.
    2407 
    2408 2008-07-03  Dan Bernstein  <[email protected]>
    2409 
    2410         - Windows build fix
    2411 
    2412         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added TreeProfile.{h,cpp}.
    2413 
    2414 2008-07-03  Dan Bernstein  <[email protected]>
    2415 
    2416         Reviewed by Anders Carlsson.
    2417 
    2418         - Windows build fix
    2419 
    2420         * VM/Machine.cpp:
    2421         (KJS::Machine::Machine):
    2422 
    2423 2008-07-03  Simon Hausmann  <[email protected]>
    2424 
    2425         Reviewed by Alexey Proskuryakov.
    2426 
    2427         Fix the non-threaded build.
    2428 
    2429         * kjs/JSGlobalData.cpp:
    2430         (KJS::JSGlobalData::threadInstanceInternal):
    2431 
    2432 2008-07-03  Simon Hausmann  <[email protected]>
    2433 
    2434         Fix the Qt build, added TreeProfile to the build.
    2435 
    2436         * JavaScriptCore.pri:
    2437 
    2438 2008-07-02  Alexey Proskuryakov  <[email protected]>
    2439 
    2440         Reviewed by Geoff.
    2441 
    2442         Don't create unnecessary JSGlobalData instances.
    2443 
    2444         * kjs/JSGlobalData.h:
    2445         * kjs/JSGlobalData.cpp:
    2446         (KJS::JSGlobalData::threadInstanceExists):
    2447         (KJS::JSGlobalData::sharedInstanceExists):
    2448         (KJS::JSGlobalData::threadInstance):
    2449         (KJS::JSGlobalData::sharedInstance):
    2450         (KJS::JSGlobalData::threadInstanceInternal):
    2451         (KJS::JSGlobalData::sharedInstanceInternal):
    2452         Added methods to query instance existence.
    2453 
    2454         * kjs/InitializeThreading.cpp:
    2455         (KJS::initializeThreadingOnce):
    2456         Initialize thread instance static in a new way.
    2457 
    2458         * API/JSBase.cpp:
    2459         (JSGarbageCollect):
    2460         * kjs/collector.cpp:
    2461         (KJS::Heap::collect):
    2462         Check for instance existence before accessing it.
    2463 
    2464 2008-07-02  Geoffrey Garen  <[email protected]>
    2465 
    2466         Reviewed by Cameron Zwarich.
    2467        
    2468         Fixed https://bugs.webkit.org/show_bug.cgi?id=19862
    2469         REGRESSION (r34907): Gmail crashes in JavaScriptCore code while editing drafts
    2470        
    2471         I was never able to reproduce this issue, but Cameron could, and he says
    2472         that this patch fixes it.
    2473        
    2474         The crash seems tied to a timer or event handler callback. In such a case,
    2475         the sole reference to the global object may be in the current call frame,
    2476         so we can't depend on the global object to mark the call frame area in
    2477         the register file.
    2478        
    2479         The new GC marking rule is: the global object is not responsible for
    2480         marking the whole register file -- it's just responsible for the globals
    2481         section it's tied to. The heap is responsible for marking the call frame area.
    2482 
    2483 2008-07-02  Mark Rowe  <[email protected]>
    2484 
    2485         Reviewed by Sam Weinig.
    2486 
    2487         Add the ability to trace JavaScriptCore garabge collections using dtrace.
    2488 
    2489         * JavaScriptCore.xcodeproj/project.pbxproj: Generate the dtrace probe header
    2490         file when building on a new enough version of Mac OS X.
    2491         * JavaScriptCorePrefix.h: Add our standard Mac OS X version detection macros.
    2492         * kjs/Tracing.d: Declare three dtrace probes.
    2493         * kjs/Tracing.h: Include the generated dtrace macros if dtrace is available,
    2494         otherwise provide versions that do nothing.
    2495         * kjs/collector.cpp:
    2496         (KJS::Heap::collect): Fire dtrace probes when starting a collection, after the
    2497         mark phase has completed, and when the collection is complete.
    2498         * wtf/Platform.h: Define HAVE_DTRACE when building on a new enough version of Mac OS X.
    2499 
    2500 2008-07-02  Geoffrey Garen  <[email protected]>
    2501 
    2502         Rubber stamped by Oliver Hunt.
    2503        
    2504         Reduced the max register file size from 8MB to 2MB.
    2505 
    2506         We still allow about 20,000 levels of recursion.
    2507 
    2508 2008-07-02  Alp Toker  <[email protected]>
    2509 
    2510         Build fix for r34960. Add TreeProfile.cpp to build.
    2511 
    2512         * GNUmakefile.am:
    2513 
    2514 2008-07-02  Geoffrey Garen  <[email protected]>
    2515 
    2516         Reviewed by Oliver Hunt.
    2517 
    2518         Optimized a[n] get for cases when a is an array or a string. When a is
    2519         an array, we optimize both get and put. When a is a string, we only
    2520         optimize get, since you can't put to a string.
    2521        
    2522         SunSpider says 3.4% faster.
    2523 
    2524 2008-07-02  Kevin McCullough  <[email protected]>
    2525 
    2526         Reviewed by Darin.
    2527 
    2528         -Small cleanup in preparation for implementing Bottom-up.
    2529 
    2530         * profiler/CallIdentifier.h: Rename debug function to make it clear of
    2531         its output and intention to be debug only.
    2532         (KJS::CallIdentifier::operator const char* ): Implement in terms of
    2533         c_str.
    2534         (KJS::CallIdentifier::c_str):
    2535         * profiler/ProfileNode.cpp: Impelment findChild() which will be needed
    2536         by the bottom-up implementation.
    2537         (KJS::ProfileNode::findChild):
    2538         * profiler/ProfileNode.h: Added comments to make the collections of
    2539         functions more clear.
    2540         (KJS::ProfileNode::operator==):
    2541         (KJS::ProfileNode::c_str):
    2542 
    2543 2008-07-02  Cameron Zwarich  <[email protected]>
    2544 
    2545         Reviewed by Darin.
    2546 
    2547         Bug 19776: Number.toExponential() is incorrect for numbers between 0.1 and 1
    2548         <https://bugs.webkit.org/show_bug.cgi?id=19776>
    2549 
    2550         Perform the sign check for the exponent on the actual exponent value,
    2551         which is 1 less than the value of decimalPoint, instead of on the value
    2552         of decimalPoint itself.
    2553 
    2554         * kjs/NumberPrototype.cpp:
    2555         (KJS::exponentialPartToString):
    2556 
    2557 2008-07-02  Kevin McCullough  <[email protected]>
    2558 
    2559         Reviewed by Darin.
    2560 
    2561         <rdar://problem/5951532> JSProfiler: Implement Bottom-Up view (19228)
    2562         - Subclass TreeProfile as I prepare for a HeavyProfile to be comming
    2563         later.
    2564 
    2565         * JavaScriptCore.xcodeproj/project.pbxproj:
    2566         * profiler/Profile.cpp: By default we create a TreeProfile.
    2567         (KJS::Profile::create):
    2568         * profiler/Profile.h: Changes to the Profile class to make it amenable
    2569         to be inherited from.
    2570         (KJS::Profile::~Profile):
    2571         * profiler/TreeProfile.cpp: Added.
    2572         (KJS::TreeProfile::create):
    2573         (KJS::TreeProfile::TreeProfile):
    2574         (KJS::TreeProfile::heavyProfile):
    2575         * profiler/TreeProfile.h: Added.
    2576         (KJS::TreeProfile::treeProfile):
    2577 
    2578 2008-07-02  Kevin McCullough  <[email protected]>
    2579 
    2580         Reviewed by Dan.
    2581 
    2582         Broke CallIdentifier out into its own file. I did this because it's
    2583         going to grow a lot soon and I wanted this to be a separate patch.
    2584 
    2585         * JavaScriptCore.xcodeproj/project.pbxproj:
    2586         * profiler/CallIdentifier.h: Added.
    2587         (KJS::CallIdentifier::CallIdentifier):
    2588         (KJS::CallIdentifier::operator==):
    2589         (KJS::CallIdentifier::operator!=):
    2590         (KJS::CallIdentifier::operator const char* ):
    2591         (KJS::CallIdentifier::toString):
    2592         * profiler/ProfileNode.h:
    2593 
    2594 2008-07-02  Simon Hausmann  <[email protected]>
    2595 
    2596         Build fix. Implemented missing functions for single-threaded build.
    2597 
    2598         * kjs/JSLock.cpp:
    2599         (KJS::JSLock::JSLock):
    2600         (KJS::JSLock::lock):
    2601         (KJS::JSLock::unlock):
    2602         (KJS::JSLock::DropAllLocks::DropAllLocks):
    2603 
    2604 2008-07-02  Alexey Proskuryakov  <[email protected]>
    2605 
    2606         Another non-AllInOne build fix.
    2607 
    2608         * kjs/JSGlobalObject.cpp: Include JSLock.h here, too.
    2609 
    2610 2008-07-02  Alexey Proskuryakov  <[email protected]>
    2611 
    2612         Non-AllInOne build fix.
    2613 
    2614         * kjs/interpreter.cpp: Include JSLock.h.
    2615 
    2616 2008-06-30  Alexey Proskuryakov  <[email protected]>
    2617 
    2618         Reviewed by Darin.
    2619 
    2620         Disable JSLock for per-thread contexts.
    2621 
    2622         No change on SunSpider.
    2623 
    2624         * kjs/JSGlobalData.h:
    2625         * kjs/JSGlobalData.cpp:
    2626         (KJS::JSGlobalData::JSGlobalData):
    2627         (KJS::JSGlobalData::sharedInstance):
    2628         Added isSharedInstance as a better way to tell whether the instance is shared (legacy).
    2629 
    2630         * kjs/JSLock.cpp:
    2631         (KJS::createJSLockCount):
    2632         (KJS::JSLock::lockCount):
    2633         (KJS::setLockCount):
    2634         (KJS::JSLock::JSLock):
    2635         (KJS::JSLock::lock):
    2636         (KJS::JSLock::unlock):
    2637         (KJS::JSLock::currentThreadIsHoldingLock):
    2638         (KJS::JSLock::DropAllLocks::DropAllLocks):
    2639         (KJS::JSLock::DropAllLocks::~DropAllLocks):
    2640         * kjs/JSLock.h:
    2641         (KJS::JSLock::JSLock):
    2642         (KJS::JSLock::~JSLock):
    2643         Made JSLock and JSLock::DropAllLocks constructors take a parameter to decide whether to
    2644         actually lock a mutex, or only to increment recursion count. We cannot turn it into no-op
    2645         if we want to keep existing assertions working.
    2646         Made recursion count per-thread, now that locks may not lock.
    2647 
    2648         * API/JSBase.cpp:
    2649         (JSEvaluateScript): Take JSLock after casting JSContextRef to ExecState* (which doesn't need
    2650         locking in any case), so that a decision whether to actually lock can be made.
    2651         (JSCheckScriptSyntax): Ditto.
    2652         (JSGarbageCollect): Only lock while collecting the shared heap, not the per-thread one.
    2653 
    2654         * API/JSObjectRef.cpp:
    2655         (JSClassCreate): Don't lock, as there is no reason to.
    2656         (JSClassRetain): Ditto.
    2657         (JSClassRelease): Ditto.
    2658         (JSPropertyNameArrayRetain): Ditto.
    2659         (JSPropertyNameArrayRelease): Only lock while deleting the array, as that may touch
    2660         identifier table.
    2661         (JSPropertyNameAccumulatorAddName): Adding a string also involves an identifier table
    2662         lookup, and possibly modification.
    2663 
    2664         * API/JSStringRef.cpp:
    2665         (JSStringCreateWithCharacters):
    2666         (JSStringCreateWithUTF8CString):
    2667         (JSStringRetain):
    2668         (JSStringRelease):
    2669         (JSStringGetUTF8CString):
    2670         (JSStringIsEqual):
    2671         * API/JSStringRefCF.cpp:
    2672         (JSStringCreateWithCFString):
    2673         JSStringRef operations other than releasing do not need locking.
    2674 
    2675         * VM/Machine.cpp: Don't include unused JSLock.h.
    2676 
    2677         * kjs/CollectorHeapIntrospector.cpp: (KJS::CollectorHeapIntrospector::statistics):
    2678         Don't take the lock for real, as heap introspection pauses the process anyway. It seems that
    2679         the existing code could cause deadlocks.
    2680 
    2681         * kjs/Shell.cpp:
    2682         (functionGC):
    2683         (main):
    2684         (jscmain):
    2685         The test tool uses a per-thread context, so no real locking is required.
    2686 
    2687         * kjs/collector.h:
    2688         (KJS::Heap::setGCProtectNeedsLocking): Optionally protect m_protectedValues access with a
    2689         per-heap mutex. This is only needed for WebCore Database code, which violates the "no data
    2690         migration between threads" by using ProtectedPtr on a background thread.
    2691         (KJS::Heap::isShared): Keep a shared flag here, as well.
    2692 
    2693         * kjs/protect.h:
    2694         (KJS::::ProtectedPtr):
    2695         (KJS::::~ProtectedPtr):
    2696         (KJS::::operator):
    2697         (KJS::operator==):
    2698         (KJS::operator!=):
    2699         ProtectedPtr is ony used from WebCore, so it doesn't need to take JSLock. An assertion in
    2700         Heap::protect/unprotect guards agains possible future unlocked uses of ProtectedPtr in JSC.
    2701 
    2702         * kjs/collector.cpp:
    2703         (KJS::Heap::Heap): Initialize m_isShared.
    2704         (KJS::Heap::~Heap): No need to lock for real during destruction, but must keep assertions
    2705         in sweep() working.
    2706         (KJS::destroyRegisteredThread): Registered thread list is only accessed for shared heap,
    2707         so locking is always needed here.
    2708         (KJS::Heap::registerThread): Ditto.
    2709         (KJS::Heap::markStackObjectsConservatively): Use m_isShared instead of comparing to a shared
    2710         instance for a small speedup.
    2711         (KJS::Heap::setGCProtectNeedsLocking): Create m_protectedValuesMutex. There is currently no
    2712         way to undo this - and ideally, Database code will be fixed to lo longer require this quirk.
    2713         (KJS::Heap::protect): Take m_protectedValuesMutex (if it exists) while accessing
    2714         m_protectedValues.
    2715         (KJS::Heap::unprotect): Ditto.
    2716         (KJS::Heap::markProtectedObjects): Ditto.
    2717         (KJS::Heap::protectedGlobalObjectCount): Ditto.
    2718         (KJS::Heap::protectedObjectCount): Ditto.
    2719         (KJS::Heap::protectedObjectTypeCounts): Ditto.
    2720 
    2721         * kjs/ustring.cpp:
    2722         * kjs/ustring.h:
    2723         Don't include JSLock.h, which is no longer used here. As a result, an explicit include had
    2724         to be added to many files in JavaScriptGlue, WebCore and WebKit.
    2725 
    2726         * kjs/JSGlobalObject.cpp:
    2727         (KJS::JSGlobalObject::init):
    2728         * API/JSCallbackConstructor.cpp:
    2729         (KJS::constructJSCallback):
    2730         * API/JSCallbackFunction.cpp:
    2731         (KJS::JSCallbackFunction::call):
    2732         * API/JSCallbackObjectFunctions.h:
    2733         (KJS::::init):
    2734         (KJS::::getOwnPropertySlot):
    2735         (KJS::::put):
    2736         (KJS::::deleteProperty):
    2737         (KJS::::construct):
    2738         (KJS::::hasInstance):
    2739         (KJS::::call):
    2740         (KJS::::getPropertyNames):
    2741         (KJS::::toNumber):
    2742         (KJS::::toString):
    2743         (KJS::::staticValueGetter):
    2744         (KJS::::callbackGetter):
    2745         * API/JSContextRef.cpp:
    2746         (JSGlobalContextCreate):
    2747         (JSGlobalContextRetain):
    2748         (JSGlobalContextRelease):
    2749         * API/JSValueRef.cpp:
    2750         (JSValueIsEqual):
    2751         (JSValueIsStrictEqual):
    2752         (JSValueIsInstanceOfConstructor):
    2753         (JSValueMakeNumber):
    2754         (JSValueMakeString):
    2755         (JSValueToNumber):
    2756         (JSValueToStringCopy):
    2757         (JSValueToObject):
    2758         (JSValueProtect):
    2759         (JSValueUnprotect):
    2760         * JavaScriptCore.exp:
    2761         * kjs/PropertyNameArray.h:
    2762         (KJS::PropertyNameArray::globalData):
    2763         * kjs/interpreter.cpp:
    2764         (KJS::Interpreter::checkSyntax):
    2765         (KJS::Interpreter::evaluate):
    2766         Pass a parameter to JSLock/JSLock::DropAllLocks to decide whether the lock needs to be taken.
    2767 
    2768 2008-07-01  Alexey Proskuryakov  <[email protected]>
    2769 
    2770         Reviewed by Darin.
    2771 
    2772         https://bugs.webkit.org/show_bug.cgi?id=19834
    2773         Failed assertion in JavaScriptCore/VM/SegmentedVector.h:82
    2774 
    2775         Creating a global object with a custom prototype resets it twice (wasteful!).
    2776         So, addStaticGlobals() was called twice, but JSGlobalObject::reset() didn't reset
    2777         the register array.       
    2778 
    2779         * kjs/JSGlobalObject.cpp: (KJS::JSGlobalObject::reset): Call setRegisterArray(0, 0).
    2780 
    2781         * kjs/JSVariableObject.h: Changed registerArray to OwnArrayPtr. Also, added private copy
    2782         constructor and operator= to ensure that no one attempts to copy this object (for whatever
    2783         reason, I couldn't make Noncopyable work).
    2784 
    2785         * kjs/JSGlobalObject.h: (KJS::JSGlobalObject::addStaticGlobals): Allocate registerArray
    2786         with new[].
    2787 
    2788         * kjs/JSVariableObject.cpp:
    2789         (KJS::JSVariableObject::copyRegisterArray): Allocate registerArray with new[].
    2790         (KJS::JSVariableObject::setRegisterArray): Avoid hitting an assertion in OwnArrayPtr when
    2791         "changing" the value from 0 to 0.
    2792 
    2793 2008-07-01  Geoffrey Garen  <[email protected]>
    2794 
    2795         Reviewed by Oliver Hunt.
    2796        
    2797         Removed and/or reordered exception checks in array-style a[n] access.
    2798        
    2799         SunSpider says 1.4% faster.
    2800 
    2801         * VM/Machine.cpp:
    2802         (KJS::Machine::privateExecute): No need to check for exceptions before
    2803         calling toString, toNumber and/or get. If the call ends up being observable
    2804         through toString, valueOf, or a getter, we short-circuit it there, instead.
    2805         In the op_del_by_val case, I removed the incorrect comment without actually
    2806         removing the code, since I didn't want to tempt the GCC fates!
    2807 
    2808         * kjs/JSObject.cpp:
    2809         (KJS::callDefaultValueFunction): Added exception check to prevent
    2810         toString and valueOf functions from observing execution after an exception
    2811         has been thrown. This removes some of the burden of exception checking
    2812         from the machine.
    2813 
    2814         (KJS::JSObject::defaultValue): Removed redundant exception check here.
    2815 
    2816         * kjs/PropertySlot.cpp:
    2817         (KJS::PropertySlot::functionGetter): Added exception check to prevent
    2818         getter functions from observing execution after an exception has been
    2819         thrown. This removes some of the burden of exception checking from the
    2820         machine.
    2821 
    2822 2008-07-01  Geoffrey Garen  <[email protected]>
    2823 
    2824         Reviewed by Oliver Hunt.
    2825        
    2826         Optimized a[n] get and put for cases where n is an immediate unsigned
    2827         value.
    2828        
    2829         SunSpider says 3.5% faster.
    2830 
    2831 2008-07-01  Cameron Zwarich  <[email protected]>
    2832 
    2833         Reviewed by Darin.
    2834 
    2835         Bug 19844: JavaScript Switch statement modifies "this"
    2836         <https://bugs.webkit.org/show_bug.cgi?id=19844>
    2837 
    2838         Use a temporary when generating code for switch clauses to avoid
    2839         overwriting 'this' or a local variable.
    2840 
    2841         * kjs/nodes.cpp:
    2842         (KJS::CaseBlockNode::emitCodeForBlock):
    2843 
    2844 2008-07-01  Christian Dywan  <[email protected]>
    2845 
    2846         Gtk+ build fix.
    2847 
    2848         * kjs/list.cpp: Include "JSCell.h"
    2849 
    2850 2008-07-01  Kevin McCullough  <[email protected]>
    2851 
    2852         Build fix.
    2853 
    2854         * JavaScriptCore.xcodeproj/project.pbxproj:
    2855 
    2856 2008-07-01  Dan Bernstein  <[email protected]>
    2857 
    2858         Reviewed by Anders Carlsson.
    2859 
    2860         - Mac release build fix
    2861 
    2862         * JavaScriptCore.exp:
    2863 
    2864 2008-07-01  Sam Weinig  <[email protected]>
    2865 
    2866         Try and fix mac builds.
    2867 
    2868         * JavaScriptCore.exp:
    2869 
    2870 2008-07-01  Sam Weinig  <[email protected]>
    2871 
    2872         Fix non-AllInOne builds.
    2873 
    2874         * kjs/DateMath.cpp:
    2875 
    2876 2008-07-01  Sam Weinig  <[email protected]>
    2877 
    2878         Reviewed by Darin Adler.
    2879 
    2880         Split JSCell and JSNumberCell class declarations out of JSValue.h
    2881 
    2882         * GNUmakefile.am:
    2883         * JavaScriptCore.pri:
    2884         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    2885         * JavaScriptCore.xcodeproj/project.pbxproj:
    2886         * JavaScriptCoreSources.bkl:
    2887         * VM/JSPropertyNameIterator.h:
    2888         * kjs/AllInOneFile.cpp:
    2889         * kjs/JSCell.cpp: Copied from JavaScriptCore/kjs/JSValue.cpp.
    2890         * kjs/JSCell.h: Copied from JavaScriptCore/kjs/JSValue.h.
    2891         (KJS::JSValue::getJSNumber):
    2892         * kjs/JSNumberCell.cpp:
    2893         * kjs/JSNumberCell.h: Copied from JavaScriptCore/kjs/JSValue.h.
    2894         * kjs/JSObject.h:
    2895         * kjs/JSString.cpp:
    2896         (KJS::jsString):
    2897         (KJS::jsOwnedString):
    2898         * kjs/JSString.h:
    2899         (KJS::JSValue::toThisJSString):
    2900         * kjs/JSValue.cpp:
    2901         * kjs/JSValue.h:
    2902 
    2903 2008-07-01  Anders Carlsson  <[email protected]>
    2904 
    2905         Build fixes.
    2906        
    2907         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    2908         * kjs/JSGlobalObject.h:
    2909         (KJS::JSGlobalObject::addStaticGlobals):
    2910 
    2911 2008-07-01  Simon Hausmann  <[email protected]>
    2912 
    2913         Build fix, include OwnPtr.h.
    2914 
    2915         * kjs/RegExpConstructor.h:
    2916 
    2917 2008-06-30  Geoffrey Garen  <[email protected]>
    2918 
    2919         Reviewed by Oliver Hunt.
    2920        
    2921         Fixed a global object leak caused by the switch to one register file.
    2922        
    2923         Don't unconditionally mark the register file, since that logically
    2924         makes all global variables GC roots, even when their global object is
    2925         no longer reachable.
    2926        
    2927         Instead, make the global object associated with the register file
    2928         responsible for marking the register file.
    2929 
    2930 2008-06-30  Geoffrey Garen  <[email protected]>
    2931 
    2932         Reviewed by Oliver Hunt.
    2933        
    2934         Removed the "registerBase" abstraction. Since the register file never
    2935         reallocates, we can keep direct pointers into it, instead of
    2936         <registerBase, offset> tuples.
    2937        
    2938         SunSpider says 0.8% faster.
    2939        
    2940 2008-06-30  Oliver Hunt  <[email protected]>
    2941 
    2942         Reviewed by NOBODY (build fix).
    2943 
    2944         Fix build by adding all (hopefully) the missing includes.
    2945 
    2946         * kjs/BooleanPrototype.cpp:
    2947         * kjs/DateConstructor.cpp:
    2948         * kjs/ErrorPrototype.cpp:
    2949         * kjs/FunctionPrototype.cpp:
    2950         * kjs/NativeErrorConstructor.cpp:
    2951         * kjs/NumberPrototype.cpp:
    2952         * kjs/ObjectPrototype.cpp:
    2953         * kjs/RegExpConstructor.cpp:
    2954         * kjs/StringConstructor.cpp:
    2955         * kjs/StringPrototype.cpp:
    2956 
    2957 2008-06-30  Cameron Zwarich  <[email protected]>
    2958 
    2959         Reviewed by Oliver.
    2960 
    2961         Bug 19830: REGRESSION (r34883): Google Reader doesn't show up feed list on sidebar
    2962         <https://bugs.webkit.org/show_bug.cgi?id=19830>
    2963 
    2964         Ensure that we do not eliminate a write to a local register when doing
    2965         peephole optimizations.
    2966 
    2967         * VM/CodeGenerator.cpp:
    2968         (KJS::CodeGenerator::emitJumpIfTrue):
    2969         (KJS::CodeGenerator::emitJumpIfFalse):
    2970 
    2971 2008-06-30  Sam Weinig  <[email protected]>
    2972 
    2973         Rubber-stamped by Darin Alder.
    2974 
    2975         Split InternalFunction into its own header file.
    2976 
    2977         * API/JSCallbackFunction.h:
    2978         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    2979         * JavaScriptCore.xcodeproj/project.pbxproj:
    2980         * kjs/ArrayConstructor.h:
    2981         * kjs/BooleanConstructor.h:
    2982         * kjs/DateConstructor.h:
    2983         * kjs/ErrorConstructor.h:
    2984         * kjs/FunctionConstructor.h:
    2985         * kjs/FunctionPrototype.h:
    2986         * kjs/InternalFunction.h: Copied from kjs/JSFunction.h.
    2987         * kjs/JSFunction.h:
    2988         * kjs/NativeErrorConstructor.h:
    2989         * kjs/NumberConstructor.h:
    2990         * kjs/ObjectConstructor.h:
    2991         * kjs/RegExpConstructor.h:
    2992         * kjs/StringConstructor.h:
    2993         * profiler/Profiler.cpp:
    2994 
    2995 2008-06-30  Sam Weinig  <[email protected]>
    2996 
    2997         Reviewed by Kevin McCullough.
    2998 
    2999         Remove empty files Instruction.cpp, LabelID.cpp, Register.cpp and RegisterID.cpp.
    3000 
    3001         * GNUmakefile.am:
    3002         * JavaScriptCore.pri:
    3003         * JavaScriptCore.xcodeproj/project.pbxproj:
    3004         * JavaScriptCoreSources.bkl:
    3005         * VM/Instruction.cpp: Removed.
    3006         * VM/LabelID.cpp: Removed.
    3007         * VM/Register.cpp: Removed.
    3008         * VM/RegisterID.cpp: Removed.
    3009 
    3010 2008-06-30  Sam Weinig  <[email protected]>
    3011 
    3012         Rubber-stamped (reluctantly) by Kevin McCullough.
    3013 
    3014         Rename date_object.h/cpp to DateInstance.h/cpp
    3015 
    3016         * GNUmakefile.am:
    3017         * JavaScriptCore.pri:
    3018         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    3019         * JavaScriptCore.xcodeproj/project.pbxproj:
    3020         * JavaScriptCoreSources.bkl:
    3021         * kjs/AllInOneFile.cpp:
    3022         * kjs/DateConstructor.cpp:
    3023         * kjs/DateInstance.cpp: Copied from kjs/date_object.cpp.
    3024         * kjs/DateInstance.h: Copied from kjs/date_object.h.
    3025         * kjs/DatePrototype.cpp:
    3026         * kjs/DatePrototype.h:
    3027         * kjs/date_object.cpp: Removed.
    3028         * kjs/date_object.h: Removed.
    3029 
    3030 2008-06-30  Sam Weinig  <[email protected]>
    3031 
    3032         Rubber-stamped by Darin Adler.
    3033 
    3034         Remove internal.cpp and move its contents to there own .cpp files.
    3035 
    3036         * GNUmakefile.am:
    3037         * JavaScriptCore.pri:
    3038         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    3039         * JavaScriptCore.xcodeproj/project.pbxproj:
    3040         * JavaScriptCoreSources.bkl:
    3041         * kjs/AllInOneFile.cpp:
    3042         * kjs/GetterSetter.cpp: Copied from kjs/internal.cpp.
    3043         * kjs/InternalFunction.cpp: Copied from kjs/internal.cpp.
    3044         * kjs/JSNumberCell.cpp: Copied from kjs/internal.cpp.
    3045         * kjs/JSString.cpp: Copied from kjs/internal.cpp.
    3046         * kjs/JSString.h:
    3047         * kjs/LabelStack.cpp: Copied from kjs/internal.cpp.
    3048         * kjs/NumberConstructor.cpp:
    3049         * kjs/NumberObject.cpp:
    3050         (KJS::constructNumber):
    3051         (KJS::constructNumberFromImmediateNumber):
    3052         * kjs/internal.cpp: Removed.
    3053 
    3054 2008-06-30  Adam Roben  <[email protected]>
    3055 
    3056         Fix <rdar://5954749> Assertion failure due to HashTable's use of
    3057         operator&
    3058 
    3059         HashTable was passing &value to constructDeletedValue, which in
    3060         classes like WebCore::COMPtr would cause an assertion. We now pass
    3061         value by reference instead of by address so that the HashTraits
    3062         implementations have more flexibility in constructing the deleted
    3063         value.
    3064 
    3065         Reviewed by Ada Chan.
    3066 
    3067         * VM/CodeGenerator.h: Updated for changes to HashTraits.
    3068         * wtf/HashTable.h:
    3069         (WTF::::deleteBucket): Changed to pass bucket by reference instead of
    3070         by address.
    3071         (WTF::::checkKey): Ditto.
    3072         * wtf/HashTraits.h:
    3073         (WTF::): Updated HashTraits for HashTable change.
    3074 
    3075 2008-07-01  Alexey Proskuryakov  <[email protected]>
    3076 
    3077         Reviewed by Cameron Zwarich.
    3078 
    3079         Make RegisterFile really unmap memory on destruction.
    3080 
    3081         This fixes run-webkit-tests --threaded, which ran out of address space in a few seconds.
    3082 
    3083         * VM/RegisterFile.cpp: (KJS::RegisterFile::~RegisterFile): Unmap all the memory, not just
    3084         1/4 of it.
    3085 
    3086         * kjs/JSGlobalObject.h: Don't include RegisterFile.h, so that changes to it don't make
    3087         half of WebCore rebuild.
    3088 
    3089         * VM/Machine.h: Don't forward declare RegisterFile, as RegisterFile.h is included already.
    3090 
    3091         * VM/RegisterFile.h: (KJS::RegisterFile::RegisterFile): Assert that the allocation succeeded.
    3092 
    3093 2008-06-30  Cameron Zwarich  <[email protected]>
    3094 
    3095         Rubber-stamped by Oliver.
    3096 
    3097         Correct the documentation for op_put_by_index.
    3098 
    3099         * VM/Machine.cpp:
    3100         (KJS::Machine::privateExecute):
    3101 
    3102 2008-06-29  Cameron Zwarich  <[email protected]>
    3103 
    3104         Reviewed by Oliver.
    3105 
    3106         Bug 19821: Merge the instruction pair (less, jfalse)
    3107         <https://bugs.webkit.org/show_bug.cgi?id=19821>
    3108        
    3109         This is a 2.4% win on SunSpider. I needed to add an ALWAYS_INLINE
    3110         intrinisc to CodeGenerator::rewindBinaryOp() to avoid a massive
    3111         regression in regexp-dna.
    3112 
    3113         * VM/CodeBlock.cpp:
    3114         (KJS::CodeBlock::dump):
    3115         * VM/CodeGenerator.cpp:
    3116         (KJS::CodeGenerator::rewindBinaryOp):
    3117         (KJS::CodeGenerator::emitJumpIfFalse):
    3118         * VM/Machine.cpp:
    3119         (KJS::Machine::privateExecute):
    3120         * VM/Opcode.cpp:
    3121         (KJS::):
    3122         * VM/Opcode.h:
    3123 
    3124 2008-06-29  Sam Weinig  <[email protected]>
    3125 
    3126         Fix non-AllInOne builds.
    3127 
    3128         * kjs/JSObject.cpp:
    3129         * kjs/JSValue.cpp:
    3130 
    3131 2008-06-29  Sam Weinig  <[email protected]>
    3132 
    3133         Build fix for Qt.
    3134 
    3135         * kjs/DateMath.cpp:
    3136         * kjs/DatePrototype.cpp:
    3137 
    3138 2008-06-29  Sam Weinig  <[email protected]>
    3139 
    3140         Rubber-stamped by Cameron Zwarich.
    3141 
    3142         Splits ErrorConstructor, ErrorPrototype,  NativeErrorConstructor and
    3143         NativeErrorPrototype out of error_object.h/cpp and renames it ErrorInstance.
    3144 
    3145         * GNUmakefile.am:
    3146         * JavaScriptCore.pri:
    3147         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    3148         * JavaScriptCore.xcodeproj/project.pbxproj:
    3149         * JavaScriptCoreSources.bkl:
    3150         * kjs/AllInOneFile.cpp:
    3151         * kjs/ArrayConstructor.cpp:
    3152         * kjs/ArrayPrototype.cpp:
    3153         * kjs/BooleanPrototype.cpp:
    3154         * kjs/DatePrototype.cpp:
    3155         * kjs/ErrorConstructor.cpp: Copied from kjs/error_object.cpp.
    3156         * kjs/ErrorConstructor.h: Copied from kjs/error_object.h.
    3157         * kjs/ErrorInstance.cpp: Copied from kjs/error_object.cpp.
    3158         * kjs/ErrorInstance.h: Copied from kjs/error_object.h.
    3159         * kjs/ErrorPrototype.cpp: Copied from kjs/error_object.cpp.
    3160         * kjs/ErrorPrototype.h: Copied from kjs/error_object.h.
    3161         * kjs/JSGlobalObject.cpp:
    3162         * kjs/JSObject.cpp:
    3163         * kjs/JSValue.cpp:
    3164         * kjs/NativeErrorConstructor.cpp: Copied from kjs/error_object.cpp.
    3165         * kjs/NativeErrorConstructor.h: Copied from kjs/error_object.h.
    3166         * kjs/NativeErrorPrototype.cpp: Copied from kjs/error_object.cpp.
    3167         * kjs/NativeErrorPrototype.h: Copied from kjs/error_object.h.
    3168         * kjs/NumberPrototype.cpp:
    3169         * kjs/RegExpConstructor.cpp:
    3170         * kjs/RegExpObject.cpp:
    3171         * kjs/RegExpPrototype.cpp:
    3172         * kjs/StringPrototype.cpp:
    3173         * kjs/error_object.cpp: Removed.
    3174         * kjs/error_object.h: Removed.
    3175         * kjs/internal.cpp:
    3176 
    3177 2008-06-29  Sam Weinig  <[email protected]>
    3178 
    3179         Fix non-AllInOne build.
    3180 
    3181         * kjs/DateConstructor.cpp:
    3182         * kjs/DateMath.cpp:
    3183         * kjs/JSObject.cpp:
    3184 
    3185 2008-06-29  Sam Weinig  <[email protected]>
    3186 
    3187         Rubber-stamped by Oliver Hunt.
    3188 
    3189         Splits DateConstructor and DatePrototype out of date_object.h/cpp
    3190         Moves shared Date code into DateMath.
    3191 
    3192         * DerivedSources.make:
    3193         * GNUmakefile.am:
    3194         * JavaScriptCore.pri:
    3195         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    3196         * JavaScriptCore.xcodeproj/project.pbxproj:
    3197         * JavaScriptCoreSources.bkl:
    3198         * kjs/AllInOneFile.cpp:
    3199         * kjs/DateConstructor.cpp: Copied from kjs/date_object.cpp.
    3200         * kjs/DateConstructor.h: Copied from kjs/date_object.h.
    3201         * kjs/DateMath.cpp:
    3202         (KJS::ymdhmsToSeconds):
    3203         (KJS::):
    3204         (KJS::skipSpacesAndComments):
    3205         (KJS::findMonth):
    3206         (KJS::parseDate):
    3207         (KJS::timeClip):
    3208         (KJS::formatDate):
    3209         (KJS::formatDateUTCVariant):
    3210         (KJS::formatTime):
    3211         * kjs/DateMath.h:
    3212         (KJS::gmtoffset):
    3213         * kjs/DatePrototype.cpp: Copied from kjs/date_object.cpp.
    3214         * kjs/DatePrototype.h: Copied from kjs/date_object.h.
    3215         * kjs/JSGlobalObject.cpp:
    3216         * kjs/JSObject.cpp:
    3217         * kjs/date_object.cpp:
    3218         * kjs/date_object.h:
    3219         * kjs/internal.cpp:
    3220 
    3221 2008-06-29  Jan Michael Alonzo  <[email protected]>
    3222 
    3223         Rubber-stamped by Cameron Zwarich
    3224 
    3225         Fix Gtk non-AllInOne build
    3226 
    3227         * GNUmakefile.am: include JSVariableObject.cpp
    3228         * kjs/RegExpConstructor.cpp: include RegExpObject.h
    3229         * kjs/RegExpObject.h: forward declare RegExpPrototype
    3230 
    3231 2008-06-28  Darin Adler  <[email protected]>
    3232 
    3233         Reviewed by Sam and Cameron.
    3234 
    3235         - fix https://bugs.webkit.org/show_bug.cgi?id=19805
    3236           Array.concat turns missing array elements into "undefined"
    3237 
    3238         Test: fast/js/array-holes.html
    3239 
    3240         * JavaScriptCore.exp: No longer export JSArray::getItem.
    3241 
    3242         * kjs/ArrayPrototype.cpp:
    3243         (KJS::arrayProtoFuncConcat): Changed to use getProperty instead of
    3244         JSArray::getItem -- need to handle properties from the prototype chain
    3245         instead of ignoring them.
    3246 
    3247         * kjs/JSArray.cpp: Removed getItem.
    3248         * kjs/JSArray.h: Ditto.
    3249 
    3250 2008-06-28  Darin Adler  <[email protected]>
    3251 
    3252         Reviewed by Cameron.
    3253 
    3254         - https://bugs.webkit.org/show_bug.cgi?id=19804
    3255           optimize access to arrays without "holes"
    3256 
    3257         SunSpider says 1.8% faster.
    3258 
    3259         * kjs/JSArray.cpp:
    3260         (KJS::JSArray::JSArray): Initialize m_fastAccessCutoff when creating
    3261         arrays. Also updated for new location of m_vectorLength.
    3262         (KJS::JSArray::getItem): Updated for new location of m_vectorLength.
    3263         (KJS::JSArray::getSlowCase): Added. Broke out the non-hot parts of
    3264         getOwnPropertySlot to make the hot part faster.
    3265         (KJS::JSArray::getOwnPropertySlot): Added a new faster case for
    3266         indices lower than m_fastAccessCutoff. We can do theese with no
    3267         additional checks or branches.
    3268         (KJS::JSArray::put): Added a new faster case for indices lower than
    3269         m_fastAccessCutoff. We can do theese with no additional checks or
    3270         branches. Moved the maxArrayIndex handling out of this function.
    3271         Added code to set m_fastAccessCutoff when the very last hole in
    3272         an array is filled; this is how the cutoff gets set for most arrays.
    3273         (KJS::JSArray::putSlowCase): Moved the rest of the put function logic
    3274         in here, to make the hot part of the put function faster.
    3275         (KJS::JSArray::deleteProperty): Added code to lower m_fastAccessCutoff
    3276         when a delete makes a new hole in the array.
    3277         (KJS::JSArray::getPropertyNames): Updated for new location of
    3278         m_vectorLength.
    3279         (KJS::JSArray::increaseVectorLength): Ditto.
    3280         (KJS::JSArray::setLength): Added code to lower m_fastAccessCutoff
    3281         when setLength makes the array smaller.
    3282         (KJS::JSArray::mark): Updated for new location of m_vectorLength.
    3283         (KJS::JSArray::sort): Ditto. Set m_fastAccessCutoff after moving
    3284         all the holes to the end of the array.
    3285         (KJS::JSArray::compactForSorting): Ditto.
    3286         (KJS::JSArray::checkConsistency): Added consistency checks fro
    3287         m_fastAccessCutoff and updated for the new location of m_vectorLength.
    3288 
    3289         * kjs/JSArray.h: Added declarations for slow case functions.
    3290         Replaced m_vectorLength with m_fastAccessCutoff.
    3291 
    3292 2008-06-28  Cameron Zwarich  <[email protected]>
    3293 
    3294         Reviewed by Sam.
    3295 
    3296         When executing a native call, check for an exception before writing the
    3297         return value.
    3298 
    3299         * VM/Machine.cpp:
    3300         (KJS::Machine::privateExecute):
    3301 
    3302 2008-06-28  Mark Rowe  <[email protected]>
    3303 
    3304         Build fix.  Flag headers as private or public as is appropriate.
    3305         These settings were accidentally removed during some project file cleanup.
    3306 
    3307         * JavaScriptCore.xcodeproj/project.pbxproj:
    3308 
    3309 2008-06-28  Sam Weinig  <[email protected]>
    3310 
    3311         Rubber-stamped by Darin Adler.
    3312 
    3313         Splits RegExpConstructor and RegExpPrototype out of RegExpObject.h/cpp
    3314 
    3315         * DerivedSources.make:
    3316         * GNUmakefile.am:
    3317         * JavaScriptCore.pri:
    3318         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    3319         * JavaScriptCore.xcodeproj/project.pbxproj:
    3320         * JavaScriptCoreSources.bkl:
    3321         * VM/Machine.cpp:
    3322         * kjs/AllInOneFile.cpp:
    3323         * kjs/JSGlobalObject.cpp:
    3324         * kjs/RegExpConstructor.cpp: Copied from kjs/RegExpObject.cpp.
    3325         * kjs/RegExpConstructor.h: Copied from kjs/RegExpObject.h.
    3326         * kjs/RegExpObject.cpp:
    3327         * kjs/RegExpObject.h:
    3328         * kjs/RegExpPrototype.cpp: Copied from kjs/RegExpObject.cpp.
    3329         * kjs/RegExpPrototype.h: Copied from kjs/RegExpObject.h.
    3330         * kjs/StringPrototype.cpp:
    3331         * kjs/internal.cpp:
    3332 
    3333 2008-06-28  Sam Weinig  <[email protected]>
    3334 
    3335         Fix non-AllInOne builds.
    3336 
    3337         * kjs/StringConstructor.cpp:
    3338 
    3339 2008-06-28  Sam Weinig  <[email protected]>
    3340 
    3341         Rubber-stamped by Darin Adler.
    3342 
    3343         Rename string_object.h/cpp to StringObject.h/cpp and split out StringObjectThatMasqueradesAsUndefined,
    3344         StringConstructor and StringPrototype.
    3345 
    3346         * DerivedSources.make:
    3347         * GNUmakefile.am:
    3348         * JavaScriptCore.pri:
    3349         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    3350         * JavaScriptCore.xcodeproj/project.pbxproj:
    3351         * JavaScriptCoreSources.bkl:
    3352         * kjs/AllInOneFile.cpp:
    3353         * kjs/JSGlobalObject.cpp:
    3354         * kjs/StringConstructor.cpp: Copied from JavaScriptCore/kjs/string_object.cpp.
    3355         * kjs/StringConstructor.h: Copied from JavaScriptCore/kjs/string_object.h.
    3356         * kjs/StringObject.cpp: Copied from JavaScriptCore/kjs/string_object.cpp.
    3357         * kjs/StringObject.h: Copied from JavaScriptCore/kjs/string_object.h.
    3358         * kjs/StringObjectThatMasqueradesAsUndefined.h: Copied from JavaScriptCore/kjs/string_object.h.
    3359         * kjs/StringPrototype.cpp: Copied from JavaScriptCore/kjs/string_object.cpp.
    3360         * kjs/StringPrototype.h: Copied from JavaScriptCore/kjs/string_object.h.
    3361         * kjs/internal.cpp:
    3362         * kjs/string_object.cpp: Removed.
    3363         * kjs/string_object.h: Removed.
    3364 
    3365 2008-06-28  Jan Michael Alonzo  <[email protected]>
    3366 
    3367         Gtk build fix: JSVariableObject is now part of AllInOne
    3368 
    3369         * GNUmakefile.am:
    3370 
    3371 2008-06-28  Darin Adler  <[email protected]>
    3372 
    3373         Reviewed by Oliver.
    3374 
    3375         - https://bugs.webkit.org/show_bug.cgi?id=19801
    3376           add a feature so we can tell what regular expressions are taking time
    3377 
    3378         * pcre/pcre_compile.cpp:
    3379         (jsRegExpCompile): Compile in the string if REGEXP_HISTOGRAM is on.
    3380 
    3381         * pcre/pcre_exec.cpp:
    3382         (jsRegExpExecute): Add hook to time execution.
    3383         (Histogram::~Histogram): Print a sorted list of what took time.
    3384         (Histogram::add): Accumulate records of what took time.
    3385         (HistogramTimeLogger::~HistogramTimeLogger): Hook that calls
    3386         Histogram::add at the right moment and creates the global histogram
    3387         object.
    3388 
    3389         * pcre/pcre_internal.h: Define REGEXP_HISTOGRAM.
    3390 
    3391         * pcre/pcre_tables.cpp: Added missing include of "config.h". Not needed
    3392         any more, but an omissions an earlier version of this patch detected.
    3393         * pcre/pcre_ucp_searchfuncs.cpp: Ditto.
    3394         * pcre/pcre_xclass.cpp: Ditto.
    3395 
    3396 2008-06-28  Sam Weinig  <[email protected]>
    3397 
    3398         Try and fix the Windows build again.
    3399 
    3400         * kjs/RegExpObject.cpp:
    3401         * kjs/date_object.cpp:
    3402         * kjs/error_object.cpp:
    3403 
    3404 2008-06-28  Sam Weinig  <[email protected]>
    3405 
    3406         Rubber-stamped by Darin Adler.
    3407 
    3408         Remove unused StringConstructorFunction class.
    3409 
    3410         * kjs/string_object.h:
    3411 
    3412 2008-06-28  Sam Weinig  <[email protected]>
    3413 
    3414         Fix windows build.
    3415 
    3416         * kjs/ArrayPrototype.cpp:
    3417         * kjs/BooleanPrototype.cpp:
    3418         * kjs/BooleanPrototype.h:
    3419         * kjs/FunctionPrototype.cpp:
    3420         * kjs/JSImmediate.cpp:
    3421         * kjs/JSObject.cpp:
    3422         * kjs/MathObject.cpp:
    3423         * kjs/NumberPrototype.cpp:
    3424         * kjs/NumberPrototype.h:
    3425         * kjs/ObjectConstructor.cpp:
    3426         * kjs/RegExpObject.h:
    3427         * kjs/error_object.h:
    3428         * kjs/string_object.cpp:
    3429 
    3430 2008-06-28  Sam Weinig  <[email protected]>
    3431 
    3432         Rubber-stamped by Oliver Hunt.
    3433 
    3434         Splits FunctionConstructor out of FunctionPrototype.h/cpp
    3435         Splits NumberConstructor and NumberPrototype out of NumberObject.h/cpp
    3436         Rename object_object.h/cpp to ObjectPrototype.h/cpp and split out ObjectConstructor.
    3437 
    3438         * API/JSCallbackConstructor.cpp:
    3439         * API/JSClassRef.cpp:
    3440         * API/JSObjectRef.cpp:
    3441         * DerivedSources.make:
    3442         * GNUmakefile.am:
    3443         * JavaScriptCore.pri:
    3444         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    3445         * JavaScriptCore.xcodeproj/project.pbxproj:
    3446         * JavaScriptCoreSources.bkl:
    3447         * VM/Machine.cpp:
    3448         * kjs/AllInOneFile.cpp:
    3449         * kjs/ArrayConstructor.cpp:
    3450         * kjs/ArrayConstructor.h:
    3451         * kjs/FunctionConstructor.cpp: Copied from JavaScriptCore/kjs/FunctionPrototype.cpp.
    3452         * kjs/FunctionConstructor.h: Copied from JavaScriptCore/kjs/FunctionPrototype.h.
    3453         * kjs/FunctionPrototype.cpp:
    3454         * kjs/FunctionPrototype.h:
    3455         * kjs/JSFunction.cpp:
    3456         * kjs/JSGlobalObject.cpp:
    3457         * kjs/JSImmediate.cpp:
    3458         * kjs/MathObject.h:
    3459         * kjs/NumberConstructor.cpp: Copied from JavaScriptCore/kjs/NumberObject.cpp.
    3460         * kjs/NumberConstructor.h: Copied from JavaScriptCore/kjs/NumberObject.h.
    3461         * kjs/NumberObject.cpp:
    3462         * kjs/NumberObject.h:
    3463         * kjs/NumberPrototype.cpp: Copied from JavaScriptCore/kjs/NumberObject.cpp.
    3464         * kjs/NumberPrototype.h: Copied from JavaScriptCore/kjs/NumberObject.h.
    3465         * kjs/ObjectConstructor.cpp: Copied from JavaScriptCore/kjs/object_object.cpp.
    3466         * kjs/ObjectConstructor.h: Copied from JavaScriptCore/kjs/object_object.h.
    3467         * kjs/ObjectPrototype.cpp: Copied from JavaScriptCore/kjs/object_object.cpp.
    3468         * kjs/ObjectPrototype.h: Copied from JavaScriptCore/kjs/object_object.h.
    3469         * kjs/RegExpObject.h:
    3470         * kjs/Shell.cpp:
    3471         * kjs/error_object.h:
    3472         * kjs/internal.cpp:
    3473         * kjs/nodes.cpp:
    3474         * kjs/object_object.cpp: Removed.
    3475         * kjs/object_object.h: Removed.
    3476         * kjs/string_object.h:
    3477 
    3478 2008-06-28  Darin Adler  <[email protected]>
    3479 
    3480         Reviewed by Oliver.
    3481 
    3482         - fix https://bugs.webkit.org/show_bug.cgi?id=19796
    3483           optimize expressions with ignored results (especially post-increment)
    3484 
    3485         SunSpider says 0.9% faster.
    3486 
    3487         * VM/CodeGenerator.h:
    3488         (KJS::CodeGenerator::tempDestination): Create a new temporary for
    3489         ignoredResult() too, just as we would for 0.
    3490         (KJS::CodeGenerator::finalDestination): Use the temporary if the
    3491         register passed in is ignoredResult() too, just as we would for 0.
    3492         (KJS::CodeGenerator::destinationForAssignResult): Return 0 if the
    3493         passed in register is ignoredResult(), just as we would for 0.
    3494         (KJS::CodeGenerator::moveToDestinationIfNeeded): Return 0 if the
    3495         register passed in is ignoredResult(). What matters is that we
    3496         don't want to emit a move. The return value won't be looked at.
    3497         (KJS::CodeGenerator::emitNode): Allow ignoredResult() and pass it
    3498         through to the node's emitCode function.
    3499 
    3500         * VM/RegisterID.h:
    3501         (KJS::ignoredResult): Added. Special value to indicate the result of
    3502         a node will be ignored and need not be put in any register.
    3503 
    3504         * kjs/nodes.cpp:
    3505         (KJS::NullNode::emitCode): Do nothing if dst == ignoredResult().
    3506         (KJS::BooleanNode::emitCode): Ditto.
    3507         (KJS::NumberNode::emitCode): Ditto.
    3508         (KJS::StringNode::emitCode): Ditto.
    3509         (KJS::RegExpNode::emitCode): Ditto.
    3510         (KJS::ThisNode::emitCode): Ditto.
    3511         (KJS::ResolveNode::emitCode): Do nothing if dst == ignoredResult() and
    3512         the identifier resolves to a local variable.
    3513         (KJS::ObjectLiteralNode::emitCode): Do nothing if dst == ignoredResult()
    3514         and the object is empty.
    3515         (KJS::PostIncResolveNode::emitCode): If dst == ignoredResult(), then do
    3516         nothing for the local constant case, and do a pre-increment in all the
    3517         other cases.
    3518         (KJS::PostDecResolveNode::emitCode): Ditto.
    3519         (KJS::PostIncBracketNode::emitCode): Ditto.
    3520         (KJS::PostDecBracketNode::emitCode): Ditto.
    3521         (KJS::PostIncDotNode::emitCode): Ditto.
    3522         (KJS::PostDecDotNode::emitCode): Ditto.
    3523         (KJS::DeleteValueNode::emitCode): Pass ignoredResult() when evaluating
    3524         the expression.
    3525         (KJS::VoidNode::emitCode): Ditto.
    3526         (KJS::TypeOfResolveNode::emitCode): If dst == ignoredResult(), do nothing
    3527         if the identifier resolves to a local variable, and don't bother generating
    3528         a typeof opcode in the other case.
    3529         (KJS::TypeOfValueNode::emitCode): Ditto.
    3530         (KJS::PreIncResolveNode::emitCode): Do nothing if dst == ignoredResult() and
    3531         the identifier resolves to a local constant.
    3532         (KJS::PreDecResolveNode::emitCode): Ditto.
    3533         (KJS::AssignResolveNode::emitCode): Turn ignoredResult() into 0 in a couple
    3534         places, because we need to put the result into a register so we can assign
    3535         it. At other sites this is taken care of by functions like finalDestination.
    3536         (KJS::CommaNode::emitCode): Pass ignoredResult() when evaluating the first
    3537         expression.
    3538         (KJS::ForNode::emitCode): Pass ignoredResult() when evaluating the first and
    3539         third expressions.
    3540         (KJS::ForInNode::emitCode): Pass ignoredResult() when evaluating the first
    3541         expression.
    3542 
    3543 2008-06-28  Darin Adler  <[email protected]>
    3544 
    3545         Reviewed by Oliver.
    3546 
    3547         - https://bugs.webkit.org/show_bug.cgi?id=19787
    3548           create most arrays from values in registers rather than with multiple put operations
    3549 
    3550         SunSpider says 0.8% faster.
    3551 
    3552         * VM/CodeBlock.cpp:
    3553         (KJS::CodeBlock::dump): Added argv and argc parameters to new_array.
    3554         * VM/Machine.cpp:
    3555         (KJS::Machine::privateExecute): Ditto.
    3556 
    3557         * VM/CodeGenerator.cpp:
    3558         (KJS::CodeGenerator::emitNewArray): Added.
    3559         * VM/CodeGenerator.h: Added ElementNode* argument to emitNewArray.
    3560 
    3561         * kjs/nodes.cpp:
    3562         (KJS::ArrayNode::emitCode): Pass the ElementNode to emitNewArray so it can be
    3563         initialized with as many elements as possible. If the array doesn't have any
    3564         holes in it, that's all that's needed. If there are holes, then emit some separate
    3565         put operations for the other values in the array and for the length as needed.
    3566 
    3567         * kjs/nodes.h: Added some accessors to ElementNode so the code generator can
    3568         iterate through elements and generate code to evaluate them. Now ArrayNode does
    3569         not need to be a friend. Also took out some unused PlacementNewAdoptType
    3570         constructors.
    3571 
    3572 2008-06-28  Darin Adler  <[email protected]>
    3573 
    3574         Reviewed by Oliver.
    3575 
    3576         * kjs/nodes.h: Remove obsolete PlacementNewAdopt constructors.
    3577         We no longer mutate the AST in place.
    3578 
    3579 2008-06-28  Jan Michael Alonzo  <[email protected]>
    3580 
    3581         Reviewed by Oliver Hunt.
    3582 
    3583         Build fix
    3584 
    3585         * VM/Machine.cpp: include stdio.h for printf
    3586 
    3587 2008-06-27  Sam Weinig  <[email protected]>
    3588 
    3589         Reviewed by Oliver Hunt.
    3590 
    3591         Fix platforms that don't use AllInOne.cpp
    3592 
    3593         * kjs/BooleanConstructor.h:
    3594         * kjs/BooleanPrototype.h:
    3595         * kjs/FunctionPrototype.cpp:
    3596 
    3597 2008-06-27  Sam Weinig  <[email protected]>
    3598 
    3599         Rubber-stamped by Oliver Hunt.
    3600 
    3601         Splits ArrayConstructor out of ArrayPrototype.h/cpp
    3602         Splits BooleanConstructor and BooleanPrototype out of BooleanObject.h/cpp
    3603 
    3604         * GNUmakefile.am:
    3605         * JavaScriptCore.pri:
    3606         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    3607         * JavaScriptCore.xcodeproj/project.pbxproj:
    3608         * JavaScriptCoreSources.bkl:
    3609         * VM/Machine.cpp:
    3610         * kjs/AllInOneFile.cpp:
    3611         * kjs/ArrayConstructor.cpp: Copied from kjs/ArrayPrototype.cpp.
    3612         * kjs/ArrayConstructor.h: Copied from kjs/ArrayPrototype.h.
    3613         * kjs/ArrayPrototype.cpp:
    3614         * kjs/ArrayPrototype.h:
    3615         * kjs/BooleanConstructor.cpp: Copied from kjs/BooleanObject.cpp.
    3616         * kjs/BooleanConstructor.h: Copied from kjs/BooleanObject.h.
    3617         * kjs/BooleanObject.cpp:
    3618         * kjs/BooleanObject.h:
    3619         * kjs/BooleanPrototype.cpp: Copied from kjs/BooleanObject.cpp.
    3620         * kjs/BooleanPrototype.h: Copied from kjs/BooleanObject.h.
    3621         * kjs/CommonIdentifiers.h:
    3622         * kjs/FunctionPrototype.cpp:
    3623         * kjs/JSArray.cpp:
    3624         * kjs/JSGlobalObject.cpp:
    3625         * kjs/JSImmediate.cpp:
    3626         * kjs/Shell.cpp:
    3627         * kjs/internal.cpp:
    3628         * kjs/nodes.cpp:
    3629         * kjs/string_object.cpp:
    3630 
    3631 2008-06-27  Oliver Hunt  <[email protected]>
    3632 
    3633         Reviewed by Sam.
    3634 
    3635         Bug 18626: SQUIRRELFISH: support the "slow script" dialog <https://bugs.webkit.org/show_bug.cgi?id=18626>
    3636         <rdar://problem/5973931> Slow script dialog needs to be reimplemented for squirrelfish
    3637 
    3638         Adds support for the slow script dialog in squirrelfish.  This requires the addition
    3639         of three new op codes, op_loop, op_loop_if_true, and op_loop_if_less which have the
    3640         same behaviour as their simple jump equivalents but have an additional time out check.
    3641 
    3642         Additional assertions were added to other jump instructions to prevent accidentally
    3643         creating loops with jump types that do not support time out checks.
    3644 
    3645         Sunspider does not report a regression, however this appears very sensitive to code
    3646         layout and hardware, so i would expect up to a 1% regression on other systems.
    3647 
    3648         Part of this required moving the old timeout logic from JSGlobalObject and into Machine
    3649         which is the cause of a number of the larger diff blocks.
    3650 
    3651         * JavaScriptCore.exp:
    3652         * VM/CodeBlock.cpp:
    3653         (KJS::CodeBlock::dump):
    3654         * VM/CodeGenerator.cpp:
    3655         (KJS::CodeGenerator::emitJumpIfTrue):
    3656         (KJS::CodeGenerator::emitJumpScopes):
    3657         * VM/ExceptionHelpers.cpp:
    3658         (KJS::InterruptedExecutionError::isWatchdogException):
    3659         (KJS::createInterruptedExecutionException):
    3660         * VM/ExceptionHelpers.h:
    3661         * VM/LabelID.h:
    3662         * VM/Machine.cpp:
    3663         (KJS::Machine::Machine):
    3664         (KJS::Machine::throwException):
    3665         (KJS::Machine::resetTimeoutCheck):
    3666         (KJS::getCurrentTime):
    3667         (KJS::Machine::checkTimeout):
    3668         (KJS::Machine::privateExecute):
    3669         * VM/Machine.h:
    3670         (KJS::Machine::setTimeoutTime):
    3671         (KJS::Machine::startTimeoutCheck):
    3672         (KJS::Machine::stopTimeoutCheck):
    3673         (KJS::Machine::initTimeout):
    3674         * VM/Opcode.cpp:
    3675         (KJS::):
    3676         * VM/Opcode.h:
    3677         * kjs/JSGlobalObject.cpp:
    3678         (KJS::JSGlobalObject::init):
    3679         (KJS::JSGlobalObject::setTimeoutTime):
    3680         (KJS::JSGlobalObject::startTimeoutCheck):
    3681         * kjs/JSGlobalObject.h:
    3682         * kjs/JSObject.h:
    3683         * kjs/interpreter.cpp:
    3684         (KJS::Interpreter::evaluate):
    3685 
    3686 2008-06-27  Jan Michael Alonzo  <[email protected]>
    3687 
    3688         Gtk and Qt build fix: Remove RegisterFileStack from the build
    3689         scripts.
    3690 
    3691         * GNUmakefile.am:
    3692         * JavaScriptCore.pri:
    3693 
    3694 2008-06-27  Adele Peterson  <[email protected]>
    3695 
    3696         Reviewed by Geoff.
    3697 
    3698         Build fixes.
    3699 
    3700         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    3701         * VM/RegisterFile.h:
    3702         (KJS::RegisterFile::RegisterFile):
    3703         * kjs/JSGlobalObject.cpp:
    3704         * kjs/collector.cpp:
    3705 
    3706 2008-06-27  Geoffrey Garen  <[email protected]>
    3707 
    3708         Reviewed by Oliver Hunt.
    3709        
    3710         One RegisterFile to rule them all!
    3711        
    3712         SunSpider reports a 0.2% speedup.
    3713 
    3714         This patch removes the RegisterFileStack abstraction and replaces it with
    3715         a single register file that
    3716        
    3717         (a) allocates a fixed storage area, including a fixed area for global
    3718         vars, so that no operation may cause the register file to reallocate
    3719        
    3720         and
    3721 
    3722         (b) swaps between global storage areas when executing code in different
    3723         global objects.
    3724        
    3725         This patch also changes the layout of the register file so that all call
    3726         frames, including call frames for global code, get a header. This is
    3727         required to support re-entrant global code. It also just makes things simpler.
    3728        
    3729         * VM/CodeGenerator.cpp:
    3730         (KJS::CodeGenerator::addGlobalVar): New function. Differs from addVar in
    3731         that
    3732        
    3733         (a) global vars don't contribute to a CodeBlock's numLocals count, since
    3734         global storage is fixed and allocated at startup
    3735        
    3736         and
    3737        
    3738         (b) references to global vars get shifted to elide intermediate stack
    3739         between "r" and the global storage area.
    3740        
    3741         * VM/Machine.cpp:
    3742         (KJS::Machine::dumpRegisters): Updated this function to match the new
    3743         register file layout, and added the ability to dump exact identifiers
    3744         for the different parts of a call frame.
    3745        
    3746         (KJS::Machine::unwindCallFrame): Updated this function to match the new
    3747         register file layout.
    3748          
    3749         (KJS::Machine::execute): Updated this function to initialize a call frame
    3750         header for global code, and to swap global storage areas when switching
    3751         to execution in a new global object.
    3752        
    3753         (KJS::Machine::privateExecute): Got rid of "safeForReentry" and re-reading
    3754         of registerBase because the register file is always safe for reentry now,
    3755         and registerBase never changes.
    3756        
    3757         * VM/Machine.h: Moved the call frame header enum from Machine to RegisterFile,
    3758         to resolve a header dependency problem (a good sign that the enum belonged
    3759         in RegisterFile all along!)
    3760 
    3761         * VM/RegisterFile.cpp:
    3762         * VM/RegisterFile.h: Changed RegisterFile to mmap a fixed size register
    3763         area. This allows us to avoid re-allocting the register file later on.
    3764         Instead, we rely on the OS to allocate physical pages to the register
    3765         file as necessary.
    3766 
    3767         * VM/RegisterFileStack.cpp: Removed. Tada!
    3768         * VM/RegisterFileStack.h: Removed. Tada!
    3769 
    3770         * kjs/DebuggerCallFrame.cpp: Updated this class to match the new
    3771         register file layout, greatly simplifying it in the process.
    3772 
    3773         * kjs/JSActivation.h:
    3774         * kjs/JSActivation.cpp: Moved some of this logic up to JSVariableObject,
    3775         since the global object now needs to be able to tear off its registers
    3776         just like the activation object.
    3777 
    3778         * kjs/JSFunction.cpp: No need to fiddle with the register file anymore.
    3779 
    3780         * kjs/JSGlobalObject.h:
    3781         * kjs/JSGlobalObject.cpp: Updated JSGlobalObject to support moving its
    3782         global storage area into and out of the register file.
    3783 
    3784         * kjs/PropertySlot.cpp: No need to fiddle with the register file anymore.
    3785 
    3786         * kjs/collector.cpp: Renamed markStackObjectConservatively to
    3787         markConservatively, since we don't just mark stack objects this way.
    3788        
    3789         Also, added code to mark the machine's register file.
    3790 
    3791         * kjs/config.h: Moved some platforms #defines from here...
    3792         * wtf/Platform.h: ...to here, to support mmap/VirtualAlloc detection
    3793         in RegisterFile.h.
    3794 
    3795 2008-06-26  Mark Rowe  <[email protected]>
    3796 
    3797         Speculative fix for the Windows build.
    3798 
    3799         * kjs/JSImmediate.cpp:
    3800 
    3801 2008-06-26  Mark Rowe  <[email protected]>
    3802 
    3803         Reviewed by Darin Adler and Geoff Garen.
    3804 
    3805         Fix the malloc zone introspection functions so that malloc_zone_statistics does not give
    3806         bogus output in an application that uses JavaScriptCore.
    3807 
    3808         * kjs/CollectorHeapIntrospector.cpp:
    3809         (KJS::CollectorHeapIntrospector::statistics): Return statistics about memory allocated by the collector.
    3810         * kjs/CollectorHeapIntrospector.h:
    3811         * wtf/FastMalloc.cpp: Zero out the statistics.  FastMalloc doesn't track this information at present.
    3812         Returning zero for all values is preferable to returning bogus data.
    3813 
    3814 2008-06-26  Darin Adler  <[email protected]>
    3815 
    3816         Reviewed by Geoff.
    3817 
    3818         - https://bugs.webkit.org/show_bug.cgi?id=19721
    3819           speed up JavaScriptCore by not wrapping strings in objects just
    3820           to call functions on them
    3821 
    3822         - optimize UString append and the replace function a bit
    3823 
    3824         SunSpider says 1.8% faster.
    3825 
    3826         * JavaScriptCore.exp: Updated.
    3827 
    3828         * VM/JSPropertyNameIterator.cpp: Added include of JSString.h, now needed
    3829         because jsString returns a JSString*.
    3830 
    3831         * VM/Machine.cpp:
    3832         (KJS::Machine::privateExecute): Removed the toObject call from native
    3833         function calls. Also removed code to put the this value into a register.
    3834 
    3835         * kjs/BooleanObject.cpp:
    3836         (KJS::booleanProtoFuncToString): Rewrite to handle false and true
    3837         separately.
    3838 
    3839         * kjs/FunctionPrototype.cpp:
    3840         (KJS::constructFunction): Use single-character append rather than building
    3841         a string for each character.
    3842         * kjs/JSFunction.cpp:
    3843         (KJS::globalFuncUnescape): Ditto.
    3844 
    3845         * kjs/JSImmediate.cpp:
    3846         (KJS::JSImmediate::prototype): Added. Gets the appropriate prototype for
    3847         use with an immediate value. To be used instead of toObject when doing a
    3848         get on an immediate value.
    3849         * kjs/JSImmediate.h: Added prototype.
    3850 
    3851         * kjs/JSObject.cpp:
    3852         (KJS::JSObject::toString): Tweaked formatting.
    3853 
    3854         * kjs/JSObject.h:
    3855         (KJS::JSValue::get): Use prototype instead of toObject to avoid creating
    3856         an object wrapper just to search for properties. This also saves an
    3857         unnecessary hash table lookup since the object wrappers themselves don't
    3858         have any properties.
    3859 
    3860         * kjs/JSString.h: Added toThisString and toThisJSString.
    3861 
    3862         * kjs/JSValue.cpp:
    3863         (KJS::JSCell::toThisString): Added.
    3864         (KJS::JSCell::toThisJSString): Added.
    3865         (KJS::JSCell::getJSNumber): Added.
    3866         (KJS::jsString): Changed return type to JSString*.
    3867         (KJS::jsOwnedString): Ditto.
    3868 
    3869         * kjs/JSValue.h:
    3870         (KJS::JSValue::toThisString): Added.
    3871         (KJS::JSValue::toThisJSString): Added.
    3872         (KJS::JSValue::getJSNumber): Added.
    3873 
    3874         * kjs/NumberObject.cpp:
    3875         (KJS::NumberObject::getJSNumber): Added.
    3876         (KJS::integer_part_noexp): Append C string directly rather than first
    3877         turning it into a UString.
    3878         (KJS::numberProtoFuncToString): Use getJSNumber to check if the value
    3879         is a number rather than isObject(&NumberObject::info). This works for
    3880         immediate numbers, number cells, and NumberObject instances.
    3881         (KJS::numberProtoFuncToLocaleString): Ditto.
    3882         (KJS::numberProtoFuncValueOf): Ditto.
    3883         (KJS::numberProtoFuncToFixed): Ditto.
    3884         (KJS::numberProtoFuncToExponential): Ditto.
    3885         (KJS::numberProtoFuncToPrecision): Ditto.
    3886         * kjs/NumberObject.h: Added getJSNumber.
    3887 
    3888         * kjs/PropertySlot.cpp: Tweaked comment.
    3889 
    3890         * kjs/internal.cpp:
    3891         (KJS::JSString::toThisString): Added.
    3892         (KJS::JSString::toThisJSString): Added.
    3893         (KJS::JSString::getOwnPropertySlot): Changed code that searches the
    3894         prototype chain to start with the string prototype and not create a
    3895         string object.
    3896         (KJS::JSNumberCell::toThisString): Added.
    3897         (KJS::JSNumberCell::getJSNumber): Added.
    3898 
    3899         * kjs/lookup.cpp:
    3900         (KJS::staticFunctionGetter): Moved here, because there's no point in
    3901         having a function that's only used for a function pointer be inline.
    3902         (KJS::setUpStaticFunctionSlot): New function for getStaticFunctionSlot.
    3903 
    3904         * kjs/lookup.h:
    3905         (KJS::staticValueGetter): Don't mark this inline. It doesn't make sense
    3906         to have a function that's only used for a function pointer be inline.
    3907         (KJS::getStaticFunctionSlot): Changed to get properties from the parent
    3908         first before doing any handling of functions. This is the fastest way
    3909         to return the function once the initial setup is done.
    3910 
    3911         * kjs/string_object.cpp:
    3912         (KJS::StringObject::getPropertyNames): Call value() instead of getString(),
    3913         avoiding an unnecessary virtual function call (the call to the type()
    3914         function in the implementation of the isString() function).
    3915         (KJS::StringObject::toString): Added.
    3916         (KJS::StringObject::toThisString): Added.
    3917         (KJS::StringObject::toThisJSString): Added.
    3918         (KJS::substituteBackreferences): Rewrote to use a appending algorithm
    3919         instead of a the old one that tried to replace in place.
    3920         (KJS::stringProtoFuncReplace): Merged this function and the replace function.
    3921         Replaced the hand-rolled dynamic arrays for source ranges and replacements
    3922         with Vector.
    3923         (KJS::stringProtoFuncToString): Handle JSString as well as StringObject.
    3924         Removed the separate valueOf implementation, since it can just share this.
    3925         (KJS::stringProtoFuncCharAt): Use toThisString, which handles JSString as
    3926         well as StringObject, and is slightly more efficient than the old code too.
    3927         (KJS::stringProtoFuncCharCodeAt): Ditto.
    3928         (KJS::stringProtoFuncConcat): Ditto.
    3929         (KJS::stringProtoFuncIndexOf): Ditto.
    3930         (KJS::stringProtoFuncLastIndexOf): Ditto.
    3931         (KJS::stringProtoFuncMatch): Ditto.
    3932         (KJS::stringProtoFuncSearch): Ditto.
    3933         (KJS::stringProtoFuncSlice): Ditto.
    3934         (KJS::stringProtoFuncSplit): Ditto.
    3935         (KJS::stringProtoFuncSubstr): Ditto.
    3936         (KJS::stringProtoFuncSubstring): Ditto.
    3937         (KJS::stringProtoFuncToLowerCase): Use toThisJSString.
    3938         (KJS::stringProtoFuncToUpperCase): Ditto.
    3939         (KJS::stringProtoFuncToLocaleLowerCase): Ditto.
    3940         (KJS::stringProtoFuncToLocaleUpperCase): Ditto.
    3941         (KJS::stringProtoFuncLocaleCompare): Ditto.
    3942         (KJS::stringProtoFuncBig): Use toThisString.
    3943         (KJS::stringProtoFuncSmall): Ditto.
    3944         (KJS::stringProtoFuncBlink): Ditto.
    3945         (KJS::stringProtoFuncBold): Ditto.
    3946         (KJS::stringProtoFuncFixed): Ditto.
    3947         (KJS::stringProtoFuncItalics): Ditto.
    3948         (KJS::stringProtoFuncStrike): Ditto.
    3949         (KJS::stringProtoFuncSub): Ditto.
    3950         (KJS::stringProtoFuncSup): Ditto.
    3951         (KJS::stringProtoFuncFontcolor): Ditto.
    3952         (KJS::stringProtoFuncFontsize): Ditto.
    3953         (KJS::stringProtoFuncAnchor): Ditto.
    3954         (KJS::stringProtoFuncLink): Ditto.
    3955 
    3956         * kjs/string_object.h: Added toString, toThisString, and toThisJSString.
    3957 
    3958         * kjs/ustring.cpp:
    3959         (KJS::UString::append): Added a version that takes a character pointer and
    3960         size, so we don't have to create a UString just to append to another UString.
    3961         * kjs/ustring.h:
    3962 
    3963 2008-06-26  Alexey Proskuryakov  <[email protected]>
    3964 
    3965         Reviewed by Maciej.
    3966 
    3967         Make JSGlobalData per-thread.
    3968 
    3969         No change on SunSpider total.
    3970 
    3971         * wtf/ThreadSpecific.h: Re-enabled the actual implementation.
    3972 
    3973         * kjs/JSGlobalObject.cpp:
    3974         (KJS::JSGlobalObject::~JSGlobalObject): Re-added a JSLock-related assertion. We'll probably
    3975         want to preserve these somehow to keep legacy behavior in working condition.
    3976         (KJS::JSGlobalObject::init): Initialize globalData pointer earlier, so that it is ready
    3977         when updating JSGlobalObject linked list.
    3978 
    3979         * kjs/JSGlobalObject.h: (KJS::JSGlobalObject::head): Changed head() to be non-static, and
    3980         to use JSGlobalData associated with the current object.
    3981 
    3982         * kjs/InitializeThreading.cpp: (KJS::initializeThreadingOnce): Removed a no longer needed
    3983         Heap::registerAsMainThread() call.
    3984 
    3985         * kjs/JSGlobalData.h: Removed a lying lie comment - parserObjectExtraRefCounts is not
    3986         transient, and while newParserObjects may conceptually be such, there is still some node
    3987         manipulation going on outside Parser::parse which touches it.
    3988 
    3989         * kjs/JSGlobalData.cpp:
    3990         (KJS::JSGlobalData::~JSGlobalData): Delete recently added members.
    3991         (KJS::JSGlobalData::sharedInstance): Actually use a separate instance.
    3992 
    3993         * kjs/collector.cpp:
    3994         (KJS::Heap::Heap):
    3995         (KJS::Heap::~Heap): Added a destructor, which unconditionally deletes everything.
    3996         (KJS::Heap::sweep): Removed code related to "collect on main thread only" logic.
    3997         (KJS::Heap::collect): Ditto.
    3998         (KJS::Heap::globalObjectCount): Explicitly use per-thread instance of JSGlobalObject linked
    3999         list now that JSGlobalObject::head() is not static. Curently, WebCoreStatistics methods only
    4000         work with the main thread currently anyway.
    4001         (KJS::Heap::protectedGlobalObjectCount): Ditto.
    4002 
    4003         * kjs/collector.h: Removed code related to "collect on main thread only" logic.
    4004 
    4005         * JavaScriptCore.exp: Removed Heap::collectOnMainThreadOnly.
    4006 
    4007 2008-06-26  Alexey Proskuryakov  <[email protected]>
    4008 
    4009         Reviewed by Darin.
    4010 
    4011         https://bugs.webkit.org/show_bug.cgi?id=19767
    4012         REGRESSION: Crash in sort() when visiting http://www.onnyturf.com/subway/
    4013 
    4014         * kjs/JSArray.cpp: (KJS::AVLTreeAbstractorForArrayCompare::set_balance_factor):
    4015         Made changing balance factor from -1 to +1 work correctly.
    4016 
    4017         * wtf/AVLTree.h: (KJS::AVLTreeDefaultBSet::operator[]): Added an assertion that catches
    4018         this slightly earlier.
    4019 
    4020 2008-06-25  Timothy Hatcher  <[email protected]>
    4021 
    4022         Fixes an ASSERT in the profiler when starting multiple profiles
    4023         with the same name inside the same function/program.
    4024 
    4025         Reviewed by Kevin McCullough.
    4026 
    4027         * profiler/Profile.cpp:
    4028         (KJS::Profile::Profile): Initialize m_stoppedCallDepth to zero.
    4029         (KJS::Profile::stopProfiling): Set the current node to the parent,
    4030         because we are in a call that will not get a didExecute call.
    4031         (KJS::Profile::removeProfile): Increment m_stoppedCallDepth to
    4032         account for didExecute not being called for profile.
    4033         (KJS::Profile::willExecute): Increment m_stoppedCallDepth if stopped.
    4034         (KJS::Profile::didExecute): Decrement m_stoppedCallDepth if stopped and
    4035         greater than zero, and return early.
    4036         * profiler/Profile.h: Added stoppedProfiling().
    4037         * profiler/Profiler.cpp:
    4038         (KJS::Profiler::findProfile): Removed.
    4039         (KJS::Profiler::startProfiling): Don't return early for stopped profiles.
    4040         (KJS::Profiler::stopProfiling): Skipp stopped profiles.
    4041         (KJS::Profiler::didFinishAllExecution): Code clean-up.
    4042         * profiler/Profiler.h: Removed findProfile.
    4043 
    4044 2008-06-25  Cameron Zwarich  <[email protected]>
    4045 
    4046         Reviewed by Alexey Proskuryakov.
    4047 
    4048         Attempt to fix Windows debug build. The compiler gives a warning when
    4049         Structured Exception Handling and destructors are used in the same
    4050         function. Using manual locking and unlocking instead of constructors
    4051         and destructors should fix the warning.
    4052 
    4053         * kjs/Shell.cpp:
    4054         (main):
    4055 
    4056 2008-06-25  Alexey Proskuryakov  <[email protected]>
    4057 
    4058         Forgot to address a review comment about better names for tracked objects, doing it now.
    4059 
    4060         * kjs/JSGlobalData.cpp:
    4061         (KJS::JSGlobalData::JSGlobalData):
    4062         * kjs/JSGlobalData.h:
    4063         * kjs/nodes.cpp:
    4064         (KJS::ParserRefCounted::ParserRefCounted):
    4065         (KJS::ParserRefCounted::ref):
    4066         (KJS::ParserRefCounted::deref):
    4067         (KJS::ParserRefCounted::hasOneRef):
    4068         (KJS::ParserRefCounted::deleteNewObjects):
    4069 
    4070 2008-06-25  Alexey Proskuryakov  <[email protected]>
    4071 
    4072         Reviewed by Geoff.
    4073 
    4074         Remove more threadInstance() calls.
    4075 
    4076         * kjs/JSFunction.cpp:
    4077         (KJS::JSFunction::getParameterName):
    4078         (KJS::IndexToNameMap::unMap):
    4079         (KJS::Arguments::deleteProperty):
    4080         * kjs/JSFunction.h:
    4081         Access nullIdentifier without going to thread specific storage.
    4082 
    4083         * JavaScriptCore.exp:
    4084         * kjs/JSGlobalData.cpp:
    4085         (KJS::JSGlobalData::JSGlobalData):
    4086         * kjs/JSGlobalData.h:
    4087         * kjs/Parser.cpp:
    4088         (KJS::Parser::parse):
    4089         * kjs/Parser.h:
    4090         (KJS::ParserRefCountedData::ParserRefCountedData):
    4091         (KJS::Parser::parse):
    4092         * kjs/grammar.y:
    4093         * kjs/nodes.cpp:
    4094         (KJS::ParserRefCounted::ParserRefCounted):
    4095         (KJS::ParserRefCounted::ref):
    4096         (KJS::ParserRefCounted::deref):
    4097         (KJS::ParserRefCounted::hasOneRef):
    4098         (KJS::ParserRefCounted::deleteNewObjects):
    4099         (KJS::Node::Node):
    4100         (KJS::StatementNode::StatementNode):
    4101         (KJS::BreakpointCheckStatement::BreakpointCheckStatement):
    4102         (KJS::ConstDeclNode::ConstDeclNode):
    4103         (KJS::BlockNode::BlockNode):
    4104         (KJS::ForInNode::ForInNode):
    4105         (KJS::ScopeNode::ScopeNode):
    4106         (KJS::ProgramNode::ProgramNode):
    4107         (KJS::ProgramNode::create):
    4108         (KJS::EvalNode::EvalNode):
    4109         (KJS::EvalNode::create):
    4110         (KJS::FunctionBodyNode::FunctionBodyNode):
    4111         (KJS::FunctionBodyNode::create):
    4112         * kjs/nodes.h:
    4113         (KJS::ExpressionNode::):
    4114         (KJS::NullNode::):
    4115         (KJS::BooleanNode::):
    4116         (KJS::NumberNode::):
    4117         (KJS::ImmediateNumberNode::):
    4118         (KJS::StringNode::):
    4119         (KJS::RegExpNode::):
    4120         (KJS::ThisNode::):
    4121         (KJS::ResolveNode::):
    4122         (KJS::ElementNode::):
    4123         (KJS::ArrayNode::):
    4124         (KJS::PropertyNode::):
    4125         (KJS::PropertyListNode::):
    4126         (KJS::ObjectLiteralNode::):
    4127         (KJS::BracketAccessorNode::):
    4128         (KJS::DotAccessorNode::):
    4129         (KJS::ArgumentListNode::):
    4130         (KJS::ArgumentsNode::):
    4131         (KJS::NewExprNode::):
    4132         (KJS::EvalFunctionCallNode::):
    4133         (KJS::FunctionCallValueNode::):
    4134         (KJS::FunctionCallResolveNode::):
    4135         (KJS::FunctionCallBracketNode::):
    4136         (KJS::FunctionCallDotNode::):
    4137         (KJS::PrePostResolveNode::):
    4138         (KJS::PostIncResolveNode::):
    4139         (KJS::PostDecResolveNode::):
    4140         (KJS::PostfixBracketNode::):
    4141         (KJS::PostIncBracketNode::):
    4142         (KJS::PostDecBracketNode::):
    4143         (KJS::PostfixDotNode::):
    4144         (KJS::PostIncDotNode::):
    4145         (KJS::PostDecDotNode::):
    4146         (KJS::PostfixErrorNode::):
    4147         (KJS::DeleteResolveNode::):
    4148         (KJS::DeleteBracketNode::):
    4149         (KJS::DeleteDotNode::):
    4150         (KJS::DeleteValueNode::):
    4151         (KJS::VoidNode::):
    4152         (KJS::TypeOfResolveNode::):
    4153         (KJS::TypeOfValueNode::):
    4154         (KJS::PreIncResolveNode::):
    4155         (KJS::PreDecResolveNode::):
    4156         (KJS::PrefixBracketNode::):
    4157         (KJS::PreIncBracketNode::):
    4158         (KJS::PreDecBracketNode::):
    4159         (KJS::PrefixDotNode::):
    4160         (KJS::PreIncDotNode::):
    4161         (KJS::PreDecDotNode::):
    4162         (KJS::PrefixErrorNode::):
    4163         (KJS::UnaryOpNode::UnaryOpNode):
    4164         (KJS::UnaryPlusNode::):
    4165         (KJS::NegateNode::):
    4166         (KJS::BitwiseNotNode::):
    4167         (KJS::LogicalNotNode::):
    4168         (KJS::BinaryOpNode::BinaryOpNode):
    4169         (KJS::ReverseBinaryOpNode::ReverseBinaryOpNode):
    4170         (KJS::MultNode::):
    4171         (KJS::DivNode::):
    4172         (KJS::ModNode::):
    4173         (KJS::AddNode::):
    4174         (KJS::SubNode::):
    4175         (KJS::LeftShiftNode::):
    4176         (KJS::RightShiftNode::):
    4177         (KJS::UnsignedRightShiftNode::):
    4178         (KJS::LessNode::):
    4179         (KJS::GreaterNode::):
    4180         (KJS::LessEqNode::):
    4181         (KJS::GreaterEqNode::):
    4182         (KJS::InstanceOfNode::):
    4183         (KJS::InNode::):
    4184         (KJS::EqualNode::):
    4185         (KJS::NotEqualNode::):
    4186         (KJS::StrictEqualNode::):
    4187         (KJS::NotStrictEqualNode::):
    4188         (KJS::BitAndNode::):
    4189         (KJS::BitOrNode::):
    4190         (KJS::BitXOrNode::):
    4191         (KJS::LogicalAndNode::):
    4192         (KJS::LogicalOrNode::):
    4193         (KJS::ConditionalNode::):
    4194         (KJS::ReadModifyResolveNode::):
    4195         (KJS::AssignResolveNode::):
    4196         (KJS::ReadModifyBracketNode::):
    4197         (KJS::AssignBracketNode::):
    4198         (KJS::AssignDotNode::):
    4199         (KJS::ReadModifyDotNode::):
    4200         (KJS::AssignErrorNode::):
    4201         (KJS::CommaNode::):
    4202         (KJS::VarDeclCommaNode::):
    4203         (KJS::ConstStatementNode::):
    4204         (KJS::SourceElements::SourceElements):
    4205         (KJS::EmptyStatementNode::):
    4206         (KJS::DebuggerStatementNode::):
    4207         (KJS::ExprStatementNode::):
    4208         (KJS::VarStatementNode::):
    4209         (KJS::IfNode::):
    4210         (KJS::IfElseNode::):
    4211         (KJS::DoWhileNode::):
    4212         (KJS::WhileNode::):
    4213         (KJS::ForNode::):
    4214         (KJS::ContinueNode::):
    4215         (KJS::BreakNode::):
    4216         (KJS::ReturnNode::):
    4217         (KJS::WithNode::):
    4218         (KJS::LabelNode::):
    4219         (KJS::ThrowNode::):
    4220         (KJS::TryNode::):
    4221         (KJS::ParameterNode::):
    4222         (KJS::FuncExprNode::):
    4223         (KJS::FuncDeclNode::):
    4224         (KJS::CaseClauseNode::):
    4225         (KJS::ClauseListNode::):
    4226         (KJS::CaseBlockNode::):
    4227         (KJS::SwitchNode::):
    4228         Changed ParserRefCounted to hold a JSGlobalData pointer, and used it to replace
    4229         threadInstance calls.
    4230 
    4231 2008-06-24  Cameron Zwarich  <[email protected]>
    4232 
    4233         Reviewed by Alexey Proskuryakov.
    4234 
    4235         Make the JavaScript shell collect the heap from main() instead of
    4236         jscmain() to suppress leak messages in debug builds.
    4237 
    4238         * kjs/Shell.cpp:
    4239         (main):
    4240         (jscmain):
    4241 
    4242 2008-06-24  Cameron Zwarich  <[email protected]>
    4243 
    4244         Reviewed by Maciej.
    4245 
    4246         Make the conversion of the pair (less, jtrue) to jless use register
    4247         reference counting information for safety instead of requiring callers
    4248         to decide whether it is safe.
    4249 
    4250         No changes on SunSpider codegen.
    4251 
    4252         * VM/CodeGenerator.cpp:
    4253         (KJS::CodeGenerator::emitJumpIfTrue):
    4254         * VM/CodeGenerator.h:
    4255         * kjs/nodes.cpp:
    4256         (KJS::DoWhileNode::emitCode):
    4257         (KJS::WhileNode::emitCode):
    4258         (KJS::ForNode::emitCode):
    4259         (KJS::CaseBlockNode::emitCodeForBlock):
    4260 
    4261 2008-06-24  Kevin McCullough  <[email protected]>
    4262 
    4263         Reviewed by Tim.
    4264 
    4265         <rdar://problem/6031594> JSProfiler: Profiler goes into an infinite
    4266         loop sometimes.
    4267         <rdar://problem/6031603> JSProfiler: Profiler asserts in debug and
    4268         give the wrong times in release
    4269 
    4270         Fixed two issues found by Tim in the same test.
    4271 
    4272         * profiler/Profile.cpp:
    4273         (KJS::Profile::removeProfileStart): No longer take profile's time from
    4274         all ancestors, but instead attribute it to its parent.  Also add an
    4275         Assert to ensure we only delete the child we mean to.
    4276         (KJS::Profile::removeProfileEnd): Ditto for profileEnd.
    4277         (KJS::Profile::didExecute): Cleaned up the execution order and correctly
    4278         attribute all of the parent's time to the new node.
    4279         * profiler/ProfileNode.cpp: If this node does not have a startTime it
    4280         should not get a giant total time, but instead be 0.
    4281         (KJS::ProfileNode::endAndRecordCall):
    4282         * profiler/ProfileNode.h:
    4283         (KJS::ProfileNode::removeChild): Should reset the sibling pointers since
    4284         one of them has been removed.
    4285 
    4286 2008-06-24  Darin Adler  <[email protected]>
    4287 
    4288         Reviewed by Cameron.
    4289 
    4290         - fix https://bugs.webkit.org/show_bug.cgi?id=19739
    4291           REGRESSION: fast/js/property-getters-and-setters.html fails
    4292 
    4293         * kjs/JSObject.cpp:
    4294         (KJS::JSObject::put): Remove an untested optimization I checked in by accident.
    4295         The two loops up the prototype chain both need to start from this; instead the
    4296         second loop was starting where the first loop left off.
    4297 
    4298 2008-06-24  Steve Falkenburg  <[email protected]>
    4299 
    4300         Build fix.
    4301 
    4302         * kjs/nodes.cpp:
    4303 
    4304 2008-06-24  Joerg Bornemann  <[email protected]>
    4305 
    4306         Reviewed by Simon.
    4307 
    4308         For the Qt build on Windows don't depend on the presence of GNU CPP
    4309         but use MSVC's preprocessor instead.
    4310         dftables accepts a --preprocessor option which is set in pcre.pri for MSVC platforms.
    4311 
    4312         * pcre/dftables: Added support for specifying the preprocessor command
    4313         to use via --preprocessor, similar to
    4314         WebCore/bindings/scripts/generate-bindings.pl.
    4315         * pcre/pcre.pri: Pass --preprocessor='cl /e' to dftables, or more
    4316         generally speaking QMAKE_CC /E for the win32-msvc buildspecs.
    4317 
    4318 2008-06-24  Simon Hausmann  <[email protected]>
    4319 
    4320         Fix the Qt build, added missing include.
    4321 
    4322         * kjs/PropertySlot.cpp:
    4323 
    4324 2008-06-24  Alexey Proskuryakov  <[email protected]>
    4325 
    4326         Reviewed by Cameron Zwarich.
    4327 
    4328         Make ParserRefCountedCounter actually perform a leak check.
    4329 
    4330         * kjs/nodes.cpp:
    4331         (KJS::ParserRefCountedCounter::~ParserRefCountedCounter): Check for leaks in destructor,
    4332         not in constructor.
    4333         (KJS::ParserRefCountedCounter::increment):
    4334         (KJS::ParserRefCountedCounter::decrement):
    4335         (KJS::ParserRefCounted::ParserRefCounted):
    4336         (KJS::ParserRefCounted::~ParserRefCounted):
    4337         While at it, also made counting thread-safe.
    4338 
    4339 2008-06-24  Cameron Zwarich  <[email protected]>
    4340 
    4341         Reviewed by Oliver.
    4342 
    4343         Bug 19730: REGRESSION (r34497): Text in alerts in "Leisure suit Larry" is not wrapped
    4344         <https://bugs.webkit.org/show_bug.cgi?id=19730>
    4345 
    4346         Do not convert the pair (less, jtrue) to jless when jtrue is a jump
    4347         target. An example of this is when the condition of a while loop is a
    4348         LogicalOrNode.
    4349 
    4350         * VM/CodeGenerator.cpp:
    4351         (KJS::CodeGenerator::emitLabel):
    4352 
    4353 2008-06-20  Ariya Hidayat  <[email protected]>
    4354 
    4355         Reviewed by Adam Roben.
    4356 
    4357         Fix compile with MinGW.
    4358 
    4359         * kjs/Shell.cpp:
    4360         * wtf/Threading.h:
    4361         (WTF::atomicIncrement):
    4362         (WTF::atomicDecrement):
    4363 
    4364 2008-06-23  Mark Rowe  <[email protected]>
    4365 
    4366         Reviewed by Oliver Hunt.
    4367 
    4368         Prepration for returning memory to the OS on Windows.  Track whether a portion of a span of memory was returned to the OS.
    4369         If it was, ask that it be recommitted before returning it to the application as an allocated region.
    4370 
    4371         * wtf/FastMalloc.cpp:
    4372         (WTF::TCMalloc_PageHeap::New):  If the span was decommitted, ask that it be recommitted before returning it.
    4373         (WTF::TCMalloc_PageHeap::AllocLarge):  Ditto.
    4374         (WTF::TCMalloc_PageHeap::Carve):  When splitting a span, ensure that the decommitted state propogates to the two new spans.
    4375         (WTF::TCMalloc_PageHeap::Delete):  When merging a span, ensure that the resulting span is marked as decommitted if any of the
    4376         spans being merged were marked as decommitted.
    4377         (WTF::TCMalloc_PageHeap::IncrementalScavenge):  Mark as decommitted after releasing the span.
    4378         (WTF::TCMalloc_Central_FreeList::FetchFromSpans): Add an assertion to catch a decommitted span being returned to the application
    4379         without first being recommitted.
    4380         (WTF::TCMalloc_Central_FreeList::Populate): Ditto.
    4381         * wtf/TCSystemAlloc.cpp: Stub out TCMalloc_SystemCommit.
    4382         * wtf/TCSystemAlloc.h:
    4383 
    4384 2008-06-23  Mark Rowe  <[email protected]>
    4385 
    4386         Reviewed by Sam Weinig.
    4387 
    4388         Remove the sample member of Span when NO_TCMALLOC_SAMPLES is defined.
    4389 
    4390         * wtf/FastMalloc.cpp:
    4391         (WTF::TCMalloc_PageHeap::Delete): Only update Span::sample if NO_TCMALLOC_SAMPLES is not defined.
    4392         (WTF::TCMallocStats::do_free):  Ditto.
    4393 
    4394 2008-06-23  Darin Adler  <[email protected]>
    4395 
    4396         Reviewed by Geoff.
    4397 
    4398         - work toward https://bugs.webkit.org/show_bug.cgi?id=19721
    4399 
    4400         More preparation toward making functions work on primitive types without
    4401         creating wrapper objects. No speedup this time, but prepares for a future
    4402         speedup without slowing things down.
    4403 
    4404         SunSpider reports no change.
    4405 
    4406         - Eliminated the implementsCall, callAsFunction and construct virtual
    4407           functions from JSObject. Instead, the CallData and ConstructData for
    4408           a native function includes a function pointer that the caller can use
    4409           directly. Changed all call sites to use CallData and ConstructData.
    4410 
    4411         - Changed the "this" argument to native functions to be a JSValue rather
    4412           than a JSObject. This prepares us for passing primitives into these
    4413           functions. The conversion to an object now must be done inside the
    4414           function. Critically, if it's a function that can be called on a DOM
    4415           window object, then we have to be sure to call toThisObject on the
    4416           argument before we use it for anything even if it's already an object.
    4417 
    4418         - Eliminated the practice of using constructor objects in the global
    4419           object to make objects of the various basic types. Since these
    4420           constructors can't be replaced by script, there's no reason to involve
    4421           a constructor object at all. Added functions to do the construction
    4422           directly.
    4423 
    4424         - Made some more class members private and protected, including virtual
    4425           function overrides. This can catch code using unnecessarily slow virtual
    4426           function code paths when the type of an object is known statically. If we
    4427           later find a new reason use the members outside the class it's easy to
    4428           make them public again.
    4429 
    4430         - Moved the declarations of the native implementations for functions out
    4431           of header files. These can have internal linkage and be declared inside
    4432           the source file.
    4433 
    4434         - Changed PrototypeFunction to take function pointers with the right
    4435           arguments to be put directly into CallData. This eliminates the
    4436           need to have a separate PrototypeReflexiveFunction, and reveals that the
    4437           real purpose of that class included something else specific to eval --
    4438           storage of a cached global object. So renamed PrototypeReflexiveFunction
    4439           to GlobalEvalFunction.
    4440 
    4441         * API/JSCallbackConstructor.cpp:
    4442         (KJS::constructJSCallback):
    4443         (KJS::JSCallbackConstructor::getConstructData):
    4444         * API/JSCallbackConstructor.h:
    4445         * API/JSCallbackFunction.cpp:
    4446         (KJS::JSCallbackFunction::implementsHasInstance):
    4447         (KJS::JSCallbackFunction::call):
    4448         (KJS::JSCallbackFunction::getCallData):
    4449         * API/JSCallbackFunction.h:
    4450         (KJS::JSCallbackFunction::classInfo):
    4451         * API/JSCallbackObject.h:
    4452         (KJS::JSCallbackObject::classRef):
    4453         (KJS::JSCallbackObject::classInfo):
    4454         * API/JSCallbackObjectFunctions.h:
    4455         (KJS::::getConstructData):
    4456         (KJS::::construct):
    4457         (KJS::::getCallData):
    4458         (KJS::::call):
    4459         * API/JSObjectRef.cpp:
    4460         (JSObjectMakeFunction):
    4461         (JSObjectIsFunction):
    4462         (JSObjectCallAsFunction):
    4463         (JSObjectCallAsConstructor):
    4464         * JavaScriptCore.exp:
    4465         * VM/Machine.cpp:
    4466         (KJS::jsTypeStringForValue):
    4467         (KJS::Machine::privateExecute):
    4468         * kjs/ArrayPrototype.cpp:
    4469         (KJS::arrayProtoFuncToString):
    4470         (KJS::arrayProtoFuncToLocaleString):
    4471         (KJS::arrayProtoFuncJoin):
    4472         (KJS::arrayProtoFuncConcat):
    4473         (KJS::arrayProtoFuncPop):
    4474         (KJS::arrayProtoFuncPush):
    4475         (KJS::arrayProtoFuncReverse):
    4476         (KJS::arrayProtoFuncShift):
    4477         (KJS::arrayProtoFuncSlice):
    4478         (KJS::arrayProtoFuncSort):
    4479         (KJS::arrayProtoFuncSplice):
    4480         (KJS::arrayProtoFuncUnShift):
    4481         (KJS::arrayProtoFuncFilter):
    4482         (KJS::arrayProtoFuncMap):
    4483         (KJS::arrayProtoFuncEvery):
    4484         (KJS::arrayProtoFuncForEach):
    4485         (KJS::arrayProtoFuncSome):
    4486         (KJS::arrayProtoFuncIndexOf):
    4487         (KJS::arrayProtoFuncLastIndexOf):
    4488         (KJS::ArrayConstructor::ArrayConstructor):
    4489         (KJS::constructArrayWithSizeQuirk):
    4490         (KJS::constructWithArrayConstructor):
    4491         (KJS::ArrayConstructor::getConstructData):
    4492         (KJS::callArrayConstructor):
    4493         (KJS::ArrayConstructor::getCallData):
    4494         * kjs/ArrayPrototype.h:
    4495         * kjs/BooleanObject.cpp:
    4496         (KJS::booleanProtoFuncToString):
    4497         (KJS::booleanProtoFuncValueOf):
    4498         (KJS::constructBoolean):
    4499         (KJS::constructWithBooleanConstructor):
    4500         (KJS::BooleanConstructor::getConstructData):
    4501         (KJS::callBooleanConstructor):
    4502         (KJS::BooleanConstructor::getCallData):
    4503         (KJS::constructBooleanFromImmediateBoolean):
    4504         * kjs/BooleanObject.h:
    4505         * kjs/CallData.h:
    4506         (KJS::):
    4507         * kjs/ConstructData.h:
    4508         (KJS::):
    4509         * kjs/FunctionPrototype.cpp:
    4510         (KJS::callFunctionPrototype):
    4511         (KJS::FunctionPrototype::getCallData):
    4512         (KJS::functionProtoFuncToString):
    4513         (KJS::functionProtoFuncApply):
    4514         (KJS::functionProtoFuncCall):
    4515         (KJS::constructWithFunctionConstructor):
    4516         (KJS::FunctionConstructor::getConstructData):
    4517         (KJS::callFunctionConstructor):
    4518         (KJS::FunctionConstructor::getCallData):
    4519         (KJS::constructFunction):
    4520         * kjs/FunctionPrototype.h:
    4521         * kjs/JSArray.cpp:
    4522         (KJS::AVLTreeAbstractorForArrayCompare::compare_key_key):
    4523         (KJS::JSArray::sort):
    4524         (KJS::constructEmptyArray):
    4525         (KJS::constructArray):
    4526         * kjs/JSArray.h:
    4527         (KJS::JSArray::classInfo):
    4528         * kjs/JSFunction.cpp:
    4529         (KJS::JSFunction::call):
    4530         (KJS::globalFuncEval):
    4531         (KJS::globalFuncParseInt):
    4532         (KJS::globalFuncParseFloat):
    4533         (KJS::globalFuncIsNaN):
    4534         (KJS::globalFuncIsFinite):
    4535         (KJS::globalFuncDecodeURI):
    4536         (KJS::globalFuncDecodeURIComponent):
    4537         (KJS::globalFuncEncodeURI):
    4538         (KJS::globalFuncEncodeURIComponent):
    4539         (KJS::globalFuncEscape):
    4540         (KJS::globalFuncUnescape):
    4541         (KJS::globalFuncKJSPrint):
    4542         (KJS::PrototypeFunction::PrototypeFunction):
    4543         (KJS::PrototypeFunction::getCallData):
    4544         (KJS::GlobalEvalFunction::GlobalEvalFunction):
    4545         (KJS::GlobalEvalFunction::mark):
    4546         * kjs/JSFunction.h:
    4547         (KJS::InternalFunction::classInfo):
    4548         (KJS::InternalFunction::functionName):
    4549         (KJS::JSFunction::classInfo):
    4550         (KJS::GlobalEvalFunction::cachedGlobalObject):
    4551         * kjs/JSGlobalObject.cpp:
    4552         (KJS::JSGlobalObject::reset):
    4553         (KJS::JSGlobalObject::mark):
    4554         * kjs/JSGlobalObject.h:
    4555         (KJS::JSGlobalObject::JSGlobalObject):
    4556         (KJS::JSGlobalObject::evalFunction):
    4557         * kjs/JSImmediate.cpp:
    4558         (KJS::JSImmediate::toObject):
    4559         * kjs/JSNotAnObject.cpp:
    4560         * kjs/JSNotAnObject.h:
    4561         * kjs/JSObject.cpp:
    4562         (KJS::JSObject::put):
    4563         (KJS::callDefaultValueFunction):
    4564         (KJS::JSObject::defaultValue):
    4565         (KJS::JSObject::lookupGetter):
    4566         (KJS::JSObject::lookupSetter):
    4567         (KJS::JSObject::hasInstance):
    4568         (KJS::JSObject::fillGetterPropertySlot):
    4569         (KJS::Error::create):
    4570         (KJS::constructEmptyObject):
    4571         * kjs/JSObject.h:
    4572         (KJS::GetterSetter::GetterSetter):
    4573         (KJS::GetterSetter::getter):
    4574         (KJS::GetterSetter::setGetter):
    4575         (KJS::GetterSetter::setter):
    4576         (KJS::GetterSetter::setSetter):
    4577         * kjs/JSValue.cpp:
    4578         (KJS::JSCell::deleteProperty):
    4579         (KJS::call):
    4580         (KJS::construct):
    4581         * kjs/JSValue.h:
    4582         * kjs/MathObject.cpp:
    4583         (KJS::mathProtoFuncAbs):
    4584         (KJS::mathProtoFuncACos):
    4585         (KJS::mathProtoFuncASin):
    4586         (KJS::mathProtoFuncATan):
    4587         (KJS::mathProtoFuncATan2):
    4588         (KJS::mathProtoFuncCeil):
    4589         (KJS::mathProtoFuncCos):
    4590         (KJS::mathProtoFuncExp):
    4591         (KJS::mathProtoFuncFloor):
    4592         (KJS::mathProtoFuncLog):
    4593         (KJS::mathProtoFuncMax):
    4594         (KJS::mathProtoFuncMin):
    4595         (KJS::mathProtoFuncPow):
    4596         (KJS::mathProtoFuncRandom):
    4597         (KJS::mathProtoFuncRound):
    4598         (KJS::mathProtoFuncSin):
    4599         (KJS::mathProtoFuncSqrt):
    4600         (KJS::mathProtoFuncTan):
    4601         * kjs/MathObject.h:
    4602         * kjs/NumberObject.cpp:
    4603         (KJS::numberProtoFuncToString):
    4604         (KJS::numberProtoFuncToLocaleString):
    4605         (KJS::numberProtoFuncValueOf):
    4606         (KJS::numberProtoFuncToFixed):
    4607         (KJS::numberProtoFuncToExponential):
    4608         (KJS::numberProtoFuncToPrecision):
    4609         (KJS::NumberConstructor::NumberConstructor):
    4610         (KJS::constructWithNumberConstructor):
    4611         (KJS::NumberConstructor::getConstructData):
    4612         (KJS::callNumberConstructor):
    4613         (KJS::NumberConstructor::getCallData):
    4614         (KJS::constructNumber):
    4615         (KJS::constructNumberFromImmediateNumber):
    4616         * kjs/NumberObject.h:
    4617         (KJS::NumberObject::classInfo):
    4618         (KJS::NumberConstructor::classInfo):
    4619         * kjs/PropertySlot.cpp:
    4620         (KJS::PropertySlot::functionGetter):
    4621         * kjs/RegExpObject.cpp:
    4622         (KJS::regExpProtoFuncTest):
    4623         (KJS::regExpProtoFuncExec):
    4624         (KJS::regExpProtoFuncCompile):
    4625         (KJS::regExpProtoFuncToString):
    4626         (KJS::callRegExpObject):
    4627         (KJS::RegExpObject::getCallData):
    4628         (KJS::constructRegExp):
    4629         (KJS::constructWithRegExpConstructor):
    4630         (KJS::RegExpConstructor::getConstructData):
    4631         (KJS::callRegExpConstructor):
    4632         (KJS::RegExpConstructor::getCallData):
    4633         * kjs/RegExpObject.h:
    4634         (KJS::RegExpConstructor::classInfo):
    4635         * kjs/Shell.cpp:
    4636         (GlobalObject::GlobalObject):
    4637         (functionPrint):
    4638         (functionDebug):
    4639         (functionGC):
    4640         (functionVersion):
    4641         (functionRun):
    4642         (functionLoad):
    4643         (functionReadline):
    4644         (functionQuit):
    4645         * kjs/date_object.cpp:
    4646         (KJS::gmtoffset):
    4647         (KJS::formatLocaleDate):
    4648         (KJS::fillStructuresUsingDateArgs):
    4649         (KJS::DateInstance::getTime):
    4650         (KJS::DateInstance::getUTCTime):
    4651         (KJS::DateConstructor::DateConstructor):
    4652         (KJS::constructDate):
    4653         (KJS::DateConstructor::getConstructData):
    4654         (KJS::callDate):
    4655         (KJS::DateConstructor::getCallData):
    4656         (KJS::dateParse):
    4657         (KJS::dateNow):
    4658         (KJS::dateUTC):
    4659         (KJS::dateProtoFuncToString):
    4660         (KJS::dateProtoFuncToUTCString):
    4661         (KJS::dateProtoFuncToDateString):
    4662         (KJS::dateProtoFuncToTimeString):
    4663         (KJS::dateProtoFuncToLocaleString):
    4664         (KJS::dateProtoFuncToLocaleDateString):
    4665         (KJS::dateProtoFuncToLocaleTimeString):
    4666         (KJS::dateProtoFuncValueOf):
    4667         (KJS::dateProtoFuncGetTime):
    4668         (KJS::dateProtoFuncGetFullYear):
    4669         (KJS::dateProtoFuncGetUTCFullYear):
    4670         (KJS::dateProtoFuncToGMTString):
    4671         (KJS::dateProtoFuncGetMonth):
    4672         (KJS::dateProtoFuncGetUTCMonth):
    4673         (KJS::dateProtoFuncGetDate):
    4674         (KJS::dateProtoFuncGetUTCDate):
    4675         (KJS::dateProtoFuncGetDay):
    4676         (KJS::dateProtoFuncGetUTCDay):
    4677         (KJS::dateProtoFuncGetHours):
    4678         (KJS::dateProtoFuncGetUTCHours):
    4679         (KJS::dateProtoFuncGetMinutes):
    4680         (KJS::dateProtoFuncGetUTCMinutes):
    4681         (KJS::dateProtoFuncGetSeconds):
    4682         (KJS::dateProtoFuncGetUTCSeconds):
    4683         (KJS::dateProtoFuncGetMilliSeconds):
    4684         (KJS::dateProtoFuncGetUTCMilliseconds):
    4685         (KJS::dateProtoFuncGetTimezoneOffset):
    4686         (KJS::dateProtoFuncSetTime):
    4687         (KJS::setNewValueFromTimeArgs):
    4688         (KJS::setNewValueFromDateArgs):
    4689         (KJS::dateProtoFuncSetMilliSeconds):
    4690         (KJS::dateProtoFuncSetUTCMilliseconds):
    4691         (KJS::dateProtoFuncSetSeconds):
    4692         (KJS::dateProtoFuncSetUTCSeconds):
    4693         (KJS::dateProtoFuncSetMinutes):
    4694         (KJS::dateProtoFuncSetUTCMinutes):
    4695         (KJS::dateProtoFuncSetHours):
    4696         (KJS::dateProtoFuncSetUTCHours):
    4697         (KJS::dateProtoFuncSetDate):
    4698         (KJS::dateProtoFuncSetUTCDate):
    4699         (KJS::dateProtoFuncSetMonth):
    4700         (KJS::dateProtoFuncSetUTCMonth):
    4701         (KJS::dateProtoFuncSetFullYear):
    4702         (KJS::dateProtoFuncSetUTCFullYear):
    4703         (KJS::dateProtoFuncSetYear):
    4704         (KJS::dateProtoFuncGetYear):
    4705         * kjs/date_object.h:
    4706         (KJS::DateInstance::internalNumber):
    4707         (KJS::DateInstance::classInfo):
    4708         * kjs/error_object.cpp:
    4709         (KJS::errorProtoFuncToString):
    4710         (KJS::constructError):
    4711         (KJS::constructWithErrorConstructor):
    4712         (KJS::ErrorConstructor::getConstructData):
    4713         (KJS::callErrorConstructor):
    4714         (KJS::ErrorConstructor::getCallData):
    4715         (KJS::NativeErrorConstructor::construct):
    4716         (KJS::constructWithNativeErrorConstructor):
    4717         (KJS::NativeErrorConstructor::getConstructData):
    4718         (KJS::callNativeErrorConstructor):
    4719         (KJS::NativeErrorConstructor::getCallData):
    4720         * kjs/error_object.h:
    4721         (KJS::NativeErrorConstructor::classInfo):
    4722         * kjs/internal.cpp:
    4723         (KJS::JSNumberCell::toObject):
    4724         (KJS::JSNumberCell::toThisObject):
    4725         (KJS::GetterSetter::mark):
    4726         (KJS::GetterSetter::toPrimitive):
    4727         (KJS::GetterSetter::toBoolean):
    4728         (KJS::GetterSetter::toNumber):
    4729         (KJS::GetterSetter::toString):
    4730         (KJS::GetterSetter::toObject):
    4731         (KJS::InternalFunction::InternalFunction):
    4732         (KJS::InternalFunction::implementsHasInstance):
    4733         * kjs/lookup.h:
    4734         (KJS::HashEntry::):
    4735         * kjs/nodes.cpp:
    4736         (KJS::FuncDeclNode::makeFunction):
    4737         (KJS::FuncExprNode::makeFunction):
    4738         * kjs/object_object.cpp:
    4739         (KJS::objectProtoFuncValueOf):
    4740         (KJS::objectProtoFuncHasOwnProperty):
    4741         (KJS::objectProtoFuncIsPrototypeOf):
    4742         (KJS::objectProtoFuncDefineGetter):
    4743         (KJS::objectProtoFuncDefineSetter):
    4744         (KJS::objectProtoFuncLookupGetter):
    4745         (KJS::objectProtoFuncLookupSetter):
    4746         (KJS::objectProtoFuncPropertyIsEnumerable):
    4747         (KJS::objectProtoFuncToLocaleString):
    4748         (KJS::objectProtoFuncToString):
    4749         (KJS::ObjectConstructor::ObjectConstructor):
    4750         (KJS::constructObject):
    4751         (KJS::constructWithObjectConstructor):
    4752         (KJS::ObjectConstructor::getConstructData):
    4753         (KJS::callObjectConstructor):
    4754         (KJS::ObjectConstructor::getCallData):
    4755         * kjs/object_object.h:
    4756         * kjs/string_object.cpp:
    4757         (KJS::replace):
    4758         (KJS::stringProtoFuncToString):
    4759         (KJS::stringProtoFuncValueOf):
    4760         (KJS::stringProtoFuncCharAt):
    4761         (KJS::stringProtoFuncCharCodeAt):
    4762         (KJS::stringProtoFuncConcat):
    4763         (KJS::stringProtoFuncIndexOf):
    4764         (KJS::stringProtoFuncLastIndexOf):
    4765         (KJS::stringProtoFuncMatch):
    4766         (KJS::stringProtoFuncSearch):
    4767         (KJS::stringProtoFuncReplace):
    4768         (KJS::stringProtoFuncSlice):
    4769         (KJS::stringProtoFuncSplit):
    4770         (KJS::stringProtoFuncSubstr):
    4771         (KJS::stringProtoFuncSubstring):
    4772         (KJS::stringProtoFuncToLowerCase):
    4773         (KJS::stringProtoFuncToUpperCase):
    4774         (KJS::stringProtoFuncToLocaleLowerCase):
    4775         (KJS::stringProtoFuncToLocaleUpperCase):
    4776         (KJS::stringProtoFuncLocaleCompare):
    4777         (KJS::stringProtoFuncBig):
    4778         (KJS::stringProtoFuncSmall):
    4779         (KJS::stringProtoFuncBlink):
    4780         (KJS::stringProtoFuncBold):
    4781         (KJS::stringProtoFuncFixed):
    4782         (KJS::stringProtoFuncItalics):
    4783         (KJS::stringProtoFuncStrike):
    4784         (KJS::stringProtoFuncSub):
    4785         (KJS::stringProtoFuncSup):
    4786         (KJS::stringProtoFuncFontcolor):
    4787         (KJS::stringProtoFuncFontsize):
    4788         (KJS::stringProtoFuncAnchor):
    4789         (KJS::stringProtoFuncLink):
    4790         (KJS::stringFromCharCode):
    4791         (KJS::StringConstructor::StringConstructor):
    4792         (KJS::constructWithStringConstructor):
    4793         (KJS::StringConstructor::getConstructData):
    4794         (KJS::callStringConstructor):
    4795         (KJS::StringConstructor::getCallData):
    4796         * kjs/string_object.h:
    4797 
    4798 2008-06-23  Cameron Zwarich  <[email protected]>
    4799 
    4800         Reviewed by Oliver.
    4801 
    4802         Bug 19716: REGRESSION (SquirrelFish): Reproducible crash after entering a username at mint.com
    4803         <https://bugs.webkit.org/show_bug.cgi?id=19716>
    4804 
    4805         When unwinding callframes for exceptions, check whether the callframe
    4806         was created by a reentrant native call to JavaScript after tearing off
    4807         the local variables instead of before.
    4808 
    4809         * VM/Machine.cpp:
    4810         (KJS::Machine::unwindCallFrame):
    4811 
    4812 2008-06-23  Mark Rowe  <[email protected]>
    4813 
    4814         Reviewed by Oliver Hunt.
    4815 
    4816         Get testapi passing again in a debug build.
    4817 
    4818         * API/testapi.c:
    4819         (main): Update the expected output of calling JSValueMakeString on a function object.
    4820 
    4821 2008-06-21  Mark Rowe  <[email protected]>
    4822 
    4823         Reviewed by Sam Weinig.
    4824 
    4825         Print a blank line when exiting the jsc interactive mode to ensure that the shell
    4826         prompt will start on a new line.
    4827 
    4828         * kjs/Shell.cpp:
    4829         (runInteractive):
    4830 
    4831 2008-06-21  Mark Rowe  <[email protected]>
    4832 
    4833         Rubber-stamped by Sam Weinig.
    4834 
    4835         Tweak the paths of the items in the "tests" group to clean things up a little.
    4836 
    4837         * JavaScriptCore.xcodeproj/project.pbxproj:
    4838 
    4839 2008-06-21  Mark Rowe  <[email protected]>
    4840 
    4841         Rubber-stamped by Sam Weinig.
    4842 
    4843         Fix jsc to link against libedit.dylib rather than libedit.2.dylib.
    4844 
    4845         * JavaScriptCore.xcodeproj/project.pbxproj:
    4846 
    4847 2008-06-21  Mark Rowe  <[email protected]>
    4848 
    4849         Reviewed by Sam Weinig.
    4850 
    4851         Copy the JavaScriptCore shell (jsc) into JavaScriptCore.framework so that it will
    4852         be included in nightly builds.
    4853         https://bugs.webkit.org/show_bug.cgi?id=19691
    4854 
    4855         * JavaScriptCore.xcodeproj/project.pbxproj:
    4856 
    4857 2008-06-21  Cameron Zwarich  <[email protected]>
    4858 
    4859         Reviewed by Mark Rowe.
    4860 
    4861         Fix the build for non-Mac Darwin platforms by disabling their support
    4862         for readline in the JavaScript shell.
    4863 
    4864         * kjs/config.h:
    4865 
    4866 2008-06-20  Timothy Hatcher  <[email protected]>
    4867 
    4868         Use member function pointers for the Profile::forEach function.
    4869         Eliminating a few static functions and simplified things a little.
    4870 
    4871         Reviewed by Alexey Proskuryakov.
    4872 
    4873         * JavaScriptCore.exp: Change the symbol for forEach.
    4874         * profiler/Profile.cpp:
    4875         (KJS::Profile::forEach): Use a member function pointer.
    4876         * profiler/Profile.h:
    4877         (KJS::Profile::sortTotalTimeDescending): Pass a function pointer.
    4878         (KJS::Profile::sortTotalTimeAscending): Ditto.
    4879         (KJS::Profile::sortSelfTimeDescending): Ditto.
    4880         (KJS::Profile::sortSelfTimeAscending): Ditto.
    4881         (KJS::Profile::sortCallsDescending): Ditto.
    4882         * profiler/ProfileNode.h:
    4883         (KJS::ProfileNode::sortTotalTimeDescending): No longer static.
    4884         (KJS::ProfileNode::sortTotalTimeAscending): Ditto.
    4885         (KJS::ProfileNode::sortSelfTimeDescending): Ditto.
    4886         (KJS::ProfileNode::sortSelfTimeAscending): Ditto.
    4887         (KJS::ProfileNode::sortCallsDescending): Ditto.
    4888 
    4889 2008-06-20  Cameron Zwarich  <[email protected]>
    4890 
    4891         Reviewed by Oliver.
    4892 
    4893         Remove unused destructors.
    4894 
    4895         * kjs/nodes.cpp:
    4896         * kjs/nodes.h:
    4897 
    4898 2008-06-20  Timothy Hatcher  <[email protected]>
    4899 
    4900         Fixed an ASSERT(m_actualSelfTime <= m_actualTotalTime) when starting
    4901         and stopping a profile from the Develop menu. Also prevents
    4902         inserting an incorrect parent node as the new head after profiling
    4903         is stopped from the Develop menu.
    4904 
    4905         Reviewed by Dan Bernstein.
    4906 
    4907         * profiler/Profile.cpp:
    4908         (KJS::Profile::stopProfiling): If the current node is already the head
    4909         then there is no more need to record future nodes in didExecute.
    4910         (KJS::Profile::didExecute): Move the code of setupCurrentNodeAsStopped
    4911         into here since this was the only caller. When setting the total time
    4912         keep any current total time while adding the self time of the head.
    4913         (KJS::Profile::setupCurrentNodeAsStopped): Removed.
    4914         * profiler/Profile.h: Removed setupCurrentNodeAsStopped.
    4915 
    4916 2008-06-20  Kevin Ollivier  <[email protected]>
    4917 
    4918         !USE(MULTIPLE_THREADS) on Darwin build fix
    4919 
    4920         * kjs/InitializeThreading.cpp:
    4921         (KJS::initializeThreading):
    4922         * kjs/collector.h:
    4923 
    4924 2008-06-20  Kevin McCullough  <[email protected]>
    4925 
    4926         -Leopard Build Fix.
    4927 
    4928         * profiler/Profile.cpp:
    4929         (KJS::Profile::removeProfileStart):
    4930         (KJS::Profile::removeProfileEnd):
    4931 
    4932 2008-06-20  Kevin McCullough  <[email protected]>
    4933 
    4934         Just giving credit.
    4935 
    4936         * ChangeLog:
    4937 
    4938 2008-06-20  Kevin McCullough  <[email protected]>
    4939 
    4940         Reviewed by Tim and Dan.
    4941 
    4942         <rdar://problem/6024846> JSProfiler: ASSERT hit in Profiler.
    4943         - Because InspectorController can call startProfiling() and
    4944         stopProfiling() we cannot assert that console.profile() and
    4945         console.profileEnd() will be in the profile tree.
    4946 
    4947         * profiler/Profile.cpp:
    4948         (KJS::Profile::removeProfileStart):
    4949         (KJS::Profile::removeProfileEnd):
    4950 
    4951 2008-06-20  Kevin McCullough  <[email protected]>
    4952 
    4953         Reviewed by Tim.
    4954 
    4955         <rdar://problem/5958770> JSProfiler: Time incorrectly given to (idle)
    4956         if profiling is started and finished within the same function. (19230)
    4957         - Now we profile one more stack frame up from the last frame to allocate
    4958         the time spent in it, if it exists.
    4959 
    4960         * JavaScriptCore.exp:
    4961         * VM/Machine.cpp: We need to let the profiler know when the JS program
    4962         has finished since that is what will actually stop the profiler instead
    4963         of just calling stopProfiling().
    4964         (KJS::Machine::execute):
    4965         * profiler/Profile.cpp:
    4966         (KJS::Profile::create): Moved from Profile.h since it was getting pretty
    4967         long.
    4968         (KJS::Profile::Profile): We now have a client, which is a listener who
    4969         we will return this profile to, once it has actually finished.
    4970         (KJS::Profile::stopProfiling): Instead of fully stopping the profiler
    4971         here, we set the flag and keep it profiling in the background.
    4972         (KJS::Profile::didFinishAllExecution): This is where the profiler
    4973         actually finishes and creates the (idle) node if one should be made.
    4974         (KJS::Profile::removeProfileStart): Don't use m_currentNode since it is
    4975         needed by the profiler as it runs silently in the background.
    4976         (KJS::Profile::removeProfileEnd): Ditto.
    4977         (KJS::Profile::willExecute): Don't profile new functions if we have
    4978         stopped profiling.
    4979         (KJS::Profile::didExecute): Only record one more return as all the
    4980         remaining time will be attributed to that function.
    4981         (KJS::Profile::setupCurrentNodeAsStopped): Sets the current node's time.
    4982         * profiler/Profile.h: Added functions and variables for the above
    4983         changes.
    4984         (KJS::Profile::client):
    4985         * profiler/ProfileNode.h:
    4986         (KJS::CallIdentifier::toString): Debug method.
    4987         * profiler/Profiler.cpp: Added support for the ProfilerClient.
    4988         (KJS::Profiler::startProfiling):
    4989         (KJS::Profiler::stopProfiling): No longer return sthe profile.
    4990         (KJS::Profiler::didFinishAllExecution): Now returns the profile to the
    4991         client instead of stopProfiling.
    4992         * profiler/Profiler.h:
    4993         (KJS::ProfilerClient::~ProfilerClient): Clients will implement this
    4994         interface.
    4995 
    4996 2008-06-19  Ariya Hidayat  <[email protected]>
    4997 
    4998         Reviewed by Simon.
    4999 
    5000         Surpress compiler warning (int vs unsigned comparison).
    5001 
    5002         * wtf/unicode/qt4/UnicodeQt4.h:
    5003         (WTF::Unicode::toLower):
    5004 
    5005 2008-06-19  Ariya Hidayat  <[email protected]>
    5006 
    5007         Reviewed by Timothy Hatcher.
    5008 
    5009         Introduce compiler define for MinGW, to have COMPILER(MINGW).
    5010 
    5011         * wtf/Platform.h:
    5012 
    5013 2008-06-19  Alexey Proskuryakov  <[email protected]>
    5014 
    5015         Reviewed by Geoff.
    5016 
    5017         Make Machine per-JSGlobalData.
    5018 
    5019         * VM/CodeBlock.cpp:
    5020         (KJS::CodeBlock::dump):
    5021         * VM/CodeGenerator.cpp:
    5022         (KJS::CodeGenerator::emitOpcode):
    5023         * VM/Machine.cpp:
    5024         (KJS::callEval):
    5025         (KJS::Machine::unwindCallFrame):
    5026         (KJS::Machine::throwException):
    5027         (KJS::Machine::execute):
    5028         (KJS::Machine::debug):
    5029         * VM/Machine.h:
    5030         * kjs/DebuggerCallFrame.cpp:
    5031         (KJS::DebuggerCallFrame::evaluate):
    5032         * kjs/DebuggerCallFrame.h:
    5033         (KJS::DebuggerCallFrame::DebuggerCallFrame):
    5034         * kjs/ExecState.cpp:
    5035         (KJS::ExecState::ExecState):
    5036         * kjs/ExecState.h:
    5037         (KJS::ExecState::machine):
    5038         * kjs/JSFunction.cpp:
    5039         (KJS::JSFunction::callAsFunction):
    5040         (KJS::JSFunction::argumentsGetter):
    5041         (KJS::JSFunction::callerGetter):
    5042         (KJS::JSFunction::construct):
    5043         (KJS::globalFuncEval):
    5044         * kjs/JSGlobalData.cpp:
    5045         (KJS::JSGlobalData::JSGlobalData):
    5046         * kjs/JSGlobalData.h:
    5047         * kjs/interpreter.cpp:
    5048         (KJS::Interpreter::evaluate):
    5049 
    5050 2008-06-19  Alp Toker  <[email protected]>
    5051 
    5052         GTK+/autotools build fix. JSGlobalObject.cpp in now in
    5053         AllInOneFile.cpp and shouldn't be built separately.
    5054 
    5055         * GNUmakefile.am:
    5056 
    5057 2008-06-19  Alexey Proskuryakov  <[email protected]>
    5058 
    5059         Reviewed by Darin.
    5060 
    5061         Get rid of some threadInstance calls.
    5062 
    5063         * kjs/JSGlobalObject.cpp:
    5064         (KJS::JSGlobalObject::init):
    5065         * kjs/Parser.cpp:
    5066         (KJS::Parser::parse):
    5067         * kjs/Shell.cpp:
    5068         (jscmain):
    5069 
    5070 2008-06-19  Alexey Proskuryakov  <[email protected]>
    5071 
    5072         Reviewed by Sam.
    5073 
    5074         Fix an assertion failure at startup.
    5075 
    5076         * kjs/JSObject.h: (KJS::JSObject::JSObject): Allow jsNull prototype in an assertion (I had
    5077         it fixed in a wrong copy of the file, so I wasn't getting the failure).
    5078 
    5079 2008-06-19  Alexey Proskuryakov  <[email protected]>
    5080 
    5081         Build fix.
    5082 
    5083         * kjs/collector.cpp:
    5084         (KJS::Heap::Heap):
    5085         (KJS::allocateBlock):
    5086         * kjs/collector.h:
    5087         No, #if PLATFORM(UNIX) was not right. I've just moved the unsafe initialization back for now,
    5088         as the platforms that use that code path do not use multiple threads yet.
    5089 
    5090 2008-06-19  Alexey Proskuryakov  <[email protected]>
    5091 
    5092         Windows and Qt build fixes.
    5093 
    5094         * kjs/collector.h:
    5095         * kjs/collector.cpp:
    5096         (KJS::Heap::Heap):
    5097         Wrapped m_pagesize in #if PLATFORM(UNIX), which should better match the sequence of #elifs
    5098         in allocateBlock(). Changed MIN_ARRAY_SIZE to be explicitly size_t, as this type is different
    5099         on different platforms.
    5100 
    5101 2008-06-17  Alexey Proskuryakov  <[email protected]>
    5102 
    5103         Reviewed by Darin.
    5104 
    5105         Prepare JavaScript heap for being per-thread.
    5106 
    5107         * kjs/ExecState.h: Shuffle includes, making it possible to include ExecState.h in JSValue.h.
    5108         (KJS::ExecState::heap): Added an accessor.
    5109 
    5110         * API/JSBase.cpp: (JSGarbageCollect): Collect both shared and per-thread heaps.
    5111 
    5112         * API/JSContextRef.cpp: (JSGlobalContextCreate): When allocating JSGlobalObject, indicate
    5113         that it belongs to a shared heap.
    5114 
    5115         * JavaScriptCore.xcodeproj/project.pbxproj:
    5116         * kjs/AllInOneFile.cpp:
    5117         Moved JSGlobalObject.cpp to AllInOneFile, as a build fix for inlineAllocate magic.
    5118 
    5119         * VM/CodeGenerator.h: (KJS::CodeGenerator::globalExec): Added an accessor (working via
    5120         m_scopeChain).
    5121 
    5122         * VM/RegisterFile.h:
    5123         (KJS::RegisterFile::mark):
    5124         * VM/RegisterFileStack.h:
    5125         (KJS::RegisterFileStack::mark):
    5126         Made these pseudo-mark functions take Heap*.
    5127 
    5128         * kjs/InitializeThreading.cpp:
    5129         (KJS::initializeThreading): Initialize heap introspector.
    5130 
    5131         * kjs/JSGlobalData.h: Added Heap to the structure.
    5132 
    5133         * kjs/JSGlobalData.cpp:
    5134         (KJS::JSGlobalData::JSGlobalData): Initialize Heap.
    5135         (KJS::JSGlobalData::sharedInstance): Added a method to access shared global data instance
    5136         for legacy clients.
    5137 
    5138         * kjs/JSGlobalObject.cpp:
    5139         (KJS::JSGlobalObject::~JSGlobalObject): Changed to work with per-thread head; fixed list
    5140         maintenance logic.
    5141         (KJS::JSGlobalObject::init): Changed to work with per-thread head.
    5142         (KJS::JSGlobalObject::put): Assert that a cross-heap operation is not being attempted.
    5143         (KJS::JSGlobalObject::reset): Pass ExecState* where now required.
    5144         (KJS::JSGlobalObject::mark): Pass the current heap to RegisterFileStack::mark.
    5145         (KJS::JSGlobalObject::operator new): Overload operator new to use per-thread or shared heap.
    5146         * kjs/JSGlobalObject.h: Removed static s_head member.
    5147 
    5148         * kjs/PropertyMap.h: (KJS::PropertyMap::PropertyMap): Removed unused SavedProperty.
    5149 
    5150         * kjs/collector.h: Turned Collector into an actual object with its own data, renamed to Heap.
    5151         (KJS::Heap::initializeHeapIntrospector): Added.
    5152         (KJS::Heap::heap): Added a method to determine which heap a JSValue is in, if any.
    5153         (KJS::Heap::allocate): Made non-static.
    5154         (KJS::Heap::inlineAllocateNumber): Ditto.
    5155         (KJS::Heap::markListSet): Ditto.
    5156         (KJS::Heap::cellBlock): Ditto.
    5157         (KJS::Heap::cellOffset): Ditto.
    5158         (KJS::Heap::isCellMarked): Ditto.
    5159         (KJS::Heap::markCell): Ditto.
    5160         (KJS::Heap::reportExtraMemoryCost): Ditto.
    5161         (KJS::CollectorBlock): Added a back-reference to Heap for Heap::heap() method.
    5162         (KJS::SmallCellCollectorBlock): Ditto.
    5163 
    5164         * kjs/collector.cpp: Changed MIN_ARRAY_SIZE to a #define to avoid a PIC branch. Removed
    5165         main thread related machinery.
    5166         (KJS::Heap::Heap): Initialize the newly added data members.
    5167         (KJS::allocateBlock): Marked NEVER_INLINE, as this is a rare case that uses a PIC branch.
    5168         Moved static pagesize to the class to make it safely initialized.
    5169         (KJS::Heap::heapAllocate): Initialize heap back reference after a new block is allocated.
    5170         (KJS::Heap::registerThread): Removed introspector initialization, as it is now performed
    5171         in InitializeThreading.cpp.
    5172         (KJS::Heap::markOtherThreadConservatively): Assert that the "other thread" case only occurs
    5173         for legacy clients using a shared heap.
    5174         (KJS::Heap::markStackObjectsConservatively): Moved fastMallocForbid/Allow down here, since
    5175         it doesn't need to be forbidden during other GC phases.
    5176 
    5177         * kjs/JSImmediate.h:
    5178         (KJS::jsUndefined):
    5179         (KJS::jsNull):
    5180         (KJS::jsBoolean):
    5181         Moved from JSvalue.h, to make these usable in files that cannot include JSValue.h (such
    5182         as list.h).
    5183 
    5184         * API/JSCallbackObjectFunctions.h:
    5185         (KJS::::staticFunctionGetter):
    5186         * API/JSClassRef.cpp:
    5187         (OpaqueJSClass::prototype):
    5188         * API/JSObjectRef.cpp:
    5189         (JSObjectMake):
    5190         (JSObjectMakeFunctionWithCallback):
    5191         (JSObjectMakeConstructor):
    5192         (JSObjectMakeFunction):
    5193         * API/JSValueRef.cpp:
    5194         (JSValueMakeNumber):
    5195         (JSValueMakeString):
    5196         * JavaScriptCore.exp:
    5197         * VM/CodeGenerator.cpp:
    5198         (KJS::CodeGenerator::emitLoad):
    5199         * VM/JSPropertyNameIterator.cpp:
    5200         (KJS::JSPropertyNameIterator::create):
    5201         (KJS::JSPropertyNameIterator::next):
    5202         * VM/Machine.cpp:
    5203         (KJS::jsAddSlowCase):
    5204         (KJS::jsAdd):
    5205         (KJS::jsTypeStringForValue):
    5206         (KJS::scopeChainForCall):
    5207         (KJS::Machine::throwException):
    5208         (KJS::Machine::execute):
    5209         (KJS::Machine::privateExecute):
    5210         (KJS::Machine::retrieveArguments):
    5211         * kjs/ArrayPrototype.cpp:
    5212         (KJS::arrayProtoFuncToString):
    5213         (KJS::arrayProtoFuncToLocaleString):
    5214         (KJS::arrayProtoFuncJoin):
    5215         (KJS::arrayProtoFuncConcat):
    5216         (KJS::arrayProtoFuncPop):
    5217         (KJS::arrayProtoFuncPush):
    5218         (KJS::arrayProtoFuncShift):
    5219         (KJS::arrayProtoFuncSlice):
    5220         (KJS::arrayProtoFuncSplice):
    5221         (KJS::arrayProtoFuncUnShift):
    5222         (KJS::arrayProtoFuncFilter):
    5223         (KJS::arrayProtoFuncMap):
    5224         (KJS::arrayProtoFuncEvery):
    5225         (KJS::arrayProtoFuncForEach):
    5226         (KJS::arrayProtoFuncSome):
    5227         (KJS::arrayProtoFuncIndexOf):
    5228         (KJS::arrayProtoFuncLastIndexOf):
    5229         (KJS::ArrayConstructor::ArrayConstructor):
    5230         (KJS::ArrayConstructor::construct):
    5231         (KJS::ArrayConstructor::callAsFunction):
    5232         * kjs/BooleanObject.cpp:
    5233         (KJS::BooleanPrototype::BooleanPrototype):
    5234         (KJS::booleanProtoFuncToString):
    5235         (KJS::BooleanConstructor::BooleanConstructor):
    5236         (KJS::BooleanConstructor::construct):
    5237         * kjs/FunctionPrototype.cpp:
    5238         (KJS::FunctionPrototype::FunctionPrototype):
    5239         (KJS::functionProtoFuncToString):
    5240         (KJS::FunctionConstructor::FunctionConstructor):
    5241         (KJS::FunctionConstructor::construct):
    5242         * kjs/JSActivation.cpp:
    5243         (KJS::JSActivation::createArgumentsObject):
    5244         * kjs/JSArray.cpp:
    5245         (KJS::JSArray::JSArray):
    5246         (KJS::JSArray::lengthGetter):
    5247         * kjs/JSFunction.cpp:
    5248         (KJS::JSFunction::lengthGetter):
    5249         (KJS::JSFunction::construct):
    5250         (KJS::Arguments::Arguments):
    5251         (KJS::encode):
    5252         (KJS::decode):
    5253         (KJS::globalFuncParseInt):
    5254         (KJS::globalFuncParseFloat):
    5255         (KJS::globalFuncEscape):
    5256         (KJS::globalFuncUnescape):
    5257         (KJS::PrototypeFunction::PrototypeFunction):
    5258         (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction):
    5259         * kjs/JSImmediate.cpp:
    5260         (KJS::JSImmediate::toObject):
    5261         * kjs/JSLock.cpp:
    5262         (KJS::JSLock::registerThread):
    5263         * kjs/JSObject.cpp:
    5264         (KJS::JSObject::put):
    5265         (KJS::JSObject::defineGetter):
    5266         (KJS::JSObject::defineSetter):
    5267         (KJS::Error::create):
    5268         * kjs/JSObject.h:
    5269         (KJS::JSObject::putDirect):
    5270         * kjs/JSString.h:
    5271         (KJS::JSString::JSString):
    5272         * kjs/JSValue.cpp:
    5273         (KJS::JSCell::operator new):
    5274         (KJS::jsString):
    5275         (KJS::jsOwnedString):
    5276         * kjs/JSValue.h:
    5277         (KJS::JSNumberCell::operator new):
    5278         (KJS::jsNumberCell):
    5279         (KJS::jsNaN):
    5280         (KJS::jsNumber):
    5281         (KJS::JSCell::marked):
    5282         (KJS::JSCell::mark):
    5283         (KJS::JSValue::toJSNumber):
    5284         * kjs/MathObject.cpp:
    5285         (KJS::MathObject::getValueProperty):
    5286         (KJS::mathProtoFuncAbs):
    5287         (KJS::mathProtoFuncACos):
    5288         (KJS::mathProtoFuncASin):
    5289         (KJS::mathProtoFuncATan):
    5290         (KJS::mathProtoFuncATan2):
    5291         (KJS::mathProtoFuncCeil):
    5292         (KJS::mathProtoFuncCos):
    5293         (KJS::mathProtoFuncExp):
    5294         (KJS::mathProtoFuncFloor):
    5295         (KJS::mathProtoFuncLog):
    5296         (KJS::mathProtoFuncMax):
    5297         (KJS::mathProtoFuncMin):
    5298         (KJS::mathProtoFuncPow):
    5299         (KJS::mathProtoFuncRandom):
    5300         (KJS::mathProtoFuncRound):
    5301         (KJS::mathProtoFuncSin):
    5302         (KJS::mathProtoFuncSqrt):
    5303         (KJS::mathProtoFuncTan):
    5304         * kjs/NumberObject.cpp:
    5305         (KJS::NumberPrototype::NumberPrototype):
    5306         (KJS::numberProtoFuncToString):
    5307         (KJS::numberProtoFuncToLocaleString):
    5308         (KJS::numberProtoFuncToFixed):
    5309         (KJS::numberProtoFuncToExponential):
    5310         (KJS::numberProtoFuncToPrecision):
    5311         (KJS::NumberConstructor::NumberConstructor):
    5312         (KJS::NumberConstructor::getValueProperty):
    5313         (KJS::NumberConstructor::construct):
    5314         (KJS::NumberConstructor::callAsFunction):
    5315         * kjs/RegExpObject.cpp:
    5316         (KJS::RegExpPrototype::RegExpPrototype):
    5317         (KJS::regExpProtoFuncToString):
    5318         (KJS::RegExpObject::getValueProperty):
    5319         (KJS::RegExpConstructor::RegExpConstructor):
    5320         (KJS::RegExpMatchesArray::fillArrayInstance):
    5321         (KJS::RegExpConstructor::arrayOfMatches):
    5322         (KJS::RegExpConstructor::getBackref):
    5323         (KJS::RegExpConstructor::getLastParen):
    5324         (KJS::RegExpConstructor::getLeftContext):
    5325         (KJS::RegExpConstructor::getRightContext):
    5326         (KJS::RegExpConstructor::getValueProperty):
    5327         (KJS::RegExpConstructor::construct):
    5328         * kjs/RegExpObject.h:
    5329         * kjs/Shell.cpp:
    5330         (GlobalObject::GlobalObject):
    5331         (functionGC):
    5332         (functionRun):
    5333         (functionReadline):
    5334         (jscmain):
    5335         * kjs/date_object.cpp:
    5336         (KJS::formatLocaleDate):
    5337         (KJS::DatePrototype::DatePrototype):
    5338         (KJS::DateConstructor::DateConstructor):
    5339         (KJS::DateConstructor::construct):
    5340         (KJS::DateConstructor::callAsFunction):
    5341         (KJS::DateFunction::DateFunction):
    5342         (KJS::DateFunction::callAsFunction):
    5343         (KJS::dateProtoFuncToString):
    5344         (KJS::dateProtoFuncToUTCString):
    5345         (KJS::dateProtoFuncToDateString):
    5346         (KJS::dateProtoFuncToTimeString):
    5347         (KJS::dateProtoFuncToLocaleString):
    5348         (KJS::dateProtoFuncToLocaleDateString):
    5349         (KJS::dateProtoFuncToLocaleTimeString):
    5350         (KJS::dateProtoFuncValueOf):
    5351         (KJS::dateProtoFuncGetTime):
    5352         (KJS::dateProtoFuncGetFullYear):
    5353         (KJS::dateProtoFuncGetUTCFullYear):
    5354         (KJS::dateProtoFuncToGMTString):
    5355         (KJS::dateProtoFuncGetMonth):
    5356         (KJS::dateProtoFuncGetUTCMonth):
    5357         (KJS::dateProtoFuncGetDate):
    5358         (KJS::dateProtoFuncGetUTCDate):
    5359         (KJS::dateProtoFuncGetDay):
    5360         (KJS::dateProtoFuncGetUTCDay):
    5361         (KJS::dateProtoFuncGetHours):
    5362         (KJS::dateProtoFuncGetUTCHours):
    5363         (KJS::dateProtoFuncGetMinutes):
    5364         (KJS::dateProtoFuncGetUTCMinutes):
    5365         (KJS::dateProtoFuncGetSeconds):
    5366         (KJS::dateProtoFuncGetUTCSeconds):
    5367         (KJS::dateProtoFuncGetMilliSeconds):
    5368         (KJS::dateProtoFuncGetUTCMilliseconds):
    5369         (KJS::dateProtoFuncGetTimezoneOffset):
    5370         (KJS::dateProtoFuncSetTime):
    5371         (KJS::setNewValueFromTimeArgs):
    5372         (KJS::setNewValueFromDateArgs):
    5373         (KJS::dateProtoFuncSetYear):
    5374         (KJS::dateProtoFuncGetYear):
    5375         * kjs/error_object.cpp:
    5376         (KJS::ErrorPrototype::ErrorPrototype):
    5377         (KJS::errorProtoFuncToString):
    5378         (KJS::ErrorConstructor::ErrorConstructor):
    5379         (KJS::ErrorConstructor::construct):
    5380         (KJS::NativeErrorPrototype::NativeErrorPrototype):
    5381         (KJS::NativeErrorConstructor::NativeErrorConstructor):
    5382         (KJS::NativeErrorConstructor::construct):
    5383         * kjs/identifier.h:
    5384         * kjs/internal.cpp:
    5385         (KJS::StringObject::create):
    5386         (KJS::JSString::lengthGetter):
    5387         (KJS::JSString::indexGetter):
    5388         (KJS::JSString::indexNumericPropertyGetter):
    5389         * kjs/interpreter.cpp:
    5390         * kjs/list.cpp:
    5391         (KJS::ArgList::slowAppend):
    5392         * kjs/list.h:
    5393         * kjs/lookup.h:
    5394         (KJS::staticFunctionGetter):
    5395         (KJS::cacheGlobalObject):
    5396         * kjs/nodes.cpp:
    5397         (KJS::Node::emitThrowError):
    5398         (KJS::StringNode::emitCode):
    5399         (KJS::ArrayNode::emitCode):
    5400         (KJS::FuncDeclNode::makeFunction):
    5401         (KJS::FuncExprNode::makeFunction):
    5402         * kjs/nodes.h:
    5403         * kjs/object_object.cpp:
    5404         (KJS::ObjectPrototype::ObjectPrototype):
    5405         (KJS::objectProtoFuncToLocaleString):
    5406         (KJS::objectProtoFuncToString):
    5407         (KJS::ObjectConstructor::ObjectConstructor):
    5408         (KJS::ObjectConstructor::construct):
    5409         * kjs/protect.h:
    5410         (KJS::gcProtect):
    5411         (KJS::gcUnprotect):
    5412         * kjs/string_object.cpp:
    5413         (KJS::StringObject::StringObject):
    5414         (KJS::StringPrototype::StringPrototype):
    5415         (KJS::replace):
    5416         (KJS::stringProtoFuncCharAt):
    5417         (KJS::stringProtoFuncCharCodeAt):
    5418         (KJS::stringProtoFuncConcat):
    5419         (KJS::stringProtoFuncIndexOf):
    5420         (KJS::stringProtoFuncLastIndexOf):
    5421         (KJS::stringProtoFuncMatch):
    5422         (KJS::stringProtoFuncSearch):
    5423         (KJS::stringProtoFuncReplace):
    5424         (KJS::stringProtoFuncSlice):
    5425         (KJS::stringProtoFuncSplit):
    5426         (KJS::stringProtoFuncSubstr):
    5427         (KJS::stringProtoFuncSubstring):
    5428         (KJS::stringProtoFuncToLowerCase):
    5429         (KJS::stringProtoFuncToUpperCase):
    5430         (KJS::stringProtoFuncToLocaleLowerCase):
    5431         (KJS::stringProtoFuncToLocaleUpperCase):
    5432         (KJS::stringProtoFuncLocaleCompare):
    5433         (KJS::stringProtoFuncBig):
    5434         (KJS::stringProtoFuncSmall):
    5435         (KJS::stringProtoFuncBlink):
    5436         (KJS::stringProtoFuncBold):
    5437         (KJS::stringProtoFuncFixed):
    5438         (KJS::stringProtoFuncItalics):
    5439         (KJS::stringProtoFuncStrike):
    5440         (KJS::stringProtoFuncSub):
    5441         (KJS::stringProtoFuncSup):
    5442         (KJS::stringProtoFuncFontcolor):
    5443         (KJS::stringProtoFuncFontsize):
    5444         (KJS::stringProtoFuncAnchor):
    5445         (KJS::stringProtoFuncLink):
    5446         (KJS::StringConstructor::StringConstructor):
    5447         (KJS::StringConstructor::construct):
    5448         (KJS::StringConstructor::callAsFunction):
    5449         (KJS::StringConstructorFunction::StringConstructorFunction):
    5450         (KJS::StringConstructorFunction::callAsFunction):
    5451         * kjs/string_object.h:
    5452         (KJS::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
    5453         * kjs/ustring.h:
    5454         Updated for the above changes.
    5455 
    5456 2008-06-17  Timothy Hatcher  <[email protected]>
    5457 
    5458         Added a type to DebuggerCallFrame so the under interface can
    5459         distinguish anonymous functions and program call frames.
    5460 
    5461         https://bugs.webkit.org/show_bug.cgi?id=19585
    5462 
    5463         Reviewed by Geoff Garen.
    5464 
    5465         * JavaScriptCore.exp: Export the DebuggerCallFrame::type symbol.
    5466         * kjs/DebuggerCallFrame.cpp:
    5467         (KJS::DebuggerCallFrame::type): Added.
    5468         * kjs/DebuggerCallFrame.h:
    5469 
    5470 2008-06-17  Eric Seidel  <[email protected]>
    5471 
    5472         Reviewed by Tim H.
    5473        
    5474         Remove bogus ASSERT which tripped every time for those who use PAC files.
    5475 
    5476         * kjs/Parser.cpp:
    5477         (KJS::Parser::parse):
    5478 
    5479 2008-06-17  Kevin McCullough  <[email protected]>
    5480 
    5481         Reviewed by Geoff.
    5482 
    5483         <rdar://problem/5951534> JSProfiler: Don't profile console.profile()
    5484         or console.profileEnd()
    5485 
    5486         * profiler/Profile.cpp:
    5487         (KJS::Profile::stopProfiling): Moved the creation of the (idle) node to
    5488         the Profile (not ProfileNode).  This makes sense since the Profile
    5489         should be the one to modify the profile tree.  Also each stopProfiling()
    5490         does not need to check if it's the head node anymore.  Also fixed an
    5491         oddity where I was using willExecute to create the node.
    5492         (KJS::Profile::removeProfileStart): Removes the call to console.profile
    5493         that started this profile.
    5494         (KJS::Profile::removeProfileEnd): Removes the call to console.profileEnd
    5495         that ended this profile.
    5496         * profiler/Profile.h:
    5497         * profiler/ProfileNode.cpp: Moved the creation of the (idle) node to
    5498         the Profile object.
    5499         (KJS::ProfileNode::stopProfiling):
    5500         * profiler/ProfileNode.h: Added some helper functions and whitespace to
    5501         facilitate readability and the removal of profile() and profileEnd()
    5502         from the Profile tree.
    5503         (KJS::CallIdentifier::operator const char* ):
    5504         (KJS::ProfileNode::firstChild):
    5505         (KJS::ProfileNode::lastChild):
    5506         (KJS::ProfileNode::removeChild):
    5507         (KJS::ProfileNode::toString):
    5508 
    5509 2008-06-17  Ariya Hidayat  <[email protected]>
    5510 
    5511         Rubber stamped by Adam Roben.
    5512 
    5513         Include JSGlobalObject.h to fix the build.
    5514 
    5515         * kjs/ScopeChain.cpp:
    5516 
    5517 2008-06-17  Cameron Zwarich  <[email protected]>
    5518 
    5519         Reviewed by Oliver.
    5520 
    5521         Reduce code duplication in emitReadModifyAssignment().
    5522 
    5523         * kjs/nodes.cpp:
    5524         (KJS::emitReadModifyAssignment):
    5525 
    5526 2008-06-17  Cameron Zwarich  <[email protected]>
    5527 
    5528         Reviewed by Oliver.
    5529 
    5530         Sort includes alphabetically.
    5531 
    5532         * kjs/nodes.cpp:
    5533 
    5534 2008-06-16  Cameron Zwarich  <[email protected]>
    5535 
    5536         Reviewed by Maciej.
    5537 
    5538         Bug 19596: LEAK: Gmail leaks SegmentedVector<RegisterID>
    5539         <https://bugs.webkit.org/show_bug.cgi?id=19596>
    5540 
    5541         When growing SegmentedVector, we start adding segments at the position
    5542         of the last segment, overwriting it. The destructor frees allocated
    5543         segments starting at the segment of index 1, because the segment of
    5544         index 0 is assumed to be the initial inline segment. This causes a leak
    5545         of the segment that is referenced by index 0. Modifying grow() so that
    5546         it starts adding segments at the position after the last segment fixes
    5547         the leak.
    5548 
    5549         Since the initial segment is a special case in the lookup code, this
    5550         bug never manifested itself via incorrect results.
    5551 
    5552         * VM/SegmentedVector.h:
    5553         (KJS::SegmentedVector::grow):
    5554 
    5555 2008-06-16  Maciej Stachowiak  <[email protected]>
    5556 
    5557         Reviewed by Alexey.
    5558        
    5559         - removed nearly unused types.h and LocalStorageEntry.h headers
    5560 
    5561         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    5562         * JavaScriptCore.xcodeproj/project.pbxproj:
    5563         * kjs/ExecState.h:
    5564         * kjs/LocalStorageEntry.h: Removed.
    5565         * kjs/RegExpObject.cpp:
    5566         * kjs/error_object.cpp:
    5567         * kjs/grammar.y:
    5568         * kjs/nodes.cpp:
    5569         * kjs/types.h: Removed.
    5570 
    5571 2008-06-16  Alp Toker  <[email protected]>
    5572 
    5573         Rubber-stamped by Geoff.
    5574 
    5575         Change c++ to c in minidom and testapi emacs mode line comments.
    5576 
    5577         * API/Node.h:
    5578         * API/NodeList.c:
    5579         * API/NodeList.h:
    5580         * API/testapi.c:
    5581 
    5582 2008-06-16  Alexey Proskuryakov  <[email protected]>
    5583 
    5584         Trying to fix Windows build.
    5585 
    5586         * kjs/PropertyNameArray.h:
    5587         * kjs/identifier.cpp:
    5588         Include ExecState.h
    5589 
    5590 2008-06-16  Geoffrey Garen  <[email protected]>
    5591 
    5592         Reviewed by Oliver Hunt.
    5593        
    5594         Slight cleanup to the SymbolTableEntry class.
    5595        
    5596         Renamed isEmpty to isNull, since we usually use "empty" to mean "holds
    5597         the valid, empty value", and "null" to mean "holds no value".
    5598        
    5599         Changed an "== 0" to a "!", to match our style guidelines.
    5600        
    5601         Added some ASSERTs to verify the (possibly questionable) assumption that
    5602         all register indexes will have their high two bits set. Also clarified a
    5603         comment to make that assumption clear.
    5604 
    5605 2008-06-16  Alexey Proskuryakov  <[email protected]>
    5606 
    5607         Reviewed by Darin.
    5608 
    5609         Initialize functionQueueMutex in a safe manner.
    5610 
    5611         * wtf/MainThread.cpp:
    5612         (WTF::functionQueueMutex): Made it an AtomicallyInitializedStatic.
    5613 
    5614         (WTF::dispatchFunctionsFromMainThread):
    5615         (WTF::setMainThreadCallbacksPaused):
    5616         Assert that the current thread is main, meaning that the callbacksPaused static can be
    5617         accessed.
    5618 
    5619 2008-06-16  Alexey Proskuryakov  <[email protected]>
    5620 
    5621         Reviewed by Geoff Garen.
    5622 
    5623         Make Identifier construction use an explicitly passed IdentifierTable.
    5624 
    5625         No change on SunSpider total.
    5626 
    5627         * API/JSCallbackObjectFunctions.h:
    5628         (KJS::::getOwnPropertySlot):
    5629         (KJS::::put):
    5630         (KJS::::deleteProperty):
    5631         (KJS::::getPropertyNames):
    5632         * API/JSObjectRef.cpp:
    5633         (JSObjectMakeFunctionWithCallback):
    5634         (JSObjectMakeFunction):
    5635         (JSObjectHasProperty):
    5636         (JSObjectGetProperty):
    5637         (JSObjectSetProperty):
    5638         (JSObjectDeleteProperty):
    5639         (OpaqueJSPropertyNameArray::OpaqueJSPropertyNameArray):
    5640         (JSObjectCopyPropertyNames):
    5641         * JavaScriptCore.exp:
    5642         * VM/CodeGenerator.cpp:
    5643         (KJS::CodeGenerator::CodeGenerator):
    5644         (KJS::CodeGenerator::registerForLocal):
    5645         (KJS::CodeGenerator::isLocal):
    5646         (KJS::CodeGenerator::addConstant):
    5647         (KJS::CodeGenerator::findScopedProperty):
    5648         * VM/CodeGenerator.h:
    5649         (KJS::CodeGenerator::globalData):
    5650         (KJS::CodeGenerator::propertyNames):
    5651         * VM/JSPropertyNameIterator.cpp:
    5652         (KJS::JSPropertyNameIterator::create):
    5653         * VM/Machine.cpp:
    5654         (KJS::Machine::throwException):
    5655         (KJS::Machine::privateExecute):
    5656         * kjs/ArrayPrototype.cpp:
    5657         (KJS::ArrayConstructor::ArrayConstructor):
    5658         * kjs/BooleanObject.cpp:
    5659         (KJS::BooleanConstructor::BooleanConstructor):
    5660         * kjs/FunctionPrototype.cpp:
    5661         (KJS::FunctionConstructor::FunctionConstructor):
    5662         (KJS::FunctionConstructor::construct):
    5663         * kjs/JSArray.cpp:
    5664         (KJS::JSArray::inlineGetOwnPropertySlot):
    5665         (KJS::JSArray::put):
    5666         (KJS::JSArray::deleteProperty):
    5667         (KJS::JSArray::getPropertyNames):
    5668         * kjs/JSFunction.cpp:
    5669         (KJS::Arguments::Arguments):
    5670         * kjs/JSGlobalData.cpp:
    5671         (KJS::JSGlobalData::JSGlobalData):
    5672         * kjs/JSGlobalObject.cpp:
    5673         (KJS::JSGlobalObject::reset):
    5674         * kjs/JSObject.cpp:
    5675         (KJS::JSObject::getOwnPropertySlot):
    5676         (KJS::JSObject::put):
    5677         (KJS::JSObject::putWithAttributes):
    5678         (KJS::JSObject::deleteProperty):
    5679         (KJS::JSObject::findPropertyHashEntry):
    5680         (KJS::JSObject::getPropertyNames):
    5681         (KJS::Error::create):
    5682         * kjs/JSVariableObject.cpp:
    5683         (KJS::JSVariableObject::getPropertyNames):
    5684         * kjs/NumberObject.cpp:
    5685         (KJS::NumberConstructor::NumberConstructor):
    5686         * kjs/PropertyNameArray.cpp:
    5687         (KJS::PropertyNameArray::add):
    5688         * kjs/PropertyNameArray.h:
    5689         (KJS::PropertyNameArray::PropertyNameArray):
    5690         (KJS::PropertyNameArray::addKnownUnique):
    5691         * kjs/PropertySlot.h:
    5692         (KJS::PropertySlot::getValue):
    5693         * kjs/RegExpObject.cpp:
    5694         (KJS::RegExpConstructor::RegExpConstructor):
    5695         * kjs/ScopeChain.cpp:
    5696         (KJS::ScopeChainNode::print):
    5697         * kjs/Shell.cpp:
    5698         (GlobalObject::GlobalObject):
    5699         * kjs/date_object.cpp:
    5700         (KJS::DateConstructor::DateConstructor):
    5701         * kjs/error_object.cpp:
    5702         (KJS::ErrorConstructor::ErrorConstructor):
    5703         (KJS::NativeErrorConstructor::NativeErrorConstructor):
    5704         * kjs/grammar.y:
    5705         * kjs/identifier.cpp:
    5706         (KJS::Identifier::add):
    5707         (KJS::Identifier::addSlowCase):
    5708         * kjs/identifier.h:
    5709         (KJS::Identifier::Identifier):
    5710         (KJS::Identifier::from):
    5711         (KJS::Identifier::equal):
    5712         (KJS::Identifier::add):
    5713         (KJS::operator==):
    5714         (KJS::operator!=):
    5715         * kjs/internal.cpp:
    5716         (KJS::JSString::getOwnPropertySlot):
    5717         * kjs/lexer.cpp:
    5718         (KJS::Lexer::Lexer):
    5719         (KJS::Lexer::lex):
    5720         (KJS::Lexer::makeIdentifier):
    5721         * kjs/lexer.h:
    5722         * kjs/lookup.cpp:
    5723         (KJS::HashTable::createTable):
    5724         * kjs/lookup.h:
    5725         (KJS::HashTable::initializeIfNeeded):
    5726         (KJS::HashTable::entry):
    5727         (KJS::getStaticPropertySlot):
    5728         (KJS::getStaticFunctionSlot):
    5729         (KJS::getStaticValueSlot):
    5730         (KJS::lookupPut):
    5731         * kjs/object_object.cpp:
    5732         (KJS::objectProtoFuncHasOwnProperty):
    5733         (KJS::objectProtoFuncDefineGetter):
    5734         (KJS::objectProtoFuncDefineSetter):
    5735         (KJS::objectProtoFuncLookupGetter):
    5736         (KJS::objectProtoFuncLookupSetter):
    5737         (KJS::objectProtoFuncPropertyIsEnumerable):
    5738         (KJS::ObjectConstructor::ObjectConstructor):
    5739         * kjs/string_object.cpp:
    5740         (KJS::StringObject::getOwnPropertySlot):
    5741         (KJS::StringObject::getPropertyNames):
    5742         (KJS::StringConstructor::StringConstructor):
    5743         Just pass ExecState or JSGlobalData everywhere. Identifier construction is now always
    5744         explicit.
    5745 
    5746         * kjs/nodes.cpp: (KJS::RegExpNode::emitCode): Here, Identifier was created from a non-literal
    5747         char*, which was incorrect, as that uses the pointer value as a key.
    5748 
    5749 2008-06-16  Thiago Macieira  <[email protected]>
    5750 
    5751         Reviewed by Darin.
    5752 
    5753         https://bugs.webkit.org/show_bug.cgi?id=19577
    5754 
    5755         Fix compilation in C++ environments where C99 headers are not present
    5756 
    5757         The stdbool.h header is a C99 feature, defining the "_Bool" type as well as the
    5758         "true" and "false" constants. But it's completely unnecessary in C++ as the
    5759         language already defines the "bool" type and its two values.
    5760 
    5761         * API/JSBase.h:
    5762         * API/JSContextRef.h:
    5763         * API/JSObjectRef.h:
    5764         * API/JSStringRef.h:
    5765         * API/JSValueRef.h:
    5766 
    5767 2008-06-16  Kevin McCullough  <[email protected]>
    5768 
    5769         Reviewed by John.
    5770 
    5771         <rdar://problem/6012509> JSProfiler: %s are incorrect if you exclude a
    5772         top level node like (idle)
    5773 
    5774         * profiler/Profile.cpp:
    5775         (KJS::Profile::focus):
    5776         (KJS::Profile::exclude): Subtract the selfTime from the totalTime of the
    5777         head since its self time will only be non-zero when one of its children
    5778         were excluded. Since the head's totalTime is used to calculate %s when
    5779         its totalTime is the same as the sum of all its visible childrens' times
    5780         their %s will sum to 100%.
    5781 
    5782 2008-06-16  Kevin McCullough  <[email protected]>
    5783 
    5784         Reviewed by Sam Weinig.
    5785 
    5786         <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the profiler.
    5787 
    5788         * profiler/Profile.cpp:
    5789         (KJS::Profile::willExecute):
    5790 
    5791 2008-06-16  Kevin McCullough  <[email protected]>
    5792 
    5793         Reviewed by Sam.
    5794 
    5795         <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the
    5796         profiler.
    5797         - Remove the last of the uses of recursion in the profiler.
    5798 
    5799         * JavaScriptCore.exp: Export the new function's signature.
    5800         * profiler/Profile.cpp:
    5801         (KJS::calculateVisibleTotalTime): Added a new static method for
    5802         recalculating the visibleTotalTime of methods after focus has changed
    5803         which are visible.
    5804         (KJS::stopProfiling):
    5805         (KJS::Profile::focus): Implemented focus without recursion.
    5806         * profiler/Profile.h: Moved implementation into the definition file.
    5807         * profiler/ProfileNode.cpp:
    5808         (KJS::ProfileNode::traverseNextNodePreOrder): Added an argument for
    5809         whether or not to process the children nodes, this allows focus to skip
    5810         sub trees which have been set as not visible.
    5811         (KJS::ProfileNode::calculateVisibleTotalTime): This function set's a
    5812         node's total visible time to the sum of its self time and its children's
    5813         total times.
    5814         (KJS::ProfileNode::focus): Implemented focus without recursion.
    5815         * profiler/ProfileNode.h:
    5816         (KJS::CallIdentifier::operator!= ):
    5817         (KJS::ProfileNode::setActualTotalTime): Expanded setting the total time
    5818         so that focus could modify only the visible total time.
    5819         (KJS::ProfileNode::setVisibleTotalTime):
    5820 
    5821 2008-06-16  Christian Dywan  <[email protected]>
    5822 
    5823         Reviewed by Sam.
    5824 
    5825         https://bugs.webkit.org/show_bug.cgi?id=19552
    5826         JavaScriptCore headers use C++ style comments
    5827 
    5828         Replace all C++ style comments with C style multiline
    5829         comments and remove all "mode" lines.
    5830 
    5831         * API/JSBase.h:
    5832         * API/JSClassRef.h:
    5833         * API/JSContextRef.h:
    5834         * API/JSObjectRef.h:
    5835         * API/JSStringRef.h:
    5836         * API/JSStringRefBSTR.h:
    5837         * API/JSStringRefCF.h:
    5838         * API/JSValueRef.h:
    5839         * API/JavaScript.h:
    5840         * API/JavaScriptCore.h:
    5841 
    5842 2008-06-16  Christian Dywan  <[email protected]>
    5843 
    5844         Reviewed by Sam.
    5845 
    5846         https://bugs.webkit.org/show_bug.cgi?id=19557
    5847         (JavaScriptCore) minidom uses C++ style comments
    5848 
    5849         Use only C style comments in minidom sources
    5850 
    5851         * API/JSNode.c:
    5852         (JSNode_appendChild):
    5853         (JSNode_removeChild):
    5854         * API/JSNode.h:
    5855         * API/JSNodeList.c:
    5856         (JSNodeList_getProperty):
    5857         * API/JSNodeList.h:
    5858         * API/Node.c:
    5859         * API/Node.h:
    5860         * API/NodeList.c:
    5861         (NodeList_new):
    5862         (NodeList_item):
    5863         * API/NodeList.h:
    5864         * API/minidom.c:
    5865         (createStringWithContentsOfFile):
    5866         * wtf/Assertions.h:
    5867         * wtf/UnusedParam.h:
    5868 
    5869 2008-06-16  Adriaan de Groot  <[email protected]>
    5870 
    5871         Reviewed by Simon.
    5872 
    5873         Fix compilation on Solaris
    5874 
    5875         On some systems, munmap takes a char* instead of a void* (contrary to POSIX and
    5876         Single Unix Specification). Since you can always convert from char* to void*
    5877         but not vice-versa, do the casting to char*.
    5878 
    5879         * kjs/collector.cpp:
    5880         (KJS::allocateBlock):
    5881         (KJS::freeBlock):
    5882 
    5883 2008-06-16  Cameron Zwarich  <[email protected]>
    5884 
    5885         Reviewed by Maciej.
    5886 
    5887         Make a UnaryOpNode class to reduce boilerplate code for UnaryPlusNode,
    5888         NegateNode, BitwiseNotNode, and LogicalNotNode.
    5889 
    5890         * VM/CodeGenerator.h:
    5891         (KJS::CodeGenerator::emitToJSNumber):
    5892         * kjs/nodes.cpp:
    5893         (KJS::UnaryOpNode::emitCode):
    5894         * kjs/nodes.h:
    5895         (KJS::UnaryOpNode::UnaryOpNode):
    5896         (KJS::UnaryPlusNode::):
    5897         (KJS::NegateNode::):
    5898         (KJS::NegateNode::precedence):
    5899         (KJS::BitwiseNotNode::):
    5900         (KJS::BitwiseNotNode::precedence):
    5901         (KJS::LogicalNotNode::):
    5902         (KJS::LogicalNotNode::precedence):
    5903 
    5904 2008-06-16  Jan Michael Alonzo  <[email protected]>
    5905 
    5906         Gtk build fix
    5907 
    5908         * GNUmakefile.am:
    5909 
    5910 2008-06-15  Darin Adler  <[email protected]>
    5911 
    5912         - rename KJS::List to KJS::ArgList
    5913 
    5914         * API/JSCallbackConstructor.cpp:
    5915         (KJS::JSCallbackConstructor::construct):
    5916         * API/JSCallbackConstructor.h:
    5917         * API/JSCallbackFunction.cpp:
    5918         (KJS::JSCallbackFunction::callAsFunction):
    5919         * API/JSCallbackFunction.h:
    5920         * API/JSCallbackObject.h:
    5921         * API/JSCallbackObjectFunctions.h:
    5922         (KJS::::construct):
    5923         (KJS::::callAsFunction):
    5924         * API/JSObjectRef.cpp:
    5925         (JSObjectMakeFunction):
    5926         (JSObjectCallAsFunction):
    5927         (JSObjectCallAsConstructor):
    5928         * JavaScriptCore.exp:
    5929         * VM/Machine.cpp:
    5930         (KJS::Machine::execute):
    5931         (KJS::Machine::privateExecute):
    5932         * VM/Machine.h:
    5933         * kjs/ArrayPrototype.cpp:
    5934         (KJS::arrayProtoFuncToString):
    5935         (KJS::arrayProtoFuncToLocaleString):
    5936         (KJS::arrayProtoFuncJoin):
    5937         (KJS::arrayProtoFuncConcat):
    5938         (KJS::arrayProtoFuncPop):
    5939         (KJS::arrayProtoFuncPush):
    5940         (KJS::arrayProtoFuncReverse):
    5941         (KJS::arrayProtoFuncShift):
    5942         (KJS::arrayProtoFuncSlice):
    5943         (KJS::arrayProtoFuncSort):
    5944         (KJS::arrayProtoFuncSplice):
    5945         (KJS::arrayProtoFuncUnShift):
    5946         (KJS::arrayProtoFuncFilter):
    5947         (KJS::arrayProtoFuncMap):
    5948         (KJS::arrayProtoFuncEvery):
    5949         (KJS::arrayProtoFuncForEach):
    5950         (KJS::arrayProtoFuncSome):
    5951         (KJS::arrayProtoFuncIndexOf):
    5952         (KJS::arrayProtoFuncLastIndexOf):
    5953         (KJS::ArrayConstructor::construct):
    5954         (KJS::ArrayConstructor::callAsFunction):
    5955         * kjs/ArrayPrototype.h:
    5956         * kjs/BooleanObject.cpp:
    5957         (KJS::booleanProtoFuncToString):
    5958         (KJS::booleanProtoFuncValueOf):
    5959         (KJS::BooleanConstructor::construct):
    5960         (KJS::BooleanConstructor::callAsFunction):
    5961         * kjs/BooleanObject.h:
    5962         * kjs/CommonIdentifiers.h:
    5963         * kjs/ExecState.h:
    5964         (KJS::ExecState::emptyList):
    5965         * kjs/FunctionPrototype.cpp:
    5966         (KJS::FunctionPrototype::callAsFunction):
    5967         (KJS::functionProtoFuncToString):
    5968         (KJS::functionProtoFuncApply):
    5969         (KJS::functionProtoFuncCall):
    5970         (KJS::FunctionConstructor::construct):
    5971         (KJS::FunctionConstructor::callAsFunction):
    5972         * kjs/FunctionPrototype.h:
    5973         * kjs/JSActivation.cpp:
    5974         (KJS::JSActivation::createArgumentsObject):
    5975         * kjs/JSArray.cpp:
    5976         (KJS::JSArray::JSArray):
    5977         (KJS::AVLTreeAbstractorForArrayCompare::compare_key_key):
    5978         * kjs/JSArray.h:
    5979         * kjs/JSFunction.cpp:
    5980         (KJS::JSFunction::callAsFunction):
    5981         (KJS::JSFunction::construct):
    5982         (KJS::IndexToNameMap::IndexToNameMap):
    5983         (KJS::Arguments::Arguments):
    5984         (KJS::encode):
    5985         (KJS::decode):
    5986         (KJS::globalFuncEval):
    5987         (KJS::globalFuncParseInt):
    5988         (KJS::globalFuncParseFloat):
    5989         (KJS::globalFuncIsNaN):
    5990         (KJS::globalFuncIsFinite):
    5991         (KJS::globalFuncDecodeURI):
    5992         (KJS::globalFuncDecodeURIComponent):
    5993         (KJS::globalFuncEncodeURI):
    5994         (KJS::globalFuncEncodeURIComponent):
    5995         (KJS::globalFuncEscape):
    5996         (KJS::globalFuncUnescape):
    5997         (KJS::globalFuncKJSPrint):
    5998         (KJS::PrototypeFunction::callAsFunction):
    5999         (KJS::PrototypeReflexiveFunction::callAsFunction):
    6000         * kjs/JSFunction.h:
    6001         * kjs/JSGlobalData.h:
    6002         * kjs/JSImmediate.cpp:
    6003         (KJS::JSImmediate::toObject):
    6004         * kjs/JSNotAnObject.cpp:
    6005         (KJS::JSNotAnObject::construct):
    6006         (KJS::JSNotAnObject::callAsFunction):
    6007         * kjs/JSNotAnObject.h:
    6008         * kjs/JSObject.cpp:
    6009         (KJS::JSObject::put):
    6010         (KJS::JSObject::construct):
    6011         (KJS::JSObject::callAsFunction):
    6012         (KJS::Error::create):
    6013         * kjs/JSObject.h:
    6014         * kjs/MathObject.cpp:
    6015         (KJS::mathProtoFuncAbs):
    6016         (KJS::mathProtoFuncACos):
    6017         (KJS::mathProtoFuncASin):
    6018         (KJS::mathProtoFuncATan):
    6019         (KJS::mathProtoFuncATan2):
    6020         (KJS::mathProtoFuncCeil):
    6021         (KJS::mathProtoFuncCos):
    6022         (KJS::mathProtoFuncExp):
    6023         (KJS::mathProtoFuncFloor):
    6024         (KJS::mathProtoFuncLog):
    6025         (KJS::mathProtoFuncMax):
    6026         (KJS::mathProtoFuncMin):
    6027         (KJS::mathProtoFuncPow):
    6028         (KJS::mathProtoFuncRandom):
    6029         (KJS::mathProtoFuncRound):
    6030         (KJS::mathProtoFuncSin):
    6031         (KJS::mathProtoFuncSqrt):
    6032         (KJS::mathProtoFuncTan):
    6033         * kjs/MathObject.h:
    6034         * kjs/NumberObject.cpp:
    6035         (KJS::numberProtoFuncToString):
    6036         (KJS::numberProtoFuncToLocaleString):
    6037         (KJS::numberProtoFuncValueOf):
    6038         (KJS::numberProtoFuncToFixed):
    6039         (KJS::numberProtoFuncToExponential):
    6040         (KJS::numberProtoFuncToPrecision):
    6041         (KJS::NumberConstructor::construct):
    6042         (KJS::NumberConstructor::callAsFunction):
    6043         * kjs/NumberObject.h:
    6044         * kjs/RegExpObject.cpp:
    6045         (KJS::regExpProtoFuncTest):
    6046         (KJS::regExpProtoFuncExec):
    6047         (KJS::regExpProtoFuncCompile):
    6048         (KJS::regExpProtoFuncToString):
    6049         (KJS::RegExpObject::match):
    6050         (KJS::RegExpObject::test):
    6051         (KJS::RegExpObject::exec):
    6052         (KJS::RegExpObject::callAsFunction):
    6053         (KJS::RegExpConstructor::construct):
    6054         (KJS::RegExpConstructor::callAsFunction):
    6055         * kjs/RegExpObject.h:
    6056         * kjs/Shell.cpp:
    6057         (functionPrint):
    6058         (functionDebug):
    6059         (functionGC):
    6060         (functionVersion):
    6061         (functionRun):
    6062         (functionLoad):
    6063         (functionReadline):
    6064         (functionQuit):
    6065         * kjs/collector.cpp:
    6066         (KJS::Collector::collect):
    6067         * kjs/collector.h:
    6068         (KJS::Collector::markListSet):
    6069         * kjs/date_object.cpp:
    6070         (KJS::formatLocaleDate):
    6071         (KJS::fillStructuresUsingTimeArgs):
    6072         (KJS::fillStructuresUsingDateArgs):
    6073         (KJS::DateConstructor::construct):
    6074         (KJS::DateConstructor::callAsFunction):
    6075         (KJS::DateFunction::callAsFunction):
    6076         (KJS::dateProtoFuncToString):
    6077         (KJS::dateProtoFuncToUTCString):
    6078         (KJS::dateProtoFuncToDateString):
    6079         (KJS::dateProtoFuncToTimeString):
    6080         (KJS::dateProtoFuncToLocaleString):
    6081         (KJS::dateProtoFuncToLocaleDateString):
    6082         (KJS::dateProtoFuncToLocaleTimeString):
    6083         (KJS::dateProtoFuncValueOf):
    6084         (KJS::dateProtoFuncGetTime):
    6085         (KJS::dateProtoFuncGetFullYear):
    6086         (KJS::dateProtoFuncGetUTCFullYear):
    6087         (KJS::dateProtoFuncToGMTString):
    6088         (KJS::dateProtoFuncGetMonth):
    6089         (KJS::dateProtoFuncGetUTCMonth):
    6090         (KJS::dateProtoFuncGetDate):
    6091         (KJS::dateProtoFuncGetUTCDate):
    6092         (KJS::dateProtoFuncGetDay):
    6093         (KJS::dateProtoFuncGetUTCDay):
    6094         (KJS::dateProtoFuncGetHours):
    6095         (KJS::dateProtoFuncGetUTCHours):
    6096         (KJS::dateProtoFuncGetMinutes):
    6097         (KJS::dateProtoFuncGetUTCMinutes):
    6098         (KJS::dateProtoFuncGetSeconds):
    6099         (KJS::dateProtoFuncGetUTCSeconds):
    6100         (KJS::dateProtoFuncGetMilliSeconds):
    6101         (KJS::dateProtoFuncGetUTCMilliseconds):
    6102         (KJS::dateProtoFuncGetTimezoneOffset):
    6103         (KJS::dateProtoFuncSetTime):
    6104         (KJS::setNewValueFromTimeArgs):
    6105         (KJS::setNewValueFromDateArgs):
    6106         (KJS::dateProtoFuncSetMilliSeconds):
    6107         (KJS::dateProtoFuncSetUTCMilliseconds):
    6108         (KJS::dateProtoFuncSetSeconds):
    6109         (KJS::dateProtoFuncSetUTCSeconds):
    6110         (KJS::dateProtoFuncSetMinutes):
    6111         (KJS::dateProtoFuncSetUTCMinutes):
    6112         (KJS::dateProtoFuncSetHours):
    6113         (KJS::dateProtoFuncSetUTCHours):
    6114         (KJS::dateProtoFuncSetDate):
    6115         (KJS::dateProtoFuncSetUTCDate):
    6116         (KJS::dateProtoFuncSetMonth):
    6117         (KJS::dateProtoFuncSetUTCMonth):
    6118         (KJS::dateProtoFuncSetFullYear):
    6119         (KJS::dateProtoFuncSetUTCFullYear):
    6120         (KJS::dateProtoFuncSetYear):
    6121         (KJS::dateProtoFuncGetYear):
    6122         * kjs/date_object.h:
    6123         * kjs/debugger.h:
    6124         * kjs/error_object.cpp:
    6125         (KJS::errorProtoFuncToString):
    6126         (KJS::ErrorConstructor::construct):
    6127         (KJS::ErrorConstructor::callAsFunction):
    6128         (KJS::NativeErrorConstructor::construct):
    6129         (KJS::NativeErrorConstructor::callAsFunction):
    6130         * kjs/error_object.h:
    6131         * kjs/internal.cpp:
    6132         (KJS::JSNumberCell::toObject):
    6133         (KJS::JSNumberCell::toThisObject):
    6134         * kjs/list.cpp:
    6135         (KJS::ArgList::getSlice):
    6136         (KJS::ArgList::markLists):
    6137         (KJS::ArgList::slowAppend):
    6138         * kjs/list.h:
    6139         (KJS::ArgList::ArgList):
    6140         (KJS::ArgList::~ArgList):
    6141         * kjs/object_object.cpp:
    6142         (KJS::objectProtoFuncValueOf):
    6143         (KJS::objectProtoFuncHasOwnProperty):
    6144         (KJS::objectProtoFuncIsPrototypeOf):
    6145         (KJS::objectProtoFuncDefineGetter):
    6146         (KJS::objectProtoFuncDefineSetter):
    6147         (KJS::objectProtoFuncLookupGetter):
    6148         (KJS::objectProtoFuncLookupSetter):
    6149         (KJS::objectProtoFuncPropertyIsEnumerable):
    6150         (KJS::objectProtoFuncToLocaleString):
    6151         (KJS::objectProtoFuncToString):
    6152         (KJS::ObjectConstructor::construct):
    6153         (KJS::ObjectConstructor::callAsFunction):
    6154         * kjs/object_object.h:
    6155         * kjs/string_object.cpp:
    6156         (KJS::replace):
    6157         (KJS::stringProtoFuncToString):
    6158         (KJS::stringProtoFuncValueOf):
    6159         (KJS::stringProtoFuncCharAt):
    6160         (KJS::stringProtoFuncCharCodeAt):
    6161         (KJS::stringProtoFuncConcat):
    6162         (KJS::stringProtoFuncIndexOf):
    6163         (KJS::stringProtoFuncLastIndexOf):
    6164         (KJS::stringProtoFuncMatch):
    6165         (KJS::stringProtoFuncSearch):
    6166         (KJS::stringProtoFuncReplace):
    6167         (KJS::stringProtoFuncSlice):
    6168         (KJS::stringProtoFuncSplit):
    6169         (KJS::stringProtoFuncSubstr):
    6170         (KJS::stringProtoFuncSubstring):
    6171         (KJS::stringProtoFuncToLowerCase):
    6172         (KJS::stringProtoFuncToUpperCase):
    6173         (KJS::stringProtoFuncToLocaleLowerCase):
    6174         (KJS::stringProtoFuncToLocaleUpperCase):
    6175         (KJS::stringProtoFuncLocaleCompare):
    6176         (KJS::stringProtoFuncBig):
    6177         (KJS::stringProtoFuncSmall):
    6178         (KJS::stringProtoFuncBlink):
    6179         (KJS::stringProtoFuncBold):
    6180         (KJS::stringProtoFuncFixed):
    6181         (KJS::stringProtoFuncItalics):
    6182         (KJS::stringProtoFuncStrike):
    6183         (KJS::stringProtoFuncSub):
    6184         (KJS::stringProtoFuncSup):
    6185         (KJS::stringProtoFuncFontcolor):
    6186         (KJS::stringProtoFuncFontsize):
    6187         (KJS::stringProtoFuncAnchor):
    6188         (KJS::stringProtoFuncLink):
    6189         (KJS::StringConstructor::construct):
    6190         (KJS::StringConstructor::callAsFunction):
    6191         (KJS::StringConstructorFunction::callAsFunction):
    6192         * kjs/string_object.h:
    6193 
    6194 2008-06-15  Darin Adler  <[email protected]>
    6195 
    6196         - new names for more JavaScriptCore files
    6197 
    6198         * API/JSCallbackFunction.cpp:
    6199         * API/JSObjectRef.cpp:
    6200         * DerivedSources.make:
    6201         * GNUmakefile.am:
    6202         * JavaScriptCore.exp:
    6203         * JavaScriptCore.pri:
    6204         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    6205         * JavaScriptCore.xcodeproj/project.pbxproj:
    6206         * JavaScriptCoreSources.bkl:
    6207         * VM/Machine.cpp:
    6208         * kjs/AllInOneFile.cpp:
    6209         * kjs/ArrayPrototype.cpp: Copied from JavaScriptCore/kjs/array_object.cpp.
    6210         * kjs/ArrayPrototype.h: Copied from JavaScriptCore/kjs/array_object.h.
    6211         * kjs/BooleanObject.cpp: Copied from JavaScriptCore/kjs/bool_object.cpp.
    6212         * kjs/BooleanObject.h: Copied from JavaScriptCore/kjs/bool_object.h.
    6213         * kjs/ExecState.cpp:
    6214         * kjs/ExecState.h:
    6215         * kjs/FunctionPrototype.cpp: Copied from JavaScriptCore/kjs/function_object.cpp.
    6216         * kjs/FunctionPrototype.h: Copied from JavaScriptCore/kjs/function_object.h.
    6217         * kjs/JSArray.cpp: Copied from JavaScriptCore/kjs/array_instance.cpp.
    6218         * kjs/JSArray.h: Copied from JavaScriptCore/kjs/array_instance.h.
    6219         * kjs/JSFunction.cpp:
    6220         * kjs/JSFunction.h:
    6221         * kjs/JSGlobalObject.cpp:
    6222         * kjs/JSImmediate.cpp:
    6223         * kjs/JSObject.h:
    6224         * kjs/JSString.h:
    6225         * kjs/JSValue.h:
    6226         * kjs/JSVariableObject.cpp:
    6227         * kjs/MathObject.cpp: Copied from JavaScriptCore/kjs/math_object.cpp.
    6228         * kjs/MathObject.h: Copied from JavaScriptCore/kjs/math_object.h.
    6229         * kjs/NumberObject.cpp: Copied from JavaScriptCore/kjs/number_object.cpp.
    6230         * kjs/NumberObject.h: Copied from JavaScriptCore/kjs/number_object.h.
    6231         * kjs/PropertyMap.cpp: Copied from JavaScriptCore/kjs/property_map.cpp.
    6232         * kjs/PropertyMap.h: Copied from JavaScriptCore/kjs/property_map.h.
    6233         * kjs/PropertySlot.cpp: Copied from JavaScriptCore/kjs/property_slot.cpp.
    6234         * kjs/PropertySlot.h: Copied from JavaScriptCore/kjs/property_slot.h.
    6235         * kjs/RegExpObject.cpp: Copied from JavaScriptCore/kjs/regexp_object.cpp.
    6236         * kjs/RegExpObject.h: Copied from JavaScriptCore/kjs/regexp_object.h.
    6237         * kjs/ScopeChain.cpp: Copied from JavaScriptCore/kjs/scope_chain.cpp.
    6238         * kjs/ScopeChain.h: Copied from JavaScriptCore/kjs/scope_chain.h.
    6239         * kjs/ScopeChainMark.h: Copied from JavaScriptCore/kjs/scope_chain_mark.h.
    6240         * kjs/Shell.cpp:
    6241         * kjs/array_instance.cpp: Removed.
    6242         * kjs/array_instance.h: Removed.
    6243         * kjs/array_object.cpp: Removed.
    6244         * kjs/array_object.h: Removed.
    6245         * kjs/bool_object.cpp: Removed.
    6246         * kjs/bool_object.h: Removed.
    6247         * kjs/error_object.h:
    6248         * kjs/function_object.cpp: Removed.
    6249         * kjs/function_object.h: Removed.
    6250         * kjs/internal.cpp:
    6251         * kjs/math_object.cpp: Removed.
    6252         * kjs/math_object.h: Removed.
    6253         * kjs/nodes.cpp:
    6254         * kjs/number_object.cpp: Removed.
    6255         * kjs/number_object.h: Removed.
    6256         * kjs/object_object.cpp:
    6257         * kjs/property_map.cpp: Removed.
    6258         * kjs/property_map.h: Removed.
    6259         * kjs/property_slot.cpp: Removed.
    6260         * kjs/property_slot.h: Removed.
    6261         * kjs/regexp_object.cpp: Removed.
    6262         * kjs/regexp_object.h: Removed.
    6263         * kjs/scope_chain.cpp: Removed.
    6264         * kjs/scope_chain.h: Removed.
    6265         * kjs/scope_chain_mark.h: Removed.
    6266         * kjs/string_object.cpp:
    6267         * kjs/string_object.h:
    6268 
    6269 2008-06-15  Darin Adler  <[email protected]>
    6270 
    6271         - new names for a few key JavaScriptCore files
    6272 
    6273         * API/JSBase.cpp:
    6274         * API/JSCallbackConstructor.h:
    6275         * API/JSCallbackFunction.cpp:
    6276         * API/JSCallbackFunction.h:
    6277         * API/JSCallbackObject.h:
    6278         * API/JSCallbackObjectFunctions.h:
    6279         * API/JSClassRef.h:
    6280         * API/JSContextRef.cpp:
    6281         * API/JSObjectRef.cpp:
    6282         * API/JSStringRef.cpp:
    6283         * API/JSStringRefCF.cpp:
    6284         * API/JSValueRef.cpp:
    6285         * GNUmakefile.am:
    6286         * JavaScriptCore.pri:
    6287         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    6288         * JavaScriptCore.xcodeproj/project.pbxproj:
    6289         * JavaScriptCoreSources.bkl:
    6290         * VM/CodeBlock.cpp:
    6291         * VM/CodeGenerator.cpp:
    6292         * VM/ExceptionHelpers.cpp:
    6293         * VM/ExceptionHelpers.h:
    6294         * VM/JSPropertyNameIterator.cpp:
    6295         * VM/JSPropertyNameIterator.h:
    6296         * VM/Machine.cpp:
    6297         * kjs/AllInOneFile.cpp:
    6298         * kjs/DateMath.cpp:
    6299         * kjs/DebuggerCallFrame.cpp:
    6300         * kjs/ExecState.cpp:
    6301         * kjs/JSActivation.cpp:
    6302         * kjs/JSFunction.cpp: Copied from JavaScriptCore/kjs/function.cpp.
    6303         * kjs/JSFunction.h: Copied from JavaScriptCore/kjs/function.h.
    6304         * kjs/JSImmediate.cpp:
    6305         * kjs/JSNotAnObject.h:
    6306         * kjs/JSObject.cpp: Copied from JavaScriptCore/kjs/object.cpp.
    6307         * kjs/JSObject.h: Copied from JavaScriptCore/kjs/object.h.
    6308         * kjs/JSString.h: Copied from JavaScriptCore/kjs/internal.h.
    6309         * kjs/JSValue.cpp: Copied from JavaScriptCore/kjs/value.cpp.
    6310         * kjs/JSValue.h: Copied from JavaScriptCore/kjs/value.h.
    6311         * kjs/JSVariableObject.h:
    6312         * kjs/JSWrapperObject.h:
    6313         * kjs/Shell.cpp:
    6314         * kjs/SymbolTable.h:
    6315         * kjs/array_instance.h:
    6316         * kjs/collector.cpp:
    6317         * kjs/date_object.cpp:
    6318         * kjs/date_object.h:
    6319         * kjs/error_object.cpp:
    6320         * kjs/function.cpp: Removed.
    6321         * kjs/function.h: Removed.
    6322         * kjs/function_object.cpp:
    6323         * kjs/function_object.h:
    6324         * kjs/grammar.y:
    6325         * kjs/internal.cpp:
    6326         * kjs/internal.h: Removed.
    6327         * kjs/lexer.cpp:
    6328         * kjs/list.h:
    6329         * kjs/lookup.h:
    6330         * kjs/nodes.h:
    6331         * kjs/object.cpp: Removed.
    6332         * kjs/object.h: Removed.
    6333         * kjs/object_object.h:
    6334         * kjs/operations.cpp:
    6335         * kjs/property_map.cpp:
    6336         * kjs/property_slot.cpp:
    6337         * kjs/property_slot.h:
    6338         * kjs/protect.h:
    6339         * kjs/regexp_object.cpp:
    6340         * kjs/scope_chain.cpp:
    6341         * kjs/string_object.h:
    6342         * kjs/ustring.cpp:
    6343         * kjs/value.cpp: Removed.
    6344         * kjs/value.h: Removed.
    6345         * profiler/Profile.cpp:
    6346         * profiler/Profiler.cpp:
    6347 
    6348 2008-06-15  Darin Adler  <[email protected]>
    6349 
    6350         Rubber stamped by Sam.
    6351 
    6352         - cut down on confusing uses of "Object" and "Imp" in
    6353           JavaScriptCore class names
    6354 
    6355         * API/JSCallbackFunction.cpp:
    6356         (KJS::JSCallbackFunction::JSCallbackFunction):
    6357         * API/JSCallbackFunction.h:
    6358         * VM/Machine.cpp:
    6359         (KJS::Machine::privateExecute):
    6360         * kjs/ExecState.h:
    6361         (KJS::ExecState::regExpTable):
    6362         (KJS::ExecState::regExpConstructorTable):
    6363         * kjs/JSGlobalData.cpp:
    6364         (KJS::JSGlobalData::JSGlobalData):
    6365         (KJS::JSGlobalData::~JSGlobalData):
    6366         * kjs/JSGlobalData.h:
    6367         * kjs/JSGlobalObject.cpp:
    6368         (KJS::JSGlobalObject::reset):
    6369         * kjs/JSGlobalObject.h:
    6370         (KJS::JSGlobalObject::objectConstructor):
    6371         (KJS::JSGlobalObject::functionConstructor):
    6372         (KJS::JSGlobalObject::arrayConstructor):
    6373         (KJS::JSGlobalObject::booleanConstructor):
    6374         (KJS::JSGlobalObject::stringConstructor):
    6375         (KJS::JSGlobalObject::numberConstructor):
    6376         (KJS::JSGlobalObject::dateConstructor):
    6377         (KJS::JSGlobalObject::regExpConstructor):
    6378         (KJS::JSGlobalObject::errorConstructor):
    6379         (KJS::JSGlobalObject::evalErrorConstructor):
    6380         (KJS::JSGlobalObject::rangeErrorConstructor):
    6381         (KJS::JSGlobalObject::referenceErrorConstructor):
    6382         (KJS::JSGlobalObject::syntaxErrorConstructor):
    6383         (KJS::JSGlobalObject::typeErrorConstructor):
    6384         (KJS::JSGlobalObject::URIErrorConstructor):
    6385         * kjs/array_object.cpp:
    6386         (KJS::ArrayConstructor::ArrayConstructor):
    6387         (KJS::ArrayConstructor::getConstructData):
    6388         (KJS::ArrayConstructor::construct):
    6389         (KJS::ArrayConstructor::callAsFunction):
    6390         * kjs/array_object.h:
    6391         * kjs/bool_object.cpp:
    6392         (KJS::BooleanObject::BooleanObject):
    6393         (KJS::BooleanPrototype::BooleanPrototype):
    6394         (KJS::booleanProtoFuncToString):
    6395         (KJS::booleanProtoFuncValueOf):
    6396         (KJS::BooleanConstructor::BooleanConstructor):
    6397         (KJS::BooleanConstructor::getConstructData):
    6398         (KJS::BooleanConstructor::construct):
    6399         (KJS::BooleanConstructor::callAsFunction):
    6400         * kjs/bool_object.h:
    6401         * kjs/date_object.cpp:
    6402         (KJS::DatePrototype::DatePrototype):
    6403         (KJS::DateConstructor::DateConstructor):
    6404         (KJS::DateConstructor::getConstructData):
    6405         (KJS::DateConstructor::construct):
    6406         (KJS::DateConstructor::callAsFunction):
    6407         (KJS::DateFunction::DateFunction):
    6408         (KJS::DateFunction::callAsFunction):
    6409         * kjs/date_object.h:
    6410         * kjs/error_object.cpp:
    6411         (KJS::ErrorPrototype::ErrorPrototype):
    6412         (KJS::ErrorConstructor::ErrorConstructor):
    6413         (KJS::ErrorConstructor::getConstructData):
    6414         (KJS::ErrorConstructor::construct):
    6415         (KJS::ErrorConstructor::callAsFunction):
    6416         (KJS::NativeErrorConstructor::NativeErrorConstructor):
    6417         (KJS::NativeErrorConstructor::getConstructData):
    6418         (KJS::NativeErrorConstructor::construct):
    6419         (KJS::NativeErrorConstructor::callAsFunction):
    6420         (KJS::NativeErrorConstructor::mark):
    6421         * kjs/error_object.h:
    6422         * kjs/function.cpp:
    6423         (KJS::JSFunction::JSFunction):
    6424         (KJS::JSFunction::mark):
    6425         (KJS::JSFunction::getOwnPropertySlot):
    6426         (KJS::JSFunction::put):
    6427         (KJS::JSFunction::deleteProperty):
    6428         (KJS::PrototypeFunction::PrototypeFunction):
    6429         (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction):
    6430         (KJS::PrototypeReflexiveFunction::mark):
    6431         * kjs/function.h:
    6432         * kjs/function_object.cpp:
    6433         (KJS::functionProtoFuncToString):
    6434         (KJS::FunctionConstructor::FunctionConstructor):
    6435         (KJS::FunctionConstructor::getConstructData):
    6436         (KJS::FunctionConstructor::construct):
    6437         (KJS::FunctionConstructor::callAsFunction):
    6438         * kjs/function_object.h:
    6439         * kjs/internal.cpp:
    6440         (KJS::StringObject::create):
    6441         (KJS::JSString::toObject):
    6442         (KJS::JSString::toThisObject):
    6443         (KJS::JSString::getOwnPropertySlot):
    6444         (KJS::InternalFunction::InternalFunction):
    6445         (KJS::InternalFunction::getCallData):
    6446         (KJS::InternalFunction::implementsHasInstance):
    6447         * kjs/math_object.cpp:
    6448         (KJS::MathObject::MathObject):
    6449         (KJS::MathObject::getOwnPropertySlot):
    6450         (KJS::MathObject::getValueProperty):
    6451         * kjs/math_object.h:
    6452         * kjs/number_object.cpp:
    6453         (KJS::NumberObject::NumberObject):
    6454         (KJS::NumberPrototype::NumberPrototype):
    6455         (KJS::numberProtoFuncToString):
    6456         (KJS::numberProtoFuncToLocaleString):
    6457         (KJS::numberProtoFuncValueOf):
    6458         (KJS::numberProtoFuncToFixed):
    6459         (KJS::numberProtoFuncToExponential):
    6460         (KJS::numberProtoFuncToPrecision):
    6461         (KJS::NumberConstructor::NumberConstructor):
    6462         (KJS::NumberConstructor::getOwnPropertySlot):
    6463         (KJS::NumberConstructor::getValueProperty):
    6464         (KJS::NumberConstructor::getConstructData):
    6465         (KJS::NumberConstructor::construct):
    6466         (KJS::NumberConstructor::callAsFunction):
    6467         * kjs/number_object.h:
    6468         * kjs/object.cpp:
    6469         (KJS::JSObject::putDirectFunction):
    6470         * kjs/object.h:
    6471         * kjs/object_object.cpp:
    6472         (KJS::ObjectConstructor::ObjectConstructor):
    6473         (KJS::ObjectConstructor::getConstructData):
    6474         (KJS::ObjectConstructor::construct):
    6475         (KJS::ObjectConstructor::callAsFunction):
    6476         * kjs/object_object.h:
    6477         * kjs/regexp.cpp:
    6478         (KJS::RegExp::RegExp):
    6479         * kjs/regexp_object.cpp:
    6480         (KJS::regExpProtoFuncTest):
    6481         (KJS::regExpProtoFuncExec):
    6482         (KJS::regExpProtoFuncCompile):
    6483         (KJS::regExpProtoFuncToString):
    6484         (KJS::RegExpObject::RegExpObject):
    6485         (KJS::RegExpObject::~RegExpObject):
    6486         (KJS::RegExpObject::getOwnPropertySlot):
    6487         (KJS::RegExpObject::getValueProperty):
    6488         (KJS::RegExpObject::put):
    6489         (KJS::RegExpObject::putValueProperty):
    6490         (KJS::RegExpObject::match):
    6491         (KJS::RegExpObject::test):
    6492         (KJS::RegExpObject::exec):
    6493         (KJS::RegExpObject::getCallData):
    6494         (KJS::RegExpObject::callAsFunction):
    6495         (KJS::RegExpConstructorPrivate::RegExpConstructorPrivate):
    6496         (KJS::RegExpConstructor::RegExpConstructor):
    6497         (KJS::RegExpConstructor::performMatch):
    6498         (KJS::RegExpMatchesArray::RegExpMatchesArray):
    6499         (KJS::RegExpMatchesArray::~RegExpMatchesArray):
    6500         (KJS::RegExpMatchesArray::fillArrayInstance):
    6501         (KJS::RegExpConstructor::arrayOfMatches):
    6502         (KJS::RegExpConstructor::getBackref):
    6503         (KJS::RegExpConstructor::getLastParen):
    6504         (KJS::RegExpConstructor::getLeftContext):
    6505         (KJS::RegExpConstructor::getRightContext):
    6506         (KJS::RegExpConstructor::getOwnPropertySlot):
    6507         (KJS::RegExpConstructor::getValueProperty):
    6508         (KJS::RegExpConstructor::put):
    6509         (KJS::RegExpConstructor::putValueProperty):
    6510         (KJS::RegExpConstructor::getConstructData):
    6511         (KJS::RegExpConstructor::construct):
    6512         (KJS::RegExpConstructor::callAsFunction):
    6513         (KJS::RegExpConstructor::input):
    6514         * kjs/regexp_object.h:
    6515         * kjs/string_object.cpp:
    6516         (KJS::StringObject::StringObject):
    6517         (KJS::StringObject::getOwnPropertySlot):
    6518         (KJS::StringObject::put):
    6519         (KJS::StringObject::deleteProperty):
    6520         (KJS::StringObject::getPropertyNames):
    6521         (KJS::StringPrototype::StringPrototype):
    6522         (KJS::StringPrototype::getOwnPropertySlot):
    6523         (KJS::replace):
    6524         (KJS::stringProtoFuncToString):
    6525         (KJS::stringProtoFuncValueOf):
    6526         (KJS::stringProtoFuncCharAt):
    6527         (KJS::stringProtoFuncCharCodeAt):
    6528         (KJS::stringProtoFuncConcat):
    6529         (KJS::stringProtoFuncIndexOf):
    6530         (KJS::stringProtoFuncLastIndexOf):
    6531         (KJS::stringProtoFuncMatch):
    6532         (KJS::stringProtoFuncSearch):
    6533         (KJS::stringProtoFuncReplace):
    6534         (KJS::stringProtoFuncSlice):
    6535         (KJS::stringProtoFuncSplit):
    6536         (KJS::stringProtoFuncSubstr):
    6537         (KJS::stringProtoFuncSubstring):
    6538         (KJS::stringProtoFuncToLowerCase):
    6539         (KJS::stringProtoFuncToUpperCase):
    6540         (KJS::stringProtoFuncToLocaleLowerCase):
    6541         (KJS::stringProtoFuncToLocaleUpperCase):
    6542         (KJS::stringProtoFuncLocaleCompare):
    6543         (KJS::stringProtoFuncBig):
    6544         (KJS::stringProtoFuncSmall):
    6545         (KJS::stringProtoFuncBlink):
    6546         (KJS::stringProtoFuncBold):
    6547         (KJS::stringProtoFuncFixed):
    6548         (KJS::stringProtoFuncItalics):
    6549         (KJS::stringProtoFuncStrike):
    6550         (KJS::stringProtoFuncSub):
    6551         (KJS::stringProtoFuncSup):
    6552         (KJS::stringProtoFuncFontcolor):
    6553         (KJS::stringProtoFuncFontsize):
    6554         (KJS::stringProtoFuncAnchor):
    6555         (KJS::stringProtoFuncLink):
    6556         (KJS::StringConstructor::StringConstructor):
    6557         (KJS::StringConstructor::getConstructData):
    6558         (KJS::StringConstructor::construct):
    6559         (KJS::StringConstructor::callAsFunction):
    6560         (KJS::StringConstructorFunction::StringConstructorFunction):
    6561         (KJS::StringConstructorFunction::callAsFunction):
    6562         * kjs/string_object.h:
    6563         (KJS::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
    6564         * profiler/Profiler.cpp:
    6565         (KJS::createCallIdentifier):
    6566 
    6567 2008-06-15  Darin Adler  <[email protected]>
    6568 
    6569         Rubber stamped by Sam.
    6570 
    6571         - use JS prefix and simpler names for basic JavaScriptCore types,
    6572           to complement JSValue and JSObject
    6573 
    6574         * JavaScriptCore.exp:
    6575         * VM/Machine.cpp:
    6576         (KJS::jsLess):
    6577         (KJS::jsLessEq):
    6578         (KJS::jsAdd):
    6579         (KJS::callEval):
    6580         (KJS::Machine::execute):
    6581         (KJS::Machine::retrieveArguments):
    6582         (KJS::Machine::retrieveCaller):
    6583         (KJS::Machine::getCallFrame):
    6584         (KJS::Machine::getFunctionAndArguments):
    6585         * VM/Machine.h:
    6586         * VM/Register.h:
    6587         * kjs/DebuggerCallFrame.cpp:
    6588         (KJS::DebuggerCallFrame::functionName):
    6589         * kjs/ExecState.h:
    6590         * kjs/JSActivation.cpp:
    6591         (KJS::JSActivation::createArgumentsObject):
    6592         * kjs/array_instance.cpp:
    6593         (KJS::JSArray::checkConsistency):
    6594         (KJS::JSArray::JSArray):
    6595         (KJS::JSArray::~JSArray):
    6596         (KJS::JSArray::getItem):
    6597         (KJS::JSArray::lengthGetter):
    6598         (KJS::JSArray::inlineGetOwnPropertySlot):
    6599         (KJS::JSArray::getOwnPropertySlot):
    6600         (KJS::JSArray::put):
    6601         (KJS::JSArray::deleteProperty):
    6602         (KJS::JSArray::getPropertyNames):
    6603         (KJS::JSArray::increaseVectorLength):
    6604         (KJS::JSArray::setLength):
    6605         (KJS::JSArray::mark):
    6606         (KJS::JSArray::sort):
    6607         (KJS::JSArray::compactForSorting):
    6608         (KJS::JSArray::lazyCreationData):
    6609         (KJS::JSArray::setLazyCreationData):
    6610         * kjs/array_instance.h:
    6611         * kjs/array_object.cpp:
    6612         (KJS::ArrayPrototype::ArrayPrototype):
    6613         (KJS::ArrayPrototype::getOwnPropertySlot):
    6614         (KJS::arrayProtoFuncToString):
    6615         (KJS::arrayProtoFuncToLocaleString):
    6616         (KJS::arrayProtoFuncConcat):
    6617         (KJS::arrayProtoFuncSort):
    6618         (KJS::ArrayObjectImp::construct):
    6619         * kjs/array_object.h:
    6620         * kjs/completion.h:
    6621         * kjs/function.cpp:
    6622         (KJS::JSFunction::JSFunction):
    6623         (KJS::JSFunction::mark):
    6624         (KJS::JSFunction::getCallData):
    6625         (KJS::JSFunction::callAsFunction):
    6626         (KJS::JSFunction::argumentsGetter):
    6627         (KJS::JSFunction::callerGetter):
    6628         (KJS::JSFunction::lengthGetter):
    6629         (KJS::JSFunction::getOwnPropertySlot):
    6630         (KJS::JSFunction::put):
    6631         (KJS::JSFunction::deleteProperty):
    6632         (KJS::JSFunction::getParameterName):
    6633         (KJS::JSFunction::getConstructData):
    6634         (KJS::JSFunction::construct):
    6635         (KJS::IndexToNameMap::IndexToNameMap):
    6636         (KJS::Arguments::Arguments):
    6637         * kjs/function.h:
    6638         * kjs/function_object.cpp:
    6639         (KJS::functionProtoFuncToString):
    6640         (KJS::functionProtoFuncApply):
    6641         (KJS::FunctionObjectImp::construct):
    6642         * kjs/internal.cpp:
    6643         (KJS::JSString::toPrimitive):
    6644         (KJS::JSString::getPrimitiveNumber):
    6645         (KJS::JSString::toBoolean):
    6646         (KJS::JSString::toNumber):
    6647         (KJS::JSString::toString):
    6648         (KJS::StringInstance::create):
    6649         (KJS::JSString::toObject):
    6650         (KJS::JSString::toThisObject):
    6651         (KJS::JSString::lengthGetter):
    6652         (KJS::JSString::indexGetter):
    6653         (KJS::JSString::indexNumericPropertyGetter):
    6654         (KJS::JSString::getOwnPropertySlot):
    6655         (KJS::JSNumberCell::type):
    6656         (KJS::JSNumberCell::toPrimitive):
    6657         (KJS::JSNumberCell::getPrimitiveNumber):
    6658         (KJS::JSNumberCell::toBoolean):
    6659         (KJS::JSNumberCell::toNumber):
    6660         (KJS::JSNumberCell::toString):
    6661         (KJS::JSNumberCell::toObject):
    6662         (KJS::JSNumberCell::toThisObject):
    6663         (KJS::JSNumberCell::getUInt32):
    6664         (KJS::JSNumberCell::getTruncatedInt32):
    6665         (KJS::JSNumberCell::getTruncatedUInt32):
    6666         (KJS::GetterSetter::mark):
    6667         (KJS::GetterSetter::toPrimitive):
    6668         (KJS::GetterSetter::getPrimitiveNumber):
    6669         (KJS::GetterSetter::toBoolean):
    6670         (KJS::GetterSetter::toNumber):
    6671         (KJS::GetterSetter::toString):
    6672         (KJS::GetterSetter::toObject):
    6673         (KJS::GetterSetter::getOwnPropertySlot):
    6674         (KJS::GetterSetter::put):
    6675         (KJS::GetterSetter::toThisObject):
    6676         * kjs/internal.h:
    6677         (KJS::JSString::JSString):
    6678         (KJS::JSString::getStringPropertySlot):
    6679         * kjs/nodes.cpp:
    6680         (KJS::FuncDeclNode::makeFunction):
    6681         (KJS::FuncExprNode::makeFunction):
    6682         * kjs/nodes.h:
    6683         * kjs/object.cpp:
    6684         (KJS::JSObject::put):
    6685         (KJS::JSObject::deleteProperty):
    6686         (KJS::JSObject::defineGetter):
    6687         (KJS::JSObject::defineSetter):
    6688         (KJS::JSObject::lookupGetter):
    6689         (KJS::JSObject::lookupSetter):
    6690         (KJS::JSObject::fillGetterPropertySlot):
    6691         * kjs/object.h:
    6692         (KJS::GetterSetter::GetterSetter):
    6693         * kjs/operations.cpp:
    6694         (KJS::equal):
    6695         (KJS::strictEqual):
    6696         * kjs/property_map.cpp:
    6697         (KJS::PropertyMap::containsGettersOrSetters):
    6698         * kjs/regexp_object.cpp:
    6699         (KJS::RegExpMatchesArray::getOwnPropertySlot):
    6700         (KJS::RegExpMatchesArray::put):
    6701         (KJS::RegExpMatchesArray::deleteProperty):
    6702         (KJS::RegExpMatchesArray::getPropertyNames):
    6703         (KJS::RegExpMatchesArray::RegExpMatchesArray):
    6704         (KJS::RegExpMatchesArray::fillArrayInstance):
    6705         * kjs/string_object.cpp:
    6706         (KJS::StringInstance::StringInstance):
    6707         (KJS::replace):
    6708         (KJS::stringProtoFuncReplace):
    6709         (KJS::stringProtoFuncToLowerCase):
    6710         (KJS::stringProtoFuncToUpperCase):
    6711         (KJS::stringProtoFuncToLocaleLowerCase):
    6712         (KJS::stringProtoFuncToLocaleUpperCase):
    6713         * kjs/string_object.h:
    6714         (KJS::StringInstance::internalValue):
    6715         * kjs/value.cpp:
    6716         (KJS::JSCell::getNumber):
    6717         (KJS::JSCell::getString):
    6718         (KJS::JSCell::getObject):
    6719         (KJS::jsString):
    6720         (KJS::jsOwnedString):
    6721         * kjs/value.h:
    6722         (KJS::JSNumberCell::JSNumberCell):
    6723         (KJS::jsNumberCell):
    6724         (KJS::JSValue::uncheckedGetNumber):
    6725         * profiler/Profiler.cpp:
    6726         (KJS::createCallIdentifier):
    6727         (KJS::createCallIdentifierFromFunctionImp):
    6728 
    6729 2008-06-15  Maciej Stachowiak  <[email protected]>
    6730 
    6731         Reviewed by Alexey.
    6732        
    6733         - add emitUnaryOp, emitNullaryOp and emitUnaryOpNoDst; use them
    6734        
    6735         This removes some boilerplate code and also reduces the number of
    6736         places that will need to be changed to do on-demand emit of
    6737         loads (and thus support k operands).
    6738 
    6739         * VM/CodeGenerator.cpp:
    6740         (KJS::CodeGenerator::emitUnaryOp):
    6741         (KJS::CodeGenerator::emitNullaryOp):
    6742         (KJS::CodeGenerator::emitUnaryOpNoDst):
    6743         (KJS::CodeGenerator::emitPushScope):
    6744         * VM/CodeGenerator.h:
    6745         (KJS::CodeGenerator::emitNewObject):
    6746         (KJS::CodeGenerator::emitNewArray):
    6747         (KJS::CodeGenerator::emitNot):
    6748         (KJS::CodeGenerator::emitBitNot):
    6749         (KJS::CodeGenerator::emitToJSNumber):
    6750         (KJS::CodeGenerator::emitNegate):
    6751         (KJS::CodeGenerator::emitInstanceOf):
    6752         (KJS::CodeGenerator::emitTypeOf):
    6753         (KJS::CodeGenerator::emitIn):
    6754         (KJS::CodeGenerator::emitReturn):
    6755         (KJS::CodeGenerator::emitEnd):
    6756         (KJS::CodeGenerator::emitGetPropertyNames):
    6757 
    6758 2008-06-15  Alp Toker  <[email protected]>
    6759 
    6760         Rubber-stamped by Maciej.
    6761 
    6762         Install 'jsc' application by default.
    6763 
    6764         * GNUmakefile.am:
    6765 
    6766 2008-06-15  Maciej Stachowiak  <[email protected]>
    6767 
    6768         Reviewed by Oliver.
    6769        
    6770         - rename testkjs to jsc
    6771 
    6772         * GNUmakefile.am:
    6773         * JavaScriptCore.vcproj/JavaScriptCore.sln:
    6774         * JavaScriptCore.vcproj/jsc: Added.
    6775         * JavaScriptCore.vcproj/jsc/jsc.vcproj: Copied from JavaScriptCore.vcproj/testkjs/testkjs.vcproj.
    6776         * JavaScriptCore.vcproj/testkjs: Removed.
    6777         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Removed.
    6778         * JavaScriptCore.xcodeproj/project.pbxproj:
    6779         * jscore.bkl:
    6780         * kjs/Shell.cpp: Copied from kjs/testkjs.cpp.
    6781         (main):
    6782         (printUsageStatement):
    6783         (jscmain):
    6784         * kjs/jsc.pro: Copied from kjs/testkjs.pro.
    6785         * kjs/testkjs.cpp: Removed.
    6786         * kjs/testkjs.pro: Removed.
    6787         * tests/mozilla/expected.html:
    6788         * tests/mozilla/js1_2/Array/tostring_1.js:
    6789         * tests/mozilla/js1_2/Array/tostring_2.js:
    6790         * tests/mozilla/jsDriver.pl:
    6791 
    6792 2008-06-15  Cameron Zwarich  <[email protected]>
    6793 
    6794         Reviewed by Maciej.
    6795 
    6796         Mac build fix.
    6797 
    6798         * JavaScriptCore.xcodeproj/project.pbxproj:
    6799         * kjs/nodes.h:
    6800 
    6801 2008-06-15  Cameron Zwarich  <[email protected]>
    6802 
    6803         Reviewed by Maciej.
    6804 
    6805         Change the spelling of PrecMultiplicitave to PrecMultiplicative.
    6806 
    6807         * kjs/nodes.h:
    6808         (KJS::MultNode::precedence):
    6809         (KJS::DivNode::precedence):
    6810         (KJS::ModNode::precedence):
    6811 
    6812 2008-06-15  Cameron Zwarich  <[email protected]>
    6813 
    6814         Reviewed by Maciej.
    6815 
    6816         Remove unused preprocessor macros related to exceptions in the old
    6817         interpreter.
    6818 
    6819         * kjs/nodes.cpp:
    6820 
    6821 2008-06-15  Cameron Zwarich  <[email protected]>
    6822 
    6823         Reviewed by Maciej.
    6824 
    6825         Bug 19484: More instructions needs to use temporary registers
    6826         <https://bugs.webkit.org/show_bug.cgi?id=19484>
    6827 
    6828         Fix codegen for all binary operations so that temporaries are used if
    6829         necessary. This was done by making BinaryOpNode and ReverseBinaryOpNode
    6830         subclasses of ExpressionNode, and eliminating the custom emitCode()
    6831         methods for the individual node classes.
    6832 
    6833         This only adds 3 new instructions to SunSpider code, and there is no
    6834         difference in SunSpider execution time.
    6835 
    6836         * VM/CodeGenerator.cpp:
    6837         (KJS::CodeGenerator::emitBitNot):
    6838         (KJS::CodeGenerator::emitBinaryOp):
    6839         * VM/CodeGenerator.h:
    6840         * kjs/grammar.y:
    6841         * kjs/nodes.cpp:
    6842         (KJS::PreIncResolveNode::emitCode):
    6843         (KJS::PreDecResolveNode::emitCode):
    6844         (KJS::BinaryOpNode::emitCode):
    6845         (KJS::ReverseBinaryOpNode::emitCode):
    6846         (KJS::emitReadModifyAssignment):
    6847         (KJS::CaseBlockNode::emitCodeForBlock):
    6848         * kjs/nodes.h:
    6849         (KJS::BinaryOpNode::BinaryOpNode):
    6850         (KJS::ReverseBinaryOpNode::ReverseBinaryOpNode):
    6851         (KJS::MultNode::):
    6852         (KJS::DivNode::):
    6853         (KJS::DivNode::precedence):
    6854         (KJS::ModNode::):
    6855         (KJS::ModNode::precedence):
    6856         (KJS::AddNode::):
    6857         (KJS::AddNode::precedence):
    6858         (KJS::SubNode::):
    6859         (KJS::SubNode::precedence):
    6860         (KJS::LeftShiftNode::):
    6861         (KJS::LeftShiftNode::precedence):
    6862         (KJS::RightShiftNode::):
    6863         (KJS::RightShiftNode::precedence):
    6864         (KJS::UnsignedRightShiftNode::):
    6865         (KJS::UnsignedRightShiftNode::precedence):
    6866         (KJS::LessNode::):
    6867         (KJS::LessNode::precedence):
    6868         (KJS::GreaterNode::):
    6869         (KJS::GreaterNode::precedence):
    6870         (KJS::LessEqNode::):
    6871         (KJS::LessEqNode::precedence):
    6872         (KJS::GreaterEqNode::):
    6873         (KJS::GreaterEqNode::precedence):
    6874         (KJS::InstanceOfNode::):
    6875         (KJS::InstanceOfNode::precedence):
    6876         (KJS::InNode::):
    6877         (KJS::InNode::precedence):
    6878         (KJS::EqualNode::):
    6879         (KJS::EqualNode::precedence):
    6880         (KJS::NotEqualNode::):
    6881         (KJS::NotEqualNode::precedence):
    6882         (KJS::StrictEqualNode::):
    6883         (KJS::StrictEqualNode::precedence):
    6884         (KJS::NotStrictEqualNode::):
    6885         (KJS::NotStrictEqualNode::precedence):
    6886         (KJS::BitAndNode::):
    6887         (KJS::BitAndNode::precedence):
    6888         (KJS::BitOrNode::):
    6889         (KJS::BitOrNode::precedence):
    6890         (KJS::BitXOrNode::):
    6891         (KJS::BitXOrNode::precedence):
    6892         * kjs/nodes2string.cpp:
    6893         (KJS::LessNode::streamTo):
    6894         (KJS::GreaterNode::streamTo):
    6895         (KJS::LessEqNode::streamTo):
    6896         (KJS::GreaterEqNode::streamTo):
    6897         (KJS::InstanceOfNode::streamTo):
    6898         (KJS::InNode::streamTo):
    6899         (KJS::EqualNode::streamTo):
    6900         (KJS::NotEqualNode::streamTo):
    6901         (KJS::StrictEqualNode::streamTo):
    6902         (KJS::NotStrictEqualNode::streamTo):
    6903         (KJS::BitAndNode::streamTo):
    6904         (KJS::BitXOrNode::streamTo):
    6905         (KJS::BitOrNode::streamTo):
    6906 
    6907 2008-06-14  Darin Adler  <[email protected]>
    6908 
    6909         Rubber stamped by Sam.
    6910 
    6911         - rename a bunch of local symbols within the regular expression code to
    6912           follow our usual coding style, and do a few other name tweaks
    6913 
    6914         * pcre/pcre_compile.cpp:
    6915         (CompileData::CompileData):
    6916         (checkEscape):
    6917         (readRepeatCounts):
    6918         (compileBranch):
    6919         (compileBracket):
    6920         (calculateCompiledPatternLength):
    6921         (returnError):
    6922         (jsRegExpCompile):
    6923         * pcre/pcre_exec.cpp:
    6924         (MatchStack::MatchStack):
    6925         (MatchStack::canUseStackBufferForNextFrame):
    6926         (MatchStack::popCurrentFrame):
    6927         (match):
    6928         (tryFirstByteOptimization):
    6929         (tryRequiredByteOptimization):
    6930         (jsRegExpExecute):
    6931         * pcre/pcre_internal.h:
    6932 
    6933 2008-06-14  Cameron Zwarich  <[email protected]>
    6934 
    6935         Reviewed by Darin.
    6936 
    6937         Remove redundant uses of get().
    6938 
    6939         * kjs/nodes.cpp:
    6940         (KJS::BracketAccessorNode::emitCode):
    6941         (KJS::AddNode::emitCode):
    6942         (KJS::SubNode::emitCode):
    6943         (KJS::ReadModifyResolveNode::emitCode):
    6944         (KJS::AssignDotNode::emitCode):
    6945         (KJS::ReadModifyDotNode::emitCode):
    6946         (KJS::AssignBracketNode::emitCode):
    6947         (KJS::ReadModifyBracketNode::emitCode):
    6948 
    6949 2008-06-14  Cameron Zwarich  <[email protected]>
    6950 
    6951         Reviewed by Maciej.
    6952 
    6953         Make code generation not use a temporary for the left-hand side of an
    6954         expression if the right-hand side is a local variable.
    6955 
    6956         * VM/CodeGenerator.cpp:
    6957         (KJS::CodeGenerator::isLocal):
    6958         * VM/CodeGenerator.h:
    6959         (KJS::CodeGenerator::leftHandSideNeedsCopy):
    6960         (KJS::CodeGenerator::emitNodeForLeftHandSide):
    6961         * kjs/nodes.cpp:
    6962         (KJS::ResolveNode::isPure):
    6963         (KJS::BracketAccessorNode::emitCode):
    6964         (KJS::AddNode::emitCode):
    6965         (KJS::SubNode::emitCode):
    6966         (KJS::ReadModifyResolveNode::emitCode):
    6967         (KJS::AssignDotNode::emitCode):
    6968         (KJS::ReadModifyDotNode::emitCode):
    6969         (KJS::AssignBracketNode::emitCode):
    6970         (KJS::ReadModifyBracketNode::emitCode):
    6971         * kjs/nodes.h:
    6972         (KJS::ExpressionNode::):
    6973         (KJS::BooleanNode::):
    6974         (KJS::NumberNode::):
    6975         (KJS::StringNode::):
    6976 
    6977 2008-06-14  Darin Adler  <[email protected]>
    6978 
    6979         Reviewed by Sam.
    6980 
    6981         - more of https://bugs.webkit.org/show_bug.cgi?id=17257
    6982           start ref counts at 1 instead of 0 for speed
    6983 
    6984         * kjs/nodes.cpp:
    6985         (KJS::ParserRefCounted::hasOneRef): Added. Replaces refcount.
    6986         * kjs/nodes.h: Replaced refcount with hasOneRef.
    6987 
    6988         * wtf/ListRefPtr.h:
    6989         (WTF::ListRefPtr::~ListRefPtr): Changed to use hasOneRef instead of
    6990         refcount, so this class can be used with the RefCounted template.
    6991 
    6992         * wtf/RefCounted.h:
    6993         (WTF::RefCounted::hasOneRef): Made const, since there's no reason for
    6994         it to be non-const.
    6995 
    6996 2008-06-14  Maciej Stachowiak  <[email protected]>
    6997 
    6998         Reviewed by Oliver.
    6999        
    7000         - initialize local vars as side effect of call instead of in bytecode
    7001         1.004x speedup on SunSpider.
    7002 
    7003         This removes just the dispatch overhead for these loads - in the
    7004         future, dead store elimination might be able to eliminate them
    7005         entirely.
    7006        
    7007         * VM/CodeGenerator.cpp:
    7008         (KJS::CodeGenerator::CodeGenerator): For function blocks, don't
    7009         emit loads of undefined for var initialization.
    7010         * VM/Machine.cpp:
    7011         (KJS::slideRegisterWindowForCall): Instead, initialize locals
    7012         as part of the call.
    7013 
    7014 2008-06-14  Cameron Zwarich  <[email protected]>
    7015 
    7016         Reviewed by Oliver.
    7017 
    7018         Remove helper functions in the parser that are no longer needed.
    7019 
    7020         * kjs/grammar.y:
    7021 
    7022 2008-06-14  Cameron Zwarich  <[email protected]>
    7023 
    7024         Reviewed by Oliver.
    7025 
    7026         Bug 19484: More instructions needs to use temporary registers
    7027         <https://bugs.webkit.org/show_bug.cgi?id=19484>
    7028 
    7029         Make code generation for AddNode and SubNode use temporaries when
    7030         necessary.
    7031 
    7032         * kjs/grammar.y:
    7033         * kjs/nodes.cpp:
    7034         (KJS::AddNode::emitCode):
    7035         (KJS::SubNode::emitCode):
    7036         * kjs/nodes.h:
    7037         (KJS::AddNode::):
    7038         (KJS::SubNode::):
    7039 
    7040 2008-06-13  Cameron Zwarich  <[email protected]>
    7041 
    7042         Reviewed by Maciej.
    7043 
    7044         Combine TrueNode and FalseNode to make BooleanNode, and remove the
    7045         unused class PlaceholderTrueNode.
    7046 
    7047         * kjs/grammar.y:
    7048         * kjs/nodes.cpp:
    7049         (KJS::BooleanNode::emitCode):
    7050         * kjs/nodes.h:
    7051         (KJS::BooleanNode::):
    7052         (KJS::BooleanNode::precedence):
    7053         * kjs/nodes2string.cpp:
    7054         (KJS::BooleanNode::streamTo):
    7055 
    7056 2008-06-13  Cameron Zwarich  <[email protected]>
    7057 
    7058         Reviewed by Maciej.
    7059 
    7060         Eliminate the use of temporaries to store the left hand side of an
    7061         expression when the right hand side is a constant. This slightly
    7062         improves the generated bytecode for a few SunSpider tests, but it is
    7063         mostly in preparation for fixing
    7064 
    7065         Bug 19484: More instructions needs to use temporary registers
    7066         <https://bugs.webkit.org/show_bug.cgi?id=19484>
    7067 
    7068         * VM/CodeGenerator.h:
    7069         (KJS::CodeGenerator::leftHandSideNeedsCopy):
    7070         (KJS::CodeGenerator::emitNodeForLeftHandSide):
    7071         * kjs/nodes.cpp:
    7072         (KJS::BracketAccessorNode::emitCode):
    7073         (KJS::ReadModifyResolveNode::emitCode):
    7074         (KJS::AssignDotNode::emitCode):
    7075         (KJS::ReadModifyDotNode::emitCode):
    7076         (KJS::AssignBracketNode::emitCode):
    7077         (KJS::ReadModifyBracketNode::emitCode):
    7078         * kjs/nodes.h:
    7079         (KJS::ExpressionNode::):
    7080         (KJS::FalseNode::):
    7081         (KJS::TrueNode::):
    7082         (KJS::NumberNode::):
    7083         (KJS::StringNode::):
    7084 
    7085 2008-06-13  Maciej Stachowiak  <[email protected]>
    7086 
    7087         Reviewed by Oliver.
    7088        
    7089         - prettify opcode stats output
    7090        
    7091         I changed things to be a bit more aligned, also there is a new
    7092         section listing most common opcodes and most common sequences that
    7093         include them.
    7094 
    7095         * VM/Opcode.cpp:
    7096         (KJS::OpcodeStats::~OpcodeStats):
    7097         * VM/Opcode.h:
    7098 
    7099 2008-06-13  Kevin McCullough  <[email protected]>
    7100 
    7101         Reviewed by Geoff.
    7102 
    7103         <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the
    7104         profiler.
    7105         - Remove recursion from exclude().  This leaves only focus() to fix.
    7106 
    7107         * JavaScriptCore.exp: Change the signatures of the exported functions.
    7108         * profiler/Profile.cpp:
    7109         (KJS::Profile::forEach): I added a traverseNextNodePreOrder() function
    7110         and so needed to distinguish the other function by labeling it
    7111         traverseNextNodePostOrder().
    7112         (KJS::Profile::exclude): All new exclude that iteratively walks the tree
    7113         * profiler/Profile.h:
    7114         (KJS::Profile::focus): Add a null check for m_head.
    7115         * profiler/ProfileNode.cpp:
    7116         (KJS::ProfileNode::traverseNextNodePostOrder): Renamed
    7117         (KJS::ProfileNode::traverseNextNodePreOrder): Walks the tree in pre-
    7118         order, where the parent is processed before the children.
    7119         (KJS::ProfileNode::setTreeVisible): Iterate over the sub-tree and set
    7120         all of the nodes visible value.  This changes another function that used
    7121         recursion.
    7122         (KJS::ProfileNode::exclude): Remove recursion from this function.
    7123         Because we now check for m_visible and we are walking the tree in pre-
    7124         order we do not need to check if an excluded node is in an excluded
    7125         sub-tree.
    7126         * profiler/ProfileNode.h: Added specific selfTime functions to
    7127         facilitate exclude().
    7128         (KJS::ProfileNode::setSelfTime):
    7129         (KJS::ProfileNode::setActualSelfTime):
    7130         (KJS::ProfileNode::setVisibleSelfTime):
    7131 
    7132 2008-06-12  Darin Adler  <[email protected]>
    7133 
    7134         Reviewed by Maciej.
    7135 
    7136         - https://bugs.webkit.org/show_bug.cgi?id=19434
    7137           speed up SunSpider by avoiding some string boxing
    7138 
    7139         Speeds up SunSpider by 1.1%.
    7140 
    7141         Optimized code path for getting built-in properties from strings -- avoid
    7142         boxing with a string object in that case. We can make further changes to avoid
    7143         even more boxing, but this change alone is a win.
    7144 
    7145         * API/JSCallbackObjectFunctions.h:
    7146         (KJS::JSCallbackObject::staticValueGetter): Use isObject instead of inherits
    7147         in asssert, since the type of slotBase() is now JSValue, not JSObject.
    7148         (KJS::JSCallbackObject::staticFunctionGetter): Ditto.
    7149         (KJS::JSCallbackObject::callbackGetter): Ditto.
    7150 
    7151         * kjs/internal.cpp:
    7152         (KJS::StringImp::getPrimitiveNumber): Updated for change of data member name.
    7153         (KJS::StringImp::toBoolean): Ditto.
    7154         (KJS::StringImp::toNumber): Ditto.
    7155         (KJS::StringImp::toString): Ditto.
    7156         (KJS::StringInstance::create): Added; avoids a bit of cut and paste code.
    7157         (KJS::StringImp::toObject): Use StringInstance::create.
    7158         (KJS::StringImp::toThisObject): Ditto.
    7159         (KJS::StringImp::lengthGetter): Added. Replaces the getter that used to live in
    7160         the StringInstance class.
    7161         (KJS::StringImp::indexGetter): Ditto.
    7162         (KJS::StringImp::indexNumericPropertyGetter): Ditto.
    7163         (KJS::StringImp::getOwnPropertySlot): Added. Deals with built in properties of
    7164         the string class without creating a StringInstance.
    7165 
    7166         * kjs/internal.h:
    7167         (KJS::StringImp::getStringPropertySlot): Added. To be used by both the string
    7168         and string object getOwnPropertySlot function.
    7169 
    7170         * kjs/lookup.h:
    7171         (KJS::staticFunctionGetter): Updated since slotBase() is now a JSValue rather
    7172         than a JSObject.
    7173 
    7174         * kjs/object.h: Removed PropertySlot::slotBase() function, which can now move
    7175         back into property_slot.h where it belongs since it doesn't have to cast to
    7176         JSObject*.
    7177 
    7178         * kjs/property_slot.cpp:
    7179         (KJS::PropertySlot::functionGetter): Updated since slot.slotBase() is now a JSValue*
    7180         instead of JSObject*. setGetterSlot still guarantees the base is a JSObject*.
    7181         * kjs/property_slot.h:
    7182         (KJS::PropertySlot::PropertySlot): Changed base to JSValue* intead of JSCell*.
    7183         (KJS::PropertySlot::setStaticEntry): Ditto.
    7184         (KJS::PropertySlot::setCustom): Ditto.
    7185         (KJS::PropertySlot::setCustomIndex): Ditto.
    7186         (KJS::PropertySlot::setCustomNumeric): Ditto.
    7187         (KJS::PropertySlot::slotBase): Moved inline here since it no longer involves a
    7188         downcast to JSObject*.
    7189         (KJS::PropertySlot::setBase): Changed to JSValue*.
    7190 
    7191         * kjs/string_object.cpp:
    7192         (KJS::StringInstance::getOwnPropertySlot): Changed to use getStringPropertySlot
    7193         instead of coding the properties here. This allows sharing the code with StringImp.
    7194 
    7195         * kjs/string_object.h: Removed inlineGetOwnPropertySlot, lengthGetter, and indexGetter.
    7196         Made one of the constructors protected.
    7197 
    7198         * kjs/value.h: Made getOwnPropertySlot private in the JSCell class -- this is better
    7199         since it's not the real JSObject getOwnPropertySlot semantic and most callers shouldn't
    7200         use it.
    7201 
    7202 2008-06-12  Alexey Proskuryakov  <[email protected]>
    7203 
    7204         Reviewed by Maciej.
    7205 
    7206         Preparation to making JavaScript heap per-thread.
    7207 
    7208         * kjs/collector.cpp:
    7209         (KJS::Collector::collect):
    7210         * kjs/collector.h:
    7211         (KJS::Collector::markListSet):
    7212         The collector now holds the list of protected lists itself, to be made per-instance.
    7213 
    7214         * kjs/list.h: Changed to hold a pointer to a mark set this list is in, if any.
    7215         (KJS::List::List): Explicitly initialize m_size with zero, as m_vector.size() is
    7216         guaranteed to be such anyway.
    7217         (KJS::List::append): Changed the fast case to only be executed as long as inline buffer
    7218         is used, because otherwise, we now do more expensive checks.
    7219 
    7220         * kjs/list.cpp:
    7221         (KJS::List::markLists): Renamed from markProtectedListsSlowCase, made it take the list set
    7222         as a parameter.
    7223         (KJS::List::slowAppend): If a non-immediate value is appended, the list needs to be added
    7224         to an appropriate Heap's protected list. For now, a static Collector::markListSet() is
    7225         used, but the code is layed out in preparation to making the switch to multiple heaps.
    7226 
    7227         * JavaScriptCore.exp: Updated export list.
    7228 
    7229 2008-06-12  Cameron Zwarich  <[email protected]>
    7230 
    7231         Reviewed by Maciej.
    7232 
    7233         Bug 19510: CodeBlock::needsFullScopeChain not always set for global code
    7234         <https://bugs.webkit.org/show_bug.cgi?id=19510>
    7235 
    7236         This fixes the symptoms by using CodeGenerator::m_codeType to determine
    7237         when to use temporaries instead of CodeBlock::needsFullScopeChain, but
    7238         it does not fix the problem itself.
    7239 
    7240         * VM/CodeGenerator.h:
    7241         (KJS::CodeGenerator::leftHandSideNeedsCopy):
    7242 
    7243 2008-06-11  Cameron Zwarich  <[email protected]>
    7244 
    7245         Reviewed by Maciej.
    7246 
    7247         Bug 19498: REGRESSION (r34497): crash while loading GMail
    7248         <https://bugs.webkit.org/show_bug.cgi?id=19498>
    7249 
    7250         * VM/CodeGenerator.cpp:
    7251         (KJS::CodeGenerator::emitJumpIfTrueMayCombine):
    7252         (KJS::CodeGenerator::emitJumpIfTrue):
    7253         * VM/CodeGenerator.h:
    7254         * kjs/nodes.cpp:
    7255         (KJS::DoWhileNode::emitCode):
    7256         (KJS::WhileNode::emitCode):
    7257         (KJS::ForNode::emitCode):
    7258         (KJS::CaseBlockNode::emitCodeForBlock):
    7259 
    7260 2008-06-11  Darin Adler  <[email protected]>
    7261 
    7262         Reviewed by Maciej.
    7263 
    7264         - a little bit of cleanup and prep for some upcoming optimizations
    7265 
    7266         * JavaScriptCore.exp: Re-sorted this file (with sort command line tool).
    7267         * VM/CodeBlock.cpp:
    7268         (KJS::CodeBlock::dump): Fixed printf to avoid warnings -- to use %lu we
    7269         need to make sure the type is unsigned long.
    7270         * kjs/object.cpp:
    7271         (KJS::Error::create): Eliminated unused error names array, and also put
    7272         the strings into the code since there was already a switch statment.
    7273         This also avoids having to contemplate a hypothetical access past the
    7274         end of the array.
    7275         * kjs/object.h: Got rid of errorNames.
    7276         * kjs/property_slot.cpp: Deleted unused ungettableGetter.
    7277         * kjs/property_slot.h: Ditto.
    7278         * wtf/AlwaysInline.h: Added LIKELY alongside UNLIKELY.
    7279 
    7280 2008-06-11  Cameron Zwarich  <[email protected]>
    7281 
    7282         Reviewed by Darin.
    7283 
    7284         Bug 19457: Create fused opcodes for tests and conditional jumps
    7285         <https://bugs.webkit.org/show_bug.cgi?id=19457>
    7286 
    7287         Add a new jless instruction, and modify the code generator to emit it
    7288         instead of the pair (less, jtrue).
    7289 
    7290         Gives a 3.6% improvement on SunSpider.
    7291 
    7292         * VM/CodeBlock.cpp:
    7293         (KJS::CodeBlock::dump):
    7294         * VM/CodeGenerator.cpp:
    7295         (KJS::CodeGenerator::CodeGenerator):
    7296         (KJS::CodeGenerator::emitOpcode):
    7297         (KJS::CodeGenerator::retrieveLastBinaryOp):
    7298         (KJS::CodeGenerator::rewindBinaryOp):
    7299         (KJS::CodeGenerator::emitJump):
    7300         (KJS::CodeGenerator::emitJumpIfTrue):
    7301         (KJS::CodeGenerator::emitJumpIfFalse):
    7302         (KJS::CodeGenerator::emitMove):
    7303         (KJS::CodeGenerator::emitNot):
    7304         (KJS::CodeGenerator::emitEqual):
    7305         (KJS::CodeGenerator::emitNotEqual):
    7306         (KJS::CodeGenerator::emitStrictEqual):
    7307         (KJS::CodeGenerator::emitNotStrictEqual):
    7308         (KJS::CodeGenerator::emitLess):
    7309         (KJS::CodeGenerator::emitLessEq):
    7310         (KJS::CodeGenerator::emitPreInc):
    7311         (KJS::CodeGenerator::emitPreDec):
    7312         (KJS::CodeGenerator::emitPostInc):
    7313         (KJS::CodeGenerator::emitPostDec):
    7314         (KJS::CodeGenerator::emitToJSNumber):
    7315         (KJS::CodeGenerator::emitNegate):
    7316         (KJS::CodeGenerator::emitAdd):
    7317         (KJS::CodeGenerator::emitMul):
    7318         (KJS::CodeGenerator::emitDiv):
    7319         (KJS::CodeGenerator::emitMod):
    7320         (KJS::CodeGenerator::emitSub):
    7321         (KJS::CodeGenerator::emitLeftShift):
    7322         (KJS::CodeGenerator::emitRightShift):
    7323         (KJS::CodeGenerator::emitUnsignedRightShift):
    7324         (KJS::CodeGenerator::emitBitAnd):
    7325         (KJS::CodeGenerator::emitBitXOr):
    7326         (KJS::CodeGenerator::emitBitOr):
    7327         (KJS::CodeGenerator::emitBitNot):
    7328         (KJS::CodeGenerator::emitInstanceOf):
    7329         (KJS::CodeGenerator::emitTypeOf):
    7330         (KJS::CodeGenerator::emitIn):
    7331         (KJS::CodeGenerator::emitLoad):
    7332         (KJS::CodeGenerator::emitNewObject):
    7333         (KJS::CodeGenerator::emitNewArray):
    7334         (KJS::CodeGenerator::emitResolve):
    7335         (KJS::CodeGenerator::emitGetScopedVar):
    7336         (KJS::CodeGenerator::emitPutScopedVar):
    7337         (KJS::CodeGenerator::emitResolveBase):
    7338         (KJS::CodeGenerator::emitResolveWithBase):
    7339         (KJS::CodeGenerator::emitResolveFunction):
    7340         (KJS::CodeGenerator::emitGetById):
    7341         (KJS::CodeGenerator::emitPutById):
    7342         (KJS::CodeGenerator::emitPutGetter):
    7343         (KJS::CodeGenerator::emitPutSetter):
    7344         (KJS::CodeGenerator::emitDeleteById):
    7345         (KJS::CodeGenerator::emitGetByVal):
    7346         (KJS::CodeGenerator::emitPutByVal):
    7347         (KJS::CodeGenerator::emitDeleteByVal):
    7348         (KJS::CodeGenerator::emitPutByIndex):
    7349         (KJS::CodeGenerator::emitNewFunction):
    7350         (KJS::CodeGenerator::emitNewRegExp):
    7351         (KJS::CodeGenerator::emitNewFunctionExpression):
    7352         (KJS::CodeGenerator::emitCall):
    7353         (KJS::CodeGenerator::emitReturn):
    7354         (KJS::CodeGenerator::emitEnd):
    7355         (KJS::CodeGenerator::emitConstruct):
    7356         (KJS::CodeGenerator::emitPushScope):
    7357         (KJS::CodeGenerator::emitPopScope):
    7358         (KJS::CodeGenerator::emitDebugHook):
    7359         (KJS::CodeGenerator::emitComplexJumpScopes):
    7360         (KJS::CodeGenerator::emitJumpScopes):
    7361         (KJS::CodeGenerator::emitNextPropertyName):
    7362         (KJS::CodeGenerator::emitGetPropertyNames):
    7363         (KJS::CodeGenerator::emitCatch):
    7364         (KJS::CodeGenerator::emitThrow):
    7365         (KJS::CodeGenerator::emitNewError):
    7366         (KJS::CodeGenerator::emitJumpSubroutine):
    7367         (KJS::CodeGenerator::emitSubroutineReturn):
    7368         * VM/CodeGenerator.h:
    7369         * VM/Machine.cpp:
    7370         (KJS::Machine::privateExecute):
    7371         * VM/Opcode.cpp:
    7372         * VM/Opcode.h:
    7373 
    7374 2008-06-11  Darin Adler  <[email protected]>
    7375 
    7376         Reviewed by Alexey.
    7377 
    7378         - fix https://bugs.webkit.org/show_bug.cgi?id=19442
    7379           JavaScript array implementation doesn't maintain m_numValuesInVector when sorting
    7380 
    7381         * kjs/array_instance.cpp:
    7382         (KJS::ArrayInstance::checkConsistency): Added. Empty inline version for when
    7383         consistency checks are turned off.
    7384         (KJS::ArrayInstance::ArrayInstance): Check consistency after construction.
    7385         (KJS::ArrayInstance::~ArrayInstance): Check consistency before destruction.
    7386         (KJS::ArrayInstance::put): Check consistency before and after.
    7387         (KJS::ArrayInstance::deleteProperty): Ditto.
    7388         (KJS::ArrayInstance::setLength): Ditto.
    7389         (KJS::compareByStringPairForQSort): Use typedef for clarity.
    7390         (KJS::ArrayInstance::sort): Check consistency before and after. Also broke the loop
    7391         to set up sorting into two separate passes. Added FIXMEs about various exception
    7392         safety issues. Added code to set m_numValuesInVector after sorting.
    7393         (KJS::ArrayInstance::compactForSorting): Ditto.
    7394 
    7395         * kjs/array_instance.h: Added a definition of an enum for the types of consistency
    7396         check and a declaration of the consistency checking function.
    7397 
    7398 2008-06-10  Kevin Ollivier  <[email protected]>
    7399 
    7400         wx build fix. Link against libedit on Mac since HAVE(READLINE) is defined there.
    7401 
    7402         * jscore.bkl:
    7403 
    7404 2008-06-10  Alexey Proskuryakov  <[email protected]>
    7405 
    7406         Reviewed by Darin.
    7407 
    7408         https://bugs.webkit.org/show_bug.cgi?id=16503
    7409         match limit takes at least 13% of the time on the SunSpider regexp-dna test
    7410 
    7411         Make the limit test slightly more efficient. It is not clear how much of a win it is,
    7412         as the improvement on regexp-dna varies from 2.3% to 0.6% depending on what revision I
    7413         apply the patch to. Today, the win on regexp-dna was minimal, but the total win was whopping
    7414         0.5%, due to random code generation changes.
    7415 
    7416         * pcre/pcre_exec.cpp: (match): Avoid loading a constant on each iteration.
    7417 
    7418 2008-06-09  Alp Toker  <[email protected]>
    7419 
    7420         gcc3/autotools build fix. Add explicit -O2 -fno-strict-aliasing to
    7421         each of the tools since these are no longer set globally.
    7422 
    7423         * GNUmakefile.am:
    7424 
    7425 2008-06-09  Cameron Zwarich  <[email protected]>
    7426 
    7427         Reviewed by Sam.
    7428 
    7429         Add an include for readline/history.h to fix the build for Darwin users
    7430         with the GNU readline library installed. Also, clean up the style of
    7431         the HAVE(READLINE) check.
    7432 
    7433         * kjs/testkjs.cpp:
    7434         (runInteractive):
    7435 
    7436 2008-06-09  Cameron Zwarich  <[email protected]>
    7437 
    7438         Reviewed by Darin.
    7439 
    7440         Bug 17531: Add interactive mode to testkjs
    7441         <https://bugs.webkit.org/show_bug.cgi?id=17531>
    7442 
    7443         This is a cleaned up version of Sam's earlier patch to add an
    7444         interactive mode to testkjs.
    7445 
    7446         Readline support is only enabled on Darwin platforms for now, but
    7447         other ports can enable it by defining HAVE_READLINE in kjs/config.h.
    7448 
    7449         * JavaScriptCore.xcodeproj/project.pbxproj:
    7450         * kjs/config.h:
    7451         * kjs/testkjs.cpp:
    7452         (Options::Options):
    7453         (runWithScripts):
    7454         (runInteractive):
    7455         (printUsageStatement):
    7456         (parseArguments):
    7457         (kjsmain):
    7458 
    7459 2008-06-08  Cameron Zwarich  <[email protected]>
    7460 
    7461         Reviewed by Darin.
    7462 
    7463         Bug 19346: REGRESSION: Mootools 1.2 Class inheritance broken in post-SquirrelFish merge
    7464         <https://bugs.webkit.org/show_bug.cgi?id=19346>
    7465 
    7466         A check for whether a function's caller is eval code accidentally included
    7467         the case where the caller's caller is native code. Add a CodeType field to
    7468         CodeBlock and use this for the eval caller test instead.
    7469 
    7470         * VM/CodeBlock.h:
    7471         (KJS::CodeBlock::CodeBlock):
    7472         (KJS::ProgramCodeBlock::ProgramCodeBlock):
    7473         (KJS::EvalCodeBlock::EvalCodeBlock):
    7474         * VM/Machine.cpp:
    7475         (KJS::getCallerFunctionOffset):
    7476         * kjs/nodes.cpp:
    7477         (KJS::FunctionBodyNode::generateCode):
    7478         (KJS::ProgramNode::generateCode):
    7479 
    7480 2008-06-07  Cameron Zwarich  <[email protected]>
    7481 
    7482         Reviewed by Dan Bernstein.
    7483 
    7484         Bug 17928: testkjs shouldn't require "-f"
    7485         <https://bugs.webkit.org/show_bug.cgi?id=17928>
    7486 
    7487         * kjs/testkjs.cpp:
    7488         (printUsageStatement):
    7489         (parseArguments):
    7490 
    7491 2008-06-07  Cameron Zwarich  <[email protected]>
    7492 
    7493         Reviewed by Eric.
    7494 
    7495         Bug 17548: JavaScriptCore print(a, b) differs from Spidermonkey Behavior
    7496         <https://bugs.webkit.org/show_bug.cgi?id=17548>
    7497 
    7498         * kjs/testkjs.cpp:
    7499         (functionPrint):
    7500 
    7501 2008-06-07  Cameron Zwarich  <[email protected]>
    7502 
    7503         Reviewed by Sam.
    7504 
    7505         Bug 17547: JavaScriptCore print() differs from Spidermonkey Behavior
    7506         <https://bugs.webkit.org/show_bug.cgi?id=17547>
    7507 
    7508         * kjs/testkjs.cpp:
    7509         (functionPrint):
    7510 
    7511 2008-06-07  Alexey Proskuryakov  <[email protected]>
    7512 
    7513         More build fixes.
    7514 
    7515         * kjs/JSGlobalData.cpp: Fixed an included file name for case-sensitive file systems, fixed
    7516         JSGlobalData::threadInstance() for non-multithreaded builds.
    7517 
    7518 2008-06-07  Alexey Proskuryakov  <[email protected]>
    7519 
    7520         Build fix - actually adding JSGlobalData.cpp to non-Mac builds!
    7521 
    7522         * GNUmakefile.am:
    7523         * JavaScriptCore.pri:
    7524         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    7525         * JavaScriptCoreSources.bkl:
    7526 
    7527 2008-06-07  Alexey Proskuryakov  <[email protected]>
    7528 
    7529         Try to fix Gtk/gcc 4.3 build.
    7530 
    7531         * kjs/JSGlobalData.h: Include ustring.h instead of forward-declaring UString::Rep.
    7532 
    7533 2008-06-06  Alexey Proskuryakov  <[email protected]>
    7534 
    7535         Reviewed by Darin.
    7536 
    7537         Combine per-thread objects into one, to make it easier to support legacy clients (for
    7538         which they shouldn't be really per-thread).
    7539 
    7540         No change on SunSpider total.
    7541 
    7542         * JavaScriptCore.xcodeproj/project.pbxproj: Added JSGlobalData.{h,cpp}
    7543 
    7544         * kjs/JSGlobalData.cpp: Added.
    7545         (KJS::JSGlobalData::JSGlobalData):
    7546         (KJS::JSGlobalData::~JSGlobalData):
    7547         (KJS::JSGlobalData::threadInstance):
    7548         * kjs/JSGlobalData.h: Added.
    7549         This class encapsulates all data that should be per-thread (or shared between legacy clients).
    7550         It will also keep a Heap pointer, but right now, Heap (Collector) methods are all static.
    7551 
    7552         * kjs/identifier.h:
    7553         (KJS::Identifier::Identifier):
    7554         Added a constructor explicitly taking JSGlobalData to access IdentifierTable. Actually,
    7555         all of them should, but this will be a separate patch.
    7556 
    7557         * kjs/identifier.cpp:
    7558         (KJS::IdentifierTable::literalTable):
    7559         (KJS::createIdentifierTable):
    7560         (KJS::deleteIdentifierTable):
    7561         (KJS::Identifier::add):
    7562         (KJS::Identifier::addSlowCase):
    7563         Combined IdentifierTable and LiteralIdentifierTable into a single class for simplicity.
    7564 
    7565         * kjs/grammar.y: kjsyyparse now takes JSGlobalData, not just a Lexer.
    7566 
    7567         * kjs/nodes.cpp:
    7568         (KJS::Node::Node):
    7569         (KJS::EvalFunctionCallNode::emitCode):
    7570         (KJS::ScopeNode::ScopeNode):
    7571         Changed to access Lexer and Parser via JSGlobalData::threadInstance(). This is also a
    7572         temporary measure, they will need to use JSGlobalData explicitly.
    7573 
    7574         * VM/CodeGenerator.cpp:
    7575         (KJS::CodeGenerator::CodeGenerator):
    7576         * VM/CodeGenerator.h:
    7577         * VM/Machine.cpp:
    7578         (KJS::callEval):
    7579         * kjs/CommonIdentifiers.cpp:
    7580         (KJS::CommonIdentifiers::CommonIdentifiers):
    7581         * kjs/CommonIdentifiers.h:
    7582         * kjs/DebuggerCallFrame.cpp:
    7583         (KJS::DebuggerCallFrame::evaluate):
    7584         * kjs/ExecState.cpp:
    7585         (KJS::ExecState::ExecState):
    7586         * kjs/ExecState.h:
    7587         (KJS::ExecState::globalData):
    7588         (KJS::ExecState::identifierTable):
    7589         (KJS::ExecState::propertyNames):
    7590         (KJS::ExecState::emptyList):
    7591         (KJS::ExecState::lexer):
    7592         (KJS::ExecState::parser):
    7593         (KJS::ExecState::arrayTable):
    7594         (KJS::ExecState::dateTable):
    7595         (KJS::ExecState::mathTable):
    7596         (KJS::ExecState::numberTable):
    7597         (KJS::ExecState::RegExpImpTable):
    7598         (KJS::ExecState::RegExpObjectImpTable):
    7599         (KJS::ExecState::stringTable):
    7600         * kjs/InitializeThreading.cpp:
    7601         (KJS::initializeThreadingOnce):
    7602         * kjs/JSGlobalObject.cpp:
    7603         (KJS::JSGlobalObject::init):
    7604         * kjs/JSGlobalObject.h:
    7605         (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
    7606         (KJS::JSGlobalObject::head):
    7607         (KJS::JSGlobalObject::globalData):
    7608         * kjs/Parser.cpp:
    7609         (KJS::Parser::parse):
    7610         * kjs/Parser.h:
    7611         * kjs/function.cpp:
    7612         (KJS::FunctionImp::getParameterName):
    7613         (KJS::IndexToNameMap::unMap):
    7614         (KJS::globalFuncEval):
    7615         * kjs/function_object.cpp:
    7616         (KJS::FunctionObjectImp::construct):
    7617         * kjs/interpreter.cpp:
    7618         (KJS::Interpreter::checkSyntax):
    7619         (KJS::Interpreter::evaluate):
    7620         * kjs/lexer.cpp:
    7621         (kjsyylex):
    7622         * kjs/lexer.h:
    7623         * kjs/testkjs.cpp:
    7624         (prettyPrintScript):
    7625         Updated for the above changes. Most of threadInstance uses here will need to be replaced with
    7626         explicitly passed pointers to support legacy JSC clients.
    7627 
    7628         * JavaScriptCore.exp: Removed KJS::parser().
    7629 
    7630 2008-06-06  Cameron Zwarich  <[email protected]>
    7631 
    7632         Reviewed by Oliver.
    7633 
    7634         Bug 19424: Add support for logging opcode pair counts
    7635         <https://bugs.webkit.org/show_bug.cgi?id=19424>
    7636 
    7637         * VM/Machine.cpp:
    7638         (KJS::Machine::privateExecute):
    7639         * VM/Opcode.cpp:
    7640         (KJS::OpcodeStats::OpcodeStats):
    7641         (KJS::compareOpcodeIndices):
    7642         (KJS::compareOpcodePairIndices):
    7643         (KJS::OpcodeStats::~OpcodeStats):
    7644         (KJS::OpcodeStats::recordInstruction):
    7645         (KJS::OpcodeStats::resetLastInstruction):
    7646         * VM/Opcode.h:
    7647 
    7648 2008-06-06  Kevin McCullough  <[email protected]>
    7649 
    7650         Reviewed by Adam.
    7651 
    7652         <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the
    7653         profiler.
    7654         - Change the remaining functions that do not take arguments, from using
    7655         recursion to using iteration.
    7656 
    7657         * JavaScriptCore.exp:
    7658         * profiler/Profile.cpp:
    7659         (KJS::stopProfiling):
    7660         (KJS::restoreAll):
    7661         (KJS::Profile::stopProfiling): Use foreach instead of recursion.
    7662         (KJS::Profile::restoreAll): Ditto.
    7663         * profiler/Profile.h:
    7664         * profiler/ProfileNode.cpp: Remove recursion.
    7665         (KJS::ProfileNode::stopProfiling):
    7666         (KJS::ProfileNode::restore):
    7667         * profiler/ProfileNode.h:
    7668 
    7669 2008-06-05  Oliver Hunt  <[email protected]>
    7670 
    7671         Reviewed by Alexey.
    7672 
    7673         Fix Greater and GreaterEq nodes to emit code for the left
    7674         and right sub-expressions in the correct order.
    7675 
    7676         * kjs/nodes.cpp:
    7677         (KJS::GreaterNode::emitCode):
    7678         (KJS::GreaterEqNode::emitCode):
    7679 
    7680 2008-06-05  Antti Koivisto  <[email protected]>
    7681 
    7682         Reviewed by Alp Toker.
    7683        
    7684         Fix whitespaces.
    7685 
    7686         * kjs/collector.cpp:
    7687         (KJS::getPlatformThreadRegisters):
    7688 
    7689 2008-06-05  Antti Koivisto  <[email protected]>
    7690 
    7691         Reviewed by Darin.
    7692        
    7693         Support compiling JavaScriptCore for ARM.
    7694 
    7695         * kjs/collector.cpp:
    7696         (KJS::getPlatformThreadRegisters):
    7697         (KJS::otherThreadStackPointer):
    7698 
    7699 2008-06-05  Kevin McCullough  <[email protected]>
    7700 
    7701         Reviewed by Jon.
    7702 
    7703         - Name changes.
    7704 
    7705         * JavaScriptCore.exp:
    7706         * profiler/Profile.cpp:
    7707         (KJS::Profile::Profile):
    7708         (KJS::Profile::stopProfiling):
    7709         (KJS::Profile::didExecute):
    7710         (KJS::Profile::forEach):
    7711         (KJS::Profile::debugPrintData):
    7712         (KJS::Profile::debugPrintDataSampleStyle):
    7713         * profiler/Profile.h:
    7714         (KJS::Profile::callTree):
    7715         (KJS::Profile::totalTime):
    7716         (KJS::Profile::sortTotalTimeDescending):
    7717         (KJS::Profile::sortTotalTimeAscending):
    7718         (KJS::Profile::sortSelfTimeDescending):
    7719         (KJS::Profile::sortSelfTimeAscending):
    7720         (KJS::Profile::sortCallsDescending):
    7721         (KJS::Profile::sortCallsAscending):
    7722         (KJS::Profile::sortFunctionNameDescending):
    7723         (KJS::Profile::sortFunctionNameAscending):
    7724         (KJS::Profile::focus):
    7725         (KJS::Profile::exclude):
    7726         (KJS::Profile::restoreAll):
    7727 
    7728 2008-06-05  Geoffrey Garen  <[email protected]>
    7729 
    7730         Reviewed by Stephanie Lewis.
    7731 
    7732         Added the -fno-move-loop-invariants flag to the pcre_exec.cpp build, to
    7733         tell GCC not to perform loop invariant motion, since GCC's loop
    7734         invariant motion doesn't do very well with computed goto code.
    7735        
    7736         SunSpider reports no change.
    7737 
    7738 2008-06-05  Geoffrey Garen  <[email protected]>
    7739 
    7740         Reviewed by Stephanie Lewis.
    7741        
    7742         Added the -fno-tree-pre flag to the Machine.cpp build, to tell GCC not
    7743         to perform Partial Redundancy Elimination (PRE) on trees in Machine.cpp,
    7744         since GCC's PRE doesn't do very well with computed goto code.
    7745        
    7746         SunSpider reports a .7% speedup.
    7747        
    7748 2008-06-05  Geoffrey Garen  <[email protected]>
    7749 
    7750         Reviewed by Stephanie Lewis (or maybe the other way around).
    7751        
    7752         Minor change to PCRE to help out certain compilers.
    7753        
    7754         SunSpider reports no change, maybe a small speedup.
    7755 
    7756         * pcre/pcre_exec.cpp:
    7757         (match): Use instructionPtr++ a little less, to avoid confusing the
    7758         optimizer.
    7759 
    7760 2008-06-05  Alexey Proskuryakov  <[email protected]>
    7761 
    7762         Re-landing an independent part of a previously rolled out threading patch.
    7763 
    7764         * wtf/ThreadSpecific.h: Make sure to initialize POD thread-specific varaibles, too
    7765         (replaced "new T" with "new T()").
    7766 
    7767 2008-06-05  Maciej Stachowiak  <[email protected]>
    7768 
    7769         Reviewed by Hyatt.
    7770        
    7771         - force inlining of a template function that only has one call site per specialization
    7772         1.3% speedup on SunSpider
    7773 
    7774         * kjs/collector.cpp:
    7775         (KJS::Collector::heapAllocate): This template function is only
    7776         called from allocate() and allocateNumber() (once per
    7777         specialization) and the extra call overhead for GC allocation
    7778         shows up, so force inlining.
    7779 
    7780 2008-06-05  Maciej Stachowiak  <[email protected]>
    7781 
    7782         Reviewed by Alexey and Oliver.
    7783        
    7784         - remove profiler fetch hack
    7785         I measure an 0.5% progression from this, others show a wash. It seems not needed any more.
    7786 
    7787         * VM/Machine.cpp:
    7788         (KJS::Machine::privateExecute):
    7789 
    7790 2008-06-05  Cameron Zwarich  <[email protected]>
    7791 
    7792         Reviewed by Maciej.
    7793 
    7794         Bug 19400: subscript operator does not protect base when necessary
    7795         <https://bugs.webkit.org/show_bug.cgi?id=19400>
    7796 
    7797         Use a temporary for the base in BracketAccessorNode if the subscript
    7798         might possibly modify it.
    7799 
    7800         * kjs/grammar.y:
    7801         * kjs/nodes.cpp:
    7802         (KJS::BracketAccessorNode::emitCode):
    7803         * kjs/nodes.h:
    7804         (KJS::BracketAccessorNode::):
    7805 
    7806 2008-06-04  Sam Weinig  <[email protected]>
    7807 
    7808         Reviewed by Maciej Stachowiak.
    7809 
    7810         Big cleanup of formatting and whitespace.
    7811 
    7812 2008-06-04  Cameron Zwarich  <[email protected]>
    7813 
    7814         Reviewed by Oliver.
    7815 
    7816         Add an option to dump statistics on executed instructions.
    7817 
    7818         * VM/Machine.cpp:
    7819         (KJS::Machine::privateExecute):
    7820         * VM/Opcode.cpp:
    7821         (KJS::OpcodeStats::~OpcodeStats):
    7822         (KJS::OpcodeStats::recordInstruction):
    7823         * VM/Opcode.h:
    7824 
    7825 2008-06-04  Kevin McCullough  <[email protected]>
    7826 
    7827         Reviewed by Geoff.
    7828 
    7829         <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the
    7830         profiler.
    7831         - This patch removes the use of recursion for the sort functions.
    7832 
    7833         * JavaScriptCore.exp: Change the signatures of the functions being
    7834         exported.
    7835         * profiler/Profile.cpp:
    7836         (KJS::Profile::sort): This generic function will accept any of the
    7837         static sort functions and apply them to the whole tree.
    7838         * profiler/Profile.h: All of the sorting functions now call the new
    7839         sort() function.
    7840         (KJS::Profile::sortTotalTimeDescending):
    7841         (KJS::Profile::sortTotalTimeAscending):
    7842         (KJS::Profile::sortSelfTimeDescending):
    7843         (KJS::Profile::sortSelfTimeAscending):
    7844         (KJS::Profile::sortCallsDescending):
    7845         (KJS::Profile::sortCallsAscending):
    7846         (KJS::Profile::sortFunctionNameDescending):
    7847         (KJS::Profile::sortFunctionNameAscending):
    7848         * profiler/ProfileNode.cpp:
    7849         (KJS::ProfileNode::ProfileNode): m_head used to point to the head node
    7850         if this was the head node.  It now points to null to make iteration easy
    7851         (KJS::ProfileNode::willExecute): Now must check if m_head is null, this
    7852         check used to happend in the constructor.
    7853         (KJS::ProfileNode::stopProfiling): Again the check is slightly different
    7854         to determine if this is the head.
    7855         (KJS::ProfileNode::traverseNextNode): This function returns the next
    7856         node in post order.
    7857         (KJS::ProfileNode::sort): This generic function will sort according to
    7858         the comparator passed in, then reset the children pointers to macth the
    7859         new order.
    7860         * profiler/ProfileNode.h: The sorting function were removed from the
    7861         definition file and instead use the new generic sort() function
    7862         (KJS::ProfileNode::totalPercent): because the head can now be empty we
    7863         need to check here too for the head node.
    7864         (KJS::ProfileNode::selfPercent): Ditto
    7865         (KJS::ProfileNode::firstChild): This function is necessary for the
    7866         iterative algorithm in Profile.cpp.
    7867         (KJS::ProfileNode::sortTotalTimeDescending):
    7868         (KJS::ProfileNode::sortTotalTimeAscending):
    7869         (KJS::ProfileNode::sortSelfTimeDescending):
    7870         (KJS::ProfileNode::sortSelfTimeAscending):
    7871         (KJS::ProfileNode::sortCallsDescending):
    7872         (KJS::ProfileNode::sortCallsAscending):
    7873         (KJS::ProfileNode::sortFunctionNameDescending):
    7874         (KJS::ProfileNode::sortFunctionNameAscending):
    7875         (KJS::ProfileNode::childrenBegin):
    7876         (KJS::ProfileNode::childrenEnd):
    7877         (KJS::ProfileNode::totalTimeDescendingComparator):
    7878         (KJS::ProfileNode::totalTimeAscendingComparator):
    7879         (KJS::ProfileNode::selfTimeDescendingComparator):
    7880         (KJS::ProfileNode::selfTimeAscendingComparator):
    7881         (KJS::ProfileNode::callsDescendingComparator):
    7882         (KJS::ProfileNode::callsAscendingComparator):
    7883         (KJS::ProfileNode::functionNameDescendingComparator):
    7884         (KJS::ProfileNode::functionNameAscendingComparator):
    7885 
    7886 2008-06-04  Alexey Proskuryakov  <[email protected]>
    7887 
    7888         Reviewed by Darin.
    7889 
    7890         Fix JSClassCreate to work with old JSCore API threading model.
    7891 
    7892         No change on SunSpider.
    7893 
    7894         * API/JSClassRef.cpp: (OpaqueJSClass::OpaqueJSClass): Since JSClass is constructed without
    7895         a context, there is no way for it to create Identifiers.
    7896         Also, added initializeThreading(), just for good measure.
    7897 
    7898         * API/JSCallbackObjectFunctions.h: (KJS::::getPropertyNames): Make an Identifier out of the
    7899         string here, because propertyNames.add() needs that.
    7900 
    7901         * kjs/identifier.cpp:
    7902         * kjs/identifier.h:
    7903         (KJS::Identifier::equal):
    7904         * kjs/ustring.cpp:
    7905         (KJS::equal):
    7906         Moved equal() from identifier.h to ustring.h, because it's not really about Identifiers,
    7907         and to make it possible to use it from StrHash.
    7908         Include StrHash.h from ustring.h to avoid having the behavior depend on headers that happen
    7909         to be included.
    7910 
    7911         * wtf/StrHash.h: Removed.
    7912         * kjs/ustring.h: Made RefPtr<UString::Rep> use the same default hash as UString::Rep* (it
    7913         used to default to pointer equality). Moved the whole StrHash header into ustring.h.
    7914 
    7915         * JavaScriptCore.exp: Export equal() for WebCore use (this StrHash is used in c_class.cpp,
    7916         jni_class.cpp, and npruntime.cpp).
    7917 
    7918 2008-06-04  Alexey Proskuryakov  <[email protected]>
    7919 
    7920         Rubber-stamped by Darin.
    7921 
    7922         Fix spacing in collector.{h,cpp}.
    7923 
    7924         * kjs/collector.cpp:
    7925         * kjs/collector.h:
    7926 
    7927 2008-06-03  Cameron Zwarich  <[email protected]>
    7928 
    7929         Reviewed by Maciej.
    7930 
    7931         Build fix. The cleanup in r34355 missed a method.
    7932 
    7933         * kjs/nodes.cpp:
    7934         * kjs/nodes.h:
    7935 
    7936 2008-06-03  Darin Adler  <[email protected]>
    7937 
    7938         Reviewed by Geoff.
    7939 
    7940         - https://bugs.webkit.org/show_bug.cgi?id=19269
    7941           speed up SunSpider by eliminating the toObject call for most get/put/delete
    7942 
    7943         Makes standalone SunSpider 1.025x as fast as before.
    7944 
    7945         The getOwnPropertySlot virtual function now takes care of the toObject call
    7946         for get. Similarly, the put function (and later deleteProperty) does the
    7947         same for those operations. To do this, the virtual functions were moved from
    7948         the JSObject class to the JSCell class. Also, since the caller no longer knows
    7949         the identity of the "original object", which is used by JavaScript-function
    7950         based getters, changed the PropertySlot class so the original object is
    7951         already stored in the slot when getOwnPropertySlot is called, if the caller
    7952         intends to call getValue.
    7953 
    7954         This affected the old interpreter code enough that the easiest thing for me
    7955         was to just delete it. While I am not certain the mysterious slowdown is not
    7956         still occurring, the net change is definitely a significant speedup.
    7957 
    7958         * JavaScriptCore.exp: Updated.
    7959 
    7960         * VM/Machine.cpp: Moved the UNLIKELY macro into AlwaysInline.h.
    7961         (KJS::resolve): Set up the originalObject in the PropertySlot before
    7962         calling getPropertySlot. Also removed the originalObject argument from
    7963         getValue.
    7964         (KJS::resolve_skip): Ditto.
    7965         (KJS::resolveBaseAndProperty): Ditto.
    7966         (KJS::resolveBaseAndFunc): Ditto.
    7967         (KJS::Machine::privateExecute): Removed the toObject calls from the get and
    7968         put functions where possible, instead calling directly with JSValue and letting
    7969         the JSValue and JSCell calls handle toObject. Same for toThisObject.
    7970 
    7971         * kjs/ExecState.h: Removed OldInterpreterExecState.
    7972 
    7973         * API/JSBase.cpp: Updated includes.
    7974 
    7975         * kjs/LocalStorageEntry.h: Removed contents. Later we can remove the file too.
    7976 
    7977         * kjs/array_instance.cpp:
    7978         (KJS::ArrayInstance::lengthGetter): Removed originalObject argumet.
    7979         (KJS::ArrayInstance::inlineGetOwnPropertySlot): Don't pass a base value to
    7980         setValueSlot. Also use UNLIKELY around the "getting elements past the end of
    7981         the array" code path; less common than successfully getting an element.
    7982 
    7983         * kjs/array_object.cpp:
    7984         (KJS::getProperty): Initialize the PropertySlot with the original object.
    7985         Don't pass the original object to the get function.
    7986         (KJS::arrayProtoFuncFilter): Ditto.
    7987         (KJS::arrayProtoFuncMap): Ditto.
    7988         (KJS::arrayProtoFuncEvery): Ditto.
    7989         (KJS::arrayProtoFuncForEach): Ditto.
    7990         (KJS::arrayProtoFuncSome): Ditto.
    7991 
    7992         * kjs/function_object.cpp:
    7993         (KJS::FunctionObjectImp::construct): Removed an obsolete comment.
    7994 
    7995         * kjs/grammar.y: Eliminated support for some of the node types that were
    7996         used to optimize executing from the syntax tree.
    7997 
    7998         * kjs/internal.cpp:
    7999         (KJS::StringImp::toThisObject): Added. Same as toObject.
    8000         (KJS::NumberImp::toThisObject): Ditto.
    8001         (KJS::GetterSetterImp::getOwnPropertySlot): Added. Not reached.
    8002         (KJS::GetterSetterImp::put): Ditto.
    8003         (KJS::GetterSetterImp::toThisObject): Ditto.
    8004 
    8005         * kjs/internal.h: Added toThisObject to NumberImp for speed.
    8006 
    8007         * kjs/lexer.cpp:
    8008         (KJS::Lexer::shift): Changed shift to just do a single character, to unroll
    8009         the loop and especially to make the one character case faster.
    8010         (KJS::Lexer::setCode): Call shift multiple times instead of passing a number.
    8011         (KJS::Lexer::lex): Ditto.
    8012         (KJS::Lexer::matchPunctuator): Ditto. Also removed unneeded elses after returns.
    8013         (KJS::Lexer::scanRegExp): Ditto.
    8014         * kjs/lexer.h: Removed the count argument from shift.
    8015 
    8016         * kjs/math_object.cpp:
    8017         (KJS::mathProtoFuncPow): Call jsNaN instead of jsNumber(NaN).
    8018 
    8019         * kjs/nodes.cpp: Removed some of the things needed only for the pre-SquirrelFish
    8020         execution model.
    8021         (KJS::ForNode::emitCode): Handle cases where some expressions are missing by
    8022         not emitting any code at all. The old way was to emit code for "true", but
    8023         this is an unnecessary remnant of the old way of doing things.
    8024 
    8025         * kjs/nodes.h: Removed some of the things needed only for the pre-SquirrelFish
    8026         execution model.
    8027 
    8028         * kjs/object.cpp:
    8029         (KJS::JSObject::fillGetterPropertySlot): Changed to only pass in the getter
    8030         function. The old code passed in a base, but it was never used when
    8031         actually getting the property; the toThisObject call was pointless. Also
    8032         changed to not pass a base for setUndefined.
    8033 
    8034         * kjs/object.h: Added the new JSCell operations to GetterSetterImp.
    8035         Never called.
    8036         (KJS::JSObject::get): Initialize the object in the PropertySlot and don't
    8037         pass it in getValue.
    8038         (KJS::JSObject::getOwnPropertySlotForWrite): Removed the base argument
    8039         in calls to setValueSlot.
    8040         (KJS::JSObject::getOwnPropertySlot): Ditto.
    8041         (KJS::JSValue::get): Added. Here because it calls through to JSObject.
    8042         A version of JSObject::get that also handles the other types of JSValue
    8043         by creating the appropriate wrapper. Saves the virtual call to toObject.
    8044         (KJS::JSValue::put): Ditto.
    8045         (KJS::JSValue::deleteProperty): Ditto.
    8046 
    8047         * kjs/property_slot.cpp:
    8048         (KJS::PropertySlot::undefinedGetter): Removed the originalObject argument.
    8049         (KJS::PropertySlot::ungettableGetter): Ditto.
    8050         (KJS::PropertySlot::functionGetter): Ditto. Use the value in the base
    8051         as the "this" object, which will be set to the original object by the new
    8052         PropertySlot initialization code. Also call toThisObject. The old code did
    8053         not do this, but needed to so we can properly handle the activation object
    8054         like the other similar code paths.
    8055 
    8056         * kjs/property_slot.h:
    8057         (KJS::PropertySlot::PropertySlot): Added a constructor that takes a base
    8058         object. In debug builds, set the base to 0 if you don't pass one.
    8059         (KJS::PropertySlot::getValue): Don't take or pass the originalObject.
    8060         (KJS::PropertySlot::setValueSlot): Don't take a base object, and clear the
    8061         base object in debug builds.
    8062         (KJS::PropertySlot::setGetterSlot): Ditto.
    8063         (KJS::PropertySlot::setUndefined): Ditto.
    8064         (KJS::PropertySlot::setUngettable): Ditto.
    8065         (KJS::PropertySlot::slotBase): Assert that a base object is present.
    8066         This will fire if someone actually calls the get function without having
    8067         passed in a base object and the getter needs it.
    8068         (KJS::PropertySlot::setBase): Added. Used by the code that implements
    8069         toObject so it can supply the original object after the fact.
    8070         (KJS::PropertySlot::clearBase): Added. Clears the base, but is debug-only
    8071         code because it's an error to fetch the base if you don't have a guarantee
    8072         it was set.
    8073 
    8074         * API/JSCallbackObject.h:
    8075         * API/JSCallbackObjectFunctions.h:
    8076         (KJS::JSCallbackObject::cachedValueGetter):
    8077         (KJS::JSCallbackObject::staticValueGetter):
    8078         (KJS::JSCallbackObject::staticFunctionGetter):
    8079         (KJS::JSCallbackObject::callbackGetter):
    8080         * kjs/JSActivation.cpp:
    8081         (KJS::JSActivation::getOwnPropertySlot):
    8082         (KJS::JSActivation::argumentsGetter):
    8083         * kjs/JSActivation.h:
    8084         * kjs/JSVariableObject.h:
    8085         (KJS::JSVariableObject::symbolTableGet):
    8086         * kjs/array_instance.h:
    8087         * kjs/function.cpp:
    8088         (KJS::FunctionImp::argumentsGetter):
    8089         (KJS::FunctionImp::callerGetter):
    8090         (KJS::FunctionImp::lengthGetter):
    8091         (KJS::Arguments::mappedIndexGetter):
    8092         * kjs/function.h:
    8093         * kjs/lookup.h:
    8094         (KJS::staticFunctionGetter):
    8095         (KJS::staticValueGetter):
    8096         * kjs/string_object.cpp:
    8097         (KJS::StringInstance::lengthGetter):
    8098         (KJS::StringInstance::indexGetter):
    8099         (KJS::stringInstanceNumericPropertyGetter):
    8100         * kjs/string_object.h:
    8101         Removed originalObject arguments from getters. Don't pass base values to
    8102         the various PropertySlot functions that no longer take them.
    8103 
    8104         * kjs/value.cpp:
    8105         (KJS::JSCell::getOwnPropertySlot): Added. Calls toObject and then sets the slot.
    8106         This function has to always return true, because the caller can't walk the prototype
    8107         chain. Because of that, we do a getPropertySlot, not getOwnPropertySlot, which works
    8108         for the caller. This is private, only called by getOwnPropertySlotInternal.
    8109         (KJS::JSCell::put): Added. Calls toObject and then put.
    8110         (KJS::JSCell::toThisObject): Added. Calls toObject.
    8111 
    8112         * kjs/value.h: Added get, put, and toThisObject to both JSValue
    8113         and JSCell. These take care of the toObject operation without an additional virtual
    8114         function call, and so make the common "already an object" case faster.
    8115 
    8116         * wtf/AlwaysInline.h: Moved the UNLIKELY macro here for now. Maybe we can find a
    8117         better place later, or rename this header.
    8118 
    8119 2008-06-03  Oliver Hunt  <[email protected]>
    8120 
    8121         Reviewed by Tim.
    8122 
    8123         Bug 12983: Web Inspector break on the debugger keyword
    8124         <https://bugs.webkit.org/show_bug.cgi?id=12983>
    8125 
    8126         Added a DebuggerStatementNode to handle codegen, and added a new
    8127         DidReachBreakPoint debug event (which will hopefully be useful
    8128         if we ever move breakpoint management into JSC proper).  Also
    8129         added didReachBreakpoint to Debugger to allow us to actually respond
    8130         to this event.
    8131 
    8132         * VM/CodeBlock.cpp:
    8133         (KJS::debugHookName):
    8134         * VM/Machine.cpp:
    8135         (KJS::Machine::debug):
    8136         * VM/Machine.h:
    8137         * kjs/debugger.h:
    8138         * kjs/grammar.y:
    8139         * kjs/nodes.cpp:
    8140         (KJS::DebuggerStatementNode::emitCode):
    8141         (KJS::DebuggerStatementNode::execute):
    8142         * kjs/nodes.h:
    8143         (KJS::DebuggerStatementNode::):
    8144         * kjs/nodes2string.cpp:
    8145         (KJS::DebuggerStatementNode::streamTo):
    8146 
    8147 2008-06-03  Maciej Stachowiak  <[email protected]>
    8148 
    8149         Reviewed by Oliver.
    8150        
    8151         - document remaining opcodes.
    8152 
    8153         * VM/Machine.cpp:
    8154         (KJS::Machine::privateExecute): Document call, call_eval,
    8155         construct, ret and end opcodes.
    8156 
    8157 2008-06-03  Maciej Stachowiak  <[email protected]>
    8158 
    8159         Reviewed by Oliver.
    8160 
    8161         * VM/Machine.cpp:
    8162         (KJS::Machine::privateExecute): Document throw and catch opcodes.
    8163 
    8164 2008-06-02  Geoffrey Garen  <[email protected]>
    8165 
    8166         Reviewed by Alexey Proskuryakov.
    8167 
    8168         Removed JSObject::call, since it just called JSObject::callAsFunction.
    8169 
    8170         SunSpider reports no change.
    8171 
    8172 2008-06-02  Geoffrey Garen  <[email protected]>
    8173 
    8174         Reviewed by Darin Adler.
    8175        
    8176         A little cleanup in the CodeGenerator.
    8177 
    8178         * VM/CodeGenerator.cpp: A few changes here.
    8179 
    8180         (1) Removed remaining cases of the old hack of putting "this" into the
    8181         symbol table; replaced with explicit tracking of m_thisRegister.
    8182 
    8183         (2) Made m_thisRegister behave the same for function, eval, and program
    8184         code, removing the static programCodeThis() function.
    8185 
    8186         (3) Added a feature to nix a ScopeNode's declaration stacks when done
    8187         compiling, to save memory.
    8188 
    8189         (4) Removed code that copied eval declarations into special vectors: we
    8190         just use the originals in the ScopeNode now.
    8191        
    8192         * VM/CodeGenerator.h: Removed unneded parameters from the CodeGenerator
    8193         constructor: we just use get that data from the ScopeNode now.
    8194 
    8195         * VM/Machine.cpp:
    8196         (KJS::Machine::execute): When executing an eval node, don't iterate a
    8197         special copy of its declarations; iterate the originals, instead.
    8198 
    8199         * kjs/nodes.cpp: Moved responsibility for knowing what AST data to throw
    8200         away into the CodeGenerator. Nodes no longer call shrinkCapacity on
    8201         their data directly.
    8202        
    8203         * kjs/nodes.h: Changed FunctionStack to ref its contents, so declaration
    8204         data stays around even after we've thrown away the AST, unless we explicitly
    8205         throw away the declaration data, too. This is useful for eval code, which
    8206         needs to reference its declaration data at execution time. (Soon, it will
    8207         be useful for program code, too, since program code should do the same.)
    8208 
    8209 2008-06-02  Adam Roben  <[email protected]>
    8210 
    8211         Build fix for non-AllInOne builds
    8212 
    8213         * kjs/array_object.cpp: Added a missing #include.
    8214 
    8215 2008-06-02  Kevin McCullough  <[email protected]>
    8216 
    8217         Took out accidental confilct lines I checked in.
    8218 
    8219         * ChangeLog:
    8220 
    8221 2008-06-02  Kevin McCullough  <[email protected]>
    8222 
    8223         Reviewed by Darin.
    8224 
    8225         <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the
    8226         profiler
    8227         Implement Next Sibling pointers as groundwork for removing the recursion
    8228         limit in the profiler.
    8229 
    8230         * profiler/ProfileNode.cpp: Also I renamed parentNode and headNode since
    8231         'node' is redundant.
    8232         (KJS::ProfileNode::ProfileNode): Initialize the nextSibling.
    8233         (KJS::ProfileNode::willExecute): If there are already children then the
    8234         new child needs to be the nextSibling of the last child.
    8235         (KJS::ProfileNode::didExecute):
    8236         (KJS::ProfileNode::addChild): Ditto.
    8237         (KJS::ProfileNode::stopProfiling):
    8238         (KJS::ProfileNode::sortTotalTimeDescending): For all of the sorting
    8239         algorithms once the children are sorted their nextSibling pointers need
    8240         to be reset to reflect the new order.
    8241         (KJS::ProfileNode::sortTotalTimeAscending):
    8242         (KJS::ProfileNode::sortSelfTimeDescending):
    8243         (KJS::ProfileNode::sortSelfTimeAscending):
    8244         (KJS::ProfileNode::sortCallsDescending):
    8245         (KJS::ProfileNode::sortCallsAscending):
    8246         (KJS::ProfileNode::sortFunctionNameDescending):
    8247         (KJS::ProfileNode::sortFunctionNameAscending):
    8248         (KJS::ProfileNode::resetChildrensSiblings): This new function simply
    8249         loops over all of the children and sets their nextSibling pointers to
    8250         the next child in the Vector
    8251         (KJS::ProfileNode::debugPrintData):
    8252         * profiler/ProfileNode.h:
    8253         (KJS::ProfileNode::parent):
    8254         (KJS::ProfileNode::setParent):
    8255         (KJS::ProfileNode::nextSibling):
    8256         (KJS::ProfileNode::setNextSibling):
    8257         (KJS::ProfileNode::totalPercent):
    8258         (KJS::ProfileNode::selfPercent):
    8259 
    8260 2008-06-02  Geoffrey Garen  <[email protected]>
    8261 
    8262         Reviewed by Maciej Stachowiak.
    8263 
    8264         Removed the recursion limit from JSObject::call, since the VM does
    8265         recursion checking now.
    8266 
    8267         This should allow us to remove JSObject::call entirely, netting a small
    8268         speedup.
    8269 
    8270         * kjs/object.cpp:
    8271         (KJS::JSObject::call):
    8272 
    8273 2008-06-02  Geoffrey Garen  <[email protected]>
    8274 
    8275         Reviewed by Adele Peterson.
    8276 
    8277         Added a specific affordance for avoiding stack overflow when converting
    8278         recursive arrays to string, in preparation for removing generic stack
    8279         overflow checking from JSObject::call.
    8280        
    8281         Tested by fast/js/toString-stack-overflow.html.
    8282 
    8283 2008-06-02  Geoffrey Garen  <[email protected]>
    8284 
    8285         Reviewed by Alice Liu.
    8286        
    8287         Refactored some hand-rolled code to call ScopeChain::globalObject instead.
    8288 
    8289 2008-06-02  Geoffrey Garen  <[email protected]>
    8290 
    8291         Reviewed by Darin Adler.
    8292        
    8293         Fixed ASSERT due to execution continuing after an exception is thrown
    8294         during array sort.
    8295 
    8296         * kjs/array_instance.cpp:
    8297         (KJS::AVLTreeAbstractorForArrayCompare::compare_key_key): Don't call the
    8298         custom comparator function if an exception has been thrown. Just return
    8299         1 for everything, so the sort completes quickly. (The result will be
    8300         thrown away.)
    8301 
    8302 2008-05-30  Timothy Hatcher  <[email protected]>
    8303 
    8304         Made the starting line number of scripts be 1-based throughout the engine.
    8305         This cleans up script line numbers so they are all consistent now and fixes
    8306         some cases where script execution was shown as off by one line in the debugger.
    8307 
    8308         No change in SunSpider.
    8309 
    8310         Reviewed by Oliver Hunt.
    8311 
    8312         * API/minidom.c:
    8313         (main): Pass a line number of 1 instead of 0 to parser().parse().
    8314         * API/testapi.c:
    8315         (main): Ditto. And removes a FIXME and changed an assertEqualsAsNumber
    8316         to use 1 instead of 2 for the line number.
    8317         * VM/Machine.cpp:
    8318         (KJS::callEval): Pass a line number of 1 instead of 0.
    8319         (KJS::Machine::debug): Use firstLine for WillExecuteProgram instead of
    8320         lastLine. Use lastLine for DidExecuteProgram instead of firstLine.
    8321         * kjs/DebuggerCallFrame.cpp:
    8322         (KJS::DebuggerCallFrame::evaluate): Pass a line number of 1 instead of
    8323         0 to parser().parse().
    8324         * kjs/Parser.cpp:
    8325         (KJS::Parser::parse): ASSERT startingLineNumber is greatter than 0. Change
    8326         the startingLineNumber to be 1 if it was less than or equal to 0. This is needed
    8327         for release builds to maintain compatibility with the JavaScriptCore API.
    8328         * kjs/function.cpp:
    8329         (KJS::globalFuncEval): Pass a line number of 1 instead of 0 to parser().parse().
    8330         * kjs/function_object.cpp:
    8331         (FunctionObjectImp::construct): Pass a line number of 1 instead of 0 to construct().
    8332         * kjs/lexer.cpp:
    8333         (Lexer::setCode): Made yylineno = startingLineNumber instead of adding 1.
    8334         * kjs/testkjs.cpp:
    8335         (functionRun): Pass a line number of 1 instead of 0 to Interpreter::evaluate().
    8336         (functionLoad): Ditto.
    8337         (prettyPrintScript): Ditto.
    8338         (runWithScripts): Ditto.
    8339         * profiler/Profiler.cpp:
    8340         (WebCore::createCallIdentifier): Removed a plus 1 of startingLineNumber.
    8341 
    8342 2008-05-30  Alexey Proskuryakov  <[email protected]>
    8343 
    8344         Reviewed by Darin.
    8345 
    8346         https://bugs.webkit.org/show_bug.cgi?id=19180
    8347         speed up SunSpider by optimizing immediate number cases
    8348 
    8349         Also fixed a JavaScriptCore regression seen on PowerPC - we didn't clip left shift
    8350         parameter to 0...31.
    8351 
    8352         0.5% improvement on SunSpider overall, although a 8.5 regression on bitops-3bit-bits-in-byte.
    8353 
    8354         * VM/Machine.cpp:
    8355         (KJS::Machine::privateExecute):
    8356 
    8357         * kjs/JSImmediate.h:
    8358         (KJS::JSImmediate::toTruncatedUInt32): Added. Same as getTruncatedInt32, but casts the result
    8359         to unsigned.
    8360 
    8361 2008-05-30  Alexey Proskuryakov  <[email protected]>
    8362 
    8363         Reviewed by Oliver Hunt.
    8364 
    8365         https://bugs.webkit.org/show_bug.cgi?id=19180
    8366         speed up SunSpider by optimizing immediate number cases
    8367 
    8368         Also fixed two JavaScriptCore regressions seen on PowerPC - we didn't clip right shift
    8369         parameter to 0...31.
    8370 
    8371         1.6% improvement on SunSpider, without significant regressions on any tests.
    8372 
    8373         * VM/Machine.cpp:
    8374         (KJS::Machine::privateExecute):
    8375         Added fast paths for >>, ==, ===, !=, !==. Changed order of memory accesses in many
    8376         cases, making them less dependent on gcc's ability to properly assign registers. With this,
    8377         I could move exception checks back into slow code paths, and saw less randomness in general.
    8378 
    8379         * kjs/JSImmediate.h:
    8380         (KJS::JSImmediate::rightShiftImmediateNumbers):
    8381         Added.
    8382 
    8383 2008-05-29  Maciej Stachowiak  <[email protected]>
    8384 
    8385         Reviewed by Oliver.
    8386 
    8387         - fixed <rdar://problem/5972943> REGRESSION(r33979): Flash clips do not play on cnn.com
    8388        
    8389         Finally blocks could clobber registers that had to remain live
    8390         until they returned. This patch takes a conservative approach and
    8391         makes sure that finally blocks do not reuse any registers that
    8392         were previously allocated for the function. In the future this
    8393         could probably be tightened up to be less profligate with the
    8394         register allocation.
    8395        
    8396         * VM/CodeGenerator.cpp:
    8397         (KJS::CodeGenerator::highestUsedRegister):
    8398         * VM/CodeGenerator.h:
    8399         * kjs/nodes.cpp:
    8400         (KJS::TryNode::emitCode):
    8401 
    8402 2008-05-29  Steve Falkenburg  <[email protected]>
    8403 
    8404         Build fix.
    8405 
    8406         * kjs/array_instance.cpp:
    8407 
    8408 2008-05-29  Alexey Proskuryakov  <[email protected]>
    8409 
    8410         Reviewed by Darin.
    8411 
    8412         https://bugs.webkit.org/show_bug.cgi?id=19294
    8413         <rdar://problem/5969062> A crash when iterating over a sparse array backwards.
    8414 
    8415         * kjs/array_instance.cpp: Turned sparseArrayCutoff into a macro, so that using max() on it
    8416         doesn't cause a PIC branch.
    8417         (KJS::ArrayInstance::increaseVectorLength): Added a comment about this function not
    8418         preserving class invariants.
    8419         (KJS::ArrayInstance::put): Update m_storage after reallocation. Move values that fit to
    8420         the vector from the map in all code paths.
    8421 
    8422 2008-05-29  Thiago Macieira  <[email protected]>
    8423 
    8424         Reviewed by Simon.
    8425 
    8426         Fix compilation in Solaris with Sun CC
    8427 
    8428         Lots of WebKit code uses C99 functions that, strict as it
    8429         is, the Solaris system doesn't provide in C++. So we must define them
    8430         for both GCC and the Sun CC.
    8431 
    8432         * wtf/MathExtras.h:
    8433 
    8434 2008-05-28  Oliver Hunt  <[email protected]>
    8435 
    8436         Reviewed by Anders.
    8437 
    8438         Fix codegen for assignment being used as a function.
    8439 
    8440         FunctionCallValueNode::emitCode failed to account for the
    8441         potential of the function expression to allocate arbitrary
    8442         registers.
    8443 
    8444         * kjs/nodes.cpp:
    8445         (KJS::FunctionCallValueNode::emitCode):
    8446 
    8447 2008-05-27  Geoffrey Garen  <[email protected]>
    8448 
    8449         Reviewed by Tim Hatcher.
    8450 
    8451         Fixed https://bugs.webkit.org/show_bug.cgi?id=19183
    8452         REGRESSION (r33979): Crash in DebuggerCallFrame::functionName when
    8453         clicking button in returnEvent-crash.html
    8454 
    8455         Added two new debugger hooks, willExecuteProgram and didExecuteProgram,
    8456         along with code to generate them, code to invoke them when unwinding
    8457         due to an exception, and code to dump them.
    8458        
    8459         SunSpider reports no change.
    8460 
    8461         * VM/CodeBlock.cpp:
    8462         (KJS::debugHookName): I had to mark this function NEVER_INLINE to avoid
    8463         a .4% performance regression. The mind boggles.
    8464 
    8465 2008-05-28  Adam Roben  <[email protected]>
    8466 
    8467         Fix JavaScriptCore tests on OS X
    8468 
    8469         We were quoting the path to testkjs too late, after it had already
    8470         been combined with spaces and other options.
    8471 
    8472         * tests/mozilla/jsDriver.pl:
    8473         (top level): Move path quoting from here...
    8474         (sub get_kjs_engine_command): ...to here.
    8475 
    8476 2008-05-28  Anders Carlsson  <[email protected]>
    8477 
    8478         Reviewed by Oliver.
    8479 
    8480         <rdar://problem/5968071> "const f" crashes in JavaScriptCore
    8481        
    8482         Make sure to null check the initializer.
    8483        
    8484         * kjs/nodes.cpp:
    8485         (KJS::ConstDeclNode::emitCodeSingle):
    8486 
    8487 2008-05-28  Adam Roben  <[email protected]>
    8488 
    8489         Make run-javascriptcore-tests work with a space in the path to testkjs
    8490 
    8491         Reviewed by Alexey Proskuryakov.
    8492 
    8493         * tests/mozilla/jsDriver.pl: Quote the path to the engine so that
    8494         spaces will be interpreted correctly.
    8495 
    8496 2008-05-28  Alexey Proskuryakov  <[email protected]>
    8497 
    8498         Fixed a misguiding comment - my measurement for negative numbers only included cases
    8499         where both operands were negative, which is not very interesting.
    8500 
    8501         * VM/Machine.cpp:
    8502 
    8503 2008-05-28  Alexey Proskuryakov  <[email protected]>
    8504 
    8505         Reviewed by Maciej.
    8506 
    8507         Based on a patch by Oliver Hunt.
    8508 
    8509         https://bugs.webkit.org/show_bug.cgi?id=19180
    8510         speed up SunSpider by optimizing immediate number cases
    8511 
    8512         1.4% speedup on SunSpider.
    8513 
    8514         * VM/Machine.cpp:
    8515         (KJS::Machine::privateExecute):
    8516         * kjs/JSImmediate.h:
    8517         (KJS::JSImmediate::incImmediateNumber):
    8518         (KJS::JSImmediate::decImmediateNumber):
    8519         Added fast paths for ++ and --.
    8520 
    8521         (KJS::JSImmediate::canDoFastAdditiveOperations): Corrected a comment.
    8522 
    8523 2008-05-28  Alexey Proskuryakov  <[email protected]>
    8524 
    8525         Reviewed by Darin.
    8526 
    8527         https://bugs.webkit.org/show_bug.cgi?id=19180
    8528         speed up SunSpider by optimizing immediate number cases
    8529 
    8530         2% speedup overall, maximum 10% on controlflow-recursive and bitops-3bit-bits-in-byte,
    8531         but a 4% regression on bitops-bits-in-byte and bitops-bitwise-and.
    8532 
    8533         * kjs/JSImmediate.h:
    8534         (KJS::JSImmediate::canDoFastAdditiveOperations):
    8535         (KJS::JSImmediate::addImmediateNumbers):
    8536         (KJS::JSImmediate::subImmediateNumbers):
    8537         Added fast cases that work with positive values less than 2^30.
    8538 
    8539         * VM/Machine.cpp:
    8540         (KJS::Machine::privateExecute): Use the above operations. Also updated SunSpider frequencies
    8541         with my results (looks like tag values have changed, not sure what caused the minor variation
    8542         in actual frequencies).
    8543 
    8544 2008-05-27  Adam Roben  <[email protected]>
    8545 
    8546         Windows build fix
    8547 
    8548         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
    8549         Remove code that appended Cygwin's /bin directory to PATH.
    8550         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
    8551         Prepend Cygwin's /bin directory to PATH. We prepend instead of append
    8552         so that Cygwin's utilities will win out over Win32 versions of the
    8553         same utilities (particularly perl). We do the prepend here instead of
    8554         in the Makefile because nmake doesn't seem to like prepending to PATH
    8555         inside the Makefile. This also matches the way WebCoreGenerated works.
    8556 
    8557 2008-05-27  Adam Roben  <[email protected]>
    8558 
    8559         Roll out r34163
    8560 
    8561         A better fix is on the way.
    8562 
    8563         * DerivedSources.make:
    8564         * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
    8565 
    8566 2008-05-27  Adam Roben  <[email protected]>
    8567 
    8568         Windows build fix
    8569 
    8570         * DerivedSources.make: Don't generate the bytecode docs if
    8571         OMIT_BYTECODE_DOCS is set to 1.
    8572         * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: Set
    8573         OMIT_BYTECODE_DOCS for production builds.
    8574 
    8575 2008-05-27  Anders Carlsson  <[email protected]>
    8576 
    8577         Reviewed by Geoff and Maciej.
    8578 
    8579         <rdar://problem/5806428>
    8580         https://bugs.webkit.org/show_bug.cgi?id=17925
    8581         Crash in KJS::JSObject::put after setting this.__proto__
    8582 
    8583         Set slotIsWriteable to false for __proto__, we want setting __proto__ to go through JSObject::put instead.
    8584        
    8585         * kjs/object.h:
    8586         (KJS::JSObject::getOwnPropertySlotForWrite):
    8587 
    8588 2008-05-27  Kevin Ollivier  <[email protected]>
    8589 
    8590         wx build fixes to catch up with SquirrelFish, etc.
    8591 
    8592         * JavaScriptCoreSources.bkl:
    8593         * jscore.bkl:
    8594         * wtf/Platform.h:
    8595 
    8596 2008-05-27  Darin Adler  <[email protected]>
    8597 
    8598         Reviewed by Tim Hatcher.
    8599 
    8600         - https://bugs.webkit.org/show_bug.cgi?id=19180
    8601           speed up SunSpider by optimizing immediate number cases
    8602 
    8603         Add immediate number cases for the &, |, and ^ operators.
    8604         Makes standalone SunSpider 1.010x faster.
    8605 
    8606         * VM/Machine.cpp:
    8607         (KJS::Machine::privateExecute): Add areBothImmediateNumbers special cases
    8608         for the &, |, and ^ operators.
    8609 
    8610         * kjs/JSImmediate.h:
    8611         (KJS::JSImmediate::xorImmediateNumbers): Added.
    8612         (KJS::JSImmediate::orImmediateNumbers): Added.
    8613 
    8614 2008-05-26  Stephanie Lewis  <[email protected]>
    8615 
    8616         Windows build fix.
    8617 
    8618         * kjs/testkjs.cpp:
    8619 
    8620 2008-05-26  Maciej Stachowiak  <[email protected]>
    8621 
    8622         Reviewed by Anders.
    8623        
    8624         - make addStaticGlobals protected instead of private so subclasses can use it
    8625 
    8626         * JavaScriptCore.exp:
    8627         * kjs/JSGlobalObject.h:
    8628 
    8629 2008-05-26  Geoffrey Garen  <[email protected]>
    8630 
    8631         Reviewed by Darin Adler.
    8632        
    8633         Fixed <rdar://problem/5960859> After an eval of a non-string or a syntax
    8634         error, all profile stack frames are incorrect
    8635        
    8636         SunSpider reports a .3% speedup, possibly because eval of a string is a
    8637         little more efficient now.
    8638 
    8639         * VM/Machine.cpp:
    8640         (KJS::callEval): Make sure to call didExecute when returning early. I
    8641         simplified this function to remove one early return, making the job
    8642         of adding special code to early returns easier.
    8643 
    8644         (KJS::Machine::execute): Use the new function ExecState when notifying
    8645         the profiler. (This doesn't change behavior now, but it might prevent
    8646         subtle errors in the future.)
    8647 
    8648 2008-05-23  Tor Arne Vestbø  <[email protected]>
    8649 
    8650         Reviewed by Simon.
    8651 
    8652         Fixed toLower and toUpper implementations to allow being called
    8653         with a null result pointer and resultLength, to determine the
    8654         number of characters needed for the case conversion.
    8655 
    8656         * wtf/unicode/qt4/UnicodeQt4.h:
    8657         (WTF::Unicode::toLower):
    8658         (WTF::Unicode::toUpper):
    8659 
    8660 2008-05-25  Alexey Proskuryakov  <[email protected]>
    8661 
    8662         Fixing a typo in the previous commit made as a last minute change.
    8663 
    8664         * kjs/regexp_object.cpp:
    8665 
    8666 2008-05-24  Alexey Proskuryakov  <[email protected]>
    8667 
    8668         Reviewed by Darin.
    8669 
    8670         Changed regular expression matching result array to be lazily filled, because many callers
    8671         only care about it being non-null.
    8672 
    8673         2% improvement on Acid3 test 26.
    8674 
    8675         * kjs/array_instance.cpp: Added a void* member to ArrayStorage for ArrayInstance subclasses
    8676         to use.
    8677         * kjs/array_instance.h:
    8678         (KJS::ArrayInstance::lazyCreationData):
    8679         (KJS::ArrayInstance::setLazyCreationData):
    8680         Added methods to access it from subclasses.
    8681 
    8682         * kjs/regexp_object.cpp:
    8683         (KJS::RegExpMatchesArray::RegExpMatchesArray):
    8684         (KJS::RegExpMatchesArray::getOwnPropertySlot):
    8685         (KJS::RegExpMatchesArray::put):
    8686         (KJS::RegExpMatchesArray::deleteProperty):
    8687         (KJS::RegExpMatchesArray::getPropertyNames):
    8688         (KJS::RegExpMatchesArray::fillArrayInstanceIfNeeded):
    8689         (KJS::RegExpMatchesArray::~RegExpMatchesArray):
    8690         (KJS::RegExpObjectImp::arrayOfMatches):
    8691         RegExpMatchesArray is a subclass of ArrayInstance that isn't filled until
    8692         accessed for the first time.
    8693 
    8694 2008-05-24  Alp Toker  <[email protected]>
    8695 
    8696         Win32/gcc build fix. Remove MSVC assumption.
    8697 
    8698         * wtf/TCSpinLock.h:
    8699         (TCMalloc_SlowLock):
    8700 
    8701 2008-05-24  Oleg Finkelshteyn <[email protected]>
    8702 
    8703         Rubber-stamped, tweaked and landed by Alexey.
    8704 
    8705         Build fix for gcc 4.3.
    8706 
    8707         * JavaScriptCore/kjs/testkjs.cpp:
    8708         * JavaScriptCore/VM/CodeBlock.cpp:
    8709         Add missing standard includes.
    8710 
    8711 2008-05-23  Anders Carlsson  <[email protected]>
    8712 
    8713         Reviewed by Geoff.
    8714 
    8715         <rdar://problem/5959886> REGRESSION: Assertion failure in JSImmediate::toString when loading GMail (19217)
    8716        
    8717         Change List to store a JSValue*** pointer + an offset instead of a JSValue** pointer to protect against the case where
    8718         a register file changes while a list object points to its buffer.
    8719        
    8720         * VM/Machine.cpp:
    8721         (KJS::Machine::privateExecute):
    8722         * kjs/JSActivation.cpp:
    8723         (KJS::JSActivation::createArgumentsObject):
    8724         * kjs/list.cpp:
    8725         (KJS::List::getSlice):
    8726         * kjs/list.h:
    8727         (KJS::List::List):
    8728         (KJS::List::at):
    8729         (KJS::List::append):
    8730         (KJS::List::begin):
    8731         (KJS::List::end):
    8732         (KJS::List::buffer):
    8733 
    8734 2008-05-23  Kevin McCullough  <[email protected]>
    8735 
    8736         Reviewed by Sam.
    8737 
    8738         <rdar://problem/5960012> JSProfiler: Stack overflow if recursion is
    8739         too deep.
    8740         -Use a simple depth limit to restrict too deep of recursion.
    8741 
    8742         * profiler/Profile.cpp:
    8743         (KJS::Profile::willExecute):
    8744         (KJS::Profile::didExecute):
    8745         * profiler/Profile.h:
    8746 
    8747 2008-05-23  Geoffrey Garen  <[email protected]>
    8748 
    8749         Rolling back in r34085, with performance resolved.
    8750        
    8751         Apparently, passing the eval function to callEval gave GCC a hernia.
    8752 
    8753         Reviewed by Darin Adler, Kevin McCullough, and Oliver Hunt.
    8754        
    8755         Fixed <rdar://problem/5959447> Crashes and incorrect reporting in the
    8756         JavaScript profiler
    8757 
    8758         * VM/Machine.cpp:
    8759         (KJS::Machine::unwindCallFrame): Fixed incorrect reporting / a crash
    8760         when unwinding from inside eval and/or program code: detect the
    8761         difference, and do the right thing. Also, be sure to notify the profiler
    8762         *before* deref'ing the scope chain, since the profiler uses the scope chain.
    8763 
    8764         (KJS::Machine::execute): Fixed incorrect reporting / crash when calling
    8765         a JS function re-entrently: Machine::execute(FunctionBodyNode*...)
    8766         should not invoke the didExecute hook, because op_ret already does that.
    8767         Also, use the new function's ExecState when calling out to the profiler.
    8768         (Not important now, but could have become a subtle bug later.)
    8769 
    8770         (KJS::Machine::privateExecute): Fixed a hard to reproduce crash when
    8771         profiling JS functions: notify the profiler *before* deref'ing the scope
    8772         chain, since the profiler uses the scope chain.
    8773 
    8774         * kjs/object.cpp:
    8775         (KJS::JSObject::call): Removed these hooks, because they are now unnecessary.
    8776 
    8777         * profiler/Profile.cpp: Added a comment to explain a subtlety that only
    8778         Kevin and I understood previously. (Now, the whole world can understand!)
    8779 
    8780         * profiler/Profiler.cpp:
    8781         (KJS::shouldExcludeFunction): Don't exclude .call and .apply. That was
    8782         a hack to fix bugs that no longer exist.
    8783 
    8784         Finally, sped things up a little bit by changing the "Is the profiler
    8785         running?" check into an ASSERT, since we only call into the profiler
    8786         when it's running:
    8787 
    8788         (KJS::Profiler::willExecute):
    8789         (KJS::Profiler::didExecute):
    8790 
    8791 2008-05-23  Geoffrey Garen  <[email protected]>
    8792 
    8793         Reviewed by Oliver Hunt.
    8794 
    8795         - fixed <rdar://problem/5957662> REGRESSION(r33943-r33980): Can't send email , attach file or save as draft from hotmail.com
    8796        
    8797         SunSpider reports no change.
    8798        
    8799         This is a reworking of r34073, which I rolled out because it caused
    8800         lots of crashes.
    8801 
    8802         * VM/CodeGenerator.cpp:
    8803         (KJS::CodeGenerator::CodeGenerator): Use removeDirect to nix old
    8804         properties whose names collide with new functions. (Don't use putWithAttributes
    8805         because that tries to write to the register file, which hasn't grown to
    8806         fit this program yet.)
    8807 
    8808 2008-05-23  Darin Adler  <[email protected]>
    8809 
    8810         Reviewed by Mark Rowe.
    8811 
    8812         As allocateNumber is used via jsNumberCell outside of JavaScriptCore,
    8813         we need to provide a non-inlined version of it to avoid creating a
    8814         weak external symbol.
    8815 
    8816         * JavaScriptCore.exp:
    8817         * kjs/AllInOneFile.cpp:
    8818         * kjs/collector.cpp:
    8819         (KJS::Collector::allocate):
    8820         (KJS::Collector::allocateNumber):
    8821         * kjs/collector.h:
    8822         (KJS::Collector::allocate):
    8823         (KJS::Collector::inlineAllocateNumber):
    8824         * kjs/value.h:
    8825         (KJS::NumberImp::operator new):
    8826 
    8827 2008-05-23  Geoffrey Garen  <[email protected]>
    8828 
    8829         Rolled out r34073 because it caused lots of layout test crashes.
    8830 
    8831 2008-05-23  Geoffrey Garen  <[email protected]>
    8832 
    8833         Rolled out r34085 because it measured as a 7.6% performance regression.
    8834 
    8835 2008-05-23  Adam Roben  <[email protected]>
    8836 
    8837         Windows build fix
    8838 
    8839         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add the
    8840         profiler directory to the include path.
    8841 
    8842 2008-05-23  Oliver Hunt  <[email protected]>
    8843 
    8844         Reviewed by Anders.
    8845 
    8846         SQUIRRELFISH: JavaScript error messages are missing informative text
    8847 
    8848         Partial fix.
    8849         Tidy up error messages, makes a couple of them provide slightly more info.
    8850         Inexplicably leads to a 1% SunSpider Progression.
    8851 
    8852         * VM/ExceptionHelpers.cpp:
    8853         (KJS::createError):
    8854         (KJS::createInvalidParamError):
    8855         (KJS::createNotAConstructorError):
    8856         (KJS::createNotAFunctionError):
    8857         * VM/ExceptionHelpers.h:
    8858         * VM/Machine.cpp:
    8859         (KJS::isNotObject):
    8860 
    8861 2008-05-23  Oliver Hunt  <[email protected]>
    8862 
    8863         Reviewed by Tim H.
    8864 
    8865         Fix call stack reported by profiler when entering event handlers.
    8866 
    8867         JSObject::call was arbitrarily notifying the profiler when it was
    8868         called, even if it was JS code, which notifies the profile on entry
    8869         in any case.
    8870 
    8871         * kjs/object.cpp:
    8872         (KJS::JSObject::call):
    8873 
    8874 2008-05-16  Alp Toker  <[email protected]>
    8875 
    8876         Build fix for gcc 3. Default constructor required in ExecState,
    8877         used by OldInterpreterExecState.
    8878 
    8879         * kjs/ExecState.h:
    8880         (KJS::ExecState::ExecState):
    8881 
    8882 2008-05-23  Mark Rowe  <[email protected]>
    8883 
    8884         Reviewed by Oliver Hunt.
    8885 
    8886         Fix <rdar://problem/5954997> global-recursion-on-full-stack.html crashes under guardmalloc.
    8887 
    8888         Growing the register file with uncheckedGrow from within Machine::execute is not safe as the
    8889         register file may be too close to its maximum size to grow successfully.  By using grow,
    8890         checking the result and throwing a stack overflow error we can avoid crashing.
    8891 
    8892         * VM/Machine.cpp:
    8893         (KJS::Machine::execute):
    8894         * VM/RegisterFile.h: Remove the now-unused uncheckedGrow.
    8895 
    8896 2008-05-23  Oliver Hunt  <[email protected]>
    8897 
    8898         RS=Kevin McCullough
    8899 
    8900         Remove JAVASCRIPT_PROFILER define
    8901 
    8902         * VM/Machine.cpp:
    8903         (KJS::callEval):
    8904         (KJS::Machine::unwindCallFrame):
    8905         (KJS::Machine::execute):
    8906         (KJS::Machine::privateExecute):
    8907         * kjs/config.h:
    8908         * kjs/object.cpp:
    8909         (KJS::JSObject::call):
    8910 
    8911 2008-05-23  Oliver Hunt  <[email protected]>
    8912 
    8913        <rdar://problem/5951561> Turn on JavaScript Profiler
    8914 
    8915         Reviewed by Kevin McCullough.
    8916 
    8917         Flipped the switch on the profiler, rearranged how we
    8918         signal the the profiler is active so that calls aren't
    8919         needed in the general case.
    8920        
    8921         Also fixed the entry point for Machine::execute(FunctionBodyNode..)
    8922         to correctly indicate function exit.
    8923 
    8924         Results in a 0.7-1.0% regression in SunSpider :-(
    8925 
    8926         * VM/Machine.cpp:
    8927         (KJS::callEval):
    8928         (KJS::Machine::unwindCallFrame):
    8929         (KJS::Machine::execute):
    8930         (KJS::Machine::privateExecute):
    8931         * kjs/config.h:
    8932         * profiler/Profiler.cpp:
    8933         (KJS::Profiler::profiler):
    8934         (KJS::Profiler::startProfiling):
    8935         (KJS::Profiler::stopProfiling):
    8936         * profiler/Profiler.h:
    8937         (KJS::Profiler::enabledProfilerReference):
    8938 
    8939 2008-05-23  Simon Hausmann  <[email protected]>
    8940 
    8941         Fix the Qt build by adding profiler/ to the include search path.
    8942 
    8943         * JavaScriptCore.pri:
    8944 
    8945 2008-05-22  Kevin McCullough  <[email protected]>
    8946 
    8947         Reviewed by Adam.
    8948 
    8949         Fix a bug in the profiler where time in the current function is given to
    8950         (idle).
    8951 
    8952         * profiler/Profile.cpp:
    8953         (KJS::Profile::didExecute): Set the start time and then call didExecute
    8954         to calculate the time spent in this function.
    8955         * profiler/ProfileNode.cpp: Remove confusing calculations that are no
    8956         longer necessary.
    8957         (KJS::ProfileNode::insertNode):
    8958         * profiler/ProfileNode.h: Expose access to the start time to allow the
    8959         simpler time calculations above.
    8960         (KJS::ProfileNode::startTime):
    8961         (KJS::ProfileNode::setStartTime):
    8962 
    8963 2008-05-22  Adam Roben  <[email protected]>
    8964 
    8965         Show "(Function object)" instead of "(JSInpectorCallbackWrapper
    8966         object)" in profiles
    8967 
    8968         Reviewed by Kevin McCullough.
    8969 
    8970         * profiler/Profiler.cpp:
    8971         (KJS::createCallIdentifier): Use JSObject::className instead of
    8972         getting the class name from the ClassInfo directly. JSObject
    8973         subclasses can override className to provide a custom class name, and
    8974         it seems like we should honor that.
    8975 
    8976 2008-05-22  Timothy Hatcher  <[email protected]>
    8977 
    8978         Added Profile::restoreAll and added ProfileNode::restoreAll
    8979         to the export file.
    8980 
    8981         Reviewed by Adam Roben.
    8982 
    8983         * JavaScriptCore.exp:
    8984         * profiler/Profile.h:
    8985 
    8986 2008-05-22  Alp Toker  <[email protected]>
    8987 
    8988         GTK+ build fix. Add JavaScriptCore/profiler to include path.
    8989 
    8990         * GNUmakefile.am:
    8991 
    8992 2008-05-22  Adam Roben  <[email protected]>
    8993 
    8994         Implement sub-millisecond profiling on Windows
    8995 
    8996         Reviewed by Kevin McCullough.
    8997 
    8998         * profiler/ProfileNode.cpp:
    8999         (KJS::getCount): Added. On Windows, we use QueryPerformanceCounter. On
    9000         other platforms, we use getCurrentUTCTimeWithMicroseconds.
    9001         (KJS::ProfileNode::endAndRecordCall): Use getCount instead of
    9002         getCurrentUTCTimeWithMicroseconds.
    9003         (KJS::ProfileNode::startTimer): Ditto.
    9004 
    9005 2008-05-22  Adam Roben  <[email protected]>
    9006 
    9007         Fix a profiler assertion when calling a NodeList as a function
    9008 
    9009         Reviewed by Kevin McCullough.
    9010 
    9011         * profiler/Profiler.cpp:
    9012         (KJS::createCallIdentifier): Don't assert when a non-function object
    9013         is called as a function. Instead, build up a CallIdentifier using the
    9014         object's class name.
    9015 
    9016 2008-05-22  Kevin McCullough  <[email protected]>
    9017 
    9018         Reviewed by Darin.
    9019 
    9020         <rdar://problem/5951529> JSProfiler: Allow the profiler to "Exclude" a
    9021         profile node.
    9022         -Implement 'exclude'; where the excluded node attributes its time to its
    9023         parent's self time.
    9024 
    9025         * JavaScriptCore.exp: Export the exclude function.
    9026         * profiler/Profile.h:
    9027         (KJS::Profile::exclude):
    9028         * profiler/ProfileNode.cpp:
    9029         (KJS::ProfileNode::setTreeVisible): New function that allows a change in
    9030         visiblitiy to be propogated to all the children of a node.
    9031         (KJS::ProfileNode::exclude): If the node matches the callIdentifier then
    9032         set the visiblity of this node and all of its children to false and
    9033         attribute it's total time to it's caller's self time.
    9034         * profiler/ProfileNode.h:
    9035 
    9036 2008-05-22  Mark Rowe  <[email protected]>
    9037 
    9038         Reviewed by Oliver Hunt.
    9039 
    9040         Fix access to static global variables in Windows release builds.
    9041 
    9042         * kjs/JSGlobalObject.h: Don't store a reference to an Identifier
    9043         in GlobalPropertyInfo as the Identifier is likely to be a temporary
    9044         and therefore may be destroyed before the GlobalPropertyInfo.
    9045 
    9046 2008-05-22  Kevin McCullough  <[email protected]>
    9047 
    9048         Build fix.
    9049 
    9050         * VM/Machine.cpp:
    9051         (KJS::callEval):
    9052 
    9053 2008-05-22  Kevin McCullough  <[email protected]>
    9054 
    9055         Reviewed by Sam.
    9056 
    9057         <rdar://problem/5951561> Turn on JavaScript Profiler
    9058         Get basic JS profiling working.
    9059         Even with this patch the profiler will not be compiled in because we do
    9060         not know the extend, if any, of the performance regression it would cause
    9061         when it is not in use. However with these changes, if the profiler were
    9062         on, it would not crash and show good profiling data.
    9063 
    9064         * VM/Machine.cpp: Instrument the calls sites that are needed for profiling.
    9065         (KJS::callEval):
    9066         (KJS::Machine::unwindCallFrame):
    9067         (KJS::Machine::execute):
    9068         (KJS::Machine::privateExecute):
    9069         * kjs/function.cpp: Ditto.
    9070         (KJS::globalFuncEval):
    9071         * kjs/interpreter.cpp: Ditto.
    9072         (KJS::Interpreter::evaluate):
    9073         * profiler/Profile.cpp:
    9074         (KJS::Profile::willExecute):
    9075         (KJS::Profile::didExecute): Because we do not get a good context when
    9076         startProfiling is called it is possible that m_currentNode will be at the
    9077         top of the known stack when a didExecute() is called.  What we then do is
    9078         create a new node that represents the function being exited and insert
    9079         it between the head and the currently known children, since they should
    9080         be children of this new node.
    9081         * profiler/ProfileNode.cpp:
    9082         (KJS::ProfileNode::ProfileNode):
    9083         (KJS::ProfileNode::willExecute): Rename the add function for consistency.
    9084         (KJS::ProfileNode::addChild): Appends the child to this node but also
    9085         sets the parent pointer of the children to this node.
    9086         (KJS::ProfileNode::insertNode): Insert a node between this node and its
    9087         children.  Also set the time for the new node since it is now exiting
    9088         and we don't really know when it started.
    9089         (KJS::ProfileNode::stopProfiling):
    9090         (KJS::ProfileNode::startTimer):
    9091         * profiler/ProfileNode.h:
    9092         (KJS::CallIdentifier::toString): Added for debugging.
    9093         (KJS::ProfileNode::setParent):
    9094         (KJS::ProfileNode::setSelfTime): Fixed an old bug where we set the
    9095         visibleTotalTime not the visibleSelfTime.
    9096         (KJS::ProfileNode::children):
    9097         (KJS::ProfileNode::toString): Added for debugging.
    9098         * profiler/Profiler.cpp: remove unecessary calls.
    9099         (KJS::Profiler::startProfiling):
    9100 
    9101 2008-05-22  Sam Weinig  <[email protected]>
    9102 
    9103         Reviewed by Oliver Hunt.
    9104 
    9105         Rename register arguments for op_call, op_call_eval, op_end, and op_construct
    9106         to document what they are for.
    9107 
    9108         * VM/CodeGenerator.cpp:
    9109         (KJS::CodeGenerator::emitCall):
    9110         (KJS::CodeGenerator::emitCallEval):
    9111         (KJS::CodeGenerator::emitEnd):
    9112         (KJS::CodeGenerator::emitConstruct):
    9113         * VM/CodeGenerator.h:
    9114         * VM/Machine.cpp:
    9115         (KJS::Machine::privateExecute):
    9116 
    9117 2008-05-22  Oliver Hunt  <[email protected]>
    9118 
    9119         Reviewed by Darin.
    9120 
    9121         Bug 19116: SquirrelFish shouldn't regress on variable lookups
    9122         <https://bugs.webkit.org/show_bug.cgi?id=19116>
    9123 
    9124         Last of the multiscope look up optimisations.  This is a wash overall on SunSpider
    9125         but is a factor of 5-10 improvement in multiscope read/write/modify (eg. ++, --, +=,
    9126         ... applied to any non-local var).
    9127 
    9128         * kjs/nodes.cpp:
    9129         (KJS::PostIncResolveNode::emitCode):
    9130         (KJS::PostDecResolveNode::emitCode):
    9131         (KJS::PreIncResolveNode::emitCode):
    9132         (KJS::PreDecResolveNode::emitCode):
    9133         (KJS::ReadModifyResolveNode::emitCode):
    9134 
    9135 2008-05-22  David Kilzer  <[email protected]>
    9136 
    9137         <rdar://problem/5954233> Add method to release free memory from FastMalloc
    9138 
    9139         Patch suggested by Mark Rowe.  Rubber-stamped by Maciej.
    9140 
    9141         * JavaScriptCore.exp: Export _releaseFastMallocFreeMemory.
    9142         * wtf/FastMalloc.cpp:
    9143         (WTF::TCMallocStats::): Added releaseFastMallocFreeMemory() for both
    9144         system malloc and FastMalloc code paths.
    9145         * wtf/FastMalloc.h: Define releaseFastMallocFreeMemory().
    9146 
    9147 2008-05-22  Oliver Hunt  <[email protected]>
    9148 
    9149         RS=Maciej.
    9150 
    9151         Roll out r34020 as it causes recursion tests to fail.
    9152 
    9153         * kjs/object.cpp:
    9154         (KJS::JSObject::call):
    9155 
    9156 2008-05-22  Oliver Hunt  <[email protected]>
    9157 
    9158         Reviewed by Mark.
    9159 
    9160         Don't leak the SymbolTable when compiling eval code.
    9161 
    9162         * kjs/nodes.cpp:
    9163         (KJS::EvalNode::generateCode):
    9164 
    9165 2008-05-22  Simon Hausmann  <[email protected]>
    9166 
    9167         Reviewed by Oliver.
    9168 
    9169         Qt build fix.
    9170 
    9171         * JavaScriptCore.pri: Added DebuggerCallFrame to the build.
    9172         * VM/LabelID.h: Include limits.h for UINT_MAX.
    9173         * wtf/VectorTraits.h: Include memory for std::auto_ptr.
    9174 
    9175 2008-05-22  Geoffrey Garen  <[email protected]>
    9176 
    9177         Reviewed by Adam Roben.
    9178        
    9179         Removed the old recursion guard mechanism, since squirrelfish has its
    9180         own mechanism. Also removed some old JS call tracing code, since we
    9181         have other ways to do that, too.
    9182        
    9183         SunSpider reports no change.
    9184 
    9185         * kjs/object.cpp:
    9186         (KJS::JSObject::call):
    9187 
    9188 2008-05-22  Maciej Stachowiak  <[email protected]>
    9189 
    9190         Reviewed by Oliver.
    9191        
    9192         - fixed <rdar://problem/5954979> crash on celtic kane JS benchmark
    9193 
    9194         * kjs/nodes.cpp:
    9195         (KJS::WithNode::emitCode):
    9196         (KJS::TryNode::emitCode):
    9197 
    9198 2008-05-21  Kevin McCullough  <[email protected]>
    9199 
    9200         Reviewed by Maciej and Geoff.
    9201 
    9202         <rdar://problem/5951561> Turn on JavaScript Profiler
    9203         -As part of the effort to turn on the profiler it would be helpful if it
    9204         did not need ExecStates to represent the stack location of the currently
    9205         executing statement.
    9206         -We now create each node as necessary with a reference to the current
    9207         node and each node knows its parent so that the tree can be made without
    9208         the entire stack.
    9209 
    9210         * profiler/Profile.cpp:
    9211         (KJS::Profile::Profile): The current node starts at the head.
    9212         (KJS::Profile::stopProfiling): The current node is cleared when profiling
    9213         stops.
    9214         (KJS::Profile::willExecute): The current node either adds a new child or
    9215         starts and returns a reference to an already existing child if the call
    9216         ID that is requested already exists.
    9217         (KJS::Profile::didExecute): The current node finishes and returns its
    9218         parent.
    9219         * profiler/Profile.h: Use a single callIdentifier instead of a vector
    9220         since we no longer use the whole stack.
    9221         * profiler/ProfileNode.cpp: Now profile nodes keep a reference to their
    9222         parent.
    9223         (KJS::ProfileNode::ProfileNode): Initialize the parent.
    9224         (KJS::ProfileNode::didExecute): Record the time and return the parent.
    9225         (KJS::ProfileNode::addOrStartChild): If the given callIdentifier is
    9226         already a child, start it and return it, otherwise create a new one and
    9227         return that.
    9228         (KJS::ProfileNode::stopProfiling): Same logic, just use the new function.
    9229         * profiler/ProfileNode.h: Utilize the parent.
    9230         (KJS::ProfileNode::create):
    9231         (KJS::ProfileNode::parent):
    9232         * profiler/Profiler.cpp:
    9233         (KJS::Profiler::startProfiling): Here is the only place where the
    9234         ExecState is used to figure out where in the stack the profiler is
    9235         currently profiling.
    9236         (KJS::dispatchFunctionToProfiles): Only send one CallIdentifier instead
    9237         of a vector of them.
    9238         (KJS::Profiler::willExecute): Ditto.
    9239         (KJS::Profiler::didExecute): Ditto.
    9240         (KJS::createCallIdentifier): Create only one CallIdentifier.
    9241         (KJS::createCallIdentifierFromFunctionImp): Ditto.
    9242         * profiler/Profiler.h:
    9243 
    9244 2008-05-21  Darin Adler  <[email protected]>
    9245 
    9246         Reviewed by Maciej.
    9247 
    9248         - https://bugs.webkit.org/show_bug.cgi?id=19180
    9249           speed up the < operator for the case when both values are integers
    9250 
    9251         Makes standalone SunSpider 1.022x faster.
    9252 
    9253         * VM/Machine.cpp:
    9254         (KJS::jsLess): Add a special case for when both are numbers that fit in a JSImmediate.
    9255 
    9256 2008-05-21  Maciej Stachowiak  <[email protected]>
    9257 
    9258         Reviewed by Oliver and Sam.
    9259        
    9260         - fixed <rdar://problem/5815631> REGRESSION (r31239): Multiscope optimisation of function calls results in incorrect this value (breaks tvtv.de)
    9261        
    9262         Track global this value in the scope chain so we can retrieve it
    9263         efficiently but it follows lexical scope properly.
    9264 
    9265         * kjs/ExecState.h:
    9266         (KJS::ExecState::globalThisValue):
    9267         * kjs/JSGlobalObject.h:
    9268         (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
    9269         * kjs/function_object.cpp:
    9270         (KJS::FunctionObjectImp::construct):
    9271         * kjs/scope_chain.h:
    9272         (KJS::ScopeChainNode::ScopeChainNode):
    9273         (KJS::ScopeChainNode::globalThisObject):
    9274         (KJS::ScopeChainNode::push):
    9275         (KJS::ScopeChain::ScopeChain):
    9276 
    9277 2008-05-21  Kevin McCullough  <[email protected]>
    9278 
    9279         Sadness :(
    9280 
    9281         * kjs/config.h:
    9282 
    9283 2008-05-21  Kevin McCullough  <[email protected]>
    9284 
    9285         Reviewed by Maciej.
    9286 
    9287         <rdar://problem/5950867> JSProfiler: Allow the profiler to "Focus" a
    9288         profile node.
    9289         - This patch updatest the times of the visible nodes correctly, but to do
    9290         so, some of the design of the ProfileNode changed.
    9291 
    9292         * JavaScriptCore.exp: export focus' symbol.
    9293         * profiler/Profile.cpp: ProfileNodes now take a reference to the head of
    9294         the profile tree to get up-to-date accurate total profile time.
    9295         (KJS::Profile::Profile): Pass 0 for the head node.
    9296         (KJS::Profile::stopProfiling): stopProfiling no longer needs the time
    9297         passed into it, since it can get it from the head and it does not need to
    9298         be told it is the head because it can figure it out on it's own.
    9299         (KJS::Profile::willExecute): Set the head node for each created node.
    9300         * profiler/Profile.h:
    9301         (KJS::Profile::focus): Instead of taking a CallIdentifier that the caller
    9302         would have to create, now focus() takes a ProfileNode that they should
    9303         already have a reference to and focus() can extract the CallIdentifier
    9304         from it.
    9305         * profiler/ProfileNode.cpp: Create actual and visible versions fo the
    9306         total and self times for focus and exclude.  Also add a head node
    9307         reference so that nodes can get information from their head.
    9308         (KJS::ProfileNode::ProfileNode):
    9309         (KJS::ProfileNode::stopProfiling): Rename the total and self time
    9310         variables and set the visual ones to the actual ones, so that without any
    9311         changes to the visual versions of these variables, their times will match
    9312         the actual times.
    9313         (KJS::ProfileNode::focus): Now focus() has a bool to force it's children
    9314         to be visible if this node is visible.  If this node does not match the
    9315         CallIdentifier being focused then the visibleTotalTime is only updated if
    9316         one or more of it's children is the CallIdentifier being focused.
    9317         (KJS::ProfileNode::restoreAll): Restores all variables with respect to
    9318         the visible data in the ProfileNode.
    9319         (KJS::ProfileNode::endAndRecordCall): Name change.
    9320         (KJS::ProfileNode::debugPrintData): Dump the new variables.
    9321         (KJS::ProfileNode::debugPrintDataSampleStyle): Name change.
    9322         * profiler/ProfileNode.h: Use the new variables and reference to the head
    9323         node.
    9324         (KJS::ProfileNode::create):
    9325         (KJS::ProfileNode::totalTime):
    9326         (KJS::ProfileNode::setTotalTime):
    9327         (KJS::ProfileNode::selfTime):
    9328         (KJS::ProfileNode::setSelfTime):
    9329         (KJS::ProfileNode::totalPercent):
    9330         (KJS::ProfileNode::selfPercent):
    9331         (KJS::ProfileNode::setVisible):
    9332 
    9333 2008-05-21  Alp Toker  <[email protected]>
    9334 
    9335         GTK+/UNIX testkjs build fix. Include signal.h.
    9336 
    9337         * kjs/testkjs.cpp:
    9338 
    9339 2008-05-21  Oliver Hunt  <[email protected]>
    9340 
    9341         Yet more windows build fixes
    9342 
    9343         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    9344 
    9345 2008-05-21  Oliver Hunt  <[email protected]>
    9346 
    9347         Yet more windows build fixes
    9348 
    9349         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    9350 
    9351 2008-05-21  Alp Toker  <[email protected]>
    9352 
    9353         GTK+ build fix. Add DebuggerCallFrame.cpp and take AllInOneFile.cpp
    9354         changes into account.
    9355 
    9356         * GNUmakefile.am:
    9357 
    9358 2008-05-21  Oliver Hunt  <[email protected]>
    9359 
    9360         Add DebuggerCallFrame.{h,cpp} to the project file
    9361 
    9362         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    9363 
    9364 2008-05-21  Alp Toker  <[email protected]>
    9365 
    9366         GTK+ port build fixes following squirrelfish merge r33979.
    9367 
    9368         * GNUmakefile.am:
    9369 
    9370 2008-05-21  Maciej Stachowiak  <[email protected]>
    9371 
    9372         Reviewed by Darin.
    9373        
    9374         - save a hash lookup wne writing to global properties
    9375         0.3% speedup on SunSpider, 7% on bitops-bitwise-and
    9376 
    9377         * VM/Machine.cpp:
    9378         (KJS::resolveBase): Check for being a the end of the scope chain
    9379         before hash lookup.
    9380 
    9381 2008-05-21  Alp Toker  <[email protected]>
    9382 
    9383         Rubber-stamped by Maciej.
    9384 
    9385         Replace non-standard #pragma marks with comments to avoid compiler
    9386         warnings.
    9387 
    9388         * profiler/ProfileNode.cpp:
    9389 
    9390 2008-05-21  Geoffrey Garen  <[email protected]>
    9391 
    9392         Reviewed by Mark Rowe.
    9393 
    9394         Fix layout test failure in fast/dom/getter-on-window-object2 introduced in r33961.
    9395 
    9396         * JavaScriptCore.exp:
    9397         * kjs/JSGlobalObject.cpp:
    9398         (KJS::JSGlobalObject::defineGetter):
    9399         (KJS::JSGlobalObject::defineSetter):
    9400         * kjs/JSGlobalObject.h:
    9401 
    9402 === End merge of squirrelfish ===
    9403 
    9404 2008-05-21  Geoffrey Garen  <[email protected]>
    9405 
    9406         Reviewed by Tim Hatcher.
    9407        
    9408         Merged with trunk WebCore's new debugger.
    9409 
    9410         * kjs/DebuggerCallFrame.cpp:
    9411         (KJS::DebuggerCallFrame::evaluate): Changed this function to separate
    9412         the exception value from the return value. The WebKit debugger treats
    9413         them as one, but the WebCore debugger doesn't.
    9414 
    9415         * kjs/DebuggerCallFrame.h:
    9416         (KJS::DebuggerCallFrame::dynamicGlobalObject): Added a new accessor for
    9417         the dynamic global object, since the debugger doesn't want the lexical
    9418         global object.
    9419 
    9420 2008-05-21  Oliver Hunt  <[email protected]>
    9421 
    9422         Reviewed by Maciej.
    9423 
    9424         Bug 19116: SquirrelFish shouldn't regress on variable lookups
    9425         <https://bugs.webkit.org/show_bug.cgi?id=19116>
    9426 
    9427         Optimise cross scope assignment, 0.4% progression in sunspider.
    9428 
    9429         * VM/CodeBlock.cpp:
    9430         (KJS::CodeBlock::dump):
    9431         * VM/CodeGenerator.cpp:
    9432         (KJS::CodeGenerator::emitPutScopedVar):
    9433         * VM/CodeGenerator.h:
    9434         * VM/Machine.cpp:
    9435         (KJS::Machine::privateExecute):
    9436         * VM/Opcode.h:
    9437         * kjs/nodes.cpp:
    9438         (KJS::AssignResolveNode::emitCode):
    9439 
    9440 2008-05-21  Maciej Stachowiak  <[email protected]>
    9441 
    9442         Reviewed by Oliver.
    9443        
    9444         - check property map before symbol table in JSGlobalObject::getOwnPropertySlot
    9445         0.5% speedup on SunSpider
    9446 
    9447         * kjs/JSGlobalObject.h:
    9448         (KJS::JSGlobalObject::getOwnPropertySlot): Check property map before symbol table
    9449         because symbol table access is likely to have been optimized.
    9450 
    9451 2008-05-21  Oliver Hunt  <[email protected]>
    9452 
    9453         Reviewed by Maciej.
    9454 
    9455         Bug 19116: SquirrelFish shouldn't regress on variable lookups
    9456         <https://bugs.webkit.org/show_bug.cgi?id=19116>
    9457 
    9458         Optimise multiscope lookup of statically resolvable function calls.
    9459         SunSpider reports a 1.5% improvement, including 37% on
    9460         controlflow-recursive for some reason :D
    9461 
    9462         * VM/CodeBlock.cpp:
    9463         (KJS::CodeBlock::dump):
    9464         * VM/CodeGenerator.cpp:
    9465         (KJS::CodeGenerator::emitResolve):
    9466         * VM/CodeGenerator.h:
    9467         * kjs/nodes.cpp:
    9468         (KJS::FunctionCallResolveNode::emitCode):
    9469 
    9470 2008-05-21  Maciej Stachowiak  <[email protected]>
    9471 
    9472         Reviewed by Oliver.
    9473        
    9474         - give JSGlobalObject a special version of getOwnPropertySlot that tells you if the slot is directly writable
    9475         (WebCore change using this is a 2.6% speedup on in-browser SunSpider).
    9476 
    9477         * JavaScriptCore.exp:
    9478         * kjs/JSGlobalObject.h:
    9479         (KJS::JSGlobalObject::getOwnPropertySlot):
    9480         * kjs/JSVariableObject.h:
    9481         (KJS::JSVariableObject::symbolTableGet):
    9482         * kjs/object.h:
    9483         (KJS::JSObject::getDirectLocation):
    9484         (KJS::JSObject::getOwnPropertySlotForWrite):
    9485         * kjs/property_map.cpp:
    9486         (KJS::PropertyMap::getLocation):
    9487         * kjs/property_map.h:
    9488         * kjs/property_slot.h:
    9489         (KJS::PropertySlot::putValue):
    9490 
    9491 2008-05-20  Oliver Hunt  <[email protected]>
    9492 
    9493         Reviewed by Maciej.
    9494 
    9495         Bug 19116: SquirrelFish shouldn't regress on variable lookups
    9496         <https://bugs.webkit.org/show_bug.cgi?id=19116>
    9497 
    9498         This restores multiscope optimisation to simple resolve, producing
    9499         a 2.6% progression in SunSpider.  Have verified that none of the
    9500         sites broken by the multiscope optimisation in trunk were effected
    9501         by this change.
    9502 
    9503         * VM/CodeBlock.cpp:
    9504         (KJS::CodeBlock::dump):
    9505         * VM/CodeBlock.h:
    9506         (KJS::CodeBlock::CodeBlock):
    9507         * VM/CodeGenerator.cpp:
    9508         (KJS::CodeGenerator::findScopedProperty):
    9509         (KJS::CodeGenerator::emitResolve):
    9510         * VM/CodeGenerator.h:
    9511         * VM/Machine.cpp:
    9512         (KJS::resolve_n):
    9513         (KJS::Machine::privateExecute):
    9514         * VM/Opcode.h:
    9515         * kjs/JSVariableObject.h:
    9516 
    9517 2008-05-20  Oliver Hunt  <[email protected]>
    9518 
    9519         Fixerate the windows build.
    9520 
    9521         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    9522         * VM/CodeGenerator.cpp:
    9523         * VM/RegisterFile.h:
    9524         * kjs/JSGlobalObject.h:
    9525         * kjs/Parser.cpp:
    9526         * kjs/interpreter.h:
    9527 
    9528 2008-05-20  Oliver Hunt  <[email protected]>
    9529 
    9530         Reviewed by Geoff.
    9531 
    9532         Bug 19110: SquirrelFish: Google Maps - no maps
    9533         <https://bugs.webkit.org/show_bug.cgi?id=19110>
    9534 
    9535         Correct a comedy of errors present in my original patch to "fix"
    9536         exceptions occurring midway through pre and post increment. This
    9537         solution is cleaner than the original, doesn't need the additional
    9538         opcodes, and as an added benefit does not break Google Maps.
    9539 
    9540         Sunspider reports a 0.4% progression.
    9541 
    9542         * VM/CodeBlock.cpp:
    9543         (KJS::CodeBlock::dump):
    9544         * VM/CodeGenerator.cpp:
    9545         * VM/CodeGenerator.h:
    9546         * VM/Machine.cpp:
    9547         (KJS::Machine::privateExecute):
    9548         * VM/Opcode.h:
    9549         * kjs/nodes.cpp:
    9550         (KJS::PreIncResolveNode::emitCode):
    9551         (KJS::PreDecResolveNode::emitCode):
    9552         (KJS::PreIncBracketNode::emitCode):
    9553         (KJS::PreDecBracketNode::emitCode):
    9554         (KJS::PreIncDotNode::emitCode):
    9555         (KJS::PreDecDotNode::emitCode):
    9556 
    9557 2008-05-20  Maciej Stachowiak  <[email protected]>
    9558 
    9559         Reviewed by Oliver.
    9560        
    9561         - inline JSGlobalObject::getOwnPropertySlot
    9562         1% improvement on in-browser SunSpider (a wash command-line)
    9563 
    9564         * kjs/JSGlobalObject.cpp:
    9565         * kjs/JSGlobalObject.h:
    9566         (KJS::JSGlobalObject::getOwnPropertySlot):
    9567 
    9568 2008-05-18  Oliver Hunt  <[email protected]>
    9569 
    9570         Reviewed by Maciej.
    9571 
    9572         Bug 18752: SQUIRRELFISH: exceptions are not always handled by the vm
    9573         <https://bugs.webkit.org/show_bug.cgi?id=18752>
    9574 
    9575         Handle exceptions thrown by toString conversion in subscript operators,
    9576         this should basically complete exception handling in SquirrelFish.
    9577 
    9578         Sunspider reports no regression.
    9579 
    9580         * VM/Machine.cpp:
    9581         (KJS::Machine::privateExecute):
    9582 
    9583 2008-05-17  Geoffrey Garen  <[email protected]>
    9584 
    9585         Reviewed by Oliver Hunt.
    9586 
    9587         [Reapplying patch with previously missing files from r33553 -- Oliver]
    9588 
    9589         Behold: debugging.
    9590        
    9591         SunSpider reports no change.
    9592 
    9593         * JavaScriptCore.xcodeproj/project.pbxproj: Added DebuggerCallFrame.h/.cpp,
    9594         and created a debugger folder.
    9595 
    9596         * VM/CodeGenerator.cpp:
    9597         (KJS::CodeGenerator::generate): If the debugger is attached, always
    9598         generate full scope chains for its sake.
    9599 
    9600         * VM/Machine.cpp:
    9601         (KJS::Machine::unwindCallFrame): Notify the debugger when unwinding
    9602         due to an exception, so it doesn't keep stale call frames around.
    9603 
    9604         (KJS::Machine::execute): Set Callee to 0 in eval frames, so the
    9605         debugger can distinguish them from function call frames.
    9606 
    9607         (KJS::Machine::debug): Simplified this function, since the debugger
    9608         doesn't actually need all the information we used to provide.
    9609 
    9610         (KJS::Machine::privateExecute): Treat debugging hooks like other function
    9611         calls, so the code we hook into (the debugger UI) can be optimized.
    9612 
    9613         * kjs/debugger.cpp: Nixed these default callback implementations and
    9614         made the callbacks pure virtual instead, so the compiler could tell me
    9615         if I made a mistake in one of the subclasses.
    9616 
    9617         * kjs/debugger.h: Removed a bunch of irrelevent data from the debugger
    9618         callbacks. Changed from passing an ExecState* to passing a
    9619         DebuggerCallFrame*, since an ExecState* doesn't contain sufficient
    9620         information anymore.
    9621 
    9622         * kjs/function.cpp:
    9623         (KJS::globalFuncEval): Easiest bug fix evar!
    9624 
    9625         [Previously missing files from r33553]
    9626         * kjs/DebuggerCallFrame.cpp: Copied from JavaScriptCore/profiler/FunctionCallProfile.h.
    9627         (KJS::DebuggerCallFrame::functionName):
    9628         (KJS::DebuggerCallFrame::thisObject):
    9629         (KJS::DebuggerCallFrame::evaluateScript):
    9630         * kjs/DebuggerCallFrame.h: Copied from JavaScriptCore/VM/Register.h.
    9631         (KJS::DebuggerCallFrame::DebuggerCallFrame):
    9632         (KJS::DebuggerCallFrame::scopeChain):
    9633         (KJS::DebuggerCallFrame::exception):
    9634 
    9635 2008-05-17  Cameron Zwarich  <[email protected]>
    9636 
    9637         Reviewed by Oliver.
    9638 
    9639         Bug 18991: SquirrelFish: Major codegen issue in a.b=expr, a[b]=expr
    9640         <https://bugs.webkit.org/show_bug.cgi?id=18991>
    9641 
    9642         Fix the last remaining blocking cases of this bug.
    9643 
    9644         * kjs/grammar.y:
    9645         * kjs/nodes.cpp:
    9646         (KJS::ReadModifyResolveNode::emitCode):
    9647 
    9648 2008-05-17  Cameron Zwarich  <[email protected]>
    9649 
    9650         Reviewed by Oliver.
    9651 
    9652         Partial fix for:
    9653 
    9654         Bug 18991: SquirrelFish: Major codegen issue in a.b=expr, a[b]=expr
    9655         <https://bugs.webkit.org/show_bug.cgi?id=18991>
    9656 
    9657         Ensure that the code generated for assignments uses temporaries whenever
    9658         necessary. This patch covers the vast majority of situations, but there
    9659         are still a few left.
    9660 
    9661         This patch also adds some missing cases to CodeBlock::dump().
    9662 
    9663         * VM/CodeBlock.cpp:
    9664         (KJS::CodeBlock::dump):
    9665         * VM/CodeGenerator.h:
    9666         (KJS::CodeGenerator::destinationForAssignResult):
    9667         (KJS::CodeGenerator::leftHandSideNeedsCopy):
    9668         (KJS::CodeGenerator::emitNodeForLeftHandSide):
    9669         * kjs/NodeInfo.h:
    9670         * kjs/grammar.y:
    9671         * kjs/nodes.cpp:
    9672         (KJS::AssignDotNode::emitCode):
    9673         (KJS::ReadModifyDotNode::emitCode):
    9674         (KJS::AssignBracketNode::emitCode):
    9675         (KJS::ReadModifyBracketNode::emitCode):
    9676         (KJS::ForInNode::ForInNode):
    9677         * kjs/nodes.h:
    9678         (KJS::ReadModifyResolveNode::):
    9679         (KJS::AssignResolveNode::):
    9680         (KJS::ReadModifyBracketNode::):
    9681         (KJS::AssignBracketNode::):
    9682         (KJS::AssignDotNode::):
    9683         (KJS::ReadModifyDotNode::):
    9684 
    9685 2008-05-17  Oliver Hunt  <[email protected]>
    9686 
    9687         Reviewed by Maciej.
    9688 
    9689         Bug 19106: SquirrelFish: Activation is not marked correctly
    9690         <https://bugs.webkit.org/show_bug.cgi?id=19106>
    9691 
    9692         We can't rely on the symbol table for a count of the number of globals
    9693         we need to mark as that misses duplicate parameters and 'this'.  Now we
    9694         use the actual local register count from the codeBlock.
    9695 
    9696         * kjs/JSActivation.cpp:
    9697         (KJS::JSActivation::mark):
    9698 
    9699 2008-05-16  Oliver Hunt  <[email protected]>
    9700 
    9701         Reviewed by Geoff.
    9702 
    9703         Bug 19076: SquirrelFish: RegisterFile can be corrupted if implictly reenter global scope with no declared vars
    9704         <https://bugs.webkit.org/show_bug.cgi?id=19076>
    9705 
    9706         Don't delay allocation of initial global RegisterFile, as we can't guarantee we will be able
    9707         to allocate the global 'this' register safely at any point after initialisation of the Global
    9708         Object.
    9709 
    9710         Unfortunately this initial allocation caused a regression of 0.2-0.3%, however this patch adds
    9711         support for the static slot optimisation for the global Math object which brings it to a 0.3%
    9712         progression.
    9713 
    9714         * VM/CodeGenerator.cpp:
    9715         (KJS::CodeGenerator::programCodeThis):
    9716         (KJS::CodeGenerator::CodeGenerator):
    9717         (KJS::CodeGenerator::addParameter):
    9718         * VM/CodeGenerator.h:
    9719         * VM/Machine.cpp:
    9720         (KJS::Machine::execute):
    9721         * kjs/ExecState.h:
    9722         * kjs/JSGlobalObject.cpp:
    9723         (KJS::JSGlobalObject::reset):
    9724         * kjs/JSGlobalObject.h:
    9725         (KJS::JSGlobalObject::GlobalPropertyInfo::GlobalPropertyInfo):
    9726         (KJS::JSGlobalObject::addStaticGlobals):
    9727         * kjs/nodes.cpp:
    9728 
    9729 2008-05-16  Cameron Zwarich  <[email protected]>
    9730 
    9731         Reviewed by Oliver Hunt.
    9732 
    9733         Bug 19098: SquirrelFish: Ref'd temporaries can be clobbered
    9734         <https://bugs.webkit.org/show_bug.cgi?id=19098>
    9735 
    9736         When doing code generation for a statement list, increase the reference
    9737         count on a register that might eventually be returned, so that it doesn't
    9738         get clobbered by a request for a new temporary.
    9739 
    9740         * kjs/nodes.cpp:
    9741         (KJS::statementListEmitCode):
    9742 
    9743 2008-05-16  Maciej Stachowiak  <[email protected]>
    9744 
    9745         Reviewed by Oliver.
    9746        
    9747         - fixed Bug 19044: SquirrelFish: Bogus values enter evaluation when closing over scope with parameter and var with same name
    9748         https://bugs.webkit.org/show_bug.cgi?id=19044
    9749 
    9750         * kjs/JSActivation.cpp:
    9751         (KJS::JSActivation::copyRegisters): Use numLocals from the code
    9752         block rather than the size of the symbol table for the number of
    9753         registers to copy, to account for duplicate parameters and vars
    9754         with the same name as parameters (we still have potentially
    9755         suboptimal codegen in that we allocate a local register for the
    9756         var in the latter case but it is never used).
    9757        
    9758 2008-05-15  Geoffrey Garen  <[email protected]>
    9759 
    9760         Not reviewed.
    9761        
    9762         We regret to inform you that your program is crashing because you were
    9763         stupid.
    9764 
    9765         * VM/Machine.cpp:
    9766         (KJS::Machine::privateExecute): Math is hard.
    9767 
    9768 2008-05-14  Geoffrey Garen  <[email protected]>
    9769 
    9770         Reviewed by Oliver Hunt.
    9771 
    9772         A little more debugger action: filled in op_debug. All debugger control
    9773         flow works now, but variable inspection and backtraces still don't.
    9774        
    9775         SunSpider reports no change.
    9776 
    9777         * VM/CodeGenerator.cpp: Changed op_debug to accept line number parameters.
    9778 
    9779         * VM/Machine.cpp:
    9780         (KJS::Machine::getFunctionAndArguments): Moved op_debug into a
    9781         NEVER_INLINE function to avoid a stunning 10% performance regression.
    9782         Also factored out a common function for retrieving the function and
    9783         arguments from a  call frame.
    9784 
    9785         * kjs/JSActivation.cpp:
    9786         (KJS::JSActivation::createArgumentsObject): Use the new factored out
    9787         function mentioned above.
    9788 
    9789         * kjs/Parser.cpp:
    9790         (KJS::Parser::parse): Increment m_sourceId before assigning it, so the
    9791         sourceId we send to the debugger matches the sourceId recorded in the
    9792         node.
    9793 
    9794         * kjs/nodes.cpp: Emit debugging hooks.
    9795 
    9796 2008-05-14  Oliver Hunt  <[email protected]>
    9797 
    9798         Reviewed by Maciej.
    9799 
    9800         Bug 19024: SQUIRRELFISH: ASSERTION FAILED: activation->isActivationObject() in Machine::unwindCallFrame
    9801         <https://bugs.webkit.org/show_bug.cgi?id=19024>
    9802 
    9803         This fixes a number of issues.  The most important is that we now check every register
    9804         file for tainting rather than just looking for function register files as that was
    9805         insufficient. Additionally guarded against implicit re-entry into Eval code.
    9806 
    9807         Also added a few additional assertions to reduce the amout of time between something
    9808         going wrong and us seeing the error.
    9809 
    9810         * VM/Machine.cpp:
    9811         (KJS::Machine::execute):
    9812         (KJS::Machine::privateExecute):
    9813         * VM/RegisterFile.cpp:
    9814         (KJS::RegisterFile::growBuffer):
    9815         (KJS::RegisterFile::addGlobalSlots):
    9816         * VM/RegisterFileStack.cpp:
    9817         (KJS::RegisterFileStack::pushGlobalRegisterFile):
    9818         (KJS::RegisterFileStack::pushFunctionRegisterFile):
    9819         * VM/RegisterFileStack.h:
    9820         (KJS::RegisterFileStack::inImplicitCall):
    9821 
    9822 2008-05-14  Geoffrey Garen  <[email protected]>
    9823 
    9824         Reviewed by Oliver Hunt.
    9825        
    9826         A little more debugger action: emit opcodes for debugger hooks. Right
    9827         now, the opcode implementation is just a stub.
    9828        
    9829         SunSpider reports no change.
    9830        
    9831         Some example codegen for "function f() { 1; }":
    9832 
    9833             [   0] dbg         DidEnterCallFrame
    9834             [   2] dbg         WillExecuteStatement
    9835             [   4] load        tr0, 1(@k0)
    9836             [   7] load        tr0, undefined(@k1)
    9837             [  10] dbg         WillLeaveCallFrame
    9838             [  12] ret         tr0
    9839 
    9840 2008-05-14  Oliver Hunt  <[email protected]>
    9841 
    9842         Reviewed by Geoff.
    9843 
    9844         Bug 19025: SQUIRRELFISH: malformed syntax in onload handler causes crash
    9845         <https://bugs.webkit.org/show_bug.cgi?id=19025>
    9846 
    9847         Simple fix -- move the use of functionBodyNode to after the null check.
    9848 
    9849         * kjs/function_object.cpp:
    9850         (KJS::FunctionObjectImp::construct):
    9851 
    9852 2008-05-13  Geoffrey Garen  <[email protected]>
    9853 
    9854         Reviewed by Oliver Hunt.
    9855        
    9856         Fixed a codegen crash with run-time parse errors.
    9857        
    9858         SunSpider reports no change.
    9859        
    9860         emitThrowError needs to return the temporary holding the error, not dst,
    9861         since dst may be NULL. In fact, emitThrowError shouldn't take a dst
    9862         parameter at all, since exceptions should not modify the destination
    9863         register.
    9864 
    9865 2008-05-13  Oliver Hunt  <[email protected]>
    9866 
    9867         Reviewed by Geoff.
    9868 
    9869         Bug 19027: SquirrelFish: Incorrect codegen for pre-increment
    9870         <https://bugs.webkit.org/show_bug.cgi?id=19027>
    9871 
    9872         This fixes the codegen issues for the pre-inc/decrement operators
    9873         to prevent incorrectly clobbering the destination in the event of
    9874         an exception.
    9875 
    9876         * VM/CodeBlock.cpp:
    9877         (KJS::CodeBlock::dump):
    9878         * VM/CodeGenerator.cpp:
    9879         (KJS::CodeGenerator::emitPreInc):
    9880         (KJS::CodeGenerator::emitPreDec):
    9881         * VM/CodeGenerator.h:
    9882         * VM/Machine.cpp:
    9883         (KJS::Machine::privateExecute):
    9884         * VM/Opcode.h:
    9885         * kjs/nodes.cpp:
    9886         (KJS::PreIncResolveNode::emitCode):
    9887         (KJS::PreDecResolveNode::emitCode):
    9888         (KJS::PreIncBracketNode::emitCode):
    9889         (KJS::PreDecBracketNode::emitCode):
    9890         (KJS::PreIncDotNode::emitCode):
    9891         (KJS::PreDecDotNode::emitCode):
    9892 
    9893 2008-05-13  Geoffrey Garen  <[email protected]>
    9894 
    9895         Reviewed by Oliver Hunt.
    9896        
    9897         A little more debugger action: supply a real line number, sourceId,
    9898         and sourceURL in op_new_error.
    9899        
    9900         SunSpider reports a .2% speedup. Not sure what that's about.
    9901 
    9902         * VM/Machine.cpp:
    9903         (KJS::Machine::privateExecute): Use the new good stuff in op_new_error.
    9904 
    9905         * kjs/nodes.cpp:
    9906         (KJS::RegExpNode::emitCode): Use the shared emitThrowError instead of
    9907         rolling our own.
    9908 
    9909 2008-05-13  Geoffrey Garen  <[email protected]>
    9910 
    9911         Reviewed by Oliver Hunt.
    9912        
    9913         A little more debugger action: implemented the exception callback.
    9914        
    9915         SunSpider reports a .2% speedup. Not sure what that's about.
    9916 
    9917         * VM/CodeBlock.h: A little refactoring here. Store a pointer to our
    9918         owner ScopeNode so we can retrieve data from it. This allows us to
    9919         stop storing copies of the data ourselves. Also, store a "this" register
    9920         instead of a code type, since we were only using the code type to
    9921         calculate the "this" register.
    9922 
    9923         * VM/CodeGenerator.cpp:
    9924         (KJS::CodeGenerator::generate): Calculate the "this" register mentioned
    9925         above. Also, take care of removing "this" from the symbol table after
    9926         codegen is done, since relying on the timing of a destructor for correct
    9927         behavior is not so good.
    9928 
    9929         * VM/Machine.cpp:
    9930         (KJS::Machine::throwException): Invoke the debugger's exception callback.
    9931         (KJS::Machine::privateExecute): Use the "this" register mentioned above.
    9932 
    9933 2008-05-13  Geoffrey Garen  <[email protected]>
    9934 
    9935         Reviewed by Oliver Hunt.
    9936        
    9937         Removed some unused exception machinery.
    9938        
    9939         SunSpider reports a .3% speedup.
    9940 
    9941         * API/JSCallbackObject.h:
    9942         * API/JSCallbackObjectFunctions.h:
    9943         * JavaScriptCore.exp:
    9944         * VM/Machine.cpp:
    9945         (KJS::Machine::privateExecute):
    9946         * kjs/internal.cpp:
    9947         * kjs/object.cpp:
    9948         * kjs/object.h:
    9949         * kjs/value.h:
    9950 
    9951 2008-05-13  Geoffrey Garen  <[email protected]>
    9952 
    9953         Reviewed by Oliver Hunt.
    9954        
    9955         A little more debugger action.
    9956 
    9957         * kjs/debugger.cpp:
    9958         * kjs/debugger.h: Removed debuggersPresent because it was unused.
    9959         Replaced AttachedGlobalObject linked list with a HashSet because HashSet
    9960         is faster and simpler. Changed all functions to return void instead of
    9961         bool, because no clients ever return false, and we don't want to support
    9962         it.
    9963 
    9964         * kjs/nodes.cpp: Did some up-keep to avoid build bustage.
    9965         (KJS::Node::handleException):
    9966         (KJS::BreakpointCheckStatement::execute):
    9967         (KJS::FunctionBodyNodeWithDebuggerHooks::execute):
    9968 
    9969 2008-05-13  Oliver Hunt  <[email protected]>
    9970 
    9971         Reviewed by Darin.
    9972 
    9973         Bug 18752: SQUIRRELFISH: exceptions are not always handled by the vm
    9974         <https://bugs.webkit.org/show_bug.cgi?id=18752>
    9975 
    9976         Replace old attempt at "branchless" exceptions as the extra information
    9977         being passed made gcc an unhappy compiler, replacing these custom toNumber
    9978         calls with ordinary toNumber logic (by relying on toNumber now preventing
    9979         side effects after an exception has been thrown) provided sufficient leeway
    9980         to add the additional checks for the remaining unchecked cases.
    9981 
    9982         This leaves only toString conversions in certain contexts as possibly
    9983         misbehaving.
    9984 
    9985         * VM/Machine.cpp:
    9986         (KJS::jsAdd):
    9987         (KJS::resolve):
    9988         (KJS::resolveBaseAndProperty):
    9989         (KJS::resolveBaseAndFunc):
    9990         (KJS::Machine::privateExecute):
    9991         * VM/Opcode.h:
    9992         * kjs/value.h:
    9993         (KJS::JSValue::safeGetNumber):
    9994 
    9995 2008-05-13  Geoffrey Garen  <[email protected]>
    9996 
    9997         Reviewed by Oliver Hunt.
    9998        
    9999         First steps toward supporting the debugger API: support the sourceParsed
    10000         callback; plus some minor fixups.
    10001 
    10002         SunSpider reports no regression.
    10003 
    10004         * VM/CodeGenerator.h: Removed a misleading comment.
    10005 
    10006         * kjs/Parser.h: Changed the parser to take an ExecState*, so it can
    10007         implement the sourceParsed callback -- that way, we only have to
    10008         implement the callback in one place.
    10009 
    10010         * kjs/debugger.cpp: Nixed DebuggerImp, because its sole purpose in life
    10011         was to demonstrate the misapplication of design patterns.
    10012 
    10013         * kjs/debugger.h: Changed sourceParsed to take a SourceProvider, to
    10014         reduce copying, and not to return a value, because pausing execution
    10015         after parsing is complicated, and no clients needed that ability, anyway.
    10016 
    10017         * kjs/grammar.y: Make sure never to pass a NULL SourceElements* to
    10018         didFinishParsing -- that simplifies some code down the road.
    10019        
    10020         * kjs/nodes.cpp: Don't generate special AST nodes just because the
    10021         debugger is attached -- that's a relic of the old AST execution model,
    10022         and those nodes haven't been maintained.
    10023 
    10024 2008-05-13  Oliver Hunt  <[email protected]>
    10025 
    10026         Reviewed by Geoff.
    10027 
    10028         Bug 18752: SQUIRRELFISH: exceptions are not always handled by the vm
    10029         <https://bugs.webkit.org/show_bug.cgi?id=18752>
    10030 
    10031         First step: prevent incorrect evaluation of valueOf/toString conversion
    10032         in right hand side of expression after earlier conversion throws.
    10033 
    10034         * API/JSCallbackObjectFunctions.h:
    10035         (KJS::::toNumber):
    10036         * kjs/object.cpp:
    10037         (KJS::JSObject::defaultValue):
    10038 
    10039 2008-05-12  Oliver Hunt  <[email protected]>
    10040 
    10041         Reviewed by Geoff.
    10042 
    10043         Bug 18934: SQUIRRELFISH: ASSERT @ nytimes.com due to RegisterFile being clobbered
    10044         <https://bugs.webkit.org/show_bug.cgi?id=18934>
    10045 
    10046         Unfortunately we cannot create new statically optimised globals if there are any
    10047         tainted RegisterFiles on the RegisterFileStack.  To handle this we re-introduce
    10048         (in a slightly cleaner form) the inImplicitCall concept to the RegisterFileStack.
    10049 
    10050         * VM/Machine.cpp:
    10051         (KJS::Machine::execute):
    10052         * VM/RegisterFileStack.cpp:
    10053         (KJS::RegisterFileStack::pushFunctionRegisterFile):
    10054         * VM/RegisterFileStack.h:
    10055 
    10056 2008-05-12  Geoffrey Garen  <[email protected]>
    10057 
    10058         Reviewed by Maciej Stachowiak.
    10059        
    10060         Introduced support for function.caller.
    10061        
    10062         Improved support for walking interesting scopes for function introspection.
    10063        
    10064         This fixes all remaining layout tests not blocked by rebasing to trunk.
    10065        
    10066         SunSpider reports no change.
    10067 
    10068         * VM/Machine.cpp:
    10069         (KJS::Machine::dumpRegisters): Fixed a spacing issue.
    10070 
    10071 2008-05-11  Cameron Zwarich  <[email protected]>
    10072 
    10073         Reviewed by Oliver.
    10074 
    10075         Bug 18961: SQUIRRELFISH: Gmail doesn't load
    10076         <https://bugs.webkit.org/show_bug.cgi?id=18961>
    10077 
    10078         Fix codegen for logical nodes so that they don't use their destination
    10079         as a temporary.
    10080 
    10081         * kjs/nodes.cpp:
    10082         (KJS::LogicalAndNode::emitCode):
    10083         (KJS::LogicalOrNode::emitCode):
    10084 
    10085 2008-05-10  Maciej Stachowiak  <[email protected]>
    10086 
    10087         Reviewed by Oliver.
    10088 
    10089         - JavaScriptCore part of fix for: "SQUIRRELFISH: function toString broken after calling"
    10090         https://bugs.webkit.org/show_bug.cgi?id=18869
    10091        
    10092         Three layout tests are fixed:
    10093           fast/js/toString-elision-trailing-comma.html
    10094           fast/js/toString-prefix-postfix-preserve-parens.html
    10095           fast/js/kde/lval-exceptions.html
    10096        
    10097         Functions now save a shared subrange of the original source used
    10098         to make them (so in the common case this adds no storage above the
    10099         memory cache).
    10100        
    10101         * kjs/SourceProvider.h: Added.
    10102         (KJS::SourceProvider): New abstract base class for classes that provide on-demand access
    10103         to the source for a JavaScript program. This allows function objects to have access to their
    10104         original source without copying.
    10105         (KJS::UStringSourceProvider): SourceProvider subclass backed by a KJS::UString.
    10106         (KJS::UStringSourceProvider::create):
    10107         (KJS::UStringSourceProvider::getRange):
    10108         (KJS::UStringSourceProvider::data):
    10109         (KJS::UStringSourceProvider::length):
    10110         (KJS::UStringSourceProvider::UStringSourceProvider):
    10111         * kjs/SourceRange.h: Added.
    10112         (KJS::SourceRange::SourceRange): Class that holds a SourceProvider and a character range into
    10113         the source, to encapsulate on-demand access to the source of a function.
    10114         (KJS::SourceRange::toString):
    10115         * VM/Machine.cpp:
    10116         (KJS::eval): Pass a UStringSourceProvider to the parser.
    10117         * kjs/Parser.cpp:
    10118         (KJS::Parser::parse): Take a SourceProvider and pass it on to the lexer.
    10119         * kjs/Parser.h:
    10120         (KJS::Parser::parse): Take a SourceProvider.
    10121         * kjs/lexer.cpp:
    10122         (KJS::Lexer::setCode): Take a SourceProvider; keep it around, and
    10123         use it to get the raw buffer and length.
    10124         * kjs/lexer.h:
    10125         (KJS::Lexer::sourceRange): Convenience function to get a source
    10126         range based on the lexer's source provieder, and char offsets
    10127         right before and after the desired range.
    10128         * kjs/function.cpp:
    10129         (KJS::globalFuncEval): Pass a UStringSourceProvider to the parser.
    10130         * kjs/function_object.cpp:
    10131         (KJS::functionProtoFuncToString): Use toSourceString to get the source.
    10132         (KJS::FunctionObjectImp::construct): Give the parser a UStringSourceProvider.
    10133         * kjs/grammar.y: When parsing a function declaration, function
    10134         expression, or getter or setter, tell the function body about its
    10135         SourceRange.
    10136         * kjs/interpreter.cpp:
    10137         (KJS::Interpreter::checkSyntax): Pass a SourceProvider to the parser.
    10138         (KJS::Interpreter::evaluate): Pass a SourceProvider to the parser.
    10139         * kjs/interpreter.h:
    10140         * kjs/nodes.h:
    10141         (KJS::FunctionBodyNode::setSource): Establish a SourceRange for this function.
    10142         (KJS::FunctionBodyNode::toSourceString): Get the source string out
    10143         of the SourceRange.
    10144         (KJS::FuncExprNode::): Take a SourceRange and set it on the body.
    10145         (KJS::FuncDeclNode::): ditto
    10146         * kjs/testkjs.cpp:
    10147         (prettyPrintScript): Use a SourceProvider appropriately.
    10148         * JavaScriptCore.exp: Export new symbols.
    10149         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add new files.
    10150         * JavaScriptCore.xcodeproj/project.pbxproj: Add new files.
    10151 
    10152 2008-05-09  Oliver Hunt  <[email protected]>
    10153 
    10154         Reviewed by Maciej.
    10155 
    10156         Bring back RegisterFile tainting in order to correctly handle
    10157         natively implemented getters and setters that re-enter JavaScript
    10158 
    10159         * VM/Machine.cpp:
    10160         (KJS::Machine::privateExecute):
    10161         * VM/RegisterFile.h:
    10162         * kjs/function.cpp:
    10163         (KJS::FunctionImp::callAsFunction):
    10164         * kjs/object.cpp:
    10165         (KJS::JSObject::put):
    10166         (KJS::tryGetAndCallProperty):
    10167         * kjs/property_slot.cpp:
    10168         (KJS::PropertySlot::functionGetter):
    10169 
    10170 2008-05-09  Maciej Stachowiak  <[email protected]>
    10171 
    10172         Reviewed by Oliver.
    10173        
    10174         - track character offsets of open and close braces, in preparation for saving function source
    10175        
    10176         I verified that there is no performance regression from this change.
    10177 
    10178         * kjs/grammar.y:
    10179         * kjs/lexer.cpp:
    10180         (KJS::Lexer::lex):
    10181         (KJS::Lexer::matchPunctuator):
    10182         * kjs/lexer.h:
    10183 
    10184 2008-05-09  Oliver Hunt  <[email protected]>
    10185 
    10186         Debug build fix
    10187 
    10188         * kjs/JSGlobalObject.cpp:
    10189         (KJS::JSGlobalObject::restoreLocalStorage):
    10190 
    10191 2008-05-09  Oliver Hunt  <[email protected]>
    10192 
    10193         Reviewed by Geoff.
    10194 
    10195         Build fixes for SquirrelFish on windows.
    10196 
    10197         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    10198         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
    10199         * VM/Register.h:
    10200         * kjs/JSGlobalObject.cpp:
    10201         (KJS::JSGlobalObject::restoreLocalStorage):
    10202         * kjs/collector.cpp:
    10203         (KJS::Collector::allocate):
    10204         (KJS::Collector::allocateNumber):
    10205         * kjs/collector.h:
    10206         (KJS::Collector::allocate):
    10207         (KJS::Collector::allocateNumber):
    10208         * kjs/property_slot.cpp:
    10209 
    10210 2008-05-08  Maciej Stachowiak  <[email protected]>
    10211 
    10212         Reviewed by Geoff.
    10213        
    10214         - fix activation tearoff in the case where functions are called with too many arguments
    10215        
    10216         Fixes:
    10217         fast/canvas/patternfill-repeat.html
    10218         fast/dom/SelectorAPI/bug-17313.html
    10219 
    10220         * VM/Machine.cpp:
    10221         (KJS::slideRegisterWindowForCall):
    10222         (KJS::scopeChainForCall):
    10223         (KJS::Machine::execute):
    10224         (KJS::Machine::privateExecute):
    10225 
    10226 2008-05-08  Geoffrey Garen  <[email protected]>
    10227 
    10228         Reviewed by Oliver Hunt.
    10229        
    10230         Fixed failure in fast/canvas/canvas-pattern-behaviour.html.
    10231        
    10232         SunSpider reports a small speedup. Not sure what that's about.
    10233 
    10234         * VM/CodeBlock.cpp:
    10235         (KJS::CodeBlock::dump): Fixed op_call_eval to dump as "op_call_eval".
    10236         This helped me while debugging.
    10237 
    10238         * VM/Machine.cpp:
    10239         (KJS::Machine::unwindCallFrame): When looking for an activation to tear
    10240         off, don't use the scope chain. Inside eval, the scope chain doesn't
    10241         belong to us; it belongs to our calling function.
    10242        
    10243         Also, don't use the needsFullScopeChain flag to decide whether to tear
    10244         off the activation. "function.arguments" can create an activation
    10245         for a function whose needsFullScopeChain flag is set to false.
    10246 
    10247 2008-05-08  Maciej Stachowiak  <[email protected]>
    10248 
    10249         Reviewed by Oliver.
    10250        
    10251         - fix function.call for calls of more than 8 arguments
    10252        
    10253         Fixes svg/carto.net/button.svg
    10254 
    10255         * kjs/list.cpp:
    10256         (KJS::List::getSlice): properly set up the m_buffer of the target list.
    10257 
    10258 2008-05-08  Maciej Stachowiak  <[email protected]>
    10259 
    10260         Reviewed by Oliver.
    10261        
    10262         - don't return a null RegisterID from RegExpNode in the exception case, since the caller may need a real register
    10263 
    10264         Fixes:
    10265         - fast/regex/early-acid3-86.html
    10266         - http/tests/misc/acid3.html
    10267        
    10268         * kjs/nodes.cpp:
    10269         (KJS::RegExpNode::emitCode):
    10270 
    10271 2008-05-07  Cameron Zwarich  <[email protected]>
    10272 
    10273         Reviewed by Oliver.
    10274 
    10275         Fix a performance regression caused by the introduction of property
    10276         attributes to SymbolTable in r32859 by encoding the attributes and the
    10277         register index into a single field of SymbolTableEntry.
    10278 
    10279         This leaves Node::optimizeVariableAccess() definitely broken, although
    10280         it was probably not entirely correct in SquirrelFish before this change.
    10281 
    10282         * VM/CodeBlock.h:
    10283         (KJS::missingThisObjectMarker):
    10284         * VM/CodeGenerator.cpp:
    10285         (KJS::CodeGenerator::addVar):
    10286         (KJS::CodeGenerator::CodeGenerator):
    10287         (KJS::CodeGenerator::registerForLocal):
    10288         (KJS::CodeGenerator::registerForLocalConstInit):
    10289         (KJS::CodeGenerator::isLocalConstant):
    10290         (KJS::CodeGenerator::addConstant):
    10291         (KJS::CodeGenerator::emitCall):
    10292         * VM/CodeGenerator.h:
    10293         (KJS::CodeGenerator::IdentifierMapIndexHashTraits::emptyValue):
    10294         * VM/Machine.cpp:
    10295         (KJS::Machine::privateExecute):
    10296         * kjs/JSGlobalObject.cpp:
    10297         (KJS::JSGlobalObject::saveLocalStorage):
    10298         * kjs/JSVariableObject.cpp:
    10299         (KJS::JSVariableObject::getPropertyNames):
    10300         (KJS::JSVariableObject::getPropertyAttributes):
    10301         * kjs/JSVariableObject.h:
    10302         (KJS::JSVariableObject::symbolTableGet):
    10303         (KJS::JSVariableObject::symbolTablePut):
    10304         (KJS::JSVariableObject::symbolTablePutWithAttributes):
    10305         * kjs/SymbolTable.h:
    10306         (KJS::SymbolTableEntry::SymbolTableEntry):
    10307         (KJS::SymbolTableEntry::isEmpty):
    10308         (KJS::SymbolTableEntry::getIndex):
    10309         (KJS::SymbolTableEntry::getAttributes):
    10310         (KJS::SymbolTableEntry::setAttributes):
    10311         (KJS::SymbolTableEntry::isReadOnly):
    10312         * kjs/nodes.cpp:
    10313         (KJS::getSymbolTableEntry):
    10314         (KJS::PostIncResolveNode::optimizeVariableAccess):
    10315         (KJS::PostDecResolveNode::optimizeVariableAccess):
    10316         (KJS::DeleteResolveNode::optimizeVariableAccess):
    10317         (KJS::TypeOfResolveNode::optimizeVariableAccess):
    10318         (KJS::PreIncResolveNode::optimizeVariableAccess):
    10319         (KJS::PreDecResolveNode::optimizeVariableAccess):
    10320         (KJS::ReadModifyResolveNode::optimizeVariableAccess):
    10321         (KJS::AssignResolveNode::optimizeVariableAccess):
    10322         (KJS::ProgramNode::initializeSymbolTable):
    10323 
    10324 2008-05-06  Maciej Stachowiak  <[email protected]>
    10325 
    10326         Rubber stamped by Oliver.
    10327        
    10328         - add missing ! in an assert that I failed to reverse
    10329 
    10330         * VM/CodeGenerator.cpp:
    10331         (KJS::CodeGenerator::CodeGenerator):
    10332 
    10333 2008-05-06  Maciej Stachowiak  <[email protected]>
    10334 
    10335         Reviewed by Oliver.
    10336        
    10337         - fixed "SQUIRRELFISH: window.this shows up as a property, but it shouldn't"
    10338         https://bugs.webkit.org/show_bug.cgi?id=18868
    10339        
    10340         The basic approach is to have "this" only be present in the symbol
    10341         table at compile time, not runtime.
    10342 
    10343         * VM/CodeGenerator.cpp:
    10344         (KJS::CodeGenerator::~CodeGenerator): Remove "this" from symbol table.
    10345         (KJS::CodeGenerator::CodeGenerator): Add "this" back when re-using
    10346         a symbol table.
    10347         * VM/CodeGenerator.h:
    10348         * VM/Machine.cpp:
    10349         (KJS::Machine::execute): Don't assert that "this" is in the symbol table.
    10350 
    10351 2008-05-06  Geoffrey Garen  <[email protected]>
    10352 
    10353         Reviewed by Oliver Hunt.
    10354        
    10355         Trivial support for function.arguments: Currently, we only support
    10356         function.arguments from within the scope of function.
    10357        
    10358         This fixes the remaining Mozilla JS test failures.
    10359        
    10360         SunSpider reports no change.
    10361 
    10362         * JavaScriptCore.exp:
    10363 
    10364         * VM/Machine.cpp:
    10365         (KJS::Machine::privateExecute): Separated scope chain deref from
    10366         activation register copying: since it is now possible for client code
    10367         to create an activation on behalf of a function that otherwise wouldn't
    10368         need one, having an activation no longer necessarily means that you need
    10369         to deref the scope chain.
    10370        
    10371         (KJS::Machine::getCallFrame): For now, this function only examines the
    10372         current scope. Walking parent scopes requires some refactoring in the
    10373         way we track execution stacks.
    10374 
    10375         * kjs/ExecState.cpp:
    10376         (KJS::ExecState::ExecState): We use a negative call frame offset to
    10377         indicate that a given scope is not a function call scope.
    10378        
    10379 2008-05-05  Oliver Hunt  <[email protected]>
    10380 
    10381         Reviewed by Geoff.
    10382 
    10383         Fix call frame set up for native -> JS function calls.
    10384 
    10385         * VM/Machine.cpp:
    10386         (KJS::Machine::execute):
    10387 
    10388 2008-05-05  Geoffrey Garen  <[email protected]>
    10389 
    10390         Reviewed by Maciej Stachowiak.
    10391        
    10392         Fixed ecma_3/Object/8.6.2.6-001.js, and similar bugs.
    10393        
    10394         SunSpider reports a .4% speedup. Not sure what that's about.
    10395 
    10396         * VM/Machine.cpp:
    10397         (KJS::Machine::privateExecute): Check for exception return from equal,
    10398         since toPrimitive can throw.
    10399 
    10400         * kjs/operations.cpp:
    10401         (KJS::strictEqual): In response to an error I made in an earlier version
    10402         of this patch, I changed strictEqual to make clear the fact that it
    10403         performs no conversions and can't throw, making it slightly more efficient
    10404         in the process.
    10405 
    10406 2008-05-05  Maciej Stachowiak  <[email protected]>
    10407 
    10408         Reviewed by Oliver.
    10409        
    10410         - fix some dumb mistakes in my last patch
    10411 
    10412         * VM/CodeGenerator.cpp:
    10413         (KJS::CodeGenerator::emitPushScope):
    10414         (KJS::CodeGenerator::emitGetPropertyNames):
    10415         * VM/Machine.cpp:
    10416         (KJS::Machine::privateExecute):
    10417 
    10418 2008-05-05  Maciej Stachowiak  <[email protected]>
    10419 
    10420         Reviewed by Oliver.
    10421        
    10422         - document opcodes relating to jumps, scopes, and property name iteration
    10423        
    10424         Documented jmp, jtrue, false, push_scope, pop_scope, get_pnames,
    10425         next_pname and jmp_scopes.
    10426 
    10427         * VM/CodeGenerator.cpp:
    10428         (KJS::CodeGenerator::emitJump):
    10429         (KJS::CodeGenerator::emitJumpIfTrue):
    10430         (KJS::CodeGenerator::emitJumpIfFalse):
    10431         (KJS::CodeGenerator::emitPushScope):
    10432         (KJS::CodeGenerator::emitNextPropertyName):
    10433         (KJS::CodeGenerator::emitGetPropertyNames):
    10434         * VM/CodeGenerator.h:
    10435         * VM/Machine.cpp:
    10436         (KJS::Machine::privateExecute):
    10437         * kjs/nodes.cpp:
    10438         (KJS::LogicalAndNode::emitCode):
    10439         (KJS::LogicalOrNode::emitCode):
    10440         (KJS::ConditionalNode::emitCode):
    10441         (KJS::IfNode::emitCode):
    10442         (KJS::IfElseNode::emitCode):
    10443         (KJS::DoWhileNode::emitCode):
    10444         (KJS::WhileNode::emitCode):
    10445         (KJS::ForNode::emitCode):
    10446         (KJS::ForInNode::emitCode):
    10447         (KJS::WithNode::emitCode):
    10448 
    10449 2008-05-05  Cameron Zwarich  <[email protected]>
    10450 
    10451         Reviewed by Oliver.
    10452 
    10453         Bug 18749: SQUIRRELFISH: const support is broken
    10454         <https://bugs.webkit.org/show_bug.cgi?id=18749>
    10455 
    10456         Adds support for const during code generation.
    10457 
    10458         Fixes 2 layout tests.
    10459 
    10460         * ChangeLog:
    10461         * VM/CodeGenerator.cpp:
    10462         (KJS::CodeGenerator::addVar):
    10463         (KJS::CodeGenerator::CodeGenerator):
    10464         (KJS::CodeGenerator::isLocalConstant):
    10465         * VM/CodeGenerator.h:
    10466         (KJS::CodeGenerator::addVar):
    10467         * kjs/nodes.cpp:
    10468         (KJS::PostIncResolveNode::emitCode):
    10469         (KJS::PostDecResolveNode::emitCode):
    10470         (KJS::PreIncResolveNode::emitCode):
    10471         (KJS::PreDecResolveNode::emitCode):
    10472         (KJS::ReadModifyResolveNode::emitCode):
    10473         (KJS::AssignResolveNode::emitCode):
    10474 
    10475 2008-05-04  Maciej Stachowiak  <[email protected]>
    10476 
    10477         Reviewed by Geoff.
    10478        
    10479         - document some more opcodes (and fix argument names)
    10480        
    10481         Added docs for eq, neq, stricteq, nstriceq, less and lesseq.
    10482 
    10483         * VM/CodeGenerator.cpp:
    10484         (KJS::CodeGenerator::emitEqual):
    10485         (KJS::CodeGenerator::emitNotEqual):
    10486         (KJS::CodeGenerator::emitStrictEqual):
    10487         (KJS::CodeGenerator::emitNotStrictEqual):
    10488         (KJS::CodeGenerator::emitLess):
    10489         (KJS::CodeGenerator::emitLessEq):
    10490         * VM/CodeGenerator.h:
    10491         * VM/Machine.cpp:
    10492         (KJS::Machine::privateExecute):
    10493         * kjs/nodes.cpp:
    10494         (KJS::LessNode::emitCode):
    10495         (KJS::GreaterNode::emitCode):
    10496         (KJS::LessEqNode::emitCode):
    10497         (KJS::GreaterEqNode::emitCode):
    10498         (KJS::EqualNode::emitCode):
    10499         (KJS::NotEqualNode::emitCode):
    10500         (KJS::StrictEqualNode::emitCode):
    10501         (KJS::NotStrictEqualNode::emitCode):
    10502         (KJS::CaseBlockNode::emitCodeForBlock):
    10503 
    10504 2008-05-04  Geoffrey Garen  <[email protected]>
    10505 
    10506         Reviewed by Maciej Stachowiak.
    10507 
    10508         More scaffolding for f.arguments.
    10509        
    10510         Track the offset of the last call frame in the ExecState, so we can
    10511         produce a backtrace at any time.
    10512        
    10513         Also, record numLocals, the sum of numVars + numParameters, in each code
    10514         block, to make updates to the ExecState a little cheaper than they
    10515         would be otherwise.
    10516        
    10517         We now use numLocals in a bunch of places where we used to calculate
    10518         numVars + numParameters or -numVars - numParameters.
    10519        
    10520         Reports are mixed, but all in all, this seems to be a wash on SunSpider.
    10521 
    10522 2008-05-04  Oliver Hunt  <[email protected]>
    10523 
    10524         Reviewed by Geoff.
    10525 
    10526         Whoops, correctly handle properties that don't exist in the
    10527         symbol table.
    10528 
    10529         * kjs/JSVariableObject.h:
    10530         (KJS::JSVariableObject::symbolTablePutWithAttributes):
    10531 
    10532 2008-05-04  Oliver Hunt  <[email protected]>
    10533 
    10534         Reviewed by Geoff.
    10535 
    10536         Add attribute information to SymbolTable as ground work for
    10537         various DontEnum and ReadOnly issues.
    10538 
    10539         * VM/CodeGenerator.cpp:
    10540         (KJS::CodeGenerator::addVar):
    10541         (KJS::CodeGenerator::CodeGenerator):
    10542         (KJS::CodeGenerator::registerForLocal):
    10543         (KJS::CodeGenerator::registerForLocalConstInit):
    10544         (KJS::CodeGenerator::addConstant):
    10545         * VM/Machine.cpp:
    10546         (KJS::Machine::execute):
    10547         * kjs/JSGlobalObject.cpp:
    10548         (KJS::JSGlobalObject::saveLocalStorage):
    10549         * kjs/JSVariableObject.cpp:
    10550         (KJS::JSVariableObject::getPropertyNames):
    10551         (KJS::JSVariableObject::getPropertyAttributes):
    10552         * kjs/JSVariableObject.h:
    10553         (KJS::JSVariableObject::symbolTablePut):
    10554         (KJS::JSVariableObject::symbolTablePutWithAttributes):
    10555         * kjs/SymbolTable.h:
    10556         (KJS::SymbolTableEntry::SymbolTableEntry):
    10557         (KJS::SymbolTableIndexHashTraits::emptyValue):
    10558         * kjs/nodes.cpp:
    10559         (KJS::getSymbolTableEntry):
    10560         (KJS::ReadModifyResolveNode::optimizeVariableAccess):
    10561         (KJS::AssignResolveNode::optimizeVariableAccess):
    10562         (KJS::ProgramNode::initializeSymbolTable):
    10563 
    10564 2008-05-04  Geoffrey Garen  <[email protected]>
    10565 
    10566         Reviewed by Oliver Hunt.
    10567        
    10568         More scaffolding for f.arguments.
    10569        
    10570         Store the register file associated with an ExecState in the ExecState.
    10571        
    10572         SunSpider reports no change.
    10573 
    10574         * kjs/JSGlobalObject.h:
    10575         (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Moved
    10576         registerFileStack above globalExec, so it gets initialized first.
    10577         Removed remnants of old activation scheme.
    10578 
    10579 2008-05-04  Maciej Stachowiak  <[email protected]>
    10580 
    10581         Rubber stamped by Oliver.
    10582        
    10583         - renamed a few opcodes and fixed assembly formatting to accomodate the longest opcode
    10584        
    10585         equal --> eq
    10586         nequal --> neq
    10587         resolve_base_and_property --> resolve_with_base
    10588         resolve_base_and_func --> resolve_func
    10589         get_prop_id --> get_by_id
    10590         put_prop_id --> put_by_id
    10591         delete_prop_id --> del_by_id
    10592         get_prop_val --> get_by_val
    10593         put_prop_val --> put_by_val
    10594         delete_prop_val --> del_by_val
    10595         put_prop_index --> put_by_index
    10596        
    10597         * VM/CodeBlock.cpp:
    10598         (KJS::printUnaryOp):
    10599         (KJS::printBinaryOp):
    10600         (KJS::printConditionalJump):
    10601         (KJS::CodeBlock::dump):
    10602         * VM/CodeGenerator.cpp:
    10603         (KJS::CodeGenerator::emitEqual):
    10604         (KJS::CodeGenerator::emitNotEqual):
    10605         (KJS::CodeGenerator::emitResolveWithBase):
    10606         (KJS::CodeGenerator::emitResolveFunction):
    10607         (KJS::CodeGenerator::emitGetById):
    10608         (KJS::CodeGenerator::emitPutById):
    10609         (KJS::CodeGenerator::emitDeleteById):
    10610         (KJS::CodeGenerator::emitGetByVal):
    10611         (KJS::CodeGenerator::emitPutByVal):
    10612         (KJS::CodeGenerator::emitDeleteByVal):
    10613         (KJS::CodeGenerator::emitPutByIndex):
    10614         * VM/CodeGenerator.h:
    10615         * VM/Machine.cpp:
    10616         (KJS::Machine::privateExecute):
    10617         * VM/Opcode.h:
    10618         * kjs/nodes.cpp:
    10619         (KJS::ArrayNode::emitCode):
    10620         (KJS::PropertyListNode::emitCode):
    10621         (KJS::BracketAccessorNode::emitCode):
    10622         (KJS::DotAccessorNode::emitCode):
    10623         (KJS::EvalFunctionCallNode::emitCode):
    10624         (KJS::FunctionCallResolveNode::emitCode):
    10625         (KJS::FunctionCallBracketNode::emitCode):
    10626         (KJS::FunctionCallDotNode::emitCode):
    10627         (KJS::PostIncResolveNode::emitCode):
    10628         (KJS::PostDecResolveNode::emitCode):
    10629         (KJS::PostIncBracketNode::emitCode):
    10630         (KJS::PostDecBracketNode::emitCode):
    10631         (KJS::PostIncDotNode::emitCode):
    10632         (KJS::PostDecDotNode::emitCode):
    10633         (KJS::DeleteResolveNode::emitCode):
    10634         (KJS::DeleteBracketNode::emitCode):
    10635         (KJS::DeleteDotNode::emitCode):
    10636         (KJS::TypeOfResolveNode::emitCode):
    10637         (KJS::PreIncResolveNode::emitCode):
    10638         (KJS::PreDecResolveNode::emitCode):
    10639         (KJS::PreIncBracketNode::emitCode):
    10640         (KJS::PreDecBracketNode::emitCode):
    10641         (KJS::PreIncDotNode::emitCode):
    10642         (KJS::PreDecDotNode::emitCode):
    10643         (KJS::ReadModifyResolveNode::emitCode):
    10644         (KJS::AssignResolveNode::emitCode):
    10645         (KJS::AssignDotNode::emitCode):
    10646         (KJS::ReadModifyDotNode::emitCode):
    10647         (KJS::AssignBracketNode::emitCode):
    10648         (KJS::ReadModifyBracketNode::emitCode):
    10649         (KJS::ConstDeclNode::emitCodeSingle):
    10650         (KJS::ForInNode::emitCode):
    10651         (KJS::TryNode::emitCode):
    10652 
    10653 2008-05-04  Oliver Hunt  <[email protected]>
    10654 
    10655         Reviewed by Maciej.
    10656 
    10657         Fix assertion when accessing arguments object with too many arguments provided
    10658 
    10659         The arguments constructor was assuming that the register offset given for argv
    10660         was an absolute offset into the registerfile, rather than the offset from the
    10661         frame.  This patches corrects that issue.
    10662 
    10663         * kjs/JSActivation.cpp:
    10664         (KJS::JSActivation::createArgumentsObject):
    10665 
    10666 2008-05-04  Geoffrey Garen  <[email protected]>
    10667 
    10668         Rubber stamped by Sam Weinig.
    10669        
    10670         Cleaned up Machine.cpp according to our style guidelines: moved static
    10671         data to the top of the file; moved stand-alone functions below that;
    10672         moved the Machine constructor above other Machine member functions.
    10673 
    10674 2008-05-03  Maciej Stachowiak  <[email protected]>
    10675 
    10676         Reviewed by Sam.
    10677        
    10678         - fix accidental breakage from last patch
    10679 
    10680         * VM/Machine.cpp:
    10681         (KJS::Machine::privateExecute):
    10682 
    10683 2008-05-03  Maciej Stachowiak  <[email protected]>
    10684 
    10685         Reviewed by Geoff.
    10686        
    10687         - a bunch more opcode documentation and corresponding parameter name fixes
    10688 
    10689         I renamed a few opcodes:
    10690        
    10691         type_of --> typeof (that's what the JS operator is named)
    10692         instance_of --> instanceof (ditto)
    10693         create_error --> new_error (for consistency with other new_* opcodes)
    10694        
    10695         I documented the following opcodes:
    10696        
    10697         - load
    10698         - new_object
    10699         - new_array
    10700         - new_regexp
    10701         - mov
    10702         - pre_inc
    10703         - pre_dec
    10704         - post_inc
    10705         - post_dec
    10706         - to_jsnumber
    10707         - negate
    10708         - bitnot
    10709         - not
    10710         - instanceof
    10711         - typeof
    10712         - in
    10713         - new_func
    10714         - new_funcexp
    10715         - new_error
    10716 
    10717         I also fixed formatting on some existing opcode docs.
    10718        
    10719         * VM/CodeBlock.cpp:
    10720         (KJS::CodeBlock::dump):
    10721         * VM/CodeGenerator.cpp:
    10722         (KJS::CodeGenerator::emitMove):
    10723         (KJS::CodeGenerator::emitNot):
    10724         (KJS::CodeGenerator::emitPreInc):
    10725         (KJS::CodeGenerator::emitPreDec):
    10726         (KJS::CodeGenerator::emitPostInc):
    10727         (KJS::CodeGenerator::emitPostDec):
    10728         (KJS::CodeGenerator::emitToJSNumber):
    10729         (KJS::CodeGenerator::emitNegate):
    10730         (KJS::CodeGenerator::emitBitNot):
    10731         (KJS::CodeGenerator::emitInstanceOf):
    10732         (KJS::CodeGenerator::emitTypeOf):
    10733         (KJS::CodeGenerator::emitIn):
    10734         (KJS::CodeGenerator::emitLoad):
    10735         (KJS::CodeGenerator::emitNewObject):
    10736         (KJS::CodeGenerator::emitNewArray):
    10737         (KJS::CodeGenerator::emitNewRegExp):
    10738         (KJS::CodeGenerator::emitNewError):
    10739         * VM/CodeGenerator.h:
    10740         (KJS::CodeGenerator::scopeDepth):
    10741         (KJS::CodeGenerator::addVar):
    10742         * VM/Machine.cpp:
    10743         (KJS::Machine::privateExecute):
    10744         * VM/Opcode.h:
    10745         * kjs/nodes.cpp:
    10746         (KJS::Node::emitThrowError):
    10747         (KJS::RegExpNode::emitCode):
    10748         (KJS::TypeOfValueNode::emitCode):
    10749         (KJS::UnaryPlusNode::emitCode):
    10750         (KJS::NegateNode::emitCode):
    10751         (KJS::BitwiseNotNode::emitCode):
    10752         (KJS::LogicalNotNode::emitCode):
    10753         (KJS::InstanceOfNode::emitCode):
    10754         (KJS::InNode::emitCode):
    10755 
    10756 2008-05-03  Maciej Stachowiak  <[email protected]>
    10757 
    10758         Reviewed by Geoff and Sam.
    10759        
    10760         - generate HTML bytecode docs at build time
    10761 
    10762         * DerivedSources.make:
    10763         * docs: Added.
    10764         * docs/make-bytecode-docs.pl: Added.
    10765 
    10766 2008-05-03  Geoffrey Garen  <[email protected]>
    10767 
    10768         Reviewed by Sam Weinig.
    10769        
    10770         Update ExecState::m_scopeChain when switching scope chains inside the
    10771         machine.
    10772        
    10773         This fixes uses of lexicalGlobalObject, such as, in a subframe
    10774 
    10775             alert(top.makeArray() instanceof Array ? "FAIL" : "PASS");
    10776        
    10777         and a bunch of the security failures listed in
    10778         https://bugs.webkit.org/show_bug.cgi?id=18870. (Those tests still fail,
    10779         seemingly because of regressions in exception messages).
    10780        
    10781         SunSpider reports no change.
    10782 
    10783         * VM/Machine.cpp: Factored out scope chain updating into a common
    10784         function that takes care to update ExecState::m_scopeChain, too.
    10785 
    10786         * kjs/ExecState.h: I made Machine a friend of ExecState so that Machine
    10787         could update ExecState::m_scopeChain, even though that value is
    10788         read-only for everyone else.
    10789 
    10790         * kjs/JSGlobalObject.h:
    10791         (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Changed
    10792         this client to be a little friendlier to ExecState's internal
    10793         storage type for scope chain data.
    10794 
    10795 2008-05-03  Geoffrey Garen  <[email protected]>
    10796 
    10797         Reviewed by Sam Weinig.
    10798        
    10799         Fixed https://bugs.webkit.org/show_bug.cgi?id=18876
    10800         Squirrelfish: ScopeChainNode leak in op_jmp_scopes.
    10801        
    10802         SunSpider reports no change.
    10803 
    10804         * VM/Machine.cpp:
    10805         (KJS::Machine::privateExecute): Don't construct a ScopeChain object,
    10806         since the direct threaded interpreter will goto across its destructor.
    10807 
    10808 2008-05-03  Geoffrey Garen  <[email protected]>
    10809 
    10810         Reviewed by Oliver Hunt.
    10811        
    10812         A bit more efficient fix than r32832: Don't copy globals into function
    10813         register files; instead, have the RegisterFileStack track only the base
    10814         of the last *global* register file, so the global object's register
    10815         references stay good.
    10816        
    10817         SunSpider reports a .3% speedup. Not sure what that's about.
    10818 
    10819 2008-05-03  Oliver Hunt  <[email protected]>
    10820 
    10821         Reviewed by Maciej.
    10822 
    10823         Bug 18864: SquirrelFish: Support getter and setter definition in object literals
    10824         <https://bugs.webkit.org/show_bug.cgi?id=18864>
    10825 
    10826         Add new opcodes to allow us to add getters and setters to an object.  These are
    10827         only used by the codegen for object literals.
    10828 
    10829         * VM/CodeGenerator.cpp:
    10830         (KJS::CodeGenerator::emitPutGetter):
    10831         (KJS::CodeGenerator::emitPutSetter):
    10832         * VM/CodeGenerator.h:
    10833         * VM/Machine.cpp:
    10834         (KJS::Machine::privateExecute):
    10835         * VM/Opcode.h:
    10836         * kjs/nodes.cpp:
    10837         (KJS::PropertyListNode::emitCode):
    10838 
    10839 2008-05-02  Maciej Stachowiak  <[email protected]>
    10840 
    10841         Reviewed by Oliver.
    10842        
    10843         - properly copy globals into and out of implicit call register
    10844         files, otherwise they will fail at global lookup
    10845 
    10846         Fixes fast/js/array-tostring-and-join.html layout test.
    10847        
    10848         * VM/RegisterFileStack.cpp:
    10849         (KJS::RegisterFileStack::pushGlobalRegisterFile):
    10850         (KJS::RegisterFileStack::popGlobalRegisterFile):
    10851         (KJS::RegisterFileStack::pushFunctionRegisterFile):
    10852         (KJS::RegisterFileStack::popFunctionRegisterFile):
    10853 
    10854 2008-05-02  Geoffrey Garen  <[email protected]>
    10855 
    10856         Reviewed by Oliver Hunt.
    10857        
    10858         Fixed https://bugs.webkit.org/show_bug.cgi?id=18822
    10859         SQUIRRELFISH: incorrect eval used in some cases
    10860        
    10861         Changed all code inside the machine to fetch the lexical global object
    10862         directly from the scope chain, instead of from the ExecState.
    10863        
    10864         Clients who fetch the lexical global object through the ExecState
    10865         still don't work.
    10866        
    10867         SunSpider reports no change.
    10868 
    10869         * VM/Machine.cpp:
    10870         (KJS::Machine::privateExecute): Fetch the lexical global object from
    10871         the scope chain.
    10872        
    10873         * kjs/ExecState.h:
    10874         (KJS::ExecState::ExecState::lexicalGlobalObject): Moved the logic for
    10875         this function into ScopeChainNode, but kept this function around to
    10876         support existing clients.
    10877 
    10878 2008-05-02  Geoffrey Garen  <[email protected]>
    10879 
    10880         Rubber stamped by Oliver Hunt.
    10881        
    10882         Removed ExecState.cpp from AllInOneFile.cpp, for a .2% speedup.
    10883 
    10884         * JavaScriptCore.xcodeproj/project.pbxproj:
    10885         * kjs/AllInOneFile.cpp:
    10886 
    10887 2008-05-01  Oliver Hunt  <[email protected]>
    10888 
    10889         Reviewed by Geoff and Maciej.
    10890 
    10891         Bug 18827: SquirrelFish: Prevent getters and setters from destroying the current RegisterFile
    10892         <https://bugs.webkit.org/show_bug.cgi?id=18827>
    10893 
    10894         Remove safe/unsafe RegisterFile concept, and instead just add additional
    10895         logic to ensure we always push/pop RegisterFiles when executing getters
    10896         and setters, similar to the logic for valueOf and toString.
    10897 
    10898         * VM/Machine.cpp:
    10899         (KJS::Machine::privateExecute):
    10900         * VM/RegisterFile.h:
    10901         * kjs/function.cpp:
    10902         (KJS::FunctionImp::callAsFunction):
    10903         * kjs/object.cpp:
    10904         (KJS::JSObject::put):
    10905         * kjs/property_slot.cpp:
    10906         (KJS::PropertySlot::functionGetter):
    10907 
    10908 2008-05-01  Oliver Hunt  <[email protected]>
    10909 
    10910         RS=Geoff
    10911 
    10912         Rename unsafeForReentry to safeForReentry to avoid double negatives.
    10913 
    10914         * VM/Machine.cpp:
    10915         (KJS::Machine::privateExecute):
    10916         * VM/RegisterFile.h:
    10917         * kjs/function.cpp:
    10918         (KJS::FunctionImp::callAsFunction):
    10919 
    10920 2008-05-01  Oliver Hunt  <[email protected]>
    10921 
    10922         Reviewed by Maciej.
    10923 
    10924         Bug 18827: SquirrelFish: Prevent getters and setters from destroying the current RegisterFile
    10925         <https://bugs.webkit.org/show_bug.cgi?id=18827>
    10926        
    10927         This patch makes getters and setters work.  It does this by
    10928         tracking whether the RegisterFile is "safe", that is whether
    10929         the interpreter is in a state that in which it can handle
    10930         the RegisterFile being reallocated.
    10931 
    10932         * VM/Machine.cpp:
    10933         (KJS::resolve):
    10934         (KJS::Machine::privateExecute):
    10935         * VM/RegisterFile.h:
    10936         * kjs/function.cpp:
    10937         (KJS::FunctionImp::callAsFunction):
    10938 
    10939 2008-04-30  Geoffrey Garen  <[email protected]>
    10940 
    10941         Release build fix: Always compile in "isGlobalObject", since it's
    10942         listed in our .exp file.
    10943 
    10944         * kjs/ExecState.cpp:
    10945         (KJS::ExecState::isGlobalObject):
    10946         * kjs/ExecState.h:
    10947 
    10948 2008-04-30  Oliver Hunt  <[email protected]>
    10949 
    10950         Reviewed by Maciej.
    10951 
    10952         Minor code restructuring to prepare for getters and setters,
    10953         also helps exception semantics a bit.
    10954 
    10955         * VM/Machine.cpp:
    10956         (KJS::Machine::privateExecute):
    10957 
    10958 2008-04-30  Geoffrey Garen  <[email protected]>
    10959 
    10960         Fixed tyop.
    10961 
    10962         * kjs/ExecState.h:
    10963 
    10964 2008-04-30  Geoffrey Garen  <[email protected]>
    10965 
    10966         Debug build fix: export a missing symbol.
    10967 
    10968         * JavaScriptCore.exp:
    10969 
    10970 2008-04-30  Geoffrey Garen  <[email protected]>
    10971 
    10972         Reviewed by Oliver Hunt.
    10973        
    10974         A little more ExecState refactoring: Now, only the global object creates
    10975         an ExecState.
    10976        
    10977         Also inlined ExecState::lexicalGlobalObject().
    10978        
    10979         SunSpider reports no change.
    10980 
    10981 2008-04-30  Geoffrey Garen  <[email protected]>
    10982 
    10983         WebCore build fix: forward-declare ScopeChain.
    10984 
    10985         * kjs/interpreter.h:
    10986 
    10987 2008-04-30  Geoffrey Garen  <[email protected]>
    10988 
    10989         Build fix for JavaScriptGlue: export a missing symbol.
    10990 
    10991         * JavaScriptCore.exp:
    10992 
    10993 2008-04-30  Geoffrey Garen  <[email protected]>
    10994 
    10995         Reviewed by Oliver Hunt.
    10996        
    10997         Removed a lot of unused bits from ExecState, moving them into
    10998         OldInterpreterExecState, the fake scaffolding class.
    10999        
    11000         The clutter was making it hard to see the forest from the trees.
    11001        
    11002         .4% SunSpider speedup, probably because ExecState::lexicalGlobalObject()
    11003         is faster now.
    11004 
    11005 2008-04-29  Oliver Hunt  <[email protected]>
    11006 
    11007         Reviewed by Maciej.
    11008 
    11009         Bug 18643: SQUIRRELFISH: need to support implicit function calls (valueOf, toString, getters/setters)
    11010         <https://bugs.webkit.org/show_bug.cgi?id=18643>
    11011 
    11012         Prevent static slot optimisation for new variables and functions in
    11013         globally re-entrant code called from an an implicit function call.
    11014 
    11015         This is necessary to prevent us from needing to resize the global
    11016         slot portion of the root RegisterFile during an implicit (and hence
    11017         unguarded) function call.
    11018 
    11019         * VM/CodeGenerator.cpp:
    11020         (KJS::CodeGenerator::CodeGenerator):
    11021         * VM/CodeGenerator.h:
    11022         * VM/Machine.cpp:
    11023         (KJS::Machine::execute):
    11024         * VM/RegisterFile.h:
    11025         * VM/RegisterFileStack.cpp:
    11026         (KJS::RegisterFileStack::pushGlobalRegisterFile):
    11027         (KJS::RegisterFileStack::popGlobalRegisterFile):
    11028         (KJS::RegisterFileStack::pushFunctionRegisterFile):
    11029         (KJS::RegisterFileStack::popFunctionRegisterFile):
    11030         * VM/RegisterFileStack.h:
    11031         (KJS::RegisterFileStack::inImplicitFunctionCall):
    11032         (KJS::RegisterFileStack::lastGlobal):
    11033         * kjs/nodes.cpp:
    11034         (KJS::ProgramNode::generateCode):
    11035         * kjs/nodes.h:
    11036         (KJS::ProgramNode::):
    11037 
    11038 2008-04-29  Geoffrey Garen  <[email protected]>
    11039 
    11040         Reviewed by Oliver Hunt.
    11041        
    11042         In nested program code, don't propogate "this" back to the parent
    11043         register file. ("this" should remain constant in the parent register
    11044         file, regardless of the scripts it invokes.)
    11045 
    11046         * VM/RegisterFile.cpp:
    11047         (KJS::RegisterFile::copyGlobals):
    11048 
    11049 2008-04-28  Oliver Hunt  <[email protected]>
    11050 
    11051         Reviewed by Geoff.
    11052 
    11053         Restore base pointer when popping a global RegisterFile
    11054 
    11055         * VM/RegisterFileStack.cpp:
    11056         (KJS::RegisterFileStack::popGlobalRegisterFile):
    11057 
    11058 2008-04-28  Oliver Hunt  <[email protected]>
    11059 
    11060         Reviewed by Geoff.
    11061 
    11062         Bug 18643: SQUIRRELFISH: need to support implicit function calls (valueOf, toString, getters/setters)
    11063         <https://bugs.webkit.org/show_bug.cgi?id=18643>
    11064 
    11065         Partial fix.  This results in all implicit calls to toString or valueOf
    11066         executing in a separate RegisterFile, so ensuring that the the pointers
    11067         in the triggering interpreter don't get trashed.  This still leaves the
    11068         task of preventing new global re-entry from toString and valueOf from
    11069         clobbering the RegisterFile.
    11070 
    11071         * VM/Machine.cpp:
    11072         (KJS::Machine::execute):
    11073         * VM/RegisterFileStack.cpp:
    11074         (KJS::RegisterFileStack::pushFunctionRegisterFile):
    11075         (KJS::RegisterFileStack::popFunctionRegisterFile):
    11076         * VM/RegisterFileStack.h:
    11077         * kjs/object.cpp:
    11078         (KJS::tryGetAndCallProperty):
    11079 
    11080 2008-04-28  Geoffrey Garen  <[email protected]>
    11081 
    11082         Reviewed by Maciej Stachowiak.
    11083        
    11084         Simplified activation object a bit: No need to store the callee
    11085         in the activation object -- we can pull it out of the call frame
    11086         when needed, instead.
    11087        
    11088         SunSpider reports no change.
    11089 
    11090 2008-04-28  Geoffrey Garen  <[email protected]>
    11091 
    11092         Reviewed by Maciej Stachowiak.
    11093        
    11094         RS by Oliver Hunt on moving JSArguments.cpp out of AllInOneFile.cpp.
    11095 
    11096         Substantially more handling of "arguments": "arguments" works fully
    11097         now, but "f.arguments" still doesn't work.
    11098 
    11099         Fixes 10 regression tests.
    11100        
    11101         SunSpider reports no regression.
    11102 
    11103         * kjs/JSActivation.cpp:
    11104         (KJS::JSActivation::createArgumentsObject): Reconstruct an arguments
    11105         List to pass to the arguments object constructor.
    11106 
    11107         * JavaScriptCore.xcodeproj/project.pbxproj:
    11108         * kjs/AllInOneFile.cpp: Removed JSActivation.cpp from AllInOneFile.cpp
    11109         because that seems to make GCC happy. (Previously, I had added
    11110         JSActivation.cpp to AllInOneFile.cpp because *that* seemed to make GCC
    11111         happy. So it goes.)
    11112 
    11113 2008-04-28  Geoffrey Garen  <[email protected]>
    11114 
    11115         Reviewed by Maciej Stachowiak.
    11116        
    11117         Groundwork for more handling of "arguments". I'm not checking in the
    11118         actual handling of "arguments" yet, because it still needs a little
    11119         fiddling to avoid a performance regression.
    11120        
    11121         SunSpider reports no change.
    11122 
    11123         * VM/Machine.cpp:
    11124         (KJS::initializeCallFrame): Put argc in the register file, so the
    11125         arguments object can find it later, to determine arguments.length.
    11126 
    11127         * kjs/nodes.h:
    11128         (KJS::FunctionBodyNode::): Added a special code accessor for when you
    11129         know the code has already been generated, and you don't have a scopeChain
    11130         to supply for potential code generation. (This is the case when the
    11131         activation object creates the arguments object.)
    11132 
    11133 2008-04-28  Oliver Hunt  <[email protected]>
    11134 
    11135         Reviewed by Geoff.
    11136 
    11137         Replace unsafe use of auto_ptr in Vector with manual memory
    11138         management.
    11139 
    11140         * VM/RegisterFileStack.cpp:
    11141         (KJS::RegisterFileStack::~RegisterFileStack):
    11142         (KJS::RegisterFileStack::popRegisterFile):
    11143         * VM/RegisterFileStack.h:
    11144 
    11145 2008-04-27  Cameron Zwarich  <[email protected]>
    11146 
    11147         Reviewed by Maciej.
    11148 
    11149         Bug 18746: SQUIRRELFISH: indirect eval used when direct eval should be used
    11150         <https://bugs.webkit.org/show_bug.cgi?id=18746>
    11151 
    11152         Change the base to the correct value of the 'this' object after the direct
    11153         eval test instead of before.
    11154 
    11155         Fixes 5 layout tests.
    11156 
    11157         * VM/Machine.cpp:
    11158         (KJS::Machine::privateExecute):
    11159         * kjs/nodes.cpp:
    11160         (KJS::EvalFunctionCallNode::emitCode):
    11161 
    11162 2008-04-26  Maciej Stachowiak  <[email protected]>
    11163 
    11164         Reviewed by Oliver.
    11165        
    11166         - document all property getting, setting and deleting opcodes
    11167        
    11168         (And fix function parameter names to match corresponding opcode parameter names.)
    11169 
    11170         * VM/CodeGenerator.cpp:
    11171         (KJS::CodeGenerator::emitResolve):
    11172         (KJS::CodeGenerator::emitResolveBase):
    11173         (KJS::CodeGenerator::emitResolveBaseAndProperty):
    11174         (KJS::CodeGenerator::emitResolveBaseAndFunc):
    11175         (KJS::CodeGenerator::emitGetPropId):
    11176         (KJS::CodeGenerator::emitPutPropId):
    11177         (KJS::CodeGenerator::emitDeletePropId):
    11178         (KJS::CodeGenerator::emitPutPropVal):
    11179         * VM/CodeGenerator.h:
    11180         * VM/Machine.cpp:
    11181         (KJS::resolve):
    11182         (KJS::resolveBase):
    11183         (KJS::resolveBaseAndProperty):
    11184         (KJS::resolveBaseAndFunc):
    11185         (KJS::Machine::privateExecute):
    11186         * kjs/nodes.cpp:
    11187         (KJS::ResolveNode::emitCode):
    11188         (KJS::ArrayNode::emitCode):
    11189         (KJS::PropertyListNode::emitCode):
    11190         (KJS::BracketAccessorNode::emitCode):
    11191         (KJS::EvalFunctionCallNode::emitCode):
    11192         (KJS::FunctionCallResolveNode::emitCode):
    11193         (KJS::FunctionCallBracketNode::emitCode):
    11194         (KJS::PostIncResolveNode::emitCode):
    11195         (KJS::PostDecResolveNode::emitCode):
    11196         (KJS::PostIncBracketNode::emitCode):
    11197         (KJS::PostDecBracketNode::emitCode):
    11198         (KJS::PostIncDotNode::emitCode):
    11199         (KJS::PostDecDotNode::emitCode):
    11200         (KJS::DeleteResolveNode::emitCode):
    11201         (KJS::TypeOfResolveNode::emitCode):
    11202         (KJS::PreIncResolveNode::emitCode):
    11203         (KJS::PreDecResolveNode::emitCode):
    11204         (KJS::PreIncBracketNode::emitCode):
    11205         (KJS::PreDecBracketNode::emitCode):
    11206         (KJS::AssignResolveNode::emitCode):
    11207         (KJS::AssignDotNode::emitCode):
    11208         (KJS::ReadModifyDotNode::emitCode):
    11209         (KJS::AssignBracketNode::emitCode):
    11210         (KJS::ReadModifyBracketNode::emitCode):
    11211         (KJS::ConstDeclNode::emitCodeSingle):
    11212 
    11213 2008-04-26  Oliver Hunt  <[email protected]>
    11214 
    11215         Reviewed by Maciej.
    11216 
    11217         Bug 18628: SQUIRRELFISH: need to support recursion limit
    11218         <https://bugs.webkit.org/show_bug.cgi?id=18628>
    11219 
    11220         Basically completes recursion limiting.  There is still some
    11221         tuning we may want to do to make things better in the face of
    11222         very bad code, but certainly nothing worse than anything already
    11223         possible in trunk.
    11224 
    11225         Also fixes a WebKit test by fixing the exception text :D
    11226 
    11227         * JavaScriptCore.exp:
    11228         * VM/ExceptionHelpers.cpp:
    11229         * VM/Machine.cpp:
    11230         (KJS::Machine::execute):
    11231         * VM/RegisterFile.cpp:
    11232         (KJS::RegisterFile::growBuffer):
    11233         (KJS::RegisterFile::addGlobalSlots):
    11234         * VM/RegisterFile.h:
    11235         (KJS::RegisterFile::grow):
    11236         (KJS::RegisterFile::uncheckedGrow):
    11237         * VM/RegisterFileStack.cpp:
    11238         (KJS::RegisterFileStack::pushRegisterFile):
    11239         * VM/RegisterFileStack.h:
    11240 
    11241 2008-04-25  Oliver Hunt  <[email protected]>
    11242 
    11243         Reviewed by Geoff.
    11244 
    11245         Bug 18628: SQUIRRELFISH: need to support recursion limit
    11246         <https://bugs.webkit.org/show_bug.cgi?id=18628>
    11247 
    11248         Put a limit on the level of reentry recursion.  128 levels of re-entrant recursion
    11249         seems reasonable as it is greater than the old eval limit, and a long way short of
    11250         the reentry depth needed to overflow the stack.
    11251 
    11252         * VM/Machine.cpp:
    11253         (KJS::Machine::execute):
    11254         * VM/Machine.h:
    11255 
    11256 2008-04-25  Geoffrey Garen  <[email protected]>
    11257 
    11258         Reviewed by Sam Weinig.
    11259        
    11260         A tiny bit of cleanup to the regexp code.
    11261        
    11262         Removed some static_cast.
    11263        
    11264         Removed createRegExpImp because it's no longer used.
    11265 
    11266 2008-04-25  Oliver Hunt  <[email protected]>
    11267 
    11268         Reviewed by Maciej.
    11269 
    11270         Bug 18736: SQUIRRELFISH: switch statements with no default have incorrect codegen
    11271         <https://bugs.webkit.org/show_bug.cgi?id=18736>
    11272 
    11273         Ensure the "default" target is correct in the absence of an explicit default handler.
    11274 
    11275         * kjs/nodes.cpp:
    11276         (KJS::CaseBlockNode::emitCodeForBlock):
    11277 
    11278 2008-04-25  Oliver Hunt  <[email protected]>
    11279 
    11280         Reviewed by Maciej.
    11281 
    11282         Bug 18628: SQUIRRELFISH: need to support recursion limit
    11283         <https://bugs.webkit.org/show_bug.cgi?id=18628>
    11284 
    11285         More bounds checking.
    11286 
    11287         * VM/Machine.cpp:
    11288         (KJS::Machine::execute):
    11289         * VM/RegisterFile.cpp:
    11290         (KJS::RegisterFile::growBuffer):
    11291         * VM/RegisterFile.h:
    11292 
    11293 2008-04-25  Maciej Stachowiak  <[email protected]>
    11294 
    11295         Reviewed by Oliver.
    11296        
    11297         - fix signal catching magic
    11298        
    11299         The signal handlers are restored to _exit but are only set when
    11300         running under run-javascriptcore-tests. fprintf from a signal
    11301         handler is not safe.
    11302 
    11303         * kjs/testkjs.cpp:
    11304         (main):
    11305         (parseArguments):
    11306         * tests/mozilla/jsDriver.pl:
    11307 
    11308 2008-04-25  Cameron Zwarich  <[email protected]>
    11309 
    11310         Reviewed by Maciej.
    11311 
    11312         Bug 18732: SQUIRRELFISH: exceptions thrown by native constructors are ignored
    11313         <https://bugs.webkit.org/show_bug.cgi?id=18732>
    11314 
    11315         Fixes another regression test.
    11316 
    11317         * VM/Machine.cpp:
    11318         (KJS::Machine::privateExecute):
    11319 
    11320 2008-04-25  Cameron Zwarich  <[email protected]>
    11321 
    11322         Reviewed by Maciej.
    11323 
    11324         Bug 18728: SQUIRRELFISH: invalid regular expression constants should throw exceptions
    11325         <https://bugs.webkit.org/show_bug.cgi?id=18728>
    11326 
    11327         Fixes another regression test.
    11328 
    11329         * kjs/nodes.cpp:
    11330         (KJS::RegExpNode::emitCode):
    11331 
    11332 2008-04-24  Cameron Zwarich  <[email protected]>
    11333 
    11334         Reviewed by Geoffrey Garen.
    11335 
    11336         Bug 18735: SQUIRRELFISH: closures are sometimes given an incorrect 'this' value when called
    11337         <https://bugs.webkit.org/show_bug.cgi?id=18735>
    11338 
    11339         The overloaded toThisObject method was not copied over to JSActivation.
    11340 
    11341         Fixes two regression tests.
    11342 
    11343         * kjs/JSActivation.cpp:
    11344         (KJS::JSActivation::toThisObject):
    11345         * kjs/JSActivation.h:
    11346 
    11347 2008-04-24  Geoffrey Garen  <[email protected]>
    11348 
    11349         Reviewed by Oliver Hunt.
    11350        
    11351         Added support for arguments.callee.
    11352 
    11353 2008-04-24  Oliver Hunt  <[email protected]>
    11354 
    11355         Reviewed by Maciej.
    11356 
    11357         Bug 18628: SQUIRRELFISH: need to support recursion limit
    11358         <https://bugs.webkit.org/show_bug.cgi?id=18628>
    11359 
    11360         Partial fix -- this gets us some of the required bounds checking, but not
    11361         complete coverage.  But it does manage to do them without regressing :D
    11362 
    11363         * VM/ExceptionHelpers.cpp:
    11364         (KJS::createError):
    11365         (KJS::createStackOverflowError):
    11366         * VM/ExceptionHelpers.h:
    11367         * VM/Machine.cpp:
    11368         (KJS::slideRegisterWindowForCall):
    11369         (KJS::Machine::execute):
    11370         (KJS::Machine::privateExecute):
    11371         * VM/RegisterFile.cpp:
    11372         * VM/RegisterFile.h:
    11373         (KJS::RegisterFile::):
    11374         (KJS::RegisterFile::RegisterFile):
    11375         (KJS::RegisterFile::grow):
    11376 
    11377 2008-04-24  Geoffrey Garen  <[email protected]>
    11378 
    11379         Reviewed by Oliver Hunt.
    11380        
    11381         A tiny bit more handling of "arguments": create a real, but mostly
    11382         hollow, arguments object.
    11383        
    11384         Fixes 2 regression tests.
    11385 
    11386 2008-04-24  Cameron Zwarich  <[email protected]>
    11387 
    11388         Reviewed by Oliver.
    11389 
    11390         Bug 18717: SQUIRRELFISH: eval returns the wrong value for a variable declaration statement
    11391         <https://bugs.webkit.org/show_bug.cgi?id=18717>
    11392 
    11393         Fixes a regression test, but exposes the failure of another due to the
    11394         lack of getters and setters.
    11395 
    11396         * kjs/nodes.cpp:
    11397         (KJS::ConstDeclNode::emitCodeSingle):
    11398         (KJS::ConstDeclNode::emitCode):
    11399         (KJS::ConstStatementNode::emitCode):
    11400         (KJS::VarStatementNode::emitCode):
    11401         * kjs/nodes.h:
    11402 
    11403 2008-04-24  Geoffrey Garen  <[email protected]>
    11404 
    11405         Reviewed by Sam Weinig.
    11406        
    11407         Print a CRASH statement when crashing, so test failures are not a
    11408         mystery.
    11409 
    11410         * kjs/testkjs.cpp:
    11411         (handleCrash):
    11412         (main):
    11413 
    11414 2008-04-24  Cameron Zwarich  <[email protected]>
    11415 
    11416         Reviewed by Geoffrey Garen.
    11417 
    11418         Bug 18716: SQUIRRELFISH: typeof should return undefined for an undefined variable reference
    11419         <https://bugs.webkit.org/show_bug.cgi?id=18716>
    11420 
    11421         This fixes 2 more regression tests.
    11422 
    11423         * kjs/nodes.cpp:
    11424         (KJS::TypeOfResolveNode::emitCode):
    11425 
    11426 2008-04-24  Geoffrey Garen  <[email protected]>
    11427 
    11428         Reviewed by Sam Weinig.
    11429        
    11430         Put the callee in the call frame.
    11431        
    11432         Necessary in order to support "arguments" and "arguments.callee".
    11433 
    11434         Also fixes a latent GC bug, where an executing function could be
    11435         subject to GC if the register holding it were overwritten. Here's
    11436         an example that would have caused problems:
    11437        
    11438         function f()
    11439         {
    11440             // Flood the machine stack to eliminate any old pointers to f.
    11441             g.call({});
    11442            
    11443             // Overwrite f in the register file.
    11444             f = 1;
    11445 
    11446             // Force a GC.
    11447             for (var i = 0; i < 5000; ++i) {
    11448                 ({});
    11449             }
    11450            
    11451             // Welcome to crash-ville.
    11452         }
    11453 
    11454         function g()
    11455         {
    11456         }
    11457 
    11458         f();
    11459 
    11460         * VM/Machine.h: Changed the order of arguments to
    11461         execute(FunctionBodyNode*...) to match the other execute functions.
    11462         * kjs/function.cpp: Updated to match new argument requirements from
    11463         execute(FunctionBodyNode*...). Renamed newObj to thisObj to match the
    11464         rest of JavaScriptCore.
    11465 
    11466         SunSpider reports no change.
    11467 
    11468 2008-04-23  Cameron Zwarich  <[email protected]>
    11469 
    11470         Reviewed by Maciej.
    11471 
    11472         Bug 18707: SQUIRRELFISH: eval always performs toString() on its argument
    11473         <https://bugs.webkit.org/show_bug.cgi?id=18707>
    11474 
    11475         This fixes 4 more regression tests.
    11476 
    11477         * VM/Machine.cpp:
    11478         (KJS::eval):
    11479 
    11480 2008-04-23  Maciej Stachowiak  <[email protected]>
    11481 
    11482         Reviewed by Oliver.
    11483        
    11484         - fix logic bug in SegmentedVector::grow which would sometimes fail to resize a segment when needed
    11485        
    11486         Fixes 3 JSC tests.
    11487 
    11488         * VM/SegmentedVector.h:
    11489         (KJS::SegmentedVector::grow):
    11490 
    11491 2008-04-23  Geoffrey Garen  <[email protected]>
    11492 
    11493         Reviewed by Maciej Stachowiak.
    11494        
    11495         Degenerate handling of "arguments" as a property of the activation
    11496         object. Currently, we just return a vanilla object.
    11497        
    11498         SunSpider reports no change.
    11499 
    11500         Fixes:
    11501 
    11502         ecma_3/Function/regress-94506.js.
    11503        
    11504         Reveals to have been secretly broken:
    11505 
    11506         ecma_3/Function/15.3.4.3-1.js
    11507         ecma_3/Function/15.3.4.4-1.js
    11508        
    11509         These tests were passing incorrectly. testkjs creates a global array
    11510         named "arguments" to hold command-line arguments. That array was
    11511         tricking these tests into thinking that an arguments object with length
    11512         0 had been created. Since our new vanilla object shadows the global
    11513         property named arguments, that object no longer fools these tests into
    11514         passing.
    11515        
    11516         Net change: +1 failing test.
    11517 
    11518         * kjs/AllInOneFile.cpp: Had to put JSActivation.cpp into AllInOneFile.cpp
    11519         to solve a surprising 8.6% regression in bitops-3bit-bits-in-byte.
    11520 
    11521 2008-04-23  Maciej Stachowiak  <[email protected]>
    11522 
    11523         Reviewed by Oliver.
    11524        
    11525         - save and restore callFrame
    11526 
    11527         * VM/Machine.cpp:
    11528         (KJS::slideRegisterWindowForCall):
    11529         (KJS::Machine::execute):
    11530         (KJS::Machine::privateExecute):
    11531         * kjs/testkjs.cpp:
    11532         (main):
    11533 
    11534 2008-04-23  Geoffrey Garen  <[email protected]>
    11535 
    11536         Reviewed by Maciej Stachowiak.
    11537        
    11538         Fixed scopes for named function expressions.
    11539        
    11540         Fixes one regression test.
    11541        
    11542         Two changes here:
    11543        
    11544         (1) The function's name is supposed to have attributes DontDelete,
    11545         ReadOnly, regardless of the type of code executing.
    11546        
    11547         (2) Push the name object on the function's scope chain, rather than
    11548         the ExecState's scope chain because, well, that's where it belongs.
    11549 
    11550 2008-04-23  Geoffrey Garen  <[email protected]>
    11551 
    11552         Reviewed by Oliver Hunt.
    11553        
    11554         Inlined JSObject::putDirect, for a .4% SunSpider speedup.
    11555        
    11556         I did this as a first step toward removing nodes.cpp from
    11557         AllInOneFile.cpp, but I'm putting that larger project aside for now.
    11558 
    11559 2008-04-23  Maciej Stachowiak  <[email protected]>
    11560 
    11561         Rubber stamped by Geoff.
    11562        
    11563         - add OldInterpreterExecState class and use it in dead code
    11564        
    11565         This will allow removing things from the real ExecState class
    11566         without having to figure out how to remove all this code without
    11567         getting a perf regression.
    11568 
    11569         * kjs/nodes.cpp:
    11570         (KJS::ExpressionNode::evaluateToNumber):
    11571         (KJS::ExpressionNode::evaluateToBoolean):
    11572         (KJS::ExpressionNode::evaluateToInt32):
    11573         (KJS::ExpressionNode::evaluateToUInt32):
    11574         (KJS::Node::setErrorCompletion):
    11575         (KJS::Node::throwError):
    11576         (KJS::Node::throwUndefinedVariableError):
    11577         (KJS::Node::handleException):
    11578         (KJS::Node::rethrowException):
    11579         (KJS::BreakpointCheckStatement::execute):
    11580         (KJS::BreakpointCheckStatement::optimizeVariableAccess):
    11581         (KJS::NullNode::evaluate):
    11582         (KJS::FalseNode::evaluate):
    11583         (KJS::TrueNode::evaluate):
    11584         (KJS::NumberNode::evaluate):
    11585         (KJS::NumberNode::evaluateToNumber):
    11586         (KJS::NumberNode::evaluateToBoolean):
    11587         (KJS::NumberNode::evaluateToInt32):
    11588         (KJS::NumberNode::evaluateToUInt32):
    11589         (KJS::ImmediateNumberNode::evaluate):
    11590         (KJS::ImmediateNumberNode::evaluateToInt32):
    11591         (KJS::ImmediateNumberNode::evaluateToUInt32):
    11592         (KJS::StringNode::evaluate):
    11593         (KJS::StringNode::evaluateToNumber):
    11594         (KJS::StringNode::evaluateToBoolean):
    11595         (KJS::RegExpNode::evaluate):
    11596         (KJS::ThisNode::evaluate):
    11597         (KJS::ResolveNode::inlineEvaluate):
    11598         (KJS::ResolveNode::evaluate):
    11599         (KJS::ResolveNode::evaluateToNumber):
    11600         (KJS::ResolveNode::evaluateToBoolean):
    11601         (KJS::ResolveNode::evaluateToInt32):
    11602         (KJS::ResolveNode::evaluateToUInt32):
    11603         (KJS::getSymbolTableEntry):
    11604         (KJS::ResolveNode::optimizeVariableAccess):
    11605         (KJS::LocalVarAccessNode::inlineEvaluate):
    11606         (KJS::LocalVarAccessNode::evaluate):
    11607         (KJS::LocalVarAccessNode::evaluateToNumber):
    11608         (KJS::LocalVarAccessNode::evaluateToBoolean):
    11609         (KJS::LocalVarAccessNode::evaluateToInt32):
    11610         (KJS::LocalVarAccessNode::evaluateToUInt32):
    11611         (KJS::getNonLocalSymbol):
    11612         (KJS::ScopedVarAccessNode::inlineEvaluate):
    11613         (KJS::ScopedVarAccessNode::evaluate):
    11614         (KJS::ScopedVarAccessNode::evaluateToNumber):
    11615         (KJS::ScopedVarAccessNode::evaluateToBoolean):
    11616         (KJS::ScopedVarAccessNode::evaluateToInt32):
    11617         (KJS::ScopedVarAccessNode::evaluateToUInt32):
    11618         (KJS::NonLocalVarAccessNode::inlineEvaluate):
    11619         (KJS::NonLocalVarAccessNode::evaluate):
    11620         (KJS::NonLocalVarAccessNode::evaluateToNumber):
    11621         (KJS::NonLocalVarAccessNode::evaluateToBoolean):
    11622         (KJS::NonLocalVarAccessNode::evaluateToInt32):
    11623         (KJS::NonLocalVarAccessNode::evaluateToUInt32):
    11624         (KJS::ElementNode::optimizeVariableAccess):
    11625         (KJS::ElementNode::evaluate):
    11626         (KJS::ArrayNode::optimizeVariableAccess):
    11627         (KJS::ArrayNode::evaluate):
    11628         (KJS::ObjectLiteralNode::optimizeVariableAccess):
    11629         (KJS::ObjectLiteralNode::evaluate):
    11630         (KJS::PropertyListNode::optimizeVariableAccess):
    11631         (KJS::PropertyListNode::evaluate):
    11632         (KJS::PropertyNode::optimizeVariableAccess):
    11633         (KJS::PropertyNode::evaluate):
    11634         (KJS::BracketAccessorNode::optimizeVariableAccess):
    11635         (KJS::BracketAccessorNode::inlineEvaluate):
    11636         (KJS::BracketAccessorNode::evaluate):
    11637         (KJS::BracketAccessorNode::evaluateToNumber):
    11638         (KJS::BracketAccessorNode::evaluateToBoolean):
    11639         (KJS::BracketAccessorNode::evaluateToInt32):
    11640         (KJS::BracketAccessorNode::evaluateToUInt32):
    11641         (KJS::DotAccessorNode::optimizeVariableAccess):
    11642         (KJS::DotAccessorNode::inlineEvaluate):
    11643         (KJS::DotAccessorNode::evaluate):
    11644         (KJS::DotAccessorNode::evaluateToNumber):
    11645         (KJS::DotAccessorNode::evaluateToBoolean):
    11646         (KJS::DotAccessorNode::evaluateToInt32):
    11647         (KJS::DotAccessorNode::evaluateToUInt32):
    11648         (KJS::ArgumentListNode::optimizeVariableAccess):
    11649         (KJS::ArgumentListNode::evaluateList):
    11650         (KJS::ArgumentsNode::optimizeVariableAccess):
    11651         (KJS::NewExprNode::optimizeVariableAccess):
    11652         (KJS::NewExprNode::inlineEvaluate):
    11653         (KJS::NewExprNode::evaluate):
    11654         (KJS::NewExprNode::evaluateToNumber):
    11655         (KJS::NewExprNode::evaluateToBoolean):
    11656         (KJS::NewExprNode::evaluateToInt32):
    11657         (KJS::NewExprNode::evaluateToUInt32):
    11658         (KJS::ExpressionNode::resolveAndCall):
    11659         (KJS::EvalFunctionCallNode::optimizeVariableAccess):
    11660         (KJS::EvalFunctionCallNode::evaluate):
    11661         (KJS::FunctionCallValueNode::optimizeVariableAccess):
    11662         (KJS::FunctionCallValueNode::evaluate):
    11663         (KJS::FunctionCallResolveNode::optimizeVariableAccess):
    11664         (KJS::FunctionCallResolveNode::inlineEvaluate):
    11665         (KJS::FunctionCallResolveNode::evaluate):
    11666         (KJS::FunctionCallResolveNode::evaluateToNumber):
    11667         (KJS::FunctionCallResolveNode::evaluateToBoolean):
    11668         (KJS::FunctionCallResolveNode::evaluateToInt32):
    11669         (KJS::FunctionCallResolveNode::evaluateToUInt32):
    11670         (KJS::LocalVarFunctionCallNode::inlineEvaluate):
    11671         (KJS::LocalVarFunctionCallNode::evaluate):
    11672         (KJS::LocalVarFunctionCallNode::evaluateToNumber):
    11673         (KJS::LocalVarFunctionCallNode::evaluateToBoolean):
    11674         (KJS::LocalVarFunctionCallNode::evaluateToInt32):
    11675         (KJS::LocalVarFunctionCallNode::evaluateToUInt32):
    11676         (KJS::ScopedVarFunctionCallNode::inlineEvaluate):
    11677         (KJS::ScopedVarFunctionCallNode::evaluate):
    11678         (KJS::ScopedVarFunctionCallNode::evaluateToNumber):
    11679         (KJS::ScopedVarFunctionCallNode::evaluateToBoolean):
    11680         (KJS::ScopedVarFunctionCallNode::evaluateToInt32):
    11681         (KJS::ScopedVarFunctionCallNode::evaluateToUInt32):
    11682         (KJS::NonLocalVarFunctionCallNode::inlineEvaluate):
    11683         (KJS::NonLocalVarFunctionCallNode::evaluate):
    11684         (KJS::NonLocalVarFunctionCallNode::evaluateToNumber):
    11685         (KJS::NonLocalVarFunctionCallNode::evaluateToBoolean):
    11686         (KJS::NonLocalVarFunctionCallNode::evaluateToInt32):
    11687         (KJS::NonLocalVarFunctionCallNode::evaluateToUInt32):
    11688         (KJS::FunctionCallBracketNode::optimizeVariableAccess):
    11689         (KJS::FunctionCallBracketNode::evaluate):
    11690         (KJS::FunctionCallDotNode::optimizeVariableAccess):
    11691         (KJS::FunctionCallDotNode::inlineEvaluate):
    11692         (KJS::FunctionCallDotNode::evaluate):
    11693         (KJS::FunctionCallDotNode::evaluateToNumber):
    11694         (KJS::FunctionCallDotNode::evaluateToBoolean):
    11695         (KJS::FunctionCallDotNode::evaluateToInt32):
    11696         (KJS::FunctionCallDotNode::evaluateToUInt32):
    11697         (KJS::PostIncResolveNode::optimizeVariableAccess):
    11698         (KJS::PostIncResolveNode::evaluate):
    11699         (KJS::PostIncLocalVarNode::evaluate):
    11700         (KJS::PostDecResolveNode::optimizeVariableAccess):
    11701         (KJS::PostDecResolveNode::evaluate):
    11702         (KJS::PostDecLocalVarNode::evaluate):
    11703         (KJS::PostDecLocalVarNode::inlineEvaluateToNumber):
    11704         (KJS::PostDecLocalVarNode::evaluateToNumber):
    11705         (KJS::PostDecLocalVarNode::evaluateToBoolean):
    11706         (KJS::PostDecLocalVarNode::evaluateToInt32):
    11707         (KJS::PostDecLocalVarNode::evaluateToUInt32):
    11708         (KJS::PostfixBracketNode::optimizeVariableAccess):
    11709         (KJS::PostIncBracketNode::evaluate):
    11710         (KJS::PostDecBracketNode::evaluate):
    11711         (KJS::PostfixDotNode::optimizeVariableAccess):
    11712         (KJS::PostIncDotNode::evaluate):
    11713         (KJS::PostDecDotNode::evaluate):
    11714         (KJS::PostfixErrorNode::evaluate):
    11715         (KJS::DeleteResolveNode::optimizeVariableAccess):
    11716         (KJS::DeleteResolveNode::evaluate):
    11717         (KJS::LocalVarDeleteNode::evaluate):
    11718         (KJS::DeleteBracketNode::optimizeVariableAccess):
    11719         (KJS::DeleteBracketNode::evaluate):
    11720         (KJS::DeleteDotNode::optimizeVariableAccess):
    11721         (KJS::DeleteDotNode::evaluate):
    11722         (KJS::DeleteValueNode::optimizeVariableAccess):
    11723         (KJS::DeleteValueNode::evaluate):
    11724         (KJS::VoidNode::optimizeVariableAccess):
    11725         (KJS::VoidNode::evaluate):
    11726         (KJS::TypeOfValueNode::optimizeVariableAccess):
    11727         (KJS::TypeOfResolveNode::optimizeVariableAccess):
    11728         (KJS::LocalVarTypeOfNode::evaluate):
    11729         (KJS::TypeOfResolveNode::evaluate):
    11730         (KJS::TypeOfValueNode::evaluate):
    11731         (KJS::PreIncResolveNode::optimizeVariableAccess):
    11732         (KJS::PreIncLocalVarNode::evaluate):
    11733         (KJS::PreIncResolveNode::evaluate):
    11734         (KJS::PreDecResolveNode::optimizeVariableAccess):
    11735         (KJS::PreDecLocalVarNode::evaluate):
    11736         (KJS::PreDecResolveNode::evaluate):
    11737         (KJS::PreIncConstNode::evaluate):
    11738         (KJS::PreDecConstNode::evaluate):
    11739         (KJS::PostIncConstNode::evaluate):
    11740         (KJS::PostDecConstNode::evaluate):
    11741         (KJS::PrefixBracketNode::optimizeVariableAccess):
    11742         (KJS::PreIncBracketNode::evaluate):
    11743         (KJS::PreDecBracketNode::evaluate):
    11744         (KJS::PrefixDotNode::optimizeVariableAccess):
    11745         (KJS::PreIncDotNode::evaluate):
    11746         (KJS::PreDecDotNode::evaluate):
    11747         (KJS::PrefixErrorNode::evaluate):
    11748         (KJS::UnaryPlusNode::optimizeVariableAccess):
    11749         (KJS::UnaryPlusNode::evaluate):
    11750         (KJS::UnaryPlusNode::evaluateToBoolean):
    11751         (KJS::UnaryPlusNode::evaluateToNumber):
    11752         (KJS::UnaryPlusNode::evaluateToInt32):
    11753         (KJS::UnaryPlusNode::evaluateToUInt32):
    11754         (KJS::NegateNode::optimizeVariableAccess):
    11755         (KJS::NegateNode::evaluate):
    11756         (KJS::NegateNode::evaluateToNumber):
    11757         (KJS::BitwiseNotNode::optimizeVariableAccess):
    11758         (KJS::BitwiseNotNode::inlineEvaluateToInt32):
    11759         (KJS::BitwiseNotNode::evaluate):
    11760         (KJS::BitwiseNotNode::evaluateToNumber):
    11761         (KJS::BitwiseNotNode::evaluateToBoolean):
    11762         (KJS::BitwiseNotNode::evaluateToInt32):
    11763         (KJS::BitwiseNotNode::evaluateToUInt32):
    11764         (KJS::LogicalNotNode::optimizeVariableAccess):
    11765         (KJS::LogicalNotNode::evaluate):
    11766         (KJS::LogicalNotNode::evaluateToBoolean):
    11767         (KJS::MultNode::optimizeVariableAccess):
    11768         (KJS::MultNode::inlineEvaluateToNumber):
    11769         (KJS::MultNode::evaluate):
    11770         (KJS::MultNode::evaluateToNumber):
    11771         (KJS::MultNode::evaluateToBoolean):
    11772         (KJS::MultNode::evaluateToInt32):
    11773         (KJS::MultNode::evaluateToUInt32):
    11774         (KJS::DivNode::optimizeVariableAccess):
    11775         (KJS::DivNode::inlineEvaluateToNumber):
    11776         (KJS::DivNode::evaluate):
    11777         (KJS::DivNode::evaluateToNumber):
    11778         (KJS::DivNode::evaluateToInt32):
    11779         (KJS::DivNode::evaluateToUInt32):
    11780         (KJS::ModNode::optimizeVariableAccess):
    11781         (KJS::ModNode::inlineEvaluateToNumber):
    11782         (KJS::ModNode::evaluate):
    11783         (KJS::ModNode::evaluateToNumber):
    11784         (KJS::ModNode::evaluateToBoolean):
    11785         (KJS::ModNode::evaluateToInt32):
    11786         (KJS::ModNode::evaluateToUInt32):
    11787         (KJS::throwOutOfMemoryErrorToNumber):
    11788         (KJS::addSlowCase):
    11789         (KJS::addSlowCaseToNumber):
    11790         (KJS::add):
    11791         (KJS::addToNumber):
    11792         (KJS::AddNode::optimizeVariableAccess):
    11793         (KJS::AddNode::evaluate):
    11794         (KJS::AddNode::inlineEvaluateToNumber):
    11795         (KJS::AddNode::evaluateToNumber):
    11796         (KJS::AddNode::evaluateToInt32):
    11797         (KJS::AddNode::evaluateToUInt32):
    11798         (KJS::AddNumbersNode::inlineEvaluateToNumber):
    11799         (KJS::AddNumbersNode::evaluate):
    11800         (KJS::AddNumbersNode::evaluateToNumber):
    11801         (KJS::AddNumbersNode::evaluateToInt32):
    11802         (KJS::AddNumbersNode::evaluateToUInt32):
    11803         (KJS::AddStringsNode::evaluate):
    11804         (KJS::AddStringLeftNode::evaluate):
    11805         (KJS::AddStringRightNode::evaluate):
    11806         (KJS::SubNode::optimizeVariableAccess):
    11807         (KJS::SubNode::inlineEvaluateToNumber):
    11808         (KJS::SubNode::evaluate):
    11809         (KJS::SubNode::evaluateToNumber):
    11810         (KJS::SubNode::evaluateToInt32):
    11811         (KJS::SubNode::evaluateToUInt32):
    11812         (KJS::LeftShiftNode::optimizeVariableAccess):
    11813         (KJS::LeftShiftNode::inlineEvaluateToInt32):
    11814         (KJS::LeftShiftNode::evaluate):
    11815         (KJS::LeftShiftNode::evaluateToNumber):
    11816         (KJS::LeftShiftNode::evaluateToInt32):
    11817         (KJS::LeftShiftNode::evaluateToUInt32):
    11818         (KJS::RightShiftNode::optimizeVariableAccess):
    11819         (KJS::RightShiftNode::inlineEvaluateToInt32):
    11820         (KJS::RightShiftNode::evaluate):
    11821         (KJS::RightShiftNode::evaluateToNumber):
    11822         (KJS::RightShiftNode::evaluateToInt32):
    11823         (KJS::RightShiftNode::evaluateToUInt32):
    11824         (KJS::UnsignedRightShiftNode::optimizeVariableAccess):
    11825         (KJS::UnsignedRightShiftNode::inlineEvaluateToUInt32):
    11826         (KJS::UnsignedRightShiftNode::evaluate):
    11827         (KJS::UnsignedRightShiftNode::evaluateToNumber):
    11828         (KJS::UnsignedRightShiftNode::evaluateToInt32):
    11829         (KJS::UnsignedRightShiftNode::evaluateToUInt32):
    11830         (KJS::lessThan):
    11831         (KJS::lessThanEq):
    11832         (KJS::LessNode::optimizeVariableAccess):
    11833         (KJS::LessNode::inlineEvaluateToBoolean):
    11834         (KJS::LessNode::evaluate):
    11835         (KJS::LessNode::evaluateToBoolean):
    11836         (KJS::LessNumbersNode::inlineEvaluateToBoolean):
    11837         (KJS::LessNumbersNode::evaluate):
    11838         (KJS::LessNumbersNode::evaluateToBoolean):
    11839         (KJS::LessStringsNode::inlineEvaluateToBoolean):
    11840         (KJS::LessStringsNode::evaluate):
    11841         (KJS::LessStringsNode::evaluateToBoolean):
    11842         (KJS::GreaterNode::optimizeVariableAccess):
    11843         (KJS::GreaterNode::inlineEvaluateToBoolean):
    11844         (KJS::GreaterNode::evaluate):
    11845         (KJS::GreaterNode::evaluateToBoolean):
    11846         (KJS::LessEqNode::optimizeVariableAccess):
    11847         (KJS::LessEqNode::inlineEvaluateToBoolean):
    11848         (KJS::LessEqNode::evaluate):
    11849         (KJS::LessEqNode::evaluateToBoolean):
    11850         (KJS::GreaterEqNode::optimizeVariableAccess):
    11851         (KJS::GreaterEqNode::inlineEvaluateToBoolean):
    11852         (KJS::GreaterEqNode::evaluate):
    11853         (KJS::GreaterEqNode::evaluateToBoolean):
    11854         (KJS::InstanceOfNode::optimizeVariableAccess):
    11855         (KJS::InstanceOfNode::evaluate):
    11856         (KJS::InstanceOfNode::evaluateToBoolean):
    11857         (KJS::InNode::optimizeVariableAccess):
    11858         (KJS::InNode::evaluate):
    11859         (KJS::InNode::evaluateToBoolean):
    11860         (KJS::EqualNode::optimizeVariableAccess):
    11861         (KJS::EqualNode::inlineEvaluateToBoolean):
    11862         (KJS::EqualNode::evaluate):
    11863         (KJS::EqualNode::evaluateToBoolean):
    11864         (KJS::NotEqualNode::optimizeVariableAccess):
    11865         (KJS::NotEqualNode::inlineEvaluateToBoolean):
    11866         (KJS::NotEqualNode::evaluate):
    11867         (KJS::NotEqualNode::evaluateToBoolean):
    11868         (KJS::StrictEqualNode::optimizeVariableAccess):
    11869         (KJS::StrictEqualNode::inlineEvaluateToBoolean):
    11870         (KJS::StrictEqualNode::evaluate):
    11871         (KJS::StrictEqualNode::evaluateToBoolean):
    11872         (KJS::NotStrictEqualNode::optimizeVariableAccess):
    11873         (KJS::NotStrictEqualNode::inlineEvaluateToBoolean):
    11874         (KJS::NotStrictEqualNode::evaluate):
    11875         (KJS::NotStrictEqualNode::evaluateToBoolean):
    11876         (KJS::BitAndNode::optimizeVariableAccess):
    11877         (KJS::BitAndNode::evaluate):
    11878         (KJS::BitAndNode::inlineEvaluateToInt32):
    11879         (KJS::BitAndNode::evaluateToNumber):
    11880         (KJS::BitAndNode::evaluateToBoolean):
    11881         (KJS::BitAndNode::evaluateToInt32):
    11882         (KJS::BitAndNode::evaluateToUInt32):
    11883         (KJS::BitXOrNode::optimizeVariableAccess):
    11884         (KJS::BitXOrNode::inlineEvaluateToInt32):
    11885         (KJS::BitXOrNode::evaluate):
    11886         (KJS::BitXOrNode::evaluateToNumber):
    11887         (KJS::BitXOrNode::evaluateToBoolean):
    11888         (KJS::BitXOrNode::evaluateToInt32):
    11889         (KJS::BitXOrNode::evaluateToUInt32):
    11890         (KJS::BitOrNode::optimizeVariableAccess):
    11891         (KJS::BitOrNode::inlineEvaluateToInt32):
    11892         (KJS::BitOrNode::evaluate):
    11893         (KJS::BitOrNode::evaluateToNumber):
    11894         (KJS::BitOrNode::evaluateToBoolean):
    11895         (KJS::BitOrNode::evaluateToInt32):
    11896         (KJS::BitOrNode::evaluateToUInt32):
    11897         (KJS::LogicalAndNode::optimizeVariableAccess):
    11898         (KJS::LogicalAndNode::evaluate):
    11899         (KJS::LogicalAndNode::evaluateToBoolean):
    11900         (KJS::LogicalOrNode::optimizeVariableAccess):
    11901         (KJS::LogicalOrNode::evaluate):
    11902         (KJS::LogicalOrNode::evaluateToBoolean):
    11903         (KJS::ConditionalNode::optimizeVariableAccess):
    11904         (KJS::ConditionalNode::evaluate):
    11905         (KJS::ConditionalNode::evaluateToBoolean):
    11906         (KJS::ConditionalNode::evaluateToNumber):
    11907         (KJS::ConditionalNode::evaluateToInt32):
    11908         (KJS::ConditionalNode::evaluateToUInt32):
    11909         (KJS::valueForReadModifyAssignment):
    11910         (KJS::ReadModifyResolveNode::optimizeVariableAccess):
    11911         (KJS::AssignResolveNode::optimizeVariableAccess):
    11912         (KJS::ReadModifyLocalVarNode::evaluate):
    11913         (KJS::AssignLocalVarNode::evaluate):
    11914         (KJS::ReadModifyConstNode::evaluate):
    11915         (KJS::AssignConstNode::evaluate):
    11916         (KJS::ReadModifyResolveNode::evaluate):
    11917         (KJS::AssignResolveNode::evaluate):
    11918         (KJS::AssignDotNode::optimizeVariableAccess):
    11919         (KJS::AssignDotNode::evaluate):
    11920         (KJS::ReadModifyDotNode::optimizeVariableAccess):
    11921         (KJS::ReadModifyDotNode::evaluate):
    11922         (KJS::AssignErrorNode::evaluate):
    11923         (KJS::AssignBracketNode::optimizeVariableAccess):
    11924         (KJS::AssignBracketNode::evaluate):
    11925         (KJS::ReadModifyBracketNode::optimizeVariableAccess):
    11926         (KJS::ReadModifyBracketNode::evaluate):
    11927         (KJS::CommaNode::optimizeVariableAccess):
    11928         (KJS::CommaNode::evaluate):
    11929         (KJS::ConstDeclNode::optimizeVariableAccess):
    11930         (KJS::ConstDeclNode::handleSlowCase):
    11931         (KJS::ConstDeclNode::evaluateSingle):
    11932         (KJS::ConstDeclNode::evaluate):
    11933         (KJS::ConstStatementNode::optimizeVariableAccess):
    11934         (KJS::ConstStatementNode::execute):
    11935         (KJS::statementListExecute):
    11936         (KJS::BlockNode::optimizeVariableAccess):
    11937         (KJS::BlockNode::execute):
    11938         (KJS::EmptyStatementNode::execute):
    11939         (KJS::ExprStatementNode::optimizeVariableAccess):
    11940         (KJS::ExprStatementNode::execute):
    11941         (KJS::VarStatementNode::optimizeVariableAccess):
    11942         (KJS::VarStatementNode::execute):
    11943         (KJS::IfNode::optimizeVariableAccess):
    11944         (KJS::IfNode::execute):
    11945         (KJS::IfElseNode::optimizeVariableAccess):
    11946         (KJS::IfElseNode::execute):
    11947         (KJS::DoWhileNode::optimizeVariableAccess):
    11948         (KJS::DoWhileNode::execute):
    11949         (KJS::WhileNode::optimizeVariableAccess):
    11950         (KJS::WhileNode::execute):
    11951         (KJS::ForNode::optimizeVariableAccess):
    11952         (KJS::ForNode::execute):
    11953         (KJS::ForInNode::optimizeVariableAccess):
    11954         (KJS::ForInNode::execute):
    11955         (KJS::ContinueNode::execute):
    11956         (KJS::BreakNode::execute):
    11957         (KJS::ReturnNode::optimizeVariableAccess):
    11958         (KJS::ReturnNode::execute):
    11959         (KJS::WithNode::optimizeVariableAccess):
    11960         (KJS::WithNode::execute):
    11961         (KJS::CaseClauseNode::optimizeVariableAccess):
    11962         (KJS::CaseClauseNode::evaluate):
    11963         (KJS::CaseClauseNode::executeStatements):
    11964         (KJS::ClauseListNode::optimizeVariableAccess):
    11965         (KJS::CaseBlockNode::optimizeVariableAccess):
    11966         (KJS::CaseBlockNode::executeBlock):
    11967         (KJS::SwitchNode::optimizeVariableAccess):
    11968         (KJS::SwitchNode::execute):
    11969         (KJS::LabelNode::optimizeVariableAccess):
    11970         (KJS::LabelNode::execute):
    11971         (KJS::ThrowNode::optimizeVariableAccess):
    11972         (KJS::ThrowNode::execute):
    11973         (KJS::TryNode::optimizeVariableAccess):
    11974         (KJS::TryNode::execute):
    11975         (KJS::ProgramNode::initializeSymbolTable):
    11976         (KJS::ScopeNode::optimizeVariableAccess):
    11977         (KJS::ProgramNode::processDeclarations):
    11978         (KJS::EvalNode::processDeclarations):
    11979         (KJS::ProgramNode::execute):
    11980         (KJS::EvalNode::execute):
    11981         (KJS::FunctionBodyNodeWithDebuggerHooks::execute):
    11982         (KJS::FuncDeclNode::execute):
    11983         (KJS::FuncExprNode::evaluate):
    11984         * kjs/nodes.h:
    11985         (KJS::Node::):
    11986         (KJS::FalseNode::):
    11987         (KJS::TrueNode::):
    11988         (KJS::ArgumentsNode::):
    11989 
    11990 2008-04-23  Oliver Hunt  <[email protected]>
    11991 
    11992         Reviewed by Geoff.
    11993 
    11994         Bug 18672: SQUIRRELFISH: codegen fails with a large number of temporaries
    11995         <https://bugs.webkit.org/show_bug.cgi?id=18672>
    11996 
    11997         Add a SegmentedVector type, which provides a Vector<T> which maintains
    11998         existing memory locations during resize.  This allows dynamically sizing
    11999         local, temporary and label "vectors" in CodeGenerator.
    12000 
    12001         * JavaScriptCore.xcodeproj/project.pbxproj:
    12002         * VM/CodeGenerator.cpp:
    12003         (KJS::CodeGenerator::addVar):
    12004         (KJS::CodeGenerator::CodeGenerator):
    12005         (KJS::CodeGenerator::newTemporary):
    12006         (KJS::CodeGenerator::newLabel):
    12007         * VM/CodeGenerator.h:
    12008         * VM/SegmentedVector.h: Added.
    12009         (KJS::SegmentedVector::SegmentedVector):
    12010         (KJS::SegmentedVector::~SegmentedVector):
    12011         (KJS::SegmentedVector::last):
    12012         (KJS::SegmentedVector::append):
    12013         (KJS::SegmentedVector::removeLast):
    12014         (KJS::SegmentedVector::size):
    12015         (KJS::SegmentedVector::operator[]):
    12016         (KJS::SegmentedVector::resize):
    12017         (KJS::SegmentedVector::shrink):
    12018         (KJS::SegmentedVector::grow):
    12019 
    12020 2008-04-23  Geoffrey Garen  <[email protected]>
    12021 
    12022         Reviewed by Maciej Stachowiak.
    12023        
    12024         A little refactoring in preparation for supporting 'arguments'.
    12025        
    12026         Fixes 2 regression tests.
    12027 
    12028         SunSpider reports no change.       
    12029 
    12030         We now check the activation register, instead of the codeBlock, to
    12031         determine whether we need to tear off the activation. This is to support
    12032         "f.arguments", which will create an activation/arguments pair for f,
    12033         even though the needsFullScopeChain flag is false for f's codeBlock.
    12034        
    12035         The test fixes resulted from calling initializeCallFrame for re-entrant
    12036         function code, instead of initializing (not enough) parts of the call
    12037         frame by hand.
    12038 
    12039 2008-04-22  Maciej Stachowiak  <[email protected]>
    12040 
    12041         Reviewed by Sam.
    12042        
    12043         - propagate the "this" value properly to local eval
    12044        
    12045         (fixes a measly one regression test)
    12046 
    12047         * VM/CodeBlock.h:
    12048         (KJS::CodeBlock::CodeBlock):
    12049         (KJS::ProgramCodeBlock::ProgramCodeBlock):
    12050         (KJS::EvalCodeBlock::EvalCodeBlock):
    12051         * VM/Machine.cpp:
    12052         (KJS::Machine::privateExecute):
    12053 
    12054 2008-04-22  Cameron Zwarich  <[email protected]>
    12055 
    12056         Reviewed by Maciej.
    12057 
    12058         Add support for function declarations in eval code.
    12059 
    12060         (this fixes 12 more regression tests)
    12061        
    12062         * VM/CodeBlock.h:
    12063         * VM/CodeGenerator.cpp:
    12064         (KJS::CodeGenerator::CodeGenerator):
    12065         * VM/CodeGenerator.h:
    12066         * VM/Machine.cpp:
    12067         (KJS::Machine::execute):
    12068         * kjs/nodes.cpp:
    12069         (KJS::EvalNode::generateCode):
    12070 
    12071 2008-04-22  Cameron Zwarich  <[email protected]>
    12072 
    12073         Reviewed by Oliver.
    12074 
    12075         Implement LabelNode.
    12076 
    12077         * VM/CodeGenerator.cpp:
    12078         (KJS::CodeGenerator::pushJumpContext):
    12079         (KJS::CodeGenerator::jumpContextForContinue):
    12080         (KJS::CodeGenerator::jumpContextForBreak):
    12081         * VM/CodeGenerator.h:
    12082         * kjs/nodes.cpp:
    12083         (KJS::DoWhileNode::emitCode):
    12084         (KJS::WhileNode::emitCode):
    12085         (KJS::ForNode::emitCode):
    12086         (KJS::ForInNode::emitCode):
    12087         (KJS::ContinueNode::emitCode):
    12088         (KJS::BreakNode::emitCode):
    12089         (KJS::SwitchNode::emitCode):
    12090         (KJS::LabelNode::emitCode):
    12091 
    12092 2008-04-22  Geoffrey Garen  <[email protected]>
    12093 
    12094         Reviewed by Oliver Hunt.
    12095        
    12096         Fixed crash when unwinding from exceptions inside eval.
    12097 
    12098         * VM/Machine.cpp:
    12099         (KJS::Machine::unwindCallFrame): Don't assume that the top of the
    12100         current call frame's scope chain is an activation: it can be the global
    12101         object, instead.
    12102 
    12103 2008-04-22  Maciej Stachowiak  <[email protected]>
    12104 
    12105         Reviewed by Geoff.
    12106 
    12107         * kjs/testkjs.cpp:
    12108         (main): Convert signals to exit codes, so that crashing tests are
    12109         detected as regression test failures.
    12110 
    12111 2008-04-22  Geoffrey Garen  <[email protected]>
    12112 
    12113         Reviewed by Oliver Hunt and Maciej Stachowiak.
    12114        
    12115         Renamed "needsActivation" to "needsFullScopeChain" because lying will
    12116         make hair grow on the backs of your hands.
    12117 
    12118 2008-04-21  Geoffrey Garen  <[email protected]>
    12119 
    12120         Reviewed by Maciej Stachowiak.
    12121        
    12122         Fixed ScopeChainNode lifetime problems:
    12123        
    12124         (1) In "with" and "catch" scopes, we would construct a ScopeChain
    12125         object and then jump across its destructor, leaking the ScopeChainNode
    12126         we had pushed.
    12127 
    12128         (2) In global and eval scopes, we would fail to initially ref
    12129         "scopeChain", causing us to overrelease it later. Now that we ref
    12130         "scopeChain" properly, we also need to deref it when the script
    12131         terminates.
    12132 
    12133         SunSpider reports a .2% regression, but an earlier round of ScopeChain
    12134         refactoring was a .4% speedup, so there.
    12135 
    12136 2008-04-22  Maciej Stachowiak  <[email protected]>
    12137 
    12138         Reviewed by Alexey.
    12139        
    12140         - use global object instead of null for "this" on unqualified calls
    12141        
    12142         This fixes 10 more JSC test regressions.
    12143 
    12144         * VM/Machine.cpp:
    12145         (KJS::Machine::privateExecute):
    12146 
    12147 2008-04-22  Maciej Stachowiak  <[email protected]>
    12148 
    12149         Reviewed by Oliver.
    12150        
    12151         - throw proper exceptions for objects that don't implement call or construct
    12152        
    12153         This fixes 21 more JSC test regressions. It is also seemingly an
    12154         0.5% progression.
    12155 
    12156         * VM/ExceptionHelpers.cpp:
    12157         (KJS::createNotAnObjectError):
    12158         (KJS::createNotAConstructorError):
    12159         (KJS::createNotAFunctionError):
    12160         * VM/ExceptionHelpers.h:
    12161         * VM/Machine.cpp:
    12162         (KJS::Machine::privateExecute):
    12163 
    12164 2008-04-21  Oliver Hunt  <[email protected]>
    12165 
    12166         Reviewed by Geoff.
    12167 
    12168         Implement emitCode for ConstDeclNode.
    12169 
    12170         This fixes the crash (assertion) in js1_5/Scope/scope-001.js
    12171 
    12172         * VM/CodeGenerator.cpp:
    12173         (KJS::CodeGenerator::registerForLocalConstInit):
    12174         * VM/CodeGenerator.h:
    12175         * kjs/nodes.cpp:
    12176         (KJS::AssignResolveNode::emitCode):
    12177         (KJS::ConstDeclNode::emitCodeSingle):
    12178         (KJS::ConstDeclNode::emitCode):
    12179         (KJS::ConstStatementNode::emitCode):
    12180         * kjs/nodes.h:
    12181 
    12182 2008-04-21  Maciej Stachowiak  <[email protected]>
    12183 
    12184         Reviewed by Sam.
    12185        
    12186         - add some support for the split window object
    12187 
    12188         This fixes many layout tests.
    12189        
    12190         * VM/Machine.cpp:
    12191         (KJS::resolveBaseAndFunc): Use toThisObject() to ensure we get the
    12192         wrapper global, if one exists, as the "this" object.
    12193         * kjs/function.cpp:
    12194         (KJS::globalFuncEval): Use toGlobalObject() to handle the wrapper
    12195         case properly.
    12196 
    12197 2008-04-21  Maciej Stachowiak  <[email protected]>
    12198 
    12199         Reviewed by Oliver.
    12200        
    12201         - restore ScopeChain::operator= to avoid crash on many layout tests
    12202        
    12203         Otherwise, FunctionImp::setScope would cause a reference
    12204         underflow. I implemented using the copy construct and swap idiom.
    12205 
    12206         * kjs/scope_chain.h:
    12207         (KJS::ScopeChain::swap):
    12208         (KJS::ScopeChain::operator=):
    12209 
    12210 2008-04-21  Oliver Hunt  <[email protected]>
    12211 
    12212         Reviewed by Geoff.
    12213 
    12214         Bug 18649: SQUIRRELFISH: correctly handle exceptions in eval code
    12215         <https://bugs.webkit.org/show_bug.cgi?id=18649>
    12216 
    12217         Allocate a callframe for eval() and initialise with a null codeBlock to
    12218         indicate native code.  This prevents the unwinder from clobbering the
    12219         register stack.
    12220 
    12221         * VM/Machine.cpp:
    12222         (KJS::Machine::execute):
    12223 
    12224 2008-04-21  Geoffrey Garen  <[email protected]>
    12225 
    12226         Reviewed by Sam Weinig.
    12227        
    12228         Removed ScopeChain::push(ScopeChain&) because it was unused. Moved
    12229         ScopeChain::print to ScopeChainNode.
    12230        
    12231         ScopeChain is now nothing more than a resource-handling wrapper around
    12232         ScopeChainNode.
    12233 
    12234 2008-04-21  Cameron Zwarich  <[email protected]>
    12235 
    12236         Reviewed by Maciej.
    12237 
    12238         Bug 18671: SquirrelFish: continue inside switch fails
    12239         <https://bugs.webkit.org/show_bug.cgi?id=18671>
    12240 
    12241         * VM/CodeGenerator.cpp:
    12242         (KJS::CodeGenerator::jumpContextForLabel):
    12243         * VM/CodeGenerator.h:
    12244         * kjs/nodes.cpp:
    12245         (KJS::ContinueNode::emitCode):
    12246 
    12247 2008-04-21  Geoffrey Garen  <[email protected]>
    12248 
    12249         Reviewed by Sam Weinig.
    12250        
    12251         Moved push(JSObject*) and pop() from ScopeChain to ScopeChainNode,
    12252         rearranging scope_chain.h a bit.
    12253 
    12254         SunSpider reports no change.
    12255 
    12256 2008-04-21  Geoffrey Garen  <[email protected]>
    12257 
    12258         Reviewed by Sam Weinig.
    12259        
    12260         Moved bottom() from ScopeChain to ScopeChainNode, simplifying it based
    12261         on the knowledge that the ScopeChain is never empty.
    12262 
    12263         SunSpider reports no change.
    12264 
    12265 2008-04-21  Geoffrey Garen  <[email protected]>
    12266 
    12267         Reviewed by Oliver Hunt.
    12268        
    12269         Moved begin() and end() from ScopeChain to ScopeChainNode.
    12270        
    12271         Also marked a few methods "const".
    12272 
    12273         SunSpider reports no change.
    12274        
    12275 2008-04-21  Geoffrey Garen  <[email protected]>
    12276 
    12277         Reviewed by Maciej Stachowiak.
    12278        
    12279         Turned ScopeChain::depth into a stand-alone function, and simplified it
    12280         a bit.
    12281        
    12282         I also moved ScopeChain::depth to Machine.cpp because it doesn't report
    12283         the true depth of the ScopeChain -- just the Machine's perspective of
    12284         its depth within a given call frame.
    12285 
    12286         SunSpider reports no change.
    12287        
    12288 2008-04-21  Geoffrey Garen  <[email protected]>
    12289 
    12290         Reviewed by Maciej Stachowiak.
    12291        
    12292         Removed indirection in ScopeChain::ref / ScopeChain::deref.
    12293        
    12294         SunSpider reports no change.
    12295        
    12296         * kjs/scope_chain.h:
    12297         (KJS::ScopeChain::ScopeChain):
    12298         (KJS::ScopeChain::~ScopeChain):
    12299         (KJS::ScopeChain::clear):
    12300 
    12301 2008-04-21  Oliver Hunt  <[email protected]>
    12302 
    12303         Fix debug build
    12304 
    12305         * kjs/nodes.cpp:
    12306         (KJS::ConstDeclNode::evaluateSingle):
    12307 
    12308 2008-04-21  Cameron Zwarich  <[email protected]>
    12309 
    12310         Reviewed by Oliver.
    12311 
    12312         Bug 18664: SQUIRRELFISH: correctly throw a SyntaxError when parsing of eval code fails
    12313         <https://bugs.webkit.org/show_bug.cgi?id=18664>
    12314 
    12315         Correctly throw a SyntaxError when parsing of eval code fails.
    12316 
    12317         * VM/Machine.cpp:
    12318         (KJS::eval):
    12319 
    12320 2008-04-21  Oliver Hunt  <[email protected]>
    12321 
    12322         Reviewed by Geoff.
    12323 
    12324         Partial fix for Bug 18649: SQUIRRELFISH: correctly handle exceptions in eval code
    12325 
    12326         Make sure we correct the register state before jumping to vm_throw.
    12327 
    12328         * VM/Machine.cpp:
    12329         (KJS::Machine::privateExecute):
    12330 
    12331 2008-04-21  Geoffrey Garen  <[email protected]>
    12332 
    12333         Reviewed by Maciej Stachowiak.
    12334        
    12335         Simplified ScopeChain ref/deref.
    12336        
    12337         SunSpider reports a .4% speedup.
    12338        
    12339         * kjs/scope_chain.h:
    12340         (KJS::ScopeChainNode::ref): Removed this function because it was nonsense.
    12341         ScopeChainNodes are initialized with a refCount of 1, so the loop was
    12342         guaranteed to iterate exactly once.
    12343 
    12344 2008-04-21  Geoffrey Garen  <[email protected]>
    12345 
    12346         Reviewed by Maciej Stachowiak.
    12347        
    12348         Removed support for empty ScopeChains.
    12349 
    12350         SunSpider reports no change.
    12351 
    12352 2008-04-21  Geoffrey Garen  <[email protected]>
    12353 
    12354         Reviewed by Maciej Stachowiak.
    12355        
    12356         Removed some completely unused ScopeChain member functions.
    12357 
    12358         SunSpider reports no change.
    12359 
    12360 2008-04-21  Geoffrey Garen  <[email protected]>
    12361 
    12362         Reviewed by Maciej Stachowiak.
    12363        
    12364         Avoid creating unnecessary ScopeChain objects, to reduce refcount churn.
    12365 
    12366         SunSpider reports no change.
    12367 
    12368 2008-04-21  Maciej Stachowiak  <[email protected]>
    12369 
    12370         Rubber stamped by Alexey.
    12371        
    12372         Add some braces.x
    12373 
    12374         * kjs/testkjs.cpp:
    12375         (runWithScripts):
    12376 
    12377 2008-04-21  Maciej Stachowiak  <[email protected]>
    12378 
    12379         Reviewed by Oliver.
    12380        
    12381         - only print "End:" output when -d flag is passed.
    12382        
    12383         This fixes half of our failing JSC regression tests.
    12384 
    12385         * kjs/testkjs.cpp:
    12386         (runWithScripts):
    12387 
    12388 2008-04-21  Cameron Zwarich  <[email protected]>
    12389 
    12390         Reviewed by Maciej.
    12391 
    12392         Add support for variable declarations in eval code.
    12393 
    12394         * VM/CodeBlock.h:
    12395         (KJS::EvalCodeBlock::EvalCodeBlock):
    12396         * VM/CodeGenerator.cpp:
    12397         (KJS::CodeGenerator::CodeGenerator):
    12398         * VM/CodeGenerator.h:
    12399         * VM/Machine.cpp:
    12400         (KJS::Machine::execute):
    12401         * VM/Machine.h:
    12402         * kjs/function.cpp:
    12403         (KJS::globalFuncEval):
    12404         * kjs/nodes.cpp:
    12405         (KJS::EvalNode::generateCode):
    12406         * kjs/nodes.h:
    12407         (KJS::EvalNode::):
    12408 
    12409 2008-04-20  Oliver Hunt  <[email protected]>
    12410 
    12411         Reviewed by Maciej.
    12412 
    12413         Throw exceptions for invalid continue, break, and return statements.
    12414 
    12415         Simple refactoring and extension of Cameron's AssignErrorNode, etc patch
    12416 
    12417         * VM/CodeGenerator.cpp:
    12418         (KJS::CodeGenerator::CodeGenerator):
    12419         (KJS::CodeGenerator::pushJumpContext):
    12420         (KJS::CodeGenerator::popJumpContext):
    12421         (KJS::CodeGenerator::jumpContextForLabel):
    12422         * VM/CodeGenerator.h:
    12423         * kjs/nodes.cpp:
    12424         (KJS::Node::emitThrowError):
    12425         (KJS::ContinueNode::emitCode):
    12426         (KJS::BreakNode::emitCode):
    12427         (KJS::ReturnNode::emitCode):
    12428         * kjs/nodes.h:
    12429 
    12430 2008-04-20  Geoffrey Garen  <[email protected]>
    12431 
    12432         Reviewed by Oliver Hunt.
    12433        
    12434         Removed Machine.cpp from AllInOneFile.cpp, and manually inlined a few
    12435         things that used to be inlined automatically.
    12436        
    12437         1.9% speedup on SunSpider.
    12438        
    12439         My hope is that we'll face fewer surprises in Machine.cpp codegen, now
    12440         that GCC is making fewer decisions. The speedup seems to confirm that.
    12441 
    12442 2008-04-20  Oliver Hunt  <[email protected]>
    12443 
    12444         Reviewed by Maciej.
    12445 
    12446         Bug 18642: Iterator context may get placed into the return register, leading to much badness
    12447         <https://bugs.webkit.org/show_bug.cgi?id=18642>
    12448 
    12449         To prevent incorrectly reusing what will become the result register for
    12450         eval and global code execution, we need to request and ref the destination
    12451         in advance of codegen.  Unfortunately this may lead to unnecessary copying,
    12452         although in future we can probably limit this.  Curiously SunSpider shows
    12453         a progression in a number of tests, although it comes out as a wash overall.
    12454 
    12455         * kjs/nodes.cpp:
    12456         (KJS::EvalNode::emitCode):
    12457         (KJS::ProgramNode::emitCode):
    12458 
    12459 2008-04-20  Cameron Zwarich  <[email protected]>
    12460 
    12461         Reviewed by Maciej.
    12462 
    12463         Add support for AssignErrorNode, PrefixErrorNode, and PostfixErrorNode.
    12464 
    12465         * VM/CodeBlock.cpp:
    12466         (KJS::CodeBlock::dump):
    12467         * VM/CodeGenerator.cpp:
    12468         (KJS::CodeGenerator::emitCreateError):
    12469         * VM/CodeGenerator.h:
    12470         * VM/Machine.cpp:
    12471         (KJS::Machine::privateExecute):
    12472         * VM/Opcode.h:
    12473         * kjs/nodes.cpp:
    12474         (KJS::PostfixErrorNode::emitCode):
    12475         (KJS::PrefixErrorNode::emitCode):
    12476         (KJS::AssignErrorNode::emitCode):
    12477         * kjs/nodes.h:
    12478 
    12479 2008-04-20  Oliver Hunt  <[email protected]>
    12480 
    12481         Reviewed by Geoff and Mark.
    12482 
    12483         Provide line number information in exceptions
    12484 
    12485         Simple patch, adds line number information metadata to CodeBlock
    12486         and a simple method to get the line number responsible for a given
    12487         Instruction*.
    12488 
    12489         * VM/CodeBlock.cpp:
    12490         (KJS::CodeBlock::lineNumberForVPC):
    12491         * VM/CodeBlock.h:
    12492         * VM/CodeGenerator.h:
    12493         (KJS::CodeGenerator::emitNode):
    12494         * VM/Machine.cpp:
    12495         (KJS::Machine::throwException):
    12496 
    12497 2008-04-20  Oliver Hunt  <[email protected]>
    12498 
    12499         Reviewed by Maciej.
    12500 
    12501         Provide "sourceURL" in exceptions
    12502 
    12503         * VM/CodeBlock.h:
    12504         * VM/Machine.cpp:
    12505         (KJS::Machine::throwException):
    12506         * kjs/nodes.cpp:
    12507         (KJS::EvalNode::generateCode):
    12508         (KJS::ProgramNode::generateCode):
    12509 
    12510 2008-04-19  Oliver Hunt  <[email protected]>
    12511 
    12512         Reviewed by Maciej.
    12513 
    12514         Don't call emitCode directly on subnodes, instead use CodeGenerator::emitNode
    12515 
    12516         This patch just a preparation for tracking line numbers.
    12517 
    12518         * kjs/nodes.cpp:
    12519         (KJS::ObjectLiteralNode::emitCode):
    12520         (KJS::PropertyListNode::emitCode):
    12521         (KJS::ArgumentListNode::emitCode):
    12522         (KJS::TryNode::emitCode):
    12523 
    12524 2008-04-19  Oliver Hunt  <[email protected]>
    12525 
    12526         Reviewed by Maciej.
    12527 
    12528         Bug 18619: Support continue, break, and return in try .. finally blocks
    12529         <https://bugs.webkit.org/show_bug.cgi?id=18619>
    12530 
    12531         This patch replaces the current partial finally support (which uses code
    12532         duplication to achieve what it does) with a subroutine based approach.
    12533         This has a number of advantages over code duplication:
    12534           * Reduced code size
    12535           * Simplified exception handling as the finaliser code only exists in
    12536             one place, so no "magic" is needed to get the correct handler for a
    12537             finaliser.
    12538           * When we support instruction to line number mapping we won't need to
    12539             worry about the dramatic code movement caused by duplication
    12540 
    12541         On the downside it is necessary to add two new opcodes, op_jsr and op_sret
    12542         to enter and exit the finaliser subroutines, happily SunSpider reports
    12543         a performance progression (gcc amazes me) and ubench reports a wash.
    12544 
    12545         While jsr and sret provide a mechanism that allows us to enter and exit
    12546         any arbitrary finaliser we need to, it was still necessary to increase
    12547         the amount of information tracked when entering and exiting both finaliser
    12548         scopes and dynamic scopes ("with").  This means "scopeDepth" is now
    12549         the combination of "finaliserDepth" and "dynamicScopeDepth".  We also
    12550         now use a scopeContextStack to ensure that we pop scopes and execute
    12551         finalisers in the correct order.  This increases the cost of "with" nodes
    12552         during codegen, but it should not be significant enough to effect real
    12553         world performance and greatly simplifies codegen for return, break and
    12554         continue when interacting with finalisers.
    12555 
    12556         * VM/CodeBlock.cpp:
    12557         (KJS::CodeBlock::dump):
    12558           Pretty printing of jsr/sret opcodes
    12559 
    12560         * VM/CodeGenerator.cpp:
    12561         (KJS::CodeGenerator::CodeGenerator):
    12562         (KJS::CodeGenerator::emitPushScope):
    12563         (KJS::CodeGenerator::emitPopScope):
    12564           Dynamic scopes need to be tracked on the scopeContextStack now
    12565 
    12566         (KJS::CodeGenerator::pushFinallyContext):
    12567         (KJS::CodeGenerator::popFinallyContext):
    12568           Handle entry and exit from code regions with finalisers.  This is
    12569           needed solely to support return, continue and break inside finaliser
    12570           regions.
    12571 
    12572         (KJS::CodeGenerator::emitComplexJumpScopes):
    12573           Helper function for emitJumpScopes to handle the complex codegen
    12574           needed to handle return, continue and break inside a finaliser region
    12575 
    12576         (KJS::CodeGenerator::emitJumpScopes):
    12577           Updated to be aware of finalisers, if a cross-scope jump occurs inside
    12578           a finaliser we hand off codegen to emitComplexJumpScopes, otherwise
    12579           we can handle the normal (trivial) case with a single instruction.
    12580 
    12581         (KJS::CodeGenerator::emitJumpSubroutine):
    12582         (KJS::CodeGenerator::emitSubroutineReturn):
    12583           Trivial opcode emitter functions.
    12584 
    12585         * VM/CodeGenerator.h:
    12586         (KJS::CodeGenerator::scopeDepth):
    12587         * VM/Machine.cpp:
    12588         (KJS::Machine::privateExecute):
    12589           Implement op_jsr and op_sret.
    12590 
    12591         * VM/Opcode.h:
    12592           Ad op_jsr and op_sret
    12593 
    12594         * kjs/nodes.cpp:
    12595         (KJS::TryNode::emitCode):
    12596           Fix codegen for new finaliser model.
    12597 
    12598 2008-04-17  Mark Rowe  <[email protected]>
    12599 
    12600         Rubber-stamped by Oliver Hunt.
    12601 
    12602         Remove unnecessary files from testkjs, testapi and minidom targets.
    12603 
    12604         * JavaScriptCore.xcodeproj/project.pbxproj:
    12605 
    12606 2008-04-17  Geoffrey Garen  <[email protected]>
    12607 
    12608         Reviewed by Oliver Hunt.
    12609        
    12610         Fixed ASSERT seen during run-sunspider of a debug build.
    12611 
    12612         * VM/CodeGenerator.h: Made the default codegen buffers bigger. SunSpider
    12613         runs all tests in one global environment, so you end up with more than
    12614         128 locals. This is just a stop-gap until we code up a real
    12615         solution to arbitrary symbol and label limits.
    12616 
    12617 2008-04-17  Geoffrey Garen  <[email protected]>
    12618 
    12619         Reviewed by Oliver Hunt.
    12620        
    12621         Fixed a bug in exception unwinding, where we wouldn't deref the scope
    12622         chain in global scope, so we would leak ScopeChainNodes when exceptions
    12623         were thrown inside "with" and "catch" scopes.
    12624        
    12625         Also did some cleanup of the unwinding code along the way.
    12626        
    12627         Scope chain reference counting is still wrong in a few ways. I thought
    12628         I would fix this portion of it first.
    12629        
    12630         run-sunspider shows no change.
    12631 
    12632         * VM/Machine.cpp:
    12633         (KJS::Machine::unwindCallFrame):
    12634         (KJS::Machine::throwException):
    12635         (KJS::Machine::privateExecute):
    12636         * VM/Machine.h:
    12637 
    12638 2008-04-17  Oliver Hunt  <[email protected]>
    12639 
    12640         Reviewed by Maciej.
    12641 
    12642         Add more exception checking to toNumber conversions
    12643 
    12644         This corrects op_pre_dec, op_negate, op_mod and op_sub.
    12645 
    12646         * VM/Machine.cpp:
    12647         (KJS::Machine::privateExecute):
    12648 
    12649 2008-04-17  Geoffrey Garen  <[email protected]> and Cameron Zwarich  <[email protected]>
    12650 
    12651         Reviewed by Oliver Hunt.
    12652        
    12653         Behold: eval.
    12654        
    12655         Introduced a new opcode: op_call_eval. In the normal case, it performs
    12656         an eval. In the case where eval has been overridden in some way, it
    12657         performs a function call.
    12658 
    12659         * VM/CodeGenerator.h: Added a feature so the code generator knows not
    12660         to optimized locals in eval code.
    12661        
    12662 2008-04-17  Geoffrey Garen  <[email protected]>
    12663 
    12664         Reviewed by Sam Weinig.
    12665        
    12666         Added some ASSERTs to document codegen failures in
    12667         run-javascriptcore-tests.
    12668        
    12669         For all tests, program-level codegen now either succeeds, or fails with
    12670         an ASSERT.
    12671 
    12672         * VM/CodeGenerator.cpp:
    12673         (KJS::CodeGenerator::addVar):
    12674         (KJS::CodeGenerator::CodeGenerator):
    12675         (KJS::CodeGenerator::newTemporary):
    12676         (KJS::CodeGenerator::newLabel):
    12677 
    12678 2008-04-17  Geoffrey Garen  <[email protected]>
    12679 
    12680         Reviewed by Maciej Stachowiak.
    12681        
    12682         Fixed another case of a dst register being an unreferenced temporary
    12683         (caused an ASSERT when running the full sunspider suite).
    12684 
    12685         * kjs/nodes.cpp:
    12686         (KJS::CaseBlockNode::emitCodeForBlock):
    12687 
    12688 2008-04-16  Maciej Stachowiak  <[email protected]>
    12689 
    12690         Reviewed by Geoff.
    12691        
    12692         - add documentation (and meaningful parameter names) for arithmetic and bitwise binary ops
    12693 
    12694         * VM/CodeBlock.cpp:
    12695         (KJS::CodeBlock::dump):
    12696         * VM/CodeGenerator.cpp:
    12697         (KJS::CodeGenerator::emitMul):
    12698         (KJS::CodeGenerator::emitDiv):
    12699         (KJS::CodeGenerator::emitMod):
    12700         (KJS::CodeGenerator::emitSub):
    12701         (KJS::CodeGenerator::emitLeftShift):
    12702         (KJS::CodeGenerator::emitRightShift):
    12703         (KJS::CodeGenerator::emitUnsignedRightShift):
    12704         (KJS::CodeGenerator::emitBitAnd):
    12705         (KJS::CodeGenerator::emitBitXOr):
    12706         (KJS::CodeGenerator::emitBitOr):
    12707         * VM/CodeGenerator.h:
    12708         * VM/Machine.cpp:
    12709         (KJS::Machine::privateExecute):
    12710         * VM/Opcode.h:
    12711         * kjs/nodes.cpp:
    12712         (KJS::MultNode::emitCode):
    12713         (KJS::DivNode::emitCode):
    12714         (KJS::ModNode::emitCode):
    12715         (KJS::SubNode::emitCode):
    12716         (KJS::LeftShiftNode::emitCode):
    12717         (KJS::RightShiftNode::emitCode):
    12718         (KJS::UnsignedRightShiftNode::emitCode):
    12719         (KJS::BitAndNode::emitCode):
    12720         (KJS::BitXOrNode::emitCode):
    12721         (KJS::BitOrNode::emitCode):
    12722         (KJS::emitReadModifyAssignment):
    12723         (KJS::ReadModifyResolveNode::emitCode):
    12724 
    12725 2008-04-16  Oliver Hunt  <[email protected]>
    12726 
    12727         Reviewed by Geoff.
    12728 
    12729         Exception checks for toNumber in op_pre_inc
    12730 
    12731         This is somewhat more convoluted than the simple hadException checks
    12732         we currently use.  Instead we use special toNumber conversions that
    12733         select between the exception and ordinary vPC.  This allows us to
    12734         remove any branches in the common case (incrementing a number).
    12735 
    12736         * API/JSCallbackObject.h:
    12737         * API/JSCallbackObjectFunctions.h:
    12738         (KJS::::toNumber):
    12739         * ChangeLog:
    12740         * JavaScriptCore.exp:
    12741         * JavaScriptCore.xcodeproj/project.pbxproj:
    12742         * VM/JSPropertyNameIterator.cpp:
    12743         (KJS::JSPropertyNameIterator::toNumber):
    12744         * VM/JSPropertyNameIterator.h:
    12745         * VM/Machine.cpp:
    12746         (KJS::Machine::privateExecute):
    12747         * VM/Opcode.h:
    12748         * kjs/ExecState.cpp:
    12749         (KJS::ExecState::ExecState):
    12750         * kjs/ExecState.h:
    12751         * kjs/JSNotAnObject.cpp:
    12752         (KJS::JSNotAnObject::toNumber):
    12753         * kjs/JSNotAnObject.h:
    12754         * kjs/internal.cpp:
    12755         (KJS::StringImp::toNumber):
    12756         (KJS::NumberImp::toNumber):
    12757         (KJS::GetterSetterImp::toNumber):
    12758         * kjs/internal.h:
    12759         * kjs/object.cpp:
    12760         (KJS::JSObject::toNumber):
    12761         * kjs/object.h:
    12762         * kjs/value.h:
    12763         (KJS::JSValue::toNumber):
    12764 
    12765 2008-04-16  Maciej Stachowiak  <[email protected]>
    12766 
    12767         Reviewed by Geoff.
    12768        
    12769         - ensure that activations are kept in a register to protect them from GC
    12770        
    12771         Also renamed OptionalCalleeScopeChain constant to OptionalCalleeActivation, since
    12772         that is what is now kept there, and there is no more need to keep the scope chain in
    12773         the register file.
    12774 
    12775         * VM/Machine.cpp:
    12776         (KJS::initializeCallFrame):
    12777         (KJS::scopeChainForCall):
    12778         * VM/Machine.h:
    12779         (KJS::Machine::):
    12780 
    12781 2008-04-16  Geoffrey Garen  <[email protected]>
    12782 
    12783         Reviewed by Oliver Hunt.
    12784        
    12785         Made "this" work in program code / global scope.
    12786        
    12787         The machine can initialize "this" prior to execution because it knows
    12788         that, for program code, "this" is always stored in lr1.
    12789 
    12790         * VM/Machine.cpp:
    12791         (KJS::Machine::execute):
    12792         * VM/Machine.h:
    12793         (KJS::Machine::):
    12794         * kjs/interpreter.cpp:
    12795         (KJS::Interpreter::evaluate):
    12796 
    12797 2008-04-16  Geoffrey Garen  <[email protected]>
    12798 
    12799         Reviewed by Oliver Hunt.
    12800        
    12801         Fixed a codegen bug when returning from inside a dynamic scope (a with
    12802         or catch block): we need to pop any dynamic scope(s) that have been
    12803         added so op_ret can find the activation object at the top of the scope
    12804         chain.
    12805 
    12806         * kjs/nodes.cpp:
    12807         (KJS::ReturnNode::emitCode): If we're returning from inside a dynamic
    12808         scope, emit a jmp_scopes to take care of popping any dynamic scope(s)
    12809         and then branching to the return instruction.
    12810 
    12811 2008-04-16  Maciej Stachowiak  <[email protected]>
    12812 
    12813         Reviewed by Geoff.
    12814        
    12815         - document the add and get_prop_id opcodes
    12816        
    12817         In addition to adding documentation in comments, I changed
    12818         references to register IDs or indices relating to these opcodes to
    12819         have meaningful names instead of r0 r1 r2.
    12820 
    12821         * VM/CodeGenerator.cpp:
    12822         (KJS::CodeGenerator::emitAdd):
    12823         * VM/CodeGenerator.h:
    12824         * VM/Machine.cpp:
    12825         (KJS::Machine::privateExecute):
    12826         * kjs/nodes.cpp:
    12827         (KJS::DotAccessorNode::emitCode):
    12828         (KJS::FunctionCallDotNode::emitCode):
    12829         (KJS::PostIncDotNode::emitCode):
    12830         (KJS::PostDecDotNode::emitCode):
    12831         (KJS::PreIncDotNode::emitCode):
    12832         (KJS::PreDecDotNode::emitCode):
    12833         (KJS::AddNode::emitCode):
    12834         (KJS::ReadModifyDotNode::emitCode):
    12835 
    12836 2008-04-15  Geoffrey Garen  <[email protected]>
    12837 
    12838         Reviewed by Oliver Hunt and Maciej Stachowiak.
    12839        
    12840         Fixed a codegen bug in with and switch, and added an ASSERT to
    12841         make sure it doesn't happen again.
    12842        
    12843         emitCode() assumes that dst, if non-zero, is either referenced or
    12844         non-temporary (i.e., it assumes that newTemporary() will return a
    12845         register not equal to dst). Certain callers to emitCode() weren't
    12846         guaranteeing that to be so, so temporary register values were being
    12847         overwritten.
    12848 
    12849         * VM/CodeGenerator.h:
    12850         (KJS::CodeGenerator::emitNode): ASSERT that dst is referenced or non-temporary.
    12851 
    12852         * kjs/nodes.cpp:
    12853         (KJS::CommaNode::emitCode): Reference the dst we pass.
    12854 
    12855         (KJS::WithNode::emitCode): No need to pass an explicit dst register.
    12856        
    12857         (KJS::CaseBlockNode::emitCodeForBlock): No need to pass an explicit dst register.
    12858         (KJS::SwitchNode::emitCode): No need to pass an explicit dst register.
    12859 
    12860         * kjs/nodes.h: Made dst the last parameter to emitCodeForBlock, to match
    12861         emitCode.
    12862 
    12863 2008-04-15  Oliver Hunt  <[email protected]>
    12864 
    12865         Reviewed by Maciej.
    12866 
    12867         Bug 18526: Throw exceptions when resolve fails for op_resolve_base_and_func.
    12868         <https://bugs.webkit.org/show_bug.cgi?id=18526>
    12869 
    12870         Very simple fix, sunspider shows a 0.7% progression, ubench shows a 0.4% regression.
    12871 
    12872         * VM/Machine.cpp:
    12873         (KJS::resolveBaseAndFunc):
    12874         (KJS::Machine::privateExecute):
    12875 
    12876 2008-04-15  Maciej Stachowiak  <[email protected]>
    12877 
    12878         Reviewed by Oliver.
    12879        
    12880         - fix incorrect result on 3d-raytrace test
    12881        
    12882         Oliver found and tracked down this bug, I just typed in the fix.
    12883 
    12884         * VM/Machine.cpp:
    12885         (KJS::slideRegisterWindowForCall): When setting omitted parameters to undefined,
    12886         account for the space for local variables.
    12887 
    12888 2008-04-15  Maciej Stachowiak  <[email protected]>
    12889 
    12890         Reviewed by Oliver.
    12891        
    12892         - fix codegen handling of dst registers
    12893        
    12894         1.006x speedup (not sure why).
    12895        
    12896         Most emitCode functions take an optional "dst" parameter that says
    12897         where the output of the instruction should be written. I made some
    12898         functions for convenient handling of the dst register:
    12899 
    12900         * VM/CodeGenerator.h:
    12901         (KJS::CodeGenerator::tempDestination): Takes the dst register. Returns it if
    12902         it is not null and is a temporary, otherwise allocates a new temporary. This is
    12903         intended for cases where an intermediate value might be written into the dst
    12904 
    12905         (KJS::CodeGenerator::finalDestination): Takes the dst register and an optional
    12906         register that was used as a temp destination. Picks the right thing for the final
    12907         output. Intended to be used as the output register for the instruction that generates
    12908         the final value of a particular node.
    12909        
    12910         (KJS::CodeGenerator::moveToDestinationIfNeeded): Takes dst and a
    12911         RegisterID; moves from the register to dst if dst is defined and
    12912         different from the register. This is intended for cases where the
    12913         result of a node is already in a specific register (likely a
    12914         local), and so no code needs to be generated unless a specific
    12915         destination has been requested, in which case a move is needed.
    12916        
    12917         I also applied these methods throughout emitCode functions. In
    12918         some cases this was just cleanup, in other cases I fixed actual
    12919         codegen bugs. Below I have given specific comments for the cases
    12920         where I believe I fixed a codegen bug, or improved quality of codegen.
    12921        
    12922         * kjs/nodes.cpp:
    12923         (KJS::NullNode::emitCode):
    12924         (KJS::FalseNode::emitCode):
    12925         (KJS::TrueNode::emitCode):
    12926         (KJS::NumberNode::emitCode):
    12927         (KJS::StringNode::emitCode):
    12928         (KJS::RegExpNode::emitCode):
    12929         (KJS::ThisNode::emitCode): Now avoids emitting a mov when dst is
    12930         the same as the this register (the unlikely case of "this = this");
    12931         (KJS::ResolveNode::emitCode): Now avoids emitting a mov when dst
    12932         is the same as the local regiester, in the local var case (the
    12933         unlikely case of "x = x");
    12934         (KJS::ArrayNode::emitCode): Fixed a codegen bug where array
    12935         literal element expressions may have observed an intermediate
    12936         value of constructing the array.
    12937         (KJS::ObjectLiteralNode::emitCode):
    12938         (KJS::PropertyListNode::emitCode): Fixed a codegen bug where object literal
    12939         property definition expressions may have obesrved an intermediate value of
    12940         constructing the object.
    12941         (KJS::BracketAccessorNode::emitCode):
    12942         (KJS::DotAccessorNode::emitCode):
    12943         (KJS::NewExprNode::emitCode):
    12944         (KJS::FunctionCallValueNode::emitCode):
    12945         (KJS::FunctionCallBracketNode::emitCode):
    12946         (KJS::FunctionCallDotNode::emitCode):
    12947         (KJS::PostIncResolveNode::emitCode):
    12948         (KJS::PostDecResolveNode::emitCode):
    12949         (KJS::PostIncBracketNode::emitCode):
    12950         (KJS::PostDecBracketNode::emitCode):
    12951         (KJS::PostIncDotNode::emitCode):
    12952         (KJS::PostDecDotNode::emitCode):
    12953         (KJS::DeleteResolveNode::emitCode):
    12954         (KJS::DeleteBracketNode::emitCode):
    12955         (KJS::DeleteDotNode::emitCode):
    12956         (KJS::DeleteValueNode::emitCode):
    12957         (KJS::VoidNode::emitCode):
    12958         (KJS::TypeOfResolveNode::emitCode):
    12959         (KJS::TypeOfValueNode::emitCode):
    12960         (KJS::PreIncResolveNode::emitCode): Fixed a codegen bug where the final
    12961         value would not be output to the dst register in the local var case.
    12962         (KJS::PreDecResolveNode::emitCode): Fixed a codegen bug where the final
    12963         value would not be output to the dst register in the local var case.
    12964         (KJS::PreIncBracketNode::emitCode):
    12965         (KJS::PreDecBracketNode::emitCode):
    12966         (KJS::PreIncDotNode::emitCode):
    12967         (KJS::PreDecDotNode::emitCode):
    12968         (KJS::UnaryPlusNode::emitCode):
    12969         (KJS::NegateNode::emitCode):
    12970         (KJS::BitwiseNotNode::emitCode):
    12971         (KJS::LogicalNotNode::emitCode):
    12972         (KJS::MultNode::emitCode):
    12973         (KJS::DivNode::emitCode):
    12974         (KJS::ModNode::emitCode):
    12975         (KJS::AddNode::emitCode):
    12976         (KJS::SubNode::emitCode):
    12977         (KJS::LeftShiftNode::emitCode):
    12978         (KJS::RightShiftNode::emitCode):
    12979         (KJS::UnsignedRightShiftNode::emitCode):
    12980         (KJS::LessNode::emitCode):
    12981         (KJS::GreaterNode::emitCode):
    12982         (KJS::LessEqNode::emitCode):
    12983         (KJS::GreaterEqNode::emitCode):
    12984         (KJS::InstanceOfNode::emitCode):
    12985         (KJS::InNode::emitCode):
    12986         (KJS::EqualNode::emitCode):
    12987         (KJS::NotEqualNode::emitCode):
    12988         (KJS::StrictEqualNode::emitCode):
    12989         (KJS::NotStrictEqualNode::emitCode):
    12990         (KJS::BitAndNode::emitCode):
    12991         (KJS::BitXOrNode::emitCode):
    12992         (KJS::BitOrNode::emitCode):
    12993         (KJS::LogicalAndNode::emitCode):
    12994         (KJS::LogicalOrNode::emitCode):
    12995         (KJS::ConditionalNode::emitCode):
    12996         (KJS::emitReadModifyAssignment): Allow an out argument separate from the operands,
    12997         needed for fixes below.
    12998         (KJS::ReadModifyResolveNode::emitCode): Fixed a codegen bug where the right side of
    12999         the expression may observe an intermediate value.
    13000         (KJS::AssignResolveNode::emitCode): Fixed a codegen bug where the right side of the
    13001         expression may observe an intermediate value.
    13002         (KJS::ReadModifyDotNode::emitCode): Fixed a codegen bug where the right side of the
    13003         expression may observe an intermediate value.
    13004         (KJS::ReadModifyBracketNode::emitCode): Fixed a codegen bug where the right side of the
    13005         expression may observe an intermediate value.
    13006         (KJS::CommaNode::emitCode): Avoid writing temporary value to dst register.
    13007         (KJS::ReturnNode::emitCode): Void return should return undefined, not null.
    13008         (KJS::FuncExprNode::emitCode):
    13009 
    13010 2008-04-15  Maciej Stachowiak  <[email protected]>
    13011 
    13012         Reviewed by Geoff.
    13013 
    13014         - fix huge performance regression (from trunk) in string-unpack-code
    13015        
    13016         This restores string-unpack-code performance to parity with
    13017         trunk (2.27x speedup relative to previous SquirrelFish)
    13018        
    13019         * VM/Machine.cpp:
    13020         (KJS::Machine::execute): Shrink register file after call to avoid
    13021         growing repeatedly.
    13022 
    13023 2008-04-15  Geoffrey Garen  <[email protected]>
    13024 
    13025         Reviewed by Sam Weinig.
    13026        
    13027         Fixed dumpCallFrame to match our new convention of passing around a
    13028         ScopeChainNode* instead of a ScopeChain*.
    13029 
    13030         * JavaScriptCore.exp:
    13031         * VM/Machine.cpp:
    13032         (KJS::Machine::dumpCallFrame):
    13033         * VM/Machine.h:
    13034 
    13035 2008-04-15  Oliver Hunt  <[email protected]>
    13036 
    13037         Reviewed by Maciej.
    13038 
    13039         Bug 18436: Need to throw exception on read/modify/write or similar resolve for nonexistent property
    13040         <https://bugs.webkit.org/show_bug.cgi?id=18436>
    13041 
    13042         Add op_resolve_base_and_property for read/modify/write operations,
    13043         this adds a "superinstruction" to resolve the base and value of a
    13044         property simultaneously.  Just using resolveBase and resolve results
    13045         in an 5% regression in ubench, 30% in loop-empty-resolve (which is
    13046         expected).  1.3% progression in sunspider, 2.1% in ubench, with a
    13047         21% gain in loop-empty-resolve.  The only outlier is function-missing-args
    13048         which gets a 3% regression that I could never resolve.
    13049 
    13050         * VM/CodeBlock.cpp:
    13051         (KJS::CodeBlock::dump):
    13052         * VM/CodeGenerator.cpp:
    13053         (KJS::CodeGenerator::emitResolveBaseAndProperty):
    13054         * VM/CodeGenerator.h:
    13055         * VM/Machine.cpp:
    13056         (KJS::resolveBaseAndProperty):
    13057         (KJS::Machine::privateExecute):
    13058         * VM/Opcode.h:
    13059         * kjs/nodes.cpp:
    13060         (KJS::PostIncResolveNode::emitCode):
    13061         (KJS::PostDecResolveNode::emitCode):
    13062         (KJS::PreIncResolveNode::emitCode):
    13063         (KJS::PreDecResolveNode::emitCode):
    13064         (KJS::ReadModifyResolveNode::emitCode):
    13065 
    13066 2008-04-15  Maciej Stachowiak  <[email protected]>
    13067 
    13068         Reviewed by Oliver.
    13069        
    13070         - fixed "SquirrelFish crashes due to bad scope chain on some SunSpider tests"
    13071         https://bugs.webkit.org/show_bug.cgi?id=18508
    13072 
    13073         3d-raytrace and string-unpack-code now run.
    13074        
    13075         The basic approach is to pass around ScopeChainNode* instead of
    13076         ScopeChain*, which in addition to not becoming suddenly an invalid
    13077         pointer also saves an indirection.
    13078        
    13079         This is an 0.4% speedup on SunSpider --squirrelfish (1.8% on --ubench)
    13080        
    13081         * VM/Machine.cpp:
    13082         (KJS::resolve):
    13083         (KJS::resolveBase):
    13084         (KJS::resolveBaseAndFunc):
    13085         (KJS::initializeCallFrame):
    13086         (KJS::scopeChainForCall):
    13087         (KJS::Machine::unwindCallFrame):
    13088         (KJS::Machine::throwException):
    13089         (KJS::Machine::execute):
    13090         (KJS::Machine::privateExecute):
    13091         * VM/Machine.h:
    13092         * VM/Register.h:
    13093         (KJS::Register::):
    13094         * kjs/nodes.cpp:
    13095         (KJS::EvalNode::generateCode):
    13096         (KJS::FunctionBodyNode::generateCode):
    13097         (KJS::ProgramNode::generateCode):
    13098         (KJS::ProgramNode::processDeclarations):
    13099         (KJS::EvalNode::processDeclarations):
    13100         (KJS::FuncDeclNode::makeFunction):
    13101         (KJS::FuncExprNode::makeFunction):
    13102         * kjs/nodes.h:
    13103         (KJS::ProgramNode::):
    13104         (KJS::EvalNode::):
    13105         (KJS::FunctionBodyNode::):
    13106         * kjs/object.h:
    13107         * kjs/scope_chain.h:
    13108         (KJS::ScopeChainNode::ScopeChainNode):
    13109         (KJS::ScopeChainNode::deref):
    13110         (KJS::ScopeChainIterator::ScopeChainIterator):
    13111         (KJS::ScopeChainIterator::operator*):
    13112         (KJS::ScopeChainIterator::operator->):
    13113         (KJS::ScopeChain::ScopeChain):
    13114         (KJS::ScopeChain::node):
    13115         (KJS::ScopeChain::deref):
    13116         (KJS::ScopeChain::ref):
    13117         (KJS::ScopeChainNode::ref):
    13118         (KJS::ScopeChainNode::release):
    13119         (KJS::ScopeChainNode::begin):
    13120         (KJS::ScopeChainNode::end):
    13121 
    13122 2008-04-14  Geoffrey Garen  <[email protected]>
    13123 
    13124         Reviewed by Oliver Hunt.
    13125        
    13126         Fixed crash when accessing registers in a torn-off activation object.
    13127 
    13128         * kjs/JSActivation.cpp:
    13129         (KJS::JSActivation::copyRegisters): Update our registerOffset after
    13130         copying our registers, since our offset should now be relative to
    13131         our private register array, not the shared register file.
    13132 
    13133 2008-04-14  Maciej Stachowiak  <[email protected]>
    13134 
    13135         Reviewed by Oliver.
    13136        
    13137         - fix a codegen flaw that makes some tests run way too fast or way too slow
    13138        
    13139         The basic problem was that FunctionCallResolveNode results in
    13140         codegen which can incorrectly write an intermediate value into the
    13141         dst register even when that is a local. I added convenience
    13142         functions to CodeGenerator for getting this right, but for now I
    13143         only fixed FunctionCallResolve.
    13144 
    13145         * VM/CodeGenerator.h:
    13146         (KJS::CodeGenerator::tempDestination):
    13147         (KJS::CodeGenerator::):
    13148         * kjs/nodes.cpp:
    13149         (KJS::FunctionCallResolveNode::emitCode):
    13150 
    13151 2008-04-14  Gabor Loki  <[email protected]>
    13152 
    13153         Reviewed and slightly tweaked by Geoffrey Garen.
    13154 
    13155         Bug 18489: Squirrelfish doesn't build on linux
    13156         <https://bugs.webkit.org/show_bug.cgi?id=18489>
    13157 
    13158         * JavaScriptCore.pri: Add VM into include path and its files into
    13159         source set
    13160         * VM/JSPropertyNameIterator.cpp: Fix include name
    13161         * VM/Machine.cpp: Add UNLIKELY macro for GCC
    13162         * VM/Machine.h: Add missing includes
    13163         * VM/RegisterFile.cpp: Add missing include
    13164         * kjs/testkjs.pro: Add VM into include path
    13165 
    13166 2008-04-14  Geoffrey Garen  <[email protected]>
    13167 
    13168         Reviewed by Sam Weinig.
    13169        
    13170         Restored OwnPtr in some places where I had removed it previously. We
    13171         can have an OwnPtr to an undefined class in a header as long as the
    13172         class's destructor isn't in the header.
    13173        
    13174 2008-04-14  Geoffrey Garen  <[email protected]>
    13175 
    13176         Reviewed by Sam Weinig.
    13177        
    13178         Fixed access to "this" inside dynamic scopes.
    13179 
    13180         * VM/CodeGenerator.cpp:
    13181         (KJS::CodeGenerator::registerForLocal): Always return a register for
    13182         "this", even if we're not optimizing access to other locals. Because
    13183         "this" is a keyword, it's always in a register and always accessible.
    13184 
    13185         * VM/CodeGenerator.h:
    13186         (KJS::CodeGenerator::shouldOptimizeLocals): Factored out a function
    13187         for determining whether we should optimize access to locals, since
    13188         eval will need to make this test a little more complicated.
    13189 
    13190 2008-04-14  Maciej Stachowiak  <[email protected]>
    13191 
    13192         Reviewed by Adam.
    13193        
    13194         - fix crash when running SunSpider full harness
    13195        
    13196         When growing the register file's buffer to make space for new globals,
    13197         make sure to copy accounting for the fact that the new space is logically
    13198         at the beginning of the buffer in this case, instead of at the end as when
    13199         growing for a new call frame.
    13200 
    13201         * VM/RegisterFile.cpp:
    13202         (KJS::RegisterFile::newBuffer):
    13203         (KJS::RegisterFile::growBuffer):
    13204         (KJS::RegisterFile::addGlobalSlots):
    13205         * VM/RegisterFile.h:
    13206 
    13207 2008-04-11  Geoffrey Garen  <[email protected]>
    13208 
    13209         Reviewed by Sam Weinig.
    13210        
    13211         Mark constant pools for global and eval code (collectively known as
    13212         "program code"). (Constant pools for function code are already marked by
    13213         their functions.)
    13214        
    13215         The global object is responsible for marking program code constant
    13216         pools. Code blocks add themselves to the mark set at creation time, and
    13217         remove themselves from the mark set at destruction time.
    13218        
    13219         sunspider --squirrelfish reports a 1% speedup, perhaps because
    13220         generateCode() is now non-virtual.
    13221 
    13222         * kjs/nodes.cpp: I had to use manual init and delete in this file
    13223         because putting an OwnPtr into the header would have created a circular
    13224         header dependency.
    13225 
    13226 2008-04-10  Cameron Zwarich  <[email protected]>
    13227 
    13228         Reviewed by Maciej.
    13229 
    13230         Bug 18231: Improve support for function call nodes in SquirrelFish
    13231         <https://bugs.webkit.org/show_bug.cgi?id=18231>
    13232 
    13233         Use correct value of 'this' for function calls.
    13234 
    13235         * VM/CodeBlock.cpp:
    13236         (KJS::CodeBlock::dump):
    13237         * VM/CodeGenerator.cpp:
    13238         (KJS::CodeGenerator::emitResolveBaseAndFunc):
    13239         * VM/CodeGenerator.h:
    13240         * VM/Machine.cpp:
    13241         (KJS::resolveBaseAndFunc):
    13242         (KJS::Machine::privateExecute):
    13243         * VM/Opcode.h:
    13244         * kjs/nodes.cpp:
    13245         (KJS::FunctionCallResolveNode::emitCode):
    13246 
    13247 2008-04-10  Geoffrey Garen  <[email protected]>
    13248 
    13249         This time for sure.
    13250 
    13251         * kjs/interpreter.cpp:
    13252         (KJS::Interpreter::evaluate):
    13253 
    13254 2008-04-10  Geoffrey Garen  <[email protected]>
    13255 
    13256         Reviewed by Sam Weinig.
    13257        
    13258         Fixed Interpreter::execute to honor the new model for returning non-NULL
    13259         values when an exception is thrown.
    13260 
    13261         * kjs/interpreter.cpp:
    13262         (KJS::Interpreter::evaluate):
    13263 
    13264 2008-04-10  Oliver Hunt  <[email protected]>
    13265 
    13266         Reviewed by Geoff.
    13267 
    13268         Fix SquirrelFish interpreter to pass internal exceptions back to
    13269         native code correctly.
    13270 
    13271         * JavaScriptCore.xcodeproj/project.pbxproj:
    13272         * VM/Machine.cpp:
    13273         (KJS::Machine::privateExecute):
    13274 
    13275 2008-04-10  Sam Weinig  <[email protected]>
    13276 
    13277         Reviewed by Geoffrey Garen.
    13278 
    13279         Replace the use of getCallData in op_construct with the new
    13280         getConstructData function that replaces implementsConstruct.
    13281 
    13282         * API/JSCallbackConstructor.cpp:
    13283         (KJS::JSCallbackConstructor::getConstructData):
    13284         * API/JSCallbackConstructor.h:
    13285         * API/JSCallbackObject.h:
    13286         * API/JSCallbackObjectFunctions.h:
    13287         (KJS::::getConstructData):
    13288         (KJS::::construct):
    13289         * API/JSObjectRef.cpp:
    13290         (JSObjectIsConstructor):
    13291         * JavaScriptCore.exp:
    13292         * JavaScriptCore.xcodeproj/project.pbxproj:
    13293         * VM/Machine.cpp:
    13294         (KJS::Machine::privateExecute):
    13295         * kjs/CallData.h:
    13296         * kjs/ConstructData.h: Copied from JavaScriptCore/kjs/CallData.h.
    13297         * kjs/array_object.cpp:
    13298         (KJS::ArrayObjectImp::getConstructData):
    13299         * kjs/array_object.h:
    13300         * kjs/bool_object.cpp:
    13301         (KJS::BooleanObjectImp::getConstructData):
    13302         * kjs/bool_object.h:
    13303         * kjs/date_object.cpp:
    13304         (KJS::DateObjectImp::getConstructData):
    13305         * kjs/date_object.h:
    13306         * kjs/error_object.cpp:
    13307         (KJS::ErrorObjectImp::getConstructData):
    13308         (KJS::NativeErrorImp::getConstructData):
    13309         * kjs/error_object.h:
    13310         * kjs/function.cpp:
    13311         (KJS::FunctionImp::getCallData):
    13312         (KJS::FunctionImp::getConstructData):
    13313         (KJS::FunctionImp::construct):
    13314         * kjs/function.h:
    13315         * kjs/function_object.cpp:
    13316         (KJS::FunctionObjectImp::getConstructData):
    13317         * kjs/function_object.h:
    13318         * kjs/nodes.cpp:
    13319         (KJS::NewExprNode::inlineEvaluate):
    13320         * kjs/number_object.cpp:
    13321         (KJS::NumberObjectImp::getConstructData):
    13322         * kjs/number_object.h:
    13323         * kjs/object.cpp:
    13324         * kjs/object.h:
    13325         * kjs/object_object.cpp:
    13326         (KJS::ObjectObjectImp::getConstructData):
    13327         * kjs/object_object.h:
    13328         * kjs/regexp_object.cpp:
    13329         (KJS::RegExpObjectImp::getConstructData):
    13330         * kjs/regexp_object.h:
    13331         * kjs/string_object.cpp:
    13332         (KJS::StringObjectImp::getConstructData):
    13333         * kjs/string_object.h:
    13334         * kjs/value.cpp:
    13335         (KJS::JSCell::getConstructData):
    13336         * kjs/value.h:
    13337         (KJS::JSValue::getConstructData):
    13338 
    13339 2008-04-10  Oliver Hunt  <[email protected]>
    13340 
    13341         Reviewed by Geoff.
    13342 
    13343         Bug 18420: SquirrelFish: need to throw Reference and Type errors
    13344         when attempting invalid operations on JSValues
    13345 
    13346         Add validation and exception checks to SquirrelFish so that the
    13347         correct exceptions are thrown for undefined variables, type errors
    13348         and toObject failure.  Also handle exceptions thrown by native
    13349         function calls.
    13350 
    13351         * JavaScriptCore.xcodeproj/project.pbxproj:
    13352         * VM/ExceptionHelpers.cpp: Added.
    13353         (KJS::substitute):
    13354         (KJS::createError):
    13355         (KJS::createUndefinedVariableError):
    13356         * VM/ExceptionHelpers.h: Added.
    13357           Helper functions
    13358         * VM/Machine.cpp:
    13359         (KJS::resolve):
    13360            Modified to signal failure
    13361         (KJS::isNotObject):
    13362            Wrapper for JSValue::isObject and exception creation (these need
    13363            to be merged, lest GCC go off the deep end)
    13364         (KJS::Machine::privateExecute):
    13365            Adding the many exception and validity checks.
    13366 
    13367         * kjs/JSNotAnObject.cpp: Added.
    13368           Stub object used to reduce the need for multiple exception checks
    13369           when toObject fails.
    13370         (KJS::JSNotAnObject::toPrimitive):
    13371         (KJS::JSNotAnObject::getPrimitiveNumber):
    13372         (KJS::JSNotAnObject::toBoolean):
    13373         (KJS::JSNotAnObject::toNumber):
    13374         (KJS::JSNotAnObject::toString):
    13375         (KJS::JSNotAnObject::toObject):
    13376         (KJS::JSNotAnObject::mark):
    13377         (KJS::JSNotAnObject::getOwnPropertySlot):
    13378         (KJS::JSNotAnObject::put):
    13379         (KJS::JSNotAnObject::deleteProperty):
    13380         (KJS::JSNotAnObject::defaultValue):
    13381         (KJS::JSNotAnObject::construct):
    13382         (KJS::JSNotAnObject::callAsFunction):
    13383         (KJS::JSNotAnObject::getPropertyNames):
    13384         * kjs/JSNotAnObject.h: Added.
    13385         (KJS::JSNotAnObject::JSNotAnObject):
    13386         * kjs/JSImmediate.cpp:
    13387         (KJS::JSImmediate::toObject):
    13388           modified to create an JSNotAnObject rather than throwing an exception
    13389           directly.
    13390 
    13391 2008-04-10  Geoffrey Garen  <[email protected]>
    13392 
    13393         Reviewed by Oliver Hunt.
    13394        
    13395         Pass a function body node its function's scope chain, rather than the
    13396         current execution context's scope chain, when compiling it.
    13397        
    13398         This doesn't matter yet, but it will once we start using the scope
    13399         chain during compilation.
    13400 
    13401         sunspider --squirrelfish notes a tiny speedup.
    13402 
    13403         * VM/Machine.cpp:
    13404         (KJS::Machine::privateExecute):
    13405 
    13406 2008-04-10  Geoffrey Garen  <[email protected]>
    13407 
    13408         Reviewed by Oliver Hunt.
    13409        
    13410         Fix two bugs when throwing exceptions from re-entrant JS calls:
    13411        
    13412         (1) Don't shrink the register file to 0, since our caller may still
    13413         be using it.
    13414        
    13415         (2) In case of exception, return jsNull() instead of 0 because,
    13416         surprisingly, some JavaScriptCore clients rely on a function's return
    13417         value being safe to operate on even if the function threw an exception.
    13418        
    13419         Also:
    13420        
    13421         - Changed FunctionImp::callAsFunction to honor the new semantics of
    13422         exceptions not returning 0.
    13423        
    13424         - Renamed "handlerPC" to "handlerVPC" to match other uses of "VPC".
    13425        
    13426         - Renamed "exceptionData" to "exceptionValue", because "data" seemed to
    13427         imply something more than just a JSValue.
    13428        
    13429         - Merged prepareException into throwException, since throwException was
    13430         its only caller, and it seemed weird that throwException didn't take
    13431         an exception as an argument.
    13432 
    13433         sunspider --squirrelfish does not seem to complain on my machine, but it
    13434         complains a little (.6%) on Oliver's.
    13435 
    13436 2008-04-10  Geoffrey Garen  <[email protected]>
    13437 
    13438         Reviewed by Maciej Stachowiak.
    13439        
    13440         Fixed op_construct for CallTypeNative to reacquire "r" before setting
    13441         its return value, since registerBase can theoretically change during the
    13442         execution of arbitrary code. (Not sure if any native constructors
    13443         actually make this possible.)
    13444 
    13445         sunspider --squirrelfish does not seem to complain.
    13446 
    13447         * VM/Machine.cpp:
    13448         (KJS::Machine::privateExecute):
    13449 
    13450 2008-04-10  Geoffrey Garen  <[email protected]>
    13451 
    13452         Reviewed by Oliver Hunt and Sam Weinig.
    13453        
    13454         Re-entrant execution of function code (global code -> built-in function
    13455         -> JS function):
    13456        
    13457         Miraculously, sunspider --squirrelfish does not seem to complain.
    13458 
    13459         A re-entrant function call is the same as a normal function call with
    13460         one exception: the re-entrant call leaves everything except for
    13461         CallerCodeBlock in the call frame header uninitialized, since the call
    13462         doesn't need to return to JS code. (It sets CallerCodeBlock to 0, to
    13463         indicate that the call shouldn't return to JS code.)
    13464        
    13465         Also fixed a few issues along the way:
    13466        
    13467         - Fixed two bugs in the read-write List implementation that caused
    13468         m_size and m_buffer to go stale.
    13469        
    13470         - Changed native call code to update "r" *before* setting the return
    13471         value, since the call may in turn call JS code, which changes the value
    13472         of "r".
    13473        
    13474         - Migrated initialization of "r" outside of Machine::privateExecute,
    13475         because global code and function code initialize "r" differently.
    13476        
    13477         - Migrated a codegen warning from Machine::privateExecute to the wiki.
    13478        
    13479         - Removed unnecessary "r" parameter from slideRegisterWindowForCall
    13480 
    13481         * VM/Machine.cpp:
    13482         (KJS::slideRegisterWindowForCall):
    13483         (KJS::scopeChainForCall):
    13484         (KJS::Machine::execute):
    13485         (KJS::Machine::privateExecute):
    13486         * VM/Machine.h:
    13487         * kjs/function.cpp:
    13488         (KJS::FunctionImp::callAsFunction):
    13489         * kjs/list.cpp:
    13490         (KJS::List::getSlice):
    13491         * kjs/list.h:
    13492         (KJS::List::clear):
    13493 
    13494 2008-04-10  Maciej Stachowiak  <[email protected]>
    13495 
    13496         Reviewed by Oliver.
    13497        
    13498         - fix problem with code generation for return with no argument
    13499        
    13500         3d-cube now runs
    13501 
    13502         * kjs/nodes.cpp:
    13503         (KJS::ReturnNode::emitCode):
    13504 
    13505 2008-04-10  Maciej Stachowiak  <[email protected]>
    13506 
    13507         Reviewed by Oliver.
    13508        
    13509         - Implement support for JS constructors
    13510        
    13511         access-binary-trees and access-nbody now run.
    13512        
    13513         Inexplicably a 1% speedup.
    13514 
    13515         * VM/Machine.cpp:
    13516         (KJS::initializeCallFrame):
    13517         (KJS::Machine::privateExecute):
    13518         * VM/Machine.h:
    13519         (KJS::Machine::):
    13520 
    13521 2008-04-10  Maciej Stachowiak  <[email protected]>
    13522 
    13523         Reviewed by Oliver.
    13524 
    13525         - More code cleanup in preparation for JS constructors
    13526 
    13527         Factor the remaining interesting parts of JS function calls into
    13528         slideRegisterWindowForCall and scopeChainForCall.
    13529        
    13530         * VM/Machine.cpp:
    13531         (KJS::slideRegisterWindowForCall):
    13532         (KJS::scopeChainForCall):
    13533         (KJS::Machine::privateExecute):
    13534 
    13535 2008-04-10  Maciej Stachowiak  <[email protected]>
    13536 
    13537         Reviewed by Geoff.
    13538        
    13539         - Code cleanup in preparation for JS constructors
    13540 
    13541         - Renamed returnInfo to callFrame.
    13542         - Made an enum which defines what goes where in the call frame.
    13543         - Factored out initializeCallFrame function from op_call
    13544        
    13545         * VM/CodeGenerator.cpp:
    13546         (KJS::CodeGenerator::emitCall):
    13547         (KJS::CodeGenerator::emitConstruct):
    13548         * VM/Machine.cpp:
    13549         (KJS::Machine::dumpRegisters):
    13550         (KJS::initializeCallFrame):
    13551         (KJS::Machine::unwindCallFrame):
    13552         (KJS::Machine::execute):
    13553         (KJS::Machine::privateExecute):
    13554         * VM/Machine.h:
    13555         (KJS::Machine::):
    13556 
    13557 2008-04-10  Geoffrey Garen  <[email protected]>
    13558 
    13559         Reviewed by Oliver Hunt.
    13560        
    13561         Fixed two bugs in register allocation for function calls:
    13562        
    13563         (1) op_call used to allocate codeBlock->numVars too many registers for
    13564         each call frame, due to duplicated math. Fixing this revealed...
    13565        
    13566         (2) By unconditionally calling resize(), op_call used to truncate the
    13567         register file when calling a function whose registers fit wholly within
    13568         the register file already allocated by its caller.
    13569        
    13570         sunspider --squirrelfish reports no regression.
    13571        
    13572         I also threw in a little extra formatting to dumpCallFrame, because it
    13573         helped me debug these issues.
    13574 
    13575         * VM/Machine.cpp:
    13576         (KJS::Machine::dumpRegisters):
    13577         (KJS::Machine::execute):
    13578         (KJS::Machine::privateExecute):
    13579         * VM/RegisterFile.h:
    13580         (KJS::RegisterFile::shrink):
    13581         (KJS::RegisterFile::grow):
    13582         * VM/RegisterFileStack.cpp:
    13583         (KJS::RegisterFileStack::popRegisterFile):
    13584 
    13585 2008-04-09  Geoffrey Garen  <[email protected]>
    13586 
    13587         Reviewed by Oliver Hunt.
    13588 
    13589         Next step toward re-entrant execution of function code (global code ->
    13590         built-in function -> JS function):
    13591        
    13592         Made op_ret return from Machine::privateExecute if its calling codeBlock
    13593         is NULL.
    13594        
    13595         I'm checking this in by itself to demonstrate that a more clever
    13596         mechanism is not necessary for performance.
    13597        
    13598         sunspider --squirrelfish reports no regression.
    13599 
    13600         * ChangeLog:
    13601         * VM/Machine.cpp:
    13602         (KJS::Machine::execute):
    13603         (KJS::Machine::privateExecute):
    13604 
    13605 2008-04-09  Geoffrey Garen  <[email protected]>
    13606 
    13607         Reviewed by Maciej Stachowiak.
    13608 
    13609         Next step toward re-entrant execution of function code (global code ->
    13610         built-in function -> JS function):
    13611        
    13612         Made Machine::execute return a value.
    13613        
    13614         Sketched out some code for Machine::execute for functions -- still
    13615         doesn't work yet, though.
    13616 
    13617         sunspider --squirrelfish reports no regression.
    13618 
    13619         * VM/Machine.cpp:
    13620         (KJS::Machine::execute):
    13621         (KJS::Machine::privateExecute):
    13622         * VM/Machine.h:
    13623         * kjs/interpreter.cpp:
    13624         (KJS::Interpreter::evaluate):
    13625         * kjs/testkjs.cpp:
    13626         (runWithScripts):
    13627 
    13628 2008-04-09  Geoffrey Garen  <[email protected]>
    13629 
    13630         Reviewed by Sam Weinig.
    13631        
    13632         First step toward re-entrant execution of function code (global code ->
    13633         built-in function -> JS function):
    13634        
    13635         Tiny bit of refactoring in the Machine class.
    13636 
    13637         sunspider --squirrelfish reports no regression.
    13638 
    13639         * VM/Machine.cpp:
    13640         (KJS::Machine::dumpRegisters):
    13641         (KJS::Machine::unwindCallFrame):
    13642         (KJS::Machine::execute):
    13643         (KJS::Machine::privateExecute):
    13644         * VM/Machine.h:
    13645         (KJS::Machine::isGlobalCallFrame):
    13646         * kjs/interpreter.cpp:
    13647         (KJS::Interpreter::evaluate):
    13648 
    13649 2008-04-08  Geoffrey Garen  <[email protected]>
    13650 
    13651         Reviewed by Oliver Hunt.
    13652        
    13653         Support for re-entrant execution of global code (global code -> built-in
    13654         function -> global code).
    13655        
    13656         Keep a stack of register files instead of just one. Globals propogate
    13657         between register files as the register files enter and exit the stack.
    13658        
    13659         An activation still uses its own register file's base as its
    13660         registerBase, but the global object uses the register file *stack*'s
    13661         registerBase, which updates dynamically to match the register file at
    13662         the top of the stack.
    13663        
    13664         sunspider --squirrelfish reports no regression.
    13665 
    13666 2008-04-08  Maciej Stachowiak  <[email protected]>
    13667 
    13668         Reviewed by Geoff.
    13669        
    13670         - initial preparatory work for JS constructors
    13671        
    13672         1) Allocate registers for the returnInfo block and "this" value when generating code for
    13673         op_construct. These are not used yet, but the JS branch of op_construct will use them.
    13674        
    13675         2) Adjust argc and argv appropriately for native constructor calls.
    13676        
    13677         3) Assign return value in a more straightforward way in op_ret since this is actually
    13678         a bit faster (and makes up for the allocation of extra registers above).
    13679 
    13680         * VM/CodeGenerator.cpp:
    13681         (KJS::CodeGenerator::emitConstruct):
    13682         * VM/Machine.cpp:
    13683         (KJS::Machine::privateExecute):
    13684 
    13685 2008-04-07  Geoffrey Garen  <[email protected]>
    13686 
    13687         Reviewed by Maciej Stachowiak.
    13688        
    13689         Fixed crashing SunSpider tests.
    13690        
    13691         Let's just pretend this never happened, bokay?
    13692 
    13693         * VM/CodeGenerator.cpp:
    13694         (KJS::CodeGenerator::CodeGenerator):
    13695         * VM/CodeGenerator.h:
    13696         * VM/RegisterFile.cpp:
    13697         (KJS::RegisterFile::addGlobals):
    13698 
    13699 2008-04-07  Geoffrey Garen  <[email protected]>
    13700 
    13701         Reviewed by Oliver Hunt.
    13702        
    13703         Restored dumping of generated code as a command-line switch:
    13704         run-testkjs -d will do it.
    13705 
    13706 2008-04-07  Geoffrey Garen  <[email protected]>
    13707 
    13708         Reviewed by Oliver Hunt.
    13709        
    13710         Next step toward supporting re-entrant evaluation: Moved register file
    13711         maintenance code into a proper "RegisterFile" class.
    13712        
    13713         There's a subtle change to the register file's internal layout: for
    13714         global code / the global object, registerOffset is always 0 now. In
    13715         other words, all register counting starts at 0, not 0 + (number of
    13716         global variables). The helps simplify accounting when the number of
    13717         global variables changes.
    13718 
    13719 2008-04-07  Oliver Hunt  <[email protected]>
    13720 
    13721         Reviewed by Geoff.
    13722 
    13723         Bug 18338: Support exceptions in SquirrelFish <http://bugs.webkit.org/show_bug.cgi?id=18338>
    13724        
    13725         Initial support for exceptions in SquirrelFish, only supports finalisers in the
    13726         simple cases (eg. exceptions and non-goto/return across finaliser boundaries).
    13727         This doesn't add the required exception checks to existing code, it merely adds
    13728         support for throw, catch, and the required stack unwinding.
    13729 
    13730         * VM/CodeBlock.cpp:
    13731         (KJS::CodeBlock::dump):
    13732         (KJS::CodeBlock::getHandlerForVPC):
    13733         * VM/CodeBlock.h:
    13734         * VM/CodeGenerator.cpp:
    13735         (KJS::CodeGenerator::emitCatch):
    13736         (KJS::CodeGenerator::emitThrow):
    13737         * VM/CodeGenerator.h:
    13738         * VM/JSPropertyNameIterator.cpp:
    13739         (KJS::JSPropertyNameIterator::create):
    13740         * VM/Machine.cpp:
    13741         (KJS::prepareException):
    13742         (KJS::Machine::unwindCallFrame):
    13743         (KJS::Machine::throwException):
    13744         (KJS::Machine::privateExecute):
    13745         * VM/Machine.h:
    13746         * VM/Opcode.h:
    13747         * kjs/nodes.cpp:
    13748         (KJS::ThrowNode::emitCode):
    13749         (KJS::TryNode::emitCode):
    13750         * kjs/nodes.h:
    13751         * kjs/scope_chain.cpp:
    13752         (KJS::ScopeChain::depth):
    13753         * kjs/scope_chain.h:
    13754 
    13755 2008-04-06  Geoffrey Garen  <[email protected]>
    13756 
    13757         Reviewed by Oliver Hunt.
    13758        
    13759         First step toward supporting re-entrant evaluation: Switch register
    13760         clients from using "registers", a pointer to a register vector, to
    13761         "registerBase", an indirect pointer to the logical first entry in the
    13762         register file. (The logical first entry is the first entry that is not
    13763         a global variable).
    13764        
    13765         With a vector, offsets into the register file remain good when the
    13766         underlying buffer reallocates, but they go bad when the logical
    13767         first entry moves. (The logical first entry moves when new global
    13768         variables get added to the beginning of the register file.) With an
    13769         indirect pointer to the logical first entry, offsets will remain good
    13770         regardless.
    13771 
    13772         1.4% speedup on sunspider --squirrelfish. I suspect this is due to
    13773         reduced allocation when creating closures, and reduced indirection
    13774         through the register vector.
    13775 
    13776         * wtf/Vector.h: Added an accessor for an indirect pointer to the vector's
    13777         buffer, which we currently use (incorrectly) for registerBase. This is
    13778         temporary scaffolding to allow us to change client code without
    13779         changing behavior.
    13780 
    13781 2008-04-06  Sam Weinig  <[email protected]>
    13782 
    13783         Reviewed by Oliver Hunt.
    13784 
    13785         Implement codegen for ReadModifyDotNode.
    13786 
    13787         * kjs/nodes.cpp:
    13788         (KJS::ReadModifyDotNode::emitCode):
    13789         * kjs/nodes.h:
    13790 
    13791 2008-04-06  Sam Weinig  <[email protected]>
    13792 
    13793         Reviewed by Oliver Hunt.
    13794 
    13795         Fix codegen for PostIncDotNode and implement codegen for PostIncBracketNode,
    13796         PostDecBracketNode and PostDecDotNode.
    13797 
    13798         * kjs/nodes.cpp:
    13799         (KJS::PostIncBracketNode::emitCode):
    13800         (KJS::PostDecBracketNode::emitCode):
    13801         (KJS::PostIncDotNode::emitCode):
    13802         (KJS::PostDecDotNode::emitCode):
    13803         * kjs/nodes.h:
    13804 
    13805 2008-04-06  Sam Weinig  <[email protected]>
    13806 
    13807         Reviewed by Geoffrey Garen.
    13808 
    13809         Implement codegen for PreDecResolveNode, PreIncBracketNode, PreDecBracketNode,
    13810         PreIncDotNode and PreDecDotNode.  This required adding one new op code, op_pre_dec.
    13811 
    13812         * VM/CodeBlock.cpp:
    13813         (KJS::CodeBlock::dump):
    13814         * VM/CodeGenerator.cpp:
    13815         (KJS::CodeGenerator::emitPreDec):
    13816         * VM/CodeGenerator.h:
    13817         * VM/Machine.cpp:
    13818         (KJS::Machine::privateExecute):
    13819         * VM/Opcode.h:
    13820         * kjs/nodes.cpp:
    13821         (KJS::PreDecResolveNode::emitCode):
    13822         (KJS::PreIncBracketNode::emitCode):
    13823         (KJS::PreDecBracketNode::emitCode):
    13824         (KJS::PreIncDotNode::emitCode):
    13825         (KJS::PreDecDotNode::emitCode):
    13826         * kjs/nodes.h:
    13827 
    13828 2008-04-06  Geoffrey Garen  <[email protected]>
    13829 
    13830         Reviewed by Sam Weinig.
    13831        
    13832         Improved register dumping, plus a liberal smattering of "const". Here's
    13833         what the new format looks like:
    13834 
    13835         (gdb) call (void)dumpCallFrame(codeBlock, scopeChain, registers->begin(), r)
    13836         4 instructions; 48 bytes at 0x509210; 3 locals (2 parameters); 1 temporaries
    13837 
    13838         [   0] load             lr1, undefined(@k0)
    13839         [   3] load             lr1, 2(@k1)
    13840         [   6] add              tr0, lr2, lr1
    13841         [  10] ret              tr0
    13842 
    13843         Constants:
    13844           k0 = undefined
    13845           k1 = 2
    13846 
    13847         Register frame:
    13848 
    13849         ----------------------------------------
    13850              use      |   address  |    value   
    13851         ----------------------------------------
    13852         [return info] |   0x80ac08 |   0x5081c0
    13853         [return info] |   0x80ac0c |   0x508e90
    13854         [return info] |   0x80ac10 |   0x504acc
    13855         [return info] |   0x80ac14 |        0x2
    13856         [return info] |   0x80ac18 |        0x0
    13857         [return info] |   0x80ac1c |        0x7
    13858         [return info] |   0x80ac20 |        0x0
    13859         ----------------------------------------
    13860         [param]       |   0x80ac24 |        0x1
    13861         [param]       |   0x80ac28 |        0x7
    13862         [var]         |   0x80ac2c |        0xb
    13863         [temp]        |   0x80ac30 |        0xf
    13864 
    13865 2008-04-06  Geoffrey Garen  <[email protected]>
    13866 
    13867         Reviewed by Sam Weinig.
    13868 
    13869         Support for evaluating multiple scripts in the same global environment.
    13870         (Still don't support re-entrant evaluation yet.)
    13871 
    13872         The main changes here are:
    13873 
    13874         (1) Obey the ECMA 10.1.3 rules regarding how to resolve collisions when
    13875         a given symbol is declared more than once. (This patch fixes the same
    13876         issue for function code, too.)
    13877        
    13878         (2) In the case of var and/or function collisions, reuse the existing
    13879         storage slot. For global code, this is required for previously
    13880         generated instructions to continue to work. For function code, it's
    13881         more of a "nice to have": it makes register layout in the case of
    13882         collisions easier to understand, and has the added benefit of saving
    13883         memory.
    13884        
    13885         (3) Allocate slots in the CodeGenerator's m_locals vector in parallel
    13886         to register indexes in the symbol table. This ensures that, given an
    13887         index in the symbol table, we can find the corresponding RegisterID
    13888         without hashing, which speeds up codegen.
    13889        
    13890         I moved responsibility for emitting var and function initialization
    13891         instructions into the CodeGenerator, because bookkeeping in cases where
    13892         var, function, and/or parameter names collide requires a lot of
    13893         internal knowledge about the CodeGenerator.
    13894 
    13895         * VM/CodeGenerator.cpp:
    13896         (KJS::CodeGenerator::addVar): Removed responsibility for checking whether
    13897         a var declaration overwrites "arguments", because the check is
    13898         inappropriate for global code, which may not have a pre-existing
    13899         "arguments" symbol in scope. Also changed this function to return a
    13900         boolean indicating whether addVar actually created a new RegisterID,
    13901         or just reused an old one.
    13902        
    13903         (KJS::CodeGenerator::CodeGenerator): Split out the constructors for
    13904         function code and global code, since they're quite different now.
    13905        
    13906         (KJS::CodeGenerator::registerForLocal): This function does its job
    13907         without any hashing now.
    13908        
    13909         * VM/Machine.cpp: Move old globals and update "r" before executing a
    13910         new script. That way, old globals stay at a constant offset from "r",
    13911         and previously optimized code still works.
    13912        
    13913         * VM/RegisterID.h: Added the ability to allocate a RegisterID before
    13914         initializing its index field. We use this for parameters now.
    13915 
    13916         * kjs/JSVariableObject.h:
    13917         (KJS::JSVariableObject::symbolTableGet): Changed the ungettable getter
    13918         ASSERT to account for the fact that symbol indexes are all negative.
    13919 
    13920 2008-04-05  Sam Weinig  <[email protected]>
    13921 
    13922         Reviewed by Geoffrey Garen.
    13923 
    13924         Implement codegen for InNode.
    13925 
    13926         * VM/CodeBlock.cpp:
    13927         (KJS::CodeBlock::dump):
    13928         * VM/CodeGenerator.cpp:
    13929         (KJS::CodeGenerator::emitIn):
    13930         * VM/CodeGenerator.h:
    13931         * VM/Machine.cpp:
    13932         (KJS::Machine::privateExecute):
    13933         * VM/Opcode.h:
    13934         * kjs/nodes.cpp:
    13935         (KJS::InNode::emitCode):
    13936         * kjs/nodes.h:
    13937 
    13938 2008-04-05  Sam Weinig  <[email protected]>
    13939 
    13940         Reviewed by Oliver Hunt.
    13941 
    13942         - Implement codegen for DeleteResolveNode, DeleteBracketNode, DeleteDotNode and DeleteValueNode.
    13943 
    13944         * VM/CodeBlock.cpp:
    13945         (KJS::CodeBlock::dump):
    13946         * VM/CodeGenerator.cpp:
    13947         (KJS::CodeGenerator::emitGetPropId):
    13948         (KJS::CodeGenerator::emitPutPropId):
    13949         (KJS::CodeGenerator::emitDeletePropId):
    13950         (KJS::CodeGenerator::emitDeletePropVal):
    13951         (KJS::CodeGenerator::emitPutPropIndex):
    13952         * VM/CodeGenerator.h:
    13953         * VM/Machine.cpp:
    13954         (KJS::Machine::privateExecute):
    13955         * VM/Opcode.h:
    13956         * kjs/nodes.cpp:
    13957         (KJS::DeleteResolveNode::emitCode):
    13958         (KJS::DeleteBracketNode::emitCode):
    13959         (KJS::DeleteDotNode::emitCode):
    13960         (KJS::DeleteValueNode::emitCode):
    13961         * kjs/nodes.h:
    13962 
    13963 2008-04-04  Sam Weinig  <[email protected]>
    13964 
    13965         Reviewed by Oliver Hunt.
    13966 
    13967         - Implement codegen for Switch statements.
    13968 
    13969         * VM/CodeGenerator.cpp:
    13970         (KJS::CodeGenerator::pushJumpContext):
    13971         (KJS::CodeGenerator::popJumpContext):
    13972         (KJS::CodeGenerator::jumpContextForLabel):
    13973         * VM/CodeGenerator.h:
    13974         Rename LoopContext to JumpContext now that it used of Switch statements in addition
    13975         to loops.
    13976 
    13977         * kjs/nodes.cpp:
    13978         (KJS::DoWhileNode::emitCode):
    13979         (KJS::WhileNode::emitCode):
    13980         (KJS::ForNode::emitCode):
    13981         (KJS::ForInNode::emitCode):
    13982         (KJS::ContinueNode::emitCode):
    13983         (KJS::BreakNode::emitCode):
    13984         (KJS::CaseBlockNode::emitCodeForBlock):
    13985         (KJS::SwitchNode::emitCode):
    13986         * kjs/nodes.h:
    13987         (KJS::CaseClauseNode::expr):
    13988         (KJS::CaseClauseNode::children):
    13989         (KJS::CaseBlockNode::):
    13990 
    13991 2008-04-03  Maciej Stachowiak  <[email protected]>
    13992 
    13993         Reviewed by Sam.
    13994        
    13995         - fix crash in codegen from new nodes
    13996 
    13997         * VM/CodeGenerator.cpp:
    13998         (KJS::CodeGenerator::emitConstruct):
    13999         * kjs/nodes.h:
    14000 
    14001 2008-04-03  Maciej Stachowiak  <[email protected]>
    14002 
    14003         Reviewed by Geoff.
    14004 
    14005         * kjs/nodes.cpp:
    14006         (KJS::ReadModifyResolveNode::emitCode):
    14007         (KJS::ReadModifyBracketNode::emitCode):
    14008         * kjs/nodes.h:
    14009 
    14010 2008-04-02  Maciej Stachowiak  <[email protected]>
    14011 
    14012         Reviewed by Geoff.
    14013        
    14014         - take a shot at marking constant pools for global and eval code
    14015        
    14016         Geoff says this won't really work in all cases but is an ok stopgap.
    14017 
    14018         * kjs/JSGlobalObject.cpp:
    14019         (KJS::JSGlobalObject::mark):
    14020 
    14021 2008-04-02  Maciej Stachowiak  <[email protected]>
    14022 
    14023         Reviewed by Geoff.
    14024        
    14025         - fix 2x perf regression in 3d-morph
    14026        
    14027         * VM/Machine.cpp:
    14028         (KJS::Machine::privateExecute): If we subbed in null for the global object,
    14029         don't toObject it, since that will throw an exception (very slowly).
    14030 
    14031 2008-04-02  Maciej Stachowiak  <[email protected]>
    14032 
    14033         Rubber stamped by Geoff
    14034        
    14035         - fix Release build
    14036 
    14037         * kjs/nodes.cpp:
    14038         (KJS::getNonLocalSymbol):
    14039 
    14040 2008-04-02  Geoffrey Garen  <[email protected]>
    14041 
    14042         Reviewed by Oliver Hunt.
    14043        
    14044         Removed the last vestiges of LocalStorage from JSVariableObject and
    14045         JSGlobalObject.
    14046 
    14047         * kjs/JSGlobalObject.cpp:
    14048         (KJS::JSGlobalObject::saveLocalStorage): Save and restore from/to
    14049         registers. Use stub isReadOnly and isDontEnum methods for now, until
    14050         we really implement attributes in the symbol table.
    14051         (KJS::JSGlobalObject::restoreLocalStorage):
    14052         (KJS::JSGlobalObject::reset):
    14053 
    14054         * kjs/JSVariableObject.cpp:
    14055         (KJS::JSVariableObject::getPropertyNames): Use stub isDontEnum method
    14056         for now, as above.
    14057         (KJS::JSVariableObject::getPropertyAttributes): ditto
    14058 
    14059         * kjs/JSVariableObject.h: Removed LocalStorage from JSVariableObjectData.
    14060         Removed mark method, because subclasses implement different strategies for
    14061         marking registers.
    14062         (KJS::JSVariableObject::isReadOnly): Stub method
    14063         (KJS::JSVariableObject::isDontEnum): ditto
    14064 
    14065         Changed the code below to ASSERT_NOT_REACHED() and return 0, since it
    14066         can no longer retrieve LocalStorage from the ExecState. (Eventually,
    14067         we'll just remove this code and all its friends, but that's a task for
    14068         later.)
    14069        
    14070         * kjs/ExecState.cpp:
    14071         (KJS::ExecState::ExecState):
    14072         * kjs/function.cpp:
    14073         (KJS::ActivationImp::markChildren):
    14074         * kjs/function.h:
    14075         * kjs/nodes.cpp:
    14076         (KJS::getNonLocalSymbol):
    14077         (KJS::ScopeNode::optimizeVariableAccess):
    14078         (KJS::ProgramNode::processDeclarations):
    14079 
    14080 2008-04-01  Geoffrey Garen  <[email protected]>
    14081 
    14082         Reviewed by Maciej Stachowiak.
    14083        
    14084         Got globals?
    14085        
    14086         To get things working, I had to roll out
    14087         http://trac.webkit.org/projects/webkit/changeset/31226 for the time
    14088         being.
    14089 
    14090         * VM/CodeBlock.h: Removed obsolete function.
    14091        
    14092         * VM/Machine.cpp:
    14093         (KJS::Machine::privateExecute): For the sake of re-entrancy, we track
    14094         and restore the global object's old rOffset value. (No way to test this
    14095         yet, but I think it will work.)
    14096 
    14097 2008-04-01  Maciej Stachowiak  <[email protected]>
    14098 
    14099         Reviewed by Geoff.
    14100        
    14101         - mark the constant pool (at least for function code blocks)
    14102 
    14103         * VM/CodeBlock.cpp:
    14104         (KJS::CodeBlock::mark):
    14105         * VM/CodeBlock.h:
    14106         * kjs/function.cpp:
    14107         (KJS::FunctionImp::mark):
    14108         * kjs/nodes.cpp:
    14109         (KJS::ScopeNode::mark):
    14110         * kjs/nodes.h:
    14111         (KJS::FuncExprNode::body):
    14112         (KJS::FuncDeclNode::body):
    14113 
    14114 2008-04-01  Geoffrey Garen  <[email protected]>
    14115 
    14116         Reviewed by Beth Dakin.
    14117        
    14118         Cleaned up a few loose ends.
    14119 
    14120         * JavaScriptCore.exp: Export dumpRegisters, so it's visible to gdb even
    14121         if we don't explicitly call it in the source text.
    14122 
    14123         * VM/Machine.cpp:
    14124         (KJS::Machine::privateExecute): No need to call dumpRegisters anymore,
    14125         since that was just a hack for gdb's sake.
    14126 
    14127         * kjs/JSActivation.h: Removed obsolete comment.
    14128 
    14129         * VM/CodeGenerator.cpp: Added ASSERTs to verify that the localCount
    14130         we're given matches the number of locals actually allocated.
    14131 
    14132         * VM/CodeGenerator.h:
    14133         (KJS::CodeGenerator::CodeGenerator): Changed "localCount" to include
    14134         the parameter count, since we're using the word "local" to mean
    14135         parameter, var, function, or "this". Renamed "m_nextLocal" to
    14136         "m_nextVar", since "m_nextLocal" doesn't contrast well with
    14137         "m_nextParameter".
    14138        
    14139         Also moved tracking of implicit "this" parameter from here...
    14140 
    14141         * kjs/nodes.cpp:
    14142         (KJS::FunctionBodyNode::generateCode): ... to here
    14143         (KJS::ProgramNode::generateCode): ... and here
    14144 
    14145         * VM/CodeBlock.cpp:
    14146         (KJS::CodeBlock::dump): Added missing "\n".
    14147 
    14148 2008-04-01  Cameron Zwarich  <[email protected]>
    14149 
    14150         Reviewed by Oliver.
    14151 
    14152         Bug 18274: ResolveNode::emitCode() doesn't make a new temporary when dst
    14153                    is 0, leading to incorrect codegen
    14154         <http://bugs.webkit.org/show_bug.cgi?id=18274>
    14155 
    14156         * kjs/nodes.cpp:
    14157         (KJS::FunctionCallBracketNode::emitCode):
    14158         (KJS::FunctionCallDotNode::emitCode):
    14159 
    14160 2008-04-01  Maciej Stachowiak  <[email protected]>
    14161 
    14162         Reviewed by Oliver.
    14163        
    14164         - fix bug in for..in codegen (gotta use ident, not m_ident)
    14165 
    14166         * kjs/nodes.cpp:
    14167         (KJS::ForInNode::emitCode):
    14168 
    14169 2008-04-01  Maciej Stachowiak  <[email protected]>
    14170 
    14171         Reviewed by Oliver.
    14172        
    14173         - Add suport for regexp literals
    14174 
    14175         * VM/CodeBlock.cpp:
    14176         (KJS::regexpToSourceString):
    14177         (KJS::regexpName):
    14178         (KJS::CodeBlock::dump):
    14179         * VM/CodeBlock.h:
    14180         * VM/CodeGenerator.cpp:
    14181         (KJS::CodeGenerator::addRegExp):
    14182         (KJS::CodeGenerator::emitNewRegExp):
    14183         * VM/CodeGenerator.h:
    14184         * VM/Machine.cpp:
    14185         (KJS::Machine::privateExecute):
    14186         * VM/Opcode.h:
    14187         * kjs/nodes.cpp:
    14188         (KJS::RegExpNode::emitCode):
    14189         * kjs/nodes.h:
    14190 
    14191 2008-04-01  Oliver Hunt  <[email protected]>
    14192 
    14193         Reviewed by Geoff
    14194 
    14195         Add support for for..in nodes
    14196        
    14197         Added two new opcodes to get_pnames and next_pname to handle iterating
    14198         over the set of properties on an object.  This iterator is explicitly
    14199         invalidated and the property name array is released on standard exit
    14200         from the loop, otherwise we rely on GC to do the clean up for us.
    14201 
    14202         * JavaScriptCore.xcodeproj/project.pbxproj:
    14203         * VM/CodeBlock.cpp:
    14204         (KJS::CodeBlock::dump):
    14205         * VM/CodeGenerator.cpp:
    14206         (KJS::CodeGenerator::emitNextPropertyName):
    14207         (KJS::CodeGenerator::emitGetPropertyNames):
    14208         * VM/CodeGenerator.h:
    14209         * VM/JSPropertyNameIterator.cpp: Added.
    14210         (KJS::JSPropertyNameIterator::JSPropertyNameIterator):
    14211         (KJS::JSPropertyNameIterator::type):
    14212         (KJS::JSPropertyNameIterator::toPrimitive):
    14213         (KJS::JSPropertyNameIterator::getPrimitiveNumber):
    14214         (KJS::JSPropertyNameIterator::toBoolean):
    14215         (KJS::JSPropertyNameIterator::toNumber):
    14216         (KJS::JSPropertyNameIterator::toString):
    14217         (KJS::JSPropertyNameIterator::toObject):
    14218         (KJS::JSPropertyNameIterator::mark):
    14219         (KJS::JSPropertyNameIterator::next):
    14220         (KJS::JSPropertyNameIterator::invalidate):
    14221         (KJS::JSPropertyNameIterator::~JSPropertyNameIterator):
    14222         (KJS::JSPropertyNameIterator::create):
    14223         * VM/JSPropertyNameIterator.h: Added.
    14224         * VM/Machine.cpp:
    14225         (KJS::Machine::privateExecute):
    14226         * VM/Opcode.h:
    14227         * VM/Register.h:
    14228         (KJS::Register::):
    14229         * kjs/PropertyNameArray.h:
    14230         * kjs/nodes.cpp:
    14231         (KJS::ForInNode::emitCode):
    14232         * kjs/nodes.h:
    14233         * kjs/value.h:
    14234 
    14235 2008-04-01  Cameron Zwarich  <[email protected]>
    14236 
    14237         Reviewed by Maciej.
    14238 
    14239         Change CodeGenerator::emitCall() so it increments the reference count of
    14240         registers passed to it, and change its callers so they don't needlessly
    14241         increment the reference count of the registers they are passing.
    14242 
    14243         * VM/CodeGenerator.cpp:
    14244         (KJS::CodeGenerator::emitCall):
    14245         * kjs/nodes.cpp:
    14246         (KJS::FunctionCallResolveNode::emitCode):
    14247         (KJS::FunctionCallDotNode::emitCode):
    14248 
    14249 2008-04-01  Maciej Stachowiak  <[email protected]>
    14250 
    14251         Reviewed by Oliver.
    14252        
    14253         - generate call for PostIncDotNode
    14254 
    14255         * kjs/nodes.cpp:
    14256         (KJS::PostIncDotNode::emitCode):
    14257         * kjs/nodes.h:
    14258 
    14259 2008-04-01  Maciej Stachowiak  <[email protected]>
    14260 
    14261         Build fix.
    14262        
    14263         - fix build (not sure how this ever worked?)
    14264 
    14265         * kjs/nodes.cpp:
    14266         (KJS::FunctionCallBracketNode::emitCode):
    14267 
    14268 2008-04-01  Maciej Stachowiak  <[email protected]>
    14269 
    14270         Reviewed by Geoff.
    14271        
    14272         - generate code for FunctionCallBracketNode
    14273 
    14274         * kjs/nodes.cpp:
    14275         (KJS::FunctionCallBracketNode::emitCode):
    14276         * kjs/nodes.h:
    14277 
    14278 2008-04-01  Maciej Stachowiak  <[email protected]>
    14279 
    14280         Reviewed by Geoff.
    14281        
    14282         - Fix two crashing SunSpider tests
    14283 
    14284         * VM/Machine.cpp:
    14285         (KJS::Machine::privateExecute): set up 'this' properly for native calls.
    14286         * kjs/list.h:
    14287         (KJS::List::List): Fix intialization of buffer and size from
    14288         vector, the initialization order was wrong.
    14289 
    14290 2008-04-01  Geoffrey Garen  <[email protected]>
    14291 
    14292         Build fix: marked ASSERT-only variables as UNUSED_PARAMs.
    14293 
    14294         * VM/Machine.cpp:
    14295         (KJS::Machine::privateExecute):
    14296         * kjs/JSVariableObject.h:
    14297         (KJS::JSVariableObject::symbolTableInitializeVariable):
    14298 
    14299 2008-04-01  Geoffrey Garen  <[email protected]>
    14300 
    14301         Reviewed by Oliver Hunt.
    14302        
    14303         Next step toward global code: Moved get, put, and initializeVariable
    14304         functionality up into JSVariableObject, and changed JSActivation to
    14305         rely on it.
    14306 
    14307         * kjs/JSActivation.cpp:
    14308         (KJS::JSActivation::JSActivation):
    14309         (KJS::JSActivation::getOwnPropertySlot):
    14310         (KJS::JSActivation::put):
    14311         (KJS::JSActivation::initializeVariable):
    14312         * kjs/JSVariableObject.h:
    14313         (KJS::JSVariableObject::valueAt):
    14314         (KJS::JSVariableObject::isReadOnly):
    14315         (KJS::JSVariableObject::symbolTableGet):
    14316         (KJS::JSVariableObject::symbolTablePut):
    14317         (KJS::JSVariableObject::symbolTableInitializeVariable):
    14318 
    14319 2008-04-01  Maciej Stachowiak  <[email protected]>
    14320 
    14321         Reviewed by Sam.
    14322        
    14323         - fix HashTable assertion on some SunSpider tests
    14324        
    14325         Don't use -1 as the deleted value for JSValue*-keyed hashtables,
    14326         since it is a valid value (it's the immediate for -1).
    14327 
    14328         * VM/CodeGenerator.h:
    14329         (KJS::CodeGenerator::JSValueHashTraits::emptyValue):
    14330         (KJS::CodeGenerator::JSValueHashTraits::deletedValue):
    14331         * kjs/JSImmediate.h:
    14332         (KJS::JSImmediate::impossibleValue):
    14333 
    14334 2008-04-01  Sam Weinig  <[email protected]>
    14335 
    14336         Reviewed by Maciej Stachowiak.
    14337 
    14338         Add support for calling Native constructors like new Array().
    14339 
    14340         * VM/CodeBlock.cpp:
    14341         (KJS::CodeBlock::dump):
    14342         * VM/CodeGenerator.cpp:
    14343         (KJS::CodeGenerator::emitConstruct):
    14344         * VM/CodeGenerator.h:
    14345         * VM/Machine.cpp:
    14346         (KJS::Machine::privateExecute):
    14347         * VM/Opcode.h:
    14348         * kjs/nodes.cpp:
    14349         (KJS::NewExprNode::emitCode):
    14350         * kjs/nodes.h:
    14351 
    14352 2008-04-01  Maciej Stachowiak  <[email protected]>
    14353 
    14354         Reviewed by Sam.
    14355        
    14356         - add some missing toOpbject calls to avoid crashing when calling methods on primitives
    14357 
    14358         * VM/Machine.cpp:
    14359         (KJS::Machine::privateExecute):
    14360 
    14361 2008-04-01  Geoffrey Garen  <[email protected]>
    14362 
    14363         Reviewed by Oliver Hunt.
    14364        
    14365         Changed Machine::dumpRegisters to take a pointer instead of a reference,
    14366         so gdb understands how to call it.
    14367 
    14368         * VM/Machine.cpp:
    14369         (KJS::Machine::dumpRegisters):
    14370         (KJS::Machine::privateExecute):
    14371         * VM/Machine.h:
    14372 
    14373 2008-03-31  Cameron Zwarich  <[email protected]>
    14374 
    14375         Reviewed by Maciej.
    14376 
    14377         Fix CodeGenerator::addConstant() so it uses the functionExpressions
    14378         counter for function expressions, not the functions counter.
    14379 
    14380         * VM/CodeGenerator.cpp:
    14381         (KJS::CodeGenerator::addConstant):
    14382 
    14383 2008-03-31  Sam Weinig  <[email protected]>
    14384 
    14385         Reviewed by Geoffrey Garen.
    14386 
    14387         Add emitCode support for TypeOfResolveNode and TypeOfValueNode.
    14388         Added new opcode op_type_of to handle them.
    14389 
    14390         * VM/CodeBlock.cpp:
    14391         (KJS::CodeBlock::dump):
    14392         * VM/CodeGenerator.cpp:
    14393         (KJS::CodeGenerator::emitNot):
    14394         (KJS::CodeGenerator::emitInstanceOf):
    14395         (KJS::CodeGenerator::emitTypeOf):
    14396         * VM/CodeGenerator.h:
    14397         * VM/Machine.cpp:
    14398         (KJS::jsTypeStringForValue):
    14399         (KJS::Machine::privateExecute):
    14400         * VM/Opcode.h:
    14401         * kjs/nodes.cpp:
    14402         (KJS::TypeOfResolveNode::emitCode):
    14403         (KJS::TypeOfValueNode::emitCode):
    14404         * kjs/nodes.h:
    14405 
    14406 2008-03-31  Sam Weinig  <[email protected]>
    14407 
    14408         Reviewed by Oliver Hunt.
    14409 
    14410         Fix non-computed goto version of isOpcode. op_end is a valid opcode.
    14411 
    14412         * VM/Machine.cpp:
    14413         (KJS::Machine::isOpcode):
    14414 
    14415 2008-03-31  Geoffrey Garen  <[email protected]>
    14416 
    14417         Reviewed by Maciej Stachowiak.
    14418        
    14419         Added op_post_dec.
    14420 
    14421 2008-03-31  Cameron Zwarich  <[email protected]>
    14422 
    14423         Reviewed by Geoffrey Garen.
    14424 
    14425         Add support for FunctionCallDotNode.
    14426 
    14427         * kjs/nodes.cpp:
    14428         (KJS::FunctionCallDotNode::emitCode):
    14429         * kjs/nodes.h:
    14430 
    14431 2008-03-31  Geoffrey Garen  <[email protected]>
    14432 
    14433         Reviewed by Beth Dakin.
    14434 
    14435         Next step toward global code: Removed more obsolete API, moved
    14436         saveLocalStorage and restoreLocalStorage to JSGlobalObject subclass,
    14437         since it's only intended for use there.
    14438        
    14439         * ChangeLog:
    14440         * JavaScriptCore.exp:
    14441         * kjs/Activation.h:
    14442         * kjs/JSGlobalObject.cpp:
    14443         (KJS::JSGlobalObject::saveLocalStorage):
    14444         (KJS::JSGlobalObject::restoreLocalStorage):
    14445         * kjs/JSGlobalObject.h:
    14446         * kjs/JSVariableObject.cpp:
    14447         * kjs/JSVariableObject.h:
    14448         (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData):
    14449         * kjs/function.cpp:
    14450         (KJS::ActivationImp::ActivationImp):
    14451 
    14452 2008-03-31  Geoffrey Garen  <[email protected]>
    14453 
    14454         Reviewed by Beth Dakin.
    14455 
    14456         Next step toward global code: subclass JSActivation + JSActivationData
    14457         from JSVariableObject + JSVariableObjectData.
    14458        
    14459         JSActivation now relies on JSVariableObject for access to registers and
    14460         symbol table, and for some delete functionality, but not for anything
    14461         else yet.
    14462 
    14463         (KJS::JSActivation::mark): Cleaned up the style here a little bit.
    14464 
    14465 2008-03-31  Geoffrey Garen  <[email protected]>
    14466 
    14467         Reviewed by Beth Dakin.
    14468        
    14469         Next step toward global code: store "rOffset" in JSVariableObjectData.
    14470 
    14471         * kjs/JSGlobalObject.h:
    14472         (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
    14473         * kjs/JSVariableObject.h:
    14474         (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData):
    14475 
    14476 2008-03-31  Geoffrey Garen  <[email protected]>
    14477 
    14478         Reviewed by Maciej Stachowiak.
    14479        
    14480         Next steps toward global code:
    14481        
    14482         * Moved access to the register file into JSVariableObject.
    14483        
    14484         * Added more ASSERTs to indicate obsolete APIs there are just hanging
    14485         around to stave off build failures.
    14486 
    14487         * kjs/JSGlobalObject.h:
    14488         (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
    14489         * kjs/JSVariableObject.h:
    14490         (KJS::JSVariableObject::registers):
    14491         (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData):
    14492         (KJS::JSVariableObject::JSVariableObject):
    14493 
    14494 2008-03-31  Sam Weinig  <[email protected]>
    14495 
    14496         Reviewed by Oliver. Tweaked somewhat by Maciej.
    14497        
    14498         - implement codegen for ReadModifyResolveNode
    14499 
    14500         * kjs/nodes.cpp:
    14501         (KJS::emitReadModifyAssignment):
    14502         (KJS::ReadModifyResolveNode::emitCode):
    14503         * kjs/nodes.h:
    14504 
    14505 2008-03-31  Cameron Zwarich  <[email protected]>
    14506 
    14507         Reviewed by Geoff.
    14508 
    14509         Fix the build -- r31492 removed activation tear-off, but r31493 used it.
    14510 
    14511         * kjs/nodes.cpp:
    14512         (KJS::FuncExprNode::makeFunction):
    14513 
    14514 2008-03-31  Cameron Zwarich  <[email protected]>
    14515 
    14516         Reviewed by Maciej.
    14517 
    14518         Add support for FuncExprNode to SquirrelFish.
    14519 
    14520         * VM/CodeBlock.cpp:
    14521         (KJS::CodeBlock::dump):
    14522         * VM/CodeBlock.h:
    14523         * VM/CodeGenerator.cpp:
    14524         (KJS::CodeGenerator::addConstant):
    14525         (KJS::CodeGenerator::emitNewFunctionExpression):
    14526         * VM/CodeGenerator.h:
    14527         * VM/Machine.cpp:
    14528         (KJS::Machine::privateExecute):
    14529         * VM/Opcode.h:
    14530         * kjs/nodes.cpp:
    14531         (KJS::FuncExprNode::emitCode):
    14532         (KJS::FuncExprNode::makeFunction):
    14533         * kjs/nodes.h:
    14534 
    14535 2008-03-31  Geoffrey Garen  <[email protected]>
    14536 
    14537         Reviewed by Maciej Stachowiak.
    14538        
    14539         First step toward global code: removed some obsolete JSGlobalObject
    14540         APIs, changing clients to ASSERT_NOT_REACHED.
    14541        
    14542         Activation tear-off and scope chain pushing is obsolete because we
    14543         statically detect whether an activation + scope node is required.
    14544        
    14545         The variableObject() and activationObject() accessors are obsolete
    14546         because they haven't been maintained, and they're mostly used by
    14547         node evaluation code, anyway.
    14548        
    14549         The localStorage() accessor is obsolete because everything is in
    14550         registers now, and it's mostly used by node evaluation code, anyway.
    14551 
    14552 2008-03-31  Maciej Stachowiak  <[email protected]>
    14553 
    14554         Reviewed by Darin.
    14555        
    14556         - implement codegen for bracket accessor and bracket assign
    14557 
    14558         * VM/CodeBlock.cpp:
    14559         (KJS::CodeBlock::dump):
    14560         * VM/CodeGenerator.cpp:
    14561         (KJS::CodeGenerator::emitGetPropVal):
    14562         (KJS::CodeGenerator::emitPutPropVal):
    14563         * VM/CodeGenerator.h:
    14564         * VM/Machine.cpp:
    14565         (KJS::Machine::privateExecute):
    14566         * VM/Opcode.h:
    14567         * kjs/nodes.cpp:
    14568         (KJS::BracketAccessorNode::emitCode):
    14569         (KJS::AssignBracketNode::emitCode):
    14570         * kjs/nodes.h:
    14571 
    14572 2008-03-31  Geoffrey Garen  <[email protected]>
    14573 
    14574         Not reviewed.
    14575        
    14576         Removed FIXME that I just fixed.
    14577        
    14578         Added ASSERT to cover an error previously only covered by a FIXME.
    14579 
    14580         * kjs/JSActivation.cpp:
    14581         (KJS::JSActivation::getOwnPropertySlot):
    14582 
    14583 2008-03-31  Geoffrey Garen  <[email protected]>
    14584 
    14585         Not reviewed.
    14586 
    14587         Fixed indentation inside op_call. (I had left this code badly indented
    14588         to make the behavior-changing diff clearer.)
    14589 
    14590         * VM/Machine.cpp:
    14591         (KJS::Machine::privateExecute):
    14592 
    14593 2008-03-31  Geoffrey Garen  <[email protected]>
    14594 
    14595         Reviewed by Sam Weinig.
    14596        
    14597         Fixed up logging of jump instructions to follow the following style:
    14598        
    14599         jump    offset(->absoluteTarget)
    14600 
    14601         * VM/CodeBlock.cpp:
    14602         (KJS::CodeBlock::dump):
    14603 
    14604 2008-03-31  Geoffrey Garen  <[email protected]>
    14605 
    14606         Reviewed by Sam Weinig.
    14607        
    14608         Changed the SymbolTable API to use int instead of size_t. It has been
    14609         using int internally for a while now (since squirrelfish symbols can
    14610         have negative indices).
    14611 
    14612 2008-03-31  Cameron Zwarich  <[email protected]>
    14613 
    14614         Reviewed by Maciej.
    14615 
    14616         Add support for FunctionCallValueNode.
    14617 
    14618         * kjs/nodes.cpp:
    14619         (KJS::FunctionCallValueNode::emitCode):
    14620         * kjs/nodes.h:
    14621 
    14622 2008-03-31  Maciej Stachowiak  <[email protected]>
    14623 
    14624         Reviewed by Oliver.
    14625        
    14626         1) Implemented array literals
    14627        
    14628         2) Renamed op_object_get and op_object_put to op_get_prop_id and
    14629         op_put_prop_id in preparation for new variants.
    14630 
    14631         * VM/CodeBlock.cpp:
    14632         (KJS::CodeBlock::dump):
    14633         * VM/CodeGenerator.cpp:
    14634         (KJS::CodeGenerator::emitNewArray):
    14635         (KJS::CodeGenerator::emitGetPropId):
    14636         (KJS::CodeGenerator::emitPutPropId):
    14637         (KJS::CodeGenerator::emitPutPropIndex):
    14638         * VM/CodeGenerator.h:
    14639         (KJS::CodeGenerator::CodeGenerator):
    14640         (KJS::CodeGenerator::propertyNames):
    14641         * VM/Machine.cpp:
    14642         (KJS::Machine::privateExecute):
    14643         * VM/Opcode.h:
    14644         * kjs/nodes.cpp:
    14645         (KJS::ArrayNode::emitCode):
    14646         (KJS::PropertyListNode::emitCode):
    14647         (KJS::DotAccessorNode::emitCode):
    14648         (KJS::PostIncResolveNode::emitCode):
    14649         (KJS::PreIncResolveNode::emitCode):
    14650         (KJS::AssignResolveNode::emitCode):
    14651         (KJS::AssignDotNode::emitCode):
    14652         * kjs/nodes.h:
    14653 
    14654 2008-03-30  Geoffrey Garen  <[email protected]>
    14655 
    14656         Reviewed by Oliver Hunt.
    14657        
    14658         Implemented native function calls. (Re-entering from native code back
    14659         to JS doesn't work yet, though.)
    14660 
    14661         0.2% speedup overall, due to some inlining tweaks. 3.6% regression on
    14662         function-empty.js, since we're making a new virtual call and taking a
    14663         new branch inside every op_call.
    14664        
    14665         I adjusted the JavaScriptCore calling convention to minimize overhead,
    14666         like so:
    14667        
    14668         The machine calls a single virtual function, "getCallData", to get all
    14669         the data it needs for a function call. Native code still uses the old
    14670         "isObject()" check followed by an "implementsCall()" check, which
    14671         aliases to "getCallData". (We can optimize native code to use getCallData
    14672         at our leisure.)
    14673        
    14674         To supply a list of arguments, the machine calls a new List constructor
    14675         that just takes a pointer and a length, without copying. Native code
    14676         still appends to the list one argument at a time. (We can optimize
    14677         native code to use the new List constructor at our leisure.)
    14678 
    14679         * VM/Machine.cpp:
    14680         (KJS::Machine::privateExecute): Changed resize() call to grow() call,
    14681         to encourage the compiler to inline the Vector code.
    14682 
    14683         * kjs/CallData.h: Added.
    14684         (KJS::): CallData is a union because eventually native calls will stuff
    14685         a function pointer into it, to eliminate the callAsFunction virtual call.
    14686 
    14687         * kjs/function.cpp:
    14688         (KJS::FunctionImp::callAsFunction): Changed this to an ASSERT since
    14689         it's not implemented yet.
    14690        
    14691         * kjs/list.h: Made the List class two-faced, to support the old way and
    14692         the new way during this transition phase: lists can be made read-only
    14693         with just a pointer and a legnth, or you can append to them one item
    14694         at a time.
    14695 
    14696         * kjs/value.h:
    14697         (KJS::jsUndefined): Marked this function ALWAYS_INLINE for the benefit
    14698         of a certain compiler that doesn't know what's best for it.
    14699 
    14700 2008-03-30  Maciej Stachowiak  <[email protected]>
    14701 
    14702         Reviewed by Oliver.
    14703 
    14704         Dump code that codegen can't handle yet, so it's easier to prioritize missing nodes.
    14705        
    14706         * kjs/nodes.h:
    14707         (KJS::Node::emitCode):
    14708 
    14709 2008-03-30  Maciej Stachowiak  <[email protected]>
    14710 
    14711         Reviewed by Oliver.
    14712 
    14713         Improve dumping of bytecode and fix coding style accordingly.
    14714        
    14715         Registers are printed as lr1 for locals, tr1 for temp registers. Identifiers print as
    14716         foobar(@id0) and constants print as "foo"(@k1) or 312.4(@k2) or the like. Constant and
    14717         identifier tables are dumped for reference.
    14718        
    14719         * VM/CodeBlock.cpp:
    14720         (KJS::escapeQuotes):
    14721         (KJS::valueToSourceString):
    14722         (KJS::registerName):
    14723         (KJS::constantName):
    14724         (KJS::idName):
    14725         (KJS::printUnaryOp):
    14726         (KJS::printBinaryOp):
    14727         (KJS::CodeBlock::dump):
    14728         * VM/Machine.cpp:
    14729         (KJS::resolve):
    14730         (KJS::resolveBase):
    14731         (KJS::Machine::privateExecute):
    14732 
    14733 2008-03-30  Maciej Stachowiak  <[email protected]>
    14734 
    14735         Reviewed by Oliver.
    14736        
    14737         Implement StringNode and VoidNode (both pretty trivial).
    14738 
    14739         * kjs/nodes.cpp:
    14740         (KJS::StringNode::emitCode):
    14741         (KJS::VoidNode::emitCode):
    14742         * kjs/nodes.h:
    14743 
    14744 2008-03-30  Maciej Stachowiak  <[email protected]>
    14745 
    14746         Reviewed by Sam.
    14747 
    14748         Implement CommaNode.
    14749        
    14750         * kjs/nodes.cpp:
    14751         (KJS::CommaNode::emitCode):
    14752         * kjs/nodes.h:
    14753 
    14754 2008-03-30  Cameron Zwarich  <[email protected]>
    14755 
    14756         Reviewed by Maciej.
    14757 
    14758         Adds support for dot notation and object literals.
    14759 
    14760         * VM/CodeBlock.cpp:
    14761         (KJS::CodeBlock::dump):
    14762         * VM/CodeGenerator.cpp:
    14763         (KJS::CodeGenerator::emitNewObject):
    14764         * VM/CodeGenerator.h:
    14765         * VM/Machine.cpp:
    14766         (KJS::Machine::privateExecute):
    14767         * VM/Opcode.h:
    14768         * kjs/nodes.cpp:
    14769         (KJS::ObjectLiteralNode::emitCode):
    14770         (KJS::PropertyListNode::emitCode):
    14771         (KJS::DotAccessorNode::emitCode):
    14772         (KJS::AssignDotNode::emitCode):
    14773         * kjs/nodes.h:
    14774 
    14775 2008-03-29  Geoffrey Garen  <[email protected]>
    14776 
    14777         Reviewed by Maciej Stachowiak.
    14778        
    14779         Mark the register file.
    14780        
    14781         It's a conservative mark for now, but once registers are typed, we can
    14782         do an exact mark.
    14783        
    14784         1.4% regression regardless of whether we actually do the marking.
    14785         GCC is is worth every penny.
    14786 
    14787         * VM/Machine.cpp:
    14788         (KJS::Machine::privateExecute): Most of the changes here are just for
    14789         the fact that "registers" is a pointer now.
    14790 
    14791         * kjs/JSGlobalObject.cpp: The global object owns the register file now.
    14792 
    14793 2008-03-28  Oliver Hunt  <[email protected]>
    14794 
    14795         Reviewed by Maciej.
    14796 
    14797         Bug 18204: SquirrelFish: continue/break do not correctly handle scope popping
    14798         <http://bugs.webkit.org/show_bug.cgi?id=18204>
    14799 
    14800         We now track the scope depth as part of a loop context, and add an
    14801         extra instruction op_jump_scopes that is used to perform a jump across
    14802         dynamic scope boundaries.
    14803 
    14804         * VM/CodeBlock.cpp:
    14805         (KJS::CodeBlock::dump):
    14806         * VM/CodeGenerator.cpp:
    14807         (KJS::CodeGenerator::emitJumpScopes):
    14808         * VM/CodeGenerator.h:
    14809         * VM/Machine.cpp:
    14810         (KJS::Machine::privateExecute):
    14811         * VM/Opcode.h:
    14812         * kjs/nodes.cpp:
    14813         (KJS::ContinueNode::emitCode):
    14814         (KJS::BreakNode::emitCode):
    14815 
    14816 2008-03-28  Sam Weinig  <[email protected]>
    14817 
    14818         Reviewed by Geoffrey Garen.
    14819 
    14820         Add emitCode support for ConditionalNode.
    14821 
    14822         * kjs/nodes.cpp:
    14823         (KJS::ConditionalNode::emitCode):
    14824         * kjs/nodes.h:
    14825 
    14826 2008-03-28  Geoffrey Garen  <[email protected]>
    14827 
    14828         Reviewed by Oliver Hunt.
    14829        
    14830         Responding to feedback, added some comments, fixed up a few names, and
    14831         clarified that "locals" always means all local variables, functions,
    14832         and parameters.
    14833 
    14834 2008-03-28  Geoffrey Garen  <[email protected]>
    14835 
    14836         Reviewed by Oliver Hunt.
    14837 
    14838         Added support for "this".
    14839        
    14840         Supply an implicit "this" value as the first argument to every function.
    14841         Alias the "this" keyword to that argument.
    14842        
    14843         1% regression overall, 2.5% regression on empty function calls. Seems
    14844         like a reasonable cost for now, since we're doing more work.
    14845         (Eventually, we might decide to create a version of op_call specialized
    14846         for a known null "this" value.)
    14847 
    14848         * VM/CodeBlock.cpp:
    14849         (KJS::CodeBlock::dump):
    14850         * VM/CodeGenerator.cpp:
    14851         (KJS::CodeGenerator::emitCall):
    14852         * VM/CodeGenerator.h:
    14853         (KJS::CodeGenerator::CodeGenerator):
    14854         * VM/Machine.cpp:
    14855         (KJS::Machine::privateExecute):
    14856         * kjs/CommonIdentifiers.cpp:
    14857         (KJS::CommonIdentifiers::CommonIdentifiers):
    14858         * kjs/CommonIdentifiers.h:
    14859         * kjs/nodes.cpp:
    14860         (KJS::ThisNode::emitCode):
    14861         (KJS::FunctionCallResolveNode::emitCode):
    14862         * kjs/nodes.h:
    14863 
    14864 2008-03-28  Oliver Hunt  <[email protected]>
    14865 
    14866         Reviewed by Geoff.
    14867 
    14868         Bug 18192: Squirrelfish needs support for break and continue
    14869         <http://bugs.webkit.org/show_bug.cgi?id=18192>
    14870 
    14871         Added a loop context stack to the code generator to provide the
    14872         correct jump labels for continue and goto.  Added logic to the
    14873         currently implemented loop constructs to manage entry and exit
    14874         from the loop contexts.  Finally, implemented codegen for break
    14875         and continue (and a pass through for LabelNode)
    14876 
    14877         * VM/CodeGenerator.cpp:
    14878         (KJS::CodeGenerator::pushLoopContext):
    14879         (KJS::CodeGenerator::popLoopContext):
    14880         (KJS::CodeGenerator::loopContextForIdentifier):
    14881         (KJS::CodeGenerator::labelForContinue):
    14882         (KJS::CodeGenerator::labelForBreak):
    14883         * VM/CodeGenerator.h:
    14884         * kjs/nodes.cpp:
    14885         (KJS::DoWhileNode::emitCode):
    14886         (KJS::WhileNode::emitCode):
    14887         (KJS::ForNode::emitCode):
    14888         (KJS::ContinueNode::emitCode):
    14889         (KJS::BreakNode::emitCode):
    14890         (KJS::LabelNode::emitCode):
    14891         * kjs/nodes.h:
    14892 
    14893 2008-03-27  Sam Weinig  <[email protected]>
    14894 
    14895         Reviewed by Geoffrey Garen.
    14896 
    14897         Add emitCode support for UnaryPlusNode, NegateNode, BitwiseNotNode and LogicalNotNode.
    14898 
    14899         * VM/CodeBlock.cpp:
    14900         (KJS::printUnaryOp):
    14901         (KJS::CodeBlock::dump):
    14902         * VM/CodeGenerator.cpp:
    14903         (KJS::CodeGenerator::emitToJSNumber):
    14904         (KJS::CodeGenerator::emitNegate):
    14905         (KJS::CodeGenerator::emitBitNot):
    14906         (KJS::CodeGenerator::emitNot):
    14907         * VM/CodeGenerator.h:
    14908         * VM/Machine.cpp:
    14909         (KJS::Machine::privateExecute):
    14910         * VM/Opcode.h:
    14911         * kjs/nodes.cpp:
    14912         (KJS::UnaryPlusNode::emitCode):
    14913         (KJS::NegateNode::emitCode):
    14914         (KJS::BitwiseNotNode::emitCode):
    14915         (KJS::LogicalNotNode::emitCode):
    14916         * kjs/nodes.h:
    14917 
    14918 2008-03-27  Cameron Zwarich  <[email protected]>
    14919 
    14920         Reviewed by Maciej Stachowiak.
    14921 
    14922         Add support for LogicalAndNode and LogicalOrNode.
    14923 
    14924         * kjs/nodes.cpp:
    14925         (KJS::LogicalAndNode::emitCode):
    14926         (KJS::LogicalOrNode::emitCode):
    14927         * kjs/nodes.h:
    14928 
    14929 2008-03-27  Sam Weinig  <[email protected]>
    14930 
    14931         Clean up code and debug output.
    14932 
    14933         * VM/CodeBlock.cpp:
    14934         (KJS::CodeBlock::dump):
    14935         * VM/Machine.cpp:
    14936         (KJS::Machine::privateExecute):
    14937 
    14938 2008-03-27  Geoffrey Garen  <[email protected]>
    14939 
    14940         Moved an ASSERT to a more logical place.
    14941 
    14942         * VM/Machine.cpp:
    14943         (KJS::Machine::privateExecute):
    14944 
    14945 2008-03-27  Sam Weinig  <[email protected]>
    14946 
    14947         Reviewed by Oliver Hunt.
    14948 
    14949         Add emitCode support for InstanceOfNode.
    14950 
    14951         * VM/CodeBlock.cpp:
    14952         (KJS::CodeBlock::dump):
    14953         * VM/CodeGenerator.cpp:
    14954         (KJS::CodeGenerator::emitInstanceOf):
    14955         * VM/CodeGenerator.h:
    14956         * VM/Machine.cpp:
    14957         (KJS::Machine::privateExecute):
    14958         * VM/Opcode.h:
    14959         * kjs/nodes.cpp:
    14960         (KJS::InstanceOfNode::emitCode):
    14961         * kjs/nodes.h:
    14962 
    14963 2008-03-27  Oliver Hunt  <[email protected]>
    14964 
    14965         Reviewed by Maciej.
    14966 
    14967         Bug 18142: squirrelfish needs to support dynamic scoping/with
    14968         <http://bugs.webkit.org/show_bug.cgi?id=18142>
    14969 
    14970         Add support for dynamic scoping and add code to handle 'with'
    14971         statements.
    14972 
    14973         * VM/CodeBlock.cpp:
    14974         (KJS::CodeBlock::dump):
    14975         * VM/CodeBlock.h:
    14976         (KJS::CodeBlock::CodeBlock):
    14977         * VM/CodeGenerator.cpp:
    14978         (KJS::CodeGenerator::getRegister):
    14979         (KJS::CodeGenerator::emitPushScope):
    14980         (KJS::CodeGenerator::emitPopScope):
    14981         * VM/CodeGenerator.h:
    14982         (KJS::CodeGenerator::CodeGenerator):
    14983         * VM/Machine.cpp:
    14984         (KJS::Machine::privateExecute):
    14985         * VM/Opcode.h:
    14986         * kjs/nodes.cpp:
    14987         (KJS::WithNode::emitCode):
    14988         * kjs/nodes.h:
    14989 
    14990 2008-03-27  Sam Weinig  <[email protected]>
    14991 
    14992         Reviewed by Geoffrey Garen.
    14993 
    14994         Add emitCode support for NullNode, FalseNode, TrueNode, IfNode, IfElseNode, DoWhileNode and WhileNode
    14995 
    14996         * VM/CodeBlock.cpp:
    14997         (KJS::CodeBlock::dump): Dump op_jfalse opcode.
    14998         * VM/CodeGenerator.cpp:
    14999         (KJS::CodeGenerator::emitJumpIfFalse): Identical to emitJumpIfTrue except it emits the op_jfalse opcode.
    15000         (KJS::CodeGenerator::emitLoad): Add and emitLoad override for booleans.
    15001         * VM/CodeGenerator.h:
    15002         * VM/Machine.cpp:
    15003         (KJS::Machine::privateExecute): Adds execution of op_jfalse. It is identical to op_jtrue, except the
    15004         the condition is reversed.
    15005         * VM/Opcode.h: Add op_jfalse.
    15006         * kjs/nodes.cpp:
    15007         (KJS::NullNode::emitCode): Added.
    15008         (KJS::FalseNode::emitCode): Added.
    15009         (KJS::TrueNode::emitCode): Added.
    15010         (KJS::IfNode::emitCode): Added.
    15011         (KJS::IfElseNode::emitCode): Added.
    15012         (KJS::DoWhileNode::emitCode): Added.
    15013         (KJS::WhileNode::emitCode): Added.
    15014         * kjs/nodes.h:
    15015 
    15016 2008-03-26  Geoffrey Garen  <[email protected]>
    15017 
    15018         Nixed an unused List.
    15019        
    15020         The calm before my stormy war against the List class.
    15021 
    15022         * kjs/function_object.cpp:
    15023         (KJS::FunctionObjectImp::construct):
    15024 
    15025 2008-03-26  Cameron Zwarich  <[email protected]>
    15026 
    15027         Reviewed by Geoffrey Garen.
    15028 
    15029         Adds support for EqualNode, NotEqualNode, StrictEqualNode, NotStrictEqualNode,
    15030         LessEqNode, GreaterNode, GreaterEqNode, MultNode, DivNode, ModNode, SubNode,
    15031         LeftShiftNode, RightShiftNode, UnsignedRightShiftNode, BitAndNode, BitXOrNode,
    15032         and BitOrNode.
    15033 
    15034         * VM/CodeBlock.cpp:
    15035         (KJS::CodeBlock::dump):
    15036         * VM/CodeGenerator.cpp:
    15037         (KJS::CodeGenerator::emitEqual):
    15038         (KJS::CodeGenerator::emitNotEqual):
    15039         (KJS::CodeGenerator::emitStrictEqual):
    15040         (KJS::CodeGenerator::emitNotStrictEqual):
    15041         (KJS::CodeGenerator::emitLessEq):
    15042         (KJS::CodeGenerator::emitMult):
    15043         (KJS::CodeGenerator::emitDiv):
    15044         (KJS::CodeGenerator::emitMod):
    15045         (KJS::CodeGenerator::emitSub):
    15046         (KJS::CodeGenerator::emitLeftShift):
    15047         (KJS::CodeGenerator::emitRightShift):
    15048         (KJS::CodeGenerator::emitUnsignedRightShift):
    15049         (KJS::CodeGenerator::emitBitAnd):
    15050         (KJS::CodeGenerator::emitBitXOr):
    15051         (KJS::CodeGenerator::emitBitOr):
    15052         * VM/CodeGenerator.h:
    15053         * VM/Machine.cpp:
    15054         (KJS::jsLessEq):
    15055         (KJS::Machine::privateExecute):
    15056         * VM/Opcode.h:
    15057         * kjs/nodes.cpp:
    15058         (KJS::MultNode::emitCode):
    15059         (KJS::DivNode::emitCode):
    15060         (KJS::ModNode::emitCode):
    15061         (KJS::SubNode::emitCode):
    15062         (KJS::LeftShiftNode::emitCode):
    15063         (KJS::RightShiftNode::emitCode):
    15064         (KJS::UnsignedRightShiftNode::emitCode):
    15065         (KJS::GreaterNode::emitCode):
    15066         (KJS::LessEqNode::emitCode):
    15067         (KJS::GreaterEqNode::emitCode):
    15068         (KJS::EqualNode::emitCode):
    15069         (KJS::NotEqualNode::emitCode):
    15070         (KJS::StrictEqualNode::emitCode):
    15071         (KJS::NotStrictEqualNode::emitCode):
    15072         (KJS::BitAndNode::emitCode):
    15073         (KJS::BitXOrNode::emitCode):
    15074         (KJS::BitOrNode::emitCode):
    15075         * kjs/nodes.h:
    15076 
    15077 2008-03-26  Geoffrey Garen  <[email protected]>
    15078 
    15079         Reviewed by Oliver Hunt.
    15080        
    15081         Only print debug dumps in debug builds.
    15082 
    15083         * VM/CodeGenerator.cpp:
    15084         (KJS::CodeGenerator::generate):
    15085         * VM/Machine.cpp:
    15086         (KJS::Machine::privateExecute):
    15087 
    15088 2008-03-26  Geoffrey Garen  <[email protected]>
    15089 
    15090         Reviewed by Oliver Hunt.
    15091        
    15092         Moved a few files around in the XCode project.
    15093 
    15094         * JavaScriptCore.xcodeproj/project.pbxproj:
    15095 
    15096 2008-03-26  Geoffrey Garen  <[email protected]>
    15097 
    15098         Reviewed by Oliver Hunt.
    15099        
    15100         Made closures work.
    15101        
    15102         An activation object aliases to the register file until its associated
    15103         function returns, at which point it copies the registers for locals and
    15104         parameters into an independent storage buffer.
    15105 
    15106 2008-03-24  Geoffrey Garen  <[email protected]>
    15107 
    15108         Reviewed by Oliver Hunt.
    15109        
    15110         Fixed recent 25% regression on simple for loop test. GCC seems to be
    15111         very finicky about the code that gets inlined into
    15112         Machine::privateExecute.
    15113 
    15114         Everything in this patch is simply the result of experiment.
    15115        
    15116         The resolve and resolve_base opcodes do not seem to have gotten slower
    15117         from this change.
    15118 
    15119         * VM/Machine.cpp:
    15120         (KJS::resolve):
    15121         (KJS::resolveBase):
    15122         (KJS::Machine::privateExecute):
    15123         * kjs/nodes.h:
    15124 
    15125 2008-03-24  Oliver Hunt  <[email protected]>
    15126 
    15127         Reviewed by Geoff Garen.
    15128 
    15129         Bug 18059: squirrelfish needs to compile on platforms without computed goto
    15130         <http://bugs.webkit.org/show_bug.cgi?id=18059>
    15131 
    15132         "Standard" macro style support for conditionalising the use of computed goto.
    15133 
    15134         * JavaScriptCore.xcodeproj/project.pbxproj:
    15135         * VM/Machine.cpp:
    15136         (KJS::Machine::isOpcode):
    15137         (KJS::Machine::privateExecute):
    15138         * VM/Machine.h:
    15139         (KJS::Machine::getOpcode):
    15140         (KJS::Machine::getOpcodeID):
    15141         * VM/Opcode.h:
    15142         * wtf/Platform.h:
    15143 
    15144 2008-03-24  Geoffrey Garen  <[email protected]>
    15145 
    15146         Moved my notes from nodes.h to the wiki.
    15147 
    15148         * kjs/nodes.h:
    15149 
    15150 2008-03-24  Geoffrey Garen  <[email protected]>
    15151 
    15152         SquirrelFish lives.
    15153        
    15154         Initial check-in of the code I've been carrying around. Lots of stuff
    15155         doesn't work. Plus a bunch of empty files.
    15156 
    15157 === Start merge of squirrelfish ===
    15158 
    15159 2008-05-21  Darin Adler  <[email protected]>
    15160 
    15161         - try to fix the Windows build
    15162 
    15163         * profiler/Profiler.cpp:
    15164         (KJS::Profiler::stopProfiling): Use ptrdiff_t instead of the less-common but incredibly
    15165         similar ssize_t type.
    15166         * wtf/AVLTree.h:
    15167         (KJS::AVLTree::search): Added a typename for a dependent name that's a type.
    15168 
    15169 2008-05-21  Darin Adler  <[email protected]>
    15170 
    15171         Reviewed by Anders.
    15172 
    15173         - fix <rdar://problem/5952721> bug in JavaScript arguments object property lookup
    15174 
    15175         Test: fast/js/arguments-bad-index.html
    15176 
    15177         * kjs/function.cpp:
    15178         (KJS::IndexToNameMap::IndexToNameMap): Use unsigned instead of int.
    15179         (KJS::IndexToNameMap::isMapped): Use unsigned instead of int, and also use the
    15180         strict version of the numeric conversion function, since we don't want to allow
    15181         trailing junk.
    15182         (KJS::IndexToNameMap::unMap): Ditto.
    15183         (KJS::IndexToNameMap::operator[]): Ditto.
    15184         * kjs/function.h: Changed IndexToNameMap::size type from int to unsigned.
    15185 
    15186 2008-05-21  Timothy Hatcher  <[email protected]>
    15187 
    15188         Change the Profiler to allow multiple profiles to be running at
    15189         the same time. This can happen when you have nested console.profile()
    15190         calls. This required two changes. First, the Profiler needed to keep a
    15191         Vector of current profiles, instead of one. Second, a Profile needs
    15192         to keep track of the global ExecState it started in and the page group
    15193         identifier it is tracking.
    15194 
    15195         The stopProfiling call now takes the same arguments as startProfiling.
    15196         This makes sure the correct profile is stopped. Passing a null UString
    15197         as the title will stop the last profile for the matching ExecState.
    15198 
    15199         <rdar://problem/5951559> Multiple pages profiling can interfere with each other
    15200 
    15201         Reviewed by Kevin McCullough.
    15202 
    15203         * JavaScriptCore.exp: Added new exports. Removed old symbols.
    15204         * profiler/Profile.cpp:
    15205         (KJS::Profile::Profile): New constructor arguments for the
    15206         originatingGlobalExec and pageGroupIdentifier.
    15207         (KJS::Profile::stopProfiling): Set the m_originatingGlobalExec to null.
    15208         * profiler/Profile.h:
    15209         (KJS::Profile::create): Additional arguments.
    15210         (KJS::Profile::originatingGlobalExec): Return m_originatingGlobalExec.
    15211         (KJS::Profile::pageGroupIdentifier): Return m_pageGroupIdentifier.
    15212         * profiler/Profiler.cpp:
    15213         (KJS::Profiler::findProfile): Added. Finds a Profile that matches
    15214         the ExecState and title.
    15215         (KJS::Profiler::startProfiling): Return early if there is already
    15216         a Profile with the ExecState and title. If not, create a new profile
    15217         and append it to m_currentProfiles.
    15218         (KJS::Profiler::stopProfiling): Loops through m_currentProfiles
    15219         and find the one matching the ExecState and title. If one is found
    15220         call stopProfiling and return the Profile after removing it
    15221         from m_currentProfiles.
    15222         (KJS::dispatchFunctionToProfiles): Helper inline function to loop through
    15223         m_currentProfiles and call a Profile function.
    15224         (KJS::Profiler::willExecute): Call dispatchFunctionToProfiles.
    15225         (KJS::Profiler::didExecute): Ditto.
    15226         * profiler/Profiler.h:
    15227 
    15228 2008-05-21  Alexey Proskuryakov  <[email protected]>
    15229 
    15230         Reviewed by Darin.
    15231 
    15232         <rdar://problem/5908520> REGRESSION (3.1.1-r33033): Crash in WebKit when opening or
    15233         refreshing page on people.com
    15234 
    15235         The problem was that STL algorithms do not work with non-conformant comparators, and the
    15236         site used sort(function() { return 0.5 - Math.random(); } to randomly shuffle an array.
    15237 
    15238         https://bugs.webkit.org/show_bug.cgi?id=18687
    15239         REGRESSION(r32220): ecma/Array/15.4.4.5-3.js test now fails in GMT(BST)
    15240 
    15241         Besides relying on sort stability, this test was just broken, and kept failing with the
    15242         new stable sort.
    15243 
    15244         Tests: fast/js/sort-randomly.html
    15245                fast/js/sort-stability.html
    15246                fast/js/comparefn-sort-stability.html
    15247 
    15248         * kjs/avl_tree.h: Added an AVL tree implementation.
    15249 
    15250         * JavaScriptCore.xcodeproj/project.pbxproj:
    15251         * wtf/AVLTree.h: Added.
    15252         Added an AVL tree implementation.
    15253 
    15254         * kjs/array_instance.cpp:
    15255         (KJS::ArrayInstance::increaseVectorLength):
    15256         (KJS::ArrayInstance::sort):
    15257         (KJS::AVLTreeAbstractorForArrayCompare::get_less):
    15258         (KJS::AVLTreeAbstractorForArrayCompare::set_less):
    15259         (KJS::AVLTreeAbstractorForArrayCompare::get_greater):
    15260         (KJS::AVLTreeAbstractorForArrayCompare::set_greater):
    15261         (KJS::AVLTreeAbstractorForArrayCompare::get_balance_factor):
    15262         (KJS::AVLTreeAbstractorForArrayCompare::set_balance_factor):
    15263         (KJS::AVLTreeAbstractorForArrayCompare::compare_key_key):
    15264         (KJS::AVLTreeAbstractorForArrayCompare::compare_key_node):
    15265         (KJS::AVLTreeAbstractorForArrayCompare::compare_node_node):
    15266         (KJS::AVLTreeAbstractorForArrayCompare::null):
    15267         (KJS::ArrayInstance::compactForSorting):
    15268        
    15269         * kjs/array_instance.h: increaseVectorLength() now returns a bool to indicate whether it was
    15270         successful.
    15271 
    15272         * wtf/Vector.h:
    15273         (WTF::Vector::Vector):
    15274         (WTF::::operator=):
    15275         (WTF::::fill):
    15276         Make these methods fail instead of crash when allocation fails, matching resize() and
    15277         reserveCapacity(), which already had this behavior. Callers need to check for null buffer
    15278         after making any Vector call that can try to allocate.
    15279 
    15280         * tests/mozilla/ecma/Array/15.4.4.5-3.js: Fixed the test to use a consistent sort function,
    15281         as suggested in comments to a Mozilla bug filed about it (I'll keep tracking the bug to see
    15282         what the final resolution is).
    15283 
    15284 2008-05-20  Kevin McCullough  <[email protected]>
    15285 
    15286         Reviewed by Tim.
    15287 
    15288         <rdar://problem/5950867> JSProfiler: Allow the profiler to "Focus" a
    15289         profile node.
    15290         - Implements focus by adding the idea of a profileNode being visible and
    15291         adding the ability to reset all of the visible flags.
    15292 
    15293         * profiler/Profile.h:
    15294         (KJS::Profile::focus):
    15295         * profiler/ProfileNode.cpp:
    15296         (KJS::ProfileNode::ProfileNode): Initialize the visible flag.
    15297         (KJS::ProfileNode::setTreeVisible): Set the visibility of this node and
    15298         all of its descendents.
    15299         (KJS::ProfileNode::focus): Determine if this node should be visible when
    15300         focusing, if the functionName matches this node's function name or if any
    15301         of this node's children are visible.
    15302         (KJS::ProfileNode::restoreAll): Restore all nodes' visible flag.
    15303         (KJS::ProfileNode::debugPrintData):
    15304         * profiler/ProfileNode.h:
    15305         (KJS::ProfileNode::visible):
    15306         (KJS::ProfileNode::setVisible):
    15307 
    15308 2008-05-20  Timothy Hatcher  <[email protected]>
    15309 
    15310         Fixes a couple performance issues with the profiler. Also fixes
    15311         a regression where some nodes wouldn't be added to the tree.
    15312 
    15313         Reviewed by Kevin McCullough.
    15314 
    15315         * profiler/ProfileNode.cpp:
    15316         (KJS::ProfileNode::addChild): Compare callIdentifier instead
    15317         of functionName.
    15318         * profiler/ProfileNode.h:
    15319         (CallIdentifier.operator==): Compare the CallIdentifiers in
    15320         an order that fails sooner for non-matches.
    15321         (CallIdentifier.callIdentifier): Return the CallIdentifier by
    15322         reference to prevent making a new copy each time.
    15323 
    15324 2008-05-20  Kevin McCullough  <[email protected]>
    15325 
    15326         Reviewed by Darin.
    15327 
    15328         <rdar://problem/5950796> JSProfiler: dump functions are in the code
    15329         Removed dump and logging functions from the Release version of the code
    15330         and renamed them to be obviously for debugging only.
    15331 
    15332         * JavaScriptCore.exp:
    15333         * profiler/Profile.cpp:
    15334         (KJS::Profile::debugPrintData):
    15335         (KJS::Profile::debugPrintDataSampleStyle):
    15336         * profiler/Profile.h:
    15337         * profiler/ProfileNode.cpp:
    15338         (KJS::ProfileNode::debugPrintData):
    15339         (KJS::ProfileNode::debugPrintDataSampleStyle):
    15340         * profiler/ProfileNode.h:
    15341         * profiler/Profiler.cpp:
    15342         * profiler/Profiler.h:
    15343 
    15344 2008-05-20  Kevin McCullough  <[email protected]>
    15345 
    15346         Reviewed by Adam.
    15347 
    15348         <rdar://problem/5950538> JSProfiler: Keep track of non-JS execution time
    15349         We now have an extra node that represents the excess non-JS time.
    15350         - Also changed "SCRIPT" and "anonymous function" to be more consistent
    15351         with the debugger.
    15352 
    15353         * profiler/ProfileNode.cpp:
    15354         (KJS::ProfileNode::stopProfiling): If this ProfileNode is the head node
    15355         create a new child that has the excess execution time.
    15356         (KJS::ProfileNode::calculatePercentages): Moved calculation of the
    15357         percentages into a function since it's called from multiple places.
    15358         * profiler/ProfileNode.h: Add the newly needed functions used above.
    15359         (KJS::ProfileNode::setTotalTime):
    15360         (KJS::ProfileNode::setSelfTime):
    15361         (KJS::ProfileNode::setNumberOfCalls):
    15362         * profiler/Profiler.cpp: renamed "SCRIPT" and "anonymous function" to be
    15363         consistent with the debugger and use constants that can be localized
    15364         more easily.
    15365         (KJS::getCallIdentifiers):
    15366         (KJS::getCallIdentifierFromFunctionImp):
    15367 
    15368 2008-05-20  Kevin McCullough  <[email protected]>
    15369 
    15370         Reviewed by Tim.
    15371 
    15372         <rdar://problem/5770054> JavaScript profiler (10928)
    15373         Removed only profiler-internal use of currentProfile since that concept
    15374         is changing.
    15375 
    15376         * profiler/Profile.h: Now stopProfiling takes a time and bool as
    15377         arguments.  The time is used to calculate %s from and the bool tells
    15378         if this node is the head node and should be the one calculating the time.
    15379         (KJS::Profile::stopProfiling):
    15380         * profiler/ProfileNode.cpp: Ditto.
    15381         (KJS::ProfileNode::stopProfiling):
    15382         * profiler/ProfileNode.h: Ditto.
    15383 
    15384 2008-05-20  Kevin McCullough  <[email protected]>
    15385 
    15386         Accidentally turned on the profiler.
    15387 
    15388         * kjs/config.h:
    15389 
    15390 
    15391 2008-05-20  Kevin McCullough  <[email protected]>
    15392 
    15393         Reviewed by Tim.
    15394 
    15395         <rdar://problem/5770054> JavaScript profiler (10928)
    15396         Split function name into 3 parts so that the Web Inspector can link it to
    15397         the resource location from whence it came.
    15398 
    15399         * kjs/ustring.cpp: Implemented operator> for UStrings
    15400         (KJS::operator>):
    15401         * kjs/ustring.h:
    15402         * profiler/Profile.cpp:
    15403         (KJS::Profile::Profile): Initialize all 3 values.
    15404         (KJS::Profile::willExecute): Use CallIdentifier struct.
    15405         (KJS::Profile::didExecute): Ditto.
    15406         * profiler/Profile.h: Ditto and remove unused function.
    15407         * profiler/ProfileNode.cpp:
    15408         (KJS::ProfileNode::ProfileNode): Use CallIdentifier struct.
    15409         (KJS::ProfileNode::willExecute): Ditto and fix an issue where we
    15410         restarted the m_startTime even though it was already started.
    15411         (KJS::ProfileNode::didExecute): Ditto.
    15412         (KJS::ProfileNode::findChild): Ditto.
    15413         (KJS::functionNameDescendingComparator): Ditto and use new comparator.
    15414         (KJS::functionNameAscendingComparator): Ditto.
    15415         (KJS::ProfileNode::printDataInspectorStyle): Use CallIdentifier struct.
    15416         (KJS::ProfileNode::printDataSampleStyle): Ditto.
    15417         * profiler/ProfileNode.h:
    15418         (KJS::CallIdentifier::CallIdentifier): Describe the CallIdentifier struct
    15419         (KJS::CallIdentifier::operator== ):
    15420         (KJS::ProfileNode::create): Use the CallIdentifier struct.
    15421         (KJS::ProfileNode::callIdentifier):
    15422         (KJS::ProfileNode::functionName): Now only return the function name, not
    15423         the url and line number too.
    15424         (KJS::ProfileNode::url):
    15425         (KJS::ProfileNode::lineNumber):
    15426         * profiler/Profiler.cpp: Use the CallIdentifier struct.
    15427         (KJS::Profiler::startProfiling):
    15428         (KJS::Profiler::willExecute):
    15429         (KJS::Profiler::didExecute):
    15430         (KJS::getCallIdentifiers):
    15431         (KJS::getCallIdentifierFromFunctionImp):
    15432 
    15433 2008-05-20  Timothy Hatcher  <[email protected]>
    15434 
    15435         Rename sortFileName{Ascending,Descending} to
    15436         sortFunctionName{Ascending,Descending}.
    15437 
    15438         Reviewed by Kevin McCullough.
    15439 
    15440         * JavaScriptCore.exp:
    15441         * kjs/config.h:
    15442         * profiler/Profile.h:
    15443         * profiler/ProfileNode.cpp:
    15444         (KJS::functionNameDescendingComparator):
    15445         (KJS::ProfileNode::sortFunctionNameDescending):
    15446         (KJS::functionNameAscendingComparator):
    15447         (KJS::ProfileNode::sortFunctionNameAscending):
    15448         * profiler/ProfileNode.h:
    15449 
    15450 2008-05-19  Timothy Hatcher  <[email protected]>
    15451 
    15452         Make the profiler use higher than millisecond resolution time-stamps.
    15453 
    15454         Reviewed by Kevin McCullough.
    15455 
    15456         * kjs/DateMath.cpp:
    15457         (KJS::getCurrentUTCTime): Call getCurrentUTCTimeWithMicroseconds and
    15458         floor the result.
    15459         (KJS::getCurrentUTCTimeWithMicroseconds): Copied from the previous
    15460         implementation of getCurrentUTCTime without the floor call.
    15461         * kjs/DateMath.h: Addded getCurrentUTCTimeWithMicroseconds.
    15462         * profiler/ProfileNode.cpp:
    15463         (KJS::ProfileNode::ProfileNode): Use getCurrentUTCTimeWithMicroseconds.
    15464 
    15465 2008-05-19  Timothy Hatcher  <[email protected]>
    15466 
    15467         Fixes a bug in the profiler where call and apply would show up
    15468         and double the time spent in a function. We don't want to show call
    15469         and apply at all in the profiles. This change excludes them.
    15470 
    15471         Reviewed by Kevin McCullough.
    15472 
    15473         * profiler/ProfileNode.cpp:
    15474         (KJS::ProfileNode::stopProfiling): Remove a second for loop and
    15475         calculate self time in the existing loop.
    15476         * profiler/Profiler.cpp:
    15477         (KJS::shouldExcludeFunction): Helper inline function that returns
    15478         true in the current function in an InternalFunctionImp and it is
    15479         has the functionName call or apply.
    15480         (KJS::Profiler::willExecute): Call shouldExcludeFunction and return
    15481         early if if returns true.
    15482         (KJS::Profiler::didExecute): Ditto.
    15483 
    15484 2008-05-19  Kevin McCullough  <[email protected]>
    15485 
    15486         Reviewed by Tim.
    15487 
    15488         <rdar://problem/5770054> JavaScript profiler (10928)
    15489         - Implement sorting by function name.
    15490 
    15491         * JavaScriptCore.exp:
    15492         * profiler/Profile.h:
    15493         (KJS::Profile::sortFileNameDescending):
    15494         (KJS::Profile::sortFileNameAscending):
    15495         * profiler/ProfileNode.cpp:
    15496         (KJS::fileNameDescendingComparator):
    15497         (KJS::ProfileNode::sortFileNameDescending):
    15498         (KJS::fileNameAscendingComparator):
    15499         (KJS::ProfileNode::sortFileNameAscending):
    15500         * profiler/ProfileNode.h:
    15501 
    15502 2008-05-19  Kevin McCullough  <[email protected]>
    15503 
    15504         Reviewed by Adam.
    15505 
    15506         <rdar://problem/5770054> JavaScript profiler (10928)
    15507         - Pass the exec state to profiler when calling startProfiling so that if
    15508         profiling is started within an execution context that location is
    15509         recorded correctly.
    15510 
    15511         * JavaScriptCore.exp:
    15512         * profiler/ProfileNode.cpp:
    15513         (KJS::ProfileNode::printDataInspectorStyle): Dump more info for debugging
    15514         purposes.
    15515         * profiler/Profiler.cpp:
    15516         (KJS::Profiler::startProfiling):
    15517         * profiler/Profiler.h:
    15518 
    15519 2008-05-19  Kevin McCullough  <[email protected]>
    15520 
    15521         Rubberstamped by Geoff.
    15522 
    15523         Turn off the profiler because it is a performance regression.
    15524 
    15525         * kjs/config.h:
    15526 
    15527 2008-05-19  Alp Toker  <[email protected]>
    15528 
    15529         Reviewed by Anders and Beth.
    15530 
    15531         http://bugs.webkit.org/show_bug.cgi?id=16495
    15532         [GTK] Accessibility support with ATK/AT-SPI
    15533 
    15534         Initial ATK/AT-SPI accessibility support for the GTK+ port.
    15535 
    15536         * wtf/Platform.h:
    15537 
    15538 2008-05-19  Kevin McCullough  <[email protected]>
    15539 
    15540         Reviewed by Tim.
    15541 
    15542         <rdar://problem/5770054> JavaScript profiler (10928)
    15543         -In an effort to make the profiler as efficient as possible instead of
    15544         prepending to a vector we keep the vector in reverse order and operate
    15545         over it backwards.
    15546 
    15547         * profiler/Profile.cpp:
    15548         (KJS::Profile::willExecute):
    15549         (KJS::Profile::didExecute):
    15550         * profiler/ProfileNode.cpp:
    15551         (KJS::ProfileNode::didExecute):
    15552         (KJS::ProfileNode::endAndRecordCall):
    15553         * profiler/ProfileNode.h:
    15554         * profiler/Profiler.cpp:
    15555         (KJS::getStackNames):
    15556 
    15557 2008-05-16  Kevin McCullough  <[email protected]>
    15558 
    15559         Reviewed by Tim.
    15560 
    15561         <rdar://problem/5770054> JavaScript profiler (10928)
    15562         Implement sorting for the profiler.
    15563         I chose to sort the profileNodes in place since there is no reason they
    15564         need to retain their original order.
    15565 
    15566         * JavaScriptCore.exp: Export the symbols.
    15567         * profiler/Profile.h: Add the different ways a profile can be sorted.
    15568         (KJS::Profile::sortTotalTimeDescending):
    15569         (KJS::Profile::sortTotalTimeAscending):
    15570         (KJS::Profile::sortSelfTimeDescending):
    15571         (KJS::Profile::sortSelfTimeAscending):
    15572         (KJS::Profile::sortCallsDescending):
    15573         (KJS::Profile::sortCallsAscending):
    15574         * profiler/ProfileNode.cpp: Implement those ways.
    15575         (KJS::totalTimeDescendingComparator):
    15576         (KJS::ProfileNode::sortTotalTimeDescending):
    15577         (KJS::totalTimeAscendingComparator):
    15578         (KJS::ProfileNode::sortTotalTimeAscending):
    15579         (KJS::selfTimeDescendingComparator):
    15580         (KJS::ProfileNode::sortSelfTimeDescending):
    15581         (KJS::selfTimeAscendingComparator):
    15582         (KJS::ProfileNode::sortSelfTimeAscending):
    15583         (KJS::callsDescendingComparator):
    15584         (KJS::ProfileNode::sortCallsDescending):
    15585         (KJS::callsAscendingComparator):
    15586         (KJS::ProfileNode::sortCallsAscending):
    15587         * profiler/ProfileNode.h: No longer use a Deque since it cannot be
    15588         sorted by std::sort and there was no reason not to use a Vector.  I
    15589         previously had though I would do prepending but am not.
    15590         (KJS::ProfileNode::selfTime):
    15591         (KJS::ProfileNode::totalPercent):
    15592         (KJS::ProfileNode::selfPercent):
    15593         (KJS::ProfileNode::children):
    15594         * profiler/Profiler.cpp: Removed these functions as they can be called
    15595         directoy on the Profile object after getting the Vector of them.
    15596         (KJS::getStackNames):
    15597         * profiler/Profiler.h:
    15598 
    15599 2008-05-15  Ariya Hidayat  <[email protected]>
    15600 
    15601         Reviewed by Simon.
    15602 
    15603         Since WebKitGtk is fully using autotools now, clean-up the .pro/.pri files
    15604         from gtk-port.
    15605 
    15606         * JavaScriptCore.pro:
    15607         * kjs/testkjs.pro:
    15608 
    15609 2008-05-15  Kevin McCullough  <[email protected]>
    15610 
    15611         - Build fix.
    15612 
    15613         * JavaScriptCore.exp:
    15614 
    15615 2008-05-15  Kevin McCullough  <[email protected]>
    15616 
    15617         Reviewed by Tim.
    15618 
    15619         <rdar://problem/5770054> JavaScript profiler (10928)
    15620         - Cache some values to save on computing them repetitively. This will be
    15621         a big savings when we sort since we won't have to walk the tree for
    15622         every comparison!
    15623         - We cache these values when we end profiling because otherwise we won't
    15624         know which profile to get the totalTime for the whole profile from without
    15625         retaining a reference to the head profile or looking up the profile from
    15626         the list of all profiles.
    15627         - Also it's safe to assume we won't be asked for these values while we
    15628         are still profiling since the WebInspector only get's profileNodes from
    15629         profiles that are in the allProfiles() list and a profile is only added
    15630         to that list after it has finished and these values will no longer
    15631         change.
    15632 
    15633         * JavaScriptCore.exp:
    15634         * profiler/ProfileNode.cpp:
    15635         (KJS::ProfileNode::ProfileNode):
    15636         (KJS::ProfileNode::stopProfiling):
    15637         (KJS::ProfileNode::printDataInspectorStyle):
    15638         (KJS::ProfileNode::printDataSampleStyle):
    15639         (KJS::ProfileNode::endAndRecordCall):
    15640         * profiler/ProfileNode.h:
    15641         (KJS::ProfileNode::totalTime):
    15642         (KJS::ProfileNode::selfTime):
    15643         (KJS::ProfileNode::totalPercent):
    15644         (KJS::ProfileNode::selfPercent):
    15645         * profiler/Profiler.cpp:
    15646         (KJS::Profiler::stopProfiling):
    15647 
    15648 2008-05-15  Simon Hausmann  <[email protected]>
    15649 
    15650         Reviewed by Holger.
    15651 
    15652         Fix compilation when compiling with MSVC and wchar_t support.
    15653 
    15654         * wtf/unicode/qt4/UnicodeQt4.h:
    15655         (WTF::Unicode::foldCase):
    15656         (WTF::Unicode::umemcasecmp):
    15657 
    15658 2008-05-14  Kevin McCullough  <[email protected]>
    15659 
    15660         Reviewed by Tim.
    15661 
    15662         <rdar://problem/5770054> JavaScript profiler (10928)
    15663         - Turn on the profiler.
    15664 
    15665         * kjs/config.h:
    15666 
    15667 2008-05-14  Kevin McCullough  <[email protected]>
    15668 
    15669         Reviewed by Tim.
    15670 
    15671         <rdar://problem/5770054> JavaScript profiler (10928)
    15672         - Expose the new profiler functions to the WebInspector.
    15673 
    15674         * JavaScriptCore.exp:
    15675 
    15676 2008-05-14  Kevin McCullough  <[email protected]>
    15677 
    15678         Giving credit where credit is due.
    15679 
    15680         * ChangeLog:
    15681 
    15682 2008-05-14  Kevin McCullough  <[email protected]>
    15683 
    15684         Reviewed by Geoff and Sam.
    15685 
    15686         <rdar://problem/5770054> JavaScript profiler (10928)
    15687         Add the ability to get percentages of total and self time for displaying
    15688         in the WebInspector.
    15689 
    15690         * profiler/Profile.h:
    15691         (KJS::Profile::totalProfileTime):
    15692         * profiler/ProfileNode.cpp:
    15693         (KJS::ProfileNode::totalPercent):
    15694         (KJS::ProfileNode::selfPercent):
    15695         * profiler/ProfileNode.h:
    15696         * profiler/Profiler.h:
    15697         (KJS::Profiler::currentProfile):
    15698 
    15699 2008-05-14  Kevin McCullough  <[email protected]>
    15700 
    15701         Reviewed by Sam.
    15702 
    15703         <rdar://problem/5770054> JavaScript profiler (10928)
    15704         - Rename FunctionCallProfile to ProfileNode.
    15705 
    15706         * GNUmakefile.am:
    15707         * JavaScriptCore.exp:
    15708         * JavaScriptCore.pri:
    15709         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    15710         * JavaScriptCore.xcodeproj/project.pbxproj:
    15711         * JavaScriptCoreSources.bkl:
    15712         * profiler/FunctionCallProfile.cpp: Removed.
    15713         * profiler/FunctionCallProfile.h: Removed.
    15714         * profiler/Profile.cpp:
    15715         (KJS::Profile::Profile):
    15716         (KJS::Profile::willExecute):
    15717         * profiler/Profile.h:
    15718         (KJS::Profile::callTree):
    15719         * profiler/ProfileNode.cpp: Copied from profiler/FunctionCallProfile.cpp.
    15720         (KJS::ProfileNode::ProfileNode):
    15721         (KJS::ProfileNode::willExecute):
    15722         (KJS::ProfileNode::didExecute):
    15723         (KJS::ProfileNode::addChild):
    15724         (KJS::ProfileNode::findChild):
    15725         (KJS::ProfileNode::stopProfiling):
    15726         (KJS::ProfileNode::selfTime):
    15727         (KJS::ProfileNode::printDataInspectorStyle):
    15728         (KJS::ProfileNode::printDataSampleStyle):
    15729         (KJS::ProfileNode::endAndRecordCall):
    15730         * profiler/ProfileNode.h: Copied from profiler/FunctionCallProfile.h.
    15731         (KJS::ProfileNode::create):
    15732         (KJS::ProfileNode::children):
    15733         * profiler/Profiler.cpp:
    15734 
    15735 2008-05-14  Kevin McCullough  <[email protected]>
    15736 
    15737         Reviewed by John.
    15738 
    15739         <rdar://problem/5770054> JavaScript profiler (10928)
    15740         - Have each FunctionCallProfile be able to return it's total and self time.
    15741 
    15742         * JavaScriptCore.exp:
    15743         * profiler/FunctionCallProfile.cpp:
    15744         (KJS::FunctionCallProfile::selfTime):
    15745         * profiler/FunctionCallProfile.h:
    15746         (KJS::FunctionCallProfile::totalTime):
    15747 
    15748 2008-05-14  Alexey Proskuryakov  <[email protected]>
    15749 
    15750         Reviewed by Darin.
    15751 
    15752         <rdar://problem/5934376> REGRESSION: A script fails because of a straw BOM character in it.
    15753 
    15754         <https://bugs.webkit.org/show_bug.cgi?id=4931>
    15755         Unicode format characters (Cf) should be removed from JavaScript source
    15756 
    15757         Of all Cf characters, we are only removing BOM, because this is what Firefox trunk has
    15758         settled upon, after extensive discussion and investigation.
    15759 
    15760         Based on Darin's work on this bug.
    15761 
    15762         Test: fast/js/removing-Cf-characters.html
    15763 
    15764         * kjs/lexer.cpp:
    15765         (KJS::Lexer::setCode): Tweak formatting. Use a call to shift(4) to read in the
    15766         first characters, instead of having special case code here.
    15767         (KJS::Lexer::shift): Add a loop when reading a character to skip BOM characters.
    15768 
    15769 2008-05-13  Matt Lilek  <[email protected]>
    15770 
    15771         Not reviewed, build fix.
    15772 
    15773         * kjs/date_object.cpp:
    15774         (KJS::DateObjectFuncImp::callAsFunction):
    15775 
    15776 2008-05-13  Anders Carlsson  <[email protected]>
    15777 
    15778         Reviewed by Sam.
    15779 
    15780         <rdar://problem/5933644> Implement Date.now
    15781        
    15782         Implement Date.now which returns the number of milliseconds since the epoch.
    15783        
    15784         * kjs/CommonIdentifiers.h:
    15785         * kjs/date_object.cpp:
    15786         (KJS::DateObjectFuncImp::):
    15787         (KJS::DateObjectImp::DateObjectImp):
    15788         (KJS::DateObjectFuncImp::callAsFunction):
    15789 
    15790 2008-05-13  Kevin McCullough  <[email protected]>
    15791 
    15792         Giving credit where credit is due.
    15793 
    15794         * ChangeLog:
    15795 
    15796 2008-05-13  Kevin McCullough  <[email protected]>
    15797 
    15798         Reviewed by Adam and Geoff.
    15799 
    15800         <rdar://problem/5770054> JavaScript profiler (10928)
    15801         Use PassRefPtrs instead of RefPtrs when appropriate.
    15802 
    15803         * profiler/FunctionCallProfile.cpp:
    15804         (KJS::FunctionCallProfile::addChild):
    15805         * profiler/FunctionCallProfile.h:
    15806         * profiler/Profile.h:
    15807         (KJS::Profile::callTree):
    15808 
    15809 2008-05-13  Kevin McCullough  <[email protected]>
    15810 
    15811         Reviewed by Sam.
    15812 
    15813         <rdar://problem/5770054> JavaScript profiler (10928)
    15814         - Made some functions static (as per Adam) and changed from using raw
    15815         pointers to RefPtr for making these JavaScript Objects.
    15816 
    15817         * profiler/FunctionCallProfile.cpp:
    15818         (KJS::FunctionCallProfile::addChild):
    15819         (KJS::FunctionCallProfile::findChild):
    15820         * profiler/FunctionCallProfile.h:
    15821         (KJS::FunctionCallProfile::create):
    15822         * profiler/Profile.cpp:
    15823         (KJS::Profile::Profile):
    15824         (KJS::Profile::willExecute):
    15825         (KJS::Profile::didExecute):
    15826         (KJS::functionNameCountPairComparator):
    15827         * profiler/Profile.h:
    15828         (KJS::Profile::create):
    15829         (KJS::Profile::title):
    15830         (KJS::Profile::callTree):
    15831         * profiler/Profiler.cpp:
    15832         (KJS::Profiler::startProfiling):
    15833         * profiler/Profiler.h:
    15834         (KJS::Profiler::allProfiles):
    15835         (KJS::Profiler::clearProfiles):
    15836 
    15837 2008-05-13  Alexey Proskuryakov  <[email protected]>
    15838 
    15839         Reviewed by Geoffrey Garen.
    15840 
    15841         <rdar://problem/4949018> JavaScriptCore API claims to work with UTF8 strings, but only works
    15842         with ASCII strings
    15843        
    15844         * kjs/ustring.h:
    15845         * kjs/ustring.cpp:
    15846         (KJS::UString::Rep::createFromUTF8):
    15847         Added. Implementation adapted from JSStringCreateWithUTF8CString().
    15848 
    15849         * API/JSStringRef.cpp:
    15850         (JSStringCreateWithUTF8CString):
    15851         * API/JSClassRef.cpp:
    15852         (OpaqueJSClass::OpaqueJSClass):
    15853         Use UString::Rep::createFromUTF8().
    15854 
    15855 2008-05-12  Mark Rowe  <[email protected]>
    15856 
    15857         Reviewed by Tim Hatcher.
    15858 
    15859         <rdar://problem/4859666> WebKit needs availability macros in order to deprecate APIs
    15860 
    15861         Create WebKit availability macros that key off the Mac OS X version being targeted to
    15862         determine the WebKit version being targeted.  Applications can define
    15863         WEBKIT_VERSION_MIN_REQUIRED before including WebKit headers in order to target a specific
    15864         version of WebKit.
    15865 
    15866         The availability header is being added to JavaScriptCore rather than WebKit as JavaScriptCore
    15867         is the lowest-level portion of the public WebKit API.
    15868 
    15869         * API/WebKitAvailability.h: Added.
    15870         * JavaScriptCore.xcodeproj/project.pbxproj:
    15871 
    15872 2008-05-12  Alexey Proskuryakov  <[email protected]>
    15873 
    15874         Reviewed by Maciej.
    15875 
    15876         https://bugs.webkit.org/show_bug.cgi?id=18828
    15877         Reproducible crash with PAC file
    15878 
    15879         Naively moving JavaScriptCore into thread-specific data was inappropriate in the face of
    15880         exiting JavaScriptCore API clients, which expect a different therading model. Temporarily
    15881         disabling ThreadSpecific implementation until this can be sorted out.
    15882 
    15883         * wtf/ThreadSpecific.h:
    15884         (WTF::::ThreadSpecific):
    15885         (WTF::::~ThreadSpecific):
    15886         (WTF::::get):
    15887         (WTF::::set):
    15888 
    15889 2008-05-12  Alexey Proskuryakov  <[email protected]>
    15890 
    15891         Roll out recent  threading changes (r32807, r32810, r32819, r32822) to simplify
    15892         SquirrelFish merging.
    15893 
    15894         * API/JSBase.cpp:
    15895         (JSGarbageCollect):
    15896         * API/JSCallbackObjectFunctions.h:
    15897         (KJS::::staticFunctionGetter):
    15898         * API/JSClassRef.cpp:
    15899         (OpaqueJSClass::prototype):
    15900         * API/JSObjectRef.cpp:
    15901         (JSObjectMake):
    15902         (JSObjectMakeFunctionWithCallback):
    15903         (JSObjectMakeConstructor):
    15904         (JSObjectMakeFunction):
    15905         * API/JSValueRef.cpp:
    15906         (JSValueMakeNumber):
    15907         (JSValueMakeString):
    15908         * JavaScriptCore.exp:
    15909         * kjs/ExecState.h:
    15910         * kjs/InitializeThreading.cpp:
    15911         (KJS::initializeThreadingOnce):
    15912         * kjs/JSGlobalObject.cpp:
    15913         (KJS::JSGlobalObject::~JSGlobalObject):
    15914         (KJS::JSGlobalObject::init):
    15915         (KJS::JSGlobalObject::put):
    15916         (KJS::JSGlobalObject::reset):
    15917         (KJS::JSGlobalObject::tearOffActivation):
    15918         * kjs/JSGlobalObject.h:
    15919         (KJS::JSGlobalObject::head):
    15920         (KJS::JSGlobalObject::perThreadData):
    15921         * kjs/JSLock.cpp:
    15922         (KJS::JSLock::registerThread):
    15923         * kjs/JSLock.h:
    15924         (KJS::JSLock::JSLock):
    15925         * kjs/array_instance.cpp:
    15926         (KJS::ArrayInstance::ArrayInstance):
    15927         (KJS::ArrayInstance::lengthGetter):
    15928         * kjs/array_object.cpp:
    15929         (KJS::arrayProtoFuncToString):
    15930         (KJS::arrayProtoFuncToLocaleString):
    15931         (KJS::arrayProtoFuncJoin):
    15932         (KJS::arrayProtoFuncConcat):
    15933         (KJS::arrayProtoFuncPop):
    15934         (KJS::arrayProtoFuncPush):
    15935         (KJS::arrayProtoFuncShift):
    15936         (KJS::arrayProtoFuncSlice):
    15937         (KJS::arrayProtoFuncSplice):
    15938         (KJS::arrayProtoFuncUnShift):
    15939         (KJS::arrayProtoFuncFilter):
    15940         (KJS::arrayProtoFuncMap):
    15941         (KJS::arrayProtoFuncEvery):
    15942         (KJS::arrayProtoFuncForEach):
    15943         (KJS::arrayProtoFuncSome):
    15944         (KJS::arrayProtoFuncIndexOf):
    15945         (KJS::arrayProtoFuncLastIndexOf):
    15946         (KJS::ArrayObjectImp::ArrayObjectImp):
    15947         (KJS::ArrayObjectImp::construct):
    15948         * kjs/bool_object.cpp:
    15949         (KJS::BooleanPrototype::BooleanPrototype):
    15950         (KJS::booleanProtoFuncToString):
    15951         (KJS::BooleanObjectImp::BooleanObjectImp):
    15952         (KJS::BooleanObjectImp::construct):
    15953         * kjs/collector.cpp:
    15954         (KJS::allocateBlock):
    15955         (KJS::Collector::recordExtraCost):
    15956         (KJS::Collector::heapAllocate):
    15957         (KJS::Collector::allocate):
    15958         (KJS::Collector::allocateNumber):
    15959         (KJS::Collector::registerAsMainThread):
    15960         (KJS::onMainThread):
    15961         (KJS::PlatformThread::PlatformThread):
    15962         (KJS::getCurrentPlatformThread):
    15963         (KJS::Collector::Thread::Thread):
    15964         (KJS::destroyRegisteredThread):
    15965         (KJS::initializeRegisteredThreadKey):
    15966         (KJS::Collector::registerThread):
    15967         (KJS::Collector::markStackObjectsConservatively):
    15968         (KJS::Collector::markCurrentThreadConservativelyInternal):
    15969         (KJS::Collector::markCurrentThreadConservatively):
    15970         (KJS::suspendThread):
    15971         (KJS::resumeThread):
    15972         (KJS::getPlatformThreadRegisters):
    15973         (KJS::otherThreadStackPointer):
    15974         (KJS::Collector::markOtherThreadConservatively):
    15975         (KJS::protectedValues):
    15976         (KJS::Collector::protect):
    15977         (KJS::Collector::unprotect):
    15978         (KJS::Collector::collectOnMainThreadOnly):
    15979         (KJS::Collector::markProtectedObjects):
    15980         (KJS::Collector::markMainThreadOnlyObjects):
    15981         (KJS::Collector::sweep):
    15982         (KJS::Collector::collect):
    15983         (KJS::Collector::size):
    15984         (KJS::Collector::globalObjectCount):
    15985         (KJS::Collector::protectedGlobalObjectCount):
    15986         (KJS::Collector::protectedObjectCount):
    15987         (KJS::Collector::protectedObjectTypeCounts):
    15988         (KJS::Collector::isBusy):
    15989         (KJS::Collector::reportOutOfMemoryToAllExecStates):
    15990         * kjs/collector.h:
    15991         (KJS::Collector::cellBlock):
    15992         (KJS::Collector::cellOffset):
    15993         (KJS::Collector::isCellMarked):
    15994         (KJS::Collector::markCell):
    15995         (KJS::Collector::reportExtraMemoryCost):
    15996         * kjs/date_object.cpp:
    15997         (KJS::formatLocaleDate):
    15998         (KJS::DatePrototype::DatePrototype):
    15999         (KJS::DateObjectImp::DateObjectImp):
    16000         (KJS::DateObjectImp::construct):
    16001         (KJS::DateObjectImp::callAsFunction):
    16002         (KJS::DateObjectFuncImp::DateObjectFuncImp):
    16003         (KJS::DateObjectFuncImp::callAsFunction):
    16004         (KJS::dateProtoFuncToString):
    16005         (KJS::dateProtoFuncToUTCString):
    16006         (KJS::dateProtoFuncToDateString):
    16007         (KJS::dateProtoFuncToTimeString):
    16008         (KJS::dateProtoFuncToLocaleString):
    16009         (KJS::dateProtoFuncToLocaleDateString):
    16010         (KJS::dateProtoFuncToLocaleTimeString):
    16011         (KJS::dateProtoFuncValueOf):
    16012         (KJS::dateProtoFuncGetTime):
    16013         (KJS::dateProtoFuncGetFullYear):
    16014         (KJS::dateProtoFuncGetUTCFullYear):
    16015         (KJS::dateProtoFuncToGMTString):
    16016         (KJS::dateProtoFuncGetMonth):
    16017         (KJS::dateProtoFuncGetUTCMonth):
    16018         (KJS::dateProtoFuncGetDate):
    16019         (KJS::dateProtoFuncGetUTCDate):
    16020         (KJS::dateProtoFuncGetDay):
    16021         (KJS::dateProtoFuncGetUTCDay):
    16022         (KJS::dateProtoFuncGetHours):
    16023         (KJS::dateProtoFuncGetUTCHours):
    16024         (KJS::dateProtoFuncGetMinutes):
    16025         (KJS::dateProtoFuncGetUTCMinutes):
    16026         (KJS::dateProtoFuncGetSeconds):
    16027         (KJS::dateProtoFuncGetUTCSeconds):
    16028         (KJS::dateProtoFuncGetMilliSeconds):
    16029         (KJS::dateProtoFuncGetUTCMilliseconds):
    16030         (KJS::dateProtoFuncGetTimezoneOffset):
    16031         (KJS::dateProtoFuncSetTime):
    16032         (KJS::setNewValueFromTimeArgs):
    16033         (KJS::setNewValueFromDateArgs):
    16034         (KJS::dateProtoFuncSetYear):
    16035         (KJS::dateProtoFuncGetYear):
    16036         * kjs/error_object.cpp:
    16037         (KJS::ErrorPrototype::ErrorPrototype):
    16038         (KJS::errorProtoFuncToString):
    16039         (KJS::ErrorObjectImp::ErrorObjectImp):
    16040         (KJS::ErrorObjectImp::construct):
    16041         (KJS::NativeErrorPrototype::NativeErrorPrototype):
    16042         (KJS::NativeErrorImp::NativeErrorImp):
    16043         (KJS::NativeErrorImp::construct):
    16044         * kjs/function.cpp:
    16045         (KJS::FunctionImp::lengthGetter):
    16046         (KJS::FunctionImp::construct):
    16047         (KJS::Arguments::Arguments):
    16048         (KJS::ActivationImp::createArgumentsObject):
    16049         (KJS::encode):
    16050         (KJS::decode):
    16051         (KJS::globalFuncParseInt):
    16052         (KJS::globalFuncParseFloat):
    16053         (KJS::globalFuncEscape):
    16054         (KJS::globalFuncUnescape):
    16055         (KJS::PrototypeFunction::PrototypeFunction):
    16056         (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction):
    16057         * kjs/function_object.cpp:
    16058         (KJS::FunctionPrototype::FunctionPrototype):
    16059         (KJS::functionProtoFuncToString):
    16060         (KJS::FunctionObjectImp::FunctionObjectImp):
    16061         (KJS::FunctionObjectImp::construct):
    16062         * kjs/internal.cpp:
    16063         (KJS::StringImp::toObject):
    16064         * kjs/internal.h:
    16065         (KJS::StringImp::StringImp):
    16066         (KJS::NumberImp::operator new):
    16067         * kjs/list.cpp:
    16068         (KJS::List::markSet):
    16069         (KJS::List::markProtectedListsSlowCase):
    16070         (KJS::List::expandAndAppend):
    16071         * kjs/list.h:
    16072         (KJS::List::List):
    16073         (KJS::List::~List):
    16074         (KJS::List::markProtectedLists):
    16075         * kjs/lookup.h:
    16076         (KJS::staticFunctionGetter):
    16077         (KJS::cacheGlobalObject):
    16078         * kjs/math_object.cpp:
    16079         (KJS::MathObjectImp::getValueProperty):
    16080         (KJS::mathProtoFuncAbs):
    16081         (KJS::mathProtoFuncACos):
    16082         (KJS::mathProtoFuncASin):
    16083         (KJS::mathProtoFuncATan):
    16084         (KJS::mathProtoFuncATan2):
    16085         (KJS::mathProtoFuncCeil):
    16086         (KJS::mathProtoFuncCos):
    16087         (KJS::mathProtoFuncExp):
    16088         (KJS::mathProtoFuncFloor):
    16089         (KJS::mathProtoFuncLog):
    16090         (KJS::mathProtoFuncMax):
    16091         (KJS::mathProtoFuncMin):
    16092         (KJS::mathProtoFuncPow):
    16093         (KJS::mathProtoFuncRandom):
    16094         (KJS::mathProtoFuncRound):
    16095         (KJS::mathProtoFuncSin):
    16096         (KJS::mathProtoFuncSqrt):
    16097         (KJS::mathProtoFuncTan):
    16098         * kjs/nodes.cpp:
    16099         (KJS::ParserRefCounted::ParserRefCounted):
    16100         (KJS::ParserRefCounted::ref):
    16101         (KJS::ParserRefCounted::deref):
    16102         (KJS::ParserRefCounted::refcount):
    16103         (KJS::ParserRefCounted::deleteNewObjects):
    16104         (KJS::Node::handleException):
    16105         (KJS::NumberNode::evaluate):
    16106         (KJS::StringNode::evaluate):
    16107         (KJS::ArrayNode::evaluate):
    16108         (KJS::PostIncResolveNode::evaluate):
    16109         (KJS::PostIncLocalVarNode::evaluate):
    16110         (KJS::PostDecResolveNode::evaluate):
    16111         (KJS::PostDecLocalVarNode::evaluate):
    16112         (KJS::PostDecLocalVarNode::inlineEvaluateToNumber):
    16113         (KJS::PostIncBracketNode::evaluate):
    16114         (KJS::PostDecBracketNode::evaluate):
    16115         (KJS::PostIncDotNode::evaluate):
    16116         (KJS::PostDecDotNode::evaluate):
    16117         (KJS::typeStringForValue):
    16118         (KJS::LocalVarTypeOfNode::evaluate):
    16119         (KJS::TypeOfResolveNode::evaluate):
    16120         (KJS::TypeOfValueNode::evaluate):
    16121         (KJS::PreIncLocalVarNode::evaluate):
    16122         (KJS::PreIncResolveNode::evaluate):
    16123         (KJS::PreDecLocalVarNode::evaluate):
    16124         (KJS::PreDecResolveNode::evaluate):
    16125         (KJS::PreIncConstNode::evaluate):
    16126         (KJS::PreDecConstNode::evaluate):
    16127         (KJS::PostIncConstNode::evaluate):
    16128         (KJS::PostDecConstNode::evaluate):
    16129         (KJS::PreIncBracketNode::evaluate):
    16130         (KJS::PreDecBracketNode::evaluate):
    16131         (KJS::PreIncDotNode::evaluate):
    16132         (KJS::PreDecDotNode::evaluate):
    16133         (KJS::NegateNode::evaluate):
    16134         (KJS::BitwiseNotNode::evaluate):
    16135         (KJS::MultNode::evaluate):
    16136         (KJS::DivNode::evaluate):
    16137         (KJS::ModNode::evaluate):
    16138         (KJS::addSlowCase):
    16139         (KJS::add):
    16140         (KJS::AddNumbersNode::evaluate):
    16141         (KJS::AddStringsNode::evaluate):
    16142         (KJS::AddStringLeftNode::evaluate):
    16143         (KJS::AddStringRightNode::evaluate):
    16144         (KJS::SubNode::evaluate):
    16145         (KJS::LeftShiftNode::evaluate):
    16146         (KJS::RightShiftNode::evaluate):
    16147         (KJS::UnsignedRightShiftNode::evaluate):
    16148         (KJS::BitXOrNode::evaluate):
    16149         (KJS::BitOrNode::evaluate):
    16150         (KJS::valueForReadModifyAssignment):
    16151         (KJS::ForInNode::execute):
    16152         (KJS::TryNode::execute):
    16153         (KJS::FuncDeclNode::makeFunction):
    16154         (KJS::FuncExprNode::evaluate):
    16155         * kjs/nodes.h:
    16156         * kjs/number_object.cpp:
    16157         (KJS::NumberPrototype::NumberPrototype):
    16158         (KJS::numberProtoFuncToString):
    16159         (KJS::numberProtoFuncToLocaleString):
    16160         (KJS::numberProtoFuncToFixed):
    16161         (KJS::numberProtoFuncToExponential):
    16162         (KJS::numberProtoFuncToPrecision):
    16163         (KJS::NumberObjectImp::NumberObjectImp):
    16164         (KJS::NumberObjectImp::getValueProperty):
    16165         (KJS::NumberObjectImp::construct):
    16166         (KJS::NumberObjectImp::callAsFunction):
    16167         * kjs/object.cpp:
    16168         (KJS::JSObject::call):
    16169         (KJS::JSObject::get):
    16170         (KJS::JSObject::put):
    16171         (KJS::JSObject::defineGetter):
    16172         (KJS::JSObject::defineSetter):
    16173         (KJS::JSObject::putDirect):
    16174         (KJS::Error::create):
    16175         * kjs/object.h:
    16176         * kjs/object_object.cpp:
    16177         (KJS::ObjectPrototype::ObjectPrototype):
    16178         (KJS::objectProtoFuncToLocaleString):
    16179         (KJS::objectProtoFuncToString):
    16180         (KJS::ObjectObjectImp::ObjectObjectImp):
    16181         (KJS::ObjectObjectImp::construct):
    16182         * kjs/property_map.h:
    16183         (KJS::SavedProperty::SavedProperty):
    16184         (KJS::SavedProperty::init):
    16185         (KJS::SavedProperty::~SavedProperty):
    16186         (KJS::SavedProperty::name):
    16187         (KJS::SavedProperty::value):
    16188         (KJS::SavedProperty::attributes):
    16189         * kjs/protect.h:
    16190         (KJS::gcProtect):
    16191         (KJS::gcUnprotect):
    16192         * kjs/regexp_object.cpp:
    16193         (KJS::RegExpPrototype::RegExpPrototype):
    16194         (KJS::regExpProtoFuncToString):
    16195         (KJS::RegExpImp::getValueProperty):
    16196         (KJS::RegExpObjectImp::RegExpObjectImp):
    16197         (KJS::RegExpObjectImp::arrayOfMatches):
    16198         (KJS::RegExpObjectImp::getBackref):
    16199         (KJS::RegExpObjectImp::getLastParen):
    16200         (KJS::RegExpObjectImp::getLeftContext):
    16201         (KJS::RegExpObjectImp::getRightContext):
    16202         (KJS::RegExpObjectImp::getValueProperty):
    16203         (KJS::RegExpObjectImp::createRegExpImp):
    16204         * kjs/regexp_object.h:
    16205         * kjs/string_object.cpp:
    16206         (KJS::StringInstance::StringInstance):
    16207         (KJS::StringInstance::lengthGetter):
    16208         (KJS::StringInstance::indexGetter):
    16209         (KJS::stringInstanceNumericPropertyGetter):
    16210         (KJS::StringPrototype::StringPrototype):
    16211         (KJS::replace):
    16212         (KJS::stringProtoFuncCharAt):
    16213         (KJS::stringProtoFuncCharCodeAt):
    16214         (KJS::stringProtoFuncConcat):
    16215         (KJS::stringProtoFuncIndexOf):
    16216         (KJS::stringProtoFuncLastIndexOf):
    16217         (KJS::stringProtoFuncMatch):
    16218         (KJS::stringProtoFuncSearch):
    16219         (KJS::stringProtoFuncReplace):
    16220         (KJS::stringProtoFuncSlice):
    16221         (KJS::stringProtoFuncSplit):
    16222         (KJS::stringProtoFuncSubstr):
    16223         (KJS::stringProtoFuncSubstring):
    16224         (KJS::stringProtoFuncToLowerCase):
    16225         (KJS::stringProtoFuncToUpperCase):
    16226         (KJS::stringProtoFuncToLocaleLowerCase):
    16227         (KJS::stringProtoFuncToLocaleUpperCase):
    16228         (KJS::stringProtoFuncLocaleCompare):
    16229         (KJS::stringProtoFuncBig):
    16230         (KJS::stringProtoFuncSmall):
    16231         (KJS::stringProtoFuncBlink):
    16232         (KJS::stringProtoFuncBold):
    16233         (KJS::stringProtoFuncFixed):
    16234         (KJS::stringProtoFuncItalics):
    16235         (KJS::stringProtoFuncStrike):
    16236         (KJS::stringProtoFuncSub):
    16237         (KJS::stringProtoFuncSup):
    16238         (KJS::stringProtoFuncFontcolor):
    16239         (KJS::stringProtoFuncFontsize):
    16240         (KJS::stringProtoFuncAnchor):
    16241         (KJS::stringProtoFuncLink):
    16242         (KJS::StringObjectImp::StringObjectImp):
    16243         (KJS::StringObjectImp::construct):
    16244         (KJS::StringObjectImp::callAsFunction):
    16245         (KJS::StringObjectFuncImp::StringObjectFuncImp):
    16246         (KJS::StringObjectFuncImp::callAsFunction):
    16247         * kjs/string_object.h:
    16248         (KJS::StringInstanceThatMasqueradesAsUndefined::StringInstanceThatMasqueradesAsUndefined):
    16249         * kjs/testkjs.cpp:
    16250         (GlobalObject::GlobalObject):
    16251         (functionGC):
    16252         (functionRun):
    16253         (functionReadline):
    16254         (kjsmain):
    16255         * kjs/ustring.h:
    16256         * kjs/value.cpp:
    16257         (KJS::JSCell::operator new):
    16258         (KJS::jsString):
    16259         (KJS::jsOwnedString):
    16260         (KJS::jsNumberCell):
    16261         * kjs/value.h:
    16262         (KJS::jsNaN):
    16263         (KJS::jsNumber):
    16264         (KJS::jsNumberFromAnd):
    16265         (KJS::JSCell::marked):
    16266         (KJS::JSCell::mark):
    16267         (KJS::JSValue::toJSNumber):
    16268         * wtf/ThreadSpecific.h:
    16269         (WTF::T):
    16270 
    16271 2008-05-10  Julien Chaffraix  <[email protected]>
    16272 
    16273         Qt & wx build fix.
    16274 
    16275         * JavaScriptCore.pri: Add profiler/Profile.cpp.
    16276         * JavaScriptCoreSources.bkl: Ditto.
    16277 
    16278 2008-05-10  Jan Michael Alonzo  <[email protected]>
    16279 
    16280         Reviewed by Maciej.
    16281 
    16282         Gtk+ build fix
    16283 
    16284         * GNUmakefile.am: Add Profile.cpp in _sources
    16285 
    16286 2008-05-09  Brady Eidson  <[email protected]>
    16287 
    16288         Build Fix.  Kevin is an idiot. 
    16289         ("My name is Kevin McCullough and I approve this message.")
    16290 
    16291         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    16292 
    16293 2008-05-09  Kevin McCullough  <[email protected]>
    16294 
    16295         Reviewed by Tim.
    16296 
    16297         -<rdar://problem/5770054> JavaScript profiler (10928)
    16298         -Add Profile class so that all profiles can be stored and retrieved by
    16299         the WebInspector when that time comes.
    16300 
    16301         * JavaScriptCore.exp: Export the new function signatures.
    16302         * JavaScriptCore.xcodeproj/project.pbxproj: Add the new files to the
    16303         project
    16304         * profiler/Profile.cpp: Added. This class represents a single run of the
    16305         profiler.
    16306         (KJS::Profile::Profile):
    16307         (KJS::Profile::willExecute):
    16308         (KJS::Profile::didExecute):
    16309         (KJS::Profile::printDataInspectorStyle):
    16310         (KJS::functionNameCountPairComparator):
    16311         (KJS::Profile::printDataSampleStyle):
    16312         * profiler/Profile.h: Added. Ditto
    16313         (KJS::Profile::stopProfiling):
    16314         * profiler/Profiler.cpp: Now the profiler keeps track of many profiles
    16315         but only runs one at a time.
    16316         (KJS::Profiler::startProfiling):
    16317         (KJS::Profiler::stopProfiling):
    16318         (KJS::Profiler::willExecute):
    16319         (KJS::Profiler::didExecute):
    16320         (KJS::Profiler::printDataInspectorStyle):
    16321         (KJS::Profiler::printDataSampleStyle):
    16322         * profiler/Profiler.h: Ditto.
    16323         (KJS::Profiler::~Profiler):
    16324         (KJS::Profiler::allProfiles):
    16325         (KJS::Profiler::clearProfiles):
    16326 
    16327 2008-05-08  Anders Carlsson  <[email protected]>
    16328 
    16329         Reviewed by Mark.
    16330 
    16331         Enable NPAPI plug-ins on 64-bit.
    16332        
    16333         * wtf/Platform.h:
    16334 
    16335 2008-05-07  Julien Chaffraix  <[email protected]>
    16336 
    16337         Reviewed by Adam Roben.
    16338 
    16339         wx & Gtk build fix.
    16340 
    16341         Add SIZE_MAX definition for the wx port.
    16342 
    16343         * os-win32/stdint.h:
    16344 
    16345 2008-05-07  Ariya Hidayat  <[email protected]>
    16346 
    16347         Reviewed by Simon.
    16348 
    16349         Support for isMainThread in the Qt port.
    16350 
    16351         * wtf/ThreadingQt.cpp:
    16352         (WTF::initializeThreading): Adjusted.
    16353         (WTF::isMainThread): Added.
    16354 
    16355 2008-05-05  Darin Adler  <[email protected]>
    16356 
    16357         Reviewed by John Sullivan.
    16358 
    16359         - fix debug-only leak seen on buildbot
    16360 
    16361         * wtf/HashTable.h:
    16362         (WTF::HashTable::checkKey): After writing an empty value in, but before constructing a
    16363         deleted value on top of it, call the destructor so the empty value doesn't leak.
    16364 
    16365 2008-05-02  Alexey Proskuryakov  <[email protected]>
    16366 
    16367         Reviewed by Geoffrey Garen.
    16368 
    16369         Get rid of static data in nodes.cpp (well, at least of non-debug one).
    16370 
    16371         No measurable change on SunSpider.
    16372 
    16373         * kjs/InitializeThreading.cpp:
    16374         (KJS::initializeThreadingOnce):
    16375         * kjs/nodes.cpp:
    16376         (KJS::newTrackedObjects):
    16377         (KJS::trackedObjectExtraRefCounts):
    16378         (KJS::initializeNodesThreading):
    16379         (KJS::ParserRefCounted::ParserRefCounted):
    16380         (KJS::ParserRefCounted::ref):
    16381         (KJS::ParserRefCounted::deref):
    16382         (KJS::ParserRefCounted::refcount):
    16383         (KJS::ParserRefCounted::deleteNewObjects):
    16384         * kjs/nodes.h:
    16385         Made newTrackedObjects and trackedObjectExtraRefCounts per-thread.
    16386 
    16387 2008-05-02  Alexey Proskuryakov  <[email protected]>
    16388 
    16389         Reviewed by Darin.
    16390 
    16391         Move call stack depth counter to global object.
    16392 
    16393         * kjs/ExecState.h: (KJS::ExecState::functionCallDepth): Added a recursion depth counter to
    16394         per-thread data.
    16395         * kjs/JSGlobalObject.cpp: (KJS::JSGlobalObject::init): Initialize PerThreadData.functionCallDepth.
    16396         * kjs/JSGlobalObject.h: (KJS::JSGlobalObject::perThreadData): Made the result non-const.
    16397 
    16398         * kjs/object.cpp:
    16399         (KJS::throwStackSizeExceededError): Moved throwError to a separate function, since it is now
    16400         the only thing in JSObject::call that needs a PIC branch.
    16401         (KJS::JSObject::call): Use a per-thread variable instead of local static for recursion depth
    16402         tracking.
    16403 
    16404 2008-05-02  Alexey Proskuryakov  <[email protected]>
    16405 
    16406         Reviewed by Darin.
    16407 
    16408         Make JavaScriptGlue and JavaScriptCore API functions implicitly call initializeThreading
    16409         for the sake of non-WebKit clients.
    16410 
    16411         * API/JSBase.cpp:
    16412         (JSGarbageCollect):
    16413         * API/JSContextRef.cpp:
    16414         (JSGlobalContextCreate):
    16415         These are the JavaScriptCore API bottlenecks. There are a few other JSStringRef
    16416         and JSClassRef functions that can be called earlier, but they do not do anything that
    16417         requires initializeThreading.
    16418 
    16419         * kjs/InitializeThreading.cpp:
    16420         (KJS::doInitializeThreading):
    16421         (KJS::initializeThreading):
    16422         On Darwin, make the initialization happen under pthread_once, since there is no guarantee
    16423         that non-WebKit clients won't try to call this function re-entrantly.
    16424 
    16425         * kjs/InitializeThreading.h:
    16426         * wtf/Threading.h:
    16427         Spell out initializeThreading contract.
    16428 
    16429         * wtf/ThreadingPthreads.cpp: (WTF::isMainThread): Make sure that results are correct on
    16430         Darwin, even if threading was initialized from a secondary thread.
    16431 
    16432 2008-05-02  Alexey Proskuryakov  <[email protected]>
    16433 
    16434         Reviewed by Geoffrey Garen.
    16435 
    16436         https://bugs.webkit.org/show_bug.cgi?id=18826
    16437         Make JavaScript heap per-thread
    16438 
    16439         * wtf/ThreadSpecific.h: Make sure to initialize POD thread-specific varaibles, too
    16440         (replaced "new T" with "new T()").
    16441 
    16442         * kjs/collector.h: Renamed Collector to Heap, made the heap per-thread. Removed support for
    16443         multithreaded access to a heap.
    16444         (KJS::CollectorBlock): Removed collectOnMainThreadOnly bitmap, added a reference to owner heap.
    16445         (KJS::SmallCellCollectorBlock): Ditto.
    16446         (KJS::Heap::markListSet): Moved from a static variable in List.cpp to a per-thread one here.
    16447         (KJS::Heap::heap): Added a method to find which heap a JSValue is allocated in.
    16448 
    16449         * kjs/collector.cpp: Changed "const size_t" constants to #defines, to avoid a PIC branch
    16450         (gcc was using one to access a constant used in std::max(), because it takes a reference,
    16451         even though std::max() itself was inlined).
    16452         (KJS::Heap::threadHeap): JS heap is now per-thread.
    16453         (KJS::Heap::Heap): Zero-initialize the heap.
    16454         (KJS::allocateBlock): Added NEVER_INLINE, because this function uses a PIC branch, so
    16455         inlining it in Heap::heapAllocate() is bad for performance, now that the latter doesn't
    16456         use any global data.
    16457         (KJS::Heap::heapAllocate): Initialize Block::heap.
    16458         (KJS::Heap::markCurrentThreadConservatively): Moved into markStackObjectsConservatively(),
    16459         as GC only works with a current thread's heap now.
    16460         (KJS::Heap::sweep): Removed collectOnMainThreadOnly checks.
    16461         (KJS::Heap::collect): Ditto.
    16462 
    16463         * kjs/JSLock.cpp:
    16464         * kjs/JSLock.h:
    16465         (KJS::JSLock::JSLock):
    16466         Removed registerThread(), as the heap no longer cares.
    16467 
    16468         * kjs/InitializeThreading.cpp: (KJS::initializeThreading): Initialize new per-thread
    16469         variables in Heap and JSGlobalObject.
    16470 
    16471         * kjs/ExecState.h: (KJS::ExecState::heap): Added a heap pointer for faster access to
    16472         per-thread heap, and an accessor for it.
    16473 
    16474         * kjs/JSGlobalObject.h: Made JSGlobalObject linked list per-thread.
    16475         * kjs/JSGlobalObject.cpp:
    16476         (KJS::JSGlobalObject::~JSGlobalObject): Fixed a bug in linked list handling. It only worked
    16477         right if the removed object was the head one!
    16478         (KJS::JSGlobalObject::head): Return a per-thread list head.
    16479         (KJS::JSGlobalObject::init): Store a reference to per-thread heap.
    16480         (KJS::JSGlobalObject::reset): Pass ExecState to functions that need it.
    16481         (KJS::JSGlobalObject::tearOffActivation): Ditto.
    16482         (KJS::JSGlobalObject::operator new): JSGlobalObject allocation cannot use an ExecState,
    16483         so it needs a custom operator new that directly accesses per-thread heap.
    16484 
    16485         * kjs/list.h:
    16486         (KJS::List::List): Replaced m_isInMarkSet boolean with an actual pointer to the set, since it
    16487         is no longer a single static object.
    16488         (KJS::List::~List): Ditto.
    16489         * kjs/list.cpp:
    16490         (KJS::List::markSet): Removed, this is now stored in Heap.
    16491         (KJS::List::markProtectedLists): Take a reference to the list.
    16492         (KJS::List::expandAndAppend): Ask the current thread heap for a mark set reference.
    16493 
    16494         * kjs/protect.h:
    16495         (KJS::gcProtect):
    16496         (KJS::gcUnprotect):
    16497         Use the newly added Heap::heap() method to find out which heap the value to be (un)protected
    16498         belongs to.
    16499 
    16500         * kjs/property_map.h: Removed unused SavedProperty class.
    16501 
    16502         * JavaScriptCore.exp:
    16503         * API/JSBase.cpp:
    16504         (JSGarbageCollect):
    16505         * API/JSCallbackObjectFunctions.h:
    16506         (KJS::::staticFunctionGetter):
    16507         * API/JSClassRef.cpp:
    16508         (OpaqueJSClass::prototype):
    16509         * API/JSObjectRef.cpp:
    16510         (JSObjectMake):
    16511         (JSObjectMakeFunctionWithCallback):
    16512         (JSObjectMakeConstructor):
    16513         (JSObjectMakeFunction):
    16514         * API/JSValueRef.cpp:
    16515         (JSValueMakeNumber):
    16516         (JSValueMakeString):
    16517         * kjs/array_instance.cpp:
    16518         (KJS::ArrayInstance::ArrayInstance):
    16519         (KJS::ArrayInstance::lengthGetter):
    16520         * kjs/array_object.cpp:
    16521         (KJS::arrayProtoFuncToString):
    16522         (KJS::arrayProtoFuncToLocaleString):
    16523         (KJS::arrayProtoFuncJoin):
    16524         (KJS::arrayProtoFuncConcat):
    16525         (KJS::arrayProtoFuncPop):
    16526         (KJS::arrayProtoFuncPush):
    16527         (KJS::arrayProtoFuncShift):
    16528         (KJS::arrayProtoFuncSlice):
    16529         (KJS::arrayProtoFuncSplice):
    16530         (KJS::arrayProtoFuncUnShift):
    16531         (KJS::arrayProtoFuncFilter):
    16532         (KJS::arrayProtoFuncMap):
    16533         (KJS::arrayProtoFuncEvery):
    16534         (KJS::arrayProtoFuncForEach):
    16535         (KJS::arrayProtoFuncSome):
    16536         (KJS::arrayProtoFuncIndexOf):
    16537         (KJS::arrayProtoFuncLastIndexOf):
    16538         (KJS::ArrayObjectImp::ArrayObjectImp):
    16539         (KJS::ArrayObjectImp::construct):
    16540         * kjs/bool_object.cpp:
    16541         (KJS::BooleanPrototype::BooleanPrototype):
    16542         (KJS::booleanProtoFuncToString):
    16543         (KJS::BooleanObjectImp::BooleanObjectImp):
    16544         (KJS::BooleanObjectImp::construct):
    16545         * kjs/date_object.cpp:
    16546         (KJS::formatLocaleDate):
    16547         (KJS::DatePrototype::DatePrototype):
    16548         (KJS::DateObjectImp::DateObjectImp):
    16549         (KJS::DateObjectImp::construct):
    16550         (KJS::DateObjectImp::callAsFunction):
    16551         (KJS::DateObjectFuncImp::DateObjectFuncImp):
    16552         (KJS::DateObjectFuncImp::callAsFunction):
    16553         (KJS::dateProtoFuncToString):
    16554         (KJS::dateProtoFuncToUTCString):
    16555         (KJS::dateProtoFuncToDateString):
    16556         (KJS::dateProtoFuncToTimeString):
    16557         (KJS::dateProtoFuncToLocaleString):
    16558         (KJS::dateProtoFuncToLocaleDateString):
    16559         (KJS::dateProtoFuncToLocaleTimeString):
    16560         (KJS::dateProtoFuncValueOf):
    16561         (KJS::dateProtoFuncGetTime):
    16562         (KJS::dateProtoFuncGetFullYear):
    16563         (KJS::dateProtoFuncGetUTCFullYear):
    16564         (KJS::dateProtoFuncToGMTString):
    16565         (KJS::dateProtoFuncGetMonth):
    16566         (KJS::dateProtoFuncGetUTCMonth):
    16567         (KJS::dateProtoFuncGetDate):
    16568         (KJS::dateProtoFuncGetUTCDate):
    16569         (KJS::dateProtoFuncGetDay):
    16570         (KJS::dateProtoFuncGetUTCDay):
    16571         (KJS::dateProtoFuncGetHours):
    16572         (KJS::dateProtoFuncGetUTCHours):
    16573         (KJS::dateProtoFuncGetMinutes):
    16574         (KJS::dateProtoFuncGetUTCMinutes):
    16575         (KJS::dateProtoFuncGetSeconds):
    16576         (KJS::dateProtoFuncGetUTCSeconds):
    16577         (KJS::dateProtoFuncGetMilliSeconds):
    16578         (KJS::dateProtoFuncGetUTCMilliseconds):
    16579         (KJS::dateProtoFuncGetTimezoneOffset):
    16580         (KJS::dateProtoFuncSetTime):
    16581         (KJS::setNewValueFromTimeArgs):
    16582         (KJS::setNewValueFromDateArgs):
    16583         (KJS::dateProtoFuncSetYear):
    16584         (KJS::dateProtoFuncGetYear):
    16585         * kjs/error_object.cpp:
    16586         (KJS::ErrorPrototype::ErrorPrototype):
    16587         (KJS::errorProtoFuncToString):
    16588         (KJS::ErrorObjectImp::ErrorObjectImp):
    16589         (KJS::ErrorObjectImp::construct):
    16590         (KJS::NativeErrorPrototype::NativeErrorPrototype):
    16591         (KJS::NativeErrorImp::NativeErrorImp):
    16592         (KJS::NativeErrorImp::construct):
    16593         * kjs/function.cpp:
    16594         (KJS::FunctionImp::lengthGetter):
    16595         (KJS::FunctionImp::construct):
    16596         (KJS::Arguments::Arguments):
    16597         (KJS::ActivationImp::createArgumentsObject):
    16598         (KJS::encode):
    16599         (KJS::decode):
    16600         (KJS::globalFuncParseInt):
    16601         (KJS::globalFuncParseFloat):
    16602         (KJS::globalFuncEscape):
    16603         (KJS::globalFuncUnescape):
    16604         (KJS::PrototypeFunction::PrototypeFunction):
    16605         (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction):
    16606         * kjs/function_object.cpp:
    16607         (KJS::FunctionPrototype::FunctionPrototype):
    16608         (KJS::functionProtoFuncToString):
    16609         (KJS::FunctionObjectImp::FunctionObjectImp):
    16610         (KJS::FunctionObjectImp::construct):
    16611         * kjs/internal.cpp:
    16612         (KJS::StringImp::toObject):
    16613         * kjs/internal.h:
    16614         (KJS::StringImp::StringImp):
    16615         (KJS::NumberImp::operator new):
    16616         * kjs/lookup.h:
    16617         (KJS::staticFunctionGetter):
    16618         (KJS::cacheGlobalObject):
    16619         * kjs/math_object.cpp:
    16620         (KJS::MathObjectImp::getValueProperty):
    16621         (KJS::mathProtoFuncAbs):
    16622         (KJS::mathProtoFuncACos):
    16623         (KJS::mathProtoFuncASin):
    16624         (KJS::mathProtoFuncATan):
    16625         (KJS::mathProtoFuncATan2):
    16626         (KJS::mathProtoFuncCeil):
    16627         (KJS::mathProtoFuncCos):
    16628         (KJS::mathProtoFuncExp):
    16629         (KJS::mathProtoFuncFloor):
    16630         (KJS::mathProtoFuncLog):
    16631         (KJS::mathProtoFuncMax):
    16632         (KJS::mathProtoFuncMin):
    16633         (KJS::mathProtoFuncPow):
    16634         (KJS::mathProtoFuncRandom):
    16635         (KJS::mathProtoFuncRound):
    16636         (KJS::mathProtoFuncSin):
    16637         (KJS::mathProtoFuncSqrt):
    16638         (KJS::mathProtoFuncTan):
    16639         * kjs/nodes.cpp:
    16640         (KJS::Node::handleException):
    16641         (KJS::NumberNode::evaluate):
    16642         (KJS::StringNode::evaluate):
    16643         (KJS::ArrayNode::evaluate):
    16644         (KJS::PostIncResolveNode::evaluate):
    16645         (KJS::PostIncLocalVarNode::evaluate):
    16646         (KJS::PostDecResolveNode::evaluate):
    16647         (KJS::PostDecLocalVarNode::evaluate):
    16648         (KJS::PostDecLocalVarNode::inlineEvaluateToNumber):
    16649         (KJS::PostIncBracketNode::evaluate):
    16650         (KJS::PostDecBracketNode::evaluate):
    16651         (KJS::PostIncDotNode::evaluate):
    16652         (KJS::PostDecDotNode::evaluate):
    16653         (KJS::typeStringForValue):
    16654         (KJS::LocalVarTypeOfNode::evaluate):
    16655         (KJS::TypeOfResolveNode::evaluate):
    16656         (KJS::TypeOfValueNode::evaluate):
    16657         (KJS::PreIncLocalVarNode::evaluate):
    16658         (KJS::PreIncResolveNode::evaluate):
    16659         (KJS::PreDecLocalVarNode::evaluate):
    16660         (KJS::PreDecResolveNode::evaluate):
    16661         (KJS::PreIncConstNode::evaluate):
    16662         (KJS::PreDecConstNode::evaluate):
    16663         (KJS::PostIncConstNode::evaluate):
    16664         (KJS::PostDecConstNode::evaluate):
    16665         (KJS::PreIncBracketNode::evaluate):
    16666         (KJS::PreDecBracketNode::evaluate):
    16667         (KJS::PreIncDotNode::evaluate):
    16668         (KJS::PreDecDotNode::evaluate):
    16669         (KJS::NegateNode::evaluate):
    16670         (KJS::BitwiseNotNode::evaluate):
    16671         (KJS::MultNode::evaluate):
    16672         (KJS::DivNode::evaluate):
    16673         (KJS::ModNode::evaluate):
    16674         (KJS::addSlowCase):
    16675         (KJS::add):
    16676         (KJS::AddNumbersNode::evaluate):
    16677         (KJS::AddStringsNode::evaluate):
    16678         (KJS::AddStringLeftNode::evaluate):
    16679         (KJS::AddStringRightNode::evaluate):
    16680         (KJS::SubNode::evaluate):
    16681         (KJS::LeftShiftNode::evaluate):
    16682         (KJS::RightShiftNode::evaluate):
    16683         (KJS::UnsignedRightShiftNode::evaluate):
    16684         (KJS::BitXOrNode::evaluate):
    16685         (KJS::BitOrNode::evaluate):
    16686         (KJS::valueForReadModifyAssignment):
    16687         (KJS::ForInNode::execute):
    16688         (KJS::TryNode::execute):
    16689         (KJS::FuncDeclNode::makeFunction):
    16690         (KJS::FuncExprNode::evaluate):
    16691         * kjs/number_object.cpp:
    16692         (KJS::NumberPrototype::NumberPrototype):
    16693         (KJS::numberProtoFuncToString):
    16694         (KJS::numberProtoFuncToLocaleString):
    16695         (KJS::numberProtoFuncToFixed):
    16696         (KJS::numberProtoFuncToExponential):
    16697         (KJS::numberProtoFuncToPrecision):
    16698         (KJS::NumberObjectImp::NumberObjectImp):
    16699         (KJS::NumberObjectImp::getValueProperty):
    16700         (KJS::NumberObjectImp::construct):
    16701         (KJS::NumberObjectImp::callAsFunction):
    16702         * kjs/object.cpp:
    16703         (KJS::JSObject::defineGetter):
    16704         (KJS::JSObject::defineSetter):
    16705         (KJS::JSObject::putDirect):
    16706         (KJS::Error::create):
    16707         * kjs/object.h:
    16708         * kjs/object_object.cpp:
    16709         (KJS::ObjectPrototype::ObjectPrototype):
    16710         (KJS::objectProtoFuncToLocaleString):
    16711         (KJS::objectProtoFuncToString):
    16712         (KJS::ObjectObjectImp::ObjectObjectImp):
    16713         (KJS::ObjectObjectImp::construct):
    16714         * kjs/regexp_object.cpp:
    16715         (KJS::RegExpPrototype::RegExpPrototype):
    16716         (KJS::regExpProtoFuncToString):
    16717         (KJS::RegExpImp::getValueProperty):
    16718         (KJS::RegExpObjectImp::RegExpObjectImp):
    16719         (KJS::RegExpObjectImp::arrayOfMatches):
    16720         (KJS::RegExpObjectImp::getBackref):
    16721         (KJS::RegExpObjectImp::getLastParen):
    16722         (KJS::RegExpObjectImp::getLeftContext):
    16723         (KJS::RegExpObjectImp::getRightContext):
    16724         (KJS::RegExpObjectImp::getValueProperty):
    16725         (KJS::RegExpObjectImp::createRegExpImp):
    16726         * kjs/regexp_object.h:
    16727         * kjs/string_object.cpp:
    16728         (KJS::StringInstance::StringInstance):
    16729         (KJS::StringInstance::lengthGetter):
    16730         (KJS::StringInstance::indexGetter):
    16731         (KJS::stringInstanceNumericPropertyGetter):
    16732         (KJS::StringPrototype::StringPrototype):
    16733         (KJS::replace):
    16734         (KJS::stringProtoFuncCharAt):
    16735         (KJS::stringProtoFuncCharCodeAt):
    16736         (KJS::stringProtoFuncConcat):
    16737         (KJS::stringProtoFuncIndexOf):
    16738         (KJS::stringProtoFuncLastIndexOf):
    16739         (KJS::stringProtoFuncMatch):
    16740         (KJS::stringProtoFuncSearch):
    16741         (KJS::stringProtoFuncReplace):
    16742         (KJS::stringProtoFuncSlice):
    16743         (KJS::stringProtoFuncSplit):
    16744         (KJS::stringProtoFuncSubstr):
    16745         (KJS::stringProtoFuncSubstring):
    16746         (KJS::stringProtoFuncToLowerCase):
    16747         (KJS::stringProtoFuncToUpperCase):
    16748         (KJS::stringProtoFuncToLocaleLowerCase):
    16749         (KJS::stringProtoFuncToLocaleUpperCase):
    16750         (KJS::stringProtoFuncLocaleCompare):
    16751         (KJS::stringProtoFuncBig):
    16752         (KJS::stringProtoFuncSmall):
    16753         (KJS::stringProtoFuncBlink):
    16754         (KJS::stringProtoFuncBold):
    16755         (KJS::stringProtoFuncFixed):
    16756         (KJS::stringProtoFuncItalics):
    16757         (KJS::stringProtoFuncStrike):
    16758         (KJS::stringProtoFuncSub):
    16759         (KJS::stringProtoFuncSup):
    16760         (KJS::stringProtoFuncFontcolor):
    16761         (KJS::stringProtoFuncFontsize):
    16762         (KJS::stringProtoFuncAnchor):
    16763         (KJS::stringProtoFuncLink):
    16764         (KJS::StringObjectImp::StringObjectImp):
    16765         (KJS::StringObjectImp::construct):
    16766         (KJS::StringObjectImp::callAsFunction):
    16767         (KJS::StringObjectFuncImp::StringObjectFuncImp):
    16768         (KJS::StringObjectFuncImp::callAsFunction):
    16769         * kjs/string_object.h:
    16770         (KJS::StringInstanceThatMasqueradesAsUndefined::StringInstanceThatMasqueradesAsUndefined):
    16771         * kjs/testkjs.cpp:
    16772         (GlobalObject::GlobalObject):
    16773         (functionGC):
    16774         (functionRun):
    16775         (functionReadline):
    16776         (kjsmain):
    16777         * kjs/ustring.h:
    16778         * kjs/value.cpp:
    16779         (KJS::JSCell::operator new):
    16780         (KJS::jsString):
    16781         (KJS::jsOwnedString):
    16782         (KJS::jsNumberCell):
    16783         * kjs/value.h:
    16784         (KJS::jsNaN):
    16785         (KJS::jsNumber):
    16786         (KJS::jsNumberFromAnd):
    16787         (KJS::JSCell::marked):
    16788         (KJS::JSCell::mark):
    16789         (KJS::JSValue::toJSNumber):
    16790         Removed collectOnMainThreadOnly, as this is the only way to collect now. Replaced calls to
    16791         static Collector methods with calls to per-thread Heap ones.
    16792 
    16793 2008-05-02  Dan Bernstein  <[email protected]>
    16794 
    16795         Reviewed by Maciej Stachowiak.
    16796 
    16797         - Mac build fix
    16798 
    16799         * wtf/StrHash.h: Added header guards and removed #include "config.h".
    16800 
    16801 2008-05-01  Ada Chan  <[email protected]>
    16802 
    16803         #include <wtf/StrHash.h> in identifier.cpp.
    16804 
    16805         Reviewed by Maciej.
    16806 
    16807         * kjs/identifier.cpp:
    16808 
    16809 2008-05-01  Steve Falkenburg  <[email protected]>
    16810 
    16811         Build fix.
    16812 
    16813         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    16814 
    16815 2008-05-01  Sam Weinig  <[email protected]>
    16816 
    16817         Fix build.
    16818 
    16819         * JavaScriptCore.xcodeproj/project.pbxproj:
    16820 
    16821 2008-05-01  Kevin McCullough  <[email protected]>
    16822 
    16823         Reviewed by Darin.
    16824 
    16825         <rdar://problem/5770054> JavaScript profiler (10928)
    16826         - Fix "sample" output so that it can be imported into Instruments
    16827         - Also keep track of number of times a function is profiled.
    16828 
    16829         * JavaScriptCore.xcodeproj/project.pbxproj: Add StrHash.h which needed
    16830         to be pulled out of identifier.cpp so that it could be used by the
    16831         profiler and identifiers.
    16832         * kjs/identifier.cpp: Ditto.
    16833         * profiler/FunctionCallProfile.cpp:
    16834         (KJS::FunctionCallProfile::printDataInspectorStyle): Inspector style
    16835         printing should show microseconds.
    16836         (KJS::FunctionCallProfile::printDataSampleStyle): Sample style printing
    16837         now counts the number of times a function is in the stack tree and does
    16838         not print microseconds since that does not make sense for a sampler.
    16839         * profiler/FunctionCallProfile.h: Keep track of number of times a
    16840         function is profiled.
    16841         (KJS::FunctionCallProfile::numberOfCalls):
    16842         * profiler/Profiler.cpp:
    16843         (KJS::functionNameCountPairComparator): Comparator for sort function in
    16844         printDataSampleStyle.
    16845         (KJS::Profiler::printDataSampleStyle): Print the number of times that a
    16846         function is listed in the stack tree in order of most times listed.
    16847         * wtf/HashCountedSet.h: Added copyToVector since it didn't exist and is
    16848         a more standard way to copy a HashSet to a Vector. I added on variant
    16849         that takes a pair as the Vector's type and so the HashCountedSet simply
    16850         fills in that pair with its internal pair, and another variant that
    16851         takes a Vector of the type of the HashCountedSet and only fills in the
    16852         Vector with the first element of the pair.
    16853         (WTF::copyToVector):
    16854         * wtf/StrHash.h: Added.
    16855         (WTF::):
    16856 
    16857 2008-04-29  David Kilzer  <[email protected]>
    16858 
    16859         BUILD FIX for ENABLE(DASHBOARD_SUPPORT)
    16860 
    16861         * wtf/Platform.h: Defined ENABLE(DASHBOARD_SUPPORT) to 1 only for
    16862         PLATFORM(MAC) and PLATFORM(WIN).  Changed default to 0 for other
    16863         ports.
    16864 
    16865 2008-04-29  Greg Bolsinga  <[email protected]>
    16866 
    16867         Reviewed by Darin.
    16868 
    16869         Wrapped Dashboard code with ENABLE(DASHBOARD_SUPPORT)
    16870 
    16871         * wtf/Platform.h:
    16872 
    16873 2008-04-29  Kevin McCullough  <[email protected]>
    16874 
    16875         Reviewed by Geoff.
    16876 
    16877         -<rdar://problem/5770054> JavaScript profiler (10928)
    16878         -Keep call count.
    16879 
    16880         * profiler/FunctionCallProfile.cpp:
    16881         (KJS::FunctionCallProfile::FunctionCallProfile):
    16882         (KJS::FunctionCallProfile::didExecute): Implements call count and fixed a bug where a stackIndex
    16883         of 0 was causing the assert to be hit.
    16884         (KJS::FunctionCallProfile::stopProfiling):
    16885         (KJS::FunctionCallProfile::endAndRecordCall):
    16886         * profiler/FunctionCallProfile.h:
    16887 
    16888 2008-04-29  Simon Hausmann  <[email protected]>
    16889 
    16890         Qt/Windows build fix. The externally declared hash tables are actually
    16891         declared const and the const is mangled in the symbol name, so when
    16892         importing they also need to be marked const.
    16893 
    16894         When compiling without MULTIPLE_THREADS use a const HashTable&
    16895         instead of a HashTable& in ThreadClassInfoHashTables to avoid
    16896         initializing the latter with a const reference.
    16897 
    16898         * kjs/JSGlobalObject.cpp:
    16899 
    16900 2008-04-28  Alexey Proskuryakov  <[email protected]>
    16901 
    16902         Windows build fix.
    16903 
    16904         * kjs/ExecState.h: For whatever reason, MSVC couldn't generate a default constructor for
    16905         a struct that had a "const List" member. Removing the const qulifier makes the problem go away.
    16906 
    16907 2008-04-28  Alexey Proskuryakov  <[email protected]>
    16908 
    16909         Reviewed by Darin.
    16910 
    16911         Fix run-webkit-tests --threading
    16912         and provisionally fix <https://bugs.webkit.org/show_bug.cgi?id=18661>
    16913         Proxy server issue in Sunday's Nightly
    16914 
    16915         Changed ClassInfo objects for built-in objects to hold a getter function returning
    16916         a per-thread instance. This makes it safe to share these ClassInfo objects between threads -
    16917         and these are the only ones that need to be shared.
    16918 
    16919         * kjs/lexer.cpp:
    16920         (KJS::Lexer::Lexer):
    16921         (KJS::Lexer::~Lexer):
    16922         * kjs/lexer.h:
    16923         Made mainTable a member of Lexer, so that it no longer needs to be shared between threads.
    16924 
    16925         * kjs/object.cpp:
    16926         (KJS::JSObject::deleteProperty):
    16927         (KJS::JSObject::findPropertyHashEntry):
    16928         (KJS::JSObject::propertyIsEnumerable):
    16929         (KJS::JSObject::getPropertyAttributes):
    16930         (KJS::JSObject::getPropertyNames):
    16931         * kjs/object.h:
    16932         (KJS::ClassInfo::propHashTable):
    16933         Added a new classPropHashTableGetterFunction field to ClassInfo. If it is non-zero, the
    16934         static table is not used.
    16935 
    16936         * kjs/JSGlobalObject.cpp:
    16937         (KJS::ThreadClassInfoHashTables::ThreadClassInfoHashTables): This new class holds per-thread
    16938         HashTables for built-in classes. The old static structs are copied to create per-thread
    16939         instances.
    16940         (KJS::JSGlobalObject::threadClassInfoHashTables): An accessor/initializer for the above.
    16941         (KJS::JSGlobalObject::init): Copy per-thread data into a single structure for faster access.
    16942         Also, construct globalExec.
    16943         (KJS::JSGlobalObject::reset): Adapted for globalExec now being an OwnPtr.
    16944         (KJS::JSGlobalObject::mark): Ditto.
    16945         (KJS::JSGlobalObject::globalExec): Ditto.
    16946         * kjs/JSGlobalObject.h:
    16947         (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Made JSGlobalObject::JSGlobalObjectData::globalExec an OwnPtr, so that it can
    16948         be initialized from JSGlobalObject::init() after them. Otherwise, ExecState constructor was
    16949         trying to access half-initialized JSGlobalObject to make its own copy of these table
    16950         references, and failed.
    16951         (KJS::JSGlobalObject::JSGlobalObject): Pass "this" value to init() to create globalExec.
    16952         (KJS::JSGlobalObject::perThreadData): An accessor for per-thread data.
    16953 
    16954         * kjs/ExecState.cpp:
    16955         (KJS::ExecState::ExecState):
    16956         * kjs/ExecState.h:
    16957         (KJS::ExecState::propertyNames):
    16958         (KJS::ExecState::emptyList):
    16959         (KJS::ExecState::arrayTable):
    16960         (KJS::ExecState::dateTable):
    16961         (KJS::ExecState::mathTable):
    16962         (KJS::ExecState::numberTable):
    16963         (KJS::ExecState::RegExpImpTable):
    16964         (KJS::ExecState::RegExpObjectImpTable):
    16965         (KJS::ExecState::stringTable):
    16966         * kjs/ExecStateInlines.h:
    16967         (KJS::ExecState::ExecState):
    16968         Each ExecState holds its own reference to per-thread data, for even faster access. Moved
    16969         m_emptyList and m_propertyNames to the same structure, making ExecState faster to construct
    16970         and take less space on the stack.
    16971 
    16972         * kjs/InitializeThreading.cpp: (KJS::initializeThreading): Initialize thread-static data
    16973         added to JSGlobalObject.
    16974 
    16975         * API/JSCallbackConstructor.cpp:
    16976         * API/JSCallbackFunction.cpp:
    16977         * API/JSCallbackObject.cpp:
    16978         * JavaScriptCore.exp:
    16979         * kjs/JSVariableObject.cpp:
    16980         (KJS::JSVariableObject::getPropertyAttributes):
    16981         * kjs/JSVariableObject.h:
    16982         * kjs/array_instance.cpp:
    16983         * kjs/array_object.cpp:
    16984         (KJS::ArrayPrototype::getOwnPropertySlot):
    16985         * kjs/bool_object.cpp:
    16986         * kjs/create_hash_table:
    16987         * kjs/date_object.cpp:
    16988         (KJS::DatePrototype::getOwnPropertySlot):
    16989         (KJS::DateObjectImp::DateObjectImp):
    16990         * kjs/error_object.cpp:
    16991         * kjs/function.cpp:
    16992         * kjs/function_object.cpp:
    16993         (KJS::FunctionPrototype::FunctionPrototype):
    16994         * kjs/internal.cpp:
    16995         * kjs/lookup.h:
    16996         * kjs/math_object.cpp:
    16997         (KJS::MathObjectImp::getOwnPropertySlot):
    16998         * kjs/number_object.cpp:
    16999         (KJS::NumberObjectImp::getOwnPropertySlot):
    17000         * kjs/object_object.cpp:
    17001         (KJS::ObjectPrototype::ObjectPrototype):
    17002         * kjs/regexp_object.cpp:
    17003         (KJS::RegExpPrototype::RegExpPrototype):
    17004         (KJS::RegExpImp::getOwnPropertySlot):
    17005         (KJS::RegExpImp::put):
    17006         (KJS::RegExpObjectImp::getOwnPropertySlot):
    17007         (KJS::RegExpObjectImp::put):
    17008         * kjs/string_object.cpp:
    17009         (KJS::StringPrototype::getOwnPropertySlot):
    17010         Adjust for the above changes.
    17011 
    17012 2008-04-28  Darin Adler  <[email protected]>
    17013 
    17014         Reviewed by Adam.
    17015 
    17016         - make sure RefPtr's default hash doesn't ref/deref when computing the hash
    17017         - remove remnants of the hash table storage type optimization
    17018 
    17019         * wtf/HashFunctions.h: Used "using" to get the hash and equal functions
    17020         from PtrHash<P*> into PtrHash<RefPtr<P>>.
    17021 
    17022         * wtf/HashMap.h: Replaced uses of PairBaseHashTraits with PairHashTraits.
    17023         Eliminated storage-related typedefs. Removed constructor, destructor,
    17024         copy constructor, and destructor since the compiler-generated ones are
    17025         fine. Removed refAll and derefAll. Took out unnnecessary typecasts.
    17026         Removed use of RefCounter.
    17027 
    17028         * wtf/HashSet.h: Eliminated storage-related typedefs. Removed constructor,
    17029         destructor, copy constructor, and destructor since the compiler-generated
    17030         ones are fine. Removed refAll and derefAll. Removed unneeded template
    17031         arguents from HashSetTranslatorAdapter. Eliminated unneeded HashSetTranslator
    17032         template.
    17033 
    17034         * wtf/HashTable.h: Tweaked formatting. Removed NeedsRef, RefCounterBase,
    17035         RefCounter, HashTableRefCounterBase, HashTableRefCounter, and Assigner
    17036         class templates.
    17037 
    17038         * wtf/HashTraits.h: Removed StorageTraits, needsRef, PairBaseHashTraits,
    17039         and HashKeyStorageTraits.
    17040 
    17041         * wtf/RefPtrHashMap.h: Made all the same fixes as in HashMap. Also made
    17042         the corresponding changes to RefPtrHashMapRawKeyTranslator.
    17043 
    17044 2008-04-28  Darin Adler  <[email protected]>
    17045 
    17046         Reviewed by Mitz.
    17047 
    17048         - fix assertion hit every time you view www.apple.com
    17049 
    17050         * kjs/PropertyNameArray.cpp:
    17051         (KJS::PropertyNameArray::add): Changed assertion to allow null and empty strings.
    17052         Now to find out why we have a property named "" and if that's a bug!
    17053 
    17054 2008-04-27  Mark Rowe  <[email protected]>
    17055 
    17056         Reviewed by Maciej Stachowiak.
    17057 
    17058         Fix crash inside PtrHash::hash when loading a page.
    17059 
    17060         * wtf/HashFunctions.h: Explicitly use the superclass implementation of hash to avoid infinite recursion.
    17061 
    17062 2008-04-27  Darin Adler  <[email protected]>
    17063 
    17064         Reviewed by Maciej.
    17065 
    17066         - fix <rdar://problem/5657459> REGRESSION: JavaScriptCore no longer builds with
    17067           GCC 4.2 due to pointer aliasing warnings
    17068 
    17069         Fix this by removing the HashTable optimizations that allowed us to share a back end
    17070         implementation between hash tables with integers, pointers, RefPtr, and String objects
    17071         as keys. The way it worked was incompatible with strict aliasing.
    17072 
    17073         This increases code size. On Mac OS X we'll have to regenerate .order files to avoid
    17074         slowing down Safari startup times.
    17075 
    17076         This creates a slight slowdown in SunSpider, mitigated by the following four speedups:
    17077 
    17078         - speed up array put slightly by moving a branch (was already done for get)
    17079 
    17080         - speed up symbol table access by adding a function named inlineGet to HashMap
    17081           and using that in symbolTableGet/Put
    17082 
    17083         - speed up PropertyNameArray creation by reducing the amount of reference count
    17084           churn and uniqueness checking when adding names and not doing any allocation at
    17085           all when building small arrays
    17086 
    17087         - speed up conversion of strings to floating point numbers by eliminating the
    17088           malloc/free of the buffer for the ASCII copy of the string; a way to make
    17089           things even faster would be to change strtod to take a UTF-16 string
    17090 
    17091         Note that there is considerable unused complexity now in HashSet/Map/Table to support
    17092         "storage types", which is no longer used. Will do in a separate patch.
    17093 
    17094         * API/JSCallbackObjectFunctions.h:
    17095         (KJS::JSCallbackObject<Base>::getPropertyNames): Removed explicit cast to Identifier to
    17096         take advantage of the new PropertyNameArray::add overload and avoid reference count churn.
    17097         * API/JSObjectRef.cpp:
    17098         (JSPropertyNameAccumulatorAddName): Ditto.
    17099         * JavaScriptCore.exp: Updated PropertyNameArray::add entry point name.
    17100 
    17101         * kjs/JSVariableObject.cpp: Removed now-unneeded IdentifierRepHashTraits::nullRepPtr
    17102         definition (see below).
    17103         (KJS::JSVariableObject::getPropertyNames): Removed explicit cast to Identifier.
    17104 
    17105         * kjs/JSVariableObject.h:
    17106         (KJS::JSVariableObject::symbolTableGet): Use inlineGet for speed. Also changed to do
    17107         early exit instead of nesting the body inside an if.
    17108         (KJS::JSVariableObject::symbolTablePut): Ditto.
    17109 
    17110         * kjs/PropertyNameArray.cpp:
    17111         (KJS::PropertyNameArray::add): Changed implementation to take a raw pointer instead of
    17112         a reference to an identifier. Do uniqueness checking by searching the vector when the
    17113         vector is short, only building the set once the vector is large enough.
    17114 
    17115         * kjs/PropertyNameArray.h: Added an overload of add for a raw pointer, and made the old
    17116         add function call that one. Added an addKnownUnique function for use when the new
    17117         name is known to be different from any other in the array. Changed the vector to have
    17118         an inline capacity of 20.
    17119 
    17120         * kjs/SymbolTable.h: Changed IdentifierRepHash to inherit from the default hash for
    17121         a RefPtr so we don't have to define so much. Added an overload of the hash function for
    17122         a raw pointer as required by the new RefPtrHashMap. Got rid of the now-unneeded
    17123         IdentifierRepHashTraits -- the default traits now work fine. Added a definition of
    17124         empthValueIsZero to SymbolTableIndexHashTraits; not having it was incorrect, but harmless.
    17125 
    17126         * kjs/array_instance.cpp:
    17127         (KJS::ArrayInstance::put): Move the maxArrayIndex check inside the branch that checks
    17128         the index against the length, as done in the get function.
    17129 
    17130         * kjs/function.cpp:
    17131         (KJS::globalFuncKJSPrint): Changed to use the new getCString instead of cstring.
    17132 
    17133         * kjs/internal.cpp: Removed printInfo debugging function, a client of cstring.
    17134         If we need a debugging function we can easily make a better one and we haven't
    17135         used this one in a long time.
    17136         * kjs/internal.h: Ditto.
    17137 
    17138         * kjs/object.cpp:
    17139         (KJS::JSObject::getPropertyNames): Removed explicit cast to Identifier.
    17140         * kjs/property_map.cpp:
    17141         (KJS::PropertyMap::getEnumerablePropertyNames): Ditto. Also added a special case for
    17142         the case where the propertyNames array is empty -- in that case we know we're adding
    17143         a set of names that are non-overlapping so we can use addKnownUnique.
    17144         * kjs/ustring.cpp:
    17145         (KJS::UString::getCString): Replaces cstring. Puts the C string into a CStringBuffer,
    17146         which is a char Vector with an inline capacity. Also returns a boolean to indicate if
    17147         the converion was lossy, which eliminates the need for a separate is8Bit call.
    17148         (KJS::UString::toDouble): Changed to call getCString instead of cstring.
    17149         * kjs/ustring.h: Ditto.
    17150 
    17151         * wtf/HashFunctions.h: Overload the hash and equal functions for RefPtr's default
    17152         hash to take raw pointers. This works with the changes to RefPtrHashMap to avoid
    17153         introducing refcount churn.
    17154 
    17155         * wtf/HashMap.h: Removed special code to convert the deleted value to the empty value
    17156         when writing a new value into the map. This is now handled elsewhere.
    17157         (WTF::HashMap::get): Removed code that checks for an empty hash table before calling
    17158         HashTable::lookup; it's slightly more efficient to do this check inside lookup.
    17159 
    17160         * wtf/HashTable.h:
    17161         (WTF::HashTable::isDeletedBucket): Changed to use isDeletedValue instead of using
    17162         deletedValue and the equality operator.
    17163         (WTF::HashTable::deleteBucket): Changed to use constructDeletedValue instead of
    17164         using deletedValue and the assignment operator.
    17165         (WTF::HashTable::checkKey): Added. Factors out the check for values that are empty
    17166         or deleted keys that's used in various functions below.
    17167         (WTF::HashTable::lookup): Changed to use checkKey, check for a 0 table, and also
    17168         made public for use by RefPtrHashMap.
    17169         (WTF::HashTable::lookupForWriting): Changed to use checkKey.
    17170         (WTF::HashTable::fullLookupForWriting): Changed to use checkKey.
    17171         (WTF::HashTable::add): Changed to use checkKey, and call initializeBucket on a
    17172         deleted bucket before putting a new entry into it.
    17173         (WTF::HashTable::addPassingHashCode): Ditto.
    17174         (WTF::HashTable::deallocateTable): Check isDeletedBucket before calling ~ValueType.
    17175 
    17176         * wtf/HashTraits.h: Got ridd of all the HashTraits specialization for the integer
    17177         types, since GeneicHashTraitsBase already deals with integers separately. Put the
    17178         deleted value support into GenericHashTraitsBase. Changed FloatHashTraits to
    17179         inherit from GenericHashTraits, and define construct/isDeletedValue rather than
    17180         deletedValue. Removed the ref and deref functions from RefPtr's HashTraits, and
    17181         defined construct/isDeletedValue. Eliminated DeletedValueAssigner. Changed
    17182         PairHashTraits to define construct/isDeletedValue, and also merged
    17183         PairBaseHashTraits in with PairHashTraits. Got rid of all specialization of
    17184         HashKeyStorageTraits. We'll remove that, and the needsRef data member, later.
    17185 
    17186         * wtf/RefPtr.h: Added HashTableDeletedValueType, an enum type with a single value,
    17187         HashTableDeletedValue. Used that type to make a new constructor to construct
    17188         deleted values and also added an isHashTableDeletedValue function.
    17189 
    17190         * wtf/RefPtrHashMap.h: Added RefPtrHashMapRawKeyTranslator and used it to implement
    17191         the raw pointer functions. This is a way to continue to avoid refcount thrash. We
    17192         can't use the old way because it depended on the underlying map using a non-RefPtr
    17193         type.
    17194         (WTF::HashMap::find): Use find with RefPtrHashMapRawKeyTranslator.
    17195         (WTF::HashMap::contains): Use contains with RefPtrHashMapRawKeyTranslator.
    17196         (WTF::HashMap::inlineAdd): Use add with RefPtrHashMapRawKeyTranslator.
    17197         (WTF::HashMap::get): Removed code that checks for an empty hash table before calling
    17198         HashTable::lookup; it's slightly more efficient to do this check inside lookup.
    17199         (WTF::HashMap::inlineGet): Added. Just like get, but marked inline for use in the
    17200         symbol table code.
    17201 
    17202 2008-04-25  Sam Weinig  <[email protected]>
    17203 
    17204         Rubber-stamped by Mark Rowe.
    17205 
    17206         Remove SavedBuiltins and SavedProperties classes and the methods used to
    17207         save data to them.  The CachedPage now stores a the JSGlobalObject in full.
    17208 
    17209         * JavaScriptCore.exp:
    17210         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    17211         * JavaScriptCore.xcodeproj/project.pbxproj:
    17212         * kjs/JSGlobalObject.cpp:
    17213         * kjs/JSGlobalObject.h:
    17214         * kjs/JSVariableObject.cpp:
    17215         * kjs/JSVariableObject.h:
    17216         (KJS::JSVariableObject::localStorage):
    17217         * kjs/SavedBuiltins.h: Removed.
    17218         * kjs/object.h:
    17219         * kjs/property_map.cpp:
    17220         * kjs/property_map.h:
    17221 
    17222 2008-04-25  Mark Rowe  <[email protected]>
    17223 
    17224         Rubber-stamped by Sam Weinig.
    17225 
    17226         Add some content to an empty ICU header file to prevent verification errors.
    17227 
    17228         * icu/unicode/utf_old.h:
    17229 
    17230 2008-04-25  David Kilzer  <[email protected]>
    17231 
    17232         <rdar://problem/5819422> REGRESSION: Wrong line number passed to -willLeaveCallFrame
    17233 
    17234         Patch by George Dicker and Michael Kahl.  Reviewed by Darin.
    17235 
    17236         When -[NSObject(WebScriptDebugDelegate) webView:willLeaveCallFrame:sourceId:line:forWebFrame:]
    17237         is invoked, the first line number of the function is returned instead of the last
    17238         line number.  This regressed in r28458.
    17239 
    17240         * kjs/nodes.cpp:
    17241         (KJS::FunctionBodyNodeWithDebuggerHooks::execute): Pass lastLine() instead of lineNo()
    17242         when calling Debugger::returnEvent().
    17243 
    17244 2008-04-25  Darin Adler  <[email protected]>
    17245 
    17246         Done with Stephanie Lewis.
    17247 
    17248         * JavaScriptCore.xcodeproj/project.pbxproj: Prepare for compilation with gcc 4.2 by
    17249         adding -fno-strict-aliasing to CollatorICU.cpp.
    17250 
    17251 2008-04-24  Sam Weinig  <[email protected]>
    17252 
    17253         Reviewed by Geoffrey Garen.
    17254 
    17255         Add a #define to easily enable collecting on every allocation to aid
    17256         debugging GC bugs.
    17257 
    17258         * kjs/collector.cpp:
    17259         (KJS::Collector::heapAllocate):
    17260 
    17261 2008-04-24  Kevin McCullough  <[email protected]>
    17262 
    17263         Reviewed by Adam and Sam.
    17264 
    17265         -<rdar://problem/5770054> JavaScript profiler (10928)
    17266         -Only profile the page group that starts profiling to avoid profiling
    17267         tools that shouldn't be profiled unless explicitly requested to.
    17268 
    17269         * JavaScriptCore.exp: Export new signature.
    17270         * kjs/JSGlobalObject.cpp: Add unique identifiers to the JSGlobalObject.
    17271         (KJS::JSGlobalObject::init):
    17272         * kjs/JSGlobalObject.h: Ditto.
    17273         (KJS::JSGlobalObject::setPageGroupIdentifier):
    17274         (KJS::JSGlobalObject::pageGroupIdentifier):
    17275         * profiler/Profiler.cpp: Check the identifier of the page group of the
    17276         lexical global exec state and only profile if it matches the given page
    17277         group identifier.
    17278         (KJS::Profiler::startProfiling):
    17279         (KJS::Profiler::willExecute):
    17280         (KJS::Profiler::didExecute):
    17281         * profiler/Profiler.h: Ditto.
    17282         (KJS::Profiler::Profiler):
    17283 
    17284 2008-04-24  Julien Chaffraix  <[email protected]>
    17285 
    17286         Reviewed by Simon.
    17287 
    17288         Bug 15940: Implement threading API for Qt
    17289         https://bugs.webkit.org/show_bug.cgi?id=15940
    17290 
    17291         Original patch by Justin Haygood, tweaked by me.
    17292 
    17293         * JavaScriptCore.pri:
    17294         * wtf/ThreadingQt.cpp: Added.
    17295         (WTF::threadMapMutex):
    17296         (WTF::threadMap):
    17297         (WTF::establishIdentifierForThread):
    17298         (WTF::clearThreadForIdentifier):
    17299         (WTF::threadForIdentifier):
    17300         (WTF::initializeThreading):
    17301         (WTF::ThreadPrivate::getReturnValue):
    17302         (WTF::ThreadPrivate::ThreadPrivate):
    17303         (WTF::ThreadPrivate::run):
    17304         (WTF::createThread):
    17305         (WTF::waitForThreadCompletion): return !res to return
    17306         0 on success (to match the pthreads implementation).
    17307         (WTF::detachThread):
    17308         (WTF::identifierByQthreadHandle):
    17309         (WTF::currentThread):
    17310         (WTF::Mutex::Mutex):
    17311         (WTF::Mutex::~Mutex):
    17312         (WTF::Mutex::lock):
    17313         (WTF::Mutex::tryLock):
    17314         (WTF::Mutex::unlock):
    17315         (WTF::ThreadCondition::ThreadCondition):
    17316         (WTF::ThreadCondition::~ThreadCondition):
    17317         (WTF::ThreadCondition::wait):
    17318         (WTF::ThreadCondition::timedWait):
    17319         (WTF::ThreadCondition::signal):
    17320 
    17321 2008-04-22  Darin Adler  <[email protected]>
    17322 
    17323         Reviewed by Anders.
    17324 
    17325         - simplify use of HashTraits to prepare for some upcoming hash table changes
    17326 
    17327         * kjs/SymbolTable.h: Made SymbolTableIndexHashTraits derive from HashTraits<size_t>
    17328         and specialize only the empty value.
    17329 
    17330 2008-04-23  Holger Hans Peter Freyther  <[email protected]>
    17331 
    17332         Reviewed by Simon.
    17333 
    17334         Removed the #define for USE_SYSTEM_MALLOC that we set in WebKit.pri
    17335         already.
    17336 
    17337         * wtf/Platform.h:
    17338 
    17339 2008-04-21  Kevin McCullough  <[email protected]>
    17340 
    17341         Reviewed by Adam.
    17342 
    17343         <rdar://problem/5770054> JavaScript profiler (10928)
    17344         - When stop profiling is called we need to stop the timers on all the
    17345         functions that are still running.
    17346 
    17347         * profiler/FunctionCallProfile.cpp:
    17348         (KJS::FunctionCallProfile::didExecute):
    17349         (KJS::FunctionCallProfile::stopProfiling):
    17350         * profiler/FunctionCallProfile.h:
    17351         * profiler/Profiler.cpp:
    17352         (KJS::Profiler::stopProfiling):
    17353 
    17354 2008-04-21  Alexey Proskuryakov  <[email protected]>
    17355 
    17356         Reviewed by Darin.
    17357 
    17358         Move collector main thread initialization from WebKit/win to KJS::initializeThreading.
    17359 
    17360         * kjs/InitializeThreading.cpp:
    17361         (KJS::initializeThreading):
    17362 
    17363 2008-04-21  Adam Roben  <[email protected]>
    17364 
    17365         MSVC build fix
    17366 
    17367         Reviewed by Alexey Proskuryakov.
    17368 
    17369         * kjs/ustring.h:
    17370         (KJS::UString::cost): Disable a warning about assigning a 32-bit
    17371         size_t into a 31-bit size_t.
    17372 
    17373 2008-04-21  Simon Hausmann  <[email protected]>
    17374 
    17375         Reviewed by Lars.
    17376 
    17377         Made convertValueToQVariant accessible from within WebKit/qt/Api
    17378 
    17379         * bindings/qt/qt_runtime.h:
    17380 
    17381 2008-04-21  Holger Hans Peter Freyther  <[email protected]>
    17382 
    17383         Reviewed by Simon.
    17384 
    17385         Build fix for Qt 4.3
    17386 
    17387         * When building WebCore/internal make sure the QT_[BEGIN,END]_NAMESPACE is
    17388         always defined. Do this by adding defines to the compiler line
    17389         * For users of our API this is not feasible. Every public header file should
    17390         include qwebkitglobal.h. Define the QT_BEGIN_NAMESPACE and QT_END_NAMESPACE
    17391         when we are building everything < 4.4.0 and don't have them defined.
    17392 
    17393         * kjs/testkjs.pro:
    17394 
    17395 2008-04-19  Matt Lilek  <[email protected]>
    17396 
    17397         Not reviewed, Windows build fix - copy the profiler headers in all
    17398         configurations, not just Debug_Internal.
    17399 
    17400         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    17401 
    17402 2008-04-19  Mike Hommey  <[email protected]>
    17403 
    17404         Reviewed by Alp Toker.
    17405 
    17406         Don't build testkjs with rpath.
    17407 
    17408         * GNUmakefile.am:
    17409 
    17410 2008-04-18  Kevin Ollivier  <[email protected]>
    17411 
    17412         wx build fixes. Rename LocalStorage.h to LocalStorageEntry.h
    17413         to avoid header detection issues between WebCore/storage/LocalStorage.h
    17414         and it, and add $(PROFILER_SOURCES) to the wx JSCore build.
    17415 
    17416         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    17417         * JavaScriptCore.xcodeproj/project.pbxproj:
    17418         * jscore.bkl:
    17419         * kjs/ExecState.h:
    17420         * kjs/JSVariableObject.h:
    17421         * kjs/LocalStorage.h: Removed.
    17422         * kjs/LocalStorageEntry.h: Copied from JavaScriptCore/kjs/LocalStorage.h.
    17423         * kjs/function.h:
    17424 
    17425 2008-04-18 Jan  Michael Alonzo  <[email protected]>
    17426 
    17427         Reviewed by Alp Toker.
    17428 
    17429         http://bugs.webkit.org/show_bug.cgi?id=16620
    17430         [GTK] Autotools make dist and make check support
    17431 
    17432         Cleanups.
    17433 
    17434         * GNUmakefile.am:
    17435 
    17436 2008-04-18  Jon Honeycutt  <[email protected]>
    17437 
    17438         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Windows
    17439         build fix.
    17440 
    17441 2008-04-11  Mark Rowe  <[email protected]>
    17442 
    17443         Rubber-stamped by Antti Koivisto.
    17444 
    17445         Silence GCC 4.3 warnings by removing extraneous consts.
    17446 
    17447         * kjs/ustring.cpp:
    17448         * kjs/ustring.h:
    17449 
    17450 2008-04-18  Kevin McCullough  <[email protected]>
    17451 
    17452         Reviewed by Sam.
    17453 
    17454         -<rdar://problem/5770054> JavaScript profiler (10928)
    17455         - Use Deque instead of Vector since the profiler uses prepend a lot
    17456         and deque is faster at that.
    17457 
    17458         * profiler/FunctionCallProfile.h:
    17459         (KJS::FunctionCallProfile::milliSecs): Corrected the name to match
    17460         its output.
    17461         * wtf/Deque.h:
    17462         (WTF::deleteAllValues):
    17463 
    17464 2008-04-18  Kevin McCullough  <[email protected]>
    17465 
    17466         Reviewed by Sam and Adam.
    17467 
    17468         -<rdar://problem/5770054> JavaScript profiler (10928)
    17469         - Cleaned up the header file and made some functions static, added
    17470         a new, sane, printing function, and fixed a few minor bugs.
    17471 
    17472         * JavaScriptCore.exp:
    17473         * JavaScriptCore.xcodeproj/project.pbxproj:
    17474         * profiler/FunctionCallProfile.cpp:
    17475         (KJS::FunctionCallProfile::didExecute): Removed assertion that time is
    17476         > 0 because at ms resolution that may not be true and only cross-
    17477         platform way to get time differences is in ms.
    17478         (KJS::FunctionCallProfile::printDataInspectorStyle): Added a new
    17479         printing function for dumping data in a sane style.
    17480         (KJS::FunctionCallProfile::printDataSampleStyle): Fixed a bug where we
    17481         displayed too much precision when printing our floats. Also added logic
    17482         to make sure we don't display 0 because that doesn't make sense for a
    17483         sampling profile.
    17484         * profiler/FunctionCallProfile.h:
    17485         * profiler/Profiler.cpp: Moved functions that could be static into the
    17486         implementation, and chaned the ASSERTs to early returns.  I did this
    17487         because console.profile() is a JS function and so was being profiled
    17488         but asserting because the profiler had not been started! In the future
    17489         I would like to put the ASSERTs back and not profile the calls to
    17490         console.profile() and console.profileEnd().
    17491         (KJS::Profiler::willExecute):
    17492         (KJS::Profiler::didExecute):
    17493         (KJS::getStackNames): Fixed a bug where the wrong ExecState was being
    17494         used.
    17495         (KJS::getFunctionName):
    17496         (KJS::Profiler::printDataInspectorStyle):
    17497         * profiler/Profiler.h:
    17498 
    17499 2008-04-18  Alexey Proskuryakov  <[email protected]>
    17500 
    17501         Reviewed by Darin.
    17502 
    17503         Fix leaks during plugin tests (which actually excercise background JS), and potential
    17504         PAC brokenness that was not reported, but very likely.
    17505 
    17506         The leaks shadowed a bigger problem with Identifier destruction. Identifier::remove involves
    17507         an IdentifierTable lookup, which is now a per-thread instance. Since garbage collection can
    17508         currently happen on a different thread than allocation, a wrong table was used.
    17509 
    17510         No measurable change on SunSpider total, ~1% variation on individual tests.
    17511 
    17512         * kjs/ustring.cpp:
    17513         (KJS::UString::Rep::create):
    17514         (KJS::UString::Rep::destroy):
    17515         * kjs/ustring.h:
    17516         Replaced isIdentifier with a pointer to IdentifierTable, so that destruction can be done
    17517         correctly. Took one bit from reportedCost, to avoid making UString::Rep larger (performance
    17518         effect was measurable on SunSpider).
    17519 
    17520         * kjs/identifier.cpp:
    17521         (KJS::IdentifierTable::IdentifierTable):
    17522         (KJS::IdentifierTable::~IdentifierTable):
    17523         (KJS::IdentifierTable::add):
    17524         (KJS::IdentifierTable::remove):
    17525         Make IdentifierTable a real class. Its destructor needs to zero out outstanding references,
    17526         because some identifiers may briefly outlive it during thread destruction, and we don't want
    17527         them to use their stale pointers.
    17528 
    17529         (KJS::LiteralIdentifierTable):
    17530         (KJS::Identifier::add):
    17531         Now that LiteralIdentifierTable is per-thread and can be destroyed not just during application
    17532         shutdown, it is not appropriate to simply bump refcount for strings that get there; changed
    17533         the table to hold RefPtrs.
    17534 
    17535         (KJS::CStringTranslator::translate):
    17536         (KJS::UCharBufferTranslator::translate):
    17537         (KJS::Identifier::addSlowCase):
    17538         (KJS::Identifier::remove):
    17539         * kjs/identifier.h:
    17540         (KJS::Identifier::add):
    17541         Use and update UString::Rep::identifierTable as appropriate. Updating it is now done in
    17542         IdentifierTable::add, not in translators.
    17543 
    17544 2008-04-18  Alexey Proskuryakov  <[email protected]>
    17545 
    17546         Reviewed by Darin.
    17547 
    17548         Get rid of static compareWithCompareFunctionArguments in array_instance.cpp.
    17549 
    17550         No change on SunSpider, CelticKane or iBench JavaScript. It is probable that in some cases,
    17551         merge sort is still faster, but more investigation is needed to determine a new cutoff.
    17552         Or possibly, it would be better to do what FIXME says (change to tree sort).
    17553 
    17554         Also, made arguments a local variable - not sure why it was a member of
    17555         CompareWithCompareFunctionArguments.
    17556 
    17557         * kjs/array_instance.cpp:
    17558         (KJS::CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments):
    17559         (KJS::CompareWithCompareFunctionArguments::operator()):
    17560         (KJS::ArrayInstance::sort):
    17561 
    17562 2008-04-18  Simon Hausmann  <[email protected]>
    17563 
    17564         Build fix for gcc 4.3. Include stdio.h for printf.
    17565 
    17566         * profiler/FunctionCallProfile.cpp:
    17567         * profiler/Profiler.cpp:
    17568 
    17569 2008-04-17  Jon Honeycutt  <[email protected]>
    17570 
    17571         Reviewed by mrowe.
    17572 
    17573         * wtf/Platform.h: Add HAVE_ACCESSIBILITY to Platform.h.
    17574 
    17575 2008-04-17  Alexey Proskuryakov  <[email protected]>
    17576 
    17577         Reviewed by Maciej.
    17578 
    17579         Thread static data destructors are not guaranteed to be called in any particular order;
    17580         turn ThreadSpecific into a phoenix-style singleton to avoid accessing freed memory when
    17581         deleted objects are interdependent (e.g. CommonIdentifiers and internal identifier tables).
    17582 
    17583         No change on SunSpider.
    17584 
    17585         * wtf/ThreadSpecific.h:
    17586         (WTF::ThreadSpecific::Data::Data):
    17587         (WTF::::get):
    17588         (WTF::::set):
    17589         (WTF::::destroy):
    17590 
    17591 2008-04-15  Srinivas Rao. M Hamse  <[email protected]>
    17592 
    17593         Reviewed by Maciej Stachowiak.
    17594 
    17595         - gcc 3.x build fix
    17596 
    17597         * kjs/nodes.h: CallerType definition made public for gcc 3.x compilation
    17598 
    17599 2008-04-16  Brady Eidson  <[email protected]>
    17600 
    17601         Reviewed by Sam Weinig
    17602 
    17603         Change ThreadSafeShared to act like RefCounted by starting out with a single ref by default
    17604 
    17605         * wtf/Threading.h:
    17606         (WTF::ThreadSafeShared::ThreadSafeShared):
    17607 
    17608 2008-04-16  Sam Weinig  <[email protected]>
    17609 
    17610         Reviewed by Geoffrey Garen.
    17611 
    17612         - To keep the behavior of the WebKit and JavaScriptCore API's the same,
    17613           we need to hide the fact that the global object and the window object
    17614           are no longer the same thing, and the the global object now changes on
    17615           navigations.  To do this, only the wrapper should ever be exposed.  This
    17616           fixes the two remaining spots where the internal global object is exposed,
    17617           the windowScriptObject returned from [WebFrame windowObject] and the object
    17618           return by calling JSContextGetGlobalObject on [WebFrame globalContext].
    17619 
    17620         * API/JSContextRef.cpp:
    17621         (JSContextGetGlobalObject):
    17622         This is a bit of a hack, this returns the "this" representation of the globalObject
    17623         which will be the WrapperWindow for WebCore and the globalObject for non-WebCore.
    17624 
    17625         * API/JSObjectRef.cpp:
    17626         (JSObjectSetProperty):
    17627         Call the new putWithAttributes method instead of relying on lower-level calls.
    17628         This is needed so that the window wrapper can forward the calls.
    17629 
    17630         * JavaScriptCore.exp:
    17631         * kjs/Activation.h:
    17632         * kjs/JSGlobalObject.cpp:
    17633         (KJS::JSGlobalObject::putWithAttributes):
    17634         * kjs/JSGlobalObject.h:
    17635         * kjs/JSVariableObject.h:
    17636         (KJS::JSVariableObject::symbolTablePutWithAttributes):
    17637         * kjs/function.cpp:
    17638         (KJS::ActivationImp::putWithAttributes):
    17639         * kjs/nodes.cpp:
    17640         (KJS::ConstDeclNode::handleSlowCase):
    17641         (KJS::ConstDeclNode::evaluateSingle):
    17642         (KJS::EvalNode::processDeclarations):
    17643         * kjs/object.cpp:
    17644         (KJS::JSObject::putWithAttributes):
    17645         * kjs/object.h:
    17646         Rename initializeVariable to putWithAttributes and move it down to JSObject so it
    17647         can be used for JSObjectSetProperty.
    17648 
    17649 2008-04-16  Kevin McCullough  <[email protected]>
    17650 
    17651         Reviewed by Sam and Geoff.
    17652 
    17653         -<rdar://problem/5770054> JavaScript profiler (10928)
    17654         Inital profiler prototype
    17655 
    17656         * GNUmakefile.am: Added new files to project
    17657         * JavaScriptCore.pri: Ditto
    17658         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto
    17659         * JavaScriptCore.xcodeproj/project.pbxproj: Ditto
    17660         * JavaScriptCoreSources.bkl: Ditto
    17661         * kjs/config.h: Put compiling flag in here.
    17662         * kjs/function.cpp: Instrument calling the function eval().
    17663         (KJS::eval):
    17664         * kjs/interpreter.cpp: Instrument evaluating global scopes.
    17665         (KJS::Interpreter::evaluate):
    17666         * kjs/object.cpp: Instrument JS function calls.
    17667         (KJS::JSObject::call):
    17668         * profiler: Added.
    17669         * profiler/FunctionCallProfile.cpp: Added.
    17670         (KJS::FunctionCallProfile::FunctionCallProfile):
    17671         (KJS::FunctionCallProfile::~FunctionCallProfile):
    17672         (KJS::FunctionCallProfile::willExecute): Call right before the JS function or executing context is executed to start the profiler's timer.
    17673         (KJS::FunctionCallProfile::didExecute): Call right after the JS function or executing context is executed to stop the profiler's timer.
    17674         (KJS::FunctionCallProfile::addChild): Add a child to the current FunctionCallProfile if it isn't already a child of the current FunctionalCallProfile.
    17675         (KJS::FunctionCallProfile::findChild): Return the child that matches the given name if there is one.
    17676         (KJS::FunctionCallProfile::printDataSampleStyle): Print the current profiled information in a format that matches sample's output.
    17677         * profiler/FunctionCallProfile.h: Added.
    17678         (KJS::FunctionCallProfile::FunctionCallProfile):
    17679         (KJS::FunctionCallProfile::~FunctionCallProfile):
    17680         (KJS::FunctionCallProfile::functionName):
    17681         (KJS::FunctionCallProfile::microSecs):
    17682         * profiler/Profiler.cpp: Added.
    17683         (KJS::Profiler::profiler):
    17684         (KJS::Profiler::sharedProfiler): Return global singleton (may change due to multi-threading concerns)
    17685         (KJS::Profiler::startProfiling): Don't start collecting profiling information until the user starts the profiler. Also don't clear old prfiled data until the profiler is restarted.
    17686         (KJS::Profiler::stopProfiling): Stop collecting profile information.
    17687         (KJS::Profiler::willExecute): Same as above.
    17688         (KJS::Profiler::didExecute): Same as above.
    17689         (KJS::Profiler::insertStackNamesInTree): Follow the stack of the given names and if a sub-stack is not in the current tree, add it.
    17690         (KJS::Profiler::getStackNames): Get the names from the different passed in parameters and order them as a stack.
    17691         (KJS::Profiler::getFunctionName): Get the function name from the given parameter.
    17692         (KJS::Profiler::printDataSampleStyle): Print the current profiled information in a format that matches sample's output.
    17693         (KJS::Profiler::debugLog):
    17694         * profiler/Profiler.h: Added.
    17695         (KJS::Profiler::Profiler):
    17696 
    17697 2008-04-16  Sam Weinig  <[email protected]>
    17698 
    17699         Reviewed by Darin Adler.
    17700 
    17701         - Remove kjs_ prefix from strtod, dtoa, and freedtoa and put it
    17702           in the KJS namespace.
    17703         - Make strtod, dtoa, and freedtoa c++ functions instead of extern "C".
    17704         - Remove mode switching from dtoa.  ~2% improvement on test 26.
    17705         - Removes all unnecessary #defines from dtoa code.
    17706 
    17707         * JavaScriptCore.exp:
    17708         * kjs/dtoa.cpp:
    17709         (KJS::ulp):
    17710         (KJS::b2d):
    17711         (KJS::d2b):
    17712         (KJS::ratio):
    17713         (KJS::strtod):
    17714         (KJS::freedtoa):
    17715         (KJS::dtoa):
    17716         * kjs/dtoa.h:
    17717         * kjs/function.cpp:
    17718         (KJS::parseInt):
    17719         * kjs/lexer.cpp:
    17720         (KJS::Lexer::lex):
    17721         * kjs/number_object.cpp:
    17722         (KJS::integer_part_noexp):
    17723         (KJS::numberProtoFuncToExponential):
    17724         * kjs/ustring.cpp:
    17725         (KJS::UString::from):
    17726         (KJS::UString::toDouble):
    17727 
    17728 2008-04-16  Alexey Proskuryakov  <[email protected]>
    17729 
    17730         Reviewed by Darin.
    17731 
    17732         Get rid of static execForCompareByStringForQSort in array_instance.cpp.
    17733 
    17734         No change on SunSpider, CelticKane or iBench JavaScript.
    17735 
    17736         * kjs/array_instance.cpp:
    17737         (KJS::ArraySortComparator::ArraySortComparator):
    17738         (KJS::ArraySortComparator::operator()):
    17739         (KJS::ArrayInstance::sort):
    17740         Switch slow case to std::sort, so that ExecState can be passed in a comparator.
    17741 
    17742 2008-04-16  Alexey Proskuryakov  <[email protected]>
    17743 
    17744         Reviewed by Adam Roben.
    17745 
    17746         MSVC build fix.
    17747 
    17748         * kjs/CommonIdentifiers.cpp:
    17749         * kjs/CommonIdentifiers.h:
    17750         * kjs/Parser.cpp:
    17751         * kjs/Parser.h:
    17752         * kjs/identifier.cpp:
    17753         * kjs/lexer.h:
    17754         * wtf/ThreadSpecific.h:
    17755 
    17756 2008-04-16  Alexey Proskuryakov  <[email protected]>
    17757 
    17758         Build fix.
    17759 
    17760         * kjs/date_object.cpp:
    17761         * kjs/date_object.h:
    17762         Don't include DateMath.h from date_object.h, as the latter is used from WebCore, while
    17763         where the former is not available.
    17764 
    17765 2008-04-16  Holger Hans Peter Freyther  <[email protected]>
    17766 
    17767         Unreviewed build fix for MSVC. It does not want to have
    17768         WTF in the KJS namespace.
    17769 
    17770         * kjs/CommonIdentifiers.h:
    17771 
    17772 2008-04-16  Holger Hans Peter Freyther  <[email protected]>
    17773 
    17774         Unreviewed build fix for gcc.
    17775 
    17776         ::msToGregorianDateTime  is not known to it.
    17777 
    17778         * kjs/date_object.cpp:
    17779         (KJS::DateInstance::msToGregorianDateTime):
    17780 
    17781 2008-04-16  Alexey Proskuryakov  <[email protected]>
    17782 
    17783         Reviewed by Oliver Hunt.
    17784 
    17785         Initialize threadMapMutex safely (as already done in ThreadingWin).
    17786 
    17787         * wtf/ThreadingGtk.cpp:
    17788         (WTF::threadMapMutex):
    17789         (WTF::initializeThreading):
    17790         * wtf/ThreadingPthreads.cpp:
    17791         (WTF::threadMapMutex):
    17792         (WTF::initializeThreading):
    17793 
    17794 2008-04-16  Alexey Proskuryakov  <[email protected]>
    17795 
    17796         Reviewed by Adam Roben.
    17797 
    17798         Cache Gregorian date/time structure on DateInstance objects for 1.027x SunSpider speedup
    17799         (1.65x on date-format-xparb, 1.13x on date-format-tofte).
    17800 
    17801         * kjs/DateMath.h:
    17802         (KJS::GregorianDateTime::copyFrom): Added. It presumably makes sense to keep GregorianDateTime
    17803         Noncopyable, so it's not just operator=.
    17804 
    17805         * kjs/date_object.h: Added a per-object cache.
    17806 
    17807         * kjs/date_object.cpp:
    17808         (KJS::DateInstance::DateInstance):
    17809         (KJS::DateInstance::msToGregorianDateTime):
    17810         (KJS::dateProtoFuncToString):
    17811         (KJS::dateProtoFuncToUTCString):
    17812         (KJS::dateProtoFuncToDateString):
    17813         (KJS::dateProtoFuncToTimeString):
    17814         (KJS::dateProtoFuncToLocaleString):
    17815         (KJS::dateProtoFuncToLocaleDateString):
    17816         (KJS::dateProtoFuncToLocaleTimeString):
    17817         (KJS::dateProtoFuncGetFullYear):
    17818         (KJS::dateProtoFuncGetUTCFullYear):
    17819         (KJS::dateProtoFuncToGMTString):
    17820         (KJS::dateProtoFuncGetMonth):
    17821         (KJS::dateProtoFuncGetUTCMonth):
    17822         (KJS::dateProtoFuncGetDate):
    17823         (KJS::dateProtoFuncGetUTCDate):
    17824         (KJS::dateProtoFuncGetDay):
    17825         (KJS::dateProtoFuncGetUTCDay):
    17826         (KJS::dateProtoFuncGetHours):
    17827         (KJS::dateProtoFuncGetUTCHours):
    17828         (KJS::dateProtoFuncGetMinutes):
    17829         (KJS::dateProtoFuncGetUTCMinutes):
    17830         (KJS::dateProtoFuncGetSeconds):
    17831         (KJS::dateProtoFuncGetUTCSeconds):
    17832         (KJS::dateProtoFuncGetTimezoneOffset):
    17833         (KJS::setNewValueFromTimeArgs):
    17834         (KJS::setNewValueFromDateArgs):
    17835         (KJS::dateProtoFuncSetYear):
    17836         (KJS::dateProtoFuncGetYear):
    17837         Use the cache when converting.
    17838 
    17839 2008-04-16  Alexey Proskuryakov  <[email protected]>
    17840 
    17841         Reviewed by Darin.
    17842 
    17843         Implement an abstraction for thread-specific storage, use it to get rid of some static objects.
    17844 
    17845         SunSpider results were not conclusive, possibly up to 0.2% slowdown.
    17846 
    17847         * JavaScriptCore.xcodeproj/project.pbxproj:
    17848         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
    17849         Added ThreadSpecific.h
    17850 
    17851         * wtf/ThreadSpecific.h: Added.
    17852         (WTF::::ThreadSpecific):
    17853         (WTF::::~ThreadSpecific):
    17854         (WTF::::get):
    17855         (WTF::::set):
    17856         (WTF::::destroy):
    17857         (WTF::T):
    17858         (WTF::::operator):
    17859         Only implemented for platforms that use pthreads.
    17860 
    17861         * kjs/CommonIdentifiers.cpp:
    17862         (KJS::CommonIdentifiers::shared):
    17863         * kjs/CommonIdentifiers.h:
    17864         * kjs/InitializeThreading.cpp:
    17865         (KJS::initializeThreading):
    17866         * kjs/Parser.cpp:
    17867         (KJS::parser):
    17868         * kjs/Parser.h:
    17869         * kjs/identifier.cpp:
    17870         (KJS::identifierTable):
    17871         (KJS::literalIdentifierTable):
    17872         (KJS::Identifier::initializeIdentifierThreading):
    17873         * kjs/identifier.h:
    17874         * kjs/lexer.cpp:
    17875         (KJS::lexer):
    17876         * kjs/lexer.h:
    17877         Make static instances per-thread.
    17878 
    17879 2008-04-15  Anders Carlsson  <[email protected]>
    17880 
    17881         Reviewed by Adam.
    17882 
    17883         Add ENABLE_OFFLINE_WEB_APPLICATIONS to FEATURE_DEFINES.
    17884        
    17885         * Configurations/JavaScriptCore.xcconfig:
    17886 
    17887 2008-04-15  Andre Poenitz  <[email protected]>
    17888 
    17889         Reviewed by Simon.
    17890 
    17891         Fix compilation with Qt namespaces
    17892 
    17893         Qt can be configured to have all of its classes inside a specified namespaces.
    17894         This is for example used in plugin/component environments like Eclipse.
    17895 
    17896         This change makes it possible to let the Qt port compile against a namespaced
    17897         Qt by the use of macros Qt provides to properly forward declare Qt classes in
    17898         the namespace.
    17899 
    17900         * wtf/unicode/qt4/UnicodeQt4.h:
    17901 
    17902 2008-04-14  Anders Carlsson  <[email protected]>
    17903 
    17904         Reviewed by Adam.
    17905 
    17906         Don't leak the prototype class.
    17907        
    17908         * API/JSClassRef.cpp:
    17909         (OpaqueJSClass::create):
    17910 
    17911 2008-04-14  Steve Falkenburg  <[email protected]>
    17912 
    17913         Fix build.
    17914 
    17915         * wtf/ThreadingWin.cpp:
    17916 
    17917 2008-04-14  Alexey Proskuryakov  <[email protected]>
    17918 
    17919         Reviewed by Adam Roben.
    17920 
    17921         https://bugs.webkit.org/show_bug.cgi?id=18488
    17922         FastMalloc doesn't release thread-specific data on Windows
    17923 
    17924         * wtf/ThreadingWin.cpp:
    17925         (WTF::threadMapMutex): (WTF::initializeThreading): Call threadMapMutex once to initialize the static safely.
    17926         (WTF::ThreadFunctionInvocation::ThreadFunctionInvocation): Added a structure to wrap thread entry point and arguments.
    17927         (WTF::wtfThreadEntryPoint): Make sure to end all WTF threads with pthread_exit(), to give pthreads-win32 a chance to call
    17928         destructors of thread-specific data.
    17929         (WTF::createThread): Use _beginthreadex instead of CreateThread, because MSDN says so. Also removed a call to CreateEvent,
    17930         for which I could see no reason at all.
    17931 
    17932 2008-04-14  Alexey Proskuryakov  <[email protected]>
    17933 
    17934         Touched a file to make JavaScriptCore.vcproj rebuild.
    17935 
    17936         * wtf/MathExtras.h:
    17937 
    17938 2008-04-14  Adam Roben  <[email protected]>
    17939 
    17940         Windows build fix
    17941 
    17942         Rubberstamped by Alexey Proskuryakov.
    17943 
    17944         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable
    17945         the "potentially uninitialized variable" warning for grammar.cpp, as
    17946         it seems to be incorrect. yylval gets initialized by the lexer, but
    17947         MSVC doesn't seem to understand this.
    17948 
    17949 2008-04-11  Antti Koivisto  <[email protected]>
    17950 
    17951         Reviewed by Maciej.
    17952        
    17953         Add default hash for pairs of hashable types.
    17954 
    17955         * wtf/HashFunctions.h:
    17956         (WTF::PairHash::hash):
    17957         (WTF::PairHash::equal):
    17958         (WTF::):
    17959 
    17960 2008-04-11  Alexey Proskuryakov  <[email protected]>
    17961 
    17962         Reviewed by Geoff.
    17963 
    17964         Make DateMath.cpp thread safe.
    17965 
    17966         No measurable change on SunSpider (should be a very small speedup).
    17967 
    17968         * kjs/DateMath.cpp:
    17969         (KJS::mimimumYearForDST): (KJS::equivalentYearForDST): Got rid of double caching of the
    17970         same precomputed value.
    17971         (KJS::calculateUTCOffset): (KJS::getUTCOffset): Factored actual UTC offset calculation code
    17972         out of getUTCOffset(), and notification setup into initDateMath().
    17973 
    17974         (KJS::initDateMath): Added.
    17975 
    17976         * kjs/DateMath.h:
    17977         * kjs/InitializeThreading.cpp:
    17978         (KJS::initializeThreading):
    17979         Added initDateMath().
    17980 
    17981 2008-04-11  Alexey Proskuryakov  <[email protected]>
    17982 
    17983         Windows build fix.
    17984 
    17985         * kjs/grammar.y:
    17986 
    17987 2008-04-11  Alexey Proskuryakov  <[email protected]>
    17988 
    17989         Tiger build fix. Forward declaring a union didn't work for whatever reason, make the
    17990         parameters void*.
    17991 
    17992         * kjs/grammar.y:
    17993         * kjs/lexer.cpp:
    17994         (kjsyylex):
    17995         (KJS::Lexer::lex):
    17996         * kjs/lexer.h:
    17997 
    17998 2008-04-11  Alexey Proskuryakov  <[email protected]>
    17999 
    18000         Reviewed by Geoff.
    18001 
    18002         Generate a pure (re-entrant) parser with Bison.
    18003 
    18004         No change on SunSpider.
    18005 
    18006         * kjs/Parser.cpp:
    18007         (KJS::Parser::parse):
    18008         * kjs/grammar.y:
    18009         * kjs/lexer.cpp:
    18010         (kjsyylex):
    18011         (KJS::Lexer::lex):
    18012         * kjs/lexer.h:
    18013         Pass state as function arguments, instead of global data. Don't call lexer() as often as
    18014         before, as this function is about to become slower due to thread-specific storage.
    18015 
    18016         * kjs/function.cpp:
    18017         (KJS::isStrWhiteSpace): Don't call isSeparatorSpace() for 8-bit characters, as these are
    18018         already taken care of. This is a small speedup, compensating for a small slowdown caused
    18019         by switching Bison mode.
    18020 
    18021 2008-04-10  Alexey Proskuryakov  <[email protected]>
    18022 
    18023         Reviewed by Geoff.
    18024 
    18025         https://bugs.webkit.org/show_bug.cgi?id=18402
    18026         REGRESSION: visited element handling is incorrect in nested join/toString calls
    18027 
    18028         No change on SunSpider total, possibly a tiny improvement (about 0.1%).
    18029 
    18030         Test: fast/js/array-tostring-and-join.html
    18031 
    18032         * kjs/JSGlobalObject.h:
    18033         (KJS::JSGlobalObject::visitedElements): Store visited elements HashSet here, making it
    18034         common to toString/toLocalizedString/join again.
    18035 
    18036         * kjs/array_object.cpp:
    18037         (KJS::arrayProtoFuncToString):
    18038         (KJS::arrayProtoFuncToLocaleString):
    18039         (KJS::arrayProtoFuncJoin):
    18040         Got rid of static variables. Replaced UString with Vector to avoid O(n^2) behavior and
    18041         regain performance.
    18042 
    18043         * wtf/Vector.h:
    18044         (WTF::::resize):
    18045         (WTF::::grow):
    18046         (WTF::::reserveCapacity):
    18047         (WTF::::append):
    18048         (WTF::::insert):
    18049         Added null checks, so that Vector methods don't crash when out of memory. The caller should
    18050         check that data pointer is not null before proceeding.
    18051 
    18052 2008-04-10  Mark Rowe  <[email protected]>
    18053 
    18054         Reviewed by Maciej Stachowiak.
    18055 
    18056         Fix https://bugs.webkit.org/show_bug.cgi?id=18367 and the many dupes.
    18057         Bug 18367: Crash during celtic kane js speed 2007 test
    18058 
    18059         GCC 4.2 on x86_64 Linux decided to reorder the local variables in markCurrentThreadConservatively's
    18060         stack frame.  This lead to the range of addresses the collector treated as stack to exclude the
    18061         contents of volatile registers that markCurrentThreadConservatively forces onto the stack.  This was
    18062         leading to objects being prematurely collected if the only reference to them was via a register at
    18063         the time a collection occurred.
    18064 
    18065         The fix for this is to move the calculation of the top of the stack into a NEVER_INLINE function
    18066         that is called from markCurrentThreadConservatively.  This forces the dummy variable we use for
    18067         determining the top of stack to be in a different stack frame which prevents the compiler from
    18068         reordering it relative to the registers that markCurrentThreadConservatively forces onto the stack.
    18069 
    18070         * kjs/collector.cpp:
    18071         (KJS::Collector::markCurrentThreadConservativelyInternal):
    18072         (KJS::Collector::markCurrentThreadConservatively):
    18073         * kjs/collector.h:
    18074 
    18075 2008-04-10  Adam Roben  <[email protected]>
    18076 
    18077         VC++ Express build fix
    18078 
    18079         * JavaScriptCore.vcproj/WTF/WTF.vcproj: Link against user32.lib so
    18080         that anyone who links against WTF.lib will get user32.lib
    18081         automatically.
    18082 
    18083 2008-04-09  Adam Roben  <[email protected]>
    18084 
    18085         VC++ Express build fix
    18086 
    18087         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Link against
    18088         user32.lib.
    18089 
    18090 2008-04-09  Adam Roben  <[email protected]>
    18091 
    18092         Build fix
    18093 
    18094         * JavaScriptCore.exp: Export isMainThread.
    18095 
    18096 2008-04-09  Adam Roben  <[email protected]>
    18097 
    18098         Build fix
    18099 
    18100         * wtf/AlwaysInline.h: Make sure to #include Platform.h before using
    18101         the macros it defines.
    18102 
    18103 2008-04-08  Mark Rowe  <[email protected]>
    18104 
    18105         Export WTF::initializeThreading() from JavaScriptCore.
    18106 
    18107         * JavaScriptCore.exp:
    18108 
    18109 2008-04-04  Sam Weinig  <[email protected]>
    18110 
    18111         Reviewed by Geoffrey Garen.
    18112 
    18113         First step in implementing the "split window"
    18114 
    18115         - Add a GlobalThisValue to ExecState which should be used
    18116           in places that used to implement the "use the global object
    18117           as this if null" rule.
    18118         - Factor out lookupGetter/lookupSetter into virtual methods
    18119           on JSObject so that they can be forwarded.
    18120         - Make defineGetter/defineSetter virtual methods for the same
    18121           reason.
    18122         - Have PrototypeReflexiveFunction store the globalObject used
    18123           to create it so that it can be used to get the correct thisObject
    18124           for eval.
    18125 
    18126         * API/JSObjectRef.cpp:
    18127         (JSObjectCallAsFunction):
    18128         * JavaScriptCore.exp:
    18129         * kjs/Activation.h:
    18130         * kjs/ExecState.cpp:
    18131         (KJS::ExecState::ExecState):
    18132         (KJS::GlobalExecState::GlobalExecState):
    18133         * kjs/ExecState.h:
    18134         (KJS::ExecState::globalThisValue):
    18135         * kjs/ExecStateInlines.h:
    18136         (KJS::ExecState::ExecState):
    18137         (KJS::FunctionExecState::FunctionExecState):
    18138         * kjs/JSGlobalObject.cpp:
    18139         (KJS::JSGlobalObject::reset):
    18140         (KJS::JSGlobalObject::toGlobalObject):
    18141         * kjs/JSGlobalObject.h:
    18142         (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
    18143         (KJS::JSGlobalObject::JSGlobalObject):
    18144         * kjs/array_instance.cpp:
    18145         (KJS::CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments):
    18146         (KJS::compareWithCompareFunctionForQSort):
    18147         * kjs/array_object.cpp:
    18148         (KJS::arrayProtoFuncSort):
    18149         (KJS::arrayProtoFuncFilter):
    18150         (KJS::arrayProtoFuncMap):
    18151         (KJS::arrayProtoFuncEvery):
    18152         (KJS::arrayProtoFuncForEach):
    18153         (KJS::arrayProtoFuncSome):
    18154         * kjs/function.cpp:
    18155         (KJS::FunctionImp::callAsFunction):
    18156         (KJS::ActivationImp::toThisObject):
    18157         (KJS::globalFuncEval):
    18158         (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction):
    18159         (KJS::PrototypeReflexiveFunction::mark):
    18160         * kjs/function.h:
    18161         (KJS::PrototypeReflexiveFunction::cachedGlobalObject):
    18162         * kjs/function_object.cpp:
    18163         (KJS::functionProtoFuncApply):
    18164         (KJS::functionProtoFuncCall):
    18165         * kjs/nodes.cpp:
    18166         (KJS::ExpressionNode::resolveAndCall):
    18167         (KJS::FunctionCallValueNode::evaluate):
    18168         (KJS::LocalVarFunctionCallNode::inlineEvaluate):
    18169         (KJS::ScopedVarFunctionCallNode::inlineEvaluate):
    18170         (KJS::FunctionCallBracketNode::evaluate):
    18171         (KJS::FunctionCallDotNode::inlineEvaluate):
    18172         * kjs/object.cpp:
    18173         (KJS::JSObject::call):
    18174         (KJS::JSObject::put):
    18175         (KJS::tryGetAndCallProperty):
    18176         (KJS::JSObject::lookupGetter):
    18177         (KJS::JSObject::lookupSetter):
    18178         (KJS::JSObject::toThisObject):
    18179         (KJS::JSObject::toGlobalObject):
    18180         (KJS::JSObject::fillGetterPropertySlot):
    18181         * kjs/object.h:
    18182         * kjs/object_object.cpp:
    18183         (KJS::objectProtoFuncLookupGetter):
    18184         (KJS::objectProtoFuncLookupSetter):
    18185         * kjs/string_object.cpp:
    18186         (KJS::replace):
    18187 
    18188 2008-04-08  Brady Eidson  <[email protected]>
    18189 
    18190         Encourage Windows to rebuild - AGAIN...
    18191 
    18192         * kjs/DateMath.cpp:
    18193 
    18194 2008-04-08  Adam Roben  <[email protected]>
    18195 
    18196         Mac build fix
    18197 
    18198         * JavaScriptCore.exp: Add callOnMainThread, and sorted the list.
    18199 
    18200 2008-04-08  Brady Eidson  <[email protected]>
    18201 
    18202         Rubberstamped by Adam Roben
    18203        
    18204         Touch some files to *strongly* encourage Windows to rebuilt with DOM_STORAGE enabled
    18205 
    18206         * kjs/DateMath.cpp:
    18207 
    18208 2008-04-08  Adam Roben  <[email protected]>
    18209 
    18210         Move callOnMainThread to WTF
    18211 
    18212         Reviewed by Alexey Proskuryakov.
    18213 
    18214         * GNUmakefile.am:
    18215         * JavaScriptCore.pri:
    18216         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
    18217         * JavaScriptCore.xcodeproj/project.pbxproj:
    18218         * JavaScriptCoreSources.bkl:
    18219         Added new files.
    18220 
    18221         * wtf/MainThread.cpp:
    18222         * wtf/MainThread.h:
    18223         * wtf/gtk/MainThreadGtk.cpp:
    18224         * wtf/mac/MainThreadMac.mm:
    18225         * wtf/qt/MainThreadQt.cpp:
    18226         * wtf/win/MainThreadWin.cpp:
    18227         * wtf/wx/MainThreadWx.cpp:
    18228         Moved here from WebCore/platform. Replaced all instances of "WebCore"
    18229         with "WTF".
    18230 
    18231         * kjs/bool_object.cpp: Touched to force JavaScriptCore.vcproj to
    18232         build.
    18233         to the WTF namespace.
    18234         * wtf/ThreadingWin.cpp:
    18235         (WTF::initializeThreading): Call initializeMainThread.
    18236 
    18237 2008-04-07  Brady Eidson  <[email protected]>
    18238 
    18239         Add "ENABLE_DOM_STORAGE" to keep in sync with the rest of the project
    18240 
    18241         * Configurations/JavaScriptCore.xcconfig:
    18242 
    18243 2008-04-07  Adam Roben  <[email protected]>
    18244 
    18245         Windows build fix
    18246 
    18247         * wtf/ThreadingWin.cpp: Back out some changes I didn't mean to land.
    18248 
    18249 2008-04-07  Adam Roben  <[email protected]>
    18250 
    18251         Add WTF::isMainThread
    18252 
    18253         Reviewed by Alexey Proskuryakov.
    18254 
    18255         * wtf/Threading.h: Declare the new function.
    18256         * wtf/ThreadingGtk.cpp:
    18257         (WTF::initializeThreading): Initialize the main thread identifier.
    18258         (WTF::isMainThread): Added.
    18259         * wtf/ThreadingNone.cpp: Ditto ThreadingGtk.cpp.
    18260         (WTF::initializeThreading):
    18261         (WTF::isMainThread):
    18262         * wtf/ThreadingPthreads.cpp: Ditto.
    18263         (WTF::initializeThreading):
    18264         (WTF::isMainThread):
    18265         * wtf/ThreadingWin.cpp: Ditto.
    18266         (WTF::initializeThreading):
    18267         (WTF::isMainThread):
    18268 
    18269 2008-04-06  Alexey Proskuryakov  <[email protected]>
    18270 
    18271         Reviewed by Darin.
    18272 
    18273         Make UString thread-safe.
    18274 
    18275         No change on SunSpider total, although individual tests have changed a lot, up to 3%.
    18276 
    18277         * kjs/InitializeThreading.cpp: (KJS::initializeThreading): Call UString::null() to initialize
    18278         a static.
    18279        
    18280         * kjs/identifier.cpp:
    18281         (KJS::CStringTranslator::translate):
    18282         (KJS::UCharBufferTranslator::translate):
    18283         Use "true" for a boolean value instead of 1, because it's C++.
    18284 
    18285         * kjs/ustring.h:
    18286         (KJS::CString::adopt): Added a method to create from a char* buffer without copying.
    18287         (KJS::UString::Rep::ref): Removed an assertion for JSLock::lockCount, as it's no longer
    18288         necessary to hold JSLock when working with strings.
    18289         (KJS::UString::Rep::deref): Ditto.
    18290         (KJS::UString::Rep::isStatic): Added a field to quickly determine that this is an empty
    18291         or null static string.
    18292 
    18293         * kjs/ustring.cpp:
    18294         (KJS::): Removed normalStatBufferSize and statBufferSize, as there is no reason to have such
    18295         an advanced implementation of a debug-only ascii() method. Removed a long-obsolete comment
    18296         about UChar.
    18297         (KJS::UString::Rep::createCopying): Removed an assertion for JSLock::lockCount.
    18298         (KJS::UString::Rep::create): Ditto.
    18299         (KJS::UString::Rep::destroy): Ditto. Do not do anything for static null and empty strings,
    18300         as refcounting is not reliable for those. Reordered branches for a noticeable speed gain -
    18301         apparently this functiton is hot enough for SunSpider to see an effect from this!
    18302         (KJS::UString::null): Moved a star, added a comment.
    18303         (KJS::UString::cstring): Reimplemented to not call ascii(), which is not thread-safe.
    18304         (KJS::UString::ascii): Simplified statBuffer handling logic.
    18305         (KJS::UString::toDouble): Use cstring() instead of ascii().
    18306 
    18307 2008-04-02  Mark Rowe  <[email protected]>
    18308 
    18309         Reviewed by Oliver Hunt.
    18310 
    18311         Ensure that debug symbols are generated for x86_64 and ppc64 builds.
    18312 
    18313         * Configurations/Base.xcconfig:
    18314 
    18315 2008-04-01  Christian Dywan  <[email protected]>
    18316 
    18317         Build fix for GCC 4.3.
    18318 
    18319         * wtf/unicode/icu/CollatorICU.cpp: include string.h
    18320 
    18321 2008-04-01  Alexey Proskuryakov  <[email protected]>
    18322 
    18323         Rubber-stamped by Darin.
    18324 
    18325         Turn off using 64-bit arithmetic on 32-bit hardware, as dtoa own code is faster than
    18326         compiler-provided emulation.
    18327 
    18328         1% speedup on Acid3 test 26.
    18329 
    18330         * kjs/dtoa.cpp:
    18331 
    18332 2008-04-01  Alexey Proskuryakov  <[email protected]>
    18333 
    18334         Reviewed by Darin.
    18335 
    18336         Make MathExtras.h thread safe.
    18337 
    18338         * kjs/math_object.cpp:
    18339         (KJS::mathProtoFuncRandom): If threading is enabled, rely on initializeThreading to call
    18340         wtf_random_init().
    18341 
    18342         * wtf/Threading.h:
    18343         * wtf/ThreadingGtk.cpp:
    18344         (WTF::initializeThreading):
    18345         * wtf/ThreadingNone.cpp:
    18346         (WTF::initializeThreading):
    18347         * wtf/ThreadingPthreads.cpp:
    18348         (WTF::initializeThreading):
    18349         * wtf/ThreadingWin.cpp:
    18350         (WTF::initializeThreading):
    18351         Call wtf_random_init(); made the function non-inline to avoid having to include too many
    18352         headers in Threading.h.
    18353 
    18354 2008-03-31  Eric Seidel  <[email protected]>
    18355 
    18356         Reviewed by darin.
    18357 
    18358         Make matching of regexps using ^ much faster
    18359         http://bugs.webkit.org/show_bug.cgi?id=18086
    18360 
    18361         * pcre/pcre_compile.cpp:
    18362         (compileBranch):
    18363         (branchNeedsLineStart):
    18364         * pcre/pcre_exec.cpp:
    18365         (match):
    18366         (jsRegExpExecute):
    18367         * pcre/pcre_internal.h:
    18368 
    18369 2008-03-29  Alexey Proskuryakov  <[email protected]>
    18370 
    18371         Reviewed by Oliver Hunt.
    18372 
    18373         <rdar://problem/5829556> REGRESSION: Leak in KJS::initializeThreading()
    18374 
    18375         * kjs/InitializeThreading.cpp: (KJS::initializeThreading): There is no guarantee that
    18376         initializeThreading() is called only once; check that the mutex hasn't been already allocated.
    18377 
    18378 2008-03-29  Oliver Hunt  <[email protected]>
    18379 
    18380         Reviewed by Geoff.
    18381 
    18382         Bug 17924: Crash in KJS::ConstDeclNode::evaluate with |with| and |const|
    18383         <http://bugs.webkit.org/show_bug.cgi?id=17924>
    18384         <rdar://problem/5806933>
    18385 
    18386         It turns out this is trivially avoidable if we just match firefox's
    18387         semantics and ensure that an assignment in a const declaration always
    18388         writes to the variable object.
    18389 
    18390         * kjs/nodes.cpp:
    18391         (KJS::ConstDeclNode::handleSlowCase):
    18392 
    18393 2008-03-28  Alexey Proskuryakov  <[email protected]>
    18394 
    18395         Reviewed by Sam Weinig.
    18396 
    18397         Fix a dtoa thread safety issue.
    18398 
    18399         WebCore can call kjs_strtod without holding JS lock, but we didn't have thread safety
    18400         compiled in for dtoa.
    18401 
    18402         This is a 0.5% regression on SunSpider, which Sam Weinig has volunteered to cover with
    18403         his recent improvement.
    18404 
    18405         * kjs/dtoa.cpp:
    18406         (Bigint::Balloc):
    18407         (Bigint::Bfree):
    18408         Changed to use fastMalloc/fastDelete - they are much faster than the dtoa custom version was
    18409         in the presence of locking (but somewhat slower in single-threaded case).
    18410         (Bigint::pow5mult): Got rid of the dreaded double-checked locking anti-pattern (had to
    18411         restructure the code to avoid significant performance implications).
    18412         (Bigint::lshift): Rewrote to avoid an allocation, if possible.
    18413 
    18414         (Bigint::rv_alloc):
    18415         (Bigint::kjs_freedtoa):
    18416         (Bigint::kjs_dtoa):
    18417         Check for USE(MULTIPLE_THREADS), not dtoa legacy MULTIPLE_THREADS.
    18418 
    18419         * kjs/InitializeThreading.cpp: Added.
    18420         (KJS::initializeThreading):
    18421         * kjs/InitializeThreading.h: Added.
    18422         Initialize threading at KJS level, if enabled.
    18423 
    18424         * kjs/dtoa.h: Expose dtoa mutex for KJS::initializeThreading.
    18425 
    18426         * kjs/testkjs.cpp: (kjsmain): Call initializeThreading.
    18427 
    18428         * JavaScriptCore.exp: Export KJS::initializeThreading.
    18429 
    18430         * GNUmakefile.am:
    18431         * JavaScriptCore.exp:
    18432         * JavaScriptCore.pri:
    18433         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    18434         * JavaScriptCoreSources.bkl:
    18435         * JavaScriptCore.xcodeproj/project.pbxproj:
    18436         Added InitializeThreading.{h,cpp}.
    18437 
    18438         * wtf/Threading.h: Removed a using directive for WTF::initializeThreading - it is only
    18439         to be called from KJS::initializeThreading, and having it in the global namespace is useless.
    18440 
    18441 2008-03-28  Brady Eidson  <[email protected]>
    18442 
    18443         Reviewed by Darin
    18444 
    18445         Export Unicode/UTF8.h and convertUTF16ToUTF8() for more flexible conversion in WebCore
    18446 
    18447         * JavaScriptCore.exp:
    18448         * JavaScriptCore.xcodeproj/project.pbxproj:
    18449 
    18450 2008-03-27  Darin Adler  <[email protected]>
    18451 
    18452         Reviewed by Mark Rowe.
    18453 
    18454         <rdar://problem/5826236> Regular expressions with large nested repetition counts can have their
    18455         compiled length calculated incorrectly.
    18456 
    18457         * pcre/pcre_compile.cpp:
    18458         (multiplyWithOverflowCheck):
    18459         (calculateCompiledPatternLength): Check for overflow when dealing with nested repetition counts
    18460         and bail with an error rather than returning incorrect results.
    18461 
    18462 2008-03-26  Mark Rowe  <[email protected]>
    18463 
    18464         Rubber-stamped by Brady Eidson.
    18465 
    18466         Update FEATURE_DEFINES to be consistent with the other locations in which it is defined.
    18467 
    18468         * Configurations/JavaScriptCore.xcconfig:
    18469 
    18470 2008-03-26  Adam Roben  <[email protected]>
    18471 
    18472         Fix Bug 18060: Assertion failure (JSLock not held) beneath
    18473         JSCallbackObject<Base>::toString
    18474 
    18475         <http://bugs.webkit.org/show_bug.cgi?id=18060>
    18476 
    18477         Reviewed by Geoff Garen.
    18478 
    18479         Bug fix:
    18480 
    18481         * API/JSCallbackObjectFunctions.h:
    18482         (KJS::JSCallbackObject<Base>::toString): Make the DropAllLocks
    18483         instance only be in scope while calling convertToType.
    18484 
    18485         Test:
    18486 
    18487         * API/testapi.c:
    18488         (MyObject_convertToType): Implement type conversion to string.
    18489         * API/testapi.js: Add a test for type conversion to string.
    18490 
    18491 2008-03-26  Adam Roben  <[email protected]>
    18492 
    18493         Windows build fix
    18494 
    18495         * kjs/array_instance.cpp: Touched this.
    18496         * wtf/HashFunctions.h:
    18497         (WTF::intHash): Added 8- and 16-bit versions of intHash.
    18498 
    18499 2008-03-26  Adam Roben  <[email protected]>
    18500 
    18501         Force JSC headers to be copied by touching a file
    18502 
    18503         * kjs/array_instance.cpp:
    18504         (KJS::ArrayInstance::getPropertyNames):
    18505 
    18506 2008-03-26  Adam Roben  <[email protected]>
    18507 
    18508         Windows build fix after r31324
    18509 
    18510         Written with Darin.
    18511 
    18512         Added HashTable plumbing to support using wchar_t as a key type.
    18513 
    18514         * wtf/HashFunctions.h:
    18515         * wtf/HashTraits.h:
    18516         (WTF::):
    18517 
    18518 2008-03-26  Maciej Stachowiak  <[email protected]>
    18519 
    18520         Reviewed by Darin.
    18521 
    18522         - JSC part of fix for "SVG multichar glyph matching matches longest instead of first (affects Acid3 test 79)"
    18523         http://bugs.webkit.org/show_bug.cgi?id=18118
    18524 
    18525         * wtf/HashFunctions.h:
    18526         (WTF::):
    18527         * wtf/HashTraits.h:
    18528         (WTF::):
    18529 
    18530 2008-03-26  Alexey Proskuryakov  <[email protected]>
    18531 
    18532         Reviewed by Darin.
    18533 
    18534         Cache C string identifiers by address, not value, assuming that C strings can only
    18535         be literals.
    18536 
    18537         1% speedup on Acid3 test 26.
    18538 
    18539         * kjs/identifier.cpp:
    18540         (KJS::literalIdentifierTable):
    18541         (KJS::Identifier::add):
    18542         Added a new table to cache UString::Reps created from C strings by address. Elements are
    18543         never removed from this cache, as only predefined identifiers can get there.
    18544 
    18545         * kjs/identifier.h:
    18546         (KJS::Identifier::Identifier): Added a warning.
    18547 
    18548 2008-03-26  Alexey Proskuryakov  <[email protected]>
    18549 
    18550         Rubber-stamped by Maciej.
    18551 
    18552         An assertion was failing in function-toString-object-literals.html when parsing 1e-500.
    18553         The condition existed before, and got uncovered by turning compiled-out dtoa checks into
    18554         ASSERTs.
    18555 
    18556         The assertion was verifying that the caller wasn't constructing a Bigint from 0.
    18557         This might have had some reason behind it originally, but I couldn't find any,
    18558         and this doesn't look like a reasonable requirement.
    18559 
    18560         * kjs/dtoa.cpp: (d2b): Removed the assertion (two copies in different code paths).
    18561 
    18562 2008-03-25  Adam Roben  <[email protected]>
    18563 
    18564         Fix Bug 18077: Integrate testapi.c into the Windows build
    18565 
    18566         <http://bugs.webkit.org/show_bug.cgi?id=18077>
    18567 
    18568         Reviewed by Steve Falkenburg.
    18569 
    18570         * JavaScriptCore.vcproj/testapi/testapi.vcproj: Added.
    18571 
    18572 2008-03-25  Adam Roben  <[email protected]>
    18573 
    18574         Make testapi.c compile under MSVC
    18575 
    18576         Currently you must compile testapi.c as C++ code since MSVC does not
    18577         support many C features that GCC does.
    18578 
    18579         Reviewed by Steve Falkenburg.
    18580 
    18581         * API/testapi.c:
    18582         (nan): Added an implementation of this for MSVC.
    18583         (assertEqualsAsUTF8String): Use malloc instead of dynamically-sized
    18584         stack arrays.
    18585         (assertEqualsAsCharactersPtr): Ditto.
    18586         (print_callAsFunction): Ditto.
    18587         (main): Ditto, and explicitly cast from UniChar* to JSChar*.
    18588 
    18589 2008-03-25  Adam Roben  <[email protected]>
    18590 
    18591         Stop using JavaScriptCore's custom stdbool.h and stdint.h on Windows
    18592 
    18593         We can't remove the os-win32 directory yet because other ports (at
    18594         least wx) are still relying on it.
    18595 
    18596         Reviewed by Steve Falkenburg.
    18597 
    18598         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    18599           - Made all the include paths match the one for the Debug
    18600             configuration (these got out of sync in r30797)
    18601           - Removed os-win32 from the include path
    18602           - Removed os-win32 from the directories we copy to $WebKitOutputDir.
    18603           - Removed stdint.h from the project
    18604         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
    18605         Delete the files that we may have previously copied from the os-win32
    18606         directory.
    18607 
    18608 2008-03-25  Alexey Proskuryakov  <[email protected]>
    18609 
    18610         Windows build fix.
    18611 
    18612         * kjs/dtoa.cpp: Include stdint.h.
    18613 
    18614 2008-03-25  Alexey Proskuryakov  <[email protected]>
    18615 
    18616         Rubber-stamped by Darin.
    18617 
    18618         Cleanup dtoa.cpp style.
    18619 
    18620         * kjs/dtoa.cpp:
    18621         (Bigint::Balloc):
    18622         (Bigint::Bfree):
    18623         (Bigint::multadd):
    18624         (Bigint::s2b):
    18625         (Bigint::hi0bits):
    18626         (Bigint::lo0bits):
    18627         (Bigint::i2b):
    18628         (Bigint::mult):
    18629         (Bigint::pow5mult):
    18630         (Bigint::lshift):
    18631         (Bigint::cmp):
    18632         (Bigint::diff):
    18633         (Bigint::ulp):
    18634         (Bigint::b2d):
    18635         (Bigint::d2b):
    18636         (Bigint::ratio):
    18637         (Bigint::):
    18638         (Bigint::match):
    18639         (Bigint::hexnan):
    18640         (Bigint::kjs_strtod):
    18641         (Bigint::quorem):
    18642         (Bigint::rv_alloc):
    18643         (Bigint::nrv_alloc):
    18644         (Bigint::kjs_freedtoa):
    18645         (Bigint::kjs_dtoa):
    18646         * kjs/dtoa.h:
    18647 
    18648 2008-03-24  Darin Adler  <[email protected]>
    18649 
    18650         Reviewed by Sam.
    18651 
    18652         - convert a JavaScript immediate number to a string more efficiently
    18653 
    18654         2% speedup of Acid3 test 26
    18655 
    18656         * kjs/JSImmediate.cpp:
    18657         (KJS::JSImmediate::toString): Take advantage of the fact that all immediate
    18658         numbers are integers, and use the faster UString function for formatting integers
    18659         instead of the slower one that works for floating point. I think this is a leftover
    18660         from when immediate numbers were floating point.
    18661 
    18662 2008-03-23  Sam Weinig  <[email protected]>
    18663 
    18664         Reviewed by Darin Adler.
    18665 
    18666         Fix http://bugs.webkit.org/show_bug.cgi?id=18048
    18667         The "thisObject" parameter to JSEvaluateScript is not used properly
    18668 
    18669         Making passing a thisObject to JSEvaluateScript actually set the thisObject of the created
    18670         ExecState.
    18671 
    18672         * API/testapi.c:
    18673         (main): Add tests for setting the thisObject when calling JSEvaluateScript.
    18674 
    18675         * kjs/ExecState.cpp:
    18676         (KJS::ExecState::ExecState): Assign the thisObject to m_thisValue and remove the comment.
    18677 
    18678 2008-03-22  Jesse Ruderman  <[email protected]>
    18679 
    18680         Reviewed by Sam Weinig.  Landed by eseidel.
    18681        
    18682         Make testkjs flush stdout after printing.
    18683 
    18684         * JavaScriptCore.xcodeproj/project.pbxproj:
    18685         * kjs/testkjs.cpp:
    18686         (functionPrint):
    18687 
    18688 2008-03-21  Oliver Hunt  <[email protected]>
    18689 
    18690         Reviewed by Maciej.
    18691 
    18692         Optimise lookup of Math, undefined, NaN and Infinity
    18693 
    18694         Added a method to JSVariableObject to allow us to inject DontDelete properties
    18695         into the symbol table and localStorage.  This results in a 0.4% progression in
    18696         SunSpider, with a 8% gain in math-partial-sums.
    18697 
    18698         * kjs/JSGlobalObject.cpp:
    18699         (KJS::JSGlobalObject::reset):
    18700         * kjs/JSVariableObject.h:
    18701         (KJS::JSVariableObject::symbolTableInsert):
    18702 
    18703 2008-03-21  Oliver Hunt  <[email protected]>
    18704 
    18705         Reviewed by Geoff Garen.
    18706 
    18707         Global properties that use LocalStorage are not correctly listed as enumerable.
    18708 
    18709         The problem was caused by JSObject::getPropertyAttributes not being aware
    18710         of the JSVariableObject SymbolTable.  The fix is to make getPropertyAttributes
    18711         virtual and override in JSVariableObject.  This does not produce any performance
    18712         regression.
    18713 
    18714         * JavaScriptCore.exp:
    18715         * kjs/JSVariableObject.cpp:
    18716         (KJS::JSVariableObject::getPropertyNames):
    18717         (KJS::JSVariableObject::getPropertyAttributes):
    18718         * kjs/JSVariableObject.h:
    18719         * kjs/object.h:
    18720 
    18721 2008-03-21  Arkadiusz Miskiewicz  <[email protected]>
    18722 
    18723         Webkit does not build on linux powerpc
    18724 
    18725         <http://bugs.webkit.org/show_bug.cgi?id=17019>
    18726 
    18727         Reviewed by David Kilzer.
    18728 
    18729         * wtf/TCSpinLock.h:
    18730         (TCMalloc_SpinLock::Unlock):
    18731 
    18732 2008-03-21  Rodney Dawes  <[email protected]>
    18733 
    18734         Reviewed by Holger.
    18735 
    18736         http://bugs.webkit.org/show_bug.cgi?id=17981
    18737 
    18738         Add javascriptcore_cppflags to Programs_minidom_CPPFLAGS.
    18739 
    18740         * GNUmakefile.am:
    18741 
    18742 2008-03-21  Alexey Proskuryakov  <[email protected]>
    18743 
    18744         Reviewed by Oliver Hunt.
    18745 
    18746         Consolidate static identifier initializers within CommonIdentifiers.
    18747 
    18748         No reliably measurable change on SunSpider; maybe a tiny improvement (within 0.2%).
    18749 
    18750         * kjs/CommonIdentifiers.h: Added static identifiers that were lazily initialized
    18751         throughout the code.
    18752 
    18753         * kjs/date_object.cpp:
    18754         (KJS::DateObjectImp::DateObjectImp):
    18755         * kjs/function_object.cpp:
    18756         (KJS::FunctionPrototype::FunctionPrototype):
    18757         * kjs/object_object.cpp:
    18758         (KJS::ObjectPrototype::ObjectPrototype):
    18759         * kjs/regexp_object.cpp:
    18760         (KJS::RegExpPrototype::RegExpPrototype):
    18761         Use the values from CommonIdentifiers.
    18762 
    18763         * kjs/lookup.h: Caching the identifier in a static wasn't a win on SunSpider, removed it.
    18764 
    18765         * kjs/value.h:
    18766         (KJS::jsNaN): We already have a shared NaN value, no need for a duplicate here.
    18767 
    18768         * wtf/MathExtras.h:
    18769         (wtf_atan2): Having local variables for numeric_limits constants is good for readability,
    18770         but there is no reason to keep them static.
    18771 
    18772         * JavaScriptCore.exp: Don't needlessly export JSGlobalObject::s_head.
    18773 
    18774 2008-03-20  Oliver Hunt  <[email protected]>
    18775 
    18776         Reviewed by Maciej.
    18777 
    18778         Fix for leak introduced by inline ScopeChainNode use
    18779 
    18780         To avoid any extra branches when managing an inline ScopeChainNode
    18781         in the ScopeChain the inline node gets inserted with a refcount of
    18782         2.  This meant than when the ScopeChain was destroyed the ScopeChainNodes
    18783         above the inline node would be leaked.
    18784 
    18785         We resolve this by manually popping the inline node in the
    18786         FunctionExecState destructor.
    18787 
    18788         * JavaScriptCore.xcodeproj/project.pbxproj:
    18789         * kjs/ExecStateInlines.h:
    18790         (KJS::FunctionExecState::~FunctionExecState):
    18791         * kjs/scope_chain.h:
    18792         (KJS::ScopeChain::popInlineScopeNode):
    18793 
    18794 2008-03-20  Mark Rowe  <[email protected]>
    18795 
    18796         Reviewed by Sam Weinig.
    18797 
    18798         Ensure that the defines in FEATURE_DEFINES are sorted so that they will match the default settings of build-webkit.
    18799         This will prevent the world from being rebuilt if you happen to switch between building in Xcode and with build-webkit on the
    18800         command-line.
    18801 
    18802         * Configurations/JavaScriptCore.xcconfig:
    18803 
    18804 2008-03-20  David Krause  <[email protected]>
    18805 
    18806         Reviewed by David Kilzer.
    18807 
    18808         Fix http://bugs.webkit.org/show_bug.cgi?id=17923
    18809         Bug 17923: ARM platform endian defines inaccurate
    18810 
    18811         * wtf/Platform.h:
    18812         Replaced !defined(__ARMEL__) check with !defined(__VFP_FP__)
    18813         for PLATFORM(MIDDLE_ENDIAN)
    18814 
    18815 2008-03-20  Maciej Stachowiak  <[email protected]>
    18816 
    18817         - fix build
    18818 
    18819         * JavaScriptCore.xcodeproj/project.pbxproj: install Activation.h as private
    18820 
    18821 2008-03-20  Maciej Stachowiak  <[email protected]>
    18822 
    18823         Reviewed by Oliver.
    18824        
    18825         - reduce function call overhead for 1.014x speedup on SunSpider
    18826 
    18827         I moved some functions from ExecState.cpp to ExecStateInline.h and
    18828         from JSGlobalObject.cpp to JSGlobalObject.h, and declared them
    18829         inline; machine function call overhead for these was hurting JS
    18830         funcion call overhead.
    18831        
    18832         * kjs/ExecState.cpp:
    18833         * kjs/ExecStateInlines.h: Added.
    18834         (KJS::ExecState::ExecState):
    18835         (KJS::ExecState::~ExecState):
    18836         (KJS::FunctionExecState::FunctionExecState):
    18837         (KJS::FunctionExecState::~FunctionExecState):
    18838         * kjs/JSGlobalObject.cpp:
    18839         * kjs/JSGlobalObject.h:
    18840         (KJS::JSGlobalObject::pushActivation):
    18841         (KJS::JSGlobalObject::checkActivationCount):
    18842         (KJS::JSGlobalObject::popActivation):
    18843         * kjs/function.cpp:
    18844 
    18845 2008-03-19  Oliver Hunt  <[email protected]>
    18846 
    18847         Reviewed by Maciej.
    18848 
    18849         Avoid heap allocating the root scope chain node for eval and closure free functions
    18850 
    18851         Maciej suggested using an inline ScopeChainNode for functions that don't use eval
    18852         or closures as they are unable to ever capture the scope chain.  This gives us a 2.4%
    18853         win in sunspider, a 15% win in controlflow-recursive, and big (>5%) wins in a number
    18854         of other tests.
    18855 
    18856         * kjs/ExecState.cpp:
    18857         (KJS::ExecState::ExecState):
    18858         * kjs/ExecState.h:
    18859         * kjs/scope_chain.h:
    18860         (KJS::ScopeChain::push):
    18861 
    18862 2008-03-19  Mark Rowe  <[email protected]>
    18863 
    18864         Reviewed by Sam Weinig.
    18865 
    18866         Fix release build.
    18867 
    18868         * kjs/JSGlobalObject.cpp:  Add missing #include.
    18869 
    18870 2008-03-19  Sam Weinig  <[email protected]>
    18871 
    18872         Reviewed by Anders Carlsson.
    18873 
    18874         Fix for <rdar://problem/5785694>
    18875         Crash occurs at KJS::Collector::collect() when loading web clip widgets with a PAC file
    18876 
    18877         Make the activeExecStates stack per JSGlobalObject instead of static to ensure
    18878         thread safety.
    18879 
    18880         * JavaScriptCore.exp:
    18881         * kjs/ExecState.cpp:
    18882         (KJS::InterpreterExecState::InterpreterExecState):
    18883         (KJS::InterpreterExecState::~InterpreterExecState):
    18884         (KJS::EvalExecState::EvalExecState):
    18885         (KJS::EvalExecState::~EvalExecState):
    18886         (KJS::FunctionExecState::FunctionExecState):
    18887         (KJS::FunctionExecState::~FunctionExecState):
    18888         * kjs/ExecState.h:
    18889         * kjs/JSGlobalObject.cpp:
    18890         (KJS::JSGlobalObject::mark):
    18891         * kjs/JSGlobalObject.h:
    18892         (KJS::JSGlobalObject::activeExecStates):
    18893         * kjs/collector.cpp:
    18894         (KJS::Collector::collect):
    18895         (KJS::Collector::reportOutOfMemoryToAllExecStates): Iterate all JSGlobalObjects and report
    18896         the OutOfMemory condition to all the ExecStates in each.
    18897 
    18898 2008-03-19  Jasper Bryant-Greene  <[email protected]>
    18899 
    18900         Reviewed by Maciej Stachowiak.
    18901 
    18902         Fix http://bugs.webkit.org/show_bug.cgi?id=17941
    18903         Bug 17941: C++-style comments in JavaScriptCore API
    18904 
    18905         * API/JSBase.h:
    18906         Remove C++-style comments from public JavaScriptCore API, replacing
    18907         with standard C90 block comments.
    18908 
    18909 2008-03-19  Mark Rowe  <[email protected]>
    18910 
    18911         Reviewed by Oliver Hunt.
    18912 
    18913         Fix http://bugs.webkit.org/show_bug.cgi?id=17939
    18914         Bug 17939: Crash decompiling "const a = 1, b;"
    18915 
    18916         * kjs/nodes2string.cpp:
    18917         (KJS::ConstDeclNode::streamTo): Null-check the correct variable.
    18918 
    18919 2008-03-18  Oliver Hunt  <[email protected]>
    18920 
    18921         Reviewed by Mark Rowe.
    18922 
    18923         Bug 17929: Incorrect decompilation with |const|, comma
    18924         http://bugs.webkit.org/show_bug.cgi?id=17929
    18925 
    18926         There were actually two bugs here. First we weren't correctly handling const
    18927         nodes with multiple declarations. The second issue was caused by us not
    18928         giving the correct precedence to the initialisers.
    18929 
    18930         * kjs/nodes2string.cpp:
    18931         (KJS::ConstDeclNode::streamTo):
    18932 
    18933 2008-03-18  Darin Adler  <[email protected]>
    18934 
    18935         Reviewed by Maciej.
    18936 
    18937         - Speed up JavaScript built-in properties by changing the
    18938           hash table to take advantage of the identifier objects
    18939 
    18940         5% speedup for Acid3 test 26
    18941 
    18942         * JavaScriptCore.exp: Updated.
    18943         * kjs/create_hash_table: Compute size of hash table large enough so that there
    18944         are no collisions, but don't generate the hash table.
    18945         * kjs/identifier.h: Made the add function that returns a PassRefPtr public.
    18946         * kjs/lexer.cpp:
    18947         (KJS::Lexer::lex): Updated for change to HashTable interface.
    18948         * kjs/lookup.cpp:
    18949         (KJS::HashTable::changeKeysToIdentifiers): Added. Finds the identifier for
    18950         each property so the equality comparision can be done with pointer comparision.
    18951         * kjs/lookup.h: Made the key be a union of char* with UString::Rep* so it can
    18952         hold identifiers. Added a keysAreIdentifiers flag to the HashTable. Changed
    18953         the Lookup functions to be member functions of HashTable instead.
    18954         * kjs/object.cpp:
    18955         (KJS::JSObject::deleteProperty): Update for change to HashTable.
    18956         (KJS::JSObject::findPropertyHashEntry): Ditto.
    18957         (KJS::JSObject::getPropertyAttributes): Ditto.
    18958         (KJS::JSObject::getPropertyNames): Ditto.
    18959 
    18960 2008-03-18  Mark Rowe  <[email protected]>
    18961 
    18962         Reviewed by Oliver Hunt.
    18963 
    18964         Fix http://bugs.webkit.org/show_bug.cgi?id=17925 and http://bugs.webkit.org/show_bug.cgi?id=17927.
    18965         - Bug 17925: Crash in KJS::JSObject::put after setting this.__proto__
    18966         - Bug 17927: Hang after attempting to create circular __proto__
    18967 
    18968         * kjs/object.cpp:
    18969         (KJS::JSObject::put): Silently ignore attempts to set __proto__ to a non-object, non-null value.
    18970         Return after setting the exception when an attempt to set a cyclic __proto__ is detected so that
    18971         the cyclic value is not set.
    18972 
    18973 2008-03-18  Maciej Stachowiak  <[email protected]>
    18974 
    18975         Reviewed by Oliver.
    18976        
    18977         - inline ActivationImp::init for 0.8% SunSpider speedup
    18978 
    18979         * kjs/Activation.h:
    18980         (KJS::ActivationImp::init): Moved here from function.cpp
    18981         * kjs/function.cpp:
    18982 
    18983 2008-03-18  Simon Hausmann  <[email protected]>
    18984 
    18985         Fix the Qt build.
    18986 
    18987         Including config.h like in the other .cpp files gets the #ifdeffery
    18988         correct for rand_s.
    18989 
    18990         * kjs/JSWrapperObject.cpp:
    18991 
    18992 2008-03-17  Darin Adler  <[email protected]>
    18993 
    18994         Reviewed by Maciej.
    18995 
    18996         JavaScriptCore changes to support a WebCore speedup.
    18997 
    18998         * JavaScriptCore.exp: Export the UString::Rep::computeHash function.
    18999         * wtf/HashSet.h: Added a find and contains function that take a translator,
    19000         like the add function.
    19001 
    19002 2008-03-18  Maciej Stachowiak  <[email protected]>
    19003 
    19004         Reviewed by Oliver.
    19005        
    19006         - a few micro-optimizations for 1.2% SunSpider speedup
    19007 
    19008         * kjs/function.cpp:
    19009         (KJS::FunctionImp::callAsFunction): check for Return completion before Throw,
    19010         it is more likely.
    19011         * kjs/object.cpp:
    19012         (KJS::JSObject::put): When walking prototype chain, instead of
    19013         checking isObject (a virtual call), compare to jsNull (compare to
    19014         a constant) since null is the only non-object that can be in a
    19015         prototype chain.
    19016 
    19017 2008-03-17  Oliver Hunt  <[email protected]>
    19018 
    19019         Reviewed by Geoff.
    19020 
    19021         Optimise multi-scope function call resolution
    19022 
    19023         Refactor multiscope variable resolution and use to add
    19024         optimised FunctionCallResolveNode subclasses. 
    19025 
    19026         2.6% gain in sunspider performance, *25%* gain in controlflow-recursive
    19027 
    19028         * kjs/nodes.cpp:
    19029         (KJS::getSymbolTableEntry):
    19030         (KJS::ResolveNode::optimizeVariableAccess):
    19031         (KJS::getNonLocalSymbol):
    19032         (KJS::ExpressionNode::resolveAndCall):
    19033         (KJS::FunctionCallResolveNode::optimizeVariableAccess):
    19034         (KJS::FunctionCallResolveNode::inlineEvaluate):
    19035         (KJS::ScopedVarFunctionCallNode::inlineEvaluate):
    19036         (KJS::ScopedVarFunctionCallNode::evaluate):
    19037         (KJS::ScopedVarFunctionCallNode::evaluateToNumber):
    19038         (KJS::ScopedVarFunctionCallNode::evaluateToBoolean):
    19039         (KJS::ScopedVarFunctionCallNode::evaluateToInt32):
    19040         (KJS::ScopedVarFunctionCallNode::evaluateToUInt32):
    19041         (KJS::NonLocalVarFunctionCallNode::inlineEvaluate):
    19042         (KJS::NonLocalVarFunctionCallNode::evaluate):
    19043         (KJS::NonLocalVarFunctionCallNode::evaluateToNumber):
    19044         (KJS::NonLocalVarFunctionCallNode::evaluateToBoolean):
    19045         (KJS::NonLocalVarFunctionCallNode::evaluateToInt32):
    19046         (KJS::NonLocalVarFunctionCallNode::evaluateToUInt32):
    19047         * kjs/nodes.h:
    19048         (KJS::ScopedVarFunctionCallNode::):
    19049         (KJS::NonLocalVarFunctionCallNode::):
    19050 
    19051 2008-03-17  David Kilzer  <[email protected]>
    19052 
    19053         Don't define PLATFORM(MIDDLE_ENDIAN) on little endian ARM.
    19054 
    19055         Reviewed by Darin.
    19056 
    19057         See <http://bugs.webkit.org/show_bug.cgi?id=15416#c13>.
    19058 
    19059         * wtf/Platform.h: Added check for !defined(__ARMEL__) when defining
    19060         PLATFORM(MIDDLE_ENDIAN).
    19061 
    19062 2008-03-17  Oliver Hunt  <[email protected]>
    19063 
    19064         Reviewed by Geoff, Darin and Weinig.
    19065 
    19066         Add fast multi-level scope lookup
    19067        
    19068         Add logic and AST nodes to provide rapid variable resolution across
    19069         static scope boundaries.  This also adds logic that allows us to skip
    19070         any static scopes that do not contain the variable to be resolved.
    19071        
    19072         This results in a ~2.5% speedup in SunSpider, and gives a 25-30% speedup
    19073         in some simple and ad hoc closure and global variable access tests.
    19074 
    19075         * JavaScriptCore.exp:
    19076         * kjs/Activation.h:
    19077         * kjs/JSGlobalObject.cpp:
    19078         * kjs/JSGlobalObject.h:
    19079         * kjs/JSVariableObject.cpp:
    19080         * kjs/JSVariableObject.h:
    19081         * kjs/function.cpp:
    19082         (KJS::ActivationImp::isDynamicScope):
    19083         * kjs/nodes.cpp:
    19084         (KJS::ResolveNode::optimizeVariableAccess):
    19085         (KJS::ScopedVarAccessNode::inlineEvaluate):
    19086         (KJS::ScopedVarAccessNode::evaluate):
    19087         (KJS::ScopedVarAccessNode::evaluateToNumber):
    19088         (KJS::ScopedVarAccessNode::evaluateToBoolean):
    19089         (KJS::ScopedVarAccessNode::evaluateToInt32):
    19090         (KJS::ScopedVarAccessNode::evaluateToUInt32):
    19091         (KJS::NonLocalVarAccessNode::inlineEvaluate):
    19092         (KJS::NonLocalVarAccessNode::evaluate):
    19093         (KJS::NonLocalVarAccessNode::evaluateToNumber):
    19094         (KJS::NonLocalVarAccessNode::evaluateToBoolean):
    19095         (KJS::NonLocalVarAccessNode::evaluateToInt32):
    19096         (KJS::NonLocalVarAccessNode::evaluateToUInt32):
    19097         (KJS::IfElseNode::optimizeVariableAccess):
    19098         (KJS::ScopeNode::optimizeVariableAccess):
    19099         * kjs/nodes.h:
    19100         (KJS::ScopedVarAccessNode::):
    19101         (KJS::NonLocalVarAccessNode::):
    19102         * kjs/object.h:
    19103 
    19104  2008-03-16  weihongzeng  <[email protected]>
    19105  
    19106          Reviewed by Darin Adler.
    19107  
    19108          http://bugs.webkit.org/show_bug.cgi?id=15416
    19109          Add support for mixed-endian processors
    19110  
    19111          * kjs/dtoa.cpp: Add IEEE_ARM, triggered by PLATFORM(MIDDLE_ENDIAN).
    19112  
    19113 2008-03-16  Kevin Ollivier  <[email protected]>
    19114 
    19115         Rubber stamped by Darin.
    19116 
    19117         Add set-webkit-configuration support for wx port, and centralize
    19118         build dir location setting.
    19119 
    19120         http://bugs.webkit.org/show_bug.cgi?id=17790
    19121 
    19122         * jscore.bkl:
    19123 
    19124 2008-03-14  Steve Falkenburg  <[email protected]>
    19125 
    19126         PGO build fixes.
    19127 
    19128         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    19129 
    19130 2008-03-14  Oliver Hunt  <[email protected]>
    19131 
    19132         Reviewed by Maciej.
    19133 
    19134         Add logic to track whether a function uses a locally scoped eval or requires a closure
    19135        
    19136         Now that we limit eval we can track those uses of eval that operate
    19137         in the local scope and functions that require a closure.  We track
    19138         this information during initial parsing to avoid yet another tree
    19139         walk.
    19140 
    19141         * JavaScriptCore.exp:
    19142         * kjs/NodeInfo.h:
    19143         * kjs/Parser.cpp:
    19144         (KJS::Parser::didFinishParsing):
    19145         * kjs/Parser.h:
    19146         (KJS::Parser::parse):
    19147         * kjs/grammar.y:
    19148         * kjs/nodes.cpp:
    19149         (KJS::ScopeNode::ScopeNode):
    19150         (KJS::ProgramNode::ProgramNode):
    19151         (KJS::ProgramNode::create):
    19152         (KJS::EvalNode::EvalNode):
    19153         (KJS::EvalNode::create):
    19154         (KJS::FunctionBodyNode::FunctionBodyNode):
    19155         (KJS::FunctionBodyNode::create):
    19156         * kjs/nodes.h:
    19157         (KJS::ScopeNode::):
    19158         (KJS::ScopeNode::usesEval):
    19159         (KJS::ScopeNode::needsClosure):
    19160 
    19161 2008-03-14  Geoffrey Garen  <[email protected]>
    19162 
    19163         Reviewed by Beth Dakin.
    19164 
    19165         Fixed another problem with Vector::shrinkCapacity.
    19166        
    19167         moveOverlapping isn't good enough for the case where the buffer hasn't
    19168         changed, because it still destroys the contents of the buffer.
    19169 
    19170         * wtf/Vector.h:
    19171         (WTF::::shrinkCapacity): Changed to explicitly check whether the call
    19172         to allocateBuffer produced a new buffer. If it didn't, there's no need
    19173         to move.
    19174 
    19175 2008-03-14  Geoffrey Garen  <[email protected]>
    19176 
    19177         Reviewed by Beth Dakin.
    19178        
    19179         Fixed a few problems with Vector::shrinkCapacity that I noticed in testing.
    19180 
    19181         * wtf/Vector.h:
    19182         (WTF::VectorBufferBase::deallocateBuffer): Clear our m_buffer pointer
    19183         when we deallocate m_buffer, in case we're not asked to reallocate a new
    19184         buffer. (Otherwise, we would use a stale m_buffer if we were asked to
    19185         perform any operations after shrinkCapacity was called.)
    19186        
    19187         (WTF::VectorBuffer::allocateBuffer): Made VectorBuffer with inline
    19188         capacity aware that calls to allocateBuffer might be shrinks, rather
    19189         than grows, so we shouldn't allocate a new buffer on the heap unless
    19190         our inline buffer is too small.
    19191        
    19192         (WTF::::shrinkCapacity): Call resize() instead of just setting m_size,
    19193         so destructors run. Call resize before reallocating the buffer to make
    19194         sure that we still have access to the objects we need to destroy. Call
    19195         moveOverlapping instead of move, since a call to allocateBuffer on an
    19196         inline buffer may produce identical storage.
    19197 
    19198 2008-03-14  Alexey Proskuryakov  <[email protected]>
    19199 
    19200         Reviewed by Darin.
    19201 
    19202         Get rid of a localime() call on platforms that have better alternatives.
    19203 
    19204         * kjs/DateMath.h: Added getLocalTime();
    19205 
    19206         * kjs/DateMath.cpp:
    19207         (KJS::getLocalTime):
    19208         (KJS::getDSTOffsetSimple):
    19209         Implementation moved from getDSTOffsetSimple().
    19210 
    19211         * kjs/date_object.cpp:
    19212         (KJS::DateObjectImp::callAsFunction): Switched to getLocalTime().
    19213 
    19214 2008-03-14  David D. Kilzer  <[email protected]>
    19215 
    19216         Unify concept of enabling the Mac Java bridge.
    19217 
    19218         Reviewed by Darin and Anders.
    19219 
    19220         * wtf/Platform.h: Define ENABLE_MAC_JAVA_BRIDGE here.
    19221 
    19222 2008-03-13  Mark Mentovai  <[email protected]>
    19223 
    19224         Reviewed by eseidel.  Landed by eseidel.
    19225 
    19226         * wtf/FastMalloc.cpp: #include <wtf/HashSet.h> outside of any
    19227         namespaces.
    19228 
    19229 2008-03-13  Mark Mentovai  <[email protected]>
    19230 
    19231         Reviewed by eseidel.  Landed by eseidel.
    19232 
    19233         * pcre/pcre_exec.cpp: Fix misnamed variable, allowing -DDEBUG build
    19234         to succeed.
    19235         * wtf/ThreadingPthreads.cpp: #include <sys/time.h> for gettimeofday
    19236         in non-pch build.
    19237 
    19238 2008-03-13  Steve Falkenburg  <[email protected]>
    19239 
    19240         PGO build fixes.
    19241        
    19242         Disable PGO for normal release builds.
    19243         Added work-in-progress Release_PGOInstrument/Release_PGOOptimize targets.
    19244 
    19245         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    19246 
    19247 2008-03-13  Beth Dakin  <[email protected]>
    19248 
    19249         Reviewed by Geoff.
    19250 
    19251         Adding new functionality to Vector. Currently all of the shrink and
    19252         resize functions on Vector only shrink the size of the Vector, not
    19253         the capacity. For the Vector to take up as little memory as
    19254         possible, though, it is necessary to be able to shrink the capacity
    19255         as well. So this patch adds that functionality.
    19256 
    19257         I need this for a speed up I am working on, and Geoff wants to use
    19258         it in a speed up he is working on also, so he asked me to commit it
    19259         now.
    19260 
    19261         * wtf/Vector.h:
    19262         (WTF::VectorBufferBase::allocateBuffer):
    19263         (WTF::::shrinkCapacity):
    19264 
    19265 2008-03-13  Simon Hausmann  <[email protected]>
    19266 
    19267         Reviewed by Adam Roben.
    19268 
    19269         Attempt at fixing the Qt/Windows build bot. Quote using double-quotes
    19270         instead of single quotes.
    19271 
    19272         * pcre/dftables:
    19273 
    19274 2008-03-12  Steve Falkenburg  <[email protected]>
    19275 
    19276         Build fix.
    19277 
    19278         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
    19279 
    19280 2008-03-12  Alp Toker  <[email protected]>
    19281 
    19282         Another autotools testkjs build fix attempt.
    19283 
    19284         * GNUmakefile.am:
    19285 
    19286 2008-03-12  Alp Toker  <[email protected]>
    19287 
    19288         Attempt to fix the autotools testkjs build on systems with
    19289         non-standard include paths.
    19290 
    19291         * GNUmakefile.am:
    19292 
    19293 2008-03-11  Alexey Proskuryakov  <[email protected]>
    19294 
    19295         Reviewed by Darin.
    19296 
    19297         <rdar://problem/5787743> REGRESSION: Crash at WTF::Collator::CreateCollator() running fast/js/kde/StringObject.html on Windows
    19298 
    19299         * wtf/unicode/icu/CollatorICU.cpp:
    19300         (WTF::Collator::createCollator): Check for null (== user default) m_locale before calling strcmp.
    19301 
    19302 2008-03-11  Steve Falkenburg  <[email protected]>
    19303 
    19304         Disable LTCG/PGO for grammar.cpp and nodes.cpp.
    19305         PGO on these files causes us to hang.
    19306        
    19307         Copy newer vsprops files from relative WebKitLibraries path to environment variable based path.
    19308        
    19309         Reviewed by Oliver.
    19310 
    19311         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    19312         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
    19313 
    19314 2008-03-10  Darin Adler  <[email protected]>
    19315 
    19316         - Windows build fix
    19317 
    19318         * kjs/function.cpp: (KJS::decode): Initialize variable.
    19319 
    19320 2008-03-10  Brent Fulgham  <[email protected]>
    19321 
    19322         Windows build fix
    19323 
    19324         Reviewed by Adam.
    19325 
    19326         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
    19327         Set the PATH to include Cygwin before running touch.
    19328 
    19329 2008-03-10  Eric Seidel  <[email protected]>
    19330 
    19331         Build fix for JSC on windows.
    19332 
    19333         * API/JSStringRefCF.cpp:
    19334         (JSStringCreateWithCFString):
    19335         * kjs/function.cpp:
    19336         (KJS::decode):
    19337         * kjs/nodes2string.cpp:
    19338         (KJS::escapeStringForPrettyPrinting):
    19339 
    19340 2008-03-10  Eric Seidel  <[email protected]>
    19341        
    19342         No review, build fix only.
    19343        
    19344         Attempt to fix the windows build?
    19345 
    19346         * kjs/ustring.h: change unsigned short to UChar
    19347 
    19348 2008-03-10  Eric Seidel  <[email protected]>
    19349 
    19350         Reviewed by Darin.
    19351 
    19352         Remove KJS::UChar, use ::UChar instead
    19353         http://bugs.webkit.org/show_bug.cgi?id=17017
    19354 
    19355         * API/JSStringRef.cpp:
    19356         (JSStringCreateWithCharacters):
    19357         (JSStringCreateWithUTF8CString):
    19358         * API/JSStringRefCF.cpp:
    19359         (JSStringCreateWithCFString):
    19360         * JavaScriptCore.exp:
    19361         * kjs/Parser.h:
    19362         * kjs/function.cpp:
    19363         (KJS::decode):
    19364         (KJS::parseInt):
    19365         (KJS::parseFloat):
    19366         (KJS::globalFuncEscape):
    19367         (KJS::globalFuncUnescape):
    19368         * kjs/function_object.cpp:
    19369         (KJS::FunctionObjectImp::construct):
    19370         * kjs/identifier.cpp:
    19371         (KJS::Identifier::equal):
    19372         (KJS::CStringTranslator::translate):
    19373         * kjs/interpreter.h:
    19374         * kjs/lexer.cpp:
    19375         (KJS::Lexer::setCode):
    19376         (KJS::Lexer::shift):
    19377         (KJS::Lexer::lex):
    19378         (KJS::Lexer::convertUnicode):
    19379         (KJS::Lexer::makeIdentifier):
    19380         * kjs/lookup.cpp:
    19381         (KJS::keysMatch):
    19382         * kjs/nodes2string.cpp:
    19383         (KJS::escapeStringForPrettyPrinting):
    19384         (KJS::SourceStream::operator<<):
    19385         * kjs/regexp.cpp:
    19386         (KJS::RegExp::RegExp):
    19387         (KJS::RegExp::match):
    19388         * kjs/string_object.cpp:
    19389         (KJS::substituteBackreferences):
    19390         (KJS::stringProtoFuncCharCodeAt):
    19391         (KJS::stringProtoFuncToLowerCase):
    19392         (KJS::stringProtoFuncToUpperCase):
    19393         (KJS::stringProtoFuncToLocaleLowerCase):
    19394         (KJS::stringProtoFuncToLocaleUpperCase):
    19395         * kjs/ustring.cpp:
    19396         (KJS::UString::Rep::computeHash):
    19397         (KJS::UString::UString):
    19398         (KJS::UString::append):
    19399         (KJS::UString::ascii):
    19400         (KJS::UString::operator=):
    19401         (KJS::UString::is8Bit):
    19402         (KJS::UString::toStrictUInt32):
    19403         (KJS::UString::find):
    19404         (KJS::operator==):
    19405         (KJS::operator<):
    19406         (KJS::compare):
    19407         (KJS::UString::UTF8String):
    19408         * kjs/ustring.h:
    19409         * pcre/pcre.h:
    19410 
    19411 2008-03-09  Steve Falkenburg  <[email protected]>
    19412 
    19413         Stop Windows build if an error occurs in a prior project.
    19414 
    19415         Rubber stamped by Darin.
    19416 
    19417         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    19418         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
    19419         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
    19420         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
    19421 
    19422 2008-03-09  J¸rg Billeter  <[email protected]>
    19423 
    19424         Reviewed by Alp Toker.
    19425 
    19426         Conditionalise ICU for Unicode in the GTK+ port.
    19427 
    19428         * wtf/Platform.h:
    19429 
    19430 2008-03-07  David D. Kilzer  <[email protected]>
    19431 
    19432         Unify concept of enabling Netscape Plug-in API (NPAPI).
    19433 
    19434         Reviewed by Darin.
    19435 
    19436         * wtf/Platform.h: Define ENABLE_NETSCAPE_PLUGIN_API here.
    19437 
    19438 2008-03-07  Geoffrey Garen  <[email protected]>
    19439 
    19440         Reviewed by Darin Adler.
    19441        
    19442         Fixed <rdar://problem/5689093> Stricter (ES4) eval semantics
    19443        
    19444         The basic rule is:
    19445        
    19446         - "eval(s)" is treated as an operator that gives the ES3 eval behavior.
    19447             ... but only if there is no overriding declaration of "eval" in scope.
    19448         - All other invocations treat eval as a function that evaluates a
    19449         script in the context of its "this" object.
    19450             ... but if its "this" object is not the global object it was
    19451             originally associated with, eval throws an exception.
    19452        
    19453         Because only expressions of the form "eval(s)" have access to local
    19454         scope, the compiler can now statically determine whether a function
    19455         needs local scope to be dynamic.
    19456 
    19457         * kjs/nodes.h: Added FunctionCallEvalNode. It works just like
    19458         FuncationCallResolveNode, except it statically indicates that the node
    19459         may execute eval in the ES3 way.
    19460         * kjs/nodes.cpp:
    19461         * kjs/nodes2string.cpp:
    19462 
    19463         * tests/mozilla/expected.html: This patch happens to fix a Mozilla JS
    19464         test, but it's a bit of a pyrrhic victory. The test intends to test
    19465         Mozilla's generic API for calling eval on any object, but, in reality,
    19466         we only support calling eval on the global object.
    19467 
    19468 2008-03-06  Steve Falkenburg  <[email protected]>
    19469 
    19470         Build fix.
    19471 
    19472         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
    19473 
    19474 2008-03-06  Steve Falkenburg  <[email protected]>
    19475 
    19476         Build fix.
    19477 
    19478         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
    19479 
    19480 2008-03-06  Alp Toker  <[email protected]>
    19481 
    19482         Fix the build fix in r30845 to support out-of-tree builds.
    19483 
    19484         * GNUmakefile.am:
    19485 
    19486 2008-03-06  Steve Falkenburg  <[email protected]>
    19487 
    19488         Build fix.
    19489 
    19490         * wtf/ThreadingWin.cpp:
    19491         (WTF::ThreadCondition::timedWait):
    19492 
    19493 2008-03-06  Darin Adler  <[email protected]>
    19494 
    19495         - another small step towards fixing the Qt build
    19496 
    19497         * JavaScriptCore.pri: Remove more references to the now-obsolete bindings directory.
    19498 
    19499 2008-03-06  Darin Adler  <[email protected]>
    19500 
    19501         - a small step towards fixing the Qt build
    19502 
    19503         * JavaScriptCore.pri: Remove references to files no longer present in JavaScriptCore/bindings.
    19504 
    19505 2008-03-06  Brady Eidson  <[email protected]>
    19506 
    19507         Gtk Build fix
    19508 
    19509         * wtf/ThreadingGtk.cpp:
    19510         (WTF::ThreadCondition::timedWait):
    19511 
    19512 2008-03-06  Alexey Proskuryakov  <[email protected]>
    19513 
    19514         Wx build fix.
    19515 
    19516         * wtf/unicode/icu/CollatorICU.cpp:
    19517         (WTF::Collator::userDefault): Put ICU workaround under both PLATFORM(DARWIN) and
    19518         PLATFORM(CF) checks, so that each port can decide if it wants to use CF on Mac for it.
    19519 
    19520 2008-03-06  Brady Eidson <[email protected]>
    19521 
    19522         Reviewed by Darin
    19523 
    19524         Add a timedWait() method to ThreadCondition
    19525 
    19526         * JavaScriptCore.exp:
    19527 
    19528         * wtf/Threading.h:
    19529 
    19530         * wtf/ThreadingGtk.cpp:
    19531         (WTF::ThreadCondition::timedWait):
    19532 
    19533         * wtf/ThreadingNone.cpp:
    19534         (WTF::ThreadCondition::timedWait):
    19535 
    19536         * wtf/ThreadingPthreads.cpp:
    19537         (WTF::ThreadCondition::timedWait):
    19538 
    19539         * wtf/ThreadingWin.cpp:
    19540         (WTF::ThreadCondition::timedWait): Needs implementation
    19541 
    19542 2008-03-06  Alexey Proskuryakov  <[email protected]>
    19543 
    19544         More build fixes.
    19545 
    19546         * jscore.bkl: Add the wtf/unicode directory.
    19547         * wtf/unicode/CollatorDefault.cpp:
    19548         (WTF::Collator::userDefault): Use a constructor that does exist.
    19549         * wtf/unicode/icu/CollatorICU.cpp: Mac build fix for case-sensitive file systems.
    19550 
    19551 2008-03-06  Darin Adler  <[email protected]>
    19552 
    19553         - try to fix the Qt build
    19554 
    19555         * JavaScriptCore.pri: Add the wtf/unicode directory.
    19556 
    19557 2008-03-06  Darin Adler  <[email protected]>
    19558 
    19559         - try to fix the GTK build
    19560 
    19561         * GNUmakefile.am: Add a -I for the wtf/unicode directory.
    19562 
    19563 2008-03-06  Darin Adler  <[email protected]>
    19564 
    19565         - try to fix the Mac build
    19566 
    19567         * icu/unicode/parseerr.h: Copied from ../WebCore/icu/unicode/parseerr.h.
    19568         * icu/unicode/ucol.h: Copied from ../WebCore/icu/unicode/ucol.h.
    19569         * icu/unicode/uloc.h: Copied from ../WebCore/icu/unicode/uloc.h.
    19570         * icu/unicode/unorm.h: Copied from ../WebCore/icu/unicode/unorm.h.
    19571         * icu/unicode/uset.h: Copied from ../WebCore/icu/unicode/uset.h.
    19572 
    19573 2008-03-06  Alexey Proskuryakov  <[email protected]>
    19574 
    19575         Reviewed by Darin.
    19576 
    19577         <rdar://problem/5687269> Need to create a Collator abstraction for WebCore and JavaScriptCore
    19578 
    19579         * wtf/Threading.h:
    19580         (WTF::initializeThreading):
    19581         * wtf/ThreadingGtk.cpp:
    19582         (WTF::initializeThreading):
    19583         * wtf/ThreadingNone.cpp:
    19584         * wtf/ThreadingPthreads.cpp:
    19585         * wtf/ThreadingWin.cpp:
    19586         Added AtomicallyInitializedStatic.
    19587 
    19588         * kjs/string_object.cpp: (KJS::localeCompare): Changed to use Collator.
    19589 
    19590         * GNUmakefile.am:
    19591         * JavaScriptCore.exp:
    19592         * JavaScriptCore.pri:
    19593         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
    19594         * JavaScriptCore.xcodeproj/project.pbxproj:
    19595         * JavaScriptCoreSources.bkl:
    19596         Added new fiiles to projects.
    19597 
    19598         * wtf/unicode/Collator.h: Added.
    19599         (WTF::Collator::):
    19600         * wtf/unicode/CollatorDefault.cpp: Added.
    19601         (WTF::Collator::Collator):
    19602         (WTF::Collator::~Collator):
    19603         (WTF::Collator::setOrderLowerFirst):
    19604         (WTF::Collator::collate):
    19605         * wtf/unicode/icu/CollatorICU.cpp: Added.
    19606         (WTF::cachedCollatorMutex):
    19607         (WTF::Collator::Collator):
    19608         (WTF::Collator::~Collator):
    19609         (WTF::Collator::setOrderLowerFirst):
    19610         (WTF::Collator::collate):
    19611         (WTF::Collator::createCollator):
    19612         (WTF::Collator::releaseCollator):
    19613 
    19614 2008-03-05  Kevin Ollivier  <[email protected]>
    19615 
    19616         Fix the wx build after the bindings move.
    19617 
    19618         * JavaScriptCoreSources.bkl:
    19619         * jscore.bkl:
    19620 
    19621 2008-03-05  Alp Toker  <[email protected]>
    19622 
    19623         GTK+ build fix for breakage introduced in r30800.
    19624 
    19625         Track moved bridge sources from JavaScriptCore to WebCore.
    19626 
    19627         * GNUmakefile.am:
    19628 
    19629 2008-03-05  Brent Fulgham  <[email protected]>
    19630 
    19631         Reviewed by Adam Roben.
    19632 
    19633         Remove definition of WTF_USE_SAFARI_THEME from wtf/Platform.h
    19634         because the PLATFORM(CG) flag is not set until config.h has
    19635         already included this file.
    19636 
    19637         * wtf/Platform.h:  Remove useless definition of WTF_USE_SAFARI_THEME
    19638 
    19639 2008-03-05  Brady Eidson  <[email protected]>
    19640 
    19641         Reviewed by Alexey and Mark Rowe
    19642 
    19643         Fix for <rdar://problem/5778247> - Reproducible crash on storage/execute-sql-args.html
    19644 
    19645         DatabaseThread::unscheduleDatabaseTasks() manually filters through a MessageQueue,
    19646         removing particular items for Databases that were shutting down.
    19647 
    19648         This filtering operation is not atomic, and therefore causes a race condition with the
    19649         MessageQueue waking up and reading from the message queue. 
    19650 
    19651         The end result was an attempt to dereference a null DatabaseTask.  Timing-wise, this never
    19652         seemed to happen in a debug build, otherwise an assertion would've caught it.  Replacing that
    19653         assertion with a crash in a release build is what revealed this bug.
    19654 
    19655         * wtf/MessageQueue.h:
    19656         (WTF::::waitForMessage): Tweak the waiting logic to check the queue's empty state then go back
    19657           to sleep if the queue was empty - checking m_killed each time it wakes up.
    19658 
    19659 2008-03-05  David D. Kilzer  <[email protected]>
    19660 
    19661         Remove unused header includes from interpreter.cpp.
    19662 
    19663         Reviewed by Darin.
    19664 
    19665         * kjs/interpreter.cpp: Remove unused header includes.
    19666 
    19667 2008-03-05  Anders Carlsson  <[email protected]>
    19668 
    19669         Reviewed by Sam.
    19670        
    19671         Remove bindings/.
    19672 
    19673         * bindings: Removed.
    19674 
    19675 2008-03-05  Anders Carlsson  <[email protected]>
    19676 
    19677         Don't build bindings/ anymore.
    19678        
    19679         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    19680 
    19681 2008-03-05  Anders Carlsson  <[email protected]>
    19682 
    19683         Reviewed by Geoff.
    19684 
    19685         Don't build JavaScriptCore/bindings.
    19686        
    19687         * JavaScriptCore.exp:
    19688         Export a couple of new functions.
    19689        
    19690         * JavaScriptCore.xcodeproj/project.pbxproj:
    19691         Remove bindings/
    19692        
    19693         * kjs/config.h:
    19694         No need to define HAVE_JNI anymore.
    19695        
    19696         * kjs/interpreter.cpp:
    19697         Remove unnecessary include.
    19698 
    19699 2008-03-05  David D. Kilzer  <[email protected]>
    19700 
    19701         Allow override of default script file name using command-line argument.
    19702 
    19703         Reviewed by Adele.
    19704 
    19705         * API/minidom.c:
    19706         (main): Allow first command-line argument to override the default script
    19707         file name of "minidom.js".
    19708         * API/testapi.c:
    19709         (main): Allow first command-line argument to override the default script
    19710         file name of "testapi.js".
    19711 
    19712 2008-03-04  Mark Rowe  <[email protected]>
    19713 
    19714         Mac build fix.
    19715 
    19716         * JavaScriptCore.exp:  Add new symbol to exports file.
    19717 
    19718 2008-03-03  Oliver Hunt  <[email protected]>
    19719 
    19720         Reviewed by Anders.
    19721 
    19722         Make ForInNode check for the timeout interrupt
    19723 
    19724         * kjs/nodes.cpp:
    19725         (KJS::ForInNode::execute):
    19726 
    19727 2008-03-02  Brent Fulgham  <[email protected]>
    19728 
    19729         Reviewed by Alp Toker.
    19730 
    19731         http://bugs.webkit.org/show_bug.cgi?id=17415
    19732         GTK Build (using autotools) on Mac OS (DarwinPorts) Fails
    19733 
    19734         Add -lstdc++ to link flags for minidom program.  This corrects
    19735         a build error for the GTK+ on Mac OS.
    19736 
    19737         * GNUmakefile.am:
    19738 
    19739 2008-03-01  Mark Rowe  <[email protected]>
    19740 
    19741         Reviewed by Tim Hatcher.
    19742 
    19743         Update Xcode configuration to support building debug and release from the mysterious future.
    19744 
    19745         * Configurations/Base.xcconfig:
    19746         * Configurations/DebugRelease.xcconfig:
    19747 
    19748 2008-02-29  Brent Fulgham  <[email protected]>
    19749 
    19750         http://bugs.webkit.org/show_bug.cgi?id=17483
    19751         Implement scrollbars on Windows (Cairo)
    19752 
    19753         Reviewed by Adam Roben.
    19754 
    19755         * wtf/Platform.h:
    19756 
    19757 2008-02-29  Adam Roben  <[email protected]>
    19758 
    19759         Remove unused DebuggerImp::abort and DebuggerImp::aborted
    19760 
    19761         Reviewed by Tim and Sam.
    19762 
    19763         * kjs/function_object.cpp:
    19764         (KJS::FunctionObjectImp::construct):
    19765         * kjs/internal.h:
    19766         (KJS::DebuggerImp::DebuggerImp):
    19767         * kjs/nodes.cpp:
    19768         (KJS::Node::handleException):
    19769         (KJS::FunctionBodyNodeWithDebuggerHooks::execute):
    19770 
    19771 2008-02-28  Eric Christopher  <[email protected]>
    19772 
    19773         Reviewed by Geoffrey Garen.
    19774 
    19775         ** TOTAL **:          1.005x as fast    2867.6ms +/- 0.4%  2853.2ms +/- 0.3%    significant
    19776 
    19777         * kjs/nodes.cpp: Tell the compiler that exceptions are unexpected (for
    19778         the sake of branch prediction and code organization).
    19779 
    19780 2008-02-27  Alexey Proskuryakov  <[email protected]>
    19781 
    19782         Reviewed by Sam Weinig.
    19783 
    19784         http://bugs.webkit.org/show_bug.cgi?id=17030
    19785         Small buffer overflow within initialization
    19786 
    19787         * kjs/date_object.cpp:
    19788         (KJS::DateObjectFuncImp::callAsFunction):
    19789         (KJS::parseDate):
    19790         Remove unnecessary and incorrect memset() calls - GregorianDateTime can initialize itself.
    19791 
    19792 2008-02-25  Sam Weinig  <[email protected]>
    19793 
    19794         Reviewed by Dan Bernstein.
    19795 
    19796         - Add a variant of remove that takes a position and a length.
    19797 
    19798         * wtf/Vector.h:
    19799         (WTF::Vector::remove):
    19800 
    19801 2008-02-25  Mark Mentovai  <[email protected]>
    19802 
    19803         Reviewed by Mark Rowe.
    19804 
    19805         Enable CollectorHeapIntrospector to build by itself, as well as in an AllInOneFile build.
    19806         http://bugs.webkit.org/show_bug.cgi?id=17538
    19807 
    19808         * kjs/CollectorHeapIntrospector.cpp: Provide "using" declaration for
    19809           WTF::RemoteMemoryReader.
    19810         * kjs/collector.h: Move CollectorHeap declaration here...
    19811         * kjs/collector.cpp: ... from here.
    19812 
    19813 2008-02-25  Darin Adler  <[email protected]>
    19814 
    19815         Reviewed by Adam.
    19816 
    19817         * JavaScriptCore.exp: Sort the contents of this file.
    19818 
    19819 2008-02-25  Adam Roben  <[email protected]>
    19820 
    19821         MSVC build fix
    19822 
    19823         * kjs/testkjs.cpp:
    19824         (functionQuit): Don't add a return statement after exit(0) for MSVC.
    19825 
    19826 2008-02-24  Sam Weinig  <[email protected]>
    19827 
    19828         Reviewed by Mark Rowe.
    19829 
    19830         http://bugs.webkit.org/show_bug.cgi?id=17529
    19831         Add support for reading from stdin from testkjs
    19832 
    19833         * kjs/testkjs.cpp:
    19834         (GlobalObject::GlobalObject): Add readline function to global object.
    19835         (functionReadline): Added. Reads characters from stdin until a '\n' or
    19836         EOF is encountered. The input is returned as a String to the caller.
    19837 
    19838 2008-02-24  Sam Weinig  <[email protected]>
    19839 
    19840         Reviewed by Mark Rowe.
    19841 
    19842         http://bugs.webkit.org/show_bug.cgi?id=17528
    19843         Give testkjs a bath
    19844 
    19845         * JavaScriptCore.exp:
    19846         * JavaScriptCore.xcodeproj/project.pbxproj: Make the testkjs.cpp use 4 space indentation.
    19847         * kjs/testkjs.cpp:
    19848         (StopWatch::getElapsedMS):
    19849         (GlobalObject::className):
    19850         (GlobalObject::GlobalObject):
    19851         Rename GlobalImp to GlobalObject and setup the global functions
    19852         in the GlobalObject's constructor. Also, use static functions for
    19853         the implementation so we can use the standard PrototypeFunction
    19854         class and remove TestFunctionImp.
    19855         (functionPrint): Move print() functionality here.
    19856         (functionDebug): Move debug() functionality here.
    19857         (functionGC): Move gc() functionality here.
    19858         (functionVersion): Move version() functionality here.
    19859         (functionRun): Move run() functionality here.
    19860         (functionLoad): Move load() functionality here.
    19861         (functionQuit): Move quit() functionality here.
    19862         (prettyPrintScript): Fix indentation.
    19863         (runWithScripts): Since all the functionality of createGlobalObject is
    19864         now in the GlobalObject constructor, just call new here.
    19865         (parseArguments): Fix indentation.
    19866         (kjsmain): Ditto
    19867         (fillBufferWithContentsOfFile): Ditto.
    19868 
    19869 2008-02-24  Sam Weinig  <[email protected]>
    19870 
    19871         Reviewed by Oliver Hunt and Mark Rowe.
    19872 
    19873         http://bugs.webkit.org/show_bug.cgi?id=17505
    19874         Add support for getting command line arguments in testkjs
    19875 
    19876         - This slightly changes the behavior of parsing arguments by requiring
    19877           a '-f' before all files.
    19878 
    19879         * kjs/testkjs.cpp:
    19880         (createGlobalObject): Add a global property called 'arguments' which
    19881         contains an array with the parsed arguments as strings.
    19882         (runWithScripts): Pass in the arguments vector so that it can be passed
    19883         to the global object.
    19884         (parseArguments): Change parsing rules to require a '-f' before any script
    19885         file. After all '-f' and '-p' arguments have been parsed, the remaining
    19886         are added to the arguments vector and exposed to the script. If there is a
    19887         chance of ambiguity (the user wants to pass the string '-f' to the script),
    19888         the string '--' can be used separate the options from the pass through
    19889         arguments.
    19890         (kjsmain):
    19891 
    19892 2008-02-24  Dan Bernstein  <[email protected]>
    19893 
    19894         Reviewed by Darin Adler.
    19895 
    19896         - fix http://bugs.webkit.org/show_bug.cgi?id=17511
    19897           REGRESSION: Reproducible crash in SegmentedSubstring::SegmentedSubstring(SegmentedSubstring const&)
    19898 
    19899         * wtf/Deque.h:
    19900         (WTF::::expandCapacityIfNeeded): Fixed the case where m_start and m_end
    19901         are both zero but the buffer capacity is non-zero.
    19902         (WTF::::prepend): Added validity checks.
    19903 
    19904 2008-02-23  Jan Michael Alonzo  <[email protected]>
    19905 
    19906         Rubber stamped by Darin.
    19907 
    19908         Add separator '\' after libJavaScriptCore_la_LIBADD and cleanup
    19909         whitespaces introduced in the previous commit.
    19910 
    19911         * GNUmakefile.am:
    19912 
    19913 2008-02-23  Jan Michael Alonzo  <[email protected]>
    19914 
    19915         * GNUmakefile.am: Add GLOBALDEPS for testkjs and minidom.
    19916 
    19917 2008-02-23  Darin Adler  <[email protected]>
    19918 
    19919         Reviewed by Anders.
    19920 
    19921         - http://bugs.webkit.org/show_bug.cgi?id=17496
    19922           make Deque use a circular array; add iterators
    19923 
    19924         * wtf/Deque.h: Wrote an all-new version of this class that uses a circular
    19925         buffer. Growth policy is identical to vector. Added iterators.
    19926 
    19927         * wtf/Vector.h: Made two small refinements while using this to implement
    19928         Deque: Made VectorBufferBase derive from Noncopyable, which would have
    19929         saved me some debugging time if it had been there. Renamed Impl and
    19930         m_impl to Buffer and m_buffer.
    19931 
    19932 2008-02-23  Darin Adler  <[email protected]>
    19933 
    19934         Reviewed by Anders.
    19935 
    19936         - http://bugs.webkit.org/show_bug.cgi?id=17067
    19937           eliminate attributes parameter from JSObject::put for speed/clarity
    19938 
    19939         * API/JSCallbackObject.h: Removed attribute arguments.
    19940         * API/JSCallbackObjectFunctions.h:
    19941         (KJS::JSCallbackObject<Base>::put): Ditto.
    19942         * API/JSObjectRef.cpp:
    19943         (JSObjectSetProperty): Use initializeVariable or putDirect when necessary
    19944         to set attribute values.
    19945         * JavaScriptCore.exp: Updated.
    19946         * bindings/objc/objc_runtime.h: Removed attribute arguments.
    19947         * bindings/objc/objc_runtime.mm:
    19948         (ObjcFallbackObjectImp::put): Ditto.
    19949         * bindings/runtime_array.cpp:
    19950         (RuntimeArray::put): Ditto.
    19951         * bindings/runtime_array.h: Ditto.
    19952         * bindings/runtime_object.cpp:
    19953         (RuntimeObjectImp::put): Ditto.
    19954         * bindings/runtime_object.h: Ditto. Also removed canPut which was only
    19955         called from one place in WebCore that can use hasProperty instead.
    19956 
    19957         * kjs/Activation.h: Removed attribute argument from put and added the new
    19958         initializeVariable function that's used to put variables in variable objects.
    19959         Also made isActivationObject a const member.
    19960 
    19961         * kjs/JSGlobalObject.cpp:
    19962         (KJS::JSGlobalObject::put): Removed attribute argument.
    19963         (KJS::JSGlobalObject::initializeVariable): Added. Used to give variables
    19964         their initial values, which can include the read-only property.
    19965         (KJS::JSGlobalObject::reset): Removed obsolete comments about flags.
    19966         Removed Internal flag, which is no longer needed.
    19967         * kjs/JSGlobalObject.h: More of the same.
    19968 
    19969         * kjs/JSVariableObject.h: Added pure virtual initializeVariable function.
    19970         (KJS::JSVariableObject::symbolTablePut): Removed checkReadOnly flag; we always
    19971         check read-only.
    19972         (KJS::JSVariableObject::symbolTableInitializeVariable): Added.
    19973 
    19974         * kjs/array_instance.cpp:
    19975         (KJS::ArrayInstance::put): Removed attribute argument.
    19976         * kjs/array_instance.h: Ditto.
    19977 
    19978         * kjs/function.cpp:
    19979         (KJS::FunctionImp::put): Ditto.
    19980         (KJS::Arguments::put): Ditto.
    19981         (KJS::ActivationImp::put): Ditto.
    19982         (KJS::ActivationImp::initializeVariable): Added.
    19983         * kjs/function.h: Removed attribute arguments.
    19984 
    19985         * kjs/function_object.cpp:
    19986         (KJS::FunctionObjectImp::construct): Removed Internal flag.
    19987 
    19988         * kjs/lookup.h:
    19989         (KJS::lookupPut): Removed attributes argument. Also changed to use putDirect
    19990         instead of calling JSObject::put.
    19991         (KJS::cacheGlobalObject): Ditto.
    19992 
    19993         * kjs/nodes.cpp:
    19994         (KJS::ConstDeclNode::handleSlowCase): Call initializeVariable to initialize
    19995         the constant.
    19996         (KJS::ConstDeclNode::evaluateSingle): Ditto.
    19997         (KJS::TryNode::execute): Use putDirect to set up the new object.
    19998         (KJS::FunctionBodyNode::processDeclarations): Removed Internal.
    19999         (KJS::ProgramNode::processDeclarations): Ditto.
    20000         (KJS::EvalNode::processDeclarations): Call initializeVariable to initialize
    20001         the variables and functions.
    20002         (KJS::FuncDeclNode::makeFunction): Removed Internal.
    20003         (KJS::FuncExprNode::evaluate): Ditto.
    20004 
    20005         * kjs/object.cpp: Removed canPut, which was only being used in one code path,
    20006         not the normal high speed one.
    20007         (KJS::JSObject::put): Removed attribute argument. Moved the logic from
    20008         canPut here, in the one code ath that was still using it.
    20009         * kjs/object.h: Removed Internal attribute, ad canPut function. Removed the
    20010         attributes argument to the put function. Made isActivationObject const.
    20011 
    20012         * kjs/regexp_object.cpp:
    20013         (KJS::RegExpImp::put): Removed attributes argument.
    20014         (KJS::RegExpImp::putValueProperty): Ditto.
    20015         (KJS::RegExpObjectImp::put): Ditto.
    20016         (KJS::RegExpObjectImp::putValueProperty): Ditto.
    20017         * kjs/regexp_object.h: Ditto.
    20018 
    20019         * kjs/string_object.cpp:
    20020         (KJS::StringInstance::put): Removed attributes argument.
    20021         * kjs/string_object.h: Ditto.
    20022 
    20023 2008-02-23  Jan Michael Alonzo  <[email protected]>
    20024 
    20025         Not reviewed, Gtk build fix.
    20026 
    20027         * kjs/testkjs.pro:
    20028 
    20029 2008-02-23  Alexey Proskuryakov  <[email protected]>
    20030 
    20031         Windows build fix - move ThreadCondition implementation from WebCore to WTF.
    20032 
    20033         * wtf/ThreadingWin.cpp:
    20034         (WTF::ThreadCondition::ThreadCondition):
    20035         (WTF::ThreadCondition::~ThreadCondition):
    20036         (WTF::ThreadCondition::wait):
    20037         (WTF::ThreadCondition::signal):
    20038         (WTF::ThreadCondition::broadcast):
    20039 
    20040 2008-02-23  Alexey Proskuryakov  <[email protected]>
    20041 
    20042         Touch some files, hoping that Windows build bot will create JSC headers.
    20043 
    20044         * kjs/AllInOneFile.cpp:
    20045         * kjs/array_instance.cpp:
    20046         * wtf/HashTable.cpp:
    20047 
    20048 2008-02-23  Alexey Proskuryakov  <[email protected]>
    20049 
    20050         Qt/Wx build fix - this file was still in a wrong namespace, too.
    20051 
    20052         * wtf/ThreadingNone.cpp:
    20053 
    20054 2008-02-23  Alexey Proskuryakov  <[email protected]>
    20055 
    20056         More build fixing - fix mismatched braces.
    20057 
    20058         * JavaScriptCore.pri:
    20059 
    20060 2008-02-23  Alexey Proskuryakov  <[email protected]>
    20061 
    20062         Wx and Gtk build fixes.
    20063 
    20064         * JavaScriptCore.pri: Don't try to compile ThreadingPthreads.
    20065         * wtf/ThreadingGtk.cpp: Use a correct namespace.
    20066 
    20067 2008-02-23  Alexey Proskuryakov  <[email protected]>
    20068 
    20069         Reviewed by Darin.
    20070 
    20071         Move basic threading support from WebCore to WTF.
    20072 
    20073         Added mutex protection to MessageQueue::killed() for paranoia sake.
    20074 
    20075         * GNUmakefile.am:
    20076         * JavaScriptCore.exp:
    20077         * JavaScriptCore.pri:
    20078         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
    20079         * JavaScriptCore.xcodeproj/project.pbxproj:
    20080         * JavaScriptCoreSources.bkl:
    20081         * wtf/Locker.h: Copied from WebCore/platform/Locker.h.
    20082         * wtf/MessageQueue.h: Copied from WebCore/platform/MessageQueue.h.
    20083         (WTF::::killed):
    20084         * wtf/Threading.h: Copied from WebCore/platform/Threading.h.
    20085         * wtf/ThreadingGtk.cpp: Copied from WebCore/platform/gtk/ThreadingGtk.cpp.
    20086         (WebCore::createThread):
    20087         * wtf/ThreadingNone.cpp: Copied from WebCore/platform/ThreadingNone.cpp.
    20088         * wtf/ThreadingPthreads.cpp: Copied from WebCore/platform/pthreads/ThreadingPthreads.cpp.
    20089         (WTF::createThread):
    20090         * wtf/ThreadingWin.cpp: Copied from WebCore/platform/win/ThreadingWin.cpp.
    20091         (WTF::createThread):
    20092         (WTF::Mutex::Mutex):
    20093         (WTF::Mutex::~Mutex):
    20094         (WTF::Mutex::lock):
    20095         (WTF::Mutex::tryLock):
    20096         (WTF::Mutex::unlock):
    20097 
    20098 2008-02-22  Geoffrey Garen  <[email protected]>
    20099 
    20100         Reviewed by Sam Weinig.
    20101        
    20102         Partial fix for <rdar://problem/5744037> Gmail out of memory (17455)
    20103        
    20104         I'm removing KJS_MEM_LIMIT for the following reasons:
    20105        
    20106         - We have a few reports of KJS_MEM_LIMIT breaking important web
    20107         applications, like GMail and Google Reader. (For example, if you
    20108         simply open 12 GMail tabs, tab #12 will hit the limit.)
    20109 
    20110         - Firefox has no discernable JS object count limit, so any limit, even
    20111         a large one, is a potential compatibility problem.
    20112        
    20113         - KJS_MEM_LIMIT does not protect against malicious memory allocation,
    20114         since there are many ways to maliciously allocate memory without
    20115         increasing the JS object count.
    20116        
    20117         - KJS_MEM_LIMIT is already mostly broken, since it only aborts the
    20118         script that breaches the limit, not any subsequent scripts.
    20119        
    20120         - We've never gotten bug reports about websites that would have
    20121         benefited from an unbroken KJS_MEM_LIMIT. The initial check-in of
    20122         KJS_MEM_LIMIT (KJS revision 80061) doesn't mention a website that
    20123         needed it.
    20124        
    20125         - Any website that brings you anywhere close to crashing due to the
    20126         number of live JS objects will almost certainly put up the "slow
    20127         script" dialog at least 20 times beforehand.
    20128 
    20129         * kjs/collector.cpp:
    20130         (KJS::Collector::collect):
    20131         * kjs/collector.h:
    20132         * kjs/nodes.cpp:
    20133         (KJS::TryNode::execute):
    20134 
    20135 2008-02-22  Oliver Hunt  <[email protected]>
    20136 
    20137         Reviewed by Alexey P.
    20138 
    20139         <rdar://problem/5759327> REGRESSION: while(NaN) acts like while(true)
    20140 
    20141         Fix yet another case where we incorrectly relied on implicit double
    20142         to bool coercion.
    20143 
    20144         * kjs/nodes.cpp:
    20145         (KJS::PostDecLocalVarNode::evaluateToBoolean):
    20146 
    20147 2008-02-20  Michael Knaup  <[email protected]>
    20148 
    20149         Reviewed by Darin.
    20150 
    20151         Fix for Bug 16753: date set methods with no args should result in NaN (Acid3 bug)
    20152         The set values result in NaN now when called with no args, NaN or +/- inf values.
    20153         The setYear, setFullYear and setUTCFullYear methods used on NaN dates work as
    20154         descripted in the standard.
    20155 
    20156         * kjs/date_object.cpp:
    20157         (KJS::fillStructuresUsingTimeArgs):
    20158         (KJS::fillStructuresUsingDateArgs):
    20159         (KJS::setNewValueFromTimeArgs):
    20160         (KJS::setNewValueFromDateArgs):
    20161         (KJS::dateProtoFuncSetYear):
    20162 
    20163 2008-02-19  Anders Carlsson  <[email protected]>
    20164 
    20165         Reviewed by Darin.
    20166 
    20167         Change OpaqueJSClass and RootObject to start with a ref count of 1.
    20168        
    20169         * API/JSClassRef.cpp:
    20170         (OpaqueJSClass::OpaqueJSClass):
    20171         (OpaqueJSClass::createNoAutomaticPrototype):
    20172         (OpaqueJSClass::create):
    20173         * API/JSClassRef.h:
    20174         * API/JSObjectRef.cpp:
    20175         (JSClassCreate):
    20176         * bindings/runtime_root.cpp:
    20177         (KJS::Bindings::RootObject::create):
    20178         (KJS::Bindings::RootObject::RootObject):
    20179 
    20180 2008-02-19  Darin Adler  <[email protected]>
    20181 
    20182         Rubber stamped by Anders.
    20183 
    20184         - removed explicit initialization to 1 for RefCounted; that's now the default
    20185 
    20186         * kjs/regexp.cpp:
    20187         (KJS::RegExp::RegExp): Removed RefCounted initializer.
    20188 
    20189 2008-02-19  Darin Adler  <[email protected]>
    20190 
    20191         Reviewed by Anders.
    20192 
    20193         - next step for http://bugs.webkit.org/show_bug.cgi?id=17257
    20194           start ref counts at 1 instead of 0 for speed
    20195 
    20196         * wtf/RefCounted.h:
    20197         (WTF::RefCounted::RefCounted): Have refcounts default to 1. This allows us to start
    20198         removing the explicit initialization of RefCounted from classes and eventually we
    20199         can remove the ability to have the initial count of 0 entirely.
    20200 
    20201 2008-02-18  Samuel Weinig  <[email protected]>
    20202 
    20203         Reviewed by Geoff Garen.
    20204 
    20205         Fix for http://bugs.webkit.org/show_bug.cgi?id=17419
    20206         Remove CompatMode from JavaScriptCore as it is never set to anything other than NativeMode
    20207 
    20208         * kjs/JSGlobalObject.cpp:
    20209         (KJS::JSGlobalObject::init):
    20210         * kjs/JSGlobalObject.h:
    20211         (KJS::JSGlobalObject::setDebugger):
    20212         * kjs/date_object.cpp:
    20213         (KJS::dateProtoFuncGetYear):
    20214 
    20215 2008-02-18  Darin Adler  <[email protected]>
    20216 
    20217         Reviewed by Sam.
    20218 
    20219         * wtf/ASCIICType.h:
    20220         (WTF::toASCIIHexValue): Added.
    20221 
    20222 2008-02-17  Darin Adler  <[email protected]>
    20223 
    20224         * wtf/ListHashSet.h: (WTF::swap): Removed stray return statement.
    20225 
    20226 2008-02-15  Adam Roben  <[email protected]>
    20227 
    20228         Make JavaScriptCore's FEATURE_DEFINES match WebCore's
    20229 
    20230         Reviewed by Mark.
    20231 
    20232         * Configurations/JavaScriptCore.xcconfig:
    20233 
    20234 2008-02-14  Stephanie Lewis <[email protected]>
    20235 
    20236         Reviewed by Geoff.
    20237 
    20238         Update order files.
    20239 
    20240         * JavaScriptCore.order:
    20241 
    20242 2008-02-14  Geoffrey Garen  <[email protected]>
    20243 
    20244         Reviewed by Sam Weinig.
    20245        
    20246         Fixed <rdar://problem/5737835> nee http://bugs.webkit.org/show_bug.cgi?id=17329
    20247         Crash in JSGlobalObject::popActivation when inserting hyperlink in Wordpress (17329)
    20248        
    20249         Don't reset the "activations" stack in JSGlobalObject::reset, since we
    20250         might be executing a script during the call to reset, and the script
    20251         needs to safely run to completion.
    20252        
    20253         Instead, initialize the "activations" stack when the global object is
    20254         created, and subsequently rely on pushing and popping during normal
    20255         execution to maintain the stack's state.
    20256        
    20257         * kjs/JSGlobalObject.cpp:
    20258         (KJS::JSGlobalObject::init):
    20259         (KJS::JSGlobalObject::reset):
    20260 
    20261 2008-02-13  Bernhard Rosenkraenzer  <[email protected]>
    20262 
    20263         Reviewed by Darin.
    20264 
    20265         - http://bugs.webkit.org/show_bug.cgi?id=17339
    20266           JavaScriptCore does not build with gcc 4.3
    20267 
    20268         * kjs/interpreter.cpp: Add include of <unistd.h>, since that's where
    20269         getpid() comes from.
    20270 
    20271 2008-02-13  Oliver Hunt  <[email protected]>
    20272 
    20273         Reviewed by Alexey P.
    20274 
    20275         <rdar://problem/5737003> REGRESSION (r27747): can't browse pictures on fastcupid.com
    20276 
    20277         When converting numeric values to booleans we need to account for NaN
    20278 
    20279         * kjs/nodes.cpp:
    20280         (KJS::MultNode::evaluateToBoolean):
    20281         (KJS::ModNode::evaluateToBoolean):
    20282 
    20283 2008-02-08  Samuel Weinig  <[email protected]>
    20284 
    20285         Reviewed by Brady Eidson.
    20286 
    20287         <rdar://problem/5659216> REGRESSION: PLT 0.3% slower due to r28868 (caching ClassNodeList and NamedNodeList)
    20288 
    20289         - Tweak the statements in isASCIISpace to account for the statistical distribution of
    20290           usage in the PLT.
    20291 
    20292         .4% speedup on my machine.  Stephanie's machine shows this as .3% speedup.
    20293 
    20294         * wtf/ASCIICType.h:
    20295         (WTF::isASCIISpace):
    20296 
    20297 2008-02-11  Sam Weinig  <[email protected]>
    20298 
    20299         Reviewed by Anders Carlsson.
    20300 
    20301         Fixes for:
    20302         <rdar://problem/5735497> Match Firefox's cross-domain model more accurately by return the built-in version of functions even if they have been overridden
    20303         <rdar://problem/5735443> Crash when setting the Window objects prototype to a custom Object and then calling a method on it
    20304 
    20305         - Expose the native Object.prototype.toString implementation so that it can be used for cross-domain
    20306           toString calling.
    20307 
    20308         * JavaScriptCore.exp:
    20309         * kjs/object_object.cpp:
    20310         * kjs/object_object.h:
    20311 
    20312 2008-02-10  Darin Adler  <[email protected]>
    20313 
    20314         Rubber stamped by Eric.
    20315 
    20316         * kjs/ExecState.h:
    20317         (KJS::ExecState::takeException): Added.
    20318 
    20319 2008-02-10  Darin Adler  <[email protected]>
    20320 
    20321         Reviewed by Eric.
    20322 
    20323         - http://bugs.webkit.org/show_bug.cgi?id=17256
    20324           eliminate default ref. count of 0 in RefCounted class
    20325 
    20326         * wtf/RefCounted.h:
    20327         (WTF::RefCounted::RefCounted): Remove default of 0.
    20328 
    20329 2008-02-10  Darin Adler  <[email protected]>
    20330 
    20331         Reviewed by Eric.
    20332 
    20333         - http://bugs.webkit.org/show_bug.cgi?id=17256
    20334           Make clients of RefCounted explicitly set the count to 0.
    20335 
    20336         * API/JSClassRef.cpp:
    20337         (OpaqueJSClass::OpaqueJSClass):
    20338         * bindings/runtime_root.cpp:
    20339         (KJS::Bindings::RootObject::RootObject):
    20340 
    20341 2008-02-09  Darin Adler  <[email protected]>
    20342 
    20343         Reviewed by Mitz.
    20344 
    20345         - http://bugs.webkit.org/show_bug.cgi?id=17256
    20346           Change RegExp to start its ref count at 1, not 0
    20347 
    20348         We'll want to do this to every RefCounted class, one at a time.
    20349 
    20350         * kjs/nodes.h:
    20351         (KJS::RegExpNode::RegExpNode): Use RegExp::create instead of new RegExp.
    20352         * kjs/regexp.cpp:
    20353         (KJS::RegExp::RegExp): Marked inline, set initial ref count to 1.
    20354         (KJS::RegExp::create): Added. Calls new RegExp then adopts the initial ref.
    20355         * kjs/regexp.h: Reformatted. Made the constructors private. Added static
    20356         create functions that return objects already wrapped in PassRefPtr.
    20357         * kjs/regexp_object.cpp:
    20358         (KJS::regExpProtoFuncCompile): Use RegExp::create instead of new RegExp.
    20359         (KJS::RegExpObjectImp::construct): Ditto.
    20360         * kjs/string_object.cpp:
    20361         (KJS::stringProtoFuncMatch): Ditto.
    20362         (KJS::stringProtoFuncSearch): Ditto.
    20363 
    20364 2008-02-08  Oliver Hunt  <[email protected]>
    20365 
    20366         Reviewed by Maciej.
    20367 
    20368         <rdar://problem/5731773> REGRESSION (r28973): Extraneous parentheses in function.toString()
    20369         https://bugs.webkit.org/show_bug.cgi?id=17214
    20370 
    20371         Make a subclass of CommaNode to provide the correct precedence for each expression in
    20372         a variable declaration list.
    20373 
    20374         * kjs/grammar.y:
    20375         * kjs/nodes.h:
    20376         (KJS::VarDeclCommaNode::):
    20377 
    20378 2008-02-08  Darin Adler  <[email protected]>
    20379 
    20380         Reviewed by Oliver.
    20381 
    20382         - fix http://bugs.webkit.org/show_bug.cgi?id=17247
    20383           Labelled continue/break can fail in some cases
    20384 
    20385         Test: fast/js/continue-break-multiple-labels.html
    20386 
    20387         * kjs/nodes.h:
    20388         (KJS::StatementNode::pushLabel): Made this virtual.
    20389         (KJS::LabelNode::pushLabel): Forward pushLabel calls to the statement inside.
    20390 
    20391 2008-02-08  Darin Adler  <[email protected]>
    20392 
    20393         Reviewed by Eric.
    20394 
    20395         - fix http://bugs.webkit.org/show_bug.cgi?id=15003
    20396           Function.prototype.constructor should not be DontDelete/ReadOnly (Acid3 bug)
    20397 
    20398         Test: fast/js/constructor-attributes.html
    20399 
    20400         * kjs/JSGlobalObject.cpp:
    20401         (KJS::JSGlobalObject::reset): Remove unwanted attributes from "constructor".
    20402         * kjs/function_object.cpp:
    20403         (KJS::FunctionObjectImp::construct): Ditto.
    20404         * kjs/nodes.cpp:
    20405         (KJS::FuncDeclNode::makeFunction): Ditto.
    20406         (KJS::FuncExprNode::evaluate): Ditto.
    20407 
    20408 2008-02-06  Geoffrey Garen  <[email protected]>
    20409 
    20410         Reviewed by Oliver Hunt.
    20411        
    20412         Added an ASSERT to catch refCount underflow, since it caused a leak in
    20413         my last check-in.
    20414 
    20415         * wtf/RefCounted.h:
    20416         (WTF::RefCounted::deref):
    20417 
    20418 2008-02-06  Geoffrey Garen  <[email protected]>
    20419 
    20420         Reviewed by Darin Adler.
    20421 
    20422         PLT speedup related to <rdar://problem/5659272> REGRESSION: PLT .4%
    20423         slower due to r28884 (global variable symbol table optimization)
    20424        
    20425         Tweaked RefCounted::deref() to be a little more efficient.
    20426 
    20427         1% - 1.5% speedup on my machine. .7% speedup on Stephanie's machine.
    20428        
    20429         * wtf/RefCounted.h:
    20430         (WTF::RefCounted::deref): Don't modify m_refCount if we're just going
    20431         to delete the object anyway. Also, use a simple == test, which might be
    20432         faster than <= on some hardware.
    20433 
    20434 2008-02-06  Darin Adler  <[email protected]>
    20435 
    20436         Reviewed by Sam.
    20437 
    20438         - fix http://bugs.webkit.org/show_bug.cgi?id=17094
    20439           Array.prototype functions create length properties with DontEnum/DontDelete
    20440 
    20441         Test results match Gecko with very few obscure exceptions that seem to be
    20442         bugs in Gecko.
    20443 
    20444         Test: fast/js/array-functions-non-arrays.html
    20445 
    20446         * kjs/array_object.cpp:
    20447         (KJS::arrayProtoFuncConcat):  Removed DontEnum and DontDelete from the call
    20448         to set length.
    20449         (KJS::arrayProtoFuncPop): Ditto. Also added missing call to deleteProperty,
    20450         which is not needed for real arrays, but is needed for non-arrays.
    20451         (KJS::arrayProtoFuncPush): Ditto.
    20452         (KJS::arrayProtoFuncShift): Ditto.
    20453         (KJS::arrayProtoFuncSlice): Ditto.
    20454         (KJS::arrayProtoFuncSort): Removed incorrect call to set length when
    20455         the array has no elements.
    20456         (KJS::arrayProtoFuncSplice): Removed DontEnum and DontDelete from the call
    20457         to set length.
    20458         (KJS::arrayProtoFuncUnShift): Ditto. Also added a check for 0 arguments to
    20459         make behavior match the specification in that case.
    20460         * kjs/nodes.cpp:
    20461         (KJS::ArrayNode::evaluate): Removed DontEnum and DontDelete from the call
    20462         to set length.
    20463 
    20464 2008-02-06  Darin Adler  <[email protected]>
    20465 
    20466         Reviewed by Sam.
    20467 
    20468         - replace calls to put to set up properties with calls to putDirect, to
    20469           prepare for a future change where put won't take attributes any more,
    20470           and for a slight performance boost
    20471 
    20472         * API/JSObjectRef.cpp:
    20473         (JSObjectMakeConstructor): Use putDirect instead of put.
    20474         * kjs/CommonIdentifiers.h: Removed lastIndex.
    20475         * kjs/JSGlobalObject.cpp:
    20476         (KJS::JSGlobalObject::reset): Use putDirect instead of put.
    20477         * kjs/array_object.cpp:
    20478         (KJS::arrayProtoFuncConcat): Took out extra call to get length (unused).
    20479         (KJS::ArrayObjectImp::ArrayObjectImp): Use putDirect instead of put.
    20480         * kjs/error_object.cpp:
    20481         (KJS::ErrorPrototype::ErrorPrototype): Use putDirect instead of put.
    20482         * kjs/function.cpp:
    20483         (KJS::Arguments::Arguments): Use putDirect instead of put.
    20484         (KJS::PrototypeFunction::PrototypeFunction): Use putDirect instead of put.
    20485         * kjs/function_object.cpp:
    20486         (KJS::FunctionObjectImp::construct): Use putDirect instead of put.
    20487         * kjs/nodes.cpp:
    20488         (KJS::FuncDeclNode::makeFunction): Use putDirect instead of put.
    20489         (KJS::FuncExprNode::evaluate): Use putDirect instead of put.
    20490         * kjs/regexp_object.cpp:
    20491         (KJS::regExpProtoFuncCompile): Use setLastIndex instead of put(lastIndex).
    20492         (KJS::RegExpImp::match): Get and set lastIndex by using m_lastIndex instead of
    20493         calling get and put.
    20494         * kjs/regexp_object.h:
    20495         (KJS::RegExpImp::setLastIndex): Added.
    20496         * kjs/string_object.cpp:
    20497         (KJS::stringProtoFuncMatch): Use setLastIndex instead of put(lastIndex).
    20498 
    20499 2008-02-05  Sam Weinig  <[email protected]>
    20500 
    20501         Reviewed by Anders Carlsson.
    20502 
    20503         Fix for http://bugs.webkit.org/show_bug.cgi?id=8080
    20504         NodeList (and other DOM lists) items are not enumeratable using for..in
    20505 
    20506         * JavaScriptCore.exp:
    20507 
    20508 2008-02-05  Mark Rowe  <[email protected]>
    20509 
    20510         Reviewed by Oliver Hunt.
    20511 
    20512         Update versioning to support the mysterious future.
    20513 
    20514         * Configurations/Version.xcconfig: Add SYSTEM_VERSION_PREFIX_1060.
    20515 
    20516 2008-02-04  Cameron Zwarich  <[email protected]>
    20517 
    20518         Reviewed by Oliver Hunt.
    20519 
    20520         Fixes Bug 16889: REGRESSION (r29425): Canvas-based graphing calculator fails to run
    20521               Bug 17015: REGRESSION (r29414-29428): www.fox.com "shows" menu fails to render
    20522               Bug 17164: REGRESSION: JavaScript pop-up menu appears at wrong location when hovering image at http://news.chinatimes.com/
    20523 
    20524         <http://bugs.webkit.org/show_bug.cgi?id=16889>
    20525         <rdar://problem/5696255>
    20526 
    20527         <http://bugs.webkit.org/show_bug.cgi?id=17015>
    20528 
    20529         <http://bugs.webkit.org/show_bug.cgi?id=17164>
    20530         <rdar://problem/5720947>
    20531 
    20532         The ActivationImp tear-off (r29425) introduced a problem with ReadModify
    20533         nodes that first resolve a slot, call valueForReadModifyNode(), and then
    20534         store a value in the previously resolved slot. Since valueForReadModifyNode()
    20535         may cause a tear-off, the slot needs to be resolved again, but this was
    20536         not happening with the existing code.
    20537 
    20538         * kjs/nodes.cpp:
    20539         (KJS::ReadModifyLocalVarNode::evaluate):
    20540         (KJS::ReadModifyResolveNode::evaluate):
    20541 
    20542 2008-02-04  Cameron McCormack <[email protected]>
    20543 
    20544         Reviewed by Geoff Garen.
    20545 
    20546         Remove some unneccesary UNUSED_PARAMs.  Clarify ownership rule of return value of JSObjectCopyPropertyNames.
    20547 
    20548         * API/JSNode.c:
    20549         (JSNode_appendChild):
    20550         (JSNode_removeChild):
    20551         (JSNode_replaceChild):
    20552         (JSNode_getNodeType):
    20553         (JSNode_getFirstChild):
    20554         * API/JSNodeList.c:
    20555         (JSNodeList_length):
    20556         * API/JSObjectRef.h:
    20557 
    20558 2008-02-04  Rodney Dawes  <[email protected]>
    20559 
    20560         Reviewed by Alp Toker and Mark Rowe.
    20561 
    20562         Fix http://bugs.webkit.org/show_bug.cgi?id=17175.
    20563         Bug 17175: Use of C++ compiler flags in CFLAGS
    20564 
    20565         * GNUmakefile.am: Use global_cxxflags as well as global_cflags in CXXFLAGS.
    20566 
    20567 2008-02-04  Alp Toker  <[email protected]>
    20568 
    20569         Rubber-stamped by Mark Rowe.
    20570 
    20571         Remove all trailing whitespace in the GTK+ port and related
    20572         components.
    20573 
    20574         * GNUmakefile.am:
    20575 
    20576 2008-02-02  Darin Adler  <[email protected]>
    20577 
    20578         Reviewed by Geoff Garen.
    20579 
    20580         PLT speedup related to <rdar://problem/5659272> REGRESSION: PLT .4%
    20581         slower due to r28884 (global variable symbol table optimization)
    20582 
    20583         Geoff's theory is that the slowdown was due to copying hash tables when
    20584         putting things into the back/forward cache. If that's true, then this
    20585         should fix the problem.
    20586 
    20587         (According to Geoff's measurements, in a PLT that exaggerates the
    20588         importance of symbol table saving during cached page creation, this
    20589         patch is a ~3X speedup in cached page creation, and a 9% speedup overall.)
    20590 
    20591         * JavaScriptCore.exp: Updated.
    20592 
    20593         * kjs/JSVariableObject.cpp:
    20594         (KJS::JSVariableObject::saveLocalStorage): Updated for changes to SavedProperty,
    20595         which has been revised to avoid initializing each SavedProperty twice when building
    20596         the array. Store the property names too, so we don't have to store the symbol table
    20597         separately. Do this by iterating the symbol table instead of the local storage vector.
    20598         (KJS::JSVariableObject::restoreLocalStorage): Ditto. Restore the symbol table as
    20599         well as the local storage vector.
    20600 
    20601         * kjs/JSVariableObject.h: Removed save/restoreSymbolTable and do that work inside
    20602         save/restoreLocalStorage instead. Made restoreLocalStorage a non-const member function
    20603         that takes a const reference to a SavedProperties object.
    20604 
    20605         * kjs/LocalStorage.h: Changed attributes to be unsigned instead of int to match
    20606         other declarations of attributes elsewhere.
    20607 
    20608         * kjs/property_map.cpp:
    20609         (KJS::SavedProperties::SavedProperties): Updated for data member name change.
    20610         (KJS::PropertyMap::save): Updated for data member name change and to use the new
    20611         inline init function instead of setting the fields directly. This allows us to
    20612         skip initializing the SavedProperty objects when first allocating the array, and
    20613         just do it when we're actually setting up the individual elements.
    20614         (KJS::PropertyMap::restore): Updated for SavedProperty changes.
    20615 
    20616         * kjs/property_map.h: Changed SavedProperty from a struct to a class. Set it up so
    20617         it does not get initialized at construction time to avoid initializing twice when
    20618         creating an array of SavedProperty. Removed the m_ prefixes from the members of
    20619         the SavedProperties struct. Generally we use m_ for class members and not struct.
    20620 
    20621 2008-02-02  Tony Chang  <[email protected]>
    20622 
    20623         Reviewed by darin.  Landed by eseidel.
    20624 
    20625         Add #define guards for WIN32_LEAN_AND_MEAN and _CRT_RAND_S.
    20626 
    20627         * kjs/config.h:
    20628         * wtf/FastMalloc.cpp:
    20629         * wtf/TCSpinLock.h:
    20630 
    20631 2008-01-28  Sam Weinig  <[email protected]>
    20632 
    20633         Rubber-stamped by Darin Adler.
    20634 
    20635         - Fix whitespace in nodes.h/cpp and nodes2string.cpp.
    20636 
    20637         (NOTE: Specific changed functions elided for space and clarity)
    20638         * kjs/nodes.cpp:
    20639         * kjs/nodes.h:
    20640         * kjs/nodes2string.cpp:
    20641 
    20642 2008-01-27  Sam Weinig  <[email protected]>
    20643 
    20644         Reviewed by Oliver Hunt.
    20645 
    20646         Patch for http://bugs.webkit.org/show_bug.cgi?id=17025
    20647         nodes.h/cpp has been rolling around in the mud - lets hose it down
    20648 
    20649         - Rename member variables to use the m_ prefix.
    20650 
    20651         (NOTE: Specific changed functions elided for space and clarity)
    20652         * kjs/grammar.y:
    20653         * kjs/nodes.cpp:
    20654         * kjs/nodes.h:
    20655         * kjs/nodes2string.cpp:
    20656 
    20657 2008-01-27  Darin Adler  <[email protected]>
    20658 
    20659         Reviewed by Oliver.
    20660 
    20661         - fix <rdar://problem/5657450> REGRESSION: const is broken
    20662 
    20663         Test: fast/js/const.html
    20664 
    20665         SunSpider said this was 0.3% slower. And I saw some Shark samples in
    20666         JSGlobalObject::put -- not a lot but a few. We may be able to regain the
    20667         speed, but for now we will take that small hit for correctness sake.
    20668 
    20669         * kjs/JSGlobalObject.cpp:
    20670         (KJS::JSGlobalObject::put): Pass the checkReadOnly flag in to symbolTablePut
    20671         instead of passing attributes.
    20672 
    20673         * kjs/JSVariableObject.h:
    20674         (KJS::JSVariableObject::symbolTablePut): Removed the code to set attributes
    20675         here, since we only set attributes when creating a property. Added the code
    20676         to check read-only here, since we need that to implement const!
    20677 
    20678         * kjs/function.cpp:
    20679         (KJS::ActivationImp::put): Pass the checkReadOnly flag in to symbolTablePut
    20680         instead of passing attributes.
    20681 
    20682         * kjs/nodes.cpp:
    20683         (KJS::isConstant): Added.
    20684         (KJS::PostIncResolveNode::optimizeVariableAccess): Create a PostIncConstNode
    20685         if optimizing for a local variable and the variable is constant.
    20686         (KJS::PostDecResolveNode::optimizeVariableAccess): Ditto. But PostDecConstNode.
    20687         (KJS::PreIncResolveNode::optimizeVariableAccess): Ditto. But PreIncConstNode.
    20688         (KJS::PreDecResolveNode::optimizeVariableAccess): Ditto. But PreDecConstNode.
    20689         (KJS::PreIncConstNode::evaluate): Return the value + 1.
    20690         (KJS::PreDecConstNode::evaluate): Return the value - 1.
    20691         (KJS::PostIncConstNode::evaluate): Return the value converted to a number.
    20692         (KJS::PostDecConstNode::evaluate): Ditto.
    20693         (KJS::ReadModifyResolveNode::optimizeVariableAccess): Create a ReadModifyConstNode
    20694         if optimizing for a local variable and the variable is constant.
    20695         (KJS::AssignResolveNode::optimizeVariableAccess): Ditto. But AssignConstNode.
    20696         (KJS::ScopeNode::optimizeVariableAccess): Pass the local storage to the
    20697         node optimizeVariableAccess functions, since that's where we need to look to
    20698         figure out if a variable is constant.
    20699         (KJS::FunctionBodyNode::processDeclarations): Moved the call to
    20700         optimizeVariableAccess until after localStorage is set up.
    20701         (KJS::ProgramNode::processDeclarations): Ditto.
    20702 
    20703         * kjs/nodes.h: Fixed the IsConstant and HasInitializer values. They are used
    20704         as flag masks, so a value of 0 will not work for IsConstant. Changed the
    20705         first parameter to optimizeVariableAccess to be a const reference to a symbol
    20706         table and added a const reference to local storage. Added classes for const
    20707         versions of local variable access: PostIncConstNode, PostDecConstNode,
    20708         PreIncConstNode, PreDecConstNode, ReadModifyConstNode, and AssignConstNode.
    20709 
    20710         * kjs/object.cpp:
    20711         (KJS::JSObject::put): Tweaked comments a bit, and changed the checkReadOnly
    20712         expression to match the form used at the two other call sites.
    20713 
    20714 2008-01-27  Darin Adler  <[email protected]>
    20715 
    20716         Reviewed by Oliver.
    20717 
    20718         - fix http://bugs.webkit.org/show_bug.cgi?id=16498
    20719           ''.constructor.toString() gives [function]
    20720 
    20721         Test: fast/js/function-names.html
    20722 
    20723         * kjs/array_object.cpp:
    20724         (KJS::ArrayObjectImp::ArrayObjectImp): Use the class name as the constructor's function name.
    20725         * kjs/bool_object.cpp:
    20726         (KJS::BooleanObjectImp::BooleanObjectImp): Ditto.
    20727         * kjs/date_object.cpp:
    20728         (KJS::DateObjectImp::DateObjectImp): Ditto.
    20729         * kjs/error_object.cpp:
    20730         (KJS::ErrorPrototype::ErrorPrototype): Make the error object be an Error.
    20731         (KJS::ErrorObjectImp::ErrorObjectImp): Use the class name as the constructor's function name.
    20732         (KJS::NativeErrorPrototype::NativeErrorPrototype): Take const UString&.
    20733         (KJS::NativeErrorImp::NativeErrorImp): Use the prototype's name as the constructor's function
    20734         name.
    20735         * kjs/error_object.h: Change ErrorPrototype to inherit from ErrorInstance. Change the
    20736         NativeErrorImp constructor to take a NativeErrorPrototype pointer for its prototype.
    20737         * kjs/function.h: Removed unneeded constructor for internal functions without names.
    20738         We want to avoid those!
    20739         * kjs/function_object.cpp:
    20740         (KJS::functionProtoFuncToString): Removed code that writes out just [function] for functions
    20741         that have no names. There's no reason to do that.
    20742         (KJS::FunctionObjectImp::FunctionObjectImp): Use the class name as the constructor's
    20743         function name.
    20744         * kjs/internal.cpp: Removed the unused constructor.
    20745         * kjs/number_object.cpp:
    20746         (KJS::fractionalPartToString): Marked static for internal linkage.
    20747         (KJS::exponentialPartToString): Ditto.
    20748         (KJS::numberProtoFuncToPrecision): Removed an unneeded else.
    20749         (KJS::NumberObjectImp::NumberObjectImp): Use the class name as the constructor's
    20750         function name.
    20751         (KJS::NumberObjectImp::getValueProperty): Tweaked formatting.
    20752         * kjs/object_object.cpp:
    20753         (KJS::ObjectObjectImp::ObjectObjectImp): Use "Object" for the function name.
    20754         * kjs/regexp_object.cpp:
    20755         (KJS::RegExpObjectImp::RegExpObjectImp): Use "RegExp" for the function name.
    20756         * kjs/string_object.cpp:
    20757         (KJS::StringObjectImp::StringObjectImp): Use the class name as the constructor's
    20758         function name.
    20759 
    20760 2008-01-26  Darin Adler  <[email protected]>
    20761 
    20762         Reviewed by Oliver.
    20763 
    20764         - fix http://bugs.webkit.org/show_bug.cgi?id=17027
    20765           Incorrect Function.toString behaviour with read/modify/write operators performed on negative numbers
    20766 
    20767         Test: fast/js/function-toString-parentheses.html
    20768 
    20769         The problem here was that a NumberNode with a negative number in it had the wrong
    20770         precedence. It's not a primary expression, it's a unary operator with a primary
    20771         expression after it.
    20772 
    20773         Once the precedence of NumberNode was fixed, the cases from bug 17020 were also
    20774         fixed without trying to treat bracket nodes like dot nodes. That wasn't needed.
    20775         The reason we handle numbers before dot nodes specially is that the dot is a
    20776         legal character in a number. The same is not true of a bracket. Eventually we
    20777         could get smarter, and only add the parentheses when there is actual ambiguity.
    20778         There is none if the string form of the number already has a dot in it, or if
    20779         it's a number with a alphabetic name like infinity or NAN.
    20780 
    20781         * kjs/nodes.h: Renamed back from ObjectAccess to DotExpr.
    20782         (KJS::NumberNode::precedence): Return PrecUnary for negative numbers, since
    20783         they serialize as a unary operator, not a primary expression.
    20784         * kjs/nodes2string.cpp:
    20785         (KJS::SourceStream::operator<<): Clear m_numberNeedsParens if this adds
    20786         parens; one set is enough.
    20787         (KJS::bracketNodeStreamTo): Remove unneeded special flag here. Normal
    20788         operator precedence suffices.
    20789         (KJS::NewExprNode::streamTo): Ditto.
    20790 
    20791 2008-01-26  Oliver Hunt  <[email protected]>
    20792 
    20793         Reviewed by Maciej and Darin.
    20794 
    20795         Fix for http://bugs.webkit.org/show_bug.cgi?id=17020
    20796         Function.toString does not parenthesise numbers for the bracket accessor
    20797 
    20798         It turns out that logic was there for all of the dot accessor nodes to make numbers be
    20799         parenthesised properly, so it was a trivial extension to extend that to the bracket nodes.
    20800         I renamed the enum type to reflect the fact that it is now used for both dot and bracket
    20801         accessors.
    20802 
    20803         * kjs/nodes2string.cpp:
    20804         (KJS::bracketNodeStreamTo):
    20805         (KJS::BracketAccessorNode::streamTo):
    20806 
    20807 2008-01-26  Oliver Hunt  <[email protected]>
    20808 
    20809         Reviewed by Darin.
    20810 
    20811         Fix Bug 17018: Incorrect code generated from Function.toString for get/setters in object literals
    20812 
    20813         Don't quote getter and setter names during output, as that is simply wrong.
    20814 
    20815         * kjs/nodes2string.cpp:
    20816         (KJS::PropertyNode::streamTo):
    20817 
    20818 2008-01-26  Darin Adler  <[email protected]>
    20819 
    20820         Reviewed by Eric Seidel.
    20821 
    20822         - http://bugs.webkit.org/show_bug.cgi?id=16860
    20823           a bit of cleanup after the Activation optimization
    20824 
    20825         * JavaScriptCore.exp: Export the GlobalExecState constructor instead of
    20826         the global flavor of the ExecState constructor. It'd probably be cleaner
    20827         to not export either one, but JSGlobalObject inlines the code that
    20828         constructs the ExecState. If we changed that, we could remove this export.
    20829 
    20830         * JavaScriptCore.xcodeproj/project.pbxproj: Re-sorted a few things and
    20831         put the new source files into the kjs group rather than at the top level.
    20832 
    20833         * kjs/ExecState.cpp:
    20834         (KJS::ExecState::ExecState): Marked inline and updated for data member
    20835         name changes. This is now only for use for the derived classes. Also removed
    20836         code that sets the unused m_savedExec data member for the global case. That
    20837         data member is only used for the other two types.
    20838         (KJS::ExecState::~ExecState): Marked inline and removed all the code.
    20839         The derived class destructors now inclde the appropriate code.
    20840         (KJS::ExecState::lexicalGlobalObject): Removed unneeded special case for
    20841         an empty scope chain. The bottom function already returns 0 for that case,
    20842         so the general case code handles it fine. Also changed to use data members
    20843         directly rather than calling functions.
    20844         (KJS::GlobalExecState::GlobalExecState): Added. Calls through to the base
    20845         class constructor.
    20846         (KJS::GlobalExecState::~GlobalExecState): Added.
    20847         (KJS::InterpreterExecState::InterpreterExecState): Added. Moved code to
    20848         manipulate activeExecStates here since we don't want to have to check for the
    20849         special case of globalExec.
    20850         (KJS::InterpreterExecState::~InterpreterExecState): Added.
    20851         (KJS::EvalExecState::EvalExecState): Added.
    20852         (KJS::EvalExecState::~EvalExecState): Added.
    20853         (KJS::FunctionExecState::FunctionExecState): Added.
    20854         (KJS::FunctionExecState::~FunctionExecState): Added.
    20855 
    20856         * kjs/ExecState.h: Tweaked the header, includes, and declarations a bit.
    20857         Made ExecState inherit from Noncopyable. Reformatted some comments and
    20858         made them a bit more brief. Rearranged declarations a little bit and removed
    20859         unused savedExec function. Changed seenLabels function to return a reference
    20860         rather than a pointer. Made constructors and destructor protected, and also
    20861         did the same with all data members. Renamed m_thisVal to m_thisValue and
    20862         ls to m_labelStack. Added three new derived classes for each of the
    20863         types of ExecState. The primary goal here was to remove a branch from the
    20864         code in the destructor, but it's also clearer than overloading the arguments
    20865         to the ExecState constructor.
    20866 
    20867         * kjs/JSGlobalObject.cpp:
    20868         (KJS::getCurrentTime): Fixed formatting.
    20869         (KJS::JSGlobalObject::pushActivation): Removed parentheses that don't make
    20870         the expression clearer -- other similar sites didn't have these parentheses,
    20871         even the one a couple lines earlier that sets stackEntry.
    20872         (KJS::JSGlobalObject::tearOffActivation): Got rid of unneeded static_cast
    20873         (I think I mentioned this during patch review) and used an early exit so that
    20874         the entire contents of the function aren't nested inside an if statement.
    20875         Also removed the check of codeType, instead checking Activation for 0.
    20876         For now, I kept the codeType check, but inside an assertion.
    20877 
    20878         * kjs/JSGlobalObject.h: Changed type of globalExec to GlobalExecState.
    20879         * kjs/function.cpp:
    20880         (KJS::FunctionImp::callAsFunction): Changed type to FunctionExecState.
    20881         (KJS::GlobalFuncImp::callAsFunction): Changed type to EvalExecState.
    20882         * kjs/interpreter.cpp:
    20883         (KJS::Interpreter::evaluate): Changed type to GlobalExecState.
    20884 
    20885         * kjs/nodes.cpp:
    20886         (KJS::ContinueNode::execute): Changed code since seenLabels() returns a
    20887         reference now instead of a pointer.
    20888         (KJS::BreakNode::execute): Ditto.
    20889         (KJS::LabelNode::execute): Ditto.
    20890 
    20891 2008-01-26  Sam Weinig  <[email protected]>
    20892 
    20893         Reviewed by Mark Rowe.
    20894 
    20895         Cleanup node2string a little.
    20896         - Remove some unnecessary branching.
    20897         - Factor out bracket and dot streaming into static inline functions.
    20898 
    20899         * kjs/nodes.h:
    20900         * kjs/nodes2string.cpp:
    20901         (KJS::bracketNodeStreamTo):
    20902         (KJS::dotNodeStreamTo):
    20903         (KJS::FunctionCallBracketNode::streamTo):
    20904         (KJS::FunctionCallDotNode::streamTo):
    20905         (KJS::PostIncBracketNode::streamTo):
    20906         (KJS::PostDecBracketNode::streamTo):
    20907         (KJS::PostIncDotNode::streamTo):
    20908         (KJS::PostDecDotNode::streamTo):
    20909         (KJS::DeleteBracketNode::streamTo):
    20910         (KJS::DeleteDotNode::streamTo):
    20911         (KJS::PreIncBracketNode::streamTo):
    20912         (KJS::PreDecBracketNode::streamTo):
    20913         (KJS::PreIncDotNode::streamTo):
    20914         (KJS::PreDecDotNode::streamTo):
    20915         (KJS::ReadModifyBracketNode::streamTo):
    20916         (KJS::AssignBracketNode::streamTo):
    20917         (KJS::ReadModifyDotNode::streamTo):
    20918         (KJS::AssignDotNode::streamTo):
    20919         (KJS::WhileNode::streamTo):
    20920 
    20921 2008-01-26  Mark Rowe  <[email protected]>
    20922 
    20923         Reviewed by Darin Adler.
    20924 
    20925         Fix http://bugs.webkit.org/show_bug.cgi?id=17001
    20926         Bug 17001: Build error with Gtk port on Mac OS X
    20927 
    20928         If both XP_MACOSX and XP_UNIX are defined then X11.h and Carbon.h will both be included.
    20929         These provide conflicting definitions for a type named 'Cursor'.  As XP_UNIX is set by
    20930         the build system when targeting X11, it doesn't make sense for XP_MACOSX to also be set
    20931         in this instance.
    20932 
    20933         * bindings/npapi.h: Don't define XP_MACOSX if XP_UNIX is defined.
    20934 
    20935 2008-01-26  Darin Adler  <[email protected]>
    20936 
    20937         Reviewed by Oliver.
    20938 
    20939         - fix http://bugs.webkit.org/show_bug.cgi?id=17013
    20940           JSC can't round trip certain for-loops
    20941 
    20942         Test: fast/js/toString-for-var-decl.html
    20943 
    20944         * kjs/nodes.h: Added PlaceholderTrueNode so we can put nodes into
    20945         for loops without injecting the word "true" into them (nice, but not
    20946         the bug fix). Fixed ForNode constructor so expr1WasVarDecl is set
    20947         only when there is an expression, since it's common for the actual
    20948         variable declaration to be moved by the parser.
    20949 
    20950         * kjs/nodes2string.cpp:
    20951         (KJS::PlaceholderTrueNode::streamTo): Added. Empty.
    20952 
    20953 2008-01-25  Oliver Hunt  <[email protected]>
    20954 
    20955         Reviewed by Maciej.
    20956 
    20957         Fix for bug 17012: REGRESSION: JSC can't round trip an object literal
    20958 
    20959         Add logic to ensure that object literals and function expressions get
    20960         parentheses when necessary.
    20961 
    20962         * kjs/nodes.h:
    20963         * kjs/nodes2string.cpp:
    20964         (KJS::SourceStream::operator<<):
    20965 
    20966 2008-01-24  Steve Falkenburg  <[email protected]>
    20967 
    20968         Build fix.
    20969 
    20970         * JavaScriptCore.vcproj/JavaScriptCore.sln:
    20971 
    20972 2008-01-24  Steve Falkenburg  <[email protected]>
    20973 
    20974         Build fix.
    20975 
    20976         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
    20977 
    20978 2008-01-24  Michael Goddard  <[email protected]>
    20979 
    20980         Reviewed by Simon.
    20981 
    20982         Fix QDateTime to JS Date conversion.
    20983         Several conversion errors (some UTC related, some month
    20984         offset related) and the conversion distance for Date
    20985         to DateTime conversion weights were fixed (it should never
    20986         be better to convert a JS Number into a Date rather than
    20987         an int).
    20988        
    20989         * bindings/qt/qt_runtime.cpp:
    20990         (KJS::Bindings::convertValueToQVariant):
    20991         (KJS::Bindings::convertQVariantToValue):
    20992 
    20993 2008-01-24  Michael Goddard  <[email protected]>
    20994 
    20995         Reviewed by Simon.
    20996 
    20997         Add support for calling QObjects.
    20998         Add support for invokeDefaultMethod (via a call to
    20999         a specific slot), and also allow using it as a
    21000         constructor, like QtScript.
    21001        
    21002 
    21003         * bindings/qt/qt_class.cpp:
    21004         (KJS::Bindings::QtClass::fallbackObject):
    21005         * bindings/qt/qt_instance.cpp:
    21006         (KJS::Bindings::QtRuntimeObjectImp::construct):
    21007         (KJS::Bindings::QtInstance::QtInstance):
    21008         (KJS::Bindings::QtInstance::~QtInstance):
    21009         (KJS::Bindings::QtInstance::implementsCall):
    21010         (KJS::Bindings::QtInstance::invokeDefaultMethod):
    21011         * bindings/qt/qt_instance.h:
    21012         * bindings/qt/qt_runtime.cpp:
    21013         (KJS::Bindings::findMethodIndex):
    21014         (KJS::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
    21015         (KJS::Bindings::QtRuntimeMetaMethod::callAsFunction):
    21016         * bindings/qt/qt_runtime.h:
    21017 
    21018 2008-01-24  Michael Goddard  <[email protected]>
    21019 
    21020         Reviewed by Simon.
    21021 
    21022         Code style cleanups.
    21023         Add spaces before/after braces in inline function.
    21024 
    21025         * bindings/qt/qt_instance.h:
    21026 
    21027 2008-01-24  Michael Goddard  <[email protected]>
    21028 
    21029         Reviewed by Simon.
    21030 
    21031         Code style cleanups.
    21032         Remove spaces and unneeded declared parameter names.
    21033 
    21034         * bindings/qt/qt_instance.cpp:
    21035         (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
    21036 
    21037 2008-01-24  Michael Goddard  <[email protected]>
    21038 
    21039         Reviewed by Simon.
    21040 
    21041         Clear stale RuntimeObjectImps.
    21042         Since other objects can have refs to the QtInstance,
    21043         we can't rely on the QtInstance being deleted when the
    21044         RuntimeObjectImp is invalidate or deleted.  This
    21045         could result in a stale JSObject being returned for
    21046         a valid Instance.
    21047 
    21048         * bindings/qt/qt_instance.cpp:
    21049         (KJS::Bindings::QtRuntimeObjectImp::QtRuntimeObjectImp):
    21050         (KJS::Bindings::QtRuntimeObjectImp::~QtRuntimeObjectImp):
    21051         (KJS::Bindings::QtRuntimeObjectImp::invalidate):
    21052         (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
    21053         (KJS::Bindings::QtInstance::getRuntimeObject):
    21054         * bindings/runtime.cpp:
    21055         (KJS::Bindings::Instance::createRuntimeObject):
    21056         * bindings/runtime.h:
    21057 
    21058 2008-01-23  Alp Toker  <[email protected]>
    21059 
    21060         Rubber-stamped by Mark Rowe.
    21061 
    21062         Remove whitespace after -I in automake include lists.
    21063 
    21064         * GNUmakefile.am:
    21065 
    21066 2008-01-23  Michael Goddard <[email protected]>
    21067 
    21068         Reviewed by Lars Knoll <[email protected]>.
    21069 
    21070         Reworked the JavaScriptCore Qt bindings:
    21071        
    21072         * Add initial support for string and variant arrays, as well
    21073         as sub QObjects in the JS bindings.
    21074        
    21075         * Don't expose fields marked as not scriptable by moc.
    21076        
    21077         * Add support for dynamic properties and accessing named
    21078         QObject children of an object (like QtScript and older
    21079         IE DOM style JS).
    21080         * Add support for custom toString methods.
    21081        
    21082         * Fine tune some bindings to be closer to QtScript.
    21083         Make void functions return undefined, and empty/
    21084         null QStrings return a zero length string.
    21085        
    21086         * Create framework for allowing more direct method calls.
    21087         Since RuntimeMethod doesn't allow us to add additional
    21088         methods/properties to a function, add these classes.
    21089         Start prototyping object.signal.connect(...).
    21090        
    21091         * Add signal support to the Qt bindings.
    21092         Allow connecting to signals (object.signal.connect(slot)),
    21093         disconnecting, and emitting signals.  Currently chooses
    21094         the first signal that matches the name, so this will need
    21095         improvement.
    21096        
    21097         * Add property names, and resolve signals closer to use.
    21098         Enumerating properties now returns some of the Qt properties
    21099         and signals.  Slots and methods aren't quite present.  Also,
    21100         resolve signal connections etc. closer to the time of use, so
    21101         we can do more dynamic resolution based on argument type etc.
    21102         Still picks the first one with the same name, at the moment.
    21103        
    21104         * Make signature comparison code consistent.
    21105         Use the same code for checking meta signatures in
    21106         the method and fallback getters, and avoid a
    21107         QByteArray construction when we can.
    21108        
    21109         * Fix minor memory leak, and handle pointers better.
    21110         Delete the private object in the dtors, and use RefPtrs
    21111         for holding Instances etc.
    21112        
    21113         * Handle method lookup better.
    21114         Allow invocation time method lookup based on the arguments,
    21115         which is closer to QtScript behaviour.  Also, cache the
    21116         method lists and delete them in the QtClass dtor (stops
    21117         a memory leak).
    21118        
    21119         * Improve JS to Qt data type conversions.
    21120         Add some support for Date & RegExp JS objects,
    21121         and provide some metrics on the quality of the
    21122         conversion.
    21123        
    21124         * A couple of fixes for autotest failures.
    21125         Better support for converting lists, read/write only
    21126         QMetaProperty support, modified slot search order...)
    21127 
    21128         * bindings/qt/qt_class.cpp:
    21129         (KJS::Bindings::QtClass::QtClass):
    21130         (KJS::Bindings::QtClass::~QtClass):
    21131         (KJS::Bindings::QtClass::name):
    21132         (KJS::Bindings::QtClass::fallbackObject):
    21133         (KJS::Bindings::QtClass::methodsNamed):
    21134         (KJS::Bindings::QtClass::fieldNamed):
    21135         * bindings/qt/qt_class.h:
    21136         * bindings/qt/qt_instance.cpp:
    21137         (KJS::Bindings::QtInstance::QtInstance):
    21138         (KJS::Bindings::QtInstance::~QtInstance):
    21139         (KJS::Bindings::QtInstance::getRuntimeObject):
    21140         (KJS::Bindings::QtInstance::getClass):
    21141         (KJS::Bindings::QtInstance::implementsCall):
    21142         (KJS::Bindings::QtInstance::getPropertyNames):
    21143         (KJS::Bindings::QtInstance::invokeMethod):
    21144         (KJS::Bindings::QtInstance::invokeDefaultMethod):
    21145         (KJS::Bindings::QtInstance::stringValue):
    21146         (KJS::Bindings::QtInstance::booleanValue):
    21147         (KJS::Bindings::QtInstance::valueOf):
    21148         (KJS::Bindings::QtField::name):
    21149         (KJS::Bindings::QtField::valueFromInstance):
    21150         (KJS::Bindings::QtField::setValueToInstance):
    21151         * bindings/qt/qt_instance.h:
    21152         (KJS::Bindings::QtInstance::getBindingLanguage):
    21153         (KJS::Bindings::QtInstance::getObject):
    21154         * bindings/qt/qt_runtime.cpp:
    21155         (KJS::Bindings::QWKNoDebug::QWKNoDebug):
    21156         (KJS::Bindings::QWKNoDebug::~QWKNoDebug):
    21157         (KJS::Bindings::QWKNoDebug::operator<<):
    21158         (KJS::Bindings::):
    21159         (KJS::Bindings::valueRealType):
    21160         (KJS::Bindings::convertValueToQVariant):
    21161         (KJS::Bindings::convertQVariantToValue):
    21162         (KJS::Bindings::QtRuntimeMethod::QtRuntimeMethod):
    21163         (KJS::Bindings::QtRuntimeMethod::~QtRuntimeMethod):
    21164         (KJS::Bindings::QtRuntimeMethod::codeType):
    21165         (KJS::Bindings::QtRuntimeMethod::execute):
    21166         (KJS::Bindings::QtRuntimeMethodData::~QtRuntimeMethodData):
    21167         (KJS::Bindings::QtRuntimeMetaMethodData::~QtRuntimeMetaMethodData):
    21168         (KJS::Bindings::QtRuntimeConnectionMethodData::~QtRuntimeConnectionMethodData):
    21169         (KJS::Bindings::QtMethodMatchType::):
    21170         (KJS::Bindings::QtMethodMatchType::QtMethodMatchType):
    21171         (KJS::Bindings::QtMethodMatchType::kind):
    21172         (KJS::Bindings::QtMethodMatchType::isValid):
    21173         (KJS::Bindings::QtMethodMatchType::isVariant):
    21174         (KJS::Bindings::QtMethodMatchType::isMetaType):
    21175         (KJS::Bindings::QtMethodMatchType::isUnresolved):
    21176         (KJS::Bindings::QtMethodMatchType::isMetaEnum):
    21177         (KJS::Bindings::QtMethodMatchType::enumeratorIndex):
    21178         (KJS::Bindings::QtMethodMatchType::variant):
    21179         (KJS::Bindings::QtMethodMatchType::metaType):
    21180         (KJS::Bindings::QtMethodMatchType::metaEnum):
    21181         (KJS::Bindings::QtMethodMatchType::unresolved):
    21182         (KJS::Bindings::QtMethodMatchType::typeId):
    21183         (KJS::Bindings::QtMethodMatchType::name):
    21184         (KJS::Bindings::QtMethodMatchData::QtMethodMatchData):
    21185         (KJS::Bindings::QtMethodMatchData::isValid):
    21186         (KJS::Bindings::QtMethodMatchData::firstUnresolvedIndex):
    21187         (KJS::Bindings::indexOfMetaEnum):
    21188         (KJS::Bindings::findMethodIndex):
    21189         (KJS::Bindings::findSignalIndex):
    21190         (KJS::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
    21191         (KJS::Bindings::QtRuntimeMetaMethod::mark):
    21192         (KJS::Bindings::QtRuntimeMetaMethod::callAsFunction):
    21193         (KJS::Bindings::QtRuntimeMetaMethod::getOwnPropertySlot):
    21194         (KJS::Bindings::QtRuntimeMetaMethod::lengthGetter):
    21195         (KJS::Bindings::QtRuntimeMetaMethod::connectGetter):
    21196         (KJS::Bindings::QtRuntimeMetaMethod::disconnectGetter):
    21197         (KJS::Bindings::QtRuntimeConnectionMethod::QtRuntimeConnectionMethod):
    21198         (KJS::Bindings::QtRuntimeConnectionMethod::callAsFunction):
    21199         (KJS::Bindings::QtRuntimeConnectionMethod::getOwnPropertySlot):
    21200         (KJS::Bindings::QtRuntimeConnectionMethod::lengthGetter):
    21201         (KJS::Bindings::QtConnectionObject::QtConnectionObject):
    21202         (KJS::Bindings::QtConnectionObject::~QtConnectionObject):
    21203         (KJS::Bindings::QtConnectionObject::metaObject):
    21204         (KJS::Bindings::QtConnectionObject::qt_metacast):
    21205         (KJS::Bindings::QtConnectionObject::qt_metacall):
    21206         (KJS::Bindings::QtConnectionObject::execute):
    21207         (KJS::Bindings::QtConnectionObject::match):
    21208         (KJS::Bindings::::QtArray):
    21209         (KJS::Bindings::::~QtArray):
    21210         (KJS::Bindings::::rootObject):
    21211         (KJS::Bindings::::setValueAt):
    21212         (KJS::Bindings::::valueAt):
    21213         * bindings/qt/qt_runtime.h:
    21214         (KJS::Bindings::QtField::):
    21215         (KJS::Bindings::QtField::QtField):
    21216         (KJS::Bindings::QtField::fieldType):
    21217         (KJS::Bindings::QtMethod::QtMethod):
    21218         (KJS::Bindings::QtMethod::name):
    21219         (KJS::Bindings::QtMethod::numParameters):
    21220         (KJS::Bindings::QtArray::getLength):
    21221         (KJS::Bindings::QtRuntimeMethod::d_func):
    21222         (KJS::Bindings::QtRuntimeMetaMethod::d_func):
    21223         (KJS::Bindings::QtRuntimeConnectionMethod::d_func):
    21224         (KJS::Bindings::):
    21225         * bindings/runtime.cpp:
    21226         (KJS::Bindings::Instance::createBindingForLanguageInstance):
    21227         (KJS::Bindings::Instance::createRuntimeObject):
    21228         (KJS::Bindings::Instance::reallyCreateRuntimeObject):
    21229         * bindings/runtime.h:
    21230 
    21231 2008-01-22  Anders Carlsson  <[email protected]>
    21232 
    21233         Reviewed by Darin and Adam.
    21234 
    21235         <rdar://problem/5688975>
    21236         div element on microsoft site has wrong left offset.
    21237        
    21238         Return true even if NPN_GetProperty returns null or undefined. This matches Firefox
    21239         (and is what the Silverlight plug-in expects).
    21240        
    21241         * bindings/NP_jsobject.cpp:
    21242         (_NPN_GetProperty):
    21243 
    21244 2008-01-21  Geoffrey Garen  <[email protected]>
    21245 
    21246         Reviewed by Maciej Stachowiak.
    21247        
    21248         Fixed http://bugs.webkit.org/show_bug.cgi?id=16909
    21249         REGRESSION: Amazon.com crash (ActivationImp)
    21250        
    21251         (and a bunch of other crashes)
    21252        
    21253         Plus, a .7% SunSpider speedup to boot.
    21254        
    21255         Replaced the buggy currentExec and savedExec mechanisms with an
    21256         explicit ExecState stack.
    21257 
    21258         * kjs/collector.cpp:
    21259         (KJS::Collector::collect): Explicitly mark the ExecState stack.
    21260 
    21261         (KJS::Collector::reportOutOfMemoryToAllExecStates): Slight change in
    21262         behavior: We no longer throw an exception in any global ExecStates,
    21263         since global ExecStates are more like pseudo-ExecStates, and aren't
    21264         used for script execution. (It's unclear what would happen if you left
    21265         an exception waiting around in a global ExecState, but it probably
    21266         wouldn't be good.)
    21267 
    21268 2008-01-21  Jan Michael Alonzo  <[email protected]>
    21269 
    21270         Reviewed by Alp Toker.
    21271 
    21272         http://bugs.webkit.org/show_bug.cgi?id=16955
    21273         Get errors when cross-compile webkit-gtk
    21274 
    21275         * GNUmakefile.am: removed ICU_CFLAGS
    21276 
    21277 2008-01-18  Kevin McCullough  <[email protected]>
    21278 
    21279         - Build fix.
    21280 
    21281         * kjs/ustring.h:
    21282 
    21283 2008-01-18  Kevin McCullough  <[email protected]>
    21284 
    21285         - Build fix.
    21286 
    21287         * kjs/ustring.cpp:
    21288         * kjs/ustring.h:
    21289         (KJS::UString::cost):
    21290 
    21291 2008-01-18  Kevin McCullough  <[email protected]>
    21292 
    21293         Reviewed by Geoff.
    21294 
    21295         - Correctly report cost of appended strings to trigger GC.
    21296 
    21297         * kjs/ustring.cpp:
    21298         (KJS::UString::Rep::create):
    21299         (KJS::UString::UString): Don't create unnecssary objects.
    21300         (KJS::UString::cost): Report cost if necessary but also keep track of
    21301         reported cost.
    21302         * kjs/ustring.h:
    21303 
    21304 2008-01-18  Simon Hausmann  <[email protected]>
    21305 
    21306         Reviewed by Holger.
    21307 
    21308         Fix return type conversions from Qt slots to JS values.
    21309        
    21310         This also fixes fast/dom/open-and-close-by-DOM.html, which called
    21311         layoutTestController.windowCount().
    21312        
    21313         When constructing the QVariant that holds the return type we cannot
    21314         use the QVarian(Type) constuctor as that will create a null variant.
    21315         We have to use the QVariant(Type, void *) constructor instead, just
    21316         like in QMetaObject::read() for example.
    21317        
    21318 
    21319         * bindings/qt/qt_instance.cpp:
    21320         (KJS::Bindings::QtInstance::getRuntimeObject):
    21321 
    21322 2008-01-18  Prasanth Ullattil  <[email protected]>
    21323 
    21324         Reviewed by Simon Hausmann <[email protected]>.
    21325 
    21326         Fix compilation on Win64(2): Implemented currentThreadStackBase on X86-64 on Windows
    21327        
    21328 
    21329         * kjs/collector.cpp:
    21330         (KJS::Collector::heapAllocate):
    21331 
    21332 2008-01-18  Prasanth Ullattil  <[email protected]>
    21333 
    21334         Reviewed by Simon Hausmann <[email protected]>.
    21335 
    21336         Fix compilation on Win64(1): Define WTF_PLATFORM_X86_64 correctly on Win64.
    21337        
    21338 
    21339         * wtf/Platform.h:
    21340 
    21341 2008-01-17  Antti Koivisto  <[email protected]>
    21342 
    21343         Fix Windows build.
    21344 
    21345         * kjs/regexp_object.cpp:
    21346         (KJS::regExpProtoFuncToString):
    21347 
    21348 2008-01-16  Sam Weinig  <[email protected]>
    21349 
    21350         Reviewed by Darin.
    21351 
    21352         Fix for http://bugs.webkit.org/show_bug.cgi?id=16901
    21353         Convert remaining JS function objects to use the new PrototypeFunction class
    21354 
    21355         - Moves Boolean, Function, RegExp, Number, Object and Global functions to their
    21356           own static function implementations so that they can be used with the
    21357           PrototypeFunction class.  SunSpider says this is 1.003x as fast.
    21358 
    21359         * kjs/JSGlobalObject.cpp:
    21360         (KJS::JSGlobalObject::reset):
    21361         * kjs/array_object.h:
    21362         * kjs/bool_object.cpp:
    21363         (KJS::BooleanInstance::BooleanInstance):
    21364         (KJS::BooleanPrototype::BooleanPrototype):
    21365         (KJS::booleanProtoFuncToString):
    21366         (KJS::booleanProtoFuncValueOf):
    21367         (KJS::BooleanObjectImp::BooleanObjectImp):
    21368         (KJS::BooleanObjectImp::implementsConstruct):
    21369         (KJS::BooleanObjectImp::construct):
    21370         (KJS::BooleanObjectImp::callAsFunction):
    21371         * kjs/bool_object.h:
    21372         (KJS::BooleanInstance::classInfo):
    21373         * kjs/error_object.cpp:
    21374         (KJS::ErrorPrototype::ErrorPrototype):
    21375         (KJS::errorProtoFuncToString):
    21376         * kjs/error_object.h:
    21377         * kjs/function.cpp:
    21378         (KJS::globalFuncEval):
    21379         (KJS::globalFuncParseInt):
    21380         (KJS::globalFuncParseFloat):
    21381         (KJS::globalFuncIsNaN):
    21382         (KJS::globalFuncIsFinite):
    21383         (KJS::globalFuncDecodeURI):
    21384         (KJS::globalFuncDecodeURIComponent):
    21385         (KJS::globalFuncEncodeURI):
    21386         (KJS::globalFuncEncodeURIComponent):
    21387         (KJS::globalFuncEscape):
    21388         (KJS::globalFuncUnEscape):
    21389         (KJS::globalFuncKJSPrint):
    21390         (KJS::PrototypeFunction::PrototypeFunction):
    21391         * kjs/function.h:
    21392         * kjs/function_object.cpp:
    21393         (KJS::FunctionPrototype::FunctionPrototype):
    21394         (KJS::functionProtoFuncToString):
    21395         (KJS::functionProtoFuncApply):
    21396         (KJS::functionProtoFuncCall):
    21397         * kjs/function_object.h:
    21398         * kjs/number_object.cpp:
    21399         (KJS::NumberPrototype::NumberPrototype):
    21400         (KJS::numberProtoFuncToString):
    21401         (KJS::numberProtoFuncToLocaleString):
    21402         (KJS::numberProtoFuncValueOf):
    21403         (KJS::numberProtoFuncToFixed):
    21404         (KJS::numberProtoFuncToExponential):
    21405         (KJS::numberProtoFuncToPrecision):
    21406         * kjs/number_object.h:
    21407         (KJS::NumberInstance::classInfo):
    21408         (KJS::NumberObjectImp::classInfo):
    21409         (KJS::NumberObjectImp::):
    21410         * kjs/object_object.cpp:
    21411         (KJS::ObjectPrototype::ObjectPrototype):
    21412         (KJS::objectProtoFuncValueOf):
    21413         (KJS::objectProtoFuncHasOwnProperty):
    21414         (KJS::objectProtoFuncIsPrototypeOf):
    21415         (KJS::objectProtoFuncDefineGetter):
    21416         (KJS::objectProtoFuncDefineSetter):
    21417         (KJS::objectProtoFuncLookupGetter):
    21418         (KJS::objectProtoFuncLookupSetter):
    21419         (KJS::objectProtoFuncPropertyIsEnumerable):
    21420         (KJS::objectProtoFuncToLocaleString):
    21421         (KJS::objectProtoFuncToString):
    21422         * kjs/object_object.h:
    21423         * kjs/regexp_object.cpp:
    21424         (KJS::RegExpPrototype::RegExpPrototype):
    21425         (KJS::regExpProtoFuncTest):
    21426         (KJS::regExpProtoFuncExec):
    21427         (KJS::regExpProtoFuncCompile):
    21428         (KJS::regExpProtoFuncToString):
    21429         * kjs/regexp_object.h:
    21430 
    21431 2008-01-16  Cameron Zwarich  <[email protected]>
    21432 
    21433         Reviewed by Maciej & Darin.
    21434 
    21435         Fixes Bug 16868: Gmail crash
    21436           and Bug 16871: Crash when loading apple.com/startpage
    21437 
    21438         <http://bugs.webkit.org/show_bug.cgi?id=16868>
    21439         <rdar://problem/5686108>
    21440 
    21441         <http://bugs.webkit.org/show_bug.cgi?id=16871>
    21442         <rdar://problem/5686670>
    21443 
    21444         Adds ActivationImp tear-off for cross-window eval() and fixes an
    21445         existing garbage collection issue exposed by the ActivationImp tear-off
    21446         patch (r29425) that can occur when an ExecState's m_callingExec is
    21447         different than its m_savedExec.
    21448 
    21449         * kjs/ExecState.cpp:
    21450         (KJS::ExecState::mark):
    21451         * kjs/function.cpp:
    21452         (KJS::GlobalFuncImp::callAsFunction):
    21453 
    21454 2008-01-16  Sam Weinig  <[email protected]>
    21455 
    21456         Reviewed by Oliver.
    21457 
    21458         Clean up MathObjectImp, it needed a little scrubbing.
    21459 
    21460         * kjs/math_object.cpp:
    21461         (KJS::MathObjectImp::MathObjectImp):
    21462         (KJS::MathObjectImp::getOwnPropertySlot):
    21463         (KJS::MathObjectImp::getValueProperty):
    21464         (KJS::mathProtoFuncACos):
    21465         (KJS::mathProtoFuncASin):
    21466         (KJS::mathProtoFuncATan):
    21467         (KJS::mathProtoFuncATan2):
    21468         (KJS::mathProtoFuncCos):
    21469         (KJS::mathProtoFuncExp):
    21470         (KJS::mathProtoFuncLog):
    21471         (KJS::mathProtoFuncSin):
    21472         (KJS::mathProtoFuncSqrt):
    21473         (KJS::mathProtoFuncTan):
    21474         * kjs/math_object.h:
    21475         (KJS::MathObjectImp::classInfo):
    21476         (KJS::MathObjectImp::):
    21477 
    21478 2008-01-16  Sam Weinig  <[email protected]>
    21479 
    21480         Reviewed by Geoffrey Garen.
    21481 
    21482         Rename Lexer variable bol to atLineStart.
    21483 
    21484         * kjs/lexer.cpp:
    21485         (KJS::Lexer::Lexer):
    21486         (KJS::Lexer::setCode):
    21487         (KJS::Lexer::nextLine):
    21488         (KJS::Lexer::lex):
    21489         * kjs/lexer.h:
    21490 
    21491 2008-01-16  Sam Weinig  <[email protected]>
    21492 
    21493         Reviewed by Geoffrey Garen and Anders Carlsson.
    21494 
    21495         Remove uses of KJS_PURE_ECMA as we don't ever build with it defined,
    21496         and we have many features that are not included in the ECMA spec.
    21497 
    21498         * kjs/lexer.cpp:
    21499         (KJS::Lexer::Lexer):
    21500         (KJS::Lexer::setCode):
    21501         (KJS::Lexer::nextLine):
    21502         (KJS::Lexer::lex):
    21503         * kjs/lexer.h:
    21504         * kjs/string_object.cpp:
    21505         * kjs/string_object.h:
    21506 
    21507 2008-01-15  Sam Weinig  <[email protected]>
    21508 
    21509         Reviewed by Geoffrey Garen.
    21510 
    21511         Fix <rdar://problem/5595552> r27608 introduced a 20% increase in JS binary size, 4% increase in WebCore binary size
    21512 
    21513         - This changes the way JS functions that use Lookup tables are handled.  Instead of using
    21514           one class per function, which allowed specialization of the virtual callAsFunction
    21515           method, we now use one class, PrototypeFunction, which takes a pointer to a static
    21516           function to use as the implementation.  This significantly decreases the binary size
    21517           of JavaScriptCore (about 145k on an Intel only build) while still keeping some of the
    21518           speedup r27608 garnered (SunSpider says this is 1.005x as slow, which should leave some
    21519           wiggle room from the original 1% speedup) and keeps the functions implementations in separate
    21520           functions to help with optimizations.
    21521 
    21522         * JavaScriptCore.exp:
    21523         * JavaScriptCore.xcodeproj/project.pbxproj:
    21524         * kjs/array_object.cpp:
    21525         (KJS::arrayProtoFuncToString):
    21526         (KJS::arrayProtoFuncToLocaleString):
    21527         (KJS::arrayProtoFuncJoin):
    21528         (KJS::arrayProtoFuncConcat):
    21529         (KJS::arrayProtoFuncPop):
    21530         (KJS::arrayProtoFuncPush):
    21531         (KJS::arrayProtoFuncReverse):
    21532         (KJS::arrayProtoFuncShift):
    21533         (KJS::arrayProtoFuncSlice):
    21534         (KJS::arrayProtoFuncSort):
    21535         (KJS::arrayProtoFuncSplice):
    21536         (KJS::arrayProtoFuncUnShift):
    21537         (KJS::arrayProtoFuncFilter):
    21538         (KJS::arrayProtoFuncMap):
    21539         (KJS::arrayProtoFuncEvery):
    21540         (KJS::arrayProtoFuncForEach):
    21541         (KJS::arrayProtoFuncSome):
    21542         (KJS::arrayProtoFuncIndexOf):
    21543         (KJS::arrayProtoFuncLastIndexOf):
    21544         * kjs/array_object.h:
    21545         * kjs/date_object.cpp:
    21546         (KJS::DatePrototype::getOwnPropertySlot):
    21547         (KJS::dateProtoFuncToString):
    21548         (KJS::dateProtoFuncToUTCString):
    21549         (KJS::dateProtoFuncToDateString):
    21550         (KJS::dateProtoFuncToTimeString):
    21551         (KJS::dateProtoFuncToLocaleString):
    21552         (KJS::dateProtoFuncToLocaleDateString):
    21553         (KJS::dateProtoFuncToLocaleTimeString):
    21554         (KJS::dateProtoFuncValueOf):
    21555         (KJS::dateProtoFuncGetTime):
    21556         (KJS::dateProtoFuncGetFullYear):
    21557         (KJS::dateProtoFuncGetUTCFullYear):
    21558         (KJS::dateProtoFuncToGMTString):
    21559         (KJS::dateProtoFuncGetMonth):
    21560         (KJS::dateProtoFuncGetUTCMonth):
    21561         (KJS::dateProtoFuncGetDate):
    21562         (KJS::dateProtoFuncGetUTCDate):
    21563         (KJS::dateProtoFuncGetDay):
    21564         (KJS::dateProtoFuncGetUTCDay):
    21565         (KJS::dateProtoFuncGetHours):
    21566         (KJS::dateProtoFuncGetUTCHours):
    21567         (KJS::dateProtoFuncGetMinutes):
    21568         (KJS::dateProtoFuncGetUTCMinutes):
    21569         (KJS::dateProtoFuncGetSeconds):
    21570         (KJS::dateProtoFuncGetUTCSeconds):
    21571         (KJS::dateProtoFuncGetMilliSeconds):
    21572         (KJS::dateProtoFuncGetUTCMilliseconds):
    21573         (KJS::dateProtoFuncGetTimezoneOffset):
    21574         (KJS::dateProtoFuncSetTime):
    21575         (KJS::dateProtoFuncSetMilliSeconds):
    21576         (KJS::dateProtoFuncSetUTCMilliseconds):
    21577         (KJS::dateProtoFuncSetSeconds):
    21578         (KJS::dateProtoFuncSetUTCSeconds):
    21579         (KJS::dateProtoFuncSetMinutes):
    21580         (KJS::dateProtoFuncSetUTCMinutes):
    21581         (KJS::dateProtoFuncSetHours):
    21582         (KJS::dateProtoFuncSetUTCHours):
    21583         (KJS::dateProtoFuncSetDate):
    21584         (KJS::dateProtoFuncSetUTCDate):
    21585         (KJS::dateProtoFuncSetMonth):
    21586         (KJS::dateProtoFuncSetUTCMonth):
    21587         (KJS::dateProtoFuncSetFullYear):
    21588         (KJS::dateProtoFuncSetUTCFullYear):
    21589         (KJS::dateProtoFuncSetYear):
    21590         (KJS::dateProtoFuncGetYear):
    21591         * kjs/date_object.h:
    21592         * kjs/function.cpp:
    21593         (KJS::PrototypeFunction::PrototypeFunction):
    21594         (KJS::PrototypeFunction::callAsFunction):
    21595         * kjs/function.h:
    21596         * kjs/lookup.h:
    21597         (KJS::HashEntry::):
    21598         (KJS::staticFunctionGetter):
    21599         * kjs/math_object.cpp:
    21600         (KJS::mathProtoFuncAbs):
    21601         (KJS::mathProtoFuncACos):
    21602         (KJS::mathProtoFuncASin):
    21603         (KJS::mathProtoFuncATan):
    21604         (KJS::mathProtoFuncATan2):
    21605         (KJS::mathProtoFuncCeil):
    21606         (KJS::mathProtoFuncCos):
    21607         (KJS::mathProtoFuncExp):
    21608         (KJS::mathProtoFuncFloor):
    21609         (KJS::mathProtoFuncLog):
    21610         (KJS::mathProtoFuncMax):
    21611         (KJS::mathProtoFuncMin):
    21612         (KJS::mathProtoFuncPow):
    21613         (KJS::mathProtoFuncRandom):
    21614         (KJS::mathProtoFuncRound):
    21615         (KJS::mathProtoFuncSin):
    21616         (KJS::mathProtoFuncSqrt):
    21617         (KJS::mathProtoFuncTan):
    21618         * kjs/math_object.h:
    21619         * kjs/string_object.cpp:
    21620         (KJS::stringProtoFuncToString):
    21621         (KJS::stringProtoFuncValueOf):
    21622         (KJS::stringProtoFuncCharAt):
    21623         (KJS::stringProtoFuncCharCodeAt):
    21624         (KJS::stringProtoFuncConcat):
    21625         (KJS::stringProtoFuncIndexOf):
    21626         (KJS::stringProtoFuncLastIndexOf):
    21627         (KJS::stringProtoFuncMatch):
    21628         (KJS::stringProtoFuncSearch):
    21629         (KJS::stringProtoFuncReplace):
    21630         (KJS::stringProtoFuncSlice):
    21631         (KJS::stringProtoFuncSplit):
    21632         (KJS::stringProtoFuncSubstr):
    21633         (KJS::stringProtoFuncSubstring):
    21634         (KJS::stringProtoFuncToLowerCase):
    21635         (KJS::stringProtoFuncToUpperCase):
    21636         (KJS::stringProtoFuncToLocaleLowerCase):
    21637         (KJS::stringProtoFuncToLocaleUpperCase):
    21638         (KJS::stringProtoFuncLocaleCompare):
    21639         (KJS::stringProtoFuncBig):
    21640         (KJS::stringProtoFuncSmall):
    21641         (KJS::stringProtoFuncBlink):
    21642         (KJS::stringProtoFuncBold):
    21643         (KJS::stringProtoFuncFixed):
    21644         (KJS::stringProtoFuncItalics):
    21645         (KJS::stringProtoFuncStrike):
    21646         (KJS::stringProtoFuncSub):
    21647         (KJS::stringProtoFuncSup):
    21648         (KJS::stringProtoFuncFontcolor):
    21649         (KJS::stringProtoFuncFontsize):
    21650         (KJS::stringProtoFuncAnchor):
    21651         (KJS::stringProtoFuncLink):
    21652         * kjs/string_object.h:
    21653 
    21654 2008-01-15  Geoffrey Garen  <[email protected]>
    21655 
    21656         Reviewed by Adam Roben.
    21657        
    21658         Some tweaks to our headerdoc, suggested by David Gatwood on the docs
    21659         team.
    21660 
    21661         * API/JSBase.h:
    21662         * API/JSObjectRef.h:
    21663         * API/JSStringRef.h:
    21664         * API/JSValueRef.h:
    21665 
    21666 2008-01-15  Alp Toker  <[email protected]>
    21667 
    21668         Rubber-stamped by Anders.
    21669 
    21670         Make the HTTP backend configurable in the GTK+ port. curl is currently
    21671         the only option.
    21672 
    21673         * wtf/Platform.h: Don't hard-code WTF_USE_CURL for GTK
    21674 
    21675 2008-01-15  Sam Weinig  <[email protected]>
    21676 
    21677         Reviewed by Beth Dakin.
    21678 
    21679         Remove unneeded variable.
    21680 
    21681         * kjs/string_object.cpp:
    21682         (KJS::StringProtoFuncSubstr::callAsFunction):
    21683 
    21684 2008-01-14  Steve Falkenburg  <[email protected]>
    21685 
    21686         Use shared vsprops for most vcproj properties.
    21687        
    21688         Reviewed by Darin.
    21689 
    21690         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add missing Debug_Internal config.
    21691         * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add missing Debug_Internal config.
    21692         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
    21693 
    21694 2008-01-14  Adam Roben  <[email protected]>
    21695 
    21696         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added
    21697         some headers that were missing from the vcproj so their contents will
    21698         be included in Find in Files.
    21699 
    21700 2008-01-14  Adam Roben  <[email protected]>
    21701 
    21702         Fix Bug 16871: Crash when loading apple.com/startpage
    21703 
    21704         <http://bugs.webkit.org/show_bug.cgi?id=16871>
    21705         <rdar://problem/5686670>
    21706 
    21707         Patch written by Darin, reviewed by me.
    21708 
    21709         * kjs/ExecState.cpp:
    21710         (KJS::ExecState::mark): Call ActivationImp::markChildren if our
    21711         m_activation is on the stack. This is what ScopeChain::mark also does,
    21712         but apparently in some cases it's possible for an ExecState's
    21713         ActivationImp to not be in any ScopeChain.
    21714 
    21715 2008-01-14  Kevin McCullough  <[email protected]>
    21716 
    21717         Reviewed by Oliver.
    21718 
    21719         -<rdar://problem/5622667> REGRESSION (Leopard-ToT): Endless loading loop
    21720         trying to view techreport.com comments
    21721         - We need to set values in the map, because if they are already in the
    21722         map they will not be reset when we use add().
    21723 
    21724         * kjs/array_instance.cpp:
    21725         (KJS::ArrayInstance::put):
    21726 
    21727 2008-01-14  Darin Adler  <[email protected]>
    21728 
    21729         Reviewed by Adam.
    21730 
    21731         - re-speed-up the page load test (my StringImpl change slowed it down)
    21732 
    21733         * wtf/RefCounted.h:
    21734         (WTF::RefCounted::RefCounted): Allow derived classes to start with a reference
    21735         count other than 0. Eventually everyone will want to start with a 1. This is a
    21736         staged change. For now, there's a default of 0, and you can specify 1. Later,
    21737         there will be no default and everyone will have to specify. And then later, there
    21738         will be a default of 1. Eventually, we can take away even the option of starting
    21739         with 0!
    21740 
    21741         * wtf/Vector.h:
    21742         (WTF::Vector::Vector): Sped up creation of non-empty vectors by removing the
    21743         overhead of first constructing something empty and then calling resize.
    21744         (WTF::Vector::clear): Sped up the common case of calling clear on an empty
    21745         vector by adding a check for that case.
    21746         (WTF::Vector::releaseBuffer): Marked this function inline and removed a branch
    21747         in the case of vectors with no inline capacity (normal vectors) by leaving out
    21748         the code to copy the inline buffer in that case.
    21749 
    21750 2008-01-14  Alexey Proskuryakov  <[email protected]>
    21751 
    21752         Reviewed by David Kilzer.
    21753 
    21754         http://bugs.webkit.org/show_bug.cgi?id=16787
    21755         array.splice() with 1 element not working
    21756 
    21757         Test: fast/js/array-splice.html
    21758 
    21759         * kjs/array_object.cpp:
    21760         (KJS::ArrayProtoFuncSplice::callAsFunction): Implement this Mozilla extension, and fix
    21761         some other edge cases.
    21762 
    21763 2008-01-13  Steve Falkenburg  <[email protected]>
    21764 
    21765         Share common files across projects.
    21766        
    21767         Unify vsprops files
    21768         Debug:          common.vsprops, debug.vsprops
    21769         Debug_Internal: common.vsprops, debug.vsprops, debug_internal.vsprops
    21770         Release:        common.vsprops, release.vsprops
    21771        
    21772         Shared properties can go into common.vsprops, shared debug settings can go into debug.vsprops.
    21773         debug_internal.vsprops will be mostly empty except for file path prefix modifiers.
    21774 
    21775         Reviewed by Adam Roben.
    21776 
    21777         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    21778         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
    21779         * JavaScriptCore.vcproj/debug.vsprops: Removed.
    21780         * JavaScriptCore.vcproj/debug_internal.vsprops: Removed.
    21781         * JavaScriptCore.vcproj/release.vsprops: Removed.
    21782         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
    21783 
    21784 2008-01-13  Marius Bugge Monsen  <[email protected]>
    21785 
    21786         Contributions and review by Adriaan de Groot,
    21787         Simon Hausmann, Eric Seidel, and Darin Adler.
    21788 
    21789         - http://bugs.webkit.org/show_bug.cgi?id=16590
    21790           Compilation fixes for Solaris.
    21791 
    21792         * kjs/DateMath.h:
    21793         (KJS::GregorianDateTime::GregorianDateTime): Use the WIN_OS code path
    21794         for SOLARIS too, presumably because Solaris also lacks the tm_gtoff and tm_zone
    21795         fields.
    21796         (KJS::GregorianDateTime::operator tm): Ditto.
    21797 
    21798         * kjs/collector.cpp:
    21799         (KJS::currentThreadStackBase): Use thr_stksegment on Solaris.
    21800 
    21801         * wtf/MathExtras.h:
    21802         (isfinite): Implement for Solaris.
    21803         (isinf): Ditto.
    21804         (signbit): Ditto. But this one is wrong, so I added a FIXME.
    21805 
    21806         * wtf/Platform.h: Define PLATFORM(SOLARIS) when "sun" or "__sun" is defined.
    21807 
    21808 2008-01-13  Michael Goddard  <[email protected]>
    21809 
    21810         Reviewed by Anders Carlsson.
    21811 
    21812         Add binding language type to Instance.
    21813         Allows runtime determination of the type of an
    21814         Instance, to allow safe casting.  Doesn't actually
    21815         add any safe casting yet, though.
    21816 
    21817         Add a helper function to get an Instance from a JSObject*.
    21818         Given an object and the expected binding language, see if
    21819         the JSObject actually wraps an Instance of the given type
    21820         and return it.  Otherwise return 0.
    21821 
    21822         Move RuntimeObjectImp creations into Instance.
    21823         Make the ctor protected, and Instance a friend class, so
    21824         that all creation of RuntimeObjectImps goes through
    21825         one place.
    21826 
    21827         Remove copy ctor/assignment operator for QtInstance.
    21828         Instance itself is Noncopyable, so QtInstance doesn't
    21829         need to have these.
    21830 
    21831         Add caching for QtInstance and associated RuntimeObjectImps.
    21832         Push any dealings with QtLanguage bindings into QtInstance,
    21833         and cache them there, rather than in the Instance layer.  Add
    21834         a QtRuntimeObjectImp to help with caching.
    21835 
    21836         * JavaScriptCore.exp:
    21837         * bindings/c/c_instance.h:
    21838         * bindings/jni/jni_instance.h:
    21839         * bindings/objc/objc_instance.h:
    21840         * bindings/qt/qt_instance.cpp:
    21841         (KJS::Bindings::QtRuntimeObjectImp::QtRuntimeObjectImp):
    21842         (KJS::Bindings::QtRuntimeObjectImp::~QtRuntimeObjectImp):
    21843         (KJS::Bindings::QtRuntimeObjectImp::invalidate):
    21844         (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
    21845         (KJS::Bindings::QtInstance::QtInstance):
    21846         (KJS::Bindings::QtInstance::~QtInstance):
    21847         (KJS::Bindings::QtInstance::getQtInstance):
    21848         (KJS::Bindings::QtInstance::getRuntimeObject):
    21849         * bindings/qt/qt_instance.h:
    21850         (KJS::Bindings::QtInstance::getBindingLanguage):
    21851         * bindings/runtime.cpp:
    21852         (KJS::Bindings::Instance::createBindingForLanguageInstance):
    21853         (KJS::Bindings::Instance::createRuntimeObject):
    21854         (KJS::Bindings::Instance::getInstance):
    21855         * bindings/runtime.h:
    21856         * bindings/runtime_object.h:
    21857         (KJS::RuntimeObjectImp::getInternalInstance):
    21858 
    21859 2008-01-12  Alp Toker  <[email protected]>
    21860 
    21861         Reviewed by Mark Rowe.
    21862 
    21863         Hide non-public symbols in GTK+/autotools release builds.
    21864 
    21865         * GNUmakefile.am:
    21866 
    21867 2008-01-12  Cameron Zwarich  <[email protected]>
    21868 
    21869         Reviewed by Mark Rowe.
    21870 
    21871         Fix http://bugs.webkit.org/show_bug.cgi?id=16852
    21872         Fixes leaking of ActivationStackNode objects.
    21873 
    21874         * kjs/JSGlobalObject.cpp:
    21875         (KJS::JSGlobalObject::deleteActivationStack):
    21876         (KJS::JSGlobalObject::~JSGlobalObject):
    21877         (KJS::JSGlobalObject::init):
    21878         (KJS::JSGlobalObject::reset):
    21879         * kjs/JSGlobalObject.h:
    21880 
    21881 2008-01-12  Darin Adler  <[email protected]>
    21882 
    21883         - try to fix Qt Windows build
    21884 
    21885         * pcre/dftables: Remove reliance on the list form of Perl pipes.
    21886 
    21887 2008-01-12  Darin Adler  <[email protected]>
    21888 
    21889         - try to fix Qt build
    21890 
    21891         * kjs/function.cpp: Added include of scope_chain_mark.h.
    21892         * kjs/scope_chain_mark.h: Added multiple-include guards.
    21893 
    21894 2008-01-12  Mark Rowe  <[email protected]>
    21895 
    21896         Another Windows build fix.
    21897 
    21898         * kjs/Activation.h:
    21899 
    21900 2008-01-12  Mark Rowe  <[email protected]>
    21901 
    21902         Attempted Windows build fix.  Use struct consistently when forward-declaring
    21903         ActivationStackNode and StackActivation.
    21904 
    21905         * kjs/Activation.h:
    21906         * kjs/JSGlobalObject.h:
    21907 
    21908 2008-01-12  Cameron Zwarich  <[email protected]>
    21909 
    21910         Reviewed by Maciej.
    21911 
    21912         Fixes a problem with the ActivationImp tear-off patch (r29425) where
    21913         some of the calls to JSGlobalObject::tearOffActivation() were using
    21914         the wrong test to determine whether it should leave a relic behind.
    21915 
    21916         * kjs/function.cpp:
    21917         (KJS::FunctionImp::argumentsGetter):
    21918         (KJS::ActivationImp::getOwnPropertySlot):
    21919 
    21920 2008-01-11  Geoffrey Garen  <[email protected]>
    21921 
    21922         Reviewed by Oliver Hunt.
    21923        
    21924         Fixed <rdar://problem/5665251> REGRESSION (r28880-r28886): Global
    21925         variable access (16644)
    21926        
    21927         This bug was caused by var declarations shadowing built-in properties of
    21928         the global object.
    21929        
    21930         To match Firefox, we've decided that var declarations will never shadow
    21931         built-in properties of the global object or its prototypes. We used to
    21932         behave more like IE, which allows shadowing, but walking that line got
    21933         us into trouble with websites that sent us down the Firefox codepath.
    21934 
    21935         * kjs/JSVariableObject.h:
    21936         (KJS::JSVariableObject::symbolTableGet): New code to support calling
    21937         hasProperty before the variable object is fully initialized (so you
    21938         can call it during initialization).
    21939 
    21940         * kjs/nodes.cpp:.
    21941         (KJS::ProgramNode::initializeSymbolTable): Always do a full hasProperty
    21942         check when looking for duplicates, not getDirect, since it only checks
    21943         the property map, and not hasOwnProperty, since it doesn't check
    21944         prototypes.
    21945         (KJS::EvalNode::processDeclarations): ditto
    21946 
    21947         * kjs/property_slot.h:
    21948         (KJS::PropertySlot::ungettableGetter): Best function name evar.
    21949 
    21950 2008-01-11  Cameron Zwarich  <[email protected]>
    21951 
    21952         Reviewed by Maciej.
    21953 
    21954         Optimized ActivationImp allocation, so that activation records are now
    21955         first allocated on an explicitly managed stack and only heap allocated
    21956         when necessary. Roughly a 5% improvement on SunSpider, and a larger
    21957         improvement on benchmarks that use more function calls.
    21958 
    21959         * JavaScriptCore.xcodeproj/project.pbxproj:
    21960         * kjs/Activation.h: Added.
    21961         (KJS::ActivationImp::ActivationData::ActivationData):
    21962         (KJS::ActivationImp::ActivationImp):
    21963         (KJS::ActivationImp::classInfo):
    21964         (KJS::ActivationImp::isActivationObject):
    21965         (KJS::ActivationImp::isOnStack):
    21966         (KJS::ActivationImp::d):
    21967         (KJS::StackActivation::StackActivation):
    21968         * kjs/ExecState.cpp:
    21969         (KJS::ExecState::ExecState):
    21970         (KJS::ExecState::~ExecState):
    21971         * kjs/ExecState.h:
    21972         (KJS::ExecState::replaceScopeChainTop):
    21973         (KJS::ExecState::setActivationObject):
    21974         (KJS::ExecState::setLocalStorage):
    21975         * kjs/JSGlobalObject.cpp:
    21976         (KJS::JSGlobalObject::reset):
    21977         (KJS::JSGlobalObject::pushActivation):
    21978         (KJS::JSGlobalObject::checkActivationCount):
    21979         (KJS::JSGlobalObject::popActivationHelper):
    21980         (KJS::JSGlobalObject::popActivation):
    21981         (KJS::JSGlobalObject::tearOffActivation):
    21982         * kjs/JSGlobalObject.h:
    21983         * kjs/JSVariableObject.h:
    21984         (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData):
    21985         (KJS::JSVariableObject::JSVariableObject):
    21986         * kjs/function.cpp:
    21987         (KJS::FunctionImp::argumentsGetter):
    21988         (KJS::ActivationImp::ActivationImp):
    21989         (KJS::ActivationImp::~ActivationImp):
    21990         (KJS::ActivationImp::init):
    21991         (KJS::ActivationImp::getOwnPropertySlot):
    21992         (KJS::ActivationImp::markHelper):
    21993         (KJS::ActivationImp::mark):
    21994         (KJS::ActivationImp::ActivationData::ActivationData):
    21995         (KJS::GlobalFuncImp::callAsFunction):
    21996         * kjs/function.h:
    21997         * kjs/nodes.cpp:
    21998         (KJS::PostIncResolveNode::evaluate):
    21999         (KJS::PostDecResolveNode::evaluate):
    22000         (KJS::PreIncResolveNode::evaluate):
    22001         (KJS::PreDecResolveNode::evaluate):
    22002         (KJS::ReadModifyResolveNode::evaluate):
    22003         (KJS::AssignResolveNode::evaluate):
    22004         (KJS::WithNode::execute):
    22005         (KJS::TryNode::execute):
    22006         (KJS::FunctionBodyNode::processDeclarations):
    22007         (KJS::FuncExprNode::evaluate):
    22008         * kjs/object.h:
    22009         * kjs/scope_chain.h:
    22010         (KJS::ScopeChain::replace):
    22011         * kjs/scope_chain_mark.h: Added.
    22012         (KJS::ScopeChain::mark):
    22013 
    22014 2008-01-11  Simon Hausmann  <[email protected]>
    22015 
    22016         Reviewed by Mark Rowe.
    22017 
    22018         Fix the (clean) qmake build. For generating chartables.c we don't
    22019         depend on a separate input source file anymore, the dftables perl
    22020         script is enough. So use that instead as value for the .input
    22021         variable, to ensure that qmake also generates a rule to call dftables.
    22022 
    22023         * pcre/pcre.pri:
    22024 
    22025 2008-01-10  Geoffrey Garen  <[email protected]>
    22026 
    22027         Reviewed by John Sullivan.
    22028 
    22029         Fixed some world leak reports:
    22030         * <rdar://problem/5669436> PLT complains about world leak of 1 JavaScript
    22031         Interpreter after running cvs-base suite
    22032 
    22033         * <rdar://problem/5669423> PLT complains about world leak if browser
    22034         window is open when PLT starts
    22035        
    22036         * kjs/collector.h: Added the ability to distinguish between global
    22037         objects and GC-protected global objects, since we only consider the
    22038         latter to be world leaks.
    22039         * kjs/collector.cpp:
    22040 
    22041 2008-01-11  Mark Rowe  <[email protected]>
    22042 
    22043         Silence qmake warning about ctgen lacking input.
    22044 
    22045         Rubber-stamped by Alp Toker.
    22046 
    22047         * pcre/pcre.pri:
    22048 
    22049 2008-01-10  David Kilzer  <[email protected]>
    22050 
    22051         dftables should be rewritten as a script
    22052 
    22053         <http://bugs.webkit.org/show_bug.cgi?id=16818>
    22054         <rdar://problem/5681463>
    22055 
    22056         Reviewed by Darin.
    22057 
    22058         Rewrote the dftables utility in Perl.  Attempted to switch all
    22059         build systems to call the script directly instead of building
    22060         a binary first.  Only the Xcode build was able to be tested.
    22061 
    22062         * DerivedSources.make: Added pcre directory to VPATH and changed
    22063         to invoke dftables directly.
    22064         * GNUmakefile.am: Removed build information and changed to invoke
    22065         dftables directly.
    22066         * JavaScriptCore.vcproj/JavaScriptCore.sln: Removed reference to
    22067         dftables project.
    22068         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Ditto.
    22069         * JavaScriptCore.vcproj/dftables: Removed.
    22070         * JavaScriptCore.vcproj/dftables/dftables.vcproj: Removed.
    22071         * JavaScriptCore.xcodeproj/project.pbxproj: Removed dftables target.
    22072         * jscore.bkl: Removed dftables executable definition.
    22073         * pcre/dftables: Copied from JavaScriptCore/pcre/dftables.cpp.
    22074         * pcre/dftables.cpp: Removed.
    22075         * pcre/dftables.pro: Removed.
    22076         * pcre/pcre.pri: Removed references to dftables.cpp and changed to
    22077         invoke dftables directly.
    22078 
    22079 2008-01-10  Dan Bernstein  <[email protected]>
    22080 
    22081         Reviewed by Darin Adler.
    22082 
    22083         - fix http://bugs.webkit.org/show_bug.cgi?id=16782
    22084           <rdar://problem/5675331> REGRESSION(r29266): Reproducible crash in fast/replaced/image-map.html
    22085 
    22086         The crash resulted from a native object (DumpRenderTree's
    22087         EventSender) causing its wrapper to be invalidated (by clicking a
    22088         link that replaced the document in the window) and consequently
    22089         deallocated. The fix is to use RefPtrs to protect the native object
    22090         from deletion by self-invalidation.
    22091 
    22092         * bindings/runtime_method.cpp:
    22093         (RuntimeMethod::callAsFunction):
    22094         * bindings/runtime_object.cpp:
    22095         (RuntimeObjectImp::fallbackObjectGetter):
    22096         (RuntimeObjectImp::fieldGetter):
    22097         (RuntimeObjectImp::methodGetter):
    22098         (RuntimeObjectImp::put):
    22099         (RuntimeObjectImp::defaultValue):
    22100         (RuntimeObjectImp::callAsFunction):
    22101 
    22102 2008-01-07  Mark Rowe  <[email protected]>
    22103 
    22104         Reviewed by Maciej Stachowiak.
    22105 
    22106         Turn testIsInteger assertions into compile-time asserts and move them into HashTraits.h
    22107         where possible.
    22108 
    22109         * kjs/testkjs.cpp:
    22110         * wtf/HashTraits.h:
    22111 
    22112 2008-01-07  Nikolas Zimmermann  <[email protected]>
    22113 
    22114         Reviewed by Mark.
    22115 
    22116         Enable SVG_FONTS by default.
    22117 
    22118         * Configurations/JavaScriptCore.xcconfig:
    22119 
    22120 2008-01-07  Darin Adler  <[email protected]>
    22121 
    22122         Rubber stamped by David Kilzer.
    22123 
    22124         - get rid of empty fpconst.cpp
    22125 
    22126         * GNUmakefile.am: Remove fpconst.cpp.
    22127         * JavaScriptCore.pri: Ditto.
    22128         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
    22129         * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
    22130         * JavaScriptCoreSources.bkl: Ditto.
    22131 
    22132         * kjs/fpconst.cpp: Removed.
    22133 
    22134 2008-01-07  Darin Adler  <[email protected]>
    22135 
    22136         Reviewed by David Kilzer.
    22137 
    22138         - fix alignment problem with NaN and Inf globals
    22139 
    22140         * kjs/fpconst.cpp: Move the contents of this file from here back to
    22141         value.cpp. The reason this was in a separate file is that the DARWIN
    22142         version of this used a declaration of the globals with a different
    22143         type to avoid creating "init routines". That's no longer necessary for
    22144         DARWIN and was never necessary for the non-DARWIN code path.
    22145         To make this patch easy to merge, I didn't actually delete this file
    22146         yet. We'll do that in a separate changeset.
    22147 
    22148         * kjs/value.cpp: If C99's NAN and INFINITY are present, then use them,
    22149         othrewise use the union trick from fpconst.cpp. I think it would be
    22150         better to eliminate KJS::NaN and KJS::Inf and just use NAN and INFINITY
    22151         directly or std::numeric_limits<double>::quiet_nan() and
    22152         std::numeric_limits<double>::infinity(). But when I tried that, it
    22153         slowed down SunSpider. Someone else could do that cleanup if they
    22154         could do it without slowing down the engine.
    22155 
    22156 2008-01-07  Adam Roben  <[email protected]>
    22157 
    22158         Windows build fix
    22159 
    22160         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added
    22161         JavaScript.h to the project.
    22162         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
    22163         Copy JavaScript.h to WEBKITOUTPUTDIR.
    22164 
    22165 2008-01-07  Timothy Hatcher  <[email protected]>
    22166 
    22167         Reviewed by Darin.
    22168 
    22169         Fix Mac build.
    22170 
    22171         * API/JSNode.c:
    22172         * API/JSNode.h:
    22173         * API/JSNodeList.c:
    22174         * API/JSNodeList.h:
    22175         * API/JavaScript.h:
    22176         * API/JavaScriptCore.h:
    22177         * API/minidom.c:
    22178         * JavaScriptCore.xcodeproj/project.pbxproj:
    22179 
    22180 2008-01-07  Alp Toker  <[email protected]>
    22181 
    22182         Reviewed by Darin.
    22183 
    22184         http://bugs.webkit.org/show_bug.cgi?id=16029
    22185         JavaScriptCore.h is not suitable for platforms other than Mac OS X
    22186 
    22187         Introduce a new JavaScriptCore/JavaScript.h public API header. This
    22188         should be used by all new portable code using the JavaScriptCore API.
    22189 
    22190         JavaScriptCore/JavaScriptCore.h will remain for compatibility with
    22191         existing applications that depend on it including JSStringRefCF.h
    22192         which isn't portable.
    22193 
    22194         Also add minidom to the GTK+/autotools build since we can now support
    22195         it on all platforms.
    22196 
    22197         * API/JSNode.h:
    22198         * API/JSNodeList.h:
    22199         * API/JavaScript.h: Added.
    22200         * API/JavaScriptCore.h:
    22201         * ForwardingHeaders/JavaScriptCore/JavaScript.h: Added.
    22202         * GNUmakefile.am:
    22203         * JavaScriptCore.xcodeproj/project.pbxproj:
    22204 
    22205 2008-01-06  Eric Seidel  <[email protected]>
    22206 
    22207         Reviewed by Sam.
    22208 
    22209         Abstract all DateObject.set* functions in preparation for fixing:
    22210         http://bugs.webkit.org/show_bug.cgi?id=16753
    22211        
    22212         SunSpider had random changes here and there but was overall a wash.
    22213 
    22214         * kjs/date_object.cpp:
    22215         (KJS::fillStructuresUsingTimeArgs):
    22216         (KJS::setNewValueFromTimeArgs):
    22217         (KJS::setNewValueFromDateArgs):
    22218         (KJS::DateProtoFuncSetMilliSeconds::callAsFunction):
    22219         (KJS::DateProtoFuncSetUTCMilliseconds::callAsFunction):
    22220         (KJS::DateProtoFuncSetSeconds::callAsFunction):
    22221         (KJS::DateProtoFuncSetUTCSeconds::callAsFunction):
    22222         (KJS::DateProtoFuncSetMinutes::callAsFunction):
    22223         (KJS::DateProtoFuncSetUTCMinutes::callAsFunction):
    22224         (KJS::DateProtoFuncSetHours::callAsFunction):
    22225         (KJS::DateProtoFuncSetUTCHours::callAsFunction):
    22226         (KJS::DateProtoFuncSetDate::callAsFunction):
    22227         (KJS::DateProtoFuncSetUTCDate::callAsFunction):
    22228         (KJS::DateProtoFuncSetMonth::callAsFunction):
    22229         (KJS::DateProtoFuncSetUTCMonth::callAsFunction):
    22230         (KJS::DateProtoFuncSetFullYear::callAsFunction):
    22231         (KJS::DateProtoFuncSetUTCFullYear::callAsFunction):
    22232 
    22233 2008-01-06  Nikolas Zimmermann  <[email protected]>
    22234 
    22235         Reviewed by Dan.
    22236 
    22237         Add new helper function isArabicChar - SVG Fonts support needs it.
    22238 
    22239         * wtf/unicode/icu/UnicodeIcu.h:
    22240         (WTF::Unicode::isArabicChar):
    22241         * wtf/unicode/qt4/UnicodeQt4.h:
    22242         (WTF::Unicode::isArabicChar):
    22243 
    22244 2008-01-06  Alp Toker  <[email protected]>
    22245 
    22246         Reviewed by Mark Rowe.
    22247 
    22248         Use $(EXEEXT) to account for the .exe extension in the GTK+ Windows
    22249         build. (This is already done correctly in DerivedSources.make.) Issue
    22250         noticed by Mikkel when building in Cygwin.
    22251 
    22252         Add a missing slash. This was a hack from the qmake build system that
    22253         isn't necessary with autotools.
    22254 
    22255         * GNUmakefile.am:
    22256 
    22257 2008-01-05  Darin Adler  <[email protected]>
    22258 
    22259         * API/JSRetainPtr.h: One more file that needed the change below.
    22260 
    22261 2008-01-05  Darin Adler  <[email protected]>
    22262 
    22263         * wtf/OwnPtr.h: OwnPtr needs the same fix as RefPtr below.
    22264 
    22265 2008-01-05  Adam Roben  <[email protected]>
    22266 
    22267         Build fix.
    22268 
    22269         Reviewed by Maciej.
    22270 
    22271         * wtf/RetainPtr.h: Use PtrType instead of T* because of the
    22272         RemovePointer magic.
    22273 
    22274 2008-01-05  Darin Adler  <[email protected]>
    22275 
    22276         Rubber stamped by Maciej Stachowiak.
    22277 
    22278         - cut down own PIC branches by using a pointer-to-member-data instead of a
    22279           pointer-to-member-function in WTF smart pointers
    22280 
    22281         * wtf/OwnArrayPtr.h:
    22282         * wtf/OwnPtr.h:
    22283         * wtf/PassRefPtr.h:
    22284         * wtf/RefPtr.h:
    22285         * wtf/RetainPtr.h:
    22286         Use a pointer to the m_ptr member instead of the get member.
    22287         The GCC compiler generates better code for this idiom.
    22288 
    22289 2008-01-05  Henry Mason  <[email protected]>
    22290 
    22291         Reviewed by Maciej Stachowiak.
    22292 
    22293         http://bugs.webkit.org/show_bug.cgi?id=16738
    22294         Bug 16738: Collector block offset could be stored as an cell offset instead of a byte offset
    22295 
    22296         Gives a 0.4% SunSpider boost and prettier code.
    22297 
    22298         * kjs/collector.cpp: Switched to cell offsets from byte offsets
    22299         (KJS::Collector::heapAllocate):
    22300         (KJS::Collector::sweep):
    22301 
    22302 2008-01-04  Mark Rowe  <[email protected]>
    22303 
    22304         Reviewed by Maciej Stachowiak.
    22305 
    22306         Have the two malloc zones print useful diagnostics if their free method are unexpectedly invoked.
    22307         Due to <rdar://problem/5671357> this can happen if an application attempts to free a pointer that
    22308         was not allocated by any registered malloc zone on the system.
    22309 
    22310         * kjs/CollectorHeapIntrospector.h:
    22311         * wtf/FastMalloc.cpp:
    22312 
    22313 2008-01-04  Alp Toker  <[email protected]>
    22314 
    22315         GTK+ autotools build fix. Terminate empty rules.
    22316 
    22317         * GNUmakefile.am:
    22318 
    22319 2008-01-03  Simon Hausmann  <[email protected]>
    22320 
    22321         Reviewed by Mark Rowe.
    22322 
    22323         Fix compilation with gcc 4.3: limits.h is needed for INT_MAX.
    22324 
    22325         * pcre/pcre_exec.cpp:
    22326 
    22327 2008-01-03  Darin Adler  <[email protected]>
    22328 
    22329         * tests/mozilla/expected.html: The fix for bug 16696 also fixed a test
    22330         case, ecma_3/RegExp/perlstress-002.js, so updated results to expect
    22331         that test to succeed.
    22332 
    22333 2008-01-02  Darin Adler  <[email protected]>
    22334 
    22335         Reviewed by Geoff.
    22336 
    22337         - fix http://bugs.webkit.org/show_bug.cgi?id=16696
    22338           JSCRE fails fails to match Acid3 regexp
    22339 
    22340         Test: fast/regex/early-acid3-86.html
    22341 
    22342         The problem was with the cutoff point between backreferences and octal
    22343         escape sequences. We need to determine the cutoff point by counting the
    22344         total number of capturing brackets, which requires an extra pass through
    22345         the expression when compiling it.
    22346 
    22347         * pcre/pcre_compile.cpp:
    22348         (CompileData::CompileData): Added numCapturingBrackets. Removed some
    22349         unused fields.
    22350         (compileBranch): Use numCapturingBrackets when calling checkEscape.
    22351         (calculateCompiledPatternLength): Use numCapturingBrackets when calling
    22352         checkEscape, and also store the bracket count at the end of the compile.
    22353         (jsRegExpCompile): Call calculateCompiledPatternLength twice -- once to
    22354         count the number of brackets and then a second time to calculate the length.
    22355 
    22356 2008-01-02  Darin Adler  <[email protected]>
    22357 
    22358         Reviewed by Geoff.
    22359 
    22360         - fix http://bugs.webkit.org/show_bug.cgi?id=16696
    22361           JSCRE fails fails to match Acid3 regexp
    22362 
    22363         Test: fast/regex/early-acid3-86.html
    22364 
    22365         The problem was with the cutoff point between backreferences and octal
    22366         escape sequences. We need to determine the cutoff point by counting the
    22367         total number of capturing brackets, which requires an extra pass through
    22368         the expression when compiling it.
    22369 
    22370         * pcre/pcre_compile.cpp:
    22371         (CompileData::CompileData): Added numCapturingBrackets. Removed some
    22372         unused fields.
    22373         (compileBranch): Use numCapturingBrackets when calling checkEscape.
    22374         (calculateCompiledPatternLength): Use numCapturingBrackets when calling
    22375         checkEscape, and also store the bracket count at the end of the compile.
    22376         (jsRegExpCompile): Call calculateCompiledPatternLength twice -- once to
    22377         count the number of brackets and then a second time to calculate the length.
    22378 
    22379 2008-01-02  David Kilzer <[email protected]>
    22380 
    22381         Reviewed and landed by Darin.
    22382 
    22383         * kjs/nodes.cpp:
    22384         (KJS::DoWhileNode::execute): Added a missing return.
    22385 
    22386 2008-01-02  Darin Adler  <[email protected]>
    22387 
    22388         - try to fix Qt build
    22389 
    22390         * wtf/unicode/qt4/UnicodeQt4.h:
    22391         (WTF::Unicode::foldCase): Add some missing const.
    22392 
    22393 2008-01-02  Alice Liu  <[email protected]>
    22394 
    22395         Reviewed by Sam Weinig.
    22396 
    22397         need to export ASCIICType.h for use in DRT
    22398 
    22399         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
    22400         * wtf/ASCIICType.h:
    22401         (WTF::isASCIIUpper):
    22402 
    22403 2008-01-02  Sam Weinig  <[email protected]>
    22404 
    22405         Reviewed by Beth Dakin.
    22406 
    22407         Cleanup error_object.h/cpp.
    22408 
    22409         * kjs/JSGlobalObject.cpp:
    22410         (KJS::JSGlobalObject::reset):
    22411         * kjs/error_object.cpp:
    22412         (KJS::ErrorInstance::ErrorInstance):
    22413         (KJS::ErrorPrototype::ErrorPrototype):
    22414         (KJS::ErrorProtoFuncToString::ErrorProtoFuncToString):
    22415         (KJS::ErrorProtoFuncToString::callAsFunction):
    22416         (KJS::ErrorObjectImp::ErrorObjectImp):
    22417         (KJS::ErrorObjectImp::implementsConstruct):
    22418         (KJS::ErrorObjectImp::construct):
    22419         (KJS::ErrorObjectImp::callAsFunction):
    22420         (KJS::NativeErrorPrototype::NativeErrorPrototype):
    22421         (KJS::NativeErrorImp::NativeErrorImp):
    22422         (KJS::NativeErrorImp::implementsConstruct):
    22423         (KJS::NativeErrorImp::construct):
    22424         (KJS::NativeErrorImp::callAsFunction):
    22425         (KJS::NativeErrorImp::mark):
    22426         * kjs/error_object.h:
    22427         (KJS::ErrorInstance::classInfo):
    22428         (KJS::NativeErrorImp::classInfo):
    22429 
    22430 2008-01-02  Mark Rowe  <[email protected]>
    22431 
    22432         Rubber-stamped by Alp Toker.
    22433 
    22434         * GNUmakefile.am: Add missing dependency on grammar.y.
    22435 
    22436 2008-01-01  Darin Adler  <[email protected]>
    22437 
    22438         Reviewed by Eric.
    22439 
    22440         - fix for http://bugs.webkit.org/show_bug.cgi?id=16695
    22441           JSC allows non-identifier codepoints in identifiers (affects Acid3)
    22442 
    22443         Test: fast/js/kde/parse.html
    22444 
    22445         * kjs/lexer.cpp:
    22446         (KJS::Lexer::lex): Added additional states to distinguish Unicode escapes at the
    22447         start of identifiers from ones inside identifiers. Rejected characters that don't pass
    22448         the isIdentStart and isIdentPart tests.
    22449         (KJS::Lexer::convertUnicode): Removed incorrect FIXME comment.
    22450 
    22451         * kjs/lexer.h: Added new states to distinguish \u escapes at the start of identifiers
    22452         from \u escapes inside identifiers.
    22453 
    22454 2008-01-01  Darin Adler  <[email protected]>
    22455 
    22456         - rolled scope chain optimization out; it was breaking the world
    22457 
    22458 2008-01-01  Darin Adler  <[email protected]>
    22459 
    22460         Reviewed by Geoff.
    22461 
    22462         - http://bugs.webkit.org/show_bug.cgi?id=16685
    22463           eliminate List::empty() to cut down on PIC branches
    22464 
    22465         Also included one other speed-up -- remove the call to reserveCapacity from
    22466         FunctionBodyNode::processDeclarations in all but the most unusual cases.
    22467 
    22468         Together these make SunSpider 1.016x as fast.
    22469 
    22470         * JavaScriptCore.exp: Updated.
    22471         * kjs/ExecState.cpp:
    22472         (KJS::globalEmptyList): Added. Called only when creating global ExecState
    22473         instances.
    22474         (KJS::ExecState::ExecState): Broke constructor up into three separate functions,
    22475         for the three separate node types. Also went through each of the three and
    22476         streamlined as much as possible, removing dead code. This prevents us from having
    22477         to access the global in the function body version of the constructor.
    22478 
    22479         * kjs/ExecState.h: Added emptyList(). Replaced the constructor with a set of
    22480         three that are specific to the different node types that can create new execution
    22481         state objects.
    22482 
    22483         * kjs/array_object.cpp:
    22484         (KJS::ArrayProtoFuncToLocaleString::callAsFunction): Use exec->emptyList() instead
    22485         of List::empty().
    22486         (KJS::ArrayProtoFuncConcat::callAsFunction): Ditto.
    22487         (KJS::ArrayProtoFuncSlice::callAsFunction): Ditto.
    22488         (KJS::ArrayProtoFuncSplice::callAsFunction): Ditto.
    22489         (KJS::ArrayProtoFuncFilter::callAsFunction): Ditto.
    22490         * kjs/function.cpp:
    22491         (KJS::FunctionImp::callAsFunction): Updated to call new ExecState constructor.
    22492         (KJS::GlobalFuncImp::callAsFunction): Ditto (for eval).
    22493         * kjs/function_object.cpp:
    22494         (FunctionObjectImp::construct): Use exec->emptyList() instead of List::empty().
    22495 
    22496         * kjs/list.cpp: Removed List::empty.
    22497         * kjs/list.h: Ditto.
    22498 
    22499         * kjs/nodes.cpp:
    22500         (KJS::ElementNode::evaluate): Use exec->emptyList() instead of List::empty().
    22501         (KJS::ArrayNode::evaluate): Ditto.
    22502         (KJS::ObjectLiteralNode::evaluate): Ditto.
    22503         (KJS::PropertyListNode::evaluate): Ditto.
    22504         (KJS::FunctionBodyNode::processDeclarations): Another speed-up. Check the capacity
    22505         before calling reserveCapacity, because it doesn't get inlined the local storage
    22506         vector is almost always big enough -- saving the function call overhead is a big
    22507         deal.
    22508         (KJS::FuncDeclNode::makeFunction): Use exec->emptyList() instead of List::empty().
    22509         (KJS::FuncExprNode::evaluate): Ditto.
    22510         * kjs/object.cpp:
    22511         (KJS::tryGetAndCallProperty): Ditto.
    22512         * kjs/property_slot.cpp:
    22513         (KJS::PropertySlot::functionGetter): Ditto.
    22514         * kjs/string_object.cpp:
    22515         (KJS::StringProtoFuncSplit::callAsFunction): Ditto.
    22516 
    22517 2008-01-01  Darin Adler  <[email protected]>
    22518 
    22519         Reviewed by Geoff.
    22520 
    22521         - fix http://bugs.webkit.org/show_bug.cgi?id=16648
    22522           REGRESSION (r28165): Yuku.com navigation prints "jsRegExpExecute failed with result -2"
    22523           <rdar://problem/5646486> REGRESSION (r28165): Layout test fast/regex/test1 fails intermittently
    22524 
    22525         Fixes 34 failing test cases in the fast/regex/test1.html test.
    22526 
    22527         Restored the stack which prevents infinite loops for brackets that match the empty
    22528         string; it had been removed as an optimization.
    22529 
    22530         Unfortunately, restoring this stack causes the regular expression test in SunSpider
    22531         to be 1.095x as slow and the overall test to be 1.004x as slow. Maybe we can find
    22532         a correct optimization to restore the speed!
    22533 
    22534         It's possible the original change was on the right track but just off by one.
    22535 
    22536         * pcre/pcre_exec.cpp: Add back eptrblock, but name it BracketChainNode.
    22537         (MatchStack::pushNewFrame): Add back the logic needed here.
    22538         (startNewGroup): Ditto.
    22539         (match): Ditto.
    22540 
    22541 2008-01-01  Darin Adler  <[email protected]>
    22542 
    22543         Reviewed by Geoff.
    22544 
    22545         - http://bugs.webkit.org/show_bug.cgi?id=16683
    22546           speed up function calls by making ScopeChain::push cheaper
    22547 
    22548         This gives a 1.019x speedup on SunSpider.
    22549 
    22550         After doing this, I realized this probably will be obsolete when the optimization
    22551         to avoid creating an activation object is done. When we do that one we should check
    22552         if rolling this out will speed things up, since this does add overhead at the time
    22553         you copy the scope chain.
    22554 
    22555         * kjs/object.h: Removed the ScopeChain::release function. It was
    22556         marked inline, and called in exactly one place, so moved it there.
    22557         No idea why it was in this header file!
    22558 
    22559         * kjs/scope_chain.cpp: Removed the overload of the ScopeChain::push
    22560         function that takes another ScopeChain. It was unused. I think we used
    22561         it over in WebCore at one point, but not any more.
    22562 
    22563         * kjs/scope_chain.h: Changed ScopeChainNode into a struct rather than
    22564         a class, got rid of its constructor so we can have one that's uninitialized,
    22565         and moved the refCount into a derived struct, ScopeChainHeapNode. Made _node
    22566         mutable so it can be changed in the moveToHeap function. Changed the copy
    22567         constructor and assignment operator to call moveToHeap, since the top node
    22568         can't be shared when it's embedded in another ScopeChain object. Updated
    22569         functions as needed to handle the case where the first object isn't on the
    22570         heap or to add casts for cases where it's guaranteed to be. Changed the push
    22571         function to always put the new node into the ScopeChain object; it will get
    22572         put onto the heap when needed later.
    22573 
    22574 2008-01-01  Geoffrey Garen  <[email protected]>
    22575 
    22576         Reviewed by Darin Adler.
    22577        
    22578         Fixed slight logic error in reserveCapacity, where we would reallocate
    22579         the storage buffer unnecessarily.
    22580 
    22581         * wtf/Vector.h:
    22582         (WTF::::reserveCapacity): No need to grow the buffer if newCapacity is
    22583         equal to capacity().
    22584 
    22585 2008-01-01  Darin Adler  <[email protected]>
    22586 
    22587         Reviewed by Oliver.
    22588 
    22589         - http://bugs.webkit.org/show_bug.cgi?id=16684
    22590           eliminate debugger overhead from function body execution
    22591 
    22592         Speeds SunSpider up 1.003x. That's a small amount, but measurable.
    22593 
    22594         * JavaScriptCore.exp: Updated.
    22595         * kjs/Parser.h:
    22596         (KJS::Parser::parse): Create the node with a static member function named create() instead
    22597         of using new explicitly.
    22598 
    22599         * kjs/grammar.y: Changed calls to new FunctionBodyNode to use FunctionBodyNode::create().
    22600 
    22601         * kjs/nodes.cpp:
    22602         (KJS::ProgramNode::create): Added. Calls new.
    22603         (KJS::EvalNode::create): Ditto.
    22604         (KJS::FunctionBodyNode::create): Ditto, but creates FunctionBodyNodeWithDebuggerHooks
    22605         when a debugger is present.
    22606         (KJS::FunctionBodyNode::execute): Removed debugger hooks.
    22607         (KJS::FunctionBodyNodeWithDebuggerHooks::FunctionBodyNodeWithDebuggerHooks): Added.
    22608         (KJS::FunctionBodyNodeWithDebuggerHooks::execute): Calls the debugger, then the code,
    22609         then the debugger again.
    22610 
    22611         * kjs/nodes.h: Added create functions, made the constructors private and protected.
    22612 
    22613 2007-12-30  Eric Seidel  <[email protected]>
    22614 
    22615         Reviewed by Sam.
    22616 
    22617         More small cleanup to array_object.cpp
    22618 
    22619         * kjs/array_object.cpp:
    22620         (KJS::ArrayProtoFuncToString::callAsFunction):
    22621         (KJS::ArrayProtoFuncToLocaleString::callAsFunction):
    22622         (KJS::ArrayProtoFuncJoin::callAsFunction):
    22623         (KJS::ArrayProtoFuncConcat::callAsFunction):
    22624         (KJS::ArrayProtoFuncReverse::callAsFunction):
    22625         (KJS::ArrayProtoFuncShift::callAsFunction):
    22626         (KJS::ArrayProtoFuncSlice::callAsFunction):
    22627         (KJS::ArrayProtoFuncSort::callAsFunction):
    22628         (KJS::ArrayProtoFuncSplice::callAsFunction):
    22629         (KJS::ArrayProtoFuncUnShift::callAsFunction):
    22630         (KJS::ArrayProtoFuncFilter::callAsFunction):
    22631         (KJS::ArrayProtoFuncMap::callAsFunction):
    22632         (KJS::ArrayProtoFuncEvery::callAsFunction):
    22633 
    22634 2007-12-30  Eric Seidel  <[email protected]>
    22635 
    22636         Reviewed by Sam.
    22637 
    22638         Apply wkstyle to array_object.cpp
    22639 
    22640         * kjs/array_object.cpp:
    22641         (KJS::ArrayPrototype::ArrayPrototype):
    22642         (KJS::ArrayPrototype::getOwnPropertySlot):
    22643         (KJS::ArrayProtoFuncConcat::callAsFunction):
    22644         (KJS::ArrayProtoFuncPop::callAsFunction):
    22645         (KJS::ArrayProtoFuncReverse::callAsFunction):
    22646         (KJS::ArrayProtoFuncShift::callAsFunction):
    22647         (KJS::ArrayProtoFuncSlice::callAsFunction):
    22648         (KJS::ArrayProtoFuncSort::callAsFunction):
    22649         (KJS::ArrayProtoFuncSplice::callAsFunction):
    22650         (KJS::ArrayProtoFuncUnShift::callAsFunction):
    22651         (KJS::ArrayProtoFuncFilter::callAsFunction):
    22652         (KJS::ArrayProtoFuncMap::callAsFunction):
    22653         (KJS::ArrayProtoFuncEvery::callAsFunction):
    22654         (KJS::ArrayProtoFuncLastIndexOf::callAsFunction):
    22655         (KJS::ArrayObjectImp::ArrayObjectImp):
    22656         (KJS::ArrayObjectImp::implementsConstruct):
    22657         (KJS::ArrayObjectImp::construct):
    22658         (KJS::ArrayObjectImp::callAsFunction):
    22659 
    22660 2007-12-30  Eric Seidel  <[email protected]>
    22661 
    22662         Reviewed by Sam.
    22663 
    22664         Remove maxInt/minInt, replacing with std:max/min<int>()
    22665 
    22666         * kjs/array_object.cpp:
    22667         (KJS::ArrayProtoFuncSplice::callAsFunction):
    22668         * kjs/operations.cpp:
    22669         * kjs/operations.h:
    22670 
    22671 2007-12-30  Eric Seidel  <[email protected]>
    22672 
    22673         Reviewed by Sam.
    22674        
    22675         Update Number.toString to properly throw exceptions.
    22676         Cleanup code in Number.toString implementation.
    22677 
    22678         * kjs/number_object.cpp:
    22679         (KJS::numberToString):
    22680         * kjs/object.cpp:
    22681         (KJS::Error::create): Remove bogus debug lines.
    22682 
    22683 2007-12-28  Eric Seidel  <[email protected]>
    22684 
    22685         Reviewed by Oliver.
    22686 
    22687         ASSERT when debugging via Drosera due to missed var lookup optimization.
    22688         http://bugs.webkit.org/show_bug.cgi?id=16634
    22689        
    22690         No test case possible.
    22691 
    22692         * kjs/nodes.cpp:
    22693         (KJS::BreakpointCheckStatement::optimizeVariableAccess):
    22694         * kjs/nodes.h:
    22695 
    22696 2007-12-28  Eric Seidel  <[email protected]>
    22697 
    22698         Reviewed by Oliver.
    22699 
    22700         Fix (-0).toFixed() and re-factor a little
    22701         Fix (-0).toExponential() and printing of trailing 0s in toExponential
    22702         Fix toPrecision(nan) handling
    22703         http://bugs.webkit.org/show_bug.cgi?id=16640
    22704 
    22705         * kjs/number_object.cpp:
    22706         (KJS::numberToFixed):
    22707         (KJS::fractionalPartToString):
    22708         (KJS::numberToExponential):
    22709         (KJS::numberToPrecision):
    22710 
    22711 2007-12-28  Eric Seidel  <[email protected]>
    22712 
    22713         Reviewed by Sam.
    22714 
    22715         More changes to make number code readable
    22716 
    22717         * kjs/number_object.cpp:
    22718         (KJS::integer_part_noexp):
    22719         (KJS::numberToFixed):
    22720         (KJS::numberToExponential):
    22721 
    22722 2007-12-28  Eric Seidel  <[email protected]>
    22723 
    22724         Reviewed by Sam.
    22725 
    22726         More small cleanups to toPrecision
    22727 
    22728         * kjs/number_object.cpp:
    22729         (KJS::numberToPrecision):
    22730 
    22731 2007-12-28  Eric Seidel  <[email protected]>
    22732 
    22733         Reviewed by Sam.
    22734 
    22735         More small attempts to make number code readable
    22736 
    22737         * kjs/number_object.cpp:
    22738         (KJS::exponentialPartToString):
    22739         (KJS::numberToExponential):
    22740         (KJS::numberToPrecision):
    22741 
    22742 2007-12-28  Eric Seidel  <[email protected]>
    22743 
    22744         Reviewed by Sam.
    22745 
    22746         Break out callAsFunction implementations into static functions
    22747 
    22748         * kjs/number_object.cpp:
    22749         (KJS::numberToString):
    22750         (KJS::numberToFixed):
    22751         (KJS::numberToExponential):
    22752         (KJS::numberToPrecision):
    22753         (KJS::NumberProtoFunc::callAsFunction):
    22754 
    22755 2007-12-28  Eric Seidel  <[email protected]>
    22756 
    22757         Reviewed by Sam.
    22758 
    22759         Apply wkstyle/astyle and fix placement of *
    22760 
    22761         * kjs/number_object.cpp:
    22762         (KJS::NumberInstance::NumberInstance):
    22763         (KJS::NumberPrototype::NumberPrototype):
    22764         (KJS::NumberProtoFunc::NumberProtoFunc):
    22765         (KJS::integer_part_noexp):
    22766         (KJS::intPow10):
    22767         (KJS::NumberProtoFunc::callAsFunction):
    22768         (KJS::NumberObjectImp::NumberObjectImp):
    22769         (KJS::NumberObjectImp::getOwnPropertySlot):
    22770         (KJS::NumberObjectImp::getValueProperty):
    22771         (KJS::NumberObjectImp::implementsConstruct):
    22772         (KJS::NumberObjectImp::construct):
    22773         (KJS::NumberObjectImp::callAsFunction):
    22774         * kjs/object.cpp:
    22775         (KJS::JSObject::put):
    22776 
    22777 2007-12-27  Eric Seidel  <[email protected]>
    22778 
    22779         Reviewed by Sam.
    22780 
    22781         ASSERT in JavaScriptCore while viewing WICD test case
    22782         http://bugs.webkit.org/show_bug.cgi?id=16626
    22783        
    22784         * kjs/nodes.cpp:
    22785         (KJS::ForInNode::execute): move KJS_CHECK_EXCEPTION to proper place
    22786 
    22787 2007-12-26  Jan Michael Alonzo  <[email protected]>
    22788 
    22789         Reviewed by Alp Toker.
    22790 
    22791         http://bugs.webkit.org/show_bug.cgi?id=16390
    22792         Use autotools or GNU make as the build system for the GTK port
    22793 
    22794         * GNUmakefile.am: Added.
    22795 
    22796 2007-12-25  Maciej Stachowiak  <[email protected]>
    22797        
    22798         Reviewed by Oliver.
    22799                
    22800         - Remove unnecessary redundant check from property setting
    22801         http://bugs.webkit.org/show_bug.cgi?id=16602
    22802                
    22803         1.3% speedup on SunSpider.
    22804        
    22805         * kjs/object.cpp:
    22806         (KJS::JSObject::put): Don't do canPut check when not needed; let
    22807         the PropertyMap handle it.       
    22808         (KJS::JSObject::canPut): Don't check the static property
    22809         table. lookupPut does that already.
    22810        
    22811 2007-12-24  Alp Toker  <[email protected]>
    22812 
    22813         Fix builds that don't use AllInOneFile.cpp following breakage
    22814         introduced in r28973.
    22815 
    22816         * kjs/grammar.y:
    22817 
    22818 2007-12-24  Maciej Stachowiak  <[email protected]>
    22819 
    22820         Reviewed by Eric.
    22821 
    22822         - Optimize variable declarations
    22823         http://bugs.webkit.org/show_bug.cgi?id=16585
    22824        
    22825         3.5% speedup on SunSpider.
    22826 
    22827         var statements now result in either assignments or empty statements.
    22828        
    22829         This allows a couple of optimization opportunities:
    22830         - No need to branch at runtime to check if there is an initializer
    22831         - EmptyStatementNodes can be removed entirely (also done in this patch)
    22832         - Assignment expressions get properly optimized for local variables
    22833        
    22834         This patch also includes some code cleanup:
    22835         - Most of the old VarStatement/VarDecl logic is now only used for const declarations,
    22836           thus it is renamed appropriately
    22837         - AssignExprNode is gone
    22838        
    22839         * JavaScriptCore.exp:
    22840         * kjs/NodeInfo.h:
    22841         * kjs/grammar.y:
    22842         * kjs/nodes.cpp:
    22843         (KJS::SourceElements::append):
    22844         (KJS::ConstDeclNode::ConstDeclNode):
    22845         (KJS::ConstDeclNode::optimizeVariableAccess):
    22846         (KJS::ConstDeclNode::handleSlowCase):
    22847         (KJS::ConstDeclNode::evaluateSingle):
    22848         (KJS::ConstDeclNode::evaluate):
    22849         (KJS::ConstStatementNode::optimizeVariableAccess):
    22850         (KJS::ConstStatementNode::execute):
    22851         (KJS::VarStatementNode::optimizeVariableAccess):
    22852         (KJS::VarStatementNode::execute):
    22853         (KJS::ForInNode::ForInNode):
    22854         (KJS::ForInNode::optimizeVariableAccess):
    22855         (KJS::ForInNode::execute):
    22856         (KJS::FunctionBodyNode::initializeSymbolTable):
    22857         (KJS::ProgramNode::initializeSymbolTable):
    22858         (KJS::FunctionBodyNode::processDeclarations):
    22859         (KJS::ProgramNode::processDeclarations):
    22860         (KJS::EvalNode::processDeclarations):
    22861         * kjs/nodes.h:
    22862         (KJS::DeclarationStacks::):
    22863         (KJS::StatementNode::):
    22864         (KJS::ConstDeclNode::):
    22865         (KJS::ConstStatementNode::):
    22866         (KJS::EmptyStatementNode::):
    22867         (KJS::VarStatementNode::):
    22868         (KJS::ForNode::):
    22869         * kjs/nodes2string.cpp:
    22870         (KJS::ConstDeclNode::streamTo):
    22871         (KJS::ConstStatementNode::streamTo):
    22872         (KJS::ScopeNode::streamTo):
    22873         (KJS::VarStatementNode::streamTo):
    22874         (KJS::ForNode::streamTo):
    22875         (KJS::ForInNode::streamTo):
    22876 
    22877 2007-12-21  Mark Rowe  <[email protected]>
    22878 
    22879         Reviewed by Oliver Hunt.
    22880 
    22881         * JavaScriptCore.exp: Remove unused symbol to prevent a weak external symbol
    22882         being generated in JavaScriptCore.framework.
    22883 
    22884 2007-12-21  Darin Adler  <[email protected]>
    22885 
    22886         Requested by Maciej.
    22887 
    22888         * kjs/nodes.h: Use the new NEVER_INLINE here and eliminate the old
    22889         KJS_NO_INLINE. We don't want to have two, and we figured it was better
    22890         to keep the one that's in WTF.
    22891 
    22892 2007-12-21  Darin Adler  <[email protected]>
    22893 
    22894         Reviewed by Eric.
    22895 
    22896         - http://bugs.webkit.org/show_bug.cgi?id=16561
    22897           remove debugger overhead from non-debugged JavaScript execution
    22898 
    22899         1.022x as fast on SunSpider.
    22900 
    22901         * JavaScriptCore.exp: Updated.
    22902 
    22903         * kjs/NodeInfo.h: Renamed SourceElementsStub to SourceElements,
    22904         since that more accurately describes the role of this object, which
    22905         is a reference-counted wrapper for a Vector.
    22906 
    22907         * kjs/Parser.cpp:
    22908         (KJS::Parser::didFinishParsing): Changed parameter type to SourceElements,
    22909         and use plain assignment instead of set.
    22910         * kjs/Parser.h: Changed parameter type of didFinishParsing to a
    22911         SourceElements. Also changed m_sourceElements; we now use a RefPtr instead
    22912         of an OwnPtr as well.
    22913 
    22914         * kjs/grammar.y: Got rid of all the calls to release() on SourceElements.
    22915         That's now handed inside the constructors for various node types, since we now
    22916         use vector swapping instead.
    22917 
    22918         * kjs/nodes.cpp:
    22919         (KJS::Node::rethrowException): Added NEVER_INLINE, because this was getting inlined
    22920         and we want exception handling out of the normal code flow.
    22921         (KJS::SourceElements::append): Moved here from the header. This now handles
    22922         creating a BreakpointCheckStatement for each statement in the debugger case.
    22923         That way we can get breakpoint handling without having it in every execute function.
    22924         (KJS::BreakpointCheckStatement::BreakpointCheckStatement): Added.
    22925         (KJS::BreakpointCheckStatement::execute): Added. Contains the code that was formerly
    22926         in the StatementNode::hitStatement function and the KJS_BREAKPOINT macro.
    22927         (KJS::BreakpointCheckStatement::streamTo): Added.
    22928         (KJS::ArgumentListNode::evaluateList): Use KJS_CHECKEXCEPTIONVOID since the return
    22929         type is void.
    22930         (KJS::VarStatementNode::execute): Removed KJS_BREAKPOINT.
    22931         (KJS::BlockNode::BlockNode): Changed parameter type to SourceElements.
    22932         Changed code to use release since the class now contains a vector rather than
    22933         a vector point.
    22934         (KJS::BlockNode::optimizeVariableAccess): Updated since member is now a vector
    22935         rather than a vector pointer.
    22936         (KJS::BlockNode::execute): Ditto.
    22937         (KJS::ExprStatementNode::execute): Removed KJS_BREAKPOINT.
    22938         (KJS::IfNode::execute): Ditto.
    22939         (KJS::IfElseNode::execute): Ditto.
    22940         (KJS::DoWhileNode::execute): Ditto.
    22941         (KJS::WhileNode::execute): Ditto.
    22942         (KJS::ContinueNode::execute): Ditto.
    22943         (KJS::BreakNode::execute): Ditto.
    22944         (KJS::ReturnNode::execute): Ditto.
    22945         (KJS::WithNode::execute): Ditto.
    22946         (KJS::CaseClauseNode::optimizeVariableAccess): Updated since member is now a vector
    22947         rather than a vector pointer.
    22948         (KJS::CaseClauseNode::executeStatements): Ditto.
    22949         (KJS::SwitchNode::execute): Removed KJS_BREAKPOINT.
    22950         (KJS::ThrowNode::execute): Ditto.
    22951         (KJS::TryNode::execute): Ditto.
    22952         (KJS::ScopeNode::ScopeNode): Changed parameter type to SourceElements.
    22953         (KJS::ProgramNode::ProgramNode): Ditto.
    22954         (KJS::EvalNode::EvalNode): Ditto.
    22955         (KJS::FunctionBodyNode::FunctionBodyNode): Ditto.
    22956         (KJS::ScopeNode::optimizeVariableAccess): Updated since member is now a vector
    22957         rather than a vector pointer.
    22958 
    22959         * kjs/nodes.h: Removed hitStatement. Renamed SourceElements to StatementVector.
    22960         Renamed SourceElementsStub to SourceElements and made it derive from
    22961         ParserRefCounted rather than from Node, hold a vector rather than a pointer to
    22962         a vector, and changed the release function to swap with another vector rather
    22963         than the pointer idiom. Updated BlockNode and CaseClauseNode to hold actual
    22964         vectors instead of pointers to vectors. Added BreakpointCheckStatement.
    22965 
    22966         * kjs/nodes2string.cpp:
    22967         (KJS::statementListStreamTo): Changed to work on a vector instead of a pointer
    22968         to a vector.
    22969         (KJS::BlockNode::streamTo): Ditto.
    22970         (KJS::CaseClauseNode::streamTo):  Ditto.
    22971 
    22972         * wtf/AlwaysInline.h: Added NEVER_INLINE.
    22973         * wtf/PassRefPtr.h: Tweaked formatting. Added clear() function that matches the
    22974         ones in OwnPtr and auto_ptr.
    22975         * wtf/RefPtr.h: Ditto.
    22976 
    22977 2007-12-21  Darin Adler  <[email protected]>
    22978 
    22979         - fix broken regression tests
    22980 
    22981         The broken tests were fast/js/do-while-expression-value.html and
    22982         fast/js/while-expression-value.html.
    22983 
    22984         * kjs/nodes.cpp: Check in the correct version of this file. I had accidentally landed
    22985         an old version of my patch for bug 16471.
    22986         (KJS::statementListExecute): The logic here was backwards. Have to set the value
    22987         even for non-normal execution results.
    22988 
    22989 2007-12-20  Alexey Proskuryakov  <[email protected]>
    22990 
    22991         Windows build fix
    22992 
    22993         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Copy npruntime_internal.h
    22994         to WebKitBuild.
    22995 
    22996 2007-12-20  Eric Seidel  <[email protected]>
    22997 
    22998         Reviewed by mjs.
    22999        
    23000         Split IfNode into IfNode and IfElseNode for speedup.
    23001         http://bugs.webkit.org/show_bug.cgi?id=16470
    23002        
    23003         SunSpider claims this is 1.003x as fast as before.
    23004         (This required running with --runs 15 to get consistent enough results to tell!)
    23005 
    23006         * kjs/grammar.y:
    23007         * kjs/nodes.cpp:
    23008         (KJS::IfNode::optimizeVariableAccess):
    23009         (KJS::IfNode::execute):
    23010         (KJS::IfNode::getDeclarations):
    23011         (KJS::IfElseNode::optimizeVariableAccess):
    23012         (KJS::IfElseNode::execute):
    23013         (KJS::IfElseNode::getDeclarations):
    23014         * kjs/nodes.h:
    23015         (KJS::IfNode::):
    23016         (KJS::IfElseNode::):
    23017         * kjs/nodes2string.cpp:
    23018         (KJS::IfNode::streamTo):
    23019         (KJS::IfElseNode::streamTo):
    23020 
    23021 2007-12-20  Darin Adler  <[email protected]>
    23022 
    23023         Reviewed by Sam.
    23024 
    23025         * wtf/OwnPtr.h:
    23026         (WTF::operator==): Added.
    23027         (WTF::operator!=): Added.
    23028 
    23029 2007-12-20  Geoffrey Garen  <[email protected]>
    23030 
    23031         Reviewed by Oliver Hunt.
    23032        
    23033         AST optimization: Avoid NULL-checking ForNode's child nodes.
    23034        
    23035         0.6% speedup on SunSpider.
    23036        
    23037         This is a proof of concept patch that demonstrates how to optimize
    23038         grammar productions with optional components, like
    23039        
    23040             for (optional; optional; optional) {
    23041                 ...
    23042             }
    23043            
    23044         The parser emits NULL for an optional component that is not present.
    23045 
    23046         Instead of checking for a NULL child at execution time, a node that
    23047         expects an optional component to be present more often than not checks
    23048         for a NULL child at construction time, and substitutes a viable
    23049         alternative node in its place.
    23050 
    23051         (We'd like the parser to start emitting NULL a lot more once we teach
    23052         it to emit NULL for certain no-op productions like EmptyStatement and
    23053         VariableStatement, so, as a foundation, it's important for nodes with
    23054         NULL optional components to be fast.)
    23055 
    23056         * kjs/Parser.cpp:
    23057         (KJS::Parser::didFinishParsing): Check for NULL SourceElements. Also,
    23058         moved didFinishParsing into the .cpp file because adding a branch while
    23059         it was in the header file caused a substantial and inexplicable
    23060         performance regression. (Did I mention that GCC is crazy?)
    23061 
    23062         * kjs/grammar.y:
    23063 
    23064         * kjs/nodes.cpp:
    23065         (KJS::BlockNode::BlockNode): Check for NULL SourceElements.
    23066         (KJS::ForNode::optimizeVariableAccess): No need to check for NULL here.
    23067         (KJS::ForNode::execute): No need to check for NULL here.
    23068         * kjs/nodes.h:
    23069         (KJS::ForNode::): Check for NULL SourceElements. Substitute a TrueNode
    23070         because it's semantically harmless, and it evaluates to boolean in an
    23071         efficient manner.
    23072 
    23073 2007-12-20  Oliver Hunt  <[email protected]>
    23074 
    23075         Reviewed by Geoff.
    23076 
    23077         Slight logic reordering in JSImmediate::from(double)
    23078 
    23079         This gives a 0.6% improvement in SunSpider.
    23080 
    23081         * kjs/JSImmediate.h:
    23082         (KJS::JSImmediate::from):
    23083 
    23084 2007-12-20  Eric Seidel  <[email protected]>
    23085 
    23086         Reviewed by mjs.
    23087 
    23088         Fix major Array regression introduced by 28899.
    23089 
    23090         SunSpider claims this is at least 1.37x as fast as pre-regression. :)
    23091 
    23092         * kjs/array_instance.cpp: make Arrays fast again!
    23093 
    23094 2007-12-20  Eric Seidel  <[email protected]>
    23095 
    23096         Reviewed by Geoff, then re-rubber-stamped by Geoff after final search/replace and testing.
    23097 
    23098         Small reworking of Date code for 4% speedup on Date tests (0.2% overall)
    23099         http://bugs.webkit.org/show_bug.cgi?id=16537
    23100 
    23101         Make msToYear human-readable
    23102         Make msToDayInMonth slightly more readable and avoid recalculating msToYear
    23103         Remove use of isInLeapYear to avoid calling msToYear
    23104         Remove dayInYear call by changing msToDayInMonth to dayInMonthFromDayInYear
    23105         Remove more duplicate calls to dayInYear and getUTCOffset for further speedup
    23106 
    23107         * kjs/DateMath.cpp:
    23108         (KJS::daysFrom1970ToYear):
    23109         (KJS::msToYear):
    23110         (KJS::monthFromDayInYear):
    23111         (KJS::checkMonth):
    23112         (KJS::dayInMonthFromDayInYear):
    23113         (KJS::dateToDayInYear):
    23114         (KJS::getDSTOffsetSimple):
    23115         (KJS::getDSTOffset):
    23116         (KJS::gregorianDateTimeToMS):
    23117         (KJS::msToGregorianDateTime):
    23118 
    23119 2007-12-20  Rodney Dawes  <[email protected]>
    23120 
    23121         Reviewed by Darin Adler.
    23122 
    23123         Proxy includes of npruntime.h or npapi.h through npruntime_internal.h
    23124         Include stdio.h in npapi.h for the use of FILE with XP_UNIX defined
    23125         This is for building with X11, as some type and enum names conflict
    23126         with #define names in X11 headers.
    23127         http://bugs.webkit.org/show_bug.cgi?id=15669
    23128 
    23129         * JavaScriptCore.xcodeproj/project.pbxproj:
    23130         * bindings/NP_jsobject.h:
    23131         * bindings/npapi.h:
    23132         * bindings/npruntime.cpp:
    23133         * bindings/npruntime_impl.h:
    23134         * bindings/npruntime_priv.h:
    23135         * bindings/npruntime_internal.h:
    23136         * bindings/testbindings.cpp:
    23137         * bindings/c/c_class.h:
    23138         * bindings/c/c_runtime.h:
    23139         * bindings/c/c_utility.h:
    23140 
    23141 2007-12-20  Darin Adler  <[email protected]>
    23142 
    23143         - re-fix http://bugs.webkit.org/show_bug.cgi?id=16471
    23144           Completions need to be smaller (or not exist at all)
    23145 
    23146         Same patch as last time with the test failures problem fixed.
    23147 
    23148         * kjs/function.cpp:
    23149         (KJS::GlobalFuncImp::callAsFunction): Make sure to check the completion
    23150         type from newExec to see if the execute raised an exception.
    23151 
    23152 2007-12-20  Darin Adler  <[email protected]>
    23153 
    23154         - roll out that last change -- it was causing test failures;
    23155           I'll check it back in after fixing them
    23156 
    23157 2007-12-20  Darin Adler  <[email protected]>
    23158 
    23159         Reviewed by Eric.
    23160 
    23161         - http://bugs.webkit.org/show_bug.cgi?id=16471
    23162           Completions need to be smaller (or not exist at all)
    23163 
    23164         SuSpider shows 2.4% speedup.
    23165 
    23166         Stop using completions in the execution engine.
    23167         Instead, the completion type and label target are both
    23168         stored in the ExecState.
    23169 
    23170         * API/JSContextRef.cpp: Removed unneeded include of "completion.h".
    23171         * bindings/runtime_method.cpp: Removed unused execute function.
    23172         * bindings/runtime_method.h: Ditto.
    23173 
    23174         * kjs/ExecState.h: Added completionType, breakOrContinueTarget,
    23175         setCompletionType, setNormalCompletion, setBreakCompletion,
    23176         setContinueCompletion, setReturnValueCompletion, setThrowCompletion,
    23177         setInterruptedCompletion, m_completionType, and m_breakOrContinueTarget.
    23178 
    23179         * kjs/completion.h: Removed constructor and getter for target
    23180         for break and continue from Completion. This class is now only
    23181         used for the public API to Interpreter and such.
    23182 
    23183         * kjs/date_object.h: Removed unused execute function.
    23184 
    23185         * kjs/function.cpp:
    23186         (KJS::FunctionImp::callAsFunction): Removed some unneeded
    23187         exception processing. Updated to call the new execute function
    23188         and to get the completion type from the ExecState. Merged in
    23189         the execute function, which repeated some of the same logic and
    23190         was called only from here.
    23191         (KJS::GlobalFuncImp::callAsFunction): More of the same for eval.
    23192         * kjs/function.h: Removed execute.
    23193 
    23194         * kjs/interpreter.cpp:
    23195         (KJS::Interpreter::evaluate): Added code to convert the result of
    23196         execut into a Completion.
    23197 
    23198         * kjs/nodes.cpp:
    23199         (KJS::Node::setErrorCompletion): Renamed from createErrorCompletion.
    23200         Now sets the completion type in the ExecState.
    23201         (KJS::Node::rethrowException): Now sets the completion type in the
    23202         ExecState.
    23203         (KJS::StatementNode::hitStatement): Now sets the completion type in
    23204         the ExecState.
    23205         (KJS::VarStatementNode::execute): Updated to put completion type in
    23206         the ExecState instead of a Completion object.
    23207         (KJS::statementListExecute): Ditto. Also changed the for loop to use
    23208         indices instead of iterators.
    23209         (KJS::BlockNode::execute): Updated return type.
    23210         (KJS::EmptyStatementNode::execute): Updated to put completion type in
    23211         the ExecState instead of a Completion object.
    23212         (KJS::ExprStatementNode::execute): Ditto.
    23213         (KJS::IfNode::execute): Ditto.
    23214         (KJS::DoWhileNode::execute): Ditto. Also streamlined the logic a little
    23215         to make the normal case a little faster and moved the end outside the
    23216         loop so that "break" can do a break.
    23217         (KJS::WhileNode::execute): Ditto.
    23218         (KJS::ForNode::execute): Ditto.
    23219         (KJS::ForInNode::execute): Ditto.
    23220         (KJS::ContinueNode::execute): Updated to put completion type in
    23221         the ExecState instead of a Completion object.
    23222         (KJS::BreakNode::execute): Ditto.
    23223         (KJS::ReturnNode::execute): Ditto.
    23224         (KJS::WithNode::execute): Ditto.
    23225         (KJS::CaseClauseNode::executeStatements): Ditto. Also renamed to have
    23226         execute in its name to reflect the fact that it's a member of the same
    23227         family of functions.
    23228         (KJS::CaseBlockNode::executeBlock): Ditto.
    23229         (KJS::SwitchNode::execute): Ditto.
    23230         (KJS::LabelNode::execute): Ditto.
    23231         (KJS::ThrowNode::execute): Ditto.
    23232         (KJS::TryNode::execute): Ditto.
    23233         (KJS::ProgramNode::execute): Ditto.
    23234         (KJS::EvalNode::execute): Ditto.
    23235         (KJS::FunctionBodyNode::execute): Ditto.
    23236         (KJS::FuncDeclNode::execute): Ditto.
    23237 
    23238         * kjs/nodes.h: Renamed setErrorCompletion to createErrorCompletion, made
    23239         hitStatement protected, changed return value of execute to a JSValue,
    23240         renamed evalStatements to executeStatements, and evalBlock to executeBlock.
    23241 
    23242         * kjs/number_object.h: Removed unused execute function.
    23243 
    23244 2007-12-20  Geoffrey Garen  <[email protected]>
    23245 
    23246         Added Radar number.
    23247 
    23248         * kjs/nodes.cpp:
    23249         (KJS::ProgramNode::processDeclarations):
    23250 
    23251 2007-12-20  Geoffrey Garen  <[email protected]>
    23252 
    23253         Linux build fix: config.h has to come first.
    23254 
    23255         * kjs/error_object.cpp:
    23256 
    23257 2007-12-19  Geoffrey Garen  <[email protected]>
    23258 
    23259         Reviewed by Oliver Hunt.
    23260        
    23261         Optimized global access to global variables, using a symbol table.
    23262        
    23263         SunSpider reports a 1.5% overall speedup, a 6.2% speedup on 3d-morph,
    23264         and a whopping 33.1% speedup on bitops-bitwise-and.
    23265 
    23266         * API/JSCallbackObjectFunctions.h: Replaced calls to JSObject:: with
    23267         calls to Base::, since JSObject is not always our base class. This
    23268         was always a bug, but the bug is even more apparent after some of my
    23269         changes.
    23270 
    23271         (KJS::::staticFunctionGetter): Replaced use of getDirect with call to
    23272         getOwnPropertySlot. Global declarations are no longer stored in the
    23273         property map, so a call to getDirect is insufficient for finding
    23274         override properties.
    23275 
    23276         * API/testapi.c:
    23277         * API/testapi.js: Added test for the getDirect change mentioned above.
    23278 
    23279         * kjs/ExecState.cpp:
    23280         * kjs/ExecState.h: Dialed back the optimization to store a direct
    23281         pointer to the localStorage buffer. One ExecState can grow the global
    23282         object's localStorage without another ExecState's knowledge, so
    23283         ExecState can't store a direct pointer to the localStorage buffer
    23284         unless/until we invent a way to update all the relevant ExecStates.
    23285 
    23286         * kjs/JSGlobalObject.cpp: Inserted the symbol table into get and put
    23287         operations.
    23288         (KJS::JSGlobalObject::reset): Reset the symbol table and local storage,
    23289         too. Also, clear the property map here, removing the need for a
    23290         separate call.
    23291 
    23292         * kjs/JSVariableObject.cpp:
    23293         * kjs/JSVariableObject.h: Added support for saving localStorage and the
    23294         symbol table to the back/forward cache, and restoring them.
    23295 
    23296         * kjs/function.cpp:
    23297         (KJS::GlobalFuncImp::callAsFunction): Renamed progNode to evalNode
    23298         because it's an EvalNode, not a ProgramNode.
    23299 
    23300         * kjs/lookup.h:
    23301         (KJS::cacheGlobalObject): Replaced put with faster putDirect, since
    23302         that's how the rest of lookup.h works. putDirect is safe here because
    23303         cacheGlobalObject is only used for objects whose names are not valid
    23304         identifiers.
    23305 
    23306         * kjs/nodes.cpp: The good stuff!
    23307 
    23308         (KJS::EvalNode::processDeclarations): Replaced hasProperty with
    23309         the new hasOwnProperty, which is slightly faster.
    23310 
    23311         * kjs/object.h: Nixed clearProperties because clear() does this job now.
    23312 
    23313         * kjs/property_map.cpp:
    23314         * kjs/property_map.h: More back/forward cache support.
    23315        
    23316         * wtf/Vector.h:
    23317         (WTF::::grow): Added fast non-branching grow function. I used it in
    23318         an earlier version of this patch, even though it's not used anymore.
    23319 
    23320 2007-12-09  Mark Rowe  <[email protected]>
    23321 
    23322         Reviewed by Oliver Hunt.
    23323 
    23324         Build fix for non-Mac platforms.  Move NodeInfo into its own header so that the YYTYPE
    23325         declaration in grammar.h is able to declare members of that type.
    23326 
    23327         * kjs/NodeInfo.h: Added.
    23328         (KJS::createNodeInfo):
    23329         (KJS::mergeDeclarationLists):
    23330         (KJS::appendToVarDeclarationList):
    23331         * kjs/grammar.y:
    23332         * kjs/lexer.cpp:
    23333 
    23334 2007-12-19  Oliver Hunt  <[email protected]>
    23335 
    23336         Make appendToVarDeclarationList static
    23337 
    23338         RS=Weinig.
    23339 
    23340         * kjs/grammar.y:
    23341 
    23342 2007-12-18  Oliver Hunt  <[email protected]>
    23343 
    23344         Remove dead code due to removal of post-parse declaration discovery.
    23345 
    23346         RS=Geoff.
    23347 
    23348         Due to the removal of the declaration discovery pass after parsing we
    23349         no longer need any of the logic used for that discovery.
    23350 
    23351         * kjs/nodes.cpp:
    23352         (KJS::Node::Node):
    23353         (KJS::VarDeclNode::VarDeclNode):
    23354         (KJS::BlockNode::BlockNode):
    23355         (KJS::ForInNode::ForInNode):
    23356         (KJS::CaseBlockNode::CaseBlockNode):
    23357         * kjs/nodes.h:
    23358         (KJS::VarStatementNode::):
    23359         (KJS::IfNode::):
    23360         (KJS::DoWhileNode::):
    23361         (KJS::WhileNode::):
    23362         (KJS::WithNode::):
    23363         (KJS::LabelNode::):
    23364         (KJS::TryNode::):
    23365         (KJS::FuncDeclNode::):
    23366         (KJS::CaseClauseNode::):
    23367         (KJS::ClauseListNode::):
    23368         (KJS::SwitchNode::):
    23369 
    23370 2007-12-18  Oliver Hunt  <[email protected]>
    23371 
    23372         Replace post-parse pass to find declarations with logic in the parser itself
    23373 
    23374         Reviewed by Geoff.
    23375 
    23376         Instead of finding declarations in a pass following the initial parsing of
    23377         a program, we incorporate the logic directly into the parser.  This lays
    23378         the groundwork for further optimisations (such as improving performance in
    23379         declaration expressions -- var x = y; -- to match that of standard assignment)
    23380         in addition to providing a 0.4% performance improvement in SunSpider.
    23381 
    23382         * JavaScriptCore.exp:
    23383         * kjs/Parser.cpp:
    23384         (KJS::Parser::parse):
    23385         * kjs/Parser.h:
    23386         (KJS::Parser::didFinishParsing):
    23387         (KJS::Parser::parse):
    23388         * kjs/grammar.y:
    23389         * kjs/nodes.cpp:
    23390         (KJS::ParserTracked::ParserTracked):
    23391         (KJS::ParserTracked::~ParserTracked):
    23392         (KJS::ParserTracked::ref):
    23393         (KJS::ParserTracked::deref):
    23394         (KJS::ParserTracked::refcount):
    23395         (KJS::ParserTracked::clearNewTrackedObjects):
    23396         (KJS::Node::Node):
    23397         (KJS::ScopeNode::ScopeNode):
    23398         (KJS::ProgramNode::ProgramNode):
    23399         (KJS::EvalNode::EvalNode):
    23400         (KJS::FunctionBodyNode::FunctionBodyNode):
    23401         (KJS::FunctionBodyNode::initializeSymbolTable):
    23402         (KJS::FunctionBodyNode::processDeclarations):
    23403         * kjs/nodes.h:
    23404         (KJS::ParserTracked::):
    23405         (KJS::Node::):
    23406         (KJS::ScopeNode::):
    23407 
    23408 2007-12-18  Xan Lopez  <[email protected]>
    23409 
    23410         Reviewed by Geoff.
    23411 
    23412         Fix http://bugs.webkit.org/show_bug.cgi?id=14521
    23413         Bug 14521: JavaScriptCore fails to build on Linux/PPC gcc 4.1.2
    23414        
    23415         * wtf/TCSpinLock.h:
    23416         (TCMalloc_SpinLock::Unlock):
    23417 
    23418         Use less strict memory operand constraint on inline asm generation.
    23419         PLATFORM(DARWIN) left unpatched due to Apple's GCC bug.
    23420 
    23421         Patch by David Kilzer <[email protected]>
    23422 
    23423 2007-12-18  Mark Rowe  <[email protected]>
    23424 
    23425         Rubber-stamped by Maciej Stachowiak.
    23426 
    23427         Remove outdated and non-functioning project files for the Apollo port.
    23428 
    23429         * JavaScriptCore.apolloproj: Removed.
    23430 
    23431 2007-12-18  Darin Adler  <[email protected]>
    23432 
    23433         - fix Windows build
    23434 
    23435         * pcre/pcre_exec.cpp:
    23436         (jsRegExpExecute): Change back from false/true to 0/1 -- I probably should not have
    23437         deleted MATCH_MATCH and MATCH_NOMATCH, but I'm going to leave them out.
    23438 
    23439 2007-12-18  Darin Adler  <[email protected]>
    23440 
    23441         Reviewed by Geoff.
    23442 
    23443         - fix http://bugs.webkit.org/show_bug.cgi?id=16458
    23444           REGRESSION (r28164): regular expressions can now hang due to lack of a match limit
    23445           <rdar://problem/5636067>
    23446 
    23447         Test: fast/regex/slow.html
    23448 
    23449         Slows down SunSpider a bit (about 1.01x); filed a bug to follow up on that:
    23450         http://bugs.webkit.org/show_bug.cgi?id=16503
    23451 
    23452         * pcre/pcre.h: Changed name of error code to not specifically mention "recursion".
    23453         * pcre/pcre_exec.cpp:
    23454         (match): Replaced the depth limit, MATCH_RECURSION_LIMIT, with a total match looping
    23455         limit, matchLimit. Also eliminated the constants for MATCH_MATCH and MATCH_NOMATCH,
    23456         since they are just true and false (1 and 0).
    23457         (jsRegExpExecute): More of the MATCH_MATCH change.
    23458 
    23459 2007-12-17  Darin Adler  <[email protected]>
    23460 
    23461         - speculative build fix for non-gcc platforms
    23462 
    23463         * pcre/pcre_exec.cpp: (match): Remove unused cases from return switch.
    23464 
    23465 2007-12-16  Mark Rowe  <[email protected]>
    23466 
    23467         Speculative build fix for non-Mac platforms.
    23468 
    23469         * pcre/pcre_compile.cpp: Include string.h for memset, memmove, etc.
    23470 
    23471 2007-12-16  Darin Adler  <[email protected]>
    23472 
    23473         Reviewed by Maciej.
    23474 
    23475         - http://bugs.webkit.org/show_bug.cgi?id=16438
    23476         - removed some more unused code
    23477         - changed quite a few more names to WebKit-style
    23478         - moved more things out of pcre_internal.h
    23479         - changed some indentation to WebKit-style
    23480         - improved design of the functions for reading and writing
    23481           2-byte values from the opcode stream (in pcre_internal.h)
    23482 
    23483         * pcre/dftables.cpp:
    23484         (main): Added the kjs prefix a normal way in lieu of using macros.
    23485 
    23486         * pcre/pcre_compile.cpp: Moved some definitions here from pcre_internal.h.
    23487         (errorText): Name changes, fewer typedefs.
    23488         (checkEscape): Ditto. Changed uppercase conversion to use toASCIIUpper.
    23489         (isCountedRepeat): Name change.
    23490         (readRepeatCounts): Name change.
    23491         (firstSignificantOpcode): Got rid of the use of OP_lengths, which is
    23492         very lightly used here. Hard-coded the length of OP_BRANUMBER.
    23493         (firstSignificantOpcodeSkippingAssertions): Ditto. Also changed to
    23494         use the advanceToEndOfBracket function.
    23495         (getOthercaseRange): Name changes.
    23496         (encodeUTF8): Ditto.
    23497         (compileBranch): Name changes. Removed unused after_manual_callout and
    23498         the code to handle it. Removed code to handle OP_ONCE since we never
    23499         emit this opcode. Changed to use advanceToEndOfBracket in more places.
    23500         (compileBracket): Name changes.
    23501         (branchIsAnchored): Removed code to handle OP_ONCE since we never emit
    23502         this opcode.
    23503         (bracketIsAnchored): Name changes.
    23504         (branchNeedsLineStart): More fo the same.
    23505         (bracketNeedsLineStart): Ditto.
    23506         (branchFindFirstAssertedCharacter): Removed OP_ONCE code.
    23507         (bracketFindFirstAssertedCharacter): More of the same.
    23508         (calculateCompiledPatternLengthAndFlags): Ditto.
    23509         (returnError): Name changes.
    23510         (jsRegExpCompile): Ditto.
    23511 
    23512         * pcre/pcre_exec.cpp: Moved some definitions here from pcre_internal.h.
    23513         (matchRef): Updated names.
    23514         Improved macros to use the do { } while(0) idiom so they expand to single
    23515         statements rather than to blocks or multiple statements. And refeactored
    23516         the recursive match macros.
    23517         (MatchStack::pushNewFrame): Name changes.
    23518         (getUTF8CharAndIncrementLength): Name changes.
    23519         (match): Name changes. Removed the ONCE opcode.
    23520         (jsRegExpExecute): Name changes.
    23521 
    23522         * pcre/pcre_internal.h: Removed quite a few unneeded includes. Rewrote
    23523         quite a few comments. Removed the macros that add kjs prefixes to the
    23524         functions with external linkage; instead renamed the functions. Removed
    23525         the unneeded typedefs pcre_uint16, pcre_uint32, and uschar. Removed the
    23526         dead and not-all-working code for LINK_SIZE values other than 2, although
    23527         we aim to keep the abstraction working. Removed the OP_LENGTHS macro.
    23528         (put2ByteValue): Replaces put2ByteOpcodeValueAtOffset.
    23529         (get2ByteValue): Replaces get2ByteOpcodeValueAtOffset.
    23530         (put2ByteValueAndAdvance): Replaces put2ByteOpcodeValueAtOffsetAndAdvance.
    23531         (putLinkValueAllowZero): Replaces putOpcodeValueAtOffset; doesn't do the
    23532         addition, since a comma is really no better than a plus sign. Added an
    23533         assertion to catch out of range values and changed the parameter type to
    23534         int rather than unsigned.
    23535         (getLinkValueAllowZero): Replaces getOpcodeValueAtOffset.
    23536         (putLinkValue): New function that most former callers of the
    23537         putOpcodeValueAtOffset function can use; asserts the value that is
    23538         being stored is non-zero and then calls putLinkValueAllowZero.
    23539         (getLinkValue): Ditto.
    23540         (putLinkValueAndAdvance): Replaces putOpcodeValueAtOffsetAndAdvance. No
    23541         caller was using an offset, which makes sense given the advancing behavior.
    23542         (putLinkValueAllowZeroAndAdvance): Ditto.
    23543         (isBracketOpcode): Added. For use in an assertion.
    23544         (advanceToEndOfBracket): Renamed from moveOpcodePtrPastAnyAlternateBranches,
    23545         and removed comments about how it's not well designed. This function takes
    23546         a pointer to the beginning of a bracket and advances to the end of the
    23547         bracket.
    23548 
    23549         * pcre/pcre_tables.cpp: Updated names.
    23550         * pcre/pcre_ucp_searchfuncs.cpp:
    23551         (kjs_pcre_ucp_othercase): Ditto.
    23552         * pcre/pcre_xclass.cpp:
    23553         (getUTF8CharAndAdvancePointer): Ditto.
    23554         (kjs_pcre_xclass): Ditto.
    23555         * pcre/ucpinternal.h: Ditto.
    23556 
    23557         * wtf/ASCIICType.h:
    23558         (WTF::isASCIIAlpha): Added an int overload, like the one we already have for
    23559         isASCIIDigit.
    23560         (WTF::isASCIIAlphanumeric): Ditto.
    23561         (WTF::isASCIIHexDigit): Ditto.
    23562         (WTF::isASCIILower): Ditto.
    23563         (WTF::isASCIISpace): Ditto.
    23564         (WTF::toASCIILower): Ditto.
    23565         (WTF::toASCIIUpper): Ditto.
    23566 
    23567 2007-12-16  Darin Adler  <[email protected]>
    23568 
    23569         Reviewed by Maciej.
    23570 
    23571         - fix http://bugs.webkit.org/show_bug.cgi?id=16459
    23572           REGRESSION: assertion failure with regexp with \B in a case-ignoring character range
    23573           <rdar://problem/5646361>
    23574 
    23575         The problem was that \B was not handled properly in character classes.
    23576 
    23577         Test: fast/js/regexp-overflow.html
    23578 
    23579         * pcre/pcre_compile.cpp:
    23580         (check_escape): Added handling of ESC_b and ESC_B in character classes here.
    23581         Allows us to get rid of the handling of \b in character classes from all the
    23582         call sites that handle it separately and to handle \B properly as well.
    23583         (compileBranch): Remove the ESC_b handling, since it's not needed any more.
    23584         (calculateCompiledPatternLengthAndFlags): Ditto.
    23585 
    23586 2007-12-16  Mark Rowe  <[email protected]>
    23587 
    23588         Reviewed by Maciej Stachowiak.
    23589 
    23590         Fix http://bugs.webkit.org/show_bug.cgi?id=16448
    23591         Bug 16448: [GTK] Celtic Kane JavaScript performance on Array test is slow relative to Mac
    23592 
    23593         * kjs/array_instance.cpp:
    23594         (KJS::compareByStringPairForQSort):
    23595         (KJS::ArrayInstance::sort): Convert JSValue's to strings once up front and then sort the
    23596         results.  This avoids calling toString twice per comparison, but requires a temporary buffer
    23597         so we only use this approach in cases where the array being sorted is not too large.
    23598 
    23599 2007-12-16  Geoffrey Garen  <[email protected]>
    23600 
    23601         Reviewed by Darin Adler and Maciej Stachowiak.
    23602        
    23603         More refactoring to support global variable optimization.
    23604        
    23605         Changed SymbolTable to use RefPtr<UString::Rep> as its key instead of
    23606         UString::Rep*. With globals, the symbol table can outlast the
    23607         declaration node for any given symbol, so the symbol table needs to ref
    23608         its symbol names.
    23609        
    23610         In support, specialized HashMaps with RefPtr keys to allow lookup
    23611         via raw pointer, avoiding refcount churn.
    23612        
    23613         SunSpider reports a .6% speedup (prolly just noise).
    23614 
    23615         * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added new file: wtf/RefPtrHashMap.h
    23616         * JavaScriptCore.xcodeproj/project.pbxproj: ditto
    23617 
    23618         * kjs/JSVariableObject.cpp:
    23619         (KJS::JSVariableObject::getPropertyNames): Symbol table keys are RefPtrs now.
    23620 
    23621         * kjs/SymbolTable.h: Modified key traits to match RefPtr. Added a
    23622         static Rep* for null, which helps compute the deletedValue() trait.
    23623 
    23624         * wtf/HashMap.h: #include the RefPtr specialization so everyone can use it.
    23625 
    23626         * wtf/RefPtrHashMap.h: Copied from wtf/HashMap.h. Added overloaded versions
    23627         of find(), contains(), get(), set(), add(), remove(), and take() that take
    23628         raw pointers as keys.
    23629 
    23630 2007-12-16  Alexey Proskuryakov  <[email protected]>
    23631 
    23632         Reviewed by Darin.
    23633 
    23634         http://bugs.webkit.org/show_bug.cgi?id=16162
    23635         Problems with float parsing on Linux (locale-dependent parsing was used).
    23636 
    23637         * kjs/dtoa.cpp: Removed USE_LOCALE to reduce future confusion.
    23638         * kjs/lexer.cpp: (KJS::Lexer::lex): Parse with kjs_strtod, not the system one.
    23639 
    23640 2007-12-14  Alp Toker  <[email protected]>
    23641 
    23642         Reviewed by Mark Rowe.
    23643 
    23644         Enable the AllInOneFile.cpp optimization for the GTK+ port.
    23645 
    23646         * JavaScriptCore.pri:
    23647 
    23648 2007-12-14  Mark Rowe  <[email protected]>
    23649 
    23650         Unreviewed.  Remove commented out fprintf's that were for debugging purposes only.
    23651 
    23652         * wtf/FastMalloc.cpp:
    23653         (WTF::TCMalloc_PageHeap::IncrementalScavenge):
    23654 
    23655 2007-12-14  Mark Rowe  <[email protected]>
    23656 
    23657         Reviewed by Maciej Stachowiak.
    23658 
    23659         Don't use the MADV_DONTNEED code path for now as it has no effect on Mac OS X and is
    23660         currently untested on other platforms.
    23661 
    23662         * wtf/TCSystemAlloc.cpp:
    23663         (TCMalloc_SystemRelease): Return after releasing memory rather than potentially falling
    23664         through into another mechanism if multiple are supported.
    23665 
    23666 2007-12-14  Alp Toker  <[email protected]>
    23667 
    23668         Build fix for GTK+/Qt and ports that don't use AllInOneFile.cpp.
    23669 
    23670         Include UnusedParam.h.
    23671 
    23672         * wtf/TCSystemAlloc.cpp:
    23673 
    23674 2007-12-14  Oliver Hunt  <[email protected]>
    23675 
    23676         Reviewed by Stephanie.
    23677 
    23678         Fix build on windows
    23679 
    23680         * wtf/FastMalloc.cpp:
    23681         (WTF::TCMalloc_PageHeap::IncrementalScavenge):
    23682 
    23683 2007-12-14  Dan Bernstein  <[email protected]>
    23684 
    23685         - try again to fix the Windows build
    23686 
    23687         * wtf/TCSystemAlloc.cpp:
    23688         (TCMalloc_SystemRelease):
    23689 
    23690 2007-12-14  Dan Bernstein  <[email protected]>
    23691 
    23692         - try to fix the Windows build
    23693 
    23694         * wtf/TCSystemAlloc.cpp:
    23695         (TCMalloc_SystemRelease):
    23696 
    23697 2007-12-14  Mark Rowe <[email protected]>
    23698 
    23699         Reviewed by Maciej and Oliver.
    23700 
    23701         Add final changes to make TCMalloc release memory to the system.
    23702         This results in a 0.4% regression against ToT, but this is offset
    23703         against the gains made by the original TCMalloc r38 merge - in fact
    23704         we retain around 0.3-0.4% progression overall.
    23705 
    23706         * wtf/FastMalloc.cpp:
    23707         (WTF::InitSizeClasses):
    23708         (WTF::TCMalloc_PageHeap::IncrementalScavenge):
    23709         * wtf/TCSystemAlloc.cpp:
    23710         (TCMalloc_SystemRelease):
    23711 
    23712 2007-12-14  Darin Adler  <[email protected]>
    23713 
    23714         Reviewed by Sam.
    23715 
    23716         - removed unnecessary includes of "Vector.h"
    23717 
    23718         * wtf/HashMap.h:
    23719         (WTF::copyKeysToVector): Make the type of the vector be a template parameter.
    23720         This allows copying keys into a vector of a base class or one with an inline capacity.
    23721         (WTF::copyValuesToVector): Ditto.
    23722         * wtf/HashSet.h:
    23723         (WTF::copyToVector): Ditto.
    23724 
    23725 2007-12-14  Anders Carlsson  <[email protected]>
    23726 
    23727         Reviewed by Darin and Geoff.
    23728 
    23729         <rdar://problem/5619295>
    23730         REGRESSION: 303-304: Embedded YouTube video fails to render- JS errors (16150) (Flash 9)
    23731        
    23732         Get rid of unnecessary and incorrect security checks for plug-ins accessing JavaScript objects.
    23733        
    23734         The way this used to work was that each NPObject that wrapped a JSObject would have a root object
    23735         corresponding to the frame object (used for managing the lifecycle) and an origin root object (used for
    23736         doing security checks).
    23737        
    23738         This would prevent a plug-in from accessing a frame's window object if it's security origin was different
    23739         (some parts of the window, such as the location object, can be accessed from frames with different security
    23740         origins, and those checks are being done in WebCore).
    23741        
    23742         Also, if a plug-in were to access a window object of a frame that later went away, it could lead to that
    23743         Window JSObject being garbage collected and the NPObject pointing to freed memory.
    23744        
    23745         How this works now is that there is no origin root object anymore, and all NPObject wrappers that are created
    23746         for a plug-in will have the root object of the containing frame of that plug-in.
    23747        
    23748         * bindings/NP_jsobject.cpp:
    23749         (jsDeallocate):
    23750         Don't free the origin root object.
    23751        
    23752         (_NPN_CreateScriptObject):
    23753         Remove the origin root object parameter.
    23754        
    23755         (_NPN_InvokeDefault):
    23756         (_NPN_Invoke):
    23757         (_NPN_Evaluate):
    23758         (_NPN_GetProperty):
    23759         (_NPN_SetProperty):
    23760         (_NPN_RemoveProperty):
    23761         (_NPN_HasProperty):
    23762         (_NPN_HasMethod):
    23763         (_NPN_Enumerate):
    23764         Get rid of all security checks.
    23765        
    23766         * bindings/NP_jsobject.h:
    23767         Remove originRootObject from the JavaScriptObject struct.
    23768        
    23769         * bindings/c/c_utility.cpp:
    23770         (KJS::Bindings::convertValueToNPVariant):
    23771         Always use the root object from the ExecState.
    23772        
    23773 2007-12-13  Steve Falkenburg  <[email protected]>
    23774 
    23775         Move source file generation into its own vcproj to fix build dependencies.
    23776 
    23777         Reviewed by Adam.
    23778 
    23779         * JavaScriptCore.vcproj/JavaScriptCore.sln:
    23780         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    23781         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Added.
    23782         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Added.
    23783         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
    23784 
    23785 2007-12-13  Alp Toker  <[email protected]>
    23786 
    23787         http://bugs.webkit.org/show_bug.cgi?id=16406
    23788         [Gtk] JavaScriptCore needs -lpthread
    23789 
    23790         Build fix for Debian and any other platforms that don't implicitly
    23791         link to pthread.
    23792 
    23793         Link to pthread on non-Windows platforms until this dependency is
    23794         removed from JSC.
    23795 
    23796 2007-12-11  Geoffrey Garen  <[email protected]>
    23797 
    23798         Reviewed by Sam Weinig.
    23799        
    23800         Build fix: Note some variables that are used only for ASSERTs.
    23801 
    23802         * API/testapi.c:
    23803         (Base_finalize):
    23804         (globalObject_initialize):
    23805         (testInitializeFinalize):
    23806 
    23807 2007-12-11  Geoffrey Garen  <[email protected]>
    23808 
    23809         Reviewed by Darin Adler.
    23810        
    23811         Fixed: All JS tests crash on Windows.
    23812 
    23813         NDEBUG wasn't defined when compiling testkjs in release builds, so the
    23814         HashTable definition in HashTable.h included an extra data member.
    23815 
    23816         The solution was to add NDEBUG to the release testkjs configuration on
    23817         Windows and Mac.
    23818        
    23819         For giggles, I also added other missing #defines to testkjs on Windows.
    23820 
    23821         * Configurations/Base.xcconfig:
    23822         * Configurations/JavaScriptCore.xcconfig:
    23823         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
    23824         * JavaScriptCore.xcodeproj/project.pbxproj:
    23825         * kjs/testkjs.cpp:
    23826         (main):
    23827 
    23828 2007-12-11  Geoffrey Garen  <[email protected]>
    23829 
    23830         Reviewed by Darin Adler.
    23831        
    23832         Removed bogus ASSERT.
    23833        
    23834         ASSERT should only be used when we know that a code path will not be
    23835         taken. This code path is taken often during the jsFunFuzz test.
    23836 
    23837         * pcre/pcre_exec.cpp:
    23838         (jsRegExpExecute):
    23839 
    23840 2007-12-11  Darin Adler  <[email protected]>
    23841 
    23842         * wtf/unicode/qt4/UnicodeQt4.h: Try to fix Qt build by adding U16_IS_SINGLE.
    23843 
    23844 2007-12-10  Darin Adler  <[email protected]>
    23845 
    23846         Reviewed by Sam Weinig.
    23847 
    23848         - fix http://bugs.webkit.org/show_bug.cgi?id=16379
    23849           REGRESSION(r28525): Failures in http/tests/xmlhttprequest/response-encoding.html and
    23850           fast/dom/xmlhttprequest-html-response-encoding.html
    23851           and <rdar://problem/5640230> REGRESSION (306A4-ToT): Access violation in PCRE function
    23852           find_firstassertedchar
    23853 
    23854         Test: fast/js/regexp-find-first-asserted.html
    23855 
    23856         * pcre/pcre_compile.cpp:
    23857         (compileBracket): Take out unnecessary initialization of out parameters.
    23858         (branchFindFirstAssertedCharacter): Added. Broke out the half of the function that handles
    23859         a branch.
    23860         (bracketFindFirstAssertedCharacter): Renamed from find_firstassertedchar. Also removed the
    23861         options parameter -- the caller can handle the options.
    23862         (jsRegExpCompile): Changed call site to call the appropriate bracket or branch version of
    23863         the find_firstassertedchar function. Also put the REQ_IGNORE_CASE code here instead of
    23864         passing in the options.
    23865 
    23866 2007-12-10  Geoffrey Garen  <[email protected]>
    23867 
    23868         Reviewed by Sam Weinig.
    23869 
    23870         Split this:
    23871        
    23872                             FunctionBodyNode
    23873                                     ^
    23874                                     |
    23875                                 ProgramNode
    23876            
    23877         into this:
    23878            
    23879                                 ScopeNode
    23880                 ^                   ^                   ^
    23881                 |                   |                   |
    23882         FunctionBodyNode        ProgramNode         EvalNode
    23883 
    23884         in preparation for specializing each class more while optimizing global
    23885         variable access.
    23886        
    23887         Also removed some cruft from the FunctionBodyNode interface to simplify
    23888         things.
    23889        
    23890         SunSpider says this patch is a .8% speedup, which seems reasonable,
    23891         since it eliminates a few branches and adds KJS_FAST_CALL in a few
    23892         places.
    23893        
    23894         Layout tests and JS tests pass. Also, this baby builds on Windows! (Qt
    23895         mileage may vary...)
    23896 
    23897 2007-12-10  Geoffrey Garen  <[email protected]>
    23898 
    23899         RS by Mark Rowe.
    23900        
    23901         Mac build fix: added some exported symbols, now that Parser::parse is
    23902         defined in the header.
    23903 
    23904         * JavaScriptCore.exp:
    23905 
    23906 2007-12-10  Sam Weinig  <[email protected]>
    23907 
    23908         Build fix.
    23909 
    23910         Template methods need to be in the header.
    23911 
    23912         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    23913         * kjs/Parser.cpp:
    23914         * kjs/Parser.h:
    23915         (KJS::Parser::parse):
    23916 
    23917 2007-12-10  Geoffrey Garen  <[email protected]>
    23918 
    23919         Reviewed by Sam Weinig.
    23920        
    23921         Merged different implementations of Parser::parse into a single,
    23922         templatized implementation, in preparation for adding yet another
    23923         implementation for "eval" code.
    23924        
    23925         JS and layout tests pass.
    23926 
    23927 2007-12-10  Timothy Hatcher  <[email protected]>
    23928 
    23929         Reviewed by Mark Rowe
    23930 
    23931         <rdar://problem/5639463> Bundle versions on Tiger should be 4523.x not 523.x
    23932 
    23933         * Configurations/Version.xcconfig: Some Tiger versions of Xcode don't set MAC_OS_X_VERSION_MAJOR,
    23934           so assume Tiger and use a 4 for the SYSTEM_VERSION_PREFIX.
    23935 
    23936 2007-12-10  Mark Rowe  <[email protected]>
    23937 
    23938         Tiger build fix.
    23939 
    23940         * kjs/grammar.y: Use @1 and @0 in place of @$ where Tiger's bison chokes.
    23941 
    23942 2007-12-10  Darin Adler  <[email protected]>
    23943 
    23944         Reviewed by Mark Rowe.
    23945 
    23946         - fix http://bugs.webkit.org/show_bug.cgi?id=16375
    23947           REGRESSION: Safari crashes on quit
    23948 
    23949         Probably a debug-only issue.
    23950 
    23951         * kjs/Parser.cpp:
    23952         (KJS::parser): Create the parser and never destroy it by using a pointer instead
    23953         of a global object.
    23954 
    23955 2007-12-09  Darin Adler  <[email protected]>
    23956 
    23957         Reviewed by Sam Weinig.
    23958 
    23959         - fix http://bugs.webkit.org/show_bug.cgi?id=16369
    23960           REGRESSION (r28525): regular expression tests failing due to bad firstByte optimization
    23961 
    23962         * pcre/pcre_compile.cpp: Changed some names to use interCaps intead of under_scores.
    23963         (branchIsAnchored): Broke is_anchored into two separate functions; this one works on a
    23964         branch and the other on an anchor. The old function would only work on a bracket.
    23965         Also removed unneeded parameters; the anchored check does not require the bracket
    23966         map or the options any more because we have a reduced set of features.
    23967         (bracketIsAnchored): Ditto.
    23968         (branchNeedsLineStart): Broke canApplyFirstCharOptimization into two functions and gave
    23969         both a better name. This is the function that was returning the wrong value. The failure
    23970         was beacuse the old function would only work on a bracket.
    23971         (bracketNeedsLineStart): Ditto.
    23972         (jsRegExpCompile): Changed to call the appropriate branch or bracket flavor of the
    23973         functions based on whether we compiled an outer bracket. Also removed inaccurate comments
    23974         and unneeded parameters.
    23975 
    23976         - other small changes
    23977 
    23978         * pcre/pcre.h: Renumbered error codes, in a logical order. First, normal failure, then
    23979         the recursion limit, then running out of memory, and finally an unexpected internal error.
    23980 
    23981         * pcre/pcre_exec.cpp: Fixed indentation.
    23982         (jsRegExpExecute): Corrected an inaccurate comment.
    23983 
    23984 2007-12-09  Darin Adler  <[email protected]>
    23985 
    23986         Reviewed by Maciej.
    23987 
    23988         - fix http://bugs.webkit.org/show_bug.cgi?id=16370
    23989           REGRESSION (r28540): source URL and line number no longer set for outer function/programs
    23990 
    23991         Test: fast/js/exception-linenums-in-html-1.html
    23992         Test: fast/js/exception-linenums-in-html-2.html
    23993         Test: fast/js/exception-linenums.html
    23994 
    23995         By the time the ProgramNode was constructed, the source URL was empty.
    23996 
    23997         * kjs/Parser.cpp:
    23998         (KJS::Parser::parseProgram): Added code to set and clear m_sourceURL, which is now
    23999         handled here instead of in the lexer; it needs to still be set when we create the
    24000         program node. Call setLoc to set the first and last line number.
    24001         (KJS::Parser::parseFunctionBody): Ditto, but for the body.
    24002         (KJS::Parser::parse): Removed the sourceURL argument.
    24003 
    24004         * kjs/Parser.h: Added sourceURL(), m_sourceURL, and m_lastLine. Added a lastLine
    24005         parameter to didFinishParsing, since the bison grammar knows the last line number
    24006         and we otherwise do not know it. Removed the sourceURL parameter from parse, since
    24007         that's now handled at a higher level.
    24008 
    24009         * kjs/grammar.y: Pass the last line number to didFinishParsing.
    24010 
    24011         * kjs/lexer.cpp:
    24012         (KJS::Lexer::setCode): Removed the sourceURL argument and the code to set m_sourceURL.
    24013         (KJS::Lexer::clear): Ditto.
    24014         * kjs/lexer.h: More of the same.
    24015 
    24016         * kjs/nodes.cpp:
    24017         (KJS::FunctionBodyNode::FunctionBodyNode): Get the source URL from the parser rather
    24018         than from the lexer. Removed unneeded call to setLoc, since the line numbers already
    24019         both default to -1.
    24020 
    24021 2007-12-08  Oliver Hunt  <[email protected]>
    24022 
    24023         Reviewed by Sam W.
    24024 
    24025         Split the ENABLE_SVG_EXPERIMENTAL_FEATURES flag into separate flags.
    24026        
    24027         Fixes <rdar://problem/5620249> Must disable SVG animation
    24028         <rdar://problem/5612772> Disable SVG filters on Mac to match Windows behavior
    24029        
    24030         Minor config changes.
    24031 
    24032         * Configurations/JavaScriptCore.xcconfig:
    24033         * JavaScriptCore.xcodeproj/project.pbxproj:
    24034 
    24035 2007-12-07  Sam Weinig  <[email protected]>
    24036 
    24037         Reviewed by Darin.
    24038 
    24039         - Rename isSafeScript to allowsAccessFrom.
    24040 
    24041         * bindings/NP_jsobject.cpp:
    24042         (_isSafeScript):
    24043         * kjs/JSGlobalObject.h:
    24044         (KJS::JSGlobalObject::allowsAccessFrom): Reverse caller/argument of allowsAccessFrom to match
    24045         the new call.
    24046 
    24047 2007-12-07  Geoffrey Garen  <[email protected]>
    24048 
    24049         Reviewed by Sam Weinig.
    24050        
    24051         Refactored variable access optimization: Removed the assumption that
    24052         the FunctionBodyNode holds the symbol table.
    24053        
    24054 2007-12-07  Geoffrey Garen  <[email protected]>
    24055 
    24056         Build fix: added #include.
    24057 
    24058         * kjs/nodes.cpp:
    24059 
    24060 2007-12-07  Geoffrey Garen  <[email protected]>
    24061 
    24062         Build fix: added #include.
    24063 
    24064         * kjs/interpreter.cpp:
    24065 
    24066 2007-12-07  Geoffrey Garen  <[email protected]>
    24067 
    24068         Build fix: added #include.
    24069 
    24070         * kjs/grammar.y:
    24071 
    24072 2007-12-07  Geoffrey Garen  <[email protected]>
    24073 
    24074         Build fix: added #include.
    24075 
    24076         * kjs/function_object.cpp:
    24077 
    24078 2007-12-07  Geoffrey Garen  <[email protected]>
    24079 
    24080         Reviewed by Sam Weinig.
    24081        
    24082         Fixed crash seen running layout tests.
    24083        
    24084         Reverted a change I made earlier today. Added a comment to try to
    24085         discourage myself from making this mistake a third time.
    24086 
    24087         * kjs/function.cpp:
    24088         (KJS::ActivationImp::mark):
    24089         * kjs/function.h:
    24090         (KJS::ActivationImp::ActivationImpData::ActivationImpData):
    24091 
    24092 2007-12-07  Geoffrey Garen  <[email protected]>
    24093 
    24094         Reviewed by Sam Weinig.
    24095        
    24096         Refactored parsing of global code: Removed the assumption that
    24097         ProgramNode inherits from FunctionBodyNode from the parser.
    24098 
    24099         * kjs/Parser.cpp:
    24100         (KJS::Parser::parseProgram):
    24101         (KJS::Parser::parseFunctionBody):
    24102         (KJS::Parser::parse):
    24103         * kjs/Parser.h:
    24104         (KJS::Parser::didFinishParsing):
    24105         * kjs/function.cpp:
    24106         * kjs/grammar.y:
    24107         * kjs/nodes.h:
    24108 
    24109 2007-12-07  Geoffrey Garen  <[email protected]>
    24110 
    24111         Build fix: added JSVariableObject.cpp to the .pri file.
    24112 
    24113         * JavaScriptCore.pri:
    24114 
    24115 2007-12-07  Geoffrey Garen  <[email protected]>
    24116 
    24117         Build fix: added #include.
    24118 
    24119         * kjs/function.cpp:
    24120 
    24121 2007-12-07  Steve Falkenburg  <[email protected]>
    24122 
    24123         Re-named our B&I flag from BUILDBOT to PRODUCTION.
    24124 
    24125         Reviewed by Sam Weinig.
    24126 
    24127         * JavaScriptCore.vcproj/JavaScriptCore.make:
    24128         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
    24129 
    24130 2007-12-07  Geoffrey Garen  <[email protected]>
    24131 
    24132         Build fix: removed stray name qualification.
    24133 
    24134         * kjs/function.h:
    24135         (KJS::ActivationImp::ActivationImp):
    24136 
    24137 2007-12-07  Geoffrey Garen  <[email protected]>
    24138 
    24139         Build fix: moved functions with qualified names outside of class
    24140         declaration.
    24141 
    24142         * kjs/JSVariableObject.h:
    24143         (KJS::JSVariableObject::symbolTableGet):
    24144         (KJS::JSVariableObject::symbolTablePut):
    24145 
    24146 2007-12-07  Geoffrey Garen  <[email protected]>
    24147 
    24148         Reviewed by Sam Weinig.
    24149 
    24150         Next step in refactoring JSGlobalObject: Added JSVariableObject class,
    24151         and factored symbol-table-related code into it. (JSGlobalObject doesn't
    24152         use the symbol table code yet, though.)
    24153        
    24154         Layout and JS tests, and testapi, pass. SunSpider reports no regression.
    24155 
    24156 2007-12-07  Darin Adler  <[email protected]>
    24157 
    24158         Reviewed by Geoff.
    24159 
    24160         - fix http://bugs.webkit.org/show_bug.cgi?id=16185
    24161           jsRegExpCompile should not add implicit non-capturing bracket
    24162 
    24163         While this does not make SunSpider faster, it will make many regular
    24164         expressions a bit faster.
    24165 
    24166         * pcre/pcre_compile.cpp: Moved CompileData struct in here from the
    24167         header since it's private to this file.
    24168         (compile_branch): Updated for function name change.
    24169         (compile_bracket): Renamed from compile_regex, since, for one thing,
    24170         this does not compile an entire regular expression.
    24171         (calculateCompiledPatternLengthAndFlags): Removed unused item_count
    24172         local variable. Renamed CompileData to cd instead of compile_block
    24173         to be consistent with other functions. Added code to set the
    24174         needOuterBracket flag if there's at least one "|" at the outer level.
    24175         (jsRegExpCompile): Renamed CompileData to cd instead of compile_block
    24176         to be consistent with other functions. Removed unneeded "size" field
    24177         from the compiled regular expression. If no outer bracket is needed,
    24178         then use compile_branch to compile the regular expression.
    24179 
    24180         * pcre/pcre_internal.h: Removed the CompileData struct, which is now
    24181         private to pcre_compile.cpp. Removed the size member from JSRegExp.
    24182 
    24183 2007-12-06  Kevin Ollivier  <[email protected]>
    24184 
    24185         MSVC7 build fix due to a compiler bug with placement new and/or
    24186         templates and casting.
    24187 
    24188         Reviewed by Darin Adler.
    24189 
    24190         * wtf/Vector.h:
    24191         (WTF::::append):
    24192 
    24193 2007-12-06  Darin Adler  <[email protected]>
    24194 
    24195         Reviewed by Eric Seidel.
    24196 
    24197         - fix http://bugs.webkit.org/show_bug.cgi?id=16321
    24198           new RegExp("[\u0097]{4,6}", "gmy") crashes in DEBUG builds
    24199           <rdar://problem/5632992>
    24200 
    24201         Test: fast/js/regexp-oveflow.html
    24202 
    24203         * pcre/pcre_compile.cpp:
    24204         (calculateCompiledPatternLengthAndFlags): In the case where a single character
    24205         character class is optimized to not use a character class at all, the preflight
    24206         code was not setting the lastitemlength variable.
    24207 
    24208 2007-12-05  Mark Rowe  <[email protected]>
    24209 
    24210         Qt Windows build fix.  Include the time-related headers in the correct place.
    24211 
    24212         * kjs/JSGlobalObject.cpp:
    24213         * kjs/interpreter.cpp:
    24214 
    24215 2007-12-05  Darin Adler  <[email protected]>
    24216 
    24217         Not reviewed; just undoing a previous commit.
    24218 
    24219         - remove earlier incorrect fix for http://bugs.webkit.org/show_bug.cgi?id=16220
    24220           <rdar://problem/5625221> Crash opening www.news.com (CNet)
    24221 
    24222         The real bug was the backwards ?: in the compile function, which Geoff just
    24223         fixed. Rolling out the incorrect earlier fix.
    24224 
    24225         * pcre/pcre_compile.cpp: (calculateCompiledPatternLengthAndFlags): Take out
    24226         the unneeded preflight change. The regression test proves this is still working
    24227         fine, so the bug remains fixed.
    24228 
    24229 2007-12-01  Mark Rowe  <[email protected]>
    24230 
    24231         Build fix.  Include headers before trying to use the things that they declare.
    24232 
    24233         * kjs/JSImmediate.cpp:
    24234         * kjs/nodes.cpp:
    24235         * kjs/object.cpp:
    24236         * kjs/object_object.cpp:
    24237         * kjs/regexp_object.cpp:
    24238         * kjs/string_object.cpp:
    24239 
    24240 2007-12-05  Geoffrey Garen  <[email protected]>
    24241 
    24242         Build fix: added some #includes.
    24243 
    24244         * kjs/JSImmediate.cpp:
    24245 
    24246 2007-12-05  Geoffrey Garen  <[email protected]>
    24247 
    24248         Build fix: added some #includes.
    24249 
    24250         * kjs/JSGlobalObject.cpp:
    24251         * kjs/JSImmediate.cpp:
    24252 
    24253 2007-12-05  Geoffrey Garen  <[email protected]>
    24254 
    24255         Build fix: Fixed #include spelling.
    24256 
    24257         * kjs/debugger.cpp:
    24258 
    24259 2007-12-05  Geoffrey Garen  <[email protected]>
    24260 
    24261         Build fix: added #include.
    24262 
    24263         * kjs/debugger.cpp:
    24264 
    24265 2007-12-05  Geoffrey Garen  <[email protected]>
    24266 
    24267         Build fix: added a forward declaration.
    24268 
    24269         * kjs/debugger.h:
    24270 
    24271 2007-12-05  Geoffrey Garen  <[email protected]>
    24272 
    24273         Build fix: added an #include.
    24274 
    24275         * kjs/error_object.cpp:
    24276 
    24277 2007-12-05  Geoffrey Garen  <[email protected]>
    24278 
    24279         Build fix: added an #include.
    24280 
    24281         * kjs/bool_object.cpp:
    24282 
    24283 2007-12-05  Geoffrey Garen  <[email protected]>
    24284 
    24285         Reviewed by Darin Adler.
    24286 
    24287         Third step in refactoring JSGlobalObject: Moved data members and
    24288         functions accessing data members from Interpreter to JSGlobalObject.
    24289         Changed Interpreter member functions to static functions.
    24290        
    24291         This resolves a bug in global object bootstrapping, where the global
    24292         ExecState could be used when uninitialized.
    24293        
    24294         This is a big change, but it's mostly code motion and renaming.
    24295        
    24296         Layout and JS tests, and testjsglue and testapi, pass. SunSpider reports
    24297         a .7% regression, but Shark sees no difference related to this patch,
    24298         and SunSpider reported a .7% speedup from an earlier step in this
    24299         refactoring, so I think it's fair to call that a wash.
    24300 
    24301 2007-12-05  Geoffrey Garen  <[email protected]>
    24302 
    24303         Reviewed by Darin Adler. (Or vice versa.)
    24304        
    24305         Fixed ASSERT during run-javascriptcore-tests. (Darin just added the
    24306         ASSERT, but the bug wasn't new.)
    24307 
    24308         * pcre/pcre_compile.cpp:
    24309         (compile_branch): The ?: operator here was backwards, causing us to
    24310         execute the loop too many times, adding stray KET opcodes to the
    24311         compiled regular expression.
    24312 
    24313 2007-12-05  Kevin McCullough  <[email protected]>
    24314 
    24315         Reviewed by Geoff.
    24316 
    24317         - Wait until local variable data is fully constructed before notifying the debugger of entering
    24318         or leaving a call frame.
    24319 
    24320         * kjs/function.cpp:
    24321         (KJS::FunctionImp::callAsFunction):
    24322         * kjs/nodes.cpp:
    24323         (KJS::FunctionBodyNode::execute):
    24324 
    24325 2007-12-05  Mark Rowe  <[email protected]>
    24326 
    24327         Reviewed by Oliver.
    24328 
    24329         Build fix for GCC 4.2. Cast via a union to avoid strict-aliasing issues.
    24330 
    24331         * wtf/FastMalloc.cpp:
    24332         (WTF::):
    24333         (WTF::getPageHeap):
    24334 
    24335 2007-12-05  Mark Rowe  <[email protected]>
    24336 
    24337         Reviewed by Darin.
    24338 
    24339         Fix testkjs in 64-bit.
    24340 
    24341         When built for 64-bit the TCMalloc spin lock uses pthread mutexes rather than a custom spin lock
    24342         implemented in assembly.  If we fail to initialize the pthread mutex, attempts to lock or unlock
    24343         it will fail and trigger a call to abort.
    24344 
    24345         * wtf/FastMalloc.cpp: Initialize the spin lock so that we can later lock and unlock it.
    24346         * wtf/TCSpinLock.h: Add an Init method to the optimised spin lock.
    24347 
    24348 2007-12-04  Oliver Hunt  <[email protected]>
    24349 
    24350         Fix gtk build.
    24351 
    24352         * wtf/TCSystemAlloc.cpp:
    24353 
    24354 2007-12-03  Oliver Hunt  <[email protected]>
    24355 
    24356         Reviewed by Mark Rowe and Geoff Garen.
    24357 
    24358         Merge TCMalloc r38
    24359 
    24360         It also result in a performance progression between 0.5% and
    24361         0.9% depending on the test, however most if not all of this
    24362         gain will be consumed by the overhead involved in the later
    24363         change to release memory to the system.
    24364 
    24365         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
    24366         * JavaScriptCore.xcodeproj/project.pbxproj:
    24367         * wtf/FastMalloc.cpp:
    24368         (WTF::KernelSupportsTLS):
    24369         (WTF::CheckIfKernelSupportsTLS):
    24370         (WTF::):
    24371         (WTF::ClassIndex):
    24372         (WTF::SLL_Next):
    24373         (WTF::SLL_SetNext):
    24374         (WTF::SLL_Push):
    24375         (WTF::SLL_Pop):
    24376         (WTF::SLL_PopRange):
    24377         (WTF::SLL_PushRange):
    24378         (WTF::SLL_Size):
    24379         (WTF::SizeClass):
    24380         (WTF::ByteSizeForClass):
    24381         (WTF::NumMoveSize):
    24382         (WTF::InitSizeClasses):
    24383         (WTF::AllocationSize):
    24384         (WTF::TCMalloc_PageHeap::GetSizeClassIfCached):
    24385         (WTF::TCMalloc_PageHeap::CacheSizeClass):
    24386         (WTF::TCMalloc_PageHeap::init):
    24387         (WTF::TCMalloc_PageHeap::New):
    24388         (WTF::TCMalloc_PageHeap::AllocLarge):
    24389         (WTF::TCMalloc_PageHeap::Carve):
    24390         (WTF::TCMalloc_PageHeap::Delete):
    24391         (WTF::TCMalloc_PageHeap::IncrementalScavenge):
    24392         (WTF::PagesToMB):
    24393         (WTF::TCMalloc_PageHeap::Dump):
    24394         (WTF::TCMalloc_PageHeap::GrowHeap):
    24395         (WTF::TCMalloc_PageHeap::Check):
    24396         (WTF::ReleaseFreeList):
    24397         (WTF::TCMalloc_PageHeap::ReleaseFreePages):
    24398         (WTF::TCMalloc_ThreadCache_FreeList::Push):
    24399         (WTF::TCMalloc_ThreadCache_FreeList::PushRange):
    24400         (WTF::TCMalloc_ThreadCache_FreeList::PopRange):
    24401         (WTF::TCMalloc_ThreadCache_FreeList::Pop):
    24402         (WTF::TCMalloc_Central_FreeList::length):
    24403         (WTF::TCMalloc_Central_FreeList::tc_length):
    24404         (WTF::TCMalloc_Central_FreeList::Init):
    24405         (WTF::TCMalloc_Central_FreeList::ReleaseListToSpans):
    24406         (WTF::TCMalloc_Central_FreeList::EvictRandomSizeClass):
    24407         (WTF::TCMalloc_Central_FreeList::MakeCacheSpace):
    24408         (WTF::TCMalloc_Central_FreeList::ShrinkCache):
    24409         (WTF::TCMalloc_Central_FreeList::InsertRange):
    24410         (WTF::TCMalloc_Central_FreeList::RemoveRange):
    24411         (WTF::TCMalloc_Central_FreeList::FetchFromSpansSafe):
    24412         (WTF::TCMalloc_Central_FreeList::Populate):
    24413         (WTF::TCMalloc_ThreadCache::Init):
    24414         (WTF::TCMalloc_ThreadCache::Cleanup):
    24415         (WTF::TCMalloc_ThreadCache::Allocate):
    24416         (WTF::TCMalloc_ThreadCache::Deallocate):
    24417         (WTF::TCMalloc_ThreadCache::FetchFromCentralCache):
    24418         (WTF::TCMalloc_ThreadCache::ReleaseToCentralCache):
    24419         (WTF::TCMalloc_ThreadCache::Scavenge):
    24420         (WTF::TCMalloc_ThreadCache::PickNextSample):
    24421         (WTF::TCMalloc_ThreadCache::NewHeap):
    24422         (WTF::TCMalloc_ThreadCache::GetThreadHeap):
    24423         (WTF::TCMalloc_ThreadCache::GetCache):
    24424         (WTF::TCMalloc_ThreadCache::GetCacheIfPresent):
    24425         (WTF::TCMalloc_ThreadCache::InitTSD):
    24426         (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
    24427         (WTF::TCMallocStats::ExtractStats):
    24428         (WTF::TCMallocStats::DumpStats):
    24429         (WTF::TCMallocStats::DumpStackTraces):
    24430         (WTF::TCMallocStats::TCMallocImplementation::MarkThreadIdle):
    24431         (WTF::TCMallocStats::TCMallocImplementation::ReleaseFreeMemory):
    24432         (WTF::TCMallocStats::TCMallocGuard::TCMallocGuard):
    24433         (WTF::TCMallocStats::TCMallocGuard::~TCMallocGuard):
    24434         (WTF::TCMallocStats::DoSampledAllocation):
    24435         (WTF::TCMallocStats::CheckCachedSizeClass):
    24436         (WTF::TCMallocStats::CheckedMallocResult):
    24437         (WTF::TCMallocStats::SpanToMallocResult):
    24438         (WTF::TCMallocStats::do_malloc):
    24439         (WTF::TCMallocStats::do_free):
    24440         (WTF::TCMallocStats::do_memalign):
    24441         (WTF::TCMallocStats::do_malloc_stats):
    24442         (WTF::TCMallocStats::do_mallopt):
    24443         (WTF::TCMallocStats::do_mallinfo):
    24444         (WTF::TCMallocStats::realloc):
    24445         (WTF::TCMallocStats::cpp_alloc):
    24446         (WTF::TCMallocStats::operator new):
    24447         (WTF::TCMallocStats::):
    24448         (WTF::TCMallocStats::operator new[]):
    24449         (WTF::TCMallocStats::malloc_stats):
    24450         (WTF::TCMallocStats::mallopt):
    24451         (WTF::TCMallocStats::mallinfo):
    24452         * wtf/TCPackedCache.h: Added.
    24453         (PackedCache::PackedCache):
    24454         (PackedCache::Put):
    24455         (PackedCache::Has):
    24456         (PackedCache::GetOrDefault):
    24457         (PackedCache::Clear):
    24458         (PackedCache::EntryToValue):
    24459         (PackedCache::EntryToUpper):
    24460         (PackedCache::KeyToUpper):
    24461         (PackedCache::UpperToPartialKey):
    24462         (PackedCache::Hash):
    24463         (PackedCache::KeyMatch):
    24464         * wtf/TCPageMap.h:
    24465         (TCMalloc_PageMap2::PreallocateMoreMemory):
    24466         * wtf/TCSystemAlloc.cpp:
    24467         (TCMalloc_SystemRelease):
    24468         * wtf/TCSystemAlloc.h:
    24469 
    24470 2007-12-04  Anders Carlsson  <[email protected]>
    24471 
    24472         Reviewed by Sam.
    24473 
    24474         Make isSafeScript const.
    24475        
    24476         * kjs/JSGlobalObject.h:
    24477         (KJS::JSGlobalObject::isSafeScript):
    24478 
    24479 2007-12-04  Darin Adler  <[email protected]>
    24480 
    24481         Reviewed by Geoff.
    24482 
    24483         - fix first part of http://bugs.webkit.org/show_bug.cgi?id=16220
    24484           <rdar://problem/5625221> Crash opening www.news.com (CNet)
    24485 
    24486         Test: fast/js/regexp-overflow.html
    24487 
    24488         * pcre/pcre_compile.cpp:
    24489         (calculateCompiledPatternLengthAndFlags): Add room for the additional BRA/KET that
    24490         was generated in the compile code but not taken into account here.
    24491 
    24492 2007-12-03  Darin Adler  <[email protected]>
    24493 
    24494         Reviewed by Geoff.
    24495 
    24496         - fix http://bugs.webkit.org/show_bug.cgi?id=15618
    24497           <rdar://problem/5619353> REGRESSION: Stack overflow/crash in KJS::equal (15618)
    24498 
    24499         Test: fast/js/recursion-limit-equal.html
    24500 
    24501         * kjs/operations.cpp: (KJS::equal): Check the exception from toPrimitive.
    24502 
    24503 2007-12-03  Dan Bernstein  <[email protected]>
    24504 
    24505         - fix a copy-and-paste-o
    24506 
    24507         * bindings/npruntime.cpp:
    24508         (_NPN_GetIntIdentifier):
    24509 
    24510 2007-12-03  Dan Bernstein  <[email protected]>
    24511 
    24512         Reviewed by Darin Adler.
    24513 
    24514         - fix an ASSERT when getIntIdentifier is called with 0 or -1
    24515 
    24516         * bindings/npruntime.cpp:
    24517         (_NPN_GetIntIdentifier): We cannot use the hashmap for 0 and -1 since
    24518         they are the empty value and the deleted value. Instead, keep the
    24519         identifiers for those two integers in a static array.
    24520 
    24521 2007-12-02  Darin Adler  <[email protected]>
    24522 
    24523         Reviewed by Mitz.
    24524 
    24525         - fix http://bugs.webkit.org/show_bug.cgi?id=15848
    24526           <rdar://problem/5619330> REGRESSION: Assertion failure viewing comments page on digg.com
    24527 
    24528         Test: fast/js/sparse-array.html
    24529 
    24530         * kjs/array_instance.cpp:
    24531         (KJS::ArrayInstance::inlineGetOwnPropertySlot): Check sparse array cutoff before looking
    24532         in hash map. Can't avoid the branch because we can't look for 0 in the hash.
    24533         (KJS::ArrayInstance::deleteProperty): Ditto.
    24534 
    24535 2007-12-02  Geoffrey Garen  <[email protected]>
    24536 
    24537         Build fix: added an #include.
    24538 
    24539         * kjs/collector.cpp:
    24540 
    24541 2007-12-02  Geoffrey Garen  <[email protected]>
    24542 
    24543         Reviewed by Eric Seidel.
    24544 
    24545         Second step in refactoring JSGlobalObject: moved virtual functions from
    24546         Interpreter to JSGlobalObject.
    24547        
    24548         Layout and JS tests pass. SunSpider reports a .7% speedup -- don't
    24549         believe his lies.
    24550 
    24551 2007-12-01  Alp Toker  <[email protected]>
    24552 
    24553         Reviewed by Adam Roben.
    24554 
    24555         http://bugs.webkit.org/show_bug.cgi?id=16228
    24556         kJSClassDefinitionEmpty is not exported with JS_EXPORT
    24557 
    24558         Add JS_EXPORT to kJSClassDefinitionEmpty.
    24559 
    24560         Make the gcc compiler check take precedence over the WIN32||_WIN32
    24561         check to ensure that symbols are exported on Windows when using gcc.
    24562 
    24563         Add a TODO referencing the bug about JS_EXPORT in the Win build
    24564         (http://bugs.webkit.org/show_bug.cgi?id=16227)
    24565 
    24566         Don't define JS_EXPORT as 'extern' when the compiler is unknown since
    24567         it would result in the incorrect expansion:
    24568 
    24569           extern extern const JSClassDefinition kJSClassDefinitionEmpty;
    24570 
    24571         (This was something we inherited from CFBase.h that doesn't make sense
    24572         for JSBase.h)
    24573 
    24574         * API/JSBase.h:
    24575         * API/JSObjectRef.h:
    24576 
    24577 2007-11-30  Geoffrey Garen  <[email protected]>
    24578 
    24579         Reviewed by Beth Dakin.
    24580        
    24581         Reversed the ownership relationship between Interpreter and JSGlobalObject.
    24582         Now, the JSGlobalObject owns the Interpreter, and top-level objects
    24583         that need the two to persist just protect the JSGlobalObject from GC.
    24584        
    24585         Global object bootstrapping looks a little odd right now, but it will
    24586         make much more sense soon, after further rounds of refactoring.
    24587 
    24588         * bindings/runtime_root.h: Made this class inherit from RefCounted,
    24589         to avoid code duplication.
    24590 
    24591         * kjs/collector.cpp:
    24592         (KJS::Collector::collect): No need to give special GC treatment to
    24593         Interpreters, since we mark their global objects, which mark them.
    24594 
    24595         * kjs/interpreter.cpp:
    24596         (KJS::Interpreter::mark): No need to mark our global object, since it
    24597         marks us.
    24598         * kjs/interpreter.h: Don't inherit from RefCounted -- JSGlobalObject
    24599         owns us directly.
    24600 
    24601         * kjs/testkjs.cpp: Modified to follow the new rules.
    24602         (createGlobalObject):
    24603         (runWithScripts):
    24604 
    24605 2007-11-30  Brent Fulgham  <[email protected]>
    24606 
    24607         Reviewed by Eric.
    24608 
    24609         * ChangeLog:
    24610         * pcre/pcre_compile.cpp:
    24611         (compile_branch):
    24612 
    24613 2007-11-30  Eric Seidel  <[email protected]>
    24614 
    24615         No review, build fix only.
    24616        
    24617         Fix uninitialized var warnings in release build.
    24618 
    24619         * JavaScriptCore.xcodeproj/project.pbxproj:
    24620         * pcre/pcre_compile.cpp:
    24621         (compile_regex):
    24622 
    24623 2007-11-30  Darin Adler  <[email protected]>
    24624 
    24625         Reviewed by Adam Roben.
    24626 
    24627         - fix http://bugs.webkit.org/show_bug.cgi?id=16207
    24628           JavaScript regular expressions should match UTF-16 code units rather than characters
    24629 
    24630         SunSpider says this is 5.5% faster on the regexp test, 0.4% faste overall.
    24631 
    24632         Test: fast/js/regexp-non-bmp.html
    24633 
    24634         Renamed ANY_CHAR to NOT_NEWLINE to more-accurately reflect its meaning.
    24635 
    24636         * pcre/pcre_compile.cpp:
    24637         (compile_branch): Removed calls to the UTF-16 character accessor functions, replacing
    24638         them with simple pointer dereferences in some cases, and no code at all in others.
    24639         (calculateCompiledPatternLengthAndFlags): Ditto.
    24640 
    24641         * pcre/pcre_exec.cpp:
    24642         (match): Fixed indentation of some case labels (including all the BEGIN_OPCODE).
    24643         Removed calls to the UTF-16 character accessor functions, replacing them with simple
    24644         pointer dereferences in some cases, and no code at all in others. Also removed some
    24645         explicit UTF-16 support code in a few cases. Removed the unneeded "UTF-8" code path
    24646         in the ANY_CHAR repeat code, and in another case, eliminated the code to check against
    24647         end_subject in because it is already done outside the loop.
    24648         (jsRegExpExecute):
    24649 
    24650         * pcre/pcre_internal.h: Removed all the UTF-16 helper functions.
    24651 
    24652 2007-11-30  Eric Seidel  <[email protected]>
    24653 
    24654         Reviewed by darin.
    24655        
    24656         PCRE crashes under GuardMalloc
    24657         http://bugs.webkit.org/show_bug.cgi?id=16127
    24658         check against patternEnd to make sure we don't walk off the end of the string
    24659 
    24660         * pcre/pcre_compile.cpp:
    24661         (compile_branch):
    24662         (calculateCompiledPatternLengthAndFlags):
    24663 
    24664 2007-11-30  Eric Seidel  <[email protected]>
    24665 
    24666         Reviewed by Maciej.
    24667        
    24668         Fix layout test regressions caused by r28186
    24669         http://bugs.webkit.org/show_bug.cgi?id=16195
    24670         change first_byte and req_byte back to shorts instead of chars
    24671         (I think PCRE stuffs information in the high bits)
    24672 
    24673         * pcre/pcre_internal.h:
    24674 
    24675 2007-11-29  Oliver Hunt  <[email protected]>
    24676 
    24677         Reviewed by Maciej and Darin.
    24678 
    24679         Make the JS collector work with multiple threads
    24680 
    24681         Under heavy contention it was possible the GC to suspend other
    24682         threads inside the pthread spinlock, which could lead to the GC
    24683         thread blocking on the pthread spinlock itself.
    24684 
    24685         We now determine and store each thread's stack base when it is
    24686         registered, thus removing the need for any calls to pthread_get_stackaddr_np
    24687         that needed the pthread spinlock.
    24688 
    24689         * kjs/collector.cpp:
    24690         (KJS::Collector::Thread::Thread):
    24691         (KJS::Collector::registerThread):
    24692         (KJS::Collector::markOtherThreadConservatively):
    24693 
    24694 2007-11-29  Adam Roben  <[email protected]>
    24695 
    24696         Windows build fix
    24697 
    24698         Removed some unreachable code (ironically, the code was some
    24699         ASSERT_NOT_REACHED()s).
    24700 
    24701         * pcre/pcre_compile.cpp:
    24702         (compile_branch):
    24703         * pcre/pcre_exec.cpp:
    24704         (match):
    24705 
    24706 2007-11-29  Eric Seidel  <[email protected]>
    24707 
    24708         Reviewed by Mark Rowe.
    24709        
    24710         Fix for --guard crash of fast/js/regexp-charclass-crash introduced by r28151.
    24711 
    24712         * pcre/pcre_compile.cpp:
    24713         (is_anchored):
    24714 
    24715 2007-11-28  Mark Rowe  <[email protected]>
    24716 
    24717         Gtk build fix.  Rubber-stamped by Eric.
    24718 
    24719         * pcre/pcre_exec.cpp:
    24720         (match): Add braces around the body of the case statement to prevent
    24721         wanings about jumps across the initialization of a variable.
    24722 
    24723 2007-11-29  Eric Seidel  <[email protected]>
    24724 
    24725         Reviewed by Mark Rowe.
    24726        
    24727         Attempt to fix non-mac builds after PCRE cleanup.
    24728 
    24729         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    24730         * JavaScriptCoreSources.bkl:
    24731         * pcre/pcre.pri:
    24732 
    24733 2007-11-28  Eric Seidel  <[email protected]>
    24734 
    24735         Reviewed by Maciej.
    24736 
    24737         Centralize code for subjectPtr adjustments using inlines, only ever check for a single
    24738         trailing surrogate (as UTF16 only allows one), possibly fix PCRE bugs involving char
    24739         classes and garbled UTF16 strings.
    24740 
    24741         * pcre/pcre_exec.cpp:
    24742         (match):
    24743         (jsRegExpExecute):
    24744         * pcre/pcre_internal.h:
    24745         (getPreviousChar):
    24746         (movePtrToPreviousChar):
    24747         (movePtrToNextChar):
    24748         (movePtrToStartOfCurrentChar):
    24749 
    24750 2007-11-28  Eric Seidel  <[email protected]>
    24751 
    24752         Reviewed by Maciej.
    24753 
    24754         change getChar* functions to return result and push 'c' into local scopes for clarity
    24755 
    24756         * pcre/pcre_compile.cpp:
    24757         (compile_branch):
    24758         (calculateCompiledPatternLengthAndFlags):
    24759         * pcre/pcre_exec.cpp:
    24760         (match):
    24761         * pcre/pcre_internal.h:
    24762         (getChar):
    24763         (getCharAndAdvance):
    24764         (getCharAndLength):
    24765         (getCharAndAdvanceIfSurrogate):
    24766 
    24767 2007-11-28  Eric Seidel  <[email protected]>
    24768 
    24769         Reviewed by Sam.
    24770 
    24771         Comment cleanup
    24772 
    24773         * pcre/pcre_exec.cpp:
    24774         (match):
    24775 
    24776 2007-11-26  Eric Seidel  <[email protected]>
    24777 
    24778         Reviewed by Sam.
    24779 
    24780         Further cleanups to calculateCompiledPatternLengthAndFlags
    24781 
    24782         * pcre/pcre_compile.cpp:
    24783         (calculateCompiledPatternLengthAndFlags):
    24784         * pcre/pcre_internal.h:
    24785 
    24786 2007-11-26  Eric Seidel  <[email protected]>
    24787 
    24788         Reviewed by Sam.
    24789 
    24790         Give consistent naming to the RegExp options/compile flags
    24791 
    24792         * pcre/pcre_compile.cpp:
    24793         (compile_branch):
    24794         (is_anchored):
    24795         (find_firstassertedchar):
    24796         (printCompiledRegExp):
    24797         (jsRegExpCompile):
    24798         * pcre/pcre_exec.cpp:
    24799         (jsRegExpExecute):
    24800         * pcre/pcre_internal.h:
    24801 
    24802 2007-11-26  Eric Seidel  <[email protected]>
    24803 
    24804         Reviewed by Sam.
    24805 
    24806         Pull first_byte and req_byte optimizations out into separate static funtions, SunSpider reported this as a win.
    24807 
    24808         * pcre/pcre_exec.cpp:
    24809         (tryFirstByteOptimization):
    24810         (tryRequiredByteOptimization):
    24811         (jsRegExpExecute):
    24812         * pcre/pcre_internal.h:
    24813 
    24814 2007-11-26  Eric Seidel  <[email protected]>
    24815 
    24816         Reviewed by Maciej.
    24817 
    24818         give PCRE_MULTILINE a better name: OptionMatchAcrossMultipleLines
    24819 
    24820         * pcre/pcre_compile.cpp:
    24821         (compile_branch):
    24822         (is_anchored):
    24823         (printCompiledRegExp):
    24824         (jsRegExpCompile):
    24825         * pcre/pcre_exec.cpp:
    24826         (jsRegExpExecute):
    24827         * pcre/pcre_internal.h:
    24828 
    24829 2007-11-26  Eric Seidel  <[email protected]>
    24830 
    24831         Reviewed by Oliver.
    24832 
    24833         Deprecate jsRegExpExecute's offset-vector fallback code
    24834 
    24835         * pcre/pcre_exec.cpp:
    24836         (jsRegExpExecute):
    24837 
    24838 2007-11-26  Eric Seidel  <[email protected]>
    24839 
    24840         Reviewed by Maciej.
    24841 
    24842         Make cur_is_word and prev_is_word locals, and change OP_ANY to OP_ANY_CHAR for clarity
    24843 
    24844         * pcre/pcre_compile.cpp:
    24845         (find_fixedlength):
    24846         (compile_branch):
    24847         (canApplyFirstCharOptimization):
    24848         * pcre/pcre_exec.cpp:
    24849         (match):
    24850         * pcre/pcre_internal.h:
    24851 
    24852 2007-11-26  Eric Seidel  <[email protected]>
    24853 
    24854         Reviewed by Mitz & Maciej.
    24855 
    24856         Change _NC operators to use _IGNORING_CASE for clarity
    24857 
    24858         * pcre/pcre_compile.cpp:
    24859         (find_fixedlength):
    24860         (compile_branch):
    24861         (find_firstassertedchar):
    24862         * pcre/pcre_exec.cpp:
    24863         (match):
    24864         * pcre/pcre_internal.h:
    24865 
    24866 2007-11-26  Eric Seidel  <[email protected]>
    24867 
    24868         Reviewed by Mitz.
    24869 
    24870         Remove branch from return
    24871 
    24872         * pcre/pcre_compile.cpp:
    24873         (compile_branch):
    24874         * pcre/pcre_exec.cpp:
    24875         (match):
    24876 
    24877 2007-11-26  Eric Seidel  <[email protected]>
    24878 
    24879         Reviewed by Maciej.
    24880 
    24881         Add repeatInformationFromInstructionOffset inline
    24882 
    24883         * pcre/pcre_exec.cpp:
    24884         (repeatInformationFromInstructionOffset):
    24885         (match):
    24886 
    24887 2007-11-26  Eric Seidel  <[email protected]>
    24888 
    24889         Reviewed by Maciej.
    24890 
    24891         Remove no longer used error code JSRegExpErrorMatchLimit
    24892 
    24893         * kjs/regexp.cpp:
    24894         (KJS::RegExp::match):
    24895         * pcre/pcre.h:
    24896         * pcre/pcre_internal.h:
    24897 
    24898 2007-11-26  Eric Seidel  <[email protected]>
    24899 
    24900         Reviewed by Sam.
    24901 
    24902         Make i locally scoped for better code clarity
    24903 
    24904         * pcre/pcre_exec.cpp:
    24905         (match):
    24906 
    24907 2007-11-26  Eric Seidel  <[email protected]>
    24908 
    24909         Reviewed by Maciej.
    24910 
    24911         Give subjectPtr and instructionPtr sane names, reduce size of MatchFrame for a 0.2% speedup.
    24912 
    24913         * pcre/pcre_compile.cpp:
    24914         (compile_branch):
    24915         (calculateCompiledPatternLengthAndFlags):
    24916         * pcre/pcre_exec.cpp:
    24917         (match_ref):
    24918         (MatchStack::pushNewFrame):
    24919         (getUTF8CharAndIncrementLength):
    24920         (match):
    24921         * pcre/pcre_internal.h:
    24922         (getChar):
    24923         (getCharAndAdvance):
    24924         (getCharAndLength):
    24925         (getCharAndAdvanceIfSurrogate):
    24926         * pcre/pcre_xclass.cpp:
    24927         (getUTF8CharAndAdvancePointer):
    24928 
    24929 2007-11-26  Eric Seidel  <[email protected]>
    24930 
    24931         Reviewed by Sam.
    24932 
    24933         Small speedup (0.7%) by simplifying canUseStackBufferForNextFrame() check
    24934 
    24935         * pcre/pcre_exec.cpp:
    24936         (MatchStack::MatchStack):
    24937         (MatchStack::popCurrentFrame):
    24938 
    24939 2007-11-25  Eric Seidel  <[email protected]>
    24940 
    24941         Reviewed by Sam.
    24942 
    24943         Lower MATCH_LIMIT_RECURSION to more sane levels to prevent hangs on run-javascriptcore-tests
    24944 
    24945         * pcre/pcre_internal.h:
    24946 
    24947 2007-11-25  Eric Seidel  <[email protected]>
    24948 
    24949         Reviewed by Maciej.
    24950 
    24951         Remove match_is_group variable for another 5% speedup
    24952 
    24953         * pcre/pcre_compile.cpp:
    24954         * pcre/pcre_exec.cpp:
    24955         (startNewGroup):
    24956         (match):
    24957 
    24958 2007-11-28  Eric Seidel  <[email protected]>
    24959 
    24960         Reviewed by Sam.
    24961 
    24962         Abstract frame variables into locals and args
    24963 
    24964         * pcre/pcre_compile.cpp:
    24965         (compile_branch):
    24966         * pcre/pcre_exec.cpp:
    24967         (match):
    24968         * pcre/pcre_internal.h:
    24969 
    24970 2007-11-28  Eric Seidel  <[email protected]>
    24971 
    24972         Reviewed by Sam.
    24973 
    24974         Section off MatchData arguments into args struct
    24975 
    24976         * pcre/pcre_exec.cpp:
    24977         (MatchStack::pushNewFrame):
    24978         (match):
    24979 
    24980 2007-11-24  Eric Seidel  <[email protected]>
    24981 
    24982         Reviewed by Sam.
    24983 
    24984         Remove redundant eptrblock struct
    24985 
    24986         * pcre/pcre_exec.cpp:
    24987         (MatchStack::pushNewFrame):
    24988         (match):
    24989 
    24990 2007-11-24  Eric Seidel  <[email protected]>
    24991 
    24992         Reviewed by Maciej.
    24993 
    24994         Remove redundant match_call_count and move recursion check out of super-hot code path
    24995         SunSpider says this is at least an 8% speedup for regexp.
    24996 
    24997         * pcre/pcre_exec.cpp:
    24998         (MatchStack::MatchStack):
    24999         (MatchStack::pushNewFrame):
    25000         (MatchStack::popCurrentFrame):
    25001         (MatchStack::popAllFrames):
    25002         (match):
    25003         (jsRegExpExecute):
    25004         * pcre/pcre_internal.h:
    25005 
    25006 2007-11-24  Eric Seidel  <[email protected]>
    25007 
    25008         Reviewed by Sam.
    25009 
    25010         Get rid of GETCHAR* macros, replacing them with better named inlines
    25011 
    25012         * pcre/pcre_compile.cpp:
    25013         (compile_branch):
    25014         (calculateCompiledPatternLengthAndFlags):
    25015         * pcre/pcre_exec.cpp:
    25016         (match):
    25017         * pcre/pcre_internal.h:
    25018         (getCharAndAdvance):
    25019         (getCharAndLength):
    25020         (getCharAndAdvanceIfSurrogate):
    25021 
    25022 2007-11-24  Eric Seidel  <[email protected]>
    25023 
    25024         Reviewed by Sam.
    25025 
    25026         Further cleanup GET/PUT inlines
    25027 
    25028         * pcre/pcre_internal.h:
    25029         (putOpcodeValueAtOffset):
    25030         (getOpcodeValueAtOffset):
    25031         (putOpcodeValueAtOffsetAndAdvance):
    25032         (put2ByteOpcodeValueAtOffset):
    25033         (get2ByteOpcodeValueAtOffset):
    25034         (put2ByteOpcodeValueAtOffsetAndAdvance):
    25035 
    25036 2007-11-24  Eric Seidel  <[email protected]>
    25037 
    25038         Reviewed by Sam.
    25039 
    25040         Give GET, PUT better names, and add (poor) moveOpcodePtrPastAnyAlternateBranches
    25041 
    25042         * pcre/pcre_compile.cpp:
    25043         (firstSignificantOpCodeSkippingAssertions):
    25044         (find_fixedlength):
    25045         (complete_callout):
    25046         (compile_branch):
    25047         (compile_regex):
    25048         (is_anchored):
    25049         (canApplyFirstCharOptimization):
    25050         (find_firstassertedchar):
    25051         * pcre/pcre_exec.cpp:
    25052         (match):
    25053         * pcre/pcre_internal.h:
    25054         (putOpcodeValueAtOffset):
    25055         (getOpcodeValueAtOffset):
    25056         (putOpcodeValueAtOffsetAndAdvance):
    25057         (put2ByteOpcodeValueAtOffset):
    25058         (get2ByteOpcodeValueAtOffset):
    25059         (moveOpcodePtrPastAnyAlternateBranches):
    25060         * pcre/pcre_ucp_searchfuncs.cpp:
    25061         (_pcre_ucp_othercase):
    25062 
    25063 2007-11-24  Eric Seidel  <[email protected]>
    25064 
    25065         Reviewed by Sam.
    25066 
    25067         Add inlines for toLowerCase, isWordChar, isSpaceChar for further regexp speedup
    25068 
    25069         * pcre/pcre_compile.cpp:
    25070         (compile_branch):
    25071         (jsRegExpCompile):
    25072         * pcre/pcre_exec.cpp:
    25073         (match):
    25074         (jsRegExpExecute):
    25075         * pcre/pcre_internal.h:
    25076         (toLowerCase):
    25077         (flipCase):
    25078         (classBitmapForChar):
    25079         (charTypeForChar):
    25080         (isWordChar):
    25081         (isSpaceChar):
    25082         (CompileData::CompileData):
    25083         * pcre/pcre_xclass.cpp:
    25084         (_pcre_xclass):
    25085 
    25086 2007-11-24  Eric Seidel  <[email protected]>
    25087 
    25088         Reviewed by Sam.
    25089 
    25090         cleanup _pcre_ucp_othercase
    25091 
    25092         * pcre/pcre_ucp_searchfuncs.cpp:
    25093         (_pcre_ucp_othercase):
    25094 
    25095 2007-11-24  Eric Seidel  <[email protected]>
    25096 
    25097         Reviewed by Maciej.
    25098 
    25099         Use better variable names for case ignoring options
    25100 
    25101         * pcre/pcre_compile.cpp:
    25102         (compile_branch):
    25103         (find_firstassertedchar):
    25104         (printCompiledRegExp):
    25105         (jsRegExpCompile):
    25106         * pcre/pcre_exec.cpp:
    25107         (match_ref):
    25108         (match):
    25109         (jsRegExpExecute):
    25110         * pcre/pcre_internal.h:
    25111 
    25112 2007-11-24  Eric Seidel  <[email protected]>
    25113 
    25114         Reviewed by Sam.
    25115 
    25116         split first_significant_code into two simpler functions
    25117 
    25118         * pcre/pcre_compile.cpp:
    25119         (firstSignificantOpCode):
    25120         (firstSignificantOpCodeSkippingAssertions):
    25121         (is_anchored):
    25122         (canApplyFirstCharOptimization):
    25123         (find_firstassertedchar):
    25124 
    25125 2007-11-24  Eric Seidel  <[email protected]>
    25126 
    25127         Reviewed by Sam.
    25128 
    25129         clean up is_counted_repeat
    25130 
    25131         * pcre/pcre_compile.cpp:
    25132         (is_counted_repeat):
    25133 
    25134 2007-11-24  Eric Seidel  <[email protected]>
    25135 
    25136         Reviewed by Sam.
    25137 
    25138         clean up check_escape
    25139 
    25140         * pcre/pcre_compile.cpp:
    25141         (check_escape):
    25142 
    25143 2007-11-24  Eric Seidel  <[email protected]>
    25144 
    25145         Reviewed by Sam.
    25146 
    25147         Reformat find_fixedlength
    25148 
    25149         * pcre/pcre_compile.cpp:
    25150         (find_fixedlength):
    25151 
    25152 2007-11-24  Eric Seidel  <[email protected]>
    25153 
    25154         Reviewed by Sam.
    25155 
    25156         reformat is_anchored
    25157 
    25158         * pcre/pcre_compile.cpp:
    25159         (is_anchored):
    25160 
    25161 2007-11-24  Eric Seidel  <[email protected]>
    25162 
    25163         Reviewed by Maciej.
    25164 
    25165         Remove unused function could_be_empty_branch
    25166 
    25167         * pcre/pcre_compile.cpp:
    25168         (first_significant_code):
    25169         (find_fixedlength):
    25170         (compile_branch):
    25171         (canApplyFirstCharOptimization):
    25172 
    25173 2007-11-24  Eric Seidel  <[email protected]>
    25174 
    25175         Reviewed by Sam.
    25176 
    25177         Pass around MatchData objects by reference
    25178 
    25179         * pcre/pcre_exec.cpp:
    25180         (pchars):
    25181         (match_ref):
    25182         (match):
    25183         (jsRegExpExecute):
    25184 
    25185 2007-11-24  Eric Seidel  <[email protected]>
    25186 
    25187         Reviewed by Sam.
    25188 
    25189         give PCRE_STARTLINE a better name and rename match_data to MatchData
    25190 
    25191         * pcre/pcre_compile.cpp:
    25192         (compile_branch):
    25193         (canApplyFirstCharOptimization):
    25194         (find_firstassertedchar):
    25195         (printCompiledRegExp):
    25196         (jsRegExpCompile):
    25197         * pcre/pcre_exec.cpp:
    25198         (pchars):
    25199         (jsRegExpExecute):
    25200         * pcre/pcre_internal.h:
    25201 
    25202 2007-11-24  Eric Seidel  <[email protected]>
    25203 
    25204         Reviewed by Sam.
    25205 
    25206         Clean up find_firstassertedchar
    25207 
    25208         * pcre/pcre_compile.cpp:
    25209         (get_othercase_range):
    25210         (find_firstassertedchar):
    25211         (calculateCompiledPatternLengthAndFlags):
    25212 
    25213 2007-11-24  Eric Seidel  <[email protected]>
    25214 
    25215         Reviewed by Tim Hatcher.
    25216 
    25217         Pass around CompileData& instead of CompileData*
    25218 
    25219         * pcre/pcre_compile.cpp:
    25220         (compile_branch):
    25221         (jsRegExpCompile):
    25222 
    25223 2007-11-24  Eric Seidel  <[email protected]>
    25224 
    25225         Reviewed by Sam.
    25226 
    25227         Clean up compile_branch, move _pcre_ord2utf8, and rename CompileData
    25228 
    25229         * JavaScriptCore.xcodeproj/project.pbxproj:
    25230         * pcre/pcre_compile.cpp:
    25231         (_pcre_ord2utf8):
    25232         (calculateCompiledPatternLengthAndFlags):
    25233         (jsRegExpCompile):
    25234         * pcre/pcre_internal.h:
    25235         * pcre/pcre_ord2utf8.cpp: Removed.
    25236 
    25237 2007-11-24  Eric Seidel  <[email protected]>
    25238 
    25239         Reviewed by Sam.
    25240 
    25241         removing more macros
    25242 
    25243         * pcre/pcre_compile.cpp:
    25244         (could_be_empty_branch):
    25245         (compile_branch):
    25246         (calculateCompiledPatternLengthAndFlags):
    25247         * pcre/pcre_exec.cpp:
    25248         (match):
    25249         (jsRegExpExecute):
    25250         * pcre/pcre_internal.h:
    25251         * pcre/pcre_xclass.cpp:
    25252 
    25253 2007-11-24  Eric Seidel  <[email protected]>
    25254 
    25255         Reviewed by Maciej.
    25256 
    25257         clean up formating in compile_branch
    25258 
    25259         * pcre/pcre_compile.cpp:
    25260         (compile_branch):
    25261 
    25262 2007-11-24  Eric Seidel  <[email protected]>
    25263 
    25264         Reviewed by Sam.
    25265 
    25266         Fix spacing for read_repeat_counts
    25267 
    25268         * pcre/pcre_compile.cpp:
    25269         (read_repeat_counts):
    25270 
    25271 2007-11-24  Eric Seidel  <[email protected]>
    25272 
    25273         Reviewed by Sam.
    25274 
    25275         Get rid of PCRE custom char types
    25276 
    25277         * pcre/pcre_compile.cpp:
    25278         (check_escape):
    25279         (complete_callout):
    25280         (compile_branch):
    25281         (compile_regex):
    25282         (calculateCompiledPatternLengthAndFlags):
    25283         (jsRegExpCompile):
    25284         * pcre/pcre_exec.cpp:
    25285         (match_ref):
    25286         (match):
    25287         (jsRegExpExecute):
    25288         * pcre/pcre_internal.h:
    25289 
    25290 2007-11-24  Eric Seidel  <[email protected]>
    25291 
    25292         Reviewed by Sam.
    25293 
    25294         reformat get_othercase_range
    25295 
    25296         * pcre/pcre_compile.cpp:
    25297         (get_othercase_range):
    25298 
    25299 2007-11-24  Eric Seidel  <[email protected]>
    25300 
    25301         Reviewed by Maciej.
    25302 
    25303         Remove register keyword and more cleanup
    25304 
    25305         * pcre/pcre_compile.cpp:
    25306         (find_fixedlength):
    25307         (compile_branch):
    25308         (is_anchored):
    25309         (is_startline):
    25310         (find_firstassertedchar):
    25311         (calculateCompiledPatternLengthAndFlags):
    25312         (jsRegExpCompile):
    25313         * pcre/pcre_exec.cpp:
    25314         (MatchStack::canUseStackBufferForNextFrame):
    25315         (MatchStack::allocateNextFrame):
    25316         (MatchStack::pushNewFrame):
    25317         (MatchStack::frameIsStackAllocated):
    25318         (MatchStack::popCurrentFrame):
    25319         (MatchStack::unrollAnyHeapAllocatedFrames):
    25320         (getUTF8CharAndIncrementLength):
    25321         (match):
    25322         (jsRegExpExecute):
    25323         * pcre/pcre_internal.h:
    25324         (PUT2INC):
    25325         (isLeadingSurrogate):
    25326         (isTrailingSurrogate):
    25327         (decodeSurrogatePair):
    25328         (getChar):
    25329         * pcre/pcre_ord2utf8.cpp:
    25330         (_pcre_ord2utf8):
    25331         * pcre/pcre_xclass.cpp:
    25332         (getUTF8CharAndAdvancePointer):
    25333         (_pcre_xclass):
    25334 
    25335 2007-11-24  Eric Seidel  <[email protected]>
    25336 
    25337         Reviewed by Maciej.
    25338 
    25339         Clean up jsRegExpExecute
    25340 
    25341         * pcre/pcre_compile.cpp:
    25342         (returnError):
    25343         (jsRegExpCompile):
    25344         * pcre/pcre_exec.cpp:
    25345         (jsRegExpExecute):
    25346         * pcre/pcre_internal.h:
    25347 
    25348 2007-11-29  Oliver Hunt  <[email protected]>
    25349 
    25350         Reviewed by Geoff.
    25351 
    25352         Merging updated system alloc and spinlock code from r38 of TCMalloc.
    25353 
    25354         This is needed as a precursor to the merge of TCMalloc proper.
    25355 
    25356         * wtf/FastMalloc.cpp:
    25357         (WTF::TCMalloc_PageHeap::GrowHeap):
    25358         * wtf/TCSpinLock.h:
    25359         (TCMalloc_SpinLock::TCMalloc_SpinLock):
    25360         (TCMalloc_SpinLock::):
    25361         (TCMalloc_SpinLock::Lock):
    25362         (TCMalloc_SpinLock::Unlock):
    25363         (TCMalloc_SpinLock::IsHeld):
    25364         * wtf/TCSystemAlloc.cpp:
    25365         (TrySbrk):
    25366         (TryMmap):
    25367         (TryVirtualAlloc):
    25368         (TryDevMem):
    25369         (TCMalloc_SystemAlloc):
    25370         * wtf/TCSystemAlloc.h:
    25371 
    25372 2007-11-28  Brady Eidson <[email protected]>
    25373 
    25374         Reviewed by Geoff
    25375 
    25376         Add copyKeysToVector utility, mirroring copyValuesToVector
    25377         Also change the copyValuesToVector implementation to be a little more attractive
    25378 
    25379         * wtf/HashMap.h:
    25380         (WTF::copyKeysToVector):
    25381         (WTF::copyValuesToVector):
    25382 
    25383 2007-11-27  Alp Toker  <[email protected]>
    25384 
    25385         Reviewed by Mark Rowe.
    25386 
    25387         Add a list of public JavaScriptCore headers for installation.
    25388 
    25389         This follows the convention used for the Qt and GTK+ header lists.
    25390 
    25391         * headers.pri: Added.
    25392 
    25393 2007-11-27  Alp Toker  <[email protected]>
    25394 
    25395         Prospective MSVC build fix.
    25396 
    25397         Roll back dllexport/dllimport support for now.
    25398 
    25399         * API/JSBase.h:
    25400 
    25401 2007-11-27  Alp Toker  <[email protected]>
    25402 
    25403         Reviewed by Maciej.
    25404 
    25405         http://bugs.webkit.org/show_bug.cgi?id=15569
    25406         [gtk] GTK JavaScriptCore needs to export symbols for JSC API and WTF
    25407 
    25408         Introduce JS_EXPORT to mark symbols to be exported as public API.
    25409 
    25410         Export all public symbols in the JavaScriptCore C API.
    25411 
    25412         This matches conventions for exporting symbols set by the CF and CG
    25413         frameworks.
    25414 
    25415         * API/JSBase.h:
    25416         * API/JSContextRef.h:
    25417         * API/JSObjectRef.h:
    25418         * API/JSStringRef.h:
    25419         * API/JSStringRefBSTR.h:
    25420         * API/JSStringRefCF.h:
    25421         * API/JSValueRef.h:
    25422 
    25423 2007-11-27  Anders Carlsson  <[email protected]>
    25424 
    25425         Reviewed by Adam.
    25426 
    25427         Make PropertyNameArray and ScopeChain COMEnumVariant friendly.
    25428        
    25429         * kjs/PropertyNameArray.cpp:
    25430         (KJS::PropertyNameArray::swap):
    25431         Implement PropertyNameArray::swap.
    25432        
    25433         * kjs/PropertyNameArray.h:
    25434         Add ValueType typedef. Replace PropertyNameArrayIterator with
    25435         PropertyNameArray::const_iterator.
    25436        
    25437         * kjs/nodes.cpp:
    25438         (KJS::ForInNode::execute):
    25439         * kjs/scope_chain.cpp:
    25440         (KJS::ScopeChain::print):
    25441         Update for changes to PropertyNameArray.
    25442        
    25443         * kjs/scope_chain.h:
    25444         Add const_iterator and ValueType typedef.
    25445        
    25446 2007-11-27  Anders Carlsson  <[email protected]>
    25447 
    25448         Reviewed by Darin.
    25449 
    25450         Add a ValueType typedef.
    25451        
    25452         * wtf/Vector.h:
    25453 
    25454 2007-11-26  Darin Adler  <[email protected]>
    25455 
    25456         Reviewed by Mitz.
    25457 
    25458         - fix http://bugs.webkit.org/show_bug.cgi?id=16096
    25459           REGRESSION (r26653-r26699): Plaxo.com addressbook does not load in webkit nightlies
    25460 
    25461         Test: fast/js/regexp-overflow.html
    25462 
    25463         * pcre/pcre_compile.cpp: (calculateCompiledPatternLengthAndFlags):
    25464         Removed a stray "ptr++" that I added by accident when merging the
    25465         changes between PCRE 6.4 and 6.5.
    25466 
    25467 2007-11-26  Geoffrey Garen  <[email protected]>
    25468 
    25469         Reviewed by Kevin McCullough.
    25470        
    25471         Fixed <rdar://problem/5597937> REGRESSION (r27126): Drosera does not
    25472         show variables (can't enumerate ActivationImp properties)
    25473        
    25474         Implemented a custom ActivationImp::getPropertyNames, since
    25475         ActivationImp now uses a custom property storage mechanism for local
    25476         variables.
    25477 
    25478         * kjs/function.cpp:
    25479         (KJS::ActivationImp::getPropertyNames):
    25480         * kjs/function.h:
    25481 
    25482 2007-11-26  Alp Toker  <[email protected]>
    25483 
    25484         GTK+/Qt/Wx build fix for breakage introduced in r28039.
    25485 
    25486         * ForwardingHeaders/JavaScriptCore/JSRetainPtr.h: Added.
    25487 
    25488 2007-11-24  Laszlo Gombos  <[email protected]>
    25489 
    25490         Reviewed by Maciej Stachowiak.
    25491 
    25492         Fix minor compiler warning (GCC 4.1.3)
    25493 
    25494         * pcre/pcre_internal.h:
    25495         * pcre/pcre_ucp_searchfuncs.cpp:
    25496         (_pcre_ucp_othercase):
    25497 
    25498 2007-11-25  Mark Rowe  <[email protected]>
    25499 
    25500         Reviewed by Dan Bernstein.
    25501 
    25502         Fix http://bugs.webkit.org/show_bug.cgi?id=16129
    25503         Bug 16129: REGRESSION (r27761-r27811): malloc error while visiting http://mysit.es (crashes release build)
    25504 
    25505         * pcre/pcre_compile.cpp: Change errorcode to be passed by reference so that any error code is propagated
    25506         to our caller like they expect.
    25507 
    25508 2007-11-23  Kevin Ollivier  <[email protected]>
    25509 
    25510         MSVC7 build fix. (rand_s doesn't exist there)
    25511 
    25512         Reviewed by Adam Roben.
    25513 
    25514         * kjs/config.h:
    25515         * wtf/MathExtras.h:
    25516 
    25517 2007-11-23  Kevin Ollivier  <[email protected]>
    25518 
    25519         wx build fix. Move WX_PYTHON logic into project build settings,
    25520         add WebKitLibraries dirs on Win, and explicitly include JSCore
    25521         headers in testkjs rather than getting them from a template.
    25522         (Include dir order of JSCore/WTF and ICU headers is important due 
    25523         to wtf/unicode/utf8.h.)
    25524 
    25525         * jscore.bkl:
    25526 
    25527 2007-11-23  Simon Hausmann  <[email protected]>
    25528 
    25529         Reviewed by George Staikos <[email protected]>.
    25530 
    25531         Fix make (dist)clean on Windows.
    25532        
    25533         OBJECTS_DIR_WTR does not exist anymore, use GENERATED_SOURCES_DIR.
    25534        
    25535 
    25536         * JavaScriptCore.pri:
    25537         * pcre/pcre.pri:
    25538 
    25539 2007-11-22  Simon Hausmann  <[email protected]>
    25540 
    25541         Reviewed by George.
    25542 
    25543         Make the directory of where to put the generated sources configurable through the GENERATED_SOURCE_DIR variable
    25544 
    25545         * JavaScriptCore.pri:
    25546         * pcre/pcre.pri:
    25547 
    25548 2007-11-22  Simon Hausmann  <[email protected]>
    25549 
    25550         Reviewed by George.
    25551 
    25552         Centralize the setup for all the extra compilers in a addExtraCompiler function.
    25553        
    25554         This allows adding a "generated_files" target that builds all generated files using "make generated_files".
    25555         For the build inside Qt we do not generate actual rules for the extra compilers but instead
    25556         do the variable substitution of compiler.output manually and add the generated sources to SOURCES.
    25557 
    25558         * JavaScriptCore.pri:
    25559         * pcre/pcre.pri:
    25560 
    25561 2007-11-20  Mark Rowe  <[email protected]>
    25562 
    25563         Reviewed by Tim Hatcher.
    25564 
    25565         <rdar://problem/5602936> Need to resolve new GCC 4.2 warnings
    25566 
    25567         Fix all warnings emitted by GCC 4.2 when building JavaScriptCore.  This allows builds with
    25568         -Werror to succeed.  At present they will crash when executed due to code that is not safe
    25569         under strict aliasing (<rdar://problem/5536806>).
    25570 
    25571         * Configurations/Base.xcconfig: Remove the -Wno-long-double flag.
    25572         * kjs/date_object.cpp:
    25573         (KJS::formatTime): Test whether the stack-allocated string is empty rather than at a non-null address.
    25574         * kjs/dtoa.cpp:
    25575         (Bigint::): Tweak formatting to silence warnings.
    25576         * pcre/pcre_exec.cpp:
    25577         (match): Tweak formatting to silence warnings
    25578         * wtf/Assertions.cpp: Add printf format attribute to functions that warrant it.
    25579         * wtf/Assertions.h: Ditto.
    25580 
    25581 2007-11-19  Kevin Ollivier  <[email protected]>
    25582 
    25583         wx port build fix (wx headers include ctype functions).
    25584 
    25585         * kjs/config.h:
    25586 
    25587 2007-11-19  Kevin Ollivier  <[email protected]>
    25588 
    25589         Remove outdated and unused Windows port files.
    25590 
    25591         Reviewed by Adam Roben.
    25592 
    25593         * Makefile.vc: Removed.
    25594         * README-Win32.txt: Removed.
    25595 
    25596 2007-11-18  Eric Seidel  <[email protected]>
    25597 
    25598         Reviewed by Oliver.
    25599 
    25600         * tests/mozilla/jsDriver.pl: exit non-0 when user aborts test run
    25601 
    25602 2007-11-17  Mark Rowe  <[email protected]>
    25603 
    25604         Reviewed by Darin Adler.
    25605 
    25606         Fix: <rdar://problem/5607032> REGRESSION: testapi exits with assertion failure in debug build
    25607              <rdar://problem/5440659> JSGlobalContextCreate throws away globalObjectClass's prototype
    25608              http://bugs.webkit.org/show_bug.cgi?id=16033
    25609 
    25610         Split Interpreter's initialization into two distinct steps:  the creation of the global prototypes
    25611         and constructors, and storing them on the global object.  This allows JSClassRef's passed to
    25612         JSGlobalContextCreate to be instantiated with the correct prototype.
    25613 
    25614         * API/JSCallbackObject.cpp: Assert at compile-time that the custom global object will fit in a collector cell.
    25615         * API/JSCallbackObject.h:
    25616         * API/JSCallbackObjectFunctions.h:
    25617         (KJS::::JSCallbackObject):
    25618         (KJS::::init):
    25619         * API/JSContextRef.cpp:
    25620         (JSGlobalContextCreate): Construct and set the interpreter's global object separately.  When globalObjectClass
    25621         is passed we need to set the interpreter's global object before doing the JSCallbackObject's initialization to
    25622         prevent any JSObjectInitializeCallback's being invoked before a global object is set.
    25623         * API/testapi.c:
    25624         (globalObject_initialize): Test the object passed in is correct and that it has the expected global properties.
    25625         (globalObject_get):
    25626         (globalObject_set):
    25627         (main):
    25628         * API/testapi.js: Test that any static properties exposed by the global object's custom class are found.
    25629         * JavaScriptCore.exp:
    25630         * bindings/testbindings.cpp:
    25631         (main): Update for changes in Interpreter method signatures.
    25632         * bindings/testbindings.mm:
    25633         (main): Ditto.
    25634         * kjs/ExecState.cpp:
    25635         (KJS::ExecState::ExecState):
    25636         (KJS::ExecState::mark):
    25637         (KJS::ExecState::setGlobalObject):
    25638         * kjs/ExecState.h: Rename scope to m_scopeChain.
    25639         * kjs/interpreter.cpp:
    25640         (KJS::Interpreter::Interpreter):
    25641         (KJS::Interpreter::init):
    25642         (KJS::Interpreter::globalObject):
    25643         (KJS::Interpreter::setGlobalObject):
    25644         (KJS::Interpreter::resetGlobalObjectProperties):
    25645         (KJS::Interpreter::createObjectsForGlobalObjectProperties):
    25646         (KJS::Interpreter::setGlobalObjectProperties): Switch to using putDirect to ensure that the global object's put method
    25647         cannot interfere with setting of the global properties.  This prevents a user-written JSClassRef from attempting to
    25648         call back into JavaScript from the initialization of the global object's members.
    25649         * kjs/interpreter.h:
    25650         * kjs/testkjs.cpp:
    25651         (setupInterpreter): Update for changes in Interpreter method signatures.
    25652 
    25653 2007-11-17  Mark Rowe  <[email protected]>
    25654 
    25655         Reviewed by Sam Weinig.
    25656 
    25657         Prevent testapi from reporting false leaks.  Clear out local variables pointing at
    25658         JSObjectRefs to allow their values to be collected.
    25659 
    25660         * API/testapi.c:
    25661         (main):
    25662 
    25663 2007-11-17  Mark Rowe  <[email protected]>
    25664 
    25665         Reviewed by Sam Weinig.
    25666 
    25667         Prevent testapi from crashing if testapi.js can not be found by nil-checking the result of createStringWithContentsOfFile.
    25668 
    25669         * API/testapi.c:
    25670         (main):
    25671 
    25672 2007-11-17  Alp Toker  <[email protected]>
    25673 
    25674         Reviewed by Eric.
    25675 
    25676         http://bugs.webkit.org/show_bug.cgi?id=16032
    25677         JS minidom is not portable
    25678 
    25679         Use a plain UTF-8 string instead of a CFString.
    25680 
    25681         Print to stdout, not stderr like CFShow() would have done, since that
    25682         behaviour seems unintentional.
    25683 
    25684         * API/minidom.c:
    25685         (main):
    25686 
    25687 2007-11-17  Steve Falkenburg  <[email protected]>
    25688 
    25689         Windows build fix.
    25690 
    25691         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    25692 
    25693 2007-11-16  Mark Rowe  <[email protected]>
    25694 
    25695         Windows build fix.
    25696 
    25697         * kjs/lexer.cpp:
    25698         (KJS::Lexer::record8):
    25699 
    25700 2007-11-16  Mark Rowe  <[email protected]>
    25701 
    25702         Reviewed by Eric.
    25703 
    25704         Replace strings, identifier, buffer8 and buffer16 members of Lexer with vectors.
    25705         SunSpider claims this is a 0.7% speedup.
    25706 
    25707         * kjs/lexer.cpp:
    25708         (KJS::Lexer::Lexer):
    25709         (KJS::Lexer::lex):
    25710         (KJS::Lexer::record8):
    25711         (KJS::Lexer::record16):
    25712         (KJS::Lexer::scanRegExp):
    25713         (KJS::Lexer::clear):
    25714         (KJS::Lexer::makeIdentifier):
    25715         (KJS::Lexer::makeUString):
    25716         * kjs/lexer.h:
    25717         * kjs/ustring.cpp:
    25718         (KJS::UString::UString): Add a convenience constructor that takes a const Vector<UChar>&.
    25719         * kjs/ustring.h:
    25720 
    25721 2007-11-16  Adam Roben  <[email protected]>
    25722 
    25723         Windows build fix
    25724 
    25725         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Add a new include path
    25726         and ignore the int -> bool conversion warning.
    25727 
    25728 2007-11-16  Alexey Proskuryakov  <[email protected]>
    25729 
    25730         Fix Windows debug build.
    25731         Rubber-stamped by Eric
    25732 
    25733         * pcre/pcre_exec.cpp: (match): Removed ASSERT_NOT_REACHED assertions that were making MSVC
    25734         complain about unreachable code.
    25735 
    25736 2007-11-15  Mark Rowe  <[email protected]>
    25737 
    25738         Gtk build fix.
    25739 
    25740         * kjs/Parser.cpp:
    25741 
    25742 2007-11-15  Mark Rowe  <[email protected]>
    25743 
    25744         Mac build and header search path sanity fix.
    25745 
    25746         Reviewed by Sam Weinig and Tim Hatcher.
    25747 
    25748         Move base setting for HEADER_SEARCH_PATHS into Base.xcconfig, and extend
    25749         it in JavaScriptCore.xcconfig.  This removes the need to override it on a
    25750         per-target basis inside the .xcodeproj file.
    25751 
    25752         * Configurations/Base.xcconfig:
    25753         * Configurations/JavaScriptCore.xcconfig:
    25754         * JavaScriptCore.xcodeproj/project.pbxproj:
    25755 
    25756 2007-11-15  Mark Rowe  <[email protected]>
    25757 
    25758         Qt build fix.
    25759 
    25760         * kjs/Parser.h:
    25761 
    25762 2007-11-15  Geoffrey Garen  <[email protected]>
    25763 
    25764         Reviewed by Eric Seidel.
    25765 
    25766         Another round of grammar / parsing cleanup.
    25767        
    25768         1. Created distinct parser calls for parsing function bodies vs
    25769         programs. This will help later with optimizing global variable access.
    25770        
    25771         2. Turned Parser into a singleton. Cleaned up Lexer's singleton
    25772         interface.
    25773        
    25774         3. Modified Lexer to free a little more memory when done lexing. (Added
    25775         FIXMEs for similar issues that I didn't fix.)
    25776        
    25777         4. Changed Lexer::makeIdentifier and Lexer::makeUString to start
    25778         respecting the arguments passed to them. (No behavior change, but this
    25779         problem could have caused serious problems for an unsuspecting user of
    25780         these functions.)
    25781        
    25782         5. Removed KJS_DEBUG_MEM because it was bit-rotted.
    25783        
    25784         6. Removed Parser::prettyPrint because the same work was simpler to do
    25785         at the call site.
    25786        
    25787         7. Some renames:
    25788        
    25789             "Parser::accept" => "Parser::didFinishParsing"
    25790             "Parser::sid" => "Parser::m_sourceID"
    25791             "Lexer::doneParsing" => "Lexer::clear"
    25792             "sid" => "sourceId"
    25793             "lineno" => "lineNo"
    25794        
    25795         * JavaScriptCore.exp:
    25796         * kjs/Parser.cpp:
    25797         (KJS::Parser::Parser):
    25798         (KJS::Parser::parseProgram):
    25799         (KJS::Parser::parseFunctionBody):
    25800         (KJS::Parser::parse):
    25801         (KJS::Parser::didFinishParsing):
    25802         (KJS::parser):
    25803         * kjs/Parser.h:
    25804         (KJS::Parser::sourceId):
    25805         * kjs/function.cpp:
    25806         (KJS::GlobalFuncImp::callAsFunction):
    25807         * kjs/function_object.cpp:
    25808         (FunctionObjectImp::construct):
    25809         * kjs/grammar.y:
    25810         * kjs/interpreter.cpp:
    25811         (KJS::Interpreter::checkSyntax):
    25812         (KJS::Interpreter::evaluate):
    25813         * kjs/interpreter.h:
    25814         * kjs/lexer.cpp:
    25815         (kjsyylex):
    25816         (KJS::lexer):
    25817         (KJS::Lexer::Lexer):
    25818         (KJS::Lexer::~Lexer):
    25819         (KJS::Lexer::scanRegExp):
    25820         (KJS::Lexer::doneParsing):
    25821         (KJS::Lexer::makeIdentifier):
    25822         (KJS::Lexer::makeUString):
    25823         * kjs/lexer.h:
    25824         (KJS::Lexer::pattern):
    25825         (KJS::Lexer::flags):
    25826         (KJS::Lexer::sawError):
    25827         * kjs/nodes.cpp:
    25828         (KJS::Node::Node):
    25829         (KJS::FunctionBodyNode::FunctionBodyNode):
    25830         * kjs/nodes.h:
    25831         * kjs/testkjs.cpp:
    25832         (prettyPrintScript):
    25833         (kjsmain):
    25834         * kjs/ustring.cpp:
    25835         * kjs/ustring.h:
    25836 
    25837 2007-11-15  Oliver Hunt  <[email protected]>
    25838 
    25839         Reviewed by Darin.
    25840 
    25841         <rdar://problem/5601548> REGRESSION: All SourceElements and their children leak after a syntax error
    25842        
    25843         Add a stub node to maintain the Vector of SourceElements until assignment.
    25844 
    25845         * kjs/grammar.y:
    25846         * kjs/nodes.h:
    25847         (KJS::SourceElementsStub::SourceElementsStub):
    25848         (KJS::SourceElementsStub::append):
    25849         (KJS::SourceElementsStub::release):
    25850         (KJS::SourceElementsStub::):
    25851         (KJS::SourceElementsStub::precedence):
    25852 
    25853 2007-11-15  Eric Seidel  <[email protected]>
    25854 
    25855         Reviewed by Sam.
    25856 
    25857         Abstract most of RMATCH into MatchStack functions.
    25858        
    25859         SunSpider claims this, combined with the last 2 patches was a 1% speedup, 10% for dna-regexp.
    25860 
    25861         * pcre/pcre_exec.cpp:
    25862         (MatchStack::canUseStackBufferForNextFrame):
    25863         (MatchStack::allocateNextFrame):
    25864         (MatchStack::pushNewFrame):
    25865         (MatchStack::frameIsStackAllocated):
    25866         (MatchStack::popCurrentFrame):
    25867         (MatchStack::unrollAnyHeapAllocatedFrames):
    25868         (match):
    25869 
    25870 2007-11-15  Eric Seidel  <[email protected]>
    25871 
    25872         Reviewed by Sam.
    25873 
    25874         Remove RETURN_ERROR, add MatchStack
    25875        
    25876         * pcre/pcre_exec.cpp:
    25877         (MatchStack::MatchStack):
    25878         (MatchStack::unrollAnyHeapAllocatedFrames):
    25879         (matchError):
    25880         (match):
    25881        
    25882 2007-11-15  Eric Seidel  <[email protected]>
    25883 
    25884         Reviewed by Sam.
    25885 
    25886         Clean up match function to match WebKit style
    25887 
    25888         * JavaScriptCore.xcodeproj/project.pbxproj:
    25889         * pcre/pcre_exec.cpp:
    25890         (match):
    25891 
    25892 2007-11-15  Steve Falkenburg  <[email protected]>
    25893 
    25894         Windows build fix.
    25895 
    25896         * JavaScriptCore.vcproj/JavaScriptCore.make:
    25897 
    25898 2007-11-14  Alexey Proskuryakov  <[email protected]>
    25899 
    25900         Reviewed by Darin.
    25901 
    25902         http://bugs.webkit.org/show_bug.cgi?id=15982
    25903         Improve JSString UTF-8 decoding
    25904 
    25905         * API/JSStringRef.cpp:
    25906         (JSStringCreateWithUTF8CString): Use strict decoding, return 0 on error.
    25907 
    25908         * wtf/unicode/UTF8.cpp:
    25909         (WTF::Unicode::convertUTF16ToUTF8):
    25910         (WTF::Unicode::convertUTF8ToUTF16):
    25911         * wtf/unicode/UTF8.h:
    25912         Made these function names start with a lower case letter.
    25913 
    25914         * kjs/ustring.cpp: (KJS::UString::UTF8String): Updated for the above renaming.
    25915 
    25916         * bindings/c/c_utility.cpp:
    25917         (KJS::Bindings::convertUTF8ToUTF16WithLatin1Fallback): Renamed to highlight the difference
    25918         from convertUTF8ToUTF16 in wtf/unicode.
    25919         (KJS::Bindings::convertNPStringToUTF16): Updated for the above renaming.
    25920         (KJS::Bindings::identifierFromNPIdentifier): Ditto.
    25921         * bindings/c/c_utility.h: Made convertUTF8ToUTF16WithLatin1Fallback() a file static.
    25922 
    25923 2007-11-14  Sam Weinig  <[email protected]>
    25924 
    25925         Rubber-stamped by Anders.
    25926 
    25927         Fix the Xcode project file after it was messed up in r27402.
    25928 
    25929         * JavaScriptCore.xcodeproj/project.pbxproj:
    25930 
    25931 2007-11-14  Eric Seidel  <[email protected]>
    25932 
    25933         Reviewed by Oliver.
    25934        
    25935         More PCRE style cleanup.
    25936 
    25937         * pcre/pcre_compile.cpp:
    25938         (compile_regex):
    25939 
    25940 2007-11-14  Adam Roben  <[email protected]>
    25941 
    25942         Clean up the bison conflict checking script
    25943 
    25944         Reviewed by Geoff.
    25945 
    25946         * DerivedSources.make:
    25947 
    25948 2007-11-14  Eric Seidel  <[email protected]>
    25949 
    25950         Reviewed by Geoff.
    25951 
    25952         Another round of PCRE cleanups: inlines
    25953        
    25954         SunSpider claims that this, combined with my previous PCRE cleanup were a 0.7% speedup, go figure.
    25955 
    25956         * pcre/pcre_compile.cpp:
    25957         (jsRegExpCompile):
    25958         * pcre/pcre_exec.cpp:
    25959         (match):
    25960         (jsRegExpExecute):
    25961         * pcre/pcre_internal.h:
    25962         (PUT):
    25963         (GET):
    25964         (PUT2):
    25965         (GET2):
    25966         (isNewline):
    25967 
    25968 2007-11-14  Eric Seidel  <[email protected]>
    25969 
    25970         Reviewed by Sam.
    25971        
    25972         Give PCRE a (small) bath.
    25973         Fix some formating and break things off into separate functions
    25974         http://bugs.webkit.org/show_bug.cgi?id=15993
    25975 
    25976         * pcre/pcre_compile.cpp:
    25977         (calculateCompiledPatternLengthAndFlags):
    25978         (printCompiledRegExp):
    25979         (returnError):
    25980         (jsRegExpCompile):
    25981         * pcre/pcre_internal.h:
    25982         (compile_data::compile_data):
    25983 
    25984 2007-11-14  Geoffrey Garen  <[email protected]>
    25985 
    25986         Reviewed by Eric Seidel.
    25987        
    25988         Cleaned up the JavaScript grammar a bit.
    25989        
    25990         1. Changed BlockNode to always hold a child vector (which may be empty),
    25991         eliminating a few NULL-check branches in the common execution case.
    25992        
    25993         2. Changed the Block production to correctly report its starting and
    25994         ending line numbers to the debugger. (It used to report its ending line
    25995         as its starting line.) Also, removed duplicate line-reporting code
    25996         inside the BlockNode constructor.
    25997        
    25998         3. Moved curly braces up from FunctionBody production into parent
    25999         productions. (I had to move the line number reporting code, too, since
    26000         it depends on the location of the curly braces.) This matches the ECMA
    26001         spec more closely, and makes some future changes I plan easier.
    26002        
    26003         4. Fixed statementList* convenience functions to deal appropriately with
    26004         empty Vectors.
    26005 
    26006         SunSpider reports a small and statistically insignificant speedup.
    26007 
    26008         * kjs/grammar.y:
    26009         * kjs/nodes.cpp:
    26010         (KJS::statementListPushFIFO):
    26011         (KJS::statementListGetDeclarations):
    26012         (KJS::statementListInitializeDeclarationStack):
    26013         (KJS::statementListInitializeVariableAccessStack):
    26014         (KJS::BlockNode::BlockNode):
    26015         (KJS::BlockNode::optimizeVariableAccess):
    26016         (KJS::BlockNode::getDeclarations):
    26017         (KJS::BlockNode::execute):
    26018         (KJS::FunctionBodyNode::initializeDeclarationStacks):
    26019         (KJS::FunctionBodyNode::optimizeVariableAccess):
    26020 
    26021 2007-11-13  Anders Carlsson  <[email protected]>
    26022 
    26023         Add RefCounted.h (And remove Shared.h)
    26024        
    26025         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
    26026 
    26027 2007-11-13  Geoffrey Garen  <[email protected]>
    26028 
    26029         Build fix.
    26030 
    26031         * kjs/regexp.h:
    26032 
    26033 2007-11-13  Geoffrey Garen  <[email protected]>
    26034 
    26035         Reviewed by Anders Carlsson.
    26036 
    26037         Renamed Shared to RefCounted.
    26038 
    26039         * API/JSClassRef.h:
    26040         * JavaScriptCore.xcodeproj/project.pbxproj:
    26041         * kjs/interpreter.h:
    26042         * kjs/regexp.h:
    26043         * wtf/RefCounted.h: Copied from JavaScriptCore/wtf/Shared.h.
    26044         (WTF::RefCounted::RefCounted):
    26045         * wtf/Shared.h: Removed.
    26046 
    26047 2007-11-13  Adam Roben  <[email protected]>
    26048 
    26049         Build fix
    26050 
    26051         Reviewed by Geoff.
    26052 
    26053         * kjs/regexp.h: Added a missing #include.
    26054 
    26055 2007-11-13  Geoffrey Garen  <[email protected]>
    26056 
    26057         Reviewed by Sam Weinig.
    26058 
    26059         Moved Shared.h into wtf so it could be used in more places. Deployed
    26060         Shared in places where JSCore previously had hand-rolled ref-counting
    26061         classes.
    26062 
    26063         * API/JSClassRef.cpp:
    26064         (OpaqueJSClass::OpaqueJSClass):
    26065         * API/JSClassRef.h:
    26066         * API/JSObjectRef.cpp:
    26067         (JSClassRetain):
    26068         (JSClassRelease):
    26069         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
    26070         * JavaScriptCore.xcodeproj/project.pbxproj:
    26071         * kjs/interpreter.cpp:
    26072         (KJS::Interpreter::init):
    26073         * kjs/interpreter.h:
    26074         * kjs/regexp.cpp:
    26075         (KJS::RegExp::RegExp):
    26076         * kjs/regexp.h:
    26077         * wtf/Shared.h: Copied from WebCore/platform/Shared.h.
    26078 
    26079 2007-11-13  Eric Seidel  <[email protected]>
    26080 
    26081         Reviewed by Maciej.
    26082 
    26083         Add an ASSERT to getTruncatedInt32 to enforce proper usage.
    26084         Best part about this patch?  It doesn't break the web!
    26085 
    26086         * kjs/JSImmediate.h:
    26087         (KJS::JSImmediate::getTruncatedInt32):
    26088         (KJS::JSImmediate::toDouble):
    26089         (KJS::JSImmediate::getUInt32):
    26090 
    26091 2007-11-13  Alexey Proskuryakov  <[email protected]>
    26092 
    26093         Windows build fix.
    26094 
    26095         * bindings/c/c_utility.cpp:
    26096         (KJS::Bindings::convertUTF8ToUTF16):
    26097         * kjs/ustring.cpp:
    26098         (KJS::UString::UTF8String):
    26099         * wtf/unicode/UTF8.cpp:
    26100         (WTF::Unicode::ConvertUTF8ToUTF16):
    26101 
    26102 2007-11-13  Darin Adler  <[email protected]>
    26103 
    26104         Reviewed by Geoff.
    26105 
    26106         - fix http://bugs.webkit.org/show_bug.cgi?id=11231
    26107           RegExp bug when handling newline characters
    26108           and a number of other differences between PCRE behvior
    26109           and JavaScript regular expressions:
    26110 
    26111           + single-digit sequences like \4 should be treated as octal
    26112             character constants, unless there is a sufficient number
    26113             of brackets for them to be treated as backreferences
    26114 
    26115           + \8 turns into the character "8", not a binary zero character
    26116             followed by "8" (same for 9)
    26117 
    26118           + only the first 3 digits should be considered part of an
    26119             octal character constant (the old behavior was to decode
    26120             an arbitrarily long sequence and then mask with 0xFF)
    26121 
    26122           + if \x is followed by anything other than two valid hex digits,
    26123             then it should simply be treated a the letter "x"; that includes
    26124             not supporting the \x{41} syntax
    26125 
    26126           + if \u is followed by anything less than four valid hex digits,
    26127             then it should simply be treated a the letter "u"
    26128 
    26129           + an extra "+" should be a syntax error, rather than being treated
    26130             as the "possessive quantifier"
    26131 
    26132           + if a "]" character appears immediately after a "[" character that
    26133             starts a character class, then that's an empty character class,
    26134             rather than being the start of a character class that includes a
    26135             "]" character
    26136 
    26137           + a "$" should not match a terminating newline; we could have gotten
    26138             PCRE to handle this the way we wanted by passing an appropriate option
    26139 
    26140         Test: fast/js/regexp-no-extensions.html
    26141 
    26142         * pcre/pcre_compile.cpp:
    26143         (check_escape): Check backreferences against bracount to catch both
    26144         overflows and things that should be treated as octal. Rewrite octal
    26145         loop to not go on indefinitely. Rewrite both hex loops to match and
    26146         remove \x{} support.
    26147         (compile_branch): Restructure loops so that we don't special-case a "]"
    26148         at the beginning of a character class. Remove code that treated "+" as
    26149         the possessive quantifier.
    26150         (jsRegExpCompile): Change the "]" handling here too.
    26151 
    26152         * pcre/pcre_exec.cpp: (match): Changed CIRC to match the DOLL implementation.
    26153         Changed DOLL to remove handling of "terminating newline", a Perl concept
    26154         which we don't need.
    26155 
    26156         * tests/mozilla/expected.html: Two tests are fixed now:
    26157         ecma_3/RegExp/regress-100199.js and ecma_3/RegExp/regress-188206.js.
    26158         One test fails now: ecma_3/RegExp/perlstress-002.js -- our success before
    26159         was due to a bug (we treated all 1-character numeric escapes as backreferences).
    26160         The date tests also now both expect success -- whatever was making them fail
    26161         before was probably due to the time being close to a DST shift; maybe we need
    26162         to get rid of those tests.
    26163 
    26164 2007-11-13  Darin Adler  <[email protected]>
    26165 
    26166         * kjs/JSImmediate.h: (KJS::JSImmediate::getTruncatedInt32):
    26167         Remove too-strong assert that was firing constantly and preventing even basic
    26168         web browsing from working in a debug build. This function is used in many
    26169         cases where the immediate value is not a number; the assertion could perhaps
    26170         be added back later with a bit of reorganization.
    26171 
    26172 2007-11-13  Alp Toker  <[email protected]>
    26173 
    26174         Build fix for breakage to non-Mac builds introduced in r27746.
    26175 
    26176         * kjs/ustring.cpp:
    26177 
    26178 2007-11-13  Eric Seidel  <[email protected]>
    26179 
    26180         Reviewed by Maciej.
    26181 
    26182         Clean up evaluateToBoolean functions to use inlines instead of copy/paste code
    26183 
    26184         * kjs/JSImmediate.h:
    26185         * kjs/nodes.cpp:
    26186         (KJS::GreaterNode::inlineEvaluateToBoolean):
    26187         (KJS::GreaterNode::evaluate):
    26188         (KJS::LessEqNode::inlineEvaluateToBoolean):
    26189         (KJS::LessEqNode::evaluate):
    26190         (KJS::GreaterEqNode::inlineEvaluateToBoolean):
    26191         (KJS::GreaterEqNode::evaluate):
    26192         (KJS::InNode::evaluateToBoolean):
    26193         (KJS::EqualNode::inlineEvaluateToBoolean):
    26194         (KJS::EqualNode::evaluate):
    26195         (KJS::NotEqualNode::inlineEvaluateToBoolean):
    26196         (KJS::NotEqualNode::evaluate):
    26197         (KJS::StrictEqualNode::inlineEvaluateToBoolean):
    26198         (KJS::StrictEqualNode::evaluate):
    26199         (KJS::NotStrictEqualNode::inlineEvaluateToBoolean):
    26200         (KJS::NotStrictEqualNode::evaluate):
    26201         * kjs/nodes.h:
    26202 
    26203 2007-11-12  Geoffrey Garen  <[email protected]>
    26204 
    26205         Reviewed by Sam Weinig.
    26206        
    26207         Fixed http://bugs.webkit.org/show_bug.cgi?id=15958
    26208         base64 spends 1.1% of total time checking for special Infinity case
    26209        
    26210         Use a fast character test instead of calling strncmp.
    26211        
    26212         1.1% speedup on string-base64. SunSpider reports a .4% speedup overall;
    26213         Sharks reports only .1%. Who are you going to believe? Huh?
    26214 
    26215         * kjs/ustring.cpp:
    26216         (KJS::UString::toDouble):
    26217 
    26218 2007-11-12  Eric Seidel  <[email protected]>
    26219 
    26220         Reviewed by Oliver.
    26221 
    26222         Add evaluateToInt32 and evaluateUInt32 methods and deploy them.
    26223         Fix a few missing evaluateToBoolean methods
    26224         Deploy all evaluateTo* functions to more nodes to avoid slowdowns
    26225         http://bugs.webkit.org/show_bug.cgi?id=15950
    26226        
    26227         SunSpider claims this is at least a 1.4% speedup.
    26228 
    26229         * kjs/JSImmediate.h:
    26230         (KJS::JSImmediate::getTruncatedInt32):
    26231         (KJS::JSImmediate::toDouble):
    26232         (KJS::JSImmediate::getUInt32):
    26233         * kjs/nodes.cpp:
    26234         (KJS::ExpressionNode::evaluateToNumber):
    26235         (KJS::ExpressionNode::evaluateToInt32):
    26236         (KJS::ExpressionNode::evaluateToUInt32):
    26237         (KJS::NumberNode::evaluateToInt32):
    26238         (KJS::NumberNode::evaluateToUInt32):
    26239         (KJS::ImmediateNumberNode::evaluateToInt32):
    26240         (KJS::ImmediateNumberNode::evaluateToUInt32):
    26241         (KJS::ResolveNode::evaluate):
    26242         (KJS::ResolveNode::evaluateToNumber):
    26243         (KJS::ResolveNode::evaluateToBoolean):
    26244         (KJS::ResolveNode::evaluateToInt32):
    26245         (KJS::ResolveNode::evaluateToUInt32):
    26246         (KJS::LocalVarAccessNode::evaluateToInt32):
    26247         (KJS::LocalVarAccessNode::evaluateToUInt32):
    26248         (KJS::BracketAccessorNode::evaluateToNumber):
    26249         (KJS::BracketAccessorNode::evaluateToBoolean):
    26250         (KJS::BracketAccessorNode::evaluateToInt32):
    26251         (KJS::BracketAccessorNode::evaluateToUInt32):
    26252         (KJS::DotAccessorNode::inlineEvaluate):
    26253         (KJS::DotAccessorNode::evaluate):
    26254         (KJS::DotAccessorNode::evaluateToNumber):
    26255         (KJS::DotAccessorNode::evaluateToBoolean):
    26256         (KJS::DotAccessorNode::evaluateToInt32):
    26257         (KJS::DotAccessorNode::evaluateToUInt32):
    26258         (KJS::NewExprNode::inlineEvaluate):
    26259         (KJS::NewExprNode::evaluate):
    26260         (KJS::NewExprNode::evaluateToNumber):
    26261         (KJS::NewExprNode::evaluateToBoolean):
    26262         (KJS::NewExprNode::evaluateToInt32):
    26263         (KJS::NewExprNode::evaluateToUInt32):
    26264         (KJS::FunctionCallResolveNode::inlineEvaluate):
    26265         (KJS::FunctionCallResolveNode::evaluate):
    26266         (KJS::FunctionCallResolveNode::evaluateToNumber):
    26267         (KJS::FunctionCallResolveNode::evaluateToBoolean):
    26268         (KJS::FunctionCallResolveNode::evaluateToInt32):
    26269         (KJS::FunctionCallResolveNode::evaluateToUInt32):
    26270         (KJS::LocalVarFunctionCallNode::evaluate):
    26271         (KJS::LocalVarFunctionCallNode::evaluateToNumber):
    26272         (KJS::LocalVarFunctionCallNode::evaluateToBoolean):
    26273         (KJS::LocalVarFunctionCallNode::evaluateToInt32):
    26274         (KJS::LocalVarFunctionCallNode::evaluateToUInt32):
    26275         (KJS::FunctionCallDotNode::evaluate):
    26276         (KJS::FunctionCallDotNode::evaluateToNumber):
    26277         (KJS::FunctionCallDotNode::evaluateToBoolean):
    26278         (KJS::FunctionCallDotNode::evaluateToInt32):
    26279         (KJS::FunctionCallDotNode::evaluateToUInt32):
    26280         (KJS::PostDecLocalVarNode::inlineEvaluateToNumber):
    26281         (KJS::PostDecLocalVarNode::evaluateToNumber):
    26282         (KJS::PostDecLocalVarNode::evaluateToBoolean):
    26283         (KJS::PostDecLocalVarNode::evaluateToInt32):
    26284         (KJS::PostDecLocalVarNode::evaluateToUInt32):
    26285         (KJS::typeStringForValue):
    26286         (KJS::UnaryPlusNode::evaluate):
    26287         (KJS::UnaryPlusNode::evaluateToBoolean):
    26288         (KJS::UnaryPlusNode::evaluateToNumber):
    26289         (KJS::UnaryPlusNode::evaluateToInt32):
    26290         (KJS::BitwiseNotNode::inlineEvaluateToInt32):
    26291         (KJS::BitwiseNotNode::evaluate):
    26292         (KJS::BitwiseNotNode::evaluateToNumber):
    26293         (KJS::BitwiseNotNode::evaluateToBoolean):
    26294         (KJS::BitwiseNotNode::evaluateToInt32):
    26295         (KJS::MultNode::evaluateToBoolean):
    26296         (KJS::MultNode::evaluateToInt32):
    26297         (KJS::MultNode::evaluateToUInt32):
    26298         (KJS::DivNode::evaluateToInt32):
    26299         (KJS::DivNode::evaluateToUInt32):
    26300         (KJS::ModNode::evaluateToBoolean):
    26301         (KJS::ModNode::evaluateToInt32):
    26302         (KJS::ModNode::evaluateToUInt32):
    26303         (KJS::AddNode::evaluateToNumber):
    26304         (KJS::AddNode::evaluateToInt32):
    26305         (KJS::AddNode::evaluateToUInt32):
    26306         (KJS::AddNumbersNode::evaluateToInt32):
    26307         (KJS::AddNumbersNode::evaluateToUInt32):
    26308         (KJS::SubNode::evaluateToInt32):
    26309         (KJS::SubNode::evaluateToUInt32):
    26310         (KJS::LeftShiftNode::inlineEvaluateToInt32):
    26311         (KJS::LeftShiftNode::evaluate):
    26312         (KJS::LeftShiftNode::evaluateToNumber):
    26313         (KJS::LeftShiftNode::evaluateToInt32):
    26314         (KJS::RightShiftNode::inlineEvaluateToInt32):
    26315         (KJS::RightShiftNode::evaluate):
    26316         (KJS::RightShiftNode::evaluateToNumber):
    26317         (KJS::RightShiftNode::evaluateToInt32):
    26318         (KJS::UnsignedRightShiftNode::inlineEvaluateToUInt32):
    26319         (KJS::UnsignedRightShiftNode::evaluate):
    26320         (KJS::UnsignedRightShiftNode::evaluateToNumber):
    26321         (KJS::UnsignedRightShiftNode::evaluateToInt32):
    26322         (KJS::LessNode::inlineEvaluateToBoolean):
    26323         (KJS::LessNode::evaluate):
    26324         (KJS::LessNode::evaluateToBoolean):
    26325         (KJS::LessNumbersNode::inlineEvaluateToBoolean):
    26326         (KJS::LessNumbersNode::evaluate):
    26327         (KJS::LessNumbersNode::evaluateToBoolean):
    26328         (KJS::LessStringsNode::inlineEvaluateToBoolean):
    26329         (KJS::LessStringsNode::evaluate):
    26330         (KJS::BitAndNode::evaluate):
    26331         (KJS::BitAndNode::inlineEvaluateToInt32):
    26332         (KJS::BitAndNode::evaluateToNumber):
    26333         (KJS::BitAndNode::evaluateToBoolean):
    26334         (KJS::BitAndNode::evaluateToInt32):
    26335         (KJS::BitXOrNode::inlineEvaluateToInt32):
    26336         (KJS::BitXOrNode::evaluate):
    26337         (KJS::BitXOrNode::evaluateToNumber):
    26338         (KJS::BitXOrNode::evaluateToBoolean):
    26339         (KJS::BitXOrNode::evaluateToInt32):
    26340         (KJS::BitOrNode::inlineEvaluateToInt32):
    26341         (KJS::BitOrNode::evaluate):
    26342         (KJS::BitOrNode::evaluateToNumber):
    26343         (KJS::BitOrNode::evaluateToBoolean):
    26344         (KJS::BitOrNode::evaluateToInt32):
    26345         (KJS::ConditionalNode::evaluateToNumber):
    26346         (KJS::ConditionalNode::evaluateToInt32):
    26347         (KJS::ConditionalNode::evaluateToUInt32):
    26348         (KJS::valueForReadModifyAssignment):
    26349         (KJS::AssignExprNode::evaluate):
    26350         (KJS::AssignExprNode::evaluateToBoolean):
    26351         (KJS::AssignExprNode::evaluateToNumber):
    26352         (KJS::AssignExprNode::evaluateToInt32):
    26353         (KJS::VarDeclNode::handleSlowCase):
    26354         * kjs/nodes.h:
    26355         (KJS::FunctionCallResolveNode::precedence):
    26356         (KJS::AddNode::precedence):
    26357         (KJS::AddNode::):
    26358         (KJS::LessNumbersNode::):
    26359         (KJS::LessStringsNode::):
    26360         * kjs/value.cpp:
    26361         (KJS::JSValue::toInt32SlowCase):
    26362         (KJS::JSValue::toUInt32SlowCase):
    26363         * kjs/value.h:
    26364         (KJS::JSValue::asCell):
    26365         (KJS::JSValue::toInt32):
    26366         (KJS::JSValue::toUInt32):
    26367 
    26368 2007-11-12  Alexey Proskuryakov  <[email protected]>
    26369 
    26370         Reviewed by Darin.
    26371 
    26372         http://bugs.webkit.org/show_bug.cgi?id=15953
    26373         Add UTF-8 encoding/decoding to WTF
    26374 
    26375         * kjs/ustring.h: Moved UTF8SequenceLength() and decodeUTF8Sequence() to wtf/unicode.
    26376         * kjs/ustring.cpp: (KJS::UString::UTF8String): Changed this function to take a strict/lenient
    26377         parameter. Callers are not interested in getting decoding results in strict mode, so
    26378         this allows for bailing out as soon as an error is seen.
    26379 
    26380         * kjs/function.cpp:
    26381         (KJS::encode): Updated for new UString::UTF8String() signature.
    26382 
    26383         * API/JSStringRef.cpp:
    26384         (JSStringCreateWithCharacters): Disambiguate UChar.
    26385         (JSStringCreateWithUTF8CString): Actually use UTF-8 when creating the string!
    26386         * bindings/c/c_utility.cpp: (KJS::Bindings::convertUTF8ToUTF16): Use ConvertUTF8ToUTF16().
    26387 
    26388         * wtf/unicode/UTF8.cpp: Added.
    26389         (WTF::Unicode::inlineUTF8SequenceLengthNonASCII):
    26390         (WTF::Unicode::inlineUTF8SequenceLength):
    26391         (WTF::Unicode::UTF8SequenceLength):
    26392         (WTF::Unicode::decodeUTF8Sequence):
    26393         (WTF::Unicode::):
    26394         (WTF::Unicode::ConvertUTF16ToUTF8):
    26395         (WTF::Unicode::isLegalUTF8):
    26396         (WTF::Unicode::ConvertUTF8ToUTF16):
    26397         * wtf/unicode/UTF8.h: Added.
    26398         (WTF::Unicode::):
    26399         Some code moved from ustring.h, some adapted from unicode.org sources.
    26400 
    26401         * JavaScriptCore.exp:
    26402         * JavaScriptCore.pri:
    26403         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
    26404         * JavaScriptCore.xcodeproj/project.pbxproj:
    26405         * JavaScriptCoreSources.bkl:
    26406         Added UTF8.{h,cpp}
    26407 
    26408 2007-11-12  Josh Aas  <[email protected]>
    26409 
    26410         Reviewed by Darin.
    26411 
    26412         - http://bugs.webkit.org/show_bug.cgi?id=15946
    26413           add NPPValue NPPVpluginDrawingModel (Mozilla bug 403418 compat)
    26414 
    26415         * bindings/npapi.h:
    26416 
    26417 2007-11-12  Darin Adler  <[email protected]>
    26418 
    26419         Reviewed by Sam.
    26420 
    26421         - http://bugs.webkit.org/show_bug.cgi?id=15951
    26422           REGRESSION: assertion failure in regexp match() when running JS tests
    26423 
    26424         Test: fast/js/regexp-many-brackets.html
    26425 
    26426         * pcre/pcre_exec.cpp: (match): Added back accidentally-removed case for
    26427         the BRANUMBER opcode.
    26428 
    26429 2007-11-12  Darin Adler  <[email protected]>
    26430 
    26431         Reviewed by Geoff.
    26432 
    26433         - fix use of prefix and config.h, got rid of a few unneeded things in
    26434           the PCRE code; no behavior changes
    26435 
    26436         * API/JSBase.cpp: Added include of config.h.
    26437         * API/JSCallbackConstructor.cpp: Ditto.
    26438         * API/JSCallbackFunction.cpp: Ditto.
    26439         * API/JSCallbackObject.cpp: Ditto.
    26440         * API/JSClassRef.cpp: Ditto.
    26441         * API/JSContextRef.cpp: Ditto.
    26442         * API/JSObjectRef.cpp: Ditto.
    26443         * API/JSStringRef.cpp: Ditto.
    26444         * API/JSValueRef.cpp: Ditto.
    26445 
    26446         * JavaScriptCorePrefix.h: Removed obsolete <ctype.h> workaround.
    26447         Moved new/delete macros after includes, as they are in WebCore's prefix.
    26448         Removed "config.h".
    26449 
    26450         * pcre/dftables.cpp: (main): Changed back to not use a separate maketables
    26451         function. This is needed for PCRE, but not helpful for our use. Also changed
    26452         the tables to all be 128 entries long instead of 256, since only the first
    26453         128 are ever used.
    26454 
    26455         * pcre/pcre_compile.cpp: Added include of config.h. Eliminated digitab,
    26456         which was only being used to check hex digits. Changed all uses of TRUE and
    26457         FALSE to use the C++ true and false instead.
    26458         (check_escape): Just the TRUE/FALSE thing.
    26459         (is_counted_repeat): Ditto.
    26460         (could_be_empty_branch): Ditto.
    26461         (get_othercase_range): Ditto.
    26462         (compile_branch): Ditto.
    26463         (compile_regex): Ditto.
    26464         (is_anchored): Ditto.
    26465         (is_startline): Ditto.
    26466         (find_firstassertedchar): Ditto.
    26467         (jsRegExpCompile): Ditto.
    26468 
    26469         * pcre/pcre_exec.cpp: Added include of config.h. Changed all uses of TRUE and
    26470         FALSE to use the C++ true and false instead.
    26471         (match_ref): Just the TRUE/FALSE thing.
    26472         (match): Ditto. Removed some unneeded braces.
    26473         (jsRegExpExecute): Just the TRUE/FALSE thing.
    26474 
    26475         * pcre/pcre_internal.h: Moved the constants needed by dftables.cpp to the top
    26476         of the file instead of the bottom, so they can be used. Also changed the table
    26477         sizes to 128 instead of 256. Removed macro definitions of FALSE and TRUE.
    26478         Set array sizes for all the const arrays. Changed _pcre_utf8_table1_size to
    26479         be a macro instead of a extern int.
    26480 
    26481         * pcre/pcre_maketables.cpp: Removed. It's all in dftables.cpp now.
    26482 
    26483         * pcre/pcre_tables.cpp: Made table sizes explicit.
    26484 
    26485         * pcre/pcre_xclass.cpp: Just the TRUE/FALSE thing.
    26486 
    26487 2007-11-12  Adam Roben  <[email protected]>
    26488 
    26489         Build fix
    26490 
    26491         * wtf/FastMalloc.h: Add missing using statement.
    26492 
    26493 2007-11-11  Oliver Hunt  <[email protected]>
    26494 
    26495         Reviewed by Darin.
    26496 
    26497         Add special fastZeroedMalloc function to replace a
    26498         number of fastCalloc calls where one argument was 1.
    26499        
    26500         This results in a 0.4% progression in SunSpider, more
    26501         than making up for the earlier regression caused by
    26502         additional overflow checks.
    26503 
    26504         * JavaScriptCore.exp:
    26505         * kjs/array_instance.cpp:
    26506         * kjs/property_map.cpp:
    26507         * wtf/FastMalloc.cpp:
    26508         * wtf/FastMalloc.h:
    26509         * wtf/HashTable.h:
    26510 
    26511 2007-11-11  Adam Roben  <[email protected]>
    26512 
    26513         Fix <rdar://5578982> ASSERT in HashTable::checkTableConsistencyExceptSize beneath WebNotificationCenter
    26514 
    26515         The bug was due to a mismatch between HashMap::remove and
    26516         HashTable::checkTableConsistency. HashMap::remove can delete the value
    26517         stored in the HashTable (by derefing it), which is not normally
    26518         allowed by HashTable. It's OK in this case because the value is about
    26519         to be removed from the table, but HashTable wasn't aware of this.
    26520 
    26521         HashMap::remove now performs the consistency check itself before
    26522         derefing the value.
    26523 
    26524         Darin noticed that the same bug would occur in HashSet, so I've fixed
    26525         it there as well.
    26526 
    26527         Reviewed by Darin.
    26528 
    26529         * wtf/HashMap.h:
    26530         (WTF::HashMap::remove): Perform the HashTable consistency check
    26531         manually before calling deref.
    26532         * wtf/HashSet.h:
    26533         (WTF::HashSet::remove): Ditto.
    26534         * wtf/HashTable.h: Made checkTableConsistency public so that HashMap
    26535         and HashSet can call it.
    26536         (WTF::HashTable::removeAndInvalidateWithoutEntryConsistencyCheck):
    26537         Added.
    26538         (WTF::HashTable::removeAndInvalidate): Added.
    26539         (WTF::HashTable::remove):
    26540         (WTF::HashTable::removeWithoutEntryConsistencyCheck): Added.
    26541 
    26542 2007-11-11  Mark Rowe  <[email protected]>
    26543 
    26544         Build fix.  Use the correct filename case.
    26545 
    26546         * kjs/nodes.h:
    26547 
    26548 2007-11-11  Geoffrey Garen  <[email protected]>
    26549 
    26550         Reviewed by Sam Weinig.
    26551        
    26552         Fixed http://bugs.webkit.org/show_bug.cgi?id=15902
    26553         15% of string-validate-input.js is spent compiling the same regular expression
    26554        
    26555         Store a compiled representation of the regular expression in the AST.
    26556        
    26557         Only a .2% SunSpider speedup overall, but a 10.6% speedup on
    26558         string-validate-input.js.
    26559 
    26560         * kjs/nodes.cpp:
    26561         (KJS::RegExpNode::evaluate):
    26562         * kjs/nodes.h:
    26563         (KJS::RegExpNode::):
    26564         * kjs/nodes2string.cpp:
    26565         (KJS::RegExpNode::streamTo):
    26566         * kjs/regexp.cpp:
    26567         (KJS::RegExp::flags):
    26568         * kjs/regexp.h:
    26569         (KJS::RegExp::pattern):
    26570         * kjs/regexp_object.cpp:
    26571         (KJS::RegExpObjectImp::construct):
    26572         (KJS::RegExpObjectImp::createRegExpImp):
    26573         * kjs/regexp_object.h:
    26574 
    26575 2007-11-11  Oliver Hunt  <[email protected]>
    26576 
    26577         Reviewed by Eric.
    26578 
    26579         Partial fix for <rdar://problem/5585334> numfuzz: integer overflows opening malformed SVG file in WebCore::ImageBuffer::create
    26580 
    26581         Unfortunately this is a very slight regression, but is unavoidable.
    26582 
    26583         * wtf/FastMalloc.cpp:
    26584 
    26585 2007-11-10  Eric Seidel  <[email protected]>
    26586 
    26587         Reviewed by darin.
    26588        
    26589         Add simple type inferencing to the parser, and create custom
    26590         AddNode and LessNode subclasses based on inferred types.
    26591         http://bugs.webkit.org/show_bug.cgi?id=15884
    26592        
    26593         SunSpider claims this is at least a 0.5% speedup.
    26594 
    26595         * JavaScriptCore.exp:
    26596         * kjs/grammar.y:
    26597         * kjs/internal.cpp:
    26598         (KJS::NumberImp::getPrimitiveNumber):
    26599         (KJS::GetterSetterImp::getPrimitiveNumber):
    26600         * kjs/internal.h:
    26601         * kjs/lexer.cpp:
    26602         (KJS::Lexer::lex):
    26603         * kjs/nodes.cpp:
    26604         (KJS::Node::Node):
    26605         (KJS::StringNode::evaluate):
    26606         (KJS::StringNode::evaluateToNumber):
    26607         (KJS::StringNode::evaluateToBoolean):
    26608         (KJS::RegExpNode::evaluate):
    26609         (KJS::UnaryPlusNode::optimizeVariableAccess):
    26610         (KJS::AddNode::evaluate):
    26611         (KJS::AddNode::evaluateToNumber):
    26612         (KJS::AddNumbersNode::inlineEvaluateToNumber):
    26613         (KJS::AddNumbersNode::evaluate):
    26614         (KJS::AddNumbersNode::evaluateToNumber):
    26615         (KJS::AddStringsNode::evaluate):
    26616         (KJS::AddStringLeftNode::evaluate):
    26617         (KJS::AddStringRightNode::evaluate):
    26618         (KJS::lessThan):
    26619         (KJS::lessThanEq):
    26620         (KJS::LessNumbersNode::evaluate):
    26621         (KJS::LessStringsNode::evaluate):
    26622         * kjs/nodes.h:
    26623         (KJS::ExpressionNode::):
    26624         (KJS::RegExpNode::):
    26625         (KJS::RegExpNode::precedence):
    26626         (KJS::TypeOfResolveNode::):
    26627         (KJS::LocalVarTypeOfNode::):
    26628         (KJS::UnaryPlusNode::):
    26629         (KJS::UnaryPlusNode::precedence):
    26630         (KJS::AddNode::):
    26631         (KJS::AddNode::precedence):
    26632         (KJS::AddNumbersNode::):
    26633         (KJS::AddStringLeftNode::):
    26634         (KJS::AddStringRightNode::):
    26635         (KJS::AddStringsNode::):
    26636         (KJS::LessNode::):
    26637         (KJS::LessNode::precedence):
    26638         (KJS::LessNumbersNode::):
    26639         (KJS::LessStringsNode::):
    26640         * kjs/nodes2string.cpp:
    26641         (KJS::StringNode::streamTo):
    26642         * kjs/object.cpp:
    26643         * kjs/object.h:
    26644         * kjs/value.h:
    26645         (KJS::JSValue::getPrimitiveNumber):
    26646 
    26647 2007-11-11  Darin Adler  <[email protected]>
    26648 
    26649         - try another way of fixing dftables builds -- refactor pcre_internal.h a bit
    26650 
    26651         * pcre/pcre_internal.h: Make most of this header do nothing when DFTABLES is set.
    26652         Later we can break it into two files.
    26653 
    26654         * JavaScriptCore.vcproj/dftables/dftables.vcproj: Take out now-unneeded include paths.
    26655         * pcre/dftables.cpp: Set DFTABLES. Use delete instead of free.
    26656         * pcre/dftables.pro: Take out now-unneeded include paths.
    26657         * pcre/pcre_maketables.cpp: Use new instead of malloc.
    26658 
    26659 2007-11-11  Darin Adler  <[email protected]>
    26660 
    26661         * pcre/dftables.pro: Try fixing Qt builds (I looked at qt-win) by adding
    26662         another include path.
    26663 
    26664 2007-11-11  Darin Adler  <[email protected]>
    26665 
    26666         * JavaScriptCore.xcodeproj/project.pbxproj: Try fixing Mac Tiger builds
    26667         by adding another include path.
    26668 
    26669 2007-11-11  Darin Adler  <[email protected]>
    26670 
    26671         Reviewed by Sam.
    26672 
    26673         - http://bugs.webkit.org/show_bug.cgi?id=15924
    26674           next round of changes to JSRegExp (formerly PCRE)
    26675 
    26676         This is a combination of converting to C++, tweaking the API, and adding
    26677         some additional optimizations.
    26678 
    26679         Future steps will involve getting rid of the use of UTF-8 completely
    26680         (we'll use UTF-16 exclusively instead), eliminating more source files,
    26681         and some more speed-ups.
    26682 
    26683         SunSpider says the current round is an 0.9% speed-up overall, and a
    26684         5.3% speed-up for regexp.
    26685 
    26686         * JavaScriptCore.exp: Updated for new entry points.
    26687 
    26688         * JavaScriptCore.pri:
    26689         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    26690         * JavaScriptCore.vcproj/dftables/dftables.vcproj:
    26691         * JavaScriptCore.xcodeproj/project.pbxproj:
    26692         * JavaScriptCoreSources.bkl:
    26693         * jscore.bkl:
    26694         Updated for new source file names and ForwardingHeaders.
    26695 
    26696         * kjs/regexp.cpp:
    26697         (KJS::RegExp::RegExp): Changed to use the error message without calling
    26698         strdup on it and to pass the new types and options.
    26699         (KJS::RegExp::~RegExp): Removed the now-unneeded free of the error message.
    26700         (KJS::RegExp::match): Pass the new types and options.
    26701         * kjs/regexp.h: Update type of m_constructionError.
    26702 
    26703         * pcre/AUTHORS: Update to reflect the status of the project -- we don't include
    26704         the Google parts, and this isn't the PCRE library, per se.
    26705         * pcre/COPYING: Ditto.
    26706 
    26707         * pcre/dftables.cpp: Copied from JavaScriptCore/pcre/dftables.c.
    26708         (main): Removed unneeded ctype_digit.
    26709 
    26710         * pcre/pcre.h: Convert to C++, tweak API a bit. Use UChar instead of JSRegExpChar.
    26711 
    26712         * pcre/pcre_compile.cpp: Copied from JavaScriptCore/pcre/pcre_compile.c.
    26713         Moved a lot of private stuff used only within this file here from pcre_internal.h.
    26714         Renumbered the error codes.
    26715         (error_text): Use a single string with embedded nulls for the error text (I got
    26716         this idea from newer versions of PCRE).
    26717         (check_escape): Changed return type to be enum instead of int. Replaced ctype_digit
    26718         uses with isASCIIDigit.
    26719         (is_counted_repeat): Ditto.
    26720         (read_repeat_counts): Ditto.
    26721         (first_significant_code): Ditto.
    26722         (find_fixedlength): Ditto.
    26723         (could_be_empty_branch): Ditto.
    26724         (compile_branch): Ditto. Also removed some code that handles changing options.
    26725         JavaScript doesn't have any of the features that allow options to change.
    26726         (compile_regex): Updated for change to options parameter.
    26727         (is_anchored): Ditto.
    26728         (find_firstassertedchar): Ditto.
    26729         (jsRegExpCompile): Changed to take separate flags instead of an options int.
    26730         Also changed to call new/delete instead of pcre_malloc/free.
    26731         (jsRegExpFree): Ditto.
    26732 
    26733         * pcre/pcre_exec.cpp: Copied from JavaScriptCore/pcre/pcre_exec.c.
    26734         Added a case that uses computed goto for the opcode loop, but did not turn it on.
    26735         Changed the RMATCH macro to handle returns more efficiently by putting the where
    26736         pointer in the new frame instead of the old one, allowing us to branch to the
    26737         return with a single statement. Switched to new/delete from pcre_malloc/free.
    26738         Changed many RRETURN callers to not set the return value since it's already
    26739         set correctly. Replaced the rrc variable with an is_match variable. Values other
    26740         than "match" and "no match" are now handled differently. This allows us to remove
    26741         the code to check for those cases in various rules.
    26742         (match): All the case statements use a macro BEGIN_OPCODE instead. And all the
    26743         continue statements, or break statements that break out of the outer case use
    26744         a macro NEXT_OPCODE instead. Replaced a few if statements with assertions.
    26745         (jsRegExpExecute): Use new/delete instead of pcre_malloc/free. Removed unused
    26746         start_match field from the match block.
    26747 
    26748         * pcre/pcre_internal.h: Moved the last few configuration macros from pcre-config.h
    26749         in here. Removed various unused types. Converted from JSRegExpChar to UChar.
    26750         Eliminated pcre_malloc/free. Replaced the opcode enum with a macro that can be
    26751         used in multiple places. Unfortunately we lose the comments for each opcode; we
    26752         should find a place to put those back. Removed ctype_digit.
    26753 
    26754         * pcre/pcre_maketables.cpp: Copied from JavaScriptCore/pcre/pcre_maketables.c.
    26755         (pcre_maketables): Got rid of the conditional code that allows this to be compiled
    26756         in -- it's only used for dftables now (and soon may be obsolete entirely).
    26757         Changed code for cbit_digit to not use isdigit, and took the "_" case out of the
    26758         loop. Removed ctype_digit.
    26759 
    26760         * pcre/pcre_ord2utf8.cpp: Copied from JavaScriptCore/pcre/pcre_ord2utf8.c.
    26761 
    26762         * pcre/pcre_tables.cpp: Copied from JavaScriptCore/pcre/pcre_tables.c.
    26763         Moved _pcre_OP_lengths out of here into pcre_exec.cpp.
    26764 
    26765         * pcre/pcre_ucp_searchfuncs.cpp: Copied from JavaScriptCore/pcre/pcre_ucp_searchfuncs.c.
    26766         Updated for other file name changes.
    26767 
    26768         * pcre/pcre_xclass.cpp: Copied from JavaScriptCore/pcre/pcre_xclass.c.
    26769 
    26770         * pcre/ucpinternal.h: Updated header.
    26771 
    26772         * pcre/ucptable.cpp: Copied from JavaScriptCore/pcre/ucptable.c.
    26773 
    26774         * wtf/ASCIICType.h: (WTF::isASCIIDigit): Removed a branch by changing from && to
    26775         & for this operation. Also added an overload that takes an int because that's
    26776         useful for PCRE. Later we could optimize for int and overload other functions in
    26777         this file; stuck to this simple one for now.
    26778 
    26779         * wtf/unicode/icu/UnicodeIcu.h: Removed unused isUpper.
    26780         * wtf/unicode/qt4/UnicodeQt4.h: Ditto.
    26781 
    26782         * pcre/LICENCE: Removed.
    26783         * pcre/pcre-config.h: Removed.
    26784         * wtf/FastMallocPCRE.cpp: Removed.
    26785 
    26786         * pcre/dftables.c: Renamed to cpp.
    26787         * pcre/pcre_compile.c: Ditto.
    26788         * pcre/pcre_exec.c: Ditto.
    26789         * pcre/pcre_maketables.c: Ditto.
    26790         * pcre/pcre_ord2utf8.c: Ditto.
    26791         * pcre/pcre_tables.c: Ditto.
    26792         * pcre/pcre_ucp_searchfuncs.c: Ditto.
    26793         * pcre/pcre_xclass.c: Ditto.
    26794         * pcre/ucptable.c: Ditto.
    26795 
    26796 2007-11-11  Eric Seidel  <[email protected]>
    26797 
    26798         Reviewed by Oliver.
    26799 
    26800         Add KJS_CHECKEXCEPTIONBOOLEAN to match rest of nodes.cpp
    26801 
    26802         * kjs/nodes.cpp:
    26803         (KJS::ExpressionNode::evaluateToBoolean):
    26804         (KJS::LessNode::evaluateToBoolean):
    26805         (KJS::GreaterNode::evaluateToBoolean):
    26806         (KJS::LessEqNode::evaluateToBoolean):
    26807         (KJS::GreaterEqNode::evaluateToBoolean):
    26808         (KJS::InstanceOfNode::evaluateToBoolean):
    26809         (KJS::InNode::evaluateToBoolean):
    26810         (KJS::EqualNode::evaluateToBoolean):
    26811         (KJS::NotEqualNode::evaluateToBoolean):
    26812         (KJS::StrictEqualNode::evaluateToBoolean):
    26813         (KJS::NotStrictEqualNode::evaluateToBoolean):
    26814         (KJS::LogicalAndNode::evaluateToBoolean):
    26815         (KJS::LogicalOrNode::evaluateToBoolean):
    26816         (KJS::ConditionalNode::evaluateToBoolean):
    26817 
    26818 2007-11-10  Darin Adler  <[email protected]>
    26819 
    26820         Reviewed by Sam.
    26821 
    26822         - fix http://bugs.webkit.org/show_bug.cgi?id=15927
    26823           REGRESSION(r27487): delete a.c followed by __defineGetter__("c", ...) incorrectly deletes another property
    26824           and <rdar://problem/5586384> REGRESSION (r27487): Can't switch out of Edit HTML Source mode on Leopard Wiki
    26825 
    26826         Test: fast/js/delete-then-put.html
    26827 
    26828         * kjs/property_map.cpp:
    26829         (KJS::PropertyMap::put): Added a missing "- 1"; code to find an empty slot was not working.
    26830         (KJS::PropertyMap::checkConsistency): Added a missing range check that would have caught this
    26831         problem before.
    26832 
    26833         - roll out a last-minute change to my evaluateToBoolean patch that was incorrect.
    26834 
    26835         * kjs/nodes.h: (KJS::ExprStatementNode::ExprStatementNode): Take out call to
    26836         optimizeForUnnecessaryResult, since the result is used in some cases.
    26837 
    26838 2007-11-10  Adam Roben  <[email protected]>
    26839 
    26840         Windows build fix
    26841 
    26842         Roll out some changes that were (seemingly accidentally) checked in
    26843         with r27664.
    26844 
    26845         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    26846 
    26847 2007-11-10  Darin Adler  <[email protected]>
    26848 
    26849         Reviewed by Sam.
    26850 
    26851         - http://bugs.webkit.org/show_bug.cgi?id=15915
    26852           add an evaluation path for booleans like the one we have for numbers
    26853 
    26854         Gives 1.1% on SunSpider.
    26855 
    26856         * kjs/grammar.y: Create TrueNode and FalseNode instead of BooleanNode.
    26857 
    26858         * kjs/nodes.h: Changed to use Noncopyable. Moved optimizeForUnnecessaryResult
    26859         down from Node to ExpressionNode. Changed some classes to not inherit from
    26860         ExpressionNode where not necessary, and removed unnneeded evaluate functions
    26861         as well as evaluate functions that need not be virtual. Call the
    26862         optimizeForUnnecessaryResult function on the start of a for loop too.
    26863         * kjs/nodes.cpp:
    26864         (KJS::ExpressionNode::evaluateToBoolean): Added.
    26865         (KJS::FalseNode::evaluate): Added.
    26866         (KJS::TrueNode::evaluate): Added.
    26867         (KJS::NumberNode::evaluateToBoolean): Added.
    26868         (KJS::StringNode::evaluateToBoolean): Added.
    26869         (KJS::LocalVarAccessNode::evaluateToBoolean): Added.
    26870         (KJS::BracketAccessorNode::evaluateToBoolean): Added.
    26871         (KJS::LogicalNotNode::evaluate): Changed to call evaluateToBoolean.
    26872         (KJS::LogicalNotNode::evaluateToBoolean): Added.
    26873         (KJS::lessThan): Changed to return bool.
    26874         (KJS::lessThanEq): Ditto.
    26875         (KJS::LessNode::evaluate): Changed since lessThan returns bool.
    26876         (KJS::LessNode::evaluateToBoolean): Added.
    26877         (KJS::GreaterNode::evaluate): Changed since lessThanEq returns bool.
    26878         (KJS::GreaterNode::evaluateToBoolean): Added.
    26879         (KJS::LessEqNode::evaluate): Changed since lessThanEq returns bool.
    26880         (KJS::LessEqNode::evaluateToBoolean): Added.
    26881         (KJS::GreaterEqNode::evaluate): Changed since lessThan returns bool.
    26882         (KJS::GreaterEqNode::evaluateToBoolean): Added.
    26883         (KJS::InstanceOfNode::evaluateToBoolean): Added.
    26884         (KJS::InNode::evaluateToBoolean): Added.
    26885         (KJS::EqualNode::evaluateToBoolean): Added.
    26886         (KJS::NotEqualNode::evaluateToBoolean): Added.
    26887         (KJS::StrictEqualNode::evaluateToBoolean): Added.
    26888         (KJS::NotStrictEqualNode::evaluateToBoolean): Added.
    26889         (KJS::ConditionalNode::evaluate): Changed to call evaluateToBoolean.
    26890         (KJS::IfNode::execute): Ditto.
    26891         (KJS::DoWhileNode::execute): Ditto.
    26892         (KJS::WhileNode::execute): Ditto.
    26893         (KJS::ForNode::execute): Ditto.
    26894 
    26895         * kjs/nodes2string.cpp:
    26896         (KJS::FalseNode::streamTo): Added.
    26897         (KJS::TrueNode::streamTo): Added.
    26898 
    26899 2007-11-09  Adam Roben  <[email protected]>
    26900 
    26901         Windows build fix
    26902 
    26903         Reviewed by Darin.
    26904 
    26905         * kjs/value.h:
    26906         (KJS::jsNumber): Add some explicit casts.
    26907 
    26908 2007-11-08  Darin Adler  <[email protected]>
    26909 
    26910         - fix build
    26911 
    26912         * kjs/grammar.y:
    26913         * kjs/nodes.h:
    26914         * kjs/property_map.cpp:
    26915 
    26916 2007-11-08  Darin Adler  <[email protected]>
    26917 
    26918         - roll out accidentally-checked in changes
    26919 
    26920         * kjs/nodes.cpp: Back to previous version.
    26921         * kjs/nodes.h: Ditto.
    26922         * kjs/grammar.y: Ditto.
    26923 
    26924 2007-11-08  Darin Adler  <[email protected]>
    26925 
    26926         Reviewed by Maciej.
    26927 
    26928         - http://bugs.webkit.org/show_bug.cgi?id=15912
    26929           fasta spends a lot of time in qsort
    26930 
    26931         * kjs/property_map.cpp:
    26932         (KJS::PropertyMap::getEnumerablePropertyNames):
    26933         Use insertion sort instead of qsort for small sets of property names.
    26934         We can probably do some even-better speedups of for/in, but this nets
    26935         0.6% overall and 6.7% on fasta.
    26936 
    26937 2007-11-08  Darin Adler  <[email protected]>
    26938 
    26939         Reviewed by Maciej.
    26940 
    26941         - http://bugs.webkit.org/show_bug.cgi?id=15906
    26942           getting characters by indexing into a string is very slow
    26943 
    26944         This fixes one source of the slowness -- the conversion to an unused
    26945         Identifier as we call the get function from the slot -- but doesn't
    26946         fix others, such as the fact that we have to allocate a new UString::Rep
    26947         for every single character.
    26948 
    26949         Speeds up string-base64 30%, and at least 0.5% overall.
    26950         But does slow down access-fannkuch quite a bit. Might be worth
    26951         revisiting in the future to see what we can do about that (although
    26952         I did look at a profile for a while).
    26953 
    26954         * kjs/property_slot.h: Add a new marker for "numeric" property slots;
    26955         slots where we don't need to pass the identifier to the get function.
    26956         (KJS::PropertySlot::getValue): Added code to call the numeric get function.
    26957         (KJS::PropertySlot::setCustomNumeric): Added.
    26958         * kjs/string_object.cpp:
    26959         (KJS::StringInstance::indexGetter): Changed to use substr() instead
    26960         of constructing a wholly new UString each time.
    26961         (KJS::stringInstanceNumericPropertyGetter): Added. Like indexGetter, but
    26962         takes advantage of setCustomNumeric to avoid creating an Identifier.
    26963         (KJS::StringInstance::getOwnPropertySlot): Changed to use setCustomNumeric.
    26964 
    26965 2007-11-08  Darin Adler  <[email protected]>
    26966 
    26967         Reviewed by Oliver.
    26968 
    26969         - http://bugs.webkit.org/show_bug.cgi?id=15904
    26970           more speed-ups possible by tightening up int version of JSImmediate
    26971 
    26972         1% improvement of SunSpider
    26973 
    26974         * kjs/JSImmediate.h: Eliminate the now-unneeded FPBitValues struct template.
    26975         (KJS::JSImmediate::from): Overload for most numeric types; many types can
    26976         do fewer branches and checks.
    26977         (KJS::JSImmediate::getUInt32): Removed unneeded check for undefined.
    26978         (KJS::JSImmediate::getTruncatedInt32): Ditto.
    26979         (KJS::JSImmediate::getTruncatedUInt32): Ditto. There's no difference any more
    26980         between getUInt32 and getTruncatedUInt32, so that's worth a rename and merge later.
    26981 
    26982         * kjs/grammar.y: Update since fromDouble is now just from.
    26983         * kjs/nodes.h: Ditto.
    26984 
    26985         * kjs/value.h: (KJS::jsNumber): Overload for most numeric types.
    26986 
    26987 2007-11-08  Kevin Ollivier  <[email protected]>
    26988 
    26989         Bakefiles for building JavaScriptCore, needed by wx port.
    26990 
    26991         Reviewed by Mark Rowe.
    26992 
    26993         * JavaScriptCoreSources.bkl: Added.
    26994         * jscore.bkl: Added.
    26995 
    26996 2007-11-08  Oliver Hunt  <[email protected]>
    26997 
    26998         Reviewed by Maciej.
    26999 
    27000         Fix regression caused by earlier bitwise and optimisation.  1 & undefined != 1.
    27001 
    27002         The implementation of JSImmediate::areBothImmediateNumbers relies on
    27003         (JSImmediate::getTag(immediate1) & JSImmediate::getTag(immediate2)) having
    27004         a unique result when both immediate values are numbers.
    27005 
    27006         The regression was due to UndefinedType & NumberType returning NumberType (3 & 1).
    27007         By swapping the value of NumberType and UndefinedType this ceases to be a problem.
    27008 
    27009         * kjs/JSType.h:
    27010 
    27011 2007-11-08  Darin Adler  <[email protected]>
    27012 
    27013         - fix build
    27014 
    27015         * kjs/nodes.h: Add missing parameter name.
    27016 
    27017 2007-11-08  Eric Seidel  <[email protected]>
    27018 
    27019         Reviewed by darin.
    27020 
    27021         Add ExpressionNode subclass of Node, use it.
    27022 
    27023         * kjs/grammar.y:
    27024         * kjs/nodes.cpp:
    27025         (KJS::ForInNode::ForInNode):
    27026         * kjs/nodes.h:
    27027         (KJS::ExpressionNode::):
    27028         (KJS::NullNode::):
    27029         (KJS::NullNode::precedence):
    27030         (KJS::BooleanNode::):
    27031         (KJS::BooleanNode::precedence):
    27032         (KJS::RegExpNode::):
    27033         (KJS::RegExpNode::precedence):
    27034         (KJS::ThisNode::):
    27035         (KJS::ThisNode::precedence):
    27036         (KJS::ResolveNode::):
    27037         (KJS::ElementNode::):
    27038         (KJS::ArrayNode::):
    27039         (KJS::PropertyNode::):
    27040         (KJS::PropertyNode::precedence):
    27041         (KJS::PropertyNode::name):
    27042         (KJS::PropertyListNode::):
    27043         (KJS::ObjectLiteralNode::):
    27044         (KJS::ObjectLiteralNode::precedence):
    27045         (KJS::BracketAccessorNode::):
    27046         (KJS::DotAccessorNode::):
    27047         (KJS::DotAccessorNode::precedence):
    27048         (KJS::ArgumentListNode::):
    27049         (KJS::ArgumentsNode::):
    27050         (KJS::NewExprNode::):
    27051         (KJS::NewExprNode::precedence):
    27052         (KJS::FunctionCallValueNode::):
    27053         (KJS::FunctionCallValueNode::precedence):
    27054         (KJS::FunctionCallResolveNode::):
    27055         (KJS::FunctionCallBracketNode::):
    27056         (KJS::FunctionCallBracketNode::precedence):
    27057         (KJS::FunctionCallDotNode::):
    27058         (KJS::FunctionCallDotNode::precedence):
    27059         (KJS::PrePostResolveNode::):
    27060         (KJS::PostfixBracketNode::):
    27061         (KJS::PostfixBracketNode::precedence):
    27062         (KJS::PostIncBracketNode::):
    27063         (KJS::PostIncBracketNode::isIncrement):
    27064         (KJS::PostDecBracketNode::):
    27065         (KJS::PostDecBracketNode::isIncrement):
    27066         (KJS::PostfixDotNode::):
    27067         (KJS::PostfixDotNode::precedence):
    27068         (KJS::PostIncDotNode::):
    27069         (KJS::PostIncDotNode::isIncrement):
    27070         (KJS::PostDecDotNode::):
    27071         (KJS::PostDecDotNode::isIncrement):
    27072         (KJS::PostfixErrorNode::):
    27073         (KJS::PostfixErrorNode::precedence):
    27074         (KJS::DeleteResolveNode::):
    27075         (KJS::DeleteBracketNode::):
    27076         (KJS::DeleteBracketNode::precedence):
    27077         (KJS::DeleteDotNode::):
    27078         (KJS::DeleteDotNode::precedence):
    27079         (KJS::DeleteValueNode::):
    27080         (KJS::DeleteValueNode::precedence):
    27081         (KJS::VoidNode::):
    27082         (KJS::VoidNode::precedence):
    27083         (KJS::TypeOfResolveNode::):
    27084         (KJS::TypeOfValueNode::):
    27085         (KJS::PrefixBracketNode::):
    27086         (KJS::PrefixBracketNode::precedence):
    27087         (KJS::PreIncBracketNode::):
    27088         (KJS::PreIncBracketNode::isIncrement):
    27089         (KJS::PreDecBracketNode::):
    27090         (KJS::PreDecBracketNode::isIncrement):
    27091         (KJS::PrefixDotNode::):
    27092         (KJS::PrefixDotNode::precedence):
    27093         (KJS::PreIncDotNode::):
    27094         (KJS::PreIncDotNode::isIncrement):
    27095         (KJS::PreDecDotNode::):
    27096         (KJS::PreDecDotNode::isIncrement):
    27097         (KJS::PrefixErrorNode::):
    27098         (KJS::PrefixErrorNode::precedence):
    27099         (KJS::UnaryPlusNode::):
    27100         (KJS::UnaryPlusNode::precedence):
    27101         (KJS::NegateNode::):
    27102         (KJS::NegateNode::precedence):
    27103         (KJS::BitwiseNotNode::):
    27104         (KJS::BitwiseNotNode::precedence):
    27105         (KJS::LogicalNotNode::):
    27106         (KJS::LogicalNotNode::precedence):
    27107         (KJS::AddNode::):
    27108         (KJS::AddNode::precedence):
    27109         (KJS::LeftShiftNode::):
    27110         (KJS::LeftShiftNode::precedence):
    27111         (KJS::RightShiftNode::):
    27112         (KJS::RightShiftNode::precedence):
    27113         (KJS::UnsignedRightShiftNode::):
    27114         (KJS::UnsignedRightShiftNode::precedence):
    27115         (KJS::LessNode::):
    27116         (KJS::LessNode::precedence):
    27117         (KJS::GreaterNode::):
    27118         (KJS::GreaterNode::precedence):
    27119         (KJS::LessEqNode::):
    27120         (KJS::LessEqNode::precedence):
    27121         (KJS::GreaterEqNode::):
    27122         (KJS::GreaterEqNode::precedence):
    27123         (KJS::InstanceOfNode::):
    27124         (KJS::InstanceOfNode::precedence):
    27125         (KJS::InNode::):
    27126         (KJS::InNode::precedence):
    27127         (KJS::EqualNode::):
    27128         (KJS::EqualNode::precedence):
    27129         (KJS::NotEqualNode::):
    27130         (KJS::NotEqualNode::precedence):
    27131         (KJS::StrictEqualNode::):
    27132         (KJS::StrictEqualNode::precedence):
    27133         (KJS::NotStrictEqualNode::):
    27134         (KJS::NotStrictEqualNode::precedence):
    27135         (KJS::BitAndNode::):
    27136         (KJS::BitAndNode::precedence):
    27137         (KJS::BitOrNode::):
    27138         (KJS::BitOrNode::precedence):
    27139         (KJS::BitXOrNode::):
    27140         (KJS::BitXOrNode::precedence):
    27141         (KJS::LogicalAndNode::):
    27142         (KJS::LogicalAndNode::precedence):
    27143         (KJS::LogicalOrNode::):
    27144         (KJS::LogicalOrNode::precedence):
    27145         (KJS::ConditionalNode::):
    27146         (KJS::ConditionalNode::precedence):
    27147         (KJS::ReadModifyResolveNode::):
    27148         (KJS::ReadModifyResolveNode::precedence):
    27149         (KJS::AssignResolveNode::):
    27150         (KJS::AssignResolveNode::precedence):
    27151         (KJS::ReadModifyBracketNode::):
    27152         (KJS::ReadModifyBracketNode::precedence):
    27153         (KJS::AssignBracketNode::):
    27154         (KJS::AssignBracketNode::precedence):
    27155         (KJS::AssignDotNode::):
    27156         (KJS::AssignDotNode::precedence):
    27157         (KJS::ReadModifyDotNode::):
    27158         (KJS::ReadModifyDotNode::precedence):
    27159         (KJS::AssignErrorNode::):
    27160         (KJS::AssignErrorNode::precedence):
    27161         (KJS::CommaNode::):
    27162         (KJS::CommaNode::precedence):
    27163         (KJS::AssignExprNode::):
    27164         (KJS::AssignExprNode::precedence):
    27165         (KJS::ExprStatementNode::):
    27166         (KJS::IfNode::):
    27167         (KJS::DoWhileNode::):
    27168         (KJS::WhileNode::):
    27169         (KJS::ReturnNode::):
    27170         (KJS::WithNode::):
    27171         (KJS::ThrowNode::):
    27172         (KJS::ParameterNode::):
    27173         (KJS::CaseClauseNode::):
    27174         (KJS::CaseClauseNode::precedence):
    27175         (KJS::ClauseListNode::):
    27176         (KJS::SwitchNode::):
    27177 
    27178 2007-11-08  Oliver Hunt  <[email protected]>
    27179 
    27180         Reviewed by Sam.
    27181 
    27182         Add a fast path for bitwise-and of two immediate numbers for a 0.7% improvement in SunSpider (4% bitop improvement).
    27183 
    27184         This only improves bitwise-and performance, as the additional logic required
    27185         for similar code paths on or, xor, and shifting requires additional operations
    27186         and branches that negate (and in certain cases, regress) any advantage we might
    27187         otherwise receive.
    27188 
    27189         This improves performance on all bitop tests, the cryptography tests, as well as
    27190         the string-base64 and string-unpack-code tests.  No significant degradation on
    27191         any other tests.
    27192 
    27193         * kjs/JSImmediate.h:
    27194         (KJS::JSImmediate::areBothImmediateNumbers):
    27195         (KJS::JSImmediate::andImmediateNumbers):
    27196         * kjs/nodes.cpp:
    27197         (KJS::BitAndNode::evaluate):
    27198         * kjs/value.h:
    27199         (KJS::jsNumberFromAnd):
    27200 
    27201 2007-11-08  Adam Roben  <[email protected]>
    27202 
    27203         Stop using KJS inside of MathExtras.h
    27204 
    27205         Reviewed by Darin.
    27206 
    27207         * wtf/MathExtras.h: Removed an unused header, and a now-unused
    27208         forward-declaration.
    27209         (wtf_atan2): Use std::numeric_limits intead of KJS.
    27210 
    27211 2007-11-08  Sam Weinig  <[email protected]>
    27212 
    27213         Windows build fix.
    27214 
    27215         * kjs/date_object.cpp:
    27216         (KJS::DateProtoFuncToLocaleString::callAsFunction): Fix unused arg warning.
    27217         (KJS::DateProtoFuncToLocaleDateString::callAsFunction): ditto
    27218         (KJS::DateProtoFuncToLocaleTimeString::callAsFunction): ditto
    27219 
    27220 2007-11-08  Mark Rowe  <[email protected]>
    27221 
    27222         Gtk build fix.
    27223 
    27224         * kjs/lookup.h: Add missing include.
    27225 
    27226 2007-11-08  Sam Weinig  <[email protected]>
    27227 
    27228         Reviewed by Darin.
    27229 
    27230         Convert JavaScript internal function objects to use one class per
    27231         function.  This avoids a switch statement inside what used to be
    27232         the shared function classes and will allow Shark to better analyze
    27233         the code.
    27234 
    27235         To make this switch, the value property of the HashEntry was changed
    27236         to a union of an intptr_t (which is used to continue handle valueGetters)
    27237         and function pointer which points to a static constructor for the
    27238         individual new function objects.
    27239 
    27240         SunSpider claims this is a 1.0% speedup.
    27241 
    27242         * kjs/array_object.cpp:
    27243         (KJS::ArrayPrototype::getOwnPropertySlot):
    27244         (KJS::getProperty):
    27245         (KJS::ArrayProtoFuncToString::callAsFunction):
    27246         (KJS::ArrayProtoFuncToLocaleString::callAsFunction):
    27247         (KJS::ArrayProtoFuncJoin::callAsFunction):
    27248         (KJS::ArrayProtoFuncConcat::callAsFunction):
    27249         (KJS::ArrayProtoFuncPop::callAsFunction):
    27250         (KJS::ArrayProtoFuncPush::callAsFunction):
    27251         (KJS::ArrayProtoFuncReverse::callAsFunction):
    27252         (KJS::ArrayProtoFuncShift::callAsFunction):
    27253         (KJS::ArrayProtoFuncSlice::callAsFunction):
    27254         (KJS::ArrayProtoFuncSort::callAsFunction):
    27255         (KJS::ArrayProtoFuncSplice::callAsFunction):
    27256         (KJS::ArrayProtoFuncUnShift::callAsFunction):
    27257         (KJS::ArrayProtoFuncFilter::callAsFunction):
    27258         (KJS::ArrayProtoFuncMap::callAsFunction):
    27259         (KJS::ArrayProtoFuncEvery::callAsFunction):
    27260         (KJS::ArrayProtoFuncForEach::callAsFunction):
    27261         (KJS::ArrayProtoFuncSome::callAsFunction):
    27262         (KJS::ArrayProtoFuncIndexOf::callAsFunction):
    27263         (KJS::ArrayProtoFuncLastIndexOf::callAsFunction):
    27264         * kjs/array_object.h:
    27265         (KJS::ArrayPrototype::classInfo):
    27266         * kjs/create_hash_table:
    27267         * kjs/date_object.cpp:
    27268         (KJS::DatePrototype::getOwnPropertySlot):
    27269         (KJS::DateProtoFuncToString::callAsFunction):
    27270         (KJS::DateProtoFuncToUTCString::callAsFunction):
    27271         (KJS::DateProtoFuncToDateString::callAsFunction):
    27272         (KJS::DateProtoFuncToTimeString::callAsFunction):
    27273         (KJS::DateProtoFuncToLocaleString::callAsFunction):
    27274         (KJS::DateProtoFuncToLocaleDateString::callAsFunction):
    27275         (KJS::DateProtoFuncToLocaleTimeString::callAsFunction):
    27276         (KJS::DateProtoFuncValueOf::callAsFunction):
    27277         (KJS::DateProtoFuncGetTime::callAsFunction):
    27278         (KJS::DateProtoFuncGetFullYear::callAsFunction):
    27279         (KJS::DateProtoFuncGetUTCFullYear::callAsFunction):
    27280         (KJS::DateProtoFuncToGMTString::callAsFunction):
    27281         (KJS::DateProtoFuncGetMonth::callAsFunction):
    27282         (KJS::DateProtoFuncGetUTCMonth::callAsFunction):
    27283         (KJS::DateProtoFuncGetDate::callAsFunction):
    27284         (KJS::DateProtoFuncGetUTCDate::callAsFunction):
    27285         (KJS::DateProtoFuncGetDay::callAsFunction):
    27286         (KJS::DateProtoFuncGetUTCDay::callAsFunction):
    27287         (KJS::DateProtoFuncGetHours::callAsFunction):
    27288         (KJS::DateProtoFuncGetUTCHours::callAsFunction):
    27289         (KJS::DateProtoFuncGetMinutes::callAsFunction):
    27290         (KJS::DateProtoFuncGetUTCMinutes::callAsFunction):
    27291         (KJS::DateProtoFuncGetSeconds::callAsFunction):
    27292         (KJS::DateProtoFuncGetUTCSeconds::callAsFunction):
    27293         (KJS::DateProtoFuncGetMilliSeconds::callAsFunction):
    27294         (KJS::DateProtoFuncGetUTCMilliseconds::callAsFunction):
    27295         (KJS::DateProtoFuncGetTimezoneOffset::callAsFunction):
    27296         (KJS::DateProtoFuncSetTime::callAsFunction):
    27297         (KJS::DateProtoFuncSetMilliSeconds::callAsFunction):
    27298         (KJS::DateProtoFuncSetUTCMilliseconds::callAsFunction):
    27299         (KJS::DateProtoFuncSetSeconds::callAsFunction):
    27300         (KJS::DateProtoFuncSetUTCSeconds::callAsFunction):
    27301         (KJS::DateProtoFuncSetMinutes::callAsFunction):
    27302         (KJS::DateProtoFuncSetUTCMinutes::callAsFunction):
    27303         (KJS::DateProtoFuncSetHours::callAsFunction):
    27304         (KJS::DateProtoFuncSetUTCHours::callAsFunction):
    27305         (KJS::DateProtoFuncSetDate::callAsFunction):
    27306         (KJS::DateProtoFuncSetUTCDate::callAsFunction):
    27307         (KJS::DateProtoFuncSetMonth::callAsFunction):
    27308         (KJS::DateProtoFuncSetUTCMonth::callAsFunction):
    27309         (KJS::DateProtoFuncSetFullYear::callAsFunction):
    27310         (KJS::DateProtoFuncSetUTCFullYear::callAsFunction):
    27311         (KJS::DateProtoFuncSetYear::callAsFunction):
    27312         (KJS::DateProtoFuncGetYear::callAsFunction):
    27313         * kjs/date_object.h:
    27314         * kjs/lookup.cpp:
    27315         (KJS::Lookup::find):
    27316         * kjs/lookup.h:
    27317         (KJS::HashEntry::):
    27318         (KJS::staticFunctionGetter):
    27319         (KJS::staticValueGetter):
    27320         (KJS::getStaticPropertySlot):
    27321         (KJS::getStaticFunctionSlot):
    27322         (KJS::lookupPut):
    27323         * kjs/math_object.cpp:
    27324         (KJS::MathObjectImp::getOwnPropertySlot):
    27325         (KJS::MathProtoFuncAbs::callAsFunction):
    27326         (KJS::MathProtoFuncACos::callAsFunction):
    27327         (KJS::MathProtoFuncASin::callAsFunction):
    27328         (KJS::MathProtoFuncATan::callAsFunction):
    27329         (KJS::MathProtoFuncATan2::callAsFunction):
    27330         (KJS::MathProtoFuncCeil::callAsFunction):
    27331         (KJS::MathProtoFuncCos::callAsFunction):
    27332         (KJS::MathProtoFuncExp::callAsFunction):
    27333         (KJS::MathProtoFuncFloor::callAsFunction):
    27334         (KJS::MathProtoFuncLog::callAsFunction):
    27335         (KJS::MathProtoFuncMax::callAsFunction):
    27336         (KJS::MathProtoFuncMin::callAsFunction):
    27337         (KJS::MathProtoFuncPow::callAsFunction):
    27338         (KJS::MathProtoFuncRandom::callAsFunction):
    27339         (KJS::MathProtoFuncRound::callAsFunction):
    27340         (KJS::MathProtoFuncSin::callAsFunction):
    27341         (KJS::MathProtoFuncSqrt::callAsFunction):
    27342         (KJS::MathProtoFuncTan::callAsFunction):
    27343         * kjs/math_object.h:
    27344         (KJS::MathObjectImp::classInfo):
    27345         (KJS::MathObjectImp::):
    27346         * kjs/string_object.cpp:
    27347         (KJS::StringPrototype::getOwnPropertySlot):
    27348         (KJS::StringProtoFuncToString::callAsFunction):
    27349         (KJS::StringProtoFuncValueOf::callAsFunction):
    27350         (KJS::StringProtoFuncCharAt::callAsFunction):
    27351         (KJS::StringProtoFuncCharCodeAt::callAsFunction):
    27352         (KJS::StringProtoFuncConcat::callAsFunction):
    27353         (KJS::StringProtoFuncIndexOf::callAsFunction):
    27354         (KJS::StringProtoFuncLastIndexOf::callAsFunction):
    27355         (KJS::StringProtoFuncMatch::callAsFunction):
    27356         (KJS::StringProtoFuncSearch::callAsFunction):
    27357         (KJS::StringProtoFuncReplace::callAsFunction):
    27358         (KJS::StringProtoFuncSlice::callAsFunction):
    27359         (KJS::StringProtoFuncSplit::callAsFunction):
    27360         (KJS::StringProtoFuncSubstr::callAsFunction):
    27361         (KJS::StringProtoFuncSubstring::callAsFunction):
    27362         (KJS::StringProtoFuncToLowerCase::callAsFunction):
    27363         (KJS::StringProtoFuncToUpperCase::callAsFunction):
    27364         (KJS::StringProtoFuncToLocaleLowerCase::callAsFunction):
    27365         (KJS::StringProtoFuncToLocaleUpperCase::callAsFunction):
    27366         (KJS::StringProtoFuncLocaleCompare::callAsFunction):
    27367         (KJS::StringProtoFuncBig::callAsFunction):
    27368         (KJS::StringProtoFuncSmall::callAsFunction):
    27369         (KJS::StringProtoFuncBlink::callAsFunction):
    27370         (KJS::StringProtoFuncBold::callAsFunction):
    27371         (KJS::StringProtoFuncFixed::callAsFunction):
    27372         (KJS::StringProtoFuncItalics::callAsFunction):
    27373         (KJS::StringProtoFuncStrike::callAsFunction):
    27374         (KJS::StringProtoFuncSub::callAsFunction):
    27375         (KJS::StringProtoFuncSup::callAsFunction):
    27376         (KJS::StringProtoFuncFontcolor::callAsFunction):
    27377         (KJS::StringProtoFuncFontsize::callAsFunction):
    27378         (KJS::StringProtoFuncAnchor::callAsFunction):
    27379         (KJS::StringProtoFuncLink::callAsFunction):
    27380         * kjs/string_object.h:
    27381 
    27382 2007-11-08  Adam Roben  <[email protected]>
    27383 
    27384         Windows build fix
    27385 
    27386         Reviewed by Sam and Ada.
    27387 
    27388         * wtf/MathExtras.h: Get rid of a circular #include dependency to fix
    27389         the build.
    27390 
    27391 2007-11-08  Adam Roben  <[email protected]>
    27392 
    27393         Fix a precedence warning on Windows
    27394 
    27395         * kjs/JSImmediate.h:
    27396         (KJS::JSImmediate::toBoolean):
    27397 
    27398 2007-11-08  Mark Rowe  <[email protected]>
    27399 
    27400         Build fix for JavaScriptGlue.
    27401 
    27402         * wtf/MathExtras.h: Include stdlib.h for srand and RAND_MAX.
    27403 
    27404 2007-11-08  Darin Adler  <[email protected]>
    27405 
    27406         - Windows build fix
    27407 
    27408         * kjs/JSImmediate.h: Include MathExtras.h rather than math.h since this file uses "signbit".
    27409 
    27410 2007-11-08  Oliver Hunt  <[email protected]>
    27411 
    27412         Reviewed by Darin.
    27413 
    27414         Replace the use of floats for immediate values with the use of integers for a 4.5% improvement in SunSpider.
    27415 
    27416         Unfortunately this change results in NaN, +Inf, -Inf, and -0 being heap allocated now, but
    27417         we should now have faster array access, faster immediate to double conversion, and the
    27418         potential to further improve bitwise operators in future.
    27419 
    27420         This also removes the need for unions to avoid strict aliasing problems when extracting
    27421         a value from immediates.
    27422 
    27423         * kjs/JSImmediate.h:
    27424         (KJS::JSImmediate::trueImmediate):
    27425         (KJS::JSImmediate::falseImmediate):
    27426         (KJS::JSImmediate::undefinedImmediate):
    27427         (KJS::JSImmediate::nullImmediate):
    27428         (KJS::JSImmediate::toBoolean):
    27429         * kjs/value.h:
    27430         (KJS::jsNaN):
    27431 
    27432 2007-11-07  Eric Seidel  <[email protected]>
    27433 
    27434         Reviewed by Darin and Oliver.
    27435        
    27436         Add evaluateToNumber parallel evaluation tree to speed up number operations.
    27437         Make ImmediateNumberNode a subclass of NumberNode.
    27438         Share evaluate logic between evaluate and evaluateToNumber using inline functions
    27439         There is still a lot of improvement to be made here.
    27440        
    27441         SunSpider claims this is a 1.0% speedup overall (nbody 7.9%), base64 slowing 2.0%
    27442         Given the huge win that this prepares us for with simple type inferencing I see the small
    27443         regression in base64 being worth the substantial overall improvement.
    27444 
    27445         * kjs/grammar.y:
    27446         * kjs/nodes.cpp:
    27447         (KJS::Node::evaluateToNumber):
    27448         (KJS::NumberNode::evaluate):
    27449         (KJS::NumberNode::evaluateToNumber):
    27450         (KJS::StringNode::evaluateToNumber):
    27451         (KJS::LocalVarAccessNode::inlineEvaluate):
    27452         (KJS::LocalVarAccessNode::evaluate):
    27453         (KJS::LocalVarAccessNode::evaluateToNumber):
    27454         (KJS::BracketAccessorNode::inlineEvaluate):
    27455         (KJS::BracketAccessorNode::evaluate):
    27456         (KJS::BracketAccessorNode::evaluateToNumber):
    27457         (KJS::NegateNode::evaluate):
    27458         (KJS::NegateNode::evaluateToNumber):
    27459         (KJS::MultNode::inlineEvaluateToNumber):
    27460         (KJS::MultNode::evaluate):
    27461         (KJS::MultNode::evaluateToNumber):
    27462         (KJS::DivNode::inlineEvaluateToNumber):
    27463         (KJS::DivNode::evaluate):
    27464         (KJS::DivNode::evaluateToNumber):
    27465         (KJS::ModNode::inlineEvaluateToNumber):
    27466         (KJS::ModNode::evaluate):
    27467         (KJS::ModNode::evaluateToNumber):
    27468         (KJS::throwOutOfMemoryErrorToNumber):
    27469         (KJS::addSlowCaseToNumber):
    27470         (KJS::add):
    27471         (KJS::addToNumber):
    27472         (KJS::AddNode::evaluateToNumber):
    27473         (KJS::SubNode::inlineEvaluateToNumber):
    27474         (KJS::SubNode::evaluate):
    27475         (KJS::SubNode::evaluateToNumber):
    27476         (KJS::valueForReadModifyAssignment):
    27477         (KJS::ReadModifyLocalVarNode::evaluate):
    27478         (KJS::ReadModifyResolveNode::evaluate):
    27479         (KJS::ReadModifyDotNode::evaluate):
    27480         (KJS::ReadModifyBracketNode::evaluate):
    27481         * kjs/nodes.h:
    27482         (KJS::Node::):
    27483         (KJS::NumberNode::):
    27484         (KJS::ImmediateNumberNode::):
    27485         (KJS::AddNode::precedence):
    27486         * kjs/nodes2string.cpp:
    27487         (KJS::NumberNode::streamTo):
    27488 
    27489 2007-11-07  Mark Rowe  <[email protected]>
    27490 
    27491         Reviewed by Eric.
    27492 
    27493         Fix up initialization after being mangled in r27572, and remove the
    27494         ternary expression as extraCost will always be zero for the numeric
    27495         heap.
    27496 
    27497         * kjs/collector.cpp:
    27498         (KJS::Collector::heapAllocate):
    27499 
    27500 2007-11-07  Mark Rowe  <[email protected]>
    27501 
    27502         Gtk build fix.
    27503 
    27504         * kjs/regexp_object.cpp:
    27505 
    27506 2007-11-07  Geoffrey Garen  <[email protected]>
    27507 
    27508         Reviewed by Beth Dakin.
    27509        
    27510         Eliminated a bogus (though compiled-out) branch in the collector.
    27511 
    27512         * kjs/collector.cpp:
    27513         (KJS::Collector::heapAllocate):
    27514 
    27515 2007-11-06  Geoffrey Garen  <[email protected]>
    27516 
    27517         Reviewed by Darin Adler.
    27518        
    27519         Fixed part of http://bugs.webkit.org/show_bug.cgi?id=15861
    27520         5.8% of string-validate-input.js is spent creating RegExpImps
    27521 
    27522         Put RegExpImp properties into a static hashtable to avoid a slew of
    27523         PropertyMap churn when creating a RegExpImp.
    27524        
    27525         Factored important bits of regular expression implementation out of
    27526         RegExpImp (the JS object) and into RegExp (the PCRE wrapper class),
    27527         making RegExp a ref-counted class. (This will help later.)
    27528 
    27529         Removed PCRE_POSIX support because I didn't quite know how to test it
    27530         and keep it working with these changes.
    27531        
    27532         1.1% SunSpider speedup. 5.8% speedup on string-validate-input.js.
    27533 
    27534         * kjs/regexp.h: A few interface changes:
    27535         1. Renamed "subpatterns()" => "numSubpatterns()"
    27536         2. Made flag enumeration private and replaced it with public getters for
    27537         specific flags.
    27538         3. Made RegExp ref-counted so RegExps can be shared by RegExpImps.
    27539         4. Made RegExp take a string of flags instead of an int, eliminating
    27540         duplicated flag parsing code elsewhere.
    27541 
    27542         * kjs/regexp_object.cpp:
    27543         (KJS::RegExpProtoFunc::callAsFunction): For RegExp.compile:
    27544         - Fixed a bug where compile(undefined) would throw an exception.
    27545         - Removed some now-redundant code.
    27546         - Used RegExp sharing to eliminate an allocation and a bunch of
    27547         PropertyMap thrash. (Not a big win since compile is a deprecated
    27548         function. I mainly did this to test the plubming.)
    27549 
    27550 2007-11-07  Simon Hausmann  <[email protected]>
    27551 
    27552         Reviewed by nobody, Qt/Windows build fix.
    27553 
    27554         JavaScriptCore.pri expects OBJECTS_DIR to be set, so set it in
    27555         testkjs.pro, too, where it's included from.
    27556 
    27557         * kjs/testkjs.pro:
    27558 
    27559 2007-11-07  Simon Hausmann  <[email protected]>
    27560 
    27561         Reviewed by Lars.
    27562 
    27563         Fix "nmake clean" for the Qt/Windows build by replacing tmp/ with a variable that ends with the correct type of slash/backslash depending on the choice of compiler/make tool.
    27564 
    27565         * JavaScriptCore.pri:
    27566         * pcre/pcre.pri:
    27567 
    27568 2007-11-07  Lars Knoll  <[email protected]>
    27569 
    27570         Reviewed by Simon.
    27571 
    27572         fix umemcasecmp
    27573        
    27574         Pretty embarrassing bug. Has the potential to fix quite a few test failures.
    27575 
    27576         * wtf/unicode/qt4/UnicodeQt4.h:
    27577         (WTF::Unicode::umemcasecmp):
    27578 
    27579 2007-11-06  Maciej Stachowiak  <[email protected]>
    27580 
    27581         Reviewed by Eric.       
    27582        
    27583         - only collect when the heap is full, unless we have lots of extra cost garbage
    27584        
    27585         1.1% SunSpider speedup.
    27586        
    27587         This shouldn't hit memory use much since the extra space in those
    27588         blocks hangs around either way.
    27589 
    27590         * kjs/collector.cpp:
    27591         (KJS::Collector::heapAllocate):
    27592         (KJS::Collector::collect): Fix logic error that reversed the sense of collect's
    27593         return value.
    27594 
    27595 2007-11-06  Oliver Hunt  <[email protected]>
    27596 
    27597         Reviewed by Maciej.
    27598 
    27599         Avoid unnecessarily boxing the result from post inc/decrement for 0.3% gain in sunspider
    27600        
    27601         We now convert the common 'for (...; ...; <var>++) ...' to the semantically identical
    27602         'for (...; ...; ++<var>) ...'.
    27603 
    27604         * kjs/nodes.cpp:
    27605         (KJS::PostIncResolveNode::optimizeForUnnecessaryResult):
    27606         (KJS::PostIncLocalVarNode::evaluate):
    27607         (KJS::PostIncLocalVarNode::optimizeForUnnecessaryResult):
    27608         (KJS::PostDecResolveNode::optimizeForUnnecessaryResult):
    27609         (KJS::PostDecLocalVarNode::evaluate):
    27610         (KJS::PostDecLocalVarNode::optimizeForUnnecessaryResult):
    27611         * kjs/nodes.h:
    27612         (KJS::PrePostResolveNode::):
    27613         (KJS::PostIncResolveNode::):
    27614         (KJS::PostIncLocalVarNode::):
    27615         (KJS::PostDecResolveNode::):
    27616         (KJS::PostDecLocalVarNode::):
    27617         (KJS::PreIncResolveNode::):
    27618         (KJS::PreDecResolveNode::):
    27619         (KJS::ForNode::ForNode):
    27620 
    27621 2007-11-06  Eric Seidel  <[email protected]>
    27622 
    27623         Reviewed by darin.
    27624 
    27625         This fixes a regressed layout test for string + object
    27626        
    27627         SunSpider claims this was an overall 0.3% speedup, although some individual tests were slower.
    27628 
    27629         * kjs/nodes.cpp:
    27630         (KJS::add): remove erroneous "fast path" for string + *
    27631 
    27632 2007-11-06  Geoffrey Garen  <[email protected]>
    27633 
    27634         Reviewed by Eric Seidel.
    27635        
    27636         Added toJSNumber, a fast path for converting a JSValue to a JS number,
    27637         and deployed it in postfix expressions. In the fast case this
    27638         eliminates a call to jsNumber.
    27639        
    27640         0.4% speedup on SunSpider.
    27641 
    27642         * ChangeLog:
    27643         * kjs/nodes.cpp:
    27644         (KJS::PostIncResolveNode::evaluate):
    27645         (KJS::PostIncLocalVarNode::evaluate):
    27646         (KJS::PostDecResolveNode::evaluate):
    27647         (KJS::PostDecLocalVarNode::evaluate):
    27648         (KJS::PostIncBracketNode::evaluate):
    27649         (KJS::PostDecBracketNode::evaluate):
    27650         (KJS::PostIncDotNode::evaluate):
    27651         (KJS::PostDecDotNode::evaluate):
    27652         (KJS::UnaryPlusNode::evaluate):
    27653         * kjs/value.h:
    27654         (KJS::JSValue::toJSNumber):
    27655 
    27656 2007-11-06  Darin Adler  <[email protected]>
    27657 
    27658         Reviewed by Maciej.
    27659 
    27660         - http://bugs.webkit.org/show_bug.cgi?id=15846
    27661           REGRESSION (r27387): Memory corruption when running fast/js/kde/delete.html
    27662 
    27663         There was a mistake in the algorithm used to find an empty slot in the property
    27664         map entries vector; when we were putting in a new property value and not overwriting
    27665         an existing deleted sentinel, we would enlarge the entries vector, but would not
    27666         overwrite the stale data that's in the new part. It was easy to pin this down by
    27667         turning on property map consistency checks -- I never would have landed with this
    27668         bug if I had run the regression tests once with consistency checks on!
    27669 
    27670         * kjs/property_map.cpp: (KJS::PropertyMap::put): Changed logic for the case where
    27671         foundDeletedElement is false to always use the item at the end of the entries vector.
    27672         Also allowed me to merge with the logic for the "no deleted sentinels at all" case.
    27673 
    27674 2007-11-06  Oliver Hunt  <[email protected]>
    27675 
    27676         RS=Darin.
    27677 
    27678         Fix previous patch to use a 3 bit shift, a 16 bit shift causes a regression in sunspider.
    27679 
    27680         * kjs/nodes.cpp:
    27681         (KJS::add):
    27682 
    27683 2007-11-06  Oliver Hunt  <[email protected]>
    27684 
    27685         Reviewed by Darin.
    27686 
    27687         Replace boolean comparisons in AddNode with mask
    27688         comparisons for a 0.2% improvement in sunspider.
    27689 
    27690         * JavaScriptCore.xcodeproj/project.pbxproj:
    27691         * kjs/nodes.cpp:
    27692         (KJS::add):
    27693 
    27694 2007-11-06  Eric Seidel  <[email protected]>
    27695 
    27696         Reviewed by darin.
    27697        
    27698         SunSpider claims this is a 1.1% speedup.
    27699 
    27700         * kjs/nodes.cpp:
    27701         (KJS::throwOutOfMemoryError): Added, non inline.
    27702         (KJS::addSlowCase): renamed from add(), non inline.
    27703         (KJS::add): add fast path for String + String, Number + Number and String + *
    27704 
    27705 2007-11-06  Eric Seidel  <[email protected]>
    27706 
    27707         Reviewed by mjs.
    27708        
    27709         Avoid more UString creation.
    27710        
    27711         SunSpider claims this is a 0.4% speedup.
    27712 
    27713         * kjs/regexp_object.cpp:
    27714         (KJS::RegExpObjectImp::construct): use UString::find(UChar)
    27715 
    27716 2007-11-05  Mark Rowe  <[email protected]>
    27717 
    27718         Mac build fix.
    27719 
    27720         * kjs/array_object.cpp:
    27721         (KJS::ArrayProtoFunc::callAsFunction):
    27722 
    27723 2007-11-05  Adam Roben  <[email protected]>
    27724 
    27725         Windows build fix
    27726 
    27727         * kjs/list.h:
    27728 
    27729 2007-11-05  Mark Rowe  <[email protected]>
    27730 
    27731         Build fix.  Add missing #include.
    27732 
    27733         * kjs/operations.cpp:
    27734 
    27735 2007-11-05  Eric Seidel  <[email protected]>
    27736 
    27737         Reviewed by mjs.
    27738        
    27739         Remove another call to toString(exec)
    27740        
    27741         SunSpider claims this is a 0.5% speedup.
    27742 
    27743         * kjs/operations.cpp:
    27744         (KJS::equal): remove another toString
    27745 
    27746 2007-11-05  Eric Seidel  <[email protected]>
    27747 
    27748         * kjs/operations.cpp:
    27749         (KJS::equal): correct broken change.
    27750 
    27751 2007-11-05  Eric Seidel  <[email protected]>
    27752 
    27753         Reviewed by mjs.
    27754 
    27755         Remove one more call to toString(exec).
    27756        
    27757         SunSpider claims this is a 0.7% speedup.
    27758 
    27759         * kjs/operations.cpp:
    27760         (KJS::equal): remove a call to toString()
    27761 
    27762 2007-11-05  Mark Rowe  <[email protected]>
    27763 
    27764         Gtk build fix.
    27765 
    27766         * pcre/pcre.pri:
    27767 
    27768 2007-11-05  Mark Rowe  <[email protected]>
    27769 
    27770         Gtk build fix.
    27771 
    27772         * kjs/list.cpp:
    27773 
    27774 2007-11-05  Geoffrey Garen  <[email protected]>
    27775 
    27776         Touched a file to test my new HTTP access.
    27777 
    27778         * kjs/scope_chain.cpp:
    27779 
    27780 2007-11-05  Alp Toker  <[email protected]>
    27781 
    27782         Unreviewed build fix for qmake-based ports.
    27783 
    27784         Someone with a better understanding of qmake still needs to sort out
    27785         the INCLUDEPATH/DEPENDPATH mess.
    27786 
    27787         * JavaScriptCore.pri:
    27788 
    27789 2007-11-05  Geoffrey Garen  <[email protected]>
    27790 
    27791         Reviewed by Darin Adler.
    27792        
    27793         http://bugs.webkit.org/show_bug.cgi?id=15835
    27794 
    27795         Switched List implementation from a custom heap allocator to an inline
    27796         Vector, for a disappointing .5% SunSpider speedup.
    27797        
    27798         Also renamed List::slice to List::getSlice because "get" is the
    27799         conventional prefix for functions returning a value through an out
    27800         parameter.
    27801 
    27802         * kjs/array_object.cpp:
    27803         (KJS::ArrayProtoFunc::callAsFunction): Removed some redundant function
    27804         calls and memory accesses.
    27805 
    27806         * kjs/bool_object.cpp:
    27807         (BooleanObjectImp::construct): Removed questionable use of iterator.
    27808 
    27809         * kjs/list.cpp:
    27810         * kjs/list.h: New List class, implemented in terms of Vector. Two
    27811         interesting differences:
    27812             1. The inline capacity is 8, not 5. Many of the Lists constructed
    27813             during a SunSpider run are larger than 5; almost none are larger
    27814             than 8.
    27815 
    27816             2. The growth factor is 4, not 2. Since we can guarantee that Lists
    27817             aren't long-lived, we can grow them more aggressively, to avoid
    27818             excessive copying.
    27819 
    27820         * kjs/regexp_object.cpp:
    27821         (RegExpObjectImp::construct): Removed redundant function calls.
    27822 
    27823         * kjs/string_object.cpp:
    27824         (KJS::StringObjectImp::construct): Removed questionable use of iterator.
    27825 
    27826         * wtf/Vector.h:
    27827         (WTF::::uncheckedAppend): Added a fast, unchecked version of append.
    27828 
    27829 2007-11-05  Mark Rowe  <[email protected]>
    27830 
    27831         Reviewed by Alp Toker.
    27832 
    27833         Add DEPENDPATH to JavaScriptCore and pcre to help qmake with dependencies.
    27834 
    27835         * JavaScriptCore.pri:
    27836         * pcre/pcre.pri:
    27837 
    27838 2007-11-04  Darin Adler  <[email protected]>
    27839 
    27840         Reviewed by Maciej.
    27841 
    27842         - http://bugs.webkit.org/show_bug.cgi?id=15826
    27843           optimize opcode loop and case insensitive ASCII compares for a 30% speedup
    27844 
    27845         SunSpider says it's 2.6% faster overall, 32.5% in the regular expression tests.
    27846 
    27847         * pcre/pcre_internal.h: Added OP_ASCII_CHAR and OP_ASCII_LETTER_NC.
    27848 
    27849         * pcre/pcre_compile.c:
    27850         (find_fixedlength): Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC. Also
    27851         added OP_NOT since there was no reason it should not be in here.
    27852         (could_be_empty_branch): Ditto.
    27853         (compile_branch): Streamlined all the single-character cases; there was a bit of
    27854         duplicate code. Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC as needed.
    27855         But in particular, compile to those opcodes when the single character match is
    27856         ASCII.
    27857         (find_firstassertedchar): Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC.
    27858 
    27859         * pcre/pcre_exec.c: (match): Removed the "min", "minimize", and "op" fields from
    27860         the matchframe, after I discovered that none of them needed to be saved and restored
    27861         across recursive match calls. Also eliminated the ignored result field from the
    27862         matchframe, since I discovered that rrc ("recursive result code") was already the
    27863         exact same thing. Moved the handling of opcodes higher than OP_BRA into the default
    27864         statement of the switch instead of doing them before the switch. This removes a
    27865         branch from each iteration of the opcode interpreter, just as removal of "op"
    27866         removed at least one store from each iteration. Last, but not least, add the
    27867         OP_ASCII_CHAR and OP_ASCII_LETTER_NC functions. Neither can ever match a
    27868         surrogate pair and the letter case can be handled efficiently.
    27869 
    27870 2007-11-04  Darin Adler  <[email protected]>
    27871 
    27872         * pcre/pcre_exec.c: (match): Try to fix the Windows build by removing unreachable code.
    27873 
    27874 2007-11-03  Darin Adler  <[email protected]>
    27875 
    27876         - fix non-Mac builds; remove some more unused PCRE stuff
    27877 
    27878         * pcre/pcre_compile.c:
    27879         (compile_branch): Removed branch chain and some unused ESC values.
    27880         (compile_regex): Ditto.
    27881         (jsRegExpCompile): Ditto.
    27882         * pcre/pcre_exec.c:
    27883         (match): Removed unused branch targets. Don't use macros any more.
    27884         (jsRegExpExecute): More of the same.
    27885 
    27886         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update for removed files.
    27887         * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
    27888         * pcre/pcre.pri: Ditto.
    27889 
    27890         * pcre/MERGING: Removed.
    27891         * pcre/pcre_fullinfo.c: Removed.
    27892         * pcre/pcre_get.c: Removed.
    27893         * pcre/pcre_internal.h:
    27894         * pcre/ucp.h: Removed.
    27895 
    27896 2007-11-03  Darin Adler  <[email protected]>
    27897 
    27898         Reviewed by Maciej.
    27899 
    27900         - http://bugs.webkit.org/show_bug.cgi?id=15821
    27901           remove unused PCRE features for speed
    27902 
    27903         A first step toward removing the PCRE features we don't use.
    27904         This gives a 0.8% speedup on SunSpider, and a 6.5% speedup on
    27905         the SunSpider regular expression test.
    27906 
    27907         Replaced the public interface with one that doesn't use the
    27908         name PCRE. Removed code we don't need for JavaScript and various
    27909         configurations we don't use. This is in preparation for still
    27910         more changes in the future. We'll probably switch to C++ and
    27911         make some even more significant changes to the regexp engine
    27912         to get some additional speed.
    27913 
    27914         There's probably additional unused stuff that I haven't
    27915         deleted yet.
    27916 
    27917         This does mean that our PCRE is now a fork, but I think that's
    27918         not really a big deal.
    27919 
    27920         * JavaScriptCore.exp: Remove the 5 old entry points and add
    27921         the 3 new entry points for WebCore's direct use of the regular
    27922         expression engine.
    27923 
    27924         * kjs/config.h: Remove the USE(PCRE16) define. I decided to flip
    27925         its sense and now there's a USE(POSIX_REGEX) instead, which should
    27926         probably not be set by anyone. Maybe later we'll just get rid of it
    27927         altogether.
    27928 
    27929         * kjs/regexp.h:
    27930         * kjs/regexp.cpp:
    27931         (KJS::RegExp::RegExp): Switch to new jsRegExp function names and
    27932         defines. Cut down on the number of functions used.
    27933         (KJS::RegExp::~RegExp): Ditto.
    27934         (KJS::RegExp::match): Ditto.
    27935 
    27936         * pcre/dftables.c: (main): Get rid of ctype_letter and ctype_meta,
    27937         which are unused.
    27938 
    27939         * pcre/pcre-config.h: Get rid of EBCIDIC, PCRE_DATA_SCOPE, const,
    27940         size_t, HAVE_STRERROR, HAVE_MEMMOVE, HAVE_BCOPY, NEWLINE,
    27941         POSIX_MALLOC_THRESHOLD, NO_RECURSE, SUPPORT_UCP, SUPPORT_UTF8,
    27942         and JAVASCRIPT. These are all no longer configurable in our copy
    27943         of the library.
    27944 
    27945         * pcre/pcre.h: Remove the macro-based kjs prefix hack, the PCRE
    27946         version macros, PCRE_UTF16, the code to set up PCRE_DATA_SCOPE,
    27947         the include of <stdlib.h>, and most of the constants and
    27948         functions defined in this header. Changed the naming scheme to
    27949         use a JSRegExp prefix rather than a pcre prefix. In the future,
    27950         we'll probably change this to be a C++ header.
    27951 
    27952         * pcre/pcre_compile.c: Removed all unused code branches,
    27953         including many whole functions and various byte codes.
    27954         Kept changes outside of removal to a minimum.
    27955         (check_escape):
    27956         (first_significant_code):
    27957         (find_fixedlength):
    27958         (find_recurse):
    27959         (could_be_empty_branch):
    27960         (compile_branch):
    27961         (compile_regex):
    27962         (is_anchored):
    27963         (is_startline):
    27964         (find_firstassertedchar):
    27965         (jsRegExpCompile): Renamed from pcre_compile2 and changed the
    27966         parameters around a bit.
    27967         (jsRegExpFree): Added.
    27968 
    27969         * pcre/pcre_exec.c: Removed many unused opcodes and variables.
    27970         Also started tearing down the NO_RECURSE mechanism since it's
    27971         now the default. In some cases there were things in the explicit
    27972         frame that could be turned into plain old local variables and
    27973         other small like optimizations.
    27974         (pchars):
    27975         (match_ref):
    27976         (match): Changed parameters quite a bit since it's now not used
    27977         recursively.
    27978         (jsRegExpExecute): Renamed from pcre_exec.
    27979 
    27980         * pcre/pcre_internal.h: Get rid of PCRE_DEFINITION, PCRE_SPTR,
    27981         PCRE_IMS, PCRE_ICHANGED, PCRE_NOPARTIAL, PCRE_STUDY_MAPPED,
    27982         PUBLIC_OPTIONS, PUBLIC_EXEC_OPTIONS, PUBLIC_DFA_EXEC_OPTIONS,
    27983         PUBLIC_STUDY_OPTIONS, MAGIC_NUMBER, 16 of the opcodes,
    27984         _pcre_utt, _pcre_utt_size, _pcre_try_flipped, _pcre_ucp_findprop,
    27985         and _pcre_valid_utf8. Also moved pcre_malloc and pcre_free here.
    27986 
    27987         * pcre/pcre_maketables.c: Changed to only compile in dftables.
    27988         Also got rid of many of the tables that we don't use.
    27989 
    27990         * pcre/pcre_tables.c: Removed the unused Unicode property tables.
    27991 
    27992         * pcre/pcre_ucp_searchfuncs.c: Removed everything except for
    27993         _pcre_ucp_othercase.
    27994 
    27995         * pcre/pcre_xclass.c: (_pcre_xclass): Removed uneeded support
    27996         for classes based on Unicode properties.
    27997 
    27998         * wtf/FastMallocPCRE.cpp: Removed unused bits. It would be good
    27999         to eliminate this completely, but we need the regular expression
    28000         code to be C++ first.
    28001 
    28002         * pcre/pcre_fullinfo.c:
    28003         * pcre/pcre_get.c:
    28004         * pcre/ucp.h:
    28005         Files that are no longer needed. I didn't remove them with this
    28006         check-in, because I didn't want to modify all the project files.
    28007 
    28008 2007-11-03  Maciej Stachowiak  <[email protected]>
    28009 
    28010         Reviewed by Sam.
    28011        
    28012         - remove NaN check from JSImmediate::fromDouble for 0.5% SunSpider speedup
    28013 
    28014         It turns out that doing this check costs more than it saves.
    28015        
    28016         * kjs/JSImmediate.h:
    28017         (KJS::JSImmediate::fromDouble):
    28018 
    28019 2007-11-03  Sam Weinig  <[email protected]>
    28020 
    28021         Reviewed by Oliver.
    28022 
    28023         Remove dummy variable from ClassInfo reducing the size of the struct by 1 word.
    28024         The variable had been kept around for binary compatibility, but since nothing
    28025         else is there is no point in continuing to keep it around.
    28026 
    28027         * API/JSCallbackConstructor.cpp:
    28028         * API/JSCallbackFunction.cpp:
    28029         * API/JSCallbackObject.cpp:
    28030         * bindings/objc/objc_runtime.mm:
    28031         * bindings/runtime_array.cpp:
    28032         * bindings/runtime_object.cpp:
    28033         * kjs/array_instance.cpp:
    28034         * kjs/array_object.cpp:
    28035         * kjs/bool_object.cpp:
    28036         * kjs/date_object.cpp:
    28037         * kjs/error_object.cpp:
    28038         * kjs/function.cpp:
    28039         * kjs/internal.cpp:
    28040         * kjs/lookup.h:
    28041         * kjs/math_object.cpp:
    28042         * kjs/number_object.cpp:
    28043         * kjs/object.h:
    28044         * kjs/regexp_object.cpp:
    28045         * kjs/string_object.cpp:
    28046 
    28047 2007-11-03  Kevin McCullough  <[email protected]>
    28048 
    28049         - Updated testkjs results to make the build bots green until we
    28050         can fix the tests that are failing.  The new failures are in DST.
    28051 
    28052         * tests/mozilla/expected.html:
    28053 
    28054 2007-11-03  Maciej Stachowiak  <[email protected]>
    28055 
    28056         Reviewed by Adam.
    28057        
    28058         - don't print the var twice for ForInNodes with a var declaration
    28059 
    28060         * kjs/nodes2string.cpp:
    28061         (KJS::ForInNode::streamTo):
    28062 
    28063 2007-11-03  Darin Adler  <[email protected]>
    28064 
    28065         * pcre/pcre_compile.c: (check_escape): Windows build fix. Get rid of
    28066         C-incompatible declaration.
    28067 
    28068 2007-11-03  Mark Rowe  <[email protected]>
    28069 
    28070         Gtk build fix.
    28071 
    28072         * kjs/nodes.cpp:  Add missing include.
    28073 
    28074 2007-11-03  Darin Adler  <[email protected]>
    28075 
    28076         Reviewed by Maciej.
    28077 
    28078         - fix http://bugs.webkit.org/show_bug.cgi?id=15814
    28079           <rdar://problem/5536644> fast/js/kde/encode_decode_uri.html fails
    28080 
    28081         These changes cause us to match the JavaScript specification and pass the
    28082         fast/js/kde/encode_decode_uri.html test.
    28083 
    28084         * kjs/function.cpp: (KJS::encode): Call the UTF-8 string conversion in its
    28085         new strict mode, throwing an exception if there are malformed UTF-16 surrogate
    28086         pairs in the text.
    28087 
    28088         * kjs/ustring.h: Added a strict version of the UTF-8 string conversion.
    28089         * kjs/ustring.cpp:
    28090         (KJS::decodeUTF8Sequence): Removed code to disallow U+FFFE and U+FFFF; while
    28091         those might be illegal in some sense, they aren't supposed to get any special
    28092         handling in the place where this function is currently used.
    28093         (KJS::UString::UTF8String): Added the strictness.
    28094 
    28095 2007-11-03  Darin Adler  <[email protected]>
    28096 
    28097         Reviewed by Maciej.
    28098 
    28099         - http://bugs.webkit.org/show_bug.cgi?id=15812
    28100           some JavaScript tests (from the Mozilla test suite) are failing
    28101 
    28102         Two or three fixes get 7 more of the Mozilla tests passing.
    28103         This gets us down from 61 failing tests to 54.
    28104 
    28105         * kjs/interpreter.h: (KJS::Interpreter::builtinRegExp):
    28106         Made this inline and gave it a more specific type. Some day we should
    28107         probably do that for all of these -- might even get a bit of a speed
    28108         boost from it.
    28109         * kjs/interpreter.cpp: Removed Interpreter::builtinRegExp now that it's
    28110         inline in the header.
    28111 
    28112         * kjs/regexp_object.h:
    28113         * kjs/regexp_object.cpp:
    28114         (KJS::RegExpProtoFunc::callAsFunction): Moved test and exec out of the
    28115         switch statement into the RegExpImp object, so they can be shared with
    28116         RegExpImp::callAsFunction.
    28117         (KJS::RegExpImp::match): Added. Common code used by both test and exec.
    28118         (KJS::RegExpImp::test): Added.
    28119         (KJS::RegExpImp::exec): Added.
    28120         (KJS::RegExpImp::implementsCall): Added.
    28121         (KJS::RegExpImp::callAsFunction): Added.
    28122         (KJS::RegExpObjectImpPrivate::RegExpObjectImpPrivate): Initialize
    28123         lastInput to null rather than empty string -- we take advantage of the
    28124         difference in RegExpImp::match.
    28125         (KJS::RegExpObjectImp::input): Added. No reason to go through hash tables
    28126         just to get at a field like this.
    28127 
    28128         * pcre/pcre_compile.c: (check_escape): Changed the \u handling to match
    28129         the JavaScript specification. If there are not 4 hex digits after the \u,
    28130         then it's processed as if it wasn't an escape sequence at all.
    28131 
    28132         * pcre/pcre_internal.h: Added IS_NEWLINE, with the appropriate definition
    28133         for JavaScript (4 specific Unicode values).
    28134         * pcre/pcre_exec.c:
    28135         (match): Changed all call sites to use IS_NEWLINE.
    28136         (pcre_exec): Ditto.
    28137 
    28138         * tests/mozilla/expected.html: Updated to expect 7 more successful tests.
    28139 
    28140 2007-11-03  David D. Kilzer  <[email protected]>
    28141 
    28142         Sort files(...); sections of Xcode project files.
    28143 
    28144         Rubber-stamped by Darin.
    28145 
    28146         * JavaScriptCore.xcodeproj/project.pbxproj:
    28147 
    28148 2007-11-03  Maciej Stachowiak  <[email protected]>
    28149 
    28150         Reviewed by Oliver.
    28151        
    28152         - remove VarDeclListNode and simplify VarDeclNode evaluation for 0.4% SunSpider speedup
    28153 
    28154         * kjs/grammar.y:
    28155         * kjs/nodes.cpp:
    28156         (KJS::VarDeclNode::optimizeVariableAccess):
    28157         (KJS::VarDeclNode::getDeclarations):
    28158         (KJS::VarDeclNode::handleSlowCase):
    28159         (KJS::VarDeclNode::evaluateSingle):
    28160         (KJS::VarDeclNode::evaluate):
    28161         (KJS::VarStatementNode::execute):
    28162         * kjs/nodes.h:
    28163         (KJS::VarDeclNode::):
    28164         (KJS::VarStatementNode::):
    28165         * kjs/nodes2string.cpp:
    28166         (KJS::VarDeclNode::streamTo):
    28167 
    28168 2007-11-03  Alexey Proskuryakov  <[email protected]>
    28169 
    28170         Reviewed by Darin.
    28171 
    28172         http://bugs.webkit.org/show_bug.cgi?id=15800
    28173         REGRESSION (r27303): RegExp leaks
    28174 
    28175         * kjs/regexp_object.h:
    28176         (KJS::RegExpImp::setRegExp):
    28177         (KJS::RegExpImp::regExp):
    28178         (KJS::RegExpImp::classInfo):
    28179         * kjs/regexp_object.cpp:
    28180         (RegExpImp::RegExpImp):
    28181         (RegExpImp::~RegExpImp):
    28182         Renamed reg member variable to m_regExp, changed it to use OwnPtr.
    28183 
    28184 2007-11-02  Maciej Stachowiak  <[email protected]>
    28185 
    28186         Reviewed by Oliver.
    28187        
    28188         - add SourceElements as a typedef for Vector<RefPtr<StatementNode> >.
    28189 
    28190         * kjs/grammar.y:
    28191         * kjs/nodes.cpp:
    28192         (KJS::statementListPushFIFO):
    28193         (KJS::statementListGetDeclarations):
    28194         (KJS::statementListInitializeDeclarationStacks):
    28195         (KJS::statementListInitializeVariableAccessStack):
    28196         (KJS::statementListExecute):
    28197         (KJS::BlockNode::BlockNode):
    28198         (KJS::FunctionBodyNode::FunctionBodyNode):
    28199         (KJS::ProgramNode::ProgramNode):
    28200         * kjs/nodes.h:
    28201         (KJS::CaseClauseNode::):
    28202 
    28203 2007-11-02  Darin Adler  <[email protected]>
    28204 
    28205         Reviewed by Maciej.
    28206 
    28207         - http://bugs.webkit.org/show_bug.cgi?id=15791
    28208           change property map data structure for less memory use, better speed
    28209 
    28210         The property map now has an array of indices and a separate array of
    28211         property map entries. This slightly slows down lookup because of a second
    28212         memory acess, but makes property maps smaller and faster to iterate in
    28213         functions like mark().
    28214 
    28215         SunSpider says this is 1.2% faster, although it makes the bitwise-end test
    28216         more than 10% slower. To fix that we'll need to optimize global variable lookup.
    28217 
    28218         * kjs/property_map.cpp:
    28219         (KJS::PropertyMapEntry::PropertyMapEntry):
    28220         (KJS::PropertyMapHashTable::entries):
    28221         (KJS::PropertyMapHashTable::allocationSize):
    28222         (KJS::SavedProperties::SavedProperties):
    28223         (KJS::SavedProperties::~SavedProperties):
    28224         (KJS::PropertyMap::checkConsistency):
    28225         (KJS::PropertyMap::~PropertyMap):
    28226         (KJS::PropertyMap::clear):
    28227         (KJS::PropertyMap::get):
    28228         (KJS::PropertyMap::getLocation):
    28229         (KJS::PropertyMap::put):
    28230         (KJS::PropertyMap::insert):
    28231         (KJS::PropertyMap::createTable):
    28232         (KJS::PropertyMap::rehash):
    28233         (KJS::PropertyMap::remove):
    28234         (KJS::PropertyMap::mark):
    28235         (KJS::comparePropertyMapEntryIndices):
    28236         (KJS::PropertyMap::containsGettersOrSetters):
    28237         (KJS::PropertyMap::getEnumerablePropertyNames):
    28238         (KJS::PropertyMap::save):
    28239         (KJS::PropertyMap::restore):
    28240         * kjs/property_map.h:
    28241 
    28242 2007-11-02  Darin Adler  <[email protected]>
    28243 
    28244         Reviewed by Maciej.
    28245 
    28246         - http://bugs.webkit.org/show_bug.cgi?id=15807
    28247           HashMap needs a take() function that combines get and remove
    28248 
    28249         * wtf/HashMap.h: Added take function. Simplistic implementation for now,
    28250         but still does only one hash table lookup.
    28251 
    28252         * kjs/array_instance.cpp: (KJS::ArrayInstance::put): Use take rather than
    28253         a find followed by a remove.
    28254 
    28255 2007-11-02  David Carson  <[email protected]>
    28256 
    28257         Reviewed by Darin.
    28258 
    28259         Fix compiler warning "warning: suggest parentheses around && within ||"
    28260         http://bugs.webkit.org/show_bug.cgi?id=15764
    28261 
    28262         * kjs/value.h: (KJS::JSValue::isNumber): Add parentheses.
    28263 
    28264 2007-11-01  Geoffrey Garen  <[email protected]>
    28265 
    28266         Reviewed by Maciej Stachowiak.
    28267        
    28268         In preparation for making List a simple stack-allocated Vector:
    28269 
    28270         Removed all instances of List copying and/or assignment, and made List
    28271         inherit from Noncopyable.
    28272        
    28273         Functions that used to return a List by copy now take List& out
    28274         parameters.
    28275        
    28276         Layout tests and JS tests pass.
    28277 
    28278         * kjs/list.cpp:
    28279         (KJS::List::slice): Replaced copyTail with a more generic slice
    28280         alternative. (JavaScriptCore only calls slice(1), but WebCore calls
    28281         slice(2)).
    28282 
    28283 2007-11-01  Geoffrey Garen  <[email protected]>
    28284 
    28285         Reviewed by Maciej Stachowiak.
    28286 
    28287         Fixed http://bugs.webkit.org/show_bug.cgi?id=15785
    28288         REGRESSION(r27344): Crash on load at finance.yahoo.com
    28289        
    28290         Reverted a small portion of my last check-in. (The speedup and the List
    28291         removal are still there, though.)
    28292        
    28293         ActivationImp needs to hold a pointer to its function, and mark that
    28294         pointer (rather than accessing its function through its ExecState, and
    28295         counting on the active scope to mark its function) because a closure
    28296         can cause an ActivationImp to outlive its ExecState along with any
    28297         active scope.
    28298 
    28299         * kjs/ExecState.cpp:
    28300         (KJS::ExecState::ExecState):
    28301         * kjs/function.cpp:
    28302         (KJS::FunctionImp::~FunctionImp):
    28303         (KJS::ActivationImp::ActivationImp):
    28304         * kjs/function.h:
    28305         (KJS::ActivationImp::ActivationImpPrivate::ActivationImpPrivate):
    28306 
    28307         Also made HashTable a little more crash-happy in debug builds, so
    28308         problems like this will show up earlier:
    28309        
    28310         * wtf/HashTable.h:
    28311         (WTF::HashTable::~HashTable):
    28312 
    28313 2007-11-01  Geoffrey Garen  <[email protected]>
    28314 
    28315         Reviewed by Adam Roben.
    28316        
    28317         Addressed some of Darin's review comments.
    28318        
    28319         Used perl -p, which is the shorthand while(<>) {}.
    28320        
    28321         Made sure not to suppress bison's output.
    28322        
    28323         Added line to removed bison_out.txt, since this script removes other
    28324         intermediate files, too.
    28325 
    28326         * DerivedSources.make:
    28327 
    28328 2007-11-01  Geoffrey Garen  <[email protected]>
    28329 
    28330         Reviewed by Oliver Hunt.
    28331        
    28332         Removed List from ActivationImp, in preparation for making all lists
    28333         stack-allocated.
    28334        
    28335         Tests pass.
    28336        
    28337         1.0% speedup on SunSpider, presumably due to reduced List refcount thrash.
    28338 
    28339         * kjs/ExecState.cpp:
    28340         (KJS::ExecState::ExecState):
    28341         (KJS::ExecState::~ExecState):
    28342         * kjs/function.cpp:
    28343         (KJS::ActivationImp::ActivationImp):
    28344         (KJS::ActivationImp::createArgumentsObject):
    28345         * kjs/function.h:
    28346         (KJS::ActivationImp::ActivationImpPrivate::ActivationImpPrivate):
    28347 
    28348 2007-11-01  Adam Roben  <[email protected]>
    28349 
    28350         Use jsNumberCell instead of jsNumber when converting double constants to JSValues
    28351 
    28352         This fixes fast/js/math.html, ecma/Date/15.9.5.10-1.js, and
    28353         ecma/Date/15.9.5.12-1.js, which were suffering from a bug in MSVC.
    28354 
    28355         It also gets rid of an MSVC warning that we previously had to silence.
    28356 
    28357         Reviewed by Geoff.
    28358 
    28359         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Turn
    28360         back on the "overflow in constant arithmetic" warning.
    28361         * kjs/number_object.cpp:
    28362         (NumberObjectImp::getValueProperty): Use jsNumberCell instead of
    28363         jsNumber.
    28364 
    28365 2007-10-31  Adam Roben  <[email protected]>
    28366 
    28367         Windows build fix
    28368 
    28369         * kjs/ExecState.h:
    28370 
    28371 2007-10-31  Maciej Stachowiak  <[email protected]>
    28372 
    28373         Reviewed by Oliver.
    28374        
    28375         - shave some cycles off of local storage access for a 1% SunSpider speedup
    28376        
    28377         Keep the LocalStorage pointer in the ExecState, instead of getting
    28378         it from the ActivationImp all the time.
    28379 
    28380         * kjs/ExecState.cpp:
    28381         (KJS::ExecState::updateLocalStorage):
    28382         * kjs/ExecState.h:
    28383         (KJS::ExecState::localStorage):
    28384         * kjs/nodes.cpp:
    28385         (KJS::LocalVarAccessNode::evaluate):
    28386         (KJS::LocalVarFunctionCallNode::evaluate):
    28387         (KJS::PostIncLocalVarNode::evaluate):
    28388         (KJS::PostDecLocalVarNode::evaluate):
    28389         (KJS::LocalVarTypeOfNode::evaluate):
    28390         (KJS::PreIncLocalVarNode::evaluate):
    28391         (KJS::PreDecLocalVarNode::evaluate):
    28392         (KJS::ReadModifyLocalVarNode::evaluate):
    28393         (KJS::AssignLocalVarNode::evaluate):
    28394         (KJS::FunctionBodyNode::processDeclarationsForFunctionCode):
    28395 
    28396 2007-10-31  Adam Roben  <[email protected]>
    28397 
    28398         Fix a crash on launch due to a static initializer race
    28399 
    28400         We now use fast inline assembler spinlocks which can be statically
    28401         initialized at compile time.
    28402 
    28403         As a side benefit, this speeds up SunSpider by 0.4%.
    28404 
    28405         Reviewed by Oliver.
    28406 
    28407         * wtf/FastMalloc.cpp:
    28408         * wtf/TCSpinLock.h:
    28409         (TCMalloc_SpinLock::Lock):
    28410         (TCMalloc_SpinLock::Unlock):
    28411         (TCMalloc_SlowLock):
    28412         * wtf/TCSystemAlloc.cpp:
    28413 
    28414 2007-10-31  Kevin McCullough  <[email protected]>
    28415 
    28416         Reviewed by Sam.
    28417 
    28418         - Corrected spelling.
    28419 
    28420         * wtf/HashTraits.h:
    28421 
    28422 2007-10-31  Mark Rowe  <[email protected]>
    28423 
    28424         Further Gtk build fixage.
    28425 
    28426         * kjs/regexp_object.cpp:
    28427 
    28428 2007-10-31  Mark Rowe  <[email protected]>
    28429 
    28430         Gtk build fix.
    28431 
    28432         * kjs/regexp.h:
    28433 
    28434 2007-10-31  Darin Adler  <[email protected]>
    28435 
    28436         Reviewed by Maciej.
    28437 
    28438         - fix http://bugs.webkit.org/show_bug.cgi?id=15749
    28439           RegExp/RegExpObjectImp cause needless UString creation
    28440 
    28441         Speeds things up 0.4% according to SunSpider.
    28442 
    28443         * kjs/config.h: Define USE(PCRE16) instead of HAVE(PCREPOSIX),
    28444         because this library doesn't use the real PCRE -- it uses its
    28445         own PCRE that works on UTF-16.
    28446 
    28447         * kjs/regexp.h: Removed a few unused functions. Changed the ifdef.
    28448         Use Noncopyable. Change the return value of match.
    28449         * kjs/regexp.cpp:
    28450         (KJS::RegExp::RegExp): Call pcre_compile2, for a slight speed boost.
    28451         (KJS::RegExp::~RegExp): PCRE16 rather than PCREPOSIX.
    28452         (KJS::RegExp::match): Change to return the position as an int and the
    28453         ovector as a OwnArrayPtr<int> for efficiency and clearer storage management.
    28454 
    28455         * kjs/regexp_object.h: Change performMatch and arrayOfMatches to no longer
    28456         require a result string.
    28457         * kjs/regexp_object.cpp:
    28458         (RegExpProtoFunc::callAsFunction): Update for new signature of performMatch.
    28459         (RegExpObjectImp::performMatch): Change so it doesn't return a string.
    28460         (RegExpObjectImp::arrayOfMatches): Simplify by unifying the handling of
    28461         the main result with the backreferences; now it doesn't need to take
    28462         a result parameter.
    28463         (RegExpObjectImp::getBackref): Minor tweaks.
    28464         (RegExpObjectImp::getLastParen): Ditto.
    28465         (RegExpObjectImp::getLeftContext): Ditto.
    28466         (RegExpObjectImp::getRightContext): Ditto.
    28467         (RegExpObjectImp::getValueProperty): Change LastMatch case to call
    28468         getBackref(0) so we don't need a separate getLastMatch function.
    28469 
    28470         * kjs/string_object.cpp:
    28471         (KJS::replace): Update to use new performMatch, including merging the
    28472         matched string section with the other substrings.
    28473         (KJS::StringProtoFunc::callAsFunction): Update functions to use the
    28474         new performMatch and match. Also change to use OwnArrayPtr.
    28475 
    28476 2007-10-31  Oliver Hunt  <[email protected]>
    28477 
    28478         * kjs/nodes.h: include OwnPtr.h
    28479 
    28480 2007-10-31  Oliver Hunt  <[email protected]>
    28481 
    28482         Reviewed by Maciej.
    28483 
    28484         Remove SourceCodeElement class and replaced with a Vector for a 0.8% gain on sunspider
    28485 
    28486         * kjs/grammar.y:
    28487         * kjs/nodes.cpp:
    28488         (KJS::statementListPushFIFO):
    28489         (KJS::statementListGetDeclarations):
    28490         (KJS::statementListInitializeDeclarationStacks):
    28491         (KJS::statementListInitializeVariableAccessStack):
    28492         (KJS::statementListExecute):
    28493         (KJS::BlockNode::optimizeVariableAccess):
    28494         (KJS::BlockNode::BlockNode):
    28495         (KJS::BlockNode::getDeclarations):
    28496         (KJS::BlockNode::execute):
    28497         (KJS::CaseClauseNode::optimizeVariableAccess):
    28498         (KJS::CaseClauseNode::getDeclarations):
    28499         (KJS::CaseClauseNode::evalStatements):
    28500         (KJS::FunctionBodyNode::initializeDeclarationStacks):
    28501         (KJS::FunctionBodyNode::optimizeVariableAccess):
    28502         * kjs/nodes.h:
    28503         * kjs/nodes2string.cpp:
    28504         (KJS::statementListStreamTo):
    28505         (KJS::BlockNode::streamTo):
    28506         (KJS::CaseClauseNode::streamTo):
    28507 
    28508 2007-10-30  Mark Rowe  <[email protected]>
    28509 
    28510         * kjs/property_map.cpp: Added a missing using directive to fix the build
    28511         for non-Mac ports. Mac worked only because it does the AllInOneFile compile.
    28512 
    28513 2007-10-31  Maciej Stachowiak  <[email protected]>
    28514 
    28515         * kjs/property_map.cpp: Include HashTable.h the right way to fix the build
    28516         for non-Mac ports.
    28517 
    28518 2007-10-31  Alexey Proskuryakov  <[email protected]>
    28519 
    28520         Reviewed by Darin.
    28521 
    28522         http://bugs.webkit.org/show_bug.cgi?id=11001
    28523         WebKit doesn't support RegExp.compile method
    28524 
    28525         Test: fast/js/regexp-compile.html
    28526 
    28527         * kjs/regexp_object.cpp:
    28528         (RegExpPrototype::RegExpPrototype):
    28529         (RegExpProtoFunc::callAsFunction):
    28530         * kjs/regexp_object.h:
    28531         (KJS::RegExpProtoFunc::):
    28532         Added RegExp.compile.
    28533 
    28534         * tests/mozilla/expected.html: js1_2/regexp/compile.js now passes.
    28535 
    28536 2007-10-31  Maciej Stachowiak  <[email protected]>
    28537 
    28538         Reviewed by Oliver.
    28539        
    28540         - get rid of integer divide in PropertyMap and HashTable for 1% SunSpider speedup
    28541        
    28542         Integer divide sucks. Fortunately, a bunch of shifts and XORs
    28543         biased towards the high bits is sufficient to provide a good
    28544         double hash. Besides the SunSpider win, I used the dump statistics
    28545         mode for both to verify that collisions did not increase and that
    28546         the longest collision chain is not any longer.
    28547 
    28548         * kjs/property_map.cpp:
    28549         (KJS::doubleHash):
    28550         (KJS::PropertyMap::get):
    28551         (KJS::PropertyMap::getLocation):
    28552         (KJS::PropertyMap::put):
    28553         (KJS::PropertyMap::insert):
    28554         (KJS::PropertyMap::remove):
    28555         (KJS::PropertyMap::checkConsistency):
    28556         * wtf/HashTable.h:
    28557         (WTF::doubleHash):
    28558         (WTF::::lookup):
    28559         (WTF::::lookupForWriting):
    28560         (WTF::::fullLookupForWriting):
    28561         (WTF::::add):
    28562 
    28563 2007-10-30  Adam Roben  <[email protected]>
    28564 
    28565         * kjs/collector.h: Make HeapType public so it can be used for non-member
    28566         things like the HeapConstants struct template. Fixes the build on Windows.
    28567 
    28568 2007-10-30  Adam Roben  <[email protected]>
    28569 
    28570         Change ALWAYS_INLINE and WTF_PRIVATE_INLINE to use __forceinline on Windows
    28571 
    28572         Speeds up SunSpider by 0.4%.
    28573 
    28574         Reviewed by Steve and Maciej.
    28575 
    28576         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable
    28577         a warning during LTCG in release builds about double -> float
    28578         conversion.
    28579         * wtf/AlwaysInline.h:
    28580         * wtf/FastMalloc.h:
    28581 
    28582 2007-10-30  Adam Roben  <[email protected]>
    28583 
    28584         Use GetCurrentThreadId instead of pthread_self in FastMalloc
    28585 
    28586         Speeds up SunSpider by 0.3%.
    28587 
    28588         Reviewed by Steve.
    28589 
    28590         * wtf/FastMalloc.cpp:
    28591         (WTF::TCMalloc_ThreadCache::InitTSD):
    28592         (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
    28593 
    28594 2007-10-30  Adam Roben  <[email protected]>
    28595 
    28596         Switch to a Win32 critical section implementation of spinlocks
    28597        
    28598         Speeds up SunSpider by 0.4%.
    28599        
    28600         Reviewed by Steve.
    28601        
    28602         * wtf/FastMalloc.cpp:
    28603         * wtf/TCSpinLock.h:
    28604         (TCMalloc_SpinLock::TCMalloc_SpinLock):
    28605         (TCMalloc_SpinLock::Init):
    28606         (TCMalloc_SpinLock::Finalize):
    28607         (TCMalloc_SpinLock::Lock):
    28608         (TCMalloc_SpinLock::Unlock):
    28609         * wtf/TCSystemAlloc.cpp:
    28610 
    28611 2007-10-30  Adam Roben  <[email protected]>
    28612 
    28613         Fix Bug 15586: REGRESSION (r26759-r26785): Windows nightly builds crash with Safari 3 Public Beta
    28614 
    28615         http://bugs.webkit.org/show_bug.cgi?id=15586
    28616 
    28617         Also fixes: <rdar://5565303> Cannot use regsvr32.exe to register WebKit.dll
    28618 
    28619         Use Win32 TLS functions instead of __declspec(thread), which breaks
    28620         delay-loading.
    28621 
    28622         Reviewed by Steve.
    28623 
    28624         * wtf/FastMalloc.cpp:
    28625         (WTF::getThreadHeap):
    28626         (WTF::TCMalloc_ThreadCache::InitModule):
    28627 
    28628 2007-10-30  Maciej Stachowiak  <[email protected]>
    28629 
    28630         Reviewed by Oliver.
    28631        
    28632         - allocate numbers in half-size cells, for an 0.5% SunSpider speedup
    28633         http://bugs.webkit.org/show_bug.cgi?id=15772
    28634        
    28635         We do this by using a single mark bit per two number cells, and
    28636         tweaking marking.
    28637        
    28638         Besides being an 0.5% win overall, this is a 7.1% win on morph.
    28639 
    28640         * kjs/collector.cpp:
    28641         (KJS::Collector::heapAllocate):
    28642         (KJS::Collector::markStackObjectsConservatively):
    28643         (KJS::Collector::sweep):
    28644         * kjs/collector.h:
    28645         (KJS::SmallCollectorCell::):
    28646 
    28647 2007-10-30  Geoffrey Garen  <[email protected]>
    28648 
    28649         Reviewed by Adam Roben, Sam Weinig.
    28650        
    28651         Made conflicts in grammar.y a persistent build failure.
    28652 
    28653         * DerivedSources.make:
    28654 
    28655 2007-10-30  Kevin McCullough  <[email protected]>
    28656 
    28657         Reviewed by Adam and Geoff.
    28658 
    28659         - Added a new cast so all the casts are in the same place.
    28660 
    28661         * API/APICast.h:
    28662         (toGlobalRef):
    28663 
    28664 2007-10-30  Geoffrey Garen  <[email protected]>
    28665 
    28666         Reviewed by Darin Adler.
    28667 
    28668         Fixed <rdar://problem/5567504> shift/reduce conflict introduced in r24457
    28669        
    28670         JS tests, including
    28671 
    28672             ecma_2/Statements/dowhile-001.js
    28673             ecma_2/Statements/dowhile-002.js
    28674             ecma_2/Statements/dowhile-003.js
    28675             ecma_2/Statements/dowhile-004.js
    28676             ecma_2/Statements/dowhile-005.js
    28677             ecma_2/Statements/dowhile-006.js
    28678             ecma_2/Statements/dowhile-007.js
    28679             js1_2/statements/do_while.js
    28680 
    28681         and layout tests, including
    28682 
    28683             do-while-expression-value.html
    28684             do-while-semicolon.html
    28685             do-while-without-semicolon.html
    28686        
    28687         pass.
    28688        
    28689         * kjs/grammar.y: Use the explicit "error" production, as we do with other
    28690         automatic semicolon insertions, to disambiguate "do { } while();" from
    28691         "do { } while()" followed by ";" (the empty statement).
    28692 
    28693 2007-10-29  Oliver Hunt  <[email protected]>
    28694 
    28695         Reviewed by Maciej.
    28696 
    28697         Debranching remaining assignment nodes, and miscellaneous cleanup
    28698        
    28699         Split read-modify code paths out of AssignBracketNode and AssignDotNode
    28700         Removed now unnecessary check for write-only assignment in ReadModifyLocalVarNode
    28701         and ReadModifyResolveNode evaluate methods
    28702 
    28703         Leads to a 1% gain in SunSpider.
    28704 
    28705         * kjs/grammar.y:
    28706         * kjs/nodes.cpp:
    28707         (KJS::ReadModifyLocalVarNode::evaluate):
    28708         (KJS::ReadModifyResolveNode::evaluate):
    28709         (KJS::AssignDotNode::evaluate):
    28710         (KJS::ReadModifyDotNode::optimizeVariableAccess):
    28711         (KJS::ReadModifyDotNode::evaluate):
    28712         (KJS::AssignBracketNode::evaluate):
    28713         (KJS::ReadModifyBracketNode::optimizeVariableAccess):
    28714         (KJS::ReadModifyBracketNode::evaluate):
    28715         * kjs/nodes.h:
    28716         (KJS::AssignBracketNode::):
    28717         (KJS::AssignBracketNode::precedence):
    28718         (KJS::AssignDotNode::):
    28719         (KJS::AssignDotNode::precedence):
    28720         * kjs/nodes2string.cpp:
    28721         (KJS::ReadModifyBracketNode::streamTo):
    28722         (KJS::AssignBracketNode::streamTo):
    28723         (KJS::ReadModifyDotNode::streamTo):
    28724         (KJS::AssignDotNode::streamTo):
    28725 
    28726 2007-10-29  Oliver Hunt  <[email protected]>
    28727 
    28728         Debranching various Node::evaluate implementations
    28729        
    28730         Reviewed by Maciej.
    28731        
    28732         Split the read-modify-write assignment cases out of AssignResolveNode and into ReadModifyResolveNode
    28733         Split the increment and decrement cases for Prefix- and Postfix- ResolveNode, BracketNode, and DotNode
    28734        
    28735         Gains 1.6% on SunSpider
    28736 
    28737         * JavaScriptCore.xcodeproj/project.pbxproj:
    28738         * kjs/grammar.y:
    28739         * kjs/nodes.cpp:
    28740         (KJS::PostIncResolveNode::optimizeVariableAccess):
    28741         (KJS::PostIncResolveNode::evaluate):
    28742         (KJS::PostIncLocalVarNode::evaluate):
    28743         (KJS::PostDecResolveNode::optimizeVariableAccess):
    28744         (KJS::PostDecResolveNode::evaluate):
    28745         (KJS::PostDecLocalVarNode::evaluate):
    28746         (KJS::PostIncBracketNode::evaluate):
    28747         (KJS::PostDecBracketNode::evaluate):
    28748         (KJS::PostIncDotNode::evaluate):
    28749         (KJS::PostDecDotNode::evaluate):
    28750         (KJS::PreIncResolveNode::optimizeVariableAccess):
    28751         (KJS::PreIncLocalVarNode::evaluate):
    28752         (KJS::PreIncResolveNode::evaluate):
    28753         (KJS::PreDecResolveNode::optimizeVariableAccess):
    28754         (KJS::PreDecLocalVarNode::evaluate):
    28755         (KJS::PreDecResolveNode::evaluate):
    28756         (KJS::PreIncBracketNode::evaluate):
    28757         (KJS::PreDecBracketNode::evaluate):
    28758         (KJS::PreIncDotNode::evaluate):
    28759         (KJS::PreDecDotNode::evaluate):
    28760         (KJS::ReadModifyResolveNode::optimizeVariableAccess):
    28761         (KJS::AssignResolveNode::optimizeVariableAccess):
    28762         (KJS::AssignLocalVarNode::evaluate):
    28763         (KJS::AssignResolveNode::evaluate):
    28764         * kjs/nodes.h:
    28765         (KJS::PostDecResolveNode::):
    28766         (KJS::PostDecResolveNode::precedence):
    28767         (KJS::PostDecLocalVarNode::):
    28768         (KJS::PostfixBracketNode::):
    28769         (KJS::PostfixBracketNode::precedence):
    28770         (KJS::PostIncBracketNode::):
    28771         (KJS::PostIncBracketNode::isIncrement):
    28772         (KJS::PostDecBracketNode::):
    28773         (KJS::PostDecBracketNode::isIncrement):
    28774         (KJS::PostfixDotNode::):
    28775         (KJS::PostfixDotNode::precedence):
    28776         (KJS::PostIncDotNode::):
    28777         (KJS::PostIncDotNode::isIncrement):
    28778         (KJS::PostDecDotNode::):
    28779         (KJS::PreIncResolveNode::):
    28780         (KJS::PreDecResolveNode::):
    28781         (KJS::PreDecResolveNode::precedence):
    28782         (KJS::PreDecLocalVarNode::):
    28783         (KJS::PrefixBracketNode::):
    28784         (KJS::PrefixBracketNode::precedence):
    28785         (KJS::PreIncBracketNode::):
    28786         (KJS::PreIncBracketNode::isIncrement):
    28787         (KJS::PreDecBracketNode::):
    28788         (KJS::PreDecBracketNode::isIncrement):
    28789         (KJS::PrefixDotNode::):
    28790         (KJS::PrefixDotNode::precedence):
    28791         (KJS::PreIncDotNode::):
    28792         (KJS::PreIncDotNode::isIncrement):
    28793         (KJS::PreDecDotNode::):
    28794         (KJS::ReadModifyResolveNode::):
    28795         (KJS::ReadModifyLocalVarNode::):
    28796         (KJS::AssignResolveNode::):
    28797         (KJS::AssignResolveNode::precedence):
    28798         * kjs/nodes2string.cpp:
    28799         (KJS::PostIncResolveNode::streamTo):
    28800         (KJS::PostDecResolveNode::streamTo):
    28801         (KJS::PostfixBracketNode::streamTo):
    28802         (KJS::PostfixDotNode::streamTo):
    28803         (KJS::PreIncResolveNode::streamTo):
    28804         (KJS::PreDecResolveNode::streamTo):
    28805         (KJS::ReadModifyResolveNode::streamTo):
    28806         (KJS::AssignResolveNode::streamTo):
    28807 
    28808 2007-10-29  Maciej Stachowiak  <[email protected]>
    28809 
    28810         Not reviewed, build fix.
    28811        
    28812         - Include Vector.h in a way that actually works.
    28813 
    28814         * kjs/LocalStorage.h:
    28815 
    28816 2007-10-29  Maciej Stachowiak  <[email protected]>
    28817 
    28818         Not reviewed, build fix.
    28819        
    28820         - Install LocalStorage.h as a private header.
    28821 
    28822         * JavaScriptCore.xcodeproj/project.pbxproj:
    28823 
    28824 2007-10-29  Maciej Stachowiak  <[email protected]>
    28825 
    28826         Reviewed by Darin.
    28827        
    28828         - Define good VectorTraits for LocalStorage entry for 0.5% speed improvement on SunSpider.
    28829 
    28830         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    28831         * JavaScriptCore.xcodeproj/project.pbxproj:
    28832         * kjs/LocalStorage.h: Added.
    28833         (KJS::LocalStorageEntry::LocalStorageEntry):
    28834         (WTF::):
    28835         * kjs/function.h:
    28836         * kjs/nodes.cpp:
    28837         (KJS::FunctionBodyNode::processDeclarationsForFunctionCode):
    28838 
    28839 2007-10-29  Geoffrey Garen  <[email protected]>
    28840 
    28841         Reviewed by Oliver Hunt.
    28842        
    28843         Some small tweaks that I notice while reviewing Oliver's last patch.
    28844        
    28845         Includes removal of an unnecessary KJS_CHECKEXCEPTIONVALUE.
    28846        
    28847         No change in SunSpider because SunSpider doesn't take the code path that
    28848         would execute the unnecessary KJS_CHECKEXCEPTIONVALUE much.
    28849 
    28850         * kjs/nodes.cpp:
    28851         (KJS::LocalVarPostfixNode::evaluate):
    28852         (KJS::TypeOfResolveNode::optimizeVariableAccess):
    28853         (KJS::LocalVarTypeOfNode::evaluate):
    28854         (KJS::PrefixResolveNode::optimizeVariableAccess):
    28855         (KJS::LocalVarPrefixNode::evaluate):
    28856         (KJS::AssignResolveNode::optimizeVariableAccess):
    28857         (KJS::LocalVarAssignNode::evaluate):
    28858         * kjs/nodes.h:
    28859         (KJS::LocalVarTypeOfNode::):
    28860         (KJS::PrefixResolveNode::):
    28861         (KJS::LocalVarPrefixNode::):
    28862         (KJS::AssignResolveNode::):
    28863         (KJS::LocalVarAssignNode::):
    28864 
    28865 2007-10-29  Eric Seidel  <[email protected]>
    28866 
    28867         Reviewed by Maciej.
    28868        
    28869         SunSpider claims this was a 0.7% speedup.
    28870 
    28871         * kjs/string_object.cpp:
    28872         (KJS::StringProtoFunc::callAsFunction): avoid mallocing a jsString in the common case
    28873 
    28874 2007-10-29  Maciej Stachowiak  <[email protected]>
    28875 
    28876         Reviewed by Mark.
    28877        
    28878         - re-enable asserts for access to empty or deleted keys
    28879 
    28880         * wtf/HashTable.h:
    28881         (WTF::::lookup):
    28882         (WTF::::lookupForWriting):
    28883         (WTF::::fullLookupForWriting):
    28884         (WTF::::add):
    28885 
    28886 2007-10-29  Eric Seidel  <[email protected]>
    28887 
    28888         Build fix only, no review.
    28889 
    28890         * JavaScriptCore.exp: Export symbol for new StringInstance::getOwnPropertySlot
    28891 
    28892 2007-10-29  Mark Rowe  <[email protected]>
    28893 
    28894         Gtk build fix.  Move struct declarations into nodes.h.
    28895 
    28896         * kjs/grammar.y:
    28897         * kjs/nodes.h:
    28898 
    28899 2007-10-29  Eric Seidel  <[email protected]>
    28900 
    28901         Reviewed by darin.
    28902        
    28903         Give StringInstance a getOwnPropertySlot(ExecState, unsigned, PropertySlot) fastpath, just like Arrays.
    28904         Make it a compile time error to use toString(ExecState) on a StringInstance
    28905        
    28906         SunSpider claims this was a 6.6% speedup overall (22% on string-base64)
    28907 
    28908         * kjs/internal.h:
    28909         (KJS::StringImp::getLength):
    28910         * kjs/string_object.cpp:
    28911         (KJS::StringInstance::lengthGetter):
    28912         (KJS::StringInstance::inlineGetOwnPropertySlot):
    28913         (KJS::StringInstance::getOwnPropertySlot):
    28914         * kjs/string_object.h:
    28915 
    28916 2007-10-28  Oliver Hunt  <[email protected]>
    28917 
    28918         Reviewed by Darin.
    28919 
    28920         Add nodes to allow Assignment, TypeOf, and prefix operators to
    28921         make use of the new optimised local variable look up.
    28922 
    28923         5% gain on sunspider
    28924 
    28925         * kjs/nodes.cpp:
    28926         (KJS::TypeOfResolveNode::optimizeVariableAccess):
    28927         (KJS::LocalTypeOfAccessNode::evaluate):
    28928         (KJS::PrefixResolveNode::optimizeVariableAccess):
    28929         (KJS::PrefixLocalAccessNode::evaluate):
    28930         (KJS::AssignResolveNode::optimizeVariableAccess):
    28931         (KJS::AssignLocalAccessNode::evaluate):
    28932         * kjs/nodes.h:
    28933         (KJS::TypeOfResolveNode::):
    28934         (KJS::TypeOfResolveNode::precedence):
    28935         (KJS::LocalTypeOfAccessNode::):
    28936         (KJS::PrefixResolveNode::):
    28937         (KJS::PrefixResolveNode::precedence):
    28938         (KJS::PrefixLocalAccessNode::):
    28939         (KJS::AssignResolveNode::):
    28940         (KJS::AssignLocalAccessNode::):
    28941 
    28942 2007-10-28  Maciej Stachowiak  <[email protected]>
    28943 
    28944         Reviewed by Darin.
    28945        
    28946         - avoid creating and then breaking circular lists in the parser, instead track head and tail pointers at parse time
    28947         http://bugs.webkit.org/show_bug.cgi?id=15748
    28948        
    28949         Not a significant speedup or slowdown on SunSpider.
    28950 
    28951         * kjs/Parser.cpp:
    28952         (KJS::clearNewNodes):
    28953         * kjs/Parser.h:
    28954         * kjs/grammar.y:
    28955         * kjs/nodes.cpp:
    28956         (KJS::BlockNode::BlockNode):
    28957         (KJS::CaseBlockNode::CaseBlockNode):
    28958         (KJS::FunctionBodyNode::FunctionBodyNode):
    28959         (KJS::SourceElementsNode::SourceElementsNode):
    28960         (KJS::ProgramNode::ProgramNode):
    28961         * kjs/nodes.h:
    28962         (KJS::ElementNode::):
    28963         (KJS::ArrayNode::):
    28964         (KJS::PropertyListNode::):
    28965         (KJS::ObjectLiteralNode::):
    28966         (KJS::ArgumentListNode::):
    28967         (KJS::ArgumentsNode::):
    28968         (KJS::VarDeclListNode::):
    28969         (KJS::VarStatementNode::):
    28970         (KJS::ForNode::):
    28971         (KJS::ParameterNode::):
    28972         (KJS::FuncExprNode::):
    28973         (KJS::FuncDeclNode::):
    28974         (KJS::SourceElementsNode::):
    28975         (KJS::CaseClauseNode::):
    28976         (KJS::ClauseListNode::):
    28977 
    28978 2007-10-28  Mark Rowe  <[email protected]>
    28979 
    28980         Disable assertions in a manner that doesn't break the Qt Windows build.
    28981 
    28982         * wtf/HashTable.h:
    28983         (WTF::::lookup):
    28984         (WTF::::lookupForWriting):
    28985         (WTF::::fullLookupForWriting):
    28986 
    28987 2007-10-28  Geoffrey Garen  <[email protected]>
    28988 
    28989         Temporarily disabling some ASSERTs I introduced in my last check-in
    28990         because of http://bugs.webkit.org/show_bug.cgi?id=15747
    28991         Lots of layout tests fail the !HashTranslator::equal(KeyTraits::emptyValue() ASSERT
    28992 
    28993         * wtf/HashTable.h:
    28994         (WTF::::lookup):
    28995         (WTF::::lookupForWriting):
    28996         (WTF::::fullLookupForWriting):
    28997         (WTF::::add):
    28998 
    28999 2007-10-28  Geoffrey Garen  <[email protected]>
    29000 
    29001         Reviewed by Darin Adler.
    29002        
    29003         Fixed http://bugs.webkit.org/show_bug.cgi?id=15746
    29004         #ifndef ASSERT_DISABLED is no good!
    29005        
    29006         Replaced with #if !ASSERT_DISABLED.
    29007 
    29008         * wtf/HashTable.h:
    29009         (WTF::::lookup):
    29010         (WTF::::lookupForWriting):
    29011         (WTF::::fullLookupForWriting):
    29012         (WTF::::add):
    29013 
    29014 2007-10-28  Geoffrey Garen  <[email protected]>
    29015 
    29016         Reviewed by Darin Adler.
    29017        
    29018         Added FunctionCallResolveNode, PostfixResolveNode, and DeleteResolveNode
    29019         to the AST transfom that replaces slow resolve nodes with fast local
    29020         variable alternatives.
    29021        
    29022         2.5% speedup on SunSpider.
    29023        
    29024         Also added some missing copyright notices.
    29025        
    29026         * kjs/nodes.cpp:
    29027         (KJS::FunctionCallResolveNode::optimizeVariableAccess):
    29028         (KJS::FunctionCallResolveNode::evaluate):
    29029         (KJS::LocalVarFunctionCallNode::evaluate):
    29030         (KJS::PostfixResolveNode::optimizeVariableAccess):
    29031         (KJS::PostfixResolveNode::evaluate):
    29032         (KJS::LocalVarPostfixNode::evaluate):
    29033         (KJS::DeleteResolveNode::optimizeVariableAccess):
    29034         (KJS::DeleteResolveNode::evaluate):
    29035         (KJS::LocalVarDeleteNode::evaluate):
    29036         * kjs/nodes.h:
    29037         (KJS::FunctionCallResolveNode::):
    29038         (KJS::LocalVarFunctionCallNode::LocalVarFunctionCallNode):
    29039         (KJS::PostfixResolveNode::):
    29040         (KJS::LocalVarPostfixNode::LocalVarPostfixNode):
    29041         (KJS::DeleteResolveNode::):
    29042         (KJS::LocalVarDeleteNode::LocalVarDeleteNode):
    29043 
    29044 2007-10-28  Eric Seidel  <[email protected]>
    29045 
    29046         Reviewed by darin.
    29047        
    29048         Inline UString::Rep::deref() for a 0.8% improvement in SunSpider
    29049         Add virtual keyword to a few virtual functions previously unmarked.
    29050 
    29051         * kjs/internal.h:
    29052         (KJS::StringImp::type):
    29053         (KJS::NumberImp::type):
    29054         * kjs/ustring.h:
    29055         (KJS::UString::Rep::deref):
    29056 
    29057 2007-10-28  Darin Adler  <[email protected]>
    29058 
    29059         - fix "broken everything" from the storage leak fix
    29060 
    29061         * wtf/RefPtr.h: (WTF::RefPtr::RefPtr): Added a PlacementNewAdopt constructor.
    29062         * kjs/ustring.h: (KJS::UString::UString): Pass PlacementNewAdopt along to RefPtr.
    29063 
    29064 2007-10-28  Darin Adler  <[email protected]>
    29065 
    29066         Reviewed by Adam.
    29067 
    29068         - turn on unused parameter waring on Mac OS X because it's already on elsewhere
    29069 
    29070         * Configurations/Base.xcconfig: Took out -wno-unused-parameter.
    29071 
    29072         * API/JSNode.c:
    29073         * API/JSNodeList.c:
    29074         * API/minidom.c:
    29075         * API/testapi.c:
    29076         Fixed unused variables by using them or marked them with UNUSED_PARAM.
    29077 
    29078         * kjs/CollectorHeapIntrospector.h: (KJS::CollectorHeapIntrospector::zoneCalloc):
    29079         Removed parameter names to indicate they are unused.
    29080 
    29081 2007-10-28  Darin Adler  <[email protected]>
    29082 
    29083         Reviewed by Maciej.
    29084 
    29085         - fix a storage leak where we ref the UString every time we replace
    29086           a ResolveNode with a LocalVarAccessNode
    29087 
    29088         * kjs/identifier.h: (KJS::Identifier::Identifier): Added a constructor
    29089         that takes PlacementNewAdopt.
    29090 
    29091         * kjs/nodes.h: (KJS::ResolveNode::ResolveNode): Initialize the ident
    29092         with PlacementNewAdopt instead of the old value of ident.
    29093 
    29094         * kjs/ustring.h: (KJS::UString::UString): Added a constructor that
    29095         takes PlacementNewAdopt.
    29096 
    29097 2007-10-28  Darin Adler  <[email protected]>
    29098 
    29099         - Windows build fix; get rid of unused parameter
    29100 
    29101         * kjs/nodes.cpp: (KJS::ResolveNode::optimizeVariableAccess): Don't pass it.
    29102         * kjs/nodes.h: (KJS::LocalVarAccessNode::LocalVarAccessNode): Remove it.
    29103         The assertions weren't all that helpful.
    29104 
    29105 2007-10-28  Mark Rowe  <[email protected]>
    29106 
    29107         Gtk build fix.  Add include of MathExtras.h.
    29108 
    29109         * kjs/string_object.cpp:
    29110 
    29111 2007-10-28  Mark Rowe  <[email protected]>
    29112 
    29113         Reviewed by Maciej and Tim.
    29114 
    29115         Replace uses of isNaN and isInf with isnan and isinf, and
    29116         remove isNaN and isInf.
    29117 
    29118         * kjs/config.h: Remove unused HAVE_'s.
    29119         * kjs/date_object.cpp:
    29120         (KJS::DateInstance::getTime):
    29121         (KJS::DateInstance::getUTCTime):
    29122         (KJS::DateProtoFunc::callAsFunction):
    29123         (KJS::DateObjectImp::construct):
    29124         (KJS::DateObjectFuncImp::callAsFunction):
    29125         * kjs/function.cpp:
    29126         (KJS::GlobalFuncImp::callAsFunction):
    29127         * kjs/math_object.cpp:
    29128         (MathFuncImp::callAsFunction):
    29129         * kjs/nodes2string.cpp:
    29130         (KJS::isParserRoundTripNumber):
    29131         * kjs/number_object.cpp:
    29132         (NumberProtoFunc::callAsFunction):
    29133         * kjs/operations.cpp:
    29134         * kjs/operations.h:
    29135         * kjs/string_object.cpp:
    29136         (KJS::StringProtoFunc::callAsFunction):
    29137         * kjs/ustring.cpp:
    29138         (KJS::UString::from):
    29139         * kjs/value.cpp:
    29140         (KJS::JSValue::toInteger):
    29141         (KJS::JSValue::toInt32SlowCase):
    29142         (KJS::JSValue::toUInt32SlowCase):
    29143 
    29144 2007-10-28  Geoffrey Garen  <[email protected]>
    29145 
    29146         Build fix: use the new-fangled missingSymbolMarker().
    29147 
    29148         * kjs/nodes.cpp:
    29149         (KJS::ResolveNode::optimizeVariableAccess):
    29150         * kjs/nodes.h:
    29151         (KJS::LocalVarAccessNode::LocalVarAccessNode):
    29152 
    29153 2007-10-28  Geoffrey Garen  <[email protected]>
    29154 
    29155         Reviewed by Maciej Stachowiak, Darin Adler.
    29156        
    29157         Much supporting work done by Maciej Stachowiak, Maks Orlovich, and
    29158         Cameron Zwarich.
    29159        
    29160         AST transfom to replace slow resolve nodes with fast local variable
    29161         alternatives that do direct memory access. Currently, only ResolveNode
    29162         provides a fast local variable alternative. 6 others are soon to come.
    29163        
    29164         16.7% speedup on SunSpider.
    29165        
    29166         Most of this patch is just scaffolding to support iterating all the
    29167         resolve nodes in the AST through optimizeResolveNodes(). In
    29168         optimizeResolveNodes(), most classes just push their child nodes onto
    29169         the processing stack, while ResolveNodes actually replace themselves in
    29170         the tree with more optimized alternatives, if possible.
    29171 
    29172         Here are the interesting bits:
    29173 
    29174         * kjs/nodes.h: Added PlacementNewAdoptTag, along with implementations
    29175         in Node and ResolveNode. This tag allows you to use placement new to
    29176         swap out a base class Node in favor of a subclass copy that holds the
    29177         same data. (Without this tag, default initialization would NULL out
    29178         RefPtrs, change line numbers, etc.)
    29179 
    29180         * kjs/nodes.cpp:
    29181         (KJS::ResolveNode::evaluate): Since we're taking the slow path, ASSERT
    29182         that the fast path is impossible, to make sure we didn't leave anything
    29183         on the table.
    29184 
    29185         (KJS::FunctionBodyNode::optimizeResolveNodes): Here's where the AST
    29186         transformation happens.
    29187        
    29188         (KJS::ResolveNode::optimizeResolveNodes): Here's where the ResolveNode
    29189         optimization happens.
    29190 
    29191         * kjs/function.h: Added symbolTable() accessor for, for the sake of
    29192         an ASSERT.
    29193 
    29194 2007-10-28  Mark Rowe  <[email protected]>
    29195 
    29196         Reviewed by Maciej.
    29197 
    29198         Fix "AllInOneFile.o has a global initializer in it".
    29199 
    29200         Some versions of gcc generate a global initializer for std::numeric_limits<size_t>::max().
    29201         We can avoid this by moving it inside an inline function.
    29202 
    29203         * kjs/SymbolTable.h:
    29204         (KJS::missingSymbolMarker):
    29205         * kjs/function.cpp:
    29206         (KJS::ActivationImp::getOwnPropertySlot):
    29207         (KJS::ActivationImp::put):
    29208 
    29209 2007-10-28  Maciej Stachowiak  <[email protected]>
    29210 
    29211         Reviewed by Mark.
    29212        
    29213         - Added assertions to protect against adding empty or deleted keys to a HashTable
    29214 
    29215         * wtf/HashTable.h:
    29216         (WTF::HashTable::lookup):
    29217         (WTF::HashTable::lookupForWriting):
    29218         (WTF::HashTable::fullLookupForWriting):
    29219         (WTF::HashTable::add):
    29220 
    29221 2007-10-28  Darin Adler  <[email protected]>
    29222 
    29223         - fix GTK build
    29224 
    29225         * kjs/nodes2string.cpp: (KJS::isParserRoundTripNumber):
    29226         Use isNaN and isInf instead of isnan and isinf.
    29227 
    29228 2007-10-28  Darin Adler  <[email protected]>
    29229 
    29230         Reviewed by Maciej.
    29231 
    29232         - http://bugs.webkit.org/show_bug.cgi?id=15735
    29233           remove GroupNode to simplify AST and possibly get a modest speedup
    29234 
    29235         This patch removes 4 node types: GroupNode, PropertyNameNode,
    29236         FunctionCallParenBracketNode, and FunctionCallParenDotNode.
    29237 
    29238         To remove GroupNode, we add knowledge of precedence to the tree nodes,
    29239         and use that when serializing to determine where parentheses are needed.
    29240         This means we no longer have to represent parentheses in the tree.
    29241 
    29242         The precedence values are named after productions in the grammar from the
    29243         JavaScript standard.
    29244 
    29245         SunSpider says this is an 0.4% speedup.
    29246 
    29247         * kjs/function.h:
    29248         * kjs/function.cpp: Removed escapeStringForPrettyPrinting -- it's part of
    29249         serialization, so I moved it to the file that takes care of that.
    29250 
    29251         * kjs/grammar.y: Changed makeGetterOrSetterPropertyNode to use 0 to
    29252         indicate failure instead of a separate boolean. Got rid of PropertyNameNode
    29253         by merging the PropertyName rule into the Property rule (which was easier
    29254         than figuring out how to pass the Identifier from one node to another).
    29255         Got rid of GroupNode, nodeInsideAllParens(), FunctionCallParenBracketNode,
    29256         and FunctionCallParenDotNode.
    29257 
    29258         * kjs/nodes.h: Removed unused forward declarations and Operator values.
    29259         Added Precedence enum, and precedence function to all nodes. Removed
    29260         nodeInsideAllParens. Added streamBinaryOperator function for serialization.
    29261         Removed GroupNode and PropertyNameNode. Made PropertyNode store an Identifier.
    29262         Removed FunctionCallParenBracketNode and FunctionCallParenDotNode.
    29263 
    29264         * kjs/nodes.cpp: Removed Node::nodinsideAllParens, GroupNode, and PropertyNameNode.
    29265         (KJS::PropertyListNode::evaluate): Changed code to get name directly instead
    29266         of converting it from an Identifier to a jsString then back to a UString
    29267         then into an Identifier again!
    29268 
    29269         * kjs/nodes2string.cpp: Changed special-token implementation to use a separate
    29270         function for each of Endl, Indent, Unindent, and DotExpr instead of using a
    29271         single function with a switch. Added a precedence that you can stream in, to
    29272         cause the next node serialized to add parentheses based on that precedence value.
    29273         (KJS::operatorString): Moved to the top of the file.
    29274         (KJS::escapeStringForPrettyPrinting): Moved here from function.cpp. Removed old
    29275         workaround for snprintf, since StringExtras.h takes care of that.
    29276         (KJS::operator<<): Made the char and char* versions faster by using UString's
    29277         character append functions instead of constructing a UString. Added the logic
    29278         to the Node* version to add parentheses if needed.
    29279         (KJS::Node::streamLeftAssociativeBinaryOperator): Added helper function.
    29280         (KJS::ElementNode::streamTo): Use PrecAssignment for the elements.
    29281         (KJS::BracketAccessorNode::streamTo): Use PrecCall for the expression before
    29282         the bracket.
    29283         (KJS::DotAccessorNode::streamTo): Use PrecCall for the expression before the dot.
    29284         (KJS::ArgumentListNode::streamTo): Use PrecAssignment for the arguments.
    29285         (KJS::NewExprNode::streamTo): Use PrecMember for the expression.
    29286         (KJS::FunctionCallValueNode::streamTo): Use PrecCall.
    29287         (KJS::FunctionCallBracketNode::streamTo): Ditto.
    29288         (KJS::FunctionCallDotNode::streamTo): Ditto.
    29289         (KJS::PostfixBracketNode::streamTo): Ditto.
    29290         (KJS::PostfixDotNode::streamTo): Ditto.
    29291         (KJS::PostfixErrorNode::streamTo): Use PrecLeftHandSide.
    29292         (KJS::DeleteBracketNode::streamTo): Use PrecCall.
    29293         (KJS::DeleteDotNode::streamTo): Ditto.
    29294         (KJS::DeleteValueNode::streamTo): Use PrecUnary.
    29295         (KJS::VoidNode::streamTo): Ditto.
    29296         (KJS::TypeOfValueNode::streamTo): Ditto.
    29297         (KJS::PrefixBracketNode::streamTo): Use PrecCall.
    29298         (KJS::PrefixDotNode::streamTo): Ditto.
    29299         (KJS::PrefixErrorNode::streamTo): Use PrecUnary.
    29300         (KJS::UnaryPlusNode::streamTo): Ditto.
    29301         (KJS::NegateNode::streamTo): Ditto.
    29302         (KJS::BitwiseNotNode::streamTo): Ditto.
    29303         (KJS::LogicalNotNode::streamTo): Ditto.
    29304         (KJS::MultNode::streamTo): Use streamLeftAssociativeBinaryOperator.
    29305         (KJS::DivNode::streamTo): Ditto.
    29306         (KJS::ModNode::streamTo): Ditto.
    29307         (KJS::AddNode::streamTo): Ditto.
    29308         (KJS::SubNode::streamTo): Ditto.
    29309         (KJS::LeftShiftNode::streamTo): Ditto.
    29310         (KJS::RightShiftNode::streamTo): Ditto.
    29311         (KJS::UnsignedRightShiftNode::streamTo): Ditto.
    29312         (KJS::LessNode::streamTo): Ditto.
    29313         (KJS::GreaterNode::streamTo): Ditto.
    29314         (KJS::LessEqNode::streamTo): Ditto.
    29315         (KJS::GreaterEqNode::streamTo): Ditto.
    29316         (KJS::InstanceOfNode::streamTo): Ditto.
    29317         (KJS::InNode::streamTo): Ditto.
    29318         (KJS::EqualNode::streamTo): Ditto.
    29319         (KJS::NotEqualNode::streamTo): Ditto.
    29320         (KJS::StrictEqualNode::streamTo): Ditto.
    29321         (KJS::NotStrictEqualNode::streamTo): Ditto.
    29322         (KJS::BitAndNode::streamTo): Ditto.
    29323         (KJS::BitXOrNode::streamTo): Ditto.
    29324         (KJS::BitOrNode::streamTo): Ditto.
    29325         (KJS::LogicalAndNode::streamTo): Ditto.
    29326         (KJS::LogicalOrNode::streamTo): Ditto.
    29327         (KJS::ConditionalNode::streamTo): Ditto.
    29328         (KJS::AssignResolveNode::streamTo): Use PrecAssignment for the right side.
    29329         (KJS::AssignBracketNode::streamTo): Use PrecCall for the expression before
    29330         the bracket and PrecAssignment for the right side.
    29331         (KJS::AssignDotNode::streamTo): Ditto.
    29332         (KJS::AssignErrorNode::streamTo): Use PrecLeftHandSide for the left side
    29333         and PrecAssignment for the right side.
    29334         (KJS::CommaNode::streamTo): Use PrecAssignment for both expressions.
    29335         (KJS::AssignExprNode::streamTo): Use PrecAssignment.
    29336 
    29337 2007-10-28  Kevin Ollivier  <[email protected]>
    29338 
    29339         Define wx port and set wx port USE options.
    29340 
    29341         Reviewed by Adam Roben.
    29342 
    29343         * wtf/Platform.h:
    29344 
    29345 2007-10-28  Mark Rowe  <[email protected]>
    29346 
    29347         We don't include "config.h" in headers.
    29348 
    29349         * bindings/jni/jni_instance.h:
    29350         * kjs/regexp.h:
    29351         * wtf/TCPageMap.h:
    29352         * wtf/TCSpinLock.h:
    29353 
    29354 2007-10-28  Maciej Stachowiak  <[email protected]>
    29355 
    29356         Rubber stamped by Mark.
    29357        
    29358         - avoid using non-portable SIZE_T_MAX in favor of std::numeric_limits
    29359 
    29360         * kjs/SymbolTable.h:
    29361         (KJS::SymbolTableIndexHashTraits::emptyValue):
    29362         * kjs/function.cpp:
    29363         (KJS::ActivationImp::getOwnPropertySlot):
    29364         (KJS::ActivationImp::put):
    29365 
    29366 2007-10-28  Maciej Stachowiak  <[email protected]>
    29367 
    29368         Reviewed by Eric.
    29369        
    29370         - switch SymbolTable to be a HashMap instead of a PropertyMap for 3% SunSpider speedup
    29371 
    29372         * kjs/SymbolTable.h:
    29373         (KJS::IdentifierRepHash::hash): Special hash function for identifier reps.
    29374         (KJS::IdentifierRepHash::equal): ditto
    29375         (KJS::SymbolTableIndexHashTraits::emptyValue): Special HashTraits for the index value.
    29376         (KJS::SymbolTable): change to a typedef for a HashMap.
    29377         * kjs/function.cpp:
    29378         (KJS::ActivationImp::getOwnPropertySlot): Adjusted for new SymbolTable API.
    29379         (KJS::ActivationImp::deleteProperty): ditto
    29380         (KJS::ActivationImp::put): ditto
    29381 
    29382         * kjs/nodes.cpp:
    29383         (KJS::FunctionBodyNode::initializesymbolTable): Adjusted, since
    29384         you now have to store a UString::rep, not an identifier.
    29385 
    29386 2007-10-27  Maciej Stachowiak  <[email protected]>
    29387 
    29388         Reviewed by Oliver.
    29389        
    29390         - numerous HashTable performance improvements
    29391        
    29392         This does not quite add up to a measurable win on SunSpider, but it allows a
    29393         follow-on > 3% improvement and probably helps WebCore too.
    29394        
    29395         I made the following improvements, among others:
    29396        
    29397         - Made HashFunctions note whether it is ok to compare a real value with the equal() function
    29398         to the empty or deleted value, and used this to optimize the comparisons done in hash lookup.
    29399        
    29400         - Specialized lookup so it doesn't have to do so many extra branches and build so many extra
    29401         std::pairs for cases that don't need them. There are now four versions, one for read-only access,
    29402         two for writing, and one folded directly into add() (these all were improvments).
    29403        
    29404         - Made HashMap::get() use lookup() directly instead of find() to avoid having to build iterators.
    29405        
    29406         - Made a special constructor for iterators that knows it points to
    29407         a valid filled cell and so skips updating itself.
    29408 
    29409         - Reordered memory accesses in the various lookup functions for better code generation
    29410        
    29411         - Made simple translators avoid passing a hash code around
    29412        
    29413         - Other minor tweaks
    29414        
    29415         * wtf/HashTable.h:
    29416         (WTF::):
    29417         (WTF::HashTableConstIterator::HashTableConstIterator):
    29418         (WTF::HashTableIterator::HashTableIterator):
    29419         (WTF::IdentityHashTranslator::translate):
    29420         (WTF::HashTable::end):
    29421         (WTF::HashTable::lookup):
    29422         (WTF::HashTable::lookupForWriting):
    29423         (WTF::HashTable::makeKnownGoodIterator):
    29424         (WTF::HashTable::makeKnownGoodConstIterator):
    29425         (WTF::::lookup):
    29426         (WTF::::lookupForWriting):
    29427         (WTF::::fullLookupForWriting):
    29428         (WTF::::add):
    29429         (WTF::::addPassingHashCode):
    29430         (WTF::::reinsert):
    29431         (WTF::::find):
    29432         (WTF::::contains):
    29433         * kjs/identifier.cpp:
    29434         (WTF::):
    29435         * wtf/HashFunctions.h:
    29436         (WTF::):
    29437         * wtf/HashMap.h:
    29438         (WTF::):
    29439         (WTF::::get):
    29440         * wtf/HashSet.h:
    29441         (WTF::):
    29442         (WTF::::add):
    29443         * wtf/ListHashSet.h:
    29444         (WTF::ListHashSetTranslator::translate):
    29445 
    29446 2007-10-27  Darin Adler  <[email protected]>
    29447 
    29448         Reviewed by Eric.
    29449 
    29450         - fix ASCIICType.h for some Windows compiles
    29451 
    29452         * wtf/ASCIICType.h: Check the compiler, not the OS, since it's the
    29453         compiler/library that has the wchar_t that is just a typedef.
    29454 
    29455 2007-10-27  Kevin McCullough  <[email protected]>
    29456 
    29457         - BuildFix
    29458         - Forgot to change the build step when I changed the filename.
    29459 
    29460         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    29461 
    29462 2007-10-27  Geoffrey Garen  <[email protected]>
    29463 
    29464         Reviewed by Darin Adler.
    29465        
    29466         Fixed the rest of "ASSERTION FAILED: _hash in KJS::UString::Rep::
    29467         computedHash()"
    29468         http://bugs.webkit.org/show_bug.cgi?id=15718
    29469 
    29470         * kjs/identifier.cpp: Fixed more cases where an Identifier didn't get a
    29471         hash value. Also changed O(n) strlen to O(1) check for empty string.
    29472         (KJS::Identifier::add):
    29473 
    29474         * kjs/ustring.cpp: Changed O(n) strlens to O(1) checks for empty string.
    29475         (KJS::UString::UString):
    29476         (KJS::UString::operator=):
    29477 
    29478 2007-10-27  Darin Adler  <[email protected]>
    29479 
    29480         Reviewed by Eric.
    29481 
    29482         - fix pow on Windows
    29483 
    29484         * wtf/MathExtras.h: (wtf_pow): Add a special case for MSVC, which has
    29485         a "pow" function that does not properly handle the case where arg1 is
    29486         NaN and arg2 is 0.
    29487 
    29488         * kjs/math_object.cpp: (MathFuncImp::callAsFunction): Don't explicity
    29489         specify "::pow" -- just "pow" is fine.
    29490 
    29491 2007-10-27  Darin Adler  <[email protected]>
    29492 
    29493         Reviewed by Maciej.
    29494 
    29495         - http://bugs.webkit.org/show_bug.cgi?id=15711
    29496           force JSImmediate to be inlined for roughly 1.2% SunSpider speedup
    29497 
    29498         * kjs/JSImmediate.h: Put ALWAYS_INLINE on everything.
    29499 
    29500         * kjs/object.h: Removed redundant includes.
    29501         * kjs/value.h: Ditto.
    29502 
    29503 2007-10-27  Maciej Stachowiak  <[email protected]>
    29504 
    29505         Reviewed by Mark.
    29506        
    29507         - fixed "ASSERTION FAILED: _hash in KJS::UString::Rep::computedHash()"
    29508         http://bugs.webkit.org/show_bug.cgi?id=15718
    29509 
    29510         * kjs/identifier.cpp:
    29511         (KJS::Identifier::addSlowCase): Ensure that empty Identifiers have a hash computed,
    29512         now that we count on all Identifiers already having one.
    29513 
    29514 2007-10-27  Mark Rowe  <[email protected]>
    29515 
    29516         Silence a warning.
    29517 
    29518         * kjs/SymbolTable.h:
    29519 
    29520 2007-10-27  Mark Rowe  <[email protected]>
    29521 
    29522         Gtk build fix.
    29523 
    29524         * kjs/function.h:
    29525 
    29526 2007-10-26  Kevin McCullough  <[email protected]>
    29527 
    29528        Rubber stamp by Adam.
    29529 
    29530         - Renamed JSStringRefCOM to JSStringRefBSTR since it he only thing the
    29531         files contain are functions that operate on BSTRs.
    29532 
    29533         * API/JSStringRefBSTR.cpp: Copied from API/JSStringRefCOM.cpp.
    29534         * API/JSStringRefBSTR.h: Copied from API/JSStringRefCOM.h.
    29535         * API/JSStringRefCOM.cpp: Removed.
    29536         * API/JSStringRefCOM.h: Removed.
    29537         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    29538 
    29539 2007-10-26  Kevin McCullough  <[email protected]>
    29540 
    29541         Reviewed by Adam.
    29542 
    29543         - Made JSStringCreateWithBSTR capable of handling null BSTRs.
    29544 
    29545         * API/JSStringRefCOM.cpp:
    29546         (JSStringCreateWithBSTR):
    29547 
    29548 2007-10-26  Sam Weinig  <[email protected]>
    29549 
    29550         Windows build fix.
    29551 
    29552         * kjs/SymbolTable.h: Add header gaurd.
    29553         * kjs/nodes.h: #include "SymbolTable.h"
    29554 
    29555 2007-10-26  Geoffrey Garen  <[email protected]>
    29556 
    29557         Suggested by Anders Carlsson.
    29558        
    29559         Fixed tyop.
    29560 
    29561         * kjs/function.cpp:
    29562         (KJS::ActivationImp::getOwnPropertySlot):
    29563 
    29564 2007-10-26  Geoffrey Garen  <[email protected]>
    29565 
    29566         Suggested by Darin Adler.
    29567        
    29568         Use computedHash(), which is safer than just directly accessing _hash.
    29569 
    29570         * kjs/lookup.cpp:
    29571         (KJS::Lookup::findEntry):
    29572         (KJS::Lookup::find):
    29573 
    29574 2007-10-26  Geoffrey Garen  <[email protected]>
    29575 
    29576         Build fix: svn add SymbolTable.h
    29577 
    29578         * kjs/SymbolTable.h: Added.
    29579         (KJS::SymbolTable::set):
    29580         (KJS::SymbolTable::get):
    29581 
    29582 2007-10-26  Geoffrey Garen  <[email protected]>
    29583 
    29584         Build fix: export SymbolTable.h to WebCore.
    29585 
    29586         * JavaScriptCore.xcodeproj/project.pbxproj:
    29587 
    29588 2007-10-26  Geoffrey Garen  <[email protected]>
    29589 
    29590         Comment tweak suggested by Maciej.
    29591 
    29592         * kjs/function.cpp:
    29593         (KJS::ActivationImp::getOwnPropertySlot):
    29594 
    29595 2007-10-26  Geoffrey Garen  <[email protected]>
    29596 
    29597         Reviewed by Maciej Stachowiak.
    29598        
    29599         Tweaked property maps to remove 2 branches. 2.5% speedup on SunSpider.
    29600 
    29601         * kjs/property_map.cpp: Use a special no branch accessor to the UString's
    29602         hash value. Also, return immediately instead of branching to the end
    29603         of the loop if the value is not found.
    29604         (KJS::PropertyMap::get):
    29605         (KJS::PropertyMap::getLocation):
    29606         (KJS::PropertyMap::put):
    29607         (KJS::PropertyMap::insert):
    29608         (KJS::PropertyMap::remove):
    29609         (KJS::PropertyMap::checkConsistency):
    29610 
    29611         * kjs/ustring.h:
    29612         (KJS::UString::Rep::computedHash): Special no branch accessor to the
    29613         UString's hash value. Used when the caller knows that the hash value
    29614         has already been computed. (For example, if the caller got the UString
    29615         from an Identifier.)
    29616 
    29617 2007-10-26  Geoffrey Garen  <[email protected]>
    29618 
    29619         Reviewed by Maciej Stachowiak.
    29620        
    29621         Switched ActivationImp to using a symbol table. For now, though, all
    29622         clients take the slow path.
    29623        
    29624         Net .6% speedup on SunSpider.
    29625        
    29626         Slowdowns:
    29627             - ActivationImp now mallocs in its constructor
    29628             - Local variable hits use an extra level of indirection to retrieve
    29629             data
    29630             - Local variable misses do two lookups
    29631 
    29632         Speedups:
    29633             - Fast initialization of local variables upon function entry
    29634 
    29635         * JavaScriptCore.xcodeproj/project.pbxproj: Added SymbolTable.h
    29636        
    29637         * kjs/function.cpp:
    29638         (KJS::ActivationImp::ActivationImp): Malloc a private structure to hold
    29639         data that won't fit in a JSCell.
    29640         (KJS::ActivationImp::argumentsGetter): Use slow symbol table path for
    29641         lookup.
    29642         (KJS::ActivationImp::getOwnPropertySlot): ditto
    29643         (KJS::ActivationImp::deleteProperty): ditto
    29644         (KJS::ActivationImp::put): ditto
    29645         (KJS::ActivationImp::createArgumentsObject): ditto
    29646 
    29647         (KJS::ActivationImp::mark): Call JSObject::mark first so that one of
    29648         our properties doesn't try to recursively mark us. (This caused a crash
    29649         in earlier testing. Not sure why we haven't run into it before.)
    29650 
    29651         * kjs/nodes.cpp: Functions now build a symbol table the first time
    29652         they're called.
    29653         (KJS::VarDeclNode::evaluate):
    29654         (KJS::FunctionBodyNode::FunctionBodyNode):
    29655         (KJS::FunctionBodyNode::initializeSymbolTable):
    29656         (KJS::FunctionBodyNode::processDeclarations):
    29657         (KJS::FunctionBodyNode::processDeclarationsForFunctionCode):
    29658         (KJS::FunctionBodyNode::processDeclarationsForProgramCode):
    29659 
    29660         * kjs/nodes.h:
    29661         (KJS::FunctionBodyNode::symbolTable):
    29662 
    29663         * wtf/Forward.h: Added Vector.
    29664 
    29665 2007-10-26  Kevin McCullough  <[email protected]>
    29666 
    29667         - Corrected function name mistake in this changelog.
    29668 
    29669 2007-10-26  Kevin McCullough  <[email protected]>
    29670         Reviewed by Sam and Steve.
    29671 
    29672         - Added convenience methods for converting between BSTR and JSStringRefs
    29673 
    29674         * API/JSStringRefCOM.cpp: Added.
    29675         (JSStringCreateWithBSTR):
    29676         (JSStringCopyBSTR):
    29677         * API/JSStringRefCOM.h: Added.
    29678         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    29679 
    29680 2007-10-26  Mark Rowe  <[email protected]>
    29681 
    29682         Windows build fix.
    29683 
    29684         * kjs/collector.cpp:
    29685         (KJS::Collector::collect):
    29686 
    29687 2007-10-26  Oliver Hunt  <[email protected]>
    29688 
    29689         Reviewed by Maciej.
    29690 
    29691         Make the JSC GC use a separate heap for JSNumbers to get a 0.7-1.4% progression in SunSpider.
    29692 
    29693         * kjs/CollectorHeapIntrospector.cpp:
    29694         (KJS::CollectorHeapIntrospector::init):
    29695         (KJS::CollectorHeapIntrospector::enumerate):
    29696         * kjs/CollectorHeapIntrospector.h:
    29697         * kjs/collector.cpp:
    29698         (KJS::Collector::recordExtraCost):
    29699         (KJS::Collector::heapAllocate):
    29700         (KJS::Collector::allocate):
    29701         (KJS::Collector::allocateNumber):
    29702         (KJS::Collector::registerThread):
    29703         (KJS::Collector::markStackObjectsConservatively):
    29704         (KJS::Collector::markMainThreadOnlyObjects):
    29705         (KJS::Collector::sweep):
    29706         (KJS::Collector::collect):
    29707         * kjs/collector.h:
    29708         * kjs/internal.h:
    29709         (KJS::NumberImp::operator new):
    29710           Force numbers to be allocated in the secondary heap.
    29711 
    29712 2007-10-26  Maciej Stachowiak  <[email protected]>
    29713 
    29714         Reviewed by Oliver.
    29715        
    29716         - encourage GCC a little harder to inline a few hot functions for 1.5% improvement on SunSpider.
    29717 
    29718         * kjs/value.h:
    29719         (KJS::JSValue::getUInt32):
    29720         (KJS::JSValue::getTruncatedInt32):
    29721         (KJS::JSValue::toNumber):
    29722         * wtf/PassRefPtr.h:
    29723         (WTF::PassRefPtr::~PassRefPtr):
    29724         * wtf/RefPtr.h:
    29725         (WTF::RefPtr::operator->):
    29726 
    29727 2007-10-26  Mark Rowe  <[email protected]>
    29728 
    29729         Gtk build fix.
    29730 
    29731         * kjs/ExecState.h:
    29732 
    29733 2007-10-26  Maciej Stachowiak  <[email protected]>
    29734 
    29735         Reviewed by Mark.
    29736 
    29737         - Merge Context class fully into ExecState, since they are always created and used together.
    29738 
    29739         No measurable performance impact but this is a useful cleanup.
    29740 
    29741         * JavaScriptCore.pri:
    29742         * kjs/ExecState.cpp:
    29743         (KJS::ExecState::ExecState):
    29744         (KJS::ExecState::~ExecState):
    29745         (KJS::ExecState::mark):
    29746         (KJS::ExecState::lexicalInterpreter):
    29747         * kjs/ExecState.h:
    29748         (KJS::ExecState::dynamicInterpreter):
    29749         (KJS::ExecState::setException):
    29750         (KJS::ExecState::clearException):
    29751         (KJS::ExecState::exception):
    29752         (KJS::ExecState::exceptionSlot):
    29753         (KJS::ExecState::hadException):
    29754         (KJS::ExecState::scopeChain):
    29755         (KJS::ExecState::callingExecState):
    29756         (KJS::ExecState::propertyNames):
    29757         * kjs/collector.cpp:
    29758         (KJS::Collector::reportOutOfMemoryToAllInterpreters):
    29759         * kjs/function.cpp:
    29760         (KJS::FunctionImp::callAsFunction):
    29761         (KJS::FunctionImp::argumentsGetter):
    29762         (KJS::FunctionImp::callerGetter):
    29763         (KJS::GlobalFuncImp::callAsFunction):
    29764         * kjs/interpreter.cpp:
    29765         (KJS::Interpreter::Interpreter):
    29766         (KJS::Interpreter::init):
    29767         (KJS::Interpreter::evaluate):
    29768         (KJS::Interpreter::mark):
    29769         * kjs/interpreter.h:
    29770         (KJS::Interpreter::setCurrentExec):
    29771         (KJS::Interpreter::currentExec):
    29772         * kjs/nodes.cpp:
    29773         (KJS::currentSourceId):
    29774         (KJS::currentSourceURL):
    29775         (KJS::ThisNode::evaluate):
    29776         (KJS::ResolveNode::evaluate):
    29777         (KJS::FunctionCallResolveNode::evaluate):
    29778         (KJS::PostfixResolveNode::evaluate):
    29779         (KJS::DeleteResolveNode::evaluate):
    29780         (KJS::TypeOfResolveNode::evaluate):
    29781         (KJS::PrefixResolveNode::evaluate):
    29782         (KJS::AssignResolveNode::evaluate):
    29783         (KJS::VarDeclNode::evaluate):
    29784         (KJS::DoWhileNode::execute):
    29785         (KJS::WhileNode::execute):
    29786         (KJS::ForNode::execute):
    29787         (KJS::ForInNode::execute):
    29788         (KJS::ContinueNode::execute):
    29789         (KJS::BreakNode::execute):
    29790         (KJS::ReturnNode::execute):
    29791         (KJS::WithNode::execute):
    29792         (KJS::SwitchNode::execute):
    29793         (KJS::LabelNode::execute):
    29794         (KJS::TryNode::execute):
    29795         (KJS::FunctionBodyNode::processDeclarationsFunctionCode):
    29796         (KJS::FunctionBodyNode::processDeclarationsProgramCode):
    29797         (KJS::FunctionBodyNode::processDeclarations):
    29798         (KJS::FuncDeclNode::makeFunction):
    29799         (KJS::FuncExprNode::evaluate):
    29800 
    29801 2007-10-26  Mark Rowe  <[email protected]>
    29802 
    29803         Windows build fix.
    29804 
    29805         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    29806 
    29807 2007-10-26  Mark Rowe  <[email protected]>
    29808 
    29809         Gtk build fix.
    29810 
    29811         * JavaScriptCore.pri:
    29812         * kjs/ExecState.cpp:
    29813 
    29814 2007-10-26  Maciej Stachowiak  <[email protected]>
    29815 
    29816         Reviewed by Oliver.
    29817        
    29818         - moved Context class into ExecState.{h,cpp} in preparation for merging
    29819         ExecState and Context classes.
    29820 
    29821         * kjs/ExecState.h: Moved CodeType enum and Context class here in
    29822         preparation for merging ExecState and Context.
    29823         * kjs/ExecState.cpp: Moved Context class here from Context.cpp.
    29824         (KJS::Context::Context):
    29825         (KJS::Context::~Context):
    29826         (KJS::Context::mark):
    29827         * kjs/context.h: Removed.
    29828         * kjs/Context.cpp: Removed.
    29829         * kjs/function.h: Removed CodeType enum.
    29830         * kjs/LabelStack.h: Added. Pulled LabelStack class out of internal.h.
    29831         * kjs/internal.h: Removed LabelStack.
    29832         * JavaScriptCore.xcodeproj/project.pbxproj: Added new file, removed ones that are gone.
    29833         * kjs/collector.cpp: Fixed includes.
    29834         * kjs/function.cpp: ditto
    29835         * kjs/internal.cpp: ditto
    29836         * kjs/interpreter.cpp: ditto
    29837         * kjs/lookup.h: ditto
    29838         * kjs/nodes.cpp: ditto
    29839 
    29840 2007-10-26  Mark Rowe  <[email protected]>
    29841 
    29842         Windows build fix.
    29843 
    29844         * kjs/string_object.cpp:
    29845         (KJS::StringObjectFuncImp::callAsFunction):
    29846 
    29847 2007-10-25  Darin Adler  <[email protected]>
    29848 
    29849         Reviewed by Maciej.
    29850 
    29851         - http://bugs.webkit.org/show_bug.cgi?id=15703
    29852           fix numeric functions -- improve correctness and speed
    29853 
    29854         Gives about 1% gain on SunSpider.
    29855 
    29856         * kjs/value.h: Added toIntegerPreserveNan, removed toUInt16.
    29857         (KJS::JSValue::toInt32): Changed to call getTruncatedInt32 in a way that works
    29858         with both immediate and number values.
    29859         (KJS::JSValue::toUInt32): Ditto.
    29860         * kjs/value.cpp:
    29861         (KJS::JSValue::toInteger): Moved the logic from roundValue here, with a couple
    29862         differences. One is that it now correctly returns 0 for NaN, and another is that
    29863         there's no special case for 0 or infinity, since the general case already handles
    29864         those correctly.
    29865         (KJS::JSValue::toIntegerPreserveNaN): Added. Like toInteger, but without the
    29866         check for NaN.
    29867         (KJS::JSValue::toInt32SlowCase): Call toNumber instead of roundValue. The
    29868         truncation done by the typecast already does the necessary truncation that
    29869         roundValue was doing.
    29870         (KJS::JSValue::toUInt32SlowCase): Ditto.
    29871         (KJS::JSValue::toUInt16): Removed.
    29872 
    29873         * kjs/internal.h: Removed roundValue.
    29874         * kjs/internal.cpp: Ditto.
    29875 
    29876         * kjs/array_object.cpp: (KJS::ArrayProtoFunc::callAsFunction): Remove unneeded
    29877         code to handle NaN in Array.slice; toInteger now never returns NaN as specified.
    29878 
    29879         * kjs/date_object.cpp:
    29880         (KJS::fillStructuresUsingTimeArgs): Replaced call to roundValue with a call to
    29881         toNumber as specified.
    29882         (KJS::DateProtoFunc::callAsFunction): In SetTime case, replaced call to roundValue
    29883         with a call to toNumber and timeClip as specified.
    29884         (KJS::DateObjectImp::construct): Removed unnecessary checks of numArgs in cases
    29885         where the default behavior of toInt32 (returning 0) was already correct. Replaced
    29886         call to roundValue with a call to toNumber as specified.
    29887         (KJS::DateObjectFuncImp::callAsFunction): Ditto.
    29888 
    29889         * kjs/math_object.cpp: (MathFuncImp::callAsFunction): Removed unnecessary special
    29890         cases for the pow function that the library already handles correctly.
    29891 
    29892         * kjs/number_object.cpp: (NumberProtoFunc::callAsFunction): Changed ToString to
    29893         call toIntegerPreserveNaN, so we can continue to handle the NaN case differently.
    29894         The real toInteger now returns 0 for NaN. Took out unneeded special case in
    29895         ToFixed for undefined; was only needed because our toInteger was wrong. Same
    29896         thing in ToExponential. Changed ToPrecision to call toIntegerPreserveNaN.
    29897 
    29898         * kjs/string_object.cpp:
    29899         (KJS::StringProtoFunc::callAsFunction): Took out CharAt and CharCodeAt special
    29900         cases for undefined that were only needed because toInteger was wrong. Same in
    29901         IndexOf, and was able to remove some special cases. In LastIndexOf, used
    29902         toIntegerPreserveNaN, but was able to remove some special cases there too.
    29903         Changed Substr implementation to preserve correct behavior with the change
    29904         to toInteger and match the specification. Also made sure we weren't converting
    29905         an out of range double to an int.
    29906         (KJS::StringObjectFuncImp::callAsFunction): Changed constructor to just use
    29907         toUInt32, because truncating toUInt32 to 16 bits is the same thing and there's
    29908         no reason to have toUInt16 as a second, less-optimized function that's only
    29909         called at this one call site.
    29910 
    29911         * wtf/MathExtras.h: Added trunc function for Windows.
    29912 
    29913 2007-10-25  Geoffrey Garen  <[email protected]>
    29914 
    29915         Reviewed by Maciej Stachowiak.
    29916        
    29917         Tweaked the inner hashtable lookup loop to remove a branch in the "not
    29918         found" case. .5% speedup on SunSpider.
    29919 
    29920         * JavaScriptCore.xcodeproj/project.pbxproj:
    29921         * wtf/HashTable.h:
    29922         (WTF::::lookup):
    29923 
    29924 2007-10-25  Maciej Stachowiak  <[email protected]>
    29925 
    29926         Reviewed by Oliver.
    29927 
    29928         - fold together toPrimitive() and toNumber() conversions for 0.5% gain on SunSpider
    29929 
    29930         * kjs/nodes.cpp:
    29931         (KJS::SubNode::evaluate): Subtract directly, since toPrimitive() is not
    29932         adding any value over toNumber() here.
    29933         (KJS::valueForReadModifyAssignment): Ditto.
    29934         (KJS::lessThan): Use new getPrimitiveNumber() method to avoid some virtual calls
    29935         and branches.
    29936         (KJS::lessThanEq): Ditto.
    29937         * JavaScriptCore.exp: Export new functions as needed.
    29938         * kjs/value.h:
    29939         (KJS::JSValue::toPrimitive): Fixed formatting.
    29940         (KJS::JSValue::getPrimitiveNumber): New method - this simultaneously converts
    29941         to number and tells you whether a toPrimitive() conversion with a Number hint
    29942         would have given a string.
    29943         * kjs/internal.cpp:
    29944         (KJS::StringImp::getPrimitiveNumber): Implemented.
    29945         (KJS::NumberImp::getPrimitiveNumber): ditto
    29946         (KJS::GetterSetterImp::getPrimitiveNumber): ditto
    29947         (KJS::StringImp::toPrimitive): Fixed formatting.
    29948         (KJS::NumberImp::toPrimitive): ditto
    29949         (KJS::GetterSetterImp::toPrimitive): ditto
    29950         * kjs/internal.h:
    29951         * kjs/object.cpp:
    29952         (KJS::JSObject::getPrimitiveNumber): Implemented.
    29953         * kjs/object.h:
    29954 
    29955 2007-10-25  Sam Weinig  <[email protected]>
    29956 
    29957         Reviewed by Adam Roben.
    29958 
    29959         Remove JSStringRefCFHack from windows as it is no longer needed.
    29960 
    29961         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    29962 
    29963 2007-10-25  Geoffrey Garen  <[email protected]>
    29964 
    29965         Reviewed by Oliver Hunt.
    29966        
    29967         Rolled out my last patch. It turns out that I needed 2 words, not 1,
    29968         so it didn't help.
    29969 
    29970 2007-10-25  Geoffrey Garen  <[email protected]>
    29971 
    29972         Reviewed by Oliver Hunt.
    29973        
    29974         Fixed http://bugs.webkit.org/show_bug.cgi?id=15694
    29975         Shrink the size of an activation object by 1 word
    29976        
    29977         This is in preparation for adding a symbol table to the activation
    29978         object.
    29979        
    29980         The basic strategy here is to rely on the mutual exclusion between
    29981         the arguments object pointer and the function pointer (you only need
    29982         the latter in order to create the former), and store them in the same
    29983         place. The LazyArgumentsObject class encapsulates this strategy.
    29984        
    29985         Also inlined the ArgumentsImp constructor, for good measure.
    29986        
    29987         SunSpider reports no regression. Regression tests pass.
    29988 
    29989         * JavaScriptCore.xcodeproj/project.pbxproj:
    29990         * kjs/Context.cpp:
    29991         (KJS::Context::~Context):
    29992         * kjs/function.cpp:
    29993         (KJS::ActivationImp::LazyArgumentsObject::createArgumentsObject):
    29994         (KJS::ActivationImp::LazyArgumentsObject::mark):
    29995         (KJS::ActivationImp::argumentsGetter):
    29996         (KJS::ActivationImp::mark):
    29997         * kjs/function.h:
    29998         (KJS::ActivationImp::LazyArgumentsObject::LazyArgumentsObject):
    29999         (KJS::ActivationImp::LazyArgumentsObject::getOrCreate):
    30000         (KJS::ActivationImp::LazyArgumentsObject::resetArguments):
    30001         (KJS::ActivationImp::LazyArgumentsObject::setArgumentsObject):
    30002         (KJS::ActivationImp::LazyArgumentsObject::argumentsObject):
    30003         (KJS::ActivationImp::LazyArgumentsObject::setFunction):
    30004         (KJS::ActivationImp::LazyArgumentsObject::function):
    30005         (KJS::ActivationImp::LazyArgumentsObject::createdArgumentsObject):
    30006         (KJS::ActivationImp::LazyArgumentsObject::):
    30007         (KJS::ActivationImp::ActivationImp::ActivationImp):
    30008         (KJS::ActivationImp::resetArguments):
    30009 
    30010 2007-10-25  Adam Roben  <[email protected]>
    30011 
    30012         Change JavaScriptCore.vcproj to use DerivedSources.make
    30013 
    30014         We were trying to emulate the logic of make in
    30015         build-generated-files.sh, but we got it wrong. We now use a
    30016         build-generated-files very much like the one that WebCore uses to
    30017         invoke make.
    30018 
    30019         We also now only have a Debug configuration of dftables which we build
    30020         even when doing a Release build of JavaScriptCore. dftables also no
    30021         longer has the "_debug" name suffix.
    30022 
    30023         Changes mostly made by Darin, reviewed by me.
    30024 
    30025         * DerivedSources.make: Add a variable to set the extension used for
    30026         the dftables executable.
    30027         * JavaScriptCore.vcproj/JavaScriptCore.sln: Updated to use Debug
    30028         dftables in Release configurations.
    30029         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Ditto.
    30030         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    30031            - Updated include path to point to the new location of the derived
    30032              sources.
    30033            - Modified pre-build event to pass the right arguments to
    30034              build-generated-files.sh and not call dftables directly.
    30035            - Added the derived source files to the project.
    30036            - Removed grammarWrapper.cpp, which isn't needed now that we're
    30037              compiling grammar.cpp directly.
    30038         * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
    30039         Slightly modified from the WebCore version.
    30040         * JavaScriptCore.vcproj/JavaScriptCore/grammarWrapper.cpp: Removed.
    30041         * JavaScriptCore.vcproj/dftables/dftables.vcproj:
    30042             - Changed the output location to match Mac.
    30043             - Removed the Release configuration.
    30044             - Removed the _debug suffix.
    30045 
    30046 2007-10-25  Geoffrey Garen  <[email protected]>
    30047 
    30048         Reviewed by Eric Seidel.
    30049        
    30050         Slightly elaborated the differences between declaration procesing in
    30051         Function Code and Program Code.
    30052        
    30053         .3% speedup on SunSpider.
    30054 
    30055         * kjs/nodes.cpp:
    30056         (KJS::FunctionBodyNode::processDeclarationsFunctionCode):
    30057         (KJS::FunctionBodyNode::processDeclarationsProgramCode): Store a
    30058         minimum set of attributes instead of recomputing all the time. Also,
    30059         ignore m_parameters, since programs don't have arguments.
    30060 
    30061 2007-10-25  Eric Seidel  <[email protected]>
    30062 
    30063         Reviewed by Maciej.
    30064        
    30065         More preparation work before adding long-running mode to testkjs.
    30066 
    30067         * kjs/testkjs.cpp:
    30068         (TestFunctionImp::callAsFunction):
    30069         (prettyPrintScript):
    30070         (runWithScripts):
    30071         (parseArguments):
    30072         (kjsmain):
    30073         (fillBufferWithContentsOfFile):
    30074 
    30075 2007-10-25  Eric Seidel  <[email protected]>
    30076 
    30077         Reviewed by Maciej.
    30078        
    30079         Bring testkjs code out of the dark ages in preparation for more
    30080         radical improvements (like long-running testing support!)
    30081 
    30082         * kjs/testkjs.cpp:
    30083         (TestFunctionImp::callAsFunction):
    30084         (setupInterpreter):
    30085         (doIt):
    30086         (fillBufferWithContentsOfFile):
    30087 
    30088 2007-10-25  Geoffrey Garen  <[email protected]>
    30089 
    30090         Reviewed by Maciej Stachowiak.
    30091        
    30092         Make a fast path for declaration processing inside Function Code.
    30093        
    30094         Lifted declaration processing code up from individual declaration nodes
    30095         and into processDeclarations.
    30096        
    30097         Broke out processDeclarations into two cases, depending on the type of
    30098         code. This eliminates 2 branches, and facilitates more radical
    30099         divergeance in the future.
    30100        
    30101         2.5% SunSpider speedup.
    30102 
    30103         * JavaScriptCore.xcodeproj/project.pbxproj:
    30104         * kjs/nodes.cpp:
    30105         (KJS::FunctionBodyNode::initializeDeclarationStacks):
    30106         (KJS::FunctionBodyNode::processDeclarationsFunctionCode):
    30107         (KJS::FunctionBodyNode::processDeclarationsProgramCode):
    30108         (KJS::FunctionBodyNode::execute):
    30109         (KJS::FuncDeclNode::makeFunction):
    30110         * kjs/nodes.h:
    30111 
    30112 2007-10-25  Maciej Stachowiak  <[email protected]>
    30113 
    30114         Reviewed by Adam.
    30115        
    30116         - add header includes needed on platforms that don't use AllInOneFile.cpp
    30117 
    30118         * API/JSCallbackObject.cpp:
    30119         * kjs/Context.cpp:
    30120         * kjs/ExecState.cpp:
    30121         * kjs/array_instance.cpp:
    30122         * kjs/function_object.cpp:
    30123         * kjs/interpreter.cpp:
    30124         * kjs/nodes.cpp:
    30125 
    30126 2007-10-25  Eric Seidel  <[email protected]>
    30127 
    30128         Reviewed by Geoff.
    30129 
    30130         * JavaScriptCore.xcodeproj/project.pbxproj: re-mark JSGlobalObject.h as private
    30131 
    30132 2007-10-25  Geoffrey Garen  <[email protected]>
    30133 
    30134         Reviewed by Maciej Stachowiak.
    30135        
    30136         Fixed http://bugs.webkit.org/show_bug.cgi?id=15683
    30137         Re-order declaration initialization to avoid calling hasProperty inside
    30138         VarDeclNode::processDeclaration
    30139        
    30140         .7% speedup on SunSpider.
    30141 
    30142         * kjs/function.h:
    30143         * kjs/function.cpp: Merged parameter processing into FunctionBodyNode's
    30144         other processing of declared symbols, so the order of execution could
    30145         change.
    30146 
    30147         * kjs/nodes.cpp:
    30148         (KJS::VarDeclNode::getDeclarations): Added special case for the
    30149         "arguments" property name, explained in the comment.
    30150 
    30151         (KJS::VarDeclNode::processDeclaration): Removed call to hasProperty
    30152         in the case of function code, since we know the declared symbol
    30153         management will resolve conflicts between symbols. Yay!
    30154 
    30155         (KJS::VarDeclListNode::getDeclarations): Now that VarDeclNode's
    30156         implementation of getDeclarations is non-trivial, we can't take a
    30157         short-cut here any longer -- we need to put the VarDecl node on the
    30158         stack so it gets processed normally.
    30159 
    30160         (KJS::FunctionBodyNode::processDeclarations): Changed the order of
    30161         processing to enforce mutual exclusion rules.
    30162 
    30163         * kjs/nodes.h:
    30164         (KJS::DeclarationStacks::DeclarationStacks): Structure includes an
    30165         ExecState now, for fast access to the "arguments" property name.
    30166 
    30167 2007-10-24  Eric Seidel  <[email protected]>
    30168 
    30169         Reviewed by Maciej.
    30170        
    30171         Add a JSGlobalObject class and remove the InterpreterMap
    30172         http://bugs.webkit.org/show_bug.cgi?id=15681
    30173        
    30174         This required making JSCallbackObject a template class to allow for
    30175         JSGlobalObjects with JSCallbackObject functionality.
    30176        
    30177         SunSpider claims this was a 0.5% speedup.
    30178 
    30179         * API/JSCallbackObject.cpp:
    30180         * API/JSCallbackObject.h:
    30181         * API/JSCallbackObjectFunctions.h: Copied from API/JSCallbackObject.cpp.
    30182         (KJS::::JSCallbackObject):
    30183         (KJS::::init):
    30184         (KJS::::~JSCallbackObject):
    30185         (KJS::::initializeIfNeeded):
    30186         (KJS::::className):
    30187         (KJS::::getOwnPropertySlot):
    30188         (KJS::::put):
    30189         (KJS::::deleteProperty):
    30190         (KJS::::implementsConstruct):
    30191         (KJS::::construct):
    30192         (KJS::::implementsHasInstance):
    30193         (KJS::::hasInstance):
    30194         (KJS::::implementsCall):
    30195         (KJS::::callAsFunction):
    30196         (KJS::::getPropertyNames):
    30197         (KJS::::toNumber):
    30198         (KJS::::toString):
    30199         (KJS::::setPrivate):
    30200         (KJS::::getPrivate):
    30201         (KJS::::inherits):
    30202         (KJS::::cachedValueGetter):
    30203         (KJS::::staticValueGetter):
    30204         (KJS::::staticFunctionGetter):
    30205         (KJS::::callbackGetter):
    30206         * API/JSClassRef.cpp:
    30207         (OpaqueJSClass::prototype):
    30208         * API/JSContextRef.cpp:
    30209         (JSGlobalContextCreate):
    30210         * API/JSObjectRef.cpp:
    30211         (JSObjectMake):
    30212         (JSObjectGetPrivate):
    30213         (JSObjectSetPrivate):
    30214         * API/JSValueRef.cpp:
    30215         (JSValueIsObjectOfClass):
    30216         * JavaScriptCore.exp:
    30217         * JavaScriptCore.xcodeproj/project.pbxproj:
    30218         * bindings/c/c_utility.cpp:
    30219         (KJS::Bindings::convertValueToNPVariant):
    30220         * bindings/jni/jni_jsobject.cpp:
    30221         * bindings/objc/objc_utility.mm:
    30222         (KJS::Bindings::convertValueToObjcValue):
    30223         * kjs/Context.cpp:
    30224         (KJS::Context::Context):
    30225         * kjs/ExecState.cpp:
    30226         (KJS::ExecState::lexicalInterpreter):
    30227         * kjs/JSGlobalObject.h: Added.
    30228         (KJS::JSGlobalObject::JSGlobalObject):
    30229         (KJS::JSGlobalObject::isGlobalObject):
    30230         (KJS::JSGlobalObject::interpreter):
    30231         (KJS::JSGlobalObject::setInterpreter):
    30232         * kjs/array_instance.cpp:
    30233         * kjs/context.h:
    30234         * kjs/function.cpp:
    30235         (KJS::FunctionImp::callAsFunction):
    30236         (KJS::GlobalFuncImp::callAsFunction):
    30237         * kjs/interpreter.cpp:
    30238         (KJS::Interpreter::Interpreter):
    30239         (KJS::Interpreter::init):
    30240         (KJS::Interpreter::~Interpreter):
    30241         (KJS::Interpreter::globalObject):
    30242         (KJS::Interpreter::initGlobalObject):
    30243         (KJS::Interpreter::evaluate):
    30244         * kjs/interpreter.h:
    30245         * kjs/lookup.h:
    30246         (KJS::cacheGlobalObject):
    30247         * kjs/object.h:
    30248         (KJS::JSObject::isGlobalObject):
    30249         * kjs/testkjs.cpp:
    30250 
    30251 2007-10-24  Eric Seidel  <[email protected]>
    30252 
    30253         Build fix for Gtk, no review.
    30254 
    30255         * kjs/collector.cpp: #include "context.h"
    30256 
    30257 2007-10-24  Eric Seidel  <[email protected]>
    30258 
    30259         Reviewed by Maciej.
    30260        
    30261         Stop checking isOutOfMemory after every allocation, instead let the collector
    30262         notify all ExecStates if we ever hit this rare condition.
    30263        
    30264         SunSpider claims this was a 2.2% speedup.
    30265 
    30266         * kjs/collector.cpp:
    30267         (KJS::Collector::collect):
    30268         (KJS::Collector::reportOutOfMemoryToAllInterpreters):
    30269         * kjs/collector.h:
    30270         * kjs/nodes.cpp:
    30271         (KJS::TryNode::execute):
    30272 
    30273 2007-10-24  Mark Rowe  <[email protected]>
    30274 
    30275         Gtk build fix.
    30276 
    30277         * kjs/identifier.h:  Remove extra qualification.
    30278 
    30279 2007-10-24  Geoffrey Garen  <[email protected]>
    30280 
    30281         Reviewed by Sam Weinig.
    30282        
    30283         Disable ALWAYS_INLINE in debug builds, since it drives the debugger
    30284         crazy.
    30285 
    30286         * wtf/AlwaysInline.h:
    30287 
    30288 2007-10-24  Geoffrey Garen  <[email protected]>
    30289 
    30290         Reviewed by Sam Weinig.
    30291        
    30292         Inlined the fast path for creating an Identifier from an Identifier.
    30293        
    30294         This is a .4% speedup on SunSpider overall, but as big as a 2.5%
    30295         speedup on certain individual tests. 65% of the Identifiers creating
    30296         by SunSpider are already Identifiers.
    30297        
    30298         (The main reason I'm making this change is that it resolves a large
    30299         regression in a patch I haven't checked in yet.)
    30300 
    30301         * JavaScriptCore.exp:
    30302         * kjs/identifier.cpp:
    30303         (KJS::Identifier::addSlowCase):
    30304         * kjs/identifier.h:
    30305         (KJS::Identifier::Identifier::add):
    30306 
    30307 2007-10-24  Lars Knoll  <[email protected]>
    30308 
    30309         Reviewed by Simon.
    30310 
    30311         some changes to the way JS values are converted to Qt values in the script bindings. Added support for converting JS arrays into QStringList's.
    30312 
    30313         * bindings/qt/qt_instance.cpp:
    30314         (KJS::Bindings::QtInstance::invokeMethod):
    30315         * bindings/qt/qt_runtime.cpp:
    30316         (KJS::Bindings::convertValueToQVariant):
    30317         (KJS::Bindings::QtField::setValueToInstance):
    30318 
    30319 2007-10-24  Oliver Hunt  <[email protected]>
    30320 
    30321         Reviewed by Darin.
    30322 
    30323         Remove old relation method, replace with specialised LessThan and lessThenEq functions for a 0.5-0.6% improvement in SunSpider
    30324 
    30325         * kjs/nodes.cpp:
    30326         (KJS::lessThan):
    30327         (KJS::lessThanEq):
    30328         (KJS::LessNode::evaluate):
    30329         (KJS::GreaterNode::evaluate):
    30330         (KJS::LessEqNode::evaluate):
    30331         (KJS::GreaterEqNode::evaluate):
    30332         * kjs/operations.cpp:
    30333         * kjs/operations.h:
    30334 
    30335 2007-10-24  Eric Seidel  <[email protected]>
    30336 
    30337         Reviewed by darin.
    30338 
    30339         * kjs/nodes.h:
    30340         (KJS::ImmediateNumberNode::): Fix ASSERT correctness (and debug build!)
    30341 
    30342 2007-10-24  Darin Adler  <[email protected]>
    30343 
    30344         Reviewed by Eric.
    30345 
    30346         * kjs/object.cpp: (KJS::JSObject::defaultValue): Get rid of a little
    30347         Identifier ref/deref for what SunSpider claims is a 0.4% speedup.
    30348 
    30349 2007-10-24  Darin Adler  <[email protected]>
    30350 
    30351         Reviewed by Maciej.
    30352 
    30353         - separate out the code to create a hash table the first time from the code
    30354           to rehash
    30355 
    30356         SunSpider claims this was a 0.7% speedup.
    30357 
    30358         * kjs/property_map.cpp:
    30359         (KJS::PropertyMap::expand): Changed to call either createTable or rehash.
    30360         (KJS::PropertyMap::createTable): Added. For the case where we had no table.
    30361         (KJS::PropertyMap::rehash): Removed code needed only in the case where we
    30362         had no table.
    30363         * kjs/property_map.h: Added createTable.
    30364 
    30365 2007-10-24  Eric Seidel  <[email protected]>
    30366 
    30367         Reviewed by darin.
    30368        
    30369         Add ImmediateNumberNode to hold a JSValue* instead of a double for numbers
    30370         which can be represented by JSImmediate.
    30371        
    30372         SunSpider claims this was a 0.6% speedup.
    30373 
    30374         * kjs/grammar.y:
    30375         * kjs/nodes.cpp:
    30376         (KJS::NumberNode::evaluate):
    30377         (KJS::ImmediateNumberNode::evaluate):
    30378         * kjs/nodes.h:
    30379         (KJS::Node::):
    30380         (KJS::ImmediateNumberNode::):
    30381         * kjs/nodes2string.cpp:
    30382         (ImmediateNumberNode::streamTo):
    30383 
    30384 2007-10-24  Darin Adler  <[email protected]>
    30385 
    30386         Reviewed by Maciej.
    30387 
    30388         - http://bugs.webkit.org/show_bug.cgi?id=15657
    30389           change static hash tables to use powers of two for speed
    30390 
    30391         Seems to give 0.7% SunSpider speedup.
    30392 
    30393         * kjs/create_hash_table: Updated to generate new format.
    30394         * kjs/lookup.cpp:
    30395         (KJS::keysMatch): Took out unneeded typecast.
    30396         (KJS::findEntry): Updated to expect table type 3 -- changed the printf to a plain old assert.
    30397         Replaced the modulus with a bit mask.
    30398         (KJS::Lookup::findEntry): Get the hash directly, since we know identifiers already have computed
    30399         their hash -- saves a branch.
    30400         (KJS::Lookup::find): Ditto.
    30401         * kjs/lookup.h: Changed attr from 2-byte value to one-byte value. Replaced hashSize with hashSizeMask.
    30402 
    30403 2007-10-24  Maciej Stachowiak  <[email protected]>
    30404 
    30405         Reviewed by Darin.
    30406        
    30407         - remove KJS_CHECKEXCEPTIONs in places where exceptions can't happen for 0.6% SunSpider speedup
    30408 
    30409         * kjs/nodes.cpp:
    30410         (KJS::DoWhileNode::execute):
    30411         (KJS::WhileNode::execute):
    30412         (KJS::ForNode::execute):
    30413         (KJS::ForInNode::execute):
    30414         (KJS::SourceElementsNode::execute):
    30415 
    30416 2007-10-23  Darin Adler  <[email protected]>
    30417 
    30418         Reviewed by Maciej.
    30419 
    30420         * kjs/JSImmediate.h: (KJS::JSImmediate::getUInt32):
    30421         Changed an && to an & for a 1% gain in SunSpider.
    30422 
    30423 2007-10-23  Oliver Hunt  <[email protected]>
    30424 
    30425         Reviewed by Maciej.
    30426 
    30427         Reduce branching in implementations of some operator implementations, yielding 1.3% boost to SunSpider.
    30428 
    30429         * kjs/nodes.cpp:
    30430         (KJS::MultNode::evaluate):
    30431         (KJS::DivNode::evaluate):
    30432         (KJS::ModNode::evaluate):
    30433         (KJS::add):
    30434         (KJS::sub):
    30435         (KJS::AddNode::evaluate):
    30436         (KJS::SubNode::evaluate):
    30437         (KJS::valueForReadModifyAssignment):
    30438         * kjs/operations.cpp:
    30439         * kjs/operations.h:
    30440 
    30441 2007-10-23  Oliver Hunt  <[email protected]>
    30442 
    30443         Reviewed by Maciej.
    30444 
    30445         Separating all of the simple (eg. non-read-modify-write) binary operators
    30446         into separate classes in preparation for further JS optimisations.
    30447        
    30448         Happily this produces a 0.8% to 1.0% performance increase in SunSpider with
    30449         no further work.
    30450 
    30451         * JavaScriptCore.xcodeproj/project.pbxproj:
    30452         * kjs/grammar.y:
    30453         * kjs/nodes.cpp:
    30454         (KJS::MultNode::evaluate):
    30455         (KJS::DivNode::evaluate):
    30456         (KJS::ModNode::evaluate):
    30457         (KJS::AddNode::evaluate):
    30458         (KJS::SubNode::evaluate):
    30459         (KJS::LeftShiftNode::evaluate):
    30460         (KJS::RightShiftNode::evaluate):
    30461         (KJS::UnsignedRightShiftNode::evaluate):
    30462         (KJS::LessNode::evaluate):
    30463         (KJS::GreaterNode::evaluate):
    30464         (KJS::LessEqNode::evaluate):
    30465         (KJS::GreaterEqNode::evaluate):
    30466         (KJS::InstanceOfNode::evaluate):
    30467         (KJS::InNode::evaluate):
    30468         (KJS::EqualNode::evaluate):
    30469         (KJS::NotEqualNode::evaluate):
    30470         (KJS::StrictEqualNode::evaluate):
    30471         (KJS::NotStrictEqualNode::evaluate):
    30472         (KJS::BitAndNode::evaluate):
    30473         (KJS::BitXOrNode::evaluate):
    30474         (KJS::BitOrNode::evaluate):
    30475         (KJS::LogicalAndNode::evaluate):
    30476         (KJS::LogicalOrNode::evaluate):
    30477         * kjs/nodes.h:
    30478         (KJS::MultNode::):
    30479         (KJS::DivNode::):
    30480         (KJS::ModNode::):
    30481         (KJS::AddNode::):
    30482         (KJS::SubNode::):
    30483         (KJS::LeftShiftNode::):
    30484         (KJS::RightShiftNode::):
    30485         (KJS::UnsignedRightShiftNode::):
    30486         (KJS::LessNode::):
    30487         (KJS::GreaterNode::):
    30488         (KJS::LessEqNode::):
    30489         (KJS::GreaterEqNode::):
    30490         (KJS::InstanceOfNode::):
    30491         (KJS::InNode::):
    30492         (KJS::EqualNode::):
    30493         (KJS::NotEqualNode::):
    30494         (KJS::StrictEqualNode::):
    30495         (KJS::NotStrictEqualNode::):
    30496         (KJS::BitAndNode::):
    30497         (KJS::BitOrNode::):
    30498         (KJS::BitXOrNode::):
    30499         (KJS::LogicalAndNode::):
    30500         (KJS::LogicalOrNode::):
    30501         * kjs/nodes2string.cpp:
    30502         (MultNode::streamTo):
    30503         (DivNode::streamTo):
    30504         (ModNode::streamTo):
    30505         (AddNode::streamTo):
    30506         (SubNode::streamTo):
    30507         (LeftShiftNode::streamTo):
    30508         (RightShiftNode::streamTo):
    30509         (UnsignedRightShiftNode::streamTo):
    30510         (LessNode::streamTo):
    30511         (GreaterNode::streamTo):
    30512         (LessEqNode::streamTo):
    30513         (GreaterEqNode::streamTo):
    30514         (InstanceOfNode::streamTo):
    30515         (InNode::streamTo):
    30516         (EqualNode::streamTo):
    30517         (NotEqualNode::streamTo):
    30518         (StrictEqualNode::streamTo):
    30519         (NotStrictEqualNode::streamTo):
    30520         (BitAndNode::streamTo):
    30521         (BitXOrNode::streamTo):
    30522         (BitOrNode::streamTo):
    30523         (LogicalAndNode::streamTo):
    30524 
    30525 2007-10-23  Darin Adler  <[email protected]>
    30526 
    30527         Reviewed by Maciej.
    30528 
    30529         - fix http://bugs.webkit.org/show_bug.cgi?id=15639
    30530           fix Math.abs(0), Math.ceil(-0), and Math.floor(-0)
    30531 
    30532         Test: fast/js/math.html
    30533 
    30534         * kjs/math_object.cpp: (MathFuncImp::callAsFunction):
    30535         Fix abs to look at the sign bit. Add a special case for values in the range
    30536         between -0 and -1 and a special case for ceil and for -0 for floor.
    30537 
    30538 2007-10-23  Darin Adler  <[email protected]>
    30539 
    30540         Reviewed by Eric.
    30541 
    30542         - streamline exception handling code for a >1% speed-up of SunSpider
    30543 
    30544         * kjs/nodes.cpp: Changed macros to use functions for everything that's not
    30545         part of normal execution. We'll take function call overhead when propagating
    30546         an exception or out of memory.
    30547         (KJS::createOutOfMemoryCompletion): Added.
    30548         (KJS::substitute): Use append instead of the relatively inefficient + operator.
    30549         (KJS::Node::rethrowException): Added.
    30550         * kjs/nodes.h: Added rethrowException.
    30551 
    30552 2007-10-22  Darin Adler  <[email protected]>
    30553 
    30554         Reviewed by Maciej.
    30555 
    30556         - fix http://bugs.webkit.org/show_bug.cgi?id=15636
    30557           some JavaScriptCore regression tests are failing due to numeric conversion
    30558 
    30559         This should restore correctness and make speed better too, restoring some
    30560         of the optimization we lost in my last check-in.
    30561 
    30562         * kjs/JSImmediate.h:
    30563         (KJS::JSImmediate::getTruncatedInt32): Added. Uses the range checking idiom
    30564         I used in my patch yesterday.
    30565         (KJS::JSImmediate::getTruncatedUInt32): Ditto.
    30566 
    30567         * kjs/internal.h: Removed getInt32 and added getTruncatedInt/UInt32.
    30568         * kjs/internal.cpp:
    30569         (KJS::NumberImp::getUInt32): Changed to always use double, since I can't find
    30570         a way to write this more efficiently for float.
    30571         (KJS::NumberImp::getTruncatedInt32): Added.
    30572         (KJS::NumberImp::getTruncatedUInt32): Added.
    30573 
    30574         * kjs/value.h: Removed getInt32 and added getTruncatedInt/UInt32.
    30575         (KJS::JSValue::getUInt32):
    30576         (KJS::JSValue::getTruncatedInt32): Added.
    30577         (KJS::JSValue::getTruncatedUInt32): Added.
    30578         (KJS::JSValue::toInt32): Changed getInt32 call to getTruncatedInt32.
    30579         (KJS::JSValue::toUInt32): Changed getUInt32 call to getTruncatedUInt32.
    30580         * kjs/value.cpp:
    30581         (KJS::JSCell::getTruncatedInt32): Added.
    30582         (KJS::JSCell::getTruncatedUInt32): Added.
    30583         (KJS::JSValue::toInteger): Changed getUInt32 call to getTruncatedInt32.
    30584         (KJS::JSValue::toInt32SlowCase): Removed extra getInt32 call I accidentally
    30585         had left in here.
    30586         (KJS::JSValue::toUInt32SlowCase): Ditto.
    30587         (KJS::JSValue::toUInt16): Changed getUInt32 call to getTruncatedUInt32.
    30588 
    30589         * JavaScriptCore.exp: Updated.
    30590 
    30591 2007-10-22  Darin Adler  <[email protected]>
    30592 
    30593         Reviewed by Geoff.
    30594 
    30595         - fix http://bugs.webkit.org/show_bug.cgi?id=15632
    30596           js1_5/Array/array-001.js test failing
    30597 
    30598         One of the JavaScriptCore tests was failing; it failed because of
    30599         my change to NumberImp::getUInt32. The incorrect code I copied was
    30600         from JSImmediate::getUInt32, and was a pre-existing bug.
    30601 
    30602         This patch fixes correctness, but will surely slow down SunSpider.
    30603         We may be able to code this tighter and get the speed back.
    30604 
    30605         * kjs/JSImmediate.h:
    30606         (KJS::JSImmediate::getInt32): Renamed from toInt32 to more accurately
    30607         reflect the fact that this function only returns true if the value is
    30608         accurate (no fractional part, etc.). Changed code so that it returns
    30609         false when the value has a fraction.
    30610         (KJS::JSImmediate::getUInt32): Ditto.
    30611 
    30612         * kjs/internal.cpp:
    30613         (KJS::NumberImp::getInt32): Changed code so that it returns false when
    30614         the value has a fraction. Restores the old behavior.
    30615         (KJS::NumberImp::getUInt32): Ditto.
    30616 
    30617         * kjs/value.h:
    30618         (KJS::JSValue::getInt32): Updated for name change.
    30619         (KJS::JSValue::getUInt32): Ditto.
    30620         (KJS::JSValue::toInt32): Ditto.
    30621         (KJS::JSValue::toUInt32): Ditto.
    30622 
    30623 2007-10-22  Darin Adler  <[email protected]>
    30624 
    30625         Reviewed by Brady.
    30626 
    30627         - fix crash seen when running JavaScriptCore tests
    30628 
    30629         * kjs/array_instance.cpp: (KJS::ArrayInstance::mark):
    30630         Copy and paste error: I accidentally had code here that was
    30631         making a copy of the HashMap -- that's illegal inside a mark
    30632         function and was unnecessary. The other callsite was modifying
    30633         the map as it iterated it, but this function is not.
    30634 
    30635 2007-10-22  Maciej Stachowiak  <[email protected]>
    30636 
    30637         Reviewed by Oliver.
    30638        
    30639         - Avoid moving floats into integer registers in jsNumber() for 3% speedup on SunSpider
    30640         http://bugs.webkit.org/show_bug.cgi?id=15627
    30641 
    30642         * kjs/JSImmediate.h:
    30643         (KJS::JSImmediate::fromDouble): Avoid moving floats to integer
    30644         registers since this is very slow.
    30645 
    30646 2007-10-22  Darin Adler  <[email protected]>
    30647 
    30648         Reviewed by Eric Seidel.
    30649 
    30650         - http://bugs.webkit.org/show_bug.cgi?id=15617
    30651           improve speed of integer conversions
    30652 
    30653         Makes SunSpider 6% faster.
    30654 
    30655         * kjs/JSImmediate.h: Added toInt32 and toUInt32, with separate versions for
    30656         32-bit and 64-bit.
    30657         * kjs/value.h:
    30658         (KJS::JSValue::getUInt32): Call JSImmediate::toUInt32.
    30659 
    30660         * kjs/internal.h: Added getInt32.
    30661         * kjs/internal.cpp:
    30662         (KJS::NumberImp::getInt32): Added.
    30663         (KJS::NumberImp::getUInt32): Replaced with more-optimal implementation
    30664         stolen from JSValue.
    30665 
    30666         * kjs/value.h:
    30667         (KJS::jsNumber): Marked ALWAYS_INLINE, because this wasn't getting
    30668         inlined.
    30669         (KJS::JSValue::getInt32): Added.
    30670         (KJS::JSValue::getUInt32): Changed to call the new JSImmediate::toUInt32
    30671         to avoid converting from float to double.
    30672         (KJS::JSValue::toInt32): Made inline, separated out the slow case.
    30673         (KJS::JSValue::toUInt32): Ditto.
    30674         * kjs/value.cpp:
    30675         (KJS::JSCell::getInt32): Added.
    30676         (KJS::JSValue::toInt32SlowCase): Renamed from toInt32. Changed to use the
    30677         new getInt32. Added a faster case for in-range numbers.
    30678         (KJS::JSValue::toUInt32SlowCase): Ditto.
    30679         (KJS::JSValue::toUInt16): Added a faster case for in-range numbers.
    30680 
    30681         * JavaScriptCore.exp: Updated for changes.
    30682 
    30683 2007-10-22  Adam Roben  <[email protected]>
    30684 
    30685         Windows build fix
    30686 
    30687         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Turn off
    30688         warning about implicit conversion to bool.
    30689 
    30690 2007-10-22  Mark Rowe  <[email protected]>
    30691 
    30692         Gtk build fix.
    30693 
    30694         * kjs/array_instance.cpp:
    30695 
    30696 2007-10-22  Darin Adler  <[email protected]>
    30697 
    30698         Reviewed by Maciej.
    30699 
    30700         - http://bugs.webkit.org/show_bug.cgi?id=15606
    30701           make cut-off for sparse vs. dense arrays smarter for speed with large arrays
    30702 
    30703         Makes the morph test in SunSpider 26% faster, and the overall
    30704         benchmark 3% faster.
    30705 
    30706         This also fixes some small problems we had with the distinction
    30707         between nonexistent and undefined values in arrays.
    30708 
    30709         * kjs/array_instance.h: Tweaked formatting and naming.
    30710         * kjs/array_instance.cpp: Copied from kjs/array_object.cpp.
    30711         (KJS::storageSize): Added. Computes the size of the storage given a vector length.
    30712         (KJS::increasedVectorLength): Added. Implements the rule for resizing the vector.
    30713         (KJS::isDenseEnoughForVector): Added.
    30714         (KJS::ArrayInstance::ArrayInstance): Initialize the new fields.
    30715         (KJS::ArrayInstance::~ArrayInstance): Since m_storage is now never 0, delete it.
    30716         (KJS::ArrayInstance::getItem): Updated for name changes.
    30717         (KJS::ArrayInstance::lengthGetter): Ditto.
    30718         (KJS::ArrayInstance::inlineGetOwnPropertySlot): Added. Allows both versions of
    30719         getOwnPropertySlot to share more code.
    30720         (KJS::ArrayInstance::getOwnPropertySlot): Just refactored, no code change.
    30721         (KJS::ArrayInstance::put): Added logic for extending the vector as long as the
    30722         array is dense enough. Also keep m_numValuesInVector up to date.
    30723         (KJS::ArrayInstance::deleteProperty): Added code to keep m_numValuesInVector
    30724         up to date.
    30725         (KJS::ArrayInstance::getPropertyNames): Fixed bug where this would omit names
    30726         for array indices with undefined values.
    30727         (KJS::ArrayInstance::increaseVectorLength): Renamed from resizeStorage. Also
    30728         simplified to only handle getting larger.
    30729         (KJS::ArrayInstance::setLength): Added code to update m_numValuesInVector, to
    30730         zero out the unused part of the vector and to delete the map if it's no longer
    30731         needed.
    30732         (KJS::ArrayInstance::mark): Tweaked formatting.
    30733         (KJS::compareByStringForQSort): Ditto.
    30734         (KJS::ArrayInstance::sort): Ditto.
    30735         (KJS::CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments):
    30736         Ditto.
    30737         (KJS::compareWithCompareFunctionForQSort): Ditto.
    30738         (KJS::ArrayInstance::compactForSorting): Fixed bug where this would turn
    30739         undefined values into nonexistent values in some cases.
    30740 
    30741         * kjs/array_object.h: Removed MAX_ARRAY_INDEX.
    30742         * kjs/array_object.cpp: Removed ArrayInstance. Moved to a separate file.
    30743 
    30744         * JavaScriptCore.pri: Added array_instance.cpp.
    30745         * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
    30746         * kjs/AllInOneFile.cpp: Ditto.
    30747 
    30748 2007-10-22  Andrew Wellington  <[email protected]>
    30749 
    30750         Reviewed by Mark Rowe.
    30751        
    30752         Fix for local database support after r26879
    30753         Ensure that ENABLE_DATABASE and ENABLE_ICONDATABASE are correctly set
    30754 
    30755         * Configurations/JavaScriptCore.xcconfig:
    30756 
    30757 2007-10-22  Simon Hausmann  <[email protected]>
    30758 
    30759         Reviewed by Alp.
    30760 
    30761         Build fix for the non-qmake builds.
    30762 
    30763         * wtf/Platform.h: Default to enabling the database features unless
    30764         otherwise specified. (similar to ENABLE_ICONDATABASE)
    30765 
    30766 2007-10-22  Holger Freyther  <[email protected]>
    30767 
    30768         Reviewed by Simon Hausmann <[email protected]>.
    30769 
    30770         * Do not build testkjs as an application bundle. This is
    30771         needed for run-javascriptcore-tests on OSX.
    30772         * Also, based on r26633, allow to test the WebKit/Qt port on OSX.
    30773         * Set DYLD_LIBRARY_PATH if it was set in the environment. It must be set
    30774         as we do not have -rpath on OSX.
    30775 
    30776         * kjs/testkjs.pro:
    30777 
    30778 2007-10-21  Mark Rowe  <[email protected]>
    30779 
    30780         Reviewed by Alp.
    30781 
    30782         http://bugs.webkit.org/show_bug.cgi?id=15575
    30783         Bug 15575: [GTK] Implement threading using GThread
    30784 
    30785         * wtf/Platform.h: Do not enable pthreads for Gtk.
    30786 
    30787 2007-10-21  Mark Rowe  <[email protected]>
    30788 
    30789         Reviewed by Mitz.
    30790 
    30791         Fix http://bugs.webkit.org/show_bug.cgi?id=15603
    30792         Bug 15603: Regression(r26847): Crash when sorting an empty array from JavaScript
    30793 
    30794         * kjs/array_object.cpp:
    30795         (KJS::freeStorage): Reinstate null-check that was removed in r26847.
    30796 
    30797 2007-10-21  Darin Adler  <[email protected]>
    30798 
    30799         - fix Windows build
    30800 
    30801         * kjs/array_instance.h: Removed unused ExecState parameter.
    30802         * kjs/array_object.cpp:
    30803         (KJS::ArrayInstance::put): Ditto.
    30804         (KJS::ArrayInstance::setLength): Ditto.
    30805 
    30806 2007-10-21  Darin Adler  <[email protected]>
    30807 
    30808         * kjs/array_object.cpp: (KJS::ArrayInstance::put):
    30809         Add missing assignment that was causing regression test crash.
    30810 
    30811 2007-10-21  Darin Adler  <[email protected]>
    30812 
    30813         Reviewed by Maciej.
    30814 
    30815         - http://bugs.webkit.org/show_bug.cgi?id=15585
    30816           speed up sparse arrays by using a custom map
    30817    
    30818         Speeds up SunSpider by 10%.
    30819 
    30820         * kjs/array_object.cpp:
    30821         (allocateStorage): Leave room for an additional pointer.
    30822         (reallocateStorage): Ditto.
    30823         (freeStorage): Ditto.
    30824         (ArrayInstance::~ArrayInstance): Delete the overflow map if present.
    30825         (ArrayInstance::getItem): Read values from the overflow map if present.
    30826         Removed the check of length, since it slows down the common case.
    30827         (ArrayInstance::getOwnPropertySlot): Ditto. Also removed the fallback
    30828         to the property map.
    30829         (ArrayInstance::put): Write values into the overflow map as needed.
    30830         Also create overflow map when needed.
    30831         (ArrayInstance::deleteProperty): Remove values from the overflow map
    30832         as appropriate.
    30833         (ArrayInstance::getPropertyNames): Add a name for each identifier in
    30834         the property map. This is extremely inefficient.
    30835         (ArrayInstance::setLength): Remove any values in the overflow map
    30836         that are past the new length, as we formerly did with the property map.
    30837         (ArrayInstance::mark): Mark any values in the overflow map.
    30838         (compareByStringForQSort): Removed unneeded undefined case, since
    30839         compactForSorting guarantees we will have no undefined values.
    30840         (compareWithCompareFunctionForQSort): Ditto.
    30841         (ArrayInstance::compactForSorting): Copy all the values out of the
    30842         overflow map and destroy it.
    30843 
    30844         * kjs/property_map.h: Removed now-unused getSparseArrayPropertyNames.
    30845         * kjs/property_map.cpp: Ditto.
    30846 
    30847 2007-10-20  Darin Adler  <[email protected]>
    30848 
    30849         Reviewed by Maciej.
    30850 
    30851         - http://bugs.webkit.org/show_bug.cgi?id=15579
    30852           stop churning identifier reference counts copying Completion objects
    30853 
    30854         * kjs/completion.h: Replace the Identifier with an Identifier*.
    30855         * kjs/nodes.cpp:
    30856         (ForInNode::execute): Update for change to Completion constructor.
    30857         (ContinueNode::execute): Ditto.
    30858         (BreakNode::execute): Ditto.
    30859 
    30860 2007-10-20  Mark Rowe  <[email protected]>
    30861 
    30862         Reviewed by Alp.
    30863 
    30864         Gtk changes needed to enable HTML 5 client-side database storage.
    30865 
    30866         * wtf/Platform.h: Have Gtk use pthreads for now.
    30867 
    30868 2007-10-20  Geoffrey Garen  <[email protected]>
    30869 
    30870         Reviewed by Maciej Stachowiak.
    30871 
    30872         Fixed http://bugs.webkit.org/show_bug.cgi?id=15570
    30873         Store gathered declaration nodes in the function body node.
    30874        
    30875         This means that you only have to gather the declaration nodes the first
    30876         time the function executes. Performance gain of 2.10% on SunSpider,
    30877         0.90% on command-line JS iBench.
    30878 
    30879         * kjs/nodes.cpp: Split declaration stack initialization code off into
    30880         initializeDeclarationStacks().
    30881         (FunctionBodyNode::FunctionBodyNode):
    30882         (FunctionBodyNode::initializeDeclarationStacks):
    30883         (FunctionBodyNode::processDeclarations):
    30884 
    30885         * kjs/nodes.h: Changed DeclarationStacks structure to hold references,
    30886         since the actual Vectors are now stored either on the stack or in the
    30887         function body node.
    30888 
    30889 2007-10-19  Geoffrey Garen  <[email protected]>
    30890 
    30891         Reviewed by Darin Adler.
    30892        
    30893         http://bugs.webkit.org/show_bug.cgi?id=15559
    30894         Moved processDeclarations call into FunctionBodyNode::execute
    30895 
    30896         To improve encapsulation, moved processDeclarations call into
    30897         FunctionBodyNode::execute. Also marked processDeclarations
    30898         ALWAYS_INLINE, since it has only 1 caller now. This is a .71% speedup
    30899         on command-line JS iBench.
    30900 
    30901         * kjs/function.cpp:
    30902         (KJS::FunctionImp::callAsFunction):
    30903         (KJS::GlobalFuncImp::callAsFunction):
    30904         * kjs/function.h:
    30905         * kjs/interpreter.cpp:
    30906         (KJS::Interpreter::evaluate):
    30907         * kjs/nodes.cpp:
    30908         (FunctionBodyNode::execute):
    30909         * kjs/nodes.h:
    30910 
    30911 2007-10-19  Brady Eidson  <[email protected]>
    30912 
    30913         Reviewed by Sam
    30914 
    30915         Queue -> Deque! and small style tweaks
    30916 
    30917         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
    30918         * JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
    30919         * wtf/Deque.h: Added.
    30920         (WTF::DequeNode::DequeNode):
    30921         (WTF::Deque::Deque):
    30922         (WTF::Deque::~Deque):
    30923         (WTF::Deque::size):
    30924         (WTF::Deque::isEmpty):
    30925         (WTF::Deque::append):
    30926         (WTF::Deque::prepend):
    30927         (WTF::Deque::first):
    30928         (WTF::Deque::last):
    30929         (WTF::Deque::removeFirst):
    30930         (WTF::Deque::clear):
    30931         * wtf/Queue.h: Removed.
    30932 
    30933 
    30934 2007-10-19  Brady Eidson <[email protected]>
    30935 
    30936         Reviewed by Oliver
    30937 
    30938         Added a simple LinkedList based Queue to wtf
    30939         We can make a better, more sophisticated an efficient one later, but have
    30940         needed one for some time, now!
    30941 
    30942         * JavaScriptCore.xcodeproj/project.pbxproj:
    30943         * wtf/Queue.h: Added.
    30944         (WTF::QueueNode::QueueNode):
    30945         (WTF::Queue::Queue):
    30946         (WTF::Queue::~Queue):
    30947         (WTF::Queue::size):
    30948         (WTF::Queue::isEmpty):
    30949         (WTF::Queue::append):
    30950         (WTF::Queue::prepend):
    30951         (WTF::Queue::first):
    30952         (WTF::Queue::last):
    30953         (WTF::Queue::removeFirst):
    30954         (WTF::Queue::clear):
    30955 
    30956 2007-10-19  Nikolas Zimmermann  <[email protected]>
    30957 
    30958         Reviewed by Anders.
    30959 
    30960         Try to fix Qt/Win build slave, by including windows.h also on Qt/Win.
    30961 
    30962         * kjs/testkjs.cpp: Change PLATFORM(WIN) to PLATFORM(WIN_OS)
    30963 
    30964 2007-10-19  Simon Hausmann  <[email protected]>
    30965 
    30966         Reviewed by Lars.
    30967 
    30968         Fix compilation on Windows when wchar_t is a typedef instead of a native type (triggered by -Zc:wchar_t-).
    30969         Don't provide the wchar_t overloads then as they conflict with the unsigned short ones.
    30970 
    30971         * wtf/ASCIICType.h:
    30972         (WTF::isASCIIAlpha):
    30973         (WTF::isASCIIAlphanumeric):
    30974         (WTF::isASCIIDigit):
    30975         (WTF::isASCIIHexDigit):
    30976         (WTF::isASCIILower):
    30977         (WTF::isASCIISpace):
    30978         (WTF::toASCIILower):
    30979         (WTF::toASCIIUpper):
    30980 
    30981 2007-10-19  Simon Hausmann  <[email protected]>
    30982 
    30983         Reviewed by Lars.
    30984 
    30985         Another build fix for the windows/qt build: Apply the same fix as in revision 26686 also to kjs/config.h to disable the disallowctype feature.
    30986 
    30987         * kjs/config.h:
    30988 
    30989 2007-10-18  Maciej Stachowiak  <[email protected]>
    30990 
    30991         Reviewed by Adam.
    30992        
    30993         - use __declspec(thread) for fast thread-local storage on Windows
    30994        
    30995         - 2.2% speedup on sunspider (on Windows)
    30996         - 7% speedup on the string section
    30997         - 6% speedup on JS iBench
    30998        
    30999         - fixed <rdar://problem/5473084> PLT on Windows got 2.5% slower between r25406 and r25422
    31000         - fixed at least some of <rdar://5527965? i-Bench JS was 14% slower in 310A11 than 310A10
    31001        
    31002        
    31003         * wtf/FastMalloc.cpp:
    31004         (WTF::getThreadHeap):
    31005         (WTF::setThreadHeap):
    31006         (WTF::TCMalloc_ThreadCache::GetCache):
    31007         (WTF::TCMalloc_ThreadCache::GetCacheIfPresent):
    31008         (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
    31009 
    31010 2007-10-17  Darin Adler  <[email protected]>
    31011 
    31012         Reviewed by Mark Rowe.
    31013 
    31014         - fix http://bugs.webkit.org/show_bug.cgi?id=15543
    31015           <rdar://problem/5545639> REGRESSION (r26697):
    31016           GoogleDocs: Can't create new documents or open existing ones
    31017 
    31018         Test: fast/js/regexp-non-character.html
    31019 
    31020         * pcre/pcre_compile.c: (check_escape): Take out the checks for valid characters
    31021         in the \u sequences -- not needed and actively harmful.
    31022 
    31023 2007-10-17  Anders Carlsson  <[email protected]>
    31024 
    31025         Reviewed by Oliver.
    31026 
    31027         * wtf/Platform.h:
    31028         #define USE_PTHREADS on Mac.
    31029 
    31030 2007-10-17  Geoffrey Garen  <[email protected]>
    31031 
    31032         Reviewed by Darin Adler.
    31033        
    31034         Merged DeclaredFunctionImp into FunctionImp (the base class) because
    31035         the distinction between the two was unused.
    31036        
    31037         Removed codeType() from FunctionImp because FunctionImp and its
    31038         subclasses all returned FunctionCode, so it was unused, practically
    31039         speaking.
    31040        
    31041         Removed a different codeType() from GlobalFuncImp because it was unused.
    31042         (Perhaps it was vestigial from a time when GlobalFuncImp used to
    31043         inherit from FunctionImp.)
    31044 
    31045         * bindings/runtime_method.cpp:
    31046         * bindings/runtime_method.h:
    31047         * kjs/function.cpp:
    31048         (KJS::FunctionImp::FunctionImp):
    31049         (KJS::FunctionImp::callAsFunction):
    31050         (KJS::FunctionImp::construct):
    31051         (KJS::FunctionImp::execute):
    31052         (KJS::FunctionImp::processVarDecls):
    31053         * kjs/function.h:
    31054         (KJS::FunctionImp::implementsConstruct):
    31055         (KJS::FunctionImp::scope):
    31056         * kjs/function_object.cpp:
    31057         (FunctionProtoFunc::callAsFunction):
    31058         (FunctionObjectImp::construct):
    31059         * kjs/nodes.cpp:
    31060         (FuncDeclNode::processFuncDecl):
    31061         (FuncExprNode::evaluate):
    31062 
    31063 2007-10-17  Adam Roben  <[email protected]>
    31064 
    31065         Windows build fix part 2.
    31066 
    31067         Fix was by Darin, reviewed by Anders and Adam.
    31068 
    31069         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add
    31070         FastMallocPCRE.cpp to the project, and let Visual Studio have its way
    31071         with the post-build step.
    31072         * pcre/pcre.h: Don't DLL export the entry points just because this
    31073         is Win32 -- this is an internal copy of PCRE and should be private.
    31074         * pcre/pcre_compile.c: Fix an uninitialized variable warning --
    31075         there's no real problem but it's better to quiet the compiler by
    31076         tweaking the code slightly than turn off the warning entirely.
    31077 
    31078 2007-10-17  Adam Roben  <[email protected]>
    31079 
    31080         Windows build fix.
    31081 
    31082         Reviewed by Anders.
    31083 
    31084         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable
    31085         some mismatched signed/unsigned comparison warnings.
    31086         * pcre/pcre_exec.c:
    31087         (match): #if-out some labels that don't seem to exist.
    31088 
    31089 2007-10-17  Mark Rowe  <[email protected]>
    31090 
    31091         Gtk build fix.
    31092 
    31093         * JavaScriptCore.pri: Add FastMallocPCRE.cpp.
    31094         * pcre/pcre_get. #if out two functions that depend on pcre_get_stringnumber, which
    31095         is currently unavailable for UTF-16.
    31096 
    31097 2007-10-16  Darin Adler  <[email protected]>
    31098 
    31099         Reviewed by Geoff.
    31100 
    31101         - merged PCRE changes between 6.4 and 6.5
    31102 
    31103         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
    31104         * JavaScriptCore.xcodeproj/project.pbxproj:
    31105         Removed pcre_config.c, pcre_globals.c, pcre_info.c, pcre_maketables.c,
    31106         pcre_printint.src, pcre_refcount.c, pcre_study.c, pcre_try_flipped.c,
    31107         pcre_ucp_findchar.c, pcre_version.c, and ucptable.c. Added pcre_ucp_searchfuncs.c.
    31108 
    31109         * pcre/AUTHORS:
    31110         * pcre/LICENCE:
    31111         * pcre/MERGING:
    31112         * pcre/dftables.c:
    31113         * pcre/pcre-config.h:
    31114         * pcre/pcre.h:
    31115         * pcre/pcre.pri:
    31116         * pcre/pcre_compile.c:
    31117         * pcre/pcre_exec.c:
    31118         * pcre/pcre_fullinfo.c:
    31119         * pcre/pcre_get.c:
    31120         * pcre/pcre_internal.h:
    31121         * pcre/pcre_maketables.c:
    31122         * pcre/pcre_ord2utf8.c:
    31123         * pcre/pcre_tables.c:
    31124         * pcre/pcre_ucp_searchfuncs.c: Copied from pcre/pcre_ucp_findchar.c.
    31125         * pcre/pcre_xclass.c:
    31126         * pcre/ucp.h:
    31127         * pcre/ucpinternal.h:
    31128         * pcre/ucptable.c:
    31129         Updated with new versions from the PCRE 6.5 release, merged with changes.
    31130 
    31131         * pcre/pcre_config.c: Removed.
    31132         * pcre/pcre_globals.c: Removed.
    31133         * pcre/pcre_info.c: Removed.
    31134         * pcre/pcre_printint.src: Removed.
    31135         * pcre/pcre_refcount.c: Removed.
    31136         * pcre/pcre_study.c: Removed.
    31137         * pcre/pcre_try_flipped.c: Removed.
    31138         * pcre/pcre_ucp_findchar.c: Removed.
    31139         * pcre/pcre_version.c: Removed.
    31140 
    31141 2007-10-16  Geoffrey Garen  <[email protected]>
    31142 
    31143         Reviewed by Darin Adler.
    31144 
    31145         Removed KJS_VERBOSE because it was getting in the way of readability,
    31146         and the messages didn't seem very helpful.
    31147 
    31148         * kjs/function.cpp:
    31149         (KJS::FunctionImp::callAsFunction):
    31150         (KJS::FunctionImp::passInParameters):
    31151         * kjs/lookup.h:
    31152         (KJS::lookupPut):
    31153         * kjs/object.cpp:
    31154         (KJS::JSObject::put):
    31155         * kjs/value.h:
    31156 
    31157 2007-10-16  Geoffrey Garen  <[email protected]>
    31158 
    31159         Reviewed by Darin Adler.
    31160        
    31161         Removed the Parameter class because it was a redundant wrapper around
    31162         Identifier.
    31163 
    31164         * kjs/function.cpp:
    31165         (KJS::FunctionImp::passInParameters):
    31166         (KJS::FunctionImp::getParameterName):
    31167         * kjs/nodes.cpp:
    31168         (FunctionBodyNode::addParam):
    31169         * kjs/nodes.h:
    31170         (KJS::FunctionBodyNode::):
    31171 
    31172 2007-10-16  Geoffrey Garen  <[email protected]>
    31173 
    31174         Reviewed by Darin Adler.
    31175        
    31176         Global replace of assert with ASSERT.
    31177 
    31178 2007-10-16  Adam Roben  <[email protected]>
    31179 
    31180         Make testkjs not delay-load WebKit
    31181 
    31182         Soon, delay-loading WebKit will be impossible (because we will be
    31183         using __declspec(thread) for thread-local storage). This change
    31184         prepares testkjs for the future.
    31185 
    31186         Reviewed by Sam.
    31187 
    31188         * JavaScriptCore.vcproj/JavaScriptCore.sln: Removed WebKitInitializer,
    31189         added FindSafari.
    31190         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Don't link against
    31191         WebKitInitializer, don't delay-load WebKit.
    31192         * kjs/testkjs.cpp: Don't use WebKitInitializer.
    31193 
    31194 2007-10-16  Adam Roben  <[email protected]>
    31195 
    31196         Updated testkjs for the rename of WebKit_debug.dll to WebKit.dll for the Debug configuration
    31197 
    31198         Reviewed by Kevin McCullough.
    31199 
    31200         * JavaScriptCore.vcproj/debug.vsprops: Added WebKitDLLConfigSuffix.
    31201         * JavaScriptCore.vcproj/debug_internal.vsprops: Ditto.
    31202         * JavaScriptCore.vcproj/release.vsprops: Ditto.
    31203         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Use
    31204         WebKitDLLConfigSuffix when referring to WebKit.dll, and fixed a typo
    31205         in the name of icuuc36[_debug].dll.
    31206 
    31207 2007-10-16  Geoffrey Garen  <[email protected]>
    31208 
    31209         Reviewed by Maciej Stachowiak.
    31210        
    31211         Re-structured variable and function declaration code.
    31212        
    31213         Command-line JS iBench shows no regression.
    31214        
    31215         Here are the changes:
    31216 
    31217         1. Function declarations are now processed at the same time as var
    31218         declarations -- namely, immediately upon entry to an execution context.
    31219         This does not match Firefox, which waits to process a function
    31220         declaration until the declaration's containing block executes, but it
    31221         does match IE and the ECMA spec. (10.1.3 states that var and function
    31222         declarations should be processed at the same time -- namely, "On
    31223         entering an execution context." 12.2 states that "A Block does not
    31224         define a new execution scope.")
    31225 
    31226         2. Declaration processing proceeds iteratively now, rather than
    31227         recursively, storing the nodes is finds in stacks. This will later
    31228         facilitate an optimization to hold on to the gathered declaration nodes,
    31229         rather than re-fetching them in every function call.
    31230         [ http://bugs.webkit.org/show_bug.cgi?id=14868 ]
    31231 
    31232         Modified these tests because they expected the incorrect Mozilla
    31233         behavior described above:
    31234 
    31235         * tests/mozilla/ecma_3/Function/scope-001.js:
    31236         * tests/mozilla/js1_5/Scope/regress-184107.js:
    31237 
    31238 2007-10-16  Darin Adler  <[email protected]>
    31239 
    31240         - try to fix the GTK build
    31241 
    31242         * kjs/ustring.cpp: Include ASCIICType.h, not ASCIICtype.h.
    31243 
    31244 2007-10-16  Darin Adler  <[email protected]>
    31245 
    31246         - try to fix the Windows build
    31247 
    31248         * kjs/date_object.cpp: (KJS::parseDate): A couple instances of isspace were
    31249         in here. Not sure why it wasn't failing elsewhere. Changed to isASCIISpace.
    31250 
    31251 2007-10-16  Darin Adler  <[email protected]>
    31252 
    31253         - try to fix the GTK build
    31254 
    31255         * kjs/ustring.cpp: Include ASCIICType.h.
    31256 
    31257 2007-10-16  Darin Adler  <[email protected]>
    31258 
    31259         Reviewed by Maciej and Geoff (and looked over by Eric).
    31260 
    31261         - http://bugs.webkit.org/show_bug.cgi?id=15519
    31262           eliminate use of <ctype.h> for processing ASCII
    31263 
    31264         * wtf/ASCIICType.h: Added.
    31265         * wtf/DisallowCType.h: Added.
    31266 
    31267         * kjs/config.h: Include DisallowCType.h.
    31268 
    31269         * kjs/date_object.cpp:
    31270         (KJS::skipSpacesAndComments):
    31271         (KJS::findMonth):
    31272         (KJS::parseDate):
    31273         * kjs/function.cpp:
    31274         (KJS::decode):
    31275         * kjs/ustring.cpp:
    31276         (KJS::UString::toDouble):
    31277         Use ASCIICType.h functions instead of ctype.h ones.
    31278 
    31279 2007-10-14  Maciej Stachowiak  <[email protected]>
    31280 
    31281         Reviewed by Darin.
    31282 
    31283         - fixes for "New JavaScript benchmark"
    31284         http://bugs.webkit.org/show_bug.cgi?id=15515
    31285        
    31286         * kjs/testkjs.cpp:
    31287         (TestFunctionImp::callAsFunction): Implement "load" for compatibility
    31288         with SpiderMonkey.
    31289         (TestFunctionImp::): ditto
    31290         (doIt): ditto
    31291         (kjsmain): Drop useless --> from output.
    31292 
    31293 2007-10-15  Geoffrey Garen  <[email protected]>
    31294 
    31295         Removed unnecessary #include.
    31296 
    31297         * API/JSObjectRef.cpp:
    31298 
    31299 2007-10-15  Geoffrey Garen  <[email protected]>
    31300 
    31301         Double-reverse build fix. My tree was out of date.
    31302 
    31303         * kjs/nodes.cpp:
    31304         (NumberNode::evaluate):
    31305 
    31306 2007-10-15  Geoffrey Garen  <[email protected]>
    31307 
    31308         Build fix.
    31309 
    31310         * kjs/nodes.cpp:
    31311         (NumberNode::evaluate):
    31312 
    31313 2007-10-15  Geoffrey Garen  <[email protected]>
    31314 
    31315         Reviewed by Darin Adler.
    31316        
    31317         Removed surprising self-named "hack" that made nested functions
    31318         available as named properties of their containing functions, and placed
    31319         containing function objects in the scope chains of nested functions.
    31320        
    31321         There were a few reasons to remove this "hack:"
    31322 
    31323         1. It contradicted FF, IE, and the ECMA spec.
    31324 
    31325         2. It incurred a performance penalty, since merely parsing a function
    31326         required parsing its body for nested functions (and so on).
    31327 
    31328         3. SVN history contains no explanation for why it was added. It was just
    31329         legacy code in a large merge a long, long time ago.
    31330 
    31331         [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
    31332 
    31333         * kjs/nodes.cpp:
    31334         (FuncDeclNode::processFuncDecl):
    31335 
    31336 2007-10-15  Geoffrey Garen  <[email protected]>
    31337 
    31338         Reviewed by Darin Adler.
    31339        
    31340         Removed the concept of AnonymousCode. It was unused, and it doesn't
    31341         exist in the ECMA spec.
    31342        
    31343         [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
    31344 
    31345         * kjs/Context.cpp:
    31346         (KJS::Context::Context):
    31347         * kjs/function.h:
    31348         * kjs/nodes.cpp:
    31349         (ReturnNode::execute):
    31350 
    31351 2007-10-15  Geoffrey Garen  <[email protected]>
    31352 
    31353         Reviewed by Darin Adler.
    31354        
    31355         Made function parameters DontDelete. This matches FF and the vague
    31356         description in ECMA 10.1.3. It's also required in order to make
    31357         symbol table based lookup of function parameters valid. (If the
    31358         parameters aren't DontDelete, you can't guarantee that you'll find
    31359         them later in the symbol table.)
    31360 
    31361         [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
    31362 
    31363         * kjs/function.cpp:
    31364         (KJS::FunctionImp::passInParameters):
    31365 
    31366 2007-10-15  Geoffrey Garen  <[email protected]>
    31367 
    31368         Reviewed by Maciej Stachowiak.
    31369        
    31370         Some Vector optimizations. These are especially important when using
    31371         Vector as a stack for implementing recursive algorithms iteratively.
    31372        
    31373         [ Broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
    31374 
    31375         1. Added shrink(), which is a version of resize() that you can call
    31376         to save a branch / improve code generation and inlining when you know
    31377         that the vector is not getting bigger.
    31378        
    31379         2. Changed subclassing relationship in VectorBuffer to remove a call to
    31380         fastFree() in the destructor for the inlineCapacity != 0 template
    31381         specialization. This brings inline Vectors one step closer to true
    31382         stack-allocated arrays.
    31383        
    31384         Also changed abort() to CRASH(), since the latter works better.
    31385 
    31386         * wtf/Vector.h:
    31387         (WTF::VectorBufferBase::allocateBuffer):
    31388         (WTF::VectorBufferBase::deallocateBuffer):
    31389         (WTF::VectorBufferBase::VectorBufferBase):
    31390         (WTF::VectorBufferBase::~VectorBufferBase):
    31391         (WTF::):
    31392         (WTF::VectorBuffer::VectorBuffer):
    31393         (WTF::VectorBuffer::~VectorBuffer):
    31394         (WTF::VectorBuffer::deallocateBuffer):
    31395         (WTF::VectorBuffer::releaseBuffer):
    31396         (WTF::Vector::clear):
    31397         (WTF::Vector::removeLast):
    31398         (WTF::::operator):
    31399         (WTF::::fill):
    31400         (WTF::::shrink):
    31401 
    31402 2007-10-12  Geoffrey Garen  <[email protected]>
    31403 
    31404         Reviewed by Maciej Stachowiak.
    31405        
    31406         Fixed http://bugs.webkit.org/show_bug.cgi?id=15490
    31407         Iteration statements sometimes incorrectly evaluate to the empty value
    31408         (KDE r670547).
    31409        
    31410         [ Broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
    31411        
    31412         This patch is a merge of KDE r670547, with substantial modification
    31413         for performance.
    31414        
    31415         It fixes do-while statements to evaluate to a value. (They used
    31416         to evaluate to the empty value in all cases.)
    31417 
    31418         It also fixes SourceElementsNode to maintain the value of abnormal
    31419         completions like "break" and "continue."
    31420        
    31421         It also re-works the main execution loop in SourceElementsNode so that
    31422         it (1) makes a little more sense and (2) avoids unnecessary work. This
    31423         is a .28% speedup on command-line JS iBench.
    31424 
    31425         * kjs/nodes.cpp:
    31426         (DoWhileNode::execute):
    31427         (SourceElementsNode::execute):
    31428 
    31429 2007-10-15  Simon Hausmann  <[email protected]>
    31430 
    31431         Reviewed by Lars.
    31432 
    31433         Fix compilation with gcc 4.3 by including 'limits' due to the use of std::numeric_limits.
    31434 
    31435         * wtf/HashTraits.h:
    31436 
    31437 2007-10-5  Kevin Ollivier  <[email protected]>
    31438  
    31439         Reviewed by Adam.
    31440        
    31441         Add support for MSVC7, and fix cases where PLATFORM(WIN) should
    31442         be PLATFORM(WIN_OS) for other ports building on Windows.
    31443  
    31444         * kjs/DateMath.cpp:
    31445         (KJS::getDSTOffsetSimple):
    31446         * kjs/JSImmediate.h:
    31447         * wtf/Assertions.cpp:
    31448         * wtf/Assertions.h:
    31449         * wtf/Platform.h:
    31450         * wtf/StringExtras.h:
    31451         (snprintf):
    31452         (vsnprintf):
    31453 
    31454 2007-10-14  Cameron Zwarich  <[email protected]>
    31455 
    31456         Reviewed by Darin.
    31457 
    31458         Adds NegateNode optimization from KJS. The relevant revision in KDE
    31459         is 666736.
    31460 
    31461         * kjs/grammar.y:
    31462         * kjs/nodes.cpp:
    31463         (NumberNode::evaluate):
    31464         * kjs/nodes.h:
    31465         (KJS::Node::):
    31466         (KJS::NumberNode::):
    31467         * kjs/nodes2string.cpp:
    31468         (NumberNode::streamTo):
    31469 
    31470 2007-10-14  Jason Foreman  <[email protected]>
    31471 
    31472         Reviewed by Maciej.
    31473 
    31474         Fix http://bugs.webkit.org/show_bug.cgi?id=15145
    31475        
    31476         Ensure that if adjusting n to minimize the difference of n*intPow10(e-p+1) to x,
    31477         that the property n < intPow10(p) is maintained.
    31478 
    31479         * kjs/number_object.cpp:
    31480         (NumberProtoFunc::callAsFunction):
    31481 
    31482 == Rolled over to ChangeLog-2007-10-14 ==
     1== Rolled over to ChangeLog-2008-08-10 ==
Note: See TracChangeset for help on using the changeset viewer.