Changeset 36244 in webkit


Ignore:
Timestamp:
Sep 6, 2008 10:44:58 PM (16 years ago)
Author:
mrowe@apple.com
Message:

Merge squirrelfish-extreme to trunk.

Location:
trunk
Files:
17 added
45 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r36130 r36244  
     1=== End merge of squirrelfish-extreme ===
     2
     32008-09-06  Gavin Barraclough  <barraclough@apple.com>
     4
     5        Reviewed by Sam Weinig. Adapted somewhat by Maciej Stachowiak.
     6       
     7        - refactor WREC to share more of the JIT infrastructure with CTI
     8
     9        * VM/CTI.cpp:
     10        (KJS::CTI::emitGetArg):
     11        (KJS::CTI::emitGetPutArg):
     12        (KJS::CTI::emitPutArg):
     13        (KJS::CTI::emitPutArgConstant):
     14        (KJS::CTI::emitPutCTIParam):
     15        (KJS::CTI::emitGetCTIParam):
     16        (KJS::CTI::emitPutToCallFrameHeader):
     17        (KJS::CTI::emitGetFromCallFrameHeader):
     18        (KJS::CTI::emitPutResult):
     19        (KJS::CTI::emitDebugExceptionCheck):
     20        (KJS::CTI::emitJumpSlowCaseIfNotImm):
     21        (KJS::CTI::emitJumpSlowCaseIfNotImms):
     22        (KJS::CTI::emitFastArithDeTagImmediate):
     23        (KJS::CTI::emitFastArithReTagImmediate):
     24        (KJS::CTI::emitFastArithPotentiallyReTagImmediate):
     25        (KJS::CTI::emitFastArithImmToInt):
     26        (KJS::CTI::emitFastArithIntToImmOrSlowCase):
     27        (KJS::CTI::emitFastArithIntToImmNoCheck):
     28        (KJS::CTI::CTI):
     29        (KJS::CTI::compileOpCall):
     30        (KJS::CTI::privateCompileMainPass):
     31        (KJS::CTI::privateCompileSlowCases):
     32        (KJS::CTI::privateCompile):
     33        (KJS::CTI::privateCompileGetByIdSelf):
     34        (KJS::CTI::privateCompileGetByIdProto):
     35        (KJS::CTI::privateCompileGetByIdChain):
     36        (KJS::CTI::privateCompilePutByIdReplace):
     37        (KJS::CTI::privateArrayLengthTrampoline):
     38        (KJS::CTI::privateStringLengthTrampoline):
     39        (KJS::CTI::compileRegExp):
     40        * VM/CTI.h:
     41        (KJS::CallRecord::CallRecord):
     42        (KJS::JmpTable::JmpTable):
     43        (KJS::SlowCaseEntry::SlowCaseEntry):
     44        (KJS::CTI::JSRInfo::JSRInfo):
     45        * kjs/regexp.cpp:
     46        (KJS::RegExp::RegExp):
     47        * wrec/WREC.cpp:
     48        (KJS::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor):
     49        (KJS::GeneratePatternCharacterFunctor::generateAtom):
     50        (KJS::GeneratePatternCharacterFunctor::backtrack):
     51        (KJS::GenerateCharacterClassFunctor::generateAtom):
     52        (KJS::GenerateCharacterClassFunctor::backtrack):
     53        (KJS::GenerateBackreferenceFunctor::generateAtom):
     54        (KJS::GenerateBackreferenceFunctor::backtrack):
     55        (KJS::GenerateParenthesesNonGreedyFunctor::generateAtom):
     56        (KJS::GenerateParenthesesNonGreedyFunctor::backtrack):
     57        (KJS::WRECGenerate::generateBacktrack1):
     58        (KJS::WRECGenerate::generateBacktrackBackreference):
     59        (KJS::WRECGenerate::generateBackreferenceQuantifier):
     60        (KJS::WRECGenerate::generateNonGreedyQuantifier):
     61        (KJS::WRECGenerate::generateGreedyQuantifier):
     62        (KJS::WRECGenerate::generatePatternCharacter):
     63        (KJS::WRECGenerate::generateCharacterClassInvertedRange):
     64        (KJS::WRECGenerate::generateCharacterClassInverted):
     65        (KJS::WRECGenerate::generateCharacterClass):
     66        (KJS::WRECGenerate::generateParentheses):
     67        (KJS::WRECGenerate::generateParenthesesNonGreedy):
     68        (KJS::WRECGenerate::gererateParenthesesResetTrampoline):
     69        (KJS::WRECGenerate::generateAssertionBOL):
     70        (KJS::WRECGenerate::generateAssertionEOL):
     71        (KJS::WRECGenerate::generateAssertionWordBoundary):
     72        (KJS::WRECGenerate::generateBackreference):
     73        (KJS::WRECGenerate::gernerateDisjunction):
     74        (KJS::WRECGenerate::terminateDisjunction):
     75        (KJS::WRECParser::parseGreedyQuantifier):
     76        (KJS::WRECParser::parseQuantifier):
     77        (KJS::WRECParser::parsePatternCharacterQualifier):
     78        (KJS::WRECParser::parseCharacterClassQuantifier):
     79        (KJS::WRECParser::parseBackreferenceQuantifier):
     80        (KJS::WRECParser::parseParentheses):
     81        (KJS::WRECParser::parseCharacterClass):
     82        (KJS::WRECParser::parseOctalEscape):
     83        (KJS::WRECParser::parseEscape):
     84        (KJS::WRECParser::parseTerm):
     85        (KJS::WRECParser::parseDisjunction):
     86        * wrec/WREC.h:
     87        (KJS::WRECGenerate::WRECGenerate):
     88        (KJS::WRECParser::):
     89        (KJS::WRECParser::WRECParser):
     90        (KJS::WRECParser::parseAlternative):
     91        (KJS::WRECParser::isEndOfPattern):
     92
     932008-09-06  Oliver Hunt  <oliver@apple.com>
     94
     95        Reviewed by NOBODY (Build fix).
     96
     97        Fix the sampler build.
     98
     99        * VM/SamplingTool.h:
     100
     1012008-09-06  Oliver Hunt  <oliver@apple.com>
     102
     103        Reviewed by Maciej Stachowiak.
     104
     105        Jump through the necessary hoops required to make MSVC cooperate with SFX
     106
     107        We now explicitly declare the calling convention on all cti_op_* cfunctions,
     108        and return int instead of bool where appropriate (despite the cdecl calling
     109        convention seems to state MSVC generates code that returns the result value
     110        through ecx).  SFX behaves slightly differently under MSVC, specifically it
     111        stores the base argument address for the cti_op_* functions in the first
     112        argument, and then does the required stack manipulation through that pointer.
     113        This is necessary as MSVC's optimisations assume they have complete control
     114        of the stack, and periodically elide our stack manipulations, or move
     115        values in unexpected ways.  MSVC also frequently produces tail calls which may
     116        clobber the first argument, so the MSVC path is slightly less efficient due
     117        to the need to restore it.
     118
     119        * JavaScriptCore.xcodeproj/project.pbxproj:
     120        * VM/CTI.cpp:
     121        (KJS::):
     122        (KJS::CTI::compileOpCall):
     123        (KJS::CTI::privateCompileMainPass):
     124        (KJS::CTI::privateCompileSlowCases):
     125        * VM/CTI.h:
     126        * VM/Machine.cpp:
     127        * VM/Machine.h:
     128        * masm/MacroAssembler.h:
     129        (KJS::MacroAssembler::emitConvertToFastCall):
     130        * masm/MacroAssemblerIA32GCC.cpp: Removed.
     131           For performance reasons we need these no-op functions to be inlined.
     132
     133        * masm/MacroAssemblerWin.cpp:
     134        (KJS::MacroAssembler::emitRestoreArgumentReference):
     135        * wtf/Platform.h:
     136
     1372008-09-05  Geoffrey Garen  <ggaren@apple.com>
     138
     139        Reviewed by Maciej Stachowiak, or maybe the other way around.
     140       
     141        Added the ability to coalesce JITCode buffer grow operations by first
     142        growing the buffer and then executing unchecked puts to it.
     143       
     144        About a 2% speedup on date-format-tofte.
     145
     146        * VM/CTI.cpp:
     147        (KJS::CTI::compileOpCall):
     148        * masm/IA32MacroAsm.h:
     149        (KJS::JITCodeBuffer::ensureSpace):
     150        (KJS::JITCodeBuffer::putByteUnchecked):
     151        (KJS::JITCodeBuffer::putByte):
     152        (KJS::JITCodeBuffer::putShortUnchecked):
     153        (KJS::JITCodeBuffer::putShort):
     154        (KJS::JITCodeBuffer::putIntUnchecked):
     155        (KJS::JITCodeBuffer::putInt):
     156        (KJS::IA32MacroAssembler::emitTestl_i32r):
     157        (KJS::IA32MacroAssembler::emitMovl_mr):
     158        (KJS::IA32MacroAssembler::emitMovl_rm):
     159        (KJS::IA32MacroAssembler::emitMovl_i32m):
     160        (KJS::IA32MacroAssembler::emitUnlinkedJe):
     161        (KJS::IA32MacroAssembler::emitModRm_rr):
     162        (KJS::IA32MacroAssembler::emitModRm_rr_Unchecked):
     163        (KJS::IA32MacroAssembler::emitModRm_rm_Unchecked):
     164        (KJS::IA32MacroAssembler::emitModRm_rm):
     165        (KJS::IA32MacroAssembler::emitModRm_opr):
     166        (KJS::IA32MacroAssembler::emitModRm_opr_Unchecked):
     167        (KJS::IA32MacroAssembler::emitModRm_opm_Unchecked):
     168
     1692008-09-05  Mark Rowe  <mrowe@apple.com>
     170
     171        Reviewed by Sam Weinig.
     172
     173        Disable WREC and CTI on platforms that we have not yet had a chance to test with.
     174
     175        * wtf/Platform.h:
     176
     1772008-09-05  Geoffrey Garen  <ggaren@apple.com>
     178
     179        Reviewed by Sam Weinig.
     180       
     181        Use jo instead of a mask compare when fetching array.length and
     182        string.length. 4% speedup on array.length / string.length torture
     183        test.
     184
     185        * VM/CTI.cpp:
     186        (KJS::CTI::privateArrayLengthTrampoline):
     187        (KJS::CTI::privateStringLengthTrampoline):
     188
     1892008-09-05  Geoffrey Garen  <ggaren@apple.com>
     190
     191        Reviewed by Sam Weinig.
     192
     193        Removed a CTI compilation pass by recording labels during bytecode
     194        generation. This is more to reduce complexity than it is to improve
     195        performance.
     196
     197        SunSpider reports no change.
     198
     199        CodeBlock now keeps a "labels" set, which holds the offsets of all the
     200        instructions that can be jumped to.
     201
     202        * VM/CTI.cpp: Nixed a pass.
     203
     204        * VM/CodeBlock.h: Added a "labels" set.
     205
     206        * VM/LabelID.h: No need for a special LableID for holding jump
     207        destinations, since the CodeBlock now knows all jump destinations.
     208
     209        * wtf/HashTraits.h: New hash traits to accomodate putting offset 0 in
     210        the set.
     211
     212        * kjs/nodes.cpp:
     213        (KJS::TryNode::emitCode): Emit a dummy label to record sret targets.
     214
     2152008-09-05  Mark Rowe  <mrowe@apple.com>
     216
     217        Reviewed by Oliver Hunt and Gavin Barraclough.
     218
     219        Move the JITCodeBuffer onto Machine and remove the static variables.
     220
     221        * VM/CTI.cpp: Initialize m_jit with the Machine's code buffer.
     222        * VM/Machine.cpp:
     223        (KJS::Machine::Machine): Allocate a JITCodeBuffer.
     224        * VM/Machine.h:
     225        * kjs/RegExpConstructor.cpp:
     226        (KJS::constructRegExp): Pass the ExecState through.
     227        * kjs/RegExpPrototype.cpp:
     228        (KJS::regExpProtoFuncCompile): Ditto.
     229        * kjs/StringPrototype.cpp:
     230        (KJS::stringProtoFuncMatch): Ditto.
     231        (KJS::stringProtoFuncSearch): Ditto.
     232        * kjs/nodes.cpp:
     233        (KJS::RegExpNode::emitCode): Compile the pattern at code generation time
     234        so that we have access to an ExecState.
     235        * kjs/nodes.h:
     236        (KJS::RegExpNode::):
     237        * kjs/nodes2string.cpp:
     238        * kjs/regexp.cpp:
     239        (KJS::RegExp::RegExp): Pass the ExecState through.
     240        (KJS::RegExp::create): Ditto.
     241        * kjs/regexp.h:
     242        * masm/IA32MacroAsm.h:
     243        (KJS::IA32MacroAssembler::IA32MacroAssembler): Reset the JITCodeBuffer when we are
     244        constructed.
     245        * wrec/WREC.cpp:
     246        (KJS::WRECompiler::compile): Retrieve the JITCodeBuffer from the Machine.
     247        * wrec/WREC.h:
     248
     2492008-09-05  Mark Rowe  <mrowe@apple.com>
     250
     251        Reviewed by Oliver Hunt and Gavin Barraclough.
     252
     253        Fix the build when CTI is disabled.
     254
     255        * VM/CodeBlock.cpp:
     256        (KJS::CodeBlock::~CodeBlock):
     257        * VM/CodeGenerator.cpp:
     258        (KJS::prepareJumpTableForStringSwitch):
     259        * VM/Machine.cpp:
     260        (KJS::Machine::Machine):
     261        (KJS::Machine::~Machine):
     262
     2632008-09-05  Gavin Barraclough  <barraclough@apple.com>
     264
     265        Reviewed by Mark Rowe.
     266
     267        Fix some windows abi issues.
     268
     269        * VM/CTI.cpp:
     270        (KJS::CTI::privateCompileMainPass):
     271        (KJS::CTI::privateCompileSlowCases):
     272        * VM/CTI.h:
     273        (KJS::CallRecord::CallRecord):
     274        (KJS::):
     275        * VM/Machine.cpp:
     276        (KJS::Machine::cti_op_resolve_func):
     277        (KJS::Machine::cti_op_post_inc):
     278        (KJS::Machine::cti_op_resolve_with_base):
     279        (KJS::Machine::cti_op_post_dec):
     280        * VM/Machine.h:
     281
     2822008-09-05  Mark Rowe  <mrowe@apple.com>
     283
     284        Reviewed by Sam Weinig.
     285
     286        Fix ecma/FunctionObjects/15.3.5.3.js after I broke it in r93.
     287
     288        * VM/Machine.cpp:
     289        (KJS::Machine::cti_op_call_NotJSFunction): Restore m_callFrame to the correct value after making the native call.
     290        (KJS::Machine::cti_op_construct_NotJSConstruct): Ditto.
     291
     2922008-09-04  Mark Rowe  <mrowe@apple.com>
     293
     294        Reviewed by Sam Weinig.
     295
     296        Fix fast/dom/Window/console-functions.html.
     297
     298        The call frame on the ExecState was not being updated on calls into native functions.  This meant that functions
     299        such as console.log would use the line number of the last JS function on the call stack.
     300
     301        * VM/Machine.cpp:
     302        (KJS::Machine::cti_op_call_NotJSFunction): Update the ExecState's call frame before making a native function call,
     303        and restore it when the function is done.
     304        (KJS::Machine::cti_op_construct_NotJSConstruct): Ditto.
     305
     3062008-09-05  Oliver Hunt  <oliver@apple.com>
     307
     308        Start bringing up SFX on windows.
     309
     310        Reviewed by Mark Rowe and Sam Weinig
     311
     312        Start doing the work to bring up SFX on windows.  Initially
     313        just working on WREC, as it does not make any calls so reduces
     314        the amount of code that needs to be corrected.
     315       
     316        Start abstracting the CTI JIT codegen engine.
     317
     318        * ChangeLog:
     319        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
     320        * JavaScriptCore.xcodeproj/project.pbxproj:
     321        * VM/CTI.cpp:
     322        * masm/IA32MacroAsm.h:
     323        * masm/MacroAssembler.h: Added.
     324        (KJS::MacroAssembler::MacroAssembler):
     325        * masm/MacroAssemblerIA32GCC.cpp: Added.
     326        (KJS::MacroAssembler::emitConvertToFastCall):
     327        * masm/MacroAssemblerWin.cpp: Added.
     328        (KJS::MacroAssembler::emitConvertToFastCall):
     329        * wrec/WREC.cpp:
     330        (KJS::WRECompiler::parseGreedyQuantifier):
     331        (KJS::WRECompiler::parseCharacterClass):
     332        (KJS::WRECompiler::parseEscape):
     333        (KJS::WRECompiler::compilePattern):
     334        * wrec/WREC.h:
     335
     3362008-09-04  Gavin Barraclough  <barraclough@apple.com>
     337
     338        Reviewed by Sam Weinig.
     339
     340        Support for slow scripts (timeout checking).
     341
     342        * VM/CTI.cpp:
     343        (KJS::CTI::privateCompileMainPass):
     344        (KJS::CTI::privateCompile):
     345        * VM/Machine.cpp:
     346        (KJS::slideRegisterWindowForCall):
     347        (KJS::Machine::cti_timeout_check):
     348        (KJS::Machine::cti_vm_throw):
     349
     3502008-09-04  Sam Weinig  <sam@webkit.org>
     351
     352        Reviewed by Mark Rowe.
     353
     354        Third round of style cleanup.
     355
     356        * VM/CTI.cpp:
     357        * VM/CTI.h:
     358        * VM/CodeBlock.h:
     359        * VM/Machine.cpp:
     360        * VM/Machine.h:
     361        * kjs/ExecState.h:
     362
     3632008-09-04  Sam Weinig  <sam@webkit.org>
     364
     365        Reviewed by Jon Honeycutt.
     366
     367        Second round of style cleanup.
     368
     369        * VM/CTI.cpp:
     370        * VM/CTI.h:
     371        * wrec/WREC.h:
     372
     3732008-09-04  Sam Weinig  <sam@webkit.org>
     374
     375        Reviewed by Mark Rowe.
     376
     377        First round of style cleanup.
     378
     379        * VM/CTI.cpp:
     380        * VM/CTI.h:
     381        * masm/IA32MacroAsm.h:
     382        * wrec/WREC.cpp:
     383        * wrec/WREC.h:
     384
     3852008-09-04  Geoffrey Garen  <ggaren@apple.com>
     386
     387        Reviewed by Mark Rowe.
     388       
     389        Merged http://trac.webkit.org/changeset/36081 to work with CTI.
     390
     391        * VM/Machine.cpp:
     392        (KJS::Machine::tryCtiCacheGetByID):
     393
     3942008-09-04  Gavin Barraclough  <barraclough@apple.com>
     395
     396        Reviewed by Sam Weinig.
     397
     398        Enable profiling in CTI.
     399
     400        * VM/CTI.h:
     401        (KJS::):
     402        (KJS::CTI::execute):
     403        * VM/Machine.cpp:
     404        (KJS::Machine::cti_op_call_JSFunction):
     405        (KJS::Machine::cti_op_call_NotJSFunction):
     406        (KJS::Machine::cti_op_ret):
     407        (KJS::Machine::cti_op_construct_JSConstruct):
     408        (KJS::Machine::cti_op_construct_NotJSConstruct):
     409
     4102008-09-04  Victor Hernandez  <vhernandez@apple.com>
     411
     412        Reviewed by Geoffrey Garen.
     413       
     414        Fixed an #if to support using WREC without CTI.
     415
     416        * kjs/regexp.cpp:
     417        (KJS::RegExp::match):
     418
     4192008-09-04  Gavin Barraclough  <barraclough@apple.com>
     420
     421        Reviewed by Oliver Hunt.
     422
     423        The array/string length trampolines are owned by the Machine, not the codeblock that compiled them.
     424
     425        * VM/CTI.cpp:
     426        (KJS::CTI::privateArrayLengthTrampoline):
     427        (KJS::CTI::privateStringLengthTrampoline):
     428        * VM/Machine.cpp:
     429        (KJS::Machine::~Machine):
     430        * VM/Machine.h:
     431
     4322008-09-04  Mark Rowe  <mrowe@apple.com>
     433
     434        Reviewed by Gavin Barraclough and Sam Weinig.
     435
     436        Fix a crash on launch of jsc when GuardMalloc is enabled.
     437
     438        * kjs/ScopeChain.h:
     439        (KJS::ScopeChain::ScopeChain): Initialize m_node to 0 when we have no valid scope chain.
     440        (KJS::ScopeChain::~ScopeChain): Null-check m_node before calling deref.
     441
     4422008-09-03  Oliver Hunt  <oliver@apple.com>
     443
     444        Reviewed by Gavin Barraclough and Geoff Garen.
     445
     446        Fix inspector and fast array access so that it bounds
     447        checks correctly.
     448
     449        * VM/CTI.cpp:
     450        (KJS::CTI::privateCompile_pass2_Main):
     451        * masm/IA32MacroAsm.h:
     452        (KJS::IA32MacroAssembler::):
     453        (KJS::IA32MacroAssembler::emitUnlinkedJb):
     454        (KJS::IA32MacroAssembler::emitUnlinkedJbe):
     455
     4562008-09-03  Mark Rowe  <mrowe@apple.com>
     457
     458        Move the assertion after the InitializeAndReturn block, as
     459        that is used even when CTI is enabled.
     460
     461        * VM/Machine.cpp:
     462        (KJS::Machine::privateExecute):
     463
     4642008-09-03  Mark Rowe  <mrowe@apple.com>
     465
     466        Reviewed by Sam Weinig.
     467
     468        Replace calls to exit with ASSERT_WITH_MESSAGE or ASSERT_NOT_REACHED.
     469
     470        * VM/CTI.cpp:
     471        (KJS::CTI::privateCompile_pass1_Scan):
     472        (KJS::CTI::privateCompile_pass2_Main):
     473        (KJS::CTI::privateCompile_pass4_SlowCases):
     474        * VM/Machine.cpp:
     475        (KJS::Machine::privateExecute):
     476        (KJS::Machine::cti_vm_throw):
     477
     4782008-09-03  Mark Rowe  <mrowe@apple.com>
     479
     480        Reviewed by Sam Weinig.
     481
     482        Tweak JavaScriptCore to compile on non-x86 platforms.  This is achieved
     483        by wrapping more code with ENABLE(CTI), ENABLE(WREC), and PLATFORM(X86)
     484        #if's.
     485
     486        * VM/CTI.cpp:
     487        * VM/CTI.h:
     488        * VM/CodeBlock.cpp:
     489        (KJS::CodeBlock::printStructureIDs): Use %td as the format specifier for
     490        printing a ptrdiff_t.
     491        * VM/Machine.cpp:
     492        * VM/Machine.h:
     493        * kjs/regexp.cpp:
     494        (KJS::RegExp::RegExp):
     495        (KJS::RegExp::~RegExp):
     496        (KJS::RegExp::match):
     497        * kjs/regexp.h:
     498        * masm/IA32MacroAsm.h:
     499        * wrec/WREC.cpp:
     500        * wrec/WREC.h:
     501        * wtf/Platform.h: Only enable CTI and WREC on x86.  Add an extra define to
     502        track whether any MASM-using features are enabled.
     503
     5042008-09-03  Gavin Barraclough  <barraclough@apple.com>
     505
     506        Reviewed by Oliver Hunt.
     507
     508        Copy Geoff's array/string length optimization for CTI.
     509
     510        * VM/CTI.cpp:
     511        (KJS::CTI::privateArrayLengthTrampoline):
     512        (KJS::CTI::privateStringLengthTrampoline):
     513        * VM/CTI.h:
     514        (KJS::CTI::compileArrayLengthTrampoline):
     515        (KJS::CTI::compileStringLengthTrampoline):
     516        * VM/Machine.cpp:
     517        (KJS::Machine::Machine):
     518        (KJS::Machine::getCtiArrayLengthTrampoline):
     519        (KJS::Machine::getCtiStringLengthTrampoline):
     520        (KJS::Machine::tryCtiCacheGetByID):
     521        (KJS::Machine::cti_op_get_by_id_second):
     522        * VM/Machine.h:
     523        * kjs/JSString.h:
     524        * kjs/ustring.h:
     525
     5262008-09-03  Gavin Barraclough  <barraclough@apple.com>
     527
     528        Reviewed by Oliver Hunt.
     529
     530        Implement fast array accesses in CTI - 2-3% progression on sunspider.
     531
     532        * VM/CTI.cpp:
     533        (KJS::CTI::emitFastArithIntToImmNoCheck):
     534        (KJS::CTI::compileOpCall):
     535        (KJS::CTI::privateCompile_pass2_Main):
     536        (KJS::CTI::privateCompile_pass4_SlowCases):
     537        * VM/CTI.h:
     538        * kjs/JSArray.h:
     539
     5402008-09-02  Gavin Barraclough  <barraclough@apple.com>
     541
     542        Reviewed by Oliver Hunt.
     543
     544        Enable fast property access support in CTI.
     545
     546        * VM/CTI.cpp:
     547        (KJS::ctiSetReturnAddress):
     548        (KJS::ctiRepatchCallByReturnAddress):
     549        (KJS::CTI::privateCompile_pass2_Main):
     550        (KJS::CTI::privateCompile):
     551        (KJS::CTI::privateCompileGetByIdSelf):
     552        (KJS::CTI::privateCompileGetByIdProto):
     553        (KJS::CTI::privateCompileGetByIdChain):
     554        (KJS::CTI::privateCompilePutByIdReplace):
     555        * VM/CTI.h:
     556        (KJS::CTI::compileGetByIdSelf):
     557        (KJS::CTI::compileGetByIdProto):
     558        (KJS::CTI::compileGetByIdChain):
     559        (KJS::CTI::compilePutByIdReplace):
     560        * VM/CodeBlock.cpp:
     561        (KJS::CodeBlock::~CodeBlock):
     562        * VM/CodeBlock.h:
     563        * VM/Machine.cpp:
     564        (KJS::doSetReturnAddressVmThrowTrampoline):
     565        (KJS::Machine::tryCtiCachePutByID):
     566        (KJS::Machine::tryCtiCacheGetByID):
     567        (KJS::Machine::cti_op_put_by_id):
     568        (KJS::Machine::cti_op_put_by_id_second):
     569        (KJS::Machine::cti_op_put_by_id_generic):
     570        (KJS::Machine::cti_op_put_by_id_fail):
     571        (KJS::Machine::cti_op_get_by_id):
     572        (KJS::Machine::cti_op_get_by_id_second):
     573        (KJS::Machine::cti_op_get_by_id_generic):
     574        (KJS::Machine::cti_op_get_by_id_fail):
     575        (KJS::Machine::cti_op_throw):
     576        (KJS::Machine::cti_vm_throw):
     577        * VM/Machine.h:
     578        * kjs/JSCell.h:
     579        * kjs/JSObject.h:
     580        * kjs/PropertyMap.h:
     581        * kjs/StructureID.cpp:
     582        (KJS::StructureIDChain::StructureIDChain):
     583        * masm/IA32MacroAsm.h:
     584        (KJS::IA32MacroAssembler::emitCmpl_i32m):
     585        (KJS::IA32MacroAssembler::emitMovl_mr):
     586        (KJS::IA32MacroAssembler::emitMovl_rm):
     587
     5882008-09-02  Sam Weinig  <sam@webkit.org>
     589
     590        Reviewed by Gavin Barraclough and Mark Rowe.
     591
     592        A backslash (\) at the of a RegEx should produce an error.
     593        Fixes fast/regex/test1.html.
     594
     595        * wrec/WREC.cpp:
     596        (KJS::WRECompiler::parseEscape):
     597
     5982008-09-02  Sam Weinig  <sam@webkit.org>
     599
     600        Reviewed by Geoff Garen.
     601
     602        Link jumps for the slow case of op_loop_if_less.  Fixes acid3.
     603
     604        * VM/CTI.cpp:
     605        (KJS::CTI::privateCompile_pass4_SlowCases):
     606
     6072008-09-01  Sam Weinig  <sam@webkit.org>
     608
     609        Rubber-stamped by Maciej Stachowiak.
     610
     611        Switch WREC on by default.
     612
     613        * wtf/Platform.h:
     614
     6152008-09-01  Sam Weinig  <sam@webkit.org>
     616
     617        Reviewed by Mark Rowe.
     618
     619        Fix two failures in fast/regex/test1.html
     620          - \- in a character class should be treated as a literal -
     621          - A missing max quantifier needs to be treated differently than
     622            a null max quantifier.
     623
     624        * wrec/WREC.cpp:
     625        (KJS::WRECompiler::generateNonGreedyQuantifier):
     626        (KJS::WRECompiler::generateGreedyQuantifier):
     627        (KJS::WRECompiler::parseCharacterClass):
     628        * wrec/WREC.h:
     629        (KJS::Quantifier::Quantifier):
     630
     6312008-09-01  Sam Weinig  <sam@webkit.org>
     632
     633        Reviewed by Mark Rowe.
     634
     635        Fix crash in fast/js/kde/evil-n.html
     636
     637        * kjs/regexp.cpp: Always pass a non-null offset vector to the wrec function.
     638
     6392008-09-01  Sam Weinig  <sam@webkit.org>
     640
     641        Reviewed by Gavin Barraclough and Mark Rowe.
     642
     643        Add pattern length limit fixing one test in fast/js.
     644
     645        * wrec/WREC.cpp:
     646        (KJS::WRECompiler::compile):
     647        * wrec/WREC.h:
     648        (KJS::WRECompiler::):
     649
     6502008-09-01  Sam Weinig  <sam@webkit.org>
     651
     652        Reviewed by Gavin Barraclough and Mark Rowe.
     653
     654        Make octal escape parsing/back-reference parsing more closely match
     655        prior behavior fixing one test in fast/js.
     656
     657        * wrec/WREC.cpp:
     658        (KJS::WRECompiler::parseCharacterClass): 8 and 9 should be IdentityEscaped
     659        (KJS::WRECompiler::parseEscape):
     660        * wrec/WREC.h:
     661        (KJS::WRECompiler::peekDigit):
     662
     6632008-09-01  Sam Weinig  <sam@webkit.org>
     664
     665        Reviewed by Gavin Barraclough and Mark Rowe.
     666
     667        Fix one mozilla test.
     668
     669        * wrec/WREC.cpp:
     670        (KJS::WRECompiler::generateCharacterClassInverted): Fix incorrect not
     671        ascii upper check.
     672
     6732008-09-01  Sam Weinig  <sam@webkit.org>
     674
     675        Reviewed by Gavin Barraclough and Mark Rowe.
     676
     677        Parse octal escapes in character classes fixing one mozilla test.
     678
     679        * wrec/WREC.cpp:
     680        (KJS::WRECompiler::parseCharacterClass):
     681        (KJS::WRECompiler::parseOctalEscape):
     682        * wrec/WREC.h:
     683        (KJS::WRECompiler::consumeOctal):
     684
     6852008-09-01  Sam Weinig  <sam@webkit.org>
     686
     687        Reviewed by Oliver Hunt.
     688
     689        Fixes two mozilla tests with WREC enabled.
     690
     691        * wrec/WREC.cpp:
     692        (KJS::CharacterClassConstructor::append): Keep the character class sorted
     693        when appending another character class.
     694
     6952008-09-01  Sam Weinig  <sam@webkit.org>
     696
     697        Reviewed by Gavin Barraclough and Mark Rowe.
     698
     699        Fixes two mozilla tests with WREC enabled.
     700
     701        * wrec/WREC.cpp:
     702        (KJS::CharacterClassConstructor::addSortedRange): Insert the range at the correct position
     703        instead of appending it to the end.
     704
     7052008-09-01  Gavin Barraclough  <barraclough@apple.com>
     706
     707        Reviewed by Oliver Hunt.
     708
     709        Move cross-compilation unit call into NEVER_INLINE function.
     710
     711        * VM/Machine.cpp:
     712        (KJS::doSetReturnAddressVmThrowTrampoline):
     713
     7142008-09-01  Sam Weinig  <sam@webkit.org>
     715
     716        Reviewed by Gavin Barraclough and Geoff Garen.
     717
     718        Fix one test in fast/js.
     719
     720        * VM/Machine.cpp:
     721        (KJS::Machine::cti_op_construct_NotJSConstruct): Throw a createNotAConstructorError,
     722        instead of a createNotAFunctionError.
     723
     7242008-08-31  Gavin Barraclough  <barraclough@apple.com>
     725
     726        Reviewed by Maciej Stachowiak.
     727       
     728        Zero-cost exception handling.  This patch takes the exception checking
     729        back of the hot path.  When an exception occurs in a Machine::cti*
     730        method, the return address to JIT code is recorded, and is then
     731        overwritten with a pointer to a trampoline routine.  When the method
     732        returns the trampoline will cause the cti_vm_throw method to be invoked.
     733
     734        cti_vm_throw uses the return address preserved above, to discover the
     735        vPC of the bytecode that raised the exception (using a map build during
     736        translation).  From the VPC of the faulting bytecode the vPC of a catch
     737        routine may be discovered (unwinding the stack where necesary), and then
     738        a bytecode address for the catch routine is looked up.  Final cti_vm_throw
     739        overwrites its return address to JIT code again, to trampoline directly
     740        to the catch routine.
     741       
     742        cti_op_throw is handled in a similar fashion.
     743
     744        * VM/CTI.cpp:
     745        (KJS::CTI::emitPutCTIParam):
     746        (KJS::CTI::emitPutToCallFrameHeader):
     747        (KJS::CTI::emitGetFromCallFrameHeader):
     748        (KJS::ctiSetReturnAddressForArgs):
     749        (KJS::CTI::emitDebugExceptionCheck):
     750        (KJS::CTI::printOpcodeOperandTypes):
     751        (KJS::CTI::emitCall):
     752        (KJS::CTI::compileOpCall):
     753        (KJS::CTI::privateCompile_pass2_Main):
     754        (KJS::CTI::privateCompile):
     755        * VM/CTI.h:
     756        (KJS::CallRecord::CallRecord):
     757        (KJS::):
     758        (KJS::CTI::execute):
     759        * VM/CodeBlock.h:
     760        * VM/Machine.cpp:
     761        (KJS::Machine::privateExecute):
     762        (KJS::Machine::cti_op_instanceof):
     763        (KJS::Machine::cti_op_call_NotJSFunction):
     764        (KJS::Machine::cti_op_resolve):
     765        (KJS::Machine::cti_op_resolve_func):
     766        (KJS::Machine::cti_op_resolve_skip):
     767        (KJS::Machine::cti_op_resolve_with_base):
     768        (KJS::Machine::cti_op_throw):
     769        (KJS::Machine::cti_op_in):
     770        (KJS::Machine::cti_vm_throw):
     771        * VM/RegisterFile.h:
     772        (KJS::RegisterFile::):
     773        * kjs/ExecState.h:
     774        (KJS::ExecState::setCtiReturnAddress):
     775        (KJS::ExecState::ctiReturnAddress):
     776        * masm/IA32MacroAsm.h:
     777        (KJS::IA32MacroAssembler::):
     778        (KJS::IA32MacroAssembler::emitPushl_m):
     779        (KJS::IA32MacroAssembler::emitPopl_m):
     780        (KJS::IA32MacroAssembler::getRelocatedAddress):
     781
     7822008-08-31  Mark Rowe  <mrowe@apple.com>
     783
     784        Reviewed by Oliver Hunt.
     785
     786        Fall back to PCRE for any regexp containing parentheses until we correctly backtrack within them.
     787
     788        * wrec/WREC.cpp:
     789        (KJS::WRECompiler::parseParentheses):
     790        * wrec/WREC.h:
     791        (KJS::WRECompiler::):
     792
     7932008-08-31  Mark Rowe  <mrowe@apple.com>
     794
     795        Reviewed by Oliver Hunt.
     796
     797        Fix several issues within ecma_3/RegExp/perlstress-001.js with WREC enabled.
     798
     799        * wrec/WREC.cpp:
     800        (KJS::WRECompiler::generateNonGreedyQuantifier): Compare with the maximum quantifier count rather than the minimum.
     801        (KJS::WRECompiler::generateAssertionEOL): Do a register-to-register comparison rather than immediate-to-register.
     802        (KJS::WRECompiler::parseCharacterClass): Pass through the correct inversion flag.
     803
     8042008-08-30  Mark Rowe  <mrowe@apple.com>
     805
     806        Reviewed by Oliver Hunt.
     807
     808        Re-fix the six remaining failures in the Mozilla JavaScript tests in a manner that does not kill performance.
     809        This shows up as a 0.6% progression on SunSpider on my machine.
     810
     811        Grow the JITCodeBuffer's underlying buffer when we run out of space rather than just bailing out.
     812
     813        * VM/CodeBlock.h:
     814        (KJS::CodeBlock::~CodeBlock): Switch to using fastFree now that JITCodeBuffer::copy uses fastMalloc.
     815        * kjs/regexp.cpp: Ditto.
     816        * masm/IA32MacroAsm.h:
     817        (KJS::JITCodeBuffer::growBuffer):
     818        (KJS::JITCodeBuffer::JITCodeBuffer):
     819        (KJS::JITCodeBuffer::~JITCodeBuffer):
     820        (KJS::JITCodeBuffer::putByte):
     821        (KJS::JITCodeBuffer::putShort):
     822        (KJS::JITCodeBuffer::putInt):
     823        (KJS::JITCodeBuffer::reset):
     824        (KJS::JITCodeBuffer::copy):
     825
     8262008-08-29  Oliver Hunt  <oliver@apple.com>
     827
     828        RS=Maciej
     829
     830        Roll out previous patch as it causes a 5% performance regression
     831
     832        * JavaScriptCore.xcodeproj/project.pbxproj:
     833        * VM/CTI.cpp:
     834        (KJS::getJCB):
     835        (KJS::CTI::privateCompile):
     836        * VM/CodeBlock.h:
     837        (KJS::CodeBlock::~CodeBlock):
     838        * masm/IA32MacroAsm.h:
     839        (KJS::JITCodeBuffer::JITCodeBuffer):
     840        (KJS::JITCodeBuffer::putByte):
     841        (KJS::JITCodeBuffer::putShort):
     842        (KJS::JITCodeBuffer::putInt):
     843        (KJS::JITCodeBuffer::getEIP):
     844        (KJS::JITCodeBuffer::start):
     845        (KJS::JITCodeBuffer::getOffset):
     846        (KJS::JITCodeBuffer::reset):
     847        (KJS::JITCodeBuffer::copy):
     848        (KJS::IA32MacroAssembler::emitModRm_rr):
     849        (KJS::IA32MacroAssembler::emitModRm_rm):
     850        (KJS::IA32MacroAssembler::emitModRm_rmsib):
     851        (KJS::IA32MacroAssembler::IA32MacroAssembler):
     852        (KJS::IA32MacroAssembler::emitInt3):
     853        (KJS::IA32MacroAssembler::emitPushl_r):
     854        (KJS::IA32MacroAssembler::emitPopl_r):
     855        (KJS::IA32MacroAssembler::emitMovl_rr):
     856        (KJS::IA32MacroAssembler::emitAddl_rr):
     857        (KJS::IA32MacroAssembler::emitAddl_i8r):
     858        (KJS::IA32MacroAssembler::emitAddl_i32r):
     859        (KJS::IA32MacroAssembler::emitAddl_mr):
     860        (KJS::IA32MacroAssembler::emitAndl_rr):
     861        (KJS::IA32MacroAssembler::emitAndl_i32r):
     862        (KJS::IA32MacroAssembler::emitCmpl_i8r):
     863        (KJS::IA32MacroAssembler::emitCmpl_rr):
     864        (KJS::IA32MacroAssembler::emitCmpl_rm):
     865        (KJS::IA32MacroAssembler::emitCmpl_i32r):
     866        (KJS::IA32MacroAssembler::emitCmpl_i32m):
     867        (KJS::IA32MacroAssembler::emitCmpw_rm):
     868        (KJS::IA32MacroAssembler::emitOrl_rr):
     869        (KJS::IA32MacroAssembler::emitOrl_i8r):
     870        (KJS::IA32MacroAssembler::emitSubl_rr):
     871        (KJS::IA32MacroAssembler::emitSubl_i8r):
     872        (KJS::IA32MacroAssembler::emitSubl_i32r):
     873        (KJS::IA32MacroAssembler::emitSubl_mr):
     874        (KJS::IA32MacroAssembler::emitTestl_i32r):
     875        (KJS::IA32MacroAssembler::emitTestl_rr):
     876        (KJS::IA32MacroAssembler::emitXorl_i8r):
     877        (KJS::IA32MacroAssembler::emitXorl_rr):
     878        (KJS::IA32MacroAssembler::emitSarl_i8r):
     879        (KJS::IA32MacroAssembler::emitSarl_CLr):
     880        (KJS::IA32MacroAssembler::emitShl_i8r):
     881        (KJS::IA32MacroAssembler::emitShll_CLr):
     882        (KJS::IA32MacroAssembler::emitMull_rr):
     883        (KJS::IA32MacroAssembler::emitIdivl_r):
     884        (KJS::IA32MacroAssembler::emitCdq):
     885        (KJS::IA32MacroAssembler::emitMovl_mr):
     886        (KJS::IA32MacroAssembler::emitMovzwl_mr):
     887        (KJS::IA32MacroAssembler::emitMovl_rm):
     888        (KJS::IA32MacroAssembler::emitMovl_i32r):
     889        (KJS::IA32MacroAssembler::emitMovl_i32m):
     890        (KJS::IA32MacroAssembler::emitLeal_mr):
     891        (KJS::IA32MacroAssembler::emitRet):
     892        (KJS::IA32MacroAssembler::emitJmpN_r):
     893        (KJS::IA32MacroAssembler::emitJmpN_m):
     894        (KJS::IA32MacroAssembler::emitCall):
     895        (KJS::IA32MacroAssembler::label):
     896        (KJS::IA32MacroAssembler::emitUnlinkedJmp):
     897        (KJS::IA32MacroAssembler::emitUnlinkedJne):
     898        (KJS::IA32MacroAssembler::emitUnlinkedJe):
     899        (KJS::IA32MacroAssembler::emitUnlinkedJl):
     900        (KJS::IA32MacroAssembler::emitUnlinkedJle):
     901        (KJS::IA32MacroAssembler::emitUnlinkedJge):
     902        (KJS::IA32MacroAssembler::emitUnlinkedJae):
     903        (KJS::IA32MacroAssembler::emitUnlinkedJo):
     904        (KJS::IA32MacroAssembler::link):
     905        * wrec/WREC.cpp:
     906        (KJS::WRECompiler::compilePattern):
     907        (KJS::WRECompiler::compile):
     908        * wrec/WREC.h:
     909
     9102008-08-29  Mark Rowe  <mrowe@apple.com>
     911
     912        Reviewed by Oliver Hunt.
     913
     914        Have JITCodeBuffer manage a Vector containing the generated code so that it can grow
     915        as needed when generating code for a large function.  This fixes all six remaining failures
     916        in Mozilla tests in both debug and release builds.
     917
     918        * VM/CTI.cpp:
     919        (KJS::CTI::privateCompile):
     920        * VM/CodeBlock.h:
     921        (KJS::CodeBlock::~CodeBlock):
     922        * masm/IA32MacroAsm.h:
     923        (KJS::JITCodeBuffer::putByte):
     924        (KJS::JITCodeBuffer::putShort):
     925        (KJS::JITCodeBuffer::putInt):
     926        (KJS::JITCodeBuffer::getEIP):
     927        (KJS::JITCodeBuffer::start):
     928        (KJS::JITCodeBuffer::getOffset):
     929        (KJS::JITCodeBuffer::getCode):
     930        (KJS::IA32MacroAssembler::emitModRm_rr):
     931        * wrec/WREC.cpp:
     932        (KJS::WRECompiler::compilePattern):
     933        * wrec/WREC.h:
     934
     9352008-08-29  Mark Rowe  <mrowe@apple.com>
     936
     937        Reviewed by Oliver Hunt.
     938
     939        Implement parsing of octal escapes in regular expressions.  This fixes three Mozilla tests.
     940
     941        * wrec/WREC.cpp:
     942        (KJS::WRECompiler::parseOctalEscape):
     943        (KJS::WRECompiler::parseEscape): Parse the escape sequence as an octal escape if it has a leading zero.
     944        Add a FIXME about treating invalid backreferences as octal escapes in the future.
     945        * wrec/WREC.h:
     946        (KJS::WRECompiler::consumeNumber): Multiply by 10 rather than 0 so that we handle numbers with more than
     947        one digit.
     948        * wtf/ASCIICType.h:
     949        (WTF::isASCIIOctalDigit):
     950
     9512008-08-29  Sam Weinig  <sam@webkit.org>
     952
     953        Reviewed by Mark Rowe.
     954
     955        Pass vPC to instanceof method.  Fixes 2 mozilla tests in debug.
     956
     957        * VM/CTI.cpp:
     958        (KJS::CTI::privateCompile_pass2_Main):
     959        * VM/Machine.cpp:
     960        (KJS::Machine::cti_op_instanceof):
     961
     9622008-08-29  Sam Weinig  <sam@webkit.org>
     963
     964        Reviewed by Mark Rowe.
     965
     966        Pass vPCs to resolve methods for correct exception creation.  Fixes
     967        17 mozilla tests in debug.
     968
     969        * VM/CTI.cpp:
     970        (KJS::CTI::privateCompile_pass2_Main):
     971        * VM/CTI.h:
     972        * VM/Machine.cpp:
     973        (KJS::Machine::cti_op_resolve):
     974        (KJS::Machine::cti_op_resolve_func):
     975        (KJS::Machine::cti_op_resolve_skip):
     976        (KJS::Machine::cti_op_resolve_with_base):
     977
     9782008-08-29  Gavin Barraclough  <barraclough@apple.com>
     979
     980        Reviewed by Oliver Hunt.
     981
     982        Remembering to actually throw the exception passed to op throw helps.
     983        Regressions 19 -> 6.
     984
     985        * VM/Machine.cpp:
     986        (KJS::Machine::cti_op_throw):
     987        (KJS::Machine::cti_vm_throw):
     988
     9892008-08-29  Gavin Barraclough  <barraclough@apple.com>
     990
     991        Reviewed by Sam Weinig.
     992
     993        Support for exception unwinding the stack.
     994       
     995        Once upon a time, Sam asked me for a bettr ChangeLog entry.  The return address
     996        is now preserved on entry to a JIT code function (if we preserve lazily we need
     997        restore the native return address during exception stack unwind).  This takes
     998        the number of regressions down from ~150 to 19.
     999
     1000        * VM/CTI.cpp:
     1001        (KJS::getJCB):
     1002        (KJS::CTI::emitExceptionCheck):
     1003        (KJS::CTI::compileOpCall):
     1004        (KJS::CTI::privateCompile_pass2_Main):
     1005        (KJS::CTI::privateCompile):
     1006        * VM/CTI.h:
     1007        (KJS::):
     1008        * VM/Machine.cpp:
     1009        (KJS::Machine::throwException):
     1010        (KJS::Machine::cti_op_call_JSFunction):
     1011        (KJS::Machine::cti_op_call_NotJSFunction):
     1012        (KJS::Machine::cti_op_construct_JSConstruct):
     1013        (KJS::Machine::cti_op_construct_NotJSConstruct):
     1014        (KJS::Machine::cti_op_throw):
     1015        (KJS::Machine::cti_vm_throw):
     1016
     10172008-08-29  Mark Rowe  <mrowe@apple.com>
     1018
     1019        Reviewed by Oliver Hunt.
     1020
     1021        Fix js1_2/regexp/word_boundary.js and four other Mozilla tests with WREC enabled.
     1022
     1023        * wrec/WREC.cpp:
     1024        (KJS::WRECompiler::generateCharacterClassInvertedRange): If none of the exact matches
     1025        succeeded, jump to failure.
     1026        (KJS::WRECompiler::compilePattern): Restore and increment the current position stored
     1027        on the stack to ensure that it will be reset to the correct position after a failed
     1028        match has consumed input.
     1029
     10302008-08-29  Mark Rowe  <mrowe@apple.com>
     1031
     1032        Reviewed by Oliver Hunt.
     1033
     1034        Fix a hang in ecma_3/RegExp/15.10.2-1.js with WREC enabled.
     1035        A backreference with a quantifier would get stuck in an infinite
     1036        loop if the captured range was empty.
     1037
     1038        * wrec/WREC.cpp:
     1039        (KJS::WRECompiler::generateBackreferenceQuantifier): If the captured range
     1040        was empty, do not attempt to match the backreference.
     1041        (KJS::WRECompiler::parseBackreferenceQuantifier):
     1042        * wrec/WREC.h:
     1043        (KJS::Quantifier::):
     1044
     10452008-08-28  Sam Weinig  <sam@webkit.org>
     1046
     1047        Reviewed by Oliver Hunt.
     1048
     1049        Implement op_debug.
     1050
     1051        * VM/CTI.cpp:
     1052        (KJS::CTI::privateCompile_pass1_Scan):
     1053        (KJS::CTI::privateCompile_pass2_Main):
     1054        * VM/Machine.cpp:
     1055        (KJS::Machine::debug):
     1056        (KJS::Machine::privateExecute):
     1057        (KJS::Machine::cti_op_debug):
     1058        * VM/Machine.h:
     1059
     10602008-08-28  Sam Weinig  <sam@webkit.org>
     1061
     1062        Reviewed by Gavin Barraclough and Geoff Garen.
     1063
     1064        Implement op_switch_string fixing 1 mozilla test and one test in fast/js.
     1065
     1066        * VM/CTI.cpp:
     1067        (KJS::CTI::privateCompile_pass1_Scan):
     1068        (KJS::CTI::privateCompile_pass2_Main):
     1069        (KJS::CTI::privateCompile):
     1070        * VM/CTI.h:
     1071        (KJS::SwitchRecord::):
     1072        (KJS::SwitchRecord::SwitchRecord):
     1073        * VM/CodeBlock.cpp:
     1074        (KJS::CodeBlock::dump):
     1075        * VM/CodeBlock.h:
     1076        (KJS::ExpressionRangeInfo::):
     1077        (KJS::StringJumpTable::offsetForValue):
     1078        (KJS::StringJumpTable::ctiForValue):
     1079        (KJS::SimpleJumpTable::add):
     1080        (KJS::SimpleJumpTable::ctiForValue):
     1081        * VM/CodeGenerator.cpp:
     1082        (KJS::prepareJumpTableForStringSwitch):
     1083        * VM/Machine.cpp:
     1084        (KJS::Machine::privateExecute):
     1085        (KJS::Machine::cti_op_switch_string):
     1086        * VM/Machine.h:
     1087
     10882008-08-28  Gavin Barraclough  <barraclough@apple.com>
     1089
     1090        Reviewed by Oliver Hunt.
     1091
     1092        Do not recurse on the machine stack when executing op_call.
     1093
     1094        * VM/CTI.cpp:
     1095        (KJS::CTI::emitGetPutArg):
     1096        (KJS::CTI::emitPutArg):
     1097        (KJS::CTI::emitPutArgConstant):
     1098        (KJS::CTI::compileOpCall):
     1099        (KJS::CTI::privateCompile_pass2_Main):
     1100        (KJS::CTI::privateCompile):
     1101        * VM/CTI.h:
     1102        (KJS::):
     1103        (KJS::CTI::compile):
     1104        (KJS::CTI::execute):
     1105        (KJS::CTI::):
     1106        * VM/Machine.cpp:
     1107        (KJS::Machine::Machine):
     1108        (KJS::Machine::execute):
     1109        (KJS::Machine::cti_op_call_JSFunction):
     1110        (KJS::Machine::cti_op_call_NotJSFunction):
     1111        (KJS::Machine::cti_op_ret):
     1112        (KJS::Machine::cti_op_construct_JSConstruct):
     1113        (KJS::Machine::cti_op_construct_NotJSConstruct):
     1114        (KJS::Machine::cti_op_call_eval):
     1115        * VM/Machine.h:
     1116        * VM/Register.h:
     1117        (KJS::Register::Register):
     1118        * VM/RegisterFile.h:
     1119        (KJS::RegisterFile::):
     1120        * kjs/InternalFunction.h:
     1121        (KJS::InternalFunction::InternalFunction):
     1122        * kjs/JSFunction.h:
     1123        (KJS::JSFunction::JSFunction):
     1124        * kjs/ScopeChain.h:
     1125        (KJS::ScopeChain::ScopeChain):
     1126        * masm/IA32MacroAsm.h:
     1127        (KJS::IA32MacroAssembler::):
     1128        (KJS::IA32MacroAssembler::emitModRm_opm):
     1129        (KJS::IA32MacroAssembler::emitCmpl_i32m):
     1130        (KJS::IA32MacroAssembler::emitCallN_r):
     1131
     11322008-08-28  Sam Weinig  <sam@webkit.org>
     1133
     1134        Reviewed by Mark Rowe.
     1135
     1136        Exit instead of crashing in ctiUnsupported and ctiTimedOut.
     1137
     1138        * VM/Machine.cpp:
     1139        (KJS::ctiUnsupported):
     1140        (KJS::ctiTimedOut):
     1141
     11422008-08-28  Oliver Hunt  <oliver@apple.com>
     1143
     1144        Reviewed by Maciej Stachowiak.
     1145
     1146        Implement codegen for op_jsr and op_sret.
     1147
     1148        * VM/CTI.cpp:
     1149        (KJS::CTI::privateCompile_pass1_Scan):
     1150        (KJS::CTI::privateCompile_pass2_Main):
     1151        (KJS::CTI::privateCompile):
     1152        * VM/CTI.h:
     1153        (KJS::CTI::JSRInfo::JSRInfo):
     1154        * masm/IA32MacroAsm.h:
     1155        (KJS::IA32MacroAssembler::emitJmpN_m):
     1156        (KJS::IA32MacroAssembler::linkAbsoluteAddress):
     1157
     11582008-08-28  Gavin Barraclough  <barraclough@apple.com>
     1159
     1160        Reviewed by Oliver Hunt.
     1161
     1162        Initial support for exceptions (throw / catch must occur in same CodeBlock).
     1163
     1164        * VM/CTI.cpp:
     1165        (KJS::CTI::emitExceptionCheck):
     1166        (KJS::CTI::emitCall):
     1167        (KJS::CTI::privateCompile_pass2_Main):
     1168        (KJS::CTI::privateCompile_pass4_SlowCases):
     1169        (KJS::CTI::privateCompile):
     1170        * VM/CTI.h:
     1171        * VM/CodeBlock.cpp:
     1172        (KJS::CodeBlock::nativeExceptionCodeForHandlerVPC):
     1173        * VM/CodeBlock.h:
     1174        * VM/CodeGenerator.cpp:
     1175        (KJS::CodeGenerator::emitCatch):
     1176        * VM/Machine.cpp:
     1177        (KJS::Machine::throwException):
     1178        (KJS::Machine::privateExecute):
     1179        (KJS::ctiUnsupported):
     1180        (KJS::ctiTimedOut):
     1181        (KJS::Machine::cti_op_add):
     1182        (KJS::Machine::cti_op_pre_inc):
     1183        (KJS::Machine::cti_timeout_check):
     1184        (KJS::Machine::cti_op_loop_if_less):
     1185        (KJS::Machine::cti_op_put_by_id):
     1186        (KJS::Machine::cti_op_get_by_id):
     1187        (KJS::Machine::cti_op_instanceof):
     1188        (KJS::Machine::cti_op_del_by_id):
     1189        (KJS::Machine::cti_op_mul):
     1190        (KJS::Machine::cti_op_call):
     1191        (KJS::Machine::cti_op_resolve):
     1192        (KJS::Machine::cti_op_construct):
     1193        (KJS::Machine::cti_op_get_by_val):
     1194        (KJS::Machine::cti_op_resolve_func):
     1195        (KJS::Machine::cti_op_sub):
     1196        (KJS::Machine::cti_op_put_by_val):
     1197        (KJS::Machine::cti_op_lesseq):
     1198        (KJS::Machine::cti_op_loop_if_true):
     1199        (KJS::Machine::cti_op_negate):
     1200        (KJS::Machine::cti_op_resolve_skip):
     1201        (KJS::Machine::cti_op_div):
     1202        (KJS::Machine::cti_op_pre_dec):
     1203        (KJS::Machine::cti_op_jless):
     1204        (KJS::Machine::cti_op_not):
     1205        (KJS::Machine::cti_op_jtrue):
     1206        (KJS::Machine::cti_op_post_inc):
     1207        (KJS::Machine::cti_op_eq):
     1208        (KJS::Machine::cti_op_lshift):
     1209        (KJS::Machine::cti_op_bitand):
     1210        (KJS::Machine::cti_op_rshift):
     1211        (KJS::Machine::cti_op_bitnot):
     1212        (KJS::Machine::cti_op_resolve_with_base):
     1213        (KJS::Machine::cti_op_mod):
     1214        (KJS::Machine::cti_op_less):
     1215        (KJS::Machine::cti_op_neq):
     1216        (KJS::Machine::cti_op_post_dec):
     1217        (KJS::Machine::cti_op_urshift):
     1218        (KJS::Machine::cti_op_bitxor):
     1219        (KJS::Machine::cti_op_bitor):
     1220        (KJS::Machine::cti_op_call_eval):
     1221        (KJS::Machine::cti_op_throw):
     1222        (KJS::Machine::cti_op_push_scope):
     1223        (KJS::Machine::cti_op_stricteq):
     1224        (KJS::Machine::cti_op_nstricteq):
     1225        (KJS::Machine::cti_op_to_jsnumber):
     1226        (KJS::Machine::cti_op_in):
     1227        (KJS::Machine::cti_op_del_by_val):
     1228        (KJS::Machine::cti_vm_throw):
     1229        * VM/Machine.h:
     1230        * kjs/ExecState.h:
     1231        * masm/IA32MacroAsm.h:
     1232        (KJS::IA32MacroAssembler::emitCmpl_i32m):
     1233
     12342008-08-28  Mark Rowe  <mrowe@apple.com>
     1235
     1236        Rubber-stamped by Oliver Hunt.
     1237
     1238        Print debugging info to stderr so that run-webkit-tests can capture it.
     1239        This makes it easy to check whether test failures are due to unimplemented
     1240        op codes, missing support for exceptions, etc.
     1241
     1242        * VM/CTI.cpp:
     1243        (KJS::CTI::privateCompile_pass1_Scan):
     1244        (KJS::CTI::printOpcodeOperandTypes):
     1245        (KJS::CTI::privateCompile_pass2_Main):
     1246        (KJS::CTI::privateCompile_pass4_SlowCases):
     1247        (KJS::CTI::privateCompile):
     1248        * VM/Machine.cpp:
     1249        (KJS::Machine::privateExecute):
     1250        (KJS::ctiException):
     1251        (KJS::ctiUnsupported):
     1252        (KJS::Machine::cti_op_call):
     1253        (KJS::Machine::cti_op_resolve):
     1254        (KJS::Machine::cti_op_construct):
     1255        (KJS::Machine::cti_op_get_by_val):
     1256        (KJS::Machine::cti_op_resolve_func):
     1257        (KJS::Machine::cti_op_resolve_skip):
     1258        (KJS::Machine::cti_op_resolve_with_base):
     1259        (KJS::Machine::cti_op_call_eval):
     1260
     12612008-08-27  Mark Rowe  <mrowe@apple.com>
     1262
     1263        Reviewed by Gavin Barraclough and Maciej Stachowiak.
     1264
     1265        Fix fast/js/bitwise-and-on-undefined.html.
     1266
     1267        A temporary value in the slow path of op_bitand was being stored in edx, but was
     1268        being clobbered by emitGetPutArg before we used it.  To fix this, emitGetPutArg
     1269        now takes a third argument that specifies the scratch register to use when loading
     1270        from memory.  This allows us to avoid clobbering the temporary in op_bitand.
     1271
     1272        * VM/CTI.cpp:
     1273        (KJS::CTI::emitGetPutArg):
     1274        (KJS::CTI::privateCompile_pass2_Main):
     1275        (KJS::CTI::privateCompile_pass4_SlowCases):
     1276        * VM/CTI.h:
     1277
     12782008-08-27  Mark Rowe  <mrowe@apple.com>
     1279
     1280        Rubber-stamped by Oliver Hunt.
     1281
     1282        Switch CTI on by default.
     1283
     1284        * wtf/Platform.h:
     1285
     12862008-08-27  Mark Rowe  <mrowe@apple.com>
     1287
     1288        Reviewed by Oliver Hunt.
     1289
     1290        Fix the build of the full WebKit stack.
     1291
     1292        * JavaScriptCore.xcodeproj/project.pbxproj: Mark two new headers as private so they can be pulled in from WebCore.
     1293        * VM/CTI.h: Fix build issues that show up when compiled with GCC 4.2 as part of WebCore.
     1294        * wrec/WREC.h: Ditto.
     1295
     12962008-08-27  Mark Rowe  <mrowe@apple.com>
     1297
     1298        Reviewed by Sam Weinig.
     1299
     1300        Implement op_new_error.  Does not fix any tests as it is always followed by the unimplemented op_throw.
     1301
     1302        * VM/CTI.cpp:
     1303        (KJS::CTI::privateCompile_pass1_Scan):
     1304        (KJS::CTI::privateCompile_pass2_Main):
     1305        * VM/Machine.cpp:
     1306        (KJS::Machine::cti_op_new_error):
     1307        * VM/Machine.h:
     1308
     13092008-08-27  Sam Weinig  <sam@webkit.org>
     1310
     1311        Reviewed by Gavin Barraclough and Geoff Garen.
     1312
     1313        Implement op_put_getter and op_put_setter.
     1314
     1315        * VM/CTI.cpp:
     1316        (KJS::CTI::privateCompile_pass1_Scan):
     1317        (KJS::CTI::privateCompile_pass2_Main):
     1318        * VM/Machine.cpp:
     1319        (KJS::Machine::cti_op_put_getter):
     1320        (KJS::Machine::cti_op_put_setter):
     1321        * VM/Machine.h:
     1322
     13232008-08-27  Sam Weinig  <sam@webkit.org>
     1324
     1325        Reviewed by Gavin Barraclough and Geoff Garen.
     1326
     1327        Implement op_del_by_val fixing 3 mozilla tests.
     1328
     1329        * VM/CTI.cpp:
     1330        (KJS::CTI::privateCompile_pass1_Scan):
     1331        (KJS::CTI::privateCompile_pass2_Main):
     1332        * VM/Machine.cpp:
     1333        (KJS::Machine::cti_op_del_by_val):
     1334        * VM/Machine.h:
     1335
     13362008-08-27  Gavin Barraclough  <barraclough@apple.com>
     1337
     1338        Reviewed by Oliver Hunt.
     1339
     1340        Quick & dirty fix to get SamplingTool sampling op_call.
     1341
     1342        * VM/SamplingTool.h:
     1343        (KJS::SamplingTool::callingHostFunction):
     1344
     13452008-08-27  Sam Weinig  <sam@webkit.org>
     1346
     1347        Reviewed by Gavin Barraclough and Geoff Garen.
     1348
     1349        Fix op_put_by_index.
     1350
     1351        * VM/CTI.cpp:
     1352        (KJS::CTI::privateCompile_pass2_Main): Use emitPutArgConstant instead of emitGetPutArg
     1353        for the property value.
     1354        * VM/Machine.cpp:
     1355        (KJS::Machine::cti_op_put_by_index): Get the property value from the correct argument.
     1356
     13572008-08-27  Sam Weinig  <sam@webkit.org>
     1358
     1359        Reviewed by Gavin Barraclough and Geoff Garen.
     1360
     1361        Implement op_switch_imm in the CTI fixing 13 mozilla tests.
     1362
     1363        * VM/CTI.cpp:
     1364        (KJS::CTI::privateCompile_pass1_Scan):
     1365        (KJS::CTI::privateCompile_pass2_Main):
     1366        * VM/Machine.cpp:
     1367        (KJS::Machine::cti_op_switch_imm):
     1368        * VM/Machine.h:
     1369
     13702008-08-27  Gavin Barraclough  <barraclough@apple.com>
     1371
     1372        Reviewed by Oliver Hunt.
     1373
     1374        Implement op_switch_char in CTI.
     1375
     1376        * VM/CTI.cpp:
     1377        (KJS::CTI::emitCall):
     1378        (KJS::CTI::privateCompile_pass1_Scan):
     1379        (KJS::CTI::privateCompile_pass2_Main):
     1380        (KJS::CTI::privateCompile):
     1381        * VM/CTI.h:
     1382        (KJS::CallRecord::CallRecord):
     1383        (KJS::SwitchRecord::SwitchRecord):
     1384        * VM/CodeBlock.h:
     1385        (KJS::SimpleJumpTable::SimpleJumpTable::ctiForValue):
     1386        * VM/Machine.cpp:
     1387        (KJS::Machine::cti_op_switch_char):
     1388        * VM/Machine.h:
     1389        * masm/IA32MacroAsm.h:
     1390        (KJS::IA32MacroAssembler::):
     1391        (KJS::IA32MacroAssembler::emitJmpN_r):
     1392        (KJS::IA32MacroAssembler::getRelocatedAddress):
     1393        * wtf/Platform.h:
     1394
     13952008-08-26  Sam Weinig  <sam@webkit.org>
     1396
     1397        Reviewed by Mark Rowe.
     1398
     1399        Implement op_put_by_index to fix 1 mozilla test.
     1400
     1401        * VM/CTI.cpp:
     1402        (KJS::CTI::privateCompile_pass1_Scan):
     1403        (KJS::CTI::privateCompile_pass2_Main):
     1404        * VM/Machine.cpp:
     1405        (KJS::Machine::cti_op_put_by_index):
     1406        * VM/Machine.h:
     1407
     14082008-08-26  Gavin Barraclough  <barraclough@apple.com>
     1409
     1410        Reviewed by Geoff Garen.
     1411
     1412        More fixes from Geoff's review.
     1413
     1414        * VM/CTI.cpp:
     1415        (KJS::CTI::emitGetArg):
     1416        (KJS::CTI::emitGetPutArg):
     1417        (KJS::CTI::emitPutArg):
     1418        (KJS::CTI::emitPutArgConstant):
     1419        (KJS::CTI::getConstantImmediateNumericArg):
     1420        (KJS::CTI::emitGetCTIParam):
     1421        (KJS::CTI::emitPutResult):
     1422        (KJS::CTI::emitCall):
     1423        (KJS::CTI::emitJumpSlowCaseIfNotImm):
     1424        (KJS::CTI::emitJumpSlowCaseIfNotImms):
     1425        (KJS::CTI::getDeTaggedConstantImmediate):
     1426        (KJS::CTI::emitFastArithDeTagImmediate):
     1427        (KJS::CTI::emitFastArithReTagImmediate):
     1428        (KJS::CTI::emitFastArithPotentiallyReTagImmediate):
     1429        (KJS::CTI::emitFastArithImmToInt):
     1430        (KJS::CTI::emitFastArithIntToImmOrSlowCase):
     1431        (KJS::CTI::privateCompile_pass2_Main):
     1432        (KJS::CTI::privateCompile_pass4_SlowCases):
     1433        (KJS::CTI::privateCompile):
     1434        * VM/CTI.h:
     1435
     14362008-08-26  Mark Rowe  <mrowe@apple.com>
     1437
     1438        Reviewed by Gavin Barraclough and Geoff Garen.
     1439
     1440        Implement op_jmp_scopes to fix 2 Mozilla tests.
     1441
     1442        * VM/CTI.cpp:
     1443        (KJS::CTI::privateCompile_pass1_Scan):
     1444        (KJS::CTI::privateCompile_pass2_Main):
     1445        * VM/Machine.cpp:
     1446        (KJS::Machine::cti_op_push_new_scope): Update ExecState::m_scopeChain after calling ARG_setScopeChain.
     1447        (KJS::Machine::cti_op_jmp_scopes):
     1448        * VM/Machine.h:
     1449
     14502008-08-26  Gavin Barraclough  <barraclough@apple.com>
     1451
     1452        Reviewed by Oliver Hunt.
     1453
     1454        WebKit Regular Expression Compiler. (set ENABLE_WREC = 1 in Platform.h).
     1455
     1456        * JavaScriptCore.xcodeproj/project.pbxproj:
     1457        * kjs/regexp.cpp:
     1458        * kjs/regexp.h:
     1459        * wrec: Added.
     1460        * wrec/WREC.cpp: Added.
     1461        * wrec/WREC.h: Added.
     1462        * wtf/Platform.h:
     1463
     14642008-08-26  Sam Weinig  <sam@webkit.org>
     1465
     1466        Rubber-stamped by Oliver Hunt.
     1467
     1468        Remove bogus assertion.
     1469
     1470        * VM/Machine.cpp:
     1471        (KJS::Machine::cti_op_del_by_id):
     1472
     14732008-08-26  Mark Rowe  <mrowe@apple.com>
     1474
     1475        Reviewed by Sam Weinig.
     1476
     1477        Implement op_push_new_scope and stub out op_catch.  This fixes 11 Mozilla tests.
     1478
     1479        * VM/CTI.cpp:
     1480        (KJS::CTI::privateCompile_pass1_Scan):
     1481        (KJS::CTI::privateCompile_pass2_Main):
     1482        * VM/Machine.cpp:
     1483        (KJS::Machine::cti_op_push_new_scope):
     1484        (KJS::Machine::cti_op_catch):
     1485        * VM/Machine.h:
     1486
     14872008-08-26  Mark Rowe  <mrowe@apple.com>
     1488
     1489        Reviewed by Sam Weinig.
     1490
     1491        Clean up op_resolve_base so that it shares its implementation with the bytecode interpreter.
     1492
     1493        * VM/Machine.cpp:
     1494        (KJS::inlineResolveBase):
     1495        (KJS::resolveBase):
     1496
     14972008-08-26  Oliver Hunt  <oliver@apple.com>
     1498
     1499        Reviewed by Sam Weinig.
     1500
     1501        Add codegen support for op_instanceof, fixing 15 mozilla tests.
     1502
     1503        * VM/CTI.cpp:
     1504        (KJS::CTI::privateCompile_pass1_Scan):
     1505        (KJS::CTI::privateCompile_pass2_Main):
     1506        * VM/Machine.cpp:
     1507        (KJS::Machine::cti_op_instanceof):
     1508        (KJS::Machine::cti_op_del_by_id):
     1509        * VM/Machine.h:
     1510        * wtf/Platform.h:
     1511
     15122008-08-26  Gavin Barraclough  <barraclough@apple.com>
     1513
     1514        Reviewed by Geoff Garen.
     1515
     1516        Fixes for initial review comments.
     1517
     1518        * VM/CTI.cpp:
     1519        (KJS::CTI::ctiCompileGetArg):
     1520        (KJS::CTI::ctiCompileGetPutArg):
     1521        (KJS::CTI::ctiCompilePutResult):
     1522        (KJS::CTI::ctiCompileCall):
     1523        (KJS::CTI::CTI):
     1524        (KJS::CTI::privateCompile_pass1_Scan):
     1525        (KJS::CTI::printOpcodeOperandTypes):
     1526        (KJS::CTI::privateCompile_pass2_Main):
     1527        (KJS::CTI::privateCompile_pass4_SlowCases):
     1528        (KJS::CTI::privateCompile):
     1529        * VM/CTI.h:
     1530        * VM/Register.h:
     1531        * kjs/JSValue.h:
     1532
     15332008-08-26  Sam Weinig  <sam@webkit.org>
     1534
     1535        Reviewed by Gavin Barraclough and Geoff Garen.
     1536
     1537        Fix up exception checking code.
     1538
     1539        * VM/Machine.cpp:
     1540        (KJS::Machine::cti_op_call):
     1541        (KJS::Machine::cti_op_resolve):
     1542        (KJS::Machine::cti_op_construct):
     1543        (KJS::Machine::cti_op_resolve_func):
     1544        (KJS::Machine::cti_op_resolve_skip):
     1545        (KJS::Machine::cti_op_resolve_with_base):
     1546        (KJS::Machine::cti_op_call_eval):
     1547
     15482008-08-26  Sam Weinig  <sam@webkit.org>
     1549
     1550        Reviewed by Oliver Hunt.
     1551
     1552        Fix slowcase for op_post_inc and op_post_dec fixing 2 mozilla tests.
     1553
     1554        * VM/CTI.cpp:
     1555        (KJS::CTI::privateCompile_pass4_SlowCases):
     1556
     15572008-08-26  Mark Rowe  <mrowe@apple.com>
     1558
     1559        Reviewed by Sam Weinig.
     1560
     1561        Implement op_in, fixing 8 mozilla tests.
     1562
     1563        * VM/CTI.cpp:
     1564        (KJS::CTI::privateCompile_pass1_Scan):
     1565        (KJS::CTI::privateCompile_pass2_Main):
     1566        * VM/Machine.cpp:
     1567        (KJS::Machine::cti_op_in):
     1568        * VM/Machine.h:
     1569
     15702008-08-26  Mark Rowe  <mrowe@apple.com>
     1571
     1572        Rubber-stamped by Oliver Hunt.
     1573
     1574        Don't hardcode the size of a Register for op_new_array.  Fixes a crash
     1575        seen during the Mozilla tests.
     1576
     1577        * VM/CTI.cpp:
     1578        (KJS::CTI::privateCompile_pass2_Main):
     1579
     15802008-08-26  Sam Weinig  <sam@webkit.org>
     1581
     1582        Reviewed by Gavin Barraclough and Geoff Garen.
     1583
     1584        Add support for op_push_scope and op_pop_scope, fixing 20 mozilla tests.
     1585
     1586        * VM/CTI.cpp:
     1587        (KJS::CTI::privateCompile_pass1_Scan):
     1588        (KJS::CTI::privateCompile_pass2_Main):
     1589        * VM/CTI.h:
     1590        * VM/Machine.cpp:
     1591        (KJS::Machine::cti_op_push_scope):
     1592        (KJS::Machine::cti_op_pop_scope):
     1593        * VM/Machine.h:
     1594
     15952008-08-26  Oliver Hunt  <oliver@apple.com>
     1596
     1597        Reviewed by Maciej Stachowiak.
     1598
     1599        Add codegen support for op_del_by_id, fixing 49 mozilla tests.
     1600
     1601        * VM/CTI.cpp:
     1602        (KJS::CTI::privateCompile_pass1_Scan):
     1603        (KJS::CTI::privateCompile_pass2_Main):
     1604        * VM/Machine.cpp:
     1605        (KJS::Machine::cti_op_del_by_id):
     1606        * VM/Machine.h:
     1607
     16082008-08-26  Sam Weinig  <sam@webkit.org>
     1609
     1610        Reviewed by Gavin Barraclough and Geoff Garen.
     1611
     1612        Don't hardcode the size of a Register for op_get_scoped_var and op_put_scoped_var
     1613        fixing 513 mozilla tests in debug build.
     1614
     1615        * VM/CTI.cpp:
     1616        (KJS::CTI::privateCompile_pass2_Main):
     1617
     16182008-08-26  Oliver Hunt  <oliver@apple.com>
     1619
     1620        Reviewed by Maciej Stachowiak.
     1621       
     1622        Added code generator support for op_loop, fixing around 60 mozilla tests.
     1623
     1624        * VM/CTI.cpp:
     1625        (KJS::CTI::privateCompile_pass1_Scan):
     1626        (KJS::CTI::privateCompile_pass2_Main):
     1627
     16282008-08-26  Mark Rowe  <mrowe@apple.com>
     1629
     1630        Reviewed by Sam Weinig.
     1631
     1632        Set -fomit-frame-pointer in the correct location.
     1633
     1634        * Configurations/JavaScriptCore.xcconfig:
     1635        * JavaScriptCore.xcodeproj/project.pbxproj:
     1636
     16372008-08-26  Gavin Barraclough  <barraclough@apple.com>
     1638
     1639        Reviewed by Geoff Garen.
     1640       
     1641        Inital cut of CTI, Geoff's review fixes to follow.
     1642
     1643        * JavaScriptCore.xcodeproj/project.pbxproj:
     1644        * VM/CTI.cpp: Added.
     1645        (KJS::getJCB):
     1646        (KJS::CTI::ctiCompileGetArg):
     1647        (KJS::CTI::ctiCompileGetPutArg):
     1648        (KJS::CTI::ctiCompilePutArg):
     1649        (KJS::CTI::ctiCompilePutArgImm):
     1650        (KJS::CTI::ctiImmediateNumericArg):
     1651        (KJS::CTI::ctiCompileGetCTIParam):
     1652        (KJS::CTI::ctiCompilePutResult):
     1653        (KJS::CTI::ctiCompileCall):
     1654        (KJS::CTI::slowCaseIfNotImm):
     1655        (KJS::CTI::slowCaseIfNotImms):
     1656        (KJS::CTI::ctiFastArithDeTagConstImmediate):
     1657        (KJS::CTI::ctiFastArithDeTagImmediate):
     1658        (KJS::CTI::ctiFastArithReTagImmediate):
     1659        (KJS::CTI::ctiFastArithPotentiallyReTagImmediate):
     1660        (KJS::CTI::ctiFastArithImmToInt):
     1661        (KJS::CTI::ctiFastArithIntToImmOrSlowCase):
     1662        (KJS::CTI::CTI):
     1663        (KJS::CTI::privateCompile_pass1_Scan):
     1664        (KJS::CTI::ctiCompileAdd):
     1665        (KJS::CTI::ctiCompileAddImm):
     1666        (KJS::CTI::ctiCompileAddImmNotInt):
     1667        (KJS::CTI::TEMP_HACK_PRINT_TYPES):
     1668        (KJS::CTI::privateCompile_pass2_Main):
     1669        (KJS::CTI::privateCompile_pass3_Link):
     1670        (KJS::CTI::privateCompile_pass4_SlowCases):
     1671        (KJS::CTI::privateCompile):
     1672        * VM/CTI.h: Added.
     1673        (KJS::CTI2Result::CTI2Result):
     1674        (KJS::CallRecord::CallRecord):
     1675        (KJS::JmpTable::JmpTable):
     1676        (KJS::SlowCaseEntry::SlowCaseEntry):
     1677        (KJS::CTI::compile):
     1678        (KJS::CTI::LabelInfo::LabelInfo):
     1679        * VM/CodeBlock.h:
     1680        (KJS::CodeBlock::CodeBlock):
     1681        (KJS::CodeBlock::~CodeBlock):
     1682        * VM/Machine.cpp:
     1683        (KJS::Machine::execute):
     1684        (KJS::Machine::privateExecute):
     1685        (KJS::ctiException):
     1686        (KJS::ctiUnsupported):
     1687        (KJS::ctiTimedOut):
     1688        (KJS::Machine::cti_op_end):
     1689        (KJS::Machine::cti_op_add):
     1690        (KJS::Machine::cti_op_pre_inc):
     1691        (KJS::Machine::cti_timeout_check):
     1692        (KJS::Machine::cti_op_loop_if_less):
     1693        (KJS::Machine::cti_op_new_object):
     1694        (KJS::Machine::cti_op_put_by_id):
     1695        (KJS::Machine::cti_op_get_by_id):
     1696        (KJS::Machine::cti_op_mul):
     1697        (KJS::Machine::cti_op_new_func):
     1698        (KJS::Machine::cti_op_call):
     1699        (KJS::Machine::cti_op_ret):
     1700        (KJS::Machine::cti_op_new_array):
     1701        (KJS::Machine::cti_op_resolve):
     1702        (KJS::Machine::cti_op_construct):
     1703        (KJS::Machine::cti_op_get_by_val):
     1704        (KJS::Machine::cti_op_resolve_func):
     1705        (KJS::Machine::cti_op_sub):
     1706        (KJS::Machine::cti_op_put_by_val):
     1707        (KJS::Machine::cti_op_lesseq):
     1708        (KJS::Machine::cti_op_loop_if_true):
     1709        (KJS::Machine::cti_op_negate):
     1710        (KJS::Machine::cti_op_resolve_base):
     1711        (KJS::Machine::cti_op_resolve_skip):
     1712        (KJS::Machine::cti_op_div):
     1713        (KJS::Machine::cti_op_pre_dec):
     1714        (KJS::Machine::cti_op_jless):
     1715        (KJS::Machine::cti_op_not):
     1716        (KJS::Machine::cti_op_jtrue):
     1717        (KJS::Machine::cti_op_post_inc):
     1718        (KJS::Machine::cti_op_eq):
     1719        (KJS::Machine::cti_op_lshift):
     1720        (KJS::Machine::cti_op_bitand):
     1721        (KJS::Machine::cti_op_rshift):
     1722        (KJS::Machine::cti_op_bitnot):
     1723        (KJS::Machine::cti_op_resolve_with_base):
     1724        (KJS::Machine::cti_op_new_func_exp):
     1725        (KJS::Machine::cti_op_mod):
     1726        (KJS::Machine::cti_op_less):
     1727        (KJS::Machine::cti_op_neq):
     1728        (KJS::Machine::cti_op_post_dec):
     1729        (KJS::Machine::cti_op_urshift):
     1730        (KJS::Machine::cti_op_bitxor):
     1731        (KJS::Machine::cti_op_new_regexp):
     1732        (KJS::Machine::cti_op_bitor):
     1733        (KJS::Machine::cti_op_call_eval):
     1734        (KJS::Machine::cti_op_throw):
     1735        (KJS::Machine::cti_op_get_pnames):
     1736        (KJS::Machine::cti_op_next_pname):
     1737        (KJS::Machine::cti_op_typeof):
     1738        (KJS::Machine::cti_op_stricteq):
     1739        (KJS::Machine::cti_op_nstricteq):
     1740        (KJS::Machine::cti_op_to_jsnumber):
     1741        * VM/Machine.h:
     1742        * VM/Register.h:
     1743        (KJS::Register::jsValue):
     1744        (KJS::Register::getJSValue):
     1745        (KJS::Register::codeBlock):
     1746        (KJS::Register::scopeChain):
     1747        (KJS::Register::i):
     1748        (KJS::Register::r):
     1749        (KJS::Register::vPC):
     1750        (KJS::Register::jsPropertyNameIterator):
     1751        * VM/SamplingTool.cpp:
     1752        (KJS::):
     1753        (KJS::SamplingTool::run):
     1754        (KJS::SamplingTool::dump):
     1755        * VM/SamplingTool.h:
     1756        * kjs/JSImmediate.h:
     1757        (KJS::JSImmediate::zeroImmediate):
     1758        (KJS::JSImmediate::oneImmediate):
     1759        * kjs/JSValue.h:
     1760        * kjs/JSVariableObject.h:
     1761        (KJS::JSVariableObject::JSVariableObjectData::offsetOf_registers):
     1762        (KJS::JSVariableObject::offsetOf_d):
     1763        (KJS::JSVariableObject::offsetOf_Data_registers):
     1764        * masm: Added.
     1765        * masm/IA32MacroAsm.h: Added.
     1766        (KJS::JITCodeBuffer::JITCodeBuffer):
     1767        (KJS::JITCodeBuffer::putByte):
     1768        (KJS::JITCodeBuffer::putShort):
     1769        (KJS::JITCodeBuffer::putInt):
     1770        (KJS::JITCodeBuffer::getEIP):
     1771        (KJS::JITCodeBuffer::start):
     1772        (KJS::JITCodeBuffer::getOffset):
     1773        (KJS::JITCodeBuffer::reset):
     1774        (KJS::JITCodeBuffer::copy):
     1775        (KJS::IA32MacroAssembler::):
     1776        (KJS::IA32MacroAssembler::emitModRm_rr):
     1777        (KJS::IA32MacroAssembler::emitModRm_rm):
     1778        (KJS::IA32MacroAssembler::emitModRm_rmsib):
     1779        (KJS::IA32MacroAssembler::emitModRm_opr):
     1780        (KJS::IA32MacroAssembler::emitModRm_opm):
     1781        (KJS::IA32MacroAssembler::IA32MacroAssembler):
     1782        (KJS::IA32MacroAssembler::emitInt3):
     1783        (KJS::IA32MacroAssembler::emitPushl_r):
     1784        (KJS::IA32MacroAssembler::emitPopl_r):
     1785        (KJS::IA32MacroAssembler::emitMovl_rr):
     1786        (KJS::IA32MacroAssembler::emitAddl_rr):
     1787        (KJS::IA32MacroAssembler::emitAddl_i8r):
     1788        (KJS::IA32MacroAssembler::emitAddl_i32r):
     1789        (KJS::IA32MacroAssembler::emitAddl_mr):
     1790        (KJS::IA32MacroAssembler::emitAndl_rr):
     1791        (KJS::IA32MacroAssembler::emitAndl_i32r):
     1792        (KJS::IA32MacroAssembler::emitCmpl_i8r):
     1793        (KJS::IA32MacroAssembler::emitCmpl_rr):
     1794        (KJS::IA32MacroAssembler::emitCmpl_rm):
     1795        (KJS::IA32MacroAssembler::emitCmpl_i32r):
     1796        (KJS::IA32MacroAssembler::emitCmpw_rm):
     1797        (KJS::IA32MacroAssembler::emitOrl_rr):
     1798        (KJS::IA32MacroAssembler::emitOrl_i8r):
     1799        (KJS::IA32MacroAssembler::emitSubl_rr):
     1800        (KJS::IA32MacroAssembler::emitSubl_i8r):
     1801        (KJS::IA32MacroAssembler::emitSubl_i32r):
     1802        (KJS::IA32MacroAssembler::emitSubl_mr):
     1803        (KJS::IA32MacroAssembler::emitTestl_i32r):
     1804        (KJS::IA32MacroAssembler::emitTestl_rr):
     1805        (KJS::IA32MacroAssembler::emitXorl_i8r):
     1806        (KJS::IA32MacroAssembler::emitXorl_rr):
     1807        (KJS::IA32MacroAssembler::emitSarl_i8r):
     1808        (KJS::IA32MacroAssembler::emitSarl_CLr):
     1809        (KJS::IA32MacroAssembler::emitShl_i8r):
     1810        (KJS::IA32MacroAssembler::emitShll_CLr):
     1811        (KJS::IA32MacroAssembler::emitMull_rr):
     1812        (KJS::IA32MacroAssembler::emitIdivl_r):
     1813        (KJS::IA32MacroAssembler::emitCdq):
     1814        (KJS::IA32MacroAssembler::emitMovl_mr):
     1815        (KJS::IA32MacroAssembler::emitMovzwl_mr):
     1816        (KJS::IA32MacroAssembler::emitMovl_rm):
     1817        (KJS::IA32MacroAssembler::emitMovl_i32r):
     1818        (KJS::IA32MacroAssembler::emitMovl_i32m):
     1819        (KJS::IA32MacroAssembler::emitLeal_mr):
     1820        (KJS::IA32MacroAssembler::emitRet):
     1821        (KJS::IA32MacroAssembler::JmpSrc::JmpSrc):
     1822        (KJS::IA32MacroAssembler::JmpDst::JmpDst):
     1823        (KJS::IA32MacroAssembler::emitCall):
     1824        (KJS::IA32MacroAssembler::label):
     1825        (KJS::IA32MacroAssembler::emitUnlinkedJmp):
     1826        (KJS::IA32MacroAssembler::emitUnlinkedJne):
     1827        (KJS::IA32MacroAssembler::emitUnlinkedJe):
     1828        (KJS::IA32MacroAssembler::emitUnlinkedJl):
     1829        (KJS::IA32MacroAssembler::emitUnlinkedJle):
     1830        (KJS::IA32MacroAssembler::emitUnlinkedJge):
     1831        (KJS::IA32MacroAssembler::emitUnlinkedJae):
     1832        (KJS::IA32MacroAssembler::emitUnlinkedJo):
     1833        (KJS::IA32MacroAssembler::emitPredictionNotTaken):
     1834        (KJS::IA32MacroAssembler::link):
     1835        (KJS::IA32MacroAssembler::copy):
     1836        * wtf/Platform.h:
     1837
     18382008-08-26  Oliver Hunt  <oliver@apple.com>
     1839
     1840        RS=Maciej.
     1841
     1842        Enabled -fomit-frame-pointer on Release and Production builds, add additional Profiling build config for shark, etc.
     1843
     1844        * JavaScriptCore.xcodeproj/project.pbxproj:
     1845
     1846=== Start merge of squirrelfish-extreme ===
     1847
    118482008-09-06  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
    21849
  • trunk/JavaScriptCore/Configurations/JavaScriptCore.xcconfig

    r36130 r36244  
    1515// This needs to be kept sorted, and in sync with FEATURE_DEFINES in WebCore.xcconfig, WebKit.xcconfig and the default settings of build-webkit.
    1616FEATURE_DEFINES = ENABLE_CROSS_DOCUMENT_MESSAGING ENABLE_DATABASE ENABLE_DOM_STORAGE ENABLE_ICONDATABASE ENABLE_OFFLINE_WEB_APPLICATIONS ENABLE_SVG ENABLE_SVG_ANIMATION ENABLE_SVG_AS_IMAGE ENABLE_SVG_FONTS ENABLE_SVG_FOREIGN_OBJECT ENABLE_SVG_USE ENABLE_VIDEO ENABLE_XPATH ENABLE_XSLT;
     17
     18OTHER_CFLAGS = $(OTHER_CFLAGS_$(CONFIGURATION)_$(CURRENT_VARIANT));
     19OTHER_CFLAGS_Release_normal = -fomit-frame-pointer;
     20OTHER_CFLAGS_Production_normal = -fomit-frame-pointer;
  • trunk/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj

    r36101 r36244  
    4343                        <Tool
    4444                                Name="VCCLCompilerTool"
    45                                 AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\obj\JavaScriptCore\DerivedSources\&quot;;../../;../../API/;../../pcre/;../../kjs/;../../VM/;../../wtf/;../../profiler;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\icu&quot;;../../../icu/include;&quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;"
     45                                AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\obj\JavaScriptCore\DerivedSources\&quot;;../../;../../API/;../../pcre/;../../kjs/;../../VM/;../../wtf/;../../profiler;../../masm/;../../wrec/;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\icu&quot;;../../../icu/include;&quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;"
    4646                                PreprocessorDefinitions="__STD_C"
    4747                                ForcedIncludeFiles=""
     
    7474                        <Tool
    7575                                Name="VCPostBuildEventTool"
    76                                 CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\VM\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\kjs\create_hash_table&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\pcre\pcre.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
     76                                CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\VM\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\kjs\create_hash_table&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\pcre\pcre.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
    7777                        />
    7878                </Configuration>
     
    105105                        <Tool
    106106                                Name="VCCLCompilerTool"
    107                                 AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\obj\JavaScriptCore\DerivedSources\&quot;;../../;../../API/;../../pcre/;../../kjs/;../../VM/;../../wtf/;../../profiler;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\icu&quot;;../../../icu/include;&quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;"
     107                                AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\obj\JavaScriptCore\DerivedSources\&quot;;../../;../../API/;../../pcre/;../../kjs/;../../VM/;../../wtf/;../../profiler;../../masm/;../../wrec/;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\icu&quot;;../../../icu/include;&quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;"
    108108                                PreprocessorDefinitions="__STD_C"
    109109                                ForcedIncludeFiles=""
     
    136136                        <Tool
    137137                                Name="VCPostBuildEventTool"
    138                                 CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\VM\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\kjs\create_hash_table&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\pcre\pcre.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
     138                                CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\VM\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\kjs\create_hash_table&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\pcre\pcre.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
    139139                        />
    140140                </Configuration>
     
    166166                        <Tool
    167167                                Name="VCCLCompilerTool"
    168                                 AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\obj\JavaScriptCore\DerivedSources\&quot;;../../;../../API/;../../pcre/;../../kjs/;../../VM/;../../wtf/;../../profiler;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\icu&quot;;../../../icu/include;&quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;"
     168                                AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\obj\JavaScriptCore\DerivedSources\&quot;;../../;../../API/;../../pcre/;../../kjs/;../../VM/;../../wtf/;../../profiler;../../masm/;../../wrec/;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\icu&quot;;../../../icu/include;&quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;"
    169169                                PreprocessorDefinitions="__STD_C"
    170170                                ForcedIncludeFiles=""
     
    197197                        <Tool
    198198                                Name="VCPostBuildEventTool"
    199                                 CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\VM\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\kjs\create_hash_table&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\pcre\pcre.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
     199                                CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\VM\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\kjs\create_hash_table&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\pcre\pcre.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
    200200                        />
    201201                </Configuration>
     
    228228                        <Tool
    229229                                Name="VCCLCompilerTool"
    230                                 AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\obj\JavaScriptCore\DerivedSources\&quot;;../../;../../API/;../../pcre/;../../kjs/;../../VM/;../../wtf/;../../profiler;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\icu&quot;;../../../icu/include;&quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;"
     230                                AdditionalIncludeDirectories="&quot;$(WebKitOutputDir)\obj\JavaScriptCore\DerivedSources\&quot;;../../;../../API/;../../pcre/;../../kjs/;../../VM/;../../wtf/;../../profiler;../../masm/;../../wrec/;&quot;$(WebKitLibrariesDir)\include&quot;;&quot;$(WebKitLibrariesDir)\include\icu&quot;;../../../icu/include;&quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;;&quot;$(WebKitLibrariesDir)\include\pthreads&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders&quot;;&quot;$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility&quot;"
    231231                                PreprocessorDefinitions="__STD_C"
    232232                                ForcedIncludeFiles=""
     
    259259                        <Tool
    260260                                Name="VCPostBuildEventTool"
    261                                 CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\VM\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\kjs\create_hash_table&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\pcre\pcre.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
     261                                CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\VM\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\kjs\create_hash_table&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\..\pcre\pcre.h&quot; &quot;$(WebKitOutputDir)\include\JavaScriptCore&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
    262262                        />
    263263                </Configuration>
     
    12591259                        </File>
    12601260                        <File
     1261                                RelativePath="..\..\VM\CTI.cpp"
     1262                                >
     1263                        </File>
     1264                        <File
     1265                                RelativePath="..\..\VM\CTI.h"
     1266                                >
     1267                        </File>
     1268                        <File
    12611269                                RelativePath="..\..\VM\ExceptionHelpers.cpp"
    12621270                                >
     
    13321340                        <File
    13331341                                RelativePath="..\..\kjs\DebuggerCallFrame.h"
     1342                                >
     1343                        </File>
     1344                </Filter>
     1345                <Filter
     1346                        Name="masm"
     1347                        >
     1348                        <File
     1349                                RelativePath="..\..\masm\IA32MacroAsm.h"
     1350                                >
     1351                        </File>
     1352                        <File
     1353                                RelativePath="..\..\masm\MacroAssembler.h"
     1354                                >
     1355                        </File>
     1356                        <File
     1357                                RelativePath="..\..\masm\MacroAssemblerWin.cpp"
     1358                                >
     1359                        </File>
     1360                </Filter>
     1361                <Filter
     1362                        Name="wrec"
     1363                        >
     1364                        <File
     1365                                RelativePath="..\..\wrec\WREC.cpp"
     1366                                >
     1367                        </File>
     1368                        <File
     1369                                RelativePath="..\..\wrec\WREC.h"
    13341370                                >
    13351371                        </File>
  • trunk/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj

    r36130 r36244  
    7878                8613F45A0E3A433E00C948FD /* SamplingTool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8613F4580E3A433E00C948FD /* SamplingTool.cpp */; };
    7979                8613F45B0E3A433E00C948FD /* SamplingTool.h in Headers */ = {isa = PBXBuildFile; fileRef = 8613F4590E3A433E00C948FD /* SamplingTool.h */; };
     80                8683B02E0E636482004C19EE /* CTI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8683B02B0E636482004C19EE /* CTI.cpp */; };
     81                8683B02F0E636482004C19EE /* CTI.h in Headers */ = {isa = PBXBuildFile; fileRef = 8683B02C0E636482004C19EE /* CTI.h */; settings = {ATTRIBUTES = (Private, ); }; };
     82                869081410E640C89000D36ED /* IA32MacroAsm.h in Headers */ = {isa = PBXBuildFile; fileRef = 869081400E640C89000D36ED /* IA32MacroAsm.h */; settings = {ATTRIBUTES = (Private, ); }; };
     83                869083150E6518D7000D36ED /* WREC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 869083130E6518D7000D36ED /* WREC.cpp */; };
     84                869083160E6518D7000D36ED /* WREC.h in Headers */ = {isa = PBXBuildFile; fileRef = 869083140E6518D7000D36ED /* WREC.h */; settings = {ATTRIBUTES = (Private, ); }; };
    8085                905B02AE0E28640F006DF882 /* RefCountedLeakCounter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 905B02AD0E28640F006DF882 /* RefCountedLeakCounter.cpp */; };
    8186                90D3469C0E285280009492EE /* RefCountedLeakCounter.h in Headers */ = {isa = PBXBuildFile; fileRef = 90D3469B0E285280009492EE /* RefCountedLeakCounter.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    110115                A72701B90DADE94900E548D7 /* ExceptionHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = A72701B30DADE94900E548D7 /* ExceptionHelpers.h */; };
    111116                A727FF6B0DA3092200E548D7 /* JSPropertyNameIterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A727FF660DA3053B00E548D7 /* JSPropertyNameIterator.cpp */; };
     117                A763F79D0E70E0FE00BC151E /* MacroAssembler.h in Headers */ = {isa = PBXBuildFile; fileRef = A763F79C0E70E0FE00BC151E /* MacroAssembler.h */; settings = {ATTRIBUTES = (Private, ); }; };
    112118                A7C31DAA0DBEBA4300FDF8EB /* SegmentedVector.h in Headers */ = {isa = PBXBuildFile; fileRef = A7C31DA80DBEBA4300FDF8EB /* SegmentedVector.h */; };
    113119                BC02E90D0E1839DB000F9297 /* ErrorConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BC02E9050E1839DB000F9297 /* ErrorConstructor.h */; };
     
    573579                8613F4580E3A433E00C948FD /* SamplingTool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SamplingTool.cpp; path = VM/SamplingTool.cpp; sourceTree = "<group>"; };
    574580                8613F4590E3A433E00C948FD /* SamplingTool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SamplingTool.h; path = VM/SamplingTool.h; sourceTree = "<group>"; };
     581                8683B02B0E636482004C19EE /* CTI.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CTI.cpp; path = VM/CTI.cpp; sourceTree = "<group>"; };
     582                8683B02C0E636482004C19EE /* CTI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CTI.h; path = VM/CTI.h; sourceTree = "<group>"; };
     583                869081400E640C89000D36ED /* IA32MacroAsm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IA32MacroAsm.h; sourceTree = "<group>"; };
     584                869083130E6518D7000D36ED /* WREC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WREC.cpp; sourceTree = "<group>"; };
     585                869083140E6518D7000D36ED /* WREC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WREC.h; sourceTree = "<group>"; };
    575586                905B02AD0E28640F006DF882 /* RefCountedLeakCounter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RefCountedLeakCounter.cpp; sourceTree = "<group>"; };
    576587                90D3469B0E285280009492EE /* RefCountedLeakCounter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RefCountedLeakCounter.h; sourceTree = "<group>"; };
     
    630641                A727FF650DA3053B00E548D7 /* JSPropertyNameIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JSPropertyNameIterator.h; path = VM/JSPropertyNameIterator.h; sourceTree = "<group>"; };
    631642                A727FF660DA3053B00E548D7 /* JSPropertyNameIterator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JSPropertyNameIterator.cpp; path = VM/JSPropertyNameIterator.cpp; sourceTree = "<group>"; };
     643                A763F79C0E70E0FE00BC151E /* MacroAssembler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MacroAssembler.h; sourceTree = "<group>"; };
    632644                A7C31DA80DBEBA4300FDF8EB /* SegmentedVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SegmentedVector.h; path = VM/SegmentedVector.h; sourceTree = "<group>"; };
    633645                A7E42C180E3938830065A544 /* JSStaticScopeObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSStaticScopeObject.h; sourceTree = "<group>"; };
     
    858870                                F5C290E60284F98E018635CA /* JavaScriptCorePrefix.h */,
    859871                                1432EBD70A34CAD400717B9F /* API */,
     872                                149B15DF0D81F887009CB8C7 /* compiler */,
     873                                1480DB9A0DDC2231003CFDF2 /* debugger */,
     874                                65417200039E01BA0058BFEB /* kjs */,
     875                                8690813F0E640C89000D36ED /* masm */,
     876                                65417203039E01F90058BFEB /* pcre */,
     877                                95AB831A0DA42C6900BC83F3 /* profiler */,
     878                                141211000A48772600480255 /* tests */,
     879                                149B15E00D81F88D009CB8C7 /* vm */,
     880                                869083120E6518D7000D36ED /* wrec */,
    860881                                65162EF108E6A21C007556CD /* wtf */,
    861                                 65417203039E01F90058BFEB /* pcre */,
    862                                 65417200039E01BA0058BFEB /* kjs */,
    863                                 149B15DF0D81F887009CB8C7 /* compiler */,
    864                                 149B15E00D81F88D009CB8C7 /* vm */,
    865                                 1480DB9A0DDC2231003CFDF2 /* debugger */,
    866                                 95AB831A0DA42C6900BC83F3 /* profiler */,
     882                                1C90513E0BA9E8830081E9D0 /* Configurations */,
    867883                                650FDF8D09D0FCA700769E54 /* Derived Sources */,
     884                                0867D69AFE84028FC02AAC07 /* Frameworks */,
    868885                                034768DFFF38A50411DB9C8B /* Products */,
    869886                                932FC3C20824BB70005B3C75 /* Resources */,
    870                                 0867D69AFE84028FC02AAC07 /* Frameworks */,
    871                                 1C90513E0BA9E8830081E9D0 /* Configurations */,
    872                                 141211000A48772600480255 /* tests */,
    873887                        );
    874888                        name = JavaScriptCore;
     
    9931007                        isa = PBXGroup;
    9941008                        children = (
     1009                                8683B02B0E636482004C19EE /* CTI.cpp */,
     1010                                8683B02C0E636482004C19EE /* CTI.h */,
    9951011                                8613F4580E3A433E00C948FD /* SamplingTool.cpp */,
    9961012                                8613F4590E3A433E00C948FD /* SamplingTool.h */,
     
    12991315                        tabWidth = 4;
    13001316                        usesTabs = 0;
     1317                };
     1318                8690813F0E640C89000D36ED /* masm */ = {
     1319                        isa = PBXGroup;
     1320                        children = (
     1321                                A763F79C0E70E0FE00BC151E /* MacroAssembler.h */,
     1322                                869081400E640C89000D36ED /* IA32MacroAsm.h */,
     1323                        );
     1324                        path = masm;
     1325                        sourceTree = "<group>";
     1326                };
     1327                869083120E6518D7000D36ED /* wrec */ = {
     1328                        isa = PBXGroup;
     1329                        children = (
     1330                                869083130E6518D7000D36ED /* WREC.cpp */,
     1331                                869083140E6518D7000D36ED /* WREC.h */,
     1332                        );
     1333                        path = wrec;
     1334                        sourceTree = "<group>";
    13011335                };
    13021336                932FC3C20824BB70005B3C75 /* Resources */ = {
     
    15521586                                E124A8F70E555775003091F1 /* OpaqueJSString.h in Headers */,
    15531587                                9534AAFB0E5B7A9600B8A45B /* JSProfilerPrivate.h in Headers */,
     1588                                8683B02F0E636482004C19EE /* CTI.h in Headers */,
     1589                                869081410E640C89000D36ED /* IA32MacroAsm.h in Headers */,
     1590                                869083160E6518D7000D36ED /* WREC.h in Headers */,
    15541591                                933040040E6A749400786E6A /* SmallStrings.h in Headers */,
    15551592                                BCDE3AB80E6C82F5001453A7 /* StructureID.h in Headers */,
     1593                                A763F79D0E70E0FE00BC151E /* MacroAssembler.h in Headers */,
    15561594                                147B83AC0E6DB8C9004775A4 /* BatchedTransitionOptimizer.h in Headers */,
    15571595                                147B84630E6DE6B1004775A4 /* PutPropertySlot.h in Headers */,
     
    18621900                                E124A8F80E555775003091F1 /* OpaqueJSString.cpp in Sources */,
    18631901                                95F6E6950E5B5F970091E860 /* JSProfilerPrivate.cpp in Sources */,
     1902                                8683B02E0E636482004C19EE /* CTI.cpp in Sources */,
     1903                                869083150E6518D7000D36ED /* WREC.cpp in Sources */,
    18641904                                9330402C0E6A764000786E6A /* SmallStrings.cpp in Sources */,
    18651905                                BCDE3B430E6C832D001453A7 /* StructureID.cpp in Sources */,
     
    20852125                        name = Production;
    20862126                };
     2127                A761483D0E6402F700E357FA /* Profiling */ = {
     2128                        isa = XCBuildConfiguration;
     2129                        baseConfigurationReference = 1C9051440BA9E8A70081E9D0 /* DebugRelease.xcconfig */;
     2130                        buildSettings = {
     2131                                STRIP_INSTALLED_PRODUCT = NO;
     2132                        };
     2133                        name = Profiling;
     2134                };
     2135                A761483E0E6402F700E357FA /* Profiling */ = {
     2136                        isa = XCBuildConfiguration;
     2137                        buildSettings = {
     2138                                PRODUCT_NAME = All;
     2139                        };
     2140                        name = Profiling;
     2141                };
     2142                A761483F0E6402F700E357FA /* Profiling */ = {
     2143                        isa = XCBuildConfiguration;
     2144                        baseConfigurationReference = 1C9051430BA9E8A70081E9D0 /* JavaScriptCore.xcconfig */;
     2145                        buildSettings = {
     2146                                INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)";
     2147                        };
     2148                        name = Profiling;
     2149                };
     2150                A76148400E6402F700E357FA /* Profiling */ = {
     2151                        isa = XCBuildConfiguration;
     2152                        buildSettings = {
     2153                                PRODUCT_NAME = "Generate Derived Sources";
     2154                        };
     2155                        name = Profiling;
     2156                };
     2157                A76148410E6402F700E357FA /* Profiling */ = {
     2158                        isa = XCBuildConfiguration;
     2159                        buildSettings = {
     2160                                PRODUCT_NAME = minidom;
     2161                        };
     2162                        name = Profiling;
     2163                };
     2164                A76148420E6402F700E357FA /* Profiling */ = {
     2165                        isa = XCBuildConfiguration;
     2166                        buildSettings = {
     2167                                PRODUCT_NAME = testapi;
     2168                        };
     2169                        name = Profiling;
     2170                };
     2171                A76148430E6402F700E357FA /* Profiling */ = {
     2172                        isa = XCBuildConfiguration;
     2173                        buildSettings = {
     2174                                PRODUCT_NAME = jsc;
     2175                        };
     2176                        name = Profiling;
     2177                };
    20872178/* End XCBuildConfiguration section */
    20882179
     
    20932184                                1412113A0A48798400480255 /* Debug */,
    20942185                                1412113B0A48798400480255 /* Release */,
     2186                                A76148410E6402F700E357FA /* Profiling */,
    20952187                                1412113C0A48798400480255 /* Production */,
    20962188                        );
     
    21032195                                149C275E08902AFE008A9EFC /* Debug */,
    21042196                                149C275F08902AFE008A9EFC /* Release */,
     2197                                A761483F0E6402F700E357FA /* Profiling */,
    21052198                                149C276108902AFE008A9EFC /* Production */,
    21062199                        );
     
    21132206                                149C276808902AFE008A9EFC /* Debug */,
    21142207                                149C276908902AFE008A9EFC /* Release */,
     2208                                A76148430E6402F700E357FA /* Profiling */,
    21152209                                149C276B08902AFE008A9EFC /* Production */,
    21162210                        );
     
    21232217                                149C276D08902AFE008A9EFC /* Debug */,
    21242218                                149C276E08902AFE008A9EFC /* Release */,
     2219                                A761483E0E6402F700E357FA /* Profiling */,
    21252220                                149C277008902AFE008A9EFC /* Production */,
    21262221                        );
     
    21332228                                149C277208902AFE008A9EFC /* Debug */,
    21342229                                149C277308902AFE008A9EFC /* Release */,
     2230                                A761483D0E6402F700E357FA /* Profiling */,
    21352231                                149C277508902AFE008A9EFC /* Production */,
    21362232                        );
     
    21432239                                14BD59D70A3E8FC900BAF59C /* Debug */,
    21442240                                14BD59D80A3E8FC900BAF59C /* Release */,
     2241                                A76148420E6402F700E357FA /* Profiling */,
    21452242                                14BD59D90A3E8FC900BAF59C /* Production */,
    21462243                        );
     
    21532250                                65FB3F7809D11EBD00F49DEB /* Debug */,
    21542251                                65FB3F7909D11EBD00F49DEB /* Release */,
     2252                                A76148400E6402F700E357FA /* Profiling */,
    21552253                                65FB3F7A09D11EBD00F49DEB /* Production */,
    21562254                        );
  • trunk/JavaScriptCore/VM/CodeBlock.cpp

    r36087 r36244  
    274274        size_t i = 0;
    275275        do {
    276             printStructureIDs(&instructions[structureIDInstructions[i]]);
    277             ++i;
     276             printStructureIDs(&instructions[structureIDInstructions[i]]);
     277             ++i;
    278278        } while (i < structureIDInstructions.size());
    279279    }
    280 
     280 
    281281    if (exceptionHandlers.size()) {
    282282        printf("\nException Handlers:\n");
     
    318318                UChar ch = static_cast<UChar>(entry + characterSwitchJumpTables[i].min);
    319319                printf("\t\t\"%s\" => %04d\n", UString(&ch, 1).ascii(), *iter);
    320             }
     320        }
    321321            printf("      }\n");
    322322            ++i;
     
    329329        do {
    330330            printf("  %1d = {\n", i);
    331             StringJumpTable::const_iterator end = stringSwitchJumpTables[i].end();
    332             for (StringJumpTable::const_iterator iter = stringSwitchJumpTables[i].begin(); iter != end; ++iter)
    333                 printf("\t\t\"%s\" => %04d\n", UString(iter->first).ascii(), iter->second);
     331            StringJumpTable::StringOffsetTable::const_iterator end = stringSwitchJumpTables[i].offsetTable.end();
     332            for (StringJumpTable::StringOffsetTable::const_iterator iter = stringSwitchJumpTables[i].offsetTable.begin(); iter != end; ++iter)
     333                printf("\t\t\"%s\" => %04d\n", UString(iter->first).ascii(), iter->second.branchOffset);
    334334            printf("      }\n");
    335335            ++i;
     
    821821    for (size_t i = 0; i < size; ++i)
    822822        derefStructureIDs(&instructions[structureIDInstructions[i]]);
     823
     824    size = structureIDAccessStubs.size();
     825    for (size_t i = 0; i < size; ++i)
     826        fastFree(structureIDAccessStubs[i]);
     827
     828#if ENABLE(CTI)
     829    if (ctiCode)
     830        fastFree(ctiCode);
     831#endif
    823832}
    824833
     
    913922}
    914923
     924void* CodeBlock::nativeExceptionCodeForHandlerVPC(const Instruction* handlerVPC)
     925{
     926    Vector<HandlerInfo>::iterator ptr = exceptionHandlers.begin();
     927    Vector<HandlerInfo>::iterator end = exceptionHandlers.end();
     928   
     929    for (; ptr != end; ++ptr) {
     930        Instruction*target = instructions.begin() + ptr->target;
     931        if (handlerVPC == target)
     932            return ptr->nativeCode;
     933    }
     934
     935    return 0;
     936}
     937
    915938int CodeBlock::lineNumberForVPC(const Instruction* vPC)
    916939{
  • trunk/JavaScriptCore/VM/CodeBlock.h

    r36016 r36244  
    5050        uint32_t target;
    5151        uint32_t scopeDepth;
     52        void* nativeCode;
    5253    };
    5354
    5455    struct ExpressionRangeInfo {
    55         enum { MaxOffset = (1 << 7) - 1,
    56                MaxDivot = (1 << 25) - 1
     56        enum {
     57            MaxOffset = (1 << 7) - 1,
     58            MaxDivot = (1 << 25) - 1
    5759        };
    5860        uint32_t instructionOffset : 25;
     
    6769    };
    6870
    69     typedef HashMap<RefPtr<UString::Rep>, int32_t> StringJumpTable;
     71    struct OffsetLocation {
     72        int32_t branchOffset;
     73#if ENABLE(CTI)
     74        void* ctiOffset;
     75#endif
     76    };
     77
     78    struct StringJumpTable {
     79        typedef HashMap<RefPtr<UString::Rep>, OffsetLocation> StringOffsetTable;
     80        StringOffsetTable offsetTable;
     81#if ENABLE(CTI)
     82        void* ctiDefault; // FIXME: it should not be necessary to store this.
     83#endif
     84
     85        inline int32_t offsetForValue(UString::Rep* value, int32_t defaultOffset)
     86        {
     87            StringOffsetTable::const_iterator end = offsetTable.end();
     88            StringOffsetTable::const_iterator loc = offsetTable.find(value);
     89            if (loc == end)
     90                return defaultOffset;
     91            return loc->second.branchOffset;
     92        }
     93
     94#if ENABLE(CTI)
     95        inline void* ctiForValue(UString::Rep* value)
     96        {
     97            StringOffsetTable::const_iterator end = offsetTable.end();
     98            StringOffsetTable::const_iterator loc = offsetTable.find(value);
     99            if (loc == end)
     100                return ctiDefault;
     101            return loc->second.ctiOffset;
     102        }
     103#endif
     104    };
     105
    70106    struct SimpleJumpTable {
     107        // FIXME: The two Vectors can be combind into one Vector<OffsetLocation>
    71108        Vector<int32_t> branchOffsets;
    72109        int32_t min;
     110#if ENABLE(CTI)
     111        Vector<void*> ctiOffsets;
     112        void* ctiDefault;
     113#endif
     114
    73115        int32_t offsetForValue(int32_t value, int32_t defaultOffset);
    74         void add(int32_t key, int32_t offset) {
     116        void add(int32_t key, int32_t offset)
     117        {
    75118            if (!branchOffsets[key])
    76119                branchOffsets[key] = offset;
    77120        }
     121
     122#if ENABLE(CTI)
     123        inline void* ctiForValue(int32_t value)
     124        {
     125            if (value >= min && static_cast<uint32_t>(value - min) < ctiOffsets.size())
     126                return ctiOffsets[value - min];
     127            return ctiDefault;
     128        }
     129#endif
    78130    };
    79131
     
    82134            : ownerNode(ownerNode_)
    83135            , globalData(0)
     136#if ENABLE(CTI)
     137            , ctiCode(0)
     138#endif
    84139            , numTemporaries(0)
    85140            , numVars(0)
     
    93148        {
    94149        }
    95        
     150
    96151        ~CodeBlock();
    97152
    98 #if !defined(NDEBUG) || ENABLE(SAMPLING_TOOL)
     153#if !defined(NDEBUG) || ENABLE_SAMPLING_TOOL
    99154        void dump(ExecState*) const;
    100155        void printStructureIDs(const Instruction*) const;
     
    104159        int lineNumberForVPC(const Instruction* vPC);
    105160        bool getHandlerForVPC(const Instruction* vPC, Instruction*& target, int& scopeDepth);
     161        void* nativeExceptionCodeForHandlerVPC(const Instruction* handlerVPC);
    106162
    107163        void mark();
     
    111167        ScopeNode* ownerNode;
    112168        JSGlobalData* globalData;
     169#if ENABLE(CTI)
     170        void* ctiCode;
     171#endif
    113172
    114173        int numConstants;
     
    126185        Vector<Instruction> instructions;
    127186        Vector<size_t> structureIDInstructions;
     187        Vector<void*> structureIDAccessStubs;
    128188
    129189        // Constant pool
     
    141201        Vector<SimpleJumpTable> characterSwitchJumpTables;
    142202        Vector<StringJumpTable> stringSwitchJumpTables;
     203       
     204        HashSet<unsigned, DefaultHash<unsigned>::Hash, WTF::UnsignedWithZeroKeyHashTraits<unsigned> > labels;
     205
     206#if ENABLE(CTI)
     207        HashMap<void*, unsigned> ctiReturnAddressVPCMap;
     208#endif
    143209
    144210    private:
  • trunk/JavaScriptCore/VM/CodeGenerator.cpp

    r36032 r36244  
    11931193RegisterID* CodeGenerator::emitCatch(RegisterID* targetRegister, LabelID* start, LabelID* end)
    11941194{
    1195     HandlerInfo info = { start->offsetFrom(0), end->offsetFrom(0), instructions().size(), m_dynamicScopeDepth };
     1195    HandlerInfo info = { start->offsetFrom(0), end->offsetFrom(0), instructions().size(), m_dynamicScopeDepth, 0 };
    11961196    exceptionHandlers().append(info);
    11971197    emitOpcode(op_catch);
     
    13211321        ASSERT(nodes[i]->isString());
    13221322        UString::Rep* clause = static_cast<StringNode*>(nodes[i])->value().rep();
    1323         jumpTable.add(clause, labels[i]->offsetFrom(switchAddress));
     1323        OffsetLocation location;
     1324        location.branchOffset = labels[i]->offsetFrom(switchAddress);
     1325#if ENABLE(CTI)
     1326        location.ctiOffset = 0;
     1327#endif
     1328        jumpTable.offsetTable.add(clause, location);
    13241329    }
    13251330}
  • trunk/JavaScriptCore/VM/LabelID.h

    r34842 r36244  
    7171                m_codeBlock->instructions[j].u.operand = m_location - j;
    7272            }
     73
     74            m_codeBlock->labels.add(location);
    7375        }
    7476
  • trunk/JavaScriptCore/VM/Machine.cpp

    r36081 r36244  
    7676namespace KJS {
    7777
    78 // Default number of ticks before a timeout check should be done.
    79 static const int initialTickCountThreshold = 255;
    80 
    8178// Preferred number of milliseconds between each timeout check
    8279static const int preferredScriptCheckTimeInterval = 1000;
     
    307304}
    308305
    309 static void NEVER_INLINE resolveBase(ExecState* exec, Instruction* vPC, Register* r, ScopeChainNode* scopeChain, CodeBlock* codeBlock)
    310 {
    311     int dst = (vPC + 1)->u.operand;
    312     int property = (vPC + 2)->u.operand;
    313 
     306ALWAYS_INLINE static JSValue* inlineResolveBase(ExecState* exec, Identifier& property, ScopeChainNode* scopeChain)
     307{
    314308    ScopeChainIterator iter = scopeChain->begin();
    315309    ScopeChainIterator next = iter;
     
    319313
    320314    PropertySlot slot;
    321     Identifier& ident = codeBlock->identifiers[property];
    322315    JSObject* base;
    323316    while (true) {
    324317        base = *iter;
    325         if (next == end || base->getPropertySlot(exec, ident, slot)) {
    326             r[dst] = base;
    327             return;
    328         }
     318        if (next == end || base->getPropertySlot(exec, property, slot))
     319            return base;
     320
    329321        iter = next;
    330322        ++next;
    331323    }
     324
     325    ASSERT_NOT_REACHED();
     326    return 0;
     327}
     328
     329NEVER_INLINE static void resolveBase(ExecState* exec, Instruction* vPC, Register* r, ScopeChainNode* scopeChain, CodeBlock* codeBlock)
     330{
     331    int dst = (vPC + 1)->u.operand;
     332    int property = (vPC + 2)->u.operand;
     333    r[dst] = inlineResolveBase(exec, codeBlock->identifiers[property], scopeChain);
    332334}
    333335
     
    466468        (*it) = jsUndefined();
    467469
    468 
    469470    for (size_t i = 0; i < newCodeBlock->constantRegisters.size(); ++i)
    470471        r[i] = newCodeBlock->constantRegisters[i];
     
    529530Machine::Machine()
    530531    : m_sampler(0)
     532#if ENABLE(CTI)
     533    , m_ctiArrayLengthTrampoline(0)
     534    , m_ctiStringLengthTrampoline(0)
     535    , m_jitCodeBuffer(new JITCodeBuffer(1024 * 1024))
     536#endif
    531537    , m_reentryDepth(0)
    532538    , m_timeoutTime(0)
     
    548554    m_jsStringVptr = jsString->vptr();
    549555    static_cast<JSCell*>(jsString)->~JSCell();
     556
     557    JSFunction* jsFunction = new (storage) JSFunction(StructureID::create(jsNull()));
     558    m_jsFunctionVptr = jsFunction->vptr();
     559    static_cast<JSCell*>(jsFunction)->~JSCell();
    550560   
    551561    fastFree(storage);
     562}
     563
     564Machine::~Machine()
     565{
     566#if ENABLE(CTI)
     567    if (m_ctiArrayLengthTrampoline)
     568        fastFree(m_ctiArrayLengthTrampoline);
     569    if (m_ctiStringLengthTrampoline)
     570        fastFree(m_ctiStringLengthTrampoline);
     571#endif
    552572}
    553573
     
    627647#endif
    628648
    629 #if !defined(NDEBUG) || ENABLE(SAMPLING_TOOL)
     649//#if !defined(NDEBUG) || ENABLE(SAMPLING_TOOL)
    630650
    631651bool Machine::isOpcode(Opcode opcode)
     
    640660}
    641661
    642 #endif
     662//#endif
    643663
    644664NEVER_INLINE bool Machine::unwindCallFrame(ExecState* exec, JSValue* exceptionValue, const Instruction*& vPC, CodeBlock*& codeBlock, ScopeChainNode*& scopeChain, Register*& r)
     
    686706{
    687707    // Set up the exception object
    688 
     708   
    689709    if (exceptionValue->isObject()) {
    690710        JSObject* exception = static_cast<JSObject*>(exceptionValue);
     
    793813
    794814    m_reentryDepth++;
     815#if ENABLE(CTI)
     816    if (!codeBlock->ctiCode)
     817        CTI::compile(this, exec, codeBlock);
     818    JSValue* result = CTI::execute(codeBlock->ctiCode, &newExec, &m_registerFile, r, scopeChain, codeBlock, exception);
     819#else
    795820    JSValue* result = privateExecute(Normal, &newExec, &m_registerFile, r, scopeChain, codeBlock, exception);
     821#endif
    796822    m_reentryDepth--;
    797823
     
    853879
    854880    m_reentryDepth++;
     881#if ENABLE(CTI)
     882    if (!newCodeBlock->ctiCode)
     883        CTI::compile(this, exec, newCodeBlock);
     884    JSValue* result = CTI::execute(newCodeBlock->ctiCode, &newExec, &m_registerFile, r, scopeChain, newCodeBlock, exception);
     885#else
    855886    JSValue* result = privateExecute(Normal, &newExec, &m_registerFile, r, scopeChain, newCodeBlock, exception);
     887#endif
    856888    m_reentryDepth--;
    857889
     
    931963
    932964    m_reentryDepth++;
     965#if ENABLE(CTI)
     966    if (!codeBlock->ctiCode)
     967        CTI::compile(this, exec, codeBlock);
     968    JSValue* result = CTI::execute(codeBlock->ctiCode, &newExec, &m_registerFile, r, scopeChain, codeBlock, exception);
     969#else
    933970    JSValue* result = privateExecute(Normal, &newExec, &m_registerFile, r, scopeChain, codeBlock, exception);
     971#endif
    934972    m_reentryDepth--;
    935973
     
    949987}
    950988
    951 NEVER_INLINE void Machine::debug(ExecState* exec, const Instruction* vPC, const CodeBlock* codeBlock, ScopeChainNode* scopeChain, Register* r)
    952 {
    953     int debugHookID = (++vPC)->u.operand;
    954     int firstLine = (++vPC)->u.operand;
    955     int lastLine = (++vPC)->u.operand;
    956 
     989NEVER_INLINE void Machine::debug(ExecState* exec, const CodeBlock* codeBlock, ScopeChainNode* scopeChain, Register* r, DebugHookID debugHookID, int firstLine, int lastLine)
     990{
    957991    Debugger* debugger = exec->dynamicGlobalObject()->debugger();
    958992    if (!debugger)
     
    961995    DebuggerCallFrame debuggerCallFrame(exec, exec->dynamicGlobalObject(), codeBlock, scopeChain, r, 0);
    962996
    963     switch((DebugHookID)debugHookID) {
    964     case DidEnterCallFrame: {
    965         debugger->callEvent(debuggerCallFrame, codeBlock->ownerNode->sourceId(), firstLine);
    966         return;
    967     }
    968     case WillLeaveCallFrame: {
    969         debugger->returnEvent(debuggerCallFrame, codeBlock->ownerNode->sourceId(), lastLine);
    970         return;
    971     }
    972     case WillExecuteStatement: {
    973         debugger->atStatement(debuggerCallFrame, codeBlock->ownerNode->sourceId(), firstLine);
    974         return;
    975     }
    976     case WillExecuteProgram: {
    977         debugger->willExecuteProgram(debuggerCallFrame, codeBlock->ownerNode->sourceId(), firstLine);
    978         return;
    979     }
    980     case DidExecuteProgram: {
    981         debugger->didExecuteProgram(debuggerCallFrame, codeBlock->ownerNode->sourceId(), lastLine);
    982         return;
    983     }
    984     case DidReachBreakpoint: {
    985         debugger->didReachBreakpoint(debuggerCallFrame, codeBlock->ownerNode->sourceId(), lastLine);
    986         return;
    987     }
     997    switch (debugHookID) {
     998        case DidEnterCallFrame:
     999            debugger->callEvent(debuggerCallFrame, codeBlock->ownerNode->sourceId(), firstLine);
     1000            return;
     1001        case WillLeaveCallFrame:
     1002            debugger->returnEvent(debuggerCallFrame, codeBlock->ownerNode->sourceId(), lastLine);
     1003            return;
     1004        case WillExecuteStatement:
     1005            debugger->atStatement(debuggerCallFrame, codeBlock->ownerNode->sourceId(), firstLine);
     1006            return;
     1007        case WillExecuteProgram:
     1008            debugger->willExecuteProgram(debuggerCallFrame, codeBlock->ownerNode->sourceId(), firstLine);
     1009            return;
     1010        case DidExecuteProgram:
     1011            debugger->didExecuteProgram(debuggerCallFrame, codeBlock->ownerNode->sourceId(), lastLine);
     1012            return;
     1013        case DidReachBreakpoint:
     1014            debugger->didReachBreakpoint(debuggerCallFrame, codeBlock->ownerNode->sourceId(), lastLine);
     1015            return;
    9881016    }
    9891017}
     
    10741102}
    10751103
    1076 static int32_t offsetForStringSwitch(StringJumpTable& jumpTable, JSValue* scrutinee, int32_t defaultOffset) {
    1077     StringJumpTable::const_iterator end = jumpTable.end();
    1078     UString::Rep* value = static_cast<JSString*>(scrutinee)->value().rep();
    1079     StringJumpTable::const_iterator loc = jumpTable.find(value);
    1080     if (loc == end)
    1081         return defaultOffset;
    1082     return loc->second;
    1083 }
    1084 
    10851104static NEVER_INLINE ScopeChainNode* createExceptionScope(ExecState* exec, CodeBlock* codeBlock, const Instruction* vPC, Register* r, ScopeChainNode* scopeChain)
    10861105{
     
    12361255        ASSERT(slot.slotBase()->isObject());
    12371256
    1238         JSObject* slotBaseObject = static_cast<JSObject*>(slot.slotBase());
     1257        JSObject* baseObject = static_cast<JSObject*>(slot.slotBase());
    12391258
    12401259        // Heavy access to a prototype is a good indication that it's not being
    12411260        // used as a dictionary.
    1242         if (slotBaseObject->structureID()->isDictionary()) {
    1243             RefPtr<StructureID> transition = StructureID::fromDictionaryTransition(slotBaseObject->structureID());
    1244             slotBaseObject->setStructureID(transition.release());
     1261        if (baseObject->structureID()->isDictionary()) {
     1262            RefPtr<StructureID> transition = StructureID::fromDictionaryTransition(baseObject->structureID());
     1263            baseObject->setStructureID(transition.release());
    12451264            static_cast<JSObject*>(baseValue)->structureID()->setCachedPrototypeChain(0);
    12461265        }
    12471266
    12481267        vPC[0] = getOpcode(op_get_by_id_proto);
    1249         vPC[5] = slotBaseObject->structureID();
     1268        vPC[5] = baseObject->structureID();
    12501269        vPC[6] = slot.cachedOffset();
    12511270
     
    12591278        JSValue* v = o->structureID()->prototype();
    12601279
    1261         // If we didn't find slotBase in baseValue's prototype chain, then baseValue
     1280        // If we didn't find base in baseValue's prototype chain, then baseValue
    12621281        // must be a proxy for another object.
    12631282        if (v->isNull()) {
     
    13181337    }
    13191338
     1339#if ENABLE(CTI)
     1340    // Currently with CTI enabled we never interpret functions
     1341    ASSERT_NOT_REACHED();
     1342#endif
     1343
    13201344    JSValue* exceptionValue = 0;
    13211345    Instruction* handlerVPC = 0;
     
    13271351
    13281352#define VM_CHECK_EXCEPTION() \
    1329      do { \
     1353    do { \
    13301354        if (UNLIKELY(exec->hadException())) { \
    13311355            exceptionValue = exec->exception(); \
     
    13441368        tickCount = m_ticksUntilNextTimeoutCheck; \
    13451369    }
    1346    
     1370
    13471371#if HAVE(COMPUTED_GOTO)
    13481372    #define NEXT_OPCODE MACHINE_SAMPLING_sample(codeBlock, vPC); goto *vPC->u.opcode
     
    24852509        int base = (++vPC)->u.operand;
    24862510        int property = (++vPC)->u.operand;
    2487 
     2511       
    24882512        JSValue* baseValue = r[base].jsValue(exec);
    24892513        JSValue* subscript = r[property].jsValue(exec);
     
    27992823            vPC += defaultOffset;
    28002824        else
    2801             vPC += offsetForStringSwitch(codeBlock->stringSwitchJumpTables[tableIndex], scrutinee, defaultOffset);
     2825            vPC += codeBlock->stringSwitchJumpTables[tableIndex].offsetForValue(static_cast<JSString*>(scrutinee)->value().rep(), defaultOffset);
    28022826        NEXT_OPCODE;
    28032827    }
     
    33813405         is only generated while the debugger is attached.
    33823406        */
    3383 
    3384         debug(exec, vPC, codeBlock, scopeChain, r);
    3385 
    3386         vPC += 4;
     3407        int debugHookID = (++vPC)->u.operand;
     3408        int firstLine = (++vPC)->u.operand;
     3409        int lastLine = (++vPC)->u.operand;
     3410
     3411        debug(exec, codeBlock, scopeChain, r, static_cast<DebugHookID>(debugHookID), firstLine, lastLine);
     3412
     3413        ++vPC;
    33873414        NEXT_OPCODE;
    33883415    }
     
    34063433    #undef BEGIN_OPCODE
    34073434    #undef VM_CHECK_EXCEPTION
     3435    #undef CHECK_FOR_TIMEOUT
    34083436}
    34093437
     
    34993527}
    35003528
     3529#if ENABLE(CTI)
     3530
     3531NEVER_INLINE static void doSetReturnAddressVMThrowTrampoline(void** returnAddress)
     3532{
     3533    ctiSetReturnAddress(returnAddress, (void*)ctiVMThrowTrampoline);
     3534}
     3535
     3536NEVER_INLINE void Machine::tryCTICachePutByID(ExecState* exec, CodeBlock* codeBlock, void* returnAddress, JSValue* baseValue, const PutPropertySlot& slot)
     3537{
     3538    // The interpreter checks for recursion here; I do not believe this can occur in CTI.
     3539
     3540    if (JSImmediate::isImmediate(baseValue))
     3541        return;
     3542
     3543    // Uncacheable: give up.
     3544    if (!slot.isCacheable()) {
     3545        ctiRepatchCallByReturnAddress(returnAddress, (void*)cti_op_put_by_id_generic);
     3546        return;
     3547    }
     3548
     3549    // FIXME: Cache new property transitions, too.
     3550    if (slot.type() == PutPropertySlot::NewProperty) {
     3551        ctiRepatchCallByReturnAddress(returnAddress, (void*)cti_op_put_by_id_generic);
     3552        return;
     3553    }
     3554   
     3555    JSCell* baseCell = static_cast<JSCell*>(baseValue);
     3556    StructureID* structureID = baseCell->structureID();
     3557
     3558    // FIXME: Remove this !structureID check once all objects have StructureIDs.
     3559    if (!structureID) {
     3560        ctiRepatchCallByReturnAddress(returnAddress, (void*)cti_op_put_by_id_generic);
     3561        return;
     3562    }
     3563
     3564    if (structureID->isDictionary()) {
     3565        ctiRepatchCallByReturnAddress(returnAddress, (void*)cti_op_put_by_id_generic);
     3566        return;
     3567    }
     3568
     3569    // In the interpreter the last structure is trapped here; in CTI we use the
     3570    // *_second method to achieve a similar (but not quite the same) effect.
     3571
     3572    unsigned vPCIndex = codeBlock->ctiReturnAddressVPCMap.get(returnAddress);
     3573    Instruction* vPC = codeBlock->instructions.begin() + vPCIndex;
     3574
     3575    // Cache hit: Specialize instruction and ref StructureIDs.
     3576
     3577    // If baseCell != base, then baseCell must be a proxy for another object.
     3578    if (baseCell != slot.base()) {
     3579        ctiRepatchCallByReturnAddress(returnAddress, (void*)cti_op_put_by_id_generic);
     3580        return;
     3581    }
     3582    vPC[0] = getOpcode(op_put_by_id_replace);
     3583    vPC[4] = structureID;
     3584    vPC[5] = slot.cachedOffset();
     3585    codeBlock->refStructureIDs(vPC);
     3586
     3587    ctiRepatchCallByReturnAddress(returnAddress, CTI::compilePutByIdReplace(this, exec, codeBlock, structureID, slot.cachedOffset()));
     3588}
     3589
     3590void* Machine::getCTIArrayLengthTrampoline(ExecState* exec, CodeBlock* codeBlock)
     3591{
     3592    if (!m_ctiArrayLengthTrampoline)
     3593        m_ctiArrayLengthTrampoline = CTI::compileArrayLengthTrampoline(this, exec, codeBlock);
     3594       
     3595    return m_ctiArrayLengthTrampoline;
     3596}
     3597
     3598void* Machine::getCTIStringLengthTrampoline(ExecState* exec, CodeBlock* codeBlock)
     3599{
     3600    if (!m_ctiStringLengthTrampoline)
     3601        m_ctiStringLengthTrampoline = CTI::compileStringLengthTrampoline(this, exec, codeBlock);
     3602       
     3603    return m_ctiStringLengthTrampoline;
     3604}
     3605
     3606NEVER_INLINE void Machine::tryCTICacheGetByID(ExecState* exec, CodeBlock* codeBlock, void* returnAddress, JSValue* baseValue, const Identifier& propertyName, const PropertySlot& slot)
     3607{
     3608    // The interpreter checks for recursion here; I do not believe this can occur in CTI.
     3609
     3610    if (isJSArray(baseValue) && propertyName == exec->propertyNames().length) {
     3611        ctiRepatchCallByReturnAddress(returnAddress, getCTIArrayLengthTrampoline(exec, codeBlock));
     3612        return;
     3613    }
     3614    if (isJSString(baseValue) && propertyName == exec->propertyNames().length) {
     3615        ctiRepatchCallByReturnAddress(returnAddress, getCTIStringLengthTrampoline(exec, codeBlock));
     3616        return;
     3617    }
     3618
     3619    // Uncacheable: give up.
     3620    if (!slot.isCacheable()) {
     3621        ctiRepatchCallByReturnAddress(returnAddress, (void*)cti_op_get_by_id_generic);
     3622        return;
     3623    }
     3624
     3625    // FIXME: Cache property access for immediates.
     3626    if (JSImmediate::isImmediate(baseValue)) {
     3627        ctiRepatchCallByReturnAddress(returnAddress, (void*)cti_op_get_by_id_generic);
     3628        return;
     3629    }
     3630
     3631    JSCell* baseCell = static_cast<JSCell*>(baseValue);
     3632    StructureID* structureID = baseCell->structureID();
     3633
     3634    // FIXME: Remove this !structureID check once all JSCells have StructureIDs.
     3635    if (!structureID) {
     3636        ctiRepatchCallByReturnAddress(returnAddress, (void*)cti_op_get_by_id_generic);
     3637        return;
     3638    }
     3639
     3640    if (structureID->isDictionary()) {
     3641        ctiRepatchCallByReturnAddress(returnAddress, (void*)cti_op_get_by_id_generic);
     3642        return;
     3643    }
     3644
     3645    // In the interpreter the last structure is trapped here; in CTI we use the
     3646    // *_second method to achieve a similar (but not quite the same) effect.
     3647
     3648    unsigned vPCIndex = codeBlock->ctiReturnAddressVPCMap.get(returnAddress);
     3649    Instruction* vPC = codeBlock->instructions.begin() + vPCIndex;
     3650
     3651    // Cache hit: Specialize instruction and ref StructureIDs.
     3652
     3653    if (slot.slotBase() == baseValue) {
     3654        // set this up, so derefStructureIDs can do it's job.
     3655        vPC[0] = getOpcode(op_get_by_id_self);
     3656        vPC[4] = structureID;
     3657        vPC[5] = slot.cachedOffset();
     3658        codeBlock->refStructureIDs(vPC);
     3659       
     3660        ctiRepatchCallByReturnAddress(returnAddress, CTI::compileGetByIdSelf(this, exec, codeBlock, structureID, slot.cachedOffset()));
     3661        return;
     3662    }
     3663
     3664    if (slot.slotBase() == structureID->prototype()) {
     3665        ASSERT(slot.slotBase()->isObject());
     3666
     3667        JSObject* slotBaseObject = static_cast<JSObject*>(slot.slotBase());
     3668
     3669        // Heavy access to a prototype is a good indication that it's not being
     3670        // used as a dictionary.
     3671        if (slotBaseObject->structureID()->isDictionary()) {
     3672            RefPtr<StructureID> transition = StructureID::fromDictionaryTransition(slotBaseObject->structureID());
     3673            slotBaseObject->setStructureID(transition.release());
     3674            static_cast<JSObject*>(baseValue)->structureID()->setCachedPrototypeChain(0);
     3675        }
     3676
     3677        vPC[0] = getOpcode(op_get_by_id_proto);
     3678        vPC[4] = structureID;
     3679        vPC[5] = slotBaseObject->structureID();
     3680        vPC[6] = slot.cachedOffset();
     3681        codeBlock->refStructureIDs(vPC);
     3682
     3683        ctiRepatchCallByReturnAddress(returnAddress, CTI::compileGetByIdProto(this, exec, codeBlock, structureID, slotBaseObject->structureID(), slot.cachedOffset()));
     3684        return;
     3685    }
     3686
     3687    size_t count = 0;
     3688    JSObject* o = static_cast<JSObject*>(baseValue);
     3689    while (slot.slotBase() != o) {
     3690        JSValue* v = o->structureID()->prototype();
     3691
     3692        // If we didn't find slotBase in baseValue's prototype chain, then baseValue
     3693        // must be a proxy for another object.
     3694
     3695        if (v->isNull()) {
     3696            vPC[0] = getOpcode(op_get_by_id_generic);
     3697            return;
     3698        }
     3699
     3700        o = static_cast<JSObject*>(v);
     3701
     3702        // Heavy access to a prototype is a good indication that it's not being
     3703        // used as a dictionary.
     3704        if (o->structureID()->isDictionary()) {
     3705            RefPtr<StructureID> transition = StructureID::fromDictionaryTransition(o->structureID());
     3706            o->setStructureID(transition.release());
     3707            static_cast<JSObject*>(baseValue)->structureID()->setCachedPrototypeChain(0);
     3708        }
     3709
     3710        ++count;
     3711    }
     3712
     3713    StructureIDChain* chain = structureID->cachedPrototypeChain();
     3714    if (!chain)
     3715        chain = cachePrototypeChain(structureID);
     3716
     3717    vPC[0] = getOpcode(op_get_by_id_chain);
     3718    vPC[4] = structureID;
     3719    vPC[5] = chain;
     3720    vPC[6] = count;
     3721    vPC[7] = slot.cachedOffset();
     3722    codeBlock->refStructureIDs(vPC);
     3723
     3724    ctiRepatchCallByReturnAddress(returnAddress, CTI::compileGetByIdChain(this, exec, codeBlock, structureID, chain, count, slot.cachedOffset()));
     3725}
     3726
     3727
     3728#define JSVALUE_VM_CHECK_EXCEPTION_ARG(exception) \
     3729    do { \
     3730        if (UNLIKELY(exception != 0)) { \
     3731            exec->setException(exception); \
     3732            exec->setCTIReturnAddress(CTI_RETURN_ADDRESS); \
     3733            doSetReturnAddressVMThrowTrampoline(&CTI_RETURN_ADDRESS); \
     3734            return 0; \
     3735        } \
     3736    } while (0)
     3737#define VM_CHECK_EXCEPTION_v() \
     3738    do { \
     3739        if (UNLIKELY(exec->hadException())) { \
     3740            exec->setCTIReturnAddress(CTI_RETURN_ADDRESS); \
     3741            doSetReturnAddressVMThrowTrampoline(&CTI_RETURN_ADDRESS); \
     3742            return; \
     3743        } \
     3744    } while (0)
     3745#define VM_CHECK_EXCEPTION(type) \
     3746    do { \
     3747        if (UNLIKELY(exec->hadException())) { \
     3748            exec->setCTIReturnAddress(CTI_RETURN_ADDRESS); \
     3749            doSetReturnAddressVMThrowTrampoline(&CTI_RETURN_ADDRESS); \
     3750            return (type)0; \
     3751        } \
     3752    } while (0)
     3753#define VM_CHECK_EXCEPTION_AT_END() \
     3754    do { \
     3755        if (UNLIKELY(exec->hadException())) { \
     3756            /*printf("VM_CHECK_EXCEPTION_AT_END()\n");*/ \
     3757            exec->setCTIReturnAddress(CTI_RETURN_ADDRESS); \
     3758            doSetReturnAddressVMThrowTrampoline(&CTI_RETURN_ADDRESS); \
     3759        } \
     3760    } while (0)
     3761
     3762void Machine::cti_op_end(CTI_ARGS)
     3763{
     3764    ASSERT(ARG_scopeChain->refCount > 1);
     3765    ARG_scopeChain->deref();
     3766}
     3767
     3768JSValue* Machine::cti_op_add(CTI_ARGS)
     3769{
     3770    JSValue* src1 = ARG_src1;
     3771    JSValue* src2 = ARG_src2;
     3772
     3773    ExecState* exec = ARG_exec;
     3774    JSValue* result = jsAdd(exec, src1, src2);
     3775    VM_CHECK_EXCEPTION_AT_END();
     3776    return result;
     3777}
     3778
     3779JSValue* Machine::cti_op_pre_inc(CTI_ARGS)
     3780{
     3781    JSValue* v = ARG_src1;
     3782
     3783    ExecState* exec = ARG_exec;
     3784    JSValue* result = jsNumber(exec, v->toNumber(exec) + 1);
     3785    VM_CHECK_EXCEPTION_AT_END();
     3786    return result;
     3787}
     3788
     3789void Machine::cti_timeout_check(CTI_ARGS)
     3790{
     3791    ExecState* exec = ARG_exec;
     3792
     3793    if (exec->machine()->checkTimeout(exec->dynamicGlobalObject()))
     3794        exec->setException(createInterruptedExecutionException(exec));
     3795
     3796    VM_CHECK_EXCEPTION_AT_END();
     3797}
     3798
     3799
     3800int Machine::cti_op_loop_if_less(CTI_ARGS)
     3801{
     3802    JSValue* src1 = ARG_src1;
     3803    JSValue* src2 = ARG_src2;
     3804    ExecState* exec = ARG_exec;
     3805
     3806    bool result = jsLess(exec, src1, src2);
     3807    VM_CHECK_EXCEPTION_AT_END();
     3808    return result;
     3809}
     3810
     3811JSValue* Machine::cti_op_new_object(CTI_ARGS)
     3812{
     3813    return constructEmptyObject(ARG_exec);;
     3814}
     3815
     3816void Machine::cti_op_put_by_id(CTI_ARGS)
     3817{
     3818    ExecState* exec = ARG_exec;
     3819    Identifier& ident = *ARG_id2;
     3820
     3821    PutPropertySlot slot;
     3822    ARG_src1->put(exec, ident, ARG_src3, slot);
     3823
     3824    ctiRepatchCallByReturnAddress(CTI_RETURN_ADDRESS, (void*)cti_op_put_by_id_second);
     3825
     3826    VM_CHECK_EXCEPTION_AT_END();
     3827}
     3828
     3829void Machine::cti_op_put_by_id_second(CTI_ARGS)
     3830{
     3831    ExecState* exec = ARG_exec;
     3832    Identifier& ident = *ARG_id2;
     3833
     3834    JSValue* baseValue = ARG_src1;
     3835    PutPropertySlot slot;
     3836    baseValue->put(exec, ident, ARG_src3, slot);
     3837
     3838    exec->machine()->tryCTICachePutByID(exec, ARG_codeBlock, CTI_RETURN_ADDRESS, baseValue, slot);
     3839
     3840    VM_CHECK_EXCEPTION_AT_END();
     3841}
     3842
     3843void Machine::cti_op_put_by_id_generic(CTI_ARGS)
     3844{
     3845    ExecState* exec = ARG_exec;
     3846    Identifier& ident = *ARG_id2;
     3847
     3848    PutPropertySlot slot;
     3849    ARG_src1->put(exec, ident, ARG_src3, slot);
     3850
     3851    VM_CHECK_EXCEPTION_AT_END();
     3852}
     3853
     3854void Machine::cti_op_put_by_id_fail(CTI_ARGS)
     3855{
     3856    ExecState* exec = ARG_exec;
     3857    Identifier& ident = *ARG_id2;
     3858
     3859    PutPropertySlot slot;
     3860    ARG_src1->put(exec, ident, ARG_src3, slot);
     3861
     3862    // should probably uncachePutByID() ... this would mean doing a vPC lookup - might be worth just bleeding this until the end.
     3863    ctiRepatchCallByReturnAddress(CTI_RETURN_ADDRESS, (void*)cti_op_put_by_id_generic);
     3864
     3865    VM_CHECK_EXCEPTION_AT_END();
     3866}
     3867
     3868JSValue* Machine::cti_op_get_by_id(CTI_ARGS)
     3869{
     3870    ExecState* exec = ARG_exec;
     3871    Identifier& ident = *ARG_id2;
     3872
     3873    JSValue* baseValue = ARG_src1;
     3874    PropertySlot slot(baseValue);
     3875    JSValue* result = baseValue->get(exec, ident, slot);
     3876
     3877    ctiRepatchCallByReturnAddress(CTI_RETURN_ADDRESS, (void*)cti_op_get_by_id_second);
     3878
     3879    VM_CHECK_EXCEPTION_AT_END();
     3880    return result;
     3881}
     3882
     3883JSValue* Machine::cti_op_get_by_id_second(CTI_ARGS)
     3884{
     3885    ExecState* exec = ARG_exec;
     3886    Identifier& ident = *ARG_id2;
     3887
     3888    JSValue* baseValue = ARG_src1;
     3889    PropertySlot slot(baseValue);
     3890    JSValue* result = baseValue->get(exec, ident, slot);
     3891
     3892    exec->machine()->tryCTICacheGetByID(exec, ARG_codeBlock, CTI_RETURN_ADDRESS, baseValue, ident, slot);
     3893
     3894    VM_CHECK_EXCEPTION_AT_END();
     3895    return result;
     3896}
     3897
     3898JSValue* Machine::cti_op_get_by_id_generic(CTI_ARGS)
     3899{
     3900    ExecState* exec = ARG_exec;
     3901    Identifier& ident = *ARG_id2;
     3902
     3903    JSValue* baseValue = ARG_src1;
     3904    PropertySlot slot(baseValue);
     3905    JSValue* result = baseValue->get(exec, ident, slot);
     3906
     3907    VM_CHECK_EXCEPTION_AT_END();
     3908    return result;
     3909}
     3910
     3911JSValue* Machine::cti_op_get_by_id_fail(CTI_ARGS)
     3912{
     3913    ExecState* exec = ARG_exec;
     3914    Identifier& ident = *ARG_id2;
     3915
     3916    JSValue* baseValue = ARG_src1;
     3917    PropertySlot slot(baseValue);
     3918    JSValue* result = baseValue->get(exec, ident, slot);
     3919
     3920    // should probably uncacheGetByID() ... this would mean doing a vPC lookup - might be worth just bleeding this until the end.
     3921    ctiRepatchCallByReturnAddress(CTI_RETURN_ADDRESS, (void*)cti_op_get_by_id_generic);
     3922
     3923    VM_CHECK_EXCEPTION_AT_END();
     3924    return result;
     3925}
     3926
     3927JSValue* Machine::cti_op_instanceof(CTI_ARGS)
     3928{
     3929    ExecState* exec = ARG_exec;
     3930    JSValue* baseVal = ARG_src2;
     3931
     3932    if (!baseVal->isObject()) {
     3933        CodeBlock* codeBlock = ARG_codeBlock;
     3934        ASSERT(codeBlock->ctiReturnAddressVPCMap.contains(CTI_RETURN_ADDRESS));
     3935        unsigned vPCIndex = codeBlock->ctiReturnAddressVPCMap.get(CTI_RETURN_ADDRESS);
     3936        exec->setException(createInvalidParamError(exec, "instanceof", baseVal, codeBlock->instructions.begin() + vPCIndex, codeBlock));
     3937        VM_CHECK_EXCEPTION(JSValue*);
     3938    }
     3939
     3940    JSObject* baseObj = static_cast<JSObject*>(baseVal);
     3941    JSValue* result = jsBoolean(baseObj->implementsHasInstance() ? baseObj->hasInstance(exec,  ARG_src1) : false);
     3942    VM_CHECK_EXCEPTION_AT_END();
     3943    return result;
     3944}
     3945
     3946JSValue* Machine::cti_op_del_by_id(CTI_ARGS)
     3947{
     3948    ExecState* exec = ARG_exec;
     3949    Identifier& ident = *ARG_id2;
     3950   
     3951    JSObject* baseObj = ARG_src1->toObject(exec);
     3952
     3953    JSValue* result = jsBoolean(baseObj->deleteProperty(exec, ident));
     3954    VM_CHECK_EXCEPTION_AT_END();
     3955    return result;
     3956}
     3957
     3958JSValue* Machine::cti_op_mul(CTI_ARGS)
     3959{
     3960    ExecState* exec = ARG_exec;
     3961    JSValue* src1 = ARG_src1;
     3962    JSValue* src2 = ARG_src2;
     3963
     3964    double left;
     3965    double right;
     3966    if (fastIsNumber(src1, left) && fastIsNumber(src2, right))
     3967        return jsNumber(exec, left * right);
     3968    else {
     3969        JSValue* result = jsNumber(exec, src1->toNumber(exec) * src2->toNumber(exec));
     3970        VM_CHECK_EXCEPTION_AT_END();
     3971        return result;
     3972    }
     3973}
     3974
     3975JSValue* Machine::cti_op_new_func(CTI_ARGS)
     3976{
     3977    return ARG_func1->makeFunction(ARG_exec, ARG_scopeChain);
     3978}
     3979
     3980void* Machine::cti_op_call_JSFunction(CTI_ARGS)
     3981{
     3982    ExecState* exec = ARG_exec;
     3983    RegisterFile* registerFile = ARG_registerFile;
     3984    Register* r = ARG_r;
     3985    CodeBlock* codeBlock = ARG_codeBlock;
     3986    ScopeChainNode* scopeChain = ARG_scopeChain;
     3987
     3988    Machine* machine = exec->machine();
     3989    JSValue* exceptionValue = 0;
     3990    Register* registerBase = registerFile->base();
     3991   
     3992    JSValue* funcVal = ARG_src1;
     3993    JSValue* thisValue = ARG_src2;
     3994    int firstArg = ARG_int3;
     3995    int argCount = ARG_int4;
     3996
     3997    CallData callData;
     3998#ifndef NDEBUG
     3999    CallType callType =
     4000#endif
     4001        funcVal->getCallData(callData);
     4002
     4003    ASSERT(callType == CallTypeJS);
     4004
     4005    if (*ARG_profilerReference)
     4006        (*ARG_profilerReference)->willExecute(exec, static_cast<JSObject*>(funcVal));
     4007
     4008    ScopeChainNode* callDataScopeChain = callData.js.scopeChain;
     4009    FunctionBodyNode* functionBodyNode = callData.js.functionBody;
     4010    CodeBlock* newCodeBlock = &functionBodyNode->byteCode(callDataScopeChain);
     4011
     4012    r[firstArg] = thisValue;
     4013
     4014    Register* callFrame = r + firstArg - RegisterFile::CallFrameHeaderSize;
     4015    machine->initializeCallFrame(callFrame, codeBlock, ARG_instr5, scopeChain, r, 0/*dst*/, firstArg, argCount, 0, funcVal);
     4016    exec->m_callFrame = callFrame;
     4017
     4018    r = slideRegisterWindowForCall(exec, newCodeBlock, registerFile, registerBase, r, firstArg, argCount, exceptionValue);
     4019    JSVALUE_VM_CHECK_EXCEPTION_ARG(exceptionValue);
     4020   
     4021    codeBlock = newCodeBlock;
     4022    machine->setScopeChain(exec, scopeChain, scopeChainForCall(exec, functionBodyNode, codeBlock, callDataScopeChain, r));
     4023
     4024    if (!codeBlock->ctiCode)
     4025        CTI::compile(machine, exec, codeBlock);
     4026
     4027    ARG_setScopeChain(scopeChain);
     4028    ARG_setCodeBlock(codeBlock);
     4029    ARG_setR(r);
     4030    return codeBlock->ctiCode;
     4031}
     4032
     4033JSValue* Machine::cti_op_call_NotJSFunction(CTI_ARGS)
     4034{
     4035    ExecState* exec = ARG_exec;
     4036    Register* r = ARG_r;
     4037
     4038    JSValue* funcVal = ARG_src1;
     4039    JSValue* thisValue = ARG_src2;
     4040    int firstArg = ARG_int3;
     4041    int argCount = ARG_int4;
     4042
     4043    CallData callData;
     4044    CallType callType = funcVal->getCallData(callData);
     4045
     4046    ASSERT(callType != CallTypeJS);
     4047
     4048    if (callType == CallTypeHost) {
     4049        CodeBlock* codeBlock = ARG_codeBlock;
     4050        ScopeChainNode* scopeChain = ARG_scopeChain;
     4051        Machine* machine = exec->machine();
     4052
     4053        Register* oldCallFrame = exec->m_callFrame;
     4054        Register* callFrame = r + firstArg - RegisterFile::CallFrameHeaderSize;
     4055        machine->initializeCallFrame(callFrame, codeBlock, ARG_instr5, scopeChain, r, 0/*dst*/, firstArg, argCount, 0, funcVal);
     4056        exec->m_callFrame = callFrame;
     4057
     4058        if (*ARG_profilerReference)
     4059            (*ARG_profilerReference)->willExecute(exec, static_cast<JSObject*>(funcVal));
     4060
     4061        ArgList argList(r + firstArg + 1, argCount - 1);
     4062
     4063        CTI_MACHINE_SAMPLING_callingHostFunction();
     4064
     4065        JSValue* returnValue = callData.native.function(exec, static_cast<JSObject*>(funcVal), thisValue, argList);
     4066        exec->m_callFrame = oldCallFrame;
     4067        VM_CHECK_EXCEPTION(JSValue*);
     4068
     4069        if (*ARG_profilerReference)
     4070            (*ARG_profilerReference)->didExecute(exec, static_cast<JSObject*>(funcVal));
     4071
     4072        return returnValue;
     4073
     4074    }
     4075
     4076    ASSERT(callType == CallTypeNone);
     4077
     4078    exec->setException(createNotAFunctionError(exec, funcVal, ARG_instr5, ARG_codeBlock));
     4079    VM_CHECK_EXCEPTION_AT_END();
     4080    return 0;
     4081}
     4082
     4083JSValue* Machine::cti_op_ret(CTI_ARGS)
     4084{
     4085    ExecState* exec = ARG_exec;
     4086    Register* r = ARG_r;
     4087    CodeBlock* codeBlock = ARG_codeBlock;
     4088    ScopeChainNode* scopeChain = ARG_scopeChain;
     4089
     4090    Machine* machine = exec->machine();
     4091
     4092    Register* callFrame = r - codeBlock->numLocals - RegisterFile::CallFrameHeaderSize;
     4093    if (JSActivation* activation = static_cast<JSActivation*>(callFrame[RegisterFile::OptionalCalleeActivation].jsValue(exec))) {
     4094        ASSERT(!codeBlock->needsFullScopeChain || scopeChain->object == activation);
     4095        ASSERT(activation->isActivationObject());
     4096        activation->copyRegisters();
     4097    }
     4098
     4099    if (*ARG_profilerReference)
     4100        (*ARG_profilerReference)->didExecute(exec, static_cast<JSObject*>(callFrame[RegisterFile::Callee].jsValue(exec)));
     4101
     4102    if (codeBlock->needsFullScopeChain)
     4103        scopeChain->deref();
     4104
     4105    JSValue* returnValue = ARG_src1;
     4106    if (callFrame[RegisterFile::CalledAsConstructor].i() && !returnValue->isObject()) {
     4107        JSValue* thisObject = callFrame[RegisterFile::CallFrameHeaderSize].jsValue(exec);
     4108        returnValue = thisObject;
     4109    }
     4110
     4111    codeBlock = callFrame[RegisterFile::CallerCodeBlock].codeBlock();
     4112    if (codeBlock) {
     4113        machine->setScopeChain(exec, scopeChain, callFrame[RegisterFile::CallerScopeChain].scopeChain());
     4114        r = callFrame[RegisterFile::CallerRegisters].r();
     4115        exec->m_callFrame = r - codeBlock->numLocals - RegisterFile::CallFrameHeaderSize;
     4116    }
     4117
     4118    ARG_setScopeChain(scopeChain);
     4119    ARG_setCodeBlock(codeBlock);
     4120    ARG_setR(r);
     4121
     4122    return returnValue;
     4123}
     4124
     4125JSValue* Machine::cti_op_new_array(CTI_ARGS)
     4126{
     4127    ArgList argsList(ARG_registers1, ARG_int2);
     4128    return constructArray(ARG_exec, argsList);
     4129}
     4130
     4131JSValue* Machine::cti_op_resolve(CTI_ARGS)
     4132{
     4133    ExecState* exec = ARG_exec;
     4134    ScopeChainNode* scopeChain = ARG_scopeChain;
     4135
     4136    ScopeChainIterator iter = scopeChain->begin();
     4137    ScopeChainIterator end = scopeChain->end();
     4138    ASSERT(iter != end);
     4139
     4140    Identifier& ident = *ARG_id1;
     4141    do {
     4142        JSObject* o = *iter;
     4143        PropertySlot slot(o);
     4144        if (o->getPropertySlot(exec, ident, slot)) {
     4145            JSValue* result = slot.getValue(exec, ident);
     4146            VM_CHECK_EXCEPTION_AT_END();
     4147            return result;
     4148        }
     4149    } while (++iter != end);
     4150
     4151    CodeBlock* codeBlock = ARG_codeBlock;
     4152    ASSERT(codeBlock->ctiReturnAddressVPCMap.contains(CTI_RETURN_ADDRESS));
     4153    unsigned vPCIndex = codeBlock->ctiReturnAddressVPCMap.get(CTI_RETURN_ADDRESS);
     4154    exec->setException(createUndefinedVariableError(exec, ident, codeBlock->instructions.begin() + vPCIndex, codeBlock));
     4155
     4156    VM_CHECK_EXCEPTION_AT_END();
     4157    return 0;
     4158}
     4159
     4160void* Machine::cti_op_construct_JSConstruct(CTI_ARGS)
     4161{
     4162    ExecState* exec = ARG_exec;
     4163    RegisterFile* registerFile = ARG_registerFile;
     4164    Register* r = ARG_r;
     4165    CodeBlock* codeBlock = ARG_codeBlock;
     4166    ScopeChainNode* scopeChain = ARG_scopeChain;
     4167
     4168    Machine* machine = exec->machine();
     4169    JSValue* exceptionValue = 0;
     4170    Register* registerBase = registerFile->base();
     4171   
     4172    JSValue* constrVal = ARG_src1;
     4173    int firstArg = ARG_int2;
     4174    int argCount = ARG_int3;
     4175
     4176    ConstructData constructData;
     4177#ifndef NDEBUG
     4178    ConstructType constructType =
     4179#endif
     4180        constrVal->getConstructData(constructData);
     4181
     4182    // Removing this line of code causes a measurable regression on squirrelfish.
     4183    JSObject* constructor = static_cast<JSObject*>(constrVal);
     4184
     4185    ASSERT(constructType == ConstructTypeJS);
     4186
     4187    if (*ARG_profilerReference)
     4188        (*ARG_profilerReference)->willExecute(exec, constructor);
     4189
     4190    JSObject* prototype;
     4191    JSValue* p = constructor->get(exec, exec->propertyNames().prototype);
     4192    if (p->isObject())
     4193        prototype = static_cast<JSObject*>(p);
     4194    else
     4195        prototype = scopeChain->globalObject()->objectPrototype();
     4196    JSObject* newObject = new (exec) JSObject(prototype);
     4197
     4198    ScopeChainNode* callDataScopeChain = constructData.js.scopeChain;
     4199    FunctionBodyNode* functionBodyNode = constructData.js.functionBody;
     4200    CodeBlock* newCodeBlock = &functionBodyNode->byteCode(callDataScopeChain);
     4201
     4202    r[firstArg] = newObject; // "this" value
     4203
     4204    Register* callFrame = r + firstArg - RegisterFile::CallFrameHeaderSize;
     4205    machine->initializeCallFrame(callFrame, codeBlock, ARG_instr4, scopeChain, r, 0/*dst*/, firstArg, argCount, 1, constructor);
     4206    exec->m_callFrame = callFrame;
     4207
     4208    r = slideRegisterWindowForCall(exec, newCodeBlock, registerFile, registerBase, r, firstArg, argCount, exceptionValue);
     4209    JSVALUE_VM_CHECK_EXCEPTION_ARG(exceptionValue);
     4210
     4211    codeBlock = newCodeBlock;
     4212    machine->setScopeChain(exec, scopeChain, scopeChainForCall(exec, functionBodyNode, codeBlock, callDataScopeChain, r));
     4213
     4214    if (!codeBlock->ctiCode)
     4215        CTI::compile(machine, exec, codeBlock);
     4216
     4217    ARG_setScopeChain(scopeChain);
     4218    ARG_setCodeBlock(codeBlock);
     4219    ARG_setR(r);
     4220    return codeBlock->ctiCode;
     4221}
     4222
     4223JSValue* Machine::cti_op_construct_NotJSConstruct(CTI_ARGS)
     4224{
     4225    ExecState* exec = ARG_exec;
     4226    Register* r = ARG_r;
     4227
     4228    JSValue* constrVal = ARG_src1;
     4229    int firstArg = ARG_int2;
     4230    int argCount = ARG_int3;
     4231
     4232    ConstructData constructData;
     4233    ConstructType constructType = constrVal->getConstructData(constructData);
     4234
     4235    // Removing this line of code causes a measurable regression on squirrelfish.
     4236    JSObject* constructor = static_cast<JSObject*>(constrVal);
     4237
     4238    ASSERT(constructType != ConstructTypeJS);
     4239
     4240    if (constructType == ConstructTypeHost) {
     4241        CodeBlock* codeBlock = ARG_codeBlock;
     4242        ScopeChainNode* scopeChain = ARG_scopeChain;
     4243        Machine* machine = exec->machine();
     4244
     4245        Register* oldCallFrame = exec->m_callFrame;
     4246        Register* callFrame = r + firstArg - RegisterFile::CallFrameHeaderSize;
     4247        machine->initializeCallFrame(callFrame, codeBlock, ARG_instr5, scopeChain, r, 0/*dst*/, firstArg, argCount, 1, constrVal);
     4248        exec->m_callFrame = callFrame;
     4249
     4250        if (*ARG_profilerReference)
     4251            (*ARG_profilerReference)->willExecute(exec, constructor);
     4252
     4253        ArgList argList(r + firstArg + 1, argCount - 1);
     4254
     4255        CTI_MACHINE_SAMPLING_callingHostFunction();
     4256
     4257        JSValue* returnValue = constructData.native.function(exec, constructor, argList);
     4258        exec->m_callFrame = oldCallFrame;
     4259        VM_CHECK_EXCEPTION(JSValue*);
     4260
     4261        if (*ARG_profilerReference)
     4262            (*ARG_profilerReference)->didExecute(exec, constructor);
     4263
     4264        return returnValue;
     4265    }
     4266
     4267    ASSERT(constructType == ConstructTypeNone);
     4268
     4269    exec->setException(createNotAConstructorError(exec, constrVal, ARG_instr4, ARG_codeBlock));
     4270    VM_CHECK_EXCEPTION_AT_END();
     4271    return 0;
     4272}
     4273
     4274JSValue* Machine::cti_op_get_by_val(CTI_ARGS)
     4275{
     4276    ExecState* exec = ARG_exec;
     4277    Machine* machine = exec->machine();
     4278
     4279    JSValue* baseValue = ARG_src1;
     4280    JSValue* subscript = ARG_src2;
     4281
     4282    JSValue* result;
     4283    unsigned i;
     4284
     4285    bool isUInt32 = JSImmediate::getUInt32(subscript, i);
     4286    if (LIKELY(isUInt32)) {
     4287        if (machine->isJSArray(baseValue)) {
     4288            JSArray* jsArray = static_cast<JSArray*>(baseValue);
     4289            if (jsArray->canGetIndex(i))
     4290                result = jsArray->getIndex(i);
     4291            else
     4292                result = jsArray->JSArray::get(exec, i);
     4293        } else if (machine->isJSString(baseValue) && static_cast<JSString*>(baseValue)->canGetIndex(i))
     4294            result = static_cast<JSString*>(baseValue)->getIndex(exec, i);
     4295        else
     4296            result = baseValue->get(exec, i);
     4297    } else {
     4298        Identifier property(exec, subscript->toString(exec));
     4299        result = baseValue->get(exec, property);
     4300    }
     4301
     4302    VM_CHECK_EXCEPTION_AT_END();
     4303    return result;
     4304}
     4305
     4306JSValue* Machine::cti_op_resolve_func(CTI_ARGS)
     4307{
     4308    ExecState* exec = ARG_exec;
     4309    ScopeChainNode* scopeChain = ARG_scopeChain;
     4310
     4311    ScopeChainIterator iter = scopeChain->begin();
     4312    ScopeChainIterator end = scopeChain->end();
     4313
     4314    // FIXME: add scopeDepthIsZero optimization
     4315
     4316    ASSERT(iter != end);
     4317
     4318    Identifier& ident = *ARG_id1;
     4319    JSObject* base;
     4320    do {
     4321        base = *iter;
     4322        PropertySlot slot(base);
     4323        if (base->getPropertySlot(exec, ident, slot)) {           
     4324            // ECMA 11.2.3 says that if we hit an activation the this value should be null.
     4325            // However, section 10.2.3 says that in the case where the value provided
     4326            // by the caller is null, the global object should be used. It also says
     4327            // that the section does not apply to internal functions, but for simplicity
     4328            // of implementation we use the global object anyway here. This guarantees
     4329            // that in host objects you always get a valid object for this.
     4330            // We also handle wrapper substitution for the global object at the same time.
     4331            JSObject* thisObj = base->toThisObject(exec);
     4332            JSValue* result = slot.getValue(exec, ident);
     4333            VM_CHECK_EXCEPTION_AT_END();
     4334
     4335            ARG_set2ndResult(result);
     4336            return thisObj;
     4337        }
     4338        ++iter;
     4339    } while (iter != end);
     4340
     4341    CodeBlock* codeBlock = ARG_codeBlock;
     4342    ASSERT(codeBlock->ctiReturnAddressVPCMap.contains(CTI_RETURN_ADDRESS));
     4343    unsigned vPCIndex = codeBlock->ctiReturnAddressVPCMap.get(CTI_RETURN_ADDRESS);
     4344    exec->setException(createUndefinedVariableError(exec, ident, codeBlock->instructions.begin() + vPCIndex, codeBlock));
     4345
     4346    VM_CHECK_EXCEPTION_AT_END();
     4347    return 0;
     4348}
     4349
     4350JSValue* Machine::cti_op_sub(CTI_ARGS)
     4351{
     4352    JSValue* src1 = ARG_src1;
     4353    JSValue* src2 = ARG_src2;
     4354
     4355    double left;
     4356    double right;
     4357    if (fastIsNumber(src1, left) && fastIsNumber(src2, right))
     4358        return jsNumber(ARG_exec, left - right);
     4359    else {
     4360        ExecState* exec = ARG_exec;
     4361        JSValue* result = jsNumber(exec, src1->toNumber(exec) - src2->toNumber(exec));
     4362        VM_CHECK_EXCEPTION_AT_END();
     4363        return result;
     4364    }
     4365}
     4366
     4367void Machine::cti_op_put_by_val(CTI_ARGS)
     4368{
     4369    ExecState* exec = ARG_exec;
     4370    Machine* machine = exec->machine();
     4371
     4372    JSValue* baseValue = ARG_src1;
     4373    JSValue* subscript = ARG_src2;
     4374    JSValue* value = ARG_src3;
     4375
     4376    unsigned i;
     4377
     4378    bool isUInt32 = JSImmediate::getUInt32(subscript, i);
     4379    if (LIKELY(isUInt32)) {
     4380        if (machine->isJSArray(baseValue)) {
     4381            JSArray* jsArray = static_cast<JSArray*>(baseValue);
     4382            if (jsArray->canSetIndex(i))
     4383                jsArray->setIndex(i, value);
     4384            else
     4385                jsArray->JSArray::put(exec, i, value);
     4386        } else
     4387            baseValue->put(exec, i, value);
     4388    } else {
     4389        Identifier property(exec, subscript->toString(exec));
     4390        if (!exec->hadException()) { // Don't put to an object if toString threw an exception.
     4391            PutPropertySlot slot;
     4392            baseValue->put(exec, property, value, slot);
     4393        }
     4394    }
     4395
     4396    VM_CHECK_EXCEPTION_AT_END();
     4397}
     4398
     4399JSValue* Machine::cti_op_lesseq(CTI_ARGS)
     4400{
     4401    ExecState* exec = ARG_exec;
     4402    JSValue* result = jsBoolean(jsLessEq(exec, ARG_src1, ARG_src2));
     4403    VM_CHECK_EXCEPTION_AT_END();
     4404    return result;
     4405}
     4406
     4407int Machine::cti_op_loop_if_true(CTI_ARGS)
     4408{
     4409    JSValue* src1 = ARG_src1;
     4410
     4411    ExecState* exec = ARG_exec;
     4412
     4413    bool result = src1->toBoolean(exec);
     4414    VM_CHECK_EXCEPTION_AT_END();
     4415    return result;
     4416}
     4417
     4418JSValue* Machine::cti_op_negate(CTI_ARGS)
     4419{
     4420    JSValue* src = ARG_src1;
     4421
     4422    ExecState* exec = ARG_exec;
     4423
     4424    double v;
     4425    if (fastIsNumber(src, v))
     4426        return jsNumber(exec, -v);
     4427    else {
     4428        JSValue* result = jsNumber(exec, -src->toNumber(exec));
     4429        VM_CHECK_EXCEPTION_AT_END();
     4430        return result;
     4431    }
     4432}
     4433
     4434JSValue* Machine::cti_op_resolve_base(CTI_ARGS)
     4435{
     4436    return inlineResolveBase(ARG_exec, *ARG_id1, ARG_scopeChain);
     4437}
     4438
     4439JSValue* Machine::cti_op_resolve_skip(CTI_ARGS)
     4440{
     4441    ExecState* exec = ARG_exec;
     4442    ScopeChainNode* scopeChain = ARG_scopeChain;
     4443
     4444    int skip = ARG_int2;
     4445
     4446    ScopeChainIterator iter = scopeChain->begin();
     4447    ScopeChainIterator end = scopeChain->end();
     4448    ASSERT(iter != end);
     4449    while (skip--) {
     4450        ++iter;
     4451        ASSERT(iter != end);
     4452    }
     4453    Identifier& ident = *ARG_id1;
     4454    do {
     4455        JSObject* o = *iter;
     4456        PropertySlot slot(o);
     4457        if (o->getPropertySlot(exec, ident, slot)) {
     4458            JSValue* result = slot.getValue(exec, ident);
     4459            VM_CHECK_EXCEPTION_AT_END();
     4460            return result;
     4461        }
     4462    } while (++iter != end);
     4463
     4464    CodeBlock* codeBlock = ARG_codeBlock;
     4465    ASSERT(codeBlock->ctiReturnAddressVPCMap.contains(CTI_RETURN_ADDRESS));
     4466    unsigned vPCIndex = codeBlock->ctiReturnAddressVPCMap.get(CTI_RETURN_ADDRESS);
     4467    exec->setException(createUndefinedVariableError(exec, ident, codeBlock->instructions.begin() + vPCIndex, codeBlock));
     4468
     4469    VM_CHECK_EXCEPTION_AT_END();
     4470    return 0;
     4471}
     4472
     4473JSValue* Machine::cti_op_div(CTI_ARGS)
     4474{
     4475    ExecState* exec = ARG_exec;
     4476    JSValue* src1 = ARG_src1;
     4477    JSValue* src2 = ARG_src2;
     4478
     4479    double left;
     4480    double right;
     4481    if (fastIsNumber(src1, left) && fastIsNumber(src2, right))
     4482        return jsNumber(exec, left / right);
     4483    else {
     4484        JSValue* result = jsNumber(exec, src1->toNumber(exec) / src2->toNumber(exec));
     4485        VM_CHECK_EXCEPTION_AT_END();
     4486        return result;
     4487    }
     4488}
     4489
     4490JSValue* Machine::cti_op_pre_dec(CTI_ARGS)
     4491{
     4492    JSValue* v = ARG_src1;
     4493
     4494    ExecState* exec = ARG_exec;
     4495    JSValue* result = jsNumber(exec, v->toNumber(exec) - 1);
     4496    VM_CHECK_EXCEPTION_AT_END();
     4497    return result;
     4498}
     4499
     4500int Machine::cti_op_jless(CTI_ARGS)
     4501{
     4502    JSValue* src1 = ARG_src1;
     4503    JSValue* src2 = ARG_src2;
     4504    ExecState* exec = ARG_exec;
     4505
     4506    bool result = jsLess(exec, src1, src2);
     4507    VM_CHECK_EXCEPTION_AT_END();
     4508    return result;
     4509}
     4510
     4511JSValue* Machine::cti_op_not(CTI_ARGS)
     4512{
     4513    JSValue* src = ARG_src1;
     4514
     4515    ExecState* exec = ARG_exec;
     4516
     4517    JSValue* result = jsBoolean(!src->toBoolean(exec));
     4518    VM_CHECK_EXCEPTION_AT_END();
     4519    return result;
     4520}
     4521
     4522int SFX_CALL Machine::cti_op_jtrue(CTI_ARGS)
     4523{
     4524    JSValue* src1 = ARG_src1;
     4525
     4526    ExecState* exec = ARG_exec;
     4527
     4528    bool result = src1->toBoolean(exec);
     4529    VM_CHECK_EXCEPTION_AT_END();
     4530    return result;
     4531}
     4532
     4533JSValue* Machine::cti_op_post_inc(CTI_ARGS)
     4534{
     4535    JSValue* v = ARG_src1;
     4536
     4537    ExecState* exec = ARG_exec;
     4538
     4539    JSValue* number = v->toJSNumber(exec);
     4540    VM_CHECK_EXCEPTION(JSValue*);
     4541    ARG_set2ndResult(jsNumber(exec, number->uncheckedGetNumber() + 1));
     4542    return number;
     4543}
     4544
     4545JSValue* Machine::cti_op_eq(CTI_ARGS)
     4546{
     4547    JSValue* src1 = ARG_src1;
     4548    JSValue* src2 = ARG_src2;
     4549
     4550    if (JSImmediate::areBothImmediateNumbers(src1, src2))
     4551        return jsBoolean(reinterpret_cast<intptr_t>(src1) == reinterpret_cast<intptr_t>(src2));
     4552    else {
     4553        ExecState* exec = ARG_exec;
     4554        JSValue* result = jsBoolean(equal(exec, src1, src2));
     4555        VM_CHECK_EXCEPTION_AT_END();
     4556        return result;
     4557    }
     4558}
     4559
     4560JSValue* Machine::cti_op_lshift(CTI_ARGS)
     4561{
     4562    JSValue* val = ARG_src1;
     4563    JSValue* shift = ARG_src2;
     4564
     4565    ExecState* exec = ARG_exec;
     4566
     4567    int32_t left;
     4568    uint32_t right;
     4569    if (JSImmediate::areBothImmediateNumbers(val, shift))
     4570        return jsNumber(exec, JSImmediate::getTruncatedInt32(val) << (JSImmediate::getTruncatedUInt32(shift) & 0x1f));
     4571    else if (fastToInt32(val, left) && fastToUInt32(shift, right))
     4572        return jsNumber(exec, left << (right & 0x1f));
     4573    else {
     4574        JSValue* result = jsNumber(exec, (val->toInt32(exec)) << (shift->toUInt32(exec) & 0x1f));
     4575        VM_CHECK_EXCEPTION_AT_END();
     4576        return result;
     4577    }
     4578}
     4579
     4580JSValue* Machine::cti_op_bitand(CTI_ARGS)
     4581{
     4582    JSValue* src1 = ARG_src1;
     4583    JSValue* src2 = ARG_src2;
     4584
     4585    ExecState* exec = ARG_exec;
     4586
     4587    int32_t left;
     4588    int32_t right;
     4589    if (fastToInt32(src1, left) && fastToInt32(src2, right))
     4590        return jsNumber(exec, left & right);
     4591    else {
     4592        JSValue* result = jsNumber(exec, src1->toInt32(exec) & src2->toInt32(exec));
     4593        VM_CHECK_EXCEPTION_AT_END();
     4594        return result;
     4595    }
     4596}
     4597
     4598JSValue* Machine::cti_op_rshift(CTI_ARGS)
     4599{
     4600    JSValue* val = ARG_src1;
     4601    JSValue* shift = ARG_src2;
     4602
     4603    ExecState* exec = ARG_exec;
     4604
     4605    int32_t left;
     4606    uint32_t right;
     4607    if (JSImmediate::areBothImmediateNumbers(val, shift))
     4608        return JSImmediate::rightShiftImmediateNumbers(val, shift);
     4609    else if (fastToInt32(val, left) && fastToUInt32(shift, right))
     4610        return jsNumber(exec, left >> (right & 0x1f));
     4611    else {
     4612        JSValue* result = jsNumber(exec, (val->toInt32(exec)) >> (shift->toUInt32(exec) & 0x1f));
     4613        VM_CHECK_EXCEPTION_AT_END();
     4614        return result;
     4615    }
     4616}
     4617
     4618JSValue* Machine::cti_op_bitnot(CTI_ARGS)
     4619{
     4620    JSValue* src = ARG_src1;
     4621
     4622    ExecState* exec = ARG_exec;
     4623
     4624    int value;
     4625    if (fastToInt32(src, value))
     4626        return jsNumber(exec, ~value);
     4627           
     4628    JSValue* result = jsNumber(exec, ~src->toInt32(exec));
     4629    VM_CHECK_EXCEPTION_AT_END();
     4630    return result;
     4631}
     4632
     4633JSValue* Machine::cti_op_resolve_with_base(CTI_ARGS)
     4634{
     4635    ExecState* exec = ARG_exec;
     4636    ScopeChainNode* scopeChain = ARG_scopeChain;
     4637
     4638    ScopeChainIterator iter = scopeChain->begin();
     4639    ScopeChainIterator end = scopeChain->end();
     4640
     4641    // FIXME: add scopeDepthIsZero optimization
     4642
     4643    ASSERT(iter != end);
     4644
     4645    Identifier& ident = *ARG_id1;
     4646    JSObject* base;
     4647    do {
     4648        base = *iter;
     4649        PropertySlot slot(base);
     4650        if (base->getPropertySlot(exec, ident, slot)) {
     4651            JSValue* result = slot.getValue(exec, ident);
     4652            VM_CHECK_EXCEPTION_AT_END();
     4653            ARG_set2ndResult(result);
     4654            return base;
     4655        }
     4656        ++iter;
     4657    } while (iter != end);
     4658
     4659    CodeBlock* codeBlock = ARG_codeBlock;
     4660    ASSERT(codeBlock->ctiReturnAddressVPCMap.contains(CTI_RETURN_ADDRESS));
     4661    unsigned vPCIndex = codeBlock->ctiReturnAddressVPCMap.get(CTI_RETURN_ADDRESS);
     4662    exec->setException(createUndefinedVariableError(exec, ident, codeBlock->instructions.begin() + vPCIndex, codeBlock));
     4663
     4664    VM_CHECK_EXCEPTION_AT_END();
     4665    return 0;
     4666}
     4667
     4668JSValue* Machine::cti_op_new_func_exp(CTI_ARGS)
     4669{
     4670    return ARG_funcexp1->makeFunction(ARG_exec, ARG_scopeChain);
     4671}
     4672
     4673JSValue* Machine::cti_op_mod(CTI_ARGS)
     4674{
     4675    JSValue* dividendValue = ARG_src1;
     4676    JSValue* divisorValue = ARG_src2;
     4677
     4678    ExecState* exec = ARG_exec;
     4679    double d = dividendValue->toNumber(exec);
     4680    JSValue* result = jsNumber(exec, fmod(d, divisorValue->toNumber(exec)));
     4681    VM_CHECK_EXCEPTION_AT_END();
     4682    return result;
     4683}
     4684
     4685JSValue* Machine::cti_op_less(CTI_ARGS)
     4686{
     4687    ExecState* exec = ARG_exec;
     4688    JSValue* result = jsBoolean(jsLess(exec, ARG_src1, ARG_src2));
     4689    VM_CHECK_EXCEPTION_AT_END();
     4690    return result;
     4691}
     4692
     4693JSValue* Machine::cti_op_neq(CTI_ARGS)
     4694{
     4695    JSValue* src1 = ARG_src1;
     4696    JSValue* src2 = ARG_src2;
     4697
     4698    if (JSImmediate::areBothImmediateNumbers(src1, src2))
     4699        return jsBoolean(reinterpret_cast<intptr_t>(src1) != reinterpret_cast<intptr_t>(src2));
     4700    else {
     4701        ExecState* exec = ARG_exec;
     4702        JSValue* result = jsBoolean(!equal(exec, src1, src2));
     4703        VM_CHECK_EXCEPTION_AT_END();
     4704        return result;
     4705    }
     4706}
     4707
     4708JSValue* Machine::cti_op_post_dec(CTI_ARGS)
     4709{
     4710    JSValue* v = ARG_src1;
     4711
     4712    ExecState* exec = ARG_exec;
     4713
     4714    JSValue* number = v->toJSNumber(exec);
     4715    VM_CHECK_EXCEPTION(JSValue*);
     4716
     4717    ARG_set2ndResult(jsNumber(exec, number->uncheckedGetNumber() - 1));
     4718    return number;
     4719}
     4720
     4721JSValue* Machine::cti_op_urshift(CTI_ARGS)
     4722{
     4723    JSValue* val = ARG_src1;
     4724    JSValue* shift = ARG_src2;
     4725
     4726    ExecState* exec = ARG_exec;
     4727
     4728    if (JSImmediate::areBothImmediateNumbers(val, shift) && !JSImmediate::isNegative(val))
     4729        return JSImmediate::rightShiftImmediateNumbers(val, shift);
     4730    else {
     4731        JSValue* result = jsNumber(exec, (val->toUInt32(exec)) >> (shift->toUInt32(exec) & 0x1f));
     4732        VM_CHECK_EXCEPTION_AT_END();
     4733        return result;
     4734    }
     4735}
     4736
     4737JSValue* Machine::cti_op_bitxor(CTI_ARGS)
     4738{
     4739    JSValue* src1 = ARG_src1;
     4740    JSValue* src2 = ARG_src2;
     4741
     4742    ExecState* exec = ARG_exec;
     4743
     4744    JSValue* result = jsNumber(exec, src1->toInt32(exec) ^ src2->toInt32(exec));
     4745    VM_CHECK_EXCEPTION_AT_END();
     4746    return result;
     4747}
     4748
     4749JSValue* Machine::cti_op_new_regexp(CTI_ARGS)
     4750{
     4751    return new (ARG_exec) RegExpObject(ARG_scopeChain->globalObject()->regExpPrototype(), ARG_regexp1);
     4752}
     4753
     4754JSValue* Machine::cti_op_bitor(CTI_ARGS)
     4755{
     4756    JSValue* src1 = ARG_src1;
     4757    JSValue* src2 = ARG_src2;
     4758
     4759    ExecState* exec = ARG_exec;
     4760
     4761    JSValue* result = jsNumber(exec, src1->toInt32(exec) | src2->toInt32(exec));
     4762    VM_CHECK_EXCEPTION_AT_END();
     4763    return result;
     4764}
     4765
     4766JSValue* Machine::cti_op_call_eval(CTI_ARGS)
     4767{
     4768    ExecState* exec = ARG_exec;
     4769    RegisterFile* registerFile = ARG_registerFile;
     4770    Register* r = ARG_r;
     4771    CodeBlock* codeBlock = ARG_codeBlock;
     4772    ScopeChainNode* scopeChain = ARG_scopeChain;
     4773
     4774    Machine* machine = exec->machine();
     4775    JSValue* exceptionValue = 0;
     4776   
     4777    JSValue* funcVal = ARG_src1;
     4778    JSValue* baseVal = ARG_src2;
     4779    int firstArg = ARG_int3;
     4780    int argCount = ARG_int4;
     4781
     4782    if (baseVal == scopeChain->globalObject() && funcVal == scopeChain->globalObject()->evalFunction()) {
     4783        JSObject* thisObject = static_cast<JSObject*>(r[codeBlock->thisRegister].jsValue(exec));
     4784        JSValue* result = machine->callEval(exec, thisObject, scopeChain, registerFile,  r, firstArg, argCount, exceptionValue);
     4785        JSVALUE_VM_CHECK_EXCEPTION_ARG(exceptionValue);
     4786        return result;
     4787    }
     4788
     4789    return JSImmediate::impossibleValue();
     4790}
     4791
     4792void* Machine::cti_op_throw(CTI_ARGS)
     4793{
     4794    ExecState* exec = ARG_exec;
     4795    CodeBlock* codeBlock = ARG_codeBlock;
     4796    ScopeChainNode* scopeChain = ARG_scopeChain;
     4797    Register* r = ARG_r;
     4798
     4799    ASSERT(codeBlock->ctiReturnAddressVPCMap.contains(CTI_RETURN_ADDRESS));
     4800    unsigned vPCIndex = codeBlock->ctiReturnAddressVPCMap.get(CTI_RETURN_ADDRESS);
     4801
     4802    JSValue* exceptionValue = ARG_src1;
     4803    Instruction* handlerVPC = ARG_exec->machine()->throwException(exec, exceptionValue, codeBlock->instructions.begin() + vPCIndex, codeBlock, scopeChain, r, true);
     4804
     4805    if (handlerVPC) {
     4806        exec->setException(exceptionValue);
     4807        ARG_setScopeChain(scopeChain);
     4808        ARG_setCodeBlock(codeBlock);
     4809        ARG_setR(r);
     4810
     4811        void* catchRoutine = codeBlock->nativeExceptionCodeForHandlerVPC(handlerVPC);
     4812        ASSERT(catchRoutine);
     4813        ctiSetReturnAddress(&CTI_RETURN_ADDRESS, catchRoutine);
     4814        return catchRoutine;
     4815    } else {
     4816        exec->clearException();
     4817        *ARG_exception = exceptionValue;
     4818        return JSImmediate::nullImmediate();
     4819    }
     4820}
     4821
     4822JSPropertyNameIterator* Machine::cti_op_get_pnames(CTI_ARGS)
     4823{
     4824    return JSPropertyNameIterator::create(ARG_exec, ARG_src1);
     4825}
     4826
     4827JSValue* Machine::cti_op_next_pname(CTI_ARGS)
     4828{
     4829    JSPropertyNameIterator* it = ARG_pni1;
     4830    JSValue* temp = it->next(ARG_exec);
     4831    if (!temp)
     4832        it->invalidate();
     4833    return temp;
     4834}
     4835
     4836void Machine::cti_op_push_scope(CTI_ARGS)
     4837{
     4838    ExecState* exec = ARG_exec;
     4839
     4840    JSValue* v = ARG_src1;
     4841    JSObject* o = v->toObject(exec);
     4842    VM_CHECK_EXCEPTION_v();
     4843
     4844    ScopeChainNode* newScopeChain = ARG_scopeChain->push(o);
     4845    ARG_setScopeChain(newScopeChain);
     4846    exec->m_scopeChain = newScopeChain;
     4847}
     4848
     4849void Machine::cti_op_pop_scope(CTI_ARGS)
     4850{
     4851    ExecState* exec = ARG_exec;
     4852
     4853    ScopeChainNode* newScopeChain = ARG_scopeChain->pop();
     4854    ARG_setScopeChain(newScopeChain);
     4855    exec->m_scopeChain = newScopeChain;
     4856}
     4857
     4858JSValue* Machine::cti_op_typeof(CTI_ARGS)
     4859{
     4860    return jsTypeStringForValue(ARG_exec, ARG_src1);
     4861}
     4862
     4863JSValue* Machine::cti_op_stricteq(CTI_ARGS)
     4864{
     4865    JSValue* src1 = ARG_src1;
     4866    JSValue* src2 = ARG_src2;
     4867
     4868    if (JSImmediate::areBothImmediateNumbers(src1, src2))
     4869        return jsBoolean(reinterpret_cast<intptr_t>(src1) == reinterpret_cast<intptr_t>(src2));
     4870    else {
     4871        ExecState* exec = ARG_exec;
     4872        JSValue* result = jsBoolean(strictEqual(src1, src2));
     4873        VM_CHECK_EXCEPTION_AT_END();
     4874        return result;
     4875    }
     4876}
     4877
     4878JSValue* Machine::cti_op_nstricteq(CTI_ARGS)
     4879{
     4880    JSValue* src1 = ARG_src1;
     4881    JSValue* src2 = ARG_src2;
     4882
     4883    if (JSImmediate::areBothImmediateNumbers(src1, src2))
     4884        return jsBoolean(reinterpret_cast<intptr_t>(src1) != reinterpret_cast<intptr_t>(src2));
     4885    else {
     4886        ExecState* exec = ARG_exec;
     4887        JSValue* result = jsBoolean(!strictEqual(src1, src2));
     4888        VM_CHECK_EXCEPTION_AT_END();
     4889        return result;
     4890    }
     4891}
     4892
     4893JSValue* Machine::cti_op_to_jsnumber(CTI_ARGS)
     4894{
     4895    JSValue* src = ARG_src1;
     4896    ExecState* exec = ARG_exec;
     4897
     4898    JSValue* result = src->toJSNumber(exec);
     4899    VM_CHECK_EXCEPTION_AT_END();
     4900    return result;
     4901}
     4902
     4903JSValue* Machine::cti_op_in(CTI_ARGS)
     4904{
     4905    ExecState* exec = ARG_exec;
     4906    JSValue* baseVal = ARG_src2;
     4907
     4908    if (!baseVal->isObject()) {
     4909        CodeBlock* codeBlock = ARG_codeBlock;
     4910        ASSERT(codeBlock->ctiReturnAddressVPCMap.contains(CTI_RETURN_ADDRESS));
     4911        unsigned vPCIndex = codeBlock->ctiReturnAddressVPCMap.get(CTI_RETURN_ADDRESS);
     4912        exec->setException(createInvalidParamError(exec, "in", baseVal, codeBlock->instructions.begin() + vPCIndex, codeBlock));
     4913        VM_CHECK_EXCEPTION(JSValue*);
     4914    }
     4915
     4916    JSValue* propName = ARG_src1;
     4917    JSObject* baseObj = static_cast<JSObject*>(baseVal);
     4918
     4919    uint32_t i;
     4920    if (propName->getUInt32(i))
     4921        return jsBoolean(baseObj->hasProperty(exec, i));
     4922
     4923    Identifier property(exec, propName->toString(exec));
     4924    VM_CHECK_EXCEPTION(JSValue*);
     4925    return jsBoolean(baseObj->hasProperty(exec, property));
     4926}
     4927
     4928JSValue* Machine::cti_op_push_new_scope(CTI_ARGS)
     4929{
     4930    ExecState* exec = ARG_exec;
     4931    JSObject* scope = new (exec) JSStaticScopeObject(exec, *ARG_id1, ARG_src2, DontDelete);
     4932
     4933    ScopeChainNode* newScopeChain = ARG_scopeChain->push(scope);
     4934    ARG_setScopeChain(newScopeChain);
     4935    exec->m_scopeChain = newScopeChain;
     4936
     4937    return scope;
     4938}
     4939
     4940void Machine::cti_op_jmp_scopes(CTI_ARGS)
     4941{
     4942    ExecState* exec = ARG_exec;
     4943    unsigned count = ARG_int1;
     4944
     4945    ScopeChainNode* tmp = ARG_scopeChain;
     4946    while (count--)
     4947        tmp = tmp->pop();
     4948
     4949    ARG_setScopeChain(tmp);
     4950    exec->m_scopeChain = tmp;
     4951}
     4952
     4953void Machine::cti_op_put_by_index(CTI_ARGS)
     4954{
     4955    ExecState* exec = ARG_exec;
     4956    unsigned property = ARG_int2;
     4957
     4958    ARG_src1->put(exec, property, ARG_src3);
     4959}
     4960
     4961void* Machine::cti_op_switch_imm(CTI_ARGS)
     4962{
     4963    JSValue* scrutinee = ARG_src1;
     4964    unsigned tableIndex = ARG_int2;
     4965
     4966    CodeBlock* codeBlock = ARG_codeBlock;
     4967
     4968    if (JSImmediate::isNumber(scrutinee)) {
     4969        int32_t value = JSImmediate::getTruncatedInt32(scrutinee);
     4970        return codeBlock->immediateSwitchJumpTables[tableIndex].ctiForValue(value);
     4971    }
     4972
     4973    return codeBlock->immediateSwitchJumpTables[tableIndex].ctiDefault;
     4974}
     4975
     4976void* Machine::cti_op_switch_char(CTI_ARGS)
     4977{
     4978    JSValue* scrutinee = ARG_src1;
     4979    unsigned tableIndex = ARG_int2;
     4980
     4981    CodeBlock* codeBlock = ARG_codeBlock;
     4982
     4983    void* result = codeBlock->characterSwitchJumpTables[tableIndex].ctiDefault;
     4984
     4985    if (scrutinee->isString()) {
     4986        UString::Rep* value = static_cast<JSString*>(scrutinee)->value().rep();
     4987        if (value->size() == 1)
     4988            result = codeBlock->characterSwitchJumpTables[tableIndex].ctiForValue(value->data()[0]);
     4989    }
     4990
     4991    return result;
     4992}
     4993
     4994void* Machine::cti_op_switch_string(CTI_ARGS)
     4995{
     4996    JSValue* scrutinee = ARG_src1;
     4997    unsigned tableIndex = ARG_int2;
     4998
     4999    CodeBlock* codeBlock = ARG_codeBlock;
     5000
     5001    void* result = codeBlock->stringSwitchJumpTables[tableIndex].ctiDefault;
     5002
     5003    if (scrutinee->isString()) {
     5004        UString::Rep* value = static_cast<JSString*>(scrutinee)->value().rep();
     5005        result = codeBlock->stringSwitchJumpTables[tableIndex].ctiForValue(value);
     5006    }
     5007
     5008    return result;
     5009}
     5010
     5011JSValue* Machine::cti_op_del_by_val(CTI_ARGS)
     5012{
     5013    ExecState* exec = ARG_exec;
     5014
     5015    JSValue* baseValue = ARG_src1;
     5016    JSObject* baseObj = baseValue->toObject(exec); // may throw
     5017
     5018    JSValue* subscript = ARG_src2;
     5019    JSValue* result;
     5020    uint32_t i;
     5021    if (subscript->getUInt32(i))
     5022        result = jsBoolean(baseObj->deleteProperty(exec, i));
     5023    else {
     5024        VM_CHECK_EXCEPTION(JSValue*);
     5025        Identifier property(exec, subscript->toString(exec));
     5026        VM_CHECK_EXCEPTION(JSValue*);
     5027        result = jsBoolean(baseObj->deleteProperty(exec, property));
     5028    }
     5029
     5030    VM_CHECK_EXCEPTION_AT_END();
     5031    return result;
     5032}
     5033
     5034void Machine::cti_op_put_getter(CTI_ARGS)
     5035{
     5036    ExecState* exec = ARG_exec;
     5037
     5038    ASSERT(ARG_src1->isObject());
     5039    JSObject* baseObj = static_cast<JSObject*>(ARG_src1);
     5040    Identifier& ident = *ARG_id2;
     5041    ASSERT(ARG_src3->isObject());
     5042    baseObj->defineGetter(exec, ident, static_cast<JSObject*>(ARG_src3));
     5043}
     5044
     5045void Machine::cti_op_put_setter(CTI_ARGS)
     5046{
     5047    ExecState* exec = ARG_exec;
     5048
     5049    ASSERT(ARG_src1->isObject());
     5050    JSObject* baseObj = static_cast<JSObject*>(ARG_src1);
     5051    Identifier& ident = *ARG_id2;
     5052    ASSERT(ARG_src3->isObject());
     5053    baseObj->defineSetter(exec, ident, static_cast<JSObject*>(ARG_src3));
     5054}
     5055
     5056JSValue* Machine::cti_op_new_error(CTI_ARGS)
     5057{
     5058    ExecState* exec = ARG_exec;
     5059    CodeBlock* codeBlock = ARG_codeBlock;
     5060    unsigned type = ARG_int1;
     5061    JSValue* message = ARG_src2;
     5062    unsigned lineNumber = ARG_int3;
     5063
     5064    return Error::create(exec, static_cast<ErrorType>(type), message->toString(exec), lineNumber, codeBlock->ownerNode->sourceId(), codeBlock->ownerNode->sourceURL());
     5065}
     5066
     5067void Machine::cti_op_debug(CTI_ARGS)
     5068{
     5069    ExecState* exec = ARG_exec;
     5070    CodeBlock* codeBlock = ARG_codeBlock;
     5071    ScopeChainNode* scopeChain = ARG_scopeChain;
     5072    Register* r = ARG_r;
     5073
     5074    int debugHookID = ARG_int1;
     5075    int firstLine = ARG_int2;
     5076    int lastLine = ARG_int3;
     5077
     5078    exec->machine()->debug(exec, codeBlock, scopeChain, r, static_cast<DebugHookID>(debugHookID), firstLine, lastLine);
     5079}
     5080
     5081JSValue* Machine::cti_op_eq_null(CTI_ARGS)
     5082{
     5083    JSValue* src = ARG_src1;
     5084    if (src->isUndefinedOrNull())
     5085        return jsBoolean(true);
     5086
     5087    return jsBoolean(!JSImmediate::isImmediate(src) && static_cast<JSCell*>(src)->masqueradeAsUndefined());
     5088}
     5089
     5090JSValue* Machine::cti_op_neq_null(CTI_ARGS)
     5091{
     5092    JSValue* src = ARG_src1;
     5093    if (src->isUndefinedOrNull())
     5094        return jsBoolean(false);
     5095
     5096    return jsBoolean(JSImmediate::isImmediate(src) || !static_cast<JSCell*>(src)->masqueradeAsUndefined());
     5097}
     5098
     5099void* Machine::cti_vm_throw(CTI_ARGS)
     5100{
     5101    ExecState* exec = ARG_exec;
     5102    CodeBlock* codeBlock = ARG_codeBlock;
     5103    ScopeChainNode* scopeChain = ARG_scopeChain;
     5104    Register* r = ARG_r;
     5105
     5106    ASSERT(codeBlock->ctiReturnAddressVPCMap.contains(exec->ctiReturnAddress()));
     5107    unsigned vPCIndex = codeBlock->ctiReturnAddressVPCMap.get(exec->ctiReturnAddress());
     5108
     5109    ASSERT(exec->hadException());
     5110
     5111    JSValue* exceptionValue = exec->exception();
     5112
     5113    Instruction* handlerVPC = ARG_exec->machine()->throwException(exec, exceptionValue, codeBlock->instructions.begin() + vPCIndex, codeBlock, scopeChain, r, false);
     5114
     5115    if (handlerVPC) {
     5116        exec->setException(exceptionValue);
     5117        ARG_setScopeChain(scopeChain);
     5118        ARG_setCodeBlock(codeBlock);
     5119        ARG_setR(r);
     5120
     5121        void* catchRoutine = codeBlock->nativeExceptionCodeForHandlerVPC(handlerVPC);
     5122        ASSERT(catchRoutine);
     5123        ctiSetReturnAddress(&CTI_RETURN_ADDRESS, catchRoutine);
     5124        return catchRoutine;
     5125    } else {
     5126        exec->clearException();
     5127        *ARG_exception = exceptionValue;
     5128        return JSImmediate::nullImmediate();
     5129    }
     5130}
     5131
     5132#undef VM_CHECK_EXCEPTION
     5133#undef VM_CHECK_EXCEPTION_v
     5134#undef VM_CHECK_EXCEPTION_AT_END
     5135
     5136#endif // ENABLE(CTI)
     5137
    35015138} // namespace KJS
  • trunk/JavaScriptCore/VM/Machine.h

    r36058 r36244  
    3737#include <wtf/HashMap.h>
    3838
     39#if ENABLE(CTI)
     40#include "CTI.h"
     41#endif
     42
    3943namespace KJS {
    4044
     
    6468
    6569    class Machine {
     70        friend class CTI;
     71        friend class WRECompiler;
    6672    public:
    6773        Machine();
     74        ~Machine();
    6875       
    6976        RegisterFile& registerFile() { return m_registerFile; }
     
    126133        SamplingTool* m_sampler;
    127134
     135#if ENABLE(CTI)
     136#if COMPILER(MSVC)
     137#define SFX_CALL __cdecl
     138#else
     139#define SFX_CALL
     140#endif
     141
     142        static void SFX_CALL cti_timeout_check(CTI_ARGS);
     143
     144        static void SFX_CALL cti_op_end(CTI_ARGS);
     145        static JSValue* SFX_CALL cti_op_add(CTI_ARGS);
     146        static JSValue* SFX_CALL cti_op_pre_inc(CTI_ARGS);
     147        static int SFX_CALL cti_op_loop_if_less(CTI_ARGS);
     148        static JSValue* SFX_CALL cti_op_new_object(CTI_ARGS);
     149        static void SFX_CALL cti_op_put_by_id(CTI_ARGS);
     150        static void SFX_CALL cti_op_put_by_id_second(CTI_ARGS);
     151        static void SFX_CALL cti_op_put_by_id_generic(CTI_ARGS);
     152        static void SFX_CALL cti_op_put_by_id_fail(CTI_ARGS);
     153        static JSValue* SFX_CALL cti_op_get_by_id(CTI_ARGS);
     154        static JSValue* SFX_CALL cti_op_get_by_id_second(CTI_ARGS);
     155        static JSValue* SFX_CALL cti_op_get_by_id_generic(CTI_ARGS);
     156        static JSValue* SFX_CALL cti_op_get_by_id_fail(CTI_ARGS);
     157        static JSValue* SFX_CALL cti_op_del_by_id(CTI_ARGS);
     158        static JSValue* SFX_CALL cti_op_instanceof(CTI_ARGS);
     159        static JSValue* SFX_CALL cti_op_mul(CTI_ARGS);
     160        static JSValue* SFX_CALL cti_op_new_func(CTI_ARGS);
     161        static void* SFX_CALL cti_op_call_JSFunction(CTI_ARGS);
     162        static JSValue* SFX_CALL cti_op_call_NotJSFunction(CTI_ARGS);
     163        static JSValue* SFX_CALL cti_op_ret(CTI_ARGS);
     164        static JSValue* SFX_CALL cti_op_new_array(CTI_ARGS);
     165        static JSValue* SFX_CALL cti_op_resolve(CTI_ARGS);
     166        static void* SFX_CALL cti_op_construct_JSConstruct(CTI_ARGS);
     167        static JSValue* SFX_CALL cti_op_construct_NotJSConstruct(CTI_ARGS);
     168        static JSValue* SFX_CALL cti_op_get_by_val(CTI_ARGS);
     169        static JSValue* SFX_CALL cti_op_resolve_func(CTI_ARGS);
     170        static JSValue* SFX_CALL cti_op_sub(CTI_ARGS);
     171        static void SFX_CALL cti_op_put_by_val(CTI_ARGS);
     172        static JSValue* SFX_CALL cti_op_lesseq(CTI_ARGS);
     173        static int SFX_CALL cti_op_loop_if_true(CTI_ARGS);
     174        static JSValue* SFX_CALL cti_op_resolve_base(CTI_ARGS);
     175        static JSValue* SFX_CALL cti_op_negate(CTI_ARGS);
     176        static JSValue* SFX_CALL cti_op_resolve_skip(CTI_ARGS);
     177        static JSValue* SFX_CALL cti_op_div(CTI_ARGS);
     178        static JSValue* SFX_CALL cti_op_pre_dec(CTI_ARGS);
     179        static int SFX_CALL cti_op_jless(CTI_ARGS);
     180        static JSValue* SFX_CALL cti_op_not(CTI_ARGS);
     181        static int SFX_CALL cti_op_jtrue(CTI_ARGS);
     182        static JSValue* SFX_CALL cti_op_post_inc(CTI_ARGS);
     183        static JSValue* SFX_CALL cti_op_eq(CTI_ARGS);
     184        static JSValue* SFX_CALL cti_op_lshift(CTI_ARGS);
     185        static JSValue* SFX_CALL cti_op_bitand(CTI_ARGS);
     186        static JSValue* SFX_CALL cti_op_rshift(CTI_ARGS);
     187        static JSValue* SFX_CALL cti_op_bitnot(CTI_ARGS);
     188        static JSValue* SFX_CALL cti_op_resolve_with_base(CTI_ARGS);
     189        static JSValue* SFX_CALL cti_op_new_func_exp(CTI_ARGS);
     190        static JSValue* SFX_CALL cti_op_mod(CTI_ARGS);
     191        static JSValue* SFX_CALL cti_op_less(CTI_ARGS);
     192        static JSValue* SFX_CALL cti_op_neq(CTI_ARGS);
     193        static JSValue* SFX_CALL cti_op_post_dec(CTI_ARGS);
     194        static JSValue* SFX_CALL cti_op_urshift(CTI_ARGS);
     195        static JSValue* SFX_CALL cti_op_bitxor(CTI_ARGS);
     196        static JSValue* SFX_CALL cti_op_new_regexp(CTI_ARGS);
     197        static JSValue* SFX_CALL cti_op_bitor(CTI_ARGS);
     198        static JSValue* SFX_CALL cti_op_call_eval(CTI_ARGS);
     199        static void* SFX_CALL cti_op_throw(CTI_ARGS);
     200        static JSPropertyNameIterator* SFX_CALL cti_op_get_pnames(CTI_ARGS);
     201        static JSValue* SFX_CALL cti_op_next_pname(CTI_ARGS);
     202        static void SFX_CALL cti_op_push_scope(CTI_ARGS);
     203        static void SFX_CALL cti_op_pop_scope(CTI_ARGS);
     204        static JSValue* SFX_CALL cti_op_typeof(CTI_ARGS);
     205        static JSValue* SFX_CALL cti_op_stricteq(CTI_ARGS);
     206        static JSValue* SFX_CALL cti_op_nstricteq(CTI_ARGS);
     207        static JSValue* SFX_CALL cti_op_to_jsnumber(CTI_ARGS);
     208        static JSValue* SFX_CALL cti_op_in(CTI_ARGS);
     209        static JSValue* SFX_CALL cti_op_push_new_scope(CTI_ARGS);
     210        static void SFX_CALL cti_op_jmp_scopes(CTI_ARGS);
     211        static void SFX_CALL cti_op_put_by_index(CTI_ARGS);
     212        static void* SFX_CALL cti_op_switch_imm(CTI_ARGS);
     213        static void* SFX_CALL cti_op_switch_char(CTI_ARGS);
     214        static void* SFX_CALL cti_op_switch_string(CTI_ARGS);
     215        static JSValue* SFX_CALL cti_op_del_by_val(CTI_ARGS);
     216        static void SFX_CALL cti_op_put_getter(CTI_ARGS);
     217        static void SFX_CALL cti_op_put_setter(CTI_ARGS);
     218        static JSValue* SFX_CALL cti_op_new_error(CTI_ARGS);
     219        static void SFX_CALL cti_op_debug(CTI_ARGS);
     220        static JSValue* SFX_CALL cti_op_eq_null(CTI_ARGS);
     221        static JSValue* SFX_CALL cti_op_neq_null(CTI_ARGS);
     222
     223        static void* SFX_CALL cti_vm_throw(CTI_ARGS);
     224#endif // ENABLE(CTI)
     225
     226        // Default number of ticks before a timeout check should be done.
     227        static const int initialTickCountThreshold = 1024;
     228
    128229    private:
    129230        enum ExecutionFlag { Normal, InitializeAndReturn };
     
    135236
    136237        ALWAYS_INLINE void setScopeChain(ExecState* exec, ScopeChainNode*&, ScopeChainNode*);
    137         NEVER_INLINE void debug(ExecState*, const Instruction*, const CodeBlock*, ScopeChainNode*, Register*);
     238        NEVER_INLINE void debug(ExecState*, const CodeBlock*, ScopeChainNode*, Register*, DebugHookID, int firstLine, int lastLine);
    138239
    139240        NEVER_INLINE bool unwindCallFrame(ExecState*, JSValue*, const Instruction*&, CodeBlock*&, ScopeChainNode*&, Register*&);
     
    157258        void tryCachePutByID(CodeBlock*, Instruction* vPC, JSValue* baseValue, const PutPropertySlot&);
    158259        void uncachePutByID(CodeBlock*, Instruction* vPC);
    159        
     260
     261#if ENABLE(CTI)
     262        void tryCTICacheGetByID(ExecState*, CodeBlock*, void* returnAddress, JSValue* baseValue, const Identifier& propertyName, const PropertySlot&);
     263        void tryCTICachePutByID(ExecState*, CodeBlock*, void* returnAddress, JSValue* baseValue, const PutPropertySlot&);
     264
     265        void* getCTIArrayLengthTrampoline(ExecState*, CodeBlock*);
     266        void* getCTIStringLengthTrampoline(ExecState*, CodeBlock*);
     267
     268        void* m_ctiArrayLengthTrampoline;
     269        void* m_ctiStringLengthTrampoline;
     270
     271        OwnPtr<JITCodeBuffer> m_jitCodeBuffer;
     272        JITCodeBuffer* jitCodeBuffer() const { return m_jitCodeBuffer.get(); }
     273#endif
     274
    160275        int m_reentryDepth;
    161276        unsigned m_timeoutTime;
     
    169284        void* m_jsArrayVptr;
    170285        void* m_jsStringVptr;
     286        void* m_jsFunctionVptr;
    171287
    172288#if HAVE(COMPUTED_GOTO)
  • trunk/JavaScriptCore/VM/Register.h

    r36058 r36244  
    6666        Register(Instruction*);
    6767        Register(JSPropertyNameIterator*);
     68        explicit Register(void*);
    6869
    6970        CodeBlock* codeBlock() const;
     
    100101        } m_type;
    101102#endif
     103
     104// FIXME: The commented out ASSERTs below are valid; NDEBUG CTI should set these when up to date.
     105//        static inline ptrdiff_t offsetOf_type()
     106//        {
     107//            return OBJECT_OFFSET(Register, m_type);
     108//        }
    102109    };
    103110
     
    122129        // Once registers hold doubles, this function will allocate a JSValue*
    123130        // if the register doesn't hold one already.
    124         ASSERT(m_type == JSValueType);
     131//        ASSERT(m_type == JSValueType);
    125132        return u.jsValue;
    126133    }
     
    128135    ALWAYS_INLINE JSValue* Register::getJSValue() const
    129136    {
    130         ASSERT(m_type == JSValueType);
     137//        ASSERT(m_type == JSValueType);
    131138        return u.jsValue;
    132139    }
     
    192199    }
    193200
     201    ALWAYS_INLINE Register::Register(void* v)
     202    {
     203        u.v = v;
     204    }
     205
    194206    ALWAYS_INLINE CodeBlock* Register::codeBlock() const
    195207    {
    196         ASSERT(m_type == CodeBlockType);
     208//        ASSERT(m_type == CodeBlockType);
    197209        return u.codeBlock;
    198210    }
     
    200212    ALWAYS_INLINE ScopeChainNode* Register::scopeChain() const
    201213    {
    202         ASSERT(m_type == ScopeChainNodeType);
     214//        ASSERT(m_type == ScopeChainNodeType);
    203215        return u.scopeChain;
    204216    }
     
    206218    ALWAYS_INLINE intptr_t Register::i() const
    207219    {
    208         ASSERT(m_type == IntType);
     220//        ASSERT(m_type == IntType);
    209221        return u.i;
    210222    }
     
    212224    ALWAYS_INLINE Register* Register::r() const
    213225    {
    214         ASSERT(m_type == RegisterType);
     226//        ASSERT(m_type == RegisterType);
    215227        return u.r;
    216228    }
     
    218230    ALWAYS_INLINE Instruction* Register::vPC() const
    219231    {
    220         ASSERT(m_type == InstructionType);
     232//        ASSERT(m_type == InstructionType);
    221233        return u.vPC;
    222234    }
     
    224236    ALWAYS_INLINE JSPropertyNameIterator* Register::jsPropertyNameIterator() const
    225237    {
    226         ASSERT(m_type == JSPropertyNameIteratorType);
     238//        ASSERT(m_type == JSPropertyNameIteratorType);
    227239        return u.jsPropertyNameIterator;
    228240    }
  • trunk/JavaScriptCore/VM/RegisterFile.h

    r35691 r36244  
    9090    class RegisterFile : Noncopyable {
    9191    public:
    92         enum {
     92        enum CallFrameHeaderEntry {
    9393            CallerCodeBlock = 0,
    9494            ReturnVPC,
     
    101101            Callee,
    102102            OptionalCalleeActivation,
     103            CTIReturnEIP,
    103104            CallFrameHeaderSize
    104105        };
  • trunk/JavaScriptCore/VM/SamplingTool.cpp

    r36032 r36244  
    8080}
    8181
     82#if ENABLE(SAMPLING_TOOL)
     83extern OpcodeID what;
     84extern unsigned incall;
     85unsigned cowdogs = 0;
     86unsigned sampleCows[numOpcodeIDs] = {0};
     87unsigned sampleDogs[numOpcodeIDs] = {0};
     88#endif
     89
    8290void SamplingTool::run()
    8391{
     
    8694
    8795        m_totalSamples++;
    88 
     96#if ENABLE(SAMPLING_TOOL)
     97        if (what != (OpcodeID)-1) {
     98            ++cowdogs;
     99            if (incall)
     100                sampleDogs[what]++;
     101            else
     102                sampleCows[what]++;
     103        }
     104#endif       
    89105        CodeBlock* codeBlock = m_recordedCodeBlock;
    90106        Instruction* vPC = m_recordedVPC;
     
    130146    OpcodeID opcode;
    131147    long long count;
     148    long long countincall;
    132149};
    133150
     
    251268    for (int i = 0; i < numOpcodeIDs; ++i) {
    252269        opcodeSampleInfo[i].opcode = (OpcodeID)i;
    253         opcodeSampleInfo[i].count = opcodeSampleCounts[i];
     270        opcodeSampleInfo[i].count = sampleCows[i]+sampleDogs[i];
     271        opcodeSampleInfo[i].countincall = sampleDogs[i];
    254272    }
    255273#if HAVE(MERGESORT)
     
    260278
    261279    // (4) Print Opcode sampling results.
    262    
     280
     281
    263282    printf("\nOpcode sampling results\n\n");
    264283   
    265     printf("Total opcodes sampled (total samples): %lld (%lld)\n\n", totalOpcodeSamples, m_totalSamples);
    266     printf("Opcodes in order:\n\n");
    267     for (int i = 0; i < numOpcodeIDs; ++i) {
    268         long long count = opcodeSampleCounts[i];
    269         printf("%s:%s%6lld\t%.3f%%\t(%.3f%%)\n", opcodeNames[i], padOpcodeName(static_cast<OpcodeID>(i), 20), count, (static_cast<double>(count) * 100) / totalOpcodeSamples, (static_cast<double>(count) * 100) / m_totalSamples);   
    270     }
    271     printf("\n");
    272     printf("Opcodes by sample count:\n\n");
     284//    printf("Total opcodes sampled (total samples): %lld (%lld)\n\n", totalOpcodeSamples, m_totalSamples);
     285//    printf("Opcodes in order:\n\n");
     286//    for (int i = 0; i < numOpcodeIDs; ++i) {
     287//        long long count = opcodeSampleCounts[i];
     288//        printf("%s:%s%6lld\t%.3f%%\t(%.3f%%)\n", opcodeNames[i], padOpcodeName(static_cast<OpcodeID>(i), 20), count, (static_cast<double>(count) * 100) / totalOpcodeSamples, (static_cast<double>(count) * 100) / m_totalSamples);   
     289//    }
     290//    printf("\n");
     291//    printf("Opcodes by sample count:\n\n");
     292
    273293    for (int i = 0; i < numOpcodeIDs; ++i) {
    274294        OpcodeID opcode = opcodeSampleInfo[i].opcode;
    275295        long long count = opcodeSampleInfo[i].count;
    276         printf("%s:%s%6lld\t%.3f%%\t(%.3f%%)\n", opcodeNames[opcode], padOpcodeName(opcode, 20), count, (static_cast<double>(count) * 100) / totalOpcodeSamples, (static_cast<double>(count) * 100) / m_totalSamples);   
     296//        printf("%s:%s%6lld\t%.3f%%\t(%.3f%%)\n", opcodeNames[opcode], padOpcodeName(opcode, 20), count, (static_cast<double>(count) * 100) / totalOpcodeSamples, (static_cast<double>(count) * 100) / m_totalSamples);   
     297        long long countincall = opcodeSampleInfo[i].countincall;
     298        fprintf(stdout, "%s:%s%6lld\t%6lld\t%.3f%%\t%.3f%%\t(%.3f%%)\n", opcodeNames[opcode], padOpcodeName(opcode, 20), count, countincall, ((double)count * 100)/cowdogs, ((double)count * 100)/m_totalSamples, ((double)countincall * 100)/m_totalSamples);   
    277299    }
    278300    printf("\n");
  • trunk/JavaScriptCore/VM/SamplingTool.h

    r36036 r36244  
    4343    class CodeBlock;
    4444    struct Instruction;
     45
     46#if ENABLE(SAMPLING_TOOL)
     47extern OpcodeID what;
     48#endif
    4549
    4650    struct ScopeSampleRecord {
     
    109113            m_recordedCodeBlock = 0;
    110114            m_recordedVPC = 0;
     115#if ENABLE(SAMPLING_TOOL)
     116            what=(OpcodeID)-1;
     117#endif
    111118        }
    112119       
     
    135142#define MACHINE_SAMPLING_privateExecuteReturned() m_sampler->privateExecuteReturned()
    136143#define MACHINE_SAMPLING_callingHostFunction() m_sampler->callingHostFunction()
     144#define CTI_MACHINE_SAMPLING_callingHostFunction() machine->m_sampler->callingHostFunction()
    137145#else
    138146#define SCOPENODE_SAMPLING_notifyOfScope(sampler)
     
    140148#define MACHINE_SAMPLING_privateExecuteReturned()
    141149#define MACHINE_SAMPLING_callingHostFunction()
     150#define CTI_MACHINE_SAMPLING_callingHostFunction()
    142151#endif
    143152
  • trunk/JavaScriptCore/kjs/ExecState.h

    r35918 r36244  
    4747    // Passed as the first argument to most functions.
    4848    class ExecState : Noncopyable {
     49#if ENABLE(CTI)
     50        friend class CTI;
     51#endif
    4952        friend class Machine;
    5053        friend class DebuggerCallFrame;
    51 
    5254    public:
    5355        ExecState(JSGlobalObject*, JSObject* globalThisValue, ScopeChainNode* globalScopeChain);
     
    7173        JSValue** exceptionSlot() { return &m_exception; }
    7274        bool hadException() const { return !!m_exception; }
     75#if ENABLE(CTI)
     76        void setCTIReturnAddress(void* ctiRA) { m_ctiReturnAddress = ctiRA; }
     77        void* ctiReturnAddress() const { return m_ctiReturnAddress; }
     78#endif
    7379
    7480        JSGlobalData& globalData() { return *m_globalData; }
     
    102108
    103109        JSValue* m_exception;
    104 
     110#if ENABLE(CTI)
     111        void* m_ctiReturnAddress;
     112#endif
    105113        JSGlobalData* m_globalData;
    106114
  • trunk/JavaScriptCore/kjs/InternalFunction.h

    r35807 r36244  
    4040
    4141    protected:
     42        InternalFunction(PassRefPtr<KJS::StructureID> st) : JSObject(st){}
    4243        InternalFunction(ExecState*);
    4344        InternalFunction(ExecState*, FunctionPrototype*, const Identifier&);
  • trunk/JavaScriptCore/kjs/JSArray.h

    r36032 r36244  
    3838
    3939    class JSArray : public JSObject {
     40        friend class CTI;
     41
    4042    public:
    4143        JSArray(PassRefPtr<StructureID>);
  • trunk/JavaScriptCore/kjs/JSCell.h

    r36036 r36244  
    3939        friend class JSString;
    4040        friend class Machine;
     41        friend class CTI;
    4142    private:
    4243        JSCell();
  • trunk/JavaScriptCore/kjs/JSFunction.h

    r36016 r36244  
    3939
    4040    class JSFunction : public InternalFunction {
     41        friend class Machine;
     42
    4143        typedef InternalFunction Base;
     44        JSFunction(PassRefPtr<KJS::StructureID> st) : InternalFunction(st), m_scopeChain(NoScopeChain()) {}
    4245    public:
    4346        JSFunction(ExecState*, const Identifier&, FunctionBodyNode*, ScopeChainNode*);
  • trunk/JavaScriptCore/kjs/JSImmediate.h

    r35830 r36244  
    8383    class JSImmediate {
    8484    private:
     85        friend class CTI; // Whooo!
     86   
    8587        static const uintptr_t TagMask           = 0x3u; // primary tag is 2 bits long
    8688        static const uintptr_t TagBitTypeInteger = 0x1u; // bottom bit set indicates integer, this dominates the following bit
     
    231233        static JSValue* undefinedImmediate();
    232234        static JSValue* nullImmediate();
     235        static JSValue* zeroImmediate();
     236        static JSValue* oneImmediate();
    233237
    234238        static JSValue* impossibleValue();
     
    286290    ALWAYS_INLINE JSValue* JSImmediate::undefinedImmediate() { return makeUndefined(); }
    287291    ALWAYS_INLINE JSValue* JSImmediate::nullImmediate() { return makeNull(); }
     292    ALWAYS_INLINE JSValue* JSImmediate::zeroImmediate() { return makeInt(0); }
     293    ALWAYS_INLINE JSValue* JSImmediate::oneImmediate() { return makeInt(1); }
    288294
    289295    // This value is impossible because 0x4 is not a valid pointer but a tag of 0 would indicate non-immediate
  • trunk/JavaScriptCore/kjs/JSObject.h

    r36122 r36244  
    5555    class JSObject : public JSCell {
    5656        friend class BatchedTransitionOptimizer;
     57        friend class CTI;
    5758
    5859    public:
  • trunk/JavaScriptCore/kjs/JSString.h

    r36006 r36244  
    5252
    5353    class JSString : public JSCell {
     54        friend class CTI;
     55
    5456    public:
    5557        JSString(const UString& value)
  • trunk/JavaScriptCore/kjs/JSValue.h

    r36016 r36244  
    2929#include "ustring.h"
    3030#include <stddef.h> // for size_t
     31
     32// The magic number 0x4000 is not important here, it is being subtracted back out (avoiding using zero since this
     33// can have unexpected effects in this type of macro, particularly where multiple-inheritance is involved).
     34#define OBJECT_OFFSET(class, member) (reinterpret_cast<ptrdiff_t>(&(reinterpret_cast<class*>(0x4000)->member)) - 0x4000)
    3135
    3236namespace KJS {
  • trunk/JavaScriptCore/kjs/JSVariableObject.h

    r36016 r36244  
    7676            size_t registerArraySize;
    7777
     78            static inline ptrdiff_t offsetOf_registers()
     79            {
     80                return OBJECT_OFFSET(JSVariableObjectData, registers);
     81            }
     82
    7883        private:
    7984            JSVariableObjectData(const JSVariableObjectData&);
     
    102107
    103108        JSVariableObjectData* d;
     109
     110    public:
     111        static inline ptrdiff_t offsetOf_d()
     112        {
     113            return OBJECT_OFFSET(JSVariableObject, d);
     114        }
     115
     116        static inline ptrdiff_t offsetOf_Data_registers()
     117        {
     118            return JSVariableObjectData::offsetOf_registers();
     119        }
    104120    };
    105121
  • trunk/JavaScriptCore/kjs/PropertyMap.h

    r36083 r36244  
    8282
    8383    class PropertyMap : Noncopyable {
     84        friend class CTI;
     85
    8486    public:
    8587        PropertyMap();
  • trunk/JavaScriptCore/kjs/RegExpConstructor.cpp

    r36016 r36244  
    293293    UString flags = arg1->isUndefined() ? UString("") : arg1->toString(exec);
    294294
    295     RefPtr<RegExp> regExp = RegExp::create(pattern, flags);
     295    RefPtr<RegExp> regExp = RegExp::create(exec, pattern, flags);
    296296    if (!regExp->isValid())
    297297        return throwError(exec, SyntaxError, UString("Invalid regular expression: ").append(regExp->errorMessage()));
  • trunk/JavaScriptCore/kjs/RegExpPrototype.cpp

    r36006 r36244  
    8787        UString pattern = args.isEmpty() ? UString("") : arg0->toString(exec);
    8888        UString flags = arg1->isUndefined() ? UString("") : arg1->toString(exec);
    89         regExp = RegExp::create(pattern, flags);
     89        regExp = RegExp::create(exec, pattern, flags);
    9090    }
    9191
  • trunk/JavaScriptCore/kjs/ScopeChain.h

    r35027 r36244  
    147147    }
    148148
     149    class NoScopeChain {};
     150
    149151    class ScopeChain {
    150152    public:
     153        ScopeChain(NoScopeChain)
     154            : m_node(0)
     155        {
     156        }
     157
    151158        ScopeChain(JSObject* o, JSObject* globalThis)
    152159            : m_node(new ScopeChainNode(0, o, globalThis))
     
    165172        {
    166173        }
    167    
    168         ~ScopeChain() { m_node->deref(); }
     174
     175        ~ScopeChain()
     176        {
     177            if (m_node)
     178                m_node->deref();
     179        }
    169180
    170181        void swap(ScopeChain&);
  • trunk/JavaScriptCore/kjs/StringPrototype.cpp

    r36009 r36244  
    410410         *  replaced with the result of the expression new RegExp(regexp).
    411411         */
    412         reg = RegExp::create(a0->toString(exec));
     412        reg = RegExp::create(exec, a0->toString(exec));
    413413    }
    414414    RegExpConstructor* regExpObj = exec->lexicalGlobalObject()->regExpConstructor();
     
    460460         *  replaced with the result of the expression new RegExp(regexp).
    461461         */
    462         reg = RegExp::create(a0->toString(exec));
     462        reg = RegExp::create(exec, a0->toString(exec));
    463463    }
    464464    RegExpConstructor* regExpObj = exec->lexicalGlobalObject()->regExpConstructor();
  • trunk/JavaScriptCore/kjs/nodes.cpp

    r36036 r36244  
    263263RegisterID* RegExpNode::emitCode(CodeGenerator& generator, RegisterID* dst)
    264264{
    265     if (!m_regExp->isValid())
    266         return emitThrowError(generator, SyntaxError, ("Invalid regular expression: " + UString(m_regExp->errorMessage())).UTF8String().c_str());
     265    RefPtr<RegExp> regExp = RegExp::create(generator.globalExec(), m_pattern, m_flags);
     266    if (!regExp->isValid())
     267        return emitThrowError(generator, SyntaxError, ("Invalid regular expression: " + UString(regExp->errorMessage())).UTF8String().c_str());
    267268    if (dst == ignoredResult())
    268269        return 0;
    269     return generator.emitNewRegExp(generator.finalDestination(dst), m_regExp.get());
     270    return generator.emitNewRegExp(generator.finalDestination(dst), regExp.get());
    270271}
    271272
     
    16301631        RefPtr<LabelID> finallyEndLabel = generator.newLabel();
    16311632        generator.emitJumpSubroutine(finallyReturnAddr.get(), finallyStart.get());
     1633        // Use a label to record the subtle fact that sret will return to the
     1634        // next instruction. sret is the only way to jump without an explicit label.
     1635        generator.emitLabel(generator.newLabel().get());
    16321636        generator.emitJump(finallyEndLabel.get());
    16331637
     
    16351639        RefPtr<RegisterID> tempExceptionRegister = generator.emitCatch(generator.newTemporary(), tryStartLabel.get(), generator.emitLabel(generator.newLabel().get()).get());
    16361640        generator.emitJumpSubroutine(finallyReturnAddr.get(), finallyStart.get());
     1641        // Use a label to record the subtle fact that sret will return to the
     1642        // next instruction. sret is the only way to jump without an explicit label.
     1643        generator.emitLabel(generator.newLabel().get());
    16371644        generator.emitThrow(tempExceptionRegister.get());
    16381645
  • trunk/JavaScriptCore/kjs/nodes.h

    r36058 r36244  
    428428        RegExpNode(JSGlobalData* globalData, const UString& pattern, const UString& flags) KJS_FAST_CALL
    429429            : ExpressionNode(globalData)
    430             , m_regExp(RegExp::create(pattern, flags))
     430            , m_pattern(pattern)
     431            , m_flags(flags)
    431432        {
    432433        }
     
    438439
    439440    private:
    440         RefPtr<RegExp> m_regExp;
     441        UString m_pattern;
     442        UString m_flags;
    441443    };
    442444
  • trunk/JavaScriptCore/kjs/nodes2string.cpp

    r35986 r36244  
    315315void RegExpNode::streamTo(SourceStream& s) const
    316316{
    317     s << '/' <<  m_regExp->pattern() << '/' << m_regExp->flags();
     317    s << '/' <<  m_pattern << '/' << m_flags;
    318318}
    319319
  • trunk/JavaScriptCore/kjs/regexp.cpp

    r35027 r36244  
    2222#include "regexp.h"
    2323
     24#include "CTI.h"
    2425#include "lexer.h"
    2526#include <pcre/pcre.h>
     
    3233namespace KJS {
    3334
    34 inline RegExp::RegExp(const UString& pattern)
     35
     36
     37inline RegExp::RegExp(ExecState* exec, const UString& pattern)
    3538    : m_pattern(pattern)
    3639    , m_flagBits(0)
     40    , m_regExp(0)
    3741    , m_constructionError(0)
    3842    , m_numSubpatterns(0)
    3943{
    40     m_regExp = jsRegExpCompile(reinterpret_cast<const UChar*>(pattern.data()), pattern.size(),
    41         JSRegExpDoNotIgnoreCase, JSRegExpSingleLine, &m_numSubpatterns, &m_constructionError);
     44#if ENABLE(WREC)
     45    if (!(m_wrecFunction = (WRECFunction)CTI::compileRegExp(exec, pattern, &m_numSubpatterns, &m_constructionError)))
     46#else
     47    UNUSED_PARAM(exec);
     48#endif
     49    {
     50        m_regExp = jsRegExpCompile(reinterpret_cast<const UChar*>(pattern.data()), pattern.size(),
     51            JSRegExpDoNotIgnoreCase, JSRegExpSingleLine, &m_numSubpatterns, &m_constructionError);
     52    }
    4253}
    4354
    44 PassRefPtr<RegExp> RegExp::create(const UString& pattern)
     55PassRefPtr<RegExp> RegExp::create(ExecState* exec, const UString& pattern)
    4556{
    46     return adoptRef(new RegExp(pattern));
     57    return adoptRef(new RegExp(exec, pattern));
    4758}
    4859
    49 inline RegExp::RegExp(const UString& pattern, const UString& flags)
     60inline RegExp::RegExp(ExecState* exec, const UString& pattern, const UString& flags)
    5061    : m_pattern(pattern)
    5162    , m_flags(flags)
    5263    , m_flagBits(0)
     64    , m_regExp(0)
    5365    , m_constructionError(0)
    5466    , m_numSubpatterns(0)
     
    7284    }
    7385
    74     m_regExp = jsRegExpCompile(reinterpret_cast<const UChar*>(pattern.data()), pattern.size(),
    75         ignoreCaseOption, multilineOption, &m_numSubpatterns, &m_constructionError);
     86#if ENABLE(WREC)
     87    if (!(m_wrecFunction = (WRECFunction)CTI::compileRegExp(exec, pattern, &m_numSubpatterns, &m_constructionError, (m_flagBits & IgnoreCase), (m_flagBits & Multiline))))
     88#else
     89    UNUSED_PARAM(exec);
     90#endif
     91    {
     92        m_regExp = jsRegExpCompile(reinterpret_cast<const UChar*>(pattern.data()), pattern.size(),
     93            ignoreCaseOption, multilineOption, &m_numSubpatterns, &m_constructionError);
     94    }
    7695}
    7796
    78 PassRefPtr<RegExp> RegExp::create(const UString& pattern, const UString& flags)
     97PassRefPtr<RegExp> RegExp::create(ExecState* exec, const UString& pattern, const UString& flags)
    7998{
    80     return adoptRef(new RegExp(pattern, flags));
     99    return adoptRef(new RegExp(exec, pattern, flags));
    81100}
    82101
     
    84103{
    85104    jsRegExpFree(m_regExp);
     105#if ENABLE(WREC)
     106    if (m_wrecFunction)
     107        fastFree(reinterpret_cast<void*>(m_wrecFunction));
     108#endif
    86109}
    87110
     
    96119        return -1;
    97120
    98     if (!m_regExp)
    99         return -1;
     121#if ENABLE(WREC)
     122    if (m_wrecFunction) {
     123        int offsetVectorSize = (m_numSubpatterns + 1) * 2;
     124        int* offsetVector = new int [offsetVectorSize];
     125        for (int j = 0; j < offsetVectorSize; ++j)
     126            offsetVector[j] = -1;
    100127
    101     // Set up the offset vector for the result.
    102     // First 2/3 used for result, the last third used by PCRE.
    103     int* offsetVector;
    104     int offsetVectorSize;
    105     int fixedSizeOffsetVector[3];
    106     if (!ovector) {
    107         offsetVectorSize = 3;
    108         offsetVector = fixedSizeOffsetVector;
    109     } else {
    110         offsetVectorSize = (m_numSubpatterns + 1) * 3;
    111         offsetVector = new int [offsetVectorSize];
    112         ovector->set(offsetVector);
     128        OwnArrayPtr<int> nonReturnedOvector;
     129        if (!ovector)
     130            nonReturnedOvector.set(offsetVector);
     131        else
     132            ovector->set(offsetVector);
     133
     134        int result = m_wrecFunction(s.data(), i, s.size(), offsetVector);
     135
     136        if (result < 0) {
     137#ifndef NDEBUG
     138            // TODO: define up a symbol, rather than magic -1
     139            if (result != -1)
     140                fprintf(stderr, "jsRegExpExecute failed with result %d\n", result);
     141#endif
     142            if (ovector)
     143                ovector->clear();
     144        }
     145        return result;
     146    } else
     147#endif
     148    if (m_regExp) {
     149        // Set up the offset vector for the result.
     150        // First 2/3 used for result, the last third used by PCRE.
     151        int* offsetVector;
     152        int offsetVectorSize;
     153        int fixedSizeOffsetVector[3];
     154        if (!ovector) {
     155            offsetVectorSize = 3;
     156            offsetVector = fixedSizeOffsetVector;
     157        } else {
     158            offsetVectorSize = (m_numSubpatterns + 1) * 3;
     159            offsetVector = new int [offsetVectorSize];
     160            ovector->set(offsetVector);
     161        }
     162
     163        int numMatches = jsRegExpExecute(m_regExp, reinterpret_cast<const UChar*>(s.data()), s.size(), i, offsetVector, offsetVectorSize);
     164   
     165        if (numMatches < 0) {
     166#ifndef NDEBUG
     167            if (numMatches != JSRegExpErrorNoMatch)
     168                fprintf(stderr, "jsRegExpExecute failed with result %d\n", numMatches);
     169#endif
     170            if (ovector)
     171                ovector->clear();
     172            return -1;
     173        }
     174
     175        return offsetVector[0];
    113176    }
    114177
    115     int numMatches = jsRegExpExecute(m_regExp, reinterpret_cast<const UChar*>(s.data()), s.size(), i, offsetVector, offsetVectorSize);
    116 
    117     if (numMatches < 0) {
    118 #ifndef NDEBUG
    119         if (numMatches != JSRegExpErrorNoMatch)
    120             fprintf(stderr, "jsRegExpExecute failed with result %d\n", numMatches);
    121 #endif
    122         if (ovector)
    123             ovector->clear();
    124         return -1;
    125     }
    126 
    127     return offsetVector[0];
     178    return -1;
    128179}
    129180
  • trunk/JavaScriptCore/kjs/regexp.h

    r35027 r36244  
    2323
    2424#include "ustring.h"
     25#include "ExecState.h"
    2526#include <wtf/Forward.h>
    2627#include <wtf/RefCounted.h>
     28#include <wrec/WREC.h>
    2729
    2830struct JSRegExp;
     
    3234    class RegExp : public RefCounted<RegExp> {
    3335    public:
    34         static PassRefPtr<RegExp> create(const UString& pattern);
    35         static PassRefPtr<RegExp> create(const UString& pattern, const UString& flags);
     36        static PassRefPtr<RegExp> create(ExecState*, const UString& pattern);
     37        static PassRefPtr<RegExp> create(ExecState*, const UString& pattern, const UString& flags);
    3638        ~RegExp();
    3739
     
    5052
    5153    private:
    52         RegExp(const UString& pattern);
    53         RegExp(const UString& pattern, const UString& flags);
     54        RegExp(ExecState*, const UString& pattern);
     55        RegExp(ExecState*, const UString& pattern, const UString& flags);
    5456
    5557        void compile();
     
    6365        const char* m_constructionError;
    6466        unsigned m_numSubpatterns;
     67
     68#if ENABLE(WREC)
     69        WRECFunction m_wrecFunction;
     70#endif
    6571    };
    6672
  • trunk/JavaScriptCore/kjs/ustring.h

    r36032 r36244  
    7272
    7373    class UString {
     74        friend class CTI;
     75
    7476    public:
    7577        struct Rep {
     78            friend class CTI;
     79
    7680            static PassRefPtr<Rep> create(UChar*, int);
    7781            static PassRefPtr<Rep> createCopying(const UChar*, int);
  • trunk/JavaScriptCore/wtf/ASCIICType.h

    r36074 r36244  
    7373    inline bool isASCIIHexDigit(int c) { return c >= '0' && c <= '9' || (c | 0x20) >= 'a' && (c | 0x20) <= 'f'; }
    7474
     75    inline bool isASCIIOctalDigit(char c) { return (c >= '0') & (c <= '7'); }
     76    inline bool isASCIIOctalDigit(unsigned short c) { return (c >= '0') & (c <= '7'); }
     77#if !COMPILER(MSVC) || defined(_NATIVE_WCHAR_T_DEFINED)
     78    inline bool isASCIIOctalDigit(wchar_t c) { return (c >= '0') & (c <= '7'); }
     79#endif
     80    inline bool isASCIIOctalDigit(int c) { return (c >= '0') & (c <= '7'); }
     81
    7582    inline bool isASCIILower(char c) { return c >= 'a' && c <= 'z'; }
    7683    inline bool isASCIILower(unsigned short c) { return c >= 'a' && c <= 'z'; }
  • trunk/JavaScriptCore/wtf/HashTraits.h

    r35900 r36244  
    8282    };
    8383
    84     // default integer traits disallow both 0 and -1 as keys (max value instead of -1 for unsigned)
     84    // Default integer traits disallow both 0 and -1 as keys (max value instead of -1 for unsigned).
    8585    template<typename T> struct GenericHashTraitsBase<true, T> {
    8686        static const bool emptyValueIsZero = true;
     
    106106    template<> struct HashTraits<float> : FloatHashTraits<float> { };
    107107    template<> struct HashTraits<double> : FloatHashTraits<double> { };
     108
     109    // Default unsigned traits disallow both 0 and max as keys -- use these traits to allow zero and disallow max - 1.
     110    template<typename T> struct UnsignedWithZeroKeyHashTraits : GenericHashTraits<T> {
     111        static const bool emptyValueIsZero = false;
     112        static const bool needsDestruction = false;
     113        static T emptyValue() { return std::numeric_limits<T>::max(); }
     114        static void constructDeletedValue(T& slot) { slot = std::numeric_limits<T>::max() - 1; }
     115        static bool isDeletedValue(T value) { return value == std::numeric_limits<T>::max() - 1; }
     116    };
    108117
    109118    template<typename P> struct HashTraits<P*> : GenericHashTraits<P*> {
  • trunk/JavaScriptCore/wtf/Platform.h

    r36102 r36244  
    336336#endif
    337337
     338// CTI only supports x86 at the moment, and has only been tested on Mac and Windows.
     339#if !defined(ENABLE_CTI) && PLATFORM(X86) && (PLATFORM(MAC) || PLATFORM(WIN))
     340#define ENABLE_CTI 1
     341#endif
     342
     343// WREC only supports x86 at the moment, and has only been tested on Mac and Windows.
     344#if !defined(ENABLE_WREC) && PLATFORM(X86) && (PLATFORM(MAC) || PLATFORM(WIN))
     345#define ENABLE_WREC 1
     346#endif
     347
     348#if ENABLE(CTI) || ENABLE(WREC)
     349#define ENABLE_MASM 1
     350#endif
     351
    338352#endif /* WTF_Platform_h */
  • trunk/LayoutTests/ChangeLog

    r36114 r36244  
     1=== End merge of squirrelfish-extreme ===
     2
     32008-09-04  Geoffrey Garen  <ggaren@apple.com>
     4
     5        Checking in some tests that got forgotten in a previous merge.
     6
     7        * fast/js/pic/cached-deleted-properties-expected.txt: Added.
     8        * fast/js/pic/cached-deleted-properties.html: Added.
     9        * fast/js/pic/cached-getter-dictionary-and-proto-expected.txt: Added.
     10        * fast/js/pic/cached-getter-dictionary-and-proto.html: Added.
     11        * fast/js/pic/cached-getter-setter-expected.txt: Added.
     12        * fast/js/pic/cached-getter-setter.html: Added.
     13        * fast/js/pic/cached-prototype-setter-expected.txt: Added.
     14        * fast/js/pic/cached-prototype-setter.html: Added.
     15        * fast/js/pic/cached-single-entry-transition-expected.txt: Added.
     16        * fast/js/pic/cached-single-entry-transition.html: Added.
     17        * fast/js/pic/get-empty-string-expected.txt: Added.
     18        * fast/js/pic/get-empty-string.html: Added.
     19        * fast/js/pic/get-set-proxy-object-expected.txt: Added.
     20        * fast/js/pic/get-set-proxy-object.html: Added.
     21        * fast/js/pic/rehash-poisons-structure-expected.txt: Added.
     22        * fast/js/pic/rehash-poisons-structure.html: Added.
     23
     242008-09-03  Oliver Hunt  <oliver@apple.com>
     25
     26        Reviewed by Gavin Barraclough.
     27
     28        A few array indexing tests.
     29
     30        * fast/js/array-indexing-expected.txt: Added.
     31        * fast/js/array-indexing.html: Added.
     32        * fast/js/resources/array-indexing.js: Added.
     33
     342008-09-02  Sam Weinig  <sam@webkit.org>
     35
     36        Rubber-stamped by Geoff Garen.
     37
     38        Change recursion limit to account for a fatter stack frame.
     39
     40        * fast/js/deep-recursion-test.html:
     41
     42=== Start merge of squirrelfish-extreme ===
     43
    1442008-09-04  Dan Bernstein  <mitz@apple.com>
    245
  • trunk/LayoutTests/fast/js/deep-recursion-test.html

    r35813 r36244  
    1717
    1818    try {
    19         simpleRecursion(18500);
     19        simpleRecursion(17472);
    2020    } catch (ex) {
    2121        debug("FAIL: " + ex);
  • trunk/WebCore/ChangeLog

    r36135 r36244  
     1=== End merge of squirrelfish-extreme ===
     2
     32008-09-05  Oliver Hunt  <oliver@apple.com>
     4
     5        Start bringing up SFX on windows.
     6
     7        Reviewed by Mark Rowe and Sam Weinig
     8
     9        Start doing the work to bring up SFX on windows.  Initially
     10        just working on WREC, as it does not make any calls so reduces
     11        the amount of code that needs to be corrected.
     12
     13        Add forwarding headers
     14
     15        * ChangeLog:
     16        * ForwardingHeaders/masm/MacroAssembler.h: Added.
     17        * WebCore.vcproj/WebCore.vcproj:
     18
     192008-08-27  Mark Rowe  <mrowe@apple.com>
     20
     21        Reviewed by Oliver Hunt.
     22
     23        Fix the build of the full WebKit stack.
     24
     25        Add forwarding headers.
     26
     27        * ForwardingHeaders/masm/IA32MacroAsm.h: Added.
     28        * ForwardingHeaders/wrec/WREC.h: Added.
     29
     30=== Start merge of squirrelfish-extreme ===
     31
    1322008-09-06  Antti Koivisto  <antti@apple.com>
    233
  • trunk/WebCore/WebCore.vcproj/WebCore.vcproj

    r36118 r36244  
    1 <?xml version="1.0" encoding="windows-1251"?>
     1<?xml version="1.0" encoding="Windows-1252"?>
    22<VisualStudioProject
    33        ProjectType="Visual C++"
     
    7373                        <Tool
    7474                                Name="VCPostBuildEventTool"
    75                                 CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\np*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\page\inspector\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
     75                                CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\np*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\page\inspector\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
    7676                        />
    7777                </Configuration>
     
    134134                        <Tool
    135135                                Name="VCPostBuildEventTool"
    136                                 CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\np*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\page\inspector\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
     136                                CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\np*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\page\inspector\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
    137137                        />
    138138                </Configuration>
     
    194194                        <Tool
    195195                                Name="VCPostBuildEventTool"
    196                                 CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\np*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\page\inspector\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
     196                                CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\np*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\page\inspector\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
    197197                        />
    198198                </Configuration>
     
    255255                        <Tool
    256256                                Name="VCPostBuildEventTool"
    257                                 CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\curl\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\np*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\page\inspector\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
     257                                CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\np*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\page\inspector\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
    258258                        />
    259259                </Configuration>
     
    317317                        <Tool
    318318                                Name="VCPostBuildEventTool"
    319                                 CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\curl\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\np*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\page\inspector\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
     319                                CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\np*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\page\inspector\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
    320320                        />
    321321                </Configuration>
     
    378378                        <Tool
    379379                                Name="VCPostBuildEventTool"
    380                                 CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\np*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\page\inspector\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
     380                                CommandLine="mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\config.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\appcache\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\archive\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\loader\icon\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\history\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\html\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\css\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\graphics\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\text\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\cf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\network\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\sql\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\platform\cairo\cairo\src\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bindings\js\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\page\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\bridge\np*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\plugins\win\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\rendering\style\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\editing\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\dom\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\xml\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\svg\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)..\storage\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\bindings\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\kjs\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\masm\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\pcre\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\profiler\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wrec\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode&quot;&#x0D;&#x0A;xcopy /y /d &quot;$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h&quot; &quot;$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu&quot;&#x0D;&#x0A;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\page\inspector\*&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\inspector&quot;&#x0D;&#x0A;mkdir 2&gt;NUL &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;xcopy /y /d /s /exclude:xcopy.excludes &quot;$(ProjectDir)\..\English.lproj\localizedStrings.js&quot; &quot;$(WebKitOutputDir)\bin\WebKit.resources\en.lproj&quot;&#x0D;&#x0A;&#x0D;&#x0A;if exist &quot;$(WebKitOutputDir)\buildfailed&quot; del &quot;$(WebKitOutputDir)\buildfailed&quot;&#x0D;&#x0A;"
    381381                        />
    382382                </Configuration>
     
    1553715537                                <File
    1553815538                                        RelativePath="..\ForwardingHeaders\profiler\Profiler.h"
     15539                                        >
     15540                                </File>
     15541                        </Filter>
     15542                        <Filter
     15543                                Name="masm"
     15544                                >
     15545                                <File
     15546                                        RelativePath="..\ForwardingHeaders\masm\MacroAssembler.h"
     15547                                        >
     15548                                </File>
     15549                        </Filter>
     15550                        <Filter
     15551                                Name="wrec"
     15552                                >
     15553                                <File
     15554                                        RelativePath="..\ForwardingHeaders\wrec\WREC.h"
    1553915555                                        >
    1554015556                                </File>
  • trunk/WebKitTools/ChangeLog

    r36114 r36244  
     1=== End merge of squirrelfish-extreme ===
     2
     32008-08-31  Mark Rowe  <mrowe@apple.com>
     4
     5        Reviewed by Maciej Stachowiak.
     6
     7        Add a --profile flag to run-sunspider.
     8
     9        * Scripts/webkitdirs.pm: Detect --profile or --profiling passed as a command-line argument
     10        to build scripts as indicating that we should use the "Profiling" configuration.  At present
     11        this is only supported by JavaScriptCore, so using this argument to build any other project
     12        will likely result in unexpected behaviour.
     13
     142008-08-27  Mark Rowe  <mrowe@apple.com>
     15
     16        Reviewed by Oliver Hunt.
     17
     18        Fix run-webkit-tests to handle DRT exiting early.
     19
     20        * Scripts/run-webkit-tests: Initialize $expectedResultPaths{$base} before it will be used.
     21
     22=== Start merge of squirrelfish-extreme ===
     23
    1242008-09-04  Mark Rowe  <mrowe@apple.com>
    225
  • trunk/WebKitTools/Scripts/run-webkit-tests

    r35916 r36244  
    576576    my $expectedFileName = "$base-$expectedTag.$expectedExtension";
    577577
     578    my $isText = isTextOnlyTest($actual);
     579
     580    my $expectedDir = expectedDirectoryForTest($base, $isText, $expectedExtension);
     581    $expectedResultPaths{$base} = "$expectedDir/$expectedFileName";
     582
    578583    unless ($actualRead->{status} eq "success" && $errorRead->{status} eq "success") {
    579584        my $crashed = $actualRead->{status} eq "crashed" || $errorRead->{status} eq "crashed";
     
    583588     }
    584589
    585     my $isText = isTextOnlyTest($actual);
    586 
    587590    $durations{$test} = time - $startTime if $report10Slowest;
    588591
    589592    my $expected;
    590     my $expectedDir = expectedDirectoryForTest($base, $isText, $expectedExtension);
    591     $expectedResultPaths{$base} = "$expectedDir/$expectedFileName";
    592593
    593594    if (!$resetResults && open EXPECTED, "<", "$expectedDir/$expectedFileName") {
  • trunk/WebKitTools/Scripts/webkitdirs.pm

    r35589 r36244  
    287287            return;
    288288        }
     289        if ($opt =~ /^--profil(e|ing)$/i) {
     290            splice(@ARGV, $i, 1);
     291            $passedConfiguration = "Profiling";
     292            $passedConfiguration .= "_Cairo" if ($isWinCairo && isCygwin());
     293            return;
     294        }
    289295    }
    290296    $passedConfiguration = undef;
Note: See TracChangeset for help on using the changeset viewer.