Home | History | Annotate | Download | only in JavaScriptCore
      1 2008-08-10  Jan Michael Alonzo  <jmalonzo (a] webkit.org>
      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  <ap (a] webkit.org>
     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  <cwzwarich (a] uwaterloo.ca>
     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  <cwzwarich (a] uwaterloo.ca>
     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  <cwzwarich (a] uwaterloo.ca>
     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  <webkit (a] mattlilek.com>
     73 
     74         Not reviewed, build fix.
     75 
     76         * JavaScriptCore.exp:
     77 
     78 2008-08-08  Oliver Hunt  <oliver (a] apple.com>
     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  <aroben (a] apple.com>
    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  <tavestbo (a] trolltech.com>
    114 
    115         Revert change 35595.
    116 
    117         * wtf/RetainPtr.h:
    118 
    119 2008-08-06  Ariya Hidayat  <ariya.hidayat (a] trolltech.com>
    120 
    121         Fix non-Mac build.
    122 
    123         * wtf/RetainPtr.h: CoreFoundation only for PLATFORM(MAC)
    124 
    125 2008-08-06  Ariya Hidayat  <ariya.hidayat (a] trolltech.com>
    126 
    127         Fix non-Mac build.
    128 
    129         * wtf/RetainPtr.h: CoreFoundation only for PLATFORM(MAC)
    130 
    131 2008-08-06  Csaba Osztrogonac  <oszi (a] inf.u-szeged.hu>
    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  <cwzwarich (a] webkit.org>
    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  <mjs (a] apple.com>
    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  <cwzwarich (a] uwaterloo.ca>
    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  <cwzwarich (a] uwaterloo.ca>
    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  <mjs (a] apple.com>
    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  <oliver (a] apple.com>
    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  <robg (a] gowin.net>
    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  <ap (a] webkit.org>
    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 <kevino (a] theolliviers.com>
    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  <andersca (a] apple.com>
    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  <oszi (a] inf.u-szeged.hu>
    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  <ap (a] webkit.org>
    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  <ap (a] webkit.org>
    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  <eric (a] webkit.org>
    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  <eric (a] webkit.org>
    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  <eric (a] webkit.org>
    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  <ap (a] webkit.org>
    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  <barraclough (a] apple.com>
    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  <ariya.hidayat (a] trolltech.com>
    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  <andersca (a] apple.com>
    538         
    539         Add WebKitAvailability.h forwarding header.
    540         
    541         * ForwardingHeaders/JavaScriptCore/WebKitAvailability.h: Added.
    542 
    543 2008-07-30  Anders Carlsson  <andersca (a] apple.com>
    544 
    545         Fix the else.
    546         
    547         * API/WebKitAvailability.h:
    548 
    549 2008-07-30  Anders Carlsson  <andersca (a] apple.com>
    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  <andersca (a] apple.com>
    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  <barraclough (a] apple.com>
    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  <oliver (a] apple.com>
    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  <ap (a] webkit.org>
    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  <ap (a] webkit.org>
    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  <ap (a] webkit.org>
    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  <ap (a] webkit.org>
    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  <mrowe (a] apple.com>
    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  <aroben (a] apple.com>
    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  <aroben (a] apple.com>
    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  <aroben (a] apple.com>
    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  <ap (a] webkit.org>
    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  <ggaren (a] apple.com>
    771 
    772         Reviewed by Sam Weinig.
    773 
    774         Renamed "ConstructTypeNative" => "ConstructTypeHost".
    775         
    776 2008-07-26  Mark Rowe  <mrowe (a] apple.com>
    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  <oliver (a] apple.com>
    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  <oliver (a] apple.com>
    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  <kevino (a] theolliviers.com>
    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  <aroben (a] apple.com>
    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  <hausmann (a] webkit.org>
    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  <ap (a] webkit.org>
    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  <hausmann (a] webkit.org>
    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  <hausmann (a] webkit.org>
    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  <hausmann (a] webkit.org>
    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  <ggaren (a] apple.com>
    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  <oliver (a] apple.com>
    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  <alp (a] nuanti.com>
    970 
    971         Build fix after r35293: Add API/ to the include path.
    972 
    973         * GNUmakefile.am:
    974 
    975 2008-07-23  Adam Roben  <aroben (a] apple.com>
    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  <oliver (a] apple.com>
    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  <barraclough (a] apple.com>
   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  <loki (a] inf.u-szeged.hu>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <barraclough (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <aroben (a] apple.com>
   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  <oliver (a] apple.com>
   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  <sfalken (a] apple.com>
   1177 
   1178         Windows build fix.
   1179 
   1180         * kjs/JSGlobalObjectFunctions.cpp:
   1181         (KJS::isStrWhiteSpace):
   1182 
   1183 2008-07-18  Steve Falkenburg  <sfalken (a] apple.com>
   1184 
   1185         Windows build fix.
   1186 
   1187         * kjs/nodes.h:
   1188         (KJS::ThrowableExpressionData::ThrowableExpressionData):
   1189 
   1190 2008-07-18  Oliver Hunt  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <landry (a] openbsd.org>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <sfalken (a] apple.com>
   1405 
   1406         Build fix.
   1407         
   1408         * kjs/InternalFunction.cpp:
   1409 
   1410 2008-07-17  Sam Weinig  <sam (a] webkit.org>
   1411 
   1412         Roll out r35199 as it is causing failures on the PPC build.
   1413 
   1414 2008-07-17  Geoffrey Garen  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <barraclough (a] apple.com>
   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  <barraclough (a] apple.com>
   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  <barraclough (a] apple.com>
   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  <ariya.hidayat (a] trolltech.com>
   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  <barraclough (a] apple.com>
   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  <ariya.hidayat (a] trolltech.com>
   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  <mrowe (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <adachan (a] apple.com>
   1569 
   1570         Fixed build.
   1571 
   1572         * kjs/JSGlobalObject.cpp:
   1573 
   1574 2008-07-16  Kevin McCullough  <kmccullough (a] apple.com>
   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  <sam (a] webkit.org>
   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  <ariya.hidayat (a] trolltech.com>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <kmccullough (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <hyatt (a] apple.com>
   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  <hyatt (a] apple.com>
   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  <aroben (a] apple.com>
   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  <ap (a] webkit.org>
   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  <hausmann (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <adachan (a] apple.com>
   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  <jmalonzo (a] webkit.org>
   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  <slewis (a] apple.com>
   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  <hyatt (a] apple.com>
   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  <sam (a] webkit.org>
   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  <mrowe (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <ap (a] webkit.org>
   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  <kmccullough (a] apple.com>
   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  <jmalonzo (a] webkit.org>
   1988 
   1989         Gtk build fix.
   1990 
   1991         * GNUmakefile.am: Add HeavyProfile.cpp
   1992 
   1993 2008-07-09  Mark Rowe  <mrowe (a] apple.com>
   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  <darin (a] apple.com>
   2003 
   2004         * JavaScriptCore.pri: Fix Qt build by adding HeavyProfile.cpp.
   2005 
   2006 2008-07-09  Kevin Ollivier  <kevino (a] theolliviers.com>
   2007 
   2008         wx biuld fix. Add HeavyProfile.cpp to build files.
   2009 
   2010         * JavaScriptCoreSources.bkl:
   2011 
   2012 2008-07-09  Kevin McCullough  <kmccullough (a] apple.com>
   2013 
   2014         - Windows build fix.
   2015 
   2016         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
   2017 
   2018 2008-07-09  Kevin McCullough  <kmccullough (a] apple.com>
   2019 
   2020         - Build fix.
   2021 
   2022         * profiler/HeavyProfile.cpp:
   2023         (KJS::HeavyProfile::mergeProfiles):
   2024 
   2025 2008-07-09  Kevin McCullough  <kmccullough (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <hausmann (a] webkit.org>
   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  <hausmann (a] webkit.org>
   2089 
   2090         Fix the Qt build, add ProfileGenerator.cpp to the build.
   2091 
   2092         * JavaScriptCore.pri:
   2093 
   2094 2008-07-07  David Kilzer  <ddkilzer (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <darin (a] apple.com>
   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  <sfalken (a] apple.com>
   2133 
   2134         Build fixes.
   2135 
   2136         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
   2137         * JavaScriptCore.vcproj/testapi/testapi.vcproj:
   2138 
   2139 2008-07-07  Kevin McCullough  <kmccullough (a] apple.com>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   2252 
   2253         Fix build on case-sensitive build systems.
   2254 
   2255         * kjs/IndexToNameMap.cpp:
   2256 
   2257 2008-07-05  Sam Weinig  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   2273 
   2274         Fix non-AllInOne build.
   2275 
   2276         * kjs/JSGlobalObject.cpp:
   2277 
   2278 2008-07-05  Sam Weinig  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   2314 
   2315         Really fix the mac build.
   2316 
   2317         * JavaScriptCore.xcodeproj/project.pbxproj:
   2318 
   2319 2008-07-04  Sam Weinig  <sam (a] webkit.org>
   2320 
   2321         Fix mac build.
   2322 
   2323         * JavaScriptCore.xcodeproj/project.pbxproj:
   2324 
   2325 2008-07-04  Sam Weinig  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <hausmann (a] webkit.org>
   2357 
   2358         Fix the Wx build, added TreeProfile.cpp to the build.
   2359 
   2360         * JavaScriptCoreSources.bkl:
   2361 
   2362 2008-07-03  Mark Rowe  <mrowe (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mitz (a] apple.com>
   2409 
   2410         - Windows build fix
   2411 
   2412         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added TreeProfile.{h,cpp}.
   2413 
   2414 2008-07-03  Dan Bernstein  <mitz (a] apple.com>
   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  <hausmann (a] webkit.org>
   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  <hausmann (a] webkit.org>
   2433 
   2434         Fix the Qt build, added TreeProfile to the build.
   2435 
   2436         * JavaScriptCore.pri:
   2437 
   2438 2008-07-02  Alexey Proskuryakov  <ap (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <alp (a] nuanti.com>
   2509 
   2510         Build fix for r34960. Add TreeProfile.cpp to build.
   2511 
   2512         * GNUmakefile.am:
   2513 
   2514 2008-07-02  Geoffrey Garen  <ggaren (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <kmccullough (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <hausmann (a] webkit.org>
   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  <ap (a] webkit.org>
   2605 
   2606         Another non-AllInOne build fix.
   2607 
   2608         * kjs/JSGlobalObject.cpp: Include JSLock.h here, too.
   2609 
   2610 2008-07-02  Alexey Proskuryakov  <ap (a] webkit.org>
   2611 
   2612         Non-AllInOne build fix.
   2613 
   2614         * kjs/interpreter.cpp: Include JSLock.h.
   2615 
   2616 2008-06-30  Alexey Proskuryakov  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <christian (a] twotoasts.de>
   2845 
   2846         Gtk+ build fix.
   2847 
   2848         * kjs/list.cpp: Include "JSCell.h"
   2849 
   2850 2008-07-01  Kevin McCullough  <kmccullough (a] apple.com>
   2851 
   2852         Build fix.
   2853 
   2854         * JavaScriptCore.xcodeproj/project.pbxproj:
   2855 
   2856 2008-07-01  Dan Bernstein  <mitz (a] apple.com>
   2857 
   2858         Reviewed by Anders Carlsson.
   2859 
   2860         - Mac release build fix
   2861 
   2862         * JavaScriptCore.exp:
   2863 
   2864 2008-07-01  Sam Weinig  <sam (a] webkit.org>
   2865 
   2866         Try and fix mac builds.
   2867 
   2868         * JavaScriptCore.exp:
   2869 
   2870 2008-07-01  Sam Weinig  <sam (a] webkit.org>
   2871 
   2872         Fix non-AllInOne builds.
   2873 
   2874         * kjs/DateMath.cpp:
   2875 
   2876 2008-07-01  Sam Weinig  <sam (a] webkit.org>
   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  <andersca (a] apple.com>
   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  <hausmann (a] webkit.org>
   2912 
   2913         Build fix, include OwnPtr.h.
   2914 
   2915         * kjs/RegExpConstructor.h:
   2916 
   2917 2008-06-30  Geoffrey Garen  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <aroben (a] apple.com>
   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  <ap (a] webkit.org>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <sam (a] webkit.org>
   3125 
   3126         Fix non-AllInOne builds.
   3127 
   3128         * kjs/JSObject.cpp:
   3129         * kjs/JSValue.cpp:
   3130 
   3131 2008-06-29  Sam Weinig  <sam (a] webkit.org>
   3132 
   3133         Build fix for Qt.
   3134 
   3135         * kjs/DateMath.cpp:
   3136         * kjs/DatePrototype.cpp:
   3137 
   3138 2008-06-29  Sam Weinig  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <jmalonzo (a] webkit.org>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <mrowe (a] apple.com>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   3334 
   3335         Fix non-AllInOne builds.
   3336 
   3337         * kjs/StringConstructor.cpp:
   3338 
   3339 2008-06-28  Sam Weinig  <sam (a] webkit.org>
   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  <jmalonzo (a] webkit.org>
   3366 
   3367         Gtk build fix: JSVariableObject is now part of AllInOne
   3368 
   3369         * GNUmakefile.am:
   3370 
   3371 2008-06-28  Darin Adler  <darin (a] apple.com>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <jmalonzo (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <oliver (a] apple.com>
   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  <jmalonzo (a] webkit.org>
   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  <adele (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mrowe (a] apple.com>
   3796 
   3797         Speculative fix for the Windows build.
   3798 
   3799         * kjs/JSImmediate.cpp:
   3800 
   3801 2008-06-26  Mark Rowe  <mrowe (a] apple.com>
   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  <darin (a] apple.com>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <timothy (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <kmccullough (a] apple.com>
   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  <darin (a] apple.com>
   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  <sfalken (a] apple.com>
   4299 
   4300         Build fix.
   4301 
   4302         * kjs/nodes.cpp:
   4303 
   4304 2008-06-24  Joerg Bornemann  <joerg.bornemann (a] trolltech.com>
   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  <hausmann (a] webkit.org>
   4319 
   4320         Fix the Qt build, added missing include.
   4321 
   4322         * kjs/PropertySlot.cpp:
   4323 
   4324 2008-06-24  Alexey Proskuryakov  <ap (a] webkit.org>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <ariya.hidayat (a] trolltech.com>
   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  <mrowe (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <darin (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <mrowe (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <timothy (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <timothy (a] apple.com>
   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  <kevino (a] theolliviers.com>
   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  <kmccullough (a] apple.com>
   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  <kmccullough (a] apple.com>
   4933 
   4934         Just giving credit.
   4935 
   4936         * ChangeLog:
   4937 
   4938 2008-06-20  Kevin McCullough  <kmccullough (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <ariya.hidayat (a] trolltech.com>
   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  <ariya.hidayat (a] trolltech.com>
   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  <ap (a] webkit.org>
   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  <alp (a] nuanti.com>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <timothy (a] apple.com>
   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  <eric (a] webkit.org>
   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  <kmccullough (a] apple.com>
   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  <ariya.hidayat (a] trolltech.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   5527 
   5528         Reviewed by Oliver.
   5529 
   5530         Sort includes alphabetically.
   5531 
   5532         * kjs/nodes.cpp:
   5533 
   5534 2008-06-16  Cameron Zwarich  <cwzwarich (a] uwaterloo.ca>
   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  <mjs (a] apple.com>
   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  <alp (a] nuanti.com>
   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  <ap (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <tjmaciei (a] trolltech.com>
   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  <kmccullough (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <christian (a] twotoasts.de>
   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  <christian (a] twotoasts.de>
   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  <groot (a] kde.org>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <jmalonzo (a] webkit.org>
   5905 
   5906         Gtk build fix
   5907 
   5908         * GNUmakefile.am:
   5909 
   5910 2008-06-15  Darin Adler  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <mjs (a] apple.com>
   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  <alp (a] nuanti.com>
   6759 
   6760         Rubber-stamped by Maciej.
   6761 
   6762         Install 'jsc' application by default.
   6763 
   6764         * GNUmakefile.am:
   6765 
   6766 2008-06-15  Maciej Stachowiak  <mjs (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <darin (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <darin (a] apple.com>
   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  <mjs (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <mjs (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <darin (a] apple.com>
   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  <ap (a] webkit.org>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <darin (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <darin (a] apple.com>
   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  <kevino (a] theolliviers.com>
   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  <ap (a] webkit.org>
   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  <alp (a] nuanti.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <kmccullough (a] apple.com>
   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  <oliver (a] apple.com>
   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  <antti (a] apple.com>
   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  <antti (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ap (a] webkit.org>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <sam (a] webkit.org>
   7807 
   7808         Reviewed by Maciej Stachowiak.
   7809 
   7810         Big cleanup of formatting and whitespace.
   7811 
   7812 2008-06-04  Cameron Zwarich  <cwzwarich (a] uwaterloo.ca>
   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  <kmccullough (a] apple.com>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <darin (a] apple.com>
   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  <oliver (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <aroben (a] apple.com>
   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  <kmccullough (a] apple.com>
   8216 
   8217         Took out accidental confilct lines I checked in.
   8218 
   8219         * ChangeLog:
   8220 
   8221 2008-06-02  Kevin McCullough  <kmccullough (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <timothy (a] apple.com>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <mjs (a] apple.com>
   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  <sfalken (a] apple.com>
   8403 
   8404         Build fix.
   8405 
   8406         * kjs/array_instance.cpp:
   8407 
   8408 2008-05-29  Alexey Proskuryakov  <ap (a] webkit.org>
   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  <tjmaciei (a] trolltech.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <aroben (a] apple.com>
   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  <andersca (a] apple.com>
   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  <aroben (a] apple.com>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   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  <andersca (a] apple.com>
   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  <kevino (a] theolliviers.com>
   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  <darin (a] apple.com>
   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  <slewis (a] apple.com>
   8615 
   8616         Windows build fix. 
   8617 
   8618         * kjs/testkjs.cpp:
   8619 
   8620 2008-05-26  Maciej Stachowiak  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <tavestbo (a] trolltech.com>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <alp (a] nuanti.com>
   8695 
   8696         Win32/gcc build fix. Remove MSVC assumption.
   8697 
   8698         * wtf/TCSpinLock.h:
   8699         (TCMalloc_SlowLock):
   8700 
   8701 2008-05-24  Oleg Finkelshteyn <olegfink (a] gmail.com>
   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  <andersca (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <darin (a] apple.com>
   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  <ggaren (a] apple.com>
   8828 
   8829         Rolled out r34073 because it caused lots of layout test crashes.
   8830 
   8831 2008-05-23  Geoffrey Garen  <ggaren (a] apple.com>
   8832 
   8833         Rolled out r34085 because it measured as a 7.6% performance regression.
   8834 
   8835 2008-05-23  Adam Roben  <aroben (a] apple.com>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <alp (a] nuanti.com>
   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  <mrowe (a] apple.com>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <hausmann (a] webkit.org>
   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  <kmccullough (a] apple.com>
   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  <aroben (a] apple.com>
   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  <timothy (a] apple.com>
   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  <alp (a] nuanti.com>
   8987 
   8988         GTK+ build fix. Add JavaScriptCore/profiler to include path.
   8989 
   8990         * GNUmakefile.am:
   8991 
   8992 2008-05-22  Adam Roben  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <kmccullough (a] apple.com>
   9047 
   9048         Build fix.
   9049 
   9050         * VM/Machine.cpp:
   9051         (KJS::callEval):
   9052 
   9053 2008-05-22  Kevin McCullough  <kmccullough (a] apple.com>
   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  <sam (a] webkit.org>
   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  <oliver (a] apple.com>
   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  <ddkilzer (a] apple.com>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <hausmann (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <darin (a] apple.com>
   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  <mjs (a] apple.com>
   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  <kmccullough (a] apple.com>
   9278 
   9279         Sadness :(
   9280 
   9281         * kjs/config.h:
   9282 
   9283 2008-05-21  Kevin McCullough  <kmccullough (a] apple.com>
   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  <alp (a] nuanti.com>
   9334 
   9335         GTK+/UNIX testkjs build fix. Include signal.h.
   9336 
   9337         * kjs/testkjs.cpp:
   9338 
   9339 2008-05-21  Oliver Hunt  <oliver (a] apple.com>
   9340 
   9341         Yet more windows build fixes
   9342 
   9343         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
   9344 
   9345 2008-05-21  Oliver Hunt  <oliver (a] apple.com>
   9346 
   9347         Yet more windows build fixes
   9348 
   9349         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
   9350 
   9351 2008-05-21  Alp Toker  <alp (a] nuanti.com>
   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  <oliver (a] apple.com>
   9359 
   9360         Add DebuggerCallFrame.{h,cpp} to the project file
   9361 
   9362         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
   9363 
   9364 2008-05-21  Alp Toker  <alp (a] nuanti.com>
   9365 
   9366         GTK+ port build fixes following squirrelfish merge r33979.
   9367 
   9368         * GNUmakefile.am:
   9369 
   9370 2008-05-21  Maciej Stachowiak  <mjs (a] apple.com>
   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  <alp (a] nuanti.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <mjs (a] apple.com>
   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  <oliver (a] apple.com>
   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  <mjs (a] apple.com>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <mjs (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <mjs (a] apple.com>
   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  <oliver (a] apple.com>
   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  <mjs (a] apple.com>
   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  <oliver (a] apple.com>
   10185 
   10186         Debug build fix
   10187 
   10188         * kjs/JSGlobalObject.cpp:
   10189         (KJS::JSGlobalObject::restoreLocalStorage):
   10190 
   10191 2008-05-09  Oliver Hunt  <oliver (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   10959 
   10960         Fixed tyop.
   10961 
   10962         * kjs/ExecState.h:
   10963 
   10964 2008-04-30  Geoffrey Garen  <ggaren (a] apple.com>
   10965 
   10966         Debug build fix: export a missing symbol.
   10967 
   10968         * JavaScriptCore.exp:
   10969 
   10970 2008-04-30  Geoffrey Garen  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   10982 
   10983         WebCore build fix: forward-declare ScopeChain.
   10984 
   10985         * kjs/interpreter.h:
   10986 
   10987 2008-04-30  Geoffrey Garen  <ggaren (a] apple.com>
   10988 
   10989         Build fix for JavaScriptGlue: export a missing symbol.
   10990 
   10991         * JavaScriptCore.exp:
   10992 
   10993 2008-04-30  Geoffrey Garen  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <mjs (a] apple.com>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <mjs (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <ggaren (a] apple.com>
   11348 
   11349         Reviewed by Oliver Hunt.
   11350         
   11351         Added support for arguments.callee.
   11352 
   11353 2008-04-24  Oliver Hunt  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <ggaren (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <ggaren (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <oliver (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   12302 
   12303         Fix debug build
   12304 
   12305         * kjs/nodes.cpp:
   12306         (KJS::ConstDeclNode::evaluateSingle):
   12307 
   12308 2008-04-21  Cameron Zwarich  <cwzwarich (a] uwaterloo.ca>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com> and Cameron Zwarich  <cwzwarich (a] uwaterloo.ca>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <oliver (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <loki (a] inf.u-szeged.hu>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <ggaren (a] apple.com>
   13248 
   13249         This time for sure.
   13250 
   13251         * kjs/interpreter.cpp:
   13252         (KJS::Interpreter::evaluate):
   13253 
   13254 2008-04-10  Geoffrey Garen  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <sam (a] webkit.org>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <oliver (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <sam (a] webkit.org>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <ggaren (a] apple.com>
   14416 
   14417         Reviewed by Maciej Stachowiak.
   14418         
   14419         Added op_post_dec.
   14420 
   14421 2008-03-31  Cameron Zwarich  <cwzwarich (a] uwaterloo.ca>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <sam (a] webkit.org>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <sam (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <sam (a] webkit.org>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <sam (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <sam (a] webkit.org>
   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  <oliver (a] apple.com>
   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  <sam (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   15145 
   15146         Moved my notes from nodes.h to the wiki.
   15147 
   15148         * kjs/nodes.h:
   15149 
   15150 2008-03-24  Geoffrey Garen  <ggaren (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <timothy (a] apple.com>
   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  <ap (a] webkit.org>
   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  <kmccullough (a] apple.com>
   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  <timothy (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <kmccullough (a] apple.com>
   15385 
   15386         Accidentally turned on the profiler.
   15387 
   15388         * kjs/config.h:
   15389 
   15390 
   15391 2008-05-20  Kevin McCullough  <kmccullough (a] apple.com>
   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  <timothy (a] apple.com>
   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  <timothy (a] apple.com>
   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  <timothy (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <alp (a] nuanti.com>
   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  <kmccullough (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <ariya.hidayat (a] trolltech.com>
   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  <kmccullough (a] apple.com>
   15610 
   15611         - Build fix.
   15612 
   15613         * JavaScriptCore.exp:
   15614 
   15615 2008-05-15  Kevin McCullough  <kmccullough (a] apple.com>
   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  <shausman (a] trolltech.com>
   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  <kmccullough (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <kmccullough (a] apple.com>
   15677 
   15678         Giving credit where credit is due.
   15679 
   15680         * ChangeLog:
   15681 
   15682 2008-05-14  Kevin McCullough  <kmccullough (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <ap (a] webkit.org>
   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  <webkit (a] mattlilek.com>
   15770 
   15771         Not reviewed, build fix.
   15772 
   15773         * kjs/date_object.cpp:
   15774         (KJS::DateObjectFuncImp::callAsFunction):
   15775 
   15776 2008-05-13  Anders Carlsson  <andersca (a] apple.com>
   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  <kmccullough (a] apple.com>
   15791 
   15792         Giving credit where credit is due.
   15793 
   15794         * ChangeLog:
   15795 
   15796 2008-05-13  Kevin McCullough  <kmccullough (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <ap (a] webkit.org>
   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  <mrowe (a] apple.com>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <jchaffraix (a] webkit.org>
   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  <jmalonzo (a] unpluggable.com>
   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  <beidson (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <andersca (a] apple.com>
   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  <jchaffraix (a] webkit.org>
   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  <ariya.hidayat (a] trolltech.com>
   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  <darin (a] apple.com>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <mitz (a] apple.com>
   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  <adachan (a] apple.com>
   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  <sfalken (a] apple.com>
   16810 
   16811         Build fix.
   16812 
   16813         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
   16814 
   16815 2008-05-01  Sam Weinig  <sam (a] webkit.org>
   16816 
   16817         Fix build.
   16818 
   16819         * JavaScriptCore.xcodeproj/project.pbxproj:
   16820 
   16821 2008-05-01  Kevin McCullough  <kmccullough (a] apple.com>
   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  <ddkilzer (a] apple.com>
   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  <bolsinga (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <hausmann (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <darin (a] apple.com>
   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  <sam (a] webkit.org>
   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  <mrowe (a] apple.com>
   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  <ddkilzer (a] apple.com>
   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  <darin (a] apple.com>
   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  <sam (a] webkit.org>
   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  <kmccullough (a] apple.com>
   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  <jchaffraix (a] webkit.org>
   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  <darin (a] apple.com>
   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  <zecke (a] selfish.org>
   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  <kmccullough (a] apple.com>
   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  <ap (a] webkit.org>
   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  <aroben (a] apple.com>
   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  <hausmann (a] webkit.org>
   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  <holger.freyther (a] trolltech.com>
   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  <webkit (a] mattlilek.com>
   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  <glandium (a] debian.org>
   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  <kevino (a] theolliviers.com>
   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  <jmalonzo (a] unpluggable.com>
   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  <jhoneycutt (a] apple.com>
   17437 
   17438         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Windows
   17439         build fix.
   17440 
   17441 2008-04-11  Mark Rowe  <mrowe (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <hausmann (a] webkit.org>
   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  <jhoneycutt (a] apple.com>
   17570 
   17571         Reviewed by mrowe.
   17572 
   17573         * wtf/Platform.h: Add HAVE_ACCESSIBILITY to Platform.h.
   17574 
   17575 2008-04-17  Alexey Proskuryakov  <ap (a] webkit.org>
   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  <msrinirao (a] gmail.com>
   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  <beidson (a] apple.com>
   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  <sam (a] webkit.org>
   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  <kmccullough (a] apple.com>
   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  <sam (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <zecke (a] selfish.org>
   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  <zecke (a] selfish.org>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <andersca (a] apple.com>
   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  <andre.poenitz (a] trolltech.com>
   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  <andersca (a] apple.com>
   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  <sfalken (a] apple.com>
   17912 
   17913         Fix build.
   17914 
   17915         * wtf/ThreadingWin.cpp:
   17916 
   17917 2008-04-14  Alexey Proskuryakov  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   17933 
   17934         Touched a file to make JavaScriptCore.vcproj rebuild.
   17935 
   17936         * wtf/MathExtras.h:
   17937 
   17938 2008-04-14  Adam Roben  <aroben (a] apple.com>
   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  <antti (a] apple.com>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   17982 
   17983         Windows build fix.
   17984 
   17985         * kjs/grammar.y:
   17986 
   17987 2008-04-11  Alexey Proskuryakov  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <mrowe (a] apple.com>
   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  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   18091 
   18092         Build fix
   18093 
   18094         * JavaScriptCore.exp: Export isMainThread.
   18095 
   18096 2008-04-09  Adam Roben  <aroben (a] apple.com>
   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  <mrowe (a] apple.com>
   18104 
   18105         Export WTF::initializeThreading() from JavaScriptCore.
   18106 
   18107         * JavaScriptCore.exp:
   18108 
   18109 2008-04-04  Sam Weinig  <sam (a] webkit.org>
   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  <beidson (a] apple.com>
   18189 
   18190         Encourage Windows to rebuild - AGAIN...
   18191 
   18192         * kjs/DateMath.cpp:
   18193 
   18194 2008-04-08  Adam Roben  <aroben (a] apple.com>
   18195 
   18196         Mac build fix
   18197 
   18198         * JavaScriptCore.exp: Add callOnMainThread, and sorted the list.
   18199 
   18200 2008-04-08  Brady Eidson  <beidson (a] apple.com>
   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  <aroben (a] apple.com>
   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  <beidson (a] apple.com>
   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  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   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  <ap (a] webkit.org>
   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  <mrowe (a] apple.com>
   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  <christian (a] imendio.com>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <oliver (a] apple.com>
   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  <ap (a] webkit.org>
   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  <beidson (a] apple.com>
   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  <darin (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   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  <ap (a] webkit.org>
   18609 
   18610         Windows build fix.
   18611 
   18612         * kjs/dtoa.cpp: Include stdint.h.
   18613 
   18614 2008-03-25  Alexey Proskuryakov  <ap (a] webkit.org>
   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  <darin (a] apple.com>
   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  <sam (a] webkit.org>
   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  <jruderman (a] gmail.com>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <arekm (a] maven.pl>
   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  <dobey (a] wayofthemonkey.com>
   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  <ap (a] webkit.org>
   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  <oliver (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <david.krause (a] gmail.com>
   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  <mjs (a] apple.com>
   18816 
   18817         - fix build
   18818 
   18819         * JavaScriptCore.xcodeproj/project.pbxproj: install Activation.h as private
   18820 
   18821 2008-03-20  Maciej Stachowiak  <mjs (a] apple.com>
   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  <oliver (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <sam (a] webkit.org>
   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  <jasper (a] unix.geek.nz>
   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  <mrowe (a] apple.com>
   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  <oliver (a] apple.com>
   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  <darin (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <mjs (a] apple.com>
   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  <hausmann (a] webkit.org>
   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  <darin (a] apple.com>
   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  <mjs (a] apple.com>
   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  <oliver (a] apple.com>
   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  <ddkilzer (a] apple.com>
   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  <oliver (a] apple.com>
   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  <weihong.zeng (a] hotmail.com>
   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  <kevino (a] theolliviers.com>
   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  <sfalken (a] apple.com>
   19125 
   19126         PGO build fixes.
   19127 
   19128         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
   19129 
   19130 2008-03-14  Oliver Hunt  <oliver (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ap (a] webkit.org>
   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  <ddkilzer (a] apple.com>
   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  <mark (a] moxienet.com>
   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  <mark (a] moxienet.com>
   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  <sfalken (a] apple.com>
   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  <bdakin (a] apple.com>
   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  <hausmann (a] webkit.org>
   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  <sfalken (a] apple.com>
   19275 
   19276         Build fix.
   19277 
   19278         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
   19279 
   19280 2008-03-12  Alp Toker  <alp (a] atoker.com>
   19281 
   19282         Another autotools testkjs build fix attempt.
   19283 
   19284         * GNUmakefile.am:
   19285 
   19286 2008-03-12  Alp Toker  <alp (a] atoker.com>
   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  <ap (a] webkit.org>
   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  <sfalken (a] apple.com>
   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  <darin (a] apple.com>
   19315 
   19316         - Windows build fix
   19317 
   19318         * kjs/function.cpp: (KJS::decode): Initialize variable.
   19319 
   19320 2008-03-10  Brent Fulgham  <bfulgham (a] gmail.com>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <sfalken (a] apple.com>
   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  Jrg Billeter  <j (a] bitron.ch>
   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  <ddkilzer (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <sfalken (a] apple.com>
   19469 
   19470         Build fix.
   19471 
   19472         * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
   19473 
   19474 2008-03-06  Steve Falkenburg  <sfalken (a] apple.com>
   19475 
   19476         Build fix.
   19477 
   19478         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
   19479 
   19480 2008-03-06  Alp Toker  <alp (a] atoker.com>
   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  <sfalken (a] apple.com>
   19487 
   19488         Build fix.
   19489 
   19490         * wtf/ThreadingWin.cpp:
   19491         (WTF::ThreadCondition::timedWait):
   19492 
   19493 2008-03-06  Darin Adler  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <beidson (a] apple.com>
   19506 
   19507         Gtk Build fix
   19508 
   19509         * wtf/ThreadingGtk.cpp:
   19510         (WTF::ThreadCondition::timedWait):
   19511 
   19512 2008-03-06  Alexey Proskuryakov  <ap (a] webkit.org>
   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 <beidson (a] apple.com>
   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  <ap (a] webkit.org>
   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  <darin (a] apple.com>
   19552 
   19553         - try to fix the Qt build
   19554 
   19555         * JavaScriptCore.pri: Add the wtf/unicode directory.
   19556 
   19557 2008-03-06  Darin Adler  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <ap (a] webkit.org>
   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  <kevino (a] theolliviers.com>
   19615 
   19616         Fix the wx build after the bindings move.
   19617 
   19618         * JavaScriptCoreSources.bkl:
   19619         * jscore.bkl:
   19620 
   19621 2008-03-05  Alp Toker  <alp (a] atoker.com>
   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  <bfulgham (a] gmail.com>
   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  <beidson (a] apple.com>
   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  <ddkilzer (a] apple.com>
   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  <andersca (a] apple.com>
   19668 
   19669         Reviewed by Sam.
   19670         
   19671         Remove bindings/.
   19672 
   19673         * bindings: Removed.
   19674 
   19675 2008-03-05  Anders Carlsson  <andersca (a] apple.com>
   19676 
   19677         Don't build bindings/ anymore.
   19678         
   19679         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
   19680 
   19681 2008-03-05  Anders Carlsson  <andersca (a] apple.com>
   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  <ddkilzer (a] apple.com>
   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  <mrowe (a] apple.com>
   19713 
   19714         Mac build fix.
   19715 
   19716         * JavaScriptCore.exp:  Add new symbol to exports file.
   19717 
   19718 2008-03-03  Oliver Hunt  <oliver (a] apple.com>
   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  <bfulgham (a] gmail.com>
   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  <mrowe (a] apple.com>
   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  <bfulgham (a] gmail.com>
   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  <aroben (a] apple.com>
   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  <echristo (a] apple.com>
   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  <ap (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <mark (a] moxienet.com>
   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  <darin (a] apple.com>
   19814 
   19815         Reviewed by Adam.
   19816 
   19817         * JavaScriptCore.exp: Sort the contents of this file.
   19818 
   19819 2008-02-25  Adam Roben  <aroben (a] apple.com>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <mitz (a] apple.com>
   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  <jmalonzo (a] unpluggable.com>
   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  <jmalonzo (a] unpluggable.com>
   19914 
   19915         * GNUmakefile.am: Add GLOBALDEPS for testkjs and minidom.
   19916 
   19917 2008-02-23  Darin Adler  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <jmalonzo (a] unpluggable.com>
   20024 
   20025         Not reviewed, Gtk build fix.
   20026 
   20027         * kjs/testkjs.pro:
   20028 
   20029 2008-02-23  Alexey Proskuryakov  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   20055 
   20056         More build fixing - fix mismatched braces.
   20057 
   20058         * JavaScriptCore.pri:
   20059 
   20060 2008-02-23  Alexey Proskuryakov  <ap (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <michael.knaup (a] mac.com>
   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  <andersca (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <sam (a] webkit.org>
   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  <darin (a] apple.com>
   20216 
   20217         Reviewed by Sam.
   20218 
   20219         * wtf/ASCIICType.h:
   20220         (WTF::toASCIIHexValue): Added.
   20221 
   20222 2008-02-17  Darin Adler  <darin (a] apple.com>
   20223 
   20224         * wtf/ListHashSet.h: (WTF::swap): Removed stray return statement.
   20225 
   20226 2008-02-15  Adam Roben  <aroben (a] apple.com>
   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 <slewis (a] apple.com>
   20235 
   20236         Reviewed by Geoff.
   20237 
   20238         Update order files.
   20239 
   20240         * JavaScriptCore.order:
   20241 
   20242 2008-02-14  Geoffrey Garen  <ggaren (a] apple.com>
   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  <bero (a] arklinux.org>
   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  <oliver (a] apple.com>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <darin (a] apple.com>
   20313 
   20314         Rubber stamped by Eric.
   20315 
   20316         * kjs/ExecState.h:
   20317         (KJS::ExecState::takeException): Added.
   20318 
   20319 2008-02-10  Darin Adler  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <oliver (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <sam (a] webkit.org>
   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  <mrowe (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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 <cam (a] mcc.id.au>
   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  <dobey (a] wayofthemonkey.com>
   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  <alp (a] atoker.com>
   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  <darin (a] apple.com>
   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  <idealisms (a] gmail.com>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <darin (a] apple.com>
   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  <sam (a] webkit.org>
   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  <mrowe (a] apple.com>
   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  <darin (a] apple.com>
   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  <oliver (a] apple.com>
   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  <sfalken (a] apple.com>
   20967 
   20968         Build fix.
   20969 
   20970         * JavaScriptCore.vcproj/JavaScriptCore.sln:
   20971 
   20972 2008-01-24  Steve Falkenburg  <sfalken (a] apple.com>
   20973 
   20974         Build fix.
   20975 
   20976         * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
   20977 
   20978 2008-01-24  Michael Goddard  <michael.goddard (a] trolltech.com>
   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  <michael.goddard (a] trolltech.com>
   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  <michael.goddard (a] trolltech.com>
   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  <michael.goddard (a] trolltech.com>
   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  <michael.goddard (a] trolltech.com>
   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  <alp (a] atoker.com>
   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 <michael.goddard (a] trolltech.com>
   21067 
   21068         Reviewed by Lars Knoll <lars (a] trolltech.com>.
   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  <andersca (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <jmalonzo (a] unpluggable.com>
   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  <kmccullough (a] apple.com>
   21278 
   21279         - Build fix.
   21280 
   21281         * kjs/ustring.h:
   21282 
   21283 2008-01-18  Kevin McCullough  <kmccullough (a] apple.com>
   21284 
   21285         - Build fix.
   21286 
   21287         * kjs/ustring.cpp:
   21288         * kjs/ustring.h:
   21289         (KJS::UString::cost):
   21290 
   21291 2008-01-18  Kevin McCullough  <kmccullough (a] apple.com>
   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  <hausmann (a] webkit.org>
   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  <prasanth.ullattil (a] trolltech.com>
   21323 
   21324         Reviewed by Simon Hausmann <hausmann (a] webkit.org>.
   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  <prasanth.ullattil (a] trolltech.com>
   21333 
   21334         Reviewed by Simon Hausmann <hausmann (a] webkit.org>.
   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  <antti (a] apple.com>
   21342 
   21343         Fix Windows build.
   21344 
   21345         * kjs/regexp_object.cpp:
   21346         (KJS::regExpProtoFuncToString):
   21347 
   21348 2008-01-16  Sam Weinig  <sam (a] webkit.org>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <alp (a] atoker.com>
   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  <sam (a] webkit.org>
   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  <sfalken (a] apple.com>
   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  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <darin (a] apple.com>
   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  <ap (a] webkit.org>
   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  <sfalken (a] apple.com>
   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  <mbm (a] trolltech.com>
   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  <michael.goddard (a] trolltech.com>
   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  <alp (a] atoker.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <mrowe (a] apple.com>
   21895 
   21896         Another Windows build fix.
   21897 
   21898         * kjs/Activation.h:
   21899 
   21900 2008-01-12  Mark Rowe  <mrowe (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <ggaren (a] apple.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <hausmann (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <ddkilzer (a] apple.com>
   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  <mitz (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <zimmermann (a] kde.org>
   22113 
   22114         Reviewed by Mark.
   22115 
   22116         Enable SVG_FONTS by default.
   22117 
   22118         * Configurations/JavaScriptCore.xcconfig:
   22119 
   22120 2008-01-07  Darin Adler  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <aroben (a] apple.com>
   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  <timothy (a] apple.com>
   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  <alp (a] atoker.com>
   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  <eric (a] webkit.org>
   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  <zimmermann (a] kde.org>
   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  <alp (a] atoker.com>
   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  <darin (a] apple.com>
   22258 
   22259         * API/JSRetainPtr.h: One more file that needed the change below.
   22260 
   22261 2008-01-05  Darin Adler  <darin (a] apple.com>
   22262 
   22263         * wtf/OwnPtr.h: OwnPtr needs the same fix as RefPtr below.
   22264 
   22265 2008-01-05  Adam Roben  <aroben (a] apple.com>
   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  <darin (a] apple.com>
   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  <hmason (a] mac.com>
   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  <mrowe (a] apple.com>
   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  <alp (a] atoker.com>
   22314 
   22315         GTK+ autotools build fix. Terminate empty rules.
   22316 
   22317         * GNUmakefile.am:
   22318 
   22319 2008-01-03  Simon Hausmann  <hausmann (a] webkit.org>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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 <ddkilzer (a] webkit.org>
   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  <darin (a] apple.com>
   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  <alice.liu (a] apple.com>
   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  <sam (a] webkit.org>
   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  <mrowe (a] apple.com>
   22431 
   22432         Rubber-stamped by Alp Toker.
   22433 
   22434         * GNUmakefile.am: Add missing dependency on grammar.y.
   22435 
   22436 2008-01-01  Darin Adler  <darin (a] apple.com>
   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  <darin (a] apple.com>
   22455 
   22456         - rolled scope chain optimization out; it was breaking the world
   22457 
   22458 2008-01-01  Darin Adler  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <darin (a] apple.com>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <jmalonzo (a] unpluggable.com>
   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  <mjs (a] apple.com>
   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  <alp (a] atoker.com>
   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  <mjs (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <ap (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <darin (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <dobey (a] wayofthemonkey.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <ggaren (a] apple.com>
   23245 
   23246         Added Radar number.
   23247 
   23248         * kjs/nodes.cpp:
   23249         (KJS::ProgramNode::processDeclarations):
   23250 
   23251 2007-12-20  Geoffrey Garen  <ggaren (a] apple.com>
   23252 
   23253         Linux build fix: config.h has to come first.
   23254 
   23255         * kjs/error_object.cpp:
   23256 
   23257 2007-12-19  Geoffrey Garen  <ggaren (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <oliver (a] apple.com>
   23335 
   23336         Make appendToVarDeclarationList static
   23337 
   23338         RS=Weinig.
   23339 
   23340         * kjs/grammar.y:
   23341 
   23342 2007-12-18  Oliver Hunt  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <xan (a] gnome.org>
   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 <ddkilzer (a] webkit.org>
   23422 
   23423 2007-12-18  Mark Rowe  <mrowe (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ap (a] webkit.org>
   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  <alp (a] atoker.com>
   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  <mrowe (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <alp (a] atoker.com>
   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  <oliver (a] apple.com>
   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  <mitz (a] apple.com>
   23684 
   23685         - try again to fix the Windows build
   23686 
   23687         * wtf/TCSystemAlloc.cpp:
   23688         (TCMalloc_SystemRelease):
   23689 
   23690 2007-12-14  Dan Bernstein  <mitz (a] apple.com>
   23691 
   23692         - try to fix the Windows build
   23693 
   23694         * wtf/TCSystemAlloc.cpp:
   23695         (TCMalloc_SystemRelease):
   23696 
   23697 2007-12-14  Mark Rowe <mrowe (a] apple.com>
   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  <darin (a] apple.com>
   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  <andersca (a] apple.com>
   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  <sfalken (a] apple.com>
   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  <alp (a] atoker.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <darin (a] apple.com>
   23841 
   23842         * wtf/unicode/qt4/UnicodeQt4.h: Try to fix Qt build by adding U16_IS_SINGLE.
   23843 
   23844 2007-12-10  Darin Adler  <darin (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <sam (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <timothy (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <oliver (a] apple.com>
   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  <sam (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   24055 
   24056         Build fix: added #include.
   24057 
   24058         * kjs/nodes.cpp:
   24059 
   24060 2007-12-07  Geoffrey Garen  <ggaren (a] apple.com>
   24061 
   24062         Build fix: added #include.
   24063 
   24064         * kjs/interpreter.cpp:
   24065 
   24066 2007-12-07  Geoffrey Garen  <ggaren (a] apple.com>
   24067 
   24068         Build fix: added #include.
   24069 
   24070         * kjs/grammar.y:
   24071 
   24072 2007-12-07  Geoffrey Garen  <ggaren (a] apple.com>
   24073 
   24074         Build fix: added #include.
   24075 
   24076         * kjs/function_object.cpp:
   24077 
   24078 2007-12-07  Geoffrey Garen  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   24110 
   24111         Build fix: added JSVariableObject.cpp to the .pri file.
   24112 
   24113         * JavaScriptCore.pri:
   24114 
   24115 2007-12-07  Geoffrey Garen  <ggaren (a] apple.com>
   24116 
   24117         Build fix: added #include.
   24118 
   24119         * kjs/function.cpp:
   24120 
   24121 2007-12-07  Steve Falkenburg  <sfalken (a] apple.com>
   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  <ggaren (a] apple.com>
   24131 
   24132         Build fix: removed stray name qualification.
   24133 
   24134         * kjs/function.h:
   24135         (KJS::ActivationImp::ActivationImp):
   24136 
   24137 2007-12-07  Geoffrey Garen  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <darin (a] apple.com>
   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  <kevino (a] theolliviers.com>
   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  <darin (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <darin (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <ggaren (a] apple.com>
   24241 
   24242         Build fix: added some #includes.
   24243 
   24244         * kjs/JSImmediate.cpp:
   24245 
   24246 2007-12-05  Geoffrey Garen  <ggaren (a] apple.com>
   24247 
   24248         Build fix: added some #includes.
   24249 
   24250         * kjs/JSGlobalObject.cpp:
   24251         * kjs/JSImmediate.cpp:
   24252 
   24253 2007-12-05  Geoffrey Garen  <ggaren (a] apple.com>
   24254 
   24255         Build fix: Fixed #include spelling.
   24256 
   24257         * kjs/debugger.cpp:
   24258 
   24259 2007-12-05  Geoffrey Garen  <ggaren (a] apple.com>
   24260 
   24261         Build fix: added #include.
   24262 
   24263         * kjs/debugger.cpp:
   24264 
   24265 2007-12-05  Geoffrey Garen  <ggaren (a] apple.com>
   24266 
   24267         Build fix: added a forward declaration.
   24268 
   24269         * kjs/debugger.h:
   24270 
   24271 2007-12-05  Geoffrey Garen  <ggaren (a] apple.com>
   24272 
   24273         Build fix: added an #include.
   24274 
   24275         * kjs/error_object.cpp:
   24276 
   24277 2007-12-05  Geoffrey Garen  <ggaren (a] apple.com>
   24278 
   24279         Build fix: added an #include.
   24280 
   24281         * kjs/bool_object.cpp:
   24282 
   24283 2007-12-05  Geoffrey Garen  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <oliver (a] apple.com>
   24349 
   24350         Fix gtk build.
   24351 
   24352         * wtf/TCSystemAlloc.cpp:
   24353 
   24354 2007-12-03  Oliver Hunt  <oliver (a] apple.com>
   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  <andersca (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <mitz (a] apple.com>
   24504 
   24505         - fix a copy-and-paste-o
   24506 
   24507         * bindings/npruntime.cpp:
   24508         (_NPN_GetIntIdentifier):
   24509 
   24510 2007-12-03  Dan Bernstein  <mitz (a] apple.com>
   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  <darin (a] apple.com>
   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  <ggaren (a] apple.com>
   24536 
   24537         Build fix: added an #include.
   24538 
   24539         * kjs/collector.cpp:
   24540 
   24541 2007-12-02  Geoffrey Garen  <ggaren (a] apple.com>
   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  <alp (a] atoker.com>
   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  <ggaren (a] apple.com>
   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  <bfulgham (a] gmail.com>
   24606 
   24607         Reviewed by Eric.
   24608 
   24609         * ChangeLog:
   24610         * pcre/pcre_compile.cpp:
   24611         (compile_branch):
   24612 
   24613 2007-11-30  Eric Seidel  <eric (a] webkit.org>
   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  <darin (a] apple.com>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <oliver (a] apple.com>
   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  <aroben (a] apple.com>
   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  <eric (a] webkit.org>
   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  <mrowe (a] apple.com>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   24768 
   24769         Reviewed by Sam.
   24770 
   24771         Comment cleanup
   24772 
   24773         * pcre/pcre_exec.cpp:
   24774         (match):
   24775 
   24776 2007-11-26  Eric Seidel  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <oliver (a] apple.com>
   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 <beidson (a] apple.com>
   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  <alp (a] atoker.com>
   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  <alp (a] atoker.com>
   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  <alp (a] atoker.com>
   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  <andersca (a] apple.com>
   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  <andersca (a] apple.com>
   25447 
   25448         Reviewed by Darin.
   25449 
   25450         Add a ValueType typedef.
   25451         
   25452         * wtf/Vector.h:
   25453 
   25454 2007-11-26  Darin Adler  <darin (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <alp (a] atoker.com>
   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  <laszlo.gombos (a] gmail.com>
   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  <mrowe (a] apple.com>
   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  <kevino (a] theolliviers.com>
   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  <kevino (a] theolliviers.com>
   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  <hausmann (a] webkit.org>
   25528 
   25529         Reviewed by George Staikos <staikos (a] kde.org>.
   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  <hausmann (a] kde.org>
   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  <hausmann (a] kde.org>
   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  <mrowe (a] apple.com>
   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  <kevino (a] theolliviers.com>
   25582 
   25583         wx port build fix (wx headers include ctype functions).
   25584 
   25585         * kjs/config.h:
   25586 
   25587 2007-11-19  Kevin Ollivier  <kevino (a] theolliviers.com>
   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  <eric (a] webkit.org>
   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  <mrowe (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <alp (a] atoker.com>
   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  <sfalken (a] apple.com>
   25688 
   25689         Windows build fix.
   25690 
   25691         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
   25692 
   25693 2007-11-16  Mark Rowe  <mrowe (a] apple.com>
   25694 
   25695         Windows build fix.
   25696 
   25697         * kjs/lexer.cpp:
   25698         (KJS::Lexer::record8):
   25699 
   25700 2007-11-16  Mark Rowe  <mrowe (a] apple.com>
   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  <aroben (a] apple.com>
   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  <ap (a] webkit.org>
   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  <mrowe (a] apple.com>
   25737 
   25738         Gtk build fix.
   25739 
   25740         * kjs/Parser.cpp:
   25741 
   25742 2007-11-15  Mark Rowe  <mrowe (a] apple.com>
   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  <mrowe (a] apple.com>
   25757 
   25758         Qt build fix.
   25759 
   25760         * kjs/Parser.h:
   25761 
   25762 2007-11-15  Geoffrey Garen  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <sfalken (a] apple.com>
   25893 
   25894         Windows build fix.
   25895 
   25896         * JavaScriptCore.vcproj/JavaScriptCore.make:
   25897 
   25898 2007-11-14  Alexey Proskuryakov  <ap (a] webkit.org>
   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  <sam (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <aroben (a] apple.com>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <andersca (a] apple.com>
   26022 
   26023         Add RefCounted.h (And remove Shared.h)
   26024         
   26025         * JavaScriptCore.vcproj/WTF/WTF.vcproj:
   26026 
   26027 2007-11-13  Geoffrey Garen  <ggaren (a] apple.com>
   26028 
   26029         Build fix.
   26030 
   26031         * kjs/regexp.h:
   26032 
   26033 2007-11-13  Geoffrey Garen  <ggaren (a] apple.com>
   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  <aroben (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <eric (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <alp (a] atoker.com>
   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  <eric (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <eric (a] webkit.org>
   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  <ap (a] webkit.org>
   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  <joshmoz (a] gmail.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <aroben (a] apple.com>
   26488 
   26489         Build fix
   26490 
   26491         * wtf/FastMalloc.h: Add missing using statement.
   26492 
   26493 2007-11-11  Oliver Hunt  <oliver (a] apple.com>
   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  <aroben (a] apple.com>
   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  <mrowe (a] apple.com>
   26543 
   26544         Build fix.  Use the correct filename case.
   26545 
   26546         * kjs/nodes.h:
   26547 
   26548 2007-11-11  Geoffrey Garen  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <eric (a] webkit.org>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   26665 
   26666         * JavaScriptCore.xcodeproj/project.pbxproj: Try fixing Mac Tiger builds
   26667         by adding another include path.
   26668 
   26669 2007-11-11  Darin Adler  <darin (a] apple.com>
   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  <eric (a] webkit.org>
   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  <darin (a] apple.com>
   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  <aroben (a] apple.com>
   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  <darin (a] apple.com>
   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  <aroben (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <kevino (a] theolliviers.com>
   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  <oliver (a] apple.com>
   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  <darin (a] apple.com>
   27012 
   27013         - fix build
   27014 
   27015         * kjs/nodes.h: Add missing parameter name.
   27016 
   27017 2007-11-08  Eric Seidel  <eric (a] webkit.org>
   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  <oliver (a] apple.com>
   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  <aroben (a] apple.com>
   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  <sam (a] webkit.org>
   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  <mrowe (a] apple.com>
   27221 
   27222         Gtk build fix.
   27223 
   27224         * kjs/lookup.h: Add missing include.
   27225 
   27226 2007-11-08  Sam Weinig  <sam (a] webkit.org>
   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  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   27392 
   27393         Fix a precedence warning on Windows
   27394 
   27395         * kjs/JSImmediate.h:
   27396         (KJS::JSImmediate::toBoolean):
   27397 
   27398 2007-11-08  Mark Rowe  <mrowe (a] apple.com>
   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  <darin (a] apple.com>
   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  <oliver (a] apple.com>
   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  <eric (a] webkit.org>
   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  <mrowe (a] apple.com>
   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  <mrowe (a] apple.com>
   27501 
   27502         Gtk build fix.
   27503 
   27504         * kjs/regexp_object.cpp:
   27505 
   27506 2007-11-07  Geoffrey Garen  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <hausmann (a] kde.org>
   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  <shausman (a] trolltech.com>
   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  <lars (a] trolltech.com>
   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  <mjs (a] apple.com>
   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  <oliver (a] apple.com>
   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  <eric (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <darin (a] apple.com>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <mrowe (a] apple.com>
   27717 
   27718         Mac build fix.
   27719 
   27720         * kjs/array_object.cpp:
   27721         (KJS::ArrayProtoFunc::callAsFunction):
   27722 
   27723 2007-11-05  Adam Roben  <aroben (a] apple.com>
   27724 
   27725         Windows build fix
   27726 
   27727         * kjs/list.h:
   27728 
   27729 2007-11-05  Mark Rowe  <mrowe (a] apple.com>
   27730 
   27731         Build fix.  Add missing #include.
   27732 
   27733         * kjs/operations.cpp:
   27734 
   27735 2007-11-05  Eric Seidel  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   27747 
   27748         * kjs/operations.cpp:
   27749         (KJS::equal): correct broken change.
   27750 
   27751 2007-11-05  Eric Seidel  <eric (a] webkit.org>
   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  <mrowe (a] apple.com>
   27763 
   27764         Gtk build fix.
   27765 
   27766         * pcre/pcre.pri:
   27767 
   27768 2007-11-05  Mark Rowe  <mrowe (a] apple.com>
   27769 
   27770         Gtk build fix.
   27771 
   27772         * kjs/list.cpp:
   27773 
   27774 2007-11-05  Geoffrey Garen  <ggaren (a] apple.com>
   27775 
   27776         Touched a file to test my new HTTP access.
   27777 
   27778         * kjs/scope_chain.cpp:
   27779 
   27780 2007-11-05  Alp Toker  <alp (a] atoker.com>
   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  <ggaren (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   27871 
   27872         * pcre/pcre_exec.c: (match): Try to fix the Windows build by removing unreachable code.
   27873 
   27874 2007-11-03  Darin Adler  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <mjs (a] apple.com>
   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  <sam (a] webkit.org>
   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  <kmccullough (a] apple.com>
   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  <mjs (a] apple.com>
   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  <darin (a] apple.com>
   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  <mrowe (a] apple.com>
   28069 
   28070         Gtk build fix.
   28071 
   28072         * kjs/nodes.cpp:  Add missing include.
   28073 
   28074 2007-11-03  Darin Adler  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <ddkilzer (a] webkit.org>
   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  <mjs (a] apple.com>
   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  <ap (a] webkit.org>
   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  <mjs (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <dacarson (a] gmail.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   28366 
   28367         Windows build fix
   28368 
   28369         * kjs/ExecState.h:
   28370 
   28371 2007-10-31  Maciej Stachowiak  <mjs (a] apple.com>
   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  <aroben (a] apple.com>
   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  <kmccullough (a] apple.com>
   28415 
   28416         Reviewed by Sam.
   28417 
   28418         - Corrected spelling.
   28419 
   28420         * wtf/HashTraits.h:
   28421 
   28422 2007-10-31  Mark Rowe  <mrowe (a] apple.com>
   28423 
   28424         Further Gtk build fixage.
   28425 
   28426         * kjs/regexp_object.cpp:
   28427 
   28428 2007-10-31  Mark Rowe  <mrowe (a] apple.com>
   28429 
   28430         Gtk build fix.
   28431 
   28432         * kjs/regexp.h:
   28433 
   28434 2007-10-31  Darin Adler  <darin (a] apple.com>
   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  <oliver (a] apple.com>
   28477 
   28478         * kjs/nodes.h: include OwnPtr.h
   28479 
   28480 2007-10-31  Oliver Hunt  <oliver (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ap (a] webkit.org>
   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  <mjs (a] apple.com>
   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  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <eric (a] webkit.org>
   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  <mjs (a] apple.com>
   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  <eric (a] webkit.org>
   28887 
   28888         Build fix only, no review.
   28889 
   28890         * JavaScriptCore.exp: Export symbol for new StringInstance::getOwnPropertySlot
   28891 
   28892 2007-10-29  Mark Rowe  <mrowe (a] apple.com>
   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  <eric (a] webkit.org>
   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  <oliver (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <eric (a] webkit.org>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <mrowe (a] apple.com>
   29106 
   29107         Gtk build fix.  Add include of MathExtras.h.
   29108 
   29109         * kjs/string_object.cpp:
   29110 
   29111 2007-10-28  Mark Rowe  <mrowe (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <mjs (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <kevino (a] theolliviers.com>
   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  <mrowe (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mjs (a] apple.com>
   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  <darin (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mrowe (a] apple.com>
   29515 
   29516         Silence a warning.
   29517 
   29518         * kjs/SymbolTable.h:
   29519 
   29520 2007-10-27  Mark Rowe  <mrowe (a] apple.com>
   29521 
   29522         Gtk build fix.
   29523 
   29524         * kjs/function.h:
   29525 
   29526 2007-10-26  Kevin McCullough  <kmccullough (a] apple.com>
   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  <kmccullough (a] apple.com>
   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  <sam (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   29583 
   29584         Build fix: export SymbolTable.h to WebCore.
   29585 
   29586         * JavaScriptCore.xcodeproj/project.pbxproj:
   29587 
   29588 2007-10-26  Geoffrey Garen  <ggaren (a] apple.com>
   29589 
   29590         Comment tweak suggested by Maciej.
   29591 
   29592         * kjs/function.cpp:
   29593         (KJS::ActivationImp::getOwnPropertySlot):
   29594 
   29595 2007-10-26  Geoffrey Garen  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <kmccullough (a] apple.com>
   29666 
   29667         - Corrected function name mistake in this changelog.
   29668 
   29669 2007-10-26  Kevin McCullough  <kmccullough (a] apple.com>
   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  <mrowe (a] apple.com>
   29681 
   29682         Windows build fix.
   29683 
   29684         * kjs/collector.cpp:
   29685         (KJS::Collector::collect):
   29686 
   29687 2007-10-26  Oliver Hunt  <oliver (a] apple.com>
   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  <mjs (a] apple.com>
   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  <mrowe (a] apple.com>
   29728 
   29729         Gtk build fix.
   29730 
   29731         * kjs/ExecState.h:
   29732 
   29733 2007-10-26  Maciej Stachowiak  <mjs (a] apple.com>
   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  <mrowe (a] apple.com>
   29802 
   29803         Windows build fix.
   29804 
   29805         * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
   29806 
   29807 2007-10-26  Mark Rowe  <mrowe (a] apple.com>
   29808 
   29809         Gtk build fix.
   29810 
   29811         * JavaScriptCore.pri:
   29812         * kjs/ExecState.cpp:
   29813 
   29814 2007-10-26  Maciej Stachowiak  <mjs (a] apple.com>
   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  <mrowe (a] apple.com>
   29841 
   29842         Windows build fix.
   29843 
   29844         * kjs/string_object.cpp:
   29845         (KJS::StringObjectFuncImp::callAsFunction):
   29846 
   29847 2007-10-25  Darin Adler  <darin (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <sam (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <aroben (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   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  <ggaren (a] apple.com>
   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  <mjs (a] apple.com>
   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  <eric (a] webkit.org>
   30127 
   30128         Reviewed by Geoff.
   30129 
   30130         * JavaScriptCore.xcodeproj/project.pbxproj: re-mark JSGlobalObject.h as private
   30131 
   30132 2007-10-25  Geoffrey Garen  <ggaren (a] apple.com>
   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  <eric (a] webkit.org>
   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  <eric (a] webkit.org>
   30252 
   30253         Build fix for Gtk, no review.
   30254 
   30255         * kjs/collector.cpp: #include "context.h"
   30256 
   30257 2007-10-24  Eric Seidel  <eric (a] webkit.org>
   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  <mrowe (a] apple.com>
   30274 
   30275         Gtk build fix.
   30276 
   30277         * kjs/identifier.h:  Remove extra qualification.
   30278 
   30279 2007-10-24  Geoffrey Garen  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <lars (a] trolltech.com>
   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  <oliver (a] apple.com>
   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  <eric (a] webkit.org>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <eric (a] webkit.org>
   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  <darin (a] apple.com>
   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  <mjs (a] apple.com>
   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  <darin (a] apple.com>
   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  <oliver (a] apple.com>
   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  <oliver (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <mjs (a] apple.com>
   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  <darin (a] apple.com>
   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  <aroben (a] apple.com>
   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  <mrowe (a] apple.com>
   30691 
   30692         Gtk build fix.
   30693 
   30694         * kjs/array_instance.cpp:
   30695 
   30696 2007-10-22  Darin Adler  <darin (a] apple.com>
   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  <proton (a] wiretapped.net>
   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  <hausmann (a] kde.org>
   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  <zecke (a] selfish.org>
   30767 
   30768         Reviewed by Simon Hausmann <hausmann (a] kde.org>.
   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  <mrowe (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <beidson (a] apple.com>
   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 <beidson (a] apple.com>
   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  <zimmermann (a] kde.org>
   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  <hausmann (a] kde.org>
   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  <hausmann (a] kde.org>
   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  <mjs (a] apple.com>
   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  <darin (a] apple.com>
   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  <andersca (a] apple.com>
   31024 
   31025         Reviewed by Oliver.
   31026 
   31027         * wtf/Platform.h:
   31028         #define USE_PTHREADS on Mac.
   31029 
   31030 2007-10-17  Geoffrey Garen  <ggaren (a] apple.com>
   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  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   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  <mrowe (a] apple.com>
   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  <darin (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   31173 
   31174         Reviewed by Darin Adler.
   31175         
   31176         Global replace of assert with ASSERT.
   31177 
   31178 2007-10-16  Adam Roben  <aroben (a] apple.com>
   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  <aroben (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   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  <darin (a] apple.com>
   31252 
   31253         - try to fix the GTK build
   31254 
   31255         * kjs/ustring.cpp: Include ASCIICType.h.
   31256 
   31257 2007-10-16  Darin Adler  <darin (a] apple.com>
   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  <mjs (a] apple.com>
   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  <ggaren (a] apple.com>
   31294 
   31295         Removed unnecessary #include.
   31296 
   31297         * API/JSObjectRef.cpp:
   31298 
   31299 2007-10-15  Geoffrey Garen  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   31307 
   31308         Build fix.
   31309 
   31310         * kjs/nodes.cpp:
   31311         (NumberNode::evaluate):
   31312 
   31313 2007-10-15  Geoffrey Garen  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <ggaren (a] apple.com>
   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  <hausmann (a] kde.org>
   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  <kevino (a] theolliviers.com>
   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  <cwzwarich (a] uwaterloo.ca>
   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  <jason (a] threeve.org>
   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 ==
   31483