Changeset 36244 in webkit
- Timestamp:
- Sep 6, 2008 10:44:58 PM (16 years ago)
- Location:
- trunk
- Files:
-
- 17 added
- 45 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r36130 r36244 1 === End merge of squirrelfish-extreme === 2 3 2008-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 93 2008-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 101 2008-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 137 2008-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 169 2008-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 177 2008-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 189 2008-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 215 2008-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 249 2008-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 263 2008-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 282 2008-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 292 2008-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 306 2008-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 336 2008-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 350 2008-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 363 2008-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 373 2008-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 385 2008-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 394 2008-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 410 2008-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 419 2008-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 432 2008-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 442 2008-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 456 2008-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 464 2008-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 478 2008-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 504 2008-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 526 2008-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 540 2008-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 588 2008-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 598 2008-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 607 2008-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 615 2008-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 631 2008-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 639 2008-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 650 2008-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 663 2008-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 673 2008-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 685 2008-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 695 2008-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 705 2008-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 714 2008-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 724 2008-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 782 2008-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 793 2008-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 804 2008-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 826 2008-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 910 2008-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 935 2008-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 951 2008-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 962 2008-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 978 2008-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 989 2008-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 1017 2008-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 1030 2008-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 1045 2008-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 1060 2008-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 1088 2008-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 1132 2008-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 1142 2008-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 1158 2008-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 1234 2008-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 1261 2008-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 1278 2008-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 1286 2008-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 1296 2008-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 1309 2008-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 1323 2008-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 1336 2008-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 1345 2008-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 1357 2008-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 1370 2008-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 1395 2008-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 1408 2008-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 1436 2008-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 1450 2008-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 1464 2008-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 1473 2008-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 1487 2008-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 1497 2008-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 1512 2008-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 1533 2008-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 1548 2008-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 1557 2008-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 1570 2008-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 1580 2008-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 1595 2008-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 1608 2008-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 1618 2008-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 1628 2008-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 1637 2008-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 1838 2008-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 1 1848 2008-09-06 Cameron Zwarich <cwzwarich@uwaterloo.ca> 2 1849 -
trunk/JavaScriptCore/Configurations/JavaScriptCore.xcconfig
r36130 r36244 15 15 // This needs to be kept sorted, and in sync with FEATURE_DEFINES in WebCore.xcconfig, WebKit.xcconfig and the default settings of build-webkit. 16 16 FEATURE_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 18 OTHER_CFLAGS = $(OTHER_CFLAGS_$(CONFIGURATION)_$(CURRENT_VARIANT)); 19 OTHER_CFLAGS_Release_normal = -fomit-frame-pointer; 20 OTHER_CFLAGS_Production_normal = -fomit-frame-pointer; -
trunk/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
r36101 r36244 43 43 <Tool 44 44 Name="VCCLCompilerTool" 45 AdditionalIncludeDirectories=""$(WebKitOutputDir)\obj\JavaScriptCore\DerivedSources\";../../;../../API/;../../pcre/;../../kjs/;../../VM/;../../wtf/;../../profiler; "$(WebKitLibrariesDir)\include";"$(WebKitLibrariesDir)\include\icu";../../../icu/include;"$(WebKitOutputDir)\include\JavaScriptCore";"$(WebKitLibrariesDir)\include\pthreads";"$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders";"$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility""45 AdditionalIncludeDirectories=""$(WebKitOutputDir)\obj\JavaScriptCore\DerivedSources\";../../;../../API/;../../pcre/;../../kjs/;../../VM/;../../wtf/;../../profiler;../../masm/;../../wrec/;"$(WebKitLibrariesDir)\include";"$(WebKitLibrariesDir)\include\icu";../../../icu/include;"$(WebKitOutputDir)\include\JavaScriptCore";"$(WebKitLibrariesDir)\include\pthreads";"$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders";"$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility"" 46 46 PreprocessorDefinitions="__STD_C" 47 47 ForcedIncludeFiles="" … … 74 74 <Tool 75 75 Name="VCPostBuildEventTool" 76 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\JavaScriptCore"

xcopy /y /d "$(ProjectDir)\..\..\wtf\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wtf\unicode\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\kjs\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\VM\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\ profiler\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\kjs\create_hash_table" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\pcre\pcre.h" "$(WebKitOutputDir)\include\JavaScriptCore"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"76 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\JavaScriptCore"

xcopy /y /d "$(ProjectDir)\..\..\wtf\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wtf\unicode\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\kjs\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\VM\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\masm\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wrec\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\profiler\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\kjs\create_hash_table" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\pcre\pcre.h" "$(WebKitOutputDir)\include\JavaScriptCore"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
" 77 77 /> 78 78 </Configuration> … … 105 105 <Tool 106 106 Name="VCCLCompilerTool" 107 AdditionalIncludeDirectories=""$(WebKitOutputDir)\obj\JavaScriptCore\DerivedSources\";../../;../../API/;../../pcre/;../../kjs/;../../VM/;../../wtf/;../../profiler; "$(WebKitLibrariesDir)\include";"$(WebKitLibrariesDir)\include\icu";../../../icu/include;"$(WebKitOutputDir)\include\JavaScriptCore";"$(WebKitLibrariesDir)\include\pthreads";"$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders";"$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility""107 AdditionalIncludeDirectories=""$(WebKitOutputDir)\obj\JavaScriptCore\DerivedSources\";../../;../../API/;../../pcre/;../../kjs/;../../VM/;../../wtf/;../../profiler;../../masm/;../../wrec/;"$(WebKitLibrariesDir)\include";"$(WebKitLibrariesDir)\include\icu";../../../icu/include;"$(WebKitOutputDir)\include\JavaScriptCore";"$(WebKitLibrariesDir)\include\pthreads";"$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders";"$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility"" 108 108 PreprocessorDefinitions="__STD_C" 109 109 ForcedIncludeFiles="" … … 136 136 <Tool 137 137 Name="VCPostBuildEventTool" 138 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\JavaScriptCore"

xcopy /y /d "$(ProjectDir)\..\..\wtf\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wtf\unicode\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\kjs\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\VM\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\ profiler\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\kjs\create_hash_table" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\pcre\pcre.h" "$(WebKitOutputDir)\include\JavaScriptCore"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"138 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\JavaScriptCore"

xcopy /y /d "$(ProjectDir)\..\..\wtf\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wtf\unicode\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\kjs\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\VM\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\masm\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wrec\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\profiler\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\kjs\create_hash_table" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\pcre\pcre.h" "$(WebKitOutputDir)\include\JavaScriptCore"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
" 139 139 /> 140 140 </Configuration> … … 166 166 <Tool 167 167 Name="VCCLCompilerTool" 168 AdditionalIncludeDirectories=""$(WebKitOutputDir)\obj\JavaScriptCore\DerivedSources\";../../;../../API/;../../pcre/;../../kjs/;../../VM/;../../wtf/;../../profiler; "$(WebKitLibrariesDir)\include";"$(WebKitLibrariesDir)\include\icu";../../../icu/include;"$(WebKitOutputDir)\include\JavaScriptCore";"$(WebKitLibrariesDir)\include\pthreads";"$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders";"$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility""168 AdditionalIncludeDirectories=""$(WebKitOutputDir)\obj\JavaScriptCore\DerivedSources\";../../;../../API/;../../pcre/;../../kjs/;../../VM/;../../wtf/;../../profiler;../../masm/;../../wrec/;"$(WebKitLibrariesDir)\include";"$(WebKitLibrariesDir)\include\icu";../../../icu/include;"$(WebKitOutputDir)\include\JavaScriptCore";"$(WebKitLibrariesDir)\include\pthreads";"$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders";"$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility"" 169 169 PreprocessorDefinitions="__STD_C" 170 170 ForcedIncludeFiles="" … … 197 197 <Tool 198 198 Name="VCPostBuildEventTool" 199 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\JavaScriptCore"

xcopy /y /d "$(ProjectDir)\..\..\wtf\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wtf\unicode\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\kjs\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\VM\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\ profiler\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\kjs\create_hash_table" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\pcre\pcre.h" "$(WebKitOutputDir)\include\JavaScriptCore"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"199 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\JavaScriptCore"

xcopy /y /d "$(ProjectDir)\..\..\wtf\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wtf\unicode\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\kjs\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\VM\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\masm\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wrec\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\profiler\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\kjs\create_hash_table" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\pcre\pcre.h" "$(WebKitOutputDir)\include\JavaScriptCore"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
" 200 200 /> 201 201 </Configuration> … … 228 228 <Tool 229 229 Name="VCCLCompilerTool" 230 AdditionalIncludeDirectories=""$(WebKitOutputDir)\obj\JavaScriptCore\DerivedSources\";../../;../../API/;../../pcre/;../../kjs/;../../VM/;../../wtf/;../../profiler; "$(WebKitLibrariesDir)\include";"$(WebKitLibrariesDir)\include\icu";../../../icu/include;"$(WebKitOutputDir)\include\JavaScriptCore";"$(WebKitLibrariesDir)\include\pthreads";"$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders";"$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility""230 AdditionalIncludeDirectories=""$(WebKitOutputDir)\obj\JavaScriptCore\DerivedSources\";../../;../../API/;../../pcre/;../../kjs/;../../VM/;../../wtf/;../../profiler;../../masm/;../../wrec/;"$(WebKitLibrariesDir)\include";"$(WebKitLibrariesDir)\include\icu";../../../icu/include;"$(WebKitOutputDir)\include\JavaScriptCore";"$(WebKitLibrariesDir)\include\pthreads";"$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders";"$(WebKitLibrariesDir)\Include\CoreFoundation\OSXCompatibilityHeaders\GNUCompatibility"" 231 231 PreprocessorDefinitions="__STD_C" 232 232 ForcedIncludeFiles="" … … 259 259 <Tool 260 260 Name="VCPostBuildEventTool" 261 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\JavaScriptCore"

xcopy /y /d "$(ProjectDir)\..\..\wtf\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wtf\unicode\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\kjs\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\VM\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\ profiler\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\kjs\create_hash_table" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\pcre\pcre.h" "$(WebKitOutputDir)\include\JavaScriptCore"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"261 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\JavaScriptCore"

xcopy /y /d "$(ProjectDir)\..\..\wtf\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wtf\unicode\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\kjs\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\VM\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\masm\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\wrec\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\profiler\*.h" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\kjs\create_hash_table" "$(WebKitOutputDir)\include\JavaScriptCore"
xcopy /y /d "$(ProjectDir)\..\..\pcre\pcre.h" "$(WebKitOutputDir)\include\JavaScriptCore"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
" 262 262 /> 263 263 </Configuration> … … 1259 1259 </File> 1260 1260 <File 1261 RelativePath="..\..\VM\CTI.cpp" 1262 > 1263 </File> 1264 <File 1265 RelativePath="..\..\VM\CTI.h" 1266 > 1267 </File> 1268 <File 1261 1269 RelativePath="..\..\VM\ExceptionHelpers.cpp" 1262 1270 > … … 1332 1340 <File 1333 1341 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" 1334 1370 > 1335 1371 </File> -
trunk/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
r36130 r36244 78 78 8613F45A0E3A433E00C948FD /* SamplingTool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8613F4580E3A433E00C948FD /* SamplingTool.cpp */; }; 79 79 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, ); }; }; 80 85 905B02AE0E28640F006DF882 /* RefCountedLeakCounter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 905B02AD0E28640F006DF882 /* RefCountedLeakCounter.cpp */; }; 81 86 90D3469C0E285280009492EE /* RefCountedLeakCounter.h in Headers */ = {isa = PBXBuildFile; fileRef = 90D3469B0E285280009492EE /* RefCountedLeakCounter.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 110 115 A72701B90DADE94900E548D7 /* ExceptionHelpers.h in Headers */ = {isa = PBXBuildFile; fileRef = A72701B30DADE94900E548D7 /* ExceptionHelpers.h */; }; 111 116 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, ); }; }; 112 118 A7C31DAA0DBEBA4300FDF8EB /* SegmentedVector.h in Headers */ = {isa = PBXBuildFile; fileRef = A7C31DA80DBEBA4300FDF8EB /* SegmentedVector.h */; }; 113 119 BC02E90D0E1839DB000F9297 /* ErrorConstructor.h in Headers */ = {isa = PBXBuildFile; fileRef = BC02E9050E1839DB000F9297 /* ErrorConstructor.h */; }; … … 573 579 8613F4580E3A433E00C948FD /* SamplingTool.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SamplingTool.cpp; path = VM/SamplingTool.cpp; sourceTree = "<group>"; }; 574 580 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>"; }; 575 586 905B02AD0E28640F006DF882 /* RefCountedLeakCounter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RefCountedLeakCounter.cpp; sourceTree = "<group>"; }; 576 587 90D3469B0E285280009492EE /* RefCountedLeakCounter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RefCountedLeakCounter.h; sourceTree = "<group>"; }; … … 630 641 A727FF650DA3053B00E548D7 /* JSPropertyNameIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JSPropertyNameIterator.h; path = VM/JSPropertyNameIterator.h; sourceTree = "<group>"; }; 631 642 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>"; }; 632 644 A7C31DA80DBEBA4300FDF8EB /* SegmentedVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SegmentedVector.h; path = VM/SegmentedVector.h; sourceTree = "<group>"; }; 633 645 A7E42C180E3938830065A544 /* JSStaticScopeObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSStaticScopeObject.h; sourceTree = "<group>"; }; … … 858 870 F5C290E60284F98E018635CA /* JavaScriptCorePrefix.h */, 859 871 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 */, 860 881 65162EF108E6A21C007556CD /* wtf */, 861 65417203039E01F90058BFEB /* pcre */, 862 65417200039E01BA0058BFEB /* kjs */, 863 149B15DF0D81F887009CB8C7 /* compiler */, 864 149B15E00D81F88D009CB8C7 /* vm */, 865 1480DB9A0DDC2231003CFDF2 /* debugger */, 866 95AB831A0DA42C6900BC83F3 /* profiler */, 882 1C90513E0BA9E8830081E9D0 /* Configurations */, 867 883 650FDF8D09D0FCA700769E54 /* Derived Sources */, 884 0867D69AFE84028FC02AAC07 /* Frameworks */, 868 885 034768DFFF38A50411DB9C8B /* Products */, 869 886 932FC3C20824BB70005B3C75 /* Resources */, 870 0867D69AFE84028FC02AAC07 /* Frameworks */,871 1C90513E0BA9E8830081E9D0 /* Configurations */,872 141211000A48772600480255 /* tests */,873 887 ); 874 888 name = JavaScriptCore; … … 993 1007 isa = PBXGroup; 994 1008 children = ( 1009 8683B02B0E636482004C19EE /* CTI.cpp */, 1010 8683B02C0E636482004C19EE /* CTI.h */, 995 1011 8613F4580E3A433E00C948FD /* SamplingTool.cpp */, 996 1012 8613F4590E3A433E00C948FD /* SamplingTool.h */, … … 1299 1315 tabWidth = 4; 1300 1316 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>"; 1301 1335 }; 1302 1336 932FC3C20824BB70005B3C75 /* Resources */ = { … … 1552 1586 E124A8F70E555775003091F1 /* OpaqueJSString.h in Headers */, 1553 1587 9534AAFB0E5B7A9600B8A45B /* JSProfilerPrivate.h in Headers */, 1588 8683B02F0E636482004C19EE /* CTI.h in Headers */, 1589 869081410E640C89000D36ED /* IA32MacroAsm.h in Headers */, 1590 869083160E6518D7000D36ED /* WREC.h in Headers */, 1554 1591 933040040E6A749400786E6A /* SmallStrings.h in Headers */, 1555 1592 BCDE3AB80E6C82F5001453A7 /* StructureID.h in Headers */, 1593 A763F79D0E70E0FE00BC151E /* MacroAssembler.h in Headers */, 1556 1594 147B83AC0E6DB8C9004775A4 /* BatchedTransitionOptimizer.h in Headers */, 1557 1595 147B84630E6DE6B1004775A4 /* PutPropertySlot.h in Headers */, … … 1862 1900 E124A8F80E555775003091F1 /* OpaqueJSString.cpp in Sources */, 1863 1901 95F6E6950E5B5F970091E860 /* JSProfilerPrivate.cpp in Sources */, 1902 8683B02E0E636482004C19EE /* CTI.cpp in Sources */, 1903 869083150E6518D7000D36ED /* WREC.cpp in Sources */, 1864 1904 9330402C0E6A764000786E6A /* SmallStrings.cpp in Sources */, 1865 1905 BCDE3B430E6C832D001453A7 /* StructureID.cpp in Sources */, … … 2085 2125 name = Production; 2086 2126 }; 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 }; 2087 2178 /* End XCBuildConfiguration section */ 2088 2179 … … 2093 2184 1412113A0A48798400480255 /* Debug */, 2094 2185 1412113B0A48798400480255 /* Release */, 2186 A76148410E6402F700E357FA /* Profiling */, 2095 2187 1412113C0A48798400480255 /* Production */, 2096 2188 ); … … 2103 2195 149C275E08902AFE008A9EFC /* Debug */, 2104 2196 149C275F08902AFE008A9EFC /* Release */, 2197 A761483F0E6402F700E357FA /* Profiling */, 2105 2198 149C276108902AFE008A9EFC /* Production */, 2106 2199 ); … … 2113 2206 149C276808902AFE008A9EFC /* Debug */, 2114 2207 149C276908902AFE008A9EFC /* Release */, 2208 A76148430E6402F700E357FA /* Profiling */, 2115 2209 149C276B08902AFE008A9EFC /* Production */, 2116 2210 ); … … 2123 2217 149C276D08902AFE008A9EFC /* Debug */, 2124 2218 149C276E08902AFE008A9EFC /* Release */, 2219 A761483E0E6402F700E357FA /* Profiling */, 2125 2220 149C277008902AFE008A9EFC /* Production */, 2126 2221 ); … … 2133 2228 149C277208902AFE008A9EFC /* Debug */, 2134 2229 149C277308902AFE008A9EFC /* Release */, 2230 A761483D0E6402F700E357FA /* Profiling */, 2135 2231 149C277508902AFE008A9EFC /* Production */, 2136 2232 ); … … 2143 2239 14BD59D70A3E8FC900BAF59C /* Debug */, 2144 2240 14BD59D80A3E8FC900BAF59C /* Release */, 2241 A76148420E6402F700E357FA /* Profiling */, 2145 2242 14BD59D90A3E8FC900BAF59C /* Production */, 2146 2243 ); … … 2153 2250 65FB3F7809D11EBD00F49DEB /* Debug */, 2154 2251 65FB3F7909D11EBD00F49DEB /* Release */, 2252 A76148400E6402F700E357FA /* Profiling */, 2155 2253 65FB3F7A09D11EBD00F49DEB /* Production */, 2156 2254 ); -
trunk/JavaScriptCore/VM/CodeBlock.cpp
r36087 r36244 274 274 size_t i = 0; 275 275 do { 276 printStructureIDs(&instructions[structureIDInstructions[i]]);277 ++i;276 printStructureIDs(&instructions[structureIDInstructions[i]]); 277 ++i; 278 278 } while (i < structureIDInstructions.size()); 279 279 } 280 280 281 281 if (exceptionHandlers.size()) { 282 282 printf("\nException Handlers:\n"); … … 318 318 UChar ch = static_cast<UChar>(entry + characterSwitchJumpTables[i].min); 319 319 printf("\t\t\"%s\" => %04d\n", UString(&ch, 1).ascii(), *iter); 320 320 } 321 321 printf(" }\n"); 322 322 ++i; … … 329 329 do { 330 330 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); 334 334 printf(" }\n"); 335 335 ++i; … … 821 821 for (size_t i = 0; i < size; ++i) 822 822 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 823 832 } 824 833 … … 913 922 } 914 923 924 void* 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 915 938 int CodeBlock::lineNumberForVPC(const Instruction* vPC) 916 939 { -
trunk/JavaScriptCore/VM/CodeBlock.h
r36016 r36244 50 50 uint32_t target; 51 51 uint32_t scopeDepth; 52 void* nativeCode; 52 53 }; 53 54 54 55 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 57 59 }; 58 60 uint32_t instructionOffset : 25; … … 67 69 }; 68 70 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 70 106 struct SimpleJumpTable { 107 // FIXME: The two Vectors can be combind into one Vector<OffsetLocation> 71 108 Vector<int32_t> branchOffsets; 72 109 int32_t min; 110 #if ENABLE(CTI) 111 Vector<void*> ctiOffsets; 112 void* ctiDefault; 113 #endif 114 73 115 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 { 75 118 if (!branchOffsets[key]) 76 119 branchOffsets[key] = offset; 77 120 } 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 78 130 }; 79 131 … … 82 134 : ownerNode(ownerNode_) 83 135 , globalData(0) 136 #if ENABLE(CTI) 137 , ctiCode(0) 138 #endif 84 139 , numTemporaries(0) 85 140 , numVars(0) … … 93 148 { 94 149 } 95 150 96 151 ~CodeBlock(); 97 152 98 #if !defined(NDEBUG) || ENABLE (SAMPLING_TOOL)153 #if !defined(NDEBUG) || ENABLE_SAMPLING_TOOL 99 154 void dump(ExecState*) const; 100 155 void printStructureIDs(const Instruction*) const; … … 104 159 int lineNumberForVPC(const Instruction* vPC); 105 160 bool getHandlerForVPC(const Instruction* vPC, Instruction*& target, int& scopeDepth); 161 void* nativeExceptionCodeForHandlerVPC(const Instruction* handlerVPC); 106 162 107 163 void mark(); … … 111 167 ScopeNode* ownerNode; 112 168 JSGlobalData* globalData; 169 #if ENABLE(CTI) 170 void* ctiCode; 171 #endif 113 172 114 173 int numConstants; … … 126 185 Vector<Instruction> instructions; 127 186 Vector<size_t> structureIDInstructions; 187 Vector<void*> structureIDAccessStubs; 128 188 129 189 // Constant pool … … 141 201 Vector<SimpleJumpTable> characterSwitchJumpTables; 142 202 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 143 209 144 210 private: -
trunk/JavaScriptCore/VM/CodeGenerator.cpp
r36032 r36244 1193 1193 RegisterID* CodeGenerator::emitCatch(RegisterID* targetRegister, LabelID* start, LabelID* end) 1194 1194 { 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 }; 1196 1196 exceptionHandlers().append(info); 1197 1197 emitOpcode(op_catch); … … 1321 1321 ASSERT(nodes[i]->isString()); 1322 1322 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); 1324 1329 } 1325 1330 } -
trunk/JavaScriptCore/VM/LabelID.h
r34842 r36244 71 71 m_codeBlock->instructions[j].u.operand = m_location - j; 72 72 } 73 74 m_codeBlock->labels.add(location); 73 75 } 74 76 -
trunk/JavaScriptCore/VM/Machine.cpp
r36081 r36244 76 76 namespace KJS { 77 77 78 // Default number of ticks before a timeout check should be done.79 static const int initialTickCountThreshold = 255;80 81 78 // Preferred number of milliseconds between each timeout check 82 79 static const int preferredScriptCheckTimeInterval = 1000; … … 307 304 } 308 305 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 306 ALWAYS_INLINE static JSValue* inlineResolveBase(ExecState* exec, Identifier& property, ScopeChainNode* scopeChain) 307 { 314 308 ScopeChainIterator iter = scopeChain->begin(); 315 309 ScopeChainIterator next = iter; … … 319 313 320 314 PropertySlot slot; 321 Identifier& ident = codeBlock->identifiers[property];322 315 JSObject* base; 323 316 while (true) { 324 317 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 329 321 iter = next; 330 322 ++next; 331 323 } 324 325 ASSERT_NOT_REACHED(); 326 return 0; 327 } 328 329 NEVER_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); 332 334 } 333 335 … … 466 468 (*it) = jsUndefined(); 467 469 468 469 470 for (size_t i = 0; i < newCodeBlock->constantRegisters.size(); ++i) 470 471 r[i] = newCodeBlock->constantRegisters[i]; … … 529 530 Machine::Machine() 530 531 : m_sampler(0) 532 #if ENABLE(CTI) 533 , m_ctiArrayLengthTrampoline(0) 534 , m_ctiStringLengthTrampoline(0) 535 , m_jitCodeBuffer(new JITCodeBuffer(1024 * 1024)) 536 #endif 531 537 , m_reentryDepth(0) 532 538 , m_timeoutTime(0) … … 548 554 m_jsStringVptr = jsString->vptr(); 549 555 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(); 550 560 551 561 fastFree(storage); 562 } 563 564 Machine::~Machine() 565 { 566 #if ENABLE(CTI) 567 if (m_ctiArrayLengthTrampoline) 568 fastFree(m_ctiArrayLengthTrampoline); 569 if (m_ctiStringLengthTrampoline) 570 fastFree(m_ctiStringLengthTrampoline); 571 #endif 552 572 } 553 573 … … 627 647 #endif 628 648 629 #if !defined(NDEBUG) || ENABLE(SAMPLING_TOOL)649 //#if !defined(NDEBUG) || ENABLE(SAMPLING_TOOL) 630 650 631 651 bool Machine::isOpcode(Opcode opcode) … … 640 660 } 641 661 642 #endif662 //#endif 643 663 644 664 NEVER_INLINE bool Machine::unwindCallFrame(ExecState* exec, JSValue* exceptionValue, const Instruction*& vPC, CodeBlock*& codeBlock, ScopeChainNode*& scopeChain, Register*& r) … … 686 706 { 687 707 // Set up the exception object 688 708 689 709 if (exceptionValue->isObject()) { 690 710 JSObject* exception = static_cast<JSObject*>(exceptionValue); … … 793 813 794 814 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 795 820 JSValue* result = privateExecute(Normal, &newExec, &m_registerFile, r, scopeChain, codeBlock, exception); 821 #endif 796 822 m_reentryDepth--; 797 823 … … 853 879 854 880 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 855 886 JSValue* result = privateExecute(Normal, &newExec, &m_registerFile, r, scopeChain, newCodeBlock, exception); 887 #endif 856 888 m_reentryDepth--; 857 889 … … 931 963 932 964 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 933 970 JSValue* result = privateExecute(Normal, &newExec, &m_registerFile, r, scopeChain, codeBlock, exception); 971 #endif 934 972 m_reentryDepth--; 935 973 … … 949 987 } 950 988 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 989 NEVER_INLINE void Machine::debug(ExecState* exec, const CodeBlock* codeBlock, ScopeChainNode* scopeChain, Register* r, DebugHookID debugHookID, int firstLine, int lastLine) 990 { 957 991 Debugger* debugger = exec->dynamicGlobalObject()->debugger(); 958 992 if (!debugger) … … 961 995 DebuggerCallFrame debuggerCallFrame(exec, exec->dynamicGlobalObject(), codeBlock, scopeChain, r, 0); 962 996 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; 988 1016 } 989 1017 } … … 1074 1102 } 1075 1103 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 1085 1104 static NEVER_INLINE ScopeChainNode* createExceptionScope(ExecState* exec, CodeBlock* codeBlock, const Instruction* vPC, Register* r, ScopeChainNode* scopeChain) 1086 1105 { … … 1236 1255 ASSERT(slot.slotBase()->isObject()); 1237 1256 1238 JSObject* slotBaseObject = static_cast<JSObject*>(slot.slotBase());1257 JSObject* baseObject = static_cast<JSObject*>(slot.slotBase()); 1239 1258 1240 1259 // Heavy access to a prototype is a good indication that it's not being 1241 1260 // 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()); 1245 1264 static_cast<JSObject*>(baseValue)->structureID()->setCachedPrototypeChain(0); 1246 1265 } 1247 1266 1248 1267 vPC[0] = getOpcode(op_get_by_id_proto); 1249 vPC[5] = slotBaseObject->structureID();1268 vPC[5] = baseObject->structureID(); 1250 1269 vPC[6] = slot.cachedOffset(); 1251 1270 … … 1259 1278 JSValue* v = o->structureID()->prototype(); 1260 1279 1261 // If we didn't find slotBase in baseValue's prototype chain, then baseValue1280 // If we didn't find base in baseValue's prototype chain, then baseValue 1262 1281 // must be a proxy for another object. 1263 1282 if (v->isNull()) { … … 1318 1337 } 1319 1338 1339 #if ENABLE(CTI) 1340 // Currently with CTI enabled we never interpret functions 1341 ASSERT_NOT_REACHED(); 1342 #endif 1343 1320 1344 JSValue* exceptionValue = 0; 1321 1345 Instruction* handlerVPC = 0; … … 1327 1351 1328 1352 #define VM_CHECK_EXCEPTION() \ 1329 1353 do { \ 1330 1354 if (UNLIKELY(exec->hadException())) { \ 1331 1355 exceptionValue = exec->exception(); \ … … 1344 1368 tickCount = m_ticksUntilNextTimeoutCheck; \ 1345 1369 } 1346 1370 1347 1371 #if HAVE(COMPUTED_GOTO) 1348 1372 #define NEXT_OPCODE MACHINE_SAMPLING_sample(codeBlock, vPC); goto *vPC->u.opcode … … 2485 2509 int base = (++vPC)->u.operand; 2486 2510 int property = (++vPC)->u.operand; 2487 2511 2488 2512 JSValue* baseValue = r[base].jsValue(exec); 2489 2513 JSValue* subscript = r[property].jsValue(exec); … … 2799 2823 vPC += defaultOffset; 2800 2824 else 2801 vPC += offsetForStringSwitch(codeBlock->stringSwitchJumpTables[tableIndex], scrutinee, defaultOffset);2825 vPC += codeBlock->stringSwitchJumpTables[tableIndex].offsetForValue(static_cast<JSString*>(scrutinee)->value().rep(), defaultOffset); 2802 2826 NEXT_OPCODE; 2803 2827 } … … 3381 3405 is only generated while the debugger is attached. 3382 3406 */ 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; 3387 3414 NEXT_OPCODE; 3388 3415 } … … 3406 3433 #undef BEGIN_OPCODE 3407 3434 #undef VM_CHECK_EXCEPTION 3435 #undef CHECK_FOR_TIMEOUT 3408 3436 } 3409 3437 … … 3499 3527 } 3500 3528 3529 #if ENABLE(CTI) 3530 3531 NEVER_INLINE static void doSetReturnAddressVMThrowTrampoline(void** returnAddress) 3532 { 3533 ctiSetReturnAddress(returnAddress, (void*)ctiVMThrowTrampoline); 3534 } 3535 3536 NEVER_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 3590 void* 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 3598 void* 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 3606 NEVER_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 3762 void Machine::cti_op_end(CTI_ARGS) 3763 { 3764 ASSERT(ARG_scopeChain->refCount > 1); 3765 ARG_scopeChain->deref(); 3766 } 3767 3768 JSValue* 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 3779 JSValue* 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 3789 void 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 3800 int 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 3811 JSValue* Machine::cti_op_new_object(CTI_ARGS) 3812 { 3813 return constructEmptyObject(ARG_exec);; 3814 } 3815 3816 void 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 3829 void 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 3843 void 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 3854 void 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 3868 JSValue* 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 3883 JSValue* 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 3898 JSValue* 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 3911 JSValue* 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 3927 JSValue* 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 3946 JSValue* 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 3958 JSValue* 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 3975 JSValue* Machine::cti_op_new_func(CTI_ARGS) 3976 { 3977 return ARG_func1->makeFunction(ARG_exec, ARG_scopeChain); 3978 } 3979 3980 void* 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 4033 JSValue* 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 4083 JSValue* 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 4125 JSValue* Machine::cti_op_new_array(CTI_ARGS) 4126 { 4127 ArgList argsList(ARG_registers1, ARG_int2); 4128 return constructArray(ARG_exec, argsList); 4129 } 4130 4131 JSValue* 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 4160 void* 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 4223 JSValue* 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 4274 JSValue* 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 4306 JSValue* 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 4350 JSValue* 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 4367 void 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 4399 JSValue* 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 4407 int 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 4418 JSValue* 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 4434 JSValue* Machine::cti_op_resolve_base(CTI_ARGS) 4435 { 4436 return inlineResolveBase(ARG_exec, *ARG_id1, ARG_scopeChain); 4437 } 4438 4439 JSValue* 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 4473 JSValue* 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 4490 JSValue* 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 4500 int 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 4511 JSValue* 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 4522 int 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 4533 JSValue* 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 4545 JSValue* 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 4560 JSValue* 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 4580 JSValue* 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 4598 JSValue* 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 4618 JSValue* 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 4633 JSValue* 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 4668 JSValue* Machine::cti_op_new_func_exp(CTI_ARGS) 4669 { 4670 return ARG_funcexp1->makeFunction(ARG_exec, ARG_scopeChain); 4671 } 4672 4673 JSValue* 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 4685 JSValue* 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 4693 JSValue* 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 4708 JSValue* 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 4721 JSValue* 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 4737 JSValue* 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 4749 JSValue* Machine::cti_op_new_regexp(CTI_ARGS) 4750 { 4751 return new (ARG_exec) RegExpObject(ARG_scopeChain->globalObject()->regExpPrototype(), ARG_regexp1); 4752 } 4753 4754 JSValue* 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 4766 JSValue* 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 4792 void* 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 4822 JSPropertyNameIterator* Machine::cti_op_get_pnames(CTI_ARGS) 4823 { 4824 return JSPropertyNameIterator::create(ARG_exec, ARG_src1); 4825 } 4826 4827 JSValue* 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 4836 void 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 4849 void 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 4858 JSValue* Machine::cti_op_typeof(CTI_ARGS) 4859 { 4860 return jsTypeStringForValue(ARG_exec, ARG_src1); 4861 } 4862 4863 JSValue* 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 4878 JSValue* 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 4893 JSValue* 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 4903 JSValue* 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 4928 JSValue* 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 4940 void 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 4953 void 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 4961 void* 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 4976 void* 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 4994 void* 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 5011 JSValue* 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 5034 void 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 5045 void 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 5056 JSValue* 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 5067 void 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 5081 JSValue* 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 5090 JSValue* 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 5099 void* 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 3501 5138 } // namespace KJS -
trunk/JavaScriptCore/VM/Machine.h
r36058 r36244 37 37 #include <wtf/HashMap.h> 38 38 39 #if ENABLE(CTI) 40 #include "CTI.h" 41 #endif 42 39 43 namespace KJS { 40 44 … … 64 68 65 69 class Machine { 70 friend class CTI; 71 friend class WRECompiler; 66 72 public: 67 73 Machine(); 74 ~Machine(); 68 75 69 76 RegisterFile& registerFile() { return m_registerFile; } … … 126 133 SamplingTool* m_sampler; 127 134 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 128 229 private: 129 230 enum ExecutionFlag { Normal, InitializeAndReturn }; … … 135 236 136 237 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); 138 239 139 240 NEVER_INLINE bool unwindCallFrame(ExecState*, JSValue*, const Instruction*&, CodeBlock*&, ScopeChainNode*&, Register*&); … … 157 258 void tryCachePutByID(CodeBlock*, Instruction* vPC, JSValue* baseValue, const PutPropertySlot&); 158 259 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 160 275 int m_reentryDepth; 161 276 unsigned m_timeoutTime; … … 169 284 void* m_jsArrayVptr; 170 285 void* m_jsStringVptr; 286 void* m_jsFunctionVptr; 171 287 172 288 #if HAVE(COMPUTED_GOTO) -
trunk/JavaScriptCore/VM/Register.h
r36058 r36244 66 66 Register(Instruction*); 67 67 Register(JSPropertyNameIterator*); 68 explicit Register(void*); 68 69 69 70 CodeBlock* codeBlock() const; … … 100 101 } m_type; 101 102 #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 // } 102 109 }; 103 110 … … 122 129 // Once registers hold doubles, this function will allocate a JSValue* 123 130 // if the register doesn't hold one already. 124 ASSERT(m_type == JSValueType);131 // ASSERT(m_type == JSValueType); 125 132 return u.jsValue; 126 133 } … … 128 135 ALWAYS_INLINE JSValue* Register::getJSValue() const 129 136 { 130 ASSERT(m_type == JSValueType);137 // ASSERT(m_type == JSValueType); 131 138 return u.jsValue; 132 139 } … … 192 199 } 193 200 201 ALWAYS_INLINE Register::Register(void* v) 202 { 203 u.v = v; 204 } 205 194 206 ALWAYS_INLINE CodeBlock* Register::codeBlock() const 195 207 { 196 ASSERT(m_type == CodeBlockType);208 // ASSERT(m_type == CodeBlockType); 197 209 return u.codeBlock; 198 210 } … … 200 212 ALWAYS_INLINE ScopeChainNode* Register::scopeChain() const 201 213 { 202 ASSERT(m_type == ScopeChainNodeType);214 // ASSERT(m_type == ScopeChainNodeType); 203 215 return u.scopeChain; 204 216 } … … 206 218 ALWAYS_INLINE intptr_t Register::i() const 207 219 { 208 ASSERT(m_type == IntType);220 // ASSERT(m_type == IntType); 209 221 return u.i; 210 222 } … … 212 224 ALWAYS_INLINE Register* Register::r() const 213 225 { 214 ASSERT(m_type == RegisterType);226 // ASSERT(m_type == RegisterType); 215 227 return u.r; 216 228 } … … 218 230 ALWAYS_INLINE Instruction* Register::vPC() const 219 231 { 220 ASSERT(m_type == InstructionType);232 // ASSERT(m_type == InstructionType); 221 233 return u.vPC; 222 234 } … … 224 236 ALWAYS_INLINE JSPropertyNameIterator* Register::jsPropertyNameIterator() const 225 237 { 226 ASSERT(m_type == JSPropertyNameIteratorType);238 // ASSERT(m_type == JSPropertyNameIteratorType); 227 239 return u.jsPropertyNameIterator; 228 240 } -
trunk/JavaScriptCore/VM/RegisterFile.h
r35691 r36244 90 90 class RegisterFile : Noncopyable { 91 91 public: 92 enum {92 enum CallFrameHeaderEntry { 93 93 CallerCodeBlock = 0, 94 94 ReturnVPC, … … 101 101 Callee, 102 102 OptionalCalleeActivation, 103 CTIReturnEIP, 103 104 CallFrameHeaderSize 104 105 }; -
trunk/JavaScriptCore/VM/SamplingTool.cpp
r36032 r36244 80 80 } 81 81 82 #if ENABLE(SAMPLING_TOOL) 83 extern OpcodeID what; 84 extern unsigned incall; 85 unsigned cowdogs = 0; 86 unsigned sampleCows[numOpcodeIDs] = {0}; 87 unsigned sampleDogs[numOpcodeIDs] = {0}; 88 #endif 89 82 90 void SamplingTool::run() 83 91 { … … 86 94 87 95 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 89 105 CodeBlock* codeBlock = m_recordedCodeBlock; 90 106 Instruction* vPC = m_recordedVPC; … … 130 146 OpcodeID opcode; 131 147 long long count; 148 long long countincall; 132 149 }; 133 150 … … 251 268 for (int i = 0; i < numOpcodeIDs; ++i) { 252 269 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]; 254 272 } 255 273 #if HAVE(MERGESORT) … … 260 278 261 279 // (4) Print Opcode sampling results. 262 280 281 263 282 printf("\nOpcode sampling results\n\n"); 264 283 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 273 293 for (int i = 0; i < numOpcodeIDs; ++i) { 274 294 OpcodeID opcode = opcodeSampleInfo[i].opcode; 275 295 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); 277 299 } 278 300 printf("\n"); -
trunk/JavaScriptCore/VM/SamplingTool.h
r36036 r36244 43 43 class CodeBlock; 44 44 struct Instruction; 45 46 #if ENABLE(SAMPLING_TOOL) 47 extern OpcodeID what; 48 #endif 45 49 46 50 struct ScopeSampleRecord { … … 109 113 m_recordedCodeBlock = 0; 110 114 m_recordedVPC = 0; 115 #if ENABLE(SAMPLING_TOOL) 116 what=(OpcodeID)-1; 117 #endif 111 118 } 112 119 … … 135 142 #define MACHINE_SAMPLING_privateExecuteReturned() m_sampler->privateExecuteReturned() 136 143 #define MACHINE_SAMPLING_callingHostFunction() m_sampler->callingHostFunction() 144 #define CTI_MACHINE_SAMPLING_callingHostFunction() machine->m_sampler->callingHostFunction() 137 145 #else 138 146 #define SCOPENODE_SAMPLING_notifyOfScope(sampler) … … 140 148 #define MACHINE_SAMPLING_privateExecuteReturned() 141 149 #define MACHINE_SAMPLING_callingHostFunction() 150 #define CTI_MACHINE_SAMPLING_callingHostFunction() 142 151 #endif 143 152 -
trunk/JavaScriptCore/kjs/ExecState.h
r35918 r36244 47 47 // Passed as the first argument to most functions. 48 48 class ExecState : Noncopyable { 49 #if ENABLE(CTI) 50 friend class CTI; 51 #endif 49 52 friend class Machine; 50 53 friend class DebuggerCallFrame; 51 52 54 public: 53 55 ExecState(JSGlobalObject*, JSObject* globalThisValue, ScopeChainNode* globalScopeChain); … … 71 73 JSValue** exceptionSlot() { return &m_exception; } 72 74 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 73 79 74 80 JSGlobalData& globalData() { return *m_globalData; } … … 102 108 103 109 JSValue* m_exception; 104 110 #if ENABLE(CTI) 111 void* m_ctiReturnAddress; 112 #endif 105 113 JSGlobalData* m_globalData; 106 114 -
trunk/JavaScriptCore/kjs/InternalFunction.h
r35807 r36244 40 40 41 41 protected: 42 InternalFunction(PassRefPtr<KJS::StructureID> st) : JSObject(st){} 42 43 InternalFunction(ExecState*); 43 44 InternalFunction(ExecState*, FunctionPrototype*, const Identifier&); -
trunk/JavaScriptCore/kjs/JSArray.h
r36032 r36244 38 38 39 39 class JSArray : public JSObject { 40 friend class CTI; 41 40 42 public: 41 43 JSArray(PassRefPtr<StructureID>); -
trunk/JavaScriptCore/kjs/JSCell.h
r36036 r36244 39 39 friend class JSString; 40 40 friend class Machine; 41 friend class CTI; 41 42 private: 42 43 JSCell(); -
trunk/JavaScriptCore/kjs/JSFunction.h
r36016 r36244 39 39 40 40 class JSFunction : public InternalFunction { 41 friend class Machine; 42 41 43 typedef InternalFunction Base; 44 JSFunction(PassRefPtr<KJS::StructureID> st) : InternalFunction(st), m_scopeChain(NoScopeChain()) {} 42 45 public: 43 46 JSFunction(ExecState*, const Identifier&, FunctionBodyNode*, ScopeChainNode*); -
trunk/JavaScriptCore/kjs/JSImmediate.h
r35830 r36244 83 83 class JSImmediate { 84 84 private: 85 friend class CTI; // Whooo! 86 85 87 static const uintptr_t TagMask = 0x3u; // primary tag is 2 bits long 86 88 static const uintptr_t TagBitTypeInteger = 0x1u; // bottom bit set indicates integer, this dominates the following bit … … 231 233 static JSValue* undefinedImmediate(); 232 234 static JSValue* nullImmediate(); 235 static JSValue* zeroImmediate(); 236 static JSValue* oneImmediate(); 233 237 234 238 static JSValue* impossibleValue(); … … 286 290 ALWAYS_INLINE JSValue* JSImmediate::undefinedImmediate() { return makeUndefined(); } 287 291 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); } 288 294 289 295 // 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 55 55 class JSObject : public JSCell { 56 56 friend class BatchedTransitionOptimizer; 57 friend class CTI; 57 58 58 59 public: -
trunk/JavaScriptCore/kjs/JSString.h
r36006 r36244 52 52 53 53 class JSString : public JSCell { 54 friend class CTI; 55 54 56 public: 55 57 JSString(const UString& value) -
trunk/JavaScriptCore/kjs/JSValue.h
r36016 r36244 29 29 #include "ustring.h" 30 30 #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) 31 35 32 36 namespace KJS { -
trunk/JavaScriptCore/kjs/JSVariableObject.h
r36016 r36244 76 76 size_t registerArraySize; 77 77 78 static inline ptrdiff_t offsetOf_registers() 79 { 80 return OBJECT_OFFSET(JSVariableObjectData, registers); 81 } 82 78 83 private: 79 84 JSVariableObjectData(const JSVariableObjectData&); … … 102 107 103 108 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 } 104 120 }; 105 121 -
trunk/JavaScriptCore/kjs/PropertyMap.h
r36083 r36244 82 82 83 83 class PropertyMap : Noncopyable { 84 friend class CTI; 85 84 86 public: 85 87 PropertyMap(); -
trunk/JavaScriptCore/kjs/RegExpConstructor.cpp
r36016 r36244 293 293 UString flags = arg1->isUndefined() ? UString("") : arg1->toString(exec); 294 294 295 RefPtr<RegExp> regExp = RegExp::create( pattern, flags);295 RefPtr<RegExp> regExp = RegExp::create(exec, pattern, flags); 296 296 if (!regExp->isValid()) 297 297 return throwError(exec, SyntaxError, UString("Invalid regular expression: ").append(regExp->errorMessage())); -
trunk/JavaScriptCore/kjs/RegExpPrototype.cpp
r36006 r36244 87 87 UString pattern = args.isEmpty() ? UString("") : arg0->toString(exec); 88 88 UString flags = arg1->isUndefined() ? UString("") : arg1->toString(exec); 89 regExp = RegExp::create( pattern, flags);89 regExp = RegExp::create(exec, pattern, flags); 90 90 } 91 91 -
trunk/JavaScriptCore/kjs/ScopeChain.h
r35027 r36244 147 147 } 148 148 149 class NoScopeChain {}; 150 149 151 class ScopeChain { 150 152 public: 153 ScopeChain(NoScopeChain) 154 : m_node(0) 155 { 156 } 157 151 158 ScopeChain(JSObject* o, JSObject* globalThis) 152 159 : m_node(new ScopeChainNode(0, o, globalThis)) … … 165 172 { 166 173 } 167 168 ~ScopeChain() { m_node->deref(); } 174 175 ~ScopeChain() 176 { 177 if (m_node) 178 m_node->deref(); 179 } 169 180 170 181 void swap(ScopeChain&); -
trunk/JavaScriptCore/kjs/StringPrototype.cpp
r36009 r36244 410 410 * replaced with the result of the expression new RegExp(regexp). 411 411 */ 412 reg = RegExp::create( a0->toString(exec));412 reg = RegExp::create(exec, a0->toString(exec)); 413 413 } 414 414 RegExpConstructor* regExpObj = exec->lexicalGlobalObject()->regExpConstructor(); … … 460 460 * replaced with the result of the expression new RegExp(regexp). 461 461 */ 462 reg = RegExp::create( a0->toString(exec));462 reg = RegExp::create(exec, a0->toString(exec)); 463 463 } 464 464 RegExpConstructor* regExpObj = exec->lexicalGlobalObject()->regExpConstructor(); -
trunk/JavaScriptCore/kjs/nodes.cpp
r36036 r36244 263 263 RegisterID* RegExpNode::emitCode(CodeGenerator& generator, RegisterID* dst) 264 264 { 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()); 267 268 if (dst == ignoredResult()) 268 269 return 0; 269 return generator.emitNewRegExp(generator.finalDestination(dst), m_regExp.get());270 return generator.emitNewRegExp(generator.finalDestination(dst), regExp.get()); 270 271 } 271 272 … … 1630 1631 RefPtr<LabelID> finallyEndLabel = generator.newLabel(); 1631 1632 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()); 1632 1636 generator.emitJump(finallyEndLabel.get()); 1633 1637 … … 1635 1639 RefPtr<RegisterID> tempExceptionRegister = generator.emitCatch(generator.newTemporary(), tryStartLabel.get(), generator.emitLabel(generator.newLabel().get()).get()); 1636 1640 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()); 1637 1644 generator.emitThrow(tempExceptionRegister.get()); 1638 1645 -
trunk/JavaScriptCore/kjs/nodes.h
r36058 r36244 428 428 RegExpNode(JSGlobalData* globalData, const UString& pattern, const UString& flags) KJS_FAST_CALL 429 429 : ExpressionNode(globalData) 430 , m_regExp(RegExp::create(pattern, flags)) 430 , m_pattern(pattern) 431 , m_flags(flags) 431 432 { 432 433 } … … 438 439 439 440 private: 440 RefPtr<RegExp> m_regExp; 441 UString m_pattern; 442 UString m_flags; 441 443 }; 442 444 -
trunk/JavaScriptCore/kjs/nodes2string.cpp
r35986 r36244 315 315 void RegExpNode::streamTo(SourceStream& s) const 316 316 { 317 s << '/' << m_ regExp->pattern() << '/' << m_regExp->flags();317 s << '/' << m_pattern << '/' << m_flags; 318 318 } 319 319 -
trunk/JavaScriptCore/kjs/regexp.cpp
r35027 r36244 22 22 #include "regexp.h" 23 23 24 #include "CTI.h" 24 25 #include "lexer.h" 25 26 #include <pcre/pcre.h> … … 32 33 namespace KJS { 33 34 34 inline RegExp::RegExp(const UString& pattern) 35 36 37 inline RegExp::RegExp(ExecState* exec, const UString& pattern) 35 38 : m_pattern(pattern) 36 39 , m_flagBits(0) 40 , m_regExp(0) 37 41 , m_constructionError(0) 38 42 , m_numSubpatterns(0) 39 43 { 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 } 42 53 } 43 54 44 PassRefPtr<RegExp> RegExp::create( const UString& pattern)55 PassRefPtr<RegExp> RegExp::create(ExecState* exec, const UString& pattern) 45 56 { 46 return adoptRef(new RegExp( pattern));57 return adoptRef(new RegExp(exec, pattern)); 47 58 } 48 59 49 inline RegExp::RegExp( const UString& pattern, const UString& flags)60 inline RegExp::RegExp(ExecState* exec, const UString& pattern, const UString& flags) 50 61 : m_pattern(pattern) 51 62 , m_flags(flags) 52 63 , m_flagBits(0) 64 , m_regExp(0) 53 65 , m_constructionError(0) 54 66 , m_numSubpatterns(0) … … 72 84 } 73 85 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 } 76 95 } 77 96 78 PassRefPtr<RegExp> RegExp::create( const UString& pattern, const UString& flags)97 PassRefPtr<RegExp> RegExp::create(ExecState* exec, const UString& pattern, const UString& flags) 79 98 { 80 return adoptRef(new RegExp( pattern, flags));99 return adoptRef(new RegExp(exec, pattern, flags)); 81 100 } 82 101 … … 84 103 { 85 104 jsRegExpFree(m_regExp); 105 #if ENABLE(WREC) 106 if (m_wrecFunction) 107 fastFree(reinterpret_cast<void*>(m_wrecFunction)); 108 #endif 86 109 } 87 110 … … 96 119 return -1; 97 120 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; 100 127 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]; 113 176 } 114 177 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; 128 179 } 129 180 -
trunk/JavaScriptCore/kjs/regexp.h
r35027 r36244 23 23 24 24 #include "ustring.h" 25 #include "ExecState.h" 25 26 #include <wtf/Forward.h> 26 27 #include <wtf/RefCounted.h> 28 #include <wrec/WREC.h> 27 29 28 30 struct JSRegExp; … … 32 34 class RegExp : public RefCounted<RegExp> { 33 35 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); 36 38 ~RegExp(); 37 39 … … 50 52 51 53 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); 54 56 55 57 void compile(); … … 63 65 const char* m_constructionError; 64 66 unsigned m_numSubpatterns; 67 68 #if ENABLE(WREC) 69 WRECFunction m_wrecFunction; 70 #endif 65 71 }; 66 72 -
trunk/JavaScriptCore/kjs/ustring.h
r36032 r36244 72 72 73 73 class UString { 74 friend class CTI; 75 74 76 public: 75 77 struct Rep { 78 friend class CTI; 79 76 80 static PassRefPtr<Rep> create(UChar*, int); 77 81 static PassRefPtr<Rep> createCopying(const UChar*, int); -
trunk/JavaScriptCore/wtf/ASCIICType.h
r36074 r36244 73 73 inline bool isASCIIHexDigit(int c) { return c >= '0' && c <= '9' || (c | 0x20) >= 'a' && (c | 0x20) <= 'f'; } 74 74 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 75 82 inline bool isASCIILower(char c) { return c >= 'a' && c <= 'z'; } 76 83 inline bool isASCIILower(unsigned short c) { return c >= 'a' && c <= 'z'; } -
trunk/JavaScriptCore/wtf/HashTraits.h
r35900 r36244 82 82 }; 83 83 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). 85 85 template<typename T> struct GenericHashTraitsBase<true, T> { 86 86 static const bool emptyValueIsZero = true; … … 106 106 template<> struct HashTraits<float> : FloatHashTraits<float> { }; 107 107 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 }; 108 117 109 118 template<typename P> struct HashTraits<P*> : GenericHashTraits<P*> { -
trunk/JavaScriptCore/wtf/Platform.h
r36102 r36244 336 336 #endif 337 337 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 338 352 #endif /* WTF_Platform_h */ -
trunk/LayoutTests/ChangeLog
r36114 r36244 1 === End merge of squirrelfish-extreme === 2 3 2008-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 24 2008-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 34 2008-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 1 44 2008-09-04 Dan Bernstein <mitz@apple.com> 2 45 -
trunk/LayoutTests/fast/js/deep-recursion-test.html
r35813 r36244 17 17 18 18 try { 19 simpleRecursion(1 8500);19 simpleRecursion(17472); 20 20 } catch (ex) { 21 21 debug("FAIL: " + ex); -
trunk/WebCore/ChangeLog
r36135 r36244 1 === End merge of squirrelfish-extreme === 2 3 2008-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 19 2008-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 1 32 2008-09-06 Antti Koivisto <antti@apple.com> 2 33 -
trunk/WebCore/WebCore.vcproj/WebCore.vcproj
r36118 r36244 1 <?xml version="1.0" encoding=" windows-1251"?>1 <?xml version="1.0" encoding="Windows-1252"?> 2 2 <VisualStudioProject 3 3 ProjectType="Visual C++" … … 73 73 <Tool 74 74 Name="VCPostBuildEventTool" 75 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\ pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\text\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\np*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\kjs\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\page\inspector\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"75 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\text\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\np*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\kjs\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\masm\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wrec\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\page\inspector\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
" 76 76 /> 77 77 </Configuration> … … 134 134 <Tool 135 135 Name="VCPostBuildEventTool" 136 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\ pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\text\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\np*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\kjs\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\page\inspector\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"136 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\text\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\np*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\kjs\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\masm\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wrec\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\page\inspector\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
" 137 137 /> 138 138 </Configuration> … … 194 194 <Tool 195 195 Name="VCPostBuildEventTool" 196 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\ pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\text\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\np*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\kjs\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\page\inspector\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"196 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\text\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\np*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\kjs\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\masm\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wrec\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\page\inspector\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
" 197 197 /> 198 198 </Configuration> … … 255 255 <Tool 256 256 Name="VCPostBuildEventTool" 257 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\ pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\text\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\curl\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\np*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\kjs\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\page\inspector\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"257 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\text\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\np*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\kjs\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\masm\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wrec\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\page\inspector\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
" 258 258 /> 259 259 </Configuration> … … 317 317 <Tool 318 318 Name="VCPostBuildEventTool" 319 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\ pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\text\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\curl\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\np*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\kjs\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\page\inspector\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"319 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\text\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\np*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\kjs\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\masm\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wrec\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\page\inspector\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
" 320 320 /> 321 321 </Configuration> … … 378 378 <Tool 379 379 Name="VCPostBuildEventTool" 380 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\ pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\text\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\np*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\kjs\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\page\inspector\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
"380 CommandLine="mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
mkdir 2>NUL "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

xcopy /y /d "$(ProjectDir)..\config.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(WebKitOutputDir)\obj\WebCore\DerivedSources\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\appcache\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\archive\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\loader\icon\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\history\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\html\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\css\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\graphics\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\text\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\cf\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\network\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\sql\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\platform\cairo\cairo\src\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bindings\js\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\page\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\bridge\np*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\plugins\win\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\rendering\style\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\editing\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\dom\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\xml\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\svg\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)..\storage\*.h" "$(WebKitOutputDir)\include\WebCore"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\bindings\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\bindings"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\kjs\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\kjs"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\masm\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\masm"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\pcre\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\pcre"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\profiler\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\profiler"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wrec\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wrec"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode"
xcopy /y /d "$(ProjectDir)\..\ForwardingHeaders\wtf\unicode\icu\*.h" "$(WebKitOutputDir)\include\WebCore\ForwardingHeaders\wtf\unicode\icu"

mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\page\inspector\*" "$(WebKitOutputDir)\bin\WebKit.resources\inspector"
mkdir 2>NUL "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"
xcopy /y /d /s /exclude:xcopy.excludes "$(ProjectDir)\..\English.lproj\localizedStrings.js" "$(WebKitOutputDir)\bin\WebKit.resources\en.lproj"

if exist "$(WebKitOutputDir)\buildfailed" del "$(WebKitOutputDir)\buildfailed"
" 381 381 /> 382 382 </Configuration> … … 15537 15537 <File 15538 15538 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" 15539 15555 > 15540 15556 </File> -
trunk/WebKitTools/ChangeLog
r36114 r36244 1 === End merge of squirrelfish-extreme === 2 3 2008-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 14 2008-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 1 24 2008-09-04 Mark Rowe <mrowe@apple.com> 2 25 -
trunk/WebKitTools/Scripts/run-webkit-tests
r35916 r36244 576 576 my $expectedFileName = "$base-$expectedTag.$expectedExtension"; 577 577 578 my $isText = isTextOnlyTest($actual); 579 580 my $expectedDir = expectedDirectoryForTest($base, $isText, $expectedExtension); 581 $expectedResultPaths{$base} = "$expectedDir/$expectedFileName"; 582 578 583 unless ($actualRead->{status} eq "success" && $errorRead->{status} eq "success") { 579 584 my $crashed = $actualRead->{status} eq "crashed" || $errorRead->{status} eq "crashed"; … … 583 588 } 584 589 585 my $isText = isTextOnlyTest($actual);586 587 590 $durations{$test} = time - $startTime if $report10Slowest; 588 591 589 592 my $expected; 590 my $expectedDir = expectedDirectoryForTest($base, $isText, $expectedExtension);591 $expectedResultPaths{$base} = "$expectedDir/$expectedFileName";592 593 593 594 if (!$resetResults && open EXPECTED, "<", "$expectedDir/$expectedFileName") { -
trunk/WebKitTools/Scripts/webkitdirs.pm
r35589 r36244 287 287 return; 288 288 } 289 if ($opt =~ /^--profil(e|ing)$/i) { 290 splice(@ARGV, $i, 1); 291 $passedConfiguration = "Profiling"; 292 $passedConfiguration .= "_Cairo" if ($isWinCairo && isCygwin()); 293 return; 294 } 289 295 } 290 296 $passedConfiguration = undef;
Note: See TracChangeset
for help on using the changeset viewer.