1 2009-06-15 Gavin Barraclough <barraclough (a] apple.com> 2 3 Rubber Stamped by Sam Weinig. 4 5 Rename PatchBuffer to LinkBuffer. Previously our terminology has been a little 6 mixed up, but we have decided to fix on refering to the process that takes place 7 at the end of code generation as 'linking', and on any modifications that take 8 place later (and once the code has potentially already been executed) as 'patching'. 9 10 However, the term 'PatchBuffer' is already in use, and needs to be repurposed. 11 12 To try to minimize confusion, we're going to switch the terminology over in stages, 13 so for now we'll refer to later modifications as 'repatching'. This means that the 14 new 'PatchBuffer' has been introduced with the name 'RepatchBuffer' instead. 15 16 This patch renames the old 'PatchBuffer' to 'LinkBuffer'. We'll leave ToT in this 17 state for a week or so to try to avoid to much overlap of the meaning of the term 18 'PatchBuffer', then will come back and rename 'RepatchBuffer'. 19 20 * assembler/ARMv7Assembler.h: 21 * assembler/AbstractMacroAssembler.h: 22 (JSC::AbstractMacroAssembler::LinkBuffer::LinkBuffer): 23 (JSC::AbstractMacroAssembler::LinkBuffer::~LinkBuffer): 24 * jit/JIT.cpp: 25 (JSC::JIT::privateCompile): 26 * jit/JITPropertyAccess.cpp: 27 (JSC::JIT::privateCompilePutByIdTransition): 28 (JSC::JIT::privateCompilePatchGetArrayLength): 29 (JSC::JIT::privateCompileGetByIdProto): 30 (JSC::JIT::privateCompileGetByIdSelfList): 31 (JSC::JIT::privateCompileGetByIdProtoList): 32 (JSC::JIT::privateCompileGetByIdChainList): 33 (JSC::JIT::privateCompileGetByIdChain): 34 * yarr/RegexJIT.cpp: 35 (JSC::Yarr::RegexGenerator::compile): 36 37 2009-06-15 Gavin Barraclough <barraclough (a] apple.com> 38 39 Reviewed by Sam Weinig. 40 41 Having moved most of their functionality into the RepatchBuffer class, 42 we can simplify the CodeLocation* classes. 43 44 The CodeLocation* classes are currently a tangle of templatey and friendly 45 badness, burried in the middle of AbstractMacroAssembler. Having moved 46 the ability to repatch out into RepatchBufer they are now do-nothing wrappers 47 on CodePtr (MacroAssemblerCodePtr), that only exist to provide type-safety. 48 49 Simplify the code, and move them off into their own header. 50 51 * JavaScriptCore.xcodeproj/project.pbxproj: 52 * assembler/AbstractMacroAssembler.h: 53 (JSC::AbstractMacroAssembler::PatchBuffer::patch): 54 * assembler/CodeLocation.h: Copied from assembler/AbstractMacroAssembler.h. 55 (JSC::CodeLocationCommon::CodeLocationCommon): 56 (JSC::CodeLocationInstruction::CodeLocationInstruction): 57 (JSC::CodeLocationLabel::CodeLocationLabel): 58 (JSC::CodeLocationJump::CodeLocationJump): 59 (JSC::CodeLocationCall::CodeLocationCall): 60 (JSC::CodeLocationNearCall::CodeLocationNearCall): 61 (JSC::CodeLocationDataLabel32::CodeLocationDataLabel32): 62 (JSC::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): 63 (JSC::CodeLocationCommon::instructionAtOffset): 64 (JSC::CodeLocationCommon::labelAtOffset): 65 (JSC::CodeLocationCommon::jumpAtOffset): 66 (JSC::CodeLocationCommon::callAtOffset): 67 (JSC::CodeLocationCommon::nearCallAtOffset): 68 (JSC::CodeLocationCommon::dataLabelPtrAtOffset): 69 (JSC::CodeLocationCommon::dataLabel32AtOffset): 70 * assembler/MacroAssemblerCodeRef.h: 71 (JSC::MacroAssemblerCodePtr::operator!): 72 * bytecode/CodeBlock.h: 73 (JSC::getStructureStubInfoReturnLocation): 74 (JSC::getCallLinkInfoReturnLocation): 75 (JSC::getMethodCallLinkInfoReturnLocation): 76 * bytecode/Instruction.h: 77 * bytecode/JumpTable.h: 78 (JSC::StringJumpTable::ctiForValue): 79 (JSC::SimpleJumpTable::ctiForValue): 80 * bytecode/StructureStubInfo.h: 81 * bytecompiler/BytecodeGenerator.cpp: 82 (JSC::BytecodeGenerator::emitCatch): 83 * jit/JIT.cpp: 84 (JSC::JIT::privateCompile): 85 * jit/JITStubs.cpp: 86 (JSC::JITStubs::DEFINE_STUB_FUNCTION): 87 (JSC::JITStubs::getPolymorphicAccessStructureListSlot): 88 89 2009-06-15 Gavin Barraclough <barraclough (a] apple.com> 90 91 Reviewed by Sam Weinig. 92 93 Having introduced the RepatchBuffer, ProcessorReturnAddress is now a do-nothing 94 wrapper around ReturnAddressPtr. Remove it. In tugging on this piece of string 95 it made sense to roll out the use of ReturnAddressPtr a little further into 96 JITStubs (which had always been the intention). 97 98 No performance impact. 99 100 * assembler/AbstractMacroAssembler.h: 101 (JSC::AbstractMacroAssembler::RepatchBuffer::relinkCallerToTrampoline): 102 (JSC::AbstractMacroAssembler::RepatchBuffer::relinkCallerToFunction): 103 (JSC::AbstractMacroAssembler::RepatchBuffer::relinkNearCallerToTrampoline): 104 * assembler/MacroAssemblerCodeRef.h: 105 (JSC::ReturnAddressPtr::ReturnAddressPtr): 106 * bytecode/CodeBlock.h: 107 (JSC::CodeBlock::getStubInfo): 108 (JSC::CodeBlock::getCallLinkInfo): 109 (JSC::CodeBlock::getMethodCallLinkInfo): 110 (JSC::CodeBlock::getBytecodeIndex): 111 * interpreter/Interpreter.cpp: 112 (JSC::bytecodeOffsetForPC): 113 * jit/JIT.cpp: 114 (JSC::ctiPatchNearCallByReturnAddress): 115 (JSC::ctiPatchCallByReturnAddress): 116 * jit/JIT.h: 117 (JSC::JIT::compileGetByIdProto): 118 (JSC::JIT::compileGetByIdChain): 119 (JSC::JIT::compilePutByIdTransition): 120 (JSC::JIT::compilePatchGetArrayLength): 121 * jit/JITPropertyAccess.cpp: 122 (JSC::JIT::privateCompilePutByIdTransition): 123 (JSC::JIT::patchGetByIdSelf): 124 (JSC::JIT::patchPutByIdReplace): 125 (JSC::JIT::privateCompilePatchGetArrayLength): 126 (JSC::JIT::privateCompileGetByIdProto): 127 (JSC::JIT::privateCompileGetByIdChain): 128 * jit/JITStubs.cpp: 129 (JSC::JITThunks::tryCachePutByID): 130 (JSC::JITThunks::tryCacheGetByID): 131 (JSC::StackHack::StackHack): 132 (JSC::returnToThrowTrampoline): 133 (JSC::throwStackOverflowError): 134 (JSC::JITStubs::DEFINE_STUB_FUNCTION): 135 * jit/JITStubs.h: 136 (JSC::): 137 (JSC::JITStackFrame::returnAddressSlot): 138 * runtime/JSGlobalData.h: 139 140 2009-06-15 Simon Fraser <simon.fraser (a] apple.com> 141 142 Reviewed by Mark Rowe. 143 144 <rdar://problem/6974857> 145 146 Define ENABLE_3D_RENDERING when building on 10.6, and move ENABLE_3D_RENDERING 147 switch from config.h to wtf/Platform.h. 148 149 * Configurations/FeatureDefines.xcconfig: 150 * wtf/Platform.h: 151 152 2009-06-15 Gavin Barraclough <barraclough (a] apple.com> 153 154 Reviewed by Oliver Hunt. 155 156 Move repatching methods into a set of methods on a class. This will allow us to 157 coallesce memory reprotection calls. Really, we want this class to be called 158 PatchBuffer, we want the class PatchBuffer to be called LinkBuffer, we want both 159 to be memblers of MacroAssembler rather then AbstractMacroAssembler, we don't 160 want the CodeLocationFoo types anymore (they are now only really there to provide 161 type safety, and that is completely undermined by the way we use offsets). Then 162 the link & patch buffers should delegate the actual patching calls to the 163 architecture-specific layer of the MacroAssembler. Landing all these changes as a 164 sequence of patches. 165 166 No performance impact. 167 168 * assembler/AbstractMacroAssembler.h: 169 (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall): 170 (JSC::AbstractMacroAssembler::CodeLocationNearCall::CodeLocationNearCall): 171 (JSC::AbstractMacroAssembler::CodeLocationNearCall::calleeReturnAddressValue): 172 (JSC::AbstractMacroAssembler::RepatchBuffer::RepatchBuffer): 173 (JSC::AbstractMacroAssembler::RepatchBuffer::relink): 174 (JSC::AbstractMacroAssembler::RepatchBuffer::repatch): 175 (JSC::AbstractMacroAssembler::RepatchBuffer::relinkCallerToTrampoline): 176 (JSC::AbstractMacroAssembler::RepatchBuffer::relinkCallerToFunction): 177 (JSC::AbstractMacroAssembler::RepatchBuffer::relinkNearCallerToTrampoline): 178 (JSC::AbstractMacroAssembler::RepatchBuffer::repatchLoadPtrToLEA): 179 * jit/JIT.cpp: 180 (JSC::ctiPatchNearCallByReturnAddress): 181 (JSC::ctiPatchCallByReturnAddress): 182 (JSC::JIT::unlinkCall): 183 (JSC::JIT::linkCall): 184 * jit/JITPropertyAccess.cpp: 185 (JSC::JIT::privateCompilePutByIdTransition): 186 (JSC::JIT::patchGetByIdSelf): 187 (JSC::JIT::patchMethodCallProto): 188 (JSC::JIT::patchPutByIdReplace): 189 (JSC::JIT::privateCompilePatchGetArrayLength): 190 (JSC::JIT::privateCompileGetByIdProto): 191 (JSC::JIT::privateCompileGetByIdSelfList): 192 (JSC::JIT::privateCompileGetByIdProtoList): 193 (JSC::JIT::privateCompileGetByIdChainList): 194 (JSC::JIT::privateCompileGetByIdChain): 195 196 2009-06-15 Gavin Barraclough <barraclough (a] apple.com> 197 198 Reviewed by Geoff Hunt & Oliver Garen. 199 200 We are currently generating two copies of the slow path for op_call for no reason. Stop that. 201 202 Originally op_call used two slow paths since the first set up the pointer to the CallLinkInfo 203 for use when linking. However this is now looked up using the return address (as we do for 204 property accesses) so the two paths are now identical. 205 206 No performance impact, reduces memory footprint. 207 208 * bytecode/CodeBlock.h: 209 * jit/JIT.cpp: 210 (JSC::JIT::privateCompile): 211 (JSC::JIT::linkCall): 212 * jit/JIT.h: 213 * jit/JITCall.cpp: 214 (JSC::JIT::compileOpCallSlowCase): 215 * jit/JITStubs.cpp: 216 (JSC::JITStubs::DEFINE_STUB_FUNCTION): 217 218 2009-06-12 Dave Hyatt <hyatt (a] apple.com> 219 220 Reviewed by Anders Carlsson. 221 222 https://bugs.webkit.org/show_bug.cgi?id=26373 223 224 Add a new class to Threading in wtf called ReadWriteLock that handles single writer/multiple reader locking. 225 Provide a pthreads-only implementation of the lock for now, as this class is only going to be used 226 on Snow Leopard at first. 227 228 * wtf/Threading.h: 229 (WTF::ReadWriteLock::impl): 230 * wtf/ThreadingPthreads.cpp: 231 (WTF::ReadWriteLock::ReadWriteLock): 232 (WTF::ReadWriteLock::~ReadWriteLock): 233 (WTF::ReadWriteLock::readLock): 234 (WTF::ReadWriteLock::tryReadLock): 235 (WTF::ReadWriteLock::writeLock): 236 (WTF::ReadWriteLock::tryWriteLock): 237 (WTF::ReadWriteLock::unlock): 238 239 2009-06-12 Oliver Hunt <oliver (a] apple.com> 240 241 Reviewed by Geoff Garen. 242 243 Make LiteralParser non-recursive 244 245 Convert LiteralParser from using a simple recursive descent parser 246 to a hand rolled PDA. Relatively simple conversion, but required 247 modifications to MarkedArgumentBuffer to make it more suitable as 248 a generic marked vector. I'll refactor and rename MarkedArgumentBuffer 249 in future as there are many other cases where it will be useful to 250 have such a class. 251 252 * runtime/ArgList.h: 253 (JSC::MarkedArgumentBuffer::MarkedArgumentBuffer): 254 (JSC::MarkedArgumentBuffer::append): 255 (JSC::MarkedArgumentBuffer::removeLast): 256 (JSC::MarkedArgumentBuffer::last): 257 * runtime/LiteralParser.cpp: 258 (JSC::LiteralParser::parse): 259 * runtime/LiteralParser.h: 260 (JSC::LiteralParser::LiteralParser): 261 (JSC::LiteralParser::tryLiteralParse): 262 (JSC::LiteralParser::): 263 264 2009-06-12 David Levin <levin (a] chromium.org> 265 266 Reviewed by NOBODY (build fix for windows). 267 268 Adjust the exports for JSC on Windows like what was done for OSX in 269 the previous commit. 270 271 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 272 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 273 274 2009-06-12 David Levin <levin (a] chromium.org> 275 276 Reviewed by Darin Adler. 277 278 UString shouldn't create sharedBuffer for SmallStrings. 279 https://bugs.webkit.org/show_bug.cgi?id=26360 280 281 The methods changed are not used by JSC, so there is no JS perf impact. However, 282 there is a potential DOM perf impact, so I re-ran several of the tests that 283 I ran previously and ensured that the perf stay the same which caused me to 284 adjust the minLengthToShare. 285 286 * JavaScriptCore.exp: 287 * runtime/UString.cpp: 288 (JSC::UString::Rep::sharedBuffer): 289 Determines if the buffer being shared is big enough before doing so. 290 Previously, BaseString::sharedBuffer was called but it would only know 291 the length of the base string (BaseString::len) which may not be the same 292 as the string being shared (Rep::len). 293 (JSC::UString::BaseString::sharedBuffer): 294 This is now only be used by Rep::sharedBuffer. which does the length check. 295 * runtime/UString.h: 296 297 2009-06-12 Dimitri Glazkov <dglazkov (a] chromium.org> 298 299 Reviewed by Eric Seidel. 300 301 https://bugs.webkit.org/show_bug.cgi?id=26191 302 Remove xmath include in MathExtras.h, because it is not needed and also 303 breaks VS2008 builds with TR1 turned on. 304 305 * wtf/MathExtras.h: Removed xmath include. 306 307 2009-06-12 Peter Kasting <pkasting (a] google.com> 308 309 Reviewed by Eric Seidel. 310 311 * ChangeLog-2007-10-14: Change pseudonym "Don Gibson" to me (was used while Google Chrome was not public); update my email address. 312 313 2009-06-12 Kevin Ollivier <kevino (a] theolliviers.com> 314 315 wx build fix. Adding JSONObject.cpp to the build. 316 317 * JavaScriptCoreSources.bkl: 318 319 2009-06-12 Laszlo Gombos <laszlo.1.gombos (a] nokia.com> 320 321 Reviewed by Jan Michael Alonzo. 322 323 [Qt] Fix build break 324 https://bugs.webkit.org/show_bug.cgi?id=26340 325 326 * JavaScriptCore.pri: Add JSONObject.cpp to LUT files. 327 328 2009-06-11 Oliver Hunt <oliver (a] apple.com> 329 330 Reviewed by NOBODY (build fix). 331 332 Lower stringify recursion limit to deal with small windows stack. 333 334 * JavaScriptCore.xcodeproj/project.pbxproj: 335 * runtime/JSONObject.cpp: 336 (JSC::Stringifier::): 337 338 2009-06-11 Laszlo Gombos <laszlo.1.gombos (a] nokia.com> 339 340 Reviewed by Holger Freyther. 341 342 Fix compilation warnings 343 <https://bugs.webkit.org/show_bug.cgi?id=26015> 344 345 * wtf/ThreadingNone.cpp: 346 (WTF::ThreadCondition::wait): Fix compilation warning. 347 (WTF::ThreadCondition::timedWait): Ditto. 348 349 2009-06-10 Brent Fulgham <bfulgham (a] webkit.org> 350 351 Build fix for Windows target. 352 353 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 354 Correct missing </File> tag after @r44550 that prevents the 355 project from being loaded in the Visual Studio IDE. 356 357 2009-06-09 Gavin Barraclough <barraclough (a] apple.com> 358 359 Rubber Stamped by Mark Rowe. 360 361 Tidy up a couple of comments. 362 363 * assembler/ARMv7Assembler.h: 364 Fix date in copyright, neaten up a couple of comments. 365 * assembler/MacroAssemblerARMv7.h: 366 Fix date in copyright. 367 368 2009-06-07 Oliver Hunt <oliver (a] apple.com> 369 370 Reviewed by Sam Weinig. 371 372 Bug 26249: Support JSON.stringify 373 <https://bugs.webkit.org/show_bug.cgi?id=26249> 374 375 Implement JSON.stringify. This patch handles all the semantics of the ES5 376 JSON.stringify function, including replacer functions and arrays and both 377 string and numeric gap arguments. 378 379 Currently uses a clamped recursive algorithm basically identical to the spec 380 description but with a few minor tweaks for performance and corrected semantics 381 discussed in the es-discuss mailing list. 382 383 * DerivedSources.make: 384 * GNUmakefile.am: 385 * JavaScriptCore.pri: 386 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 387 * JavaScriptCore.xcodeproj/project.pbxproj: 388 * interpreter/CallFrame.h: 389 (JSC::ExecState::jsonTable): 390 * runtime/CommonIdentifiers.h: 391 add toJSON to the list of common identifiers 392 393 * runtime/JSGlobalData.cpp: 394 (JSC::JSGlobalData::JSGlobalData): 395 (JSC::JSGlobalData::~JSGlobalData): 396 * runtime/JSGlobalData.h: 397 * runtime/JSGlobalObject.cpp: 398 (JSC::JSGlobalObject::reset): 399 Add support for the JSON object lookup table 400 401 * runtime/JSONObject.cpp: Added. 402 (JSC::): 403 (JSC::JSONObject::getOwnPropertySlot): 404 (JSC::Stringifier::): 405 (JSC::Stringifier::Stringifier): 406 (JSC::Stringifier::stringify): 407 (JSC::Stringifier::appendString): 408 409 (JSC::Stringifier::StringKeyGenerator::StringKeyGenerator): 410 (JSC::Stringifier::StringKeyGenerator::getKey): 411 (JSC::Stringifier::IntKeyGenerator::IntKeyGenerator): 412 (JSC::Stringifier::IntKeyGenerator::getKey): 413 These KeyGenerator classes are used to abstract away the lazy evaluation of keys for 414 toJSON and replacer functions. 415 416 (JSC::Stringifier::toJSONValue): 417 (JSC::Stringifier::stringifyArray): 418 (JSC::Stringifier::stringifyObject): 419 (JSC::JSONProtoFuncStringify): 420 * runtime/JSONObject.h: Added. 421 (JSC::JSONObject:::JSObject): 422 (JSC::JSONObject::classInfo): 423 (JSC::JSONObject::createStructure): 424 425 2009-06-09 Gavin Barraclough <barraclough (a] apple.com> 426 427 Reviewed by Geoff Garen. 428 429 Enable JIT_OPTIMIZE_CALL & JIT_OPTIMIZE_METHOD_CALLS on ARMv7 platforms. 430 431 These optimizations function correctly with no further changes. 432 433 * wtf/Platform.h: 434 Change to enable JIT_OPTIMIZE_CALL & JIT_OPTIMIZE_METHOD_CALLS. 435 436 2009-06-09 Gavin Barraclough <barraclough (a] apple.com> 437 438 Not Reviewed, build fix. 439 440 * assembler/MacroAssemblerARMv7.h: 441 442 2009-06-09 Gavin Barraclough <barraclough (a] apple.com> 443 444 Reviewed by Geoff Garen. 445 446 Enable JIT_OPTIMIZE_ARITHMETIC on ARMv7 platforms. 447 448 Temporarily split support for 'branchTruncateDoubleToInt32' onto its own switch 449 ('supportsFloatingPointTruncate'). See comment in MacroAssemblerARMv7, we need 450 to work out wherther we are going to be able to support the current interface on 451 all platforms, or whether this should be refactored. 452 453 * assembler/MacroAssemblerARMv7.h: 454 (JSC::MacroAssemblerARMv7::supportsFloatingPoint): 455 Add implementation of supportsFloatingPointTruncate (returns true). 456 (JSC::MacroAssemblerARMv7::supportsFloatingPointTruncate): 457 Add implementation of supportsFloatingPointTruncate (returns false). 458 (JSC::MacroAssemblerARMv7::loadDouble): 459 (JSC::MacroAssemblerARMv7::storeDouble): 460 (JSC::MacroAssemblerARMv7::addDouble): 461 (JSC::MacroAssemblerARMv7::subDouble): 462 (JSC::MacroAssemblerARMv7::mulDouble): 463 (JSC::MacroAssemblerARMv7::convertInt32ToDouble): 464 (JSC::MacroAssemblerARMv7::branchDouble): 465 Implement FP code genertion operations. 466 * assembler/MacroAssemblerX86.h: 467 (JSC::MacroAssemblerX86::supportsFloatingPointTruncate): 468 Add implementation of supportsFloatingPointTruncate (returns true). 469 * assembler/MacroAssemblerX86_64.h: 470 (JSC::MacroAssemblerX86_64::supportsFloatingPointTruncate): 471 Add implementation of supportsFloatingPointTruncate (returns true). 472 * jit/JITArithmetic.cpp: 473 (JSC::JIT::emit_op_rshift): 474 Changed to call supportsFloatingPointTruncate(). 475 (JSC::JIT::emitSlow_op_rshift): 476 Changed to call supportsFloatingPointTruncate(). 477 * wtf/Platform.h: 478 Change to enable JIT_OPTIMIZE_ARITHMETIC. 479 480 2009-06-09 Gavin Barraclough <barraclough (a] apple.com> 481 482 Reviewed by Mark Rowe & Geoff Garen. 483 484 Enable JIT_OPTIMIZE_PROPERTY_ACCESS on ARMv7 platforms. 485 486 Firm up interface for planting load intructions that will be repatched by 487 repatchLoadPtrToLEA(). This method should now no longer be applied to just 488 any loadPtr instruction. 489 490 * assembler/MacroAssemblerARMv7.h: 491 (JSC::MacroAssemblerARMv7::loadPtrWithPatchToLEA): 492 Implement loadPtrWithPatchToLEA interface (plants a load with a fixed width address). 493 (JSC::MacroAssemblerARMv7::move): 494 (JSC::MacroAssemblerARMv7::nearCall): 495 (JSC::MacroAssemblerARMv7::call): 496 (JSC::MacroAssemblerARMv7::moveWithPatch): 497 (JSC::MacroAssemblerARMv7::tailRecursiveCall): 498 Switch to use common method 'moveFixedWidthEncoding()' to perform fixed width (often patchable) loads. 499 (JSC::MacroAssemblerARMv7::moveFixedWidthEncoding): 500 Move an immediate to a register, always plants movT3/movt instruction pair. 501 * assembler/MacroAssemblerX86.h: 502 (JSC::MacroAssemblerX86::loadPtrWithPatchToLEA): 503 Implement loadPtrWithPatchToLEA interface (just a regular 32-bit load on x86). 504 * assembler/MacroAssemblerX86_64.h: 505 (JSC::MacroAssemblerX86_64::loadPtrWithPatchToLEA): 506 Implement loadPtrWithPatchToLEA interface (just a regular 64-bit load on x86_64). 507 * jit/JITPropertyAccess.cpp: 508 (JSC::JIT::compileGetByIdHotPath): 509 (JSC::JIT::emit_op_put_by_id): 510 * wtf/Platform.h: 511 Change to enable JIT_OPTIMIZE_PROPERTY_ACCESS. 512 513 2009-06-08 Gavin Barraclough <barraclough (a] apple.com> 514 515 Reviewed by Geoff Garen. 516 517 Enable JS language JIT for ARM thumb2 platforms. Add ARMv7 specific 518 asm & constants, add appropriate configuration switches to Platform.h. 519 520 Landing this disabled until jump linking is completed (see YARR jit patch). 521 522 * assembler/MacroAssemblerARMv7.h: 523 (JSC::MacroAssemblerARMv7::load32): 524 Fix: should load pointer with ImmPtr not Imm32. 525 (JSC::MacroAssemblerARMv7::store32): 526 Fix: should load pointer with ImmPtr not Imm32. 527 (JSC::MacroAssemblerARMv7::move): 528 Fix: When moving an Imm32 that is actually a pointer, should call movT3() 529 not mov(), to ensure code generation is repeatable (for exception handling). 530 * jit/JIT.cpp: 531 (JSC::JIT::privateCompileCTIMachineTrampolines): 532 Disable JIT_OPTIMIZE_NATIVE_CALL specific code generation if the optimization is not enabled. 533 * jit/JIT.h: 534 Add ARMv7 specific values of constants & register names. 535 * jit/JITInlineMethods.h: 536 (JSC::JIT::preverveReturnAddressAfterCall): 537 (JSC::JIT::restoreReturnAddressBeforeReturn): 538 (JSC::JIT::restoreArgumentReferenceForTrampoline): 539 Implement for ARMv7 (move value to/from lr). 540 * jit/JITStubs.cpp: 541 Add JIT entry/thow trampolines, add macro to add thunk wrapper around stub routines. 542 * jit/JITStubs.h: 543 (JSC::JITStackFrame::returnAddressSlot): 544 Add ARMv7 stack frame object. 545 * wtf/Platform.h: 546 Add changes necessary to allow JIT to build on this platform, disabled. 547 548 2009-06-08 Mark Rowe <mrowe (a] apple.com> 549 550 Speculative GTK build fix. 551 552 * wtf/DateMath.cpp: 553 554 2009-06-08 Gavin Barraclough <barraclough (a] apple.com> 555 556 Reviewed by Mark Rowe. 557 558 Previous patch caused a regression. 559 560 Restructure so no new (empty, inline) function calls are added on x86. 561 562 * jit/ExecutableAllocator.h: 563 (JSC::ExecutableAllocator::makeWritable): 564 (JSC::ExecutableAllocator::makeExecutable): 565 (JSC::ExecutableAllocator::reprotectRegion): 566 (JSC::ExecutableAllocator::cacheFlush): 567 568 2009-06-08 Dimitri Glazkov <dglazkov (a] chromium.org> 569 570 Unreviewed, GTK build fix (thanks, bdash). 571 572 * GNUmakefile.am: Moved DateMath with all other wtf kin. 573 574 2009-06-08 Gavin Barraclough <barraclough (a] apple.com> 575 576 Reviewed by Geoff Garen. 577 578 Add (incomplete) support to YARR for running with the jit enabled 579 on Arm thumb2 platforms. Adds new Assembler/MacroAssembler classes, 580 along with cache flushing support, tweaks to MacroAssemblerCodePtr 581 to support decorated thumb code pointers, and new enter/exit code 582 to YARR jit for the platform. 583 584 Support for this platform is still under development - the assembler 585 currrently only supports planting and linking jumps with a 16Mb range. 586 As such, initially commiting in a disabled state. 587 588 * JavaScriptCore.xcodeproj/project.pbxproj: 589 Add new assembler files. 590 * assembler/ARMv7Assembler.h: Added. 591 Add new Assembler. 592 * assembler/AbstractMacroAssembler.h: 593 Tweaks to ensure sizes of pointer values planted in JIT code do not change. 594 * assembler/MacroAssembler.h: 595 On ARMv7 platforms use MacroAssemblerARMv7. 596 * assembler/MacroAssemblerARMv7.h: Added. 597 Add new MacroAssembler. 598 * assembler/MacroAssemblerCodeRef.h: 599 (JSC::FunctionPtr::FunctionPtr): 600 Add better ASSERT. 601 (JSC::ReturnAddressPtr::ReturnAddressPtr): 602 Add better ASSERT. 603 (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr): 604 On ARMv7, MacroAssemblerCodePtr's mush be 'decorated' with a low bit set, 605 to indicate to the processor that the code is thumb code, not traditional 606 32-bit ARM. 607 (JSC::MacroAssemblerCodePtr::dataLocation): 608 On ARMv7, decoration must be removed. 609 * jit/ExecutableAllocator.h: 610 (JSC::ExecutableAllocator::makeWritable): 611 Reformatted, no change. 612 (JSC::ExecutableAllocator::makeExecutable): 613 When marking code executable also cache flush it, where necessary. 614 (JSC::ExecutableAllocator::MakeWritable::MakeWritable): 615 Only use the null implementation of this class if both !ASSEMBLER_WX_EXCLUSIVE 616 and running on x86(_64) - on other platforms we may also need ensure that 617 makeExecutable is called at the end to flush caches. 618 (JSC::ExecutableAllocator::reprotectRegion): 619 Reformatted, no change. 620 (JSC::ExecutableAllocator::cacheFlush): 621 Cache flush a region of memory, or platforms where this is necessary. 622 * wtf/Platform.h: 623 Add changes necessary to allow YARR jit to build on this platform, disabled. 624 * yarr/RegexJIT.cpp: 625 (JSC::Yarr::RegexGenerator::generateEnter): 626 (JSC::Yarr::RegexGenerator::generateReturn): 627 Add support to these methods for ARMv7. 628 629 2009-06-08 Dimitri Glazkov <dglazkov (a] chromium.org> 630 631 Unreviewed, fix my previous fix. 632 633 * runtime/DateInstance.cpp: 634 (JSC::DateInstance::msToGregorianDateTime): Use WTF namespace qualifier to 635 disambiguate func signatures. 636 637 2009-06-08 Mark Rowe <mrowe (a] apple.com> 638 639 Attempt to fix the Tiger build. 640 641 * wtf/Platform.h: Only test the value of the macro once we know it is defined. 642 643 2009-06-08 Dimitri Glazkov <dglazkov (a] chromium.org> 644 645 Unreviewed, another Windows build fix. 646 647 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 648 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 649 650 2009-06-08 Dimitri Glazkov <dglazkov (a] chromium.org> 651 652 Unreviewed, projectile-fixing Windows build. 653 654 * runtime/DateConversion.cpp: Added StringExtras include. 655 * wtf/DateMath.cpp: Replaced math with algorithm include (looking for std::min def for Windows). 656 657 2009-06-08 Dimitri Glazkov <dglazkov (a] chromium.org> 658 659 Unreviewed, Windows build fix. 660 661 * runtime/DateConstructor.cpp: Changed to use WTF namespace. 662 * runtime/DateConversion.cpp: Added UString include. 663 * runtime/DateInstance.cpp: Changed to use WTF namespace. 664 * wtf/DateMath.cpp: Added math include. 665 666 2009-06-08 Dimitri Glazkov <dglazkov (a] chromium.org> 667 668 Reviewed by Eric Seidel. 669 670 https://bugs.webkit.org/show_bug.cgi?id=26238 671 Move most of runtime/DateMath functions to wtf/DateMath, and split off conversion-related 672 helpers to DateConversion. 673 674 * AllInOneFile.cpp: Changed DateMath->DateConversion. 675 * GNUmakefile.am: Ditto and added DateMath. 676 * JavaScriptCore.exp: Ditto. 677 * JavaScriptCore.pri: Ditto. 678 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto. 679 * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added DateMath. 680 * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. 681 * JavaScriptCoreSources.bkl: Ditto. 682 * pcre/pcre_exec.cpp: Changed to use DateMath. 683 * profiler/ProfileNode.cpp: 684 (JSC::getCount): Changed to use DateConversion. 685 * runtime/DateConstructor.cpp: Ditto. 686 * runtime/DateConversion.cpp: Copied from JavaScriptCore/runtime/DateMath.cpp. 687 (JSC::parseDate): Refactored to use null-terminated characters as input. 688 * runtime/DateConversion.h: Copied from JavaScriptCore/runtime/DateMath.h. 689 * runtime/DateInstance.cpp: Changed to use wtf/DateMath. 690 * runtime/DateInstance.h: Ditto. 691 * runtime/DateMath.cpp: Removed. 692 * runtime/DateMath.h: Removed. 693 * runtime/DatePrototype.cpp: Ditto. 694 * runtime/InitializeThreading.cpp: Ditto. 695 * wtf/DateMath.cpp: Copied from JavaScriptCore/runtime/DateMath.cpp. 696 * wtf/DateMath.h: Copied from JavaScriptCore/runtime/DateMath.h. 697 698 2009-06-08 Steve Falkenburg <sfalken (a] apple.com> 699 700 Windows build fix. 701 702 * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: 703 704 2009-06-07 David Kilzer <ddkilzer (a] apple.com> 705 706 Make JavaScriptCore compile for iPhone and iPhone Simulator 707 708 Reviewed by Gavin Barraclough. 709 710 * Configurations/Base.xcconfig: Split GCC_ENABLE_OBJC_GC on 711 $(REAL_PLATFORM_NAME). Added $(ARCHS_UNIVERSAL_IPHONE_OS) to 712 VALID_ARCHS. Added REAL_PLATFORM_NAME_iphoneos, 713 REAL_PLATFORM_NAME_iphonesimulator, HAVE_DTRACE_iphoneos and 714 HAVE_DTRACE_iphonesimulator variables. 715 * Configurations/DebugRelase.xcconfig: Split ARCHS definition on 716 $(REAL_PLATFORM_NAME). 717 * Configurations/JavaScriptCore.xcconfig: Added 718 EXPORTED_SYMBOLS_FILE_armv6 and EXPORTED_SYMBOLS_FILE_armv7 719 variables. Split OTHER_LDFLAGS into OTHER_LDFLAGS_BASE and 720 OTHER_LDFLAGS_$(REAL_PLATFORM_NAME) since CoreServices.framework 721 is only linked to on Mac OS X. 722 * JavaScriptCore.xcodeproj/project.pbxproj: Removed references 723 to CoreServices.framework since it's linked using OTHER_LDFLAGS 724 in JavaScriptCore.xcconfig. 725 * profiler/ProfilerServer.mm: Added #import for iPhone 726 Simulator. 727 (-[ProfilerServer init]): Conditionalize use of 728 NSDistributedNotificationCenter to non-iPhone or iPhone 729 Simulator. 730 * wtf/FastMalloc.cpp: 731 (WTF::TCMallocStats::): Build fix for iPhone and iPhone 732 Simulator. 733 * wtf/Platform.h: Defined PLATFORM(IPHONE) and 734 PLATFORM(IPHONE_SIMULATOR). 735 * wtf/ThreadingPthreads.cpp: 736 (WTF::setThreadNameInternal): Build fix for iPhone and iPhone 737 Simulator. 738 739 2009-06-08 Tor Arne Vestb <tor.arne.vestbo (a] nokia.com> 740 741 Reviewed by Simon Hausmann. 742 743 [Qt] Use $QMAKE_PATH_SEP instead of hardcoded / to fix Windows build 744 745 * JavaScriptCore.pri: 746 * JavaScriptCore.pro: 747 * jsc.pro: 748 749 2009-06-07 Gavin Barraclough <barraclough (a] apple.com> 750 751 RS by Sam Weinig. 752 753 Remove bonus bogus \n from last commit. 754 755 * jit/JITStubs.cpp: 756 (JSC::): 757 758 2009-06-07 Gavin Barraclough <barraclough (a] apple.com> 759 760 Reviewed by Sam Weinig. 761 762 Change the implementation of op_throw so the stub function always modifies its 763 return address - if it doesn't find a 'catch' it will switch to a trampoline 764 to force a return from JIT execution. This saves memory, by avoiding the need 765 for a unique return for every op_throw. 766 767 * jit/JITOpcodes.cpp: 768 (JSC::JIT::emit_op_throw): 769 JITStubs::cti_op_throw now always changes its return address, 770 remove return code generated after the stub call (this is now 771 handled by ctiOpThrowNotCaught). 772 * jit/JITStubs.cpp: 773 (JSC::): 774 Add ctiOpThrowNotCaught definitions. 775 (JSC::JITStubs::DEFINE_STUB_FUNCTION): 776 Change cti_op_throw to always change its return address. 777 * jit/JITStubs.h: 778 Add ctiOpThrowNotCaught declaration. 779 780 2009-06-05 Gavin Barraclough <barraclough (a] apple.com> 781 782 Rudder stamped by Sam Weinig. 783 784 Add missing ASSERT. 785 786 * assembler/X86Assembler.h: 787 (JSC::X86Assembler::getRelocatedAddress): 788 789 2009-06-05 Gavin Barraclough <barraclough (a] apple.com> 790 791 Reviewed by Sam Weinig. 792 793 Switch storePtrWithPatch to take the initial immediate value as an argument. 794 795 * assembler/MacroAssemblerX86.h: 796 (JSC::MacroAssemblerX86::storePtrWithPatch): 797 * assembler/MacroAssemblerX86_64.h: 798 (JSC::MacroAssemblerX86_64::storePtrWithPatch): 799 * jit/JITOpcodes.cpp: 800 (JSC::JIT::emit_op_jsr): 801 802 2009-06-05 Gavin Barraclough <barraclough (a] apple.com> 803 804 Reviewed by Sam Weinig. 805 806 Remove patchLength..tByIdExternalLoadPrefix magic numbers from JIT.h. 807 808 These aren't really suitable values to be tracking within common code 809 of the JIT, since they are not (and realistically cannot) be checked 810 by ASSERTs, as the other repatch offsets are. Move this functionality 811 (skipping the REX prefix when patching load instructions to LEAs on 812 x86-64) into the X86Assembler. 813 814 * assembler/AbstractMacroAssembler.h: 815 (JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadPtrToLEA): 816 * assembler/X86Assembler.h: 817 (JSC::X86Assembler::repatchLoadPtrToLEA): 818 * jit/JIT.h: 819 * jit/JITPropertyAccess.cpp: 820 (JSC::JIT::patchGetByIdSelf): 821 (JSC::JIT::patchPutByIdReplace): 822 823 2009-06-05 Shinichiro Hamaji <hamaji (a] chromium.org> 824 825 Bug 26160: Compile fails in MacOSX when GNU fileutils are installed 826 827 <https://bugs.webkit.org/show_bug.cgi?id=26160> 828 829 Reviewed by Alexey Proskuryakov. 830 831 Use /bin/ln instead of ln for cases where this command is used with -h option. 832 As this option is not supported by GNU fileutils, this change helps users 833 who have GNU fileutils in their PATH. 834 835 * JavaScriptCore.xcodeproj/project.pbxproj: 836 837 2009-06-05 Gavin Barraclough <barraclough (a] apple.com> 838 839 Reviewed by Oliver Hunt. 840 841 Remove DoubleNotEqual floating point comparison condition for now - 842 it is not used, and it is unclear the semantics are correct (I think 843 this comparison would actually give you not-equal-or-unordered, which 844 might be what is wanted... we can revisit this interface & get it 845 right when required). 846 847 Also, fix asserts in branchArith32 ops. All adds & subs can check 848 for Signed, multiply only sets OF so can only check for overflow. 849 850 * assembler/MacroAssemblerX86Common.h: 851 (JSC::MacroAssemblerX86Common::): 852 (JSC::MacroAssemblerX86Common::branchAdd32): 853 (JSC::MacroAssemblerX86Common::branchMul32): 854 (JSC::MacroAssemblerX86Common::branchSub32): 855 856 2009-06-05 Gavin Barraclough <barraclough (a] apple.com> 857 858 Reviewed by Oliver Hunt. 859 860 Minor tidy up in JITStubs. 861 862 * jit/JITStubs.cpp: 863 (JSC::StackHack::StackHack): 864 * jit/JITStubs.h: 865 866 2009-06-05 Koen Kooi <koen (a] dominion.thruhere.net> 867 868 Reviewed by Xan Lopez. 869 870 Build fix for glib unicode backend. 871 872 * wtf/unicode/glib/UnicodeMacrosFromICU.h: 873 874 2009-06-05 Gavin Barraclough <barraclough (a] apple.com> 875 876 Reviewed by Oliver Hunt. 877 878 3 tiny cleanups: 879 880 * assembler/MacroAssemblerX86.h: 881 * assembler/MacroAssemblerX86_64.h: 882 (JSC::MacroAssemblerX86_64::storePtrWithPatch): 883 store*() methods should take an ImplicitAddress, rather than an Address. 884 * assembler/X86Assembler.h: 885 Make patchPointer private. 886 * jit/JITOpcodes.cpp: 887 (JSC::JIT::emit_op_ret): 888 Remove empty line at end of function. 889 890 2009-06-05 Gavin Barraclough <barraclough (a] apple.com> 891 892 Reviewed by Oliver Hunt. 893 894 Encapsulate many uses of void* in the assembler & jit with types that provide 895 more semantic information. The new types are: 896 897 * MacroAssemblerCodePtr - this wraps a pointer into JIT generated code. 898 * FunctionPtr - this wraps a pointer to a C/C++ function in JSC. 899 * ReturnAddressPtr - this wraps a return address resulting from a 'call' instruction. 900 901 Wrapping these types allows for stronger type-checking than is possible with everything 902 represented a void*. For example, it is now enforced by the type system that near 903 calls can only be linked to JIT code and not to C functions in JSC (this was previously 904 required, but could not be enforced on the interface). 905 906 * assembler/AbstractMacroAssembler.h: 907 (JSC::AbstractMacroAssembler::CodeLocationCommon::CodeLocationCommon): 908 (JSC::AbstractMacroAssembler::CodeLocationCommon::dataLocation): 909 (JSC::AbstractMacroAssembler::CodeLocationCommon::executableAddress): 910 (JSC::AbstractMacroAssembler::CodeLocationCommon::reset): 911 (JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadToLEA): 912 (JSC::AbstractMacroAssembler::CodeLocationInstruction::CodeLocationInstruction): 913 (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForSwitch): 914 (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForExceptionHandler): 915 (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForJSR): 916 (JSC::AbstractMacroAssembler::CodeLocationLabel::operator!): 917 (JSC::AbstractMacroAssembler::CodeLocationLabel::reset): 918 (JSC::AbstractMacroAssembler::CodeLocationLabel::CodeLocationLabel): 919 (JSC::AbstractMacroAssembler::CodeLocationLabel::getJumpDestination): 920 (JSC::AbstractMacroAssembler::CodeLocationJump::relink): 921 (JSC::AbstractMacroAssembler::CodeLocationJump::CodeLocationJump): 922 (JSC::AbstractMacroAssembler::CodeLocationCall::relink): 923 (JSC::AbstractMacroAssembler::CodeLocationCall::calleeReturnAddressValue): 924 (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall): 925 (JSC::AbstractMacroAssembler::CodeLocationNearCall::relink): 926 (JSC::AbstractMacroAssembler::CodeLocationNearCall::calleeReturnAddressValue): 927 (JSC::AbstractMacroAssembler::CodeLocationNearCall::CodeLocationNearCall): 928 (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): 929 (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::CodeLocationDataLabel32): 930 (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): 931 (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): 932 (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline): 933 (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): 934 (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToTrampoline): 935 (JSC::AbstractMacroAssembler::ProcessorReturnAddress::addressForLookup): 936 (JSC::AbstractMacroAssembler::trampolineAt): 937 (JSC::AbstractMacroAssembler::PatchBuffer::link): 938 (JSC::AbstractMacroAssembler::PatchBuffer::performFinalization): 939 (JSC::::CodeLocationCommon::instructionAtOffset): 940 (JSC::::CodeLocationCommon::labelAtOffset): 941 (JSC::::CodeLocationCommon::jumpAtOffset): 942 (JSC::::CodeLocationCommon::callAtOffset): 943 (JSC::::CodeLocationCommon::nearCallAtOffset): 944 (JSC::::CodeLocationCommon::dataLabelPtrAtOffset): 945 (JSC::::CodeLocationCommon::dataLabel32AtOffset): 946 * assembler/MacroAssemblerCodeRef.h: 947 (JSC::FunctionPtr::FunctionPtr): 948 (JSC::FunctionPtr::value): 949 (JSC::FunctionPtr::executableAddress): 950 (JSC::ReturnAddressPtr::ReturnAddressPtr): 951 (JSC::ReturnAddressPtr::value): 952 (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr): 953 (JSC::MacroAssemblerCodePtr::executableAddress): 954 (JSC::MacroAssemblerCodePtr::dataLocation): 955 (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef): 956 * assembler/X86Assembler.h: 957 (JSC::X86Assembler::patchPointerForCall): 958 * jit/JIT.cpp: 959 (JSC::ctiPatchNearCallByReturnAddress): 960 (JSC::ctiPatchCallByReturnAddress): 961 (JSC::JIT::privateCompile): 962 (JSC::JIT::privateCompileCTIMachineTrampolines): 963 * jit/JIT.h: 964 (JSC::JIT::compileCTIMachineTrampolines): 965 * jit/JITCall.cpp: 966 (JSC::JIT::compileOpCall): 967 * jit/JITCode.h: 968 (JSC::JITCode::operator !): 969 (JSC::JITCode::addressForCall): 970 (JSC::JITCode::offsetOf): 971 (JSC::JITCode::execute): 972 (JSC::JITCode::size): 973 (JSC::JITCode::HostFunction): 974 * jit/JITInlineMethods.h: 975 (JSC::JIT::emitNakedCall): 976 * jit/JITPropertyAccess.cpp: 977 (JSC::JIT::privateCompilePutByIdTransition): 978 (JSC::JIT::patchGetByIdSelf): 979 (JSC::JIT::patchPutByIdReplace): 980 (JSC::JIT::privateCompilePatchGetArrayLength): 981 (JSC::JIT::privateCompileGetByIdProto): 982 (JSC::JIT::privateCompileGetByIdChain): 983 * jit/JITStubs.cpp: 984 (JSC::JITThunks::JITThunks): 985 (JSC::JITThunks::tryCachePutByID): 986 (JSC::JITThunks::tryCacheGetByID): 987 (JSC::JITStubs::DEFINE_STUB_FUNCTION): 988 * jit/JITStubs.h: 989 (JSC::JITThunks::ctiArrayLengthTrampoline): 990 (JSC::JITThunks::ctiStringLengthTrampoline): 991 (JSC::JITThunks::ctiVirtualCallPreLink): 992 (JSC::JITThunks::ctiVirtualCallLink): 993 (JSC::JITThunks::ctiVirtualCall): 994 (JSC::JITThunks::ctiNativeCallThunk): 995 * yarr/RegexJIT.h: 996 (JSC::Yarr::RegexCodeBlock::operator!): 997 (JSC::Yarr::RegexCodeBlock::execute): 998 999 2009-06-05 Antti Koivisto <antti (a] apple.com> 1000 1001 Try to unbreak Windows build. 1002 1003 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 1004 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 1005 1006 2009-06-03 Antti Koivisto <antti (a] apple.com> 1007 1008 Reviewed by Dave Kilzer. 1009 1010 https://bugs.webkit.org/show_bug.cgi?id=13128 1011 Safari not obeying cache header 1012 1013 Export JSC::parseDate() 1014 1015 * JavaScriptCore.exp: 1016 * JavaScriptCore.xcodeproj/project.pbxproj: 1017 1018 2009-06-04 Oliver Hunt <oliver (a] apple.com> 1019 1020 Reviewed by Gavin Barraclough. 1021 1022 Bug in property caching of getters and setters. 1023 1024 Make sure that the transition logic accounts for getters and setters. 1025 If we don't we end up screwing up the transition tables so that some 1026 transitions will start incorrectly believing that they need to check 1027 for getters and setters. 1028 1029 * runtime/JSObject.cpp: 1030 (JSC::JSObject::defineGetter): 1031 (JSC::JSObject::defineSetter): 1032 * runtime/JSObject.h: 1033 (JSC::): 1034 * runtime/Structure.h: 1035 1036 2009-06-04 Gavin Barraclough <barraclough (a] apple.com> 1037 1038 Reviewed by Sam Weinig. 1039 1040 Minor tweak to PatchBuffer, change it so it no longer holds a CodeRef, and instead 1041 holds a separate code pointer and executable pool. Since it now always holds its 1042 own copy of the code size, and to simplify the construction sequence, it's neater 1043 this way. 1044 1045 * assembler/AbstractMacroAssembler.h: 1046 (JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer): 1047 (JSC::AbstractMacroAssembler::PatchBuffer::finalizeCode): 1048 (JSC::AbstractMacroAssembler::PatchBuffer::code): 1049 (JSC::AbstractMacroAssembler::PatchBuffer::performFinalization): 1050 1051 2009-06-04 Gavin Barraclough <barraclough (a] apple.com> 1052 1053 Reviewed by Oliver Hunt. 1054 1055 Remove 'JIT_STUB_ARGUMENT_STACK' this is unused and untested. 1056 1057 This just leaves JIT_STUB_ARGUMENT_REGISTER and JIT_STUB_ARGUMENT_VA_LIST. 1058 Since JIT_STUB_ARGUMENT_REGISTER is the sensible configuration on most platforms, 1059 remove this define and make this the default behaviour. 1060 Platforms must now define JIT_STUB_ARGUMENT_VA_LIST to get crazy va_list voodoo, 1061 if they so desire. 1062 1063 (Refactoring of #ifdefs only, no functional change, no performance impact.) 1064 1065 * jit/JIT.h: 1066 * jit/JITInlineMethods.h: 1067 (JSC::JIT::restoreArgumentReference): 1068 (JSC::JIT::restoreArgumentReferenceForTrampoline): 1069 * jit/JITStubs.cpp: 1070 (JSC::): 1071 * jit/JITStubs.h: 1072 * wtf/Platform.h: 1073 1074 2009-06-04 Gavin Barraclough <barraclough (a] apple.com> 1075 1076 Rubber stamped by Sam Weinig. 1077 1078 * jit/JITArithmetic.cpp: 1079 Remove some redundant typedefs, unused since arithmetic was added to the MacroAssembler interface. 1080 1081 2009-06-04 Brent Fulgham <bfulgham (a] webkit.org> 1082 1083 Build fix due to header include problem. 1084 1085 * interpreter/Interpreter.h: Remove wtf from includes so that 1086 compile can find the headers in expected places. 1087 1088 2009-06-04 Zoltan Horvath <hzoltan (a] inf.u-szeged.hu> 1089 1090 Reviewed by Darin Adler. 1091 1092 HashTable class (JavaScriptCore/wtf/HashTable.h) doesn't instantiated by 'new', so 1093 inheritance was removed. HashTable struct has been instantiated by operator new in 1094 JSGlobalData.cpp:106. 1095 HashTable couldn't inherited from FastAllocBase since struct with inheritance is 1096 no longer POD, so HashTable struct has been instantiated by fastNew, destroyed by 1097 fastDelete. 1098 1099 * interpreter/Interpreter.h: 1100 * runtime/JSGlobalData.cpp: 1101 (JSC::JSGlobalData::JSGlobalData): 1102 (JSC::JSGlobalData::~JSGlobalData): 1103 * wtf/HashTable.h: 1104 1105 2009-06-04 Gavin Barraclough <barraclough (a] apple.com> 1106 1107 Reviewed by Oliver Hunt. 1108 1109 Wrap the code that plants pushes/pops planted by JIT in explanatorily named 1110 methods; move property storage reallocation into a standard stub function. 1111 1112 ~No performance impact (possible <1% progression on x86-64, likely just noise). 1113 1114 * jit/JIT.cpp: 1115 (JSC::JIT::privateCompile): 1116 (JSC::JIT::privateCompileCTIMachineTrampolines): 1117 Wrap calls to push/pop. 1118 * jit/JIT.h: 1119 Declare the new wrapper methods. 1120 * jit/JITInlineMethods.h: 1121 (JSC::JIT::preverveReturnAddressAfterCall): 1122 (JSC::JIT::restoreReturnAddressBeforeReturn): 1123 Define the new wrapper methods. 1124 * jit/JITOpcodes.cpp: 1125 (JSC::JIT::emit_op_end): 1126 (JSC::JIT::emit_op_ret): 1127 Wrap calls to push/pop. 1128 * jit/JITPropertyAccess.cpp: 1129 (JSC::JIT::privateCompilePutByIdTransition): 1130 Move property storage reallocation into a standard stub function. 1131 * jit/JITStubs.cpp: 1132 (JSC::JITStubs::DEFINE_STUB_FUNCTION): 1133 * jit/JITStubs.h: 1134 (JSC::JITStubs::): 1135 1136 2009-06-04 Laszlo Gombos <laszlo.1.gombos (a] nokia.com> 1137 1138 Reviewed by Ariya Hidayat. 1139 1140 [Qt] Single-threaded QtWebKit configuration 1141 <https://bugs.webkit.org/show_bug.cgi?id=26015> 1142 1143 * JavaScriptCore.pri: Use ThreadingNone.cpp instead of 1144 ThreadingQt.cpp and make sure ENABLE_JSC_MULTIPLE_THREADS is turned off 1145 when ENABLE_SINGLE_THREADED is tuned on 1146 * wtf/ThreadingNone.cpp: 1147 (WTF::ThreadCondition::wait): Fix compilation warning. 1148 (WTF::ThreadCondition::timedWait): Ditto. 1149 1150 2009-06-02 Mark Rowe <mrowe (a] apple.com> 1151 1152 Reviewed by Anders Carlsson. 1153 1154 Remove workaround that was added to address <rdar://problem/5488678> as it no longer affects our Tiger builds. 1155 1156 * Configurations/Base.xcconfig: 1157 1158 2009-06-02 Xan Lopez <xlopez (a] igalia.com> 1159 1160 Reviewed by Sam Weinig. 1161 1162 Use C-style comments in Platform.h so it can be included from C 1163 files. 1164 1165 * wtf/Platform.h: 1166 1167 2009-06-02 Tor Arne Vestb <tor.arne.vestbo (a] nokia.com> 1168 1169 Rubber-stamped by Simon Hausmann. 1170 1171 Use File::Spec->tmpdir instead of hardcoded paths for tempfile() dir 1172 1173 This fixes the Windows-build if the user does not have a /tmp directory. 1174 1175 * pcre/dftables: 1176 1177 2009-06-02 Gavin Barraclough <barraclough (a] apple.com> 1178 1179 Reviewed by Oliver ">>" Hunt. 1180 1181 emitSlow_op_rshift is linking the wrong number of slow cases, if !supportsFloatingPoint(). 1182 Fixerate, and refactor/comment the code a little to make it clearer what is going on. 1183 1184 * jit/JITArithmetic.cpp: 1185 (JSC::JIT::emit_op_rshift): 1186 (JSC::JIT::emitSlow_op_rshift): 1187 1188 2009-06-01 Gavin Barraclough <barraclough (a] apple.com> 1189 1190 Reviewed by NOBODY - speculative windows build fix (errm, for the other patch!). 1191 1192 * jit/JITStubs.cpp: 1193 (JSC::): 1194 1195 2009-06-01 Gavin Barraclough <barraclough (a] apple.com> 1196 1197 Reviewed by NOBODY - speculative windows build fix. 1198 1199 * assembler/AbstractMacroAssembler.h: 1200 (JSC::::CodeLocationCall::CodeLocationCall): 1201 (JSC::::CodeLocationNearCall::CodeLocationNearCall): 1202 1203 2009-06-01 Gavin Barraclough <barraclough (a] apple.com> 1204 1205 Reviewed by Olliej Hunt. 1206 1207 Change JITStub functions from being static members on the JITStub class to be 1208 global extern "C" functions, and switch their the function signature declaration 1209 in the definition of the functions to be C-macro generated. This makes it easier 1210 to work with the stub functions from assembler code (since the names no longer 1211 require mangling), and by delaring the functions with a macro we can look at 1212 also auto-generating asm thunks to wrap the JITStub functions to perform the 1213 work currently in 'restoreArgumentReference' (as a memory saving). 1214 1215 Making this change also forces us to be a bit more realistic about what is private 1216 on the Register and CallFrame objects. Presently most everything on these classes 1217 is private, and the classes have plenty of friends. We could befriend all the 1218 global functions to perpetuate the delusion of encapsulation, but using friends is 1219 a bit of a sledgehammer solution here - since friends can poke around with all of 1220 the class's privates, and since all the major classes taht operate on Regsiters are 1221 currently friends, right there is currently in practice very little protection at 1222 all. Better to start removing friend delclarations, and exposing just the parts 1223 that need to be exposed. 1224 1225 * interpreter/CallFrame.h: 1226 (JSC::ExecState::returnPC): 1227 (JSC::ExecState::setCallerFrame): 1228 (JSC::ExecState::returnValueRegister): 1229 (JSC::ExecState::setArgumentCount): 1230 (JSC::ExecState::setCallee): 1231 (JSC::ExecState::setCodeBlock): 1232 * interpreter/Interpreter.h: 1233 * interpreter/Register.h: 1234 (JSC::Register::Register): 1235 (JSC::Register::i): 1236 * jit/JITStubs.cpp: 1237 (JSC::): 1238 (JSC::JITThunks::JITThunks): 1239 (JSC::JITThunks::tryCachePutByID): 1240 (JSC::JITThunks::tryCacheGetByID): 1241 (JSC::JITStubs::DEFINE_STUB_FUNCTION): 1242 * jit/JITStubs.h: 1243 (JSC::JITStubs::): 1244 * runtime/JSFunction.h: 1245 (JSC::JSFunction::nativeFunction): 1246 (JSC::JSFunction::classInfo): 1247 * runtime/JSGlobalData.h: 1248 1249 2009-06-01 Oliver Hunt <oliver (a] apple.com> 1250 1251 Reviewed by Gavin Barraclough. 1252 1253 Tidy up the literal parser. 1254 1255 Make the number lexing in the LiteralParser exactly match the JSON spec, which 1256 makes us cover more cases, but also more strict. Also made string lexing only 1257 allow double-quoted strings. 1258 1259 * runtime/LiteralParser.cpp: 1260 (JSC::LiteralParser::Lexer::lex): 1261 (JSC::LiteralParser::Lexer::lexString): 1262 (JSC::LiteralParser::Lexer::lexNumber): 1263 1264 2009-06-01 Gavin Barraclough <barraclough (a] apple.com> 1265 1266 Reviewed by Sam "WX" Weinig. 1267 1268 Allow the JIT to operate without relying on use of RWX memory, on platforms where this is supported. 1269 1270 This patch adds a switch to Platform.h (ENABLE_ASSEMBLER_WX_EXCLUSIVE) which enables this mode of operation. 1271 When this flag is set, all executable memory will be allocated RX, and switched to RW only whilst being 1272 modified. Upon completion of code generation the protection is switched back to RX to allow execution. 1273 1274 Further optimization will be required before it is desirable to enable this mode of operation by default; 1275 enabling this presently incurs a 5%-10% regression. 1276 1277 (Submitting disabled - no performance impact). 1278 1279 * assembler/AbstractMacroAssembler.h: 1280 (JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadToLEA): 1281 (JSC::AbstractMacroAssembler::CodeLocationLabel::fromFunctionPointer): 1282 (JSC::AbstractMacroAssembler::CodeLocationJump::relink): 1283 (JSC::AbstractMacroAssembler::CodeLocationCall::relink): 1284 (JSC::AbstractMacroAssembler::CodeLocationNearCall::relink): 1285 (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): 1286 (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): 1287 (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline): 1288 (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): 1289 (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToTrampoline): 1290 (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToFunction): 1291 (JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer): 1292 (JSC::AbstractMacroAssembler::PatchBuffer::~PatchBuffer): 1293 (JSC::AbstractMacroAssembler::PatchBuffer::link): 1294 (JSC::AbstractMacroAssembler::PatchBuffer::patch): 1295 (JSC::AbstractMacroAssembler::PatchBuffer::performFinalization): 1296 (JSC::::CodeLocationCommon::nearCallAtOffset): 1297 (JSC::::CodeLocationCall::CodeLocationCall): 1298 (JSC::::CodeLocationNearCall::CodeLocationNearCall): 1299 * assembler/AssemblerBuffer.h: 1300 (JSC::AssemblerBuffer::executableCopy): 1301 * assembler/X86Assembler.h: 1302 (JSC::CAN_SIGN_EXTEND_U32_64): 1303 (JSC::X86Assembler::linkJump): 1304 (JSC::X86Assembler::linkCall): 1305 (JSC::X86Assembler::patchPointer): 1306 (JSC::X86Assembler::relinkJump): 1307 (JSC::X86Assembler::relinkCall): 1308 (JSC::X86Assembler::repatchInt32): 1309 (JSC::X86Assembler::repatchPointer): 1310 (JSC::X86Assembler::repatchLoadToLEA): 1311 (JSC::X86Assembler::patchInt32): 1312 (JSC::X86Assembler::patchRel32): 1313 * jit/ExecutableAllocator.h: 1314 (JSC::ExecutableAllocator::): 1315 (JSC::ExecutableAllocator::makeWritable): 1316 (JSC::ExecutableAllocator::makeExecutable): 1317 * jit/ExecutableAllocatorFixedVMPool.cpp: 1318 (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): 1319 * jit/ExecutableAllocatorPosix.cpp: 1320 (JSC::ExecutablePool::systemAlloc): 1321 (JSC::ExecutablePool::systemRelease): 1322 (JSC::ExecutableAllocator::reprotectRegion): 1323 * jit/ExecutableAllocatorWin.cpp: 1324 * jit/JITPropertyAccess.cpp: 1325 (JSC::JIT::patchGetByIdSelf): 1326 (JSC::JIT::patchPutByIdReplace): 1327 * wtf/Platform.h: 1328 1329 2009-05-29 Zoltan Horvath <hzoltan (a] inf.u-szeged.hu> 1330 1331 Reviewed by Darin Adler. 1332 1333 Inherits Interpreter class from FastAllocBase because it has been 1334 instantiated by 'new' in JavaScriptCore/runtime/JSGlobalData.cpp. 1335 1336 * interpreter/Interpreter.h: 1337 1338 2009-06-01 David Levin <levin (a] chromium.org> 1339 1340 Reviewed by NOBODY (windows build fix). 1341 1342 Add exports for windows (corresponding to the JavaScriptCore.exp modification 1343 in the previous change). 1344 1345 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 1346 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 1347 1348 2009-06-01 David Levin <levin (a] chromium.org> 1349 1350 Reviewed by Darin Alder and Maciej Stachowiak. 1351 1352 Bug 26057: StringImpl should share buffers with UString. 1353 https://bugs.webkit.org/show_bug.cgi?id=26057 1354 1355 * JavaScriptCore.exp: 1356 * runtime/UString.cpp: 1357 (JSC::UString::Rep::create): 1358 (JSC::UString::BaseString::sharedBuffer): Only do the sharing when 1359 the buffer exceeds a certain size. The size was tuned by running 1360 various dom benchmarks with numbers ranging from 20 to 800 and finding 1361 a place that seemed to do the best overall. 1362 * runtime/UString.h: 1363 1364 2009-05-31 Gavin Barraclough <barraclough (a] apple.com> 1365 1366 Reviewed by Olliej "you just need to change NativeFunctionWrapper.h" Hunt. 1367 1368 Add ENABLE_JIT_OPTIMIZE_NATIVE_CALL switch to allow JIT to operate without native call optimizations. 1369 1370 * runtime/NativeFunctionWrapper.h: 1371 * wtf/Platform.h: 1372 1373 2009-05-30 Darin Adler <darin (a] apple.com> 1374 1375 Reviewed by Sam Weinig. 1376 1377 <rdar://problem/6935193> REGRESSION (r42734): Celtic Kane JavaScript benchmark does not run: 1378 "Maximum call stack size exceeded" 1379 1380 * runtime/ArrayPrototype.cpp: 1381 (JSC::arrayProtoFuncToString): Use the same recursion limit as the other recursion checks. 1382 We need a limit of at least 100 to run the benchmark above. 1383 (JSC::arrayProtoFuncToLocaleString): Ditto. 1384 (JSC::arrayProtoFuncJoin): Ditto. 1385 1386 2009-05-28 Dirk Schulze <krit (a] webkit.org> 1387 1388 Reviewed by Nikolas Zimmermann. 1389 1390 Added new build flag --filters for Mac. More details in WebCore/ChangeLog. 1391 1392 * Configurations/FeatureDefines.xcconfig: 1393 1394 2009-05-27 Oliver Hunt <oliver (a] apple.com> 1395 1396 Reviewed by Mark Rowe. 1397 1398 <rdar://problem/6928025> Stack overflow in JSC::stringProtoFuncReplace() running jsFunFuzz 1399 1400 We should always check for exceptions after creating a CachedCall, this wasn't being done in 1401 the string replace logic. 1402 1403 * runtime/StringPrototype.cpp: 1404 (JSC::stringProtoFuncReplace): 1405 1406 2009-05-27 Gustavo Noronha Silva <gustavo.noronha (a] collabora.co.uk> 1407 1408 Unreviewed (make distcheck) build fix; adding missing headers. 1409 1410 * GNUmakefile.am: 1411 1412 2009-05-27 Jessie Berlin <jberlin (a] apple.com> 1413 1414 Reviewed by Adam Roben 1415 1416 Fix the Windows build. 1417 1418 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 1419 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 1420 1421 2009-05-27 Fridrich Strba <fridrich.strba (a] bluewin.ch> 1422 1423 Reviewed by Gustavo Noronha. 1424 1425 When building on Windows, consider Windows specific files. 1426 1427 * GNUmakefile.am: 1428 1429 2009-05-27 Fridrich Strba <fridrich.strba (a] bluewin.ch> 1430 1431 Reviewed by Maciej Stachowiak. 1432 1433 When building with MinGW, don't use the __declspec(dl{import,export}) 1434 decorations and rely on the linker to use its nifty auto-import feature. 1435 It is extremely hard to get the decorations right with MinGW in general 1436 and impossible in WebKit, where the resulting shared library is linking 1437 together some static libraries. 1438 1439 * config.h: 1440 1441 2009-05-26 Holger Hans Peter Freyther <zecke (a] selfish.org> 1442 1443 Reviewed by Xan Lopez. 1444 1445 https://bugs.webkit.org/show_bug.cgi?id=25613 1446 1447 Be able to use GOwnPtr for GHashTable as well. The assumption 1448 is that the hash table has been created with g_hash_table_new_full 1449 and has proper destruction functions. 1450 1451 * wtf/GOwnPtr.cpp: 1452 (WTF::GHashTable): 1453 * wtf/GOwnPtr.h: 1454 1455 2009-05-26 Oliver Hunt <oliver (a] apple.com> 1456 1457 Reviewed by Gavin Barraclough. 1458 1459 <rdar://problem/6924033> REGRESSION: Assertion failure due to forward references 1460 1461 Add a pattern type for forward references to ensure that we don't confuse the 1462 quantifier alternatives assertion. 1463 1464 * yarr/RegexCompiler.cpp: 1465 (JSC::Yarr::RegexPatternConstructor::atomBackReference): 1466 (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): 1467 * yarr/RegexInterpreter.cpp: 1468 (JSC::Yarr::ByteCompiler::emitDisjunction): 1469 * yarr/RegexJIT.cpp: 1470 (JSC::Yarr::RegexGenerator::generateTerm): 1471 * yarr/RegexPattern.h: 1472 (JSC::Yarr::PatternTerm::): 1473 (JSC::Yarr::PatternTerm::PatternTerm): 1474 (JSC::Yarr::PatternTerm::ForwardReference): 1475 1476 2009-05-26 Gavin Barraclough <barraclough (a] apple.com> 1477 1478 Reviewed by Oliver Hunt. 1479 1480 Fix for: <rdar://problem/6918095> REGRESSION: jQuery load() issue (25981), 1481 and also an ASSERT failure on http://ihasahotdog.com/. 1482 1483 When overwriting a property on a dictionary with a cached specific value, 1484 clear the cache if new value being written is different. 1485 1486 * JavaScriptCore.exp: 1487 Export the new symbols. 1488 * jit/JITStubs.cpp: 1489 (JSC::JITStubs::cti_op_get_by_id_method_check_second): 1490 Close dictionary prototypes upon caching a method access, as would happen when caching 1491 a regular get_by_id. 1492 * runtime/JSObject.h: 1493 (JSC::JSObject::propertyStorage): 1494 (JSC::JSObject::locationForOffset): 1495 Make these methods private. 1496 (JSC::JSObject::putDirectInternal): 1497 When overwriting a property on a dictionary with a cached specific value, 1498 clear the cache if new value being written is different. 1499 * runtime/Structure.cpp: 1500 (JSC::Structure::despecifyDictionaryFunction): 1501 Reset the specific value field for a given property in a dictionary. 1502 (JSC::Structure::despecifyFunctionTransition): 1503 Rename of 'changeFunctionTransition' (this was already internally refered to as a despecification). 1504 * runtime/Structure.h: 1505 Declare new method. 1506 1507 2009-05-26 Gavin Barraclough <barraclough (a] apple.com> 1508 1509 Reviewed by Oliver "pieces of eight" Hunt. 1510 1511 When reseting RegexPattern class, should fully reset the class, not just bits of it. 1512 In particular, we delete the cached character classes (for wordchars, etc), but do 1513 not reset the set of pointers to the cached classes. In the case of a repeated parse 1514 due to an illegal back-reference we will continue to use the deleted character class. 1515 1516 * yarr/RegexPattern.h: 1517 (JSC::Yarr::RegexPattern::reset): 1518 1519 2009-05-26 Brent Fulgham <bfulgham (a] webkit.org> 1520 1521 Build fix to correct r44161. 1522 1523 * wtf/FastAllocBase.h: 1524 1525 2009-05-26 Zoltan Horvath <horvath.zoltan.6 (a] stud.u-szeged.hu> 1526 1527 Reviewed by Maciej Stachowiak. 1528 1529 Inherite HashTable from FastAllocBase, because it has been instantiated by 1530 'new' in JavaScriptCore/runtime/JSGlobalData.cpp. 1531 1532 * wtf/HashTable.h: 1533 * wtf/FastAllocBase.h: Remove 'wtf' path from TypeTraits.h to allow use outside of wtf. 1534 1535 2009-05-25 David Levin <levin (a] chromium.org> 1536 1537 Reviewed by Maciej Stachowiak and Oliver Hunt. 1538 1539 https://bugs.webkit.org/show_bug.cgi?id=25126 1540 Allow the buffer underlying UString to be shared. 1541 1542 In order to not grow the underlying size of any structure, 1543 there is a union in the Rep string which holds 1544 + m_sharedBuffer -- a pointer to the shared ref counted buffer 1545 if the class is BaseString and the buffer is being shared OR 1546 + m_baseString -- the BaseString if the class is only UString::Rep 1547 but not a UString::BaseString 1548 1549 Ideally, m_sharedBuffer would be a RefPtr, but it cannot be because 1550 it is in a union. 1551 1552 No change in sunspider perf. 1553 1554 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 1555 * JavaScriptCore.xcodeproj/project.pbxproj: 1556 * runtime/UString.cpp: 1557 (JSC::UString::Rep::share): 1558 (JSC::UString::Rep::destroy): 1559 (JSC::UString::BaseString::sharedBuffer): 1560 (JSC::UString::BaseString::setSharedBuffer): 1561 (JSC::UString::BaseString::slowIsBufferReadOnly): 1562 (JSC::expandCapacity): 1563 (JSC::UString::Rep::reserveCapacity): 1564 (JSC::UString::expandPreCapacity): 1565 (JSC::concatenate): 1566 (JSC::UString::append): 1567 * runtime/UString.h: 1568 (JSC::UString::Rep::Rep): 1569 (JSC::UString::Rep::): 1570 (JSC::UString::BaseString::isShared): 1571 (JSC::UString::BaseString::isBufferReadOnly): 1572 (JSC::UString::Rep::baseString): 1573 * wtf/CrossThreadRefCounted.h: 1574 (WTF::CrossThreadRefCounted::isShared): 1575 * wtf/OwnFastMallocPtr.h: Added. 1576 (WTF::OwnFastMallocPtr::OwnFastMallocPtr): 1577 (WTF::OwnFastMallocPtr::~OwnFastMallocPtr): 1578 (WTF::OwnFastMallocPtr::get): 1579 (WTF::OwnFastMallocPtr::release): 1580 1581 2009-05-25 Oliver Hunt <oliver (a] apple.com> 1582 1583 Reviewed by Maciej Stachowiak. 1584 1585 Re-add interpreter logic to jit-enabled builds as GCC mysteriously regresses without it 1586 1587 * wtf/Platform.h: 1588 1589 2009-05-25 Fridrich Strba <fridrich.strba (a] bluewin.ch> 1590 1591 Reviewed by Maciej Stachowiak. 1592 1593 The functions written in assembly need to have a leading 1594 underscore on Windows too. 1595 1596 * jit/JITStubs.cpp: 1597 1598 2009-05-24 Steve Falkenburg <sfalken (a] apple.com> 1599 1600 Build fix for experimental PGO Windows target. 1601 1602 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 1603 1604 2009-05-23 David Kilzer <ddkilzer (a] apple.com> 1605 1606 Part 1 of 2: Bug 25495: Implement PassOwnPtr and replace uses of std::auto_ptr 1607 1608 <https://bugs.webkit.org/show_bug.cgi?id=25495> 1609 1610 Reviewed by Oliver Hunt. 1611 1612 * GNUmakefile.am: Added OwnPtrCommon.h and PassOwnPtr.h. 1613 * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto. 1614 * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. 1615 1616 * wtf/OwnPtr.h: 1617 (WTF::OwnPtr::OwnPtr): Added constructors that take a 1618 PassOwnPtr. Also added a copy constructor declaration that's 1619 required when assigning a PassOwnPtr to a stack-based OwnPtr. 1620 (WTF::operator=): Added assignment operator methods that take a 1621 PassOwnPtr. 1622 (WTF::swap): Reformatted. 1623 (WTF::operator==): Whitespace changes. 1624 (WTF::operator!=): Ditto. 1625 1626 * wtf/OwnPtrCommon.h: Added. 1627 (WTF::deleteOwnedPtr): 1628 1629 * wtf/PassOwnPtr.h: Added. 1630 (WTF::PassOwnPtr::PassOwnPtr): 1631 (WTF::PassOwnPtr::~PassOwnPtr): 1632 (WTF::PassOwnPtr::get): 1633 (WTF::PassOwnPtr::clear): 1634 (WTF::PassOwnPtr::release): 1635 (WTF::PassOwnPtr::operator*): 1636 (WTF::PassOwnPtr::operator->): 1637 (WTF::PassOwnPtr::operator!): 1638 (WTF::PassOwnPtr::operator UnspecifiedBoolType): 1639 (WTF::::operator): 1640 (WTF::operator==): 1641 (WTF::operator!=): 1642 (WTF::static_pointer_cast): 1643 (WTF::const_pointer_cast): 1644 (WTF::getPtr): 1645 1646 2009-05-23 Oliver Hunt <oliver (a] apple.com> 1647 1648 Reviewed by Maciej Stachowiak. 1649 1650 Remove interpreter specific logic from the JIT builds. 1651 1652 This saves ~100k in JSC release builds. 1653 1654 * interpreter/Interpreter.cpp: 1655 (JSC::Interpreter::privateExecute): 1656 * interpreter/Interpreter.h: 1657 * wtf/Platform.h: 1658 1659 2009-05-22 Mark Rowe <mrowe (a] apple.com> 1660 1661 Part two of an attempted Windows build fix. 1662 1663 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 1664 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 1665 1666 2009-05-22 Mark Rowe <mrowe (a] apple.com> 1667 1668 Part one of an attempted Windows build fix. 1669 1670 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 1671 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 1672 1673 2009-05-21 Gavin Barraclough <barraclough (a] apple.com> 1674 1675 Reviewed by Geoff Garen. 1676 1677 op_method_check 1678 1679 Optimize method calls, by caching specific function values within the Structure. 1680 The new opcode is used almost like an x86 opcode prefix byte to optimize op_get_by_id, 1681 where the property access is being used to read a function to be passed to op-call (i.e. 1682 'foo.bar();'). This patch modifies the Structure class such that when a property is 1683 put to an object for the first time we will check if the value is a function. If it is, 1684 we will cache the function value on the Structure. A Structure in such a state guarantees 1685 that not only does a property with the given identifier exist on the object, but also that 1686 its value is unchanged. Upon any further attempt to put a property with the same identifier 1687 (but a different value) to the object, it will transition back to a normal Structure (where 1688 it will guarantee the presence but not the value of the property). 1689 1690 op_method_check makes use of the new information made available by the Structure, by 1691 augmenting the functionality of op_get_by_id. Upon generating a FunctionCallDotNode a 1692 check will be emitted prior to the property access reading the function value, and the JIT 1693 will generate an extra (initially unlinked but patchable) set of checks prior to the regular 1694 JIT code for get_by_id. The new code will do inline structure and prototype structure check 1695 (unlike a regular get_by_id, which can only handle 'self' accesses inline), and then performs 1696 an immediate load of the function value, rather than using memory accesses to load the value 1697 from the obejct's property storage array. If the method check fails it will revert, or if 1698 the access is polymorphic, the op_get_by_id will continue to operate - and optimize itself - 1699 just as any other regular op_get_by_id would. 1700 1701 ~2.5% on v8-tests, due to a ~9% progression on richards. 1702 1703 * API/JSCallbackObjectFunctions.h: 1704 (JSC::::put): 1705 (JSC::::staticFunctionGetter): 1706 * API/JSObjectRef.cpp: 1707 (JSObjectMakeConstructor): 1708 * JavaScriptCore.exp: 1709 * assembler/AbstractMacroAssembler.h: 1710 (JSC::AbstractMacroAssembler::differenceBetween): 1711 * assembler/MacroAssemblerX86.h: 1712 (JSC::MacroAssemblerX86::moveWithPatch): 1713 * bytecode/CodeBlock.cpp: 1714 (JSC::CodeBlock::dump): 1715 * bytecode/CodeBlock.h: 1716 (JSC::getMethodCallLinkInfoReturnLocation): 1717 (JSC::CodeBlock::getMethodCallLinkInfo): 1718 (JSC::CodeBlock::addMethodCallLinkInfos): 1719 (JSC::CodeBlock::methodCallLinkInfo): 1720 * bytecode/Opcode.h: 1721 * bytecompiler/BytecodeGenerator.cpp: 1722 (JSC::BytecodeGenerator::emitMethodCheck): 1723 * bytecompiler/BytecodeGenerator.h: 1724 * interpreter/Interpreter.cpp: 1725 (JSC::Interpreter::privateExecute): 1726 * jit/JIT.cpp: 1727 (JSC::JIT::privateCompileMainPass): 1728 (JSC::JIT::privateCompileSlowCases): 1729 (JSC::JIT::privateCompile): 1730 * jit/JIT.h: 1731 (JSC::MethodCallCompilationInfo::MethodCallCompilationInfo): 1732 * jit/JITOpcodes.cpp: 1733 * jit/JITPropertyAccess.cpp: 1734 (JSC::JIT::emit_op_method_check): 1735 (JSC::JIT::emitSlow_op_method_check): 1736 (JSC::JIT::emit_op_get_by_id): 1737 (JSC::JIT::emitSlow_op_get_by_id): 1738 (JSC::JIT::emit_op_put_by_id): 1739 (JSC::JIT::emitSlow_op_put_by_id): 1740 (JSC::JIT::compileGetByIdHotPath): 1741 (JSC::JIT::compileGetByIdSlowCase): 1742 (JSC::JIT::patchMethodCallProto): 1743 * jit/JITStubs.cpp: 1744 (JSC::JITStubs::cti_op_get_by_id_method_check): 1745 (JSC::JITStubs::cti_op_get_by_id_method_check_second): 1746 * jit/JITStubs.h: 1747 * jsc.cpp: 1748 (GlobalObject::GlobalObject): 1749 * parser/Nodes.cpp: 1750 (JSC::FunctionCallDotNode::emitBytecode): 1751 * runtime/Arguments.cpp: 1752 (JSC::Arguments::put): 1753 * runtime/ArrayConstructor.cpp: 1754 (JSC::ArrayConstructor::ArrayConstructor): 1755 * runtime/BooleanConstructor.cpp: 1756 (JSC::BooleanConstructor::BooleanConstructor): 1757 * runtime/DateConstructor.cpp: 1758 (JSC::DateConstructor::DateConstructor): 1759 * runtime/ErrorConstructor.cpp: 1760 (JSC::ErrorConstructor::ErrorConstructor): 1761 (JSC::constructError): 1762 * runtime/ErrorPrototype.cpp: 1763 (JSC::ErrorPrototype::ErrorPrototype): 1764 * runtime/FunctionConstructor.cpp: 1765 (JSC::FunctionConstructor::FunctionConstructor): 1766 * runtime/FunctionPrototype.cpp: 1767 (JSC::FunctionPrototype::FunctionPrototype): 1768 * runtime/InternalFunction.cpp: 1769 (JSC::InternalFunction::InternalFunction): 1770 * runtime/JSActivation.cpp: 1771 (JSC::JSActivation::put): 1772 (JSC::JSActivation::putWithAttributes): 1773 * runtime/JSByteArray.cpp: 1774 (JSC::JSByteArray::JSByteArray): 1775 * runtime/JSFunction.cpp: 1776 (JSC::JSFunction::JSFunction): 1777 (JSC::JSFunction::getOwnPropertySlot): 1778 * runtime/JSGlobalObject.cpp: 1779 (JSC::JSGlobalObject::putWithAttributes): 1780 (JSC::JSGlobalObject::reset): 1781 (JSC::JSGlobalObject::mark): 1782 * runtime/JSGlobalObject.h: 1783 (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): 1784 (JSC::JSGlobalObject::methodCallDummy): 1785 * runtime/JSObject.cpp: 1786 (JSC::JSObject::put): 1787 (JSC::JSObject::putWithAttributes): 1788 (JSC::JSObject::deleteProperty): 1789 (JSC::JSObject::defineGetter): 1790 (JSC::JSObject::defineSetter): 1791 (JSC::JSObject::getPropertyAttributes): 1792 (JSC::JSObject::getPropertySpecificFunction): 1793 (JSC::JSObject::putDirectFunction): 1794 (JSC::JSObject::putDirectFunctionWithoutTransition): 1795 * runtime/JSObject.h: 1796 (JSC::getJSFunction): 1797 (JSC::JSObject::getDirectLocation): 1798 (JSC::JSObject::putDirect): 1799 (JSC::JSObject::putDirectWithoutTransition): 1800 * runtime/LiteralParser.cpp: 1801 (JSC::LiteralParser::parseObject): 1802 * runtime/Lookup.cpp: 1803 (JSC::setUpStaticFunctionSlot): 1804 * runtime/Lookup.h: 1805 (JSC::lookupPut): 1806 * runtime/MathObject.cpp: 1807 (JSC::MathObject::MathObject): 1808 * runtime/NativeErrorConstructor.cpp: 1809 (JSC::NativeErrorConstructor::NativeErrorConstructor): 1810 (JSC::NativeErrorConstructor::construct): 1811 * runtime/NativeErrorPrototype.cpp: 1812 (JSC::NativeErrorPrototype::NativeErrorPrototype): 1813 * runtime/NumberConstructor.cpp: 1814 (JSC::NumberConstructor::NumberConstructor): 1815 * runtime/ObjectConstructor.cpp: 1816 (JSC::ObjectConstructor::ObjectConstructor): 1817 * runtime/PropertyMapHashTable.h: 1818 (JSC::PropertyMapEntry::PropertyMapEntry): 1819 * runtime/PrototypeFunction.cpp: 1820 (JSC::PrototypeFunction::PrototypeFunction): 1821 * runtime/PutPropertySlot.h: 1822 (JSC::PutPropertySlot::): 1823 (JSC::PutPropertySlot::PutPropertySlot): 1824 (JSC::PutPropertySlot::setNewProperty): 1825 (JSC::PutPropertySlot::setDespecifyFunctionProperty): 1826 (JSC::PutPropertySlot::isCacheable): 1827 (JSC::PutPropertySlot::cachedOffset): 1828 * runtime/RegExpConstructor.cpp: 1829 (JSC::RegExpConstructor::RegExpConstructor): 1830 * runtime/StringConstructor.cpp: 1831 (JSC::StringConstructor::StringConstructor): 1832 * runtime/StringPrototype.cpp: 1833 (JSC::StringPrototype::StringPrototype): 1834 * runtime/Structure.cpp: 1835 (JSC::Structure::Structure): 1836 (JSC::Structure::~Structure): 1837 (JSC::Structure::materializePropertyMap): 1838 (JSC::Structure::addPropertyTransitionToExistingStructure): 1839 (JSC::Structure::addPropertyTransition): 1840 (JSC::Structure::changeFunctionTransition): 1841 (JSC::Structure::addPropertyWithoutTransition): 1842 (JSC::Structure::get): 1843 (JSC::Structure::despecifyFunction): 1844 (JSC::Structure::put): 1845 (JSC::Structure::remove): 1846 * runtime/Structure.h: 1847 (JSC::Structure::get): 1848 (JSC::Structure::specificFunction): 1849 * runtime/StructureTransitionTable.h: 1850 (JSC::StructureTransitionTableHashTraits::emptyValue): 1851 * wtf/Platform.h: 1852 1853 2009-05-22 Brent Fulgham <bfulgham (a] webkit.org> 1854 1855 Reviewed by Steve Falkenburg. 1856 1857 https://bugs.webkit.org/show_bug.cgi?id=25950 1858 JavaScriptCore Fails to build on Windows (Cairo) due to CoreFoundation 1859 link requirement. 1860 1861 Modify project to add new Debug_CFLite and Release_CFLite targets. These 1862 use the new JavaScriptCoreCFLite.vsprops to link against CFLite.dll. 1863 Existing projects are changed to use the new JavaScriptCoreCF.vsprops 1864 to link against CoreFoundation.dll. 1865 1866 The JavaScriptCoreCommon.vsprops is modified to remove the link 1867 against CoreFoundation.dll. 1868 1869 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 1870 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCF.vsprops: Added. 1871 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCFLite.vsprops: Added. 1872 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: 1873 1874 2009-05-22 Dominik Rttsches <dominik.roettsches (a] access-company.com> 1875 1876 Reviewed by Gustavo Noronha. 1877 1878 https://bugs.webkit.org/show_bug.cgi?id=15914 1879 [GTK] Implement Unicode functionality using GLib 1880 1881 Original patch by Jrg Billeter and Naiem Shaik. 1882 Implementing WTF Unicode functionality based on GLib. 1883 1884 * GNUmakefile.am: 1885 * wtf/unicode/Unicode.h: 1886 * wtf/unicode/glib: Added. 1887 * wtf/unicode/glib/UnicodeGLib.cpp: Added. 1888 (WTF::Unicode::foldCase): 1889 (WTF::Unicode::toLower): 1890 (WTF::Unicode::toUpper): 1891 (WTF::Unicode::direction): 1892 (WTF::Unicode::umemcasecmp): 1893 * wtf/unicode/glib/UnicodeGLib.h: Added. 1894 (WTF::Unicode::): 1895 (WTF::Unicode::toLower): 1896 (WTF::Unicode::toUpper): 1897 (WTF::Unicode::toTitleCase): 1898 (WTF::Unicode::isArabicChar): 1899 (WTF::Unicode::isFormatChar): 1900 (WTF::Unicode::isSeparatorSpace): 1901 (WTF::Unicode::isPrintableChar): 1902 (WTF::Unicode::isDigit): 1903 (WTF::Unicode::isPunct): 1904 (WTF::Unicode::mirroredChar): 1905 (WTF::Unicode::category): 1906 (WTF::Unicode::isLower): 1907 (WTF::Unicode::digitValue): 1908 (WTF::Unicode::combiningClass): 1909 (WTF::Unicode::decompositionType): 1910 * wtf/unicode/glib/UnicodeMacrosFromICU.h: Added. 1911 1912 2009-05-21 Xan Lopez <xlopez (a] igalia.com> 1913 1914 Unreviewed build fix. 1915 1916 Add MacroAssemblerCodeRef.h to file list. 1917 1918 * GNUmakefile.am: 1919 1920 2009-05-21 Gavin Barraclough <barraclough (a] apple.com> 1921 1922 Reviewed by Darin Adler. 1923 Addition of MacroAssemblerCodeRef.h rubber stamped by Geoff Garen. 1924 1925 Refactor JIT code-handle objects. The representation of generated code is currently 1926 a bit of a mess. We have a class JITCode which wraps the pointer to a block of 1927 generated code, but this object does not reference the executable pool meaning that 1928 external events (the pool being derefed) could make the pointer become invalid. 1929 To overcome this both the JIT and Yarr implement further (and similar) objects to 1930 wrap the code pointer with a RefPtr to the pool. To add to the mire, as well as the 1931 CodeBlock containing a handle onto the code the FunctionBodyNode also contains a 1932 copy of the code pointer which is used almost (but not entirely) uniquely to access 1933 the JIT code for a function. 1934 1935 Rationalization of all this: 1936 1937 * Add a new type 'MacroAssembler::CodeRef' as a handle for a block of JIT generated code. 1938 * Change the JIT & Yarr to internally handle code using CodeRefs. 1939 * Move the CodeRef (formerly anow defunct JITCodeRef) from CodeBlock to its owner node. 1940 * Remove the (now) redundant code pointer from FunctionBodyNode. 1941 1942 While tidying this up I've made the PatchBuffer return code in new allocations using a CodeRef, 1943 and have enforced an interface that the PatchBuffer will always be used, and 'finalizeCode()' or 1944 'finalizeCodeAddendum()' will always be called exactly once on the PatchBuffer to complete code generation. 1945 1946 This gives us a potentially useful hook ('PatchBuffer::performFinalization()') at the end of generation, 1947 which may have a number of uses. It may be helpful should we wish to switch our generation 1948 model to allow RW/RX exclusive memory, and it may be useful on non-cache-coherent platforms to 1949 give us an oportunity to cache flush as necessary. 1950 1951 No performance impact. 1952 1953 * assembler/AbstractMacroAssembler.h: 1954 (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline): 1955 (JSC::AbstractMacroAssembler::CodeRef::CodeRef): 1956 (JSC::AbstractMacroAssembler::CodeRef::trampolineAt): 1957 (JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer): 1958 (JSC::AbstractMacroAssembler::PatchBuffer::~PatchBuffer): 1959 (JSC::AbstractMacroAssembler::PatchBuffer::link): 1960 (JSC::AbstractMacroAssembler::PatchBuffer::linkTailRecursive): 1961 (JSC::AbstractMacroAssembler::PatchBuffer::patch): 1962 (JSC::AbstractMacroAssembler::PatchBuffer::complete): 1963 (JSC::AbstractMacroAssembler::PatchBuffer::finalize): 1964 (JSC::AbstractMacroAssembler::PatchBuffer::entry): 1965 * bytecode/CodeBlock.cpp: 1966 (JSC::CodeBlock::CodeBlock): 1967 (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): 1968 (JSC::CodeBlock::setJITCode): 1969 * bytecode/CodeBlock.h: 1970 (JSC::CodeBlock::getBytecodeIndex): 1971 (JSC::CodeBlock::executablePool): 1972 * interpreter/CallFrameClosure.h: 1973 * interpreter/Interpreter.cpp: 1974 (JSC::Interpreter::execute): 1975 (JSC::Interpreter::prepareForRepeatCall): 1976 * jit/JIT.cpp: 1977 (JSC::JIT::privateCompile): 1978 (JSC::JIT::privateCompileCTIMachineTrampolines): 1979 (JSC::JIT::linkCall): 1980 * jit/JIT.h: 1981 * jit/JITCode.h: 1982 (JSC::JITCode::JITCode): 1983 (JSC::JITCode::operator bool): 1984 (JSC::JITCode::addressForCall): 1985 (JSC::JITCode::offsetOf): 1986 (JSC::JITCode::execute): 1987 (JSC::JITCode::size): 1988 (JSC::JITCode::executablePool): 1989 (JSC::JITCode::HostFunction): 1990 * jit/JITPropertyAccess.cpp: 1991 (JSC::JIT::privateCompilePutByIdTransition): 1992 (JSC::JIT::privateCompilePatchGetArrayLength): 1993 (JSC::JIT::privateCompileGetByIdProto): 1994 (JSC::JIT::privateCompileGetByIdSelfList): 1995 (JSC::JIT::privateCompileGetByIdProtoList): 1996 (JSC::JIT::privateCompileGetByIdChainList): 1997 (JSC::JIT::privateCompileGetByIdChain): 1998 * jit/JITStubs.cpp: 1999 (JSC::JITStubs::cti_vm_dontLazyLinkCall): 2000 (JSC::JITStubs::cti_vm_lazyLinkCall): 2001 * parser/Nodes.cpp: 2002 (JSC::ProgramNode::generateJITCode): 2003 (JSC::EvalNode::generateJITCode): 2004 (JSC::FunctionBodyNode::FunctionBodyNode): 2005 (JSC::FunctionBodyNode::createNativeThunk): 2006 (JSC::FunctionBodyNode::generateJITCode): 2007 * parser/Nodes.h: 2008 (JSC::ScopeNode::generatedJITCode): 2009 (JSC::ScopeNode::getExecutablePool): 2010 (JSC::ScopeNode::setJITCode): 2011 (JSC::ProgramNode::jitCode): 2012 (JSC::EvalNode::jitCode): 2013 (JSC::FunctionBodyNode::jitCode): 2014 * runtime/RegExp.cpp: 2015 (JSC::RegExp::match): 2016 * yarr/RegexJIT.cpp: 2017 (JSC::Yarr::RegexGenerator::compile): 2018 (JSC::Yarr::jitCompileRegex): 2019 (JSC::Yarr::executeRegex): 2020 * yarr/RegexJIT.h: 2021 (JSC::Yarr::RegexCodeBlock::RegexCodeBlock): 2022 (JSC::Yarr::RegexCodeBlock::pcreFallback): 2023 (JSC::Yarr::RegexCodeBlock::setFallback): 2024 (JSC::Yarr::RegexCodeBlock::operator bool): 2025 (JSC::Yarr::RegexCodeBlock::set): 2026 (JSC::Yarr::RegexCodeBlock::execute): 2027 2028 2009-05-21 Oliver Hunt <oliver (a] apple.com> 2029 2030 Reviewed by Maciej Stachowiak. 2031 2032 <rdar://problem/6910264> REGRESSION: Cached DOM global object property access fails in browser (25921) 2033 <https://bugs.webkit.org/show_bug.cgi?id=25921> 2034 2035 When caching properties on the global object we need to ensure that we're 2036 not attempting to cache through a shell object. 2037 2038 * interpreter/Interpreter.cpp: 2039 (JSC::Interpreter::resolveGlobal): 2040 * jit/JITStubs.cpp: 2041 (JSC::JITStubs::cti_op_resolve_global): 2042 2043 2009-05-21 Steve Falkenburg <sfalken (a] apple.com> 2044 2045 Windows build fix. 2046 2047 * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: 2048 2049 2009-05-21 Cameron Zwarich <zwarich (a] apple.com> 2050 2051 Reviewed by Mark Rowe. 2052 2053 Bug 25945: Add support for MADV_FREE to TCMalloc 2054 <https://bugs.webkit.org/show_bug.cgi?id=25945> 2055 <rdar://problem/6910754> 2056 2057 Add support for MADV_FREE to TCMalloc_SystemRelease for platforms that 2058 don't also support MADV_FREE_REUSE. The code is identical to the MADV_DONTNEED 2059 case except for the advice passed to madvise(), so combining the two cases 2060 makes the most sense. 2061 2062 * wtf/Platform.h: Only define HAVE_MADV_FREE when not building on Tiger or 2063 Leopard, because while it is defined on these platforms it actually does 2064 nothing. 2065 * wtf/TCSystemAlloc.cpp: 2066 (TCMalloc_SystemRelease): use MADV_FREE if it is available; otherwise use 2067 MADV_DONTNEED. 2068 2069 2009-05-21 Mark Rowe <mrowe (a] apple.com> 2070 2071 Reviewed by Oliver Hunt. 2072 2073 Fix <https://bugs.webkit.org/show_bug.cgi?id=25917> / <rdar://problem/6910066>. 2074 Bug 25917: REGRESSION (r43559?): Javascript debugger crashes when pausing page 2075 2076 The debugger currently retrieves the arguments object from an activation rather than pulling 2077 it from a call frame. This is unreliable to due to the recent optimization to lazily create 2078 the arguments object. In the long-term it should stop doing that (<rdar://problem/6911886>), 2079 but for now we force eager creation of the arguments object when debugging. 2080 2081 * bytecompiler/BytecodeGenerator.cpp: 2082 (JSC::BytecodeGenerator::BytecodeGenerator): 2083 2084 2009-05-21 Cameron Zwarich <zwarich (a] apple.com> 2085 2086 Reviewed by Maciej Stachowiak. 2087 2088 Bug 25912: Harden NumberPrototype.cpp by removing use of strcpy() 2089 <https://bugs.webkit.org/show_bug.cgi?id=25912> 2090 2091 This causes no change on SunSpider. 2092 2093 * runtime/NumberPrototype.cpp: 2094 (JSC::integerPartNoExp): replace strcpy() with memcpy(), ASSERT that the 2095 temporary buffer has sufficient space to store the result, and move the 2096 explicit null-termination closer to the memcpy() for easier visual inspection 2097 of the code. 2098 (JSC::fractionalPartToString): replace strcpy() with memcpy(), and ASSERT 2099 that the temporary buffer has sufficient space to store the result. There 2100 is no explicit null-termination because this is done by the caller. The 2101 same is already true for exponentialPartToString(). 2102 (JSC::numberProtoFuncToExponential): replace strcpy() with memcpy(), explicitly 2103 null-terminate the result, and ASSERT that the temporary buffer has sufficient 2104 space to store the result. 2105 2106 2009-05-20 Sam Weinig <sam (a] webkit.org> 2107 2108 Reviewed by Cameron Zwarich. 2109 2110 Cleanup the JSGlobalData when exiting early with the usage statement in jsc. 2111 2112 * jsc.cpp: 2113 (printUsageStatement): 2114 (parseArguments): 2115 (jscmain): 2116 2117 2009-05-20 Stephanie Lewis <slewis (a] apple.com> 2118 2119 Update the order files. <rdar://problem/6881750> Generate new order files. 2120 2121 * JavaScriptCore.order: 2122 2123 2009-05-19 Kenneth Rohde Christiansen <kenneth.christiansen (a] openbossa.org> 2124 2125 Reviewed by Simon Hausmann. 2126 2127 Replace WREC with YARR + YARR_JIT for the Qt port. This is only 2128 used when compiled with JIT support for now, so it is a drop-in 2129 replacement for the WREC usage. Still including the wrec headers 2130 as they are being referred from RegExp.h, though the contents of 2131 that header it protected by "#if ENABLE(WREC)". 2132 2133 * JavaScriptCore.pri: 2134 2135 2009-05-20 Xan Lopez <xlopez (a] igalia.com> 2136 2137 Reviewed by Eric Seidel. 2138 2139 Fix GTK debug build. 2140 2141 The function dumpDisjunction, compiled with debug enabled, uses 2142 printf, which needs stdio.h to be included. 2143 2144 * yarr/RegexInterpreter.cpp: 2145 2146 2009-05-20 Laszlo Gombos <laszlo.1.gombos (a] nokia.com> 2147 2148 Reviewed by George Staikos. 2149 2150 BUG 25843: [Qt] Remove qt-port build flag 2151 <https://bugs.webkit.org/show_bug.cgi?id=25843> 2152 2153 * JavaScriptCore.pro: 2154 2155 2156 2009-05-19 Geoffrey Garen <ggaren (a] apple.com> 2157 2158 Windows build fix. 2159 2160 * interpreter/RegisterFile.cpp: 2161 (JSC::RegisterFile::releaseExcessCapacity): Copy-paste typo. 2162 2163 2009-05-19 Geoffrey Garen <ggaren (a] apple.com> 2164 2165 Reviewed by Sam Weinig. 2166 2167 Fixed <rdar://problem/6885680> CrashTracer: [USER] 1 crash in Install 2168 Mac OS X at <unknown binary> 0x9274241c 2169 2170 (Original patch by Joe Sokol and Ronnie Misra.) 2171 2172 SunSpider says 1.004x faster. 2173 2174 * interpreter/RegisterFile.cpp: 2175 (JSC::RegisterFile::releaseExcessCapacity): Instead of doing complicated 2176 math that sometimes used to overflow, just release the full range of the 2177 register file. 2178 2179 * interpreter/RegisterFile.h: 2180 (JSC::isPageAligned): 2181 (JSC::RegisterFile::RegisterFile): Added ASSERTs to verify that it's 2182 safe to release the full range of the register file. 2183 2184 (JSC::RegisterFile::shrink): No need to releaseExcessCapacity() if the 2185 new end is not smaller than the old end. (Also, doing so used to cause 2186 numeric overflow, unmapping basically the whole process from memory.) 2187 2188 2009-05-19 Oliver Hunt <oliver (a] apple.com> 2189 2190 RS=Mark Rowe. 2191 2192 <rdar://problem/6888393> REGRESSION: Start Debugging JavaScript crashes browser (nightly builds only?) 2193 <https://bugs.webkit.org/show_bug.cgi?id=25717> 2194 2195 Remove JSC_FAST_CALL as it wasn't gaining us anything, and was 2196 resulting in weird bugs in the nightly builds. 2197 2198 * parser/Nodes.cpp: 2199 * parser/Nodes.h: 2200 (JSC::ExpressionNode::isNumber): 2201 (JSC::ExpressionNode::isString): 2202 (JSC::ExpressionNode::isNull): 2203 (JSC::ExpressionNode::isPure): 2204 (JSC::ExpressionNode::isLocation): 2205 (JSC::ExpressionNode::isResolveNode): 2206 (JSC::ExpressionNode::isBracketAccessorNode): 2207 (JSC::ExpressionNode::isDotAccessorNode): 2208 (JSC::ExpressionNode::isFuncExprNode): 2209 (JSC::ExpressionNode::isSimpleArray): 2210 (JSC::ExpressionNode::isAdd): 2211 (JSC::ExpressionNode::resultDescriptor): 2212 (JSC::StatementNode::firstLine): 2213 (JSC::StatementNode::lastLine): 2214 (JSC::StatementNode::isEmptyStatement): 2215 (JSC::StatementNode::isReturnNode): 2216 (JSC::StatementNode::isExprStatement): 2217 (JSC::StatementNode::isBlock): 2218 (JSC::NullNode::isNull): 2219 (JSC::BooleanNode::isPure): 2220 (JSC::NumberNode::value): 2221 (JSC::NumberNode::setValue): 2222 (JSC::NumberNode::isNumber): 2223 (JSC::NumberNode::isPure): 2224 (JSC::StringNode::isPure): 2225 (JSC::StringNode::isString): 2226 (JSC::ResolveNode::identifier): 2227 (JSC::ResolveNode::isLocation): 2228 (JSC::ResolveNode::isResolveNode): 2229 (JSC::BracketAccessorNode::isLocation): 2230 (JSC::BracketAccessorNode::isBracketAccessorNode): 2231 (JSC::DotAccessorNode::base): 2232 (JSC::DotAccessorNode::identifier): 2233 (JSC::DotAccessorNode::isLocation): 2234 (JSC::DotAccessorNode::isDotAccessorNode): 2235 (JSC::TypeOfResolveNode::identifier): 2236 (JSC::AddNode::isAdd): 2237 (JSC::BlockNode::isBlock): 2238 (JSC::EmptyStatementNode::isEmptyStatement): 2239 (JSC::ExprStatementNode::isExprStatement): 2240 (JSC::ReturnNode::isReturnNode): 2241 (JSC::ScopeNode::sourceURL): 2242 (JSC::ProgramNode::bytecode): 2243 (JSC::EvalNode::bytecode): 2244 (JSC::FunctionBodyNode::parameters): 2245 (JSC::FunctionBodyNode::toSourceString): 2246 (JSC::FunctionBodyNode::bytecode): 2247 (JSC::FuncExprNode::isFuncExprNode): 2248 2249 2009-05-19 Maciej Stachowiak <mjs (a] apple.com> 2250 2251 Reviewed by Gavin Barraclough. 2252 2253 - speed up string comparison, especially for short strings 2254 2255 ~1% on SunSpider 2256 2257 * JavaScriptCore.exp: 2258 * runtime/UString.cpp: 2259 * runtime/UString.h: 2260 (JSC::operator==): Inline UString's operator==, since it is called from 2261 hot places in the runtime. Also, specialize 2-char strings in a similar way to 2262 1-char, since we're taking the hit of a switch anyway. 2263 2264 2009-05-18 Maciej Stachowiak <mjs (a] apple.com> 2265 2266 Reviewed by Gavin Barraclough. 2267 2268 - for polymorphic prototype lookups, increase the number of slots from 4 to 8 2269 2270 ~4% faster on v8 raytrace benchmark 2271 2272 * bytecode/Instruction.h: 2273 2274 2009-05-18 Maciej Stachowiak <mjs (a] apple.com> 2275 2276 Reviewed by Oliver Hunt. 2277 2278 - tighten up the code for the load_varargs stub 2279 2280 ~1-2% on v8-raytrace 2281 2282 * jit/JITStubs.cpp: 2283 (JSC::JITStubs::cti_op_load_varargs): Hoist some loop invariants that 2284 the compiler didn't feel like hoisting for us. Remove unneeded exception check. 2285 2286 2009-05-18 Maciej Stachowiak <mjs (a] apple.com> 2287 2288 Reviewed by Geoff Garen. 2289 2290 - Improve code generation for access to prototype properties 2291 2292 ~0.4% speedup on SunSpider. 2293 2294 Based on a suggestion from Geoff Garen. 2295 2296 * jit/JIT.h: 2297 * jit/JITPropertyAccess.cpp: 2298 (JSC::JIT::compileGetDirectOffset): 2299 (JSC::JIT::privateCompileGetByIdProto): 2300 (JSC::JIT::privateCompileGetByIdProtoList): 2301 (JSC::JIT::privateCompileGetByIdChainList): 2302 (JSC::JIT::privateCompileGetByIdChain): 2303 2304 2009-05-18 Gustavo Noronha Silva <gustavo.noronha (a] collabora.co.uk> 2305 2306 Reviewed by Gavin Barraclough. 2307 2308 Enable YARR, and disable WREC for GTK+. 2309 2310 * GNUmakefile.am: 2311 * yarr/RegexParser.h: 2312 2313 2009-05-18 Jan Michael Alonzo <jmalonzo (a] webkit.org> 2314 2315 Reviewed by Xan Lopez. 2316 2317 [Gtk] Various autotools build refactoring and fixes 2318 https://bugs.webkit.org/show_bug.cgi?id=25286 2319 2320 Add -no-install and -no-fast-install to programs and tests that we 2321 don't install. Also remove -O2 since this is already handled at 2322 configure time. 2323 2324 * GNUmakefile.am: 2325 2326 2009-05-17 Jan Michael Alonzo <jmalonzo (a] webkit.org> 2327 2328 Reviewed by Xan Lopez. 2329 2330 [Gtk] Various autotools build refactoring and fixes 2331 https://bugs.webkit.org/show_bug.cgi?id=25286 2332 2333 Add JavaScriptCore/ to JSC include path only since it's not 2334 required when building WebCore. 2335 2336 * GNUmakefile.am: 2337 2338 2009-05-17 Steve Falkenburg <sfalken (a] apple.com> 2339 2340 Windows build fix 2341 2342 * JavaScriptCore.vcproj/JavaScriptCore.make: 2343 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 2344 2345 2009-05-15 Gavin Barraclough <barraclough (a] apple.com> 2346 2347 Reviewed by Oliver Hunt. 2348 2349 Looking like MSVC doesn't like static variables in inline methods? 2350 Make the state of the SSE2 check a static variable on the class 2351 MacroAssemblerX86Common as a speculative build fix for Windows. 2352 2353 * assembler/MacroAssemblerX86Common.h: 2354 (JSC::MacroAssemblerX86Common::convertInt32ToDouble): 2355 (JSC::MacroAssemblerX86Common::branchDouble): 2356 (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32): 2357 (JSC::MacroAssemblerX86Common::isSSE2Present): 2358 (JSC::MacroAssemblerX86Common::): 2359 * jit/JIT.cpp: 2360 2361 2009-05-15 Adam Roben <aroben (a] apple.com> 2362 2363 Add some assembler headers to JavaScriptCore.vcproj 2364 2365 This is just a convenience for Windows developers. 2366 2367 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 2368 2369 2009-05-15 Gavin Barraclough <barraclough (a] apple.com> 2370 2371 Reviewed by Oliver Hunt. 2372 2373 Add FP support to the MacroAssembler, port JITArithmetic over to make use of this. Also add 2374 API to determine whether FP support is available 'MacroAssembler::supportsFloatingPoint()', 2375 FP is presently only supported on SSE2 platforms, not x87. On platforms where a suitable 2376 hardware FPU is not available 'supportsFloatingPoint()' may simply return false, and all 2377 other methods ASSERT_NOT_REACHED(). 2378 2379 * assembler/AbstractMacroAssembler.h: 2380 * assembler/MacroAssemblerX86.h: 2381 (JSC::MacroAssemblerX86::MacroAssemblerX86): 2382 (JSC::MacroAssemblerX86::branch32): 2383 (JSC::MacroAssemblerX86::branchPtrWithPatch): 2384 (JSC::MacroAssemblerX86::supportsFloatingPoint): 2385 * assembler/MacroAssemblerX86Common.h: 2386 (JSC::MacroAssemblerX86Common::): 2387 (JSC::MacroAssemblerX86Common::loadDouble): 2388 (JSC::MacroAssemblerX86Common::storeDouble): 2389 (JSC::MacroAssemblerX86Common::addDouble): 2390 (JSC::MacroAssemblerX86Common::subDouble): 2391 (JSC::MacroAssemblerX86Common::mulDouble): 2392 (JSC::MacroAssemblerX86Common::convertInt32ToDouble): 2393 (JSC::MacroAssemblerX86Common::branchDouble): 2394 (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32): 2395 (JSC::MacroAssemblerX86Common::branch32): 2396 (JSC::MacroAssemblerX86Common::branch16): 2397 (JSC::MacroAssemblerX86Common::branchTest32): 2398 (JSC::MacroAssemblerX86Common::branchAdd32): 2399 (JSC::MacroAssemblerX86Common::branchMul32): 2400 (JSC::MacroAssemblerX86Common::branchSub32): 2401 (JSC::MacroAssemblerX86Common::set32): 2402 (JSC::MacroAssemblerX86Common::setTest32): 2403 (JSC::MacroAssemblerX86Common::x86Condition): 2404 (JSC::MacroAssemblerX86Common::isSSE2Present): 2405 * assembler/MacroAssemblerX86_64.h: 2406 (JSC::MacroAssemblerX86_64::movePtrToDouble): 2407 (JSC::MacroAssemblerX86_64::moveDoubleToPtr): 2408 (JSC::MacroAssemblerX86_64::setPtr): 2409 (JSC::MacroAssemblerX86_64::branchPtr): 2410 (JSC::MacroAssemblerX86_64::branchTestPtr): 2411 (JSC::MacroAssemblerX86_64::branchAddPtr): 2412 (JSC::MacroAssemblerX86_64::branchSubPtr): 2413 (JSC::MacroAssemblerX86_64::supportsFloatingPoint): 2414 * assembler/X86Assembler.h: 2415 * jit/JIT.cpp: 2416 (JSC::JIT::JIT): 2417 * jit/JIT.h: 2418 * jit/JITArithmetic.cpp: 2419 (JSC::JIT::emit_op_rshift): 2420 (JSC::JIT::emitSlow_op_rshift): 2421 (JSC::JIT::emitSlow_op_jnless): 2422 (JSC::JIT::emitSlow_op_jnlesseq): 2423 (JSC::JIT::compileBinaryArithOp): 2424 (JSC::JIT::compileBinaryArithOpSlowCase): 2425 (JSC::JIT::emit_op_add): 2426 (JSC::JIT::emitSlow_op_add): 2427 (JSC::JIT::emit_op_mul): 2428 (JSC::JIT::emitSlow_op_mul): 2429 * jit/JITPropertyAccess.cpp: 2430 (JSC::JIT::privateCompilePutByIdTransition): 2431 2432 2009-05-15 Francisco Tolmasky <francisco (a] 280north.com> 2433 2434 BUG 25467: JavaScript debugger should use function.displayName as the function's name in the call stack 2435 <https://bugs.webkit.org/show_bug.cgi?id=25467> 2436 2437 Reviewed by Adam Roben. 2438 2439 * JavaScriptCore.exp: Added calculatedFunctionName 2440 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Added calculatedFunctionName 2441 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Added calculatedFunctionName 2442 * debugger/DebuggerCallFrame.cpp: Added calculatedFunctionName to match existing one in ProfileNode. 2443 (JSC::DebuggerCallFrame::calculatedFunctionName): 2444 * debugger/DebuggerCallFrame.h: Added calculatedFunctionName to match existing one in ProfileNode. 2445 2446 2009-05-14 Gavin Barraclough <barraclough (a] apple.com> 2447 2448 Build fix, not reviewed. 2449 2450 Quick fixes for JIT builds with OPTIMIZE flags disabled. 2451 2452 * jit/JITCall.cpp: 2453 (JSC::JIT::compileOpCall): 2454 (JSC::JIT::compileOpCallSlowCase): 2455 * jit/JITPropertyAccess.cpp: 2456 (JSC::JIT::compilePutByIdHotPath): 2457 2458 2009-05-14 Steve Falkenburg <sfalken (a] apple.com> 2459 2460 Back out incorrect Windows build fix 2461 2462 * JavaScriptCore.vcproj/JavaScriptCore.make: 2463 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 2464 2465 2009-05-14 Steve Falkenburg <sfalken (a] apple.com> 2466 2467 Windows build fix 2468 2469 * JavaScriptCore.vcproj/JavaScriptCore.make: 2470 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 2471 2472 2009-05-14 Adam Roben <aroben (a] apple.com> 2473 2474 Windows jsc build fix 2475 2476 r43648 modified jsc.vcproj's post-build event not to try to copy files 2477 that aren't present. Then r43661 mistakenly un-did that modification. 2478 This patch restores the modification from r43648, but puts the code in 2479 jscCommon.vsprops (where it should have been added in r43648). 2480 2481 * JavaScriptCore.vcproj/jsc/jsc.vcproj: Restored empty 2482 VCPostBuildEventTool tags. 2483 * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Modified the post-build 2484 event command line to match the one in jsc.vcproj from r43648. 2485 2486 2009-05-14 Laszlo Gombos <laszlo.1.gombos (a] nokia.com> 2487 2488 Reviewed by Darin Adler. 2489 2490 https://bugs.webkit.org/show_bug.cgi?id=25325 2491 2492 Make sure pthread_self() is declared before it gets called in Collector.cpp 2493 2494 * runtime/Collector.cpp: Include pthread.h in most Unix-like platforms 2495 (not just for OPENBSD) 2496 2497 2009-05-14 Mark Rowe <mrowe (a] apple.com> 2498 2499 Reviewed by Oliver Hunt. 2500 2501 Fix <https://bugs.webkit.org/show_bug.cgi?id=25785>. 2502 Bug 25785: Segfault in mark when using JSObjectMakeConstructor 2503 2504 * API/JSObjectRef.cpp: 2505 (JSObjectMakeConstructor): OpaqueJSClass::prototype can return 0. We need to use the default object prototype when it does. 2506 * API/tests/testapi.c: 2507 (main): Add a test case. 2508 * runtime/JSObject.h: 2509 (JSC::JSObject::putDirect): Add a clearer assertion for a null value. The assertion on the next line does catch this, 2510 but the cause of the failure is not clear from the assertion itself. 2511 2512 2009-05-14 Mark Rowe <mrowe (a] apple.com> 2513 2514 Rubber-stamped by Darin Adler. 2515 2516 <rdar://problem/6681868> When building with Xcode 3.1.3 should be using gcc 4.2 2517 2518 The meaning of XCODE_VERSION_ACTUAL is more sensible in newer versions of Xcode. 2519 Update our logic to select the compiler version to use the more appropriate XCODE_VERSION_MINOR 2520 if the version of Xcode supports it, and fall back to XCODE_VERSION_ACTUAL if not. 2521 2522 * Configurations/Base.xcconfig: 2523 2524 2009-05-14 Gavin Barraclough <barraclough (a] apple.com> 2525 2526 Reviewed by Geoff Garen. 2527 2528 Checking register file bounds should be a ptr comparison (m_end is a Register*). 2529 Also, the compare should be unsigned, pointers don'ts go negative. 2530 2531 * jit/JIT.cpp: 2532 (JSC::JIT::privateCompile): 2533 2534 2009-05-13 Gavin Barraclough <barraclough (a] apple.com> 2535 2536 Reviewed by Oliver Hunt. 2537 2538 Fix <rdar://problem/6882919> REGRESSION: page at Metroauto site crashes in cti_op_loop_if_less (25730) 2539 2540 op_loop_if_less (imm < op) was loading op into regT1, but in the slow path spills regT0. 2541 This leads to bad happen. 2542 2543 * jit/JITOpcodes.cpp: 2544 (JSC::JIT::emit_op_loop_if_less): 2545 (JSC::JIT::emitSlow_op_loop_if_less): 2546 2547 2009-05-13 Dmitry Titov <dimich (a] chromium.org> 2548 2549 Rubber-stamped by Mark Rowe. 2550 2551 https://bugs.webkit.org/show_bug.cgi?id=25746 2552 Revert http://trac.webkit.org/changeset/43507 which caused crash in PPC nightlies with Safari 4. 2553 2554 * JavaScriptCore.exp: 2555 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 2556 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 2557 * bytecode/SamplingTool.cpp: 2558 (JSC::SamplingThread::start): 2559 (JSC::SamplingThread::stop): 2560 * bytecode/SamplingTool.h: 2561 * wtf/CrossThreadRefCounted.h: 2562 (WTF::CrossThreadRefCounted::CrossThreadRefCounted): 2563 (WTF::::ref): 2564 (WTF::::deref): 2565 * wtf/Threading.h: 2566 * wtf/ThreadingNone.cpp: 2567 * wtf/ThreadingPthreads.cpp: 2568 (WTF::threadMapMutex): 2569 (WTF::initializeThreading): 2570 (WTF::threadMap): 2571 (WTF::identifierByPthreadHandle): 2572 (WTF::establishIdentifierForPthreadHandle): 2573 (WTF::pthreadHandleForIdentifier): 2574 (WTF::clearPthreadHandleForIdentifier): 2575 (WTF::createThreadInternal): 2576 (WTF::waitForThreadCompletion): 2577 (WTF::detachThread): 2578 (WTF::currentThread): 2579 * wtf/ThreadingWin.cpp: 2580 (WTF::threadMapMutex): 2581 (WTF::initializeThreading): 2582 (WTF::threadMap): 2583 (WTF::storeThreadHandleByIdentifier): 2584 (WTF::threadHandleForIdentifier): 2585 (WTF::clearThreadHandleForIdentifier): 2586 (WTF::createThreadInternal): 2587 (WTF::waitForThreadCompletion): 2588 (WTF::detachThread): 2589 (WTF::currentThread): 2590 * wtf/gtk/ThreadingGtk.cpp: 2591 (WTF::threadMapMutex): 2592 (WTF::initializeThreading): 2593 (WTF::threadMap): 2594 (WTF::identifierByGthreadHandle): 2595 (WTF::establishIdentifierForThread): 2596 (WTF::threadForIdentifier): 2597 (WTF::clearThreadForIdentifier): 2598 (WTF::createThreadInternal): 2599 (WTF::waitForThreadCompletion): 2600 (WTF::currentThread): 2601 * wtf/qt/ThreadingQt.cpp: 2602 (WTF::threadMapMutex): 2603 (WTF::threadMap): 2604 (WTF::identifierByQthreadHandle): 2605 (WTF::establishIdentifierForThread): 2606 (WTF::clearThreadForIdentifier): 2607 (WTF::threadForIdentifier): 2608 (WTF::initializeThreading): 2609 (WTF::createThreadInternal): 2610 (WTF::waitForThreadCompletion): 2611 (WTF::currentThread): 2612 2613 2009-05-13 Darin Adler <darin (a] apple.com> 2614 2615 Revert the parser arena change. It was a slowdown, not a speedup. 2616 Better luck next time (I'll break it up into pieces). 2617 2618 2009-05-13 Darin Adler <darin (a] apple.com> 2619 2620 Tiger build fix. 2621 2622 * parser/Grammar.y: Add back empty code blocks, needed by older 2623 versions of bison on certain rules. 2624 2625 2009-05-13 Steve Falkenburg <sfalken (a] apple.com> 2626 2627 Windows build fix. 2628 2629 * JavaScriptCore.vcproj/jsc/jsc.vcproj: 2630 2631 2009-05-13 Adam Roben <aroben (a] apple.com> 2632 2633 Windows build fixes after r43642 2634 2635 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 2636 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 2637 Updated. 2638 2639 * debugger/Debugger.cpp: 2640 * runtime/ArrayConstructor.cpp: 2641 * runtime/JSArray.cpp: 2642 * runtime/RegExp.cpp: 2643 * runtime/RegExpConstructor.cpp: 2644 * runtime/RegExpPrototype.cpp: 2645 * runtime/StringPrototype.cpp: 2646 Added missing #includes. 2647 2648 2009-05-13 Darin Adler <darin (a] apple.com> 2649 2650 Reviewed by Cameron Zwarich. 2651 2652 Bug 25674: syntax tree nodes should use arena allocation 2653 https://bugs.webkit.org/show_bug.cgi?id=25674 2654 2655 Step 3: Add some actual arena allocation. About 1% SunSpider speedup. 2656 2657 * JavaScriptCore.exp: Updated. 2658 2659 * bytecompiler/BytecodeGenerator.cpp: 2660 (JSC::BytecodeGenerator::BytecodeGenerator): Updated since VarStack 2661 contains const Identifier* now. 2662 (JSC::BytecodeGenerator::emitPushNewScope): Updated to take a const 2663 Identifier&. 2664 * bytecompiler/BytecodeGenerator.h: Ditto 2665 2666 * bytecompiler/SegmentedVector.h: Added isEmpty. 2667 2668 * debugger/Debugger.cpp: 2669 (JSC::Debugger::recompileAllJSFunctions): Moved this function here from 2670 WebCore so WebCore doesn't need the details of FunctionBodyNode. 2671 * debugger/Debugger.h: Ditto. 2672 2673 * interpreter/Interpreter.cpp: 2674 (JSC::Interpreter::execute): Updated since VarStack contains const 2675 Identifier* now. 2676 2677 * jit/JITStubs.cpp: 2678 (JSC::JITStubs::cti_vm_lazyLinkCall): Call isHostFunction on the body 2679 rather than on the function object, since we can't easily have inlined 2680 access to the FunctionBodyNode in JSFunction.h since WebCore needs 2681 access to that header. 2682 (JSC::JITStubs::cti_op_construct_JSConstruct): Ditto. 2683 * profiler/Profiler.cpp: 2684 (JSC::Profiler::createCallIdentifier): Ditto. 2685 2686 * parser/Grammar.y: Use JSGlobalData* to pass the global data pointer 2687 around whenever possible instead of using void*. Changed 2688 SET_EXCEPTION_LOCATION from a macro to an inline function. Marked 2689 the structure-creating functions inline. Changed the VarStack to use 2690 identifier pointers instead of actual identifiers. This takes 2691 advantage of the fact that all identifier pointers come from the 2692 arena and avoids reference count churn. Changed Identifier* to 2693 const Identifier* to make sure we don't modify any by accident. 2694 Used identifiers for regular expression strings too, using the new 2695 scanRegExp that has out parameters instead of the old one that relied 2696 on side effects in the Lexer. Move the creation of numeric identifiers 2697 out of this file and into the PropertyNode constructor. 2698 2699 * parser/Lexer.cpp: 2700 (JSC::Lexer::setCode): Pass in ParserArena, used for identifiers. 2701 (JSC::Lexer::makeIdentifier): Changed return type to const Identifier* 2702 and changed to call ParserArena. 2703 (JSC::Lexer::scanRegExp): Added out arguments that are const Identifier* 2704 as well as a prefix character argument so we can handle the /= case 2705 without a string append. 2706 (JSC::Lexer::skipRegExp): Added. Skips a regular expression without 2707 allocating Identifier objects. 2708 (JSC::Lexer::clear): Removed the code to manage m_identifiers, m_pattern, 2709 and m_flags, and added code to set m_arena to 0. 2710 * parser/Lexer.h: Updated for changes above. 2711 2712 * parser/NodeConstructors.h: 2713 (JSC::ParserArenaFreeable::operator new): Added. Calls allocateFreeable 2714 on the arena. 2715 (JSC::ParserArenaDeletable::operator new): Changed to call the 2716 allocateDeletable function on the arena instead of deleteWithArena. 2717 (JSC::RegExpNode::RegExpNode): Changed arguments to Identifier instead 2718 of UString since these come from the parser which makes identifiers. 2719 (JSC::PropertyNode::PropertyNode): Added new constructor that makes 2720 numeric identifiers. Some day we might want to optimize this for 2721 integers so it doesn't create a string for each one. 2722 (JSC::ContinueNode::ContinueNode): Initialize m_ident to nullIdentifier 2723 since it's now a const Identifier& so it can't be left uninitialized. 2724 (JSC::BreakNode::BreakNode): Ditto. 2725 (JSC::CaseClauseNode::CaseClauseNode): Updated to use SourceElements* 2726 to keep track of the statements rather than a separate statement vector. 2727 (JSC::BlockNode::BlockNode): Ditto. 2728 (JSC::ForInNode::ForInNode): Initialize m_ident to nullIdentifier. 2729 2730 * parser/Nodes.cpp: Moved the comment explaining emitBytecode in here. 2731 It seemed strangely out of place in the header. 2732 (JSC::ThrowableExpressionData::emitThrowError): Added an overload for 2733 UString as well as Identifier. 2734 (JSC::SourceElements::singleStatement): Added. 2735 (JSC::SourceElements::lastStatement): Added. 2736 (JSC::RegExpNode::emitBytecode): Updated since the pattern and flags 2737 are now Identifier instead of UString. Also changed the throwError code 2738 to use the substitution mechanism instead of doing a string append. 2739 (JSC::SourceElements::emitBytecode): Added. Replaces the old 2740 statementListEmitCode function, since we now keep the SourceElements 2741 objects around. 2742 (JSC::BlockNode::lastStatement): Added. 2743 (JSC::BlockNode::emitBytecode): Changed to use emitBytecode instead of 2744 statementListEmitCode. 2745 (JSC::CaseClauseNode::emitBytecode): Added. 2746 (JSC::CaseBlockNode::emitBytecodeForBlock): Changed to use emitBytecode 2747 instead of statementListEmitCode. 2748 (JSC::ScopeNodeData::ScopeNodeData): Changed to store the 2749 SourceElements* instead of using releaseContentsIntoVector. 2750 (JSC::ScopeNode::emitStatementsBytecode): Added. 2751 (JSC::ScopeNode::singleStatement): Added. 2752 (JSC::ProgramNode::emitBytecode): Call emitStatementsBytecode instead 2753 of statementListEmitCode. 2754 (JSC::EvalNode::emitBytecode): Ditto. 2755 (JSC::EvalNode::generateBytecode): Removed code to clear the children 2756 vector. This optimization is no longer possible since everything is in 2757 a single arena. 2758 (JSC::FunctionBodyNode::emitBytecode): Call emitStatementsBytecode 2759 insetad of statementListEmitCode and check for the return node using 2760 the new functions. 2761 2762 * parser/Nodes.h: Changed VarStack to store const Identifier* instead 2763 of Identifier and rely on the arena to control lifetime. Added a new 2764 ParserArenaFreeable class. Made ParserArenaDeletable inherit from 2765 FastAllocBase instead of having its own operator new. Base the Node 2766 class on ParserArenaFreeable. Changed the various Node classes 2767 to use const Identifier& instead of Identifier to avoid the need to 2768 call their destructors and allow them to function as "freeable" in the 2769 arena. Removed extraneous JSC_FAST_CALL on definitions of inline functions. 2770 Changed ElementNode, PropertyNode, ArgumentsNode, ParameterNode, 2771 CaseClauseNode, ClauseListNode, and CaseBlockNode to use ParserArenaFreeable 2772 as a base class since they do not descend from Node. Eliminated the 2773 StatementVector type and instead have various classes use SourceElements* 2774 instead of StatementVector. This prevents those classes from having th 2775 use ParserArenaDeletable to make sure the vector destructor is called. 2776 2777 * parser/Parser.cpp: 2778 (JSC::Parser::parse): Pass the arena to the lexer. 2779 2780 * parser/Parser.h: Added an include of ParserArena.h, which is no longer 2781 included by Nodes.h. 2782 2783 * parser/ParserArena.cpp: 2784 (JSC::ParserArena::ParserArena): Added. Initializes the new members, 2785 m_freeableMemory, m_freeablePoolEnd, and m_identifiers. 2786 (JSC::ParserArena::freeablePool): Added. Computes the pool pointer, 2787 since we store only the current pointer and the end of pool pointer. 2788 (JSC::ParserArena::deallocateObjects): Added. Contains the common 2789 memory-deallocation logic used by both the destructor and the 2790 reset function. 2791 (JSC::ParserArena::~ParserArena): Changed to call deallocateObjects. 2792 (JSC::ParserArena::reset): Ditto. Also added code to zero out the 2793 new structures, and switched to use clear() instead of shrink(0) since 2794 we don't really reuse arenas. 2795 (JSC::ParserArena::makeNumericIdentifier): Added. 2796 (JSC::ParserArena::allocateFreeablePool): Added. Used when the pool 2797 is empty. 2798 (JSC::ParserArena::isEmpty): Added. No longer inline, which is fine 2799 since this is used only for assertions at the moment. 2800 2801 * parser/ParserArena.h: Added an actual arena of "freeable" objects, 2802 ones that don't need destructors to be called. Also added the segmented 2803 vector of identifiers that used to be in the Lexer. 2804 2805 * runtime/FunctionConstructor.cpp: 2806 (JSC::extractFunctionBody): Use singleStatement function rather than 2807 getting at a StatementVector. 2808 2809 * runtime/FunctionPrototype.cpp: 2810 (JSC::functionProtoFuncToString): Call isHostFunction on the body 2811 rather than the function object. 2812 2813 * runtime/JSFunction.cpp: 2814 (JSC::JSFunction::JSFunction): Moved the structure version of this in 2815 here from the header. It's not hot enough that it needs to be inlined. 2816 (JSC::JSFunction::isHostFunction): Moved this in here from the header. 2817 It's now a helper to be used only within the class. 2818 (JSC::JSFunction::setBody): Moved this in here. It's not hot enough that 2819 it needs to be inlined, and we want to be able to compile the header 2820 without the definition of FunctionBodyNode. 2821 2822 * runtime/JSFunction.h: Eliminated the include of "Nodes.h". This was 2823 exposing too much JavaScriptCore dependency to WebCore. Because of this 2824 change and some changes made to WebCore, we could now export a lot fewer 2825 headers from JavaScriptCore, but I have not done that yet in this check-in. 2826 Made a couple functions non-inline. Removes some isHostFunction() assertions. 2827 2828 * wtf/FastAllocBase.h: Added the conventional using statements we use in 2829 WTF so we can use identifiers from the WTF namespace without explicit 2830 namespace qualification or namespace directive. This is the usual WTF style, 2831 although it's unconventional in the C++ world. We use the namespace primarily 2832 for link-time disambiguation, not compile-time. 2833 2834 * wtf/FastMalloc.cpp: Fixed an incorrect comment. 2835 2836 2009-05-13 Xan Lopez <xlopez (a] igalia.com> 2837 2838 Unreviewed build fix: add JITStubCall.h to files list. 2839 2840 * GNUmakefile.am: 2841 2842 2009-05-13 Ariya Hidayat <ariya.hidayat (a] nokia.com> 2843 2844 Unreviewed build fix, as suggested by Yael Aharon <yael.aharon (a] nokia.com>. 2845 2846 * wtf/qt/ThreadingQt.cpp: 2847 (WTF::waitForThreadCompletion): renamed IsValid to isValid. 2848 2849 2009-05-13 Jan Michael Alonzo <jmalonzo (a] webkit.org> 2850 2851 Revert r43562 - [Gtk] WTF_USE_JSC is already defined in 2852 WebCore/config.h. 2853 2854 * wtf/Platform.h: 2855 2856 2009-05-12 Gavin Barraclough <barraclough (a] apple.com> 2857 2858 Reviewed by Oliver Hunt. 2859 2860 Add SamplingCounter tool to provide a simple mechanism for counting events in JSC 2861 (enabled using ENABLE(SAMPLING_COUNTERS)). To count events within a single function 2862 use the class 'SamplingCounter', where the counter may be incremented from multiple 2863 functions 'GlobalSamplingCounter' may be convenient; all other counters (stack or 2864 heap allocated, rather than statically declared) should use the DeletableSamplingCounter. 2865 Further description of these classes is provided alongside their definition in 2866 SamplingTool.h. 2867 2868 Counters may be incremented from c++ by calling the 'count()' method on the counter, 2869 or may be incremented by JIT code by using the 'emitCount()' method within the JIT. 2870 2871 This patch also fixes CODEBLOCK_SAMPLING, which was missing a null pointer check. 2872 2873 * JavaScriptCore.exp: 2874 * assembler/MacroAssemblerX86.h: 2875 (JSC::MacroAssemblerX86::addWithCarry32): 2876 (JSC::MacroAssemblerX86::and32): 2877 (JSC::MacroAssemblerX86::or32): 2878 * assembler/MacroAssemblerX86Common.h: 2879 (JSC::MacroAssemblerX86Common::and32): 2880 (JSC::MacroAssemblerX86Common::or32): 2881 * assembler/MacroAssemblerX86_64.h: 2882 (JSC::MacroAssemblerX86_64::and32): 2883 (JSC::MacroAssemblerX86_64::or32): 2884 (JSC::MacroAssemblerX86_64::addPtr): 2885 * assembler/X86Assembler.h: 2886 (JSC::X86Assembler::): 2887 (JSC::X86Assembler::adcl_im): 2888 (JSC::X86Assembler::addq_im): 2889 (JSC::X86Assembler::andl_im): 2890 (JSC::X86Assembler::orl_im): 2891 * bytecode/SamplingTool.cpp: 2892 (JSC::AbstractSamplingCounter::dump): 2893 * bytecode/SamplingTool.h: 2894 (JSC::AbstractSamplingCounter::count): 2895 (JSC::GlobalSamplingCounter::name): 2896 (JSC::SamplingCounter::SamplingCounter): 2897 * jit/JIT.h: 2898 * jit/JITCall.cpp: 2899 (JSC::): 2900 * jit/JITInlineMethods.h: 2901 (JSC::JIT::setSamplingFlag): 2902 (JSC::JIT::clearSamplingFlag): 2903 (JSC::JIT::emitCount): 2904 * jsc.cpp: 2905 (runWithScripts): 2906 * parser/Nodes.cpp: 2907 (JSC::ScopeNode::ScopeNode): 2908 * wtf/Platform.h: 2909 2910 2009-05-13 Steve Falkenburg <sfalken (a] apple.com> 2911 2912 Windows build fix. 2913 2914 * JavaScriptCore.vcproj/JavaScriptCore.make: 2915 2916 2009-05-12 Steve Falkenburg <sfalken (a] apple.com> 2917 2918 Windows build fix. 2919 2920 * JavaScriptCore.vcproj/JavaScriptCore.make: 2921 2922 2009-05-12 Oliver Hunt <oliver (a] apple.com> 2923 2924 Reviewed by Gavin Barraclough. 2925 2926 <rdar://problem/6881457> Crash occurs at JSC::Interpreter::execute() when loading http://www.sears.com 2927 2928 We created the arguments objects before an op_push_scope but not 2929 before op_push_new_scope, this meant a null arguments object could 2930 be resolved inside catch blocks. 2931 2932 * bytecompiler/BytecodeGenerator.cpp: 2933 (JSC::BytecodeGenerator::emitPushNewScope): 2934 2935 2009-05-12 Oliver Hunt <oliver (a] apple.com> 2936 2937 Reviewed by Gavin Barraclough. 2938 2939 <rdar://problem/6879881> Crash occurs at JSC::JSActivation::mark() when loading http://www.monster.com; http://www.cnet.com 2940 <https://bugs.webkit.org/show_bug.cgi?id=25736> Crash loading www.google.dk/ig (and other igoogle's as well) 2941 2942 Following on from the lazy arguments creation patch, it's now 2943 possible for an activation to to have a null register in the callframe 2944 so we can't just blindly mark the local registers in an activation, 2945 and must null check first instead. 2946 2947 * API/tests/testapi.c: 2948 (functionGC): 2949 * API/tests/testapi.js: 2950 (bludgeonArguments.return.g): 2951 (bludgeonArguments): 2952 * runtime/JSActivation.cpp: 2953 (JSC::JSActivation::mark): 2954 2955 2009-05-12 Gavin Barraclough <barraclough (a] apple.com> 2956 2957 Rubber stamped by Geoff Garen. 2958 2959 WTF_USE_CTI_REPATCH_PIC is no longer used, remove. 2960 2961 * jit/JIT.h: 2962 * jit/JITStubCall.h: 2963 2964 2009-05-12 Gavin Barraclough <barraclough (a] apple.com> 2965 2966 Reviewed by Maciej Stachowiak. 2967 2968 We've run into some problems where changing the size of the class JIT leads to 2969 performance fluctuations. Try forcing alignment in an attempt to stabalize this. 2970 2971 * jit/JIT.h: 2972 2973 2009-05-12 Kevin Ollivier <kevino (a] theolliviers.com> 2974 2975 wx build fix. Add ParserArena.cpp to the build. 2976 2977 * JavaScriptCoreSources.bkl: 2978 2979 2009-05-12 Oliver Hunt <oliver (a] apple.com> 2980 2981 Reviewed by Geoff Garen. 2982 2983 Unsigned underflow on 64bit cannot be treated as a negative number 2984 2985 This code included some placeswhere we deliberately create negative offsets 2986 from unsigned values, on 32bit this is "safe", but in 64bit builds much 2987 badness occurs. Solution is to use signed types as nature intended. 2988 2989 * jit/JITStubs.cpp: 2990 (JSC::JITStubs::cti_op_load_varargs): 2991 2992 2009-05-12 Jan Michael Alonzo <jmalonzo (a] webkit.org> 2993 2994 Reviewed by Holger Freyther. 2995 2996 [Gtk] Various autotools build refactoring and fixes 2997 https://bugs.webkit.org/show_bug.cgi?id=25286 2998 2999 Define WTF_USE_JSC for the Gtk port. 3000 3001 * wtf/Platform.h: 3002 3003 2009-05-12 Maciej Stachowiak <mjs (a] apple.com> 3004 3005 Reviewed by Oliver Hunt. 3006 3007 - allow all of strictEqual to be inlined into cti_op_stricteq once again 3008 3009 We had this optimization once but accidentally lost it at some point. 3010 3011 * runtime/Operations.h: 3012 (JSC::JSValue::strictEqualSlowCaseInline): 3013 (JSC::JSValue::strictEqual): 3014 3015 2009-05-12 Gavin Barraclough <barraclough (a] apple.com> 3016 3017 Reviewed by Oliver Hunt. 3018 3019 instanceof should throw if the constructor being tested does not implement 3020 'HasInstance" (i.e. is a function). Instead we were returning false. 3021 3022 * interpreter/Interpreter.cpp: 3023 (JSC::isInvalidParamForIn): 3024 (JSC::isInvalidParamForInstanceOf): 3025 (JSC::Interpreter::privateExecute): 3026 * jit/JITStubs.cpp: 3027 (JSC::JITStubs::cti_op_instanceof): 3028 * tests/mozilla/ecma_2/instanceof/instanceof-003.js: 3029 Fix broken test case. 3030 * tests/mozilla/ecma_2/instanceof/regress-7635.js: 3031 Remove broken test case (was an exact duplicate of a test in instanceof-003.js). 3032 3033 2009-05-12 Oliver Hunt <oliver (a] apple.com> 3034 3035 Reviewed by Gavin Barraclough. 3036 3037 Improve function call forwarding performance 3038 3039 Make creation of the Arguments object occur lazily, so it 3040 is not necessarily created for every function that references 3041 it. Then add logic to Function.apply to allow it to avoid 3042 allocating the Arguments object at all. Helps a lot with 3043 the function forwarding/binding logic in jQuery, Prototype, 3044 and numerous other JS libraries. 3045 3046 * bytecode/CodeBlock.cpp: 3047 (JSC::CodeBlock::dump): 3048 * bytecode/Opcode.h: 3049 * bytecompiler/BytecodeGenerator.cpp: 3050 (JSC::BytecodeGenerator::BytecodeGenerator): 3051 (JSC::BytecodeGenerator::registerFor): 3052 (JSC::BytecodeGenerator::willResolveToArguments): 3053 (JSC::BytecodeGenerator::uncheckedRegisterForArguments): 3054 (JSC::BytecodeGenerator::createArgumentsIfNecessary): 3055 (JSC::BytecodeGenerator::emitCallEval): 3056 (JSC::BytecodeGenerator::emitPushScope): 3057 * bytecompiler/BytecodeGenerator.h: 3058 * interpreter/Interpreter.cpp: 3059 (JSC::Interpreter::privateExecute): 3060 (JSC::Interpreter::retrieveArguments): 3061 * jit/JIT.cpp: 3062 (JSC::JIT::privateCompileMainPass): 3063 * jit/JIT.h: 3064 * jit/JITOpcodes.cpp: 3065 (JSC::JIT::emit_op_create_arguments): 3066 (JSC::JIT::emit_op_init_arguments): 3067 * jit/JITStubs.cpp: 3068 (JSC::JITStubs::cti_op_tear_off_arguments): 3069 (JSC::JITStubs::cti_op_load_varargs): 3070 * parser/Nodes.cpp: 3071 (JSC::ApplyFunctionCallDotNode::emitBytecode): 3072 3073 2009-05-11 Gavin Barraclough <barraclough (a] apple.com> 3074 3075 Reviewed by Oliver Hunt. 3076 3077 Enable use of SamplingFlags directly from JIT code. 3078 3079 * bytecode/SamplingTool.h: 3080 * jit/JIT.h: 3081 (JSC::JIT::sampleCodeBlock): 3082 (JSC::JIT::sampleInstruction): 3083 * jit/JITInlineMethods.h: 3084 (JSC::JIT::setSamplingFlag): 3085 (JSC::JIT::clearSamplingFlag): 3086 3087 2009-05-11 Gavin Barraclough <barraclough (a] apple.com> 3088 3089 Reviewed by Cameron Zwarich. 3090 3091 Implement JIT generation for instanceof for non-objects (always returns false). 3092 Also fixes the sequencing of the prototype and value isObject checks, to no match the spec. 3093 3094 0.5% progression on v8 tests overall, due to 3.5% on early-boyer. 3095 3096 * jit/JIT.cpp: 3097 (JSC::JIT::privateCompileMainPass): 3098 (JSC::JIT::privateCompileSlowCases): 3099 * runtime/JSObject.cpp: 3100 (JSC::JSObject::hasInstance): 3101 * runtime/TypeInfo.h: 3102 (JSC::TypeInfo::TypeInfo): 3103 3104 2009-05-11 Geoffrey Garen <ggaren (a] apple.com> 3105 3106 Reviewed by Sam Weinig. 3107 3108 A little more JIT refactoring. 3109 3110 Rearranged code to more clearly indicate what's conditionally compiled 3111 and why. Now, all shared code is at the top of our JIT files, and all 3112 #if'd code is at the bottom. #if'd code is delineated by large comments. 3113 3114 Moved functions that relate to the JIT but don't explicitly do codegen 3115 into JIT.cpp. Refactored SSE2 check to store its result as a data member 3116 in the JIT. 3117 3118 * jit/JIT.cpp: 3119 (JSC::isSSE2Present): 3120 (JSC::JIT::JIT): 3121 (JSC::JIT::unlinkCall): 3122 (JSC::JIT::linkCall): 3123 * jit/JIT.h: 3124 (JSC::JIT::isSSE2Present): 3125 * jit/JITArithmetic.cpp: 3126 (JSC::JIT::emit_op_mod): 3127 (JSC::JIT::emitSlow_op_mod): 3128 * jit/JITCall.cpp: 3129 (JSC::JIT::compileOpCallVarargs): 3130 (JSC::JIT::compileOpCallVarargsSlowCase): 3131 3132 2009-05-11 Holger Hans Peter Freyther <zecke (a] selfish.org> 3133 3134 Build fix. 3135 3136 * JavaScriptCore.pri: Build the new JITOpcodes.cpp 3137 3138 2009-05-11 Sam Weinig <sam (a] webkit.org> 3139 3140 Reviewed by Geoffrey Garen. 3141 3142 More re-factoring of JIT code generation. Use a macro to 3143 forward the main switch-statement cases to the helper functions. 3144 3145 * jit/JIT.cpp: 3146 (JSC::JIT::privateCompileMainPass): 3147 (JSC::JIT::privateCompileSlowCases): 3148 3149 2009-05-11 Sam Weinig <sam (a] webkit.org> 3150 3151 Reviewed by Geoffrey Garen. 3152 3153 More re-factoring of JIT code generation to move opcode generation 3154 to helper functions outside the main switch-statement and gave those 3155 helper functions standardized names. This patch covers the remaining 3156 slow cases. 3157 3158 * jit/JIT.cpp: 3159 * jit/JIT.h: 3160 * jit/JITOpcodes.cpp: 3161 3162 2009-05-11 Geoffrey Garen <ggaren (a] apple.com> 3163 3164 Build fix. 3165 3166 * GNUmakefile.am: Added JITOpcodes.cpp and JITStubCall.h to the project. 3167 3168 2009-05-11 Geoffrey Garen <ggaren (a] apple.com> 3169 3170 Build fix. 3171 3172 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added 3173 JITOpcodes.cpp and JITStubCall.h to the project. 3174 3175 2009-05-11 Geoffrey Garen <ggaren (a] apple.com> 3176 3177 Reviewed by Sam Weinig. 3178 3179 Some JIT refactoring. 3180 3181 Moved JITStubCall* into its own header. 3182 3183 Modified JITStubCall to ASSERT that its return value is handled correctly. 3184 Also, replaced function template with explicit instantiations to resolve 3185 some confusion. 3186 3187 Replaced all uses of emit{Get,Put}CTIArgument with explicit peeks, pokes, 3188 and calls to killLastResultRegister(). 3189 3190 * JavaScriptCore.xcodeproj/project.pbxproj: 3191 * jit/JIT.cpp: 3192 (JSC::JIT::privateCompileMainPass): 3193 (JSC::JIT::privateCompile): 3194 * jit/JIT.h: 3195 * jit/JITArithmetic.cpp: 3196 * jit/JITCall.cpp: 3197 * jit/JITInlineMethods.h: 3198 (JSC::JIT::restoreArgumentReference): 3199 * jit/JITPropertyAccess.cpp: 3200 * jit/JITStubCall.h: Copied from jit/JIT.h. 3201 (JSC::JITStubCall::JITStubCall): 3202 (JSC::JITStubCall::addArgument): 3203 (JSC::JITStubCall::call): 3204 (JSC::JITStubCall::): 3205 3206 2009-05-11 Sam Weinig <sam (a] webkit.org> 3207 3208 Reviewed by Geoffrey Garen. 3209 3210 Start re-factoring JIT code generation to move opcode generation 3211 to helper functions outside the main switch-statement and gave those 3212 helper functions standardized names. This patch only covers the main 3213 pass and all the arithmetic opcodes in the slow path. 3214 3215 * JavaScriptCore.xcodeproj/project.pbxproj: 3216 * jit/JIT.cpp: 3217 (JSC::JIT::privateCompileMainPass): 3218 (JSC::JIT::privateCompileSlowCases): 3219 * jit/JIT.h: 3220 * jit/JITArithmetic.cpp: 3221 * jit/JITOpcodes.cpp: Copied from jit/JIT.cpp. 3222 * jit/JITPropertyAccess.cpp: 3223 3224 2009-05-11 Steve Falkenburg <sfalken (a] apple.com> 3225 3226 Re-add experimental PGO configs. 3227 3228 Reviewed by Adam Roben. 3229 3230 * JavaScriptCore.vcproj/JavaScriptCore.make: 3231 * JavaScriptCore.vcproj/JavaScriptCore.sln: 3232 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 3233 * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: 3234 * JavaScriptCore.vcproj/jsc/jsc.vcproj: 3235 3236 2009-05-11 Sam Weinig <sam (a] webkit.org> 3237 3238 Reviewed by Geoffrey "1" Garen. 3239 3240 Rip out the !USE(CTI_REPATCH_PIC) code. It was untested and unused. 3241 3242 * jit/JIT.h: 3243 (JSC::JIT::compileGetByIdChainList): 3244 (JSC::JIT::compileGetByIdChain): 3245 (JSC::JIT::compileCTIMachineTrampolines): 3246 * jit/JITPropertyAccess.cpp: 3247 (JSC::JIT::privateCompileGetByIdProto): 3248 (JSC::JIT::privateCompileGetByIdChainList): 3249 (JSC::JIT::privateCompileGetByIdChain): 3250 * jit/JITStubs.cpp: 3251 (JSC::JITStubs::tryCachePutByID): 3252 (JSC::JITStubs::tryCacheGetByID): 3253 3254 2009-05-11 Dmitry Titov <dimich (a] chromium.org> 3255 3256 GTK build fix - the deprecated waitForThreadCompletion is not needed on GTK. 3257 3258 * wtf/ThreadingPthreads.cpp: used #ifdef PLATFORM(DARWIN) around waitForThreadCompletion(). 3259 3260 2009-05-11 Adam Roben <aroben (a] apple.com> 3261 3262 Build fix for newer versions of GCC 3263 3264 * wtf/ThreadingPthreads.cpp: Added a declaration of 3265 waitForThreadCompletion before its definition to silence a warning. 3266 3267 2009-05-11 Dmitry Titov <dimich (a] chromium.org> 3268 3269 Reviewed by Alexey Proskuryakov and Adam Roben. 3270 3271 https://bugs.webkit.org/show_bug.cgi?id=25348 3272 Change WTF::ThreadIdentifier to be an actual (but wrapped) thread id, remove ThreadMap. 3273 3274 * wtf/Threading.h: 3275 (WTF::ThreadIdentifier::ThreadIdentifier): 3276 (WTF::ThreadIdentifier::isValid): 3277 (WTF::ThreadIdentifier::invalidate): 3278 (WTF::ThreadIdentifier::platformId): 3279 ThreadIdentifier is now a class, containing a PlatformThreadIdentifier and 3280 methods that are used across the code on thread ids: construction, comparisons, 3281 check for 'valid' state etc. '0' is used as invalid id, which happens to just work 3282 with all platform-specific thread id implementations. 3283 3284 All the following files repeatedly reflect the new ThreadIdentifier for each platform. 3285 We remove ThreadMap and threadMapMutex from all of them, remove the functions that 3286 populated/searched/cleared the map and add platform-specific comparison operators 3287 for ThreadIdentifier. 3288 3289 There are specific temporary workarounds for Safari 4 beta on OSX and Win32 since the 3290 public build uses WTF threading functions with old type of ThreadingIdentifier. 3291 The next time Safari 4 is rebuilt, it will 'automatically' pick up the new type and new 3292 functions so the deprecated ones can be removed. 3293 3294 * wtf/gtk/ThreadingGtk.cpp: 3295 (WTF::ThreadIdentifier::operator==): 3296 (WTF::ThreadIdentifier::operator!=): 3297 (WTF::initializeThreading): 3298 (WTF::createThreadInternal): 3299 (WTF::waitForThreadCompletion): 3300 (WTF::currentThread): 3301 3302 * wtf/ThreadingNone.cpp: 3303 (WTF::ThreadIdentifier::operator==): 3304 (WTF::ThreadIdentifier::operator!=): 3305 3306 * wtf/ThreadingPthreads.cpp: 3307 (WTF::ThreadIdentifier::operator==): 3308 (WTF::ThreadIdentifier::operator!=): 3309 (WTF::initializeThreading): 3310 (WTF::createThreadInternal): 3311 (WTF::waitForThreadCompletion): 3312 (WTF::detachThread): 3313 (WTF::currentThread): 3314 (WTF::waitForThreadCompletion): This is a workaround for Safari 4 beta on Mac. 3315 Safari 4 is linked against old definition of ThreadIdentifier so it treats it as uint32_t. 3316 This 'old' variant of waitForThreadCompletion takes uint32_t and has the old decorated name, so Safari can 3317 load it from JavaScriptCore library. The other functions (CurrentThread() etc) happen to match their previous 3318 decorated names and, while they return pthread_t now, it is a pointer which round-trips through a uint32_t. 3319 This function will be removed as soon as Safari 4 will release next public build. 3320 3321 * wtf/qt/ThreadingQt.cpp: 3322 (WTF::ThreadIdentifier::operator==): 3323 (WTF::ThreadIdentifier::operator!=): 3324 (WTF::initializeThreading): 3325 (WTF::createThreadInternal): 3326 (WTF::waitForThreadCompletion): 3327 (WTF::currentThread): 3328 3329 * wtf/ThreadingWin.cpp: 3330 (WTF::ThreadIdentifier::operator==): 3331 (WTF::ThreadIdentifier::operator!=): 3332 (WTF::initializeThreading): 3333 (WTF::createThreadInternal): All the platforms (except Windows) used a sequential 3334 counter as a thread ID and mapped it into platform ID. Windows was using native thread 3335 id and mapped it into thread handle. Since we can always obtain a thread handle 3336 by thread id, createThread now closes the handle. 3337 (WTF::waitForThreadCompletion): obtains another one using OpenThread(id) API. If can not obtain a handle, 3338 it means the thread already exited. 3339 (WTF::detachThread): 3340 (WTF::currentThread): 3341 (WTF::detachThreadDeprecated): old function, renamed (for Win Safari 4 beta which uses it for now). 3342 (WTF::waitForThreadCompletionDeprecated): same. 3343 (WTF::currentThreadDeprecated): same. 3344 (WTF::createThreadDeprecated): same. 3345 3346 * bytecode/SamplingTool.h: 3347 * bytecode/SamplingTool.cpp: Use DEFINE_STATIC_LOCAL for a static ThreadIdentifier variable, to avoid static constructor. 3348 3349 * JavaScriptCore.exp: export lists - updated decorated names of the WTF threading functions 3350 since they now take a different type as a parameter. 3351 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: ditto for Windows, plus added "deprecated" functions 3352 that take old parameter type - turns out public beta of Safari 4 uses those, so they need to be kept along for a while. 3353 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: ditto. 3354 3355 2009-05-11 Darin Adler <darin (a] apple.com> 3356 3357 Reviewed by Oliver Hunt. 3358 3359 Bug 25560: REGRESSION (r34821): "string value".__proto__ gets the wrong object. 3360 https://bugs.webkit.org/show_bug.cgi?id=25560 3361 rdar://problem/6861069 3362 3363 I missed this case back a year ago when I sped up handling 3364 of JavaScript wrappers. Easy to fix. 3365 3366 * runtime/JSObject.h: 3367 (JSC::JSValue::get): Return the prototype itself if the property name 3368 is __proto__. 3369 * runtime/JSString.cpp: 3370 (JSC::JSString::getOwnPropertySlot): Ditto. 3371 3372 2009-05-09 Oliver Hunt <oliver (a] apple.com> 3373 3374 Reviewed by Maciej Stachowiak. 3375 3376 Rename emitGetFromCallFrameHeader to emitGetFromCallFrameHeaderPtr 3377 3378 * jit/JIT.cpp: 3379 (JSC::JIT::privateCompileMainPass): 3380 (JSC::JIT::privateCompileCTIMachineTrampolines): 3381 * jit/JIT.h: 3382 * jit/JITInlineMethods.h: 3383 (JSC::JIT::emitGetFromCallFrameHeaderPtr): 3384 (JSC::JIT::emitGetFromCallFrameHeader32): 3385 3386 2009-05-11 Holger Hans Peter Freyther <zecke (a] selfish.org> 3387 3388 Unreviewed build fix. Build ParserAreana.cpp for Qt 3389 3390 * JavaScriptCore.pri: 3391 3392 2009-05-11 Norbert Leser <norbert.leser (a] nokia.com> 3393 3394 Reviewed by Darin Adler. 3395 3396 https://bugs.webkit.org/show_bug.cgi?id=24536 3397 3398 Symbian compilers cannot resolve WTF::PassRefPtr<JSC::Profile> 3399 unless Profile.h is included. 3400 3401 * profiler/ProfileGenerator.h: 3402 3403 2009-05-11 Csaba Osztrogonac <oszi (a] inf.u-szeged.hu> 3404 3405 Reviewed by Holger Freyther. 3406 3407 https://bugs.webkit.org/show_bug.cgi?id=24284 3408 3409 * JavaScriptCore.pri: coding style modified 3410 * jsc.pro: duplicated values removed from INCLUDEPATH, DEFINES 3411 3412 2009-05-11 Gustavo Noronha Silva <gustavo.noronha (a] collabora.co.uk> 3413 3414 Reviewed by NOBODY (build fix). 3415 3416 Also add ParserArena, in addition to AllInOne, for release builds, 3417 since adding it to AllInOne breaks Mac. 3418 3419 * GNUmakefile.am: 3420 3421 2009-05-11 Gustavo Noronha Silva <gustavo.noronha (a] collabora.co.uk> 3422 3423 Unreviewed build fix. Adding ParserArena to the autotools build. 3424 3425 * GNUmakefile.am: 3426 3427 2009-05-11 Adam Roben <aroben (a] apple.com> 3428 3429 More Windows build fixes after r43479 3430 3431 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 3432 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 3433 Export ParserArena::reset. 3434 3435 2009-05-11 Adam Roben <aroben (a] apple.com> 3436 3437 Windows build fixes after r43479 3438 3439 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added 3440 ParserArena to the project. 3441 3442 * parser/NodeConstructors.h: Added a missing include. 3443 (JSC::ParserArenaDeletable::operator new): Marked these as inline. 3444 3445 2009-05-10 Maciej Stachowiak <mjs (a] apple.com> 3446 3447 Reviewed by Geoff Garen. 3448 3449 - fixed REGRESSION(r43432): Many JavaScriptCore tests crash in 64-bit 3450 https://bugs.webkit.org/show_bug.cgi?id=25680 3451 3452 Accound for the 64-bit instruction prefix when rewriting mov to lea on 64-bit. 3453 3454 * jit/JIT.h: 3455 * jit/JITPropertyAccess.cpp: 3456 (JSC::JIT::patchGetByIdSelf): 3457 (JSC::JIT::patchPutByIdReplace): 3458 3459 2009-05-10 Darin Adler <darin (a] apple.com> 3460 3461 Reviewed by Cameron Zwarich. 3462 3463 Bug 25674: syntax tree nodes should use arena allocation 3464 https://bugs.webkit.org/show_bug.cgi?id=25674 3465 3466 Part two: Remove reference counting from most nodes. 3467 3468 * JavaScriptCore.exp: Updated. 3469 3470 * JavaScriptCore.xcodeproj/project.pbxproj: Added ParserArena.h and .cpp. 3471 3472 * parser/Grammar.y: Replaced uses of ParserRefCountedData with uses of 3473 ParserArenaData. Took out now-nonfunctional code that tries to manually 3474 release declaration list. Changed the new calls that create FuncDeclNode 3475 and FuncExprNode so that they use the proper version of operator new for 3476 the reference-counted idiom, not the deletion idiom. 3477 3478 * parser/NodeConstructors.h: 3479 (JSC::ParserArenaDeletable::operator new): Added. 3480 (JSC::ParserArenaRefCounted::ParserArenaRefCounted): Added. 3481 (JSC::Node::Node): Removed ParserRefCounted initializer. 3482 (JSC::ElementNode::ElementNode): Ditto. 3483 (JSC::PropertyNode::PropertyNode): Ditto. 3484 (JSC::ArgumentsNode::ArgumentsNode): Ditto. 3485 (JSC::SourceElements::SourceElements): Ditto. 3486 (JSC::ParameterNode::ParameterNode): Ditto. 3487 (JSC::FuncExprNode::FuncExprNode): Added ParserArenaRefCounted initializer. 3488 (JSC::FuncDeclNode::FuncDeclNode): Ditto. 3489 (JSC::CaseClauseNode::CaseClauseNode): Removed ParserRefCounted initializer. 3490 (JSC::ClauseListNode::ClauseListNode): Ditto. 3491 (JSC::CaseBlockNode::CaseBlockNode): Ditto. 3492 3493 * parser/NodeInfo.h: Replaced uses of ParserRefCountedData with uses of 3494 ParserArenaData. 3495 3496 * parser/Nodes.cpp: 3497 (JSC::ScopeNode::ScopeNode): Added ParserArenaRefCounted initializer. 3498 (JSC::ProgramNode::create): Use the proper version of operator new for 3499 the reference-counted idiom, not the deletion idiom. Use the arena 3500 contains function instead of the vecctor find function. 3501 (JSC::EvalNode::create): Use the proper version of operator new for 3502 the reference-counted idiom, not the deletion idiom. Use the arena 3503 reset function instead of the vector shrink function. 3504 (JSC::FunctionBodyNode::createNativeThunk): Use the proper version 3505 of operator new for the reference-counted idiom, not the deletion idiom. 3506 (JSC::FunctionBodyNode::create): More of the same. 3507 3508 * parser/Nodes.h: Added ParserArenaDeletable and ParserArenaRefCounted 3509 to replace ParserRefCounted. Fixed inheritance so only the classes that 3510 need reference counting inherit from ParserArenaRefCounted. 3511 3512 * parser/Parser.cpp: 3513 (JSC::Parser::parse): Set m_sourceElements to 0 since it now starts 3514 uninitialized. Just set it to 0 again in the failure case, since it's 3515 now just a raw pointer, not an owning one. 3516 (JSC::Parser::reparseInPlace): Removed now-unneeded get() function. 3517 (JSC::Parser::didFinishParsing): Replaced uses of ParserRefCountedData 3518 with uses of ParserArenaData. 3519 3520 * parser/Parser.h: Less RefPtr, more arena. 3521 3522 * parser/ParserArena.cpp: Added. 3523 * parser/ParserArena.h: Added. 3524 3525 * runtime/JSGlobalData.cpp: 3526 (JSC::JSGlobalData::~JSGlobalData): Removed arena-related code, since it's 3527 now in the Parser. 3528 (JSC::JSGlobalData::createLeaked): Removed unneeded #ifndef. 3529 (JSC::JSGlobalData::createNativeThunk): Tweaked #if a bit. 3530 3531 * runtime/JSGlobalData.h: Removed parserArena, which is now in Parser. 3532 3533 * wtf/RefCounted.h: Added deletionHasBegun function, for use in 3534 assertions to catch deletion not done by the deref function. 3535 3536 2009-05-10 David Kilzer <ddkilzer (a] apple.com> 3537 3538 Part 2: Try to fix the Windows build by adding a symbol which is really just a re-mangling of a changed method signature 3539 3540 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 3541 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 3542 3543 2009-05-10 David Kilzer <ddkilzer (a] apple.com> 3544 3545 Try to fix the Windows build by removing an unknown symbol 3546 3547 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 3548 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 3549 3550 2009-05-10 David Kilzer <ddkilzer (a] apple.com> 3551 3552 Touch Nodes.cpp to try to fix Windows build 3553 3554 * parser/Nodes.cpp: Removed whitespace. 3555 3556 2009-05-10 Darin Adler <darin (a] apple.com> 3557 3558 Reviewed by Maciej Stachowiak. 3559 3560 Quick fix for failures seen on buildbot. Maciej plans a better fix later. 3561 3562 * wtf/dtoa.cpp: Change the hardcoded number of 32-bit words in a BigInt 3563 from 32 to 64. Parsing "1e500", for example, requires more than 32 words. 3564 3565 2009-05-10 Darin Adler <darin (a] apple.com> 3566 3567 Reviewed by Sam Weinig. 3568 3569 Bug 25674: syntax tree nodes should use arena allocation 3570 Part one: Change lifetimes so we won't have to use reference 3571 counting so much, but don't eliminate the reference counts 3572 entirely yet. 3573 3574 * JavaScriptCore.exp: Updated. 3575 3576 * bytecompiler/BytecodeGenerator.cpp: 3577 (JSC::BytecodeGenerator::BytecodeGenerator): Update for use of raw pointers 3578 instead of RefPtr. 3579 (JSC::BytecodeGenerator::emitCall): Ditto. 3580 (JSC::BytecodeGenerator::emitConstruct): Ditto. 3581 3582 * parser/Grammar.y: Update node creating code to use new (JSGlobalData*) 3583 instead of the plain new. At the moment this is just a hook for future 3584 arena allocation; it's inline and JSGlobalData* is not used. 3585 3586 * parser/NodeConstructors.h: Updated for name change of parserObjects to 3587 parserArena. Also added explicit initialization for raw pointers that used 3588 to be RefPtr. Also removed some uses of get() that aren't needed now that 3589 the pointers are raw pointers. Also eliminated m_parameter from FuncExprNode 3590 and FuncDeclNode. Also changed node-creating code to use new (JSGlobalData*) 3591 as above. 3592 3593 * parser/Nodes.cpp: Eliminated NodeReleaser and all use of it. 3594 (JSC::ParserRefCounted::ParserRefCounted): Updated for name change of 3595 parserObjects to parserArena. 3596 (JSC::SourceElements::append): Use raw pointers. 3597 (JSC::ArrayNode::emitBytecode): Ditto. 3598 (JSC::ArrayNode::isSimpleArray): Ditto. 3599 (JSC::ArrayNode::toArgumentList): Ditto. 3600 (JSC::ObjectLiteralNode::emitBytecode): Ditto. 3601 (JSC::PropertyListNode::emitBytecode): Ditto. 3602 (JSC::BracketAccessorNode::emitBytecode): Ditto. 3603 (JSC::DotAccessorNode::emitBytecode): Ditto. 3604 (JSC::ArgumentListNode::emitBytecode): Ditto. 3605 (JSC::NewExprNode::emitBytecode): Ditto. 3606 (JSC::EvalFunctionCallNode::emitBytecode): Ditto. 3607 (JSC::FunctionCallValueNode::emitBytecode): Ditto. 3608 (JSC::FunctionCallResolveNode::emitBytecode): Ditto. 3609 (JSC::FunctionCallBracketNode::emitBytecode): Ditto. 3610 (JSC::FunctionCallDotNode::emitBytecode): Ditto. 3611 (JSC::CallFunctionCallDotNode::emitBytecode): Ditto. 3612 (JSC::ApplyFunctionCallDotNode::emitBytecode): Ditto. 3613 (JSC::PostfixBracketNode::emitBytecode): Ditto. 3614 (JSC::PostfixDotNode::emitBytecode): Ditto. 3615 (JSC::DeleteBracketNode::emitBytecode): Ditto. 3616 (JSC::DeleteDotNode::emitBytecode): Ditto. 3617 (JSC::DeleteValueNode::emitBytecode): Ditto. 3618 (JSC::VoidNode::emitBytecode): Ditto. 3619 (JSC::TypeOfValueNode::emitBytecode): Ditto. 3620 (JSC::PrefixBracketNode::emitBytecode): Ditto. 3621 (JSC::PrefixDotNode::emitBytecode): Ditto. 3622 (JSC::UnaryOpNode::emitBytecode): Ditto. 3623 (JSC::BinaryOpNode::emitStrcat): Ditto. 3624 (JSC::BinaryOpNode::emitBytecode): Ditto. 3625 (JSC::EqualNode::emitBytecode): Ditto. 3626 (JSC::StrictEqualNode::emitBytecode): Ditto. 3627 (JSC::ReverseBinaryOpNode::emitBytecode): Ditto. 3628 (JSC::ThrowableBinaryOpNode::emitBytecode): Ditto. 3629 (JSC::InstanceOfNode::emitBytecode): Ditto. 3630 (JSC::LogicalOpNode::emitBytecode): Ditto. 3631 (JSC::ConditionalNode::emitBytecode): Ditto. 3632 (JSC::ReadModifyResolveNode::emitBytecode): Ditto. 3633 (JSC::AssignResolveNode::emitBytecode): Ditto. 3634 (JSC::AssignDotNode::emitBytecode): Ditto. 3635 (JSC::ReadModifyDotNode::emitBytecode): Ditto. 3636 (JSC::AssignBracketNode::emitBytecode): Ditto. 3637 (JSC::ReadModifyBracketNode::emitBytecode): Ditto. 3638 (JSC::CommaNode::emitBytecode): Ditto. 3639 (JSC::ConstDeclNode::emitCodeSingle): Ditto. 3640 (JSC::ConstDeclNode::emitBytecode): Ditto. 3641 (JSC::ConstStatementNode::emitBytecode): Ditto. 3642 (JSC::statementListEmitCode): Ditto. 3643 (JSC::BlockNode::emitBytecode): Ditto. 3644 (JSC::ExprStatementNode::emitBytecode): Ditto. 3645 (JSC::VarStatementNode::emitBytecode): Ditto. 3646 (JSC::IfNode::emitBytecode): Ditto. 3647 (JSC::IfElseNode::emitBytecode): Ditto. 3648 (JSC::DoWhileNode::emitBytecode): Ditto. 3649 (JSC::WhileNode::emitBytecode): Ditto. 3650 (JSC::ForNode::emitBytecode): Ditto. 3651 (JSC::ForInNode::emitBytecode): Ditto. 3652 (JSC::ReturnNode::emitBytecode): Ditto. 3653 (JSC::WithNode::emitBytecode): Ditto. 3654 (JSC::CaseBlockNode::tryOptimizedSwitch): Ditto. 3655 (JSC::CaseBlockNode::emitBytecodeForBlock): Ditto. 3656 (JSC::SwitchNode::emitBytecode): Ditto. 3657 (JSC::LabelNode::emitBytecode): Ditto. 3658 (JSC::ThrowNode::emitBytecode): Ditto. 3659 (JSC::TryNode::emitBytecode): Ditto. 3660 (JSC::ScopeNodeData::ScopeNodeData): Use swap to transfer ownership 3661 of the arena, varStack and functionStack. 3662 (JSC::ScopeNode::ScopeNode): Pass in the arena when creating the 3663 ScopeNodeData. 3664 (JSC::ProgramNode::ProgramNode): Made this inline since it's used 3665 in only one place. 3666 (JSC::ProgramNode::create): Changed this to return a PassRefPtr since 3667 we plan to have the scope nodes be outside the arena, so they will need 3668 some kind of ownership transfer (maybe auto_ptr instead of PassRefPtr 3669 in the future, though). Remove the node from the newly-created arena to 3670 avoid a circular reference. Later we'll keep the node out of the arena 3671 by using a different operator new, but for now it's the ParserRefCounted 3672 constructor that puts the node into the arena, and there's no way to 3673 bypass that. 3674 (JSC::EvalNode::EvalNode): Ditto. 3675 (JSC::EvalNode::create): Ditto. 3676 (JSC::FunctionBodyNode::FunctionBodyNode): Ditto. 3677 (JSC::FunctionBodyNode::createNativeThunk): Moved the code that 3678 reseets the arena here instead of the caller. 3679 (JSC::FunctionBodyNode::create): Same change as the other create 3680 functions above. 3681 (JSC::FunctionBodyNode::emitBytecode): Use raw pointers. 3682 3683 * parser/Nodes.h: Removed NodeReleaser. Changed FunctionStack to 3684 use raw pointers. Removed the releaseNodes function. Added an override 3685 of operator new that takes a JSGlobalData* to prepare for future arena use. 3686 Use raw pointers instead of RefPtr everywhere possible. 3687 3688 * parser/Parser.cpp: 3689 (JSC::Parser::reparseInPlace): Pass the arena in. 3690 3691 * parser/Parser.h: 3692 (JSC::Parser::parse): Updated for name change of parserObjects to parserArena. 3693 (JSC::Parser::reparse): Ditto. 3694 * runtime/FunctionConstructor.cpp: 3695 (JSC::extractFunctionBody): Ditto. 3696 * runtime/JSGlobalData.cpp: 3697 (JSC::JSGlobalData::~JSGlobalData): Ditto. 3698 (JSC::JSGlobalData::createNativeThunk): Moved arena manipulation into the 3699 FunctionBodyNode::createNativeThunk function. 3700 3701 * runtime/JSGlobalData.h: Tweaked formatting and renamed parserObjects to 3702 parserArena. 3703 3704 * wtf/NotFound.h: Added the usual "using WTF" to this header to match the 3705 rest of WTF. 3706 3707 2009-05-10 Dimitri Glazkov <dglazkov (a] chromium.org> 3708 3709 Reviewed by Geoffrey Garen. 3710 3711 https://bugs.webkit.org/show_bug.cgi?id=25670 3712 Remove no longer valid chunk of code from dtoa. 3713 3714 * wtf/dtoa.cpp: 3715 (WTF::dtoa): Removed invalid code. 3716 3717 2009-05-10 Alexey Proskuryakov <ap (a] webkit.org> 3718 3719 Reviewed by Geoff Garen. 3720 3721 "Class const *" is the same as "const Class*", use the latter syntax consistently. 3722 3723 See <http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.9>. 3724 3725 * pcre/pcre_compile.cpp: 3726 (calculateCompiledPatternLength): 3727 * runtime/JSObject.h: 3728 (JSC::JSObject::offsetForLocation): 3729 (JSC::JSObject::locationForOffset): 3730 3731 2009-05-10 Maciej Stachowiak <mjs (a] apple.com> 3732 3733 Reviewed by Alexey Proskuryakov. 3734 3735 - speedup dtoa/strtod 3736 3737 Added a bunch of inlining, and replaced malloc with stack allocation. 3738 3739 0.5% SunSpider speedup (7% on string-tagcloud). 3740 3741 * runtime/NumberPrototype.cpp: 3742 (JSC::integerPartNoExp): 3743 (JSC::numberProtoFuncToExponential): 3744 * runtime/UString.cpp: 3745 (JSC::concatenate): 3746 (JSC::UString::from): 3747 * wtf/dtoa.cpp: 3748 (WTF::BigInt::BigInt): 3749 (WTF::BigInt::operator=): 3750 (WTF::Balloc): 3751 (WTF::Bfree): 3752 (WTF::multadd): 3753 (WTF::s2b): 3754 (WTF::i2b): 3755 (WTF::mult): 3756 (WTF::pow5mult): 3757 (WTF::lshift): 3758 (WTF::cmp): 3759 (WTF::diff): 3760 (WTF::b2d): 3761 (WTF::d2b): 3762 (WTF::ratio): 3763 (WTF::strtod): 3764 (WTF::quorem): 3765 (WTF::freedtoa): 3766 (WTF::dtoa): 3767 * wtf/dtoa.h: 3768 3769 2009-05-09 Mike Hommey <glandium (a] debian.org> 3770 3771 Reviewed by Geoffrey Garen. Landed by Jan Alonzo. 3772 3773 Enable JIT on x86-64 gtk+ 3774 https://bugs.webkit.org/show_bug.cgi?id=24724 3775 3776 * GNUmakefile.am: 3777 3778 2009-05-09 Geoffrey Garen <ggaren (a] apple.com> 3779 3780 Reviewed by Cameron Zwarich. 3781 3782 Removed the last non-call-related manually managed JIT stub call. 3783 3784 * jit/JITArithmetic.cpp: 3785 (JSC::JIT::compileFastArithSlow_op_rshift): Fully use the JITStubCall 3786 abstraction, instead of emitPutJITStubArg. 3787 3788 2009-05-09 Sebastian Andrzej Siewior <sebastian (a] breakpoint.cc> 3789 3790 Reviewed by Gustavo Noronha. 3791 3792 https://bugs.webkit.org/show_bug.cgi?id=25653 3793 PLATFORM(X86_64) inherits ia64 3794 3795 __ia64__ is defined by gcc in an IA64 arch and has completely 3796 nothing in common with X86-64 exept both are from Intel and have 3797 an 64bit address space. That's it. Since code seems to expect x86 3798 here, ia64 has to go. 3799 3800 * wtf/Platform.h: 3801 3802 2009-05-09 Gustavo Noronha Silva <gns (a] gnome.org> 3803 3804 Suggested by Geoffrey Garen. 3805 3806 Assume SSE2 is present on X86-64 and on MAC X86-32. This fixes a 3807 build breakage on non-Mac X86-64 when JIT is enabled. 3808 3809 * jit/JITArithmetic.cpp: 3810 3811 2009-05-09 Gustavo Noronha Silva <gns (a] gnome.org> 3812 3813 Build fix, adding missing files to make dist. 3814 3815 * GNUmakefile.am: 3816 3817 2009-05-09 Geoffrey Garen <ggaren (a] apple.com> 3818 3819 Windows build fix. 3820 3821 * assembler/X86Assembler.h: 3822 (JSC::X86Assembler::patchLoadToLEA): 3823 3824 2009-05-09 Geoffrey Garen <ggaren (a] apple.com> 3825 3826 Windows build fix. 3827 3828 * assembler/X86Assembler.h: 3829 (JSC::X86Assembler::patchLoadToLEA): 3830 3831 2009-05-09 Maciej Stachowiak <mjs (a] apple.com> 3832 3833 Reviewed by Gavin Barraclough. 3834 3835 Original patch by John McCall. Updated by Cameron Zwarich. Further refined by me. 3836 3837 - Assorted speedups to property access 3838 3839 ~.3%-1% speedup on SunSpider 3840 3841 1) When we know from the structure ID that an object is using inline storage, plant direct 3842 loads and stores against it; no need to indirect through storage pointer. 3843 3844 2) Also because of the above, union the property storage pointer with the first inline property 3845 slot and add an extra inline property slot. 3846 3847 * assembler/AbstractMacroAssembler.h: 3848 (JSC::AbstractMacroAssembler::CodeLocationInstruction::CodeLocationInstruction): 3849 (JSC::AbstractMacroAssembler::CodeLocationInstruction::patchLoadToLEA): 3850 (JSC::::CodeLocationCommon::instructionAtOffset): 3851 * assembler/MacroAssembler.h: 3852 (JSC::MacroAssembler::storePtr): 3853 * assembler/MacroAssemblerX86.h: 3854 (JSC::MacroAssemblerX86::store32): 3855 * assembler/MacroAssemblerX86_64.h: 3856 (JSC::MacroAssemblerX86_64::storePtr): 3857 * assembler/X86Assembler.h: 3858 (JSC::X86Assembler::movq_EAXm): 3859 (JSC::X86Assembler::movl_rm): 3860 (JSC::X86Assembler::patchLoadToLEA): 3861 * jit/JIT.cpp: 3862 (JSC::JIT::privateCompileMainPass): 3863 * jit/JIT.h: 3864 * jit/JITPropertyAccess.cpp: 3865 (JSC::JIT::compileGetByIdHotPath): 3866 (JSC::JIT::compilePutByIdHotPath): 3867 (JSC::JIT::compilePutDirectOffset): 3868 (JSC::JIT::compileGetDirectOffset): 3869 (JSC::JIT::privateCompilePutByIdTransition): 3870 (JSC::JIT::patchGetByIdSelf): 3871 (JSC::JIT::patchPutByIdReplace): 3872 (JSC::JIT::privateCompileGetByIdSelf): 3873 (JSC::JIT::privateCompileGetByIdProto): 3874 (JSC::JIT::privateCompileGetByIdSelfList): 3875 (JSC::JIT::privateCompileGetByIdProtoList): 3876 (JSC::JIT::privateCompileGetByIdChainList): 3877 (JSC::JIT::privateCompileGetByIdChain): 3878 (JSC::JIT::privateCompilePutByIdReplace): 3879 * runtime/JSObject.cpp: 3880 (JSC::JSObject::mark): 3881 (JSC::JSObject::removeDirect): 3882 * runtime/JSObject.h: 3883 (JSC::JSObject::propertyStorage): 3884 (JSC::JSObject::getDirect): 3885 (JSC::JSObject::getOffset): 3886 (JSC::JSObject::offsetForLocation): 3887 (JSC::JSObject::locationForOffset): 3888 (JSC::JSObject::getDirectOffset): 3889 (JSC::JSObject::putDirectOffset): 3890 (JSC::JSObject::isUsingInlineStorage): 3891 (JSC::JSObject::): 3892 (JSC::JSObject::JSObject): 3893 (JSC::JSObject::~JSObject): 3894 (JSC::Structure::isUsingInlineStorage): 3895 (JSC::JSObject::putDirect): 3896 (JSC::JSObject::putDirectWithoutTransition): 3897 (JSC::JSObject::allocatePropertyStorageInline): 3898 * runtime/Structure.h: 3899 3900 2009-05-09 Geoffrey Garen <ggaren (a] apple.com> 3901 3902 Reviewed by Gavin Barraclough. 3903 3904 Changed all our JIT stubs so that they return a maximum of 1 JS value or 3905 two non-JS pointers, and do all other value returning through out 3906 parameters, in preparation for 64bit JS values on a 32bit system. 3907 3908 Stubs that used to return two JSValues now return one JSValue and take 3909 and out parameter specifying where in the register array the second 3910 value should go. 3911 3912 SunSpider reports no change. 3913 3914 * jit/JIT.cpp: 3915 (JSC::JIT::privateCompileMainPass): 3916 * jit/JITArithmetic.cpp: 3917 (JSC::JIT::compileFastArithSlow_op_post_inc): 3918 (JSC::JIT::compileFastArithSlow_op_post_dec): 3919 * jit/JITStubs.cpp: 3920 (JSC::JITStubs::cti_op_call_arityCheck): 3921 (JSC::JITStubs::cti_op_resolve_func): 3922 (JSC::JITStubs::cti_op_post_inc): 3923 (JSC::JITStubs::cti_op_resolve_with_base): 3924 (JSC::JITStubs::cti_op_post_dec): 3925 * jit/JITStubs.h: 3926 (JSC::): 3927 3928 2009-05-08 Geoffrey Garen <ggaren (a] apple.com> 3929 3930 Reviewed by Cameron Zwarich. 3931 3932 Fixed <rdar://problem/6634956> CrashTracer: [REGRESSION] >400 crashes 3933 in Safari at com.apple.JavaScriptCore JSC::BytecodeGenerator::emitComplexJumpScopes + 468 3934 https://bugs.webkit.org/show_bug.cgi?id=25658 3935 3936 * bytecompiler/BytecodeGenerator.cpp: 3937 (JSC::BytecodeGenerator::emitComplexJumpScopes): Guard the whole loop 3938 with a bounds check. The old loop logic would decrement and read topScope 3939 without a bounds check, which could cause crashes on page boundaries. 3940 3941 2009-05-08 Jan Michael Alonzo <jmalonzo (a] webkit.org> 3942 3943 Reviewed by NOBODY (BuildFix). 3944 3945 Gtk fix: add LiteralParser to the build script per r43424. 3946 3947 Add LiteralParser to the Qt and Wx build scripts too. 3948 3949 * GNUmakefile.am: 3950 * JavaScriptCore.pri: 3951 * JavaScriptCoreSources.bkl: 3952 3953 2009-05-08 Oliver Hunt <oliver (a] apple.com> 3954 3955 Reviewed by Gavin Barraclough and Darin Adler. 3956 3957 Add a limited literal parser for eval to handle object and array literals fired at eval 3958 3959 This is a simplified parser and lexer that we can throw at strings passed to eval 3960 in case a site is using eval to parse JSON (eg. json2.js). The lexer is intentionally 3961 limited (in effect it's whitelisting a limited "common" subset of the JSON grammar) 3962 as this decreases the likelihood of us wating time attempting to parse any significant 3963 amount of non-JSON content. 3964 3965 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 3966 * JavaScriptCore.xcodeproj/project.pbxproj: 3967 * interpreter/Interpreter.cpp: 3968 (JSC::Interpreter::callEval): 3969 * runtime/JSGlobalObjectFunctions.cpp: 3970 (JSC::globalFuncEval): 3971 * runtime/LiteralParser.cpp: Added. 3972 (JSC::isStringCharacter): 3973 (JSC::LiteralParser::Lexer::lex): 3974 (JSC::LiteralParser::Lexer::lexString): 3975 (JSC::LiteralParser::Lexer::lexNumber): 3976 (JSC::LiteralParser::parseStatement): 3977 (JSC::LiteralParser::parseExpression): 3978 (JSC::LiteralParser::parseArray): 3979 (JSC::LiteralParser::parseObject): 3980 (JSC::LiteralParser::StackGuard::StackGuard): 3981 (JSC::LiteralParser::StackGuard::~StackGuard): 3982 (JSC::LiteralParser::StackGuard::isSafe): 3983 * runtime/LiteralParser.h: Added. 3984 (JSC::LiteralParser::LiteralParser): 3985 (JSC::LiteralParser::attemptJSONParse): 3986 (JSC::LiteralParser::): 3987 (JSC::LiteralParser::Lexer::Lexer): 3988 (JSC::LiteralParser::Lexer::next): 3989 (JSC::LiteralParser::Lexer::currentToken): 3990 (JSC::LiteralParser::abortParse): 3991 3992 2009-05-08 Geoffrey Garen <ggaren (a] apple.com> 3993 3994 Not reviewed. 3995 3996 Restored a Mozilla JS test I accidentally gutted. 3997 3998 * tests/mozilla/ecma/Array/15.4.4.2.js: 3999 (getTestCases): 4000 (test): 4001 4002 2009-05-08 Geoffrey Garen <ggaren (a] apple.com> 4003 4004 Reviewed by Gavin Barraclough. 4005 4006 More abstraction for JITStub calls from JITed code. 4007 4008 Added a JITStubCall class that automatically handles things like assigning 4009 arguments to different stack slots and storing return values. Deployed 4010 the class in about a billion places. A bunch more places remain to be 4011 fixed up, but this is a good stopping point for now. 4012 4013 * jit/JIT.cpp: 4014 (JSC::JIT::emitTimeoutCheck): 4015 (JSC::JIT::privateCompileMainPass): 4016 (JSC::JIT::privateCompileSlowCases): 4017 (JSC::JIT::privateCompile): 4018 * jit/JIT.h: 4019 (JSC::JIT::JSRInfo::JSRInfo): 4020 (JSC::JITStubCall::JITStubCall): 4021 (JSC::JITStubCall::addArgument): 4022 (JSC::JITStubCall::call): 4023 (JSC::JITStubCall::): 4024 (JSC::CallEvalJITStub::CallEvalJITStub): 4025 * jit/JITArithmetic.cpp: 4026 (JSC::JIT::compileFastArithSlow_op_lshift): 4027 (JSC::JIT::compileFastArithSlow_op_rshift): 4028 (JSC::JIT::compileFastArithSlow_op_jnless): 4029 (JSC::JIT::compileFastArithSlow_op_bitand): 4030 (JSC::JIT::compileFastArithSlow_op_mod): 4031 (JSC::JIT::compileFastArith_op_mod): 4032 (JSC::JIT::compileFastArithSlow_op_post_inc): 4033 (JSC::JIT::compileFastArithSlow_op_post_dec): 4034 (JSC::JIT::compileFastArithSlow_op_pre_inc): 4035 (JSC::JIT::compileFastArithSlow_op_pre_dec): 4036 (JSC::JIT::compileFastArith_op_add): 4037 (JSC::JIT::compileFastArith_op_mul): 4038 (JSC::JIT::compileFastArith_op_sub): 4039 (JSC::JIT::compileBinaryArithOpSlowCase): 4040 (JSC::JIT::compileFastArithSlow_op_add): 4041 (JSC::JIT::compileFastArithSlow_op_mul): 4042 * jit/JITCall.cpp: 4043 (JSC::JIT::compileOpCall): 4044 (JSC::): 4045 * jit/JITPropertyAccess.cpp: 4046 (JSC::JIT::compileGetByIdHotPath): 4047 (JSC::JIT::compilePutByIdHotPath): 4048 (JSC::JIT::compileGetByIdSlowCase): 4049 (JSC::JIT::compilePutByIdSlowCase): 4050 * jit/JITStubs.cpp: 4051 (JSC::JITStubs::cti_op_resolve_func): 4052 (JSC::JITStubs::cti_op_resolve_with_base): 4053 4054 2009-05-08 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 4055 4056 Reviewed by Maciej Stachowiak. 4057 4058 Add a new opcode jnlesseq, and optimize its compilation in the JIT using 4059 techniques similar to what were used to optimize jnless in r43363. 4060 4061 This gives a 0.7% speedup on SunSpider, particularly on the tests 3d-cube, 4062 control-flow-recursive, date-format-xparb, and string-base64. 4063 4064 * bytecode/CodeBlock.cpp: 4065 (JSC::CodeBlock::dump): Add support for dumping op_jnlesseq. 4066 * bytecode/Opcode.h: Add op_jnlesseq to the list of opcodes. 4067 * bytecompiler/BytecodeGenerator.cpp: 4068 (JSC::BytecodeGenerator::emitJumpIfFalse): Add a peephole optimization 4069 for op_jnlesseq when emitting lesseq followed by a jump. 4070 * interpreter/Interpreter.cpp: 4071 (JSC::Interpreter::privateExecute): Add case for op_jnlesseq. 4072 * jit/JIT.cpp: 4073 (JSC::JIT::privateCompileMainPass): Add case for op_jnlesseq. 4074 (JSC::JIT::privateCompileSlowCases): Add case for op_jnlesseq. 4075 * jit/JIT.h: 4076 * jit/JITArithmetic.cpp: 4077 (JSC::JIT::compileFastArith_op_jnlesseq): Added. 4078 (JSC::JIT::compileFastArithSlow_op_jnlesseq): Added. 4079 * jit/JITStubs.cpp: 4080 (JSC::JITStubs::cti_op_jlesseq): Added. 4081 * jit/JITStubs.h: 4082 4083 2009-05-08 Maciej Stachowiak <mjs (a] apple.com> 4084 4085 Reviewed by Cameron Zwarich. 4086 4087 - fix test failures on 64-bit 4088 4089 * jit/JITArithmetic.cpp: 4090 (JSC::JIT::compileFastArithSlow_op_jnless): Avoid accidentaly treating an 4091 immediate int as an immediate float in the 64-bit value representation. 4092 4093 2009-05-08 Gavin Barraclough <barraclough (a] apple.com> 4094 4095 Rubber stamped by Oliver Hunt. 4096 4097 Removing an empty constructor and an uncalled, empty function seems to be a 4098 pretty solid 1% regeression on my machine, so I'm going to put them back. 4099 Um. Yeah, this this pretty pointles and makes no sense at all. I officially 4100 lose the will to live in 3... 2... 4101 4102 * bytecode/SamplingTool.cpp: 4103 (JSC::SamplingTool::notifyOfScope): 4104 * bytecode/SamplingTool.h: 4105 (JSC::SamplingTool::~SamplingTool): 4106 4107 2009-05-08 Gavin Barraclough <barraclough (a] apple.com> 4108 4109 Reviewed by Oliver "I see lots of ifdefs" Hunt. 4110 4111 Fix (kinda) for sampling tool breakage. The codeblock sampling tool has become 4112 b0rked due to recent changes in native function calling. The initialization of 4113 a ScopeNode appears to now occur before the sampling tool (or possibly the 4114 interpreter has been brought into existence, wihich leads to crashyness). 4115 4116 This patch doesn't fix the problem. The crash occurs when tracking a Scope, but 4117 we shouldn't need to track scopes when we're just sampling opcodes, not 4118 codeblocks. Not retaining Scopes when just opcode sampling will reduce sampling 4119 overhead reducing any instrumentation skew, which is a good thing. As a side 4120 benefit this patch also gets the opcode sampling going again, albeit in a bit of 4121 a lame way. Will come back later with a proper fix from codeblock sampling. 4122 4123 * JavaScriptCore.exp: 4124 * bytecode/SamplingTool.cpp: 4125 (JSC::compareLineCountInfoSampling): 4126 (JSC::SamplingTool::dump): 4127 * bytecode/SamplingTool.h: 4128 (JSC::SamplingTool::SamplingTool): 4129 * parser/Nodes.cpp: 4130 (JSC::ScopeNode::ScopeNode): 4131 4132 2009-05-07 Mark Rowe <mrowe (a] apple.com> 4133 4134 Rubber-stamped by Oliver Hunt. 4135 4136 Fix <https://bugs.webkit.org/show_bug.cgi?id=25640>. 4137 Bug 25640: Crash on quit in r43384 nightly build on Leopard w/ Safari 4 beta installed 4138 4139 Roll out r43366 as it removed symbols that Safari 4 Beta uses. 4140 4141 * JavaScriptCore.exp: 4142 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 4143 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 4144 * bytecode/SamplingTool.cpp: 4145 (JSC::SamplingThread::start): 4146 (JSC::SamplingThread::stop): 4147 * bytecode/SamplingTool.h: 4148 * wtf/CrossThreadRefCounted.h: 4149 (WTF::CrossThreadRefCounted::CrossThreadRefCounted): 4150 (WTF::::ref): 4151 (WTF::::deref): 4152 * wtf/Threading.h: 4153 * wtf/ThreadingNone.cpp: 4154 * wtf/ThreadingPthreads.cpp: 4155 (WTF::threadMapMutex): 4156 (WTF::initializeThreading): 4157 (WTF::threadMap): 4158 (WTF::identifierByPthreadHandle): 4159 (WTF::establishIdentifierForPthreadHandle): 4160 (WTF::pthreadHandleForIdentifier): 4161 (WTF::clearPthreadHandleForIdentifier): 4162 (WTF::createThreadInternal): 4163 (WTF::waitForThreadCompletion): 4164 (WTF::detachThread): 4165 (WTF::currentThread): 4166 * wtf/ThreadingWin.cpp: 4167 (WTF::threadMapMutex): 4168 (WTF::initializeThreading): 4169 (WTF::threadMap): 4170 (WTF::storeThreadHandleByIdentifier): 4171 (WTF::threadHandleForIdentifier): 4172 (WTF::clearThreadHandleForIdentifier): 4173 (WTF::createThreadInternal): 4174 (WTF::waitForThreadCompletion): 4175 (WTF::detachThread): 4176 (WTF::currentThread): 4177 * wtf/gtk/ThreadingGtk.cpp: 4178 (WTF::threadMapMutex): 4179 (WTF::initializeThreading): 4180 (WTF::threadMap): 4181 (WTF::identifierByGthreadHandle): 4182 (WTF::establishIdentifierForThread): 4183 (WTF::threadForIdentifier): 4184 (WTF::clearThreadForIdentifier): 4185 (WTF::createThreadInternal): 4186 (WTF::waitForThreadCompletion): 4187 (WTF::currentThread): 4188 * wtf/qt/ThreadingQt.cpp: 4189 (WTF::threadMapMutex): 4190 (WTF::threadMap): 4191 (WTF::identifierByQthreadHandle): 4192 (WTF::establishIdentifierForThread): 4193 (WTF::clearThreadForIdentifier): 4194 (WTF::threadForIdentifier): 4195 (WTF::initializeThreading): 4196 (WTF::createThreadInternal): 4197 (WTF::waitForThreadCompletion): 4198 (WTF::currentThread): 4199 4200 2009-05-07 Gustavo Noronha Silva <gns (a] gnome.org> 4201 4202 Suggested by Oliver Hunt. 4203 4204 Also check for Linux for the special-cased calling convention. 4205 4206 * jit/JIT.cpp: 4207 (JSC::JIT::privateCompileCTIMachineTrampolines): 4208 * wtf/Platform.h: 4209 4210 2009-05-07 Gavin Barraclough <barraclough (a] apple.com> 4211 4212 Reviewed by Maciej Stachowiak. 4213 4214 Previously, when appending to an existing string and growing the underlying buffer, 4215 we would actually allocate 110% of the required size in order to give us some space 4216 to expand into. Now we treat strings differently based on their size: 4217 4218 Small Strings (up to 4 pages): 4219 Expand the allocation size to 112.5% of the amount requested. This is largely sicking 4220 to our previous policy, however 112.5% is cheaper to calculate. 4221 4222 Medium Strings (up to 128 pages): 4223 For pages covering multiple pages over-allocation is less of a concern - any unused 4224 space will not be paged in if it is not used, so this is purely a VM overhead. For 4225 these strings allocate 2x the requested size. 4226 4227 Large Strings (to infinity and beyond!): 4228 Revert to our 112.5% policy - probably best to limit the amount of unused VM we allow 4229 any individual string be responsible for. 4230 4231 Additionally, round small allocations up to a multiple of 16 bytes, and medium and 4232 large allocations up to a multiple of page size. 4233 4234 ~1.5% progression on Sunspider, due to 5% improvement on tagcloud & 15% on validate. 4235 4236 * runtime/UString.cpp: 4237 (JSC::expandedSize): 4238 4239 2009-05-07 Geoffrey Garen <ggaren (a] apple.com> 4240 4241 Reviewed by Cameron Zwarich. 4242 4243 Fixed a minor sequencing error introduced by recent Parser speedups. 4244 4245 * runtime/JSGlobalData.cpp: 4246 (JSC::JSGlobalData::createNativeThunk): Missed a spot in my last patch. 4247 4248 2009-05-07 Geoffrey Garen <ggaren (a] apple.com> 4249 4250 Not reviewed. 4251 4252 * wtf/Platform.h: Reverted an accidental (and performance-catastrophic) 4253 change. 4254 4255 2009-05-07 Geoffrey Garen <ggaren (a] apple.com> 4256 4257 Reviewed by Cameron Zwarich. 4258 4259 Fixed a minor sequencing error introduced by recent Parser speedups. 4260 4261 * parser/Parser.cpp: 4262 (JSC::Parser::reparseInPlace): Missed a spot in my last patch. 4263 4264 2009-05-07 Geoffrey Garen <ggaren (a] apple.com> 4265 4266 Reviewed by Cameron Zwarich. 4267 4268 Fixed a minor sequencing error introduced by recent Parser speedups. 4269 4270 * parser/Parser.cpp: 4271 (JSC::Parser::parse): 4272 * parser/Parser.h: 4273 (JSC::Parser::parse): 4274 (JSC::Parser::reparse): Shrink the parsedObjects vector after allocating 4275 the root node, to avoid leaving a stray node in the vector, since that's 4276 a slight memory leak, and it causes problems during JSGlobalData teardown. 4277 4278 * runtime/JSGlobalData.cpp: 4279 (JSC::JSGlobalData::~JSGlobalData): ASSERT that we're not being torn 4280 down while we think we're still parsing, since that would cause lots of 4281 bad memory references during our destruction. 4282 4283 2009-05-07 Geoffrey Garen <ggaren (a] apple.com> 4284 4285 Reviewed by Cameron Zwarich. 4286 4287 Replaced two more macros with references to the JITStackFrame structure. 4288 4289 * jit/JIT.cpp: 4290 (JSC::JIT::privateCompileMainPass): 4291 * jit/JITInlineMethods.h: 4292 (JSC::JIT::restoreArgumentReference): 4293 * jit/JITStubs.cpp: 4294 (JSC::): 4295 * jit/JITStubs.h: 4296 4297 2009-05-07 Oliver Hunt <oliver (a] apple.com> 4298 4299 Reviewed by Gavin Barraclough. 4300 4301 Improve native call performance 4302 4303 Fix the windows build by adding calling convention declarations everywhere, 4304 chose fastcall as that seemed most sensible given we were having to declare 4305 the convention explicitly. In addition switched to fastcall on mac in the 4306 deluded belief that documented fastcall behavior on windows would match 4307 actual its actual behavior. 4308 4309 * API/JSCallbackFunction.h: 4310 * API/JSCallbackObject.h: 4311 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 4312 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 4313 * interpreter/CallFrame.h: 4314 (JSC::ExecState::argumentCount): 4315 * jit/JIT.cpp: 4316 (JSC::JIT::privateCompileCTIMachineTrampolines): 4317 * jsc.cpp: 4318 (functionPrint): 4319 (functionDebug): 4320 (functionGC): 4321 (functionVersion): 4322 (functionRun): 4323 (functionLoad): 4324 (functionSetSamplingFlags): 4325 (functionClearSamplingFlags): 4326 (functionReadline): 4327 (functionQuit): 4328 * runtime/ArrayConstructor.cpp: 4329 (JSC::callArrayConstructor): 4330 * runtime/ArrayPrototype.cpp: 4331 (JSC::arrayProtoFuncToString): 4332 (JSC::arrayProtoFuncToLocaleString): 4333 (JSC::arrayProtoFuncJoin): 4334 (JSC::arrayProtoFuncConcat): 4335 (JSC::arrayProtoFuncPop): 4336 (JSC::arrayProtoFuncPush): 4337 (JSC::arrayProtoFuncReverse): 4338 (JSC::arrayProtoFuncShift): 4339 (JSC::arrayProtoFuncSlice): 4340 (JSC::arrayProtoFuncSort): 4341 (JSC::arrayProtoFuncSplice): 4342 (JSC::arrayProtoFuncUnShift): 4343 (JSC::arrayProtoFuncFilter): 4344 (JSC::arrayProtoFuncMap): 4345 (JSC::arrayProtoFuncEvery): 4346 (JSC::arrayProtoFuncForEach): 4347 (JSC::arrayProtoFuncSome): 4348 (JSC::arrayProtoFuncReduce): 4349 (JSC::arrayProtoFuncReduceRight): 4350 (JSC::arrayProtoFuncIndexOf): 4351 (JSC::arrayProtoFuncLastIndexOf): 4352 * runtime/BooleanConstructor.cpp: 4353 (JSC::callBooleanConstructor): 4354 * runtime/BooleanPrototype.cpp: 4355 (JSC::booleanProtoFuncToString): 4356 (JSC::booleanProtoFuncValueOf): 4357 * runtime/CallData.h: 4358 * runtime/DateConstructor.cpp: 4359 (JSC::callDate): 4360 (JSC::dateParse): 4361 (JSC::dateNow): 4362 (JSC::dateUTC): 4363 * runtime/DatePrototype.cpp: 4364 (JSC::dateProtoFuncToString): 4365 (JSC::dateProtoFuncToUTCString): 4366 (JSC::dateProtoFuncToDateString): 4367 (JSC::dateProtoFuncToTimeString): 4368 (JSC::dateProtoFuncToLocaleString): 4369 (JSC::dateProtoFuncToLocaleDateString): 4370 (JSC::dateProtoFuncToLocaleTimeString): 4371 (JSC::dateProtoFuncGetTime): 4372 (JSC::dateProtoFuncGetFullYear): 4373 (JSC::dateProtoFuncGetUTCFullYear): 4374 (JSC::dateProtoFuncToGMTString): 4375 (JSC::dateProtoFuncGetMonth): 4376 (JSC::dateProtoFuncGetUTCMonth): 4377 (JSC::dateProtoFuncGetDate): 4378 (JSC::dateProtoFuncGetUTCDate): 4379 (JSC::dateProtoFuncGetDay): 4380 (JSC::dateProtoFuncGetUTCDay): 4381 (JSC::dateProtoFuncGetHours): 4382 (JSC::dateProtoFuncGetUTCHours): 4383 (JSC::dateProtoFuncGetMinutes): 4384 (JSC::dateProtoFuncGetUTCMinutes): 4385 (JSC::dateProtoFuncGetSeconds): 4386 (JSC::dateProtoFuncGetUTCSeconds): 4387 (JSC::dateProtoFuncGetMilliSeconds): 4388 (JSC::dateProtoFuncGetUTCMilliseconds): 4389 (JSC::dateProtoFuncGetTimezoneOffset): 4390 (JSC::dateProtoFuncSetTime): 4391 (JSC::dateProtoFuncSetMilliSeconds): 4392 (JSC::dateProtoFuncSetUTCMilliseconds): 4393 (JSC::dateProtoFuncSetSeconds): 4394 (JSC::dateProtoFuncSetUTCSeconds): 4395 (JSC::dateProtoFuncSetMinutes): 4396 (JSC::dateProtoFuncSetUTCMinutes): 4397 (JSC::dateProtoFuncSetHours): 4398 (JSC::dateProtoFuncSetUTCHours): 4399 (JSC::dateProtoFuncSetDate): 4400 (JSC::dateProtoFuncSetUTCDate): 4401 (JSC::dateProtoFuncSetMonth): 4402 (JSC::dateProtoFuncSetUTCMonth): 4403 (JSC::dateProtoFuncSetFullYear): 4404 (JSC::dateProtoFuncSetUTCFullYear): 4405 (JSC::dateProtoFuncSetYear): 4406 (JSC::dateProtoFuncGetYear): 4407 * runtime/ErrorConstructor.cpp: 4408 (JSC::callErrorConstructor): 4409 * runtime/ErrorPrototype.cpp: 4410 (JSC::errorProtoFuncToString): 4411 * runtime/FunctionConstructor.cpp: 4412 (JSC::callFunctionConstructor): 4413 * runtime/FunctionPrototype.cpp: 4414 (JSC::callFunctionPrototype): 4415 (JSC::functionProtoFuncToString): 4416 (JSC::functionProtoFuncApply): 4417 (JSC::functionProtoFuncCall): 4418 * runtime/JSFunction.h: 4419 (JSC::JSFunction::nativeFunction): 4420 (JSC::JSFunction::setScopeChain): 4421 * runtime/JSGlobalObjectFunctions.cpp: 4422 (JSC::globalFuncEval): 4423 (JSC::globalFuncParseInt): 4424 (JSC::globalFuncParseFloat): 4425 (JSC::globalFuncIsNaN): 4426 (JSC::globalFuncIsFinite): 4427 (JSC::globalFuncDecodeURI): 4428 (JSC::globalFuncDecodeURIComponent): 4429 (JSC::globalFuncEncodeURI): 4430 (JSC::globalFuncEncodeURIComponent): 4431 (JSC::globalFuncEscape): 4432 (JSC::globalFuncUnescape): 4433 (JSC::globalFuncJSCPrint): 4434 * runtime/JSGlobalObjectFunctions.h: 4435 * runtime/MathObject.cpp: 4436 (JSC::mathProtoFuncAbs): 4437 (JSC::mathProtoFuncACos): 4438 (JSC::mathProtoFuncASin): 4439 (JSC::mathProtoFuncATan): 4440 (JSC::mathProtoFuncATan2): 4441 (JSC::mathProtoFuncCeil): 4442 (JSC::mathProtoFuncCos): 4443 (JSC::mathProtoFuncExp): 4444 (JSC::mathProtoFuncFloor): 4445 (JSC::mathProtoFuncLog): 4446 (JSC::mathProtoFuncMax): 4447 (JSC::mathProtoFuncMin): 4448 (JSC::mathProtoFuncPow): 4449 (JSC::mathProtoFuncRandom): 4450 (JSC::mathProtoFuncRound): 4451 (JSC::mathProtoFuncSin): 4452 (JSC::mathProtoFuncSqrt): 4453 (JSC::mathProtoFuncTan): 4454 * runtime/NativeErrorConstructor.cpp: 4455 (JSC::callNativeErrorConstructor): 4456 * runtime/NativeFunctionWrapper.h: 4457 * runtime/NumberConstructor.cpp: 4458 (JSC::callNumberConstructor): 4459 * runtime/NumberPrototype.cpp: 4460 (JSC::numberProtoFuncToString): 4461 (JSC::numberProtoFuncToLocaleString): 4462 (JSC::numberProtoFuncValueOf): 4463 (JSC::numberProtoFuncToFixed): 4464 (JSC::numberProtoFuncToExponential): 4465 (JSC::numberProtoFuncToPrecision): 4466 * runtime/ObjectConstructor.cpp: 4467 (JSC::callObjectConstructor): 4468 * runtime/ObjectPrototype.cpp: 4469 (JSC::objectProtoFuncValueOf): 4470 (JSC::objectProtoFuncHasOwnProperty): 4471 (JSC::objectProtoFuncIsPrototypeOf): 4472 (JSC::objectProtoFuncDefineGetter): 4473 (JSC::objectProtoFuncDefineSetter): 4474 (JSC::objectProtoFuncLookupGetter): 4475 (JSC::objectProtoFuncLookupSetter): 4476 (JSC::objectProtoFuncPropertyIsEnumerable): 4477 (JSC::objectProtoFuncToLocaleString): 4478 (JSC::objectProtoFuncToString): 4479 * runtime/ObjectPrototype.h: 4480 * runtime/RegExpConstructor.cpp: 4481 (JSC::callRegExpConstructor): 4482 * runtime/RegExpObject.cpp: 4483 (JSC::callRegExpObject): 4484 * runtime/RegExpPrototype.cpp: 4485 (JSC::regExpProtoFuncTest): 4486 (JSC::regExpProtoFuncExec): 4487 (JSC::regExpProtoFuncCompile): 4488 (JSC::regExpProtoFuncToString): 4489 * runtime/StringConstructor.cpp: 4490 (JSC::stringFromCharCode): 4491 (JSC::callStringConstructor): 4492 * runtime/StringPrototype.cpp: 4493 (JSC::stringProtoFuncReplace): 4494 (JSC::stringProtoFuncToString): 4495 (JSC::stringProtoFuncCharAt): 4496 (JSC::stringProtoFuncCharCodeAt): 4497 (JSC::stringProtoFuncConcat): 4498 (JSC::stringProtoFuncIndexOf): 4499 (JSC::stringProtoFuncLastIndexOf): 4500 (JSC::stringProtoFuncMatch): 4501 (JSC::stringProtoFuncSearch): 4502 (JSC::stringProtoFuncSlice): 4503 (JSC::stringProtoFuncSplit): 4504 (JSC::stringProtoFuncSubstr): 4505 (JSC::stringProtoFuncSubstring): 4506 (JSC::stringProtoFuncToLowerCase): 4507 (JSC::stringProtoFuncToUpperCase): 4508 (JSC::stringProtoFuncLocaleCompare): 4509 (JSC::stringProtoFuncBig): 4510 (JSC::stringProtoFuncSmall): 4511 (JSC::stringProtoFuncBlink): 4512 (JSC::stringProtoFuncBold): 4513 (JSC::stringProtoFuncFixed): 4514 (JSC::stringProtoFuncItalics): 4515 (JSC::stringProtoFuncStrike): 4516 (JSC::stringProtoFuncSub): 4517 (JSC::stringProtoFuncSup): 4518 (JSC::stringProtoFuncFontcolor): 4519 (JSC::stringProtoFuncFontsize): 4520 (JSC::stringProtoFuncAnchor): 4521 (JSC::stringProtoFuncLink): 4522 * wtf/Platform.h: 4523 4524 2009-05-07 Geoffrey Garen <ggaren (a] apple.com> 4525 4526 Not reviewed. 4527 4528 Rolled out a portion of r43352 because it broke 64bit. 4529 4530 * jit/JITStubs.h: 4531 4532 2009-05-07 Kevin Ollivier <kevino (a] theolliviers.com> 4533 4534 Build fix for functions reaturning ThreadIdentifier. 4535 4536 * wtf/ThreadingNone.cpp: 4537 (WTF::createThreadInternal): 4538 (WTF::currentThread): 4539 4540 2009-05-07 Maciej Stachowiak <mjs (a] apple.com> 4541 4542 Reviewed by John Honeycutt. 4543 4544 - enable optimization case im the last patch that I accidentally had disabled. 4545 4546 * jit/JITArithmetic.cpp: 4547 (JSC::JIT::compileFastArithSlow_op_jnless): 4548 4549 2009-05-07 Dmitry Titov <dimich (a] chromium.org> 4550 4551 Attempt to fix Win build. 4552 4553 * jit/JITArithmetic.cpp: 4554 (JSC::JIT::compileFastArithSlow_op_jnless): 4555 4556 2009-05-07 Dmitry Titov <dimich (a] chromium.org> 4557 4558 Reviewed by Alexey Proskuryakov and Adam Roben. 4559 4560 https://bugs.webkit.org/show_bug.cgi?id=25348 4561 Change WTF::ThreadIdentifier to be an actual (but wrapped) thread id, remove ThreadMap. 4562 4563 * wtf/Threading.h: 4564 (WTF::ThreadIdentifier::ThreadIdentifier): 4565 (WTF::ThreadIdentifier::isValid): 4566 (WTF::ThreadIdentifier::invalidate): 4567 (WTF::ThreadIdentifier::platformId): 4568 ThreadIdentifier is now a class, containing a PlatformThreadIdentifier and 4569 methods that are used across the code on thread ids: construction, comparisons, 4570 check for 'valid' state etc. '0' is used as invalid id, which happens to just work 4571 with all platform-specific thread id implementations. 4572 4573 All the following files repeatedly reflect the new ThreadIdentifier for each platform. 4574 We remove ThreadMap and threadMapMutex from all of them, remove the functions that 4575 populated/searched/cleared the map and add platform-specific comparison operators 4576 for ThreadIdentifier. 4577 4578 * wtf/gtk/ThreadingGtk.cpp: 4579 (WTF::ThreadIdentifier::operator==): 4580 (WTF::ThreadIdentifier::operator!=): 4581 (WTF::initializeThreading): 4582 (WTF::createThreadInternal): 4583 (WTF::waitForThreadCompletion): 4584 (WTF::currentThread): 4585 4586 * wtf/ThreadingNone.cpp: 4587 (WTF::ThreadIdentifier::operator==): 4588 (WTF::ThreadIdentifier::operator!=): 4589 4590 * wtf/ThreadingPthreads.cpp: 4591 (WTF::ThreadIdentifier::operator==): 4592 (WTF::ThreadIdentifier::operator!=): 4593 (WTF::initializeThreading): 4594 (WTF::createThreadInternal): 4595 (WTF::waitForThreadCompletion): 4596 (WTF::detachThread): 4597 (WTF::currentThread): 4598 4599 * wtf/qt/ThreadingQt.cpp: 4600 (WTF::ThreadIdentifier::operator==): 4601 (WTF::ThreadIdentifier::operator!=): 4602 (WTF::initializeThreading): 4603 (WTF::createThreadInternal): 4604 (WTF::waitForThreadCompletion): 4605 (WTF::currentThread): 4606 4607 * wtf/ThreadingWin.cpp: 4608 (WTF::ThreadIdentifier::operator==): 4609 (WTF::ThreadIdentifier::operator!=): 4610 (WTF::initializeThreading): 4611 (WTF::createThreadInternal): All the platforms (except Windows) used a sequential 4612 counter as a thread ID and mapped it into platform ID. Windows was using native thread 4613 id and mapped it into thread handle. Since we can always obtain a thread handle 4614 by thread id, createThread now closes the handle. 4615 (WTF::waitForThreadCompletion): obtains another one using OpenThread(id) API. If can not obtain a handle, 4616 it means the thread already exited. 4617 (WTF::detachThread): 4618 (WTF::currentThread): 4619 (WTF::detachThreadDeprecated): old function, renamed (for Win Safari 4 beta which uses it for now). 4620 (WTF::waitForThreadCompletionDeprecated): same. 4621 (WTF::currentThreadDeprecated): same. 4622 (WTF::createThreadDeprecated): same. 4623 4624 * bytecode/SamplingTool.h: 4625 * bytecode/SamplingTool.cpp: Use DEFINE_STATIC_LOCAL for a static ThreadIdentifier variable, to avoid static constructor. 4626 4627 * JavaScriptCore.exp: export lists - updated the WTF threading functions decorated names 4628 since they now take a different type as a parameter. 4629 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: ditto for Windows, plus added "deprecated" functions 4630 that take old parameter type - turns out public beta of Safari 4 uses those, so they need to be kept along for a while. 4631 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: ditto. 4632 4633 2009-05-07 Maciej Stachowiak <mjs (a] apple.com> 4634 4635 Reviewed by Sam Weinig. 4636 4637 - optimize various cases of branch-fused less 4638 4639 1% speedup on SunSpider overall 4640 13% speedup on math-cordic 4641 4642 * jit/JIT.cpp: 4643 (JSC::JIT::privateCompileMainPass): 4644 op_loop_if_less: Optimize case of constant as first operand, just as case of constant as 4645 second operand. 4646 op_jnless: Factored out into compileFastArith_op_jnless. 4647 (JSC::JIT::privateCompileSlowCases): 4648 op_jnless: Factored out into compileFastArithSlow_op_jnless. 4649 * jit/JIT.h: 4650 * jit/JITArithmetic.cpp: 4651 (JSC::JIT::compileFastArith_op_jnless): Factored out from main compile loop. 4652 - Generate inline code for comparison of constant immediate int as first operand to another 4653 immediate int, as for loop_if_less 4654 4655 (JSC::JIT::compileFastArithSlow_op_jnless): 4656 - Generate inline code for comparing two floating point numbers. 4657 - Generate code for both cases of comparing a floating point number to a constant immediate 4658 int. 4659 * bytecode/CodeBlock.cpp: 4660 (JSC::CodeBlock::dump): Fix dumping of op_jnless (tangentially related bugfix). 4661 4662 2009-05-07 Geoffrey Garen <ggaren (a] apple.com> 4663 4664 Reviewed by Sam Weinig. 4665 4666 Added the return address of a stub function to the JITStackFrame abstraction. 4667 4668 * jit/JIT.cpp: 4669 * jit/JIT.h: 4670 * jit/JITStubs.cpp: 4671 (JSC::): 4672 (JSC::StackHack::StackHack): 4673 (JSC::StackHack::~StackHack): 4674 (JSC::returnToThrowTrampoline): 4675 (JSC::JITStubs::cti_op_convert_this): 4676 (JSC::JITStubs::cti_op_end): 4677 (JSC::JITStubs::cti_op_add): 4678 (JSC::JITStubs::cti_op_pre_inc): 4679 (JSC::JITStubs::cti_timeout_check): 4680 (JSC::JITStubs::cti_register_file_check): 4681 (JSC::JITStubs::cti_op_loop_if_less): 4682 (JSC::JITStubs::cti_op_loop_if_lesseq): 4683 (JSC::JITStubs::cti_op_new_object): 4684 (JSC::JITStubs::cti_op_put_by_id_generic): 4685 (JSC::JITStubs::cti_op_get_by_id_generic): 4686 (JSC::JITStubs::cti_op_put_by_id): 4687 (JSC::JITStubs::cti_op_put_by_id_second): 4688 (JSC::JITStubs::cti_op_put_by_id_fail): 4689 (JSC::JITStubs::cti_op_get_by_id): 4690 (JSC::JITStubs::cti_op_get_by_id_second): 4691 (JSC::JITStubs::cti_op_get_by_id_self_fail): 4692 (JSC::JITStubs::cti_op_get_by_id_proto_list): 4693 (JSC::JITStubs::cti_op_get_by_id_proto_list_full): 4694 (JSC::JITStubs::cti_op_get_by_id_proto_fail): 4695 (JSC::JITStubs::cti_op_get_by_id_array_fail): 4696 (JSC::JITStubs::cti_op_get_by_id_string_fail): 4697 (JSC::JITStubs::cti_op_instanceof): 4698 (JSC::JITStubs::cti_op_del_by_id): 4699 (JSC::JITStubs::cti_op_mul): 4700 (JSC::JITStubs::cti_op_new_func): 4701 (JSC::JITStubs::cti_op_call_JSFunction): 4702 (JSC::JITStubs::cti_op_call_arityCheck): 4703 (JSC::JITStubs::cti_vm_dontLazyLinkCall): 4704 (JSC::JITStubs::cti_vm_lazyLinkCall): 4705 (JSC::JITStubs::cti_op_push_activation): 4706 (JSC::JITStubs::cti_op_call_NotJSFunction): 4707 (JSC::JITStubs::cti_op_create_arguments): 4708 (JSC::JITStubs::cti_op_create_arguments_no_params): 4709 (JSC::JITStubs::cti_op_tear_off_activation): 4710 (JSC::JITStubs::cti_op_tear_off_arguments): 4711 (JSC::JITStubs::cti_op_profile_will_call): 4712 (JSC::JITStubs::cti_op_profile_did_call): 4713 (JSC::JITStubs::cti_op_ret_scopeChain): 4714 (JSC::JITStubs::cti_op_new_array): 4715 (JSC::JITStubs::cti_op_resolve): 4716 (JSC::JITStubs::cti_op_construct_JSConstruct): 4717 (JSC::JITStubs::cti_op_construct_NotJSConstruct): 4718 (JSC::JITStubs::cti_op_get_by_val): 4719 (JSC::JITStubs::cti_op_get_by_val_string): 4720 (JSC::JITStubs::cti_op_get_by_val_byte_array): 4721 (JSC::JITStubs::cti_op_resolve_func): 4722 (JSC::JITStubs::cti_op_sub): 4723 (JSC::JITStubs::cti_op_put_by_val): 4724 (JSC::JITStubs::cti_op_put_by_val_array): 4725 (JSC::JITStubs::cti_op_put_by_val_byte_array): 4726 (JSC::JITStubs::cti_op_lesseq): 4727 (JSC::JITStubs::cti_op_loop_if_true): 4728 (JSC::JITStubs::cti_op_load_varargs): 4729 (JSC::JITStubs::cti_op_negate): 4730 (JSC::JITStubs::cti_op_resolve_base): 4731 (JSC::JITStubs::cti_op_resolve_skip): 4732 (JSC::JITStubs::cti_op_resolve_global): 4733 (JSC::JITStubs::cti_op_div): 4734 (JSC::JITStubs::cti_op_pre_dec): 4735 (JSC::JITStubs::cti_op_jless): 4736 (JSC::JITStubs::cti_op_not): 4737 (JSC::JITStubs::cti_op_jtrue): 4738 (JSC::JITStubs::cti_op_post_inc): 4739 (JSC::JITStubs::cti_op_eq): 4740 (JSC::JITStubs::cti_op_lshift): 4741 (JSC::JITStubs::cti_op_bitand): 4742 (JSC::JITStubs::cti_op_rshift): 4743 (JSC::JITStubs::cti_op_bitnot): 4744 (JSC::JITStubs::cti_op_resolve_with_base): 4745 (JSC::JITStubs::cti_op_new_func_exp): 4746 (JSC::JITStubs::cti_op_mod): 4747 (JSC::JITStubs::cti_op_less): 4748 (JSC::JITStubs::cti_op_neq): 4749 (JSC::JITStubs::cti_op_post_dec): 4750 (JSC::JITStubs::cti_op_urshift): 4751 (JSC::JITStubs::cti_op_bitxor): 4752 (JSC::JITStubs::cti_op_new_regexp): 4753 (JSC::JITStubs::cti_op_bitor): 4754 (JSC::JITStubs::cti_op_call_eval): 4755 (JSC::JITStubs::cti_op_throw): 4756 (JSC::JITStubs::cti_op_get_pnames): 4757 (JSC::JITStubs::cti_op_next_pname): 4758 (JSC::JITStubs::cti_op_push_scope): 4759 (JSC::JITStubs::cti_op_pop_scope): 4760 (JSC::JITStubs::cti_op_typeof): 4761 (JSC::JITStubs::cti_op_is_undefined): 4762 (JSC::JITStubs::cti_op_is_boolean): 4763 (JSC::JITStubs::cti_op_is_number): 4764 (JSC::JITStubs::cti_op_is_string): 4765 (JSC::JITStubs::cti_op_is_object): 4766 (JSC::JITStubs::cti_op_is_function): 4767 (JSC::JITStubs::cti_op_stricteq): 4768 (JSC::JITStubs::cti_op_to_primitive): 4769 (JSC::JITStubs::cti_op_strcat): 4770 (JSC::JITStubs::cti_op_nstricteq): 4771 (JSC::JITStubs::cti_op_to_jsnumber): 4772 (JSC::JITStubs::cti_op_in): 4773 (JSC::JITStubs::cti_op_push_new_scope): 4774 (JSC::JITStubs::cti_op_jmp_scopes): 4775 (JSC::JITStubs::cti_op_put_by_index): 4776 (JSC::JITStubs::cti_op_switch_imm): 4777 (JSC::JITStubs::cti_op_switch_char): 4778 (JSC::JITStubs::cti_op_switch_string): 4779 (JSC::JITStubs::cti_op_del_by_val): 4780 (JSC::JITStubs::cti_op_put_getter): 4781 (JSC::JITStubs::cti_op_put_setter): 4782 (JSC::JITStubs::cti_op_new_error): 4783 (JSC::JITStubs::cti_op_debug): 4784 (JSC::JITStubs::cti_vm_throw): 4785 * jit/JITStubs.h: 4786 (JSC::JITStackFrame::returnAddressSlot): 4787 4788 2009-05-07 Darin Adler <darin (a] apple.com> 4789 4790 Reviewed by Geoff Garen. 4791 4792 * parser/Lexer.cpp: 4793 (JSC::Lexer::lex): Fix missing braces. This would make us always 4794 take the slower case for string parsing and Visual Studio correctly 4795 noticed unreachable code. 4796 4797 2009-05-07 Darin Adler <darin (a] apple.com> 4798 4799 Reviewed by Sam Weinig. 4800 4801 Bug 25589: goto instead of state machine in lexer 4802 https://bugs.webkit.org/show_bug.cgi?id=25589 4803 4804 SunSpider is 0.8% faster. 4805 4806 * parser/Lexer.cpp: 4807 (JSC::Lexer::currentCharacter): Added. 4808 (JSC::Lexer::currentOffset): Changed to call currentCharacter for clarity. 4809 (JSC::Lexer::setCode): Removed code to set now-obsolete m_skipLineEnd. 4810 (JSC::Lexer::shiftLineTerminator): Added. Handles line numbers and the 4811 two-character line terminators. 4812 (JSC::Lexer::makeIdentifier): Changed to take characters and length rather 4813 than a vector, since we now make these directly out of the source buffer 4814 when possible. 4815 (JSC::Lexer::lastTokenWasRestrKeyword): Added. 4816 (JSC::isNonASCIIIdentStart): Broke out the non-inline part. 4817 (JSC::isIdentStart): Moved here. 4818 (JSC::isNonASCIIIdentPart): Broke out the non-inline part. 4819 (JSC::isIdentPart): Moved here. 4820 (JSC::singleEscape): Moved here, and removed some unneeded cases. 4821 (JSC::Lexer::record8): Moved here. 4822 (JSC::Lexer::record16): Moved here. 4823 (JSC::Lexer::lex): Rewrote this whole function to use goto and not use 4824 a state machine. Got rid of most of the local variables. Also rolled the 4825 matchPunctuator function in here. 4826 (JSC::Lexer::scanRegExp): Changed to use the new version of isLineTerminator. 4827 Clear m_buffer16 after using it instead of before. 4828 4829 * parser/Lexer.h: Removed State enum, setDone function, nextLine function, 4830 lookupKeywordFunction, one of the isLineTerminator functions, m_done data member, 4831 m_skipLineEnd data member, and m_state data member. Added shiftLineTerminator 4832 function, currentCharacter function, and changed the arguments to the makeIdentifier 4833 function. Removed one branch from the isLineTerminator function. 4834 4835 * runtime/StringPrototype.cpp: 4836 (JSC::stringProtoFuncReplace): Streamlined the case where we don't replace anything. 4837 4838 2009-05-07 Geoffrey Garen <ggaren (a] apple.com> 4839 4840 Reviewed by Gavin Barraclough. 4841 4842 Removed a few more special constants, and replaced them with uses of 4843 the JITStackFrame struct. 4844 4845 Removed one of the two possible definitions of VoidPtrPair. The Mac 4846 definition was more elegant, but SunSpider doesn't think it's any 4847 faster, and it's net less elegant to have two ways of doing things. 4848 4849 * jit/JIT.cpp: 4850 (JSC::JIT::privateCompileMainPass): 4851 (JSC::JIT::privateCompile): 4852 * jit/JITStubs.h: 4853 (JSC::): 4854 4855 2009-05-07 Darin Adler <darin (a] apple.com> 4856 4857 * runtime/ScopeChain.h: 4858 (JSC::ScopeChainNode::~ScopeChainNode): Tweak formatting. 4859 4860 2009-05-07 Simon Hausmann <simon.hausmann (a] nokia.com> 4861 4862 Reviewed by Tor Arne Vestb. 4863 4864 Fix the build thread stack base determination build on Symbian, 4865 by moving the code block before PLATFORM(UNIX), which is also 4866 enabled on Symbian builds. 4867 4868 * runtime/Collector.cpp: 4869 (JSC::currentThreadStackBase): 4870 4871 2009-05-07 Oliver Hunt <oliver (a] apple.com> 4872 4873 Reviewed by Gavin Barraclough. 4874 4875 Fix crash due to incorrectly using an invalid scopechain 4876 4877 stringProtoFuncReplace was checking for an exception on a CachedCall 4878 by asking for the cached callframes exception. Unfortunately this 4879 could crash in certain circumstances as CachedCall does not guarantee 4880 a valid callframe following a call. Even more unfortunately the check 4881 was entirely unnecessary as there is only a single exception slot per 4882 global data, so it was already checked via the initial exec->hadException() 4883 check. 4884 4885 To make bugs like this more obvious, i've added a debug only destructor 4886 to ScopeChainNode that 0's all of its fields. This exposed a crash in 4887 the standard javascriptcore tests. 4888 4889 * runtime/ScopeChain.h: 4890 (JSC::ScopeChainNode::~ScopeChainNode): 4891 (JSC::ScopeChain::~ScopeChain): 4892 * runtime/StringPrototype.cpp: 4893 (JSC::stringProtoFuncReplace): 4894 4895 2009-05-07 Gavin Barraclough <barraclough (a] apple.com> 4896 4897 Reviewed by Geoff Garen. 4898 4899 Enable op_strcat across += assignments. This patch allows the lhs of a read/modify node 4900 to be included within the concatenation operation, and also modifies the implementation 4901 of the concatenation to attempt to reuse and cat onto the leftmost string, rather than 4902 always allocating a new empty output string to copy into (as was previously the behaviour). 4903 4904 ~0.5% progression, due to a 3%-3.5% progression on the string tests (particularly validate). 4905 4906 * parser/Nodes.cpp: 4907 (JSC::BinaryOpNode::emitStrcat): 4908 (JSC::emitReadModifyAssignment): 4909 (JSC::ReadModifyResolveNode::emitBytecode): 4910 (JSC::ReadModifyDotNode::emitBytecode): 4911 (JSC::ReadModifyBracketNode::emitBytecode): 4912 * parser/Nodes.h: 4913 * runtime/Operations.h: 4914 (JSC::concatenateStrings): 4915 * runtime/UString.cpp: 4916 (JSC::UString::reserveCapacity): 4917 * runtime/UString.h: 4918 4919 2009-05-07 Simon Hausmann <simon.hausmann (a] nokia.com> 4920 4921 Reviewed by Oliver Hunt. 4922 4923 Fix the build on Windows without JIT: interpreter/RegisterFile.h needs 4924 roundUpAllocationSize, which is protected by #if ENABLED(ASSEMBLER). 4925 Moved the #ifdef down and always offer the function. 4926 4927 * jit/ExecutableAllocator.h: 4928 4929 2009-05-06 Geoffrey Garen <ggaren (a] apple.com> 4930 4931 Reviewed by Gavin "++" Barraclough. 4932 4933 Added some abstraction around the JIT stub calling convention by creating 4934 a struct to represent the persistent stack frame JIT code shares with 4935 JIT stubs. 4936 4937 SunSpider reports no change. 4938 4939 * jit/JIT.h: 4940 * jit/JITStubs.cpp: 4941 (JSC::JITStubs::cti_op_convert_this): 4942 (JSC::JITStubs::cti_op_end): 4943 (JSC::JITStubs::cti_op_add): 4944 (JSC::JITStubs::cti_op_pre_inc): 4945 (JSC::JITStubs::cti_timeout_check): 4946 (JSC::JITStubs::cti_register_file_check): 4947 (JSC::JITStubs::cti_op_loop_if_less): 4948 (JSC::JITStubs::cti_op_loop_if_lesseq): 4949 (JSC::JITStubs::cti_op_new_object): 4950 (JSC::JITStubs::cti_op_put_by_id_generic): 4951 (JSC::JITStubs::cti_op_get_by_id_generic): 4952 (JSC::JITStubs::cti_op_put_by_id): 4953 (JSC::JITStubs::cti_op_put_by_id_second): 4954 (JSC::JITStubs::cti_op_put_by_id_fail): 4955 (JSC::JITStubs::cti_op_get_by_id): 4956 (JSC::JITStubs::cti_op_get_by_id_second): 4957 (JSC::JITStubs::cti_op_get_by_id_self_fail): 4958 (JSC::JITStubs::cti_op_get_by_id_proto_list): 4959 (JSC::JITStubs::cti_op_get_by_id_proto_list_full): 4960 (JSC::JITStubs::cti_op_get_by_id_proto_fail): 4961 (JSC::JITStubs::cti_op_get_by_id_array_fail): 4962 (JSC::JITStubs::cti_op_get_by_id_string_fail): 4963 (JSC::JITStubs::cti_op_instanceof): 4964 (JSC::JITStubs::cti_op_del_by_id): 4965 (JSC::JITStubs::cti_op_mul): 4966 (JSC::JITStubs::cti_op_new_func): 4967 (JSC::JITStubs::cti_op_call_JSFunction): 4968 (JSC::JITStubs::cti_op_call_arityCheck): 4969 (JSC::JITStubs::cti_vm_dontLazyLinkCall): 4970 (JSC::JITStubs::cti_vm_lazyLinkCall): 4971 (JSC::JITStubs::cti_op_push_activation): 4972 (JSC::JITStubs::cti_op_call_NotJSFunction): 4973 (JSC::JITStubs::cti_op_create_arguments): 4974 (JSC::JITStubs::cti_op_create_arguments_no_params): 4975 (JSC::JITStubs::cti_op_tear_off_activation): 4976 (JSC::JITStubs::cti_op_tear_off_arguments): 4977 (JSC::JITStubs::cti_op_profile_will_call): 4978 (JSC::JITStubs::cti_op_profile_did_call): 4979 (JSC::JITStubs::cti_op_ret_scopeChain): 4980 (JSC::JITStubs::cti_op_new_array): 4981 (JSC::JITStubs::cti_op_resolve): 4982 (JSC::JITStubs::cti_op_construct_JSConstruct): 4983 (JSC::JITStubs::cti_op_construct_NotJSConstruct): 4984 (JSC::JITStubs::cti_op_get_by_val): 4985 (JSC::JITStubs::cti_op_get_by_val_string): 4986 (JSC::JITStubs::cti_op_get_by_val_byte_array): 4987 (JSC::JITStubs::cti_op_resolve_func): 4988 (JSC::JITStubs::cti_op_sub): 4989 (JSC::JITStubs::cti_op_put_by_val): 4990 (JSC::JITStubs::cti_op_put_by_val_array): 4991 (JSC::JITStubs::cti_op_put_by_val_byte_array): 4992 (JSC::JITStubs::cti_op_lesseq): 4993 (JSC::JITStubs::cti_op_loop_if_true): 4994 (JSC::JITStubs::cti_op_load_varargs): 4995 (JSC::JITStubs::cti_op_negate): 4996 (JSC::JITStubs::cti_op_resolve_base): 4997 (JSC::JITStubs::cti_op_resolve_skip): 4998 (JSC::JITStubs::cti_op_resolve_global): 4999 (JSC::JITStubs::cti_op_div): 5000 (JSC::JITStubs::cti_op_pre_dec): 5001 (JSC::JITStubs::cti_op_jless): 5002 (JSC::JITStubs::cti_op_not): 5003 (JSC::JITStubs::cti_op_jtrue): 5004 (JSC::JITStubs::cti_op_post_inc): 5005 (JSC::JITStubs::cti_op_eq): 5006 (JSC::JITStubs::cti_op_lshift): 5007 (JSC::JITStubs::cti_op_bitand): 5008 (JSC::JITStubs::cti_op_rshift): 5009 (JSC::JITStubs::cti_op_bitnot): 5010 (JSC::JITStubs::cti_op_resolve_with_base): 5011 (JSC::JITStubs::cti_op_new_func_exp): 5012 (JSC::JITStubs::cti_op_mod): 5013 (JSC::JITStubs::cti_op_less): 5014 (JSC::JITStubs::cti_op_neq): 5015 (JSC::JITStubs::cti_op_post_dec): 5016 (JSC::JITStubs::cti_op_urshift): 5017 (JSC::JITStubs::cti_op_bitxor): 5018 (JSC::JITStubs::cti_op_new_regexp): 5019 (JSC::JITStubs::cti_op_bitor): 5020 (JSC::JITStubs::cti_op_call_eval): 5021 (JSC::JITStubs::cti_op_throw): 5022 (JSC::JITStubs::cti_op_get_pnames): 5023 (JSC::JITStubs::cti_op_next_pname): 5024 (JSC::JITStubs::cti_op_push_scope): 5025 (JSC::JITStubs::cti_op_pop_scope): 5026 (JSC::JITStubs::cti_op_typeof): 5027 (JSC::JITStubs::cti_op_is_undefined): 5028 (JSC::JITStubs::cti_op_is_boolean): 5029 (JSC::JITStubs::cti_op_is_number): 5030 (JSC::JITStubs::cti_op_is_string): 5031 (JSC::JITStubs::cti_op_is_object): 5032 (JSC::JITStubs::cti_op_is_function): 5033 (JSC::JITStubs::cti_op_stricteq): 5034 (JSC::JITStubs::cti_op_to_primitive): 5035 (JSC::JITStubs::cti_op_strcat): 5036 (JSC::JITStubs::cti_op_nstricteq): 5037 (JSC::JITStubs::cti_op_to_jsnumber): 5038 (JSC::JITStubs::cti_op_in): 5039 (JSC::JITStubs::cti_op_push_new_scope): 5040 (JSC::JITStubs::cti_op_jmp_scopes): 5041 (JSC::JITStubs::cti_op_put_by_index): 5042 (JSC::JITStubs::cti_op_switch_imm): 5043 (JSC::JITStubs::cti_op_switch_char): 5044 (JSC::JITStubs::cti_op_switch_string): 5045 (JSC::JITStubs::cti_op_del_by_val): 5046 (JSC::JITStubs::cti_op_put_getter): 5047 (JSC::JITStubs::cti_op_put_setter): 5048 (JSC::JITStubs::cti_op_new_error): 5049 (JSC::JITStubs::cti_op_debug): 5050 (JSC::JITStubs::cti_vm_throw): 5051 * jit/JITStubs.h: 5052 (JSC::): 5053 5054 2009-05-06 Gavin Barraclough <barraclough (a] apple.com> 5055 5056 Reviewed by Maciej Stachowiak & Darin Adler. 5057 5058 Improve string concatenation (as coded in JS as a sequence of adds). 5059 5060 Detect patterns corresponding to string concatenation, and change the bytecode 5061 generation to emit a new op_strcat instruction. By handling the full set of 5062 additions within a single function we do not need allocate JSString wrappers 5063 for intermediate results, and we can calculate the size of the output string 5064 prior to allocating storage, in order to prevent reallocation of the buffer. 5065 5066 1.5%-2% progression on Sunspider, largely due to a 30% progression on date-format-xparb. 5067 5068 * bytecode/CodeBlock.cpp: 5069 (JSC::CodeBlock::dump): 5070 Add new opcodes. 5071 * bytecode/Opcode.h: 5072 Add new opcodes. 5073 * bytecompiler/BytecodeGenerator.cpp: 5074 (JSC::BytecodeGenerator::emitStrcat): 5075 (JSC::BytecodeGenerator::emitToPrimitive): 5076 Add generation of new opcodes. 5077 * bytecompiler/BytecodeGenerator.h: 5078 Add generation of new opcodes. 5079 * interpreter/Interpreter.cpp: 5080 (JSC::Interpreter::privateExecute): 5081 Add implmentation of new opcodes. 5082 * jit/JIT.cpp: 5083 (JSC::JIT::privateCompileMainPass): 5084 (JSC::JIT::privateCompileSlowCases): 5085 Add implmentation of new opcodes. 5086 * jit/JITStubs.cpp: 5087 (JSC::JITStubs::cti_op_to_primitive): 5088 (JSC::JITStubs::cti_op_strcat): 5089 Add implmentation of new opcodes. 5090 * jit/JITStubs.h: 5091 Add implmentation of new opcodes. 5092 * parser/Nodes.cpp: 5093 (JSC::BinaryOpNode::emitStrcat): 5094 (JSC::BinaryOpNode::emitBytecode): 5095 (JSC::ReadModifyResolveNode::emitBytecode): 5096 Add generation of new opcodes. 5097 * parser/Nodes.h: 5098 (JSC::ExpressionNode::): 5099 (JSC::AddNode::): 5100 Add methods to allow identification of add nodes. 5101 * parser/ResultType.h: 5102 (JSC::ResultType::definitelyIsString): 5103 (JSC::ResultType::forAdd): 5104 Fix error in detection of adds that will produce string results. 5105 * runtime/Operations.h: 5106 (JSC::concatenateStrings): 5107 Add implmentation of new opcodes. 5108 * runtime/UString.cpp: 5109 (JSC::UString::appendNumeric): 5110 Add methods to append numbers to an existing string. 5111 * runtime/UString.h: 5112 (JSC::UString::Rep::createEmptyBuffer): 5113 (JSC::UString::BaseString::BaseString): 5114 Add support for creating an empty string with a non-zero capacity available in the BaseString. 5115 5116 2009-05-06 Darin Adler <darin (a] apple.com> 5117 5118 Reviewed by Sam Weinig. 5119 5120 Made RefCounted::m_refCount private. 5121 5122 * runtime/Structure.h: Removed addressOfCount. 5123 * wtf/RefCounted.h: Made m_refCount private. 5124 Added addressOfCount. 5125 5126 2009-05-06 Darin Adler <darin (a] apple.com> 5127 5128 Fixed assertion seen a lot! 5129 5130 * parser/Nodes.cpp: 5131 (JSC::FunctionBodyNode::~FunctionBodyNode): Removed now-bogus assertion. 5132 5133 2009-05-06 Darin Adler <darin (a] apple.com> 5134 5135 Working with Sam Weinig. 5136 5137 Redo parse tree constructor optimization without breaking the Windows 5138 build the way I did yesterday. The previous try broke the build by adding 5139 an include of Lexer.h and all its dependencies that had to work outside 5140 the JavaScriptCore project. 5141 5142 * GNUmakefile.am: Added NodeConstructors.h. 5143 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto. 5144 5145 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: 5146 Removed byteocde directory -- we no longer are trying to include Lexer.h 5147 outside JavaScriptCore. 5148 5149 * JavaScriptCore.xcodeproj/project.pbxproj: Change SegmentedVector.h 5150 and Lexer.h back to internal files. Added NodeConstructors.h. 5151 5152 * parser/Grammar.y: Added include of NodeConstructors.h. 5153 Changed use of ConstDeclNode to use public functions. 5154 5155 * parser/NodeConstructors.h: Copied from parser/Nodes.h. 5156 Just contains the inlined constructors now. 5157 5158 * parser/Nodes.cpp: Added include of NodeConstructors.h. 5159 Moved node constructors into the header. 5160 (JSC::FunctionBodyNode::FunctionBodyNode): Removed m_refCount 5161 initialization. 5162 5163 * parser/Nodes.h: Removed all the constructor definitions, and also 5164 removed the JSC_FAST_CALL from them since these are all inlined, so the 5165 calling convention is irrelevant. Made more things private. Used a data 5166 member for operator opcodes instead of a virtual function. Removed the 5167 special FunctionBodyNode::ref/deref functions since the default functions 5168 are now just as fast. 5169 5170 * runtime/FunctionConstructor.cpp: 5171 (JSC::extractFunctionBody): Fixed types here so we don't typecast until 5172 after we do type checking. 5173 5174 2009-05-06 Simon Hausmann <simon.hausmann (a] nokia.com> 5175 5176 Reviewed by Ariya Hidayat. 5177 5178 Fix the Qt build on Windows. 5179 5180 * JavaScriptCore.pri: Define BUILDING_JavaScriptCore/WTF to get the meaning 5181 of the JS_EXPORTDATA macros correct 5182 5183 2009-05-06 Simon Hausmann <simon.hausmann (a] nokia.com> 5184 5185 Reviewed by Ariya Hidayat. 5186 5187 Enable the JIT for the Qt build on Windows. 5188 5189 * JavaScriptCore.pri: 5190 5191 2009-05-06 Simon Hausmann <simon.hausmann (a] nokia.com> 5192 5193 Reviewed by Tor Arne Vestb. 5194 5195 Tweak JavaScriptCore.pri for being able to override the generated sources dir for the 5196 generated_files target. 5197 5198 * JavaScriptCore.pri: 5199 5200 2009-05-06 Tor Arne Vestb <tor.arne.vestbo (a] nokia.com> 5201 5202 Reviewed by Simon Hausmann. 5203 5204 Build QtWebKit as a framework on Mac 5205 5206 This implies both debug and release build by default, unless 5207 one of the --debug or --release config options are passed to 5208 the build-webkit script. 5209 5210 Frameworks can be disabled by passing CONFIG+=webkit_no_framework 5211 to the build-webkit script. 5212 5213 To be able to build both debug and release targets in parallel 5214 we have to use separate output directories for the generated 5215 sources, which is not optimal, but required to avoid race conditions. 5216 5217 An optimization would be to only require this spit-up on Mac. 5218 5219 * JavaScriptCore.pri: 5220 * JavaScriptCore.pro: 5221 * jsc.pro: 5222 5223 2009-05-06 Tor Arne Vestb <tor.arne.vestbo (a] nokia.com> 5224 5225 Reviewed by Simon Hausmann. 5226 5227 [Qt] Use $$GENERATED_SOURCES_DIR as output when running bison 5228 5229 A couple of the generators left the bison output file in the source 5230 tree, and then moved it into $$GENERATED_SOURCES_DIR, which did not 5231 work well when building release and debug configurations in parallel. 5232 5233 * JavaScriptCore.pri: 5234 5235 2009-05-05 Geoffrey Garen <ggaren (a] apple.com> 5236 5237 Reviewed by Maciej Stachowiak. 5238 5239 Simplified a bit of codegen. 5240 5241 * jit/JIT.cpp: 5242 (JSC::JIT::privateCompileMainPass): 5243 5244 2009-05-05 Geoffrey Garen <ggaren (a] apple.com> 5245 5246 Reviewed by Cameron Zwarich. 5247 5248 Moved all the JIT stub related code into one place. 5249 5250 * jit/JIT.cpp: 5251 * jit/JIT.h: 5252 * jit/JITCode.h: 5253 * jit/JITStubs.cpp: 5254 (JSC::): 5255 * jit/JITStubs.h: 5256 5257 2009-05-05 Sam Weinig <sam (a] webkit.org> 5258 5259 Try to fix Windows build. 5260 5261 Move Node constructor to the .cpp file. 5262 5263 * parser/Nodes.cpp: 5264 * parser/Nodes.h: 5265 5266 2009-05-05 Darin Adler <darin (a] apple.com> 5267 5268 Try to fix Windows build. 5269 5270 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 5271 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 5272 5273 Try to fix Mac build. 5274 5275 * JavaScriptCore.xcodeproj/project.pbxproj: Made SegmentedVector.h private. 5276 5277 2009-05-05 Darin Adler <darin (a] apple.com> 5278 5279 Try to fix Mac build. 5280 5281 * JavaScriptCore.xcodeproj/project.pbxproj: Made Lexer.h private. 5282 5283 2009-05-05 Darin Adler <darin (a] apple.com> 5284 5285 Reviewed by Sam Weinig. 5286 5287 Bug 25569: make ParserRefCounted use conventional reference counting 5288 https://bugs.webkit.org/show_bug.cgi?id=25569 5289 5290 SunSpider speedup of about 1.6%. 5291 5292 * JavaScriptCore.exp: Updated. 5293 5294 * parser/Nodes.cpp: 5295 (JSC::NodeReleaser::releaseAllNodes): ALWAYS_INLINE. 5296 (JSC::NodeReleaser::adopt): Ditto. 5297 (JSC::ParserRefCounted::ParserRefCounted): Removed most of the code. 5298 Add the object to a Vector<RefPtr> that gets cleared after parsing. 5299 (JSC::ParserRefCounted::~ParserRefCounted): Removed most of the code. 5300 5301 * parser/Nodes.h: Made ParserRefCounted inherit from RefCounted and 5302 made inline versions of the constructor and destructor. Made the 5303 Node constructor inline. 5304 5305 * parser/Parser.cpp: 5306 (JSC::Parser::parse): Call globalData->parserObjects.shrink(0) after 5307 parsing, where it used to call ParserRefCounted::deleteNewObjects. 5308 5309 * runtime/JSGlobalData.cpp: 5310 (JSC::JSGlobalData::JSGlobalData): Eliminated code to manage the 5311 newParserObjects and parserObjectExtraRefCounts. 5312 (JSC::JSGlobalData::~JSGlobalData): Ditto. 5313 5314 * runtime/JSGlobalData.h: Replaced the HashSet and HashCountedSet 5315 with a Vector. 5316 5317 * wtf/PassRefPtr.h: 5318 (WTF::PassRefPtr::~PassRefPtr): The most common thing to do with a 5319 PassRefPtr in hot code is to pass it and then destroy it once it's 5320 set to zero. Help the optimizer by telling it that's true. 5321 5322 2009-05-05 Xan Lopez <xlopez (a] igalia.com> and Gustavo Noronha Silva <gustavo.noronha (a] collabora.co.uk> 5323 5324 Reviewed by Oliver Hunt. 5325 5326 Disable the NativeFunctionWrapper for all non-Mac ports for now, 5327 as it is also crashing on Linux/x86. 5328 5329 * runtime/NativeFunctionWrapper.h: 5330 5331 2009-05-05 Steve Falkenburg <sfalken (a] apple.com> 5332 5333 Fix build. 5334 5335 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 5336 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 5337 5338 2009-05-05 Oliver Hunt <oliver (a] apple.com> 5339 5340 Reviewed by Maciej Stachowiak. 5341 5342 Expose toThisObject for the DOM Window 5343 5344 * JavaScriptCore.exp: 5345 5346 2009-05-05 Oliver Hunt <oliver (a] apple.com> 5347 5348 Reviewed by NOBODY (Make windows go again until i work out the 5349 accursed calling convention). 5350 5351 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 5352 * jit/JIT.cpp: 5353 * runtime/NativeFunctionWrapper.h: 5354 5355 2009-05-05 Oliver Hunt <oliver (a] apple.com> 5356 5357 Reviewed by NOBODY (Fix windows debug builds). 5358 5359 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 5360 5361 2009-05-05 Oliver Hunt <oliver (a] apple.com> 5362 5363 Reviewed by NOBODY (Hopefully the last fix). 5364 5365 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 5366 5367 2009-05-05 Oliver Hunt <oliver (a] apple.com> 5368 5369 Reviewed by NOBODY (Fix the build fix caused by a different build fix). 5370 5371 * parser/Nodes.cpp: 5372 * parser/Nodes.h: 5373 5374 2009-05-05 Oliver Hunt <oliver (a] apple.com> 5375 5376 Reviewed by NOBODY (No idea how my changes could have broken these). 5377 5378 * runtime/DatePrototype.cpp: 5379 * runtime/RegExpObject.cpp: 5380 5381 2009-05-05 Oliver Hunt <oliver (a] apple.com> 5382 5383 Reviewed by NOBODY (Why should i expect msvc to list all the errors in a file?). 5384 5385 * parser/Nodes.cpp: 5386 5387 2009-05-05 Oliver Hunt <oliver (a] apple.com> 5388 5389 Reviewed by NOBODY (Fix warning, and another missing include). 5390 5391 * jit/JIT.cpp: 5392 * parser/Nodes.h: 5393 5394 2009-05-05 Oliver Hunt <oliver (a] apple.com> 5395 5396 Reviewed by NOBODY (More build fixes). 5397 5398 * runtime/ErrorPrototype.cpp: 5399 * runtime/JSGlobalObject.cpp: 5400 * runtime/NumberPrototype.cpp: 5401 * runtime/ObjectPrototype.cpp: 5402 * runtime/StringConstructor.cpp: 5403 5404 2009-05-05 Oliver Hunt <oliver (a] apple.com> 5405 5406 Reviewed by NOBODY (Will the fixes never end?). 5407 5408 * runtime/FunctionPrototype.h: 5409 * runtime/Lookup.cpp: 5410 5411 2009-05-05 Oliver Hunt <oliver (a] apple.com> 5412 5413 Reviewed by NOBODY (More build fixes). 5414 5415 * jit/JIT.cpp: 5416 5417 2009-05-05 Oliver Hunt <oliver (a] apple.com> 5418 5419 Reviewed by NOBODY (More build fixing). 5420 5421 * runtime/CallData.h: 5422 5423 2009-05-05 Oliver Hunt <oliver (a] apple.com> 5424 5425 Reviewed by NOBODY (Build fix). 5426 5427 * runtime/ArrayConstructor.cpp: 5428 * runtime/BooleanPrototype.cpp: 5429 * runtime/DateConstructor.cpp: 5430 * runtime/Error.cpp: 5431 * runtime/ObjectConstructor.cpp: 5432 * runtime/RegExpPrototype.cpp: 5433 5434 2009-05-05 Oliver Hunt <oliver (a] apple.com> 5435 5436 Reviewed by NOBODY (Buildfix). 5437 5438 Add missing file 5439 5440 * runtime/NativeFunctionWrapper.h: Copied from JavaScriptCore/jit/ExecutableAllocator.cpp. 5441 5442 2009-05-05 Oliver Hunt <oliver (a] apple.com> 5443 5444 Reviewed by Gavin Barraclough. 5445 5446 Bug 25559: Improve native function call performance 5447 <https://bugs.webkit.org/show_bug.cgi?id=25559> 5448 5449 In order to cache calls to native functions we now make the standard 5450 prototype functions use a small assembly thunk that converts the JS 5451 calling convention into the native calling convention. As this is 5452 only beneficial in the JIT we use the NativeFunctionWrapper typedef 5453 to alternate between PrototypeFunction and JSFunction to keep the 5454 code sane. This change from PrototypeFunction to NativeFunctionWrapper 5455 is the bulk of this patch. 5456 5457 * JavaScriptCore.exp: 5458 * JavaScriptCore.xcodeproj/project.pbxproj: 5459 * assembler/MacroAssemblerX86Common.h: 5460 (JSC::MacroAssemblerX86Common::call): 5461 * assembler/MacroAssemblerX86_64.h: 5462 (JSC::MacroAssemblerX86_64::addPtr): 5463 * assembler/X86Assembler.h: 5464 (JSC::X86Assembler::leaq_mr): 5465 (JSC::X86Assembler::call_m): 5466 * interpreter/Interpreter.cpp: 5467 (JSC::Interpreter::execute): 5468 (JSC::Interpreter::prepareForRepeatCall): 5469 * jit/JIT.cpp: 5470 (JSC::JIT::privateCompileCTIMachineTrampolines): 5471 * jit/JIT.h: 5472 (JSC::JIT::compileCTIMachineTrampolines): 5473 * jit/JITCall.cpp: 5474 (JSC::JIT::linkCall): 5475 (JSC::JIT::compileOpCallInitializeCallFrame): 5476 (JSC::JIT::compileOpCall): 5477 * jit/JITCode.h: 5478 (JSC::JITCode::operator bool): 5479 * jit/JITInlineMethods.h: 5480 (JSC::JIT::emitGetFromCallFrameHeader): 5481 (JSC::JIT::emitGetFromCallFrameHeader32): 5482 * jit/JITStubs.cpp: 5483 (JSC::JITStubs::JITStubs): 5484 (JSC::JITStubs::cti_op_call_JSFunction): 5485 (JSC::JITStubs::cti_vm_dontLazyLinkCall): 5486 (JSC::JITStubs::cti_vm_lazyLinkCall): 5487 (JSC::JITStubs::cti_op_construct_JSConstruct): 5488 * jit/JITStubs.h: 5489 (JSC::JITStubs::ctiNativeCallThunk): 5490 * jsc.cpp: 5491 (GlobalObject::GlobalObject): 5492 * parser/Nodes.cpp: 5493 (JSC::FunctionBodyNode::FunctionBodyNode): 5494 (JSC::FunctionBodyNode::createNativeThunk): 5495 (JSC::FunctionBodyNode::generateJITCode): 5496 * parser/Nodes.h: 5497 (JSC::FunctionBodyNode::): 5498 (JSC::FunctionBodyNode::generatedJITCode): 5499 (JSC::FunctionBodyNode::jitCode): 5500 * profiler/Profiler.cpp: 5501 (JSC::Profiler::createCallIdentifier): 5502 * runtime/ArgList.h: 5503 * runtime/ArrayPrototype.cpp: 5504 (JSC::isNumericCompareFunction): 5505 * runtime/BooleanPrototype.cpp: 5506 (JSC::BooleanPrototype::BooleanPrototype): 5507 * runtime/DateConstructor.cpp: 5508 (JSC::DateConstructor::DateConstructor): 5509 * runtime/ErrorPrototype.cpp: 5510 (JSC::ErrorPrototype::ErrorPrototype): 5511 * runtime/FunctionPrototype.cpp: 5512 (JSC::FunctionPrototype::addFunctionProperties): 5513 (JSC::functionProtoFuncToString): 5514 * runtime/FunctionPrototype.h: 5515 * runtime/JSFunction.cpp: 5516 (JSC::JSFunction::JSFunction): 5517 (JSC::JSFunction::~JSFunction): 5518 (JSC::JSFunction::mark): 5519 (JSC::JSFunction::getCallData): 5520 (JSC::JSFunction::call): 5521 (JSC::JSFunction::argumentsGetter): 5522 (JSC::JSFunction::callerGetter): 5523 (JSC::JSFunction::lengthGetter): 5524 (JSC::JSFunction::getOwnPropertySlot): 5525 (JSC::JSFunction::put): 5526 (JSC::JSFunction::deleteProperty): 5527 (JSC::JSFunction::getConstructData): 5528 (JSC::JSFunction::construct): 5529 * runtime/JSFunction.h: 5530 (JSC::JSFunction::JSFunction): 5531 (JSC::JSFunction::setScope): 5532 (JSC::JSFunction::scope): 5533 (JSC::JSFunction::isHostFunction): 5534 (JSC::JSFunction::scopeChain): 5535 (JSC::JSFunction::clearScopeChain): 5536 (JSC::JSFunction::setScopeChain): 5537 (JSC::JSFunction::nativeFunction): 5538 (JSC::JSFunction::setNativeFunction): 5539 * runtime/JSGlobalData.cpp: 5540 (JSC::JSGlobalData::~JSGlobalData): 5541 (JSC::JSGlobalData::createNativeThunk): 5542 * runtime/JSGlobalData.h: 5543 (JSC::JSGlobalData::nativeFunctionThunk): 5544 * runtime/JSGlobalObject.cpp: 5545 (JSC::JSGlobalObject::reset): 5546 * runtime/JSGlobalObject.h: 5547 * runtime/Lookup.cpp: 5548 (JSC::setUpStaticFunctionSlot): 5549 * runtime/Lookup.h: 5550 * runtime/NumberPrototype.cpp: 5551 (JSC::NumberPrototype::NumberPrototype): 5552 * runtime/ObjectPrototype.cpp: 5553 (JSC::ObjectPrototype::ObjectPrototype): 5554 * runtime/RegExpPrototype.cpp: 5555 (JSC::RegExpPrototype::RegExpPrototype): 5556 * runtime/StringConstructor.cpp: 5557 (JSC::StringConstructor::StringConstructor): 5558 5559 2009-05-05 Gavin Barraclough <barraclough (a] apple.com> 5560 5561 Reviewed by Oliver Hunt. 5562 5563 For convenience, let the sampling flags tool clear multiple flags at once. 5564 5565 * jsc.cpp: 5566 (GlobalObject::GlobalObject): 5567 (functionSetSamplingFlags): 5568 (functionClearSamplingFlags): 5569 5570 2009-05-04 Maciej Stachowiak <mjs (a] apple.com> 5571 5572 Rubber stamped by Gavin. 5573 5574 - inline Vector::resize for a ~1.5% speedup on string-tagcloud 5575 5576 * wtf/Vector.h: 5577 (WTF::Vector::resize): Inline 5578 5579 2009-05-03 Steve Falkenburg <sfalken (a] apple.com> 5580 5581 Windows build fix. 5582 5583 * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: 5584 5585 2009-05-03 Mark Rowe <mrowe (a] apple.com> 5586 5587 Fix the 64-bit build. 5588 5589 * API/APICast.h: 5590 (toJS): 5591 (toRef): 5592 * runtime/JSNumberCell.cpp: 5593 (JSC::jsAPIMangledNumber): 5594 * runtime/JSNumberCell.h: 5595 5596 2009-05-02 Sam Weinig <sam (a] webkit.org> 5597 5598 Roll JSC API number marshaling back in one last time (I hope). 5599 5600 2009-05-03 Sam Weinig <sam (a] webkit.org> 5601 5602 Roll JSC API number marshaling back out. It still breaks windows. 5603 5604 2009-05-03 Sam Weinig <sam (a] webkit.org> 5605 5606 Roll JSC API number marshaling back in. 5607 5608 2009-05-02 Darin Adler <darin (a] apple.com> 5609 5610 Reviewed by Maciej Stachowiak. 5611 5612 Bug 25519: streamline lexer by handling BOMs differently 5613 https://bugs.webkit.org/show_bug.cgi?id=25519 5614 5615 Roughly 1% faster SunSpider. 5616 5617 * parser/Grammar.y: Tweak formatting a bit. 5618 5619 * parser/Lexer.cpp: 5620 (JSC::Lexer::Lexer): Remove unnnecessary initialization of data members 5621 that are set up by setCode. 5622 (JSC::Lexer::currentOffset): Added. Used where the old code would look at 5623 m_currentOffset. 5624 (JSC::Lexer::shift1): Replaces the old shift function. No longer does anything 5625 to handle BOM characters. 5626 (JSC::Lexer::shift2): Ditto. 5627 (JSC::Lexer::shift3): Ditto. 5628 (JSC::Lexer::shift4): Ditto. 5629 (JSC::Lexer::setCode): Updated for name change from yylineno to m_line. 5630 Removed now-unused m_eatNextIdentifier, m_stackToken, and m_restrKeyword. 5631 Replaced m_skipLF and m_skipCR with m_skipLineEnd. Replaced the old 5632 m_length with m_codeEnd and m_currentOffset with m_codeStart. Added code 5633 to scan for a BOM character and call copyCodeWithoutBOMs() if we find any. 5634 (JSC::Lexer::copyCodeWithoutBOMs): Added. 5635 (JSC::Lexer::nextLine): Updated for name change from yylineno to m_line. 5636 (JSC::Lexer::makeIdentifier): Moved up higher in the file. 5637 (JSC::Lexer::matchPunctuator): Moved up higher in the file and changed to 5638 use a switch statement instead of just if statements. 5639 (JSC::Lexer::isLineTerminator): Moved up higher in the file and changed to 5640 have fewer branches. 5641 (JSC::Lexer::lastTokenWasRestrKeyword): Added. This replaces the old 5642 m_restrKeyword boolean. 5643 (JSC::Lexer::isIdentStart): Moved up higher in the file. Changed to use 5644 fewer branches in the ASCII but not identifier case. 5645 (JSC::Lexer::isIdentPart): Ditto. 5646 (JSC::Lexer::singleEscape): Moved up higher in the file. 5647 (JSC::Lexer::convertOctal): Moved up higher in the file. 5648 (JSC::Lexer::convertHex): Moved up higher in the file. Changed to use 5649 toASCIIHexValue instead of rolling our own here. 5650 (JSC::Lexer::convertUnicode): Ditto. 5651 (JSC::Lexer::record8): Moved up higher in the file. 5652 (JSC::Lexer::record16): Moved up higher in the file. 5653 (JSC::Lexer::lex): Changed type of stringType to int. Replaced m_skipLF 5654 and m_skipCR with m_skipLineEnd, which requires fewer branches in the 5655 main lexer loop. Use currentOffset instead of m_currentOffset. Removed 5656 unneeded m_stackToken. Use isASCIIDigit instead of isDecimalDigit. 5657 Split out the two cases for InIdentifierOrKeyword and InIdentifier. 5658 Added special case tight loops for identifiers and other simple states. 5659 Removed a branch from the code that sets m_atLineStart to false using goto. 5660 Streamlined the number-handling code so we don't check for the same types 5661 twice for non-numeric cases and don't add a null to m_buffer8 when it's 5662 not being used. Removed m_eatNextIdentifier, which wasn't working anyway, 5663 and m_restrKeyword, which is redundant with m_lastToken. Set the 5664 m_delimited flag without using a branch. 5665 (JSC::Lexer::scanRegExp): Tweaked style a bit. 5666 (JSC::Lexer::clear): Clear m_codeWithoutBOMs so we don't use memory after 5667 parsing. Clear out UString objects in the more conventional way. 5668 (JSC::Lexer::sourceCode): Made this no-longer inline since it has more 5669 work to do in the case where we stripped BOMs. 5670 5671 * parser/Lexer.h: Renamed yylineno to m_lineNumber. Removed convertHex 5672 function, which is the same as toASCIIHexValue. Removed isHexDigit 5673 function, which is the same as isASCIIHedDigit. Replaced shift with four 5674 separate shift functions. Removed isWhiteSpace function that passes 5675 m_current, instead just passing m_current explicitly. Removed isOctalDigit, 5676 which is the same as isASCIIOctalDigit. Eliminated unused arguments from 5677 matchPunctuator. Added copyCoodeWithoutBOMs and currentOffset. Moved the 5678 makeIdentifier function out of the header. Added lastTokenWasRestrKeyword 5679 function. Added new constants for m_skipLineEnd. Removed unused yycolumn, 5680 m_restrKeyword, m_skipLF, m_skipCR, m_eatNextIdentifier, m_stackToken, 5681 m_position, m_length, m_currentOffset, m_nextOffset1, m_nextOffset2, 5682 m_nextOffset3. Added m_skipLineEnd, m_codeStart, m_codeEnd, and 5683 m_codeWithoutBOMs. 5684 5685 * parser/SourceProvider.h: Added hasBOMs function. In the future this can 5686 be used to tell the lexer about strings known not to have BOMs. 5687 5688 * runtime/JSGlobalObjectFunctions.cpp: 5689 (JSC::globalFuncUnescape): Changed to use isASCIIHexDigit. 5690 5691 * wtf/ASCIICType.h: Added using statements to match the design of the 5692 other WTF headers. 5693 5694 2009-05-02 Ada Chan <adachan (a] apple.com> 5695 5696 Fix windows build (when doing a clean build) 5697 5698 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 5699 5700 2009-05-02 Geoffrey Garen <ggaren (a] apple.com> 5701 5702 Reviewed by Sam Weinig. 5703 5704 Simplified null-ish JSValues. 5705 5706 Replaced calls to noValue() with calls to JSValue() (which is what 5707 noValue() returned). Removed noValue(). 5708 5709 Replaced almost all uses of jsImpossibleValue() with uses of JSValue(). 5710 Its one remaining use is for construction of hash table deleted values. 5711 For that specific task, I made a new, private constructor with a special 5712 tag. Removed jsImpossibleValue(). 5713 5714 Removed "JSValue()" initialiazers, since default construction happens... 5715 by default. 5716 5717 * API/JSCallbackObjectFunctions.h: 5718 (JSC::::call): 5719 * bytecompiler/BytecodeGenerator.cpp: 5720 (JSC::BytecodeGenerator::emitLoad): 5721 * bytecompiler/BytecodeGenerator.h: 5722 * debugger/DebuggerCallFrame.cpp: 5723 (JSC::DebuggerCallFrame::evaluate): 5724 * debugger/DebuggerCallFrame.h: 5725 (JSC::DebuggerCallFrame::DebuggerCallFrame): 5726 * interpreter/CallFrame.h: 5727 (JSC::ExecState::clearException): 5728 * interpreter/Interpreter.cpp: 5729 (JSC::Interpreter::privateExecute): 5730 (JSC::Interpreter::retrieveLastCaller): 5731 * interpreter/Register.h: 5732 (JSC::Register::Register): 5733 * jit/JITCall.cpp: 5734 (JSC::JIT::unlinkCall): 5735 (JSC::JIT::compileOpCallInitializeCallFrame): 5736 (JSC::JIT::compileOpCall): 5737 * jit/JITStubs.cpp: 5738 (JSC::JITStubs::cti_op_call_eval): 5739 (JSC::JITStubs::cti_vm_throw): 5740 * profiler/Profiler.cpp: 5741 (JSC::Profiler::willExecute): 5742 (JSC::Profiler::didExecute): 5743 * runtime/ArrayPrototype.cpp: 5744 (JSC::getProperty): 5745 * runtime/Completion.cpp: 5746 (JSC::evaluate): 5747 * runtime/Completion.h: 5748 (JSC::Completion::Completion): 5749 * runtime/GetterSetter.cpp: 5750 (JSC::GetterSetter::getPrimitiveNumber): 5751 * runtime/JSArray.cpp: 5752 (JSC::JSArray::putSlowCase): 5753 (JSC::JSArray::deleteProperty): 5754 (JSC::JSArray::increaseVectorLength): 5755 (JSC::JSArray::setLength): 5756 (JSC::JSArray::pop): 5757 (JSC::JSArray::sort): 5758 (JSC::JSArray::compactForSorting): 5759 * runtime/JSCell.cpp: 5760 (JSC::JSCell::getJSNumber): 5761 * runtime/JSCell.h: 5762 (JSC::JSValue::getJSNumber): 5763 * runtime/JSGlobalData.cpp: 5764 (JSC::JSGlobalData::JSGlobalData): 5765 * runtime/JSImmediate.h: 5766 (JSC::JSImmediate::fromNumberOutsideIntegerRange): 5767 (JSC::JSImmediate::from): 5768 * runtime/JSNumberCell.cpp: 5769 (JSC::jsNumberCell): 5770 * runtime/JSObject.cpp: 5771 (JSC::callDefaultValueFunction): 5772 * runtime/JSObject.h: 5773 (JSC::JSObject::getDirect): 5774 * runtime/JSPropertyNameIterator.cpp: 5775 (JSC::JSPropertyNameIterator::toPrimitive): 5776 * runtime/JSPropertyNameIterator.h: 5777 (JSC::JSPropertyNameIterator::next): 5778 * runtime/JSValue.h: 5779 (JSC::JSValue::): 5780 (JSC::JSValueHashTraits::constructDeletedValue): 5781 (JSC::JSValueHashTraits::isDeletedValue): 5782 (JSC::JSValue::JSValue): 5783 * runtime/JSWrapperObject.h: 5784 (JSC::JSWrapperObject::JSWrapperObject): 5785 * runtime/Operations.h: 5786 (JSC::resolveBase): 5787 * runtime/PropertySlot.h: 5788 (JSC::PropertySlot::clearBase): 5789 (JSC::PropertySlot::clearValue): 5790 5791 2009-05-02 Maciej Stachowiak <mjs (a] apple.com> 5792 5793 Reviewed by Cameron Zwarich. 5794 5795 - speed up the lexer in various ways 5796 5797 ~2% command-line SunSpider speedup 5798 5799 * parser/Lexer.cpp: 5800 (JSC::Lexer::setCode): Moved below shift() so it can inline. 5801 (JSC::Lexer::scanRegExp): Use resize(0) instead of clear() on Vectors, since the intent 5802 here is not to free the underlying buffer. 5803 (JSC::Lexer::lex): ditto; also, change the loop logic a bit for the main lexing loop 5804 to avoid branching on !m_done twice per iteration. Now we only check it once. 5805 (JSC::Lexer::shift): Make this ALWAYS_INLINE and tag an unusual branch as UNLIKELY 5806 * parser/Lexer.h: 5807 (JSC::Lexer::makeIdentifier): force to be ALWAYS_INLINE 5808 * wtf/Vector.h: 5809 (WTF::::append): force to be ALWAYS_INLINE (may have helped in ways other than parsing but it wasn't 5810 getting inlined in a hot code path in the lexer) 5811 5812 2009-05-01 Steve Falkenburg <sfalken (a] apple.com> 5813 5814 Windows build fix. 5815 5816 * JavaScriptCore.vcproj/JavaScriptCore.make: 5817 5818 2009-05-01 Sam Weinig <sam (a] webkit.org> 5819 5820 Fix 64bit build. 5821 5822 * runtime/JSNumberCell.h: 5823 (JSC::JSValue::JSValue): 5824 * runtime/JSValue.h: 5825 (JSC::jsNumber): 5826 5827 2009-05-01 Sam Weinig <sam (a] webkit.org> 5828 5829 Roll out JavaScriptCore API number marshaling. 5830 5831 * API/APICast.h: 5832 (toJS): 5833 (toRef): 5834 * API/JSBase.cpp: 5835 (JSEvaluateScript): 5836 (JSCheckScriptSyntax): 5837 * API/JSCallbackConstructor.cpp: 5838 (JSC::constructJSCallback): 5839 * API/JSCallbackFunction.cpp: 5840 (JSC::JSCallbackFunction::call): 5841 * API/JSCallbackObjectFunctions.h: 5842 (JSC::::getOwnPropertySlot): 5843 (JSC::::put): 5844 (JSC::::deleteProperty): 5845 (JSC::::construct): 5846 (JSC::::hasInstance): 5847 (JSC::::call): 5848 (JSC::::toNumber): 5849 (JSC::::toString): 5850 (JSC::::staticValueGetter): 5851 (JSC::::callbackGetter): 5852 * API/JSObjectRef.cpp: 5853 (JSObjectMakeFunction): 5854 (JSObjectMakeArray): 5855 (JSObjectMakeDate): 5856 (JSObjectMakeError): 5857 (JSObjectMakeRegExp): 5858 (JSObjectGetPrototype): 5859 (JSObjectSetPrototype): 5860 (JSObjectGetProperty): 5861 (JSObjectSetProperty): 5862 (JSObjectGetPropertyAtIndex): 5863 (JSObjectSetPropertyAtIndex): 5864 (JSObjectDeleteProperty): 5865 (JSObjectCallAsFunction): 5866 (JSObjectCallAsConstructor): 5867 * API/JSValueRef.cpp: 5868 (JSValueGetType): 5869 (JSValueIsUndefined): 5870 (JSValueIsNull): 5871 (JSValueIsBoolean): 5872 (JSValueIsNumber): 5873 (JSValueIsString): 5874 (JSValueIsObject): 5875 (JSValueIsObjectOfClass): 5876 (JSValueIsEqual): 5877 (JSValueIsStrictEqual): 5878 (JSValueIsInstanceOfConstructor): 5879 (JSValueMakeUndefined): 5880 (JSValueMakeNull): 5881 (JSValueMakeBoolean): 5882 (JSValueMakeNumber): 5883 (JSValueMakeString): 5884 (JSValueToBoolean): 5885 (JSValueToNumber): 5886 (JSValueToStringCopy): 5887 (JSValueToObject): 5888 (JSValueProtect): 5889 (JSValueUnprotect): 5890 * JavaScriptCore.exp: 5891 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 5892 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 5893 * runtime/JSNumberCell.cpp: 5894 * runtime/JSNumberCell.h: 5895 * runtime/JSValue.h: 5896 5897 2009-05-01 Sam Weinig <sam (a] webkit.org> 5898 5899 Fix windows build. 5900 5901 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 5902 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 5903 5904 2009-05-01 Sam Weinig <sam (a] webkit.org> 5905 5906 Fix the build. 5907 5908 * JavaScriptCore.exp: 5909 5910 2009-05-01 Sam Weinig <sam (a] webkit.org> 5911 5912 Reviewed by Geoffrey "Too Far!" Garen. 5913 5914 Move JS number construction into JSValue. 5915 5916 * runtime/JSImmediate.h: 5917 * runtime/JSNumberCell.h: 5918 (JSC::JSValue::JSValue): 5919 * runtime/JSValue.h: 5920 (JSC::jsNumber): 5921 5922 2009-05-01 Sam Weinig <sam (a] webkit.org> 5923 5924 Reviewed by Geoff "The Minneapolis" Garen. 5925 5926 Add mechanism to vend heap allocated JS numbers to JavaScriptCore API clients with a 5927 representation that is independent of the number representation in the VM. 5928 - Numbers leaving the interpreter are converted to a tagged JSNumberCell. 5929 - The numbers coming into the interpreter (asserted to be the tagged JSNumberCell) are 5930 converted back to the VM's internal number representation. 5931 5932 * API/APICast.h: 5933 (toJS): 5934 (toRef): 5935 * API/JSBase.cpp: 5936 (JSEvaluateScript): 5937 (JSCheckScriptSyntax): 5938 * API/JSCallbackConstructor.cpp: 5939 (JSC::constructJSCallback): 5940 * API/JSCallbackFunction.cpp: 5941 (JSC::JSCallbackFunction::call): 5942 * API/JSCallbackObjectFunctions.h: 5943 (JSC::::getOwnPropertySlot): 5944 (JSC::::put): 5945 (JSC::::deleteProperty): 5946 (JSC::::construct): 5947 (JSC::::hasInstance): 5948 (JSC::::call): 5949 (JSC::::toNumber): 5950 (JSC::::toString): 5951 (JSC::::staticValueGetter): 5952 (JSC::::callbackGetter): 5953 * API/JSObjectRef.cpp: 5954 (JSObjectMakeFunction): 5955 (JSObjectMakeArray): 5956 (JSObjectMakeDate): 5957 (JSObjectMakeError): 5958 (JSObjectMakeRegExp): 5959 (JSObjectGetPrototype): 5960 (JSObjectSetPrototype): 5961 (JSObjectGetProperty): 5962 (JSObjectSetProperty): 5963 (JSObjectGetPropertyAtIndex): 5964 (JSObjectSetPropertyAtIndex): 5965 (JSObjectDeleteProperty): 5966 (JSObjectCallAsFunction): 5967 (JSObjectCallAsConstructor): 5968 * API/JSValueRef.cpp: 5969 (JSValueGetType): 5970 (JSValueIsUndefined): 5971 (JSValueIsNull): 5972 (JSValueIsBoolean): 5973 (JSValueIsNumber): 5974 (JSValueIsString): 5975 (JSValueIsObject): 5976 (JSValueIsObjectOfClass): 5977 (JSValueIsEqual): 5978 (JSValueIsStrictEqual): 5979 (JSValueIsInstanceOfConstructor): 5980 (JSValueMakeUndefined): 5981 (JSValueMakeNull): 5982 (JSValueMakeBoolean): 5983 (JSValueMakeNumber): 5984 (JSValueMakeString): 5985 (JSValueToBoolean): 5986 (JSValueToNumber): 5987 (JSValueToStringCopy): 5988 (JSValueToObject): 5989 (JSValueProtect): 5990 (JSValueUnprotect): 5991 * runtime/JSNumberCell.cpp: 5992 (JSC::jsAPIMangledNumber): 5993 * runtime/JSNumberCell.h: 5994 (JSC::JSNumberCell::isAPIMangledNumber): 5995 (JSC::JSNumberCell::): 5996 (JSC::JSNumberCell::JSNumberCell): 5997 (JSC::JSValue::isAPIMangledNumber): 5998 * runtime/JSValue.h: 5999 6000 2009-05-01 Geoffrey Garen <ggaren (a] apple.com> 6001 6002 Windows build fix take 6. 6003 6004 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 6005 6006 2009-05-01 Geoffrey Garen <ggaren (a] apple.com> 6007 6008 Windows build fix take 5. 6009 6010 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 6011 6012 2009-05-01 Geoffrey Garen <ggaren (a] apple.com> 6013 6014 Windows build fix take 4. 6015 6016 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 6017 6018 2009-05-01 Geoffrey Garen <ggaren (a] apple.com> 6019 6020 Windows build fix take 3. 6021 6022 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 6023 6024 2009-05-01 Geoffrey Garen <ggaren (a] apple.com> 6025 6026 Windows build fix take 2. 6027 6028 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 6029 6030 2009-05-01 Geoffrey Garen <ggaren (a] apple.com> 6031 6032 Windows build fix take 1. 6033 6034 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 6035 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 6036 6037 2009-05-01 Geoffrey Garen <ggaren (a] apple.com> 6038 6039 Rubber Stamped by Sam Weinig. 6040 6041 Renamed JSValuePtr => JSValue. 6042 6043 * API/APICast.h: 6044 (toJS): 6045 (toRef): 6046 * API/JSCallbackConstructor.h: 6047 (JSC::JSCallbackConstructor::createStructure): 6048 * API/JSCallbackFunction.cpp: 6049 (JSC::JSCallbackFunction::call): 6050 * API/JSCallbackFunction.h: 6051 (JSC::JSCallbackFunction::createStructure): 6052 * API/JSCallbackObject.h: 6053 (JSC::JSCallbackObject::createStructure): 6054 * API/JSCallbackObjectFunctions.h: 6055 (JSC::::asCallbackObject): 6056 (JSC::::put): 6057 (JSC::::hasInstance): 6058 (JSC::::call): 6059 (JSC::::staticValueGetter): 6060 (JSC::::staticFunctionGetter): 6061 (JSC::::callbackGetter): 6062 * API/JSContextRef.cpp: 6063 * API/JSObjectRef.cpp: 6064 (JSObjectMakeConstructor): 6065 (JSObjectSetPrototype): 6066 (JSObjectGetProperty): 6067 (JSObjectSetProperty): 6068 (JSObjectGetPropertyAtIndex): 6069 (JSObjectSetPropertyAtIndex): 6070 * API/JSValueRef.cpp: 6071 (JSValueGetType): 6072 (JSValueIsUndefined): 6073 (JSValueIsNull): 6074 (JSValueIsBoolean): 6075 (JSValueIsNumber): 6076 (JSValueIsString): 6077 (JSValueIsObject): 6078 (JSValueIsObjectOfClass): 6079 (JSValueIsEqual): 6080 (JSValueIsStrictEqual): 6081 (JSValueIsInstanceOfConstructor): 6082 (JSValueToBoolean): 6083 (JSValueToNumber): 6084 (JSValueToStringCopy): 6085 (JSValueToObject): 6086 (JSValueProtect): 6087 (JSValueUnprotect): 6088 * JavaScriptCore.exp: 6089 * bytecode/CodeBlock.cpp: 6090 (JSC::valueToSourceString): 6091 (JSC::constantName): 6092 (JSC::CodeBlock::dump): 6093 * bytecode/CodeBlock.h: 6094 (JSC::CodeBlock::getConstant): 6095 (JSC::CodeBlock::addUnexpectedConstant): 6096 (JSC::CodeBlock::unexpectedConstant): 6097 * bytecode/EvalCodeCache.h: 6098 (JSC::EvalCodeCache::get): 6099 * bytecompiler/BytecodeGenerator.cpp: 6100 (JSC::BytecodeGenerator::addConstant): 6101 (JSC::BytecodeGenerator::addUnexpectedConstant): 6102 (JSC::BytecodeGenerator::emitLoad): 6103 (JSC::BytecodeGenerator::emitGetScopedVar): 6104 (JSC::BytecodeGenerator::emitPutScopedVar): 6105 (JSC::BytecodeGenerator::emitNewError): 6106 (JSC::keyForImmediateSwitch): 6107 * bytecompiler/BytecodeGenerator.h: 6108 (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue): 6109 (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue): 6110 * debugger/Debugger.cpp: 6111 (JSC::evaluateInGlobalCallFrame): 6112 * debugger/Debugger.h: 6113 * debugger/DebuggerActivation.cpp: 6114 (JSC::DebuggerActivation::put): 6115 (JSC::DebuggerActivation::putWithAttributes): 6116 (JSC::DebuggerActivation::lookupGetter): 6117 (JSC::DebuggerActivation::lookupSetter): 6118 * debugger/DebuggerActivation.h: 6119 (JSC::DebuggerActivation::createStructure): 6120 * debugger/DebuggerCallFrame.cpp: 6121 (JSC::DebuggerCallFrame::evaluate): 6122 * debugger/DebuggerCallFrame.h: 6123 (JSC::DebuggerCallFrame::DebuggerCallFrame): 6124 (JSC::DebuggerCallFrame::exception): 6125 * interpreter/CachedCall.h: 6126 (JSC::CachedCall::CachedCall): 6127 (JSC::CachedCall::call): 6128 (JSC::CachedCall::setThis): 6129 (JSC::CachedCall::setArgument): 6130 * interpreter/CallFrame.cpp: 6131 (JSC::CallFrame::thisValue): 6132 (JSC::CallFrame::dumpCaller): 6133 * interpreter/CallFrame.h: 6134 (JSC::ExecState::setException): 6135 (JSC::ExecState::exception): 6136 (JSC::ExecState::exceptionSlot): 6137 * interpreter/CallFrameClosure.h: 6138 (JSC::CallFrameClosure::setArgument): 6139 * interpreter/Interpreter.cpp: 6140 (JSC::Interpreter::resolve): 6141 (JSC::Interpreter::resolveSkip): 6142 (JSC::Interpreter::resolveGlobal): 6143 (JSC::Interpreter::resolveBase): 6144 (JSC::Interpreter::resolveBaseAndProperty): 6145 (JSC::Interpreter::resolveBaseAndFunc): 6146 (JSC::isNotObject): 6147 (JSC::Interpreter::callEval): 6148 (JSC::Interpreter::unwindCallFrame): 6149 (JSC::Interpreter::throwException): 6150 (JSC::Interpreter::execute): 6151 (JSC::Interpreter::prepareForRepeatCall): 6152 (JSC::Interpreter::createExceptionScope): 6153 (JSC::Interpreter::tryCachePutByID): 6154 (JSC::Interpreter::tryCacheGetByID): 6155 (JSC::Interpreter::privateExecute): 6156 (JSC::Interpreter::retrieveArguments): 6157 (JSC::Interpreter::retrieveCaller): 6158 (JSC::Interpreter::retrieveLastCaller): 6159 * interpreter/Interpreter.h: 6160 * interpreter/Register.h: 6161 (JSC::Register::): 6162 (JSC::Register::Register): 6163 (JSC::Register::jsValue): 6164 * jit/JIT.cpp: 6165 (JSC::): 6166 (JSC::JIT::privateCompileMainPass): 6167 * jit/JIT.h: 6168 * jit/JITArithmetic.cpp: 6169 (JSC::JIT::compileFastArith_op_mod): 6170 * jit/JITCall.cpp: 6171 (JSC::JIT::unlinkCall): 6172 (JSC::JIT::compileOpCallInitializeCallFrame): 6173 (JSC::JIT::compileOpCall): 6174 * jit/JITCode.h: 6175 (JSC::): 6176 (JSC::JITCode::execute): 6177 * jit/JITInlineMethods.h: 6178 (JSC::JIT::emitGetVirtualRegister): 6179 (JSC::JIT::getConstantOperand): 6180 (JSC::JIT::emitPutJITStubArgFromVirtualRegister): 6181 (JSC::JIT::emitInitRegister): 6182 * jit/JITPropertyAccess.cpp: 6183 (JSC::JIT::privateCompilePutByIdTransition): 6184 (JSC::JIT::patchGetByIdSelf): 6185 (JSC::JIT::patchPutByIdReplace): 6186 (JSC::JIT::privateCompileGetByIdSelf): 6187 (JSC::JIT::privateCompileGetByIdProto): 6188 (JSC::JIT::privateCompileGetByIdSelfList): 6189 (JSC::JIT::privateCompileGetByIdProtoList): 6190 (JSC::JIT::privateCompileGetByIdChainList): 6191 (JSC::JIT::privateCompileGetByIdChain): 6192 (JSC::JIT::privateCompilePutByIdReplace): 6193 * jit/JITStubs.cpp: 6194 (JSC::JITStubs::tryCachePutByID): 6195 (JSC::JITStubs::tryCacheGetByID): 6196 (JSC::JITStubs::cti_op_convert_this): 6197 (JSC::JITStubs::cti_op_add): 6198 (JSC::JITStubs::cti_op_pre_inc): 6199 (JSC::JITStubs::cti_op_loop_if_less): 6200 (JSC::JITStubs::cti_op_loop_if_lesseq): 6201 (JSC::JITStubs::cti_op_get_by_id_generic): 6202 (JSC::JITStubs::cti_op_get_by_id): 6203 (JSC::JITStubs::cti_op_get_by_id_second): 6204 (JSC::JITStubs::cti_op_get_by_id_self_fail): 6205 (JSC::JITStubs::cti_op_get_by_id_proto_list): 6206 (JSC::JITStubs::cti_op_get_by_id_proto_list_full): 6207 (JSC::JITStubs::cti_op_get_by_id_proto_fail): 6208 (JSC::JITStubs::cti_op_get_by_id_array_fail): 6209 (JSC::JITStubs::cti_op_get_by_id_string_fail): 6210 (JSC::JITStubs::cti_op_instanceof): 6211 (JSC::JITStubs::cti_op_del_by_id): 6212 (JSC::JITStubs::cti_op_mul): 6213 (JSC::JITStubs::cti_op_call_NotJSFunction): 6214 (JSC::JITStubs::cti_op_resolve): 6215 (JSC::JITStubs::cti_op_construct_NotJSConstruct): 6216 (JSC::JITStubs::cti_op_get_by_val): 6217 (JSC::JITStubs::cti_op_get_by_val_string): 6218 (JSC::JITStubs::cti_op_get_by_val_byte_array): 6219 (JSC::JITStubs::cti_op_resolve_func): 6220 (JSC::JITStubs::cti_op_sub): 6221 (JSC::JITStubs::cti_op_put_by_val): 6222 (JSC::JITStubs::cti_op_put_by_val_array): 6223 (JSC::JITStubs::cti_op_put_by_val_byte_array): 6224 (JSC::JITStubs::cti_op_lesseq): 6225 (JSC::JITStubs::cti_op_loop_if_true): 6226 (JSC::JITStubs::cti_op_load_varargs): 6227 (JSC::JITStubs::cti_op_negate): 6228 (JSC::JITStubs::cti_op_resolve_base): 6229 (JSC::JITStubs::cti_op_resolve_skip): 6230 (JSC::JITStubs::cti_op_resolve_global): 6231 (JSC::JITStubs::cti_op_div): 6232 (JSC::JITStubs::cti_op_pre_dec): 6233 (JSC::JITStubs::cti_op_jless): 6234 (JSC::JITStubs::cti_op_not): 6235 (JSC::JITStubs::cti_op_jtrue): 6236 (JSC::JITStubs::cti_op_post_inc): 6237 (JSC::JITStubs::cti_op_eq): 6238 (JSC::JITStubs::cti_op_lshift): 6239 (JSC::JITStubs::cti_op_bitand): 6240 (JSC::JITStubs::cti_op_rshift): 6241 (JSC::JITStubs::cti_op_bitnot): 6242 (JSC::JITStubs::cti_op_resolve_with_base): 6243 (JSC::JITStubs::cti_op_mod): 6244 (JSC::JITStubs::cti_op_less): 6245 (JSC::JITStubs::cti_op_neq): 6246 (JSC::JITStubs::cti_op_post_dec): 6247 (JSC::JITStubs::cti_op_urshift): 6248 (JSC::JITStubs::cti_op_bitxor): 6249 (JSC::JITStubs::cti_op_bitor): 6250 (JSC::JITStubs::cti_op_call_eval): 6251 (JSC::JITStubs::cti_op_throw): 6252 (JSC::JITStubs::cti_op_next_pname): 6253 (JSC::JITStubs::cti_op_typeof): 6254 (JSC::JITStubs::cti_op_is_undefined): 6255 (JSC::JITStubs::cti_op_is_boolean): 6256 (JSC::JITStubs::cti_op_is_number): 6257 (JSC::JITStubs::cti_op_is_string): 6258 (JSC::JITStubs::cti_op_is_object): 6259 (JSC::JITStubs::cti_op_is_function): 6260 (JSC::JITStubs::cti_op_stricteq): 6261 (JSC::JITStubs::cti_op_nstricteq): 6262 (JSC::JITStubs::cti_op_to_jsnumber): 6263 (JSC::JITStubs::cti_op_in): 6264 (JSC::JITStubs::cti_op_switch_imm): 6265 (JSC::JITStubs::cti_op_switch_char): 6266 (JSC::JITStubs::cti_op_switch_string): 6267 (JSC::JITStubs::cti_op_del_by_val): 6268 (JSC::JITStubs::cti_op_new_error): 6269 (JSC::JITStubs::cti_vm_throw): 6270 * jit/JITStubs.h: 6271 * jsc.cpp: 6272 (functionPrint): 6273 (functionDebug): 6274 (functionGC): 6275 (functionVersion): 6276 (functionRun): 6277 (functionLoad): 6278 (functionSetSamplingFlag): 6279 (functionClearSamplingFlag): 6280 (functionReadline): 6281 (functionQuit): 6282 * parser/Nodes.cpp: 6283 (JSC::processClauseList): 6284 * profiler/ProfileGenerator.cpp: 6285 (JSC::ProfileGenerator::addParentForConsoleStart): 6286 * profiler/Profiler.cpp: 6287 (JSC::Profiler::willExecute): 6288 (JSC::Profiler::didExecute): 6289 (JSC::Profiler::createCallIdentifier): 6290 * profiler/Profiler.h: 6291 * runtime/ArgList.cpp: 6292 (JSC::MarkedArgumentBuffer::slowAppend): 6293 * runtime/ArgList.h: 6294 (JSC::MarkedArgumentBuffer::at): 6295 (JSC::MarkedArgumentBuffer::append): 6296 (JSC::ArgList::ArgList): 6297 (JSC::ArgList::at): 6298 * runtime/Arguments.cpp: 6299 (JSC::Arguments::put): 6300 * runtime/Arguments.h: 6301 (JSC::Arguments::createStructure): 6302 (JSC::asArguments): 6303 * runtime/ArrayConstructor.cpp: 6304 (JSC::callArrayConstructor): 6305 * runtime/ArrayPrototype.cpp: 6306 (JSC::getProperty): 6307 (JSC::putProperty): 6308 (JSC::arrayProtoFuncToString): 6309 (JSC::arrayProtoFuncToLocaleString): 6310 (JSC::arrayProtoFuncJoin): 6311 (JSC::arrayProtoFuncConcat): 6312 (JSC::arrayProtoFuncPop): 6313 (JSC::arrayProtoFuncPush): 6314 (JSC::arrayProtoFuncReverse): 6315 (JSC::arrayProtoFuncShift): 6316 (JSC::arrayProtoFuncSlice): 6317 (JSC::arrayProtoFuncSort): 6318 (JSC::arrayProtoFuncSplice): 6319 (JSC::arrayProtoFuncUnShift): 6320 (JSC::arrayProtoFuncFilter): 6321 (JSC::arrayProtoFuncMap): 6322 (JSC::arrayProtoFuncEvery): 6323 (JSC::arrayProtoFuncForEach): 6324 (JSC::arrayProtoFuncSome): 6325 (JSC::arrayProtoFuncReduce): 6326 (JSC::arrayProtoFuncReduceRight): 6327 (JSC::arrayProtoFuncIndexOf): 6328 (JSC::arrayProtoFuncLastIndexOf): 6329 * runtime/BooleanConstructor.cpp: 6330 (JSC::callBooleanConstructor): 6331 (JSC::constructBooleanFromImmediateBoolean): 6332 * runtime/BooleanConstructor.h: 6333 * runtime/BooleanObject.h: 6334 (JSC::asBooleanObject): 6335 * runtime/BooleanPrototype.cpp: 6336 (JSC::booleanProtoFuncToString): 6337 (JSC::booleanProtoFuncValueOf): 6338 * runtime/CallData.cpp: 6339 (JSC::call): 6340 * runtime/CallData.h: 6341 * runtime/Collector.cpp: 6342 (JSC::Heap::protect): 6343 (JSC::Heap::unprotect): 6344 (JSC::Heap::heap): 6345 * runtime/Collector.h: 6346 * runtime/Completion.cpp: 6347 (JSC::evaluate): 6348 * runtime/Completion.h: 6349 (JSC::Completion::Completion): 6350 (JSC::Completion::value): 6351 (JSC::Completion::setValue): 6352 * runtime/ConstructData.cpp: 6353 (JSC::construct): 6354 * runtime/ConstructData.h: 6355 * runtime/DateConstructor.cpp: 6356 (JSC::constructDate): 6357 (JSC::callDate): 6358 (JSC::dateParse): 6359 (JSC::dateNow): 6360 (JSC::dateUTC): 6361 * runtime/DateInstance.h: 6362 (JSC::asDateInstance): 6363 * runtime/DatePrototype.cpp: 6364 (JSC::dateProtoFuncToString): 6365 (JSC::dateProtoFuncToUTCString): 6366 (JSC::dateProtoFuncToDateString): 6367 (JSC::dateProtoFuncToTimeString): 6368 (JSC::dateProtoFuncToLocaleString): 6369 (JSC::dateProtoFuncToLocaleDateString): 6370 (JSC::dateProtoFuncToLocaleTimeString): 6371 (JSC::dateProtoFuncGetTime): 6372 (JSC::dateProtoFuncGetFullYear): 6373 (JSC::dateProtoFuncGetUTCFullYear): 6374 (JSC::dateProtoFuncToGMTString): 6375 (JSC::dateProtoFuncGetMonth): 6376 (JSC::dateProtoFuncGetUTCMonth): 6377 (JSC::dateProtoFuncGetDate): 6378 (JSC::dateProtoFuncGetUTCDate): 6379 (JSC::dateProtoFuncGetDay): 6380 (JSC::dateProtoFuncGetUTCDay): 6381 (JSC::dateProtoFuncGetHours): 6382 (JSC::dateProtoFuncGetUTCHours): 6383 (JSC::dateProtoFuncGetMinutes): 6384 (JSC::dateProtoFuncGetUTCMinutes): 6385 (JSC::dateProtoFuncGetSeconds): 6386 (JSC::dateProtoFuncGetUTCSeconds): 6387 (JSC::dateProtoFuncGetMilliSeconds): 6388 (JSC::dateProtoFuncGetUTCMilliseconds): 6389 (JSC::dateProtoFuncGetTimezoneOffset): 6390 (JSC::dateProtoFuncSetTime): 6391 (JSC::setNewValueFromTimeArgs): 6392 (JSC::setNewValueFromDateArgs): 6393 (JSC::dateProtoFuncSetMilliSeconds): 6394 (JSC::dateProtoFuncSetUTCMilliseconds): 6395 (JSC::dateProtoFuncSetSeconds): 6396 (JSC::dateProtoFuncSetUTCSeconds): 6397 (JSC::dateProtoFuncSetMinutes): 6398 (JSC::dateProtoFuncSetUTCMinutes): 6399 (JSC::dateProtoFuncSetHours): 6400 (JSC::dateProtoFuncSetUTCHours): 6401 (JSC::dateProtoFuncSetDate): 6402 (JSC::dateProtoFuncSetUTCDate): 6403 (JSC::dateProtoFuncSetMonth): 6404 (JSC::dateProtoFuncSetUTCMonth): 6405 (JSC::dateProtoFuncSetFullYear): 6406 (JSC::dateProtoFuncSetUTCFullYear): 6407 (JSC::dateProtoFuncSetYear): 6408 (JSC::dateProtoFuncGetYear): 6409 * runtime/DatePrototype.h: 6410 (JSC::DatePrototype::createStructure): 6411 * runtime/ErrorConstructor.cpp: 6412 (JSC::callErrorConstructor): 6413 * runtime/ErrorPrototype.cpp: 6414 (JSC::errorProtoFuncToString): 6415 * runtime/ExceptionHelpers.cpp: 6416 (JSC::createInterruptedExecutionException): 6417 (JSC::createError): 6418 (JSC::createStackOverflowError): 6419 (JSC::createUndefinedVariableError): 6420 (JSC::createErrorMessage): 6421 (JSC::createInvalidParamError): 6422 (JSC::createNotAConstructorError): 6423 (JSC::createNotAFunctionError): 6424 * runtime/ExceptionHelpers.h: 6425 * runtime/FunctionConstructor.cpp: 6426 (JSC::callFunctionConstructor): 6427 * runtime/FunctionPrototype.cpp: 6428 (JSC::callFunctionPrototype): 6429 (JSC::functionProtoFuncToString): 6430 (JSC::functionProtoFuncApply): 6431 (JSC::functionProtoFuncCall): 6432 * runtime/FunctionPrototype.h: 6433 (JSC::FunctionPrototype::createStructure): 6434 * runtime/GetterSetter.cpp: 6435 (JSC::GetterSetter::toPrimitive): 6436 (JSC::GetterSetter::getPrimitiveNumber): 6437 * runtime/GetterSetter.h: 6438 (JSC::asGetterSetter): 6439 * runtime/InternalFunction.cpp: 6440 (JSC::InternalFunction::displayName): 6441 * runtime/InternalFunction.h: 6442 (JSC::InternalFunction::createStructure): 6443 (JSC::asInternalFunction): 6444 * runtime/JSActivation.cpp: 6445 (JSC::JSActivation::getOwnPropertySlot): 6446 (JSC::JSActivation::put): 6447 (JSC::JSActivation::putWithAttributes): 6448 (JSC::JSActivation::argumentsGetter): 6449 * runtime/JSActivation.h: 6450 (JSC::JSActivation::createStructure): 6451 (JSC::asActivation): 6452 * runtime/JSArray.cpp: 6453 (JSC::storageSize): 6454 (JSC::JSArray::JSArray): 6455 (JSC::JSArray::getOwnPropertySlot): 6456 (JSC::JSArray::put): 6457 (JSC::JSArray::putSlowCase): 6458 (JSC::JSArray::deleteProperty): 6459 (JSC::JSArray::setLength): 6460 (JSC::JSArray::pop): 6461 (JSC::JSArray::push): 6462 (JSC::JSArray::mark): 6463 (JSC::compareNumbersForQSort): 6464 (JSC::JSArray::sortNumeric): 6465 (JSC::JSArray::sort): 6466 (JSC::JSArray::compactForSorting): 6467 (JSC::JSArray::checkConsistency): 6468 (JSC::constructArray): 6469 * runtime/JSArray.h: 6470 (JSC::JSArray::getIndex): 6471 (JSC::JSArray::setIndex): 6472 (JSC::JSArray::createStructure): 6473 (JSC::asArray): 6474 (JSC::isJSArray): 6475 * runtime/JSByteArray.cpp: 6476 (JSC::JSByteArray::createStructure): 6477 (JSC::JSByteArray::put): 6478 * runtime/JSByteArray.h: 6479 (JSC::JSByteArray::getIndex): 6480 (JSC::JSByteArray::setIndex): 6481 (JSC::asByteArray): 6482 (JSC::isJSByteArray): 6483 * runtime/JSCell.cpp: 6484 (JSC::JSCell::put): 6485 (JSC::JSCell::getJSNumber): 6486 * runtime/JSCell.h: 6487 (JSC::asCell): 6488 (JSC::JSValue::asCell): 6489 (JSC::JSValue::isString): 6490 (JSC::JSValue::isGetterSetter): 6491 (JSC::JSValue::isObject): 6492 (JSC::JSValue::getString): 6493 (JSC::JSValue::getObject): 6494 (JSC::JSValue::getCallData): 6495 (JSC::JSValue::getConstructData): 6496 (JSC::JSValue::getUInt32): 6497 (JSC::JSValue::getTruncatedInt32): 6498 (JSC::JSValue::getTruncatedUInt32): 6499 (JSC::JSValue::mark): 6500 (JSC::JSValue::marked): 6501 (JSC::JSValue::toPrimitive): 6502 (JSC::JSValue::getPrimitiveNumber): 6503 (JSC::JSValue::toBoolean): 6504 (JSC::JSValue::toNumber): 6505 (JSC::JSValue::toString): 6506 (JSC::JSValue::toObject): 6507 (JSC::JSValue::toThisObject): 6508 (JSC::JSValue::needsThisConversion): 6509 (JSC::JSValue::toThisString): 6510 (JSC::JSValue::getJSNumber): 6511 * runtime/JSFunction.cpp: 6512 (JSC::JSFunction::call): 6513 (JSC::JSFunction::argumentsGetter): 6514 (JSC::JSFunction::callerGetter): 6515 (JSC::JSFunction::lengthGetter): 6516 (JSC::JSFunction::getOwnPropertySlot): 6517 (JSC::JSFunction::put): 6518 (JSC::JSFunction::construct): 6519 * runtime/JSFunction.h: 6520 (JSC::JSFunction::createStructure): 6521 (JSC::asFunction): 6522 * runtime/JSGlobalData.h: 6523 * runtime/JSGlobalObject.cpp: 6524 (JSC::markIfNeeded): 6525 (JSC::JSGlobalObject::put): 6526 (JSC::JSGlobalObject::putWithAttributes): 6527 (JSC::JSGlobalObject::reset): 6528 (JSC::JSGlobalObject::resetPrototype): 6529 * runtime/JSGlobalObject.h: 6530 (JSC::JSGlobalObject::createStructure): 6531 (JSC::JSGlobalObject::GlobalPropertyInfo::GlobalPropertyInfo): 6532 (JSC::asGlobalObject): 6533 (JSC::Structure::prototypeForLookup): 6534 (JSC::Structure::prototypeChain): 6535 (JSC::Structure::isValid): 6536 * runtime/JSGlobalObjectFunctions.cpp: 6537 (JSC::encode): 6538 (JSC::decode): 6539 (JSC::globalFuncEval): 6540 (JSC::globalFuncParseInt): 6541 (JSC::globalFuncParseFloat): 6542 (JSC::globalFuncIsNaN): 6543 (JSC::globalFuncIsFinite): 6544 (JSC::globalFuncDecodeURI): 6545 (JSC::globalFuncDecodeURIComponent): 6546 (JSC::globalFuncEncodeURI): 6547 (JSC::globalFuncEncodeURIComponent): 6548 (JSC::globalFuncEscape): 6549 (JSC::globalFuncUnescape): 6550 (JSC::globalFuncJSCPrint): 6551 * runtime/JSGlobalObjectFunctions.h: 6552 * runtime/JSImmediate.cpp: 6553 (JSC::JSImmediate::toThisObject): 6554 (JSC::JSImmediate::toObject): 6555 (JSC::JSImmediate::prototype): 6556 (JSC::JSImmediate::toString): 6557 * runtime/JSImmediate.h: 6558 (JSC::JSImmediate::isImmediate): 6559 (JSC::JSImmediate::isNumber): 6560 (JSC::JSImmediate::isIntegerNumber): 6561 (JSC::JSImmediate::isDoubleNumber): 6562 (JSC::JSImmediate::isPositiveIntegerNumber): 6563 (JSC::JSImmediate::isBoolean): 6564 (JSC::JSImmediate::isUndefinedOrNull): 6565 (JSC::JSImmediate::isEitherImmediate): 6566 (JSC::JSImmediate::areBothImmediate): 6567 (JSC::JSImmediate::areBothImmediateIntegerNumbers): 6568 (JSC::JSImmediate::makeValue): 6569 (JSC::JSImmediate::makeInt): 6570 (JSC::JSImmediate::makeDouble): 6571 (JSC::JSImmediate::makeBool): 6572 (JSC::JSImmediate::makeUndefined): 6573 (JSC::JSImmediate::makeNull): 6574 (JSC::JSImmediate::doubleValue): 6575 (JSC::JSImmediate::intValue): 6576 (JSC::JSImmediate::uintValue): 6577 (JSC::JSImmediate::boolValue): 6578 (JSC::JSImmediate::rawValue): 6579 (JSC::JSImmediate::trueImmediate): 6580 (JSC::JSImmediate::falseImmediate): 6581 (JSC::JSImmediate::undefinedImmediate): 6582 (JSC::JSImmediate::nullImmediate): 6583 (JSC::JSImmediate::zeroImmediate): 6584 (JSC::JSImmediate::oneImmediate): 6585 (JSC::JSImmediate::impossibleValue): 6586 (JSC::JSImmediate::toBoolean): 6587 (JSC::JSImmediate::getTruncatedUInt32): 6588 (JSC::JSImmediate::fromNumberOutsideIntegerRange): 6589 (JSC::JSImmediate::from): 6590 (JSC::JSImmediate::getTruncatedInt32): 6591 (JSC::JSImmediate::toDouble): 6592 (JSC::JSImmediate::getUInt32): 6593 (JSC::JSValue::JSValue): 6594 (JSC::JSValue::isUndefinedOrNull): 6595 (JSC::JSValue::isBoolean): 6596 (JSC::JSValue::getBoolean): 6597 (JSC::JSValue::toInt32): 6598 (JSC::JSValue::toUInt32): 6599 (JSC::JSValue::isCell): 6600 (JSC::JSValue::isInt32Fast): 6601 (JSC::JSValue::getInt32Fast): 6602 (JSC::JSValue::isUInt32Fast): 6603 (JSC::JSValue::getUInt32Fast): 6604 (JSC::JSValue::makeInt32Fast): 6605 (JSC::JSValue::areBothInt32Fast): 6606 (JSC::JSFastMath::canDoFastBitwiseOperations): 6607 (JSC::JSFastMath::equal): 6608 (JSC::JSFastMath::notEqual): 6609 (JSC::JSFastMath::andImmediateNumbers): 6610 (JSC::JSFastMath::xorImmediateNumbers): 6611 (JSC::JSFastMath::orImmediateNumbers): 6612 (JSC::JSFastMath::canDoFastRshift): 6613 (JSC::JSFastMath::canDoFastUrshift): 6614 (JSC::JSFastMath::rightShiftImmediateNumbers): 6615 (JSC::JSFastMath::canDoFastAdditiveOperations): 6616 (JSC::JSFastMath::addImmediateNumbers): 6617 (JSC::JSFastMath::subImmediateNumbers): 6618 (JSC::JSFastMath::incImmediateNumber): 6619 (JSC::JSFastMath::decImmediateNumber): 6620 * runtime/JSNotAnObject.cpp: 6621 (JSC::JSNotAnObject::toPrimitive): 6622 (JSC::JSNotAnObject::getPrimitiveNumber): 6623 (JSC::JSNotAnObject::put): 6624 * runtime/JSNotAnObject.h: 6625 (JSC::JSNotAnObject::createStructure): 6626 * runtime/JSNumberCell.cpp: 6627 (JSC::JSNumberCell::toPrimitive): 6628 (JSC::JSNumberCell::getPrimitiveNumber): 6629 (JSC::JSNumberCell::getJSNumber): 6630 (JSC::jsNumberCell): 6631 * runtime/JSNumberCell.h: 6632 (JSC::JSNumberCell::createStructure): 6633 (JSC::isNumberCell): 6634 (JSC::asNumberCell): 6635 (JSC::jsNumber): 6636 (JSC::JSValue::isDoubleNumber): 6637 (JSC::JSValue::getDoubleNumber): 6638 (JSC::JSValue::isNumber): 6639 (JSC::JSValue::uncheckedGetNumber): 6640 (JSC::jsNaN): 6641 (JSC::JSValue::toJSNumber): 6642 (JSC::JSValue::getNumber): 6643 (JSC::JSValue::numberToInt32): 6644 (JSC::JSValue::numberToUInt32): 6645 * runtime/JSObject.cpp: 6646 (JSC::JSObject::mark): 6647 (JSC::JSObject::put): 6648 (JSC::JSObject::putWithAttributes): 6649 (JSC::callDefaultValueFunction): 6650 (JSC::JSObject::getPrimitiveNumber): 6651 (JSC::JSObject::defaultValue): 6652 (JSC::JSObject::defineGetter): 6653 (JSC::JSObject::defineSetter): 6654 (JSC::JSObject::lookupGetter): 6655 (JSC::JSObject::lookupSetter): 6656 (JSC::JSObject::hasInstance): 6657 (JSC::JSObject::toNumber): 6658 (JSC::JSObject::toString): 6659 (JSC::JSObject::fillGetterPropertySlot): 6660 * runtime/JSObject.h: 6661 (JSC::JSObject::getDirect): 6662 (JSC::JSObject::getDirectLocation): 6663 (JSC::JSObject::offsetForLocation): 6664 (JSC::JSObject::locationForOffset): 6665 (JSC::JSObject::getDirectOffset): 6666 (JSC::JSObject::putDirectOffset): 6667 (JSC::JSObject::createStructure): 6668 (JSC::asObject): 6669 (JSC::JSObject::prototype): 6670 (JSC::JSObject::setPrototype): 6671 (JSC::JSValue::isObject): 6672 (JSC::JSObject::inlineGetOwnPropertySlot): 6673 (JSC::JSObject::getOwnPropertySlotForWrite): 6674 (JSC::JSObject::getPropertySlot): 6675 (JSC::JSObject::get): 6676 (JSC::JSObject::putDirect): 6677 (JSC::JSObject::putDirectWithoutTransition): 6678 (JSC::JSObject::toPrimitive): 6679 (JSC::JSValue::get): 6680 (JSC::JSValue::put): 6681 (JSC::JSObject::allocatePropertyStorageInline): 6682 * runtime/JSPropertyNameIterator.cpp: 6683 (JSC::JSPropertyNameIterator::toPrimitive): 6684 (JSC::JSPropertyNameIterator::getPrimitiveNumber): 6685 * runtime/JSPropertyNameIterator.h: 6686 (JSC::JSPropertyNameIterator::create): 6687 (JSC::JSPropertyNameIterator::next): 6688 * runtime/JSStaticScopeObject.cpp: 6689 (JSC::JSStaticScopeObject::put): 6690 (JSC::JSStaticScopeObject::putWithAttributes): 6691 * runtime/JSStaticScopeObject.h: 6692 (JSC::JSStaticScopeObject::JSStaticScopeObject): 6693 (JSC::JSStaticScopeObject::createStructure): 6694 * runtime/JSString.cpp: 6695 (JSC::JSString::toPrimitive): 6696 (JSC::JSString::getPrimitiveNumber): 6697 (JSC::JSString::getOwnPropertySlot): 6698 * runtime/JSString.h: 6699 (JSC::JSString::createStructure): 6700 (JSC::asString): 6701 (JSC::isJSString): 6702 (JSC::JSValue::toThisJSString): 6703 * runtime/JSValue.cpp: 6704 (JSC::JSValue::toInteger): 6705 (JSC::JSValue::toIntegerPreserveNaN): 6706 * runtime/JSValue.h: 6707 (JSC::JSValue::makeImmediate): 6708 (JSC::JSValue::asValue): 6709 (JSC::noValue): 6710 (JSC::jsImpossibleValue): 6711 (JSC::jsNull): 6712 (JSC::jsUndefined): 6713 (JSC::jsBoolean): 6714 (JSC::operator==): 6715 (JSC::operator!=): 6716 (JSC::JSValue::encode): 6717 (JSC::JSValue::decode): 6718 (JSC::JSValue::JSValue): 6719 (JSC::JSValue::operator bool): 6720 (JSC::JSValue::operator==): 6721 (JSC::JSValue::operator!=): 6722 (JSC::JSValue::isUndefined): 6723 (JSC::JSValue::isNull): 6724 * runtime/JSVariableObject.h: 6725 (JSC::JSVariableObject::symbolTablePut): 6726 (JSC::JSVariableObject::symbolTablePutWithAttributes): 6727 * runtime/JSWrapperObject.h: 6728 (JSC::JSWrapperObject::internalValue): 6729 (JSC::JSWrapperObject::setInternalValue): 6730 * runtime/Lookup.cpp: 6731 (JSC::setUpStaticFunctionSlot): 6732 * runtime/Lookup.h: 6733 (JSC::lookupPut): 6734 * runtime/MathObject.cpp: 6735 (JSC::mathProtoFuncAbs): 6736 (JSC::mathProtoFuncACos): 6737 (JSC::mathProtoFuncASin): 6738 (JSC::mathProtoFuncATan): 6739 (JSC::mathProtoFuncATan2): 6740 (JSC::mathProtoFuncCeil): 6741 (JSC::mathProtoFuncCos): 6742 (JSC::mathProtoFuncExp): 6743 (JSC::mathProtoFuncFloor): 6744 (JSC::mathProtoFuncLog): 6745 (JSC::mathProtoFuncMax): 6746 (JSC::mathProtoFuncMin): 6747 (JSC::mathProtoFuncPow): 6748 (JSC::mathProtoFuncRandom): 6749 (JSC::mathProtoFuncRound): 6750 (JSC::mathProtoFuncSin): 6751 (JSC::mathProtoFuncSqrt): 6752 (JSC::mathProtoFuncTan): 6753 * runtime/MathObject.h: 6754 (JSC::MathObject::createStructure): 6755 * runtime/NativeErrorConstructor.cpp: 6756 (JSC::callNativeErrorConstructor): 6757 * runtime/NumberConstructor.cpp: 6758 (JSC::numberConstructorNaNValue): 6759 (JSC::numberConstructorNegInfinity): 6760 (JSC::numberConstructorPosInfinity): 6761 (JSC::numberConstructorMaxValue): 6762 (JSC::numberConstructorMinValue): 6763 (JSC::callNumberConstructor): 6764 * runtime/NumberConstructor.h: 6765 (JSC::NumberConstructor::createStructure): 6766 * runtime/NumberObject.cpp: 6767 (JSC::NumberObject::getJSNumber): 6768 (JSC::constructNumber): 6769 * runtime/NumberObject.h: 6770 * runtime/NumberPrototype.cpp: 6771 (JSC::numberProtoFuncToString): 6772 (JSC::numberProtoFuncToLocaleString): 6773 (JSC::numberProtoFuncValueOf): 6774 (JSC::numberProtoFuncToFixed): 6775 (JSC::numberProtoFuncToExponential): 6776 (JSC::numberProtoFuncToPrecision): 6777 * runtime/ObjectConstructor.cpp: 6778 (JSC::constructObject): 6779 (JSC::callObjectConstructor): 6780 * runtime/ObjectPrototype.cpp: 6781 (JSC::objectProtoFuncValueOf): 6782 (JSC::objectProtoFuncHasOwnProperty): 6783 (JSC::objectProtoFuncIsPrototypeOf): 6784 (JSC::objectProtoFuncDefineGetter): 6785 (JSC::objectProtoFuncDefineSetter): 6786 (JSC::objectProtoFuncLookupGetter): 6787 (JSC::objectProtoFuncLookupSetter): 6788 (JSC::objectProtoFuncPropertyIsEnumerable): 6789 (JSC::objectProtoFuncToLocaleString): 6790 (JSC::objectProtoFuncToString): 6791 * runtime/ObjectPrototype.h: 6792 * runtime/Operations.cpp: 6793 (JSC::JSValue::equalSlowCase): 6794 (JSC::JSValue::strictEqualSlowCase): 6795 (JSC::throwOutOfMemoryError): 6796 (JSC::jsAddSlowCase): 6797 (JSC::jsTypeStringForValue): 6798 (JSC::jsIsObjectType): 6799 (JSC::jsIsFunctionType): 6800 * runtime/Operations.h: 6801 (JSC::JSValue::equal): 6802 (JSC::JSValue::equalSlowCaseInline): 6803 (JSC::JSValue::strictEqual): 6804 (JSC::JSValue::strictEqualSlowCaseInline): 6805 (JSC::jsLess): 6806 (JSC::jsLessEq): 6807 (JSC::jsAdd): 6808 (JSC::countPrototypeChainEntriesAndCheckForProxies): 6809 (JSC::resolveBase): 6810 * runtime/PropertySlot.cpp: 6811 (JSC::PropertySlot::functionGetter): 6812 * runtime/PropertySlot.h: 6813 (JSC::PropertySlot::PropertySlot): 6814 (JSC::PropertySlot::getValue): 6815 (JSC::PropertySlot::putValue): 6816 (JSC::PropertySlot::setValueSlot): 6817 (JSC::PropertySlot::setValue): 6818 (JSC::PropertySlot::setCustom): 6819 (JSC::PropertySlot::setCustomIndex): 6820 (JSC::PropertySlot::slotBase): 6821 (JSC::PropertySlot::setBase): 6822 (JSC::PropertySlot::): 6823 * runtime/Protect.h: 6824 (JSC::gcProtect): 6825 (JSC::gcUnprotect): 6826 (JSC::ProtectedPtr::operator JSValue): 6827 (JSC::ProtectedJSValue::ProtectedJSValue): 6828 (JSC::ProtectedJSValue::get): 6829 (JSC::ProtectedJSValue::operator JSValue): 6830 (JSC::ProtectedJSValue::operator->): 6831 (JSC::ProtectedJSValue::~ProtectedJSValue): 6832 (JSC::ProtectedJSValue::operator=): 6833 (JSC::operator==): 6834 (JSC::operator!=): 6835 * runtime/RegExpConstructor.cpp: 6836 (JSC::RegExpConstructor::getBackref): 6837 (JSC::RegExpConstructor::getLastParen): 6838 (JSC::RegExpConstructor::getLeftContext): 6839 (JSC::RegExpConstructor::getRightContext): 6840 (JSC::regExpConstructorDollar1): 6841 (JSC::regExpConstructorDollar2): 6842 (JSC::regExpConstructorDollar3): 6843 (JSC::regExpConstructorDollar4): 6844 (JSC::regExpConstructorDollar5): 6845 (JSC::regExpConstructorDollar6): 6846 (JSC::regExpConstructorDollar7): 6847 (JSC::regExpConstructorDollar8): 6848 (JSC::regExpConstructorDollar9): 6849 (JSC::regExpConstructorInput): 6850 (JSC::regExpConstructorMultiline): 6851 (JSC::regExpConstructorLastMatch): 6852 (JSC::regExpConstructorLastParen): 6853 (JSC::regExpConstructorLeftContext): 6854 (JSC::regExpConstructorRightContext): 6855 (JSC::RegExpConstructor::put): 6856 (JSC::setRegExpConstructorInput): 6857 (JSC::setRegExpConstructorMultiline): 6858 (JSC::constructRegExp): 6859 (JSC::callRegExpConstructor): 6860 * runtime/RegExpConstructor.h: 6861 (JSC::RegExpConstructor::createStructure): 6862 (JSC::asRegExpConstructor): 6863 * runtime/RegExpMatchesArray.h: 6864 (JSC::RegExpMatchesArray::put): 6865 * runtime/RegExpObject.cpp: 6866 (JSC::regExpObjectGlobal): 6867 (JSC::regExpObjectIgnoreCase): 6868 (JSC::regExpObjectMultiline): 6869 (JSC::regExpObjectSource): 6870 (JSC::regExpObjectLastIndex): 6871 (JSC::RegExpObject::put): 6872 (JSC::setRegExpObjectLastIndex): 6873 (JSC::RegExpObject::test): 6874 (JSC::RegExpObject::exec): 6875 (JSC::callRegExpObject): 6876 * runtime/RegExpObject.h: 6877 (JSC::RegExpObject::createStructure): 6878 (JSC::asRegExpObject): 6879 * runtime/RegExpPrototype.cpp: 6880 (JSC::regExpProtoFuncTest): 6881 (JSC::regExpProtoFuncExec): 6882 (JSC::regExpProtoFuncCompile): 6883 (JSC::regExpProtoFuncToString): 6884 * runtime/StringConstructor.cpp: 6885 (JSC::stringFromCharCodeSlowCase): 6886 (JSC::stringFromCharCode): 6887 (JSC::callStringConstructor): 6888 * runtime/StringObject.cpp: 6889 (JSC::StringObject::put): 6890 * runtime/StringObject.h: 6891 (JSC::StringObject::createStructure): 6892 (JSC::asStringObject): 6893 * runtime/StringObjectThatMasqueradesAsUndefined.h: 6894 (JSC::StringObjectThatMasqueradesAsUndefined::createStructure): 6895 * runtime/StringPrototype.cpp: 6896 (JSC::stringProtoFuncReplace): 6897 (JSC::stringProtoFuncToString): 6898 (JSC::stringProtoFuncCharAt): 6899 (JSC::stringProtoFuncCharCodeAt): 6900 (JSC::stringProtoFuncConcat): 6901 (JSC::stringProtoFuncIndexOf): 6902 (JSC::stringProtoFuncLastIndexOf): 6903 (JSC::stringProtoFuncMatch): 6904 (JSC::stringProtoFuncSearch): 6905 (JSC::stringProtoFuncSlice): 6906 (JSC::stringProtoFuncSplit): 6907 (JSC::stringProtoFuncSubstr): 6908 (JSC::stringProtoFuncSubstring): 6909 (JSC::stringProtoFuncToLowerCase): 6910 (JSC::stringProtoFuncToUpperCase): 6911 (JSC::stringProtoFuncLocaleCompare): 6912 (JSC::stringProtoFuncBig): 6913 (JSC::stringProtoFuncSmall): 6914 (JSC::stringProtoFuncBlink): 6915 (JSC::stringProtoFuncBold): 6916 (JSC::stringProtoFuncFixed): 6917 (JSC::stringProtoFuncItalics): 6918 (JSC::stringProtoFuncStrike): 6919 (JSC::stringProtoFuncSub): 6920 (JSC::stringProtoFuncSup): 6921 (JSC::stringProtoFuncFontcolor): 6922 (JSC::stringProtoFuncFontsize): 6923 (JSC::stringProtoFuncAnchor): 6924 (JSC::stringProtoFuncLink): 6925 * runtime/Structure.cpp: 6926 (JSC::Structure::Structure): 6927 (JSC::Structure::changePrototypeTransition): 6928 * runtime/Structure.h: 6929 (JSC::Structure::create): 6930 (JSC::Structure::setPrototypeWithoutTransition): 6931 (JSC::Structure::storedPrototype): 6932 6933 2009-05-01 Geoffrey Garen <ggaren (a] apple.com> 6934 6935 Reviewed by Sam "That doesn't look like what I thought it looks like" Weinig. 6936 6937 Beefed up the JSValuePtr class and removed some non-JSValuePtr dependencies 6938 on JSImmediate, in prepapration for making JSImmediate an implementation 6939 detail of JSValuePtr. 6940 6941 SunSpider reports no change. 6942 6943 * interpreter/Interpreter.cpp: 6944 (JSC::Interpreter::privateExecute): 6945 * jit/JIT.cpp: 6946 (JSC::JIT::privateCompileMainPass): 6947 * jit/JITArithmetic.cpp: 6948 (JSC::JIT::compileFastArith_op_mod): 6949 * runtime/JSGlobalObjectFunctions.cpp: 6950 (JSC::globalFuncParseInt): Updated for interface changes. 6951 6952 * runtime/JSImmediate.h: 6953 (JSC::JSValuePtr::JSValuePtr): 6954 * runtime/JSValue.h: 6955 (JSC::JSValuePtr::): 6956 (JSC::jsImpossibleValue): 6957 (JSC::jsNull): 6958 (JSC::jsUndefined): 6959 (JSC::jsBoolean): 6960 (JSC::JSValuePtr::encode): 6961 (JSC::JSValuePtr::decode): 6962 (JSC::JSValuePtr::JSValuePtr): 6963 (JSC::JSValuePtr::operator bool): 6964 (JSC::JSValuePtr::operator==): 6965 (JSC::JSValuePtr::operator!=): 6966 (JSC::JSValuePtr::isUndefined): 6967 (JSC::JSValuePtr::isNull): Changed jsImpossibleValue(), jsNull(), 6968 jsUndefined(), and jsBoolean() to operate in terms of JSValuePtr instead 6969 of JSImmediate. 6970 6971 * wtf/StdLibExtras.h: 6972 (WTF::bitwise_cast): Fixed up for clarity. 6973 6974 2009-04-30 Gavin Barraclough <barraclough (a] apple.com> 6975 6976 Reviewed by Geoff Garen. 6977 6978 Bug fix for rdar:/6845379. If a case-insensitive regex contains 6979 a character class containing a range with an upper bound of \uFFFF 6980 the parser will infinite-loop whist adding other-case characters 6981 for characters in the range that do have another case. 6982 6983 * yarr/RegexCompiler.cpp: 6984 (JSC::Yarr::CharacterClassConstructor::putRange): 6985 6986 2009-04-30 Gavin Barraclough <barraclough (a] apple.com> 6987 6988 Reviewed by Oliver Hunt. 6989 6990 OPCODE_SAMPLING without CODEBLOCK_SAMPLING is currently broken, 6991 since SamplingTool::Sample::isNull() checks the m_codeBlock 6992 member (which is always null without CODEBLOCK_SAMPLING). 6993 6994 Restructure the checks so make this work again. 6995 6996 * bytecode/SamplingTool.cpp: 6997 (JSC::SamplingTool::doRun): 6998 * bytecode/SamplingTool.h: 6999 (JSC::SamplingTool::Sample::isNull): 7000 7001 2009-04-30 Maciej Stachowiak <mjs (a] apple.com> 7002 7003 Reviewed by Gavin Barraclough. 7004 7005 - Concatenate final three strings in simple replace case at one go 7006 7007 ~0.2% SunSpider speedup 7008 7009 * runtime/StringPrototype.cpp: 7010 (JSC::stringProtoFuncReplace): Use new replaceRange helper instead of 7011 taking substrings and concatenating three strings. 7012 * runtime/UString.cpp: 7013 (JSC::UString::replaceRange): New helper function. 7014 * runtime/UString.h: 7015 7016 2009-04-30 Geoffrey Garen <ggaren (a] apple.com> 7017 7018 Rubber Stamped by Gavin Barraclough. 7019 7020 Changed JSValueEncodedAsPtr* => EncodedJSValuePtr to support a non-pointer 7021 encoding for JSValuePtrs. 7022 7023 * API/APICast.h: 7024 (toJS): 7025 * bytecompiler/BytecodeGenerator.h: 7026 (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue): 7027 (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue): 7028 * interpreter/Register.h: 7029 (JSC::Register::): 7030 * jit/JIT.cpp: 7031 (JSC::): 7032 * jit/JIT.h: 7033 * jit/JITCode.h: 7034 (JSC::): 7035 * jit/JITStubs.cpp: 7036 (JSC::JITStubs::cti_op_add): 7037 (JSC::JITStubs::cti_op_pre_inc): 7038 (JSC::JITStubs::cti_op_get_by_id_generic): 7039 (JSC::JITStubs::cti_op_get_by_id): 7040 (JSC::JITStubs::cti_op_get_by_id_second): 7041 (JSC::JITStubs::cti_op_get_by_id_self_fail): 7042 (JSC::JITStubs::cti_op_get_by_id_proto_list): 7043 (JSC::JITStubs::cti_op_get_by_id_proto_list_full): 7044 (JSC::JITStubs::cti_op_get_by_id_proto_fail): 7045 (JSC::JITStubs::cti_op_get_by_id_array_fail): 7046 (JSC::JITStubs::cti_op_get_by_id_string_fail): 7047 (JSC::JITStubs::cti_op_instanceof): 7048 (JSC::JITStubs::cti_op_del_by_id): 7049 (JSC::JITStubs::cti_op_mul): 7050 (JSC::JITStubs::cti_op_call_NotJSFunction): 7051 (JSC::JITStubs::cti_op_resolve): 7052 (JSC::JITStubs::cti_op_construct_NotJSConstruct): 7053 (JSC::JITStubs::cti_op_get_by_val): 7054 (JSC::JITStubs::cti_op_get_by_val_string): 7055 (JSC::JITStubs::cti_op_get_by_val_byte_array): 7056 (JSC::JITStubs::cti_op_sub): 7057 (JSC::JITStubs::cti_op_lesseq): 7058 (JSC::JITStubs::cti_op_negate): 7059 (JSC::JITStubs::cti_op_resolve_base): 7060 (JSC::JITStubs::cti_op_resolve_skip): 7061 (JSC::JITStubs::cti_op_resolve_global): 7062 (JSC::JITStubs::cti_op_div): 7063 (JSC::JITStubs::cti_op_pre_dec): 7064 (JSC::JITStubs::cti_op_not): 7065 (JSC::JITStubs::cti_op_eq): 7066 (JSC::JITStubs::cti_op_lshift): 7067 (JSC::JITStubs::cti_op_bitand): 7068 (JSC::JITStubs::cti_op_rshift): 7069 (JSC::JITStubs::cti_op_bitnot): 7070 (JSC::JITStubs::cti_op_mod): 7071 (JSC::JITStubs::cti_op_less): 7072 (JSC::JITStubs::cti_op_neq): 7073 (JSC::JITStubs::cti_op_urshift): 7074 (JSC::JITStubs::cti_op_bitxor): 7075 (JSC::JITStubs::cti_op_bitor): 7076 (JSC::JITStubs::cti_op_call_eval): 7077 (JSC::JITStubs::cti_op_throw): 7078 (JSC::JITStubs::cti_op_next_pname): 7079 (JSC::JITStubs::cti_op_typeof): 7080 (JSC::JITStubs::cti_op_is_undefined): 7081 (JSC::JITStubs::cti_op_is_boolean): 7082 (JSC::JITStubs::cti_op_is_number): 7083 (JSC::JITStubs::cti_op_is_string): 7084 (JSC::JITStubs::cti_op_is_object): 7085 (JSC::JITStubs::cti_op_is_function): 7086 (JSC::JITStubs::cti_op_stricteq): 7087 (JSC::JITStubs::cti_op_nstricteq): 7088 (JSC::JITStubs::cti_op_to_jsnumber): 7089 (JSC::JITStubs::cti_op_in): 7090 (JSC::JITStubs::cti_op_del_by_val): 7091 (JSC::JITStubs::cti_vm_throw): 7092 * jit/JITStubs.h: 7093 * runtime/JSValue.h: 7094 (JSC::JSValuePtr::encode): 7095 (JSC::JSValuePtr::decode): 7096 7097 2009-04-30 Gavin Barraclough <barraclough (a] apple.com> 7098 7099 Reviewed by Oliver "Abandon Ship!" Hunt. 7100 7101 Fix a leak in Yarr. 7102 7103 All Disjunctions should be recorded in RegexPattern::m_disjunctions, 7104 so that they can be freed at the end of compilation - copyDisjunction 7105 is failing to do so. 7106 7107 * yarr/RegexCompiler.cpp: 7108 (JSC::Yarr::RegexPatternConstructor::copyDisjunction): 7109 7110 2009-04-30 Oliver Hunt <oliver (a] apple.com> 7111 7112 Reviewed by Gavin Barraclough. 7113 7114 Add function to CallFrame for dumping the current JS caller 7115 7116 Added debug only method CallFrame::dumpCaller() that provide the call location 7117 of the deepest currently executing JS function. 7118 7119 * interpreter/CallFrame.cpp: 7120 (JSC::CallFrame::dumpCaller): 7121 * interpreter/CallFrame.h: 7122 7123 2009-04-30 Maciej Stachowiak <mjs (a] apple.com> 7124 7125 Reviewed by Geoff Garen. 7126 7127 - make BaseStrings have themselves as a base, instead of nothing, to remove common branches 7128 7129 ~0.7% SunSpider speedup 7130 7131 * runtime/UString.h: 7132 (JSC::UString::Rep::Rep): For the constructor without a base, set self as base instead of null. 7133 (JSC::UString::Rep::baseString): Just read m_baseString - no more branching. 7134 7135 2009-04-30 Gavin Barraclough <barraclough (a] apple.com> 7136 7137 Reviewed by Oliver Hunt. 7138 7139 Two quick improvements to SamplingFlags mechanism. 7140 7141 SamplingFlags::ScopedFlag class to provide support for automagically 7142 clearing a flag as it goes out of scope, and add a little more detail 7143 to the output generated by the tool. 7144 7145 * bytecode/SamplingTool.cpp: 7146 (JSC::SamplingFlags::stop): 7147 * bytecode/SamplingTool.h: 7148 (JSC::SamplingFlags::ScopedFlag::ScopedFlag): 7149 (JSC::SamplingFlags::ScopedFlag::~ScopedFlag): 7150 7151 2009-04-30 Adam Roben <aroben (a] apple.com> 7152 7153 Restore build event steps that were truncated in r43082 7154 7155 Rubber-stamped by Steve Falkenburg. 7156 7157 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: 7158 * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: 7159 * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: 7160 Re-copied the command lines for the build events from the pre-r43082 7161 .vcproj files. 7162 7163 * JavaScriptCore.vcproj/jsc/jsc.vcproj: Removed an unnecessary 7164 attribute. 7165 7166 2009-04-30 Adam Roben <aroben (a] apple.com> 7167 7168 Move settings from .vcproj files to .vsprops files within the 7169 JavaScriptCore directory 7170 7171 Moving the settings to a .vsprops file means that we will only have to 7172 change a single setting to affect all configurations, instead of one 7173 setting per configuration. 7174 7175 Reviewed by Steve Falkenburg. 7176 7177 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 7178 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 7179 * JavaScriptCore.vcproj/jsc/jsc.vcproj: 7180 * JavaScriptCore.vcproj/testapi/testapi.vcproj: 7181 Moved settings from these files to the new .vsprops files. Note that 7182 testapi.vcproj had a lot of overrides of default settings that were 7183 the same as the defaults, which I've removed. 7184 7185 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: Added. 7186 * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops: Added. 7187 * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Added. 7188 * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: Added. 7189 7190 2009-04-30 Dimitri Glazkov <dglazkov (a] chromium.org> 7191 7192 Reviewed by Timothy Hatcher. 7193 7194 https://bugs.webkit.org/show_bug.cgi?id=25470 7195 Extend the cover of ENABLE_JAVASCRIPT_DEBUGGER to profiler. 7196 7197 * Configurations/FeatureDefines.xcconfig: Added ENABLE_JAVASCRIPT_DEBUGGER define. 7198 7199 2009-04-30 Maciej Stachowiak <mjs (a] apple.com> 7200 7201 Reviewed by Alexey Proskuryakov. 7202 7203 - speed up string concatenation by reorganizing some simple cases 7204 7205 0.7% SunSpider speedup 7206 7207 * runtime/UString.cpp: 7208 (JSC::concatenate): Put fast case for appending a single character 7209 before the empty string special cases; streamline code a bit to 7210 delay computing values that are not needed in the fast path. 7211 7212 2009-04-30 Gavin Barraclough <barraclough (a] apple.com> 7213 7214 Reviewed by Maciej Stachowiak. 7215 7216 Add SamplingFlags mechanism. 7217 7218 This mechanism allows fine-grained JSC and JavaScript program aware 7219 performance measurement. The mechanism provides a set of 32 flags, 7220 numbered #1..#32. Flag #16 is initially set, and all other flags 7221 are cleared. Flags may be set and cleared from within 7222 7223 Enable by setting ENABLE_SAMPLING_FLAGS to 1 in wtf/Platform.h. 7224 Disabled by default, no performance impact. Flags may be modified 7225 by calling SamplingFlags::setFlag() and SamplingFlags::clearFlag() 7226 from within JSC implementation, or by calling setSamplingFlag() and 7227 clearSamplingFlag() from JavaScript. 7228 7229 The flags are sampled with a frequency of 10000Hz, and the highest 7230 set flag in recorded, allowing multiple events to be measured (with 7231 the highest flag number representing the highest priority). 7232 7233 Disabled by default; no performance impact. 7234 7235 * JavaScriptCore.exp: 7236 * bytecode/SamplingTool.cpp: 7237 (JSC::SamplingFlags::sample): 7238 (JSC::SamplingFlags::start): 7239 (JSC::SamplingFlags::stop): 7240 (JSC::SamplingThread::threadStartFunc): 7241 (JSC::SamplingThread::start): 7242 (JSC::SamplingThread::stop): 7243 (JSC::ScopeSampleRecord::sample): 7244 (JSC::SamplingTool::doRun): 7245 (JSC::SamplingTool::sample): 7246 (JSC::SamplingTool::start): 7247 (JSC::SamplingTool::stop): 7248 * bytecode/SamplingTool.h: 7249 (JSC::SamplingFlags::setFlag): 7250 (JSC::SamplingFlags::clearFlag): 7251 (JSC::SamplingTool::SamplingTool): 7252 * jsc.cpp: 7253 (GlobalObject::GlobalObject): 7254 (functionSetSamplingFlag): 7255 (functionClearSamplingFlag): 7256 (runWithScripts): 7257 * wtf/Platform.h: 7258 7259 2009-04-29 Sam Weinig <sam (a] webkit.org> 7260 7261 Another attempt to fix the windows build. 7262 7263 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 7264 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 7265 7266 2009-04-29 Sam Weinig <sam (a] webkit.org> 7267 7268 Try and fix the windows build. 7269 7270 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 7271 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 7272 7273 2009-04-29 Gavin Barraclough <barraclough (a] apple.com> 7274 7275 Reviewed by Oliver "Peg-Leg" Hunt. 7276 7277 Coallesce input checking and reduce futzing with the index position 7278 between alternatives and iterations of the main loop of a regex, 7279 when run in YARR. 7280 7281 Consider the following regex: /foo|bar/ 7282 7283 Prior to this patch, this will be implemented something like this pseudo-code description: 7284 7285 loop: 7286 check_for_available_input(3) // this increments the index by 3, for the first alterantive. 7287 if (available) { test "foo" } 7288 decrement_index(3) 7289 check_for_available_input(3) // this increments the index by 3, for the second alterantive. 7290 if (available) { test "bar" } 7291 decrement_index(3) 7292 check_for_available_input(1) // can we loop again? 7293 if (available) { goto loop } 7294 7295 With these changes it will look more like this: 7296 7297 check_for_available_input(3) // this increments the index by 3, for the first alterantive. 7298 if (!available) { goto fail } 7299 loop: 7300 test "foo" 7301 test "bar" 7302 check_for_available_input(1) // can we loop again? 7303 if (available) { goto loop } 7304 fail: 7305 7306 7307 This gives about a 5% gain on v8-regex, no change on Sunspider. 7308 7309 * yarr/RegexJIT.cpp: 7310 (JSC::Yarr::RegexGenerator::TermGenerationState::linkAlternativeBacktracksTo): 7311 (JSC::Yarr::RegexGenerator::generateDisjunction): 7312 7313 2009-04-29 Oliver Hunt <oliver (a] apple.com> 7314 7315 Reviewed by Gavin Barraclough. 7316 7317 Clean up ArgList to be a trivial type 7318 7319 Separate out old ArgList logic to handle buffering and marking arguments 7320 into a distinct MarkedArgumentBuffer type. ArgList becomes a trivial 7321 struct of a pointer and length. 7322 7323 * API/JSObjectRef.cpp: 7324 (JSObjectMakeFunction): 7325 (JSObjectMakeArray): 7326 (JSObjectMakeDate): 7327 (JSObjectMakeError): 7328 (JSObjectMakeRegExp): 7329 (JSObjectCallAsFunction): 7330 (JSObjectCallAsConstructor): 7331 * JavaScriptCore.exp: 7332 * interpreter/CallFrame.h: 7333 (JSC::ExecState::emptyList): 7334 * runtime/ArgList.cpp: 7335 (JSC::ArgList::getSlice): 7336 (JSC::MarkedArgumentBuffer::markLists): 7337 (JSC::MarkedArgumentBuffer::slowAppend): 7338 * runtime/ArgList.h: 7339 (JSC::MarkedArgumentBuffer::MarkedArgumentBuffer): 7340 (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer): 7341 (JSC::ArgList::ArgList): 7342 (JSC::ArgList::at): 7343 (JSC::ArgList::isEmpty): 7344 (JSC::ArgList::size): 7345 (JSC::ArgList::begin): 7346 (JSC::ArgList::end): 7347 * runtime/Arguments.cpp: 7348 (JSC::Arguments::fillArgList): 7349 * runtime/Arguments.h: 7350 * runtime/ArrayPrototype.cpp: 7351 (JSC::arrayProtoFuncConcat): 7352 (JSC::arrayProtoFuncPush): 7353 (JSC::arrayProtoFuncSort): 7354 (JSC::arrayProtoFuncFilter): 7355 (JSC::arrayProtoFuncMap): 7356 (JSC::arrayProtoFuncEvery): 7357 (JSC::arrayProtoFuncForEach): 7358 (JSC::arrayProtoFuncSome): 7359 (JSC::arrayProtoFuncReduce): 7360 (JSC::arrayProtoFuncReduceRight): 7361 * runtime/Collector.cpp: 7362 (JSC::Heap::collect): 7363 * runtime/Collector.h: 7364 (JSC::Heap::markListSet): 7365 * runtime/CommonIdentifiers.h: 7366 * runtime/Error.cpp: 7367 (JSC::Error::create): 7368 * runtime/FunctionPrototype.cpp: 7369 (JSC::functionProtoFuncApply): 7370 * runtime/JSArray.cpp: 7371 (JSC::JSArray::JSArray): 7372 (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): 7373 (JSC::JSArray::fillArgList): 7374 (JSC::constructArray): 7375 * runtime/JSArray.h: 7376 * runtime/JSGlobalData.cpp: 7377 (JSC::JSGlobalData::JSGlobalData): 7378 * runtime/JSGlobalData.h: 7379 * runtime/JSObject.cpp: 7380 (JSC::JSObject::put): 7381 * runtime/StringConstructor.cpp: 7382 (JSC::stringFromCharCodeSlowCase): 7383 * runtime/StringPrototype.cpp: 7384 (JSC::stringProtoFuncReplace): 7385 (JSC::stringProtoFuncConcat): 7386 (JSC::stringProtoFuncMatch): 7387 7388 2009-04-29 Laszlo Gombos <laszlo.1.gombos (a] nokia.com> 7389 7390 Reviewed by Sam Weinig. 7391 7392 https://bugs.webkit.org/show_bug.cgi?id=25334 7393 7394 Fix Qt build when ENABLE_JIT is explicitly set to 1 7395 to overrule defaults. 7396 7397 * JavaScriptCore.pri: 7398 7399 2009-04-29 Oliver Hunt <oliver (a] apple.com> 7400 7401 Reviewed by Steve Falkenburg. 7402 7403 Crash in profiler due to incorrect assuming displayName would be a string. 7404 7405 Fixed by adding a type guard. 7406 7407 * runtime/InternalFunction.cpp: 7408 (JSC::InternalFunction::displayName): 7409 7410 2009-04-28 Geoffrey Garen <ggaren (a] apple.com> 7411 7412 Rubber stamped by Beth Dakin. 7413 7414 Removed scaffolding supporting dynamically converting between 32bit and 7415 64bit value representations. 7416 7417 * API/JSCallbackConstructor.cpp: 7418 (JSC::constructJSCallback): 7419 * API/JSCallbackFunction.cpp: 7420 (JSC::JSCallbackFunction::call): 7421 * API/JSCallbackObjectFunctions.h: 7422 (JSC::::construct): 7423 (JSC::::call): 7424 * bytecode/CodeBlock.cpp: 7425 (JSC::CodeBlock::dump): 7426 * bytecode/CodeBlock.h: 7427 (JSC::CodeBlock::getConstant): 7428 * bytecompiler/BytecodeGenerator.cpp: 7429 (JSC::BytecodeGenerator::emitEqualityOp): 7430 * interpreter/CallFrame.cpp: 7431 (JSC::CallFrame::thisValue): 7432 * interpreter/Interpreter.cpp: 7433 (JSC::Interpreter::callEval): 7434 (JSC::Interpreter::throwException): 7435 (JSC::Interpreter::createExceptionScope): 7436 (JSC::Interpreter::privateExecute): 7437 (JSC::Interpreter::retrieveArguments): 7438 * interpreter/Register.h: 7439 (JSC::Register::): 7440 (JSC::Register::Register): 7441 (JSC::Register::jsValue): 7442 (JSC::Register::marked): 7443 (JSC::Register::mark): 7444 (JSC::Register::i): 7445 (JSC::Register::activation): 7446 (JSC::Register::arguments): 7447 (JSC::Register::callFrame): 7448 (JSC::Register::codeBlock): 7449 (JSC::Register::function): 7450 (JSC::Register::propertyNameIterator): 7451 (JSC::Register::scopeChain): 7452 (JSC::Register::vPC): 7453 * jit/JITStubs.cpp: 7454 (JSC::JITStubs::cti_op_call_NotJSFunction): 7455 (JSC::JITStubs::cti_op_load_varargs): 7456 (JSC::JITStubs::cti_op_call_eval): 7457 * jsc.cpp: 7458 (functionPrint): 7459 (functionDebug): 7460 (functionRun): 7461 (functionLoad): 7462 * runtime/ArgList.h: 7463 (JSC::ArgList::at): 7464 * runtime/Arguments.cpp: 7465 (JSC::Arguments::copyToRegisters): 7466 (JSC::Arguments::fillArgList): 7467 (JSC::Arguments::getOwnPropertySlot): 7468 * runtime/ArrayConstructor.cpp: 7469 (JSC::constructArrayWithSizeQuirk): 7470 * runtime/ArrayPrototype.cpp: 7471 (JSC::arrayProtoFuncJoin): 7472 (JSC::arrayProtoFuncConcat): 7473 (JSC::arrayProtoFuncPush): 7474 (JSC::arrayProtoFuncSlice): 7475 (JSC::arrayProtoFuncSort): 7476 (JSC::arrayProtoFuncSplice): 7477 (JSC::arrayProtoFuncUnShift): 7478 (JSC::arrayProtoFuncFilter): 7479 (JSC::arrayProtoFuncMap): 7480 (JSC::arrayProtoFuncEvery): 7481 (JSC::arrayProtoFuncForEach): 7482 (JSC::arrayProtoFuncSome): 7483 (JSC::arrayProtoFuncReduce): 7484 (JSC::arrayProtoFuncReduceRight): 7485 (JSC::arrayProtoFuncIndexOf): 7486 (JSC::arrayProtoFuncLastIndexOf): 7487 * runtime/BooleanConstructor.cpp: 7488 (JSC::constructBoolean): 7489 (JSC::callBooleanConstructor): 7490 * runtime/DateConstructor.cpp: 7491 (JSC::constructDate): 7492 (JSC::dateParse): 7493 (JSC::dateUTC): 7494 * runtime/DatePrototype.cpp: 7495 (JSC::formatLocaleDate): 7496 (JSC::fillStructuresUsingTimeArgs): 7497 (JSC::fillStructuresUsingDateArgs): 7498 (JSC::dateProtoFuncSetTime): 7499 (JSC::dateProtoFuncSetYear): 7500 * runtime/ErrorConstructor.cpp: 7501 (JSC::constructError): 7502 * runtime/FunctionConstructor.cpp: 7503 (JSC::constructFunction): 7504 * runtime/FunctionPrototype.cpp: 7505 (JSC::functionProtoFuncApply): 7506 (JSC::functionProtoFuncCall): 7507 * runtime/JSArray.cpp: 7508 (JSC::JSArray::JSArray): 7509 (JSC::constructArray): 7510 * runtime/JSArray.h: 7511 * runtime/JSGlobalObjectFunctions.cpp: 7512 (JSC::encode): 7513 (JSC::decode): 7514 (JSC::globalFuncEval): 7515 (JSC::globalFuncParseInt): 7516 (JSC::globalFuncParseFloat): 7517 (JSC::globalFuncIsNaN): 7518 (JSC::globalFuncIsFinite): 7519 (JSC::globalFuncEscape): 7520 (JSC::globalFuncUnescape): 7521 (JSC::globalFuncJSCPrint): 7522 * runtime/MathObject.cpp: 7523 (JSC::mathProtoFuncAbs): 7524 (JSC::mathProtoFuncACos): 7525 (JSC::mathProtoFuncASin): 7526 (JSC::mathProtoFuncATan): 7527 (JSC::mathProtoFuncATan2): 7528 (JSC::mathProtoFuncCeil): 7529 (JSC::mathProtoFuncCos): 7530 (JSC::mathProtoFuncExp): 7531 (JSC::mathProtoFuncFloor): 7532 (JSC::mathProtoFuncLog): 7533 (JSC::mathProtoFuncMax): 7534 (JSC::mathProtoFuncMin): 7535 (JSC::mathProtoFuncPow): 7536 (JSC::mathProtoFuncRound): 7537 (JSC::mathProtoFuncSin): 7538 (JSC::mathProtoFuncSqrt): 7539 (JSC::mathProtoFuncTan): 7540 * runtime/NativeErrorConstructor.cpp: 7541 (JSC::NativeErrorConstructor::construct): 7542 * runtime/NumberConstructor.cpp: 7543 (JSC::constructWithNumberConstructor): 7544 (JSC::callNumberConstructor): 7545 * runtime/NumberPrototype.cpp: 7546 (JSC::numberProtoFuncToString): 7547 (JSC::numberProtoFuncToFixed): 7548 (JSC::numberProtoFuncToExponential): 7549 (JSC::numberProtoFuncToPrecision): 7550 * runtime/ObjectConstructor.cpp: 7551 (JSC::constructObject): 7552 * runtime/ObjectPrototype.cpp: 7553 (JSC::objectProtoFuncHasOwnProperty): 7554 (JSC::objectProtoFuncIsPrototypeOf): 7555 (JSC::objectProtoFuncDefineGetter): 7556 (JSC::objectProtoFuncDefineSetter): 7557 (JSC::objectProtoFuncLookupGetter): 7558 (JSC::objectProtoFuncLookupSetter): 7559 (JSC::objectProtoFuncPropertyIsEnumerable): 7560 * runtime/PropertySlot.h: 7561 (JSC::PropertySlot::getValue): 7562 * runtime/RegExpConstructor.cpp: 7563 (JSC::constructRegExp): 7564 * runtime/RegExpObject.cpp: 7565 (JSC::RegExpObject::match): 7566 * runtime/RegExpPrototype.cpp: 7567 (JSC::regExpProtoFuncCompile): 7568 * runtime/StringConstructor.cpp: 7569 (JSC::stringFromCharCodeSlowCase): 7570 (JSC::stringFromCharCode): 7571 (JSC::constructWithStringConstructor): 7572 (JSC::callStringConstructor): 7573 * runtime/StringPrototype.cpp: 7574 (JSC::stringProtoFuncReplace): 7575 (JSC::stringProtoFuncCharAt): 7576 (JSC::stringProtoFuncCharCodeAt): 7577 (JSC::stringProtoFuncConcat): 7578 (JSC::stringProtoFuncIndexOf): 7579 (JSC::stringProtoFuncLastIndexOf): 7580 (JSC::stringProtoFuncMatch): 7581 (JSC::stringProtoFuncSearch): 7582 (JSC::stringProtoFuncSlice): 7583 (JSC::stringProtoFuncSplit): 7584 (JSC::stringProtoFuncSubstr): 7585 (JSC::stringProtoFuncSubstring): 7586 (JSC::stringProtoFuncLocaleCompare): 7587 (JSC::stringProtoFuncFontcolor): 7588 (JSC::stringProtoFuncFontsize): 7589 (JSC::stringProtoFuncAnchor): 7590 (JSC::stringProtoFuncLink): 7591 7592 2009-04-28 David Kilzer <ddkilzer (a] apple.com> 7593 7594 A little more hardening for UString 7595 7596 Reviewed by Maciej Stachowiak. 7597 7598 Revised fix for <rdar://problem/5861045> in r42644. 7599 7600 * runtime/UString.cpp: 7601 (JSC::newCapacityWithOverflowCheck): Added. 7602 (JSC::concatenate): Used newCapacityWithOverflowCheck(). 7603 (JSC::UString::append): Ditto. 7604 7605 2009-04-28 Oliver Hunt <oliver (a] apple.com> 7606 7607 Reviewed by Gavin Barraclough. 7608 7609 Bring back r42969, this time with correct codegen 7610 7611 Add logic to the codegen for right shift to avoid jumping to a helper function 7612 when shifting a small floating point value. 7613 7614 * jit/JITArithmetic.cpp: 7615 (isSSE2Present): 7616 (JSC::JIT::compileFastArith_op_rshift): 7617 (JSC::JIT::compileFastArithSlow_op_rshift): 7618 7619 2009-04-28 Kevin Ollivier <kevino (a] theolliviers.com> 7620 7621 wxMSW build fix. Switch JSCore build back to static. 7622 7623 * API/JSBase.h: 7624 * config.h: 7625 * jscore.bkl: 7626 7627 2009-04-28 Oliver Hunt <oliver (a] apple.com> 7628 7629 Reviewed by NOBODY (Build fix). 7630 7631 Roll out r42969, due to hangs in build bot. 7632 7633 * jit/JITArithmetic.cpp: 7634 (JSC::JIT::compileFastArith_op_rshift): 7635 (JSC::JIT::compileFastArithSlow_op_rshift): 7636 (JSC::isSSE2Present): 7637 7638 2009-04-28 Xan Lopez <xlopez (a] igalia.com> 7639 7640 Unreviewed: fix distcheck build, add (even more) missing files to list. 7641 7642 * GNUmakefile.am: 7643 7644 2009-04-28 Oliver Hunt <oliver (a] apple.com> 7645 7646 Reviewed by Geoff Garen. 7647 7648 Improve performance of string indexing 7649 7650 Add a cti_get_by_val_string function to specialise indexing into a string object. 7651 This gives us a slight performance win on a number of string tests. 7652 7653 * jit/JITStubs.cpp: 7654 (JSC::JITStubs::cti_op_get_by_val): 7655 (JSC::JITStubs::cti_op_get_by_val_string): 7656 * jit/JITStubs.h: 7657 7658 2009-04-28 Oliver Hunt <oliver (a] apple.com> 7659 7660 Reviewed by Geoff Garen. 7661 7662 Improve performance of right shifts of large or otherwise floating point values. 7663 7664 Add logic to the codegen for right shift to avoid jumping to a helper function 7665 when shifting a small floating point value. 7666 7667 * jit/JITArithmetic.cpp: 7668 (isSSE2Present): Moved to the head of file. 7669 (JSC::JIT::compileFastArith_op_rshift): 7670 (JSC::JIT::compileFastArithSlow_op_rshift): 7671 7672 2009-04-28 Xan Lopez <xlopez (a] igalia.com> 7673 7674 Unreviewed: fix distcheck build, add (more) missing files to list. 7675 7676 * GNUmakefile.am: 7677 7678 2009-04-28 Xan Lopez <xlopez (a] igalia.com> 7679 7680 Unreviewed: fix distcheck build, add missing header to file list. 7681 7682 * GNUmakefile.am: 7683 7684 2009-04-28 Gavin Barraclough <barraclough (a] apple.com> 7685 7686 Rubber stamped by Maciej "Henry Morgan" Stachowiak. 7687 7688 Enable YARR. 7689 (Again.) 7690 7691 * wtf/Platform.h: 7692 7693 2009-04-27 Gavin Barraclough <barraclough (a] apple.com> 7694 7695 Reviewed by Maciej Stachowiak. 7696 7697 Tweak a loop condition to keep GCC happy, 7698 some GCCs seem to be having issues with this. :-/ 7699 7700 * bytecompiler/BytecodeGenerator.cpp: 7701 (JSC::BytecodeGenerator::breakTarget): 7702 * wtf/Platform.h: 7703 7704 2009-04-27 Adam Roben <aroben (a] apple.com> 7705 7706 Windows Debug build fix 7707 7708 Not sure why the buildbots weren't affected by this problem. 7709 7710 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Let VS 7711 re-order the file list, and added JavaScriptCore[_debug].def to the 7712 project. This was not necessary for the fix, but made making the fix 7713 easier. 7714 7715 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 7716 Removed a function that no longer exists. 7717 7718 2009-04-26 Gavin Barraclough <barraclough (a] apple.com> 7719 7720 Reviewed by Weinig Sam. 7721 7722 Fix for https://bugs.webkit.org/show_bug.cgi?id=25416 7723 "Cached prototype accesses unsafely hoist property storage load above structure checks." 7724 7725 Do not hoist the load of the pointer to the property storage array. 7726 7727 No performance impact. 7728 7729 * jit/JITPropertyAccess.cpp: 7730 (JSC::JIT::privateCompileGetByIdProto): 7731 (JSC::JIT::privateCompileGetByIdProtoList): 7732 7733 2009-04-26 Gavin Barraclough <barraclough (a] apple.com> 7734 7735 Reviewed by Geoffrey "Gaffe or energy?" Garen. 7736 7737 Randomize address requested by ExecutableAllocatorFixedVMPool. 7738 7739 * jit/ExecutableAllocatorFixedVMPool.cpp: 7740 (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): 7741 7742 2009-04-26 Sam Weinig <sam (a] webkit.org> 7743 7744 Reviewed by Eric Seidel. 7745 7746 Remove scons-based build system. 7747 7748 * JavaScriptCore.scons: Removed. 7749 7750 2009-04-25 Oliver Hunt <oliver (a] apple.com> 7751 7752 Reviewed by NOBODY (Buildfix). 7753 7754 Make HAVE_MADV_FREE darwin only for now 7755 7756 * wtf/Platform.h: 7757 7758 2009-04-25 Jan Michael Alonzo <jmalonzo (a] webkit.org> 7759 7760 Reviewed by Oliver Hunt. 7761 7762 Gtk build fix - check if we have MADV_FREE before using it. 7763 7764 * interpreter/RegisterFile.cpp: 7765 (JSC::RegisterFile::releaseExcessCapacity): 7766 * wtf/Platform.h: 7767 7768 2009-04-24 Kevin Ollivier <kevino (a] theolliviers.com> 7769 7770 wx build fix. Switching JSCore from a static lib to a dynamic lib 7771 to match the Apple build and fix symbol exports. 7772 7773 * jscore.bkl: 7774 7775 2009-04-24 Laszlo Gombos <laszlo.1.gombos (a] nokia.com> 7776 7777 Rubber-stamped by Mark Rowe. 7778 7779 https://bugs.webkit.org/show_bug.cgi?id=25337 7780 Move ThreadingQt.cpp under the qt directory. 7781 7782 * JavaScriptCore.pri: 7783 * wtf/ThreadingQt.cpp: Removed. 7784 * wtf/qt/ThreadingQt.cpp: Copied from JavaScriptCore/wtf/ThreadingQt.cpp. 7785 7786 2009-04-24 Laszlo Gombos <laszlo.1.gombos (a] nokia.com> 7787 7788 Rubber-stamped by Mark Rowe. 7789 7790 https://bugs.webkit.org/show_bug.cgi?id=25338 7791 Move ThreadingGtk.cpp under the gtk directory. 7792 7793 * GNUmakefile.am: 7794 * wtf/ThreadingGtk.cpp: Removed. 7795 * wtf/gtk/ThreadingGtk.cpp: Copied from JavaScriptCore/wtf/ThreadingGtk.cpp. 7796 7797 2009-04-24 Gavin Barraclough <barraclough (a] apple.com> 7798 7799 Reviewed by Sam "Wesley" Weinig. 7800 7801 Improve performance to YARR interpreter. 7802 (From about 3x slower than PCRE on regex-dna to about 30% slower). 7803 7804 * yarr/RegexCompiler.cpp: 7805 (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): 7806 * yarr/RegexInterpreter.cpp: 7807 (JSC::Yarr::Interpreter::checkCharacter): 7808 (JSC::Yarr::Interpreter::checkCasedCharacter): 7809 (JSC::Yarr::Interpreter::backtrackPatternCharacter): 7810 (JSC::Yarr::Interpreter::backtrackPatternCasedCharacter): 7811 (JSC::Yarr::Interpreter::matchParentheticalAssertionBegin): 7812 (JSC::Yarr::Interpreter::matchParentheticalAssertionEnd): 7813 (JSC::Yarr::Interpreter::backtrackParentheticalAssertionBegin): 7814 (JSC::Yarr::Interpreter::backtrackParentheticalAssertionEnd): 7815 (JSC::Yarr::Interpreter::matchDisjunction): 7816 (JSC::Yarr::Interpreter::interpret): 7817 (JSC::Yarr::ByteCompiler::atomPatternCharacter): 7818 (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin): 7819 (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin): 7820 (JSC::Yarr::ByteCompiler::closeAlternative): 7821 (JSC::Yarr::ByteCompiler::closeBodyAlternative): 7822 (JSC::Yarr::ByteCompiler::atomParenthesesEnd): 7823 (JSC::Yarr::ByteCompiler::regexBegin): 7824 (JSC::Yarr::ByteCompiler::regexEnd): 7825 (JSC::Yarr::ByteCompiler::alterantiveBodyDisjunction): 7826 (JSC::Yarr::ByteCompiler::alterantiveDisjunction): 7827 (JSC::Yarr::ByteCompiler::emitDisjunction): 7828 * yarr/RegexInterpreter.h: 7829 (JSC::Yarr::ByteTerm::): 7830 (JSC::Yarr::ByteTerm::ByteTerm): 7831 (JSC::Yarr::ByteTerm::BodyAlternativeBegin): 7832 (JSC::Yarr::ByteTerm::BodyAlternativeDisjunction): 7833 (JSC::Yarr::ByteTerm::BodyAlternativeEnd): 7834 (JSC::Yarr::ByteTerm::AlternativeBegin): 7835 (JSC::Yarr::ByteTerm::AlternativeDisjunction): 7836 (JSC::Yarr::ByteTerm::AlternativeEnd): 7837 (JSC::Yarr::ByteTerm::SubpatternBegin): 7838 (JSC::Yarr::ByteTerm::SubpatternEnd): 7839 * yarr/RegexJIT.cpp: 7840 (JSC::Yarr::RegexGenerator::generateParentheticalAssertion): 7841 * yarr/RegexPattern.h: 7842 7843 2009-04-24 Rob Raguet-Schofield <ragfield (a] gmail.com> 7844 7845 Rubber-stamped by Mark Rowe. 7846 7847 * wtf/CurrentTime.h: Fix a typo in a comment. 7848 7849 2009-04-24 Oliver Hunt <oliver (a] apple.com> 7850 7851 Reviewed by NOBODY (Build fix). 7852 7853 Add reinterpret_cast 7854 7855 * interpreter/RegisterFile.cpp: 7856 (JSC::RegisterFile::releaseExcessCapacity): 7857 7858 2009-04-23 Oliver Hunt <oliver (a] apple.com> 7859 7860 Reviewed by Geoff Garen. 7861 7862 <rdar://problem/6050421> JavaScript register file should remap to release physical pages accumulated during deep recursion 7863 7864 We now track the maximum extent of the RegisterFile, and when we reach the final 7865 return from JS (so the stack portion of the registerfile becomes empty) we see 7866 if that extent is greater than maxExcessCapacity. If it is we use madvise or 7867 VirtualFree to release the physical pages that were backing the excess. 7868 7869 * interpreter/RegisterFile.cpp: 7870 (JSC::RegisterFile::releaseExcessCapacity): 7871 * interpreter/RegisterFile.h: 7872 (JSC::RegisterFile::RegisterFile): 7873 (JSC::RegisterFile::shrink): 7874 (JSC::RegisterFile::grow): 7875 7876 2009-04-23 Mark Rowe <mrowe (a] apple.com> 7877 7878 With great sadness and a heavy heart I switch us back from YARR to WREC in 7879 order to restore greenness to the world once more. 7880 7881 * wtf/Platform.h: 7882 7883 2009-04-23 Mark Rowe <mrowe (a] apple.com> 7884 7885 More Windows build fixage. 7886 7887 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: 7888 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: 7889 7890 2009-04-23 Mark Rowe <mrowe (a] apple.com> 7891 7892 Attempt to fix the Windows build. 7893 7894 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Remove a symbol that no longer exists. 7895 7896 2009-04-23 Francisco Tolmasky <francisco (a] 280north.com> 7897 7898 BUG 24604: WebKit profiler reports incorrect total times 7899 <https://bugs.webkit.org/show_bug.cgi?id=24604> 7900 7901 Reviewed by Timothy Hatcher and Kevin McCullough. 7902 7903 * JavaScriptCore.exp: 7904 * JavaScriptCore.xcodeproj/project.pbxproj: 7905 * profiler/CallIdentifier.h: 7906 (JSC::CallIdentifier::Hash::hash): 7907 (JSC::CallIdentifier::Hash::equal): 7908 (JSC::CallIdentifier::hash): 7909 (WTF::): 7910 * profiler/HeavyProfile.cpp: Removed. 7911 * profiler/HeavyProfile.h: Removed. 7912 * profiler/Profile.cpp: No more need for TreeProfile/HeavyProfile 7913 (JSC::Profile::create): 7914 * profiler/Profile.h: 7915 * profiler/ProfileNode.cpp: 7916 * profiler/ProfileNode.h: 7917 * profiler/TreeProfile.cpp: Removed. 7918 * profiler/TreeProfile.h: Removed. 7919 7920 2009-04-23 Gavin Barraclough <barraclough (a] apple.com> 7921 7922 Not Reviewed. 7923 7924 Speculative Windows build fix II. 7925 7926 * yarr/RegexInterpreter.cpp: 7927 7928 2009-04-23 Gavin Barraclough <barraclough (a] apple.com> 7929 7930 Not Reviewed. 7931 7932 Speculative Windows build fix. 7933 7934 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 7935 * runtime/RegExp.cpp: 7936 7937 2009-04-23 Gavin Barraclough <barraclough (a] apple.com> 7938 7939 Rubber stamped by salty sea dogs Sam & Geoff. 7940 7941 Enable YARR_JIT by default (where supported), replacing WREC. 7942 7943 * wtf/Platform.h: 7944 7945 2009-04-23 Gavin Barraclough <barraclough (a] apple.com> 7946 7947 Reviewed by Geoff "Dread Pirate Roberts" Garen. 7948 7949 Various small fixes to YARR JIT, in preparation for enabling it by default. 7950 7951 * Correctly index into the callframe when storing restart addresses for 7952 nested alternatives. 7953 * Allow backtracking back into matched alternatives of parentheses. 7954 * Fix callframe offset calculation for parenthetical assertions. 7955 * When a set of parenthese are quantified with a fixed and variable portion, 7956 and the variable portion is quantified once, this should not reset the 7957 pattern match on failure to match (the last match from the firxed portion 7958 should be preserved). 7959 * Up the pattern size limit to match PCRE's new limit. 7960 * Unlclosed parentheses should be reported with the message "missing )". 7961 7962 * wtf/Platform.h: 7963 * yarr/RegexCompiler.cpp: 7964 (JSC::Yarr::RegexPatternConstructor::quantifyAtom): 7965 (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): 7966 * yarr/RegexInterpreter.cpp: 7967 (JSC::Yarr::Interpreter::matchParentheses): 7968 (JSC::Yarr::Interpreter::backtrackParentheses): 7969 (JSC::Yarr::ByteCompiler::emitDisjunction): 7970 * yarr/RegexJIT.cpp: 7971 (JSC::Yarr::RegexGenerator::loadFromFrameAndJump): 7972 (JSC::Yarr::RegexGenerator::generateParenthesesDisjunction): 7973 (JSC::Yarr::RegexGenerator::generateParentheticalAssertion): 7974 (JSC::Yarr::RegexGenerator::generateTerm): 7975 (JSC::Yarr::executeRegex): 7976 * yarr/RegexParser.h: 7977 (JSC::Yarr::Parser::): 7978 (JSC::Yarr::Parser::parseTokens): 7979 (JSC::Yarr::Parser::parse): 7980 * yarr/RegexPattern.h: 7981 (JSC::Yarr::PatternTerm::): 7982 (JSC::Yarr::PatternTerm::PatternTerm): 7983 7984 2009-04-22 Mark Rowe <mrowe (a] apple.com> 7985 7986 Rubber-stamped by Gavin Barraclough. 7987 7988 Add the m_ prefix on FixedVMPoolAllocator's member variables, and fix typos in a few comments. 7989 7990 * jit/ExecutableAllocatorFixedVMPool.cpp: 7991 (JSC::FixedVMPoolAllocator::addToFreeList): 7992 (JSC::FixedVMPoolAllocator::coalesceFreeSpace): 7993 (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): 7994 (JSC::FixedVMPoolAllocator::alloc): 7995 (JSC::FixedVMPoolAllocator::free): 7996 (JSC::FixedVMPoolAllocator::isWithinVMPool): 7997 7998 2009-04-22 Mark Rowe <mrowe (a] apple.com> 7999 8000 Rubber-stamped by Gavin Barraclough. 8001 8002 Add some assertions to FixedVMPoolAllocator to guard against cases where we 8003 attempt to free memory that didn't originate from the pool, or we attempt to 8004 hand out a bogus address from alloc. 8005 8006 * jit/ExecutableAllocatorFixedVMPool.cpp: 8007 (JSC::FixedVMPoolAllocator::release): 8008 (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): 8009 (JSC::FixedVMPoolAllocator::alloc): 8010 (JSC::FixedVMPoolAllocator::free): 8011 (JSC::FixedVMPoolAllocator::isWithinVMPool): 8012 8013 2009-04-22 Gavin Barraclough <barraclough (a] apple.com> 8014 8015 Rubber stamped by Sam "Blackbeard" Weinig. 8016 8017 Although pirates do spell the word 'generate' as 'genertate', 8018 webkit developers do not. Fixertate. 8019 8020 * yarr/RegexJIT.cpp: 8021 (JSC::Yarr::RegexGenerator::generateAssertionBOL): 8022 (JSC::Yarr::RegexGenerator::generateAssertionEOL): 8023 (JSC::Yarr::RegexGenerator::generateAssertionWordBoundary): 8024 (JSC::Yarr::RegexGenerator::generatePatternCharacterSingle): 8025 (JSC::Yarr::RegexGenerator::generatePatternCharacterPair): 8026 (JSC::Yarr::RegexGenerator::generatePatternCharacterFixed): 8027 (JSC::Yarr::RegexGenerator::generatePatternCharacterGreedy): 8028 (JSC::Yarr::RegexGenerator::generatePatternCharacterNonGreedy): 8029 (JSC::Yarr::RegexGenerator::generateCharacterClassSingle): 8030 (JSC::Yarr::RegexGenerator::generateCharacterClassFixed): 8031 (JSC::Yarr::RegexGenerator::generateCharacterClassGreedy): 8032 (JSC::Yarr::RegexGenerator::generateCharacterClassNonGreedy): 8033 (JSC::Yarr::RegexGenerator::generateTerm): 8034 8035 2009-04-22 Gavin Barraclough <barraclough (a] apple.com> 8036 8037 Reviewed by Sam "Blackbeard" Weinig. 8038 8039 Improvements to YARR JIT. This patch expands support in three key areas: 8040 * Add (temporary) support for falling back to PCRE for expressions not supported. 8041 * Add support for x86_64 and Windows. 8042 * Add support for singly quantified parentheses (? and ??), alternatives within 8043 parentheses, and parenthetical assertions. 8044 8045 * runtime/RegExp.cpp: 8046 (JSC::RegExp::match): 8047 * yarr/RegexJIT.cpp: 8048 (JSC::Yarr::RegexGenerator::storeToFrame): 8049 (JSC::Yarr::RegexGenerator::storeToFrameWithPatch): 8050 (JSC::Yarr::RegexGenerator::loadFromFrameAndJump): 8051 (JSC::Yarr::RegexGenerator::AlternativeBacktrackRecord::AlternativeBacktrackRecord): 8052 (JSC::Yarr::RegexGenerator::TermGenerationState::resetAlternative): 8053 (JSC::Yarr::RegexGenerator::TermGenerationState::resetTerm): 8054 (JSC::Yarr::RegexGenerator::TermGenerationState::jumpToBacktrack): 8055 (JSC::Yarr::RegexGenerator::TermGenerationState::plantJumpToBacktrackIfExists): 8056 (JSC::Yarr::RegexGenerator::TermGenerationState::addBacktrackJump): 8057 (JSC::Yarr::RegexGenerator::TermGenerationState::linkAlternativeBacktracks): 8058 (JSC::Yarr::RegexGenerator::TermGenerationState::propagateBacktrackingFrom): 8059 (JSC::Yarr::RegexGenerator::genertateAssertionBOL): 8060 (JSC::Yarr::RegexGenerator::genertateAssertionEOL): 8061 (JSC::Yarr::RegexGenerator::matchAssertionWordchar): 8062 (JSC::Yarr::RegexGenerator::genertateAssertionWordBoundary): 8063 (JSC::Yarr::RegexGenerator::genertatePatternCharacterSingle): 8064 (JSC::Yarr::RegexGenerator::genertatePatternCharacterPair): 8065 (JSC::Yarr::RegexGenerator::genertatePatternCharacterFixed): 8066 (JSC::Yarr::RegexGenerator::genertatePatternCharacterGreedy): 8067 (JSC::Yarr::RegexGenerator::genertatePatternCharacterNonGreedy): 8068 (JSC::Yarr::RegexGenerator::genertateCharacterClassSingle): 8069 (JSC::Yarr::RegexGenerator::genertateCharacterClassFixed): 8070 (JSC::Yarr::RegexGenerator::genertateCharacterClassGreedy): 8071 (JSC::Yarr::RegexGenerator::genertateCharacterClassNonGreedy): 8072 (JSC::Yarr::RegexGenerator::generateParenthesesDisjunction): 8073 (JSC::Yarr::RegexGenerator::generateParenthesesSingle): 8074 (JSC::Yarr::RegexGenerator::generateParentheticalAssertion): 8075 (JSC::Yarr::RegexGenerator::generateTerm): 8076 (JSC::Yarr::RegexGenerator::generateDisjunction): 8077 (JSC::Yarr::RegexGenerator::generateEnter): 8078 (JSC::Yarr::RegexGenerator::generateReturn): 8079 (JSC::Yarr::RegexGenerator::RegexGenerator): 8080 (JSC::Yarr::RegexGenerator::generate): 8081 (JSC::Yarr::RegexGenerator::compile): 8082 (JSC::Yarr::RegexGenerator::generationFailed): 8083 (JSC::Yarr::jitCompileRegex): 8084 (JSC::Yarr::executeRegex): 8085 * yarr/RegexJIT.h: 8086 (JSC::Yarr::RegexCodeBlock::RegexCodeBlock): 8087 (JSC::Yarr::RegexCodeBlock::~RegexCodeBlock): 8088 8089 2009-04-22 Sam Weinig <sam (a] webkit.org> 8090 8091 Rubber-stamped by Darin Adler. 8092 8093 Fix for <rdar://problem/6816957> 8094 Turn off Geolocation by default 8095 8096 * Configurations/FeatureDefines.xcconfig: 8097 8098 2009-04-22 Oliver Hunt <oliver (a] apple.com> 8099 8100 Reviewed by NOBODY (Buildfix). 8101 8102 * interpreter/CachedCall.h: 8103 8104 2009-04-21 Oliver Hunt <oliver (a] apple.com> 8105 8106 Reviewed by NOBODY (Build fix). 8107 8108 * runtime/StringPrototype.cpp: 8109 8110 2009-04-21 Oliver Hunt <oliver (a] apple.com> 8111 8112 Reviewed by Maciej Stachowiak. 8113 8114 Improve String.replace performance slightly 8115 8116 Apply our vm reentry caching logic to String.replace with global 8117 regexes. 8118 8119 * runtime/StringPrototype.cpp: 8120 (JSC::stringProtoFuncReplace): 8121 8122 2009-04-21 Geoffrey Garen <ggaren (a] apple.com> 8123 8124 Reviewed by Cameron Zwarich and Oliver Hunt. 8125 8126 Re-Fixed <rdar://problem/6406045> REGRESSION: Stack overflow on PowerPC on 8127 fast/workers/use-machine-stack.html (22531) 8128 8129 SunSpider reports no change. 8130 8131 Use a larger recursion limit on the main thread (because we can, and 8132 there's some evidence that it may improve compatibility), and a smaller 8133 recursion limit on secondary threads (because they tend to have smaller 8134 stacks). 8135 8136 * interpreter/Interpreter.cpp: 8137 (JSC::Interpreter::execute): 8138 (JSC::Interpreter::prepareForRepeatCall): 8139 * interpreter/Interpreter.h: 8140 (JSC::): Ditto. I wrote the recursion test slightly funny, so that the 8141 common case remains a simple compare to constant. 8142 8143 * runtime/ArrayPrototype.cpp: 8144 (JSC::arrayProtoFuncToString): 8145 (JSC::arrayProtoFuncToLocaleString): 8146 (JSC::arrayProtoFuncJoin): Conservatively, set the array recursion limits 8147 to the lower, secondary thread limit. We can do something fancier if 8148 compatibility moves us, but this seems sufficient for now. 8149 8150 2009-04-21 Geoffrey Garen <ggaren (a] apple.com> 8151 8152 Rubber-stamped by Adam Roben. 8153 8154 Disabled one more Mozilla JS test because it fails intermittently on Windows. 8155 (See https://bugs.webkit.org/show_bug.cgi?id=25160.) 8156 8157 * tests/mozilla/expected.html: 8158 8159 2009-04-21 Adam Roben <aroben (a] apple.com> 8160 8161 Rename JavaScriptCore_debug.dll to JavaScriptCore.dll in the Debug 8162 configuration 8163 8164 This matches the naming scheme for WebKit.dll, and will be necessary 8165 once Safari links against JavaScriptCore.dll. This change also causes 8166 run-safari not to fail (because the launcher printed by FindSafari was 8167 always looking for JavaScriptCore.dll, never 8168 JavaScriptCore_debug.dll). 8169 8170 Part of Bug 25305: can't run safari or drt on windows 8171 <https://bugs.webkit.org/show_bug.cgi?id=25305> 8172 8173 Reviewed by Steve Falkenburg and Sam Weinig. 8174 8175 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 8176 * JavaScriptCore.vcproj/jsc/jsc.vcproj: 8177 * JavaScriptCore.vcproj/testapi/testapi.vcproj: 8178 Use $(WebKitDLLConfigSuffix) for naming JavaScriptCore.{dll,lib}. 8179 8180 2009-04-21 Adam Roben <aroben (a] apple.com> 8181 8182 Fix JavaScriptCore build on VC++ Express 8183 8184 Reviewed by Steve Falkenburg and Sam Weinig. 8185 8186 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Link 8187 explicitly against gdi32.lib and oleaut32.lib. 8188 8189 2009-04-21 Geoffrey Garen <ggaren (a] apple.com> 8190 8191 Reviewed by Mark Rowe. 8192 8193 Tiger crash fix: Put VM tags in their own header file, and fixed up the 8194 #ifdefs so they're not used on Tiger. 8195 8196 * JavaScriptCore.xcodeproj/project.pbxproj: 8197 * interpreter/RegisterFile.h: 8198 (JSC::RegisterFile::RegisterFile): 8199 * jit/ExecutableAllocatorFixedVMPool.cpp: 8200 (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): 8201 * jit/ExecutableAllocatorPosix.cpp: 8202 (JSC::ExecutablePool::systemAlloc): 8203 * runtime/Collector.cpp: 8204 (JSC::allocateBlock): 8205 * wtf/VMTags.h: Added. 8206 8207 2009-04-20 Steve Falkenburg <sfalken (a] apple.com> 8208 8209 More Windows build fixes. 8210 8211 * JavaScriptCore.vcproj/JavaScriptCore.make: Copy DLLs, PDBs. 8212 * JavaScriptCore.vcproj/JavaScriptCore.resources: Added. 8213 * JavaScriptCore.vcproj/JavaScriptCore.resources/Info.plist: Added. 8214 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc: Added. 8215 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add version stamping, resource copying. 8216 8217 2009-04-20 Steve Falkenburg <sfalken (a] apple.com> 8218 8219 Separate JavaScriptCore.dll from WebKit.dll. 8220 Slight performance improvement or no change on benchmarks. 8221 8222 Allows us to break a circular dependency between CFNetwork and WebKit on Windows, 8223 and simplifies standalone JavaScriptCore builds. 8224 8225 Reviewed by Oliver Hunt. 8226 8227 * API/JSBase.h: Export symbols with JS_EXPORT when using MSVC. 8228 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 8229 * JavaScriptCore.vcproj/WTF/WTF.vcproj: Build JavaScriptCore as a DLL instead of a static library. 8230 * config.h: Specify __declspec(dllexport/dllimport) appropriately when exporting data. 8231 * runtime/InternalFunction.h: Specify JS_EXPORTDATA on exported data. 8232 * runtime/JSArray.h: Specify JS_EXPORTDATA on exported data. 8233 * runtime/JSFunction.h: Specify JS_EXPORTDATA on exported data. 8234 * runtime/StringObject.h: Specify JS_EXPORTDATA on exported data. 8235 * runtime/UString.h: Specify JS_EXPORTDATA on exported data. 8236 8237 2009-04-20 Sam Weinig <sam (a] webkit.org> 8238 8239 Reviewed by Kevin McCullough. 8240 8241 Always tag mmaped memory on darwin and clean up #defines 8242 now that they are a little bigger. 8243 8244 * interpreter/RegisterFile.h: 8245 (JSC::RegisterFile::RegisterFile): 8246 * jit/ExecutableAllocatorFixedVMPool.cpp: 8247 (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): 8248 * jit/ExecutableAllocatorPosix.cpp: 8249 (JSC::ExecutablePool::systemAlloc): 8250 * runtime/Collector.cpp: 8251 (JSC::allocateBlock): 8252 8253 2009-04-20 Sam Weinig <sam (a] webkit.org> 8254 8255 Rubber-stamped by Tim Hatcher. 8256 8257 Add licenses for xcconfig files. 8258 8259 * Configurations/Base.xcconfig: 8260 * Configurations/DebugRelease.xcconfig: 8261 * Configurations/FeatureDefines.xcconfig: 8262 * Configurations/JavaScriptCore.xcconfig: 8263 * Configurations/Version.xcconfig: 8264 8265 2009-04-20 Ariya Hidayat <ariya.hidayat (a] nokia.com> 8266 8267 Build fix for Qt port (after r42646). Not reviewed. 8268 8269 * wtf/unicode/qt4/UnicodeQt4.h: Added U16_PREV. 8270 8271 2009-04-19 Sam Weinig <sam (a] webkit.org> 8272 8273 Reviewed by Darin Adler. 8274 8275 Better fix for JSStringCreateWithCFString hardening. 8276 8277 * API/JSStringRefCF.cpp: 8278 (JSStringCreateWithCFString): 8279 8280 2009-04-19 Sam Weinig <sam (a] webkit.org> 8281 8282 Reviewed by Dan Bernstein. 8283 8284 Fix for <rdar://problem/5860954> 8285 Harden JSStringCreateWithCFString against malformed CFStringRefs. 8286 8287 * API/JSStringRefCF.cpp: 8288 (JSStringCreateWithCFString): 8289 8290 2009-04-19 David Kilzer <ddkilzer (a] apple.com> 8291 8292 Make FEATURE_DEFINES completely dynamic 8293 8294 Reviewed by Darin Adler. 8295 8296 Make FEATURE_DEFINES depend on individual ENABLE_FEATURE_NAME 8297 variables for each feature, making it possible to remove all 8298 knowledge of FEATURE_DEFINES from build-webkit. 8299 8300 * Configurations/FeatureDefines.xcconfig: Extract a variable 8301 from FEATURE_DEFINES for each feature setting. 8302 8303 2009-04-18 Sam Weinig <sam (a] webkit.org> 8304 8305 Reviewed by Dan Bernstein. 8306 8307 Fix typo. s/VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE/VM_MEMORY_JAVASCRIPT_CORE/ 8308 8309 * runtime/Collector.cpp: 8310 (JSC::allocateBlock): Fix bozo typo. 8311 8312 2009-04-18 Sam Weinig <sam (a] webkit.org> 8313 8314 Reviewed by Anders Carlsson. 8315 8316 Fix for <rdar://problem/6801555> Tag JavaScript memory on SnowLeopard 8317 8318 * interpreter/RegisterFile.h: 8319 (JSC::RegisterFile::RegisterFile): 8320 * jit/ExecutableAllocatorFixedVMPool.cpp: 8321 (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): 8322 * jit/ExecutableAllocatorPosix.cpp: 8323 (JSC::ExecutablePool::systemAlloc): 8324 * runtime/Collector.cpp: 8325 (JSC::allocateBlock): 8326 8327 2009-04-18 Drew Wilson <amw (a] apple.com> 8328 8329 <rdar://problem/6781407> VisiblePosition.characterAfter should return UChar32 8330 8331 Reviewed by Dan Bernstein. 8332 8333 * wtf/unicode/icu/UnicodeIcu.h: 8334 (WTF::Unicode::hasLineBreakingPropertyComplexContextOrIdeographic): Added. 8335 8336 2009-04-18 Sam Weinig <sam (a] webkit.org> 8337 8338 Reviewed by Mark Rowe. 8339 8340 Fix for <rdar://problem/5861045> 8341 A little bit of hardening for UString. 8342 8343 * runtime/UString.cpp: 8344 (JSC::concatenate): 8345 (JSC::UString::append): 8346 8347 2009-04-18 Sam Weinig <sam (a] webkit.org> 8348 8349 Reviewed by Mark Rowe and Dan Bernstein. 8350 8351 Fix for <rdar://problem/5861188> 8352 A little bit of hardening for Vector. 8353 8354 * wtf/Vector.h: 8355 (WTF::Vector<T, inlineCapacity>::append): 8356 (WTF::Vector<T, inlineCapacity>::insert): 8357 8358 2009-04-17 Gavin Barraclough <barraclough (a] apple.com> 8359 8360 Reviewed by Geoff Garen. 8361 8362 On x86_64, make all JIT-code allocations from a new heap, managed 8363 by FixedVMPoolAllocator. This class allocates a single large (2Gb) 8364 pool of virtual memory from which all further allocations take place. 8365 Since all JIT code is allocated from this pool, we can continue to 8366 safely assume (as is already asserted) that it will always be possible 8367 to link any JIT-code to JIT-code jumps and calls. 8368 8369 * JavaScriptCore.xcodeproj/project.pbxproj: 8370 Add new file. 8371 * jit/ExecutableAllocatorFixedVMPool.cpp: Added. 8372 (JSC::FreeListEntry::FreeListEntry): 8373 (JSC::AVLTreeAbstractorForFreeList::get_less): 8374 (JSC::AVLTreeAbstractorForFreeList::set_less): 8375 (JSC::AVLTreeAbstractorForFreeList::get_greater): 8376 (JSC::AVLTreeAbstractorForFreeList::set_greater): 8377 (JSC::AVLTreeAbstractorForFreeList::get_balance_factor): 8378 (JSC::AVLTreeAbstractorForFreeList::set_balance_factor): 8379 (JSC::AVLTreeAbstractorForFreeList::null): 8380 (JSC::AVLTreeAbstractorForFreeList::compare_key_key): 8381 (JSC::AVLTreeAbstractorForFreeList::compare_key_node): 8382 (JSC::AVLTreeAbstractorForFreeList::compare_node_node): 8383 (JSC::sortFreeListEntriesByPointer): 8384 (JSC::sortCommonSizedAllocations): 8385 (JSC::FixedVMPoolAllocator::release): 8386 (JSC::FixedVMPoolAllocator::reuse): 8387 (JSC::FixedVMPoolAllocator::addToFreeList): 8388 (JSC::FixedVMPoolAllocator::coalesceFreeSpace): 8389 (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): 8390 (JSC::FixedVMPoolAllocator::alloc): 8391 (JSC::FixedVMPoolAllocator::free): 8392 (JSC::ExecutableAllocator::intializePageSize): 8393 (JSC::ExecutablePool::systemAlloc): 8394 (JSC::ExecutablePool::systemRelease): 8395 The new 2Gb heap class! 8396 * jit/ExecutableAllocatorPosix.cpp: 8397 Disable use of this implementation on x86_64. 8398 * wtf/AVLTree.h: 8399 Add missing variable initialization. 8400 (WTF::::remove): 8401 8402 2009-04-17 Oliver Hunt <oliver (a] apple.com> 8403 8404 Reviewed by Darin Adler. 8405 8406 Fix bug where the VM reentry cache would not correctly unroll the cached callframe 8407 8408 Fix a check that was intended to mark a cached call as invalid when the callframe could 8409 not be constructed. Instead it was just checking that there was a place to put the 8410 exception. This eventually results in a non-recoverable RegisterFile starvation. 8411 8412 * interpreter/CachedCall.h: 8413 (JSC::CachedCall::CachedCall): 8414 (JSC::CachedCall::call): add assertion to ensure we don't use a bad callframe 8415 8416 2009-04-17 David Kilzer <ddkilzer (a] apple.com> 8417 8418 Simplify FEATURE_DEFINES definition 8419 8420 Reviewed by Darin Adler. 8421 8422 This moves FEATURE_DEFINES and its related ENABLE_FEATURE_NAME 8423 variables to their own FeatureDefines.xcconfig file. It also 8424 extracts a new ENABLE_GEOLOCATION variable so that 8425 FEATURE_DEFINES only needs to be defined once. 8426 8427 * Configurations/FeatureDefines.xcconfig: Added. 8428 * Configurations/JavaScriptCore.xcconfig: Removed definition of 8429 ENABLE_SVG_DOM_OBJC_BINDINGS and FEATURE_DEFINES. Added include 8430 of FeatureDefines.xcconfig. 8431 * JavaScriptCore.xcodeproj/project.pbxproj: Added 8432 FeatureDefines.xcconfig file. 8433 8434 2009-04-08 Mihnea Ovidenie <mihnea (a] adobe.com> 8435 8436 Reviewed by Oliver Hunt. 8437 8438 Bug 25027: JavaScript parseInt wrong on negative numbers 8439 <https://bugs.webkit.org/show_bug.cgi?id=25027> 8440 8441 When dealing with negative numbers, parseInt should use ceil instead of floor. 8442 8443 * runtime/JSGlobalObjectFunctions.cpp: 8444 (JSC::globalFuncParseInt): 8445 8446 2009-04-16 Stephanie Lewis <slewis (a] apple.com> 8447 8448 Reviewed by Oliver Hunt. 8449 8450 <rdar://problem/6744652> 32-bit to 64-bit: Javascript hash tables double in size 8451 8452 Remove perfect hash optimization which removes 1 MB of overhead on 32-bit and almost 2 MB on 64-bit. Removing the optimization was not a regression on SunSpider and the acid 3 test still passes. 8453 8454 * create_hash_table: 8455 * runtime/Lookup.cpp: 8456 (JSC::HashTable::createTable): 8457 (JSC::HashTable::deleteTable): 8458 * runtime/Lookup.h: 8459 (JSC::HashEntry::initialize): 8460 (JSC::HashEntry::next): 8461 (JSC::HashTable::entry): 8462 * runtime/Structure.cpp: 8463 (JSC::Structure::getEnumerableNamesFromClassInfoTable): 8464 8465 2009-04-16 Oliver Hunt <oliver (a] apple.com> 8466 8467 Reviewed by Gavin Barraclough. 8468 8469 Fix subtle error in optimised VM reentry in Array.sort 8470 8471 Basically to ensure we don't accidentally invalidate the cached callframe 8472 we should be using the cached callframe rather than our own exec state. 8473 While the old behaviour was wrong i have been unable to actually create a 8474 test case where anything actually ends up going wrong. 8475 8476 * interpreter/CachedCall.h: 8477 (JSC::CachedCall::newCallFrame): 8478 * runtime/JSArray.cpp: 8479 (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): 8480 8481 2009-04-16 Oliver Hunt <oliver (a] apple.com> 8482 8483 Reviewed by Gavin Barraclough. 8484 8485 Optimise op_resolve_base 8486 8487 If we can statically find a property we are trying to resolve 8488 the base of, the base is guaranteed to be the global object. 8489 8490 * bytecompiler/BytecodeGenerator.cpp: 8491 (JSC::BytecodeGenerator::emitResolveBase): 8492 8493 2009-04-16 Oliver Hunt <oliver (a] apple.com> 8494 8495 Reviewed by Gavin Barraclough. 8496 8497 Improve performance of read-write-modify operators 8498 8499 Implement cross scope optimisation for read-write-modify 8500 operators, to avoid unnecessary calls to property resolve 8501 helper functions. 8502 8503 * bytecompiler/BytecodeGenerator.cpp: 8504 (JSC::BytecodeGenerator::BytecodeGenerator): 8505 (JSC::BytecodeGenerator::emitLoadGlobalObject): 8506 (JSC::BytecodeGenerator::emitResolveWithBase): 8507 * bytecompiler/BytecodeGenerator.h: 8508 8509 2009-04-16 Oliver Hunt <oliver (a] apple.com> 8510 8511 Reviewed by Gavin Barraclough. 8512 8513 Improve performance of remaining array enumeration functions 8514 8515 Make use of function entry cache for remaining Array enumeration functions. 8516 8517 * runtime/ArrayPrototype.cpp: 8518 (JSC::arrayProtoFuncMap): 8519 (JSC::arrayProtoFuncEvery): 8520 (JSC::arrayProtoFuncForEach): 8521 (JSC::arrayProtoFuncSome): 8522 8523 2009-04-15 Oliver Hunt <oliver (a] apple.com> 8524 8525 Reviewed by Gavin Barraclough. 8526 8527 Improve performance of Array.sort 8528 8529 Cache the VM entry for Array.sort when using a JS comparison function. 8530 8531 * runtime/JSArray.cpp: 8532 (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): 8533 (JSC::JSArray::sort): 8534 8535 2009-04-15 Oliver Hunt <oliver (a] apple.com> 8536 8537 Reviewed by Gavin Barraclough. 8538 8539 Bug 25229: Need support for Array.prototype.reduceRight 8540 <https://bugs.webkit.org/show_bug.cgi?id=25229> 8541 8542 Implement Array.reduceRight 8543 8544 * runtime/ArrayPrototype.cpp: 8545 (JSC::arrayProtoFuncReduceRight): 8546 8547 2009-04-15 Oliver Hunt <oliver (a] apple.com> 8548 8549 Reviewed by Gavin Barraclough. 8550 8551 Bug 25227: Array.filter triggers an assertion when the target array shrinks while being filtered 8552 <https://bugs.webkit.org/show_bug.cgi?id=25227> 8553 8554 We correct this simply by making the fast array path fall back on the slow path if 8555 we ever discover the fast access is unsafe. 8556 8557 * runtime/ArrayPrototype.cpp: 8558 (JSC::arrayProtoFuncFilter): 8559 8560 2009-04-13 Oliver Hunt <oliver (a] apple.com> 8561 8562 Reviewed by Gavin Barraclough. 8563 8564 Bug 25159: Support Array.prototype.reduce 8565 <https://bugs.webkit.org/show_bug.cgi?id=25159> 8566 8567 Implement Array.prototype.reduce 8568 8569 * runtime/ArrayPrototype.cpp: 8570 (JSC::arrayProtoFuncReduce): 8571 8572 2009-04-15 Oliver Hunt <oliver (a] apple.com> 8573 8574 Reviewed by NOBODY (Build fix). 8575 8576 Move CallFrameClosure from inside the Interpreter class to its own file. 8577 8578 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 8579 * JavaScriptCore.xcodeproj/project.pbxproj: 8580 * interpreter/CachedCall.h: 8581 * interpreter/CallFrameClosure.h: Copied from JavaScriptCore/yarr/RegexJIT.h. 8582 (JSC::CallFrameClosure::setArgument): 8583 (JSC::CallFrameClosure::resetCallFrame): 8584 * interpreter/Interpreter.cpp: 8585 (JSC::Interpreter::prepareForRepeatCall): 8586 * interpreter/Interpreter.h: 8587 8588 2009-04-14 Oliver Hunt <oliver (a] apple.com> 8589 8590 Reviewed by Cameron Zwarich. 8591 8592 Bug 25202: Improve performance of repeated callbacks into the VM 8593 8594 Add the concept of a CachedCall to native code for use in Array 8595 prototype and similar functions where a single callback function 8596 is called repeatedly with the same number of arguments. 8597 8598 Used Array.prototype.filter as the test function and got a 50% win 8599 over a naive non-caching specialised version. This makes the native 8600 implementation of Array.prototype.filter faster than the JS one once 8601 more. 8602 8603 * JavaScriptCore.vcproj/JavaScriptCore.sln: 8604 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 8605 * JavaScriptCore.xcodeproj/project.pbxproj: 8606 * interpreter/CachedCall.h: Added. 8607 (JSC::CachedCall::CachedCall): 8608 (JSC::CachedCall::call): 8609 (JSC::CachedCall::setThis): 8610 (JSC::CachedCall::setArgument): 8611 (JSC::CachedCall::~CachedCall): 8612 CachedCall is a wrapper that automates the calling and teardown 8613 for a CallFrameClosure 8614 * interpreter/CallFrame.h: 8615 * interpreter/Interpreter.cpp: 8616 (JSC::Interpreter::prepareForRepeatCall): 8617 Create the basic entry closure for a function 8618 (JSC::Interpreter::execute): 8619 A new ::execute method to enter the interpreter from a closure 8620 (JSC::Interpreter::endRepeatCall): 8621 Clear the entry closure 8622 * interpreter/Interpreter.h: 8623 (JSC::Interpreter::CallFrameClosure::setArgument): 8624 (JSC::Interpreter::CallFrameClosure::resetCallFrame): 8625 Helper functions to simplify setting up the closure's callframe 8626 * runtime/ArrayPrototype.cpp: 8627 (JSC::arrayProtoFuncFilter): 8628 8629 2009-04-14 Xan Lopez <xlopez (a] igalia.com> 8630 8631 Fix the build. 8632 8633 Add the yarr headers (and only the headers) to the build, so that 8634 RegExp.cpp can compile. The headers are ifdefed out with yarr 8635 disabled, so we don't need anything else for now. 8636 8637 * GNUmakefile.am: 8638 8639 2009-04-14 Adam Roben <aroben (a] apple.com> 8640 8641 Remove support for profile-guided optimization on Windows 8642 8643 Rubber-stamped by Steve Falkenburg. 8644 8645 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Removed 8646 the Release_PGO configuration. Also let VS re-order the source files 8647 list. 8648 8649 2009-04-14 Xan Lopez <xlopez (a] igalia.com> 8650 8651 Unreviewed build fix. 8652 8653 * GNUmakefile.am: 8654 8655 2009-04-14 Jan Michael Alonzo <jmalonzo (a] webkit.org> 8656 8657 Gtk build fix when building minidom. Not reviewed. 8658 8659 Use C-style comment instead of C++ style since autotools builds 8660 minidom using gcc and not g++. 8661 8662 * wtf/Platform.h: 8663 8664 2009-04-14 Gavin Barraclough <barraclough (a] apple.com> 8665 8666 Reviewed by NOBODY - speculative build fix. 8667 8668 * runtime/RegExp.h: 8669 8670 2009-04-13 Gavin Barraclough <barraclough (a] apple.com> 8671 8672 Reviewed by Cap'n Geoff Garen. 8673 8674 Yarr! 8675 (Yet another regex runtime). 8676 8677 Currently disabled by default since the interpreter, whilst awesomely 8678 functional, has not been optimized and is likely slower than PCRE, and 8679 the JIT, whilst faster than WREC, is presently incomplete and does not 8680 fallback to using an interpreter for the cases it cannot handle. 8681 8682 * JavaScriptCore.xcodeproj/project.pbxproj: 8683 * assembler/MacroAssemblerX86Common.h: 8684 (JSC::MacroAssemblerX86Common::move): 8685 (JSC::MacroAssemblerX86Common::swap): 8686 (JSC::MacroAssemblerX86Common::signExtend32ToPtr): 8687 (JSC::MacroAssemblerX86Common::zeroExtend32ToPtr): 8688 (JSC::MacroAssemblerX86Common::branch32): 8689 (JSC::MacroAssemblerX86Common::branch16): 8690 * assembler/X86Assembler.h: 8691 (JSC::X86Assembler::cmpw_im): 8692 (JSC::X86Assembler::testw_rr): 8693 (JSC::X86Assembler::X86InstructionFormatter::immediate16): 8694 * runtime/RegExp.cpp: 8695 (JSC::RegExp::RegExp): 8696 (JSC::RegExp::~RegExp): 8697 (JSC::RegExp::create): 8698 (JSC::RegExp::compile): 8699 (JSC::RegExp::match): 8700 * runtime/RegExp.h: 8701 * wtf/Platform.h: 8702 * yarr: Added. 8703 * yarr/RegexCompiler.cpp: Added. 8704 (JSC::Yarr::CharacterClassConstructor::CharacterClassConstructor): 8705 (JSC::Yarr::CharacterClassConstructor::reset): 8706 (JSC::Yarr::CharacterClassConstructor::append): 8707 (JSC::Yarr::CharacterClassConstructor::putChar): 8708 (JSC::Yarr::CharacterClassConstructor::isUnicodeUpper): 8709 (JSC::Yarr::CharacterClassConstructor::isUnicodeLower): 8710 (JSC::Yarr::CharacterClassConstructor::putRange): 8711 (JSC::Yarr::CharacterClassConstructor::charClass): 8712 (JSC::Yarr::CharacterClassConstructor::addSorted): 8713 (JSC::Yarr::CharacterClassConstructor::addSortedRange): 8714 (JSC::Yarr::newlineCreate): 8715 (JSC::Yarr::digitsCreate): 8716 (JSC::Yarr::spacesCreate): 8717 (JSC::Yarr::wordcharCreate): 8718 (JSC::Yarr::nondigitsCreate): 8719 (JSC::Yarr::nonspacesCreate): 8720 (JSC::Yarr::nonwordcharCreate): 8721 (JSC::Yarr::RegexPatternConstructor::RegexPatternConstructor): 8722 (JSC::Yarr::RegexPatternConstructor::~RegexPatternConstructor): 8723 (JSC::Yarr::RegexPatternConstructor::reset): 8724 (JSC::Yarr::RegexPatternConstructor::assertionBOL): 8725 (JSC::Yarr::RegexPatternConstructor::assertionEOL): 8726 (JSC::Yarr::RegexPatternConstructor::assertionWordBoundary): 8727 (JSC::Yarr::RegexPatternConstructor::atomPatternCharacter): 8728 (JSC::Yarr::RegexPatternConstructor::atomBuiltInCharacterClass): 8729 (JSC::Yarr::RegexPatternConstructor::atomCharacterClassBegin): 8730 (JSC::Yarr::RegexPatternConstructor::atomCharacterClassAtom): 8731 (JSC::Yarr::RegexPatternConstructor::atomCharacterClassRange): 8732 (JSC::Yarr::RegexPatternConstructor::atomCharacterClassBuiltIn): 8733 (JSC::Yarr::RegexPatternConstructor::atomCharacterClassEnd): 8734 (JSC::Yarr::RegexPatternConstructor::atomParenthesesSubpatternBegin): 8735 (JSC::Yarr::RegexPatternConstructor::atomParentheticalAssertionBegin): 8736 (JSC::Yarr::RegexPatternConstructor::atomParenthesesEnd): 8737 (JSC::Yarr::RegexPatternConstructor::atomBackReference): 8738 (JSC::Yarr::RegexPatternConstructor::copyDisjunction): 8739 (JSC::Yarr::RegexPatternConstructor::copyTerm): 8740 (JSC::Yarr::RegexPatternConstructor::quantifyAtom): 8741 (JSC::Yarr::RegexPatternConstructor::disjunction): 8742 (JSC::Yarr::RegexPatternConstructor::regexBegin): 8743 (JSC::Yarr::RegexPatternConstructor::regexEnd): 8744 (JSC::Yarr::RegexPatternConstructor::regexError): 8745 (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): 8746 (JSC::Yarr::RegexPatternConstructor::setupDisjunctionOffsets): 8747 (JSC::Yarr::RegexPatternConstructor::setupOffsets): 8748 (JSC::Yarr::compileRegex): 8749 * yarr/RegexCompiler.h: Added. 8750 * yarr/RegexInterpreter.cpp: Added. 8751 (JSC::Yarr::Interpreter::appendParenthesesDisjunctionContext): 8752 (JSC::Yarr::Interpreter::popParenthesesDisjunctionContext): 8753 (JSC::Yarr::Interpreter::DisjunctionContext::DisjunctionContext): 8754 (JSC::Yarr::Interpreter::DisjunctionContext::operator new): 8755 (JSC::Yarr::Interpreter::allocDisjunctionContext): 8756 (JSC::Yarr::Interpreter::freeDisjunctionContext): 8757 (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::ParenthesesDisjunctionContext): 8758 (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::operator new): 8759 (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::restoreOutput): 8760 (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::getDisjunctionContext): 8761 (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext): 8762 (JSC::Yarr::Interpreter::freeParenthesesDisjunctionContext): 8763 (JSC::Yarr::Interpreter::InputStream::InputStream): 8764 (JSC::Yarr::Interpreter::InputStream::next): 8765 (JSC::Yarr::Interpreter::InputStream::rewind): 8766 (JSC::Yarr::Interpreter::InputStream::read): 8767 (JSC::Yarr::Interpreter::InputStream::readChecked): 8768 (JSC::Yarr::Interpreter::InputStream::reread): 8769 (JSC::Yarr::Interpreter::InputStream::prev): 8770 (JSC::Yarr::Interpreter::InputStream::getPos): 8771 (JSC::Yarr::Interpreter::InputStream::setPos): 8772 (JSC::Yarr::Interpreter::InputStream::atStart): 8773 (JSC::Yarr::Interpreter::InputStream::atEnd): 8774 (JSC::Yarr::Interpreter::InputStream::checkInput): 8775 (JSC::Yarr::Interpreter::InputStream::uncheckInput): 8776 (JSC::Yarr::Interpreter::testCharacterClass): 8777 (JSC::Yarr::Interpreter::tryConsumeCharacter): 8778 (JSC::Yarr::Interpreter::checkCharacter): 8779 (JSC::Yarr::Interpreter::tryConsumeCharacterClass): 8780 (JSC::Yarr::Interpreter::checkCharacterClass): 8781 (JSC::Yarr::Interpreter::tryConsumeBackReference): 8782 (JSC::Yarr::Interpreter::matchAssertionBOL): 8783 (JSC::Yarr::Interpreter::matchAssertionEOL): 8784 (JSC::Yarr::Interpreter::matchAssertionWordBoundary): 8785 (JSC::Yarr::Interpreter::matchPatternCharacter): 8786 (JSC::Yarr::Interpreter::backtrackPatternCharacter): 8787 (JSC::Yarr::Interpreter::matchCharacterClass): 8788 (JSC::Yarr::Interpreter::backtrackCharacterClass): 8789 (JSC::Yarr::Interpreter::matchBackReference): 8790 (JSC::Yarr::Interpreter::backtrackBackReference): 8791 (JSC::Yarr::Interpreter::recordParenthesesMatch): 8792 (JSC::Yarr::Interpreter::resetMatches): 8793 (JSC::Yarr::Interpreter::resetAssertionMatches): 8794 (JSC::Yarr::Interpreter::parenthesesDoBacktrack): 8795 (JSC::Yarr::Interpreter::matchParenthesesOnceBegin): 8796 (JSC::Yarr::Interpreter::matchParenthesesOnceEnd): 8797 (JSC::Yarr::Interpreter::backtrackParenthesesOnceBegin): 8798 (JSC::Yarr::Interpreter::backtrackParenthesesOnceEnd): 8799 (JSC::Yarr::Interpreter::matchParentheticalAssertionOnceBegin): 8800 (JSC::Yarr::Interpreter::matchParentheticalAssertionOnceEnd): 8801 (JSC::Yarr::Interpreter::backtrackParentheticalAssertionOnceBegin): 8802 (JSC::Yarr::Interpreter::backtrackParentheticalAssertionOnceEnd): 8803 (JSC::Yarr::Interpreter::matchParentheses): 8804 (JSC::Yarr::Interpreter::backtrackParentheses): 8805 (JSC::Yarr::Interpreter::matchTerm): 8806 (JSC::Yarr::Interpreter::backtrackTerm): 8807 (JSC::Yarr::Interpreter::matchAlternative): 8808 (JSC::Yarr::Interpreter::matchDisjunction): 8809 (JSC::Yarr::Interpreter::matchNonZeroDisjunction): 8810 (JSC::Yarr::Interpreter::interpret): 8811 (JSC::Yarr::Interpreter::Interpreter): 8812 (JSC::Yarr::ByteCompiler::ParenthesesStackEntry::ParenthesesStackEntry): 8813 (JSC::Yarr::ByteCompiler::ByteCompiler): 8814 (JSC::Yarr::ByteCompiler::compile): 8815 (JSC::Yarr::ByteCompiler::checkInput): 8816 (JSC::Yarr::ByteCompiler::assertionBOL): 8817 (JSC::Yarr::ByteCompiler::assertionEOL): 8818 (JSC::Yarr::ByteCompiler::assertionWordBoundary): 8819 (JSC::Yarr::ByteCompiler::atomPatternCharacter): 8820 (JSC::Yarr::ByteCompiler::atomCharacterClass): 8821 (JSC::Yarr::ByteCompiler::atomBackReference): 8822 (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin): 8823 (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin): 8824 (JSC::Yarr::ByteCompiler::popParenthesesStack): 8825 (JSC::Yarr::ByteCompiler::dumpDisjunction): 8826 (JSC::Yarr::ByteCompiler::closeAlternative): 8827 (JSC::Yarr::ByteCompiler::atomParenthesesEnd): 8828 (JSC::Yarr::ByteCompiler::regexBegin): 8829 (JSC::Yarr::ByteCompiler::regexEnd): 8830 (JSC::Yarr::ByteCompiler::alterantiveDisjunction): 8831 (JSC::Yarr::ByteCompiler::emitDisjunction): 8832 (JSC::Yarr::byteCompileRegex): 8833 (JSC::Yarr::interpretRegex): 8834 * yarr/RegexInterpreter.h: Added. 8835 (JSC::Yarr::ByteTerm::): 8836 (JSC::Yarr::ByteTerm::ByteTerm): 8837 (JSC::Yarr::ByteTerm::BOL): 8838 (JSC::Yarr::ByteTerm::CheckInput): 8839 (JSC::Yarr::ByteTerm::EOL): 8840 (JSC::Yarr::ByteTerm::WordBoundary): 8841 (JSC::Yarr::ByteTerm::BackReference): 8842 (JSC::Yarr::ByteTerm::AlternativeBegin): 8843 (JSC::Yarr::ByteTerm::AlternativeDisjunction): 8844 (JSC::Yarr::ByteTerm::AlternativeEnd): 8845 (JSC::Yarr::ByteTerm::PatternEnd): 8846 (JSC::Yarr::ByteTerm::invert): 8847 (JSC::Yarr::ByteTerm::capture): 8848 (JSC::Yarr::ByteDisjunction::ByteDisjunction): 8849 (JSC::Yarr::BytecodePattern::BytecodePattern): 8850 (JSC::Yarr::BytecodePattern::~BytecodePattern): 8851 * yarr/RegexJIT.cpp: Added. 8852 (JSC::Yarr::RegexGenerator::optimizeAlternative): 8853 (JSC::Yarr::RegexGenerator::matchCharacterClassRange): 8854 (JSC::Yarr::RegexGenerator::matchCharacterClass): 8855 (JSC::Yarr::RegexGenerator::jumpIfNoAvailableInput): 8856 (JSC::Yarr::RegexGenerator::jumpIfAvailableInput): 8857 (JSC::Yarr::RegexGenerator::checkInput): 8858 (JSC::Yarr::RegexGenerator::atEndOfInput): 8859 (JSC::Yarr::RegexGenerator::notAtEndOfInput): 8860 (JSC::Yarr::RegexGenerator::jumpIfCharEquals): 8861 (JSC::Yarr::RegexGenerator::jumpIfCharNotEquals): 8862 (JSC::Yarr::RegexGenerator::readCharacter): 8863 (JSC::Yarr::RegexGenerator::storeToFrame): 8864 (JSC::Yarr::RegexGenerator::loadFromFrame): 8865 (JSC::Yarr::RegexGenerator::TermGenerationState::TermGenerationState): 8866 (JSC::Yarr::RegexGenerator::TermGenerationState::resetAlternative): 8867 (JSC::Yarr::RegexGenerator::TermGenerationState::alternativeValid): 8868 (JSC::Yarr::RegexGenerator::TermGenerationState::nextAlternative): 8869 (JSC::Yarr::RegexGenerator::TermGenerationState::alternative): 8870 (JSC::Yarr::RegexGenerator::TermGenerationState::resetTerm): 8871 (JSC::Yarr::RegexGenerator::TermGenerationState::termValid): 8872 (JSC::Yarr::RegexGenerator::TermGenerationState::nextTerm): 8873 (JSC::Yarr::RegexGenerator::TermGenerationState::term): 8874 (JSC::Yarr::RegexGenerator::TermGenerationState::lookaheadTerm): 8875 (JSC::Yarr::RegexGenerator::TermGenerationState::isSinglePatternCharacterLookaheadTerm): 8876 (JSC::Yarr::RegexGenerator::TermGenerationState::inputOffset): 8877 (JSC::Yarr::RegexGenerator::TermGenerationState::jumpToBacktrack): 8878 (JSC::Yarr::RegexGenerator::TermGenerationState::setBacktrackGenerated): 8879 (JSC::Yarr::RegexGenerator::jumpToBacktrackCheckEmitPending): 8880 (JSC::Yarr::RegexGenerator::genertateAssertionBOL): 8881 (JSC::Yarr::RegexGenerator::genertateAssertionEOL): 8882 (JSC::Yarr::RegexGenerator::matchAssertionWordchar): 8883 (JSC::Yarr::RegexGenerator::genertateAssertionWordBoundary): 8884 (JSC::Yarr::RegexGenerator::genertatePatternCharacterSingle): 8885 (JSC::Yarr::RegexGenerator::genertatePatternCharacterPair): 8886 (JSC::Yarr::RegexGenerator::genertatePatternCharacterFixed): 8887 (JSC::Yarr::RegexGenerator::genertatePatternCharacterGreedy): 8888 (JSC::Yarr::RegexGenerator::genertatePatternCharacterNonGreedy): 8889 (JSC::Yarr::RegexGenerator::genertateCharacterClassSingle): 8890 (JSC::Yarr::RegexGenerator::genertateCharacterClassFixed): 8891 (JSC::Yarr::RegexGenerator::genertateCharacterClassGreedy): 8892 (JSC::Yarr::RegexGenerator::genertateCharacterClassNonGreedy): 8893 (JSC::Yarr::RegexGenerator::generateParenthesesSingleDisjunctionOneAlternative): 8894 (JSC::Yarr::RegexGenerator::generateParenthesesSingle): 8895 (JSC::Yarr::RegexGenerator::generateTerm): 8896 (JSC::Yarr::RegexGenerator::generateDisjunction): 8897 (JSC::Yarr::RegexGenerator::RegexGenerator): 8898 (JSC::Yarr::RegexGenerator::generate): 8899 (JSC::Yarr::jitCompileRegex): 8900 (JSC::Yarr::executeRegex): 8901 * yarr/RegexJIT.h: Added. 8902 (JSC::Yarr::RegexCodeBlock::RegexCodeBlock): 8903 * yarr/RegexParser.h: Added. 8904 (JSC::Yarr::): 8905 (JSC::Yarr::Parser::): 8906 (JSC::Yarr::Parser::CharacterClassParserDelegate::CharacterClassParserDelegate): 8907 (JSC::Yarr::Parser::CharacterClassParserDelegate::begin): 8908 (JSC::Yarr::Parser::CharacterClassParserDelegate::atomPatternCharacterUnescaped): 8909 (JSC::Yarr::Parser::CharacterClassParserDelegate::atomPatternCharacter): 8910 (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBuiltInCharacterClass): 8911 (JSC::Yarr::Parser::CharacterClassParserDelegate::end): 8912 (JSC::Yarr::Parser::CharacterClassParserDelegate::assertionWordBoundary): 8913 (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBackReference): 8914 (JSC::Yarr::Parser::CharacterClassParserDelegate::flush): 8915 (JSC::Yarr::Parser::CharacterClassParserDelegate::): 8916 (JSC::Yarr::Parser::Parser): 8917 (JSC::Yarr::Parser::parseEscape): 8918 (JSC::Yarr::Parser::parseAtomEscape): 8919 (JSC::Yarr::Parser::parseCharacterClassEscape): 8920 (JSC::Yarr::Parser::parseCharacterClass): 8921 (JSC::Yarr::Parser::parseParenthesesBegin): 8922 (JSC::Yarr::Parser::parseParenthesesEnd): 8923 (JSC::Yarr::Parser::parseQuantifier): 8924 (JSC::Yarr::Parser::parseTokens): 8925 (JSC::Yarr::Parser::parse): 8926 (JSC::Yarr::Parser::saveState): 8927 (JSC::Yarr::Parser::restoreState): 8928 (JSC::Yarr::Parser::atEndOfPattern): 8929 (JSC::Yarr::Parser::peek): 8930 (JSC::Yarr::Parser::peekIsDigit): 8931 (JSC::Yarr::Parser::peekDigit): 8932 (JSC::Yarr::Parser::consume): 8933 (JSC::Yarr::Parser::consumeDigit): 8934 (JSC::Yarr::Parser::consumeNumber): 8935 (JSC::Yarr::Parser::consumeOctal): 8936 (JSC::Yarr::Parser::tryConsume): 8937 (JSC::Yarr::Parser::tryConsumeHex): 8938 (JSC::Yarr::parse): 8939 * yarr/RegexPattern.h: Added. 8940 (JSC::Yarr::CharacterRange::CharacterRange): 8941 (JSC::Yarr::): 8942 (JSC::Yarr::PatternTerm::): 8943 (JSC::Yarr::PatternTerm::PatternTerm): 8944 (JSC::Yarr::PatternTerm::BOL): 8945 (JSC::Yarr::PatternTerm::EOL): 8946 (JSC::Yarr::PatternTerm::WordBoundary): 8947 (JSC::Yarr::PatternTerm::invert): 8948 (JSC::Yarr::PatternTerm::capture): 8949 (JSC::Yarr::PatternTerm::quantify): 8950 (JSC::Yarr::PatternAlternative::PatternAlternative): 8951 (JSC::Yarr::PatternAlternative::lastTerm): 8952 (JSC::Yarr::PatternAlternative::removeLastTerm): 8953 (JSC::Yarr::PatternDisjunction::PatternDisjunction): 8954 (JSC::Yarr::PatternDisjunction::~PatternDisjunction): 8955 (JSC::Yarr::PatternDisjunction::addNewAlternative): 8956 (JSC::Yarr::RegexPattern::RegexPattern): 8957 (JSC::Yarr::RegexPattern::~RegexPattern): 8958 (JSC::Yarr::RegexPattern::reset): 8959 (JSC::Yarr::RegexPattern::containsIllegalBackReference): 8960 (JSC::Yarr::RegexPattern::newlineCharacterClass): 8961 (JSC::Yarr::RegexPattern::digitsCharacterClass): 8962 (JSC::Yarr::RegexPattern::spacesCharacterClass): 8963 (JSC::Yarr::RegexPattern::wordcharCharacterClass): 8964 (JSC::Yarr::RegexPattern::nondigitsCharacterClass): 8965 (JSC::Yarr::RegexPattern::nonspacesCharacterClass): 8966 (JSC::Yarr::RegexPattern::nonwordcharCharacterClass): 8967 8968 2009-04-13 Oliver Hunt <oliver (a] apple.com> 8969 8970 Reviewed by NOBODY (Missed code from last patch). 8971 8972 * runtime/InternalFunction.cpp: 8973 (JSC::InternalFunction::displayName): 8974 (JSC::InternalFunction::calculatedDisplayName): 8975 * runtime/InternalFunction.h: 8976 8977 2009-04-13 Francisco Tolmasky <francisco (a] 280north.com> 8978 8979 Reviewed by Oliver Hunt. 8980 8981 BUG 25171: It should be possible to manually set the name of an anonymous function 8982 <https://bugs.webkit.org/show_bug.cgi?id=25171> 8983 8984 This change adds the displayName property to functions, which when set overrides the 8985 normal name when appearing in the console. 8986 8987 * profiler/Profiler.cpp: 8988 (JSC::createCallIdentifierFromFunctionImp): Changed call to InternalFunction::name to InternalFunction::calculatedDisplayName 8989 * runtime/CommonIdentifiers.h: Added displayName common identifier. 8990 * runtime/InternalFunction.cpp: 8991 (JSC::InternalFunction::displayName): Access to user settable displayName property 8992 (JSC::InternalFunction::calculatedDisplayName): Returns displayName if it exists, if not then the natural name 8993 8994 2009-04-13 Geoffrey Garen <ggaren (a] apple.com> 8995 8996 Reviewed by Sam Weinig. 8997 8998 Disabled another JavaScriptCore test because it fails on Windows but 8999 not Mac, so it makes the bots red. 9000 9001 * tests/mozilla/expected.html: 9002 9003 2009-04-13 Geoffrey Garen <ggaren (a] apple.com> 9004 9005 Reviewed by Sam Weinig. 9006 9007 Disabled two JavaScriptCore tests because they fail on Window or Mac but 9008 not both, so they make the bots red. 9009 9010 * tests/mozilla/expected.html: Updated expected results. 9011 9012 2009-04-09 Ben Murdoch <benm (a] google.com> 9013 9014 Reviewed by Alexey Proskuryakov. 9015 9016 https://bugs.webkit.org/show_bug.cgi?id=25091 9017 The Android platform requires threads to be registered with the VM. 9018 This patch implements this behaviour inside ThreadingPthreads.cpp. 9019 9020 * wtf/ThreadingPthreads.cpp: Add a level above threadEntryPoint that takes care of (un)registering threads with the VM. 9021 (WTF::runThreadWithRegistration): register the thread and run entryPoint. Unregister the thread afterwards. 9022 (WTF::createThreadInternal): call runThreadWithRegistration instead of entryPoint directly. 9023 9024 2009-04-09 David Kilzer <ddkilzer (a] apple.com> 9025 9026 Reinstating <rdar://problem/6718589> Option to turn off SVG DOM Objective-C bindings 9027 9028 Rolled r42345 back in. The build failure was caused by an 9029 internal script which had not been updated the same way that 9030 build-webkit was updated. 9031 9032 * Configurations/JavaScriptCore.xcconfig: 9033 9034 2009-04-09 Alexey Proskuryakov <ap (a] webkit.org> 9035 9036 Reverting <rdar://problem/6718589> Option to turn off SVG DOM Objective-C bindings. 9037 It broke Mac build, and I don't know how to fix it. 9038 9039 * Configurations/JavaScriptCore.xcconfig: 9040 9041 2009-04-09 Xan Lopez <xlopez (a] igalia.com> 9042 9043 Unreviewed build fix. 9044 9045 Checking for __GLIBCXX__ being bigger than some date is not enough 9046 to get std::tr1, C++0x has to be in use too. Add another check for 9047 __GXX_EXPERIMENTAL_CXX0X__. 9048 9049 * wtf/TypeTraits.h: 9050 9051 2009-04-08 Oliver Hunt <oliver (a] apple.com> 9052 9053 Reviewed by Adam Roben. 9054 9055 Fix assertion failure in function.apply 9056 9057 The result of excess arguments to function.apply is irrelevant 9058 so we don't need to provide a result register. We were providing 9059 temporary result register but not ref'ing it resulting in an 9060 assertion failure. 9061 9062 * parser/Nodes.cpp: 9063 (JSC::ApplyFunctionCallDotNode::emitBytecode): 9064 9065 2009-04-08 David Kilzer <ddkilzer (a] apple.com> 9066 9067 <rdar://problem/6718589> Option to turn off SVG DOM Objective-C bindings 9068 9069 Reviewed by Darin Adler and Maciej Stachowiak. 9070 9071 Introduce the ENABLE_SVG_DOM_OBJC_BINDINGS feature define so 9072 that SVG DOM Objective-C bindings may be optionally disabled. 9073 9074 * Configurations/JavaScriptCore.xcconfig: Added 9075 ENABLE_SVG_DOM_OBJC_BINDINGS variable and use it in 9076 FEATURE_DEFINES. 9077 9078 2009-04-08 Paul Pedriana <ppedriana (a] ea.com> 9079 9080 Reviewed by Darin Adler. 9081 9082 https://bugs.webkit.org/show_bug.cgi?id=20422 9083 Allow custom memory allocation control. 9084 9085 * wtf/FastAllocBase.h: 9086 New added file. Implements allocation base class. 9087 * wtf/TypeTraits.h: 9088 Augments existing type traits support as needed by FastAllocBase. 9089 * wtf/FastMalloc.h: 9090 Changed to support FastMalloc match validation. 9091 * wtf/FastMalloc.cpp: 9092 Changed to support FastMalloc match validation. 9093 * wtf/Platform.h: 9094 Added ENABLE_FAST_MALLOC_MATCH_VALIDATION; defaults to 0. 9095 * GNUmakefile.am: 9096 Updated to include added FastAllocBase.h. 9097 * JavaScriptCore.xcodeproj/project.pbxproj: 9098 Updated to include added FastAllocBase.h. 9099 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 9100 Updated to include added FastAllocBase.h. 9101 9102 2009-04-07 Oliver Hunt <oliver (a] apple.com> 9103 9104 Reviewed by Geoff Garen. 9105 9106 Improve function.apply performance 9107 9108 Jump through a few hoops to improve performance of function.apply in the general case. 9109 9110 In the case of zero or one arguments, or if there are only two arguments and the 9111 second is an array literal we treat function.apply as function.call. 9112 9113 Otherwise we use the new opcodes op_load_varargs and op_call_varargs to do the .apply call 9114 without re-entering the virtual machine. 9115 9116 * bytecode/CodeBlock.cpp: 9117 (JSC::CodeBlock::dump): 9118 * bytecode/Opcode.h: 9119 * bytecompiler/BytecodeGenerator.cpp: 9120 (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply): 9121 (JSC::BytecodeGenerator::emitLoadVarargs): 9122 (JSC::BytecodeGenerator::emitCallVarargs): 9123 * bytecompiler/BytecodeGenerator.h: 9124 * interpreter/Interpreter.cpp: 9125 (JSC::Interpreter::privateExecute): 9126 * jit/JIT.cpp: 9127 (JSC::JIT::privateCompileMainPass): 9128 (JSC::JIT::privateCompileSlowCases): 9129 * jit/JIT.h: 9130 * jit/JITCall.cpp: 9131 (JSC::JIT::compileOpCallSetupArgs): 9132 (JSC::JIT::compileOpCallVarargsSetupArgs): 9133 (JSC::JIT::compileOpCallVarargs): 9134 (JSC::JIT::compileOpCallVarargsSlowCase): 9135 * jit/JITStubs.cpp: 9136 (JSC::JITStubs::cti_op_load_varargs): 9137 * jit/JITStubs.h: 9138 * parser/Grammar.y: 9139 * parser/Nodes.cpp: 9140 (JSC::ArrayNode::isSimpleArray): 9141 (JSC::ArrayNode::toArgumentList): 9142 (JSC::CallFunctionCallDotNode::emitBytecode): 9143 (JSC::ApplyFunctionCallDotNode::emitBytecode): 9144 * parser/Nodes.h: 9145 (JSC::ExpressionNode::): 9146 (JSC::ApplyFunctionCallDotNode::): 9147 * runtime/Arguments.cpp: 9148 (JSC::Arguments::copyToRegisters): 9149 (JSC::Arguments::fillArgList): 9150 * runtime/Arguments.h: 9151 (JSC::Arguments::numProvidedArguments): 9152 * runtime/FunctionPrototype.cpp: 9153 (JSC::FunctionPrototype::addFunctionProperties): 9154 * runtime/FunctionPrototype.h: 9155 * runtime/JSArray.cpp: 9156 (JSC::JSArray::copyToRegisters): 9157 * runtime/JSArray.h: 9158 * runtime/JSGlobalObject.cpp: 9159 (JSC::JSGlobalObject::reset): 9160 (JSC::JSGlobalObject::mark): 9161 * runtime/JSGlobalObject.h: 9162 9163 2009-04-08 Alexey Proskuryakov <ap (a] webkit.org> 9164 9165 Reviewed by Darin Adler. 9166 9167 https://bugs.webkit.org/show_bug.cgi?id=25073 9168 JavaScriptCore tests don't run if time zone is not PST 9169 9170 * API/tests/testapi.c: 9171 (timeZoneIsPST): Added a function that checks whether the time zone is PST, using the same 9172 method as functions in DateMath.cpp do for formatting the result. 9173 (main): Skip date string format test if the time zone is not PST. 9174 9175 2009-04-07 David Levin <levin (a] chromium.org> 9176 9177 Reviewed by Sam Weinig and Geoff Garen. 9178 9179 https://bugs.webkit.org/show_bug.cgi?id=25039 9180 UString refactoring to support UChar* sharing. 9181 9182 No change in sunspider perf. 9183 9184 * runtime/SmallStrings.cpp: 9185 (JSC::SmallStringsStorage::SmallStringsStorage): 9186 * runtime/UString.cpp: 9187 (JSC::initializeStaticBaseString): 9188 (JSC::initializeUString): 9189 (JSC::UString::BaseString::isShared): 9190 Encapsulate the meaning behind the refcount == 1 checks because 9191 this needs to do slightly more when sharing is added. 9192 (JSC::concatenate): 9193 (JSC::UString::append): 9194 (JSC::UString::operator=): 9195 * runtime/UString.h: 9196 Make m_baseString part of a union to get rid of casts, but make it protected because 9197 it is tricky to use it correctly since it is only valid when the Rep is not a BaseString. 9198 The void* will be filled in when sharing is added. 9199 9200 Add constructors due to the making members protected and it make ensuring proper 9201 initialization work better (like in SmallStringsStorage). 9202 (JSC::UString::Rep::create): 9203 (JSC::UString::Rep::Rep): 9204 (JSC::UString::Rep::): 9205 (JSC::UString::BaseString::BaseString): 9206 (JSC::UString::Rep::setBaseString): 9207 (JSC::UString::Rep::baseString): 9208 9209 2009-04-04 Xan Lopez <xlopez (a] igalia.com> 9210 9211 Reviewed by Alexey Proskuryakov. 9212 9213 https://bugs.webkit.org/show_bug.cgi?id=25033 9214 dtoa.cpp segfaults with g++ 4.4.0 9215 9216 g++ 4.4.0 seems to be more strict about aliasing rules, so it 9217 produces incorrect code if dtoa.cpp is compiled with 9218 -fstrict-aliasing (it also emits a ton of warnings, so fair enough 9219 I guess). The problem was that we were only casting variables to 9220 union types in order to do type punning, but GCC and the C 9221 standard require that we actually use a union to store the value. 9222 9223 This patch does just that, the code is mostly copied from the dtoa 9224 version in GCC: 9225 http://gcc.gnu.org/viewcvs/trunk/libjava/classpath/native/fdlibm/dtoa.c?view=markup. 9226 9227 * wtf/dtoa.cpp: 9228 (WTF::ulp): 9229 (WTF::b2d): 9230 (WTF::ratio): 9231 (WTF::hexnan): 9232 (WTF::strtod): 9233 (WTF::dtoa): 9234 9235 2009-04-04 Kevin Ollivier <kevino (a] theolliviers.com> 9236 9237 wx build fix for Win port. Build the assembler sources to get missing functions. 9238 9239 * JavaScriptCoreSources.bkl: 9240 * jscore.bkl: 9241 * wtf/Platform.h: 9242 9243 2009-04-02 Darin Adler <darin (a] apple.com> 9244 9245 Reviewed by Kevin Decker. 9246 9247 <rdar://problem/6744471> crash in GC due to uninitialized callFunction pointer 9248 9249 * runtime/JSGlobalObject.h: 9250 (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Initialize 9251 callFunction as we do the other data members that are used in the mark function. 9252 9253 2009-04-02 Yael Aharon <yael.aharon (a] nokia.com> 9254 9255 Reviewed by Simon Hausmann 9256 9257 https://bugs.webkit.org/show_bug.cgi?id=24490 9258 9259 Implement WTF::ThreadSpecific in the Qt build using 9260 QThreadStorage. 9261 9262 * wtf/ThreadSpecific.h: 9263 9264 2009-04-01 Greg Bolsinga <bolsinga (a] apple.com> 9265 9266 Reviewed by Mark Rowe. 9267 9268 https://bugs.webkit.org/show_bug.cgi?id=24990 9269 Put SECTORDER_FLAGS into xcconfig files. 9270 9271 * Configurations/Base.xcconfig: 9272 * Configurations/DebugRelease.xcconfig: 9273 * JavaScriptCore.xcodeproj/project.pbxproj: 9274 9275 2009-03-27 Oliver Hunt <oliver (a] apple.com> 9276 9277 Reviewed by NOBODY (Build fix). 9278 9279 Fix non-AllInOneFile builds. 9280 9281 * bytecompiler/BytecodeGenerator.cpp: 9282 9283 2009-03-27 Oliver Hunt <oliver (a] apple.com> 9284 9285 Reviewed by Gavin Barraclough. 9286 9287 Improve performance of Function.prototype.call 9288 <https://bugs.webkit.org/show_bug.cgi?id=24907> 9289 9290 Optimistically assume that expression.call(..) is going to be a call to 9291 Function.prototype.call, and handle it specially to attempt to reduce the 9292 degree of VM reentrancy. 9293 9294 When everything goes right this removes the vm reentry improving .call() 9295 by around a factor of 10. 9296 9297 * JavaScriptCore.xcodeproj/project.pbxproj: 9298 * bytecode/CodeBlock.cpp: 9299 (JSC::CodeBlock::dump): 9300 * bytecode/Opcode.h: 9301 * bytecompiler/BytecodeGenerator.cpp: 9302 (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall): 9303 * bytecompiler/BytecodeGenerator.h: 9304 * interpreter/Interpreter.cpp: 9305 (JSC::Interpreter::privateExecute): 9306 * jit/JIT.cpp: 9307 (JSC::JIT::privateCompileMainPass): 9308 * parser/Grammar.y: 9309 * parser/Nodes.cpp: 9310 (JSC::CallFunctionCallDotNode::emitBytecode): 9311 * parser/Nodes.h: 9312 (JSC::CallFunctionCallDotNode::): 9313 * runtime/FunctionPrototype.cpp: 9314 (JSC::FunctionPrototype::addFunctionProperties): 9315 * runtime/FunctionPrototype.h: 9316 * runtime/JSGlobalObject.cpp: 9317 (JSC::JSGlobalObject::reset): 9318 (JSC::JSGlobalObject::mark): 9319 * runtime/JSGlobalObject.h: 9320 9321 2009-03-27 Laszlo Gombos <laszlo.1.gombos (a] nokia.com> 9322 9323 Reviewed by Darin Adler. 9324 9325 Bug 24884: Include strings.h for strcasecmp() 9326 https://bugs.webkit.org/show_bug.cgi?id=24884 9327 9328 * runtime/DateMath.cpp: Reversed previous change including strings.h 9329 * wtf/StringExtras.h: Include strings.h here is available 9330 9331 2009-03-26 Adam Roben <aroben (a] apple.com> 9332 9333 Copy testapi.js to $WebKitOutputDir on Windows 9334 9335 Part of Bug 24856: run-javascriptcore-tests should run testapi on 9336 Windows 9337 <https://bugs.webkit.org/show_bug.cgi?id=24856> 9338 9339 This matches what Mac does, which will help once we enable running 9340 testapi from run-javascriptcore-tests on Windows. 9341 9342 Reviewed by Steve Falkenburg. 9343 9344 * JavaScriptCore.vcproj/testapi/testapi.vcproj: Copy testapi.js next 9345 to testapi.exe. 9346 9347 2009-03-25 Oliver Hunt <oliver (a] apple.com> 9348 9349 Reviewed by Geoff Garen. 9350 9351 Fix exception handling for instanceof in the interpreter. 9352 9353 * interpreter/Interpreter.cpp: 9354 (JSC::Interpreter::privateExecute): 9355 9356 2009-03-25 Geoffrey Garen <ggaren (a] apple.com> 9357 9358 Reviewed by Cameron Zwarich. 9359 9360 Fixed <rdar://problem/6724011> Write to freed memory in JSC::Label::deref 9361 when reloading http://helpme.att.net/speedtest/ 9362 9363 * bytecompiler/BytecodeGenerator.h: Reversed the declaration order for 9364 m_labelScopes and m_labels to reverse their destruction order. 9365 m_labelScopes has references to memory within m_labels, so its destructor 9366 needs to run first. 9367 9368 2009-03-24 Eli Fidler <eli.fidler (a] torchmobile.com> 9369 9370 Reviewed by George Staikos. 9371 9372 Correct warnings which in some environments are treated as errors. 9373 9374 * wtf/dtoa.cpp: 9375 (WTF::b2d): 9376 (WTF::d2b): 9377 (WTF::strtod): 9378 (WTF::dtoa): 9379 9380 2009-03-24 Kevin Ollivier <kevino (a] theolliviers.com> 9381 9382 Reviewed by Darin Adler. 9383 9384 Explicitly define HAVE_LANGINFO_H on Darwin. Fixes the wx build bot jscore 9385 test failure. 9386 9387 https://bugs.webkit.org/show_bug.cgi?id=24780 9388 9389 * wtf/Platform.h: 9390 9391 2009-03-23 Oliver Hunt <oliver (a] apple.com> 9392 9393 Reviewed by Cameron Zwarich. 9394 9395 Fix className() for API defined class 9396 9397 * API/JSCallbackObjectFunctions.h: 9398 (JSC::::className): 9399 * API/tests/testapi.c: 9400 (EmptyObject_class): 9401 (main): 9402 * API/tests/testapi.js: 9403 9404 2009-03-23 Oliver Hunt <oliver (a] apple.com> 9405 9406 Reviewed by Geoff Garen. 9407 9408 Make testapi assertions run in release builds, so that testapi actually 9409 works in a release build. 9410 9411 Many of the testapi assertions have side effects that are necessary, and 9412 given testapi is a testing program, perf impact of an assertion is not 9413 important, so it makes sense to apply the assertions in release builds 9414 anyway. 9415 9416 * API/tests/testapi.c: 9417 (EvilExceptionObject_hasInstance): 9418 9419 2009-03-23 David Kilzer <ddkilzer (a] apple.com> 9420 9421 Provide JavaScript exception information after slow script timeout 9422 9423 Reviewed by Oliver Hunt. 9424 9425 * runtime/Completion.cpp: 9426 (JSC::evaluate): Set the exception object as the Completion 9427 object's value for slow script timeouts. This is used in 9428 WebCore when reporting the exception. 9429 * runtime/ExceptionHelpers.cpp: 9430 (JSC::InterruptedExecutionError::toString): Added. Provides a 9431 description message for the exception when it is reported. 9432 9433 2009-03-23 Gustavo Noronha Silva <gns (a] gnome.org> and Thadeu Lima de Souza Cascardo <cascardo (a] holoscopio.com> 9434 9435 Reviewed by Adam Roben. 9436 9437 https://bugs.webkit.org/show_bug.cgi?id=24674 9438 Crashes in !PLATFORM(MAC)'s formatLocaleDate, in very specific situations 9439 9440 Make sure strftime never returns 2-digits years to avoid ambiguity 9441 and a crash. We wrap this new code option in HAVE_LANGINFO_H, 9442 since it is apparently not available in all platforms. 9443 9444 * runtime/DatePrototype.cpp: 9445 (JSC::formatLocaleDate): 9446 * wtf/Platform.h: 9447 9448 2009-03-22 Oliver Hunt <oliver (a] apple.com> 9449 9450 Reviewed by Cameron Zwarich. 9451 9452 Fix exception handling in API 9453 9454 We can't just use the ExecState exception slot for returning exceptions 9455 from class introspection functions provided through the API as many JSC 9456 functions will explicitly clear the ExecState exception when returning. 9457 9458 * API/JSCallbackObjectFunctions.h: 9459 (JSC::JSCallbackObject<Base>::getOwnPropertySlot): 9460 (JSC::JSCallbackObject<Base>::put): 9461 (JSC::JSCallbackObject<Base>::deleteProperty): 9462 (JSC::JSCallbackObject<Base>::construct): 9463 (JSC::JSCallbackObject<Base>::hasInstance): 9464 (JSC::JSCallbackObject<Base>::call): 9465 (JSC::JSCallbackObject<Base>::toNumber): 9466 (JSC::JSCallbackObject<Base>::toString): 9467 (JSC::JSCallbackObject<Base>::staticValueGetter): 9468 (JSC::JSCallbackObject<Base>::callbackGetter): 9469 * API/tests/testapi.c: 9470 (MyObject_hasProperty): 9471 (MyObject_getProperty): 9472 (MyObject_setProperty): 9473 (MyObject_deleteProperty): 9474 (MyObject_callAsFunction): 9475 (MyObject_callAsConstructor): 9476 (MyObject_hasInstance): 9477 (EvilExceptionObject_hasInstance): 9478 (EvilExceptionObject_convertToType): 9479 (EvilExceptionObject_class): 9480 (main): 9481 * API/tests/testapi.js: 9482 (EvilExceptionObject.hasInstance): 9483 (EvilExceptionObject.toNumber): 9484 (EvilExceptionObject.toStringExplicit): 9485 9486 2009-03-21 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 9487 9488 Reviewed by Oliver Hunt. 9489 9490 Bug 20049: testapi failure: MyObject - 0 should be NaN but instead is 1. 9491 <https://bugs.webkit.org/show_bug.cgi?id=20049> 9492 <rdar://problem/6079127> 9493 9494 In this case, the test is wrong. According to the ECMA spec, subtraction 9495 uses ToNumber, not ToPrimitive. Change the test to match the spec. 9496 9497 * API/tests/testapi.js: 9498 9499 2009-03-21 Oliver Hunt <oliver (a] apple.com> 9500 9501 Reviewed by Cameron Zwarich. 9502 9503 Ensure that JSObjectMakeFunction doesn't produce incorrect line numbers. 9504 9505 Also make test api correctly propagate failures. 9506 9507 * API/tests/testapi.c: 9508 (main): 9509 * runtime/FunctionConstructor.cpp: 9510 (JSC::constructFunction): 9511 9512 2009-03-21 Oliver Hunt <oliver (a] apple.com> 9513 9514 Reviewed by Mark Rowe. 9515 9516 Improve testapi by making it report failures in a way we can pick up 9517 from our test scripts. 9518 9519 * API/tests/testapi.c: 9520 (assertEqualsAsBoolean): 9521 (assertEqualsAsNumber): 9522 (assertEqualsAsUTF8String): 9523 (assertEqualsAsCharactersPtr): 9524 (main): 9525 * API/tests/testapi.js: 9526 (pass): 9527 (fail): 9528 (shouldBe): 9529 (shouldThrow): 9530 9531 2009-03-20 Norbert Leser <norbert.leser (a] nokia.com> 9532 9533 Reviewed by Darin Adler. 9534 9535 https://bugs.webkit.org/show_bug.cgi?id=24535 9536 9537 Fixes missing line terminator character (;) after macro call. 9538 It is common practice to add the trailing ";" where macros are substituted 9539 and not where they are defined with #define. 9540 This change is consistent with other macro declarations across webkit, 9541 and it also solves compilation failure with symbian compilers. 9542 9543 * runtime/UString.cpp: 9544 * wtf/Assertions.h: 9545 9546 2009-03-20 Geoffrey Garen <ggaren (a] apple.com> 9547 9548 Reviewed by Darin Adler. 9549 9550 Fixed a JavaScriptCore crash on the Windows buildbot. 9551 9552 * bytecompiler/BytecodeGenerator.h: Reduced the AST recursion limit. 9553 Apparently, Windows has small stacks. 9554 9555 2009-03-20 Geoffrey Garen <ggaren (a] apple.com> 9556 9557 Reviewed by Oliver Hunt. 9558 9559 A little cleanup in the RegisterFile code. 9560 9561 Moved large inline functions out of the class declaration, to make it 9562 more readable. 9563 9564 Switched over to using the roundUpAllocationSize function to avoid 9565 duplicate code and subtle bugs. 9566 9567 Renamed m_maxCommitted to m_commitEnd, to match m_end. 9568 9569 Renamed allocationSize to commitSize because it's the chunk size for 9570 committing memory, not allocating memory. 9571 9572 SunSpider reports no change. 9573 9574 * interpreter/RegisterFile.h: 9575 (JSC::RegisterFile::RegisterFile): 9576 (JSC::RegisterFile::shrink): 9577 (JSC::RegisterFile::grow): 9578 * jit/ExecutableAllocator.h: 9579 (JSC::roundUpAllocationSize): 9580 9581 2009-03-19 Geoffrey Garen <ggaren (a] apple.com> 9582 9583 Reviewed by Oliver Hunt. 9584 9585 Fixed <rdar://problem/6033712> -- a little bit of hardening in the Collector. 9586 9587 SunSpider reports no change. I also verified in the disassembly that 9588 we end up with a single compare to constant. 9589 9590 * runtime/Collector.cpp: 9591 (JSC::Heap::heapAllocate): 9592 9593 2009-03-19 Geoffrey Garen <ggaren (a] apple.com> 9594 9595 Reviewed by Cameron Zwarich and Oliver Hunt. 9596 9597 Fixed <rdar://problem/6406045> REGRESSION: Stack overflow on PowerPC on 9598 fast/workers/use-machine-stack.html (22531) 9599 9600 Dialed down the re-entry allowance to 64 (from 128). 9601 9602 On a 512K stack, this leaves about 64K for other code on the stack while 9603 JavaScript is running. Not perfect, but it solves our crash on PPC. 9604 9605 Different platforms may want to dial this down even more. 9606 9607 Also, substantially shrunk BytecodeGenerator. Since we allocate one on 9608 the stack in order to throw a stack overflow exception -- well, let's 9609 just say the old code had an appreciation for irony. 9610 9611 SunSpider reports no change. 9612 9613 * bytecompiler/BytecodeGenerator.h: 9614 * interpreter/Interpreter.h: 9615 (JSC::): 9616 9617 2009-03-19 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 9618 9619 Reviewed by Oliver Hunt. 9620 9621 Bug 24350: REGRESSION: Safari 4 breaks SPAW wysiwyg editor multiple instances 9622 <https://bugs.webkit.org/show_bug.cgi?id=24350> 9623 <rdar://problem/6674182> 9624 9625 The SPAW editor's JavaScript assumes that toString() on a function 9626 constructed with the Function constructor produces a function with 9627 a newline after the opening brace. 9628 9629 * runtime/FunctionConstructor.cpp: 9630 (JSC::constructFunction): Add a newline after the opening brace of the 9631 function's source code. 9632 9633 2009-03-19 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 9634 9635 Reviewed by Geoff Garen. 9636 9637 Bug 23771: REGRESSION (r36016): JSObjectHasProperty freezes on global class without kJSClassAttributeNoAutomaticPrototype 9638 <https://bugs.webkit.org/show_bug.cgi?id=23771> 9639 <rdar://problem/6561016> 9640 9641 * API/tests/testapi.c: 9642 (main): Add a test for this bug. 9643 * runtime/JSGlobalObject.cpp: 9644 (JSC::JSGlobalObject::resetPrototype): Don't set the prototype of the 9645 last object in the prototype chain to the object prototype when the 9646 object prototype is already the last object in the prototype chain. 9647 9648 2009-03-19 Timothy Hatcher <timothy (a] apple.com> 9649 9650 <rdar://problem/6687342> -[WebView scheduleInRunLoop:forMode:] has no affect on timers 9651 9652 Reviewed by Darin Adler. 9653 9654 * wtf/Platform.h: Added HAVE_RUNLOOP_TIMER for PLATFORM(MAC). 9655 9656 2009-03-19 Geoffrey Garen <ggaren (a] apple.com> 9657 9658 Reviewed by Oliver Hunt. 9659 9660 Fixed <rdar://problem/6279213> Regular expression run-time complexity 9661 limit too low for long inputs (21485) 9662 9663 I raised PCRE's "matchLimit" (limit on backtracking) by an order of 9664 magnitude. This fixes all the reported examples of timing out on legitimate 9665 regular expression matches. 9666 9667 In my testing on a Core Duo MacBook Pro, the longest you can get stuck 9668 trying to match a string is still under 1s, so this seems like a safe change. 9669 9670 I can think of a number of better solutions that are more complicated, 9671 but this is a good improvement for now. 9672 9673 * pcre/pcre_exec.cpp: 9674 9675 2009-03-19 Geoffrey Garen <ggaren (a] apple.com> 9676 9677 Reviewed by Sam Weinig. 9678 9679 Fixed <rdar://problem/6603562> REGRESSION (Safari 4): regular expression 9680 pattern size limit lower than Safari 3.2, other browsers, breaks SAP (14873) 9681 9682 Bumped the pattern size limit to 1MB, and standardized it between PCRE 9683 and WREC. (Empirical testing says that we can easily compile a 1MB regular 9684 expression without risking a hang. Other browsers support bigger regular 9685 expressions, but also hang.) 9686 9687 SunSpider reports no change. 9688 9689 I started with a patch posted to Bugzilla by Erik Corry (erikcorry (a] google.com). 9690 9691 * pcre/pcre_internal.h: 9692 (put3ByteValue): 9693 (get3ByteValue): 9694 (put3ByteValueAndAdvance): 9695 (putLinkValueAllowZero): 9696 (getLinkValueAllowZero): Made PCRE's "LINK_SIZE" (the number of bytes 9697 used to record jumps between bytecodes) 3, to accomodate larger potential 9698 jumps. Bumped PCRE's "MAX_PATTERN_SIZE" to 1MB. (Technically, at this 9699 LINK_SIZE, we can support even larger patterns, but we risk a hang during 9700 compilation, and it's not clear that such large patterns are important 9701 on the web.) 9702 9703 * wrec/WREC.cpp: 9704 (JSC::WREC::Generator::compileRegExp): Match PCRE's maximum pattern size, 9705 to avoid quirks between platforms. 9706 9707 2009-03-18 Ada Chan <adachan (a] apple.com> 9708 9709 Rolling out r41818 since it broke the windows build. 9710 Error: ..\..\runtime\DatePrototype.cpp(30) : fatal error C1083: Cannot open include file: 'langinfo.h': No such file or directory 9711 9712 * runtime/DatePrototype.cpp: 9713 (JSC::formatLocaleDate): 9714 9715 2009-03-17 Oliver Hunt <oliver (a] apple.com> 9716 9717 Reviewed by Cameron Zwarich. 9718 9719 <rdar://problem/6692138> REGRESSION (Safari 4): Incorrect function return value when using IE "try ... finally" memory leak work-around (24654) 9720 <https://bugs.webkit.org/show_bug.cgi?id=24654> 9721 9722 If the return value for a function is in a local register we need 9723 to copy it before executing any finalisers, otherwise it is possible 9724 for the finaliser to clobber the result. 9725 9726 * bytecompiler/BytecodeGenerator.h: 9727 (JSC::BytecodeGenerator::hasFinaliser): 9728 * parser/Nodes.cpp: 9729 (JSC::ReturnNode::emitBytecode): 9730 9731 2009-03-17 Kevin Ollivier <kevino (a] theolliviers.com> 9732 9733 Reviewed by Mark Rowe. 9734 9735 Move BUILDING_ON_* defines into Platform.h to make them available to other ports. 9736 Also tweak the defines so that they work with the default values set by 9737 AvailabilityMacros.h. 9738 9739 https://bugs.webkit.org/show_bug.cgi?id=24630 9740 9741 * JavaScriptCorePrefix.h: 9742 * wtf/Platform.h: 9743 9744 2009-03-15 Simon Fraser <simon.fraser (a] apple.com> 9745 9746 Revert r41718 because it broke DumpRenderTree on Tiger. 9747 9748 * JavaScriptCorePrefix.h: 9749 * wtf/Platform.h: 9750 9751 2009-03-15 Kevin Ollivier <kevino (a] theolliviers.com> 9752 9753 Non-Apple Mac ports build fix. Move defines for the BUILDING_ON_ macros into 9754 Platform.h so that they're defined for all ports building on Mac, and tweak 9755 the definitions of those macros based on Mark Rowe's suggestions to accomodate 9756 cases where the values may not be <= to the .0 release for that version. 9757 9758 * JavaScriptCorePrefix.h: 9759 * wtf/Platform.h: 9760 9761 2009-03-13 Mark Rowe <mrowe (a] apple.com> 9762 9763 Rubber-stamped by Dan Bernstein. 9764 9765 Take advantage of the ability of recent versions of Xcode to easily switch the active 9766 architecture. 9767 9768 * Configurations/DebugRelease.xcconfig: 9769 9770 2009-03-13 Mark Rowe <mrowe (a] apple.com> 9771 9772 Reviewed by David Kilzer. 9773 9774 Prevent AllInOneFile.cpp and ProfileGenerator.cpp from rebuilding unnecessarily when 9775 switching between building in Xcode and via build-webkit. 9776 9777 build-webkit passes FEATURE_DEFINES to xcodebuild, resulting in it being present in the 9778 Derived Sources build settings. When building in Xcode, this setting isn't present so 9779 Xcode reruns the script build phases. This results in a new version of TracingDtrace.h 9780 being generated, and the files that include it being rebuilt. 9781 9782 * JavaScriptCore.xcodeproj/project.pbxproj: Don't regenerate TracingDtrace.h if it is 9783 already newer than the input file. 9784 9785 2009-03-13 Norbert Leser <norbert.leser (a] nokia.com> 9786 9787 Reviewed by Darin Adler. 9788 9789 Resolved name conflict with globally defined tzname in Symbian. 9790 Replaced with different name instead of using namespace qualifier 9791 (appeared to be less clumsy). 9792 9793 * runtime/DateMath.cpp: 9794 9795 2009-03-12 Mark Rowe <mrowe (a] apple.com> 9796 9797 Reviewed by Darin Adler. 9798 9799 <rdar://problem/6548446> TCMalloc_SystemRelease should use madvise rather than re-mmaping span of pages 9800 9801 * wtf/FastMalloc.cpp: 9802 (WTF::mergeDecommittedStates): If either of the spans has been released to the system, release the other 9803 span as well so that the flag in the merged span is accurate. 9804 * wtf/Platform.h: 9805 * wtf/TCSystemAlloc.cpp: Track decommitted spans when using MADV_FREE_REUSABLE / MADV_FREE_REUSE. 9806 (TCMalloc_SystemRelease): Use madvise with MADV_FREE_REUSABLE when it is available. 9807 (TCMalloc_SystemCommit): Use madvise with MADV_FREE_REUSE when it is available. 9808 * wtf/TCSystemAlloc.h: 9809 9810 2009-03-12 Adam Treat <adam.treat (a] torchmobile.com> 9811 9812 Reviewed by NOBODY (Build fix). 9813 9814 Include string.h for strlen usage. 9815 9816 * wtf/Threading.cpp: 9817 9818 2009-03-12 David Kilzer <ddkilzer (a] apple.com> 9819 9820 Add NO_RETURN attribute to runInteractive() when not using readline 9821 9822 Reviewed by Darin Adler. 9823 9824 * jsc.cpp: 9825 (runInteractive): If the readline library is not used, this method 9826 will never return, thus the NO_RETURN attribute is needed to prevent 9827 a gcc warning. 9828 9829 2009-03-12 Adam Roben <aroben (a] apple.com> 9830 9831 Adopt setThreadNameInternal on Windows 9832 9833 Also changed a Windows-only assertion about thread name length to an 9834 all-platform log message. 9835 9836 Reviewed by Adam Treat. 9837 9838 * wtf/Threading.cpp: 9839 (WTF::createThread): Warn if the thread name is longer than 31 9840 characters, as Visual Studio will truncate names longer than that 9841 length. 9842 9843 * wtf/ThreadingWin.cpp: 9844 (WTF::setThreadNameInternal): Renamed from setThreadName and changed 9845 to always operate on the current thread. 9846 (WTF::initializeThreading): Changed to use setThreadNameInternal. 9847 (WTF::createThreadInternal): Removed call to setThreadName. This is 9848 now handled by threadEntryPoint and setThreadNameInternal. 9849 9850 2009-03-11 David Kilzer <ddkilzer (a] apple.com> 9851 9852 Clarify comments regarding order of FEATURE_DEFINES 9853 9854 Rubber-stamped by Mark Rowe. 9855 9856 * Configurations/JavaScriptCore.xcconfig: Added warning about 9857 the consequences when FEATURE_DEFINES are not kept in sync. 9858 9859 2009-03-11 Dan Bernstein <mitz (a] apple.com> 9860 9861 Reviewed by Darin Adler. 9862 9863 - WTF support for fixing <rdar://problem/3919124> Thai text selection 9864 in Safari is incorrect 9865 9866 * wtf/unicode/icu/UnicodeIcu.h: 9867 (WTF::Unicode::hasLineBreakingPropertyComplexContext): Added. Returns 9868 whether the character has Unicode line breaking property value SA 9869 ("Complex Context"). 9870 * wtf/unicode/qt4/UnicodeQt4.h: 9871 (WTF::Unicode::hasLineBreakingPropertyComplexContext): Added an 9872 implementation that always returns false. 9873 9874 2009-03-11 Darin Adler <darin (a] apple.com> 9875 9876 Reviewed by Mark Rowe. 9877 9878 Give threads names on platforms with pthread_setname_np. 9879 9880 * wtf/Threading.cpp: 9881 (WTF::NewThreadContext::NewThreadContext): Initialize thread name. 9882 (WTF::threadEntryPoint): Call setThreadNameInternal. 9883 (WTF::createThread): Pass thread name. 9884 9885 * wtf/Threading.h: Added new comments, setThreadNameInternal. 9886 9887 * wtf/ThreadingGtk.cpp: 9888 (WTF::setThreadNameInternal): Added. Empty. 9889 * wtf/ThreadingNone.cpp: 9890 (WTF::setThreadNameInternal): Added. Empty. 9891 * wtf/ThreadingPthreads.cpp: 9892 (WTF::setThreadNameInternal): Call pthread_setname_np when available. 9893 * wtf/ThreadingQt.cpp: 9894 (WTF::setThreadNameInternal): Added. Empty. 9895 * wtf/ThreadingWin.cpp: 9896 (WTF::setThreadNameInternal): Added. Empty. 9897 9898 2009-03-11 Adam Roben <aroben (a] apple.com> 9899 9900 Change the Windows implementation of ThreadSpecific to use functions 9901 instead of extern globals 9902 9903 This will make it easier to export ThreadSpecific from WebKit. 9904 9905 Reviewed by John Sullivan. 9906 9907 * API/JSBase.cpp: 9908 (JSEvaluateScript): 9909 Touched this file to force ThreadSpecific.h to be copied into 9910 $WebKitOutputDir. 9911 9912 * wtf/ThreadSpecific.h: Replaced g_tls_key_count with tlsKeyCount() 9913 and g_tls_keys with tlsKeys(). 9914 9915 (WTF::::ThreadSpecific): 9916 (WTF::::~ThreadSpecific): 9917 (WTF::::get): 9918 (WTF::::set): 9919 (WTF::::destroy): 9920 Updated to use the new functions. 9921 9922 * wtf/ThreadSpecificWin.cpp: 9923 (WTF::tlsKeyCount): 9924 (WTF::tlsKeys): 9925 Added. 9926 9927 (WTF::ThreadSpecificThreadExit): Changed to use the new functions. 9928 9929 2009-03-10 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 9930 9931 Reviewed by Geoff Garen. 9932 9933 Bug 24291: REGRESSION (r38635): Single line JavaScript comment prevents HTML button click handler execution 9934 <https://bugs.webkit.org/show_bug.cgi?id=24291> 9935 <rdar://problem/6663472> 9936 9937 Add an extra newline to the end of the body of the program text constructed 9938 by the Function constructor for parsing. This allows single line comments to 9939 be handled correctly by the parser. 9940 9941 * runtime/FunctionConstructor.cpp: 9942 (JSC::constructFunction): 9943 9944 2009-03-09 Oliver Hunt <oliver (a] apple.com> 9945 9946 Reviewed by Gavin Barraclough. 9947 9948 Bug 24447: REGRESSION (r41508): Google Maps does not complete initialization 9949 <rdar://problem/6657774> 9950 9951 r41508 actually exposed a pre-existing bug where we were not invalidating the result 9952 register cache at jump targets. This causes problems when condition loads occur in an 9953 expression -- namely through the ?: and || operators. This patch corrects these issues 9954 by marking the target of all forward jumps as being a jump target, and then clears the 9955 result register cache when ever it starts generating code for a targeted instruction. 9956 9957 I do not believe it is possible to cause this class of failure outside of a single 9958 expression, and expressions only provide forward branches, so this should resolve this 9959 entire class of bug. That said i've included a test case that gets as close as possible 9960 to hitting this bug with a back branch, to hopefully prevent anyone from introducing the 9961 problem in future. 9962 9963 * assembler/AbstractMacroAssembler.h: 9964 (JSC::AbstractMacroAssembler::Label::isUsed): 9965 (JSC::AbstractMacroAssembler::Label::used): 9966 * assembler/X86Assembler.h: 9967 (JSC::X86Assembler::JmpDst::JmpDst): 9968 (JSC::X86Assembler::JmpDst::isUsed): 9969 (JSC::X86Assembler::JmpDst::used): 9970 * jit/JIT.cpp: 9971 (JSC::JIT::privateCompileMainPass): 9972 9973 2009-03-09 David Levin <levin (a] chromium.org> 9974 9975 Reviewed by Darin Adler. 9976 9977 Bug 23175: String and UString should be able to share a UChar* buffer. 9978 <https://bugs.webkit.org/show_bug.cgi?id=23175> 9979 9980 Add CrossThreadRefCounted. 9981 9982 * wtf/CrossThreadRefCounted.h: Added. 9983 (WTF::CrossThreadRefCounted::create): 9984 (WTF::CrossThreadRefCounted::isShared): 9985 (WTF::CrossThreadRefCounted::dataAccessMustBeThreadSafe): 9986 (WTF::CrossThreadRefCounted::mayBePassedToAnotherThread): 9987 (WTF::CrossThreadRefCounted::CrossThreadRefCounted): 9988 (WTF::CrossThreadRefCounted::~CrossThreadRefCounted): 9989 (WTF::CrossThreadRefCounted::ref): 9990 (WTF::CrossThreadRefCounted::deref): 9991 (WTF::CrossThreadRefCounted::release): 9992 (WTF::CrossThreadRefCounted::copy): 9993 (WTF::CrossThreadRefCounted::threadSafeDeref): 9994 * wtf/RefCounted.h: 9995 * wtf/Threading.h: 9996 (WTF::ThreadSafeSharedBase::ThreadSafeSharedBase): 9997 (WTF::ThreadSafeSharedBase::derefBase): 9998 (WTF::ThreadSafeShared::ThreadSafeShared): 9999 (WTF::ThreadSafeShared::deref): 10000 10001 2009-03-09 Laszlo Gombos <laszlo.1.gombos (a] nokia.com> 10002 10003 Reviewed by George Staikos. 10004 10005 https://bugs.webkit.org/show_bug.cgi?id=24353 10006 Allow to overrule default build options for Qt build. 10007 10008 * JavaScriptCore.pri: Allow to overrule ENABLE_JIT 10009 10010 2009-03-08 Oliver Hunt <oliver (a] apple.com> 10011 10012 Reviewed by NOBODY (build fix). 10013 10014 Build fix. 10015 10016 * runtime/ArrayPrototype.cpp: 10017 (JSC::arrayProtoFuncConcat): 10018 10019 2009-03-01 Oliver Hunt <oliver (a] apple.com> 10020 10021 Reviewed by Cameron Zwarich. 10022 10023 Bug 24268: RuntimeArray is not a fully implemented JSArray 10024 <https://bugs.webkit.org/show_bug.cgi?id=24268> 10025 10026 Don't cast a type to JSArray, just because it reportsArray as a supertype 10027 in the JS type system. Doesn't appear feasible to create a testcase 10028 unfortunately as setting up the failure conditions requires internal access 10029 to JSC not present in DRT. 10030 10031 * runtime/ArrayPrototype.cpp: 10032 (JSC::arrayProtoFuncConcat): 10033 10034 2009-03-06 Gavin Barraclough <barraclough (a] apple.com> 10035 10036 Reviewed by Oliver Hunt. 10037 10038 When preforming an op_mov, preserve any existing register mapping. 10039 10040 ~0.5% progression on v8 tests x86-64. 10041 10042 * jit/JIT.cpp: 10043 (JSC::JIT::privateCompileMainPass): 10044 10045 2009-03-05 Simone Fiorentino <simone.fiorentino (a] consulenti.fastweb.it> 10046 10047 Bug 24382: request to add SH4 platform 10048 10049 <https://bugs.webkit.org/show_bug.cgi?id=24382> 10050 10051 Reviewed by David Kilzer. 10052 10053 * wtf/Platform.h: Added support for SH4 platform. 10054 10055 2009-03-05 Gavin Barraclough <barraclough (a] apple.com> 10056 10057 Reviewed by Oliver Hunt. 10058 10059 Writes of constant values to SF registers should be made with direct memory 10060 writes where possible, rather than moving the value via a hardware register. 10061 10062 ~3% win on SunSpider tests on x86, ~1.5% win on v8 tests on x86-64. 10063 10064 * assembler/MacroAssemblerX86_64.h: 10065 (JSC::MacroAssemblerX86_64::storePtr): 10066 * assembler/X86Assembler.h: 10067 (JSC::X86Assembler::movq_i32m): 10068 * jit/JIT.cpp: 10069 (JSC::JIT::privateCompileMainPass): 10070 10071 2009-03-05 Mark Rowe <mrowe (a] apple.com> 10072 10073 Fix the build. 10074 10075 Sprinkle "static" around NumberConstructor.cpp in order to please the compiler. 10076 10077 * runtime/NumberConstructor.cpp: 10078 (JSC::numberConstructorNaNValue): 10079 (JSC::numberConstructorNegInfinity): 10080 (JSC::numberConstructorPosInfinity): 10081 (JSC::numberConstructorMaxValue): 10082 (JSC::numberConstructorMinValue): 10083 10084 2009-03-04 Mark Rowe <mrowe (a] apple.com> 10085 10086 Reviewed by Oliver Hunt. 10087 10088 <rdar://problem/6354858> FastMallocZone's enumeration code reports fragmented administration space 10089 10090 The handling of MALLOC_ADMIN_REGION_RANGE_TYPE in FastMalloc's zone was incorrect. It was attempting 10091 to record the memory containing and individual span as an administrative region, when all memory 10092 allocated via MetaDataAlloc should in fact be recorded. This was causing memory regions allocated 10093 via MetaDataAlloc to appear as "VM_ALLOCATE ?" in vmmap output. They are now correctly reported as 10094 "MALLOC_OTHER" regions associated with the JavaScriptCore FastMalloc zone. 10095 10096 Memory is allocated via MetaDataAlloc from two locations: PageHeapAllocator, and TCMalloc_PageMap{2,3}. 10097 These two cases are handled differently. 10098 10099 PageHeapAllocator is extended to keep a linked list of memory regions that it has allocated. The 10100 first object in an allocated region contains the link to the previously allocated region. To record 10101 the administrative regions of a PageHeapAllocator we can simply walk the linked list and record 10102 each allocated region we encounter. 10103 10104 TCMalloc_PageMaps allocate memory via MetaDataAlloc to store each level of the radix tree. To record 10105 the administrative regions of a TCMalloc_PageMap we walk the tree and record the storage used for nodes 10106 at each position rather than the nodes themselves. 10107 10108 A small performance improvement is achieved by coalescing adjacent memory regions inside the PageMapMemoryUsageRecorder 10109 so that fewer calls in to the range recorder are necessary. We further reduce the number of calls to the 10110 range recorder by aggregating the in-use ranges of a given memory region into a local buffer before recording 10111 them with a single call. A similar approach is also used by AdminRegionRecorder. 10112 10113 * wtf/FastMalloc.cpp: 10114 (WTF::PageHeapAllocator::Init): 10115 (WTF::PageHeapAllocator::New): 10116 (WTF::PageHeapAllocator::recordAdministrativeRegions): 10117 (WTF::TCMallocStats::FreeObjectFinder::isFreeObject): 10118 (WTF::TCMallocStats::PageMapMemoryUsageRecorder::~PageMapMemoryUsageRecorder): 10119 (WTF::TCMallocStats::PageMapMemoryUsageRecorder::recordPendingRegions): 10120 (WTF::TCMallocStats::PageMapMemoryUsageRecorder::visit): 10121 (WTF::TCMallocStats::AdminRegionRecorder::AdminRegionRecorder): 10122 (WTF::TCMallocStats::AdminRegionRecorder::recordRegion): 10123 (WTF::TCMallocStats::AdminRegionRecorder::visit): 10124 (WTF::TCMallocStats::AdminRegionRecorder::recordPendingRegions): 10125 (WTF::TCMallocStats::AdminRegionRecorder::~AdminRegionRecorder): 10126 (WTF::TCMallocStats::FastMallocZone::enumerate): 10127 (WTF::TCMallocStats::FastMallocZone::FastMallocZone): 10128 (WTF::TCMallocStats::FastMallocZone::init): 10129 * wtf/TCPageMap.h: 10130 (TCMalloc_PageMap2::visitValues): 10131 (TCMalloc_PageMap2::visitAllocations): 10132 (TCMalloc_PageMap3::visitValues): 10133 (TCMalloc_PageMap3::visitAllocations): 10134 10135 2009-03-04 Antti Koivisto <antti (a] apple.com> 10136 10137 Reviewed by Dave Hyatt. 10138 10139 https://bugs.webkit.org/show_bug.cgi?id=24359 10140 Repaint throttling mechanism 10141 10142 Set ENABLE_REPAINT_THROTTLING to 0 by default. 10143 10144 * wtf/Platform.h: 10145 10146 2009-03-03 David Kilzer <ddkilzer (a] apple.com> 10147 10148 <rdar://problem/6581203> WebCore and WebKit should install the same set of headers during installhdrs phase as build phase 10149 10150 Reviewed by Mark Rowe. 10151 10152 * Configurations/Base.xcconfig: Defined REAL_PLATFORM_NAME based 10153 on PLATFORM_NAME to work around the missing definition on Tiger. 10154 Updated HAVE_DTRACE to use REAL_PLATFORM_NAME. 10155 10156 2009-03-03 Kevin McCullough <kmccullough (a] apple.com> 10157 10158 Reviewed by Oliver Hunt. 10159 10160 <rdar://problem/6639110> console.profile() doesn't work without a title 10161 10162 * profiler/Profiler.cpp: 10163 (JSC::Profiler::startProfiling): assert if there is not title to ensure 10164 we don't start profiling without one. 10165 10166 2009-03-02 Sam Weinig <sam (a] webkit.org> 10167 10168 Reviewed by Mark Rowe. 10169 10170 Enable Geolocation (except on Tiger and Leopard). 10171 10172 * Configurations/JavaScriptCore.xcconfig: 10173 10174 2009-03-01 David Kilzer <ddkilzer (a] apple.com> 10175 10176 <rdar://problem/6635688> Move HAVE_DTRACE check to Base.xcconfig 10177 10178 Reviewed by Mark Rowe. 10179 10180 * Configurations/Base.xcconfig: Set HAVE_DTRACE Xcode variable 10181 based on PLATFORM_NAME and MAC_OS_X_VERSION_MAJOR. Also define 10182 it as a preprocessor macro by modifying 10183 GCC_PREPROCESSOR_DEFINITIONS. 10184 * JavaScriptCore.xcodeproj/project.pbxproj: Changed "Generate 10185 DTrace header" script phase to check for HAVE_DTRACE instead of 10186 MACOSX_DEPLOYMENT_TARGET. 10187 * wtf/Platform.h: Removed definition of HAVE_DTRACE macro since 10188 it's defined in Base.xcconfig now. 10189 10190 2009-03-01 Horia Olaru <olaru (a] adobe.com> 10191 10192 By looking in grammar.y there are only a few types of statement nodes 10193 on which the debugger should stop. 10194 10195 Removed isBlock and isLoop virtual calls. No need to emit debug hooks in 10196 the "statementListEmitCode" method as long as the necessary hooks can be 10197 added in each "emitCode". 10198 10199 https://bugs.webkit.org/show_bug.cgi?id=21073 10200 10201 Reviewed by Kevin McCullough. 10202 10203 * parser/Nodes.cpp: 10204 (JSC::ConstStatementNode::emitBytecode): 10205 (JSC::statementListEmitCode): 10206 (JSC::EmptyStatementNode::emitBytecode): 10207 (JSC::ExprStatementNode::emitBytecode): 10208 (JSC::VarStatementNode::emitBytecode): 10209 (JSC::IfNode::emitBytecode): 10210 (JSC::IfElseNode::emitBytecode): 10211 (JSC::DoWhileNode::emitBytecode): 10212 (JSC::WhileNode::emitBytecode): 10213 (JSC::ForNode::emitBytecode): 10214 (JSC::ForInNode::emitBytecode): 10215 (JSC::ContinueNode::emitBytecode): 10216 (JSC::BreakNode::emitBytecode): 10217 (JSC::ReturnNode::emitBytecode): 10218 (JSC::WithNode::emitBytecode): 10219 (JSC::SwitchNode::emitBytecode): 10220 (JSC::LabelNode::emitBytecode): 10221 (JSC::ThrowNode::emitBytecode): 10222 (JSC::TryNode::emitBytecode): 10223 * parser/Nodes.h: 10224 10225 2009-02-26 Gavin Barraclough <barraclough (a] apple.com> 10226 10227 Reviewed by Geoff Garen. 10228 10229 Fix bug #23614. Switches on double precision values were incorrectly 10230 truncating the scrutinee value. E.g.: 10231 10232 switch (1.1) { case 1: print("FAIL"); } 10233 10234 Was resulting in FAIL. 10235 10236 * interpreter/Interpreter.cpp: 10237 (JSC::Interpreter::privateExecute): 10238 * jit/JITStubs.cpp: 10239 (JSC::JITStubs::cti_op_switch_imm): 10240 10241 2009-02-26 Gavin Barraclough <barraclough (a] apple.com> 10242 10243 Reviewed by Oliver Hunt. 10244 10245 Integer Immediate representation need not be canonical in x86 JIT code. 10246 On x86-64 we already have loosened the requirement that the int immediate 10247 representation in canonical, we should bring x86 into line. 10248 10249 This patch is a minor (~0.5%) improvement on sunspider & v8-tests, and 10250 should reduce memory footoprint (reduces JIT code size). 10251 10252 * jit/JIT.cpp: 10253 (JSC::JIT::compileOpStrictEq): 10254 (JSC::JIT::privateCompileSlowCases): 10255 * jit/JIT.h: 10256 (JSC::JIT::emitJumpIfImmediateNumber): 10257 (JSC::JIT::emitJumpIfNotImmediateNumber): 10258 * jit/JITArithmetic.cpp: 10259 (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): 10260 (JSC::JIT::compileBinaryArithOp): 10261 10262 2009-02-26 Carol Szabo <carol.szabo (a] nokia.com> 10263 10264 Reviewed by Darin Adler. 10265 10266 https://bugs.webkit.org/show_bug.cgi?id=24099 10267 ARM Compiler Warnings in pcre_exec.cpp 10268 10269 * pcre/pcre_exec.cpp: 10270 (match): 10271 10272 2009-02-25 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 10273 10274 Reviewed by Gavin Barraclough. 10275 10276 Bug 24086: Regression (r40993): WebKit crashes after logging in to lists.zenbe 10277 <https://bugs.webkit.org/show_bug.cgi?id=24086> 10278 <rdar://problem/6625111> 10279 10280 The numeric sort optimization in r40993 generated bytecode for a function 10281 without generating JIT code. This breaks an assumption in some parts of 10282 the JIT's function calling logic that the presence of a CodeBlock implies 10283 the existence of JIT code. 10284 10285 In order to fix this, we simply generate JIT code whenever we check whether 10286 a function is a numeric sort function. This only incurs an additional cost 10287 in the case when the function is a numeric sort function, in which case it 10288 is not expensive to generate JIT code for it. 10289 10290 * runtime/ArrayPrototype.cpp: 10291 (JSC::isNumericCompareFunction): 10292 10293 2009-02-25 Geoffrey Garen <ggaren (a] apple.com> 10294 10295 Reviewed by Maciej Stachowiak. 10296 10297 Fixed <rdar://problem/6611174> REGRESSION (r36701): Unable to select 10298 messages on hotmail (24052) 10299 10300 The bug was that for-in enumeration used a cached prototype chain without 10301 validating that it was up-to-date. 10302 10303 This led me to refactor prototype chain caching so it was easier to work 10304 with and harder to get wrong. 10305 10306 After a bit of inlining, this patch is performance-neutral on SunSpider 10307 and the v8 benchmarks. 10308 10309 * interpreter/Interpreter.cpp: 10310 (JSC::Interpreter::tryCachePutByID): 10311 (JSC::Interpreter::tryCacheGetByID): 10312 * jit/JITStubs.cpp: 10313 (JSC::JITStubs::tryCachePutByID): 10314 (JSC::JITStubs::tryCacheGetByID): 10315 (JSC::JITStubs::cti_op_get_by_id_proto_list): Use the new refactored goodness. See 10316 lines beginning with "-" and smile. 10317 10318 * runtime/JSGlobalObject.h: 10319 (JSC::Structure::prototypeForLookup): A shout out to const. 10320 10321 * runtime/JSPropertyNameIterator.h: 10322 (JSC::JSPropertyNameIterator::next): We can use a pointer comparison to 10323 see if our cached structure chain is equal to the object's structure chain, 10324 since in the case of a cache hit, we share references to the same structure 10325 chain. 10326 10327 * runtime/Operations.h: 10328 (JSC::countPrototypeChainEntriesAndCheckForProxies): Use the new refactored 10329 goodness. 10330 10331 * runtime/PropertyNameArray.h: 10332 (JSC::PropertyNameArray::PropertyNameArray): 10333 (JSC::PropertyNameArray::setShouldCache): 10334 (JSC::PropertyNameArray::shouldCache): Renamed "cacheable" to "shouldCache" 10335 to communicate that the client is specifying a recommendation, not a 10336 capability. 10337 10338 * runtime/Structure.cpp: 10339 (JSC::Structure::Structure): No need to initialize a RefPtr. 10340 (JSC::Structure::getEnumerablePropertyNames): Moved some code into helper 10341 functions. 10342 10343 (JSC::Structure::prototypeChain): New centralized accessor for a prototype 10344 chain. Revalidates on every access, since the objects in the prototype 10345 chain may have mutated. 10346 10347 (JSC::Structure::isValid): Helper function for revalidating a cached 10348 prototype chain. 10349 10350 (JSC::Structure::getEnumerableNamesFromPropertyTable): 10351 (JSC::Structure::getEnumerableNamesFromClassInfoTable): Factored out of 10352 getEnumerablePropertyNames. 10353 10354 * runtime/Structure.h: 10355 10356 * runtime/StructureChain.cpp: 10357 (JSC::StructureChain::StructureChain): 10358 * runtime/StructureChain.h: 10359 (JSC::StructureChain::create): No need for structureChainsAreEqual, since 10360 we use pointer equality now. Refactored StructureChain to make a little 10361 more sense and eliminate special cases for null prototypes. 10362 10363 2009-02-25 Steve Falkenburg <sfalken (a] apple.com> 10364 10365 Use timeBeginPeriod to enable timing resolution greater than 16ms in command line jsc for Windows. 10366 Allows more accurate reporting of benchmark times via command line jsc.exe. Doesn't affect WebKit's use of JavaScriptCore. 10367 10368 Reviewed by Adam Roben. 10369 10370 * jsc.cpp: 10371 (main): 10372 10373 2009-02-24 Geoffrey Garen <ggaren (a] apple.com> 10374 10375 Build fix? 10376 10377 * GNUmakefile.am: 10378 10379 2009-02-24 Mark Rowe <mrowe (a] apple.com> 10380 10381 Reviewed by Oliver Hunt. 10382 10383 <rdar://problem/6259220> Rename AVAILABLE_AFTER_WEBKIT_VERSION_3_1 (etc.) to match the other macros 10384 10385 * API/JSBasePrivate.h: 10386 * API/JSContextRef.h: 10387 * API/JSObjectRef.h: 10388 * API/WebKitAvailability.h: 10389 10390 2009-02-23 Geoffrey Garen <ggaren (a] apple.com> 10391 10392 Reviewed by Sam Weinig. 10393 10394 Next step in splitting JIT functionality out of the Interpreter class: 10395 Moved vptr storage from Interpreter to JSGlobalData, so it could be shared 10396 between Interpreter and JITStubs, and moved the *Trampoline JIT stubs 10397 into the JITStubs class. Also added a VPtrSet class to encapsulate vptr 10398 hacks during JSGlobalData initialization. 10399 10400 SunSpider says 0.4% faster. Meh. 10401 10402 * JavaScriptCore.exp: 10403 * JavaScriptCore.xcodeproj/project.pbxproj: 10404 * interpreter/Interpreter.cpp: 10405 (JSC::Interpreter::Interpreter): 10406 (JSC::Interpreter::tryCacheGetByID): 10407 (JSC::Interpreter::privateExecute): 10408 * interpreter/Interpreter.h: 10409 * jit/JIT.cpp: 10410 (JSC::JIT::privateCompileMainPass): 10411 (JSC::JIT::privateCompile): 10412 (JSC::JIT::privateCompileCTIMachineTrampolines): 10413 * jit/JIT.h: 10414 (JSC::JIT::compileCTIMachineTrampolines): 10415 * jit/JITCall.cpp: 10416 (JSC::JIT::compileOpCall): 10417 (JSC::JIT::compileOpCallSlowCase): 10418 * jit/JITPropertyAccess.cpp: 10419 (JSC::JIT::privateCompilePatchGetArrayLength): 10420 * jit/JITStubs.cpp: 10421 (JSC::JITStubs::JITStubs): 10422 (JSC::JITStubs::tryCacheGetByID): 10423 (JSC::JITStubs::cti_vm_dontLazyLinkCall): 10424 (JSC::JITStubs::cti_op_get_by_val): 10425 (JSC::JITStubs::cti_op_get_by_val_byte_array): 10426 (JSC::JITStubs::cti_op_put_by_val): 10427 (JSC::JITStubs::cti_op_put_by_val_array): 10428 (JSC::JITStubs::cti_op_put_by_val_byte_array): 10429 (JSC::JITStubs::cti_op_is_string): 10430 * jit/JITStubs.h: 10431 (JSC::JITStubs::ctiArrayLengthTrampoline): 10432 (JSC::JITStubs::ctiStringLengthTrampoline): 10433 (JSC::JITStubs::ctiVirtualCallPreLink): 10434 (JSC::JITStubs::ctiVirtualCallLink): 10435 (JSC::JITStubs::ctiVirtualCall): 10436 * runtime/ArrayPrototype.cpp: 10437 (JSC::arrayProtoFuncPop): 10438 (JSC::arrayProtoFuncPush): 10439 * runtime/FunctionPrototype.cpp: 10440 (JSC::functionProtoFuncApply): 10441 * runtime/JSArray.h: 10442 (JSC::isJSArray): 10443 * runtime/JSByteArray.h: 10444 (JSC::asByteArray): 10445 (JSC::isJSByteArray): 10446 * runtime/JSCell.h: 10447 * runtime/JSFunction.h: 10448 * runtime/JSGlobalData.cpp: 10449 (JSC::VPtrSet::VPtrSet): 10450 (JSC::JSGlobalData::JSGlobalData): 10451 (JSC::JSGlobalData::create): 10452 (JSC::JSGlobalData::sharedInstance): 10453 * runtime/JSGlobalData.h: 10454 * runtime/JSString.h: 10455 (JSC::isJSString): 10456 * runtime/Operations.h: 10457 (JSC::jsLess): 10458 (JSC::jsLessEq): 10459 * wrec/WREC.cpp: 10460 (JSC::WREC::Generator::compileRegExp): 10461 10462 2009-02-23 Csaba Osztrogonac <oszi (a] inf.u-szeged.hu> 10463 10464 Reviewed by Oliver Hunt. 10465 10466 Bug 23787: Allow JIT to generate SSE2 code if using GCC 10467 <https://bugs.webkit.org/show_bug.cgi?id=23787> 10468 10469 GCC version of the cpuid check. 10470 10471 * jit/JITArithmetic.cpp: 10472 (JSC::isSSE2Present): previous assembly code fixed. 10473 10474 2009-02-23 David Levin <levin (a] chromium.org> 10475 10476 Reviewed by Alexey Proskuryakov. 10477 10478 Bug 24047: Need to simplify nested if's in WorkerRunLoop::runInMode 10479 <https://bugs.webkit.org/show_bug.cgi?id=24047> 10480 10481 * wtf/MessageQueue.h: 10482 (WTF::MessageQueue::infiniteTime): 10483 Allows for one to call waitForMessageFilteredWithTimeout and wait forever. 10484 10485 (WTF::MessageQueue::alwaysTruePredicate): 10486 (WTF::MessageQueue::waitForMessage): 10487 Made waitForMessage call waitForMessageFilteredWithTimeout, so that there is less 10488 duplicate code. 10489 10490 (WTF::MessageQueue::waitForMessageFilteredWithTimeout): 10491 10492 * wtf/ThreadingQt.cpp: 10493 (WTF::ThreadCondition::timedWait): 10494 * wtf/ThreadingWin.cpp: 10495 (WTF::ThreadCondition::timedWait): 10496 Made these two implementations consistent with the pthread and gtk implementations. 10497 Currently, the time calculations would overflow when passed large values. 10498 10499 2009-02-23 Jeremy Moskovich <jeremy (a] chromium.org> 10500 10501 Reviewed by Adam Roben. 10502 10503 https://bugs.webkit.org/show_bug.cgi?id=24096 10504 PLATFORM(MAC)->PLATFORM(CF) since we want to use the CF functions in Chrome on OS X. 10505 10506 * wtf/CurrentTime.cpp: 10507 10508 2009-02-22 Geoffrey Garen <ggaren (a] apple.com> 10509 10510 Build fix? 10511 10512 * GNUmakefile.am: 10513 10514 2009-02-22 Geoffrey Garen <ggaren (a] apple.com> 10515 10516 Build fix. 10517 10518 * GNUmakefile.am: 10519 10520 2009-02-22 Geoffrey Garen <ggaren (a] apple.com> 10521 10522 Reviewed by Sam Weinig. 10523 10524 Next step in splitting JIT functionality out of the Interpreter class: 10525 Created a JITStubs class and renamed Interpreter::cti_* to JITStubs::cti_*. 10526 10527 Also, moved timeout checking into its own class, located in JSGlobalData, 10528 so both the Interpreter and the JIT could have access to it. 10529 10530 * JavaScriptCore.exp: 10531 * JavaScriptCore.pri: 10532 * JavaScriptCore.scons: 10533 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 10534 * JavaScriptCore.xcodeproj/project.pbxproj: 10535 * JavaScriptCoreSources.bkl: 10536 * interpreter/CallFrame.h: 10537 * interpreter/Interpreter.cpp: 10538 (JSC::Interpreter::Interpreter): 10539 (JSC::Interpreter::privateExecute): 10540 * interpreter/Interpreter.h: 10541 * interpreter/Register.h: 10542 * jit/JIT.cpp: 10543 (JSC::): 10544 (JSC::JIT::emitTimeoutCheck): 10545 (JSC::JIT::privateCompileMainPass): 10546 (JSC::JIT::privateCompileSlowCases): 10547 (JSC::JIT::privateCompile): 10548 (JSC::JIT::privateCompileCTIMachineTrampolines): 10549 * jit/JIT.h: 10550 * jit/JITArithmetic.cpp: 10551 (JSC::JIT::compileFastArithSlow_op_lshift): 10552 (JSC::JIT::compileFastArithSlow_op_rshift): 10553 (JSC::JIT::compileFastArithSlow_op_bitand): 10554 (JSC::JIT::compileFastArithSlow_op_mod): 10555 (JSC::JIT::compileFastArith_op_mod): 10556 (JSC::JIT::compileFastArithSlow_op_post_inc): 10557 (JSC::JIT::compileFastArithSlow_op_post_dec): 10558 (JSC::JIT::compileFastArithSlow_op_pre_inc): 10559 (JSC::JIT::compileFastArithSlow_op_pre_dec): 10560 (JSC::JIT::compileFastArith_op_add): 10561 (JSC::JIT::compileFastArith_op_mul): 10562 (JSC::JIT::compileFastArith_op_sub): 10563 (JSC::JIT::compileBinaryArithOpSlowCase): 10564 (JSC::JIT::compileFastArithSlow_op_add): 10565 (JSC::JIT::compileFastArithSlow_op_mul): 10566 * jit/JITCall.cpp: 10567 (JSC::JIT::compileOpCall): 10568 (JSC::JIT::compileOpCallSlowCase): 10569 * jit/JITPropertyAccess.cpp: 10570 (JSC::JIT::compileGetByIdHotPath): 10571 (JSC::JIT::compilePutByIdHotPath): 10572 (JSC::JIT::compileGetByIdSlowCase): 10573 (JSC::JIT::compilePutByIdSlowCase): 10574 (JSC::JIT::privateCompilePutByIdTransition): 10575 (JSC::JIT::patchGetByIdSelf): 10576 (JSC::JIT::patchPutByIdReplace): 10577 (JSC::JIT::privateCompilePatchGetArrayLength): 10578 (JSC::JIT::privateCompileGetByIdSelf): 10579 (JSC::JIT::privateCompileGetByIdProto): 10580 (JSC::JIT::privateCompileGetByIdChain): 10581 (JSC::JIT::privateCompilePutByIdReplace): 10582 * jit/JITStubs.cpp: 10583 (JSC::JITStubs::tryCachePutByID): 10584 (JSC::JITStubs::tryCacheGetByID): 10585 (JSC::JITStubs::cti_op_convert_this): 10586 (JSC::JITStubs::cti_op_end): 10587 (JSC::JITStubs::cti_op_add): 10588 (JSC::JITStubs::cti_op_pre_inc): 10589 (JSC::JITStubs::cti_timeout_check): 10590 (JSC::JITStubs::cti_register_file_check): 10591 (JSC::JITStubs::cti_op_loop_if_less): 10592 (JSC::JITStubs::cti_op_loop_if_lesseq): 10593 (JSC::JITStubs::cti_op_new_object): 10594 (JSC::JITStubs::cti_op_put_by_id_generic): 10595 (JSC::JITStubs::cti_op_get_by_id_generic): 10596 (JSC::JITStubs::cti_op_put_by_id): 10597 (JSC::JITStubs::cti_op_put_by_id_second): 10598 (JSC::JITStubs::cti_op_put_by_id_fail): 10599 (JSC::JITStubs::cti_op_get_by_id): 10600 (JSC::JITStubs::cti_op_get_by_id_second): 10601 (JSC::JITStubs::cti_op_get_by_id_self_fail): 10602 (JSC::JITStubs::cti_op_get_by_id_proto_list): 10603 (JSC::JITStubs::cti_op_get_by_id_proto_list_full): 10604 (JSC::JITStubs::cti_op_get_by_id_proto_fail): 10605 (JSC::JITStubs::cti_op_get_by_id_array_fail): 10606 (JSC::JITStubs::cti_op_get_by_id_string_fail): 10607 (JSC::JITStubs::cti_op_instanceof): 10608 (JSC::JITStubs::cti_op_del_by_id): 10609 (JSC::JITStubs::cti_op_mul): 10610 (JSC::JITStubs::cti_op_new_func): 10611 (JSC::JITStubs::cti_op_call_JSFunction): 10612 (JSC::JITStubs::cti_op_call_arityCheck): 10613 (JSC::JITStubs::cti_vm_dontLazyLinkCall): 10614 (JSC::JITStubs::cti_vm_lazyLinkCall): 10615 (JSC::JITStubs::cti_op_push_activation): 10616 (JSC::JITStubs::cti_op_call_NotJSFunction): 10617 (JSC::JITStubs::cti_op_create_arguments): 10618 (JSC::JITStubs::cti_op_create_arguments_no_params): 10619 (JSC::JITStubs::cti_op_tear_off_activation): 10620 (JSC::JITStubs::cti_op_tear_off_arguments): 10621 (JSC::JITStubs::cti_op_profile_will_call): 10622 (JSC::JITStubs::cti_op_profile_did_call): 10623 (JSC::JITStubs::cti_op_ret_scopeChain): 10624 (JSC::JITStubs::cti_op_new_array): 10625 (JSC::JITStubs::cti_op_resolve): 10626 (JSC::JITStubs::cti_op_construct_JSConstruct): 10627 (JSC::JITStubs::cti_op_construct_NotJSConstruct): 10628 (JSC::JITStubs::cti_op_get_by_val): 10629 (JSC::JITStubs::cti_op_get_by_val_byte_array): 10630 (JSC::JITStubs::cti_op_resolve_func): 10631 (JSC::JITStubs::cti_op_sub): 10632 (JSC::JITStubs::cti_op_put_by_val): 10633 (JSC::JITStubs::cti_op_put_by_val_array): 10634 (JSC::JITStubs::cti_op_put_by_val_byte_array): 10635 (JSC::JITStubs::cti_op_lesseq): 10636 (JSC::JITStubs::cti_op_loop_if_true): 10637 (JSC::JITStubs::cti_op_negate): 10638 (JSC::JITStubs::cti_op_resolve_base): 10639 (JSC::JITStubs::cti_op_resolve_skip): 10640 (JSC::JITStubs::cti_op_resolve_global): 10641 (JSC::JITStubs::cti_op_div): 10642 (JSC::JITStubs::cti_op_pre_dec): 10643 (JSC::JITStubs::cti_op_jless): 10644 (JSC::JITStubs::cti_op_not): 10645 (JSC::JITStubs::cti_op_jtrue): 10646 (JSC::JITStubs::cti_op_post_inc): 10647 (JSC::JITStubs::cti_op_eq): 10648 (JSC::JITStubs::cti_op_lshift): 10649 (JSC::JITStubs::cti_op_bitand): 10650 (JSC::JITStubs::cti_op_rshift): 10651 (JSC::JITStubs::cti_op_bitnot): 10652 (JSC::JITStubs::cti_op_resolve_with_base): 10653 (JSC::JITStubs::cti_op_new_func_exp): 10654 (JSC::JITStubs::cti_op_mod): 10655 (JSC::JITStubs::cti_op_less): 10656 (JSC::JITStubs::cti_op_neq): 10657 (JSC::JITStubs::cti_op_post_dec): 10658 (JSC::JITStubs::cti_op_urshift): 10659 (JSC::JITStubs::cti_op_bitxor): 10660 (JSC::JITStubs::cti_op_new_regexp): 10661 (JSC::JITStubs::cti_op_bitor): 10662 (JSC::JITStubs::cti_op_call_eval): 10663 (JSC::JITStubs::cti_op_throw): 10664 (JSC::JITStubs::cti_op_get_pnames): 10665 (JSC::JITStubs::cti_op_next_pname): 10666 (JSC::JITStubs::cti_op_push_scope): 10667 (JSC::JITStubs::cti_op_pop_scope): 10668 (JSC::JITStubs::cti_op_typeof): 10669 (JSC::JITStubs::cti_op_is_undefined): 10670 (JSC::JITStubs::cti_op_is_boolean): 10671 (JSC::JITStubs::cti_op_is_number): 10672 (JSC::JITStubs::cti_op_is_string): 10673 (JSC::JITStubs::cti_op_is_object): 10674 (JSC::JITStubs::cti_op_is_function): 10675 (JSC::JITStubs::cti_op_stricteq): 10676 (JSC::JITStubs::cti_op_nstricteq): 10677 (JSC::JITStubs::cti_op_to_jsnumber): 10678 (JSC::JITStubs::cti_op_in): 10679 (JSC::JITStubs::cti_op_push_new_scope): 10680 (JSC::JITStubs::cti_op_jmp_scopes): 10681 (JSC::JITStubs::cti_op_put_by_index): 10682 (JSC::JITStubs::cti_op_switch_imm): 10683 (JSC::JITStubs::cti_op_switch_char): 10684 (JSC::JITStubs::cti_op_switch_string): 10685 (JSC::JITStubs::cti_op_del_by_val): 10686 (JSC::JITStubs::cti_op_put_getter): 10687 (JSC::JITStubs::cti_op_put_setter): 10688 (JSC::JITStubs::cti_op_new_error): 10689 (JSC::JITStubs::cti_op_debug): 10690 (JSC::JITStubs::cti_vm_throw): 10691 * jit/JITStubs.h: 10692 (JSC::): 10693 * runtime/JSFunction.h: 10694 * runtime/JSGlobalData.cpp: 10695 (JSC::JSGlobalData::JSGlobalData): 10696 * runtime/JSGlobalData.h: 10697 * runtime/JSGlobalObject.cpp: 10698 * runtime/JSGlobalObject.h: 10699 * runtime/TimeoutChecker.cpp: Copied from interpreter/Interpreter.cpp. 10700 (JSC::TimeoutChecker::TimeoutChecker): 10701 (JSC::TimeoutChecker::reset): 10702 (JSC::TimeoutChecker::didTimeOut): 10703 * runtime/TimeoutChecker.h: Copied from interpreter/Interpreter.h. 10704 (JSC::TimeoutChecker::setTimeoutInterval): 10705 (JSC::TimeoutChecker::ticksUntilNextCheck): 10706 (JSC::TimeoutChecker::start): 10707 (JSC::TimeoutChecker::stop): 10708 10709 2009-02-20 Gustavo Noronha Silva <gns (a] gnome.org> 10710 10711 Unreviewed build fix after r41100. 10712 10713 * GNUmakefile.am: 10714 10715 2009-02-20 Oliver Hunt <oliver (a] apple.com> 10716 10717 Reviewed by Mark Rowe. 10718 10719 <rdar://problem/6606660> 2==null returns true in 64bit jit 10720 10721 Code for op_eq_null and op_neq_null was incorrectly performing 10722 a 32bit compare, which truncated the type tag from an integer 10723 immediate, leading to incorrect behaviour. 10724 10725 * assembler/MacroAssembler.h: 10726 (JSC::MacroAssembler::setPtr): 10727 * assembler/MacroAssemblerX86_64.h: 10728 (JSC::MacroAssemblerX86_64::setPtr): 10729 * jit/JIT.cpp: 10730 (JSC::JIT::privateCompileMainPass): 10731 10732 2009-02-19 Geoffrey Garen <ggaren (a] apple.com> 10733 10734 Reviewed by Gavin Barraclough. 10735 10736 First step in splitting JIT functionality out of the Interpreter class: 10737 Created JITStubs.h/.cpp, and moved Interpreter::cti_* into JITStubs.cpp. 10738 10739 Functions that the Interpreter and JITStubs share moved to Operations.h/.cpp. 10740 10741 * GNUmakefile.am: 10742 * JavaScriptCore.pri: 10743 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 10744 * JavaScriptCore.xcodeproj/project.pbxproj: 10745 * interpreter/Interpreter.cpp: 10746 (JSC::Interpreter::resolveBase): 10747 (JSC::Interpreter::checkTimeout): 10748 (JSC::Interpreter::privateExecute): 10749 * interpreter/Interpreter.h: 10750 * jit/JITStubs.cpp: Copied from interpreter/Interpreter.cpp. 10751 (JSC::Interpreter::cti_op_resolve_base): 10752 * jit/JITStubs.h: Copied from interpreter/Interpreter.h. 10753 * runtime/Operations.cpp: 10754 (JSC::jsAddSlowCase): 10755 (JSC::jsTypeStringForValue): 10756 (JSC::jsIsObjectType): 10757 (JSC::jsIsFunctionType): 10758 * runtime/Operations.h: 10759 (JSC::jsLess): 10760 (JSC::jsLessEq): 10761 (JSC::jsAdd): 10762 (JSC::cachePrototypeChain): 10763 (JSC::countPrototypeChainEntriesAndCheckForProxies): 10764 (JSC::resolveBase): 10765 10766 2009-02-19 Gavin Barraclough <barraclough (a] apple.com> 10767 10768 Reviewed by Oliver Hunt. 10769 10770 Fix for x86-64. Where the JavaScriptCore text segment lies outside 10771 a 2gb range of the heap containing JIT generated code, callbacks 10772 from JIT code to the stub functions in Interpreter will be incorrectly 10773 linked. 10774 10775 No performance impact on Sunspider, 1% regression on v8-tests, 10776 due to a 3% regression on richards. 10777 10778 * assembler/AbstractMacroAssembler.h: 10779 (JSC::AbstractMacroAssembler::Call::Call): 10780 (JSC::AbstractMacroAssembler::Jump::link): 10781 (JSC::AbstractMacroAssembler::Jump::linkTo): 10782 (JSC::AbstractMacroAssembler::CodeLocationJump::relink): 10783 (JSC::AbstractMacroAssembler::CodeLocationCall::relink): 10784 (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): 10785 (JSC::AbstractMacroAssembler::PatchBuffer::link): 10786 (JSC::AbstractMacroAssembler::PatchBuffer::linkTailRecursive): 10787 (JSC::AbstractMacroAssembler::differenceBetween): 10788 * assembler/MacroAssembler.h: 10789 (JSC::MacroAssembler::tailRecursiveCall): 10790 (JSC::MacroAssembler::makeTailRecursiveCall): 10791 * assembler/MacroAssemblerX86.h: 10792 (JSC::MacroAssemblerX86::call): 10793 * assembler/MacroAssemblerX86Common.h: 10794 * assembler/MacroAssemblerX86_64.h: 10795 (JSC::MacroAssemblerX86_64::call): 10796 (JSC::MacroAssemblerX86_64::moveWithPatch): 10797 (JSC::MacroAssemblerX86_64::branchPtrWithPatch): 10798 (JSC::MacroAssemblerX86_64::storePtrWithPatch): 10799 * assembler/X86Assembler.h: 10800 (JSC::X86Assembler::jmp_r): 10801 (JSC::X86Assembler::linkJump): 10802 (JSC::X86Assembler::patchJump): 10803 (JSC::X86Assembler::patchCall): 10804 (JSC::X86Assembler::linkCall): 10805 (JSC::X86Assembler::patchAddress): 10806 * interpreter/Interpreter.cpp: 10807 (JSC::Interpreter::tryCTICachePutByID): 10808 * jit/JIT.cpp: 10809 (JSC::JIT::privateCompile): 10810 (JSC::JIT::privateCompileCTIMachineTrampolines): 10811 * jit/JIT.h: 10812 * jit/JITArithmetic.cpp: 10813 (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): 10814 (JSC::JIT::compileBinaryArithOp): 10815 * jit/JITPropertyAccess.cpp: 10816 (JSC::JIT::privateCompilePutByIdTransition): 10817 (JSC::JIT::privateCompileGetByIdSelf): 10818 (JSC::JIT::privateCompilePutByIdReplace): 10819 10820 2009-02-18 Geoffrey Garen <ggaren (a] apple.com> 10821 10822 Reviewed by Oliver Hunt. 10823 10824 Simplified .call and .apply in preparation for optimizing them. Also, 10825 a little cleanup. 10826 10827 * runtime/FunctionPrototype.cpp: 10828 (JSC::functionProtoFuncApply): 10829 (JSC::functionProtoFuncCall): No need to do any specific conversion on 10830 'this' -- op_convert_this will do it if necessary. 10831 10832 * runtime/JSImmediate.cpp: 10833 (JSC::JSImmediate::toThisObject): Slightly relaxed the rules on 10834 toThisObject to allow for 'undefined', which can be passed through 10835 .call and .apply. 10836 10837 2009-02-19 David Levin <levin (a] chromium.org> 10838 10839 Reviewed by Alexey Proskuryakov. 10840 10841 Bug 23976: MessageQueue needs a way to wait for a message that satisfies an arbitrary criteria. 10842 <https://bugs.webkit.org/show_bug.cgi?id=23976> 10843 10844 * wtf/Deque.h: 10845 (WTF::Deque<T>::findIf): 10846 * wtf/MessageQueue.h: 10847 (WTF::MessageQueue<T>::waitForMessageFiltered): 10848 10849 2009-02-18 David Levin <levin (a] chromium.org> 10850 10851 Reviewed by Alexey Proskuryakov. 10852 10853 Bug 23974: Deque::Remove would be a useful method. 10854 <https://bugs.webkit.org/show_bug.cgi?id=23974> 10855 10856 Add Deque::remove and DequeIteratorBase<T>::operator=. 10857 10858 Why was operator= added? Every concrete iterator (DequeIterator..DequeConstReverseIterator) 10859 was calling DequeIteratorBase::assign(), which called Base::operator=(). Base::operator=() 10860 was not implemented. This went unnoticed because the iterator copy code has been unused. 10861 10862 * wtf/Deque.h: 10863 (WTF::Deque<T>::remove): 10864 (WTF::DequeIteratorBase<T>::removeFromIteratorsList): 10865 (WTF::DequeIteratorBase<T>::operator=): 10866 (WTF::DequeIteratorBase<T>::~DequeIteratorBase): 10867 10868 2009-02-18 Gustavo Noronha Silva <gns (a] gnome.org> 10869 10870 Reviewed by Holger Freyther. 10871 10872 Fix symbols.filter location, and add other missing files to the 10873 autotools build, so that make dist works. 10874 10875 * GNUmakefile.am: 10876 10877 2009-02-17 Geoffrey Garen <ggaren (a] apple.com> 10878 10879 Reviewed by Sam Weinig. 10880 10881 Fixed failure in js1_5/Regress/regress-168347.js, as seen on the Oliver 10882 bot. 10883 10884 Technically, both behaviors are OK, but we might as well keep this test 10885 passing. 10886 10887 * runtime/FunctionPrototype.cpp: 10888 (JSC::insertSemicolonIfNeeded): No need to add a trailing semicolon 10889 after a trailing '}', since '}' ends a block, indicating the end of a 10890 statement. 10891 10892 2009-02-17 Geoffrey Garen <ggaren (a] apple.com> 10893 10894 Build fix. 10895 10896 * runtime/FunctionPrototype.cpp: 10897 10898 2009-02-17 Oliver Hunt <oliver (a] apple.com> 10899 10900 Reviewed by Geoff Garen. 10901 10902 Add assertion to guard against oversized pc relative calls. 10903 10904 * assembler/X86Assembler.h: 10905 (JSC::X86Assembler::link): 10906 10907 2009-02-17 Geoffrey Garen <ggaren (a] apple.com> 10908 10909 Reviewed by Sam Weinig. 10910 10911 Fixed <rdar://problem/6595040> REGRESSION: http://www.amnestyusa.org/ 10912 fails to load. 10913 10914 amnestyusa.org uses the Optimist JavaScript library, which adds event 10915 listeners by concatenating string-ified functions. This is only sure to 10916 be syntactically valid if the string-ified functions end in semicolons. 10917 10918 * parser/Lexer.cpp: 10919 (JSC::Lexer::isWhiteSpace): 10920 * parser/Lexer.h: 10921 (JSC::Lexer::isWhiteSpace): 10922 (JSC::Lexer::isLineTerminator): Added some helper functions for examining 10923 whitespace. 10924 10925 * runtime/FunctionPrototype.cpp: 10926 (JSC::appendSemicolonIfNeeded): 10927 (JSC::functionProtoFuncToString): When string-ifying a function, insert 10928 a semicolon in the last non-whitespace position, if one doesn't already exist. 10929 10930 2009-02-16 Oliver Hunt <oliver (a] apple.com> 10931 10932 Reviewed by NOBODY (Build fix). 10933 10934 Roll out r41022 as it breaks qt and gtk builds 10935 10936 * jit/JITArithmetic.cpp: 10937 (JSC::isSSE2Present): 10938 10939 2009-02-16 Sam Weinig <sam (a] webkit.org> 10940 10941 Reviewed by Geoffrey Garen. 10942 10943 Fix for <rdar://problem/6468156> 10944 REGRESSION (r36779): Adding link, images, flash in TinyMCE blocks entire page (21382) 10945 10946 No performance regression. 10947 10948 * runtime/Arguments.cpp: 10949 (JSC::Arguments::fillArgList): Add codepath for when the "length" property has been 10950 overridden. 10951 10952 2009-02-16 Mark Rowe <mrowe (a] apple.com> 10953 10954 Build fix. 10955 10956 * wtf/FastMalloc.cpp: 10957 (WTF::TCMallocStats::): 10958 (WTF::TCMallocStats::FastMallocZone::FastMallocZone): 10959 10960 2009-02-16 Csaba Osztrogonac <oszi (a] inf.u-szeged.hu> 10961 10962 Reviewed by Oliver Hunt. 10963 10964 Bug 23787: Allow JIT to generate SSE2 code if using GCC 10965 <https://bugs.webkit.org/show_bug.cgi?id=23787> 10966 10967 GCC version of the cpuid check. 10968 10969 * jit/JITArithmetic.cpp: 10970 (JSC::isSSE2Present): GCC assembly code added. 10971 6.6% progression on x86 Linux with JIT and WREC on SunSpider if using SSE2 capable machine. 10972 10973 2009-02-13 Adam Treat <adam.treat (a] torchmobile.com> 10974 10975 Reviewed by George Staikos. 10976 10977 https://bugs.webkit.org/show_bug.cgi?id=23960 10978 Crash Fix. 10979 10980 Don't depend on 'initializeThreading()' to come before a call to 'isMainThread()' 10981 as QtWebKit only calls 'initializeThreading()' during QWebPage construction. 10982 10983 A client app may well make a call to QWebSettings::iconForUrl() for instance 10984 before creating a QWebPage and that call to QWebSettings triggers an 10985 ASSERT(isMainThread()) deep within WebCore. 10986 10987 * wtf/ThreadingQt.cpp: 10988 (WTF::isMainThread): 10989 10990 2009-02-13 Gavin Barraclough <barraclough (a] apple.com> 10991 10992 Reviewed by Darin Adler. 10993 10994 Some data in the instruction stream is potentially uninitialized - fix this. 10995 10996 Change the OperandTypes constructor so that uninitialized memory in the int 10997 is zeroed, and modify the Instruction constructor taking an Opcode so that 10998 if !HAVE(COMPUTED_GOTO) (i.e. when Opcode is an enum, and is potentially only 10999 a byte) it zeros the Instruction first before writing the opcode. 11000 11001 * bytecode/Instruction.h: 11002 (JSC::Instruction::Instruction): 11003 * parser/ResultType.h: 11004 (JSC::OperandTypes::OperandTypes): 11005 11006 2009-02-13 Geoffrey Garen <ggaren (a] apple.com> 11007 11008 Build fix for non_JIT platforms. 11009 11010 * bytecode/CodeBlock.h: 11011 (JSC::CodeBlock::setIsNumericCompareFunction): 11012 (JSC::CodeBlock::isNumericCompareFunction): 11013 11014 2009-02-13 Geoffrey Garen <ggaren (a] apple.com> 11015 11016 Reviewed by Darin Adler. 11017 11018 Fixed <rdar://problem/6584057> Optimize sort by JS numeric comparison 11019 function not to run the comparison function 11020 11021 * bytecode/CodeBlock.cpp: 11022 (JSC::CodeBlock::CodeBlock): 11023 * bytecode/CodeBlock.h: 11024 (JSC::CodeBlock::setIsNumericCompareFunction): 11025 (JSC::CodeBlock::isNumericCompareFunction): Added the ability to track 11026 whether a CodeBlock performs a sort-like numeric comparison. 11027 11028 * bytecompiler/BytecodeGenerator.cpp: 11029 (JSC::BytecodeGenerator::generate): Set the isNumericCompareFunction bit 11030 after compiling. 11031 11032 * parser/Nodes.cpp: 11033 (JSC::FunctionBodyNode::emitBytecode): Fixed a bug that caused us to 11034 codegen an extra return at the end of all functions (eek!), since this 11035 made it harder / weirder to detect the numeric comparison pattern in 11036 bytecode. 11037 11038 * runtime/ArrayPrototype.cpp: 11039 (JSC::arrayProtoFuncSort): Use the isNumericCompareFunction bit to do 11040 a faster sort if we can. 11041 11042 * runtime/FunctionConstructor.cpp: 11043 (JSC::extractFunctionBody): 11044 (JSC::constructFunction): 11045 * runtime/FunctionConstructor.h: Renamed and exported extractFunctionBody for 11046 use in initializing lazyNumericCompareFunction. 11047 11048 * runtime/JSArray.cpp: 11049 (JSC::compareNumbersForQSort): 11050 (JSC::compareByStringPairForQSort): 11051 (JSC::JSArray::sortNumeric): 11052 (JSC::JSArray::sort): 11053 * runtime/JSArray.h: Added a fast numeric sort. Renamed ArrayQSortPair 11054 to be more specific since we do different kinds of qsort now. 11055 11056 * runtime/JSGlobalData.cpp: 11057 (JSC::JSGlobalData::JSGlobalData): 11058 (JSC::JSGlobalData::numericCompareFunction): 11059 (JSC::JSGlobalData::ClientData::~ClientData): 11060 * runtime/JSGlobalData.h: Added helper data for computing the 11061 isNumericCompareFunction bit. 11062 11063 2009-02-13 Darin Adler <darin (a] apple.com> 11064 11065 * Configurations/JavaScriptCore.xcconfig: Undo accidental commit of this file. 11066 11067 2009-02-12 Darin Adler <darin (a] apple.com> 11068 11069 Reviewed by Oliver Hunt and Alexey Proskuryakov. 11070 11071 Speed up a couple string functions. 11072 11073 * runtime/StringPrototype.cpp: 11074 (JSC::stringProtoFuncIndexOf): Added a fast path for cases where the second 11075 argument is either missing or an integer. 11076 (JSC::stringProtoFuncBig): Use jsNontrivialString since the string is guaranteed 11077 to be 2 or more characters long. 11078 (JSC::stringProtoFuncSmall): Ditto. 11079 (JSC::stringProtoFuncBlink): Ditto. 11080 (JSC::stringProtoFuncBold): Ditto. 11081 (JSC::stringProtoFuncItalics): Ditto. 11082 (JSC::stringProtoFuncStrike): Ditto. 11083 (JSC::stringProtoFuncSub): Ditto. 11084 (JSC::stringProtoFuncSup): Ditto. 11085 (JSC::stringProtoFuncFontcolor): Ditto. 11086 (JSC::stringProtoFuncFontsize): Make the fast path Sam recently added even faster 11087 by avoiding all but the minimum memory allocation. 11088 (JSC::stringProtoFuncAnchor): Use jsNontrivialString. 11089 (JSC::stringProtoFuncLink): Added a fast path. 11090 11091 * runtime/UString.cpp: 11092 (JSC::UString::find): Added a fast path for single-character search strings. 11093 11094 2009-02-13 David Levin <levin (a] chromium.org> 11095 11096 Reviewed by Darin Adler. 11097 11098 Bug 23926: Race condition in callOnMainThreadAndWait 11099 <https://bugs.webkit.org/show_bug.cgi?id=23926> 11100 11101 * wtf/MainThread.cpp: 11102 Removed callOnMainThreadAndWait since it isn't used. 11103 11104 2009-02-13 Oliver Hunt <oliver (a] apple.com> 11105 11106 Reviewed by Jon Honeycutt. 11107 11108 Math.random is really slow on windows. 11109 11110 Math.random calls WTF::randomNumber which is implemented as 11111 the secure rand_s on windows. Unfortunately rand_s is an order 11112 of magnitude slower than arc4random. For this reason I've 11113 added "weakRandomNumber" for use by JavaScript's Math Object. 11114 In the long term we should look at using our own secure PRNG 11115 in place of the system, but this will do for now. 11116 11117 30% win on SunSpider on Windows, resolving most of the remaining 11118 disparity vs. Mac. 11119 11120 * runtime/MathObject.cpp: 11121 (JSC::MathObject::MathObject): 11122 (JSC::mathProtoFuncRandom): 11123 * wtf/RandomNumber.cpp: 11124 (WTF::weakRandomNumber): 11125 (WTF::randomNumber): 11126 * wtf/RandomNumber.h: 11127 * wtf/RandomNumberSeed.h: 11128 (WTF::initializeWeakRandomNumberGenerator): 11129 11130 2009-02-12 Mark Rowe <mrowe (a] apple.com> 11131 11132 Fix the build for other platforms. 11133 11134 * wtf/RandomNumber.cpp: 11135 (WTF::randomNumber): 11136 11137 2009-02-12 Gavin Barraclough <barraclough (a] apple.com> 11138 11139 Reviewed by Sam Weinig. 11140 11141 Remove (/reduce) use of hard-wired register names from the JIT. 11142 Currently there is no abstraction of registers used in the JIT, 11143 which has a number of negative consequences. Hard-wiring x86 11144 register names makes the JIT less portable to other platforms, 11145 and prevents us from performing dynamic register allocation to 11146 attempt to maintain more temporary values in machine registers. 11147 (The latter will be more important on x86-64, where we have more 11148 registers to make use of). 11149 11150 Also, remove MacroAssembler::mod32. This was not providing a 11151 useful abstraction, and was not in keeping with the rest of the 11152 MacroAssembler interface, in having specific register requirements. 11153 11154 * assembler/MacroAssemblerX86Common.h: 11155 * jit/JIT.cpp: 11156 (JSC::JIT::compileOpStrictEq): 11157 (JSC::JIT::emitSlowScriptCheck): 11158 (JSC::JIT::privateCompileMainPass): 11159 (JSC::JIT::privateCompileSlowCases): 11160 (JSC::JIT::privateCompile): 11161 (JSC::JIT::privateCompileCTIMachineTrampolines): 11162 * jit/JIT.h: 11163 * jit/JITArithmetic.cpp: 11164 (JSC::JIT::compileFastArith_op_lshift): 11165 (JSC::JIT::compileFastArithSlow_op_lshift): 11166 (JSC::JIT::compileFastArith_op_rshift): 11167 (JSC::JIT::compileFastArithSlow_op_rshift): 11168 (JSC::JIT::compileFastArith_op_bitand): 11169 (JSC::JIT::compileFastArithSlow_op_bitand): 11170 (JSC::JIT::compileFastArith_op_mod): 11171 (JSC::JIT::compileFastArithSlow_op_mod): 11172 (JSC::JIT::compileFastArith_op_post_inc): 11173 (JSC::JIT::compileFastArithSlow_op_post_inc): 11174 (JSC::JIT::compileFastArith_op_post_dec): 11175 (JSC::JIT::compileFastArithSlow_op_post_dec): 11176 (JSC::JIT::compileFastArith_op_pre_inc): 11177 (JSC::JIT::compileFastArithSlow_op_pre_inc): 11178 (JSC::JIT::compileFastArith_op_pre_dec): 11179 (JSC::JIT::compileFastArithSlow_op_pre_dec): 11180 (JSC::JIT::compileFastArith_op_add): 11181 (JSC::JIT::compileFastArith_op_mul): 11182 (JSC::JIT::compileFastArith_op_sub): 11183 (JSC::JIT::compileBinaryArithOp): 11184 * jit/JITCall.cpp: 11185 (JSC::JIT::compileOpCallInitializeCallFrame): 11186 (JSC::JIT::compileOpCallSetupArgs): 11187 (JSC::JIT::compileOpCallEvalSetupArgs): 11188 (JSC::JIT::compileOpConstructSetupArgs): 11189 (JSC::JIT::compileOpCall): 11190 (JSC::JIT::compileOpCallSlowCase): 11191 * jit/JITInlineMethods.h: 11192 (JSC::JIT::emitGetVirtualRegister): 11193 (JSC::JIT::emitPutVirtualRegister): 11194 (JSC::JIT::emitNakedCall): 11195 (JSC::JIT::restoreArgumentReference): 11196 (JSC::JIT::restoreArgumentReferenceForTrampoline): 11197 * jit/JITPropertyAccess.cpp: 11198 (JSC::JIT::compileGetByIdHotPath): 11199 (JSC::JIT::compilePutByIdHotPath): 11200 (JSC::JIT::compileGetByIdSlowCase): 11201 (JSC::JIT::compilePutByIdSlowCase): 11202 (JSC::JIT::privateCompilePutByIdTransition): 11203 (JSC::JIT::privateCompilePatchGetArrayLength): 11204 (JSC::JIT::privateCompileGetByIdSelf): 11205 (JSC::JIT::privateCompileGetByIdProto): 11206 (JSC::JIT::privateCompileGetByIdSelfList): 11207 (JSC::JIT::privateCompileGetByIdProtoList): 11208 (JSC::JIT::privateCompileGetByIdChainList): 11209 (JSC::JIT::privateCompileGetByIdChain): 11210 (JSC::JIT::privateCompilePutByIdReplace): 11211 11212 2009-02-12 Horia Olaru <olaru (a] adobe.com> 11213 11214 Reviewed by Oliver Hunt. 11215 11216 https://bugs.webkit.org/show_bug.cgi?id=23400 11217 11218 When throwing an exception within an eval argument string, the dst parameter was 11219 modified in the functions below and the return value for eval was altered. Changed 11220 the emitNode call in JSC::ThrowNode::emitBytecode to use a temporary register 11221 to store its results instead of dst. The JSC::FunctionCallResolveNode::emitBytecode 11222 would load the function within the dst registry, also altering the result returned 11223 by eval. Replaced it with another temporary. 11224 11225 * parser/Nodes.cpp: 11226 (JSC::FunctionCallResolveNode::emitBytecode): 11227 (JSC::ThrowNode::emitBytecode): 11228 11229 2009-02-12 Sam Weinig <sam (a] webkit.org> 11230 11231 Reviewed by Geoffrey Garen. 11232 11233 Speed up String.prototype.fontsize. 11234 11235 * runtime/StringPrototype.cpp: 11236 (JSC::stringProtoFuncFontsize): Specialize for defined/commonly used values. 11237 11238 2009-02-12 Geoffrey Garen <ggaren (a] apple.com> 11239 11240 Reviewed by Sam Weinig. 11241 11242 Correctness fix. 11243 11244 * wtf/RandomNumber.cpp: 11245 (WTF::randomNumber): Divide by the maximum representable value, which 11246 is different on each platform now, to get values between 0 and 1. 11247 11248 2009-02-12 Geoffrey Garen <ggaren (a] apple.com> 11249 11250 Build fix. 11251 11252 * wtf/RandomNumber.cpp: 11253 (WTF::randomNumber): 11254 11255 2009-02-12 Geoffrey Garen <ggaren (a] apple.com> 11256 11257 Reviewed by Sam Weinig. 11258 11259 Fixed <rdar://problem/6582048>. 11260 11261 * wtf/RandomNumber.cpp: 11262 (WTF::randomNumber): Make only one call to the random number generator 11263 on platforms where the generator is cryptographically secure. The value 11264 of randomness over and above cryptographically secure randomness is not 11265 clear, and it caused some performance problems. 11266 11267 2009-02-12 Adam Roben <aroben (a] apple.com> 11268 11269 Fix lots of Perl warnings when building JavaScriptCoreGenerated on 11270 Windows 11271 11272 Reviewed by John Sullivan. 11273 11274 * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: 11275 Create the docs/ directory so that we can write bytecode.html into it. 11276 This matches what JavaScriptCore.xcodeproj does. 11277 11278 2009-02-12 Simon Hausmann <simon.hausmann (a] nokia.com> 11279 11280 Rubber-stamped by Lars. 11281 11282 Re-enable the JIT in the Qt build with -fno-stack-protector on Linux. 11283 11284 * JavaScriptCore.pri: 11285 11286 2009-02-11 Dmitry Titov <dimich (a] chromium.org> 11287 11288 Reviewed by Alexey Proskuryakov. 11289 11290 https://bugs.webkit.org/show_bug.cgi?id=23705 11291 Fix the UI freeze caused by Worker generating a flood of messages. 11292 Measure time we spend in executing posted work items. If too much time is spent 11293 without returning to the run loop, exit and reschedule. 11294 11295 * wtf/MainThread.h: 11296 Added initializeMainThreadPlatform() to initialize low-level mechanism for posting 11297 work items from thread to thread. This removes #ifdefs for WIN and CHROMIUM from platform-independent code. 11298 11299 * wtf/MainThread.cpp: 11300 (WTF::initializeMainThread): 11301 (WTF::dispatchFunctionsFromMainThread): 11302 Instead of dispatching all work items in the queue, dispatch them one by one 11303 and measure elapsed time. After a threshold, reschedule and quit. 11304 11305 (WTF::callOnMainThread): 11306 (WTF::callOnMainThreadAndWait): 11307 Only schedule dispatch if the queue was empty - to avoid many posted messages in the run loop queue. 11308 11309 * wtf/mac/MainThreadMac.mm: 11310 (WTF::scheduleDispatchFunctionsOnMainThread): 11311 Use static instance of the mainThreadCaller instead of allocating and releasing it each time. 11312 (WTF::initializeMainThreadPlatform): 11313 * wtf/gtk/MainThreadChromium.cpp: 11314 (WTF::initializeMainThreadPlatform): 11315 * wtf/gtk/MainThreadGtk.cpp: 11316 (WTF::initializeMainThreadPlatform): 11317 * wtf/qt/MainThreadQt.cpp: 11318 (WTF::initializeMainThreadPlatform): 11319 * wtf/win/MainThreadWin.cpp: 11320 (WTF::initializeMainThreadPlatform): 11321 * wtf/wx/MainThreadWx.cpp: 11322 (WTF::initializeMainThreadPlatform): 11323 11324 2009-02-11 Sam Weinig <sam (a] webkit.org> 11325 11326 Reviewed by Gavin Barraclough. 11327 11328 Style cleanup. 11329 11330 * assembler/AbstractMacroAssembler.h: 11331 (JSC::AbstractMacroAssembler::CodeLocationCommon::CodeLocationCommon): 11332 (JSC::AbstractMacroAssembler::CodeLocationCommon::operator bool): 11333 (JSC::AbstractMacroAssembler::CodeLocationCommon::reset): 11334 (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForSwitch): 11335 (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForExceptionHandler): 11336 (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForJSR): 11337 (JSC::AbstractMacroAssembler::CodeLocationLabel::getJumpDestination): 11338 (JSC::AbstractMacroAssembler::CodeLocationJump::relink): 11339 (JSC::AbstractMacroAssembler::CodeLocationJump::CodeLocationJump): 11340 (JSC::AbstractMacroAssembler::CodeLocationCall::relink): 11341 (JSC::AbstractMacroAssembler::CodeLocationCall::calleeReturnAddressValue): 11342 (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall): 11343 (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): 11344 (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::CodeLocationDataLabel32): 11345 (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): 11346 (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): 11347 (JSC::AbstractMacroAssembler::ProcessorReturnAddress::ProcessorReturnAddress): 11348 (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): 11349 (JSC::AbstractMacroAssembler::ProcessorReturnAddress::operator void*): 11350 (JSC::AbstractMacroAssembler::PatchBuffer::link): 11351 (JSC::::CodeLocationCommon::labelAtOffset): 11352 (JSC::::CodeLocationCommon::jumpAtOffset): 11353 (JSC::::CodeLocationCommon::callAtOffset): 11354 (JSC::::CodeLocationCommon::dataLabelPtrAtOffset): 11355 (JSC::::CodeLocationCommon::dataLabel32AtOffset): 11356 11357 2009-02-11 Sam Weinig <sam (a] webkit.org> 11358 11359 Reviewed by Gavin Barraclough. 11360 11361 * assembler/AbstractMacroAssembler.h: Fix comments. 11362 11363 2009-02-11 Alexey Proskuryakov <ap (a] webkit.org> 11364 11365 Trying to fix wx build. 11366 11367 * bytecode/JumpTable.h: Include "MacroAssembler.h", not <MacroAssembler.h>. 11368 * jscore.bkl: Added assembler directory to search paths. 11369 11370 2009-02-10 Gavin Barraclough <barraclough (a] apple.com> 11371 11372 Build 11373 fix. 11374 (Narrow 11375 changelog 11376 for 11377 dhyatt). 11378 11379 * bytecode/Instruction.h: 11380 (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): 11381 (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): 11382 11383 2009-02-10 Gavin Barraclough <barraclough (a] apple.com> 11384 11385 Reviewed by Oliver Hunt. 11386 11387 Reduce use of void* / reinterpret_cast in JIT repatching code, 11388 add strong types for Calls and for the various types of pointers 11389 we retain into the JIT generated instruction stream. 11390 11391 No performance impact. 11392 11393 * assembler/AbstractMacroAssembler.h: 11394 (JSC::AbstractMacroAssembler::ImmPtr::ImmPtr): 11395 (JSC::AbstractMacroAssembler::ImmPtr::asIntptr): 11396 (JSC::AbstractMacroAssembler::Imm32::Imm32): 11397 (JSC::AbstractMacroAssembler::Label::Label): 11398 (JSC::AbstractMacroAssembler::DataLabelPtr::DataLabelPtr): 11399 (JSC::AbstractMacroAssembler::Call::Call): 11400 (JSC::AbstractMacroAssembler::Call::link): 11401 (JSC::AbstractMacroAssembler::Call::linkTo): 11402 (JSC::AbstractMacroAssembler::Jump::Jump): 11403 (JSC::AbstractMacroAssembler::Jump::linkTo): 11404 (JSC::AbstractMacroAssembler::CodeLocationCommon::CodeLocationCommon): 11405 (JSC::AbstractMacroAssembler::CodeLocationCommon::operator bool): 11406 (JSC::AbstractMacroAssembler::CodeLocationCommon::reset): 11407 (JSC::AbstractMacroAssembler::CodeLocationLabel::CodeLocationLabel): 11408 (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForSwitch): 11409 (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForExceptionHandler): 11410 (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForJSR): 11411 (JSC::AbstractMacroAssembler::CodeLocationLabel::getJumpDestination): 11412 (JSC::AbstractMacroAssembler::CodeLocationJump::CodeLocationJump): 11413 (JSC::AbstractMacroAssembler::CodeLocationJump::relink): 11414 (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall): 11415 (JSC::AbstractMacroAssembler::CodeLocationCall::relink): 11416 (JSC::AbstractMacroAssembler::CodeLocationCall::calleeReturnAddressValue): 11417 (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::CodeLocationDataLabel32): 11418 (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): 11419 (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): 11420 (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): 11421 (JSC::AbstractMacroAssembler::ProcessorReturnAddress::ProcessorReturnAddress): 11422 (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): 11423 (JSC::AbstractMacroAssembler::ProcessorReturnAddress::operator void*): 11424 (JSC::AbstractMacroAssembler::PatchBuffer::entry): 11425 (JSC::AbstractMacroAssembler::PatchBuffer::trampolineAt): 11426 (JSC::AbstractMacroAssembler::PatchBuffer::link): 11427 (JSC::AbstractMacroAssembler::PatchBuffer::linkTailRecursive): 11428 (JSC::AbstractMacroAssembler::PatchBuffer::patch): 11429 (JSC::AbstractMacroAssembler::PatchBuffer::locationOf): 11430 (JSC::AbstractMacroAssembler::PatchBuffer::returnAddressOffset): 11431 (JSC::AbstractMacroAssembler::differenceBetween): 11432 (JSC::::CodeLocationCommon::labelAtOffset): 11433 (JSC::::CodeLocationCommon::jumpAtOffset): 11434 (JSC::::CodeLocationCommon::callAtOffset): 11435 (JSC::::CodeLocationCommon::dataLabelPtrAtOffset): 11436 (JSC::::CodeLocationCommon::dataLabel32AtOffset): 11437 * assembler/MacroAssemblerX86Common.h: 11438 (JSC::MacroAssemblerX86Common::call): 11439 * assembler/X86Assembler.h: 11440 (JSC::X86Assembler::getCallReturnOffset): 11441 * bytecode/CodeBlock.h: 11442 (JSC::CallLinkInfo::CallLinkInfo): 11443 (JSC::getStructureStubInfoReturnLocation): 11444 (JSC::getCallLinkInfoReturnLocation): 11445 * bytecode/Instruction.h: 11446 (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): 11447 (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): 11448 * bytecode/JumpTable.h: 11449 (JSC::StringJumpTable::ctiForValue): 11450 (JSC::SimpleJumpTable::ctiForValue): 11451 * bytecode/StructureStubInfo.h: 11452 (JSC::StructureStubInfo::StructureStubInfo): 11453 * bytecompiler/BytecodeGenerator.cpp: 11454 (JSC::BytecodeGenerator::emitCatch): 11455 (JSC::prepareJumpTableForStringSwitch): 11456 * interpreter/Interpreter.cpp: 11457 (JSC::Interpreter::cti_op_get_by_id_self_fail): 11458 (JSC::getPolymorphicAccessStructureListSlot): 11459 (JSC::Interpreter::cti_op_throw): 11460 (JSC::Interpreter::cti_op_switch_imm): 11461 (JSC::Interpreter::cti_op_switch_char): 11462 (JSC::Interpreter::cti_op_switch_string): 11463 (JSC::Interpreter::cti_vm_throw): 11464 * jit/JIT.cpp: 11465 (JSC::ctiSetReturnAddress): 11466 (JSC::ctiPatchCallByReturnAddress): 11467 (JSC::JIT::privateCompile): 11468 (JSC::JIT::privateCompileCTIMachineTrampolines): 11469 * jit/JIT.h: 11470 (JSC::CallRecord::CallRecord): 11471 (JSC::JIT::compileGetByIdSelf): 11472 (JSC::JIT::compileGetByIdProto): 11473 (JSC::JIT::compileGetByIdChain): 11474 (JSC::JIT::compilePutByIdReplace): 11475 (JSC::JIT::compilePutByIdTransition): 11476 (JSC::JIT::compilePatchGetArrayLength): 11477 (JSC::JIT::emitCTICall): 11478 * jit/JITCall.cpp: 11479 (JSC::JIT::unlinkCall): 11480 (JSC::JIT::linkCall): 11481 * jit/JITInlineMethods.h: 11482 (JSC::JIT::emitNakedCall): 11483 (JSC::JIT::emitCTICall_internal): 11484 * jit/JITPropertyAccess.cpp: 11485 (JSC::JIT::compileGetByIdSlowCase): 11486 (JSC::JIT::compilePutByIdSlowCase): 11487 (JSC::JIT::privateCompilePutByIdTransition): 11488 (JSC::JIT::patchGetByIdSelf): 11489 (JSC::JIT::patchPutByIdReplace): 11490 (JSC::JIT::privateCompilePatchGetArrayLength): 11491 (JSC::JIT::privateCompileGetByIdSelf): 11492 (JSC::JIT::privateCompileGetByIdProto): 11493 (JSC::JIT::privateCompileGetByIdSelfList): 11494 (JSC::JIT::privateCompileGetByIdProtoList): 11495 (JSC::JIT::privateCompileGetByIdChainList): 11496 (JSC::JIT::privateCompileGetByIdChain): 11497 (JSC::JIT::privateCompilePutByIdReplace): 11498 11499 2009-02-10 Adam Roben <aroben (a] apple.com> 11500 11501 Windows build fix after r40813 11502 11503 * JavaScriptCore.vcproj/jsc/jsc.vcproj: Added profiler/ to the include 11504 path so that Profiler.h can be found. 11505 11506 2009-02-09 Gavin Barraclough <barraclough (a] apple.com> 11507 11508 Reviewed by Oliver Hunt. 11509 11510 Provide a class type for a generated block of JIT code. 11511 Also changes the return address -> bytecode index map to 11512 track the return addess as an unsigned offset into the code 11513 instead of a ptrdiff_t in terms of void**s - the latter is 11514 equal to the actual offset / sizeof(void*), making it a 11515 potentially lossy representation. 11516 11517 * JavaScriptCore.xcodeproj/project.pbxproj: 11518 * assembler/AbstractMacroAssembler.h: 11519 (JSC::AbstractMacroAssembler::PatchBuffer::returnAddressOffset): 11520 * assembler/X86Assembler.h: 11521 (JSC::X86Assembler::getCallReturnOffset): 11522 * bytecode/CodeBlock.h: 11523 (JSC::CallReturnOffsetToBytecodeIndex::CallReturnOffsetToBytecodeIndex): 11524 (JSC::getCallReturnOffset): 11525 (JSC::CodeBlock::getBytecodeIndex): 11526 (JSC::CodeBlock::jitCode): 11527 (JSC::CodeBlock::callReturnIndexVector): 11528 * interpreter/Interpreter.cpp: 11529 (JSC::Interpreter::execute): 11530 (JSC::Interpreter::cti_vm_dontLazyLinkCall): 11531 (JSC::Interpreter::cti_vm_lazyLinkCall): 11532 * jit/JIT.cpp: 11533 (JSC::JIT::privateCompile): 11534 * jit/JIT.h: 11535 (JSC::): 11536 * jit/JITCall.cpp: 11537 (JSC::JIT::linkCall): 11538 * jit/JITCode.h: Added. 11539 (JSC::): 11540 (JSC::JITCode::JITCode): 11541 (JSC::JITCode::operator bool): 11542 (JSC::JITCode::addressForCall): 11543 (JSC::JITCode::offsetOf): 11544 (JSC::JITCode::execute): 11545 11546 2009-02-09 John Grabowski <jrg (a] chromium.org> 11547 11548 Reviewed by Darin Adler. 11549 11550 https://bugs.webkit.org/show_bug.cgi?id=23856 11551 Change the definition of "main thread" for Chromium on OSX. 11552 It does not match the DARWIN definition. 11553 11554 * wtf/ThreadingPthreads.cpp: 11555 (WTF::initializeThreading): 11556 (WTF::isMainThread): 11557 11558 2009-02-09 Gavin Barraclough <barraclough (a] apple.com> 11559 11560 Reviewed by Oliver Hunt. 11561 11562 Minor bugfix, incorrect check meant that subtraction causing integer overflow 11563 would be missed on x86-64 JIT. 11564 11565 * jit/JITArithmetic.cpp: 11566 (JSC::JIT::compileBinaryArithOp): 11567 11568 2009-02-09 Gavin Barraclough <barraclough (a] apple.com> 11569 11570 Reviewed by Oliver Hunt. 11571 11572 A more sensible register allocation for x86-64. 11573 11574 When WREC was ported to x86-64 it stuck with the same register allocation as x86. 11575 This requires registers to be reordered on entry into WREC generated code, since 11576 argument passing is different on x86-64 and x86 (regparm(3)). This patch switches 11577 x86-64 to use a native register allocation, that does not require argument registers 11578 to be reordered. 11579 11580 * wrec/WRECGenerator.cpp: 11581 (JSC::WREC::Generator::generateEnter): 11582 (JSC::WREC::Generator::generateReturnSuccess): 11583 (JSC::WREC::Generator::generateReturnFailure): 11584 * wrec/WRECGenerator.h: 11585 11586 2009-02-05 Adam Roben <aroben (a] apple.com> 11587 11588 Build fix 11589 11590 Rubberstamped by Sam Weinig. 11591 11592 * wtf/TypeTraits.h: Include Platform.h, since this header uses macros 11593 defined there. 11594 11595 2009-02-05 Dimitri Glazkov <dglazkov (a] chromium.org> 11596 11597 Reviewed by Eric Seidel. 11598 11599 https://bugs.webkit.org/show_bug.cgi?id=23747 11600 Add Chromium threading-related files. 11601 11602 * wtf/MainThread.cpp: Added platform guard to initializeMainThread. 11603 * wtf/chromium/ChromiumThreading.h: Added. 11604 * wtf/chromium/MainThreadChromium.cpp: Added. 11605 (WTF::initializeMainThread): 11606 (WTF::scheduleDispatchFunctionsOnMainThread): 11607 11608 2009-02-05 David Levin <levin (a] chromium.org> 11609 11610 Reviewed by Darin Adler. 11611 11612 Bug 23713: COMPILE_ASSERTS should be moved out of TypeTraits.h and into .cpp file 11613 <https://bugs.webkit.org/show_bug.cgi?id=23713> 11614 11615 * GNUmakefile.am: 11616 * JavaScriptCore.pri: 11617 * JavaScriptCore.scons: 11618 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 11619 * JavaScriptCore.xcodeproj/project.pbxproj: 11620 * JavaScriptCoreSources.bkl: 11621 11622 * wtf/HashTraits.h: 11623 Remove unnecessary header file that I missed when moving out the type traits form this file. 11624 11625 * wtf/TypeTraits.cpp: Added. 11626 (WTF::): 11627 * wtf/TypeTraits.h: 11628 Moved the compile asserts into TypeTraits.cpp file. 11629 11630 2009-02-04 Gavin Barraclough <barraclough (a] apple.com> 11631 11632 Reviewed by Oliver 'the nun' Hunt. 11633 11634 Add -e switch to jsc to enable evaluation of scripts passed on the command line. 11635 11636 * jsc.cpp: 11637 (Script::Script): 11638 (runWithScripts): 11639 (printUsageStatement): 11640 (parseArguments): 11641 (jscmain): 11642 11643 2009-02-04 Gavin Barraclough <barraclough (a] apple.com> 11644 11645 Rubber stamped by Sam 'Big Mac' Weinig. 11646 11647 * assembler/AbstractMacroAssembler.h: Copied from assembler/MacroAssembler.h. 11648 * assembler/MacroAssemblerX86.h: Copied from assembler/MacroAssembler.h. 11649 * assembler/MacroAssemblerX86Common.h: Copied from assembler/MacroAssembler.h. 11650 * assembler/MacroAssemblerX86_64.h: Copied from assembler/MacroAssembler.h. 11651 11652 2009-02-04 Gavin Barraclough <barraclough (a] apple.com> 11653 11654 Reviewed by Sam Weinig. 11655 11656 This patch tidies up the MacroAssembler, cleaning up the code and refactoring out the 11657 platform-specific parts. The MacroAssembler gets split up like a beef burger, with the 11658 platform-agnostic data types being the lower bun (in the form of the class AbstractMacroAssembler), 11659 the plaform-specific code generation forming a big meaty patty of methods like 'add32', 11660 'branch32', etc (MacroAssemblerX86), and finally topped off with the bun-lid of the 11661 MacroAssembler class itself, providing covenience methods such as the stack peek & poke, 11662 and backwards branch methods, all of which can be described in a platform independent 11663 way using methods from the base class. The AbstractMacroAssembler is templated on the 11664 type of the assembler class that will be used for code generation, and the three layers 11665 are held together with the cocktail stick of inheritance. 11666 11667 The above description is a slight simplification since the MacroAssemblerX86 is actually 11668 formed from two layers (in effect giving us a kind on bacon double cheeseburger) - with the 11669 bulk of methods that are common between x86 & x86-64 implemented in MacroAssemblerX86Common, 11670 which forms a base class for MacroAssemblerX86 and MacroAssemblerX86_64 (which add the methods 11671 specific to the given platform). 11672 11673 I'm landing these changes first without splitting the classes across multiple files, 11674 I will follow up with a second patch to split up the file MacroAssembler.h. 11675 11676 * assembler/MacroAssembler.h: 11677 (JSC::AbstractMacroAssembler::): 11678 (JSC::AbstractMacroAssembler::DataLabelPtr::DataLabelPtr): 11679 (JSC::AbstractMacroAssembler::DataLabelPtr::patch): 11680 (JSC::AbstractMacroAssembler::DataLabel32::DataLabel32): 11681 (JSC::AbstractMacroAssembler::DataLabel32::patch): 11682 (JSC::AbstractMacroAssembler::Label::Label): 11683 (JSC::AbstractMacroAssembler::Jump::Jump): 11684 (JSC::AbstractMacroAssembler::Jump::link): 11685 (JSC::AbstractMacroAssembler::Jump::linkTo): 11686 (JSC::AbstractMacroAssembler::Jump::patch): 11687 (JSC::AbstractMacroAssembler::JumpList::link): 11688 (JSC::AbstractMacroAssembler::JumpList::linkTo): 11689 (JSC::AbstractMacroAssembler::PatchBuffer::link): 11690 (JSC::AbstractMacroAssembler::PatchBuffer::addressOf): 11691 (JSC::AbstractMacroAssembler::PatchBuffer::setPtr): 11692 (JSC::AbstractMacroAssembler::size): 11693 (JSC::AbstractMacroAssembler::copyCode): 11694 (JSC::AbstractMacroAssembler::label): 11695 (JSC::AbstractMacroAssembler::align): 11696 (JSC::AbstractMacroAssembler::differenceBetween): 11697 (JSC::MacroAssemblerX86Common::xor32): 11698 (JSC::MacroAssemblerX86Common::load32WithAddressOffsetPatch): 11699 (JSC::MacroAssemblerX86Common::store32WithAddressOffsetPatch): 11700 (JSC::MacroAssemblerX86Common::move): 11701 (JSC::MacroAssemblerX86Common::swap): 11702 (JSC::MacroAssemblerX86Common::signExtend32ToPtr): 11703 (JSC::MacroAssemblerX86Common::zeroExtend32ToPtr): 11704 (JSC::MacroAssemblerX86Common::branch32): 11705 (JSC::MacroAssemblerX86Common::jump): 11706 (JSC::MacroAssemblerX86_64::add32): 11707 (JSC::MacroAssemblerX86_64::sub32): 11708 (JSC::MacroAssemblerX86_64::load32): 11709 (JSC::MacroAssemblerX86_64::store32): 11710 (JSC::MacroAssemblerX86_64::addPtr): 11711 (JSC::MacroAssemblerX86_64::andPtr): 11712 (JSC::MacroAssemblerX86_64::orPtr): 11713 (JSC::MacroAssemblerX86_64::rshiftPtr): 11714 (JSC::MacroAssemblerX86_64::subPtr): 11715 (JSC::MacroAssemblerX86_64::xorPtr): 11716 (JSC::MacroAssemblerX86_64::loadPtr): 11717 (JSC::MacroAssemblerX86_64::loadPtrWithAddressOffsetPatch): 11718 (JSC::MacroAssemblerX86_64::storePtr): 11719 (JSC::MacroAssemblerX86_64::storePtrWithAddressOffsetPatch): 11720 (JSC::MacroAssemblerX86_64::branchPtr): 11721 (JSC::MacroAssemblerX86_64::branchTestPtr): 11722 (JSC::MacroAssemblerX86_64::branchAddPtr): 11723 (JSC::MacroAssemblerX86_64::branchSubPtr): 11724 (JSC::MacroAssemblerX86_64::branchPtrWithPatch): 11725 (JSC::MacroAssemblerX86_64::storePtrWithPatch): 11726 (JSC::MacroAssemblerX86::add32): 11727 (JSC::MacroAssemblerX86::sub32): 11728 (JSC::MacroAssemblerX86::load32): 11729 (JSC::MacroAssemblerX86::store32): 11730 (JSC::MacroAssemblerX86::branch32): 11731 (JSC::MacroAssemblerX86::branchPtrWithPatch): 11732 (JSC::MacroAssemblerX86::storePtrWithPatch): 11733 (JSC::MacroAssembler::pop): 11734 (JSC::MacroAssembler::peek): 11735 (JSC::MacroAssembler::poke): 11736 (JSC::MacroAssembler::branchPtr): 11737 (JSC::MacroAssembler::branch32): 11738 (JSC::MacroAssembler::branch16): 11739 (JSC::MacroAssembler::branchTestPtr): 11740 (JSC::MacroAssembler::addPtr): 11741 (JSC::MacroAssembler::andPtr): 11742 (JSC::MacroAssembler::orPtr): 11743 (JSC::MacroAssembler::rshiftPtr): 11744 (JSC::MacroAssembler::subPtr): 11745 (JSC::MacroAssembler::xorPtr): 11746 (JSC::MacroAssembler::loadPtr): 11747 (JSC::MacroAssembler::loadPtrWithAddressOffsetPatch): 11748 (JSC::MacroAssembler::storePtr): 11749 (JSC::MacroAssembler::storePtrWithAddressOffsetPatch): 11750 (JSC::MacroAssembler::branchAddPtr): 11751 (JSC::MacroAssembler::branchSubPtr): 11752 * jit/JITArithmetic.cpp: 11753 (JSC::JIT::compileBinaryArithOp): 11754 11755 2009-02-04 Alexey Proskuryakov <ap (a] webkit.org> 11756 11757 Reviewed by Sam Weinig. 11758 11759 https://bugs.webkit.org/show_bug.cgi?id=23681 11760 Worker tests crash in debug builds if run --singly 11761 11762 The crash happened because worker threads continued running while debug-only static objects 11763 were already being destroyed on main thread. 11764 11765 * runtime/Structure.cpp: Create static debug-only sets in heap, so that they don't get 11766 destroyed. 11767 11768 * wtf/ThreadingPthreads.cpp: Changed assertions to conventional form. 11769 11770 2009-02-03 Gavin Barraclough <barraclough (a] apple.com> 11771 11772 Reviewed by Geoff Garen. 11773 11774 https://bugs.webkit.org/show_bug.cgi?id=23715 11775 11776 Simplify MacroAssembler interface, by combining comparison methods. 11777 Seprate operations are combined as follows: 11778 jz32/jnz32/jzPtr/jnzPtr -> branchTest32/branchTestPtr, 11779 j*(Add|Mul|Sub)32/j*(Add|Mul|Sub)Ptr -> branch(Add|Mul|Sub)32/branch(Add|Mul|Sub)Ptr 11780 j*32/j*Ptr (all other two op combparisons) -> branch32/brnachPtr 11781 set*32 -> set32 11782 11783 Also, represent the Scale of BaseIndex addresses as a plain enum (0,1,2,3), 11784 instead of as multiplicands (1,2,4,8). 11785 11786 This patch singificantly reduces replication of code, and increases functionality supported 11787 by the MacroAssembler. No performance impact. 11788 11789 * assembler/MacroAssembler.h: 11790 (JSC::MacroAssembler::): 11791 (JSC::MacroAssembler::branchPtr): 11792 (JSC::MacroAssembler::branchPtrWithPatch): 11793 (JSC::MacroAssembler::branch32): 11794 (JSC::MacroAssembler::branch16): 11795 (JSC::MacroAssembler::branchTestPtr): 11796 (JSC::MacroAssembler::branchTest32): 11797 (JSC::MacroAssembler::branchAddPtr): 11798 (JSC::MacroAssembler::branchAdd32): 11799 (JSC::MacroAssembler::branchMul32): 11800 (JSC::MacroAssembler::branchSubPtr): 11801 (JSC::MacroAssembler::branchSub32): 11802 (JSC::MacroAssembler::set32): 11803 (JSC::MacroAssembler::setTest32): 11804 * assembler/X86Assembler.h: 11805 (JSC::X86Assembler::): 11806 (JSC::X86Assembler::jccRel32): 11807 (JSC::X86Assembler::setccOpcode): 11808 (JSC::X86Assembler::cmpq_mr): 11809 (JSC::X86Assembler::setcc_r): 11810 (JSC::X86Assembler::sete_r): 11811 (JSC::X86Assembler::setne_r): 11812 (JSC::X86Assembler::jne): 11813 (JSC::X86Assembler::je): 11814 (JSC::X86Assembler::jl): 11815 (JSC::X86Assembler::jb): 11816 (JSC::X86Assembler::jle): 11817 (JSC::X86Assembler::jbe): 11818 (JSC::X86Assembler::jge): 11819 (JSC::X86Assembler::jg): 11820 (JSC::X86Assembler::ja): 11821 (JSC::X86Assembler::jae): 11822 (JSC::X86Assembler::jo): 11823 (JSC::X86Assembler::jp): 11824 (JSC::X86Assembler::js): 11825 (JSC::X86Assembler::jcc): 11826 (JSC::X86Assembler::X86InstructionFormatter::putModRmSib): 11827 * jit/JIT.cpp: 11828 (JSC::JIT::compileOpStrictEq): 11829 (JSC::JIT::emitSlowScriptCheck): 11830 (JSC::JIT::privateCompileMainPass): 11831 (JSC::JIT::privateCompileSlowCases): 11832 (JSC::JIT::privateCompile): 11833 (JSC::JIT::privateCompileCTIMachineTrampolines): 11834 * jit/JITArithmetic.cpp: 11835 (JSC::JIT::compileFastArith_op_lshift): 11836 (JSC::JIT::compileFastArith_op_mod): 11837 (JSC::JIT::compileFastArith_op_post_inc): 11838 (JSC::JIT::compileFastArith_op_post_dec): 11839 (JSC::JIT::compileFastArith_op_pre_inc): 11840 (JSC::JIT::compileFastArith_op_pre_dec): 11841 (JSC::JIT::compileBinaryArithOp): 11842 (JSC::JIT::compileFastArith_op_add): 11843 (JSC::JIT::compileFastArith_op_mul): 11844 * jit/JITCall.cpp: 11845 (JSC::JIT::compileOpCall): 11846 (JSC::JIT::compileOpCallSlowCase): 11847 * jit/JITInlineMethods.h: 11848 (JSC::JIT::checkStructure): 11849 (JSC::JIT::emitJumpIfJSCell): 11850 (JSC::JIT::emitJumpIfNotJSCell): 11851 (JSC::JIT::emitJumpIfImmediateNumber): 11852 (JSC::JIT::emitJumpIfNotImmediateNumber): 11853 (JSC::JIT::emitJumpIfImmediateInteger): 11854 (JSC::JIT::emitJumpIfNotImmediateInteger): 11855 (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): 11856 * jit/JITPropertyAccess.cpp: 11857 (JSC::JIT::compileGetByIdHotPath): 11858 (JSC::JIT::compilePutByIdHotPath): 11859 (JSC::JIT::privateCompilePutByIdTransition): 11860 (JSC::JIT::privateCompilePatchGetArrayLength): 11861 (JSC::JIT::privateCompileGetByIdProto): 11862 (JSC::JIT::privateCompileGetByIdProtoList): 11863 (JSC::JIT::privateCompileGetByIdChainList): 11864 (JSC::JIT::privateCompileGetByIdChain): 11865 * runtime/RegExp.cpp: 11866 (JSC::RegExp::match): 11867 * wrec/WRECGenerator.cpp: 11868 (JSC::WREC::Generator::generateEnter): 11869 (JSC::WREC::Generator::generateIncrementIndex): 11870 (JSC::WREC::Generator::generateLoadCharacter): 11871 (JSC::WREC::Generator::generateJumpIfNotEndOfInput): 11872 (JSC::WREC::Generator::generateBackreferenceQuantifier): 11873 (JSC::WREC::Generator::generateNonGreedyQuantifier): 11874 (JSC::WREC::Generator::generateGreedyQuantifier): 11875 (JSC::WREC::Generator::generatePatternCharacterPair): 11876 (JSC::WREC::Generator::generatePatternCharacter): 11877 (JSC::WREC::Generator::generateCharacterClassInvertedRange): 11878 (JSC::WREC::Generator::generateCharacterClassInverted): 11879 (JSC::WREC::Generator::generateAssertionBOL): 11880 (JSC::WREC::Generator::generateAssertionEOL): 11881 (JSC::WREC::Generator::generateAssertionWordBoundary): 11882 (JSC::WREC::Generator::generateBackreference): 11883 11884 2009-02-03 David Hyatt <hyatt (a] apple.com> 11885 11886 Fix a bug in Vector's shrinkCapacity method. It did not properly copy elements into the inline buffer 11887 when shrinking down from a size that was greater than the inline capacity. 11888 11889 Reviewed by Maciej 11890 11891 * wtf/Vector.h: 11892 (WTF::VectorBuffer::VectorBuffer): 11893 (WTF::VectorBuffer::allocateBuffer): 11894 11895 2009-02-03 Simon Hausmann <simon.hausmann (a] nokia.com> 11896 11897 Reviewed by Tor Arne Vestb. 11898 11899 Added accessor for JSByteArray storage. 11900 11901 * runtime/JSByteArray.h: 11902 (JSC::JSByteArray::storage): 11903 11904 2009-02-03 Dmitry Titov <dimich (a] chromium.org> 11905 11906 Reviewed by Alexey Proskuryakov. 11907 11908 https://bugs.webkit.org/show_bug.cgi?id=23560 11909 Implement SharedTimer on WorkerRunLoop 11910 11911 * JavaScriptCore.exp: 11912 Forgot to expose ThreadCondition::timedWait() in one of previous patches. 11913 11914 2009-02-02 Oliver Hunt <oliver (a] apple.com> 11915 11916 Reviewed by Gavin Barraclough. 11917 11918 <https://bugs.webkit.org/show_bug.cgi?id=21414> REGRESSION: Regular Expressions and character classes, shorthands and ranges 11919 <rdar://problem/6543487> 11920 11921 In certain circumstances when WREC::Generator::generateCharacterClassInvertedRange invokes 11922 itself recursively, it will incorrectly emit (and thus consume) the next single character 11923 match in the current character class. As WREC uses a binary search this out of sequence 11924 codegen could result in a character match being missed and so cause the regex to produce 11925 incorrect results. 11926 11927 * wrec/WRECGenerator.cpp: 11928 (JSC::WREC::Generator::generateCharacterClassInvertedRange): 11929 11930 2009-02-02 Darin Adler <darin (a] apple.com> 11931 11932 Reviewed by Dave Hyatt. 11933 11934 Bug 23676: Speed up uses of reserveCapacity on new vectors by adding a new reserveInitialCapacity 11935 https://bugs.webkit.org/show_bug.cgi?id=23676 11936 11937 * API/JSObjectRef.cpp: 11938 (JSObjectCopyPropertyNames): Use reserveInitialCapacity. 11939 * parser/Lexer.cpp: 11940 (JSC::Lexer::Lexer): Ditto. 11941 (JSC::Lexer::clear): Ditto. 11942 11943 * wtf/Vector.h: Added reserveInitialCapacity, a more efficient version of 11944 reserveCapacity for use when the vector is brand new (still size 0 with no 11945 capacity other than the inline capacity). 11946 11947 2009-01-30 Mark Rowe <mrowe (a] apple.com> 11948 11949 Rubber-stamped by Oliver Hunt. 11950 11951 <rdar://problem/6391501> Enable the JIT on Mac OS X x86_64 as it passes all tests. 11952 11953 * wtf/Platform.h: 11954 11955 2009-01-30 Oliver Hunt <oliver (a] apple.com> 11956 11957 Reviewed by Mark Rowe and Sam Weinig. 11958 11959 Finally fix load() to propagate exceptions correctly. 11960 11961 * jsc.cpp: 11962 (functionLoad): 11963 11964 2009-01-30 David Levin <levin (a] chromium.org> 11965 11966 Reviewed by Darin Adler. 11967 11968 https://bugs.webkit.org/show_bug.cgi?id=23618 11969 Templated worker tasks should be more error proof to use. 11970 Fix Chromium build. 11971 11972 * wtf/TypeTraits.h: 11973 (WTF::IsConvertibleToInteger::IsConvertibleToDouble): 11974 Avoid "possible loss of data" warning when using Microsoft's C++ compiler 11975 by avoiding an implicit conversion of int types to doubles. 11976 11977 2009-01-30 Laszlo Gombos <laszlo.1.gombos (a] nokia.com> 11978 11979 Reviewed by Simon Hausmann. 11980 11981 Bug 23580: GNU mode RVCT compilation support 11982 <https://bugs.webkit.org/show_bug.cgi?id=23580> 11983 11984 * pcre/pcre_exec.cpp: Use COMPILER(GCC) instead of __GNUC__. 11985 * wtf/FastMalloc.cpp: Ditto. 11986 (WTF::TCMallocStats::): 11987 * wtf/Platform.h: Don't define COMPILER(GCC) with RVCT --gnu. 11988 11989 2009-01-30 David Levin <levin (a] chromium.org> 11990 11991 Reviewed by Alexey Proskuryakov. 11992 11993 Bug 23618: Templated worker tasks should be more error proof to use 11994 <https://bugs.webkit.org/show_bug.cgi?id=23618> 11995 11996 Add the type traits needed for the generic worker tasks 11997 and compile asserts for them. 11998 11999 Add a summary header to the TypeTraits.h file to explain what is in there. 12000 12001 Add a note to explain IsPod's deficiencies. 12002 12003 * wtf/TypeTraits.h: 12004 12005 2009-01-30 David Levin <levin (a] chromium.org> 12006 12007 Reviewed by Alexey Proskuryakov. 12008 12009 Bug 23616: Various "template helpers" should be consolidated from isolated files in JavaScriptCore. 12010 <https://bugs.webkit.org/show_bug.cgi?id=23616> 12011 12012 * wtf/TypeTraits.h: Moved RemovePointer, IsPod, IsInteger to this file. 12013 12014 * wtf/OwnPtr.h: Use RemovePointer from TypeTraits.h. 12015 * wtf/RetainPtr.h: Ditto. 12016 12017 * wtf/HashTraits.h: Use IsInteger from TypeTraits.h. 12018 12019 * wtf/VectorTraits.h: Use IsPod from TypeTraits.h. 12020 12021 * GNUmakefile.am: 12022 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 12023 * JavaScriptCore.xcodeproj/project.pbxproj: 12024 Added TypeTraits.h. 12025 12026 2009-01-29 Stephanie Lewis <slewis (a] apple.com> 12027 12028 RS by Oliver Hunt. 12029 12030 Update the order files. 12031 12032 * JavaScriptCore.order: 12033 12034 2009-01-29 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 12035 12036 Reviewed by Oliver Hunt. 12037 12038 Bug 23551: Crash on page load with profiler enabled and running 12039 <https://bugs.webkit.org/show_bug.cgi?id=23551> 12040 <rdar://problem/6529521> 12041 12042 Interpreter::execute(FunctionBodyNode*, ...) calls Profiler::didExecute() 12043 with a stale CallFrame. If some part of the scope chain has already been 12044 freed, Profiler::didExecute() will crash when attempting to get the lexical 12045 global object. The fix is to make the didExecute() call use the caller's 12046 CallFrame, not the one made for the function call. In this case, the 12047 willExecute() call should also be changed to match. 12048 12049 Since this occurs in the actual inspector JS, it is difficult to reduce. 12050 I couldn't make a layout test. 12051 12052 * interpreter/Interpreter.cpp: 12053 (JSC::Interpreter::execute): 12054 12055 2009-01-28 Sam Weinig <sam (a] webkit.org> 12056 12057 Reviewed by Gavin Barraclough. 12058 12059 Fix for <rdar://problem/6525537> 12060 Hang occurs when closing Installer window (iTunes, Aperture) 12061 12062 * JavaScriptCore.exp: Export JSGlobalData::sharedInstance. 12063 12064 2009-01-28 Sam Weinig <sam (a] webkit.org> 12065 12066 Reviewed by Geoff Garen. 12067 12068 Initial patch by Mark Rowe. 12069 12070 <rdar://problem/6519356> 12071 REGRESSION (r36006): "out of memory" alert running dromaeo on Windows 12072 12073 Report the cost of the ArrayStorage vector more accurately/often. 12074 12075 * runtime/JSArray.cpp: 12076 (JSC::JSArray::JSArray): Report the extra cost even for a filled array 12077 because JSString using the single character optimization and immediates 12078 wont increase the cost themselves. 12079 (JSC::JSArray::putSlowCase): Update the cost when increasing the size of 12080 the array. 12081 (JSC::JSArray::increaseVectorLength): Ditto. 12082 12083 2009-01-28 Sam Weinig <sam (a] webkit.org> 12084 12085 Reviewed by Geoff Garen. 12086 12087 Fix for <rdar://problem/6129678> 12088 REGRESSION (Safari 3-4): Local variable not accessible from Dashcode console or variables view 12089 12090 Iterating the properties of activation objects accessed through the WebKit debugging 12091 APIs was broken by forced conversion of JSActivation to the global object. To fix this, 12092 we use a proxy activation object that acts more like a normal JSObject. 12093 12094 * debugger/DebuggerActivation.cpp: Added. 12095 (JSC::DebuggerActivation::DebuggerActivation): 12096 (JSC::DebuggerActivation::mark): 12097 (JSC::DebuggerActivation::className): 12098 (JSC::DebuggerActivation::getOwnPropertySlot): 12099 (JSC::DebuggerActivation::put): 12100 (JSC::DebuggerActivation::putWithAttributes): 12101 (JSC::DebuggerActivation::deleteProperty): 12102 (JSC::DebuggerActivation::getPropertyNames): 12103 (JSC::DebuggerActivation::getPropertyAttributes): 12104 (JSC::DebuggerActivation::defineGetter): 12105 (JSC::DebuggerActivation::defineSetter): 12106 (JSC::DebuggerActivation::lookupGetter): 12107 (JSC::DebuggerActivation::lookupSetter): 12108 * debugger/DebuggerActivation.h: Added. 12109 Proxy JSActivation object for Debugging. 12110 12111 * runtime/JSActivation.h: 12112 (JSC::JSActivation::isActivationObject): Added. 12113 * runtime/JSObject.h: 12114 (JSC::JSObject::isActivationObject): Added. 12115 12116 2009-01-28 David Kilzer <ddkilzer (a] apple.com> 12117 12118 Bug 23490: Remove initialRefCount argument from RefCounted class 12119 12120 <https://bugs.webkit.org/show_bug.cgi?id=23490> 12121 12122 Reviewed by Darin Adler. 12123 12124 RefCountedBase now always starts with a ref count of 1, so there 12125 is no need to pass the initialRefCount into the class anymore. 12126 12127 * wtf/ByteArray.h: 12128 (WTF::ByteArray::ByteArray): Removed call to RefCounted(1). 12129 * wtf/RefCounted.h: 12130 (WTF::RefCountedBase::RefCountedBase): Changed to start with a 12131 ref count of 1. 12132 (WTF::RefCounted::RefCounted): Removed initialRefCount argument 12133 and removed call to RefCounted(1). 12134 12135 2009-01-26 Adele Peterson <adele (a] apple.com> 12136 12137 Build fix. 12138 12139 * debugger/Debugger.cpp: 12140 12141 2009-01-26 Gavin Barraclough <barraclough (a] apple.com> 12142 12143 Reviewed by Darin Adler. 12144 12145 Fixes for eq null & neq null, on 64-bit JIT. 12146 https://bugs.webkit.org/show_bug.cgi?id=23559 12147 12148 This patch degrades 64-bit JIT performance on some benchmarks, 12149 due to the whole not-being-incorrect thing. 12150 12151 * jit/JIT.cpp: 12152 (JSC::JIT::privateCompileMainPass): 12153 12154 2009-01-26 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 12155 12156 Reviewed by Gavin Barraclough. 12157 12158 Bug 23552: Dashcode evaluator no longer works after making ExecStates actual call frames 12159 <https://bugs.webkit.org/show_bug.cgi?id=23552> 12160 <rdar://problem/6398839> 12161 12162 * JavaScriptCore.exp: 12163 * debugger/Debugger.cpp: 12164 (JSC::evaluateInGlobalCallFrame): Added so that WebScriptCallFrame can 12165 evaluate JS starting from a global call frame. 12166 * debugger/Debugger.h: 12167 12168 2009-01-25 Mark Rowe <mrowe (a] apple.com> 12169 12170 Rubber-stamped by Dan Bernstein. 12171 12172 Improve the consistency of settings in our .xcconfig files. 12173 12174 * Configurations/Base.xcconfig: Enable GCC_OBJC_CALL_CXX_CDTORS to match other projects. 12175 12176 2009-01-25 Darin Adler <darin (a] apple.com> 12177 12178 Reviewed by Mark Rowe. 12179 12180 Bug 23352: Turn on more compiler warnings in the Mac build 12181 https://bugs.webkit.org/show_bug.cgi?id=23352 12182 12183 Turn on the following warnings: 12184 12185 -Wcast-qual 12186 -Wextra-tokens 12187 -Wformat=2 12188 -Winit-self 12189 -Wmissing-noreturn 12190 -Wpacked 12191 -Wrendundant-decls 12192 12193 * Configurations/Base.xcconfig: Added the new warnings. Switched to -Wextra instead of 12194 -W for clarity since we don't have to support the older versions of gcc that require the 12195 old -W syntax. Since we now use -Wformat=2, removed -Wformat-security. Also removed 12196 -Wno-format-y2k since we can have that one on now. 12197 12198 2009-01-25 Judit Jasz <jasy (a] inf.u-szeged.hu> 12199 12200 Reviewed by Darin Adler. 12201 12202 Compilation problem fixing 12203 http://bugs.webkit.org/show_bug.cgi?id=23497 12204 12205 * jit/JITCall.cpp: 12206 (JSC::JIT::compileOpCall): Use JSValuePtr::encode. 12207 12208 2009-01-25 Darin Adler <darin (a] apple.com> 12209 12210 Reviewed by Sam Weinig. 12211 12212 Bug 23352: Turn on more compiler warnings in the Mac build 12213 https://bugs.webkit.org/show_bug.cgi?id=23352 12214 12215 Fourth patch: Deal with the last few stray warnings. 12216 12217 * parser/Parser.cpp: Only declare jscyyparse if it's not already declared. 12218 This makes both separate compilation and all-in-one compilation work with the 12219 -Wredundant-decls warning. 12220 12221 2009-01-25 Darin Adler <darin (a] apple.com> 12222 12223 Reviewed by Sam Weinig. 12224 12225 Bug 23352: Turn on more compiler warnings in the Mac build 12226 https://bugs.webkit.org/show_bug.cgi?id=23352 12227 12228 Third patch: Use the noreturn attribute on functions that don't 12229 return to prepare for the use of the -Wmissing-noreturn warning. 12230 12231 * jit/JITCall.cpp: 12232 (JSC::unreachable): Added NO_RETURN. 12233 * jsc.cpp: 12234 (functionQuit): Ditto. 12235 (printUsageStatement): Ditto. 12236 * wtf/AlwaysInline.h: Added definition of NO_RETURN. 12237 12238 2009-01-24 Oliver Hunt <oliver (a] apple.com> 12239 12240 Reviewed by Maciej Stachowiak. 12241 12242 Force inlining of Lexer::matchPunctuator 12243 12244 2.2% win when parsing jQuery, Mootools, Prototype, etc 12245 12246 * parser/Lexer.h: 12247 12248 2009-01-23 Gavin Barraclough <barraclough (a] apple.com> 12249 12250 Reviewed by Geoff Garen. 12251 12252 Fix for <rdar://problem/6126212> 12253 Ensure that callbacks out from the JSC interface are only allowed 12254 to return in reverse-chronological order to that in which they were 12255 made. If we allow earlier callbacks to return first, then this may 12256 result in setions of the RegisterFile in use by another thread 12257 being trampled. 12258 12259 See uber-comment in JSLock.h for details. 12260 12261 * runtime/JSLock.cpp: 12262 (JSC::JSLock::DropAllLocks::DropAllLocks): 12263 (JSC::JSLock::DropAllLocks::~DropAllLocks): 12264 12265 2009-01-23 Darin Adler <darin (a] apple.com> 12266 12267 Try to fix WX build. 12268 12269 * runtime/JSGlobalObjectFunctions.h: Include <wtf/unicode/Unicode.h> 12270 for the definition of UChar. 12271 12272 2009-01-23 Anders Carlsson <andersca (a] apple.com> 12273 12274 * Configurations/Base.xcconfig: 12275 GCC 4.0 build fix. 12276 12277 * runtime/JSNumberCell.h: 12278 64-bit build fix. 12279 12280 2009-01-23 Anders Carlsson <andersca (a] apple.com> 12281 12282 Reviewed by Sam Weinig. 12283 12284 Turn on -Wmissing-prototypes and fix the warnings. 12285 12286 * API/JSClassRef.cpp: 12287 (clearReferenceToPrototype): 12288 * Configurations/Base.xcconfig: 12289 * runtime/Collector.cpp: 12290 (JSC::getPlatformThreadRegisters): 12291 * runtime/ExceptionHelpers.cpp: 12292 (JSC::createError): 12293 * runtime/JSGlobalObjectFunctions.h: 12294 * runtime/JSNumberCell.h: 12295 * runtime/UString.cpp: 12296 (JSC::initializeStaticBaseString): 12297 (JSC::createRep): 12298 * wtf/FastMalloc.cpp: 12299 * wtf/Threading.cpp: 12300 12301 2009-01-22 Mark Rowe <mrowe (a] apple.com> 12302 12303 Rubber-stamped by Anders Carlsson. 12304 12305 Disable GCC_WARN_ABOUT_MISSING_PROTOTYPES temporarily. 12306 12307 Current versions of Xcode only respect it for C and Objective-C files, 12308 and our code doesn't currently compile if it is applied to C++ and 12309 Objective-C++ files. 12310 12311 * Configurations/Base.xcconfig: 12312 12313 2009-01-22 Steve Falkenburg <sfalken (a] apple.com> 12314 12315 https://bugs.webkit.org/show_bug.cgi?id=23489 12316 12317 Return currentTime() in correct units for the two early return cases. 12318 12319 Reviewed by Mark Rowe. 12320 12321 * wtf/CurrentTime.cpp: 12322 (WTF::currentTime): 12323 12324 2009-01-22 Sam Weinig <sam (a] webkit.org> 12325 12326 Reviewed by Mark Rowe. 12327 12328 Fix for <rdar://problem/6439247> 12329 FastMalloc allocating an extra 4MB of meta-data on 64-bit 12330 12331 Rely on the fact that on all known x86-64 platforms only use 48 bits of 12332 address space to shrink the initial size of the PageMap from ~4MB to 120K. 12333 For 64-bit we still use a 3-level radix tree, but now each level is only 12 12334 bits wide. 12335 12336 No performance change. 12337 12338 * wtf/FastMalloc.cpp: 12339 (WTF::MapSelector): Add specialization for 64 bit that takes into account the 12340 16 bits of unused address space on x86-64. 12341 12342 2009-01-22 Beth Dakin <bdakin (a] apple.com> 12343 12344 Reviewed by Sam Weinig. 12345 12346 Fix for https://bugs.webkit.org/show_bug.cgi?id=23461 LayoutTests/ 12347 fast/js/numeric-conversion.html is broken, and corresponding 12348 <rdar://problem/6514842> 12349 12350 The basic problem here is that parseInt(Infinity) should be NaN, 12351 but we were returning 0. NaN matches Safari 3.2.1 and Firefox. 12352 12353 * runtime/JSGlobalObjectFunctions.cpp: 12354 (JSC::globalFuncParseInt): 12355 12356 2009-01-22 Oliver Hunt <oliver (a] apple.com> 12357 12358 Reviewed by Geoff Garen. 12359 12360 <rdar://problem/6516853> (r39682-r39736) JSFunFuzz: crash on "(function(){({ x2: x }), })()" 12361 <https://bugs.webkit.org/show_bug.cgi?id=23479> 12362 12363 Automatic semicolon insertion was resulting in this being accepted in the initial 12364 nodeless parsing, but subsequent reparsing for code generation would fail, leading 12365 to a crash. The solution is to ensure that reparsing a function performs parsing 12366 in the same state as the initial parse. We do this by modifying the saved source 12367 ranges to include rather than exclude the opening and closing braces. 12368 12369 * bytecode/CodeBlock.cpp: 12370 (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): add an assertion for successful recompile 12371 * parser/Lexer.h: 12372 (JSC::Lexer::sourceCode): include rather than exclude braces. 12373 * parser/Nodes.h: 12374 (JSC::FunctionBodyNode::toSourceString): No need to append braces anymore. 12375 12376 2009-01-22 Dmitry Titov <dimich (a] chromium.org> 12377 12378 Reviewed by Alexey Proskuryakov. 12379 12380 https://bugs.webkit.org/show_bug.cgi?id=23373 12381 12382 Implement ThreadCondition::timedWait(). 12383 Since we borrow the code for condition variables from other sources, 12384 I did the same for timedWait(). See comments in ThreadingWin.cpp for 12385 rationale and more info. 12386 12387 * wtf/CONTRIBUTORS.pthreads-win32: 12388 Added. A list of Pthreads-win32 contributors mentioned in their license. The license itself 12389 is included into wtf/ThreadingWin32.cpp. 12390 12391 * wtf/Threading.h: 12392 * wtf/ThreadingWin.cpp: 12393 Additional info and Pthreads-win32 license at the beginning. 12394 (WTF::PlatformCondition::timedWait): new method, derived from Pthreads-win32. 12395 (WTF::PlatformCondition::signal): same 12396 (WTF::ThreadCondition::ThreadCondition): 12397 (WTF::ThreadCondition::~ThreadCondition): 12398 (WTF::ThreadCondition::wait): this now calls PlatformCondition::timedWait. 12399 (WTF::ThreadCondition::timedWait): same 12400 (WTF::ThreadCondition::signal): this now calls PlatformCondition::signal. 12401 (WTF::ThreadCondition::broadcast): same 12402 12403 2009-01-21 Gavin Barraclough <barraclough (a] apple.com> 12404 12405 Reviewed by Oliver Hunt. 12406 12407 Fix for https://bugs.webkit.org/show_bug.cgi?id=23469. 12408 12409 We need to check all numbers in integer switches, not just those 12410 represented as integer JSImmediates. 12411 12412 * interpreter/Interpreter.cpp: 12413 (JSC::Interpreter::privateExecute): 12414 (JSC::Interpreter::cti_op_switch_imm): 12415 12416 2009-01-21 Gavin Barraclough <barraclough (a] apple.com> 12417 12418 Reviewed by Geoff Garen. 12419 12420 Fix for https://bugs.webkit.org/show_bug.cgi?id=23468. 12421 12422 * interpreter/Interpreter.cpp: 12423 (JSC::Interpreter::privateExecute): 12424 12425 2009-01-21 Alexey Proskuryakov <ap (a] webkit.org> 12426 12427 Suggested by Oliver Hunt. Reviewed by Oliver Hunt. 12428 12429 https://bugs.webkit.org/show_bug.cgi?id=23456 12430 Function argument names leak 12431 12432 * parser/Nodes.cpp: (JSC::FunctionBodyNode::~FunctionBodyNode): Destruct parameter names. 12433 12434 2009-01-20 Oliver Hunt <oliver (a] apple.com> 12435 12436 Reviewed by NOBODY (Build fix). 12437 12438 Windows build fix 12439 12440 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 12441 12442 2009-01-20 Gavin Barraclough <barraclough (a] apple.com> 12443 12444 Reviewed by Mark Rowe. 12445 12446 Structure property table deleted offset maps are being leaked. 12447 Probably shouldn't be doing that. 12448 12449 https://bugs.webkit.org/show_bug.cgi?id=23442 12450 12451 * runtime/Structure.cpp: 12452 (JSC::Structure::~Structure): 12453 12454 2009-01-20 Oliver Hunt <oliver (a] apple.com> 12455 12456 Reviewed by NOBODY (build fix). 12457 12458 Attempt to fix gtk build 12459 12460 * GNUmakefile.am: 12461 12462 2009-01-20 Darin Adler <darin (a] apple.com> 12463 12464 * runtime/StringPrototype.cpp: 12465 (JSC::substituteBackreferences): Add back the initialization to fix the build. 12466 12467 2009-01-20 Darin Adler <darin (a] apple.com> 12468 12469 Reviewed by Mark Rowe. 12470 12471 Bug 23352: Turn on more compiler warnings in the Mac build 12472 https://bugs.webkit.org/show_bug.cgi?id=23352 12473 12474 First patch: Fix some simple cases of various warnings. 12475 12476 * pcre/pcre_compile.cpp: 12477 (jsRegExpCompile): Use const_cast to change const-ness. 12478 12479 * runtime/StringPrototype.cpp: 12480 (JSC::substituteBackreferences): Remove unneeded initialization and 12481 use UChar instead of unsigned short for UTF-16 values. 12482 12483 * wtf/dtoa.cpp: 12484 (WTF::strtod): Use const_cast to change const-ness. 12485 12486 2009-01-20 Oliver Hunt <oliver (a] apple.com> 12487 12488 Reviewed by NOBODY (build fix). 12489 12490 Whoops, remove runtime/ByteArray references from .pri and .scons builds, update .bkl 12491 12492 * JavaScriptCore.pri: 12493 * JavaScriptCore.scons: 12494 * JavaScriptCoreSources.bkl: 12495 12496 2009-01-20 Oliver Hunt <oliver (a] apple.com> 12497 12498 RS=Dan Bernstein. 12499 12500 Move runtime/ByteArray to wtf/ByteArray 12501 12502 * GNUmakefile.am: 12503 * JavaScriptCore.exp: 12504 * JavaScriptCore.pri: 12505 * JavaScriptCore.scons: 12506 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 12507 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 12508 * JavaScriptCore.xcodeproj/project.pbxproj: 12509 * runtime/JSByteArray.cpp: 12510 * runtime/JSByteArray.h: 12511 * wtf/ByteArray.cpp: Renamed from JavaScriptCore/runtime/ByteArray.cpp. 12512 (WTF::ByteArray::create): 12513 * wtf/ByteArray.h: Renamed from JavaScriptCore/runtime/ByteArray.h. 12514 (WTF::ByteArray::length): 12515 (WTF::ByteArray::set): 12516 (WTF::ByteArray::get): 12517 (WTF::ByteArray::data): 12518 (WTF::ByteArray::deref): 12519 (WTF::ByteArray::ByteArray): 12520 12521 2009-01-19 Sam Weinig <sam (a] webkit.org> 12522 12523 Rubber-stamped by Gavin Barraclough. 12524 12525 Remove temporary operator-> from JSValuePtr. 12526 12527 * API/JSCallbackFunction.cpp: 12528 (JSC::JSCallbackFunction::call): 12529 * API/JSCallbackObjectFunctions.h: 12530 (JSC::::call): 12531 (JSC::::toNumber): 12532 (JSC::::toString): 12533 * API/JSObjectRef.cpp: 12534 (JSObjectSetPrototype): 12535 * API/JSValueRef.cpp: 12536 (JSValueGetType): 12537 (JSValueIsUndefined): 12538 (JSValueIsNull): 12539 (JSValueIsBoolean): 12540 (JSValueIsNumber): 12541 (JSValueIsString): 12542 (JSValueIsObject): 12543 (JSValueIsObjectOfClass): 12544 (JSValueToBoolean): 12545 (JSValueToNumber): 12546 (JSValueToStringCopy): 12547 (JSValueToObject): 12548 * bytecode/CodeBlock.cpp: 12549 (JSC::valueToSourceString): 12550 (JSC::CodeBlock::mark): 12551 * bytecode/CodeBlock.h: 12552 (JSC::CodeBlock::isKnownNotImmediate): 12553 * bytecompiler/BytecodeGenerator.cpp: 12554 (JSC::BytecodeGenerator::emitEqualityOp): 12555 (JSC::keyForImmediateSwitch): 12556 * interpreter/Interpreter.cpp: 12557 (JSC::jsLess): 12558 (JSC::jsLessEq): 12559 (JSC::jsAddSlowCase): 12560 (JSC::jsAdd): 12561 (JSC::jsTypeStringForValue): 12562 (JSC::jsIsObjectType): 12563 (JSC::jsIsFunctionType): 12564 (JSC::isNotObject): 12565 (JSC::Interpreter::callEval): 12566 (JSC::Interpreter::throwException): 12567 (JSC::cachePrototypeChain): 12568 (JSC::Interpreter::tryCachePutByID): 12569 (JSC::countPrototypeChainEntriesAndCheckForProxies): 12570 (JSC::Interpreter::tryCacheGetByID): 12571 (JSC::Interpreter::privateExecute): 12572 (JSC::Interpreter::tryCTICachePutByID): 12573 (JSC::Interpreter::tryCTICacheGetByID): 12574 (JSC::Interpreter::cti_op_convert_this): 12575 (JSC::Interpreter::cti_op_add): 12576 (JSC::Interpreter::cti_op_pre_inc): 12577 (JSC::Interpreter::cti_op_put_by_id_generic): 12578 (JSC::Interpreter::cti_op_get_by_id_generic): 12579 (JSC::Interpreter::cti_op_put_by_id): 12580 (JSC::Interpreter::cti_op_put_by_id_second): 12581 (JSC::Interpreter::cti_op_put_by_id_fail): 12582 (JSC::Interpreter::cti_op_get_by_id): 12583 (JSC::Interpreter::cti_op_get_by_id_second): 12584 (JSC::Interpreter::cti_op_get_by_id_self_fail): 12585 (JSC::Interpreter::cti_op_get_by_id_proto_list): 12586 (JSC::Interpreter::cti_op_get_by_id_proto_list_full): 12587 (JSC::Interpreter::cti_op_get_by_id_proto_fail): 12588 (JSC::Interpreter::cti_op_get_by_id_array_fail): 12589 (JSC::Interpreter::cti_op_get_by_id_string_fail): 12590 (JSC::Interpreter::cti_op_instanceof): 12591 (JSC::Interpreter::cti_op_del_by_id): 12592 (JSC::Interpreter::cti_op_mul): 12593 (JSC::Interpreter::cti_op_call_JSFunction): 12594 (JSC::Interpreter::cti_op_call_NotJSFunction): 12595 (JSC::Interpreter::cti_op_construct_JSConstruct): 12596 (JSC::Interpreter::cti_op_construct_NotJSConstruct): 12597 (JSC::Interpreter::cti_op_get_by_val): 12598 (JSC::Interpreter::cti_op_get_by_val_byte_array): 12599 (JSC::Interpreter::cti_op_sub): 12600 (JSC::Interpreter::cti_op_put_by_val): 12601 (JSC::Interpreter::cti_op_put_by_val_array): 12602 (JSC::Interpreter::cti_op_put_by_val_byte_array): 12603 (JSC::Interpreter::cti_op_loop_if_true): 12604 (JSC::Interpreter::cti_op_negate): 12605 (JSC::Interpreter::cti_op_div): 12606 (JSC::Interpreter::cti_op_pre_dec): 12607 (JSC::Interpreter::cti_op_not): 12608 (JSC::Interpreter::cti_op_jtrue): 12609 (JSC::Interpreter::cti_op_post_inc): 12610 (JSC::Interpreter::cti_op_lshift): 12611 (JSC::Interpreter::cti_op_bitand): 12612 (JSC::Interpreter::cti_op_rshift): 12613 (JSC::Interpreter::cti_op_bitnot): 12614 (JSC::Interpreter::cti_op_mod): 12615 (JSC::Interpreter::cti_op_post_dec): 12616 (JSC::Interpreter::cti_op_urshift): 12617 (JSC::Interpreter::cti_op_bitxor): 12618 (JSC::Interpreter::cti_op_bitor): 12619 (JSC::Interpreter::cti_op_push_scope): 12620 (JSC::Interpreter::cti_op_is_undefined): 12621 (JSC::Interpreter::cti_op_is_boolean): 12622 (JSC::Interpreter::cti_op_is_number): 12623 (JSC::Interpreter::cti_op_to_jsnumber): 12624 (JSC::Interpreter::cti_op_in): 12625 (JSC::Interpreter::cti_op_put_by_index): 12626 (JSC::Interpreter::cti_op_switch_imm): 12627 (JSC::Interpreter::cti_op_switch_char): 12628 (JSC::Interpreter::cti_op_switch_string): 12629 (JSC::Interpreter::cti_op_del_by_val): 12630 (JSC::Interpreter::cti_op_put_getter): 12631 (JSC::Interpreter::cti_op_put_setter): 12632 (JSC::Interpreter::cti_op_new_error): 12633 * interpreter/Interpreter.h: 12634 (JSC::Interpreter::isJSArray): 12635 (JSC::Interpreter::isJSString): 12636 (JSC::Interpreter::isJSByteArray): 12637 * interpreter/Register.h: 12638 (JSC::Register::marked): 12639 (JSC::Register::mark): 12640 * jit/JITInlineMethods.h: 12641 (JSC::JIT::getConstantOperandImmediateInt): 12642 (JSC::JIT::isOperandConstantImmediateInt): 12643 * jsc.cpp: 12644 (functionPrint): 12645 (functionDebug): 12646 (functionRun): 12647 (functionLoad): 12648 (runWithScripts): 12649 (runInteractive): 12650 * parser/Nodes.cpp: 12651 (JSC::processClauseList): 12652 * profiler/ProfileGenerator.cpp: 12653 (JSC::ProfileGenerator::addParentForConsoleStart): 12654 * profiler/Profiler.cpp: 12655 (JSC::Profiler::createCallIdentifier): 12656 * runtime/ArrayConstructor.cpp: 12657 (JSC::constructArrayWithSizeQuirk): 12658 * runtime/ArrayPrototype.cpp: 12659 (JSC::arrayProtoFuncToString): 12660 (JSC::arrayProtoFuncToLocaleString): 12661 (JSC::arrayProtoFuncJoin): 12662 (JSC::arrayProtoFuncConcat): 12663 (JSC::arrayProtoFuncPop): 12664 (JSC::arrayProtoFuncPush): 12665 (JSC::arrayProtoFuncReverse): 12666 (JSC::arrayProtoFuncShift): 12667 (JSC::arrayProtoFuncSlice): 12668 (JSC::arrayProtoFuncSort): 12669 (JSC::arrayProtoFuncSplice): 12670 (JSC::arrayProtoFuncUnShift): 12671 (JSC::arrayProtoFuncFilter): 12672 (JSC::arrayProtoFuncMap): 12673 (JSC::arrayProtoFuncEvery): 12674 (JSC::arrayProtoFuncForEach): 12675 (JSC::arrayProtoFuncSome): 12676 (JSC::arrayProtoFuncIndexOf): 12677 (JSC::arrayProtoFuncLastIndexOf): 12678 * runtime/BooleanConstructor.cpp: 12679 (JSC::constructBoolean): 12680 (JSC::callBooleanConstructor): 12681 * runtime/BooleanPrototype.cpp: 12682 (JSC::booleanProtoFuncToString): 12683 (JSC::booleanProtoFuncValueOf): 12684 * runtime/Collector.cpp: 12685 (JSC::Heap::protect): 12686 (JSC::Heap::unprotect): 12687 (JSC::Heap::heap): 12688 (JSC::Heap::collect): 12689 (JSC::typeName): 12690 * runtime/Completion.cpp: 12691 (JSC::evaluate): 12692 * runtime/DateConstructor.cpp: 12693 (JSC::constructDate): 12694 (JSC::dateParse): 12695 (JSC::dateUTC): 12696 * runtime/DateInstance.h: 12697 (JSC::DateInstance::internalNumber): 12698 * runtime/DatePrototype.cpp: 12699 (JSC::formatLocaleDate): 12700 (JSC::fillStructuresUsingTimeArgs): 12701 (JSC::fillStructuresUsingDateArgs): 12702 (JSC::dateProtoFuncToString): 12703 (JSC::dateProtoFuncToUTCString): 12704 (JSC::dateProtoFuncToDateString): 12705 (JSC::dateProtoFuncToTimeString): 12706 (JSC::dateProtoFuncToLocaleString): 12707 (JSC::dateProtoFuncToLocaleDateString): 12708 (JSC::dateProtoFuncToLocaleTimeString): 12709 (JSC::dateProtoFuncGetTime): 12710 (JSC::dateProtoFuncGetFullYear): 12711 (JSC::dateProtoFuncGetUTCFullYear): 12712 (JSC::dateProtoFuncToGMTString): 12713 (JSC::dateProtoFuncGetMonth): 12714 (JSC::dateProtoFuncGetUTCMonth): 12715 (JSC::dateProtoFuncGetDate): 12716 (JSC::dateProtoFuncGetUTCDate): 12717 (JSC::dateProtoFuncGetDay): 12718 (JSC::dateProtoFuncGetUTCDay): 12719 (JSC::dateProtoFuncGetHours): 12720 (JSC::dateProtoFuncGetUTCHours): 12721 (JSC::dateProtoFuncGetMinutes): 12722 (JSC::dateProtoFuncGetUTCMinutes): 12723 (JSC::dateProtoFuncGetSeconds): 12724 (JSC::dateProtoFuncGetUTCSeconds): 12725 (JSC::dateProtoFuncGetMilliSeconds): 12726 (JSC::dateProtoFuncGetUTCMilliseconds): 12727 (JSC::dateProtoFuncGetTimezoneOffset): 12728 (JSC::dateProtoFuncSetTime): 12729 (JSC::setNewValueFromTimeArgs): 12730 (JSC::setNewValueFromDateArgs): 12731 (JSC::dateProtoFuncSetYear): 12732 (JSC::dateProtoFuncGetYear): 12733 * runtime/ErrorConstructor.cpp: 12734 (JSC::constructError): 12735 * runtime/ErrorPrototype.cpp: 12736 (JSC::errorProtoFuncToString): 12737 * runtime/ExceptionHelpers.cpp: 12738 (JSC::createError): 12739 (JSC::createErrorMessage): 12740 * runtime/FunctionConstructor.cpp: 12741 (JSC::constructFunction): 12742 * runtime/FunctionPrototype.cpp: 12743 (JSC::functionProtoFuncToString): 12744 (JSC::functionProtoFuncApply): 12745 (JSC::functionProtoFuncCall): 12746 * runtime/GetterSetter.cpp: 12747 (JSC::GetterSetter::toObject): 12748 * runtime/JSActivation.cpp: 12749 (JSC::JSActivation::getOwnPropertySlot): 12750 * runtime/JSArray.cpp: 12751 (JSC::JSArray::put): 12752 (JSC::JSArray::mark): 12753 (JSC::JSArray::sort): 12754 (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): 12755 (JSC::JSArray::compactForSorting): 12756 * runtime/JSByteArray.h: 12757 (JSC::JSByteArray::setIndex): 12758 * runtime/JSCell.h: 12759 (JSC::asCell): 12760 * runtime/JSFunction.cpp: 12761 (JSC::JSFunction::call): 12762 (JSC::JSFunction::construct): 12763 * runtime/JSGlobalObject.cpp: 12764 (JSC::markIfNeeded): 12765 (JSC::lastInPrototypeChain): 12766 * runtime/JSGlobalObjectFunctions.cpp: 12767 (JSC::encode): 12768 (JSC::decode): 12769 (JSC::globalFuncEval): 12770 (JSC::globalFuncParseInt): 12771 (JSC::globalFuncParseFloat): 12772 (JSC::globalFuncIsNaN): 12773 (JSC::globalFuncIsFinite): 12774 (JSC::globalFuncEscape): 12775 (JSC::globalFuncUnescape): 12776 (JSC::globalFuncJSCPrint): 12777 * runtime/JSImmediate.cpp: 12778 (JSC::JSImmediate::toThisObject): 12779 (JSC::JSImmediate::toObject): 12780 (JSC::JSImmediate::prototype): 12781 (JSC::JSImmediate::toString): 12782 * runtime/JSImmediate.h: 12783 * runtime/JSObject.cpp: 12784 (JSC::JSObject::mark): 12785 (JSC::JSObject::put): 12786 (JSC::callDefaultValueFunction): 12787 (JSC::JSObject::getPrimitiveNumber): 12788 (JSC::JSObject::defineGetter): 12789 (JSC::JSObject::defineSetter): 12790 (JSC::JSObject::lookupGetter): 12791 (JSC::JSObject::lookupSetter): 12792 (JSC::JSObject::hasInstance): 12793 (JSC::JSObject::toNumber): 12794 (JSC::JSObject::toString): 12795 * runtime/JSObject.h: 12796 (JSC::JSObject::JSObject): 12797 (JSC::JSObject::inlineGetOwnPropertySlot): 12798 (JSC::JSObject::getOwnPropertySlotForWrite): 12799 (JSC::JSObject::getPropertySlot): 12800 (JSC::JSValuePtr::get): 12801 * runtime/JSPropertyNameIterator.h: 12802 (JSC::JSPropertyNameIterator::create): 12803 * runtime/JSString.cpp: 12804 (JSC::JSString::getOwnPropertySlot): 12805 * runtime/JSValue.h: 12806 * runtime/JSWrapperObject.cpp: 12807 (JSC::JSWrapperObject::mark): 12808 * runtime/JSWrapperObject.h: 12809 (JSC::JSWrapperObject::setInternalValue): 12810 * runtime/MathObject.cpp: 12811 (JSC::mathProtoFuncAbs): 12812 (JSC::mathProtoFuncACos): 12813 (JSC::mathProtoFuncASin): 12814 (JSC::mathProtoFuncATan): 12815 (JSC::mathProtoFuncATan2): 12816 (JSC::mathProtoFuncCeil): 12817 (JSC::mathProtoFuncCos): 12818 (JSC::mathProtoFuncExp): 12819 (JSC::mathProtoFuncFloor): 12820 (JSC::mathProtoFuncLog): 12821 (JSC::mathProtoFuncMax): 12822 (JSC::mathProtoFuncMin): 12823 (JSC::mathProtoFuncPow): 12824 (JSC::mathProtoFuncRound): 12825 (JSC::mathProtoFuncSin): 12826 (JSC::mathProtoFuncSqrt): 12827 (JSC::mathProtoFuncTan): 12828 * runtime/NativeErrorConstructor.cpp: 12829 (JSC::NativeErrorConstructor::NativeErrorConstructor): 12830 (JSC::NativeErrorConstructor::construct): 12831 * runtime/NumberConstructor.cpp: 12832 (JSC::constructWithNumberConstructor): 12833 (JSC::callNumberConstructor): 12834 * runtime/NumberPrototype.cpp: 12835 (JSC::numberProtoFuncToString): 12836 (JSC::numberProtoFuncToLocaleString): 12837 (JSC::numberProtoFuncValueOf): 12838 (JSC::numberProtoFuncToFixed): 12839 (JSC::numberProtoFuncToExponential): 12840 (JSC::numberProtoFuncToPrecision): 12841 * runtime/ObjectConstructor.cpp: 12842 (JSC::constructObject): 12843 * runtime/ObjectPrototype.cpp: 12844 (JSC::objectProtoFuncValueOf): 12845 (JSC::objectProtoFuncHasOwnProperty): 12846 (JSC::objectProtoFuncIsPrototypeOf): 12847 (JSC::objectProtoFuncDefineGetter): 12848 (JSC::objectProtoFuncDefineSetter): 12849 (JSC::objectProtoFuncLookupGetter): 12850 (JSC::objectProtoFuncLookupSetter): 12851 (JSC::objectProtoFuncPropertyIsEnumerable): 12852 (JSC::objectProtoFuncToLocaleString): 12853 (JSC::objectProtoFuncToString): 12854 * runtime/Operations.h: 12855 (JSC::JSValuePtr::equalSlowCaseInline): 12856 (JSC::JSValuePtr::strictEqual): 12857 (JSC::JSValuePtr::strictEqualSlowCaseInline): 12858 * runtime/Protect.h: 12859 (JSC::gcProtect): 12860 (JSC::gcUnprotect): 12861 * runtime/RegExpConstructor.cpp: 12862 (JSC::setRegExpConstructorInput): 12863 (JSC::setRegExpConstructorMultiline): 12864 (JSC::constructRegExp): 12865 * runtime/RegExpObject.cpp: 12866 (JSC::setRegExpObjectLastIndex): 12867 (JSC::RegExpObject::match): 12868 * runtime/RegExpPrototype.cpp: 12869 (JSC::regExpProtoFuncTest): 12870 (JSC::regExpProtoFuncExec): 12871 (JSC::regExpProtoFuncCompile): 12872 (JSC::regExpProtoFuncToString): 12873 * runtime/StringConstructor.cpp: 12874 (JSC::stringFromCharCodeSlowCase): 12875 (JSC::stringFromCharCode): 12876 (JSC::constructWithStringConstructor): 12877 (JSC::callStringConstructor): 12878 * runtime/StringPrototype.cpp: 12879 (JSC::stringProtoFuncReplace): 12880 (JSC::stringProtoFuncToString): 12881 (JSC::stringProtoFuncCharAt): 12882 (JSC::stringProtoFuncCharCodeAt): 12883 (JSC::stringProtoFuncConcat): 12884 (JSC::stringProtoFuncIndexOf): 12885 (JSC::stringProtoFuncLastIndexOf): 12886 (JSC::stringProtoFuncMatch): 12887 (JSC::stringProtoFuncSearch): 12888 (JSC::stringProtoFuncSlice): 12889 (JSC::stringProtoFuncSplit): 12890 (JSC::stringProtoFuncSubstr): 12891 (JSC::stringProtoFuncSubstring): 12892 (JSC::stringProtoFuncToLowerCase): 12893 (JSC::stringProtoFuncToUpperCase): 12894 (JSC::stringProtoFuncLocaleCompare): 12895 (JSC::stringProtoFuncBig): 12896 (JSC::stringProtoFuncSmall): 12897 (JSC::stringProtoFuncBlink): 12898 (JSC::stringProtoFuncBold): 12899 (JSC::stringProtoFuncFixed): 12900 (JSC::stringProtoFuncItalics): 12901 (JSC::stringProtoFuncStrike): 12902 (JSC::stringProtoFuncSub): 12903 (JSC::stringProtoFuncSup): 12904 (JSC::stringProtoFuncFontcolor): 12905 (JSC::stringProtoFuncFontsize): 12906 (JSC::stringProtoFuncAnchor): 12907 (JSC::stringProtoFuncLink): 12908 * runtime/Structure.cpp: 12909 (JSC::Structure::Structure): 12910 (JSC::Structure::getEnumerablePropertyNames): 12911 (JSC::Structure::createCachedPrototypeChain): 12912 * runtime/Structure.h: 12913 (JSC::Structure::mark): 12914 * runtime/StructureChain.cpp: 12915 (JSC::StructureChain::StructureChain): 12916 12917 2009-01-19 Darin Adler <darin (a] apple.com> 12918 12919 Reviewed by Sam Weinig. 12920 12921 Bug 23409: REGRESSION: RegExp 'replace()' function improperly processes '$$' 12922 <https://bugs.webkit.org/show_bug.cgi?id=23409> 12923 <rdar://problem/6505723> 12924 12925 Test: fast/js/string-replace-3.html 12926 12927 * runtime/StringPrototype.cpp: 12928 (JSC::substituteBackreferences): Remove code that adds an extra $ -- not sure 12929 how this ever worked. 12930 12931 2009-01-16 Gavin Barraclough <barraclough (a] apple.com> 12932 12933 Reviewed by Oliver Hunt. 12934 12935 On x86-64 jit, cache JSImmedate::TagMask & JSImmedate::TagTypeNumber in 12936 registers, save reloading them every time they're used. 12937 12938 Draws x86-64 jit performance close to that of i386 jit. 12939 12940 * assembler/MacroAssembler.h: 12941 (JSC::MacroAssembler::subPtr): 12942 (JSC::MacroAssembler::jnzPtr): 12943 (JSC::MacroAssembler::jzPtr): 12944 * jit/JIT.cpp: 12945 (JSC::JIT::privateCompileMainPass): 12946 * jit/JIT.h: 12947 * jit/JITArithmetic.cpp: 12948 (JSC::JIT::compileBinaryArithOpSlowCase): 12949 * jit/JITInlineMethods.h: 12950 (JSC::JIT::emitJumpIfJSCell): 12951 (JSC::JIT::emitJumpIfNotJSCell): 12952 (JSC::JIT::emitJumpIfImmediateNumber): 12953 (JSC::JIT::emitJumpIfNotImmediateNumber): 12954 (JSC::JIT::emitJumpIfImmediateInteger): 12955 (JSC::JIT::emitJumpIfNotImmediateInteger): 12956 (JSC::JIT::emitFastArithIntToImmNoCheck): 12957 12958 2009-01-16 Gavin Barraclough <barraclough (a] apple.com> 12959 12960 Reviewed by Oliver Hunt. 12961 12962 Add support to x86-64 JIT for inline double precision arithmetic ops. 12963 +5/6% on x86-64, JIT enabled, sunspider. 12964 12965 * assembler/MacroAssembler.h: 12966 (JSC::MacroAssembler::addPtr): 12967 * assembler/X86Assembler.h: 12968 (JSC::X86Assembler::movq_rr): 12969 * jit/JIT.h: 12970 * jit/JITArithmetic.cpp: 12971 (JSC::JIT::compileFastArith_op_pre_inc): 12972 (JSC::JIT::compileBinaryArithOp): 12973 (JSC::JIT::compileBinaryArithOpSlowCase): 12974 (JSC::JIT::compileFastArith_op_add): 12975 (JSC::JIT::compileFastArithSlow_op_add): 12976 (JSC::JIT::compileFastArith_op_mul): 12977 (JSC::JIT::compileFastArithSlow_op_mul): 12978 (JSC::JIT::compileFastArith_op_sub): 12979 (JSC::JIT::compileFastArithSlow_op_sub): 12980 * parser/ResultType.h: 12981 (JSC::ResultType::isReusable): 12982 (JSC::ResultType::isInt32): 12983 (JSC::ResultType::definitelyIsNumber): 12984 (JSC::ResultType::mightBeNumber): 12985 (JSC::ResultType::isNotNumber): 12986 (JSC::ResultType::unknownType): 12987 12988 2009-01-16 Gavin Barraclough <barraclough (a] apple.com> 12989 12990 Reviewed by Geoff Garen. 12991 12992 Fixes for SamplingTool. 12993 12994 https://bugs.webkit.org/show_bug.cgi?id=23390 12995 12996 * assembler/MacroAssembler.h: 12997 (JSC::MacroAssembler::storePtr): 12998 * bytecode/SamplingTool.cpp: 12999 (JSC::SamplingTool::run): 13000 (JSC::SamplingTool::dump): 13001 * bytecode/SamplingTool.h: 13002 (JSC::SamplingTool::encodeSample): 13003 * jit/JIT.cpp: 13004 (JSC::JIT::privateCompileMainPass): 13005 (JSC::JIT::privateCompile): 13006 * jit/JIT.h: 13007 (JSC::JIT::samplingToolTrackCodeBlock): 13008 * jit/JITCall.cpp: 13009 (JSC::JIT::compileOpCall): 13010 (JSC::JIT::compileOpCallSlowCase): 13011 * jit/JITInlineMethods.h: 13012 (JSC::JIT::emitCTICall_internal): 13013 13014 2009-01-16 Geoffrey Garen <ggaren (a] apple.com> 13015 13016 Reviewed by Darin Adler. 13017 13018 Fixed <rdar://problem/6452301> REGRESSION: Latest WebKit nightlies 13019 turn "c" into "" when stripping \\c_ character 13020 13021 * wrec/WRECParser.cpp: 13022 (JSC::WREC::Parser::consumeEscape): Mimic a Firefox quirk when parsing 13023 control escapes inside character classes. 13024 13025 2009-01-16 Adam Roben <aroben (a] apple.com> 13026 13027 Windows build fix 13028 13029 * wrec/WRECParser.cpp: 13030 (JSC::WREC::Parser::parseParentheses): Removed unreachable code. 13031 13032 2009-01-15 Geoffrey Garen <ggaren (a] apple.com> 13033 13034 Reviewed by Cameron Zwarich. 13035 13036 Fixed <rdar://problem/6471394> REGRESSION (r39164): Discarding quantifier 13037 on assertion gives incorrect result (23075) 13038 13039 https://bugs.webkit.org/show_bug.cgi?id=23075 13040 13041 * pcre/pcre_compile.cpp: 13042 (compileBranch): Throw away an assertion if it's followed by a quantifier 13043 with a 0 minimum, to match SpiderMonkey, v8, and the ECMA spec. 13044 13045 * wrec/WRECParser.cpp: 13046 (JSC::WREC::Parser::parseParentheses): Fall back on PCRE for the rare 13047 case of an assertion with a quantifier with a 0 minimum, since we 13048 don't handle quantified subexpressions yet, and in this special case, 13049 we can't just throw away the quantifier. 13050 13051 2009-01-15 Gavin Barraclough <barraclough (a] apple.com> 13052 13053 Reviewed by Oliver Hunt. 13054 13055 Add support in ResultType to track that the results of bitops 13056 are always of type int32_t. 13057 13058 * parser/Nodes.cpp: 13059 (JSC::ReadModifyResolveNode::emitBytecode): 13060 (JSC::ReadModifyDotNode::emitBytecode): 13061 (JSC::ReadModifyBracketNode::emitBytecode): 13062 * parser/Nodes.h: 13063 (JSC::ExpressionNode::): 13064 (JSC::BooleanNode::): 13065 (JSC::NumberNode::): 13066 (JSC::StringNode::): 13067 (JSC::PrePostResolveNode::): 13068 (JSC::TypeOfResolveNode::): 13069 (JSC::TypeOfValueNode::): 13070 (JSC::UnaryPlusNode::): 13071 (JSC::NegateNode::): 13072 (JSC::BitwiseNotNode::): 13073 (JSC::LogicalNotNode::): 13074 (JSC::MultNode::): 13075 (JSC::DivNode::): 13076 (JSC::ModNode::): 13077 (JSC::SubNode::): 13078 (JSC::LeftShiftNode::): 13079 (JSC::RightShiftNode::): 13080 (JSC::UnsignedRightShiftNode::): 13081 (JSC::LessNode::): 13082 (JSC::GreaterNode::): 13083 (JSC::LessEqNode::): 13084 (JSC::GreaterEqNode::): 13085 (JSC::InstanceOfNode::): 13086 (JSC::EqualNode::): 13087 (JSC::NotEqualNode::): 13088 (JSC::StrictEqualNode::): 13089 (JSC::NotStrictEqualNode::): 13090 (JSC::BitAndNode::): 13091 (JSC::BitOrNode::): 13092 (JSC::BitXOrNode::): 13093 (JSC::LogicalOpNode::): 13094 * parser/ResultType.h: 13095 (JSC::ResultType::isInt32): 13096 (JSC::ResultType::isNotNumber): 13097 (JSC::ResultType::booleanType): 13098 (JSC::ResultType::numberType): 13099 (JSC::ResultType::numberTypeCanReuse): 13100 (JSC::ResultType::numberTypeCanReuseIsInt32): 13101 (JSC::ResultType::stringOrNumberTypeCanReuse): 13102 (JSC::ResultType::stringType): 13103 (JSC::ResultType::unknownType): 13104 (JSC::ResultType::forAdd): 13105 (JSC::ResultType::forBitOp): 13106 (JSC::OperandTypes::OperandTypes): 13107 13108 2009-01-15 Gavin Barraclough <barraclough (a] apple.com> 13109 13110 Reviewed by Oliver Hunt. 13111 13112 Add support for integer addition, subtraction and multiplication 13113 in JIT code on x86-64. 13114 13115 * assembler/MacroAssembler.h: 13116 (JSC::MacroAssembler::mul32): 13117 (JSC::MacroAssembler::sub32): 13118 (JSC::MacroAssembler::joMul32): 13119 (JSC::MacroAssembler::joSub32): 13120 * jit/JIT.cpp: 13121 (JSC::JIT::privateCompileMainPass): 13122 (JSC::JIT::privateCompileSlowCases): 13123 * jit/JIT.h: 13124 * jit/JITArithmetic.cpp: 13125 (JSC::JIT::compileFastArith_op_add): 13126 (JSC::JIT::compileFastArithSlow_op_add): 13127 (JSC::JIT::compileFastArith_op_mul): 13128 (JSC::JIT::compileFastArithSlow_op_mul): 13129 (JSC::JIT::compileFastArith_op_sub): 13130 (JSC::JIT::compileFastArithSlow_op_sub): 13131 13132 2009-01-15 Gavin Barraclough <barraclough (a] apple.com> 13133 13134 Reviewed by Geoff Garen. 13135 13136 On x86-64 allow JSImmediate to encode 64-bit double precision values. 13137 This patch only affects builds that set USE(ALTERNATE_JSIMMEDIATE). 13138 Updates the implementation of JSValuePtr:: and JSImmediate:: methods 13139 that operate on neumeric values to be be aware of the new representation. 13140 When this representation is in use, the class JSNumberCell is redundant 13141 and is compiled out. 13142 13143 The format of the new immediate representation is documented in JSImmediate.h. 13144 13145 * JavaScriptCore.exp: 13146 * assembler/MacroAssembler.h: 13147 (JSC::MacroAssembler::subPtr): 13148 * assembler/X86Assembler.h: 13149 (JSC::X86Assembler::): 13150 (JSC::X86Assembler::subq_rr): 13151 (JSC::X86Assembler::movq_rr): 13152 (JSC::X86Assembler::ucomisd_rr): 13153 (JSC::X86Assembler::X86InstructionFormatter::twoByteOp64): 13154 * interpreter/Interpreter.cpp: 13155 (JSC::Interpreter::cti_op_stricteq): 13156 (JSC::Interpreter::cti_op_nstricteq): 13157 * jit/JIT.cpp: 13158 (JSC::JIT::compileOpStrictEq): 13159 (JSC::JIT::privateCompileMainPass): 13160 (JSC::JIT::privateCompileSlowCases): 13161 * jit/JIT.h: 13162 * jit/JITArithmetic.cpp: 13163 (JSC::JIT::compileFastArith_op_lshift): 13164 (JSC::JIT::compileFastArith_op_rshift): 13165 (JSC::JIT::compileFastArith_op_bitand): 13166 (JSC::JIT::compileFastArith_op_mod): 13167 (JSC::JIT::compileFastArith_op_add): 13168 (JSC::JIT::compileFastArith_op_mul): 13169 (JSC::JIT::compileFastArith_op_post_inc): 13170 (JSC::JIT::compileFastArith_op_post_dec): 13171 (JSC::JIT::compileFastArith_op_pre_inc): 13172 (JSC::JIT::compileFastArith_op_pre_dec): 13173 (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): 13174 (JSC::JIT::compileBinaryArithOp): 13175 * jit/JITInlineMethods.h: 13176 (JSC::JIT::emitJumpIfBothJSCells): 13177 (JSC::JIT::emitJumpIfEitherNumber): 13178 (JSC::JIT::emitJumpIfNotEitherNumber): 13179 (JSC::JIT::emitJumpIfImmediateIntegerNumber): 13180 (JSC::JIT::emitJumpIfNotImmediateIntegerNumber): 13181 (JSC::JIT::emitJumpIfNotImmediateIntegerNumbers): 13182 (JSC::JIT::emitJumpSlowCaseIfNotImmediateIntegerNumber): 13183 (JSC::JIT::emitJumpSlowCaseIfNotImmediateIntegerNumbers): 13184 (JSC::JIT::emitFastArithDeTagImmediate): 13185 (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): 13186 (JSC::JIT::emitFastArithReTagImmediate): 13187 (JSC::JIT::emitFastArithIntToImmNoCheck): 13188 * runtime/JSCell.h: 13189 * runtime/JSGlobalData.cpp: 13190 (JSC::JSGlobalData::JSGlobalData): 13191 * runtime/JSImmediate.cpp: 13192 (JSC::JSImmediate::toThisObject): 13193 (JSC::JSImmediate::toObject): 13194 (JSC::JSImmediate::toString): 13195 * runtime/JSImmediate.h: 13196 (JSC::wtf_reinterpret_cast): 13197 (JSC::JSImmediate::isNumber): 13198 (JSC::JSImmediate::isIntegerNumber): 13199 (JSC::JSImmediate::isDoubleNumber): 13200 (JSC::JSImmediate::isPositiveIntegerNumber): 13201 (JSC::JSImmediate::areBothImmediateIntegerNumbers): 13202 (JSC::JSImmediate::makeInt): 13203 (JSC::JSImmediate::makeDouble): 13204 (JSC::JSImmediate::doubleValue): 13205 (JSC::doubleToBoolean): 13206 (JSC::JSImmediate::toBoolean): 13207 (JSC::JSImmediate::getTruncatedUInt32): 13208 (JSC::JSImmediate::makeOutOfIntegerRange): 13209 (JSC::JSImmediate::from): 13210 (JSC::JSImmediate::getTruncatedInt32): 13211 (JSC::JSImmediate::toDouble): 13212 (JSC::JSImmediate::getUInt32): 13213 (JSC::JSValuePtr::isInt32Fast): 13214 (JSC::JSValuePtr::isUInt32Fast): 13215 (JSC::JSValuePtr::areBothInt32Fast): 13216 (JSC::JSFastMath::canDoFastBitwiseOperations): 13217 (JSC::JSFastMath::xorImmediateNumbers): 13218 (JSC::JSFastMath::canDoFastRshift): 13219 (JSC::JSFastMath::canDoFastUrshift): 13220 (JSC::JSFastMath::rightShiftImmediateNumbers): 13221 (JSC::JSFastMath::canDoFastAdditiveOperations): 13222 (JSC::JSFastMath::addImmediateNumbers): 13223 (JSC::JSFastMath::subImmediateNumbers): 13224 * runtime/JSNumberCell.cpp: 13225 (JSC::jsNumberCell): 13226 * runtime/JSNumberCell.h: 13227 (JSC::createNumberStructure): 13228 (JSC::isNumberCell): 13229 (JSC::asNumberCell): 13230 (JSC::jsNumber): 13231 (JSC::JSValuePtr::isDoubleNumber): 13232 (JSC::JSValuePtr::getDoubleNumber): 13233 (JSC::JSValuePtr::isNumber): 13234 (JSC::JSValuePtr::uncheckedGetNumber): 13235 (JSC::jsNaN): 13236 (JSC::JSValuePtr::getNumber): 13237 (JSC::JSValuePtr::numberToInt32): 13238 (JSC::JSValuePtr::numberToUInt32): 13239 * runtime/JSValue.h: 13240 * runtime/NumberConstructor.cpp: 13241 (JSC::numberConstructorNegInfinity): 13242 (JSC::numberConstructorPosInfinity): 13243 (JSC::numberConstructorMaxValue): 13244 (JSC::numberConstructorMinValue): 13245 * runtime/NumberObject.cpp: 13246 (JSC::constructNumber): 13247 * runtime/NumberObject.h: 13248 * runtime/Operations.h: 13249 (JSC::JSValuePtr::equal): 13250 (JSC::JSValuePtr::equalSlowCaseInline): 13251 (JSC::JSValuePtr::strictEqual): 13252 (JSC::JSValuePtr::strictEqualSlowCaseInline): 13253 * wtf/Platform.h: 13254 13255 2009-01-15 Sam Weinig <sam (a] webkit.org> 13256 13257 Reviewed by Geoffrey Garen. 13258 13259 <rdar://problem/6045018> 13260 REGRESSION (r34838): JavaScript objects appear to be leaked after loading google.com 13261 13262 Subtract the number of JSStrings cached in SmallStrings when calculating the 13263 number of live JSObjects. 13264 13265 * runtime/Collector.cpp: 13266 (JSC::Heap::objectCount): 13267 * runtime/SmallStrings.cpp: 13268 (JSC::SmallStrings::count): 13269 * runtime/SmallStrings.h: 13270 13271 2009-01-15 Sam Weinig <sam (a] webkit.org> 13272 13273 Fix Qt build. 13274 13275 * runtime/Collector.cpp: 13276 13277 2009-01-15 Sam Weinig <sam (a] webkit.org> 13278 13279 Reviewed by Gavin Barraclough. 13280 13281 Fix crash seen running fast/canvas. 13282 13283 Make sure to mark the ScopeNode and CodeBlock being created 13284 in the re-parse for exception information. 13285 13286 * bytecode/CodeBlock.cpp: 13287 (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): 13288 * parser/Nodes.h: 13289 (JSC::ScopeNode::mark): 13290 * runtime/Collector.cpp: 13291 (JSC::Heap::collect): 13292 * runtime/JSGlobalData.cpp: 13293 (JSC::JSGlobalData::JSGlobalData): 13294 * runtime/JSGlobalData.h: 13295 13296 2009-01-15 Craig Schlenter <craig.schlenter (a] gmail.com> 13297 13298 Reviewed by Darin Adler. 13299 13300 https://bugs.webkit.org/show_bug.cgi?id=23347 13301 Compilation of JavaScriptCore/wtf/ThreadingPthreads.cpp fails on Linux 13302 13303 * wtf/ThreadingPthreads.cpp: included limits.h as INT_MAX is defined there. 13304 13305 2009-01-15 Oliver Hunt <oliver (a] apple.com> 13306 13307 Reviewed by Geoff Garen. 13308 13309 Bug 23225: REGRESSION: Assertion failure in reparseInPlace() (m_sourceElements) at sfgate.com 13310 <https://bugs.webkit.org/show_bug.cgi?id=23225> <rdar://problem/6487432> 13311 13312 Character position for open and closing brace was incorrectly referencing m_position to 13313 record their position in a source document, however this is unsafe as BOMs may lead to 13314 m_position being an arbitrary position from the real position of the current character. 13315 13316 * parser/Lexer.cpp: 13317 (JSC::Lexer::matchPunctuator): 13318 13319 2009-01-14 David Kilzer <ddkilzer (a] apple.com> 13320 13321 Bug 23153: JSC build always touches JavaScriptCore/docs/bytecode.html 13322 13323 <https://bugs.webkit.org/show_bug.cgi?id=23153> 13324 13325 Reviewed by Darin Adler. 13326 13327 Instead of building bytecode.html into ${SRCROOT}/docs/bytecode.html, build it 13328 into ${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore/docs/bytecode.html. 13329 13330 Also fixes make-bytecode-docs.pl to actually generate documentation. 13331 13332 * DerivedSources.make: Changed bytecode.html to be built into local docs 13333 directory in ${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore. 13334 * JavaScriptCore.xcodeproj/project.pbxproj: Added "/docs" to the end of the 13335 "mkdir -p" command so that the docs subdirectory is automatically created. 13336 * docs/make-bytecode-docs.pl: Changed BEGIN_OPCODE to DEFINE_OPCODE so that 13337 documentation is actually generated. 13338 13339 2009-01-14 Adam Treat <adam.treat (a] torchmobile.com> 13340 13341 Build fix for Qt from Dmitry Titov. 13342 13343 * wtf/ThreadingQt.cpp: 13344 (WTF::ThreadCondition::timedWait): 13345 13346 2009-01-14 Oliver Hunt <oliver (a] apple.com> 13347 13348 Reviewed by Cameron Zwarich. 13349 13350 Bug 22903: REGRESSION (r36267): visiting this site reliably crashes WebKit nightly 13351 13352 EvalCodeBlock's do not reference the functions that are declared inside the eval 13353 code, this means that simply marking the EvalCodeBlock through the global object 13354 is insufficient to mark the declared functions. This patch corrects this by 13355 explicitly marking the CodeBlocks of all the functions declared in the cached 13356 EvalNode. 13357 13358 * bytecode/CodeBlock.cpp: 13359 (JSC::CodeBlock::mark): 13360 * bytecode/CodeBlock.h: 13361 (JSC::CodeBlock::hasFunctions): 13362 * bytecode/EvalCodeCache.h: 13363 (JSC::EvalCodeCache::mark): 13364 * parser/Nodes.cpp: 13365 (JSC::ScopeNodeData::mark): 13366 (JSC::EvalNode::mark): 13367 * parser/Nodes.h: 13368 13369 2009-01-14 Dmitry Titov <dimich (a] chromium.org> 13370 13371 Reviewed by Alexey Proskuryakov. 13372 13373 https://bugs.webkit.org/show_bug.cgi?id=23312 13374 Implement MessageQueue::waitForMessageTimed() 13375 Also fixed ThreadCondition::timedWait() to take absolute time, as discussed on webkit-dev. 13376 Win32 version of timedWait still has to be implemented. 13377 13378 * wtf/MessageQueue.h: 13379 (WTF::MessageQueueWaitResult: new enum for the result of MessageQueue::waitForMessageTimed. 13380 (WTF::MessageQueue::waitForMessage): 13381 (WTF::MessageQueue::waitForMessageTimed): New method. 13382 * wtf/Threading.h: 13383 * wtf/ThreadingGtk.cpp: 13384 (WTF::ThreadCondition::timedWait): changed to use absolute time instead of interval. 13385 * wtf/ThreadingNone.cpp: 13386 (WTF::ThreadCondition::timedWait): ditto. 13387 * wtf/ThreadingPthreads.cpp: 13388 (WTF::ThreadCondition::timedWait): ditto. 13389 * wtf/ThreadingQt.cpp: 13390 (WTF::ThreadCondition::timedWait): ditto. 13391 * wtf/ThreadingWin.cpp: 13392 (WTF::ThreadCondition::timedWait): ditto. The actual Win32 code is still to be implemented. 13393 13394 2009-01-14 Dean McNamee <deanm (a] chromium.org> 13395 13396 Reviewed by Darin Adler and Oliver hunt. 13397 13398 Correctly match allocation functions by implementing a custom deref(). 13399 13400 https://bugs.webkit.org/show_bug.cgi?id=23315 13401 13402 * runtime/ByteArray.h: 13403 (JSC::ByteArray::deref): 13404 (JSC::ByteArray::ByteArray): 13405 13406 2009-01-14 Dan Bernstein <mitz (a] apple.com> 13407 13408 Reviewed by John Sullivan. 13409 13410 - update copyright 13411 13412 * Info.plist: 13413 13414 2009-01-13 Beth Dakin <bdakin (a] apple.com> 13415 13416 Reviewed by Darin Adler and Oliver Hunt. 13417 13418 <rdar://problem/6489314> REGRESSION: Business widget's front side 13419 fails to render correctly when flipping widget 13420 13421 The problem here is that parseInt was parsing NaN as 0. This patch 13422 corrects that by parsing NaN as NaN. This matches our old behavior 13423 and Firefox. 13424 13425 * runtime/JSGlobalObjectFunctions.cpp: 13426 (JSC::globalFuncParseInt): 13427 13428 2009-01-13 Gavin Barraclough <barraclough (a] apple.com> 13429 13430 Reviewed by Oliver Hunt. 13431 13432 Fix for: https://bugs.webkit.org/show_bug.cgi?id=23292 13433 13434 Implementation of two argument canDoFastAdditiveOperations does not correlate well with reality. 13435 13436 * runtime/JSImmediate.h: 13437 (JSC::JSFastMath::canDoFastAdditiveOperations): 13438 13439 2009-01-13 Zalan Bujtas <zbujtas (a] gmail.com> 13440 13441 Reviewed by Darin Adler. 13442 13443 https://bugs.webkit.org/show_bug.cgi?id=23290 13444 Fix JSImmediate::isImmediate(src) to !src->isCell() 13445 13446 * interpreter/Interpreter.cpp: 13447 (JSC::Interpreter::privateExecute): 13448 13449 2009-01-13 Dmitry Titov <dimich (a] chromium.org> 13450 13451 Reviewed by Darin Adler. 13452 13453 https://bugs.webkit.org/show_bug.cgi?id=23281 13454 Fix the Chromium Win build. 13455 Need to use PLATFORM(WIN_OS) instead of PLATFORM(WIN). 13456 Moved GTK and WX up in #if sequence because they could come with WIN_OS too, 13457 while they have their own implementation even on Windows. 13458 13459 * wtf/CurrentTime.cpp: 13460 (WTF::currentTime): 13461 13462 2009-01-12 Gavin Barraclough <barraclough (a] apple.com> 13463 13464 Reviewed by Oliver Hunt. 13465 13466 Make the JSImmediate interface private. 13467 13468 All manipulation of JS values should be through the JSValuePtr class, not by using JSImmediate 13469 directly. The key missing methods on JSValuePtr are: 13470 13471 * isCell() - check for values that are JSCell*s, and as such where asCell() may be used. 13472 * isInt32Fast() getInt32Fast() - fast check/access for integer immediates. 13473 * isUInt32Fast() getUInt32Fast() - ditto for unsigned integer immediates. 13474 13475 The JIT is allowed full access to JSImmediate, since it needs to be able to directly 13476 manipulate JSValuePtrs. The Interpreter is provided access to perform operations directly 13477 on JSValuePtrs through the new JSFastMath interface. 13478 13479 No performance impact. 13480 13481 * API/JSCallbackObjectFunctions.h: 13482 (JSC::::toNumber): 13483 * API/JSValueRef.cpp: 13484 (JSValueIsEqual): 13485 (JSValueIsStrictEqual): 13486 * JavaScriptCore.exp: 13487 * bytecode/CodeBlock.h: 13488 (JSC::CodeBlock::isKnownNotImmediate): 13489 * bytecompiler/BytecodeGenerator.cpp: 13490 (JSC::keyForImmediateSwitch): 13491 * bytecompiler/BytecodeGenerator.h: 13492 (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue): 13493 (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue): 13494 * interpreter/Interpreter.cpp: 13495 (JSC::jsLess): 13496 (JSC::jsLessEq): 13497 (JSC::jsAdd): 13498 (JSC::jsIsObjectType): 13499 (JSC::cachePrototypeChain): 13500 (JSC::Interpreter::tryCachePutByID): 13501 (JSC::Interpreter::tryCacheGetByID): 13502 (JSC::Interpreter::privateExecute): 13503 (JSC::Interpreter::tryCTICachePutByID): 13504 (JSC::Interpreter::tryCTICacheGetByID): 13505 (JSC::Interpreter::cti_op_add): 13506 (JSC::Interpreter::cti_op_get_by_id_self_fail): 13507 (JSC::Interpreter::cti_op_get_by_id_proto_list): 13508 (JSC::Interpreter::cti_op_instanceof): 13509 (JSC::Interpreter::cti_op_mul): 13510 (JSC::Interpreter::cti_op_get_by_val): 13511 (JSC::Interpreter::cti_op_get_by_val_byte_array): 13512 (JSC::Interpreter::cti_op_sub): 13513 (JSC::Interpreter::cti_op_put_by_val): 13514 (JSC::Interpreter::cti_op_put_by_val_array): 13515 (JSC::Interpreter::cti_op_put_by_val_byte_array): 13516 (JSC::Interpreter::cti_op_negate): 13517 (JSC::Interpreter::cti_op_div): 13518 (JSC::Interpreter::cti_op_eq): 13519 (JSC::Interpreter::cti_op_lshift): 13520 (JSC::Interpreter::cti_op_bitand): 13521 (JSC::Interpreter::cti_op_rshift): 13522 (JSC::Interpreter::cti_op_bitnot): 13523 (JSC::Interpreter::cti_op_neq): 13524 (JSC::Interpreter::cti_op_urshift): 13525 (JSC::Interpreter::cti_op_call_eval): 13526 (JSC::Interpreter::cti_op_throw): 13527 (JSC::Interpreter::cti_op_is_undefined): 13528 (JSC::Interpreter::cti_op_stricteq): 13529 (JSC::Interpreter::cti_op_nstricteq): 13530 (JSC::Interpreter::cti_op_switch_imm): 13531 (JSC::Interpreter::cti_vm_throw): 13532 * interpreter/Interpreter.h: 13533 (JSC::Interpreter::isJSArray): 13534 (JSC::Interpreter::isJSString): 13535 (JSC::Interpreter::isJSByteArray): 13536 * jit/JIT.cpp: 13537 (JSC::JIT::compileOpStrictEq): 13538 (JSC::JIT::privateCompileMainPass): 13539 * jit/JIT.h: 13540 (JSC::JIT::isStrictEqCaseHandledInJITCode): 13541 * jit/JITArithmetic.cpp: 13542 (JSC::JIT::compileFastArith_op_rshift): 13543 (JSC::JIT::compileFastArith_op_bitand): 13544 (JSC::JIT::compileFastArith_op_mod): 13545 * jit/JITCall.cpp: 13546 (JSC::JIT::unlinkCall): 13547 (JSC::JIT::compileOpCall): 13548 * jit/JITInlineMethods.h: 13549 (JSC::JIT::getConstantOperandImmediateInt): 13550 (JSC::JIT::isOperandConstantImmediateInt): 13551 * parser/Nodes.cpp: 13552 (JSC::processClauseList): 13553 * runtime/ArrayPrototype.cpp: 13554 (JSC::arrayProtoFuncIndexOf): 13555 (JSC::arrayProtoFuncLastIndexOf): 13556 * runtime/BooleanPrototype.cpp: 13557 (JSC::booleanProtoFuncValueOf): 13558 * runtime/Collector.cpp: 13559 (JSC::Heap::protect): 13560 (JSC::Heap::unprotect): 13561 (JSC::Heap::heap): 13562 * runtime/JSByteArray.cpp: 13563 (JSC::JSByteArray::getOwnPropertySlot): 13564 * runtime/JSByteArray.h: 13565 (JSC::JSByteArray::getIndex): 13566 * runtime/JSCell.cpp: 13567 * runtime/JSCell.h: 13568 (JSC::JSValuePtr::isNumberCell): 13569 (JSC::JSValuePtr::asCell): 13570 (JSC::JSValuePtr::isNumber): 13571 * runtime/JSGlobalObjectFunctions.cpp: 13572 (JSC::globalFuncParseInt): 13573 * runtime/JSImmediate.h: 13574 (JSC::js0): 13575 (JSC::jsImpossibleValue): 13576 (JSC::JSValuePtr::toInt32): 13577 (JSC::JSValuePtr::toUInt32): 13578 (JSC::JSValuePtr::isCell): 13579 (JSC::JSValuePtr::isInt32Fast): 13580 (JSC::JSValuePtr::getInt32Fast): 13581 (JSC::JSValuePtr::isUInt32Fast): 13582 (JSC::JSValuePtr::getUInt32Fast): 13583 (JSC::JSValuePtr::makeInt32Fast): 13584 (JSC::JSValuePtr::areBothInt32Fast): 13585 (JSC::JSFastMath::canDoFastBitwiseOperations): 13586 (JSC::JSFastMath::equal): 13587 (JSC::JSFastMath::notEqual): 13588 (JSC::JSFastMath::andImmediateNumbers): 13589 (JSC::JSFastMath::xorImmediateNumbers): 13590 (JSC::JSFastMath::orImmediateNumbers): 13591 (JSC::JSFastMath::canDoFastRshift): 13592 (JSC::JSFastMath::canDoFastUrshift): 13593 (JSC::JSFastMath::rightShiftImmediateNumbers): 13594 (JSC::JSFastMath::canDoFastAdditiveOperations): 13595 (JSC::JSFastMath::addImmediateNumbers): 13596 (JSC::JSFastMath::subImmediateNumbers): 13597 (JSC::JSFastMath::incImmediateNumber): 13598 (JSC::JSFastMath::decImmediateNumber): 13599 * runtime/JSNumberCell.h: 13600 (JSC::JSValuePtr::asNumberCell): 13601 (JSC::jsNumber): 13602 (JSC::JSValuePtr::uncheckedGetNumber): 13603 (JSC::JSNumberCell::toInt32): 13604 (JSC::JSNumberCell::toUInt32): 13605 (JSC::JSValuePtr::toJSNumber): 13606 (JSC::JSValuePtr::getNumber): 13607 (JSC::JSValuePtr::numberToInt32): 13608 (JSC::JSValuePtr::numberToUInt32): 13609 * runtime/JSObject.h: 13610 (JSC::JSValuePtr::isObject): 13611 (JSC::JSValuePtr::get): 13612 (JSC::JSValuePtr::put): 13613 * runtime/JSValue.cpp: 13614 (JSC::JSValuePtr::toInteger): 13615 (JSC::JSValuePtr::toIntegerPreserveNaN): 13616 * runtime/JSValue.h: 13617 * runtime/Operations.cpp: 13618 (JSC::JSValuePtr::equalSlowCase): 13619 (JSC::JSValuePtr::strictEqualSlowCase): 13620 * runtime/Operations.h: 13621 (JSC::JSValuePtr::equal): 13622 (JSC::JSValuePtr::equalSlowCaseInline): 13623 (JSC::JSValuePtr::strictEqual): 13624 (JSC::JSValuePtr::strictEqualSlowCaseInline): 13625 * runtime/Protect.h: 13626 (JSC::gcProtect): 13627 (JSC::gcUnprotect): 13628 * runtime/StringPrototype.cpp: 13629 (JSC::stringProtoFuncCharAt): 13630 (JSC::stringProtoFuncCharCodeAt): 13631 * runtime/Structure.cpp: 13632 (JSC::Structure::createCachedPrototypeChain): 13633 13634 2009-01-12 Kevin Ollivier <kevino (a] theolliviers.com> 13635 13636 Since date time functions have moved here, now the wx port JSC 13637 needs to depend on wx. 13638 13639 * jscore.bkl: 13640 13641 2009-01-11 David Levin <levin (a] chromium.org> 13642 13643 Reviewed by Darin Adler. 13644 13645 https://bugs.webkit.org/show_bug.cgi?id=23245 13646 13647 Add initializeThreading to key places in JS API to ensure that 13648 UString is properly initialized. 13649 13650 * API/JSContextRef.cpp: 13651 (JSContextGroupCreate): 13652 (JSGlobalContextCreate): 13653 * API/JSObjectRef.cpp: 13654 (JSClassCreate): 13655 * API/JSStringRef.cpp: 13656 (JSStringCreateWithCharacters): 13657 (JSStringCreateWithUTF8CString): 13658 * API/JSStringRefCF.cpp: 13659 (JSStringCreateWithCFString): 13660 13661 2009-01-11 David Levin <levin (a] chromium.org> 13662 13663 Reviewed by Darin Adler. 13664 13665 https://bugs.webkit.org/show_bug.cgi?id=23175 13666 13667 Separate out BaseString information from UString::Rep and make all baseString access go through 13668 a member function, so that it may be used for something else (in the future) in the BaseString 13669 case. 13670 13671 * runtime/SmallStrings.cpp: 13672 (JSC::SmallStringsStorage::rep): 13673 (JSC::SmallStringsStorage::SmallStringsStorage): 13674 (JSC::SmallStrings::SmallStrings): 13675 (JSC::SmallStrings::mark): 13676 Adjust to account for the changes in UString and put the UString in place in 13677 SmallStringsStorage to aid in locality of reference among the UChar[] and UString::Rep's. 13678 13679 * runtime/SmallStrings.h: 13680 * runtime/UString.cpp: 13681 (JSC::initializeStaticBaseString): 13682 (JSC::initializeUString): 13683 (JSC::UString::Rep::create): 13684 (JSC::UString::Rep::destroy): 13685 (JSC::UString::Rep::checkConsistency): 13686 (JSC::expandCapacity): 13687 (JSC::UString::expandPreCapacity): 13688 (JSC::concatenate): 13689 (JSC::UString::append): 13690 (JSC::UString::operator=): 13691 * runtime/UString.h: 13692 (JSC::UString::Rep::baseIsSelf): 13693 (JSC::UString::Rep::setBaseString): 13694 (JSC::UString::Rep::baseString): 13695 (JSC::UString::Rep::): 13696 (JSC::UString::Rep::null): 13697 (JSC::UString::Rep::empty): 13698 (JSC::UString::Rep::data): 13699 (JSC::UString::cost): 13700 Separate out the items out used by base strings from those used in Rep's that only 13701 point to base strings. (This potentially saves 24 bytes per Rep.) 13702 13703 2009-01-11 Darin Adler <darin (a] apple.com> 13704 13705 Reviewed by Dan Bernstein. 13706 13707 Bug 23239: improve handling of unused arguments in JavaScriptCore 13708 https://bugs.webkit.org/show_bug.cgi?id=23239 13709 13710 * runtime/DatePrototype.cpp: Moved LocaleDateTimeFormat enum outside #if 13711 so we can use this on all platforms. Changed valueOf to share the same 13712 function with getTime, since the contents of the two are identical. Removed 13713 a FIXME since the idea isn't really specific enough or helpful enough to 13714 need to sit here in the source code. 13715 (JSC::formatLocaleDate): Changed the Mac version of this function to take 13716 the same arguments as the non-Mac version so the caller doesn't have to 13717 special-case the two platforms. Also made the formatString array be const; 13718 before the characters were, but the array was a modifiable global variable. 13719 (JSC::dateProtoFuncToLocaleString): Changed to call the new unified 13720 version of formatLocaleDate and remove the ifdef. 13721 (JSC::dateProtoFuncToLocaleDateString): Ditto. 13722 (JSC::dateProtoFuncToLocaleTimeString): Ditto. 13723 13724 * runtime/JSNotAnObject.cpp: 13725 (JSC::JSNotAnObject::toObject): Use the new ASSERT_UNUSED instead of the 13726 old UNUSED_PARAM. 13727 13728 * runtime/RegExp.cpp: 13729 (JSC::RegExp::RegExp): Changed to only use UNUSED_PARAM when the parameter 13730 is actually unused. 13731 13732 * wtf/TCSystemAlloc.cpp: 13733 (TCMalloc_SystemRelease): Changed to only use UNUSED_PARAM when the parameter 13734 is actually unused. 13735 (TCMalloc_SystemCommit): Changed to omit the argument names instead of using 13736 UNUSED_PARAM. 13737 13738 2009-01-11 Oliver Hunt <oliver (a] apple.com> 13739 13740 Reviewed by NOBODY (Build fix). 13741 13742 Fix the build (whoops) 13743 13744 * interpreter/Interpreter.cpp: 13745 (JSC::Interpreter::cti_op_get_by_val): 13746 13747 2009-01-11 Oliver Hunt <oliver (a] apple.com> 13748 13749 Reviewed by Darin Adler and Anders Carlsson 13750 13751 Bug 23128: get/put_by_val need to respecialise in the face of ByteArray 13752 13753 Restructure the code slightly, and add comments per Darin's suggestions 13754 13755 * interpreter/Interpreter.cpp: 13756 (JSC::Interpreter::cti_op_get_by_val): 13757 (JSC::Interpreter::cti_op_get_by_val_byte_array): 13758 (JSC::Interpreter::cti_op_put_by_val): 13759 (JSC::Interpreter::cti_op_put_by_val_byte_array): 13760 13761 2009-01-11 Oliver Hunt <oliver (a] apple.com> 13762 13763 Reviewed by Anders Carlsson. 13764 13765 Whoops, I accidentally removed an exception check from fast the 13766 fast path for string indexing when i originally landed the 13767 byte array logic. 13768 13769 * interpreter/Interpreter.cpp: 13770 (JSC::Interpreter::cti_op_get_by_val): 13771 13772 2009-01-11 Oliver Hunt <oliver (a] apple.com> 13773 13774 Reviewed by Anders Carlsson. 13775 13776 Bug 23128: get/put_by_val need to respecialise in the face of ByteArray 13777 <https://bugs.webkit.org/show_bug.cgi?id=23128> 13778 13779 Fairly simple patch, add specialised versions of cti_op_get/put_by_val 13780 that assume ByteArray, thus avoiding a few branches in the case of bytearray 13781 manipulation. 13782 13783 No effect on SunSpider. 15% win on the original testcase. 13784 13785 * interpreter/Interpreter.cpp: 13786 (JSC::Interpreter::cti_op_get_by_val): 13787 (JSC::Interpreter::cti_op_get_by_val_byte_array): 13788 (JSC::Interpreter::cti_op_put_by_val): 13789 (JSC::Interpreter::cti_op_put_by_val_byte_array): 13790 * interpreter/Interpreter.h: 13791 13792 2009-01-11 Alexey Proskuryakov <ap (a] webkit.org> 13793 13794 Try to fix Windows build. 13795 13796 * wtf/CurrentTime.cpp: Added a definition of msPerSecond (previously, this code was in 13797 DateMath.cpp, with constant definition in DateTime.h) 13798 13799 2009-01-11 Alexey Proskuryakov <ap (a] webkit.org> 13800 13801 Try to fix Windows build. 13802 13803 * wtf/CurrentTime.cpp: Include <sys/types.h> and <sys/timeb.h>, as MSDN says to. 13804 13805 2009-01-11 Dmitry Titov <dimich (a] chromium.org> 13806 13807 Reviewed by Darin Adler. 13808 13809 https://bugs.webkit.org/show_bug.cgi?id=23207 13810 Moved currentTime() to from WebCore to WTF. 13811 13812 * GNUmakefile.am: 13813 * JavaScriptCore.exp: added export for WTF::currentTime() 13814 * JavaScriptCore.pri: 13815 * JavaScriptCore.scons: 13816 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 13817 * JavaScriptCore.xcodeproj/project.pbxproj: 13818 * JavaScriptCoreSources.bkl: 13819 * runtime/DateMath.cpp: 13820 (JSC::getCurrentUTCTimeWithMicroseconds): This function had another implementation of currentTime(), essentially. Now uses WTF version. 13821 * wtf/CurrentTime.cpp: Added. 13822 (WTF::currentTime): 13823 (WTF::highResUpTime): 13824 (WTF::lowResUTCTime): 13825 (WTF::qpcAvailable): 13826 * wtf/CurrentTime.h: Added. 13827 13828 2009-01-09 Gavin Barraclough <barraclough (a] apple.com> 13829 13830 Reviewed by Oliver Hunt. 13831 13832 Stage two of converting JSValue from a pointer to a class type. 13833 Remove the class JSValue. The functionallity has been transitioned 13834 into the wrapper class type JSValuePtr. 13835 13836 The last stage will be to rename JSValuePtr to JSValue, remove the 13837 overloaded -> operator, and switch operations on JSValuePtrs from 13838 using '->' to use '.' instead. 13839 13840 * API/APICast.h: 13841 * JavaScriptCore.exp: 13842 * runtime/JSCell.h: 13843 (JSC::asCell): 13844 (JSC::JSValuePtr::asCell): 13845 (JSC::JSValuePtr::isNumber): 13846 (JSC::JSValuePtr::isString): 13847 (JSC::JSValuePtr::isGetterSetter): 13848 (JSC::JSValuePtr::isObject): 13849 (JSC::JSValuePtr::getNumber): 13850 (JSC::JSValuePtr::getString): 13851 (JSC::JSValuePtr::getObject): 13852 (JSC::JSValuePtr::getCallData): 13853 (JSC::JSValuePtr::getConstructData): 13854 (JSC::JSValuePtr::getUInt32): 13855 (JSC::JSValuePtr::getTruncatedInt32): 13856 (JSC::JSValuePtr::getTruncatedUInt32): 13857 (JSC::JSValuePtr::mark): 13858 (JSC::JSValuePtr::marked): 13859 (JSC::JSValuePtr::toPrimitive): 13860 (JSC::JSValuePtr::getPrimitiveNumber): 13861 (JSC::JSValuePtr::toBoolean): 13862 (JSC::JSValuePtr::toNumber): 13863 (JSC::JSValuePtr::toString): 13864 (JSC::JSValuePtr::toObject): 13865 (JSC::JSValuePtr::toThisObject): 13866 (JSC::JSValuePtr::needsThisConversion): 13867 (JSC::JSValuePtr::toThisString): 13868 (JSC::JSValuePtr::getJSNumber): 13869 * runtime/JSImmediate.h: 13870 (JSC::JSValuePtr::isUndefined): 13871 (JSC::JSValuePtr::isNull): 13872 (JSC::JSValuePtr::isUndefinedOrNull): 13873 (JSC::JSValuePtr::isBoolean): 13874 (JSC::JSValuePtr::getBoolean): 13875 (JSC::JSValuePtr::toInt32): 13876 (JSC::JSValuePtr::toUInt32): 13877 * runtime/JSNumberCell.h: 13878 (JSC::JSValuePtr::uncheckedGetNumber): 13879 (JSC::JSValuePtr::toJSNumber): 13880 * runtime/JSObject.h: 13881 (JSC::JSValuePtr::isObject): 13882 (JSC::JSValuePtr::get): 13883 (JSC::JSValuePtr::put): 13884 * runtime/JSString.h: 13885 (JSC::JSValuePtr::toThisJSString): 13886 * runtime/JSValue.cpp: 13887 (JSC::JSValuePtr::toInteger): 13888 (JSC::JSValuePtr::toIntegerPreserveNaN): 13889 (JSC::JSValuePtr::toInt32SlowCase): 13890 (JSC::JSValuePtr::toUInt32SlowCase): 13891 * runtime/JSValue.h: 13892 (JSC::JSValuePtr::makeImmediate): 13893 (JSC::JSValuePtr::immediateValue): 13894 (JSC::JSValuePtr::JSValuePtr): 13895 (JSC::JSValuePtr::operator->): 13896 (JSC::JSValuePtr::operator bool): 13897 (JSC::JSValuePtr::operator==): 13898 (JSC::JSValuePtr::operator!=): 13899 (JSC::JSValuePtr::encode): 13900 (JSC::JSValuePtr::decode): 13901 (JSC::JSValuePtr::toFloat): 13902 (JSC::JSValuePtr::asValue): 13903 (JSC::operator==): 13904 (JSC::operator!=): 13905 13906 2009-01-09 David Levin <levin (a] chromium.org> 13907 13908 Reviewed by Oliver Hunt. 13909 13910 https://bugs.webkit.org/show_bug.cgi?id=23175 13911 13912 Adjustment to previous patch. Remove call to initilizeThreading from JSGlobalCreate 13913 and fix jsc.cpp instead. 13914 13915 * jsc.cpp: 13916 (main): 13917 (jscmain): 13918 * runtime/JSGlobalData.cpp: 13919 (JSC::JSGlobalData::create): 13920 13921 2009-01-09 Sam Weinig <sam (a] webkit.org> 13922 13923 Roll r39720 back in with a working interpreted mode. 13924 13925 2009-01-09 David Levin <levin (a] chromium.org> 13926 13927 Reviewed by Oliver Hunt. 13928 13929 https://bugs.webkit.org/show_bug.cgi?id=23175 13930 13931 Added a template to make the pointer and flags combination 13932 in UString more readable and less error prone. 13933 13934 * GNUmakefile.am: 13935 * JavaScriptCore.exp: 13936 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 13937 * JavaScriptCore.xcodeproj/project.pbxproj: 13938 Added PtrAndFlags.h (and sorted the xcode project file). 13939 13940 * runtime/Identifier.cpp: 13941 (JSC::Identifier::add): 13942 (JSC::Identifier::addSlowCase): 13943 * runtime/InitializeThreading.cpp: 13944 (JSC::initializeThreadingOnce): 13945 Made the init threading initialize the UString globals. Before 13946 these were initilized using {} but that became harder due to the 13947 addition of this tempalte class. 13948 13949 * runtime/JSGlobalData.cpp: 13950 (JSC::JSGlobalData::create): 13951 * runtime/PropertyNameArray.cpp: 13952 (JSC::PropertyNameArray::add): 13953 * runtime/UString.cpp: 13954 (JSC::initializeStaticBaseString): 13955 (JSC::initializeUString): 13956 (JSC::UString::Rep::create): 13957 (JSC::UString::Rep::createFromUTF8): 13958 (JSC::createRep): 13959 (JSC::UString::UString): 13960 (JSC::concatenate): 13961 (JSC::UString::operator=): 13962 (JSC::UString::makeNull): 13963 (JSC::UString::nullRep): 13964 * runtime/UString.h: 13965 (JSC::UString::Rep::identifierTable): 13966 (JSC::UString::Rep::setIdentifierTable): 13967 (JSC::UString::Rep::isStatic): 13968 (JSC::UString::Rep::setStatic): 13969 (JSC::UString::Rep::): 13970 (JSC::UString::Rep::null): 13971 (JSC::UString::Rep::empty): 13972 (JSC::UString::isNull): 13973 (JSC::UString::null): 13974 (JSC::UString::UString): 13975 13976 * wtf/PtrAndFlags.h: Added. 13977 (WTF::PtrAndFlags::PtrAndFlags): 13978 (WTF::PtrAndFlags::isFlagSet): 13979 (WTF::PtrAndFlags::setFlag): 13980 (WTF::PtrAndFlags::clearFlag): 13981 (WTF::PtrAndFlags::get): 13982 (WTF::PtrAndFlags::set): 13983 A simple way to layer together a pointer and 2 flags. It relies on the pointer being 4 byte aligned, 13984 which should happen for all allocators (due to aligning pointers, int's, etc. on 4 byte boundaries). 13985 13986 2009-01-08 Gavin Barraclough <barraclough (a] apple.com> 13987 13988 Reviewed by -O-l-i-v-e-r- -H-u-n-t- Sam Weinig (sorry, Sam!). 13989 13990 Encode immediates in the low word of JSValuePtrs, on x86-64. 13991 13992 On 32-bit platforms a JSValuePtr may represent a 31-bit signed integer. 13993 On 64-bit platforms, if USE(ALTERNATE_JSIMMEDIATE) is defined, a full 13994 32-bit integer may be stored in an immediate. 13995 13996 Presently USE(ALTERNATE_JSIMMEDIATE) uses the same encoding as the default 13997 immediate format - the value is left shifted by one, so a one bit tag can 13998 be added to indicate the value is an immediate. However this means that 13999 values must be commonly be detagged (by right shifting by one) before 14000 arithmetic operations can be performed on immediates. This patch modifies 14001 the formattting so the the high bits of the immediate mark values as being 14002 integer. 14003 14004 * assembler/MacroAssembler.h: 14005 (JSC::MacroAssembler::not32): 14006 (JSC::MacroAssembler::orPtr): 14007 (JSC::MacroAssembler::zeroExtend32ToPtr): 14008 (JSC::MacroAssembler::jaePtr): 14009 (JSC::MacroAssembler::jbPtr): 14010 (JSC::MacroAssembler::jnzPtr): 14011 (JSC::MacroAssembler::jzPtr): 14012 * assembler/X86Assembler.h: 14013 (JSC::X86Assembler::): 14014 (JSC::X86Assembler::notl_r): 14015 (JSC::X86Assembler::testq_i32r): 14016 * jit/JIT.cpp: 14017 (JSC::JIT::privateCompileMainPass): 14018 (JSC::JIT::privateCompileSlowCases): 14019 (JSC::JIT::privateCompileCTIMachineTrampolines): 14020 * jit/JIT.h: 14021 * jit/JITArithmetic.cpp: 14022 (JSC::JIT::compileFastArith_op_lshift): 14023 (JSC::JIT::compileFastArith_op_rshift): 14024 (JSC::JIT::compileFastArith_op_bitand): 14025 (JSC::JIT::compileFastArithSlow_op_bitand): 14026 (JSC::JIT::compileFastArith_op_mod): 14027 (JSC::JIT::compileFastArithSlow_op_mod): 14028 (JSC::JIT::compileFastArith_op_add): 14029 (JSC::JIT::compileFastArith_op_mul): 14030 (JSC::JIT::compileFastArith_op_post_inc): 14031 (JSC::JIT::compileFastArith_op_post_dec): 14032 (JSC::JIT::compileFastArith_op_pre_inc): 14033 (JSC::JIT::compileFastArith_op_pre_dec): 14034 (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): 14035 (JSC::JIT::compileBinaryArithOp): 14036 * jit/JITCall.cpp: 14037 (JSC::JIT::compileOpCallSlowCase): 14038 * jit/JITInlineMethods.h: 14039 (JSC::JIT::emitJumpIfJSCell): 14040 (JSC::JIT::emitJumpIfNotJSCell): 14041 (JSC::JIT::emitJumpIfImmNum): 14042 (JSC::JIT::emitJumpSlowCaseIfNotImmNum): 14043 (JSC::JIT::emitJumpSlowCaseIfNotImmNums): 14044 (JSC::JIT::emitFastArithDeTagImmediate): 14045 (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): 14046 (JSC::JIT::emitFastArithReTagImmediate): 14047 (JSC::JIT::emitFastArithImmToInt): 14048 (JSC::JIT::emitFastArithIntToImmNoCheck): 14049 (JSC::JIT::emitTagAsBoolImmediate): 14050 * jit/JITPropertyAccess.cpp: 14051 (JSC::resizePropertyStorage): 14052 (JSC::JIT::privateCompilePutByIdTransition): 14053 (JSC::JIT::privateCompilePatchGetArrayLength): 14054 (JSC::JIT::privateCompileGetByIdSelf): 14055 (JSC::JIT::privateCompileGetByIdProto): 14056 (JSC::JIT::privateCompileGetByIdChain): 14057 (JSC::JIT::privateCompilePutByIdReplace): 14058 * runtime/JSImmediate.h: 14059 (JSC::JSImmediate::isNumber): 14060 (JSC::JSImmediate::isPositiveNumber): 14061 (JSC::JSImmediate::areBothImmediateNumbers): 14062 (JSC::JSImmediate::xorImmediateNumbers): 14063 (JSC::JSImmediate::rightShiftImmediateNumbers): 14064 (JSC::JSImmediate::canDoFastAdditiveOperations): 14065 (JSC::JSImmediate::addImmediateNumbers): 14066 (JSC::JSImmediate::subImmediateNumbers): 14067 (JSC::JSImmediate::makeInt): 14068 (JSC::JSImmediate::toBoolean): 14069 * wtf/Platform.h: 14070 14071 2009-01-08 Sam Weinig <sam (a] webkit.org> 14072 14073 Revert r39720. It broke Interpreted mode. 14074 14075 2009-01-08 Sam Weinig <sam (a] webkit.org> 14076 14077 Reviewed by Oliver Hunt. 14078 14079 Fix for https://bugs.webkit.org/show_bug.cgi?id=23197 14080 Delay creating the PCVector until an exception is thrown 14081 Part of <rdar://problem/6469060> 14082 Don't store exception information for a CodeBlock until first exception is thrown 14083 14084 - Change the process for re-parsing/re-generating bytecode for exception information 14085 to use data from the original CodeBlock (offsets of GlobalResolve instructions) to 14086 aid in creating an identical instruction stream on re-parse, instead of padding 14087 interchangeable opcodes, which would result in different JITed code. 14088 - Fix bug where the wrong ScopeChainNode was used when re-parsing/regenerating from 14089 within some odd modified scope chains. 14090 - Lazily create the pcVector by re-JITing the regenerated CodeBlock and stealing the 14091 the pcVector from it. 14092 14093 Saves ~2MB on Membuster head. 14094 14095 * bytecode/CodeBlock.cpp: 14096 (JSC::CodeBlock::dump): 14097 (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): 14098 (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset): 14099 (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset): 14100 * bytecode/CodeBlock.h: 14101 (JSC::JITCodeRef::JITCodeRef): 14102 (JSC::GlobalResolveInfo::GlobalResolveInfo): 14103 (JSC::CodeBlock::getBytecodeIndex): 14104 (JSC::CodeBlock::addGlobalResolveInstruction): 14105 (JSC::CodeBlock::addGlobalResolveInfo): 14106 (JSC::CodeBlock::addFunctionRegisterInfo): 14107 (JSC::CodeBlock::hasExceptionInfo): 14108 (JSC::CodeBlock::pcVector): 14109 (JSC::EvalCodeBlock::EvalCodeBlock): 14110 (JSC::EvalCodeBlock::baseScopeDepth): 14111 * bytecode/Opcode.h: 14112 * bytecompiler/BytecodeGenerator.cpp: 14113 (JSC::BytecodeGenerator::BytecodeGenerator): 14114 (JSC::BytecodeGenerator::emitResolve): 14115 (JSC::BytecodeGenerator::emitGetScopedVar): 14116 * bytecompiler/BytecodeGenerator.h: 14117 (JSC::BytecodeGenerator::setRegeneratingForExceptionInfo): 14118 * interpreter/Interpreter.cpp: 14119 (JSC::bytecodeOffsetForPC): 14120 (JSC::Interpreter::unwindCallFrame): 14121 (JSC::Interpreter::privateExecute): 14122 (JSC::Interpreter::retrieveLastCaller): 14123 (JSC::Interpreter::cti_op_instanceof): 14124 (JSC::Interpreter::cti_op_call_NotJSFunction): 14125 (JSC::Interpreter::cti_op_resolve): 14126 (JSC::Interpreter::cti_op_construct_NotJSConstruct): 14127 (JSC::Interpreter::cti_op_resolve_func): 14128 (JSC::Interpreter::cti_op_resolve_skip): 14129 (JSC::Interpreter::cti_op_resolve_global): 14130 (JSC::Interpreter::cti_op_resolve_with_base): 14131 (JSC::Interpreter::cti_op_throw): 14132 (JSC::Interpreter::cti_op_in): 14133 (JSC::Interpreter::cti_vm_throw): 14134 * jit/JIT.cpp: 14135 (JSC::JIT::privateCompile): 14136 * parser/Nodes.cpp: 14137 (JSC::EvalNode::generateBytecode): 14138 (JSC::EvalNode::bytecodeForExceptionInfoReparse): 14139 (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse): 14140 * parser/Nodes.h: 14141 14142 2009-01-08 Jian Li <jianli (a] chromium.org> 14143 14144 Reviewed by Alexey Proskuryakov. 14145 14146 Add Win32 implementation of ThreadSpecific. 14147 https://bugs.webkit.org/show_bug.cgi?id=22614 14148 14149 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 14150 * wtf/ThreadSpecific.h: 14151 (WTF::ThreadSpecific::ThreadSpecific): 14152 (WTF::ThreadSpecific::~ThreadSpecific): 14153 (WTF::ThreadSpecific::get): 14154 (WTF::ThreadSpecific::set): 14155 (WTF::ThreadSpecific::destroy): 14156 * wtf/ThreadSpecificWin.cpp: Added. 14157 (WTF::ThreadSpecificThreadExit): 14158 * wtf/ThreadingWin.cpp: 14159 (WTF::wtfThreadEntryPoint): 14160 14161 2009-01-08 Justin McPherson <justin.mcpherson (a] nokia.com> 14162 14163 Reviewed by Simon Hausmann. 14164 14165 Fix compilation with Qt on NetBSD. 14166 14167 * runtime/Collector.cpp: 14168 (JSC::currentThreadStackBase): Use PLATFORM(NETBSD) to enter the 14169 code path to retrieve the stack base using pthread_attr_get_np. 14170 The PTHREAD_NP_H define is not used because the header file does 14171 not exist on NetBSD, but the function is declared nevertheless. 14172 * wtf/Platform.h: Introduce WTF_PLATFORM_NETBSD. 14173 14174 2009-01-07 Sam Weinig <sam (a] webkit.org> 14175 14176 Reviewed by Geoffrey Garen. 14177 14178 <rdar://problem/6469060> Don't store exception information for a CodeBlock until first exception is thrown 14179 14180 Don't initially store exception information (lineNumber/expressionRange/getByIdExcecptionInfo) 14181 in CodeBlocks blocks. Instead, re-parse for the data on demand and cache it then. 14182 14183 One important change that was needed to make this work was to pad op_get_global_var with nops to 14184 be the same length as op_resolve_global, since one could be replaced for the other on re-parsing, 14185 and we want to keep the offsets bytecode offsets the same. 14186 14187 1.3MB improvement on Membuster head. 14188 14189 * bytecode/CodeBlock.cpp: 14190 (JSC::CodeBlock::dump): Update op_get_global_var to account for the padding. 14191 (JSC::CodeBlock::dumpStatistics): Add more statistic dumping. 14192 (JSC::CodeBlock::CodeBlock): Initialize m_exceptionInfo. 14193 (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): Re-parses the CodeBlocks 14194 associated SourceCode and steals the ExceptionInfo from it. 14195 (JSC::CodeBlock::lineNumberForBytecodeOffset): Creates the exception info on demand. 14196 (JSC::CodeBlock::expressionRangeForBytecodeOffset): Ditto. 14197 (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): Ditto. 14198 * bytecode/CodeBlock.h: 14199 (JSC::CodeBlock::numberOfExceptionHandlers): Updated to account for m_exceptionInfo indirection. 14200 (JSC::CodeBlock::addExceptionHandler): Ditto. 14201 (JSC::CodeBlock::exceptionHandler): Ditto. 14202 (JSC::CodeBlock::clearExceptionInfo): Ditto. 14203 (JSC::CodeBlock::addExpressionInfo): Ditto. 14204 (JSC::CodeBlock::addGetByIdExceptionInfo): Ditto. 14205 (JSC::CodeBlock::numberOfLineInfos): Ditto. 14206 (JSC::CodeBlock::addLineInfo): Ditto. 14207 (JSC::CodeBlock::lastLineInfo): Ditto. 14208 14209 * bytecode/Opcode.h: Change length of op_get_global_var to match op_resolve_global. 14210 14211 * bytecode/SamplingTool.cpp: 14212 (JSC::SamplingTool::dump): Add comment indicating why it is okay not to pass a CallFrame. 14213 14214 * bytecompiler/BytecodeGenerator.cpp: 14215 (JSC::BytecodeGenerator::generate): Clear the exception info after generation for Function and Eval 14216 Code when not in regenerate for exception info mode. 14217 (JSC::BytecodeGenerator::BytecodeGenerator): Initialize m_regeneratingForExceptionInfo to false. 14218 (JSC::BytecodeGenerator::emitGetScopedVar): Pad op_get_global_var with 2 nops. 14219 * bytecompiler/BytecodeGenerator.h: 14220 (JSC::BytecodeGenerator::setRegeneratingForExcpeptionInfo): Added. 14221 14222 * interpreter/Interpreter.cpp: 14223 (JSC::Interpreter::throwException): Pass the CallFrame to exception info accessors. 14224 (JSC::Interpreter::privateExecute): Ditto. 14225 (JSC::Interpreter::retrieveLastCaller): Ditto. 14226 (JSC::Interpreter::cti_op_new_error): Ditto. 14227 14228 * jit/JIT.cpp: 14229 (JSC::JIT::privateCompileMainPass): Pass the current bytecode offset instead of hard coding the 14230 line number, the stub will do the accessing if it gets called. 14231 14232 * parser/Nodes.cpp: 14233 (JSC::ProgramNode::emitBytecode): Moved. 14234 (JSC::ProgramNode::generateBytecode): Moved. 14235 (JSC::EvalNode::create): Moved. 14236 (JSC::EvalNode::bytecodeForExceptionInfoReparse): Added. 14237 (JSC::FunctionBodyNode::generateBytecode): Rename reparse to reparseInPlace. 14238 (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse): Addded. 14239 14240 * parser/Nodes.h: 14241 (JSC::ScopeNode::features): Added getter. 14242 * parser/Parser.cpp: 14243 (JSC::Parser::reparseInPlace): Renamed from reparse. 14244 * parser/Parser.h: 14245 (JSC::Parser::reparse): Added. Re-parses the passed in Node into 14246 a new Node. 14247 * runtime/ExceptionHelpers.cpp: 14248 (JSC::createUndefinedVariableError): Pass along CallFrame. 14249 (JSC::createInvalidParamError): Ditto. 14250 (JSC::createNotAConstructorError): Ditto. 14251 (JSC::createNotAFunctionError): Ditto. 14252 (JSC::createNotAnObjectError): Ditto. 14253 14254 2009-01-06 Gavin Barraclough <baraclough (a] apple.com> 14255 14256 Reviewed by Maciej Stachowiak. 14257 14258 Replace accidentally removed references in BytecodeGenerator, deleting these 14259 will be hindering the sharing of constant numbers and strings. 14260 14261 The code to add a new constant (either number or string) to their respective 14262 map works by attempting to add a null entry, then checking the result of the 14263 add for null. The first time, this should return the null (or noValue). 14264 The code checks for null (to see if this is the initial add), and then allocates 14265 a new number / string object. This code relies on the result returned from 14266 the add to the map being stored as a reference, such that the allocated object 14267 will be stored in the map, and will be resused if the same constant is encountered 14268 again. By failing to use a reference we will be leaking GC object for each 14269 additional entry added to the map. As GC objects they should be clollected, 14270 be we should no be allocatin them in the first place. 14271 14272 https://bugs.webkit.org/show_bug.cgi?id=23158 14273 14274 * bytecompiler/BytecodeGenerator.cpp: 14275 (JSC::BytecodeGenerator::emitLoad): 14276 14277 2009-01-06 Oliver Hunt <oliver (a] apple.com> 14278 14279 Reviewed by Gavin Barraclough. 14280 14281 <rdar://problem/6040850> JavaScript register file should use VirtualAlloc on Windows 14282 14283 Fairly simple, just reserve 4Mb of address space for the 14284 register file, and then commit one section at a time. We 14285 don't release committed memory as we drop back, but then 14286 mac doesn't either so this probably not too much of a 14287 problem. 14288 14289 * interpreter/RegisterFile.cpp: 14290 (JSC::RegisterFile::~RegisterFile): 14291 * interpreter/RegisterFile.h: 14292 (JSC::RegisterFile::RegisterFile): 14293 (JSC::RegisterFile::grow): 14294 14295 2009-01-06 Alexey Proskuryakov <ap (a] webkit.org> 14296 14297 Reviewed by Darin Adler. 14298 14299 https://bugs.webkit.org/show_bug.cgi?id=23142 14300 ThreadGlobalData leaks seen on buildbot 14301 14302 * wtf/ThreadSpecific.h: (WTF::ThreadSpecific::destroy): Temporarily reset the thread 14303 specific value to make getter work on Mac OS X. 14304 14305 * wtf/Platform.h: Touch this file again to make sure all Windows builds use the most recent 14306 version of ThreadSpecific.h. 14307 14308 2009-01-05 Gavin Barraclough <baraclough (a] apple.com> 14309 14310 Reviewed by Oliver Hunt. 14311 14312 Replace all uses of JSValue* with a new smart pointer type, JSValuePtr. 14313 14314 A JavaScript value may be a heap object or boxed primitive, represented by a 14315 pointer, or may be an unboxed immediate value, such as an integer. Since a 14316 value may dynamically need to contain either a pointer value or an immediate, 14317 we encode immediates as pointer values (since all valid JSCell pointers are 14318 allocated at alligned addesses, unaligned addresses are available to encode 14319 immediates). As such all JavaScript values are represented using a JSValue*. 14320 14321 This implementation is encumbered by a number of constraints. It ties the 14322 JSValue representation to the size of pointer on the platform, which, for 14323 example, means that we currently can represent different ranges of integers 14324 as immediates on x86 and x86-64. It also prevents us from overloading the 14325 to-boolean conversion used to test for noValue() - effectively forcing us 14326 to represent noValue() as 0. This would potentially be problematic were we 14327 to wish to encode integer values differently (e.g. were we to use the v8 14328 encoding, where pointers are tagged with 1 and integers with 0, then the 14329 immediate integer 0 would conflict with noValue()). 14330 14331 This patch replaces all usage of JSValue* with a new class, JSValuePtr, 14332 which encapsulates the pointer. JSValuePtr maintains the same interface as 14333 JSValue*, overloading operator-> and operator bool such that previous 14334 operations in the code on variables of type JSValue* are still supported. 14335 14336 In order to provide a ProtectPtr<> type with support for the new value 14337 representation (without using the internal JSValue type directly), a new 14338 ProtectJSValuePtr type has been added, equivalent to the previous type 14339 ProtectPtr<JSValue>. 14340 14341 This patch is likely the first in a sequence of three changes. With the 14342 value now encapsulated it will likely make sense to migrate the functionality 14343 from JSValue into JSValuePtr, such that the internal pointer representation 14344 need not be exposed. Through migrating the functionality to the wrapper 14345 class the existing JSValue should be rendered redundant, and the class is 14346 likely to be removed (the JSValuePtr now wrapping a pointer to a JSCell). 14347 At this stage it will likely make sense to rename JSValuePtr to JSValue. 14348 14349 https://bugs.webkit.org/show_bug.cgi?id=23114 14350 14351 * API/APICast.h: 14352 (toJS): 14353 (toRef): 14354 * API/JSBase.cpp: 14355 (JSEvaluateScript): 14356 * API/JSCallbackConstructor.h: 14357 (JSC::JSCallbackConstructor::createStructure): 14358 * API/JSCallbackFunction.cpp: 14359 (JSC::JSCallbackFunction::call): 14360 * API/JSCallbackFunction.h: 14361 (JSC::JSCallbackFunction::createStructure): 14362 * API/JSCallbackObject.h: 14363 (JSC::JSCallbackObject::createStructure): 14364 * API/JSCallbackObjectFunctions.h: 14365 (JSC::::asCallbackObject): 14366 (JSC::::put): 14367 (JSC::::hasInstance): 14368 (JSC::::call): 14369 (JSC::::staticValueGetter): 14370 (JSC::::staticFunctionGetter): 14371 (JSC::::callbackGetter): 14372 * API/JSContextRef.cpp: 14373 * API/JSObjectRef.cpp: 14374 (JSObjectMakeConstructor): 14375 (JSObjectSetPrototype): 14376 (JSObjectGetProperty): 14377 (JSObjectSetProperty): 14378 (JSObjectGetPropertyAtIndex): 14379 (JSObjectSetPropertyAtIndex): 14380 * API/JSValueRef.cpp: 14381 (JSValueGetType): 14382 (JSValueIsUndefined): 14383 (JSValueIsNull): 14384 (JSValueIsBoolean): 14385 (JSValueIsNumber): 14386 (JSValueIsString): 14387 (JSValueIsObject): 14388 (JSValueIsObjectOfClass): 14389 (JSValueIsEqual): 14390 (JSValueIsStrictEqual): 14391 (JSValueIsInstanceOfConstructor): 14392 (JSValueToBoolean): 14393 (JSValueToNumber): 14394 (JSValueToStringCopy): 14395 (JSValueToObject): 14396 (JSValueProtect): 14397 (JSValueUnprotect): 14398 * JavaScriptCore.exp: 14399 * bytecode/CodeBlock.cpp: 14400 (JSC::valueToSourceString): 14401 (JSC::constantName): 14402 (JSC::CodeBlock::dump): 14403 * bytecode/CodeBlock.h: 14404 (JSC::CodeBlock::getConstant): 14405 (JSC::CodeBlock::addUnexpectedConstant): 14406 (JSC::CodeBlock::unexpectedConstant): 14407 * bytecode/EvalCodeCache.h: 14408 (JSC::EvalCodeCache::get): 14409 * bytecompiler/BytecodeGenerator.cpp: 14410 (JSC::BytecodeGenerator::BytecodeGenerator): 14411 (JSC::BytecodeGenerator::addConstant): 14412 (JSC::BytecodeGenerator::addUnexpectedConstant): 14413 (JSC::BytecodeGenerator::emitLoad): 14414 (JSC::BytecodeGenerator::emitLoadJSV): 14415 (JSC::BytecodeGenerator::emitGetScopedVar): 14416 (JSC::BytecodeGenerator::emitPutScopedVar): 14417 (JSC::BytecodeGenerator::emitNewError): 14418 (JSC::keyForImmediateSwitch): 14419 * bytecompiler/BytecodeGenerator.h: 14420 (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue): 14421 (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue): 14422 * debugger/DebuggerCallFrame.cpp: 14423 (JSC::DebuggerCallFrame::evaluate): 14424 * debugger/DebuggerCallFrame.h: 14425 (JSC::DebuggerCallFrame::DebuggerCallFrame): 14426 (JSC::DebuggerCallFrame::exception): 14427 * interpreter/CallFrame.cpp: 14428 (JSC::CallFrame::thisValue): 14429 * interpreter/CallFrame.h: 14430 (JSC::ExecState::setException): 14431 (JSC::ExecState::exception): 14432 (JSC::ExecState::exceptionSlot): 14433 (JSC::ExecState::hadException): 14434 * interpreter/Interpreter.cpp: 14435 (JSC::fastIsNumber): 14436 (JSC::fastToInt32): 14437 (JSC::fastToUInt32): 14438 (JSC::jsLess): 14439 (JSC::jsLessEq): 14440 (JSC::jsAddSlowCase): 14441 (JSC::jsAdd): 14442 (JSC::jsTypeStringForValue): 14443 (JSC::jsIsObjectType): 14444 (JSC::jsIsFunctionType): 14445 (JSC::Interpreter::resolve): 14446 (JSC::Interpreter::resolveSkip): 14447 (JSC::Interpreter::resolveGlobal): 14448 (JSC::inlineResolveBase): 14449 (JSC::Interpreter::resolveBase): 14450 (JSC::Interpreter::resolveBaseAndProperty): 14451 (JSC::Interpreter::resolveBaseAndFunc): 14452 (JSC::isNotObject): 14453 (JSC::Interpreter::callEval): 14454 (JSC::Interpreter::unwindCallFrame): 14455 (JSC::Interpreter::throwException): 14456 (JSC::Interpreter::execute): 14457 (JSC::Interpreter::checkTimeout): 14458 (JSC::Interpreter::createExceptionScope): 14459 (JSC::cachePrototypeChain): 14460 (JSC::Interpreter::tryCachePutByID): 14461 (JSC::countPrototypeChainEntriesAndCheckForProxies): 14462 (JSC::Interpreter::tryCacheGetByID): 14463 (JSC::Interpreter::privateExecute): 14464 (JSC::Interpreter::retrieveArguments): 14465 (JSC::Interpreter::retrieveCaller): 14466 (JSC::Interpreter::retrieveLastCaller): 14467 (JSC::Interpreter::tryCTICachePutByID): 14468 (JSC::Interpreter::tryCTICacheGetByID): 14469 (JSC::returnToThrowTrampoline): 14470 (JSC::Interpreter::cti_op_convert_this): 14471 (JSC::Interpreter::cti_op_add): 14472 (JSC::Interpreter::cti_op_pre_inc): 14473 (JSC::Interpreter::cti_op_loop_if_less): 14474 (JSC::Interpreter::cti_op_loop_if_lesseq): 14475 (JSC::Interpreter::cti_op_get_by_id_generic): 14476 (JSC::Interpreter::cti_op_get_by_id): 14477 (JSC::Interpreter::cti_op_get_by_id_second): 14478 (JSC::Interpreter::cti_op_get_by_id_self_fail): 14479 (JSC::Interpreter::cti_op_get_by_id_proto_list): 14480 (JSC::Interpreter::cti_op_get_by_id_proto_list_full): 14481 (JSC::Interpreter::cti_op_get_by_id_proto_fail): 14482 (JSC::Interpreter::cti_op_get_by_id_array_fail): 14483 (JSC::Interpreter::cti_op_get_by_id_string_fail): 14484 (JSC::Interpreter::cti_op_instanceof): 14485 (JSC::Interpreter::cti_op_del_by_id): 14486 (JSC::Interpreter::cti_op_mul): 14487 (JSC::Interpreter::cti_op_call_NotJSFunction): 14488 (JSC::Interpreter::cti_op_resolve): 14489 (JSC::Interpreter::cti_op_construct_NotJSConstruct): 14490 (JSC::Interpreter::cti_op_get_by_val): 14491 (JSC::Interpreter::cti_op_resolve_func): 14492 (JSC::Interpreter::cti_op_sub): 14493 (JSC::Interpreter::cti_op_put_by_val): 14494 (JSC::Interpreter::cti_op_put_by_val_array): 14495 (JSC::Interpreter::cti_op_lesseq): 14496 (JSC::Interpreter::cti_op_loop_if_true): 14497 (JSC::Interpreter::cti_op_negate): 14498 (JSC::Interpreter::cti_op_resolve_base): 14499 (JSC::Interpreter::cti_op_resolve_skip): 14500 (JSC::Interpreter::cti_op_resolve_global): 14501 (JSC::Interpreter::cti_op_div): 14502 (JSC::Interpreter::cti_op_pre_dec): 14503 (JSC::Interpreter::cti_op_jless): 14504 (JSC::Interpreter::cti_op_not): 14505 (JSC::Interpreter::cti_op_jtrue): 14506 (JSC::Interpreter::cti_op_post_inc): 14507 (JSC::Interpreter::cti_op_eq): 14508 (JSC::Interpreter::cti_op_lshift): 14509 (JSC::Interpreter::cti_op_bitand): 14510 (JSC::Interpreter::cti_op_rshift): 14511 (JSC::Interpreter::cti_op_bitnot): 14512 (JSC::Interpreter::cti_op_resolve_with_base): 14513 (JSC::Interpreter::cti_op_mod): 14514 (JSC::Interpreter::cti_op_less): 14515 (JSC::Interpreter::cti_op_neq): 14516 (JSC::Interpreter::cti_op_post_dec): 14517 (JSC::Interpreter::cti_op_urshift): 14518 (JSC::Interpreter::cti_op_bitxor): 14519 (JSC::Interpreter::cti_op_bitor): 14520 (JSC::Interpreter::cti_op_call_eval): 14521 (JSC::Interpreter::cti_op_throw): 14522 (JSC::Interpreter::cti_op_next_pname): 14523 (JSC::Interpreter::cti_op_typeof): 14524 (JSC::Interpreter::cti_op_is_undefined): 14525 (JSC::Interpreter::cti_op_is_boolean): 14526 (JSC::Interpreter::cti_op_is_number): 14527 (JSC::Interpreter::cti_op_is_string): 14528 (JSC::Interpreter::cti_op_is_object): 14529 (JSC::Interpreter::cti_op_is_function): 14530 (JSC::Interpreter::cti_op_stricteq): 14531 (JSC::Interpreter::cti_op_nstricteq): 14532 (JSC::Interpreter::cti_op_to_jsnumber): 14533 (JSC::Interpreter::cti_op_in): 14534 (JSC::Interpreter::cti_op_switch_imm): 14535 (JSC::Interpreter::cti_op_switch_char): 14536 (JSC::Interpreter::cti_op_switch_string): 14537 (JSC::Interpreter::cti_op_del_by_val): 14538 (JSC::Interpreter::cti_op_new_error): 14539 (JSC::Interpreter::cti_vm_throw): 14540 * interpreter/Interpreter.h: 14541 (JSC::Interpreter::isJSArray): 14542 (JSC::Interpreter::isJSString): 14543 * interpreter/Register.h: 14544 (JSC::Register::): 14545 (JSC::Register::Register): 14546 (JSC::Register::jsValue): 14547 (JSC::Register::getJSValue): 14548 * jit/JIT.cpp: 14549 (JSC::): 14550 (JSC::JIT::compileOpStrictEq): 14551 (JSC::JIT::privateCompileMainPass): 14552 (JSC::JIT::privateCompileSlowCases): 14553 * jit/JIT.h: 14554 (JSC::): 14555 (JSC::JIT::execute): 14556 * jit/JITArithmetic.cpp: 14557 (JSC::JIT::compileFastArith_op_rshift): 14558 (JSC::JIT::compileFastArithSlow_op_rshift): 14559 * jit/JITCall.cpp: 14560 (JSC::JIT::unlinkCall): 14561 (JSC::JIT::compileOpCallInitializeCallFrame): 14562 (JSC::JIT::compileOpCall): 14563 * jit/JITInlineMethods.h: 14564 (JSC::JIT::emitGetVirtualRegister): 14565 (JSC::JIT::getConstantOperand): 14566 (JSC::JIT::isOperandConstant31BitImmediateInt): 14567 (JSC::JIT::emitPutJITStubArgFromVirtualRegister): 14568 (JSC::JIT::emitInitRegister): 14569 * jit/JITPropertyAccess.cpp: 14570 (JSC::resizePropertyStorage): 14571 (JSC::JIT::privateCompilePutByIdTransition): 14572 (JSC::JIT::patchGetByIdSelf): 14573 (JSC::JIT::patchPutByIdReplace): 14574 (JSC::JIT::privateCompileGetByIdSelf): 14575 (JSC::JIT::privateCompileGetByIdProto): 14576 (JSC::JIT::privateCompileGetByIdSelfList): 14577 (JSC::JIT::privateCompileGetByIdProtoList): 14578 (JSC::JIT::privateCompileGetByIdChainList): 14579 (JSC::JIT::privateCompileGetByIdChain): 14580 (JSC::JIT::privateCompilePutByIdReplace): 14581 * jsc.cpp: 14582 (functionPrint): 14583 (functionDebug): 14584 (functionGC): 14585 (functionVersion): 14586 (functionRun): 14587 (functionLoad): 14588 (functionReadline): 14589 (functionQuit): 14590 * parser/Nodes.cpp: 14591 (JSC::NullNode::emitBytecode): 14592 (JSC::ArrayNode::emitBytecode): 14593 (JSC::FunctionCallValueNode::emitBytecode): 14594 (JSC::FunctionCallResolveNode::emitBytecode): 14595 (JSC::VoidNode::emitBytecode): 14596 (JSC::ConstDeclNode::emitCodeSingle): 14597 (JSC::ReturnNode::emitBytecode): 14598 (JSC::processClauseList): 14599 (JSC::EvalNode::emitBytecode): 14600 (JSC::FunctionBodyNode::emitBytecode): 14601 (JSC::ProgramNode::emitBytecode): 14602 * profiler/ProfileGenerator.cpp: 14603 (JSC::ProfileGenerator::addParentForConsoleStart): 14604 * profiler/Profiler.cpp: 14605 (JSC::Profiler::willExecute): 14606 (JSC::Profiler::didExecute): 14607 (JSC::Profiler::createCallIdentifier): 14608 * profiler/Profiler.h: 14609 * runtime/ArgList.cpp: 14610 (JSC::ArgList::slowAppend): 14611 * runtime/ArgList.h: 14612 (JSC::ArgList::at): 14613 (JSC::ArgList::append): 14614 * runtime/Arguments.cpp: 14615 (JSC::Arguments::put): 14616 * runtime/Arguments.h: 14617 (JSC::Arguments::createStructure): 14618 (JSC::asArguments): 14619 * runtime/ArrayConstructor.cpp: 14620 (JSC::callArrayConstructor): 14621 * runtime/ArrayPrototype.cpp: 14622 (JSC::getProperty): 14623 (JSC::putProperty): 14624 (JSC::arrayProtoFuncToString): 14625 (JSC::arrayProtoFuncToLocaleString): 14626 (JSC::arrayProtoFuncJoin): 14627 (JSC::arrayProtoFuncConcat): 14628 (JSC::arrayProtoFuncPop): 14629 (JSC::arrayProtoFuncPush): 14630 (JSC::arrayProtoFuncReverse): 14631 (JSC::arrayProtoFuncShift): 14632 (JSC::arrayProtoFuncSlice): 14633 (JSC::arrayProtoFuncSort): 14634 (JSC::arrayProtoFuncSplice): 14635 (JSC::arrayProtoFuncUnShift): 14636 (JSC::arrayProtoFuncFilter): 14637 (JSC::arrayProtoFuncMap): 14638 (JSC::arrayProtoFuncEvery): 14639 (JSC::arrayProtoFuncForEach): 14640 (JSC::arrayProtoFuncSome): 14641 (JSC::arrayProtoFuncIndexOf): 14642 (JSC::arrayProtoFuncLastIndexOf): 14643 * runtime/BooleanConstructor.cpp: 14644 (JSC::callBooleanConstructor): 14645 (JSC::constructBooleanFromImmediateBoolean): 14646 * runtime/BooleanConstructor.h: 14647 * runtime/BooleanObject.h: 14648 (JSC::asBooleanObject): 14649 * runtime/BooleanPrototype.cpp: 14650 (JSC::booleanProtoFuncToString): 14651 (JSC::booleanProtoFuncValueOf): 14652 * runtime/CallData.cpp: 14653 (JSC::call): 14654 * runtime/CallData.h: 14655 * runtime/Collector.cpp: 14656 (JSC::Heap::protect): 14657 (JSC::Heap::unprotect): 14658 (JSC::Heap::heap): 14659 (JSC::Heap::collect): 14660 * runtime/Collector.h: 14661 * runtime/Completion.cpp: 14662 (JSC::evaluate): 14663 * runtime/Completion.h: 14664 (JSC::Completion::Completion): 14665 (JSC::Completion::value): 14666 (JSC::Completion::setValue): 14667 (JSC::Completion::isValueCompletion): 14668 * runtime/ConstructData.cpp: 14669 (JSC::construct): 14670 * runtime/ConstructData.h: 14671 * runtime/DateConstructor.cpp: 14672 (JSC::constructDate): 14673 (JSC::callDate): 14674 (JSC::dateParse): 14675 (JSC::dateNow): 14676 (JSC::dateUTC): 14677 * runtime/DateInstance.h: 14678 (JSC::asDateInstance): 14679 * runtime/DatePrototype.cpp: 14680 (JSC::dateProtoFuncToString): 14681 (JSC::dateProtoFuncToUTCString): 14682 (JSC::dateProtoFuncToDateString): 14683 (JSC::dateProtoFuncToTimeString): 14684 (JSC::dateProtoFuncToLocaleString): 14685 (JSC::dateProtoFuncToLocaleDateString): 14686 (JSC::dateProtoFuncToLocaleTimeString): 14687 (JSC::dateProtoFuncValueOf): 14688 (JSC::dateProtoFuncGetTime): 14689 (JSC::dateProtoFuncGetFullYear): 14690 (JSC::dateProtoFuncGetUTCFullYear): 14691 (JSC::dateProtoFuncToGMTString): 14692 (JSC::dateProtoFuncGetMonth): 14693 (JSC::dateProtoFuncGetUTCMonth): 14694 (JSC::dateProtoFuncGetDate): 14695 (JSC::dateProtoFuncGetUTCDate): 14696 (JSC::dateProtoFuncGetDay): 14697 (JSC::dateProtoFuncGetUTCDay): 14698 (JSC::dateProtoFuncGetHours): 14699 (JSC::dateProtoFuncGetUTCHours): 14700 (JSC::dateProtoFuncGetMinutes): 14701 (JSC::dateProtoFuncGetUTCMinutes): 14702 (JSC::dateProtoFuncGetSeconds): 14703 (JSC::dateProtoFuncGetUTCSeconds): 14704 (JSC::dateProtoFuncGetMilliSeconds): 14705 (JSC::dateProtoFuncGetUTCMilliseconds): 14706 (JSC::dateProtoFuncGetTimezoneOffset): 14707 (JSC::dateProtoFuncSetTime): 14708 (JSC::setNewValueFromTimeArgs): 14709 (JSC::setNewValueFromDateArgs): 14710 (JSC::dateProtoFuncSetMilliSeconds): 14711 (JSC::dateProtoFuncSetUTCMilliseconds): 14712 (JSC::dateProtoFuncSetSeconds): 14713 (JSC::dateProtoFuncSetUTCSeconds): 14714 (JSC::dateProtoFuncSetMinutes): 14715 (JSC::dateProtoFuncSetUTCMinutes): 14716 (JSC::dateProtoFuncSetHours): 14717 (JSC::dateProtoFuncSetUTCHours): 14718 (JSC::dateProtoFuncSetDate): 14719 (JSC::dateProtoFuncSetUTCDate): 14720 (JSC::dateProtoFuncSetMonth): 14721 (JSC::dateProtoFuncSetUTCMonth): 14722 (JSC::dateProtoFuncSetFullYear): 14723 (JSC::dateProtoFuncSetUTCFullYear): 14724 (JSC::dateProtoFuncSetYear): 14725 (JSC::dateProtoFuncGetYear): 14726 * runtime/DatePrototype.h: 14727 (JSC::DatePrototype::createStructure): 14728 * runtime/ErrorConstructor.cpp: 14729 (JSC::callErrorConstructor): 14730 * runtime/ErrorPrototype.cpp: 14731 (JSC::errorProtoFuncToString): 14732 * runtime/ExceptionHelpers.cpp: 14733 (JSC::createInterruptedExecutionException): 14734 (JSC::createError): 14735 (JSC::createStackOverflowError): 14736 (JSC::createUndefinedVariableError): 14737 (JSC::createErrorMessage): 14738 (JSC::createInvalidParamError): 14739 (JSC::createNotAConstructorError): 14740 (JSC::createNotAFunctionError): 14741 * runtime/ExceptionHelpers.h: 14742 * runtime/FunctionConstructor.cpp: 14743 (JSC::callFunctionConstructor): 14744 * runtime/FunctionPrototype.cpp: 14745 (JSC::callFunctionPrototype): 14746 (JSC::functionProtoFuncToString): 14747 (JSC::functionProtoFuncApply): 14748 (JSC::functionProtoFuncCall): 14749 * runtime/FunctionPrototype.h: 14750 (JSC::FunctionPrototype::createStructure): 14751 * runtime/GetterSetter.cpp: 14752 (JSC::GetterSetter::toPrimitive): 14753 (JSC::GetterSetter::getPrimitiveNumber): 14754 * runtime/GetterSetter.h: 14755 (JSC::asGetterSetter): 14756 * runtime/InitializeThreading.cpp: 14757 * runtime/InternalFunction.h: 14758 (JSC::InternalFunction::createStructure): 14759 (JSC::asInternalFunction): 14760 * runtime/JSActivation.cpp: 14761 (JSC::JSActivation::getOwnPropertySlot): 14762 (JSC::JSActivation::put): 14763 (JSC::JSActivation::putWithAttributes): 14764 (JSC::JSActivation::argumentsGetter): 14765 * runtime/JSActivation.h: 14766 (JSC::JSActivation::createStructure): 14767 (JSC::asActivation): 14768 * runtime/JSArray.cpp: 14769 (JSC::storageSize): 14770 (JSC::JSArray::JSArray): 14771 (JSC::JSArray::getOwnPropertySlot): 14772 (JSC::JSArray::put): 14773 (JSC::JSArray::putSlowCase): 14774 (JSC::JSArray::deleteProperty): 14775 (JSC::JSArray::getPropertyNames): 14776 (JSC::JSArray::setLength): 14777 (JSC::JSArray::pop): 14778 (JSC::JSArray::push): 14779 (JSC::JSArray::mark): 14780 (JSC::JSArray::sort): 14781 (JSC::JSArray::compactForSorting): 14782 (JSC::JSArray::checkConsistency): 14783 (JSC::constructArray): 14784 * runtime/JSArray.h: 14785 (JSC::JSArray::getIndex): 14786 (JSC::JSArray::setIndex): 14787 (JSC::JSArray::createStructure): 14788 (JSC::asArray): 14789 * runtime/JSCell.cpp: 14790 (JSC::JSCell::put): 14791 (JSC::JSCell::getJSNumber): 14792 * runtime/JSCell.h: 14793 (JSC::asCell): 14794 (JSC::JSValue::asCell): 14795 (JSC::JSValue::toPrimitive): 14796 (JSC::JSValue::getPrimitiveNumber): 14797 (JSC::JSValue::getJSNumber): 14798 * runtime/JSFunction.cpp: 14799 (JSC::JSFunction::call): 14800 (JSC::JSFunction::argumentsGetter): 14801 (JSC::JSFunction::callerGetter): 14802 (JSC::JSFunction::lengthGetter): 14803 (JSC::JSFunction::getOwnPropertySlot): 14804 (JSC::JSFunction::put): 14805 (JSC::JSFunction::construct): 14806 * runtime/JSFunction.h: 14807 (JSC::JSFunction::createStructure): 14808 (JSC::asFunction): 14809 * runtime/JSGlobalData.h: 14810 * runtime/JSGlobalObject.cpp: 14811 (JSC::markIfNeeded): 14812 (JSC::JSGlobalObject::put): 14813 (JSC::JSGlobalObject::putWithAttributes): 14814 (JSC::JSGlobalObject::reset): 14815 (JSC::JSGlobalObject::resetPrototype): 14816 * runtime/JSGlobalObject.h: 14817 (JSC::JSGlobalObject::createStructure): 14818 (JSC::JSGlobalObject::GlobalPropertyInfo::GlobalPropertyInfo): 14819 (JSC::asGlobalObject): 14820 (JSC::Structure::prototypeForLookup): 14821 * runtime/JSGlobalObjectFunctions.cpp: 14822 (JSC::encode): 14823 (JSC::decode): 14824 (JSC::globalFuncEval): 14825 (JSC::globalFuncParseInt): 14826 (JSC::globalFuncParseFloat): 14827 (JSC::globalFuncIsNaN): 14828 (JSC::globalFuncIsFinite): 14829 (JSC::globalFuncDecodeURI): 14830 (JSC::globalFuncDecodeURIComponent): 14831 (JSC::globalFuncEncodeURI): 14832 (JSC::globalFuncEncodeURIComponent): 14833 (JSC::globalFuncEscape): 14834 (JSC::globalFuncUnescape): 14835 (JSC::globalFuncJSCPrint): 14836 * runtime/JSGlobalObjectFunctions.h: 14837 * runtime/JSImmediate.cpp: 14838 (JSC::JSImmediate::toThisObject): 14839 (JSC::JSImmediate::toObject): 14840 (JSC::JSImmediate::prototype): 14841 (JSC::JSImmediate::toString): 14842 * runtime/JSImmediate.h: 14843 (JSC::JSImmediate::isImmediate): 14844 (JSC::JSImmediate::isNumber): 14845 (JSC::JSImmediate::isPositiveNumber): 14846 (JSC::JSImmediate::isBoolean): 14847 (JSC::JSImmediate::isUndefinedOrNull): 14848 (JSC::JSImmediate::isNegative): 14849 (JSC::JSImmediate::isEitherImmediate): 14850 (JSC::JSImmediate::isAnyImmediate): 14851 (JSC::JSImmediate::areBothImmediate): 14852 (JSC::JSImmediate::areBothImmediateNumbers): 14853 (JSC::JSImmediate::andImmediateNumbers): 14854 (JSC::JSImmediate::xorImmediateNumbers): 14855 (JSC::JSImmediate::orImmediateNumbers): 14856 (JSC::JSImmediate::rightShiftImmediateNumbers): 14857 (JSC::JSImmediate::canDoFastAdditiveOperations): 14858 (JSC::JSImmediate::addImmediateNumbers): 14859 (JSC::JSImmediate::subImmediateNumbers): 14860 (JSC::JSImmediate::incImmediateNumber): 14861 (JSC::JSImmediate::decImmediateNumber): 14862 (JSC::JSImmediate::makeValue): 14863 (JSC::JSImmediate::makeInt): 14864 (JSC::JSImmediate::makeBool): 14865 (JSC::JSImmediate::makeUndefined): 14866 (JSC::JSImmediate::makeNull): 14867 (JSC::JSImmediate::intValue): 14868 (JSC::JSImmediate::uintValue): 14869 (JSC::JSImmediate::boolValue): 14870 (JSC::JSImmediate::rawValue): 14871 (JSC::JSImmediate::trueImmediate): 14872 (JSC::JSImmediate::falseImmediate): 14873 (JSC::JSImmediate::undefinedImmediate): 14874 (JSC::JSImmediate::nullImmediate): 14875 (JSC::JSImmediate::zeroImmediate): 14876 (JSC::JSImmediate::oneImmediate): 14877 (JSC::JSImmediate::impossibleValue): 14878 (JSC::JSImmediate::toBoolean): 14879 (JSC::JSImmediate::getTruncatedUInt32): 14880 (JSC::JSImmediate::from): 14881 (JSC::JSImmediate::getTruncatedInt32): 14882 (JSC::JSImmediate::toDouble): 14883 (JSC::JSImmediate::getUInt32): 14884 (JSC::jsNull): 14885 (JSC::jsBoolean): 14886 (JSC::jsUndefined): 14887 (JSC::JSValue::isUndefined): 14888 (JSC::JSValue::isNull): 14889 (JSC::JSValue::isUndefinedOrNull): 14890 (JSC::JSValue::isBoolean): 14891 (JSC::JSValue::getBoolean): 14892 (JSC::JSValue::toInt32): 14893 (JSC::JSValue::toUInt32): 14894 (JSC::toInt32): 14895 (JSC::toUInt32): 14896 * runtime/JSNotAnObject.cpp: 14897 (JSC::JSNotAnObject::toPrimitive): 14898 (JSC::JSNotAnObject::getPrimitiveNumber): 14899 (JSC::JSNotAnObject::put): 14900 * runtime/JSNotAnObject.h: 14901 (JSC::JSNotAnObject::createStructure): 14902 * runtime/JSNumberCell.cpp: 14903 (JSC::JSNumberCell::toPrimitive): 14904 (JSC::JSNumberCell::getPrimitiveNumber): 14905 (JSC::JSNumberCell::getJSNumber): 14906 (JSC::jsNumberCell): 14907 (JSC::jsNaN): 14908 * runtime/JSNumberCell.h: 14909 (JSC::JSNumberCell::createStructure): 14910 (JSC::asNumberCell): 14911 (JSC::jsNumber): 14912 (JSC::JSValue::toJSNumber): 14913 * runtime/JSObject.cpp: 14914 (JSC::JSObject::mark): 14915 (JSC::JSObject::put): 14916 (JSC::JSObject::putWithAttributes): 14917 (JSC::callDefaultValueFunction): 14918 (JSC::JSObject::getPrimitiveNumber): 14919 (JSC::JSObject::defaultValue): 14920 (JSC::JSObject::defineGetter): 14921 (JSC::JSObject::defineSetter): 14922 (JSC::JSObject::lookupGetter): 14923 (JSC::JSObject::lookupSetter): 14924 (JSC::JSObject::hasInstance): 14925 (JSC::JSObject::toNumber): 14926 (JSC::JSObject::toString): 14927 (JSC::JSObject::fillGetterPropertySlot): 14928 * runtime/JSObject.h: 14929 (JSC::JSObject::getDirect): 14930 (JSC::JSObject::getDirectLocation): 14931 (JSC::JSObject::offsetForLocation): 14932 (JSC::JSObject::locationForOffset): 14933 (JSC::JSObject::getDirectOffset): 14934 (JSC::JSObject::putDirectOffset): 14935 (JSC::JSObject::createStructure): 14936 (JSC::asObject): 14937 (JSC::JSObject::prototype): 14938 (JSC::JSObject::setPrototype): 14939 (JSC::JSObject::inlineGetOwnPropertySlot): 14940 (JSC::JSObject::getOwnPropertySlotForWrite): 14941 (JSC::JSObject::getPropertySlot): 14942 (JSC::JSObject::get): 14943 (JSC::JSObject::putDirect): 14944 (JSC::JSObject::putDirectWithoutTransition): 14945 (JSC::JSObject::toPrimitive): 14946 (JSC::JSValue::get): 14947 (JSC::JSValue::put): 14948 (JSC::JSObject::allocatePropertyStorageInline): 14949 * runtime/JSPropertyNameIterator.cpp: 14950 (JSC::JSPropertyNameIterator::toPrimitive): 14951 (JSC::JSPropertyNameIterator::getPrimitiveNumber): 14952 * runtime/JSPropertyNameIterator.h: 14953 (JSC::JSPropertyNameIterator::create): 14954 (JSC::JSPropertyNameIterator::next): 14955 * runtime/JSStaticScopeObject.cpp: 14956 (JSC::JSStaticScopeObject::put): 14957 (JSC::JSStaticScopeObject::putWithAttributes): 14958 * runtime/JSStaticScopeObject.h: 14959 (JSC::JSStaticScopeObject::JSStaticScopeObject): 14960 (JSC::JSStaticScopeObject::createStructure): 14961 * runtime/JSString.cpp: 14962 (JSC::JSString::toPrimitive): 14963 (JSC::JSString::getPrimitiveNumber): 14964 (JSC::JSString::getOwnPropertySlot): 14965 * runtime/JSString.h: 14966 (JSC::JSString::createStructure): 14967 (JSC::asString): 14968 * runtime/JSValue.h: 14969 (JSC::JSValuePtr::makeImmediate): 14970 (JSC::JSValuePtr::immediateValue): 14971 (JSC::JSValuePtr::JSValuePtr): 14972 (JSC::JSValuePtr::operator->): 14973 (JSC::JSValuePtr::hasValue): 14974 (JSC::JSValuePtr::operator==): 14975 (JSC::JSValuePtr::operator!=): 14976 (JSC::JSValuePtr::encode): 14977 (JSC::JSValuePtr::decode): 14978 (JSC::JSValue::asValue): 14979 (JSC::noValue): 14980 (JSC::operator==): 14981 (JSC::operator!=): 14982 * runtime/JSVariableObject.h: 14983 (JSC::JSVariableObject::symbolTablePut): 14984 (JSC::JSVariableObject::symbolTablePutWithAttributes): 14985 * runtime/JSWrapperObject.cpp: 14986 (JSC::JSWrapperObject::mark): 14987 * runtime/JSWrapperObject.h: 14988 (JSC::JSWrapperObject::internalValue): 14989 (JSC::JSWrapperObject::setInternalValue): 14990 * runtime/Lookup.cpp: 14991 (JSC::setUpStaticFunctionSlot): 14992 * runtime/Lookup.h: 14993 (JSC::lookupPut): 14994 * runtime/MathObject.cpp: 14995 (JSC::mathProtoFuncAbs): 14996 (JSC::mathProtoFuncACos): 14997 (JSC::mathProtoFuncASin): 14998 (JSC::mathProtoFuncATan): 14999 (JSC::mathProtoFuncATan2): 15000 (JSC::mathProtoFuncCeil): 15001 (JSC::mathProtoFuncCos): 15002 (JSC::mathProtoFuncExp): 15003 (JSC::mathProtoFuncFloor): 15004 (JSC::mathProtoFuncLog): 15005 (JSC::mathProtoFuncMax): 15006 (JSC::mathProtoFuncMin): 15007 (JSC::mathProtoFuncPow): 15008 (JSC::mathProtoFuncRandom): 15009 (JSC::mathProtoFuncRound): 15010 (JSC::mathProtoFuncSin): 15011 (JSC::mathProtoFuncSqrt): 15012 (JSC::mathProtoFuncTan): 15013 * runtime/MathObject.h: 15014 (JSC::MathObject::createStructure): 15015 * runtime/NativeErrorConstructor.cpp: 15016 (JSC::callNativeErrorConstructor): 15017 * runtime/NumberConstructor.cpp: 15018 (JSC::numberConstructorNaNValue): 15019 (JSC::numberConstructorNegInfinity): 15020 (JSC::numberConstructorPosInfinity): 15021 (JSC::numberConstructorMaxValue): 15022 (JSC::numberConstructorMinValue): 15023 (JSC::callNumberConstructor): 15024 * runtime/NumberConstructor.h: 15025 (JSC::NumberConstructor::createStructure): 15026 * runtime/NumberObject.cpp: 15027 (JSC::NumberObject::getJSNumber): 15028 (JSC::constructNumberFromImmediateNumber): 15029 * runtime/NumberObject.h: 15030 * runtime/NumberPrototype.cpp: 15031 (JSC::numberProtoFuncToString): 15032 (JSC::numberProtoFuncToLocaleString): 15033 (JSC::numberProtoFuncValueOf): 15034 (JSC::numberProtoFuncToFixed): 15035 (JSC::numberProtoFuncToExponential): 15036 (JSC::numberProtoFuncToPrecision): 15037 * runtime/ObjectConstructor.cpp: 15038 (JSC::constructObject): 15039 (JSC::callObjectConstructor): 15040 * runtime/ObjectPrototype.cpp: 15041 (JSC::objectProtoFuncValueOf): 15042 (JSC::objectProtoFuncHasOwnProperty): 15043 (JSC::objectProtoFuncIsPrototypeOf): 15044 (JSC::objectProtoFuncDefineGetter): 15045 (JSC::objectProtoFuncDefineSetter): 15046 (JSC::objectProtoFuncLookupGetter): 15047 (JSC::objectProtoFuncLookupSetter): 15048 (JSC::objectProtoFuncPropertyIsEnumerable): 15049 (JSC::objectProtoFuncToLocaleString): 15050 (JSC::objectProtoFuncToString): 15051 * runtime/ObjectPrototype.h: 15052 * runtime/Operations.cpp: 15053 (JSC::equal): 15054 (JSC::equalSlowCase): 15055 (JSC::strictEqual): 15056 (JSC::strictEqualSlowCase): 15057 (JSC::throwOutOfMemoryError): 15058 * runtime/Operations.h: 15059 (JSC::equalSlowCaseInline): 15060 (JSC::strictEqualSlowCaseInline): 15061 * runtime/PropertySlot.cpp: 15062 (JSC::PropertySlot::functionGetter): 15063 * runtime/PropertySlot.h: 15064 (JSC::PropertySlot::PropertySlot): 15065 (JSC::PropertySlot::getValue): 15066 (JSC::PropertySlot::putValue): 15067 (JSC::PropertySlot::setValueSlot): 15068 (JSC::PropertySlot::setValue): 15069 (JSC::PropertySlot::setCustom): 15070 (JSC::PropertySlot::setCustomIndex): 15071 (JSC::PropertySlot::slotBase): 15072 (JSC::PropertySlot::setBase): 15073 (JSC::PropertySlot::): 15074 * runtime/Protect.h: 15075 (JSC::gcProtect): 15076 (JSC::gcUnprotect): 15077 (JSC::ProtectedPtr::ProtectedPtr): 15078 (JSC::ProtectedPtr::operator JSValuePtr): 15079 (JSC::ProtectedJSValuePtr::ProtectedJSValuePtr): 15080 (JSC::ProtectedJSValuePtr::get): 15081 (JSC::ProtectedJSValuePtr::operator JSValuePtr): 15082 (JSC::ProtectedJSValuePtr::operator->): 15083 (JSC::::ProtectedPtr): 15084 (JSC::::~ProtectedPtr): 15085 (JSC::::operator): 15086 (JSC::ProtectedJSValuePtr::~ProtectedJSValuePtr): 15087 (JSC::ProtectedJSValuePtr::operator=): 15088 (JSC::operator==): 15089 (JSC::operator!=): 15090 * runtime/RegExpConstructor.cpp: 15091 (JSC::RegExpConstructor::getBackref): 15092 (JSC::RegExpConstructor::getLastParen): 15093 (JSC::RegExpConstructor::getLeftContext): 15094 (JSC::RegExpConstructor::getRightContext): 15095 (JSC::regExpConstructorDollar1): 15096 (JSC::regExpConstructorDollar2): 15097 (JSC::regExpConstructorDollar3): 15098 (JSC::regExpConstructorDollar4): 15099 (JSC::regExpConstructorDollar5): 15100 (JSC::regExpConstructorDollar6): 15101 (JSC::regExpConstructorDollar7): 15102 (JSC::regExpConstructorDollar8): 15103 (JSC::regExpConstructorDollar9): 15104 (JSC::regExpConstructorInput): 15105 (JSC::regExpConstructorMultiline): 15106 (JSC::regExpConstructorLastMatch): 15107 (JSC::regExpConstructorLastParen): 15108 (JSC::regExpConstructorLeftContext): 15109 (JSC::regExpConstructorRightContext): 15110 (JSC::RegExpConstructor::put): 15111 (JSC::setRegExpConstructorInput): 15112 (JSC::setRegExpConstructorMultiline): 15113 (JSC::constructRegExp): 15114 (JSC::callRegExpConstructor): 15115 * runtime/RegExpConstructor.h: 15116 (JSC::RegExpConstructor::createStructure): 15117 (JSC::asRegExpConstructor): 15118 * runtime/RegExpMatchesArray.h: 15119 (JSC::RegExpMatchesArray::put): 15120 * runtime/RegExpObject.cpp: 15121 (JSC::regExpObjectGlobal): 15122 (JSC::regExpObjectIgnoreCase): 15123 (JSC::regExpObjectMultiline): 15124 (JSC::regExpObjectSource): 15125 (JSC::regExpObjectLastIndex): 15126 (JSC::RegExpObject::put): 15127 (JSC::setRegExpObjectLastIndex): 15128 (JSC::RegExpObject::test): 15129 (JSC::RegExpObject::exec): 15130 (JSC::callRegExpObject): 15131 * runtime/RegExpObject.h: 15132 (JSC::RegExpObject::createStructure): 15133 (JSC::asRegExpObject): 15134 * runtime/RegExpPrototype.cpp: 15135 (JSC::regExpProtoFuncTest): 15136 (JSC::regExpProtoFuncExec): 15137 (JSC::regExpProtoFuncCompile): 15138 (JSC::regExpProtoFuncToString): 15139 * runtime/StringConstructor.cpp: 15140 (JSC::stringFromCharCodeSlowCase): 15141 (JSC::stringFromCharCode): 15142 (JSC::callStringConstructor): 15143 * runtime/StringObject.cpp: 15144 (JSC::StringObject::put): 15145 * runtime/StringObject.h: 15146 (JSC::StringObject::createStructure): 15147 (JSC::asStringObject): 15148 * runtime/StringObjectThatMasqueradesAsUndefined.h: 15149 (JSC::StringObjectThatMasqueradesAsUndefined::createStructure): 15150 * runtime/StringPrototype.cpp: 15151 (JSC::stringProtoFuncReplace): 15152 (JSC::stringProtoFuncToString): 15153 (JSC::stringProtoFuncCharAt): 15154 (JSC::stringProtoFuncCharCodeAt): 15155 (JSC::stringProtoFuncConcat): 15156 (JSC::stringProtoFuncIndexOf): 15157 (JSC::stringProtoFuncLastIndexOf): 15158 (JSC::stringProtoFuncMatch): 15159 (JSC::stringProtoFuncSearch): 15160 (JSC::stringProtoFuncSlice): 15161 (JSC::stringProtoFuncSplit): 15162 (JSC::stringProtoFuncSubstr): 15163 (JSC::stringProtoFuncSubstring): 15164 (JSC::stringProtoFuncToLowerCase): 15165 (JSC::stringProtoFuncToUpperCase): 15166 (JSC::stringProtoFuncLocaleCompare): 15167 (JSC::stringProtoFuncBig): 15168 (JSC::stringProtoFuncSmall): 15169 (JSC::stringProtoFuncBlink): 15170 (JSC::stringProtoFuncBold): 15171 (JSC::stringProtoFuncFixed): 15172 (JSC::stringProtoFuncItalics): 15173 (JSC::stringProtoFuncStrike): 15174 (JSC::stringProtoFuncSub): 15175 (JSC::stringProtoFuncSup): 15176 (JSC::stringProtoFuncFontcolor): 15177 (JSC::stringProtoFuncFontsize): 15178 (JSC::stringProtoFuncAnchor): 15179 (JSC::stringProtoFuncLink): 15180 * runtime/Structure.cpp: 15181 (JSC::Structure::Structure): 15182 (JSC::Structure::changePrototypeTransition): 15183 (JSC::Structure::createCachedPrototypeChain): 15184 * runtime/Structure.h: 15185 (JSC::Structure::create): 15186 (JSC::Structure::setPrototypeWithoutTransition): 15187 (JSC::Structure::storedPrototype): 15188 15189 2009-01-06 Oliver Hunt <oliver (a] apple.com> 15190 15191 Reviewed by Cameron Zwarich. 15192 15193 <https://bugs.webkit.org/show_bug.cgi?id=23085> [jsfunfuzz] Over released ScopeChainNode 15194 <rdar://problem/6474110> 15195 15196 So this delightful bug was caused by our unwind code using a ScopeChain to perform 15197 the unwind. The ScopeChain would ref the initial top of the scope chain, then deref 15198 the resultant top of scope chain, which is incorrect. 15199 15200 This patch removes the dependency on ScopeChain for the unwind, and i've filed 15201 <https://bugs.webkit.org/show_bug.cgi?id=23144> to look into the unintuitive 15202 ScopeChain behaviour. 15203 15204 * interpreter/Interpreter.cpp: 15205 (JSC::Interpreter::throwException): 15206 15207 2009-01-06 Adam Roben <aroben (a] apple.com> 15208 15209 Hopeful Windows crash-on-launch fix 15210 15211 * wtf/Platform.h: Force a world rebuild by touching this file. 15212 15213 2009-01-06 Holger Hans Peter Freyther <zecke (a] selfish.org> 15214 15215 Reviewed by NOBODY (Build fix). 15216 15217 * GNUmakefile.am:Add ByteArray.cpp too 15218 15219 2009-01-06 Holger Hans Peter Freyther <zecke (a] selfish.org> 15220 15221 Reviewed by NOBODY (Speculative build fix). 15222 15223 AllInOneFile.cpp does not include the JSByteArray.cpp include it... 15224 15225 * GNUmakefile.am: 15226 15227 2009-01-05 Oliver Hunt <oliver (a] apple.com> 15228 15229 Reviewed by NOBODY (Build fix). 15230 15231 Fix Wx build 15232 15233 * JavaScriptCoreSources.bkl: 15234 15235 2009-01-05 Oliver Hunt <oliver (a] apple.com> 15236 15237 Windows build fixes 15238 15239 Rubber-stamped by Alice Liu. 15240 15241 * interpreter/Interpreter.cpp: 15242 (JSC::Interpreter::Interpreter): 15243 * runtime/ByteArray.cpp: 15244 (JSC::ByteArray::create): 15245 * runtime/ByteArray.h: 15246 15247 2009-01-05 Oliver Hunt <oliver (a] apple.com> 15248 15249 Reviewed by Gavin Barraclough. 15250 15251 CanvasPixelArray performance is too slow 15252 <https://bugs.webkit.org/show_bug.cgi?id=23123> 15253 15254 The fix to this is to devirtualise get and put in a manner similar to 15255 JSString and JSArray. To do this I've added a ByteArray implementation 15256 and JSByteArray wrapper to JSC. We can then do vptr comparisons to 15257 devirtualise the calls. 15258 15259 This devirtualisation improves performance by 1.5-2x in my somewhat ad 15260 hoc tests. 15261 15262 * GNUmakefile.am: 15263 * JavaScriptCore.exp: 15264 * JavaScriptCore.pri: 15265 * JavaScriptCore.scons: 15266 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 15267 * JavaScriptCore.xcodeproj/project.pbxproj: 15268 * interpreter/Interpreter.cpp: 15269 (JSC::Interpreter::Interpreter): 15270 (JSC::Interpreter::privateExecute): 15271 (JSC::Interpreter::cti_op_get_by_val): 15272 (JSC::Interpreter::cti_op_put_by_val): 15273 * interpreter/Interpreter.h: 15274 (JSC::Interpreter::isJSByteArray): 15275 * runtime/ByteArray.cpp: Added. 15276 (JSC::ByteArray::create): 15277 * runtime/ByteArray.h: Added. 15278 (JSC::ByteArray::length): 15279 (JSC::ByteArray::set): 15280 (JSC::ByteArray::get): 15281 (JSC::ByteArray::data): 15282 (JSC::ByteArray::ByteArray): 15283 * runtime/JSByteArray.cpp: Added. 15284 (JSC::): 15285 (JSC::JSByteArray::JSByteArray): 15286 (JSC::JSByteArray::createStructure): 15287 (JSC::JSByteArray::getOwnPropertySlot): 15288 (JSC::JSByteArray::put): 15289 (JSC::JSByteArray::getPropertyNames): 15290 * runtime/JSByteArray.h: Added. 15291 (JSC::JSByteArray::canAccessIndex): 15292 (JSC::JSByteArray::getIndex): 15293 (JSC::JSByteArray::setIndex): 15294 (JSC::JSByteArray::classInfo): 15295 (JSC::JSByteArray::length): 15296 (JSC::JSByteArray::): 15297 (JSC::JSByteArray::JSByteArray): 15298 (JSC::asByteArray): 15299 15300 2009-01-05 Alexey Proskuryakov <ap (a] webkit.org> 15301 15302 Reviewed by Darin Adler. 15303 15304 https://bugs.webkit.org/show_bug.cgi?id=23073 15305 <rdar://problem/6471129> Workers crash on Windows Release builds 15306 15307 * wtf/ThreadSpecific.h: 15308 (WTF::ThreadSpecific::destroy): Changed to clear the pointer only after data object 15309 destruction is finished - otherwise, WebCore::ThreadGlobalData destructor was re-creating 15310 the object in order to access atomic string table. 15311 (WTF::ThreadSpecific::operator T*): Symmetrically, set up the per-thread pointer before 15312 data constructor is called. 15313 15314 * wtf/ThreadingWin.cpp: (WTF::wtfThreadEntryPoint): Remove a Windows-only hack to finalize 15315 a thread - pthreadVC2 is a DLL, so it gets thread detached messages, and cleans up thread 15316 specific data automatically. Besides, this code wasn't even compiled in for some time now. 15317 15318 2009-01-05 Alexey Proskuryakov <ap (a] webkit.org> 15319 15320 Reviewed by Darin Adler. 15321 15322 https://bugs.webkit.org/show_bug.cgi?id=23115 15323 Create a version of ASSERT for use with otherwise unused variables 15324 15325 * wtf/Assertions.h: Added ASSERT_UNUSED. 15326 15327 * jit/ExecutableAllocatorPosix.cpp: 15328 (JSC::ExecutablePool::systemRelease): 15329 * runtime/Collector.cpp: 15330 (JSC::Heap::destroy): 15331 (JSC::Heap::heapAllocate): 15332 * runtime/JSNotAnObject.cpp: 15333 (JSC::JSNotAnObject::toPrimitive): 15334 (JSC::JSNotAnObject::getPrimitiveNumber): 15335 (JSC::JSNotAnObject::toBoolean): 15336 (JSC::JSNotAnObject::toNumber): 15337 (JSC::JSNotAnObject::toString): 15338 (JSC::JSNotAnObject::getOwnPropertySlot): 15339 (JSC::JSNotAnObject::put): 15340 (JSC::JSNotAnObject::deleteProperty): 15341 (JSC::JSNotAnObject::getPropertyNames): 15342 * wtf/TCSystemAlloc.cpp: 15343 (TCMalloc_SystemRelease): 15344 Use it in some places that used other idioms for this purpose. 15345 15346 2009-01-04 Alice Liu <alice.liu (a] apple.com> 15347 15348 <rdar://problem/6341776> Merge m_transitionCount and m_offset in Structure. 15349 15350 Reviewed by Darin Adler. 15351 15352 * runtime/Structure.cpp: 15353 (JSC::Structure::Structure): Remove m_transitionCount 15354 (JSC::Structure::addPropertyTransitionToExistingStructure): No need to wait until after the assignment to offset to assert if it's notFound; move it up. 15355 (JSC::Structure::addPropertyTransition): Use method for transitionCount instead of m_transitionCount. Remove line that maintains the m_transitionCount. 15356 (JSC::Structure::changePrototypeTransition): Remove line that maintains the m_transitionCount. 15357 (JSC::Structure::getterSetterTransition): Remove line that maintains the m_transitionCount. 15358 * runtime/Structure.h: 15359 Changed s_maxTransitionLength and m_offset from size_t to signed char. m_offset will never become greater than 64 15360 because the structure transitions to a dictionary at that time. 15361 (JSC::Structure::transitionCount): method to replace the data member 15362 15363 2009-01-04 Darin Adler <darin (a] apple.com> 15364 15365 Reviewed by David Kilzer. 15366 15367 Bug 15114: Provide compile-time assertions for sizeof(UChar), sizeof(DeprecatedChar), etc. 15368 https://bugs.webkit.org/show_bug.cgi?id=15114 15369 15370 * wtf/unicode/Unicode.h: Assert size of UChar. There is no DeprecatedChar any more. 15371 15372 2009-01-03 Sam Weinig <sam (a] webkit.org> 15373 15374 Reviewed by Oliver Hunt. 15375 15376 Change the pcVector from storing native code pointers to storing offsets 15377 from the base pointer. This will allow us to generate the pcVector on demand 15378 for exceptions. 15379 15380 * bytecode/CodeBlock.h: 15381 (JSC::PC::PC): 15382 (JSC::getNativePCOffset): 15383 (JSC::CodeBlock::getBytecodeIndex): 15384 * jit/JIT.cpp: 15385 (JSC::JIT::privateCompile): 15386 15387 2009-01-02 Oliver Hunt <oliver (a] apple.com> 15388 15389 Reviewed by NOBODY (Build fix). 15390 15391 * runtime/ScopeChain.cpp: 15392 15393 2009-01-02 Oliver Hunt <oliver (a] apple.com> 15394 15395 Reviewed by Gavin Barraclough. 15396 15397 [jsfunfuzz] unwind logic for exceptions in eval fails to account for dynamic scope external to the eval 15398 https://bugs.webkit.org/show_bug.cgi?id=23078 15399 15400 This bug was caused by eval codeblocks being generated without accounting 15401 for the depth of the scope chain they inherited. This meant that exception 15402 handlers would understate their expected scope chain depth, which in turn 15403 led to incorrectly removing nodes from the scope chain. 15404 15405 * bytecompiler/BytecodeGenerator.cpp: 15406 (JSC::BytecodeGenerator::BytecodeGenerator): 15407 (JSC::BytecodeGenerator::emitCatch): 15408 * bytecompiler/BytecodeGenerator.h: 15409 * interpreter/Interpreter.cpp: 15410 (JSC::depth): 15411 * runtime/ScopeChain.cpp: 15412 (JSC::ScopeChain::localDepth): 15413 * runtime/ScopeChain.h: 15414 (JSC::ScopeChainNode::deref): 15415 (JSC::ScopeChainNode::ref): 15416 15417 2009-01-02 David Smith <catfish.man (a] gmail.com> 15418 15419 Reviewed by Darin Adler. 15420 15421 https://bugs.webkit.org/show_bug.cgi?id=22699 15422 Enable NodeList caching for getElementsByTagName 15423 15424 * wtf/HashFunctions.h: Moved the definition of PHI here and renamed to stringHashingStartValue 15425 15426 2009-01-02 David Kilzer <ddkilzer (a] apple.com> 15427 15428 Attempt to fix Qt Linux build after r39553 15429 15430 * wtf/RandomNumberSeed.h: Include <sys/time.h> for gettimeofday(). 15431 Include <sys/types.h> and <unistd.h> for getpid(). 15432 15433 2009-01-02 David Kilzer <ddkilzer (a] apple.com> 15434 15435 Bug 23081: These files are no longer part of the KDE libraries 15436 15437 <https://bugs.webkit.org/show_bug.cgi?id=23081> 15438 15439 Reviewed by Darin Adler. 15440 15441 Removed "This file is part of the KDE libraries" comment from 15442 source files. Added or updated Apple copyrights as well. 15443 15444 * parser/Lexer.h: 15445 * wtf/HashCountedSet.h: 15446 * wtf/RetainPtr.h: 15447 * wtf/VectorTraits.h: 15448 15449 2009-01-02 David Kilzer <ddkilzer (a] apple.com> 15450 15451 Bug 23080: Remove last vestiges of KJS references 15452 15453 <https://bugs.webkit.org/show_bug.cgi?id=23080> 15454 15455 Reviewed by Darin Adler. 15456 15457 Also updated Apple copyright statements. 15458 15459 * DerivedSources.make: Changed bison "kjsyy" prefix to "jscyy". 15460 * GNUmakefile.am: Ditto. 15461 * JavaScriptCore.pri: Ditto. Also changed KJSBISON to JSCBISON 15462 and kjsbison to jscbison. 15463 15464 * JavaScriptCoreSources.bkl: Changed JSCORE_KJS_SOURCES to 15465 JSCORE_JSC_SOURCES. 15466 * jscore.bkl: Ditto. 15467 15468 * create_hash_table: Updated copyright and removed old comment. 15469 15470 * parser/Grammar.y: Changed "kjsyy" prefix to "jscyy" prefix. 15471 * parser/Lexer.cpp: Ditto. Also changed KJS_DEBUG_LEX to 15472 JSC_DEBUG_LEX. 15473 (jscyylex): 15474 (JSC::Lexer::lex): 15475 * parser/Parser.cpp: Ditto. 15476 (JSC::Parser::parse): 15477 15478 * pcre/dftables: Changed "kjs_pcre_" prefix to "jsc_pcre_". 15479 * pcre/pcre_compile.cpp: Ditto. 15480 (getOthercaseRange): 15481 (encodeUTF8): 15482 (compileBranch): 15483 (calculateCompiledPatternLength): 15484 * pcre/pcre_exec.cpp: Ditto. 15485 (matchRef): 15486 (getUTF8CharAndIncrementLength): 15487 (match): 15488 * pcre/pcre_internal.h: Ditto. 15489 (toLowerCase): 15490 (flipCase): 15491 (classBitmapForChar): 15492 (charTypeForChar): 15493 * pcre/pcre_tables.cpp: Ditto. 15494 * pcre/pcre_ucp_searchfuncs.cpp: Ditto. 15495 (jsc_pcre_ucp_othercase): 15496 * pcre/pcre_xclass.cpp: Ditto. 15497 (getUTF8CharAndAdvancePointer): 15498 (jsc_pcre_xclass): 15499 15500 * runtime/Collector.h: Updated header guards using the 15501 clean-header-guards script. 15502 * runtime/CollectorHeapIterator.h: Added missing header guard. 15503 * runtime/Identifier.h: Updated header guards. 15504 * runtime/JSFunction.h: Fixed end-of-namespace comment. 15505 15506 * runtime/JSGlobalObject.cpp: 15507 (JSC::JSGlobalObject::reset): Renamed "kjsprint" debug function 15508 to "jscprint". Changed implementation method from 15509 globalFuncKJSPrint() to globalFuncJSCPrint(). 15510 * runtime/JSGlobalObjectFunctions.cpp: 15511 (JSC::globalFuncJSCPrint): Renamed from globalFuncKJSPrint(). 15512 * runtime/JSGlobalObjectFunctions.h: Ditto. 15513 15514 * runtime/JSImmediate.h: Updated header guards. 15515 * runtime/JSLock.h: Ditto. 15516 * runtime/JSType.h: Ditto. 15517 * runtime/JSWrapperObject.h: Ditto. 15518 * runtime/Lookup.h: Ditto. 15519 * runtime/Operations.h: Ditto. 15520 * runtime/Protect.h: Ditto. 15521 * runtime/RegExp.h: Ditto. 15522 * runtime/UString.h: Ditto. 15523 15524 * tests/mozilla/js1_5/Array/regress-157652.js: Changed "KJS" 15525 reference in comment to "JSC". 15526 15527 * wrec/CharacterClassConstructor.cpp: Change "kjs_pcre_" function 15528 prefixes to "jsc_pcre_". 15529 (JSC::WREC::CharacterClassConstructor::put): 15530 (JSC::WREC::CharacterClassConstructor::flush): 15531 15532 * wtf/unicode/Unicode.h: Change "KJS_" header guard to "WTF_". 15533 * wtf/unicode/icu/UnicodeIcu.h: Ditto. 15534 * wtf/unicode/qt4/UnicodeQt4.h: Ditto. 15535 15536 2009-01-02 Oliver Hunt <oliver (a] apple.com> 15537 15538 Reviewed by Maciej Stachowiak. 15539 15540 Make randomNumber generate 2^53 values instead of 2^32 (or 2^31 for rand() platforms) 15541 15542 * wtf/RandomNumber.cpp: 15543 (WTF::randomNumber): 15544 15545 2009-01-02 David Kilzer <ddkilzer (a] apple.com> 15546 15547 Remove declaration for JSC::Identifier::initializeIdentifierThreading() 15548 15549 Reviewed by Alexey Proskuryakov. 15550 15551 * runtime/Identifier.h: 15552 (JSC::Identifier::initializeIdentifierThreading): Removed 15553 declaration since the implementation was removed in r34412. 15554 15555 2009-01-01 Darin Adler <darin (a] apple.com> 15556 15557 Reviewed by Oliver Hunt. 15558 15559 String.replace does not support $& replacement metacharacter when search term is not a RegExp 15560 <https://bugs.webkit.org/show_bug.cgi?id=21431> 15561 <rdar://problem/6274993> 15562 15563 Test: fast/js/string-replace-3.html 15564 15565 * runtime/StringPrototype.cpp: 15566 (JSC::substituteBackreferences): Added a null check here so we won't try to handle $$-$9 15567 backreferences when the search term is a string, not a RegExp. Added a check for 0 so we 15568 won't try to handle $0 or $00 as a backreference. 15569 (JSC::stringProtoFuncReplace): Added a call to substituteBackreferences. 15570 15571 2009-01-01 Gavin Barraclough <barraclough (a] apple.com> 15572 15573 Reviewed by Darin Adler. 15574 15575 Allow 32-bit integers to be stored in JSImmediates, on x64-bit. 15576 Presently the top 32-bits of a 64-bit JSImmediate serve as a sign extension of a 31-bit 15577 int stored in the low word (shifted left by one, to make room for a tag). In the new 15578 format, the top 31-bits serve as a sign extension of a 32-bit int, still shifted left by 15579 one. 15580 15581 The new behavior is enabled using a flag in Platform.h, 'WTF_USE_ALTERNATE_JSIMMEDIATE'. 15582 When this is set the constants defining the range of ints allowed to be stored as 15583 JSImmediate values is extended. The code in JSImmediate.h can safely operate on either 15584 format. This patch updates the JIT so that it can also operate with the new format. 15585 15586 ~2% progression on x86-64, with & without the JIT, on sunspider & v8 tests. 15587 15588 * assembler/MacroAssembler.h: 15589 (JSC::MacroAssembler::addPtr): 15590 (JSC::MacroAssembler::orPtr): 15591 (JSC::MacroAssembler::or32): 15592 (JSC::MacroAssembler::rshiftPtr): 15593 (JSC::MacroAssembler::rshift32): 15594 (JSC::MacroAssembler::subPtr): 15595 (JSC::MacroAssembler::xorPtr): 15596 (JSC::MacroAssembler::xor32): 15597 (JSC::MacroAssembler::move): 15598 (JSC::MacroAssembler::compareImm64ForBranch): 15599 (JSC::MacroAssembler::compareImm64ForBranchEquality): 15600 (JSC::MacroAssembler::jePtr): 15601 (JSC::MacroAssembler::jgePtr): 15602 (JSC::MacroAssembler::jlPtr): 15603 (JSC::MacroAssembler::jlePtr): 15604 (JSC::MacroAssembler::jnePtr): 15605 (JSC::MacroAssembler::jnzSubPtr): 15606 (JSC::MacroAssembler::joAddPtr): 15607 (JSC::MacroAssembler::jzSubPtr): 15608 * assembler/X86Assembler.h: 15609 (JSC::X86Assembler::addq_rr): 15610 (JSC::X86Assembler::orq_ir): 15611 (JSC::X86Assembler::subq_ir): 15612 (JSC::X86Assembler::xorq_rr): 15613 (JSC::X86Assembler::sarq_CLr): 15614 (JSC::X86Assembler::sarq_i8r): 15615 (JSC::X86Assembler::cmpq_ir): 15616 * jit/JIT.cpp: 15617 (JSC::JIT::compileOpStrictEq): 15618 (JSC::JIT::privateCompileMainPass): 15619 (JSC::JIT::privateCompileSlowCases): 15620 (JSC::JIT::privateCompileCTIMachineTrampolines): 15621 * jit/JIT.h: 15622 * jit/JITArithmetic.cpp: 15623 (JSC::JIT::compileFastArith_op_lshift): 15624 (JSC::JIT::compileFastArithSlow_op_lshift): 15625 (JSC::JIT::compileFastArith_op_rshift): 15626 (JSC::JIT::compileFastArithSlow_op_rshift): 15627 (JSC::JIT::compileFastArith_op_bitand): 15628 (JSC::JIT::compileFastArithSlow_op_bitand): 15629 (JSC::JIT::compileFastArith_op_mod): 15630 (JSC::JIT::compileFastArithSlow_op_mod): 15631 (JSC::JIT::compileFastArith_op_add): 15632 (JSC::JIT::compileFastArithSlow_op_add): 15633 (JSC::JIT::compileFastArith_op_mul): 15634 (JSC::JIT::compileFastArithSlow_op_mul): 15635 (JSC::JIT::compileFastArith_op_post_inc): 15636 (JSC::JIT::compileFastArithSlow_op_post_inc): 15637 (JSC::JIT::compileFastArith_op_post_dec): 15638 (JSC::JIT::compileFastArithSlow_op_post_dec): 15639 (JSC::JIT::compileFastArith_op_pre_inc): 15640 (JSC::JIT::compileFastArithSlow_op_pre_inc): 15641 (JSC::JIT::compileFastArith_op_pre_dec): 15642 (JSC::JIT::compileFastArithSlow_op_pre_dec): 15643 (JSC::JIT::compileBinaryArithOp): 15644 * jit/JITInlineMethods.h: 15645 (JSC::JIT::getConstantOperand): 15646 (JSC::JIT::getConstantOperandImmediateInt): 15647 (JSC::JIT::isOperandConstantImmediateInt): 15648 (JSC::JIT::isOperandConstant31BitImmediateInt): 15649 (JSC::JIT::emitFastArithDeTagImmediate): 15650 (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): 15651 (JSC::JIT::emitFastArithReTagImmediate): 15652 (JSC::JIT::emitFastArithImmToInt): 15653 (JSC::JIT::emitFastArithIntToImmNoCheck): 15654 * runtime/JSImmediate.h: 15655 (JSC::JSImmediate::isPositiveNumber): 15656 (JSC::JSImmediate::isNegative): 15657 (JSC::JSImmediate::rightShiftImmediateNumbers): 15658 (JSC::JSImmediate::canDoFastAdditiveOperations): 15659 (JSC::JSImmediate::makeValue): 15660 (JSC::JSImmediate::makeInt): 15661 (JSC::JSImmediate::makeBool): 15662 (JSC::JSImmediate::intValue): 15663 (JSC::JSImmediate::rawValue): 15664 (JSC::JSImmediate::toBoolean): 15665 (JSC::JSImmediate::from): 15666 * wtf/Platform.h: 15667 15668 2008-12-31 Oliver Hunt <oliver (a] apple.com> 15669 15670 Reviewed by Cameron Zwarich. 15671 15672 [jsfunfuzz] Assertion + incorrect behaviour with dynamically created local variable in a catch block 15673 <https://bugs.webkit.org/show_bug.cgi?id=23063> 15674 15675 Eval inside a catch block attempts to use the catch block's static scope in 15676 an unsafe way by attempting to add new properties to the scope. This patch 15677 fixes this issue simply by preventing the catch block from using a static 15678 scope if it contains an eval. 15679 15680 * parser/Grammar.y: 15681 * parser/Nodes.cpp: 15682 (JSC::TryNode::emitBytecode): 15683 * parser/Nodes.h: 15684 (JSC::TryNode::): 15685 15686 2008-12-31 Oliver Hunt <oliver (a] apple.com> 15687 15688 Reviewed by Gavin Barraclough. 15689 15690 [jsfunfuzz] Computed exception offset wrong when first instruction is attempt to resolve deleted eval 15691 <https://bugs.webkit.org/show_bug.cgi?id=23062> 15692 15693 This was caused by the expression information for the initial resolve of 15694 eval not being emitted. If this resolve was the first instruction that 15695 could throw an exception the information search would fail leading to an 15696 assertion failure. If it was not the first throwable opcode the wrong 15697 expression information would used. 15698 15699 Fix is simply to emit the expression info. 15700 15701 * parser/Nodes.cpp: 15702 (JSC::EvalFunctionCallNode::emitBytecode): 15703 15704 2008-12-31 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 15705 15706 Reviewed by Oliver Hunt. 15707 15708 Bug 23054: Caching of global lookups occurs even when the global object has become a dictionary 15709 <https://bugs.webkit.org/show_bug.cgi?id=23054> 15710 <rdar://problem/6469905> 15711 15712 * interpreter/Interpreter.cpp: 15713 (JSC::Interpreter::resolveGlobal): Do not cache lookup if the global 15714 object has transitioned to a dictionary. 15715 (JSC::Interpreter::cti_op_resolve_global): Do not cache lookup if the 15716 global object has transitioned to a dictionary. 15717 15718 2008-12-30 Oliver Hunt <oliver (a] apple.com> 15719 15720 Reviewed by Darin Adler. 15721 15722 <https://bugs.webkit.org/show_bug.cgi?id=23049> [jsfunfuzz] With blocks do not correctly protect their scope object 15723 <rdar://problem/6469742> Crash in JSC::TypeInfo::hasStandardGetOwnPropertySlot() running jsfunfuzz 15724 15725 The problem that caused this was that with nodes were not correctly protecting 15726 the final object that was placed in the scope chain. We correct this by forcing 15727 the use of a temporary register (which stops us relying on a local register 15728 protecting the scope) and changing the behaviour of op_push_scope so that it 15729 will store the final scope object. 15730 15731 * bytecompiler/BytecodeGenerator.cpp: 15732 (JSC::BytecodeGenerator::emitPushScope): 15733 * interpreter/Interpreter.cpp: 15734 (JSC::Interpreter::privateExecute): 15735 (JSC::Interpreter::cti_op_push_scope): 15736 * interpreter/Interpreter.h: 15737 * jit/JIT.cpp: 15738 (JSC::JIT::privateCompileMainPass): 15739 * parser/Nodes.cpp: 15740 (JSC::WithNode::emitBytecode): 15741 15742 2008-12-30 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 15743 15744 Reviewed by Sam Weinig. 15745 15746 Bug 23037: Parsing and reparsing disagree on automatic semicolon insertion 15747 <https://bugs.webkit.org/show_bug.cgi?id=23037> 15748 <rdar://problem/6467124> 15749 15750 Parsing and reparsing disagree about automatic semicolon insertion, so that a 15751 function like 15752 15753 function() { a = 1, } 15754 15755 is parsed as being syntactically valid but gets a syntax error upon reparsing. 15756 This leads to an assertion failure in Parser::reparse(). It is not that big of 15757 an issue in practice, because in a Release build such a function will return 15758 'undefined' when called. 15759 15760 In this case, we are not following the spec and it should be a syntax error. 15761 However, unless there is a newline separating the ',' and the '}', WebKit would 15762 not treat it as a syntax error in the past either. It would be a bit of work to 15763 make the automatic semicolon insertion match the spec exactly, so this patch 15764 changes it to match our past behaviour. 15765 15766 The problem is that even during reparsing, the Lexer adds a semicolon at the 15767 end of the input, which confuses allowAutomaticSemicolon(), because it is 15768 expecting either a '}', the end of input, or a terminator like a newline. 15769 15770 * parser/Lexer.cpp: 15771 (JSC::Lexer::Lexer): Initialize m_isReparsing to false. 15772 (JSC::Lexer::lex): Do not perform automatic semicolon insertion in the Lexer if 15773 we are in the middle of reparsing. 15774 (JSC::Lexer::clear): Set m_isReparsing to false. 15775 * parser/Lexer.h: 15776 (JSC::Lexer::setIsReparsing): Added. 15777 * parser/Parser.cpp: 15778 (JSC::Parser::reparse): Call Lexer::setIsReparsing() to notify the Lexer of 15779 reparsing. 15780 15781 2008-12-29 Oliver Hunt <oliver (a] apple.com> 15782 15783 Reviewed by NOBODY (Build fix). 15784 15785 Yet another attempt to fix Tiger. 15786 15787 * wtf/RandomNumber.cpp: 15788 (WTF::randomNumber): 15789 15790 2008-12-29 Oliver Hunt <oliver (a] apple.com> 15791 15792 Reviewed by NOBODY (Build fix). 15793 15794 Tiger build fix (correct this time) 15795 15796 * wtf/RandomNumber.cpp: 15797 15798 2008-12-29 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 15799 15800 Rubber-stamped by Alexey Proskuryakov. 15801 15802 Revert r39509, because kjsyydebug is used in the generated code if YYDEBUG is 1. 15803 15804 * parser/Grammar.y: 15805 15806 2008-12-29 Oliver Hunt <oliver (a] apple.com> 15807 15808 Reviewed by NOBODY (Build fix). 15809 15810 Tiger build fix. 15811 15812 * wtf/RandomNumber.cpp: 15813 15814 2008-12-29 Oliver Hunt <oliver (a] apple.com> 15815 15816 Reviewed by Mark Rowe. 15817 15818 <rdar://problem/6358108> Insecure randomness in Math.random() leads to user tracking 15819 15820 Switch to arc4random on PLATFORM(DARWIN), this is ~1.5x slower than random(), but the 15821 it is still so fast that there is no fathomable way it could be a bottleneck for anything. 15822 15823 randomNumber is called in two places 15824 * During form submission where it is called once per form 15825 * Math.random in JSC. For this difference to show up you have to be looping on 15826 a cached local copy of random, for a large (>10000) calls. 15827 15828 No change in SunSpider. 15829 15830 * wtf/RandomNumber.cpp: 15831 (WTF::randomNumber): 15832 * wtf/RandomNumberSeed.h: 15833 (WTF::initializeRandomNumberGenerator): 15834 15835 2008-12-29 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 15836 15837 Rubber-stamped by Sam Weinig. 15838 15839 Remove unused kjsyydebug #define. 15840 15841 * parser/Grammar.y: 15842 15843 2008-12-29 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 15844 15845 Reviewed by Oliver Hunt and Sam Weinig. 15846 15847 Bug 23029: REGRESSION (r39337): jsfunfuzz generates identical test files 15848 <https://bugs.webkit.org/show_bug.cgi?id=23029> 15849 <rdar://problem/6469185> 15850 15851 The unification of random number generation in r39337 resulted in random() 15852 being initialized on Darwin, but rand() actually being used. Fix this by 15853 making randomNumber() use random() instead of rand() on Darwin. 15854 15855 * wtf/RandomNumber.cpp: 15856 (WTF::randomNumber): 15857 15858 2008-12-29 Sam Weinig <sam (a] webkit.org> 15859 15860 Fix buildbots. 15861 15862 * runtime/Structure.cpp: 15863 15864 2008-12-29 Sam Weinig <sam (a] webkit.org> 15865 15866 Reviewed by Oliver Hunt. 15867 15868 Patch for https://bugs.webkit.org/show_bug.cgi?id=23026 15869 Move the deleted offsets vector into the PropertyMap 15870 15871 Saves 3 words per Structure. 15872 15873 * runtime/PropertyMapHashTable.h: 15874 * runtime/Structure.cpp: 15875 (JSC::Structure::addPropertyTransition): 15876 (JSC::Structure::changePrototypeTransition): 15877 (JSC::Structure::getterSetterTransition): 15878 (JSC::Structure::toDictionaryTransition): 15879 (JSC::Structure::fromDictionaryTransition): 15880 (JSC::Structure::copyPropertyTable): 15881 (JSC::Structure::put): 15882 (JSC::Structure::remove): 15883 (JSC::Structure::rehashPropertyMapHashTable): 15884 * runtime/Structure.h: 15885 (JSC::Structure::propertyStorageSize): 15886 15887 2008-12-29 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 15888 15889 Reviewed by Oliver Hunt. 15890 15891 Change code using m_body.get() as a boolean to take advantage of the 15892 implicit conversion of RefPtr to boolean. 15893 15894 * runtime/JSFunction.cpp: 15895 (JSC::JSFunction::~JSFunction): 15896 15897 2008-12-28 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 15898 15899 Reviewed by Oliver Hunt. 15900 15901 Bug 22840: REGRESSION (r38349): Gmail doesn't load with profiling enabled 15902 <https://bugs.webkit.org/show_bug.cgi?id=22840> 15903 <rdar://problem/6468077> 15904 15905 * bytecompiler/BytecodeGenerator.cpp: 15906 (JSC::BytecodeGenerator::emitNewArray): Add an assertion that the range 15907 of registers passed to op_new_array is sequential. 15908 (JSC::BytecodeGenerator::emitCall): Correct the relocation of registers 15909 when emitting profiler hooks so that registers aren't leaked. Also, add 15910 an assertion that the 'this' register is always ref'd (because it is), 15911 remove the needless protection of the 'this' register when relocating, 15912 and add an assertion that the range of registers passed to op_call for 15913 function call arguments is sequential. 15914 (JSC::BytecodeGenerator::emitConstruct): Correct the relocation of 15915 registers when emitting profiler hooks so that registers aren't leaked. 15916 Also, add an assertion that the range of registers passed to op_construct 15917 for function call arguments is sequential. 15918 15919 2008-12-26 Mark Rowe <mrowe (a] apple.com> 15920 15921 Reviewed by Alexey Proskuryakov. 15922 15923 <rdar://problem/6467376> Race condition in WTF::currentThread can lead to a thread using two different identifiers during its lifetime 15924 15925 If a newly-created thread calls WTF::currentThread() before WTF::createThread calls establishIdentifierForPthreadHandle 15926 then more than one identifier will be used for the same thread. We can avoid this by adding some extra synchronization 15927 during thread creation that delays the execution of the thread function until the thread identifier has been set up, and 15928 an assertion to catch this problem should it reappear in the future. 15929 15930 * wtf/Threading.cpp: Added. 15931 (WTF::NewThreadContext::NewThreadContext): 15932 (WTF::threadEntryPoint): 15933 (WTF::createThread): Add cross-platform createThread function that delays the execution of the thread function until 15934 after the thread identifier has been set up. 15935 * wtf/Threading.h: 15936 * wtf/ThreadingGtk.cpp: 15937 (WTF::establishIdentifierForThread): 15938 (WTF::createThreadInternal): 15939 * wtf/ThreadingNone.cpp: 15940 (WTF::createThreadInternal): 15941 * wtf/ThreadingPthreads.cpp: 15942 (WTF::establishIdentifierForPthreadHandle): 15943 (WTF::createThreadInternal): 15944 * wtf/ThreadingQt.cpp: 15945 (WTF::identifierByQthreadHandle): 15946 (WTF::establishIdentifierForThread): 15947 (WTF::createThreadInternal): 15948 * wtf/ThreadingWin.cpp: 15949 (WTF::storeThreadHandleByIdentifier): 15950 (WTF::createThreadInternal): 15951 15952 Add Threading.cpp to the build. 15953 15954 * GNUmakefile.am: 15955 * JavaScriptCore.pri: 15956 * JavaScriptCore.scons: 15957 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 15958 * JavaScriptCore.xcodeproj/project.pbxproj: 15959 * JavaScriptCoreSources.bkl: 15960 15961 2008-12-26 Sam Weinig <sam (a] webkit.org> 15962 15963 Reviewed by Alexey Proskuryakov. 15964 15965 Remove unused method. 15966 15967 * runtime/Structure.h: Remove mutableTypeInfo. 15968 15969 2008-12-22 Gavin Barraclough <barraclough (a] apple.com> 15970 15971 Reviewed by Oliver Hunt. 15972 15973 Fix rounding / bounds / signed comparison bug in ExecutableAllocator. 15974 15975 ExecutableAllocator::alloc assumed that m_freePtr would be aligned. This was 15976 not always true, since the first allocation from an additional pool would not 15977 be rounded up. Subsequent allocations would be unaligned, and too much memory 15978 could be erroneously allocated from the pool, when the size requested was 15979 available, but the size rounded up to word granularity was not available in the 15980 pool. This may result in the value of m_freePtr being greater than m_end. 15981 15982 Under these circumstances, the unsigned check for space will always pass, 15983 resulting in pointers to memory outside of the arena being returned, and 15984 ultimately segfaulty goodness when attempting to memcpy the hot freshly jitted 15985 code from the AssemblerBuffer. 15986 15987 https://bugs.webkit.org/show_bug.cgi?id=22974 15988 ... and probably many, many more. 15989 15990 * jit/ExecutableAllocator.h: 15991 (JSC::ExecutablePool::alloc): 15992 (JSC::ExecutablePool::roundUpAllocationSize): 15993 (JSC::ExecutablePool::ExecutablePool): 15994 (JSC::ExecutablePool::poolAllocate): 15995 15996 2008-12-22 Sam Weinig <sam (a] webkit.org> 15997 15998 Reviewed by Gavin Barraclough. 15999 16000 Rename all uses of the term "repatch" to "patch". 16001 16002 * assembler/MacroAssembler.h: 16003 (JSC::MacroAssembler::DataLabelPtr::patch): 16004 (JSC::MacroAssembler::DataLabel32::patch): 16005 (JSC::MacroAssembler::Jump::patch): 16006 (JSC::MacroAssembler::PatchBuffer::PatchBuffer): 16007 (JSC::MacroAssembler::PatchBuffer::setPtr): 16008 (JSC::MacroAssembler::loadPtrWithAddressOffsetPatch): 16009 (JSC::MacroAssembler::storePtrWithAddressOffsetPatch): 16010 (JSC::MacroAssembler::storePtrWithPatch): 16011 (JSC::MacroAssembler::jnePtrWithPatch): 16012 * assembler/X86Assembler.h: 16013 (JSC::X86Assembler::patchAddress): 16014 (JSC::X86Assembler::patchImmediate): 16015 (JSC::X86Assembler::patchPointer): 16016 (JSC::X86Assembler::patchBranchOffset): 16017 * interpreter/Interpreter.cpp: 16018 (JSC::Interpreter::tryCTICachePutByID): 16019 (JSC::Interpreter::tryCTICacheGetByID): 16020 (JSC::Interpreter::cti_op_put_by_id): 16021 (JSC::Interpreter::cti_op_get_by_id): 16022 (JSC::Interpreter::cti_op_get_by_id_self_fail): 16023 (JSC::Interpreter::cti_op_get_by_id_proto_list): 16024 (JSC::Interpreter::cti_vm_dontLazyLinkCall): 16025 * jit/JIT.cpp: 16026 (JSC::ctiPatchCallByReturnAddress): 16027 (JSC::JIT::privateCompileMainPass): 16028 (JSC::JIT::privateCompile): 16029 (JSC::JIT::privateCompileCTIMachineTrampolines): 16030 * jit/JIT.h: 16031 * jit/JITCall.cpp: 16032 (JSC::JIT::unlinkCall): 16033 (JSC::JIT::linkCall): 16034 (JSC::JIT::compileOpCall): 16035 * jit/JITPropertyAccess.cpp: 16036 (JSC::JIT::compileGetByIdHotPath): 16037 (JSC::JIT::compilePutByIdHotPath): 16038 (JSC::JIT::compileGetByIdSlowCase): 16039 (JSC::JIT::compilePutByIdSlowCase): 16040 (JSC::JIT::privateCompilePutByIdTransition): 16041 (JSC::JIT::patchGetByIdSelf): 16042 (JSC::JIT::patchPutByIdReplace): 16043 (JSC::JIT::privateCompilePatchGetArrayLength): 16044 (JSC::JIT::privateCompileGetByIdSelf): 16045 (JSC::JIT::privateCompileGetByIdProto): 16046 (JSC::JIT::privateCompileGetByIdSelfList): 16047 (JSC::JIT::privateCompileGetByIdProtoList): 16048 (JSC::JIT::privateCompileGetByIdChainList): 16049 (JSC::JIT::privateCompileGetByIdChain): 16050 (JSC::JIT::privateCompilePutByIdReplace): 16051 16052 2008-12-22 Adam Roben <aroben (a] apple.com> 16053 16054 Build fix after r39428 16055 16056 * jit/JITCall.cpp: 16057 (JSC::JIT::compileOpCallSlowCase): Added a missing MacroAssembler:: 16058 16059 2008-12-22 Nikolas Zimmermann <nikolas.zimmermann (a] torchmobile.com> 16060 16061 Rubber-stamped by George Staikos. 16062 16063 Unify all TorchMobile copyright lines. Consolidate in a single line, as requested by Mark Rowe, some time ago. 16064 16065 * wtf/RandomNumber.cpp: 16066 * wtf/RandomNumber.h: 16067 * wtf/RandomNumberSeed.h: 16068 16069 2008-12-21 Nikolas Zimmermann <nikolas.zimmermann (a] torchmobile.com> 16070 16071 Rubber-stamped by George Staikos. 16072 16073 Fix copyright of the new RandomNumber* files. 16074 16075 * wtf/RandomNumber.cpp: 16076 * wtf/RandomNumber.h: 16077 * wtf/RandomNumberSeed.h: 16078 16079 2008-12-21 Gavin Barraclough <barraclough (a] apple.com> 16080 16081 Reviewed by Oliver Hunt & Cameron Zwarich. 16082 16083 Add support for call and property access repatching on x86-64. 16084 16085 No change in performance on current configurations (2x impovement on v8-tests with JIT enabled on x86-64). 16086 16087 * assembler/MacroAssembler.h: 16088 (JSC::MacroAssembler::DataLabelPtr::repatch): 16089 (JSC::MacroAssembler::DataLabelPtr::operator X86Assembler::JmpDst): 16090 (JSC::MacroAssembler::DataLabel32::repatch): 16091 (JSC::MacroAssembler::RepatchBuffer::addressOf): 16092 (JSC::MacroAssembler::add32): 16093 (JSC::MacroAssembler::sub32): 16094 (JSC::MacroAssembler::loadPtrWithAddressOffsetRepatch): 16095 (JSC::MacroAssembler::storePtrWithAddressOffsetRepatch): 16096 (JSC::MacroAssembler::jePtr): 16097 (JSC::MacroAssembler::jnePtr): 16098 (JSC::MacroAssembler::jnePtrWithRepatch): 16099 (JSC::MacroAssembler::differenceBetween): 16100 * assembler/X86Assembler.h: 16101 (JSC::X86Assembler::addl_im): 16102 (JSC::X86Assembler::subl_im): 16103 (JSC::X86Assembler::cmpl_rm): 16104 (JSC::X86Assembler::movq_rm_disp32): 16105 (JSC::X86Assembler::movq_mr_disp32): 16106 (JSC::X86Assembler::repatchPointer): 16107 (JSC::X86Assembler::X86InstructionFormatter::oneByteOp64_disp32): 16108 * jit/JIT.cpp: 16109 (JSC::JIT::privateCompile): 16110 (JSC::JIT::privateCompileCTIMachineTrampolines): 16111 * jit/JIT.h: 16112 * jit/JITCall.cpp: 16113 (JSC::JIT::unlinkCall): 16114 (JSC::JIT::linkCall): 16115 (JSC::JIT::compileOpCall): 16116 (JSC::JIT::compileOpCallSlowCase): 16117 * jit/JITInlineMethods.h: 16118 (JSC::JIT::restoreArgumentReferenceForTrampoline): 16119 * jit/JITPropertyAccess.cpp: 16120 (JSC::JIT::compileGetByIdHotPath): 16121 (JSC::JIT::compileGetByIdSlowCase): 16122 (JSC::JIT::compilePutByIdHotPath): 16123 (JSC::JIT::compilePutByIdSlowCase): 16124 (JSC::resizePropertyStorage): 16125 (JSC::JIT::privateCompilePutByIdTransition): 16126 (JSC::JIT::privateCompileGetByIdProto): 16127 (JSC::JIT::privateCompileGetByIdProtoList): 16128 (JSC::JIT::privateCompileGetByIdChainList): 16129 (JSC::JIT::privateCompileGetByIdChain): 16130 * wtf/Platform.h: 16131 16132 2008-12-20 Gavin Barraclough <barraclough (a] apple.com> 16133 16134 Reviewed by Oliver Hunt. 16135 16136 Port optimized property access generation to the MacroAssembler. 16137 16138 * assembler/MacroAssembler.h: 16139 (JSC::MacroAssembler::AbsoluteAddress::AbsoluteAddress): 16140 (JSC::MacroAssembler::DataLabelPtr::repatch): 16141 (JSC::MacroAssembler::DataLabel32::DataLabel32): 16142 (JSC::MacroAssembler::DataLabel32::repatch): 16143 (JSC::MacroAssembler::Label::operator X86Assembler::JmpDst): 16144 (JSC::MacroAssembler::Jump::repatch): 16145 (JSC::MacroAssembler::JumpList::empty): 16146 (JSC::MacroAssembler::RepatchBuffer::link): 16147 (JSC::MacroAssembler::add32): 16148 (JSC::MacroAssembler::and32): 16149 (JSC::MacroAssembler::sub32): 16150 (JSC::MacroAssembler::loadPtrWithAddressRepatch): 16151 (JSC::MacroAssembler::storePtrWithAddressRepatch): 16152 (JSC::MacroAssembler::push): 16153 (JSC::MacroAssembler::ja32): 16154 (JSC::MacroAssembler::jePtr): 16155 (JSC::MacroAssembler::jnePtr): 16156 (JSC::MacroAssembler::jnePtrWithRepatch): 16157 (JSC::MacroAssembler::align): 16158 (JSC::MacroAssembler::differenceBetween): 16159 * assembler/X86Assembler.h: 16160 (JSC::X86Assembler::movl_rm_disp32): 16161 (JSC::X86Assembler::movl_mr_disp32): 16162 (JSC::X86Assembler::X86InstructionFormatter::oneByteOp_disp32): 16163 (JSC::X86Assembler::X86InstructionFormatter::memoryModRM): 16164 * jit/JIT.cpp: 16165 (JSC::ctiRepatchCallByReturnAddress): 16166 (JSC::JIT::privateCompileMainPass): 16167 (JSC::JIT::privateCompile): 16168 (JSC::JIT::privateCompileCTIMachineTrampolines): 16169 * jit/JIT.h: 16170 * jit/JITPropertyAccess.cpp: 16171 (JSC::JIT::compileGetByIdHotPath): 16172 (JSC::JIT::compileGetByIdSlowCase): 16173 (JSC::JIT::compilePutByIdHotPath): 16174 (JSC::JIT::compilePutByIdSlowCase): 16175 (JSC::resizePropertyStorage): 16176 (JSC::JIT::privateCompilePutByIdTransition): 16177 (JSC::JIT::patchGetByIdSelf): 16178 (JSC::JIT::patchPutByIdReplace): 16179 (JSC::JIT::privateCompilePatchGetArrayLength): 16180 (JSC::JIT::privateCompileGetByIdSelf): 16181 (JSC::JIT::privateCompileGetByIdProto): 16182 (JSC::JIT::privateCompileGetByIdSelfList): 16183 (JSC::JIT::privateCompileGetByIdProtoList): 16184 (JSC::JIT::privateCompileGetByIdChainList): 16185 (JSC::JIT::privateCompileGetByIdChain): 16186 (JSC::JIT::privateCompilePutByIdReplace): 16187 * wtf/RefCounted.h: 16188 (WTF::RefCountedBase::addressOfCount): 16189 16190 2008-12-19 Gustavo Noronha Silva <gns (a] gnome.org> 16191 16192 Reviewed by Holger Freyther. 16193 16194 https://bugs.webkit.org/show_bug.cgi?id=22686 16195 16196 Added file which was missing to the javascriptcore_sources 16197 variable, so that it shows up in the tarball created by `make 16198 dist'. 16199 16200 * GNUmakefile.am: 16201 16202 2008-12-19 Holger Hans Peter Freyther <zecke (a] selfish.org> 16203 16204 Reviewed by Antti Koivisto. 16205 16206 Build fix when building JS API tests with a c89 c compiler 16207 16208 Do not use C++ style comments and convert them to C comments. 16209 16210 * wtf/Platform.h: 16211 16212 2008-12-18 Gavin Barraclough <barraclough (a] apple.com> 16213 16214 Reviewed by Sam Weinig. 16215 16216 Same as last revision, adding cases for pre & post inc & dec. 16217 16218 https://bugs.webkit.org/show_bug.cgi?id=22928 16219 16220 * jit/JIT.cpp: 16221 (JSC::JIT::privateCompileMainPass): 16222 16223 2008-12-18 Gavin Barraclough <barraclough (a] apple.com> 16224 16225 Reviewed by Sam Weinig. 16226 16227 Fixes for the JIT's handling of JSImmediate values on x86-64. 16228 On 64-bit systems, the code in JSImmediate.h relies on the upper 16229 bits of a JSImmediate being a sign extension of the low 32-bits. 16230 This was not being enforced by the JIT, since a number of inline 16231 operations were being performed on 32-bit values in registers, and 16232 when a 32-bit result is written to a register on x86-64 the value 16233 is zero-extended to 64-bits. 16234 16235 This fix honors previous behavoir. A better fix in the long run 16236 (when the JIT is enabled by default) may be to change JSImmediate.h 16237 so it no longer relies on the upper bits of the pointer,... though 16238 if we're going to change JSImmediate.h for 64-bit, we probably may 16239 as well change the format so that the full range of 32-bit ints can 16240 be stored, rather than just 31-bits. 16241 16242 https://bugs.webkit.org/show_bug.cgi?id=22925 16243 16244 * assembler/MacroAssembler.h: 16245 (JSC::MacroAssembler::addPtr): 16246 (JSC::MacroAssembler::andPtr): 16247 (JSC::MacroAssembler::orPtr): 16248 (JSC::MacroAssembler::or32): 16249 (JSC::MacroAssembler::xor32): 16250 (JSC::MacroAssembler::xorPtr): 16251 (JSC::MacroAssembler::signExtend32ToPtr): 16252 * assembler/X86Assembler.h: 16253 (JSC::X86Assembler::): 16254 (JSC::X86Assembler::andq_rr): 16255 (JSC::X86Assembler::andq_ir): 16256 (JSC::X86Assembler::orq_rr): 16257 (JSC::X86Assembler::xorq_ir): 16258 (JSC::X86Assembler::movsxd_rr): 16259 * jit/JIT.cpp: 16260 (JSC::JIT::privateCompileMainPass): 16261 * jit/JITInlineMethods.h: 16262 (JSC::JIT::emitFastArithReTagImmediate): 16263 (JSC::JIT::emitFastArithPotentiallyReTagImmediate): 16264 (JSC::JIT::emitFastArithImmToInt): 16265 16266 2008-12-18 Gavin Barraclough <barraclough (a] apple.com> 16267 16268 Reviewed by Sam Weinig. 16269 16270 Just a tidy up - rename & refactor some the #defines configuring the JIT. 16271 16272 * interpreter/Interpreter.cpp: 16273 (JSC::Interpreter::cti_op_convert_this): 16274 (JSC::Interpreter::cti_op_end): 16275 (JSC::Interpreter::cti_op_add): 16276 (JSC::Interpreter::cti_op_pre_inc): 16277 (JSC::Interpreter::cti_timeout_check): 16278 (JSC::Interpreter::cti_register_file_check): 16279 (JSC::Interpreter::cti_op_loop_if_less): 16280 (JSC::Interpreter::cti_op_loop_if_lesseq): 16281 (JSC::Interpreter::cti_op_new_object): 16282 (JSC::Interpreter::cti_op_put_by_id_generic): 16283 (JSC::Interpreter::cti_op_get_by_id_generic): 16284 (JSC::Interpreter::cti_op_put_by_id): 16285 (JSC::Interpreter::cti_op_put_by_id_second): 16286 (JSC::Interpreter::cti_op_put_by_id_fail): 16287 (JSC::Interpreter::cti_op_get_by_id): 16288 (JSC::Interpreter::cti_op_get_by_id_second): 16289 (JSC::Interpreter::cti_op_get_by_id_self_fail): 16290 (JSC::Interpreter::cti_op_get_by_id_proto_list): 16291 (JSC::Interpreter::cti_op_get_by_id_proto_list_full): 16292 (JSC::Interpreter::cti_op_get_by_id_proto_fail): 16293 (JSC::Interpreter::cti_op_get_by_id_array_fail): 16294 (JSC::Interpreter::cti_op_get_by_id_string_fail): 16295 (JSC::Interpreter::cti_op_instanceof): 16296 (JSC::Interpreter::cti_op_del_by_id): 16297 (JSC::Interpreter::cti_op_mul): 16298 (JSC::Interpreter::cti_op_new_func): 16299 (JSC::Interpreter::cti_op_call_JSFunction): 16300 (JSC::Interpreter::cti_op_call_arityCheck): 16301 (JSC::Interpreter::cti_vm_dontLazyLinkCall): 16302 (JSC::Interpreter::cti_vm_lazyLinkCall): 16303 (JSC::Interpreter::cti_op_push_activation): 16304 (JSC::Interpreter::cti_op_call_NotJSFunction): 16305 (JSC::Interpreter::cti_op_create_arguments): 16306 (JSC::Interpreter::cti_op_create_arguments_no_params): 16307 (JSC::Interpreter::cti_op_tear_off_activation): 16308 (JSC::Interpreter::cti_op_tear_off_arguments): 16309 (JSC::Interpreter::cti_op_profile_will_call): 16310 (JSC::Interpreter::cti_op_profile_did_call): 16311 (JSC::Interpreter::cti_op_ret_scopeChain): 16312 (JSC::Interpreter::cti_op_new_array): 16313 (JSC::Interpreter::cti_op_resolve): 16314 (JSC::Interpreter::cti_op_construct_JSConstruct): 16315 (JSC::Interpreter::cti_op_construct_NotJSConstruct): 16316 (JSC::Interpreter::cti_op_get_by_val): 16317 (JSC::Interpreter::cti_op_resolve_func): 16318 (JSC::Interpreter::cti_op_sub): 16319 (JSC::Interpreter::cti_op_put_by_val): 16320 (JSC::Interpreter::cti_op_put_by_val_array): 16321 (JSC::Interpreter::cti_op_lesseq): 16322 (JSC::Interpreter::cti_op_loop_if_true): 16323 (JSC::Interpreter::cti_op_negate): 16324 (JSC::Interpreter::cti_op_resolve_base): 16325 (JSC::Interpreter::cti_op_resolve_skip): 16326 (JSC::Interpreter::cti_op_resolve_global): 16327 (JSC::Interpreter::cti_op_div): 16328 (JSC::Interpreter::cti_op_pre_dec): 16329 (JSC::Interpreter::cti_op_jless): 16330 (JSC::Interpreter::cti_op_not): 16331 (JSC::Interpreter::cti_op_jtrue): 16332 (JSC::Interpreter::cti_op_post_inc): 16333 (JSC::Interpreter::cti_op_eq): 16334 (JSC::Interpreter::cti_op_lshift): 16335 (JSC::Interpreter::cti_op_bitand): 16336 (JSC::Interpreter::cti_op_rshift): 16337 (JSC::Interpreter::cti_op_bitnot): 16338 (JSC::Interpreter::cti_op_resolve_with_base): 16339 (JSC::Interpreter::cti_op_new_func_exp): 16340 (JSC::Interpreter::cti_op_mod): 16341 (JSC::Interpreter::cti_op_less): 16342 (JSC::Interpreter::cti_op_neq): 16343 (JSC::Interpreter::cti_op_post_dec): 16344 (JSC::Interpreter::cti_op_urshift): 16345 (JSC::Interpreter::cti_op_bitxor): 16346 (JSC::Interpreter::cti_op_new_regexp): 16347 (JSC::Interpreter::cti_op_bitor): 16348 (JSC::Interpreter::cti_op_call_eval): 16349 (JSC::Interpreter::cti_op_throw): 16350 (JSC::Interpreter::cti_op_get_pnames): 16351 (JSC::Interpreter::cti_op_next_pname): 16352 (JSC::Interpreter::cti_op_push_scope): 16353 (JSC::Interpreter::cti_op_pop_scope): 16354 (JSC::Interpreter::cti_op_typeof): 16355 (JSC::Interpreter::cti_op_is_undefined): 16356 (JSC::Interpreter::cti_op_is_boolean): 16357 (JSC::Interpreter::cti_op_is_number): 16358 (JSC::Interpreter::cti_op_is_string): 16359 (JSC::Interpreter::cti_op_is_object): 16360 (JSC::Interpreter::cti_op_is_function): 16361 (JSC::Interpreter::cti_op_stricteq): 16362 (JSC::Interpreter::cti_op_nstricteq): 16363 (JSC::Interpreter::cti_op_to_jsnumber): 16364 (JSC::Interpreter::cti_op_in): 16365 (JSC::Interpreter::cti_op_push_new_scope): 16366 (JSC::Interpreter::cti_op_jmp_scopes): 16367 (JSC::Interpreter::cti_op_put_by_index): 16368 (JSC::Interpreter::cti_op_switch_imm): 16369 (JSC::Interpreter::cti_op_switch_char): 16370 (JSC::Interpreter::cti_op_switch_string): 16371 (JSC::Interpreter::cti_op_del_by_val): 16372 (JSC::Interpreter::cti_op_put_getter): 16373 (JSC::Interpreter::cti_op_put_setter): 16374 (JSC::Interpreter::cti_op_new_error): 16375 (JSC::Interpreter::cti_op_debug): 16376 (JSC::Interpreter::cti_vm_throw): 16377 * interpreter/Interpreter.h: 16378 * jit/JIT.cpp: 16379 (JSC::): 16380 (JSC::JIT::privateCompileMainPass): 16381 (JSC::JIT::privateCompile): 16382 * jit/JIT.h: 16383 * jit/JITInlineMethods.h: 16384 (JSC::JIT::restoreArgumentReference): 16385 (JSC::JIT::restoreArgumentReferenceForTrampoline): 16386 * wtf/Platform.h: 16387 16388 2008-12-18 Cameron Zwarich <zwarich (a] apple.com> 16389 16390 Reviewed by Geoff Garen. 16391 16392 Bug 21855: REGRESSION (r37323): Gmail complains about popup blocking when opening a link 16393 <https://bugs.webkit.org/show_bug.cgi?id=21855> 16394 <rdar://problem/6278244> 16395 16396 Move DynamicGlobalObjectScope to JSGlobalObject.h so that it can be used 16397 from WebCore. 16398 16399 * interpreter/Interpreter.cpp: 16400 * runtime/JSGlobalObject.h: 16401 (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): 16402 (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope): 16403 16404 2008-12-17 Geoffrey Garen <ggaren (a] apple.com> 16405 16406 Reviewed by Gavin Barraclough. 16407 16408 Fixed https://bugs.webkit.org/show_bug.cgi?id=22393 16409 Segfault when caching property accesses to primitive cells. 16410 16411 Changed some asObject casts to asCell casts in cases where a primitive 16412 value may be a cell and not an object. 16413 16414 Re-enabled property caching for primitives in cases where it had been 16415 disabled because of this bug. 16416 16417 Updated a comment to better explain something Darin thought needed 16418 explaining in an old patch review. 16419 16420 * interpreter/Interpreter.cpp: 16421 (JSC::countPrototypeChainEntriesAndCheckForProxies): 16422 (JSC::Interpreter::tryCacheGetByID): 16423 (JSC::Interpreter::tryCTICacheGetByID): 16424 (JSC::Interpreter::cti_op_get_by_id_self_fail): 16425 (JSC::Interpreter::cti_op_get_by_id_proto_list): 16426 16427 2008-12-17 Gavin Barraclough <barraclough (a] apple.com> 16428 16429 Reviewed by Cameron Zwarich. 16430 16431 Fixes for Sunspider failures with the JIT enabled on x86-64. 16432 16433 * assembler/MacroAssembler.h: 16434 Switch the order of the RegisterID & Address form of je32, to keep it consistent with jne32. 16435 * jit/JIT.cpp: 16436 * jit/JIT.h: 16437 * jit/JITInlineMethods.h: 16438 Port the m_ctiVirtualCall tramopline generation to use the MacroAssembler interface. 16439 * jit/JITCall.cpp: 16440 Fix bug in the non-optimizing code path, vptr check should have been to the memory address pointer 16441 to by the register, not to the register itself. 16442 * wrec/WRECGenerator.cpp: 16443 See assembler/MacroAssembler.h, above. 16444 16445 2008-12-17 Gavin Barraclough <barraclough (a] apple.com> 16446 16447 Reviewed by Sam Weinig. 16448 16449 print("Hello, 64-bit jitted world!"); 16450 Get hello-world working through the JIT, on x86-64. 16451 16452 * assembler/X86Assembler.h: 16453 Fix encoding of opcode + RegisterID format instructions for 64-bit. 16454 * interpreter/Interpreter.cpp: 16455 * interpreter/Interpreter.h: 16456 Make VoidPtrPair actually be a pair of void*s. 16457 (Possibly should make this change for 32-bit Mac platforms, too - but won't change 32-bit behaviour in this patch). 16458 * jit/JIT.cpp: 16459 * jit/JIT.h: 16460 Provide names for the timeoutCheckRegister & callFrameRegister on x86-64, 16461 force x86-64 ctiTrampoline arguments onto the stack, 16462 implement the asm trampolines for x86-64, 16463 implement the restoreArgumentReference methods for x86-64 calling conventions. 16464 * jit/JITCall.cpp: 16465 * jit/JITInlineMethods.h: 16466 * wtf/Platform.h: 16467 Add switch settings to ENABLE(JIT), on PLATFORM(X86_64) (currently still disabled). 16468 16469 2008-12-17 Sam Weinig <sam (a] webkit.org> 16470 16471 Reviewed by Gavin Barraclough. 16472 16473 Add more CodeBlock statistics. 16474 16475 * bytecode/CodeBlock.cpp: 16476 (JSC::CodeBlock::dumpStatistics): 16477 16478 2008-12-17 Sam Weinig <sam (a] webkit.org> 16479 16480 Reviewed by Darin Adler. 16481 16482 Fix for https://bugs.webkit.org/show_bug.cgi?id=22897 16483 <rdar://problem/6428342> 16484 Look into feasibility of discarding bytecode after native codegen 16485 16486 Clear the bytecode Instruction vector at the end JIT generation. 16487 16488 Saves 4.8 MB on Membuster head. 16489 16490 * bytecode/CodeBlock.cpp: 16491 (JSC::CodeBlock::dump): Add logging for the case that someone tries 16492 to dump the instructions of a CodeBlock that has had its bytecode 16493 vector cleared. 16494 (JSC::CodeBlock::CodeBlock): Initialize the instructionCount 16495 (JSC::CodeBlock::handlerForBytecodeOffset): Use instructionCount instead 16496 of the size of the instruction vector in the assertion. 16497 (JSC::CodeBlock::lineNumberForBytecodeOffset): Ditto. 16498 (JSC::CodeBlock::expressionRangeForBytecodeOffset): Ditto. 16499 (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): Ditto. 16500 (JSC::CodeBlock::functionRegisterForBytecodeOffset): Ditto. 16501 * bytecode/CodeBlock.h: 16502 (JSC::CodeBlock::setInstructionCount): Store the instruction vector size 16503 in debug builds for assertions. 16504 * bytecompiler/BytecodeGenerator.cpp: 16505 (JSC::BytecodeGenerator::generate): 16506 * jit/JIT.cpp: 16507 (JSC::JIT::privateCompile): Clear the bytecode vector unless we 16508 have compiled with Opcode sampling where we will continue to require it 16509 16510 2008-12-17 Cary Clark <caryclark (a] google.com> 16511 16512 Reviewed by Darin Adler. 16513 Landed by Adam Barth. 16514 16515 Add ENABLE_TEXT_CARET to permit the ANDROID platform 16516 to invalidate and draw the caret in a separate thread. 16517 16518 * wtf/Platform.h: 16519 Default ENABLE_TEXT_CARET to 1. 16520 16521 2008-12-17 Alexey Proskuryakov <ap (a] webkit.org> 16522 16523 Reviewed by Darin Adler. 16524 16525 Don't use unique context group in JSGlobalContextCreate() on Tiger or Leopard, take two. 16526 16527 * API/JSContextRef.cpp: The previous patch that claimed to do this was making Tiger and 16528 Leopard always use unique context group instead. 16529 16530 2008-12-16 Sam Weinig <sam (a] webkit.org> 16531 16532 Reviewed by Geoffrey Garen. 16533 16534 Fix for https://bugs.webkit.org/show_bug.cgi?id=22838 16535 Remove dependency on the bytecode Instruction buffer in Interpreter::throwException 16536 Part of <rdar://problem/6428342> 16537 16538 * bytecode/CodeBlock.cpp: 16539 (JSC::CodeBlock::functionRegisterForBytecodeOffset): Added. Function to get 16540 a function Register index in a callFrame for a bytecode offset. 16541 (JSC::CodeBlock::shrinkToFit): Shrink m_getByIdExceptionInfo and m_functionRegisterInfos. 16542 * bytecode/CodeBlock.h: 16543 (JSC::FunctionRegisterInfo::FunctionRegisterInfo): Added. 16544 (JSC::CodeBlock::addFunctionRegisterInfo): 16545 * bytecompiler/BytecodeGenerator.cpp: 16546 (JSC::BytecodeGenerator::emitCall): 16547 * interpreter/Interpreter.cpp: 16548 (JSC::Interpreter::throwException): Use functionRegisterForBytecodeOffset in JIT 16549 mode. 16550 16551 2008-12-16 Sam Weinig <sam (a] webkit.org> 16552 16553 Reviewed by Gavin Barraclough. 16554 16555 Fix for https://bugs.webkit.org/show_bug.cgi?id=22837 16556 Remove dependency on the bytecode Instruction buffer in Interpreter::cti_op_call_NotJSFunction 16557 Part of <rdar://problem/6428342> 16558 16559 * interpreter/CallFrame.h: Added comment regarding returnPC storing a void*. 16560 * interpreter/Interpreter.cpp: 16561 (JSC::bytecodeOffsetForPC): We no longer have any cases of the PC 16562 being in the instruction stream for JIT, so we can remove the check. 16563 (JSC::Interpreter::cti_op_call_NotJSFunction): Use the CTI_RETURN_ADDRESS 16564 as the call frame returnPC as it is only necessary for looking up when 16565 throwing an exception. 16566 * interpreter/RegisterFile.h: 16567 (JSC::RegisterFile::): Added comment regarding returnPC storing a void*. 16568 * jit/JIT.h: Remove ARG_instr4. 16569 * jit/JITCall.cpp: 16570 (JSC::JIT::compileOpCallSetupArgs): Don't pass the instruction pointer. 16571 16572 2008-12-16 Darin Adler <darin (a] apple.com> 16573 16574 Reviewed and landed by Cameron Zwarich. 16575 16576 Preparatory work for fixing 16577 16578 Bug 22887: Make UString::Rep use RefCounted rather than implementing its own ref counting 16579 <https://bugs.webkit.org/show_bug.cgi?id=22887> 16580 16581 Change the various string translators used by Identifier:add() so that 16582 they never zero the ref count of a newly created UString::Rep. 16583 16584 * runtime/Identifier.cpp: 16585 (JSC::CStringTranslator::translate): 16586 (JSC::Identifier::add): 16587 (JSC::UCharBufferTranslator::translate): 16588 16589 2008-12-16 Gavin Barraclough <barraclough (a] apple.com> 16590 16591 Build fix for 'doze. 16592 16593 * assembler/AssemblerBuffer.h: 16594 16595 2008-12-16 Gavin Barraclough <barraclough (a] apple.com> 16596 16597 Reviewed by Cameron Zwarich. 16598 16599 Make the JIT compile on x86-64. 16600 This largely involves populting the missing calls in MacroAssembler.h. 16601 In addition some reinterpret_casts need removing from the JIT, and the 16602 repatching property access code will need to be fully compiled out for 16603 now. The changes in interpret.cpp are to reorder the functions so that 16604 the _generic forms come before all other property access methods, and 16605 then to place all property access methods other than the generic forms 16606 under control of the ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS macro. 16607 16608 No performance impact. 16609 16610 * assembler/AssemblerBuffer.h: 16611 (JSC::AssemblerBuffer::putInt64Unchecked): 16612 * assembler/MacroAssembler.h: 16613 (JSC::MacroAssembler::loadPtr): 16614 (JSC::MacroAssembler::load32): 16615 (JSC::MacroAssembler::storePtr): 16616 (JSC::MacroAssembler::storePtrWithRepatch): 16617 (JSC::MacroAssembler::store32): 16618 (JSC::MacroAssembler::poke): 16619 (JSC::MacroAssembler::move): 16620 (JSC::MacroAssembler::testImm64): 16621 (JSC::MacroAssembler::jePtr): 16622 (JSC::MacroAssembler::jnePtr): 16623 (JSC::MacroAssembler::jnzPtr): 16624 (JSC::MacroAssembler::jzPtr): 16625 * assembler/X86Assembler.h: 16626 (JSC::X86Assembler::): 16627 (JSC::X86Assembler::cmpq_rr): 16628 (JSC::X86Assembler::cmpq_rm): 16629 (JSC::X86Assembler::cmpq_im): 16630 (JSC::X86Assembler::testq_i32m): 16631 (JSC::X86Assembler::movl_mEAX): 16632 (JSC::X86Assembler::movl_i32r): 16633 (JSC::X86Assembler::movl_EAXm): 16634 (JSC::X86Assembler::movq_rm): 16635 (JSC::X86Assembler::movq_mEAX): 16636 (JSC::X86Assembler::movq_mr): 16637 (JSC::X86Assembler::movq_i64r): 16638 (JSC::X86Assembler::movl_mr): 16639 (JSC::X86Assembler::X86InstructionFormatter::oneByteOp64): 16640 (JSC::X86Assembler::X86InstructionFormatter::immediate64): 16641 * interpreter/Interpreter.cpp: 16642 (JSC::Interpreter::cti_op_put_by_id_generic): 16643 (JSC::Interpreter::cti_op_get_by_id_generic): 16644 (JSC::Interpreter::cti_op_put_by_id): 16645 (JSC::Interpreter::cti_op_put_by_id_second): 16646 * jit/JIT.cpp: 16647 (JSC::JIT::privateCompileMainPass): 16648 (JSC::JIT::privateCompile): 16649 (JSC::JIT::privateCompileCTIMachineTrampolines): 16650 * jit/JITCall.cpp: 16651 (JSC::JIT::compileOpCallSetupArgs): 16652 (JSC::JIT::compileOpCall): 16653 * jit/JITPropertyAccess.cpp: 16654 (JSC::JIT::compileGetByIdHotPath): 16655 (JSC::JIT::compilePutByIdHotPath): 16656 * runtime/JSImmediate.h: 16657 (JSC::JSImmediate::makeInt): 16658 16659 2008-12-16 Cameron Zwarich <zwarich (a] apple.com> 16660 16661 Reviewed by Darin Adler. 16662 16663 Bug 22869: REGRESSION (r38407): http://news.cnet.com/8301-13579_3-9953533-37.html crashes 16664 <https://bugs.webkit.org/show_bug.cgi?id=22869> 16665 <rdar://problem/6402499> 16666 16667 Before r38407, Structure::m_nameInPrevious was ref'd due to it being 16668 stored in a PropertyMap. However, PropertyMaps are created lazily after 16669 r38407, so Structure::m_nameInPrevious is not necessarily ref'd while 16670 it is being used. Making it a RefPtr instead of a raw pointer fixes 16671 the problem. 16672 16673 Unfortunately, the crash in the bug is rather intermittent, and it is 16674 impossible to add an assertion in UString::Ref::ref() to catch this bug 16675 because some users of UString::Rep deliberately zero out the reference 16676 count. Therefore, there is no layout test accompanying this bug fix. 16677 16678 * runtime/Structure.cpp: 16679 (JSC::Structure::~Structure): Use get(). 16680 (JSC::Structure::materializePropertyMap): Use get(). 16681 (JSC::Structure::addPropertyTransitionToExistingStructure): Use get(). 16682 (JSC::Structure::addPropertyTransition): Use get(). 16683 * runtime/Structure.h: Make Structure::m_nameInPrevious a RefPtr instead 16684 of a raw pointer. 16685 16686 2008-12-16 Nikolas Zimmermann <nikolas.zimmermann (a] torchmobile.com> 16687 16688 Not reviewed. Attempt to fix win build. No 'using namespace WTF' in this file, needs manual WTF:: prefix. 16689 Not sure why the build works as is here. 16690 16691 * runtime/MathObject.cpp: 16692 (JSC::mathProtoFuncRandom): 16693 16694 2008-12-16 Nikolas Zimmermann <nikolas.zimmermann (a] torchmobile.com> 16695 16696 Reviewed by Darin Adler. 16697 16698 Fixes: https://bugs.webkit.org/show_bug.cgi?id=22876 16699 16700 Unify random number generation in JavaScriptCore & WebCore, by introducing 16701 wtf/RandomNumber.h and moving wtf_random/wtf_random_init out of MathExtras.h. 16702 16703 wtf_random_init() has been renamed to initializeRandomNumberGenerator() and 16704 lives in it's own private header: wtf/RandomNumberSeed.h, only intended to 16705 be used from within JavaScriptCore. 16706 16707 wtf_random() has been renamed to randomNumber() and lives in a public header 16708 wtf/RandomNumber.h, usable from within JavaScriptCore & WebCore. It encapsulates 16709 the code taking care of initializing the random number generator (only when 16710 building without ENABLE(JSC_MULTIPLE_THREADS), otherwhise initializeThreading() 16711 already took care of that). 16712 16713 Functional change on darwin: Use random() instead of rand(), as it got a larger 16714 period (more randomness). HTMLFormElement already contains this implementation 16715 and I just moved it in randomNumber(), as special case for PLATFORM(DARWIN). 16716 16717 * GNUmakefile.am: Add RandomNumber.(cpp/h) / RandomNumberSeed.h. 16718 * JavaScriptCore.exp: Ditto. 16719 * JavaScriptCore.pri: Ditto. 16720 * JavaScriptCore.scons: Ditto. 16721 * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto. 16722 * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. 16723 * JavaScriptCoreSources.bkl: Ditto. 16724 * runtime/MathObject.cpp: Use new WTF::randomNumber() functionality. 16725 (JSC::mathProtoFuncRandom): 16726 * wtf/MathExtras.h: Move wtf_random / wtf_random_init to new files. 16727 * wtf/RandomNumber.cpp: Added. 16728 (WTF::randomNumber): 16729 * wtf/RandomNumber.h: Added. 16730 * wtf/RandomNumberSeed.h: Added. Internal usage within JSC only. 16731 (WTF::initializeRandomNumberGenerator): 16732 * wtf/ThreadingGtk.cpp: Rename wtf_random_init() to initializeRandomNumberGenerator(). 16733 (WTF::initializeThreading): 16734 * wtf/ThreadingPthreads.cpp: Ditto. 16735 (WTF::initializeThreading): 16736 * wtf/ThreadingQt.cpp: Ditto. 16737 (WTF::initializeThreading): 16738 * wtf/ThreadingWin.cpp: Ditto. 16739 (WTF::initializeThreading): 16740 16741 2008-12-16 Yael Aharon <yael.aharon (a] nokia.com> 16742 16743 Reviewed by Tor Arne Vestb. 16744 16745 Qt/Win build fix 16746 16747 * JavaScriptCore.pri: 16748 16749 2008-12-15 Mark Rowe <mrowe (a] apple.com> 16750 16751 Reviewed by Cameron Zwarich. 16752 16753 Fix the build with GCC 4.0. 16754 16755 * Configurations/JavaScriptCore.xcconfig: GCC 4.0 appears to have a bug when compiling with -funwind-tables on, 16756 so don't use it with that compiler version. 16757 16758 2008-12-15 Mark Rowe <mrowe (a] apple.com> 16759 16760 Rubber-stamped by Cameron Zwarich. 16761 16762 <rdar://problem/6289933> Change WebKit-related projects to build with GCC 4.2 on Leopard. 16763 16764 * Configurations/Base.xcconfig: 16765 * Configurations/DebugRelease.xcconfig: 16766 16767 2008-12-15 Alexey Proskuryakov <ap (a] webkit.org> 16768 16769 Reviewed by Darin Adler. 16770 16771 Don't use unique context group in JSGlobalContextCreate() on Tiger or Leopard. 16772 16773 * API/JSContextRef.cpp: (JSGlobalContextCreate): 16774 16775 2008-12-15 Alexey Proskuryakov <ap (a] webkit.org> 16776 16777 Reviewed by Darin Adler. 16778 16779 <rdar://problem/6445089> Mach ports leak from worker threads 16780 16781 * interpreter/Interpreter.cpp: (JSC::getCPUTime): 16782 Deallocate the thread self port. 16783 16784 2008-12-15 Gavin Barraclough <barraclough (a] apple.com> 16785 16786 Reviewed by Mark Rowe. 16787 16788 Construct stack frames in JIT code, so that backtracing can still work. 16789 <rdar://problem/6447870> JIT should play nice with attempts to take stack traces 16790 16791 * jit/JIT.cpp: 16792 (JSC::): 16793 (JSC::JIT::privateCompileMainPass): 16794 16795 2008-12-15 Mark Rowe <mrowe (a] apple.com> 16796 16797 Reviewed by Gavin Barraclough. 16798 16799 <rdar://problem/6402262> JavaScriptCore needs exception handling tables in order to get stack traces without frame pointers 16800 16801 * Configurations/JavaScriptCore.xcconfig: 16802 16803 2008-12-15 Gavin Barraclough <barraclough (a] apple.com> 16804 16805 Rubber stamped by Mark Rowe. 16806 16807 Revert r39226 / Bug 22818: Unify JIT callback argument access OS X / Windows 16808 This causes Acid3 failures reverting for now & will revisit later. 16809 https://bugs.webkit.org/show_bug.cgi?id=22873 16810 16811 * interpreter/Interpreter.h: 16812 * jit/JIT.cpp: 16813 (JSC::JIT::privateCompileCTIMachineTrampolines): 16814 * jit/JIT.h: 16815 * jit/JITInlineMethods.h: 16816 (JSC::JIT::restoreArgumentReference): 16817 (JSC::JIT::restoreArgumentReferenceForTrampoline): 16818 (JSC::JIT::emitCTICall_internal): 16819 * jit/JITPropertyAccess.cpp: 16820 (JSC::JIT::privateCompilePutByIdTransition): 16821 * wtf/Platform.h: 16822 16823 2008-12-15 Darin Adler <darin (a] apple.com> 16824 16825 Reviewed by Sam Weinig. 16826 16827 - fix <rdar://problem/6427048> crash due to infinite recursion after setting window.__proto__ = window 16828 16829 Replaced toGlobalObject with the more generally useful unwrappedObject and used it to 16830 fix the cycle detection code in put(__proto__). 16831 16832 * JavaScriptCore.exp: Updated. 16833 16834 * runtime/JSGlobalObject.cpp: Removed toGlobalObject. We now use unwrappedObject instead. 16835 * runtime/JSGlobalObject.h: 16836 (JSC::JSGlobalObject::isGlobalObject): Ditto. 16837 16838 * runtime/JSGlobalObjectFunctions.cpp: 16839 (JSC::globalFuncEval): Use unwrappedObject and isGlobalObject here rather than toGlobalObject. 16840 16841 * runtime/JSObject.cpp: 16842 (JSC::JSObject::put): Rewrote prototype cycle checking loop. Use unwrappedObject in the loop now. 16843 (JSC::JSObject::unwrappedObject): Replaced toGlobalObject with this new function. 16844 * runtime/JSObject.h: More of the same. 16845 16846 2008-12-15 Steve Falkenburg <sfalken (a] apple.com> 16847 16848 Windows build fix. 16849 16850 Visual Studio requires visibility of forward declarations to match class declaration. 16851 16852 * assembler/X86Assembler.h: 16853 16854 2008-12-15 Gustavo Noronha Silva <kov (a] kov.eti.br> 16855 16856 Reviewed by Mark Rowe. 16857 16858 https://bugs.webkit.org/show_bug.cgi?id=22686 16859 16860 GTK+ build fix. 16861 16862 * GNUmakefile.am: 16863 16864 2008-12-15 Gavin Barraclough <barraclough (a] apple.com> 16865 16866 Reviewed by Geoff Garen. 16867 16868 Add support to X86Assembler emitting instructions that access all 16 registers on x86-64. 16869 Add a new formating class, that is reponsible for both emitting the opcode bytes and the 16870 ModRm bytes of an instruction in a single call; this can insert the REX byte as necessary 16871 before the opcode, but has access to the register numbers to build the REX. 16872 16873 * assembler/AssemblerBuffer.h: 16874 (JSC::AssemblerBuffer::isAligned): 16875 (JSC::AssemblerBuffer::data): 16876 * assembler/MacroAssembler.h: 16877 (JSC::MacroAssembler::addPtr): 16878 (JSC::MacroAssembler::add32): 16879 (JSC::MacroAssembler::and32): 16880 (JSC::MacroAssembler::or32): 16881 (JSC::MacroAssembler::sub32): 16882 (JSC::MacroAssembler::xor32): 16883 (JSC::MacroAssembler::loadPtr): 16884 (JSC::MacroAssembler::load32): 16885 (JSC::MacroAssembler::load16): 16886 (JSC::MacroAssembler::storePtr): 16887 (JSC::MacroAssembler::storePtrWithRepatch): 16888 (JSC::MacroAssembler::store32): 16889 (JSC::MacroAssembler::pop): 16890 (JSC::MacroAssembler::push): 16891 (JSC::MacroAssembler::compareImm32ForBranch): 16892 (JSC::MacroAssembler::compareImm32ForBranchEquality): 16893 (JSC::MacroAssembler::testImm32): 16894 (JSC::MacroAssembler::jae32): 16895 (JSC::MacroAssembler::jb32): 16896 (JSC::MacroAssembler::je16): 16897 (JSC::MacroAssembler::jg32): 16898 (JSC::MacroAssembler::jnePtr): 16899 (JSC::MacroAssembler::jne32): 16900 (JSC::MacroAssembler::jump): 16901 * assembler/X86Assembler.h: 16902 (JSC::X86::): 16903 (JSC::X86Assembler::): 16904 (JSC::X86Assembler::size): 16905 (JSC::X86Assembler::push_r): 16906 (JSC::X86Assembler::pop_r): 16907 (JSC::X86Assembler::push_i32): 16908 (JSC::X86Assembler::push_m): 16909 (JSC::X86Assembler::pop_m): 16910 (JSC::X86Assembler::addl_rr): 16911 (JSC::X86Assembler::addl_mr): 16912 (JSC::X86Assembler::addl_ir): 16913 (JSC::X86Assembler::addq_ir): 16914 (JSC::X86Assembler::addl_im): 16915 (JSC::X86Assembler::andl_rr): 16916 (JSC::X86Assembler::andl_ir): 16917 (JSC::X86Assembler::orl_rr): 16918 (JSC::X86Assembler::orl_mr): 16919 (JSC::X86Assembler::orl_ir): 16920 (JSC::X86Assembler::subl_rr): 16921 (JSC::X86Assembler::subl_mr): 16922 (JSC::X86Assembler::subl_ir): 16923 (JSC::X86Assembler::subl_im): 16924 (JSC::X86Assembler::xorl_rr): 16925 (JSC::X86Assembler::xorl_ir): 16926 (JSC::X86Assembler::sarl_i8r): 16927 (JSC::X86Assembler::sarl_CLr): 16928 (JSC::X86Assembler::shll_i8r): 16929 (JSC::X86Assembler::shll_CLr): 16930 (JSC::X86Assembler::imull_rr): 16931 (JSC::X86Assembler::imull_i32r): 16932 (JSC::X86Assembler::idivl_r): 16933 (JSC::X86Assembler::cmpl_rr): 16934 (JSC::X86Assembler::cmpl_rm): 16935 (JSC::X86Assembler::cmpl_mr): 16936 (JSC::X86Assembler::cmpl_ir): 16937 (JSC::X86Assembler::cmpl_ir_force32): 16938 (JSC::X86Assembler::cmpl_im): 16939 (JSC::X86Assembler::cmpl_im_force32): 16940 (JSC::X86Assembler::cmpw_rm): 16941 (JSC::X86Assembler::testl_rr): 16942 (JSC::X86Assembler::testl_i32r): 16943 (JSC::X86Assembler::testl_i32m): 16944 (JSC::X86Assembler::testq_rr): 16945 (JSC::X86Assembler::testq_i32r): 16946 (JSC::X86Assembler::testb_i8r): 16947 (JSC::X86Assembler::sete_r): 16948 (JSC::X86Assembler::setz_r): 16949 (JSC::X86Assembler::setne_r): 16950 (JSC::X86Assembler::setnz_r): 16951 (JSC::X86Assembler::cdq): 16952 (JSC::X86Assembler::xchgl_rr): 16953 (JSC::X86Assembler::movl_rr): 16954 (JSC::X86Assembler::movl_rm): 16955 (JSC::X86Assembler::movl_mr): 16956 (JSC::X86Assembler::movl_i32r): 16957 (JSC::X86Assembler::movl_i32m): 16958 (JSC::X86Assembler::movq_rr): 16959 (JSC::X86Assembler::movq_rm): 16960 (JSC::X86Assembler::movq_mr): 16961 (JSC::X86Assembler::movzwl_mr): 16962 (JSC::X86Assembler::movzbl_rr): 16963 (JSC::X86Assembler::leal_mr): 16964 (JSC::X86Assembler::call): 16965 (JSC::X86Assembler::jmp): 16966 (JSC::X86Assembler::jmp_r): 16967 (JSC::X86Assembler::jmp_m): 16968 (JSC::X86Assembler::jne): 16969 (JSC::X86Assembler::jnz): 16970 (JSC::X86Assembler::je): 16971 (JSC::X86Assembler::jl): 16972 (JSC::X86Assembler::jb): 16973 (JSC::X86Assembler::jle): 16974 (JSC::X86Assembler::jbe): 16975 (JSC::X86Assembler::jge): 16976 (JSC::X86Assembler::jg): 16977 (JSC::X86Assembler::ja): 16978 (JSC::X86Assembler::jae): 16979 (JSC::X86Assembler::jo): 16980 (JSC::X86Assembler::jp): 16981 (JSC::X86Assembler::js): 16982 (JSC::X86Assembler::addsd_rr): 16983 (JSC::X86Assembler::addsd_mr): 16984 (JSC::X86Assembler::cvtsi2sd_rr): 16985 (JSC::X86Assembler::cvttsd2si_rr): 16986 (JSC::X86Assembler::movd_rr): 16987 (JSC::X86Assembler::movsd_rm): 16988 (JSC::X86Assembler::movsd_mr): 16989 (JSC::X86Assembler::mulsd_rr): 16990 (JSC::X86Assembler::mulsd_mr): 16991 (JSC::X86Assembler::pextrw_irr): 16992 (JSC::X86Assembler::subsd_rr): 16993 (JSC::X86Assembler::subsd_mr): 16994 (JSC::X86Assembler::ucomis_rr): 16995 (JSC::X86Assembler::int3): 16996 (JSC::X86Assembler::ret): 16997 (JSC::X86Assembler::predictNotTaken): 16998 (JSC::X86Assembler::label): 16999 (JSC::X86Assembler::align): 17000 (JSC::X86Assembler::link): 17001 (JSC::X86Assembler::executableCopy): 17002 (JSC::X86Assembler::X86InstructionFormater::prefix): 17003 (JSC::X86Assembler::X86InstructionFormater::oneByteOp): 17004 (JSC::X86Assembler::X86InstructionFormater::twoByteOp): 17005 (JSC::X86Assembler::X86InstructionFormater::oneByteOp64): 17006 (JSC::X86Assembler::X86InstructionFormater::oneByteOp8): 17007 (JSC::X86Assembler::X86InstructionFormater::twoByteOp8): 17008 (JSC::X86Assembler::X86InstructionFormater::instructionImmediate8): 17009 (JSC::X86Assembler::X86InstructionFormater::instructionImmediate32): 17010 (JSC::X86Assembler::X86InstructionFormater::instructionRel32): 17011 (JSC::X86Assembler::X86InstructionFormater::size): 17012 (JSC::X86Assembler::X86InstructionFormater::isAligned): 17013 (JSC::X86Assembler::X86InstructionFormater::data): 17014 (JSC::X86Assembler::X86InstructionFormater::executableCopy): 17015 (JSC::X86Assembler::X86InstructionFormater::registerModRM): 17016 (JSC::X86Assembler::X86InstructionFormater::memoryModRM): 17017 * jit/JIT.cpp: 17018 (JSC::JIT::privateCompileMainPass): 17019 (JSC::JIT::privateCompile): 17020 (JSC::JIT::privateCompileCTIMachineTrampolines): 17021 * jit/JITArithmetic.cpp: 17022 (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): 17023 (JSC::JIT::compileBinaryArithOp): 17024 * jit/JITCall.cpp: 17025 (JSC::JIT::compileOpCall): 17026 (JSC::JIT::compileOpCallSlowCase): 17027 * jit/JITPropertyAccess.cpp: 17028 (JSC::JIT::compileGetByIdHotPath): 17029 (JSC::JIT::compilePutByIdHotPath): 17030 (JSC::JIT::privateCompilePutByIdTransition): 17031 (JSC::JIT::privateCompilePatchGetArrayLength): 17032 (JSC::JIT::privateCompileGetByIdProto): 17033 (JSC::JIT::privateCompileGetByIdProtoList): 17034 (JSC::JIT::privateCompileGetByIdChainList): 17035 (JSC::JIT::privateCompileGetByIdChain): 17036 17037 2008-12-15 Darin Adler <darin (a] apple.com> 17038 17039 * interpreter/RegisterFile.h: Tweak include formatting. 17040 17041 2008-12-15 Holger Hans Peter Freyther <zecke (a] selfish.org> 17042 17043 Build fix for Gtk+. 17044 17045 * interpreter/RegisterFile.h: Include stdio.h for fprintf 17046 17047 2008-12-15 Alexey Proskuryakov <ap (a] webkit.org> 17048 17049 Reviewed by Oliver Hunt. 17050 17051 <rdar://problem/6444455> Worker Thread crash running multiple workers for a moderate amount of time 17052 17053 * interpreter/RegisterFile.h: (JSC::RegisterFile::RegisterFile): 17054 Improve error handling: if mmap fails, crash immediately, and print out the reason. 17055 17056 2008-12-13 Gavin Barraclough <barraclough (a] apple.com> 17057 17058 Reviewed by Cameron Zwarich. 17059 17060 Re-enable WREC on 64-bit. 17061 Implements one of the MacroAssembler::jnzPtr methods, previously only implemented for 32-bit x86. 17062 17063 https://bugs.webkit.org/show_bug.cgi?id=22849 17064 17065 * assembler/MacroAssembler.h: 17066 (JSC::MacroAssembler::testImm64): 17067 (JSC::MacroAssembler::jnzPtr): 17068 * assembler/X86Assembler.h: 17069 (JSC::X86Assembler::testq_i32r): 17070 (JSC::X86Assembler::testq_rr): 17071 * wtf/Platform.h: 17072 17073 2008-12-13 Gavin Barraclough <barraclough (a] apple.com> 17074 17075 Fix PPC builds. 17076 17077 * assembler/MacroAssembler.h: 17078 17079 2008-12-13 Gavin Barraclough <barraclough (a] apple.com> 17080 17081 Build fix only, no review. 17082 17083 * bytecode/CodeBlock.h: 17084 17085 2008-12-13 Gavin Barraclough <barraclough (a] apple.com> 17086 17087 Reviewed by Cameron Zwarich. 17088 17089 Port the remainder of the JIT, bar calling convention related code, and code 17090 implementing optimizations which can be disabled, to use the MacroAssembler. 17091 17092 * assembler/MacroAssembler.h: 17093 (JSC::MacroAssembler::DataLabelPtr::DataLabelPtr): 17094 (JSC::MacroAssembler::RepatchBuffer::RepatchBuffer): 17095 (JSC::MacroAssembler::RepatchBuffer::link): 17096 (JSC::MacroAssembler::RepatchBuffer::addressOf): 17097 (JSC::MacroAssembler::RepatchBuffer::setPtr): 17098 (JSC::MacroAssembler::addPtr): 17099 (JSC::MacroAssembler::lshift32): 17100 (JSC::MacroAssembler::mod32): 17101 (JSC::MacroAssembler::rshift32): 17102 (JSC::MacroAssembler::storePtrWithRepatch): 17103 (JSC::MacroAssembler::jnzPtr): 17104 (JSC::MacroAssembler::jzPtr): 17105 (JSC::MacroAssembler::jump): 17106 (JSC::MacroAssembler::label): 17107 * assembler/X86Assembler.h: 17108 (JSC::X86Assembler::): 17109 (JSC::X86Assembler::xchgl_rr): 17110 (JSC::X86Assembler::jmp_m): 17111 (JSC::X86Assembler::repatchAddress): 17112 (JSC::X86Assembler::getRelocatedAddress): 17113 * bytecode/CodeBlock.cpp: 17114 (JSC::CodeBlock::CodeBlock): 17115 * bytecode/CodeBlock.h: 17116 (JSC::JITCodeRef::JITCodeRef): 17117 (JSC::CodeBlock::setJITCode): 17118 (JSC::CodeBlock::jitCode): 17119 (JSC::CodeBlock::executablePool): 17120 * jit/JIT.cpp: 17121 (JSC::JIT::privateCompileMainPass): 17122 (JSC::JIT::privateCompileLinkPass): 17123 (JSC::JIT::privateCompile): 17124 (JSC::JIT::privateCompileCTIMachineTrampolines): 17125 * jit/JIT.h: 17126 (JSC::CallRecord::CallRecord): 17127 (JSC::JumpTable::JumpTable): 17128 (JSC::JIT::emitCTICall): 17129 (JSC::JIT::JSRInfo::JSRInfo): 17130 * jit/JITArithmetic.cpp: 17131 * jit/JITCall.cpp: 17132 * jit/JITInlineMethods.h: 17133 (JSC::JIT::emitNakedCall): 17134 (JSC::JIT::emitCTICall_internal): 17135 (JSC::JIT::checkStructure): 17136 (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): 17137 (JSC::JIT::addSlowCase): 17138 (JSC::JIT::addJump): 17139 (JSC::JIT::emitJumpSlowToHot): 17140 * jit/JITPropertyAccess.cpp: 17141 (JSC::JIT::privateCompileGetByIdChainList): 17142 (JSC::JIT::privateCompileGetByIdChain): 17143 17144 2008-12-12 Cameron Zwarich <zwarich (a] apple.com> 17145 17146 Reviewed by Sam Weinig. 17147 17148 Fix the failures of the following layout tests, which regressed in 17149 r39255: 17150 17151 fast/dom/StyleSheet/ownerNode-lifetime-2.html 17152 fast/xsl/transform-xhr-doc.xhtml 17153 17154 The binary search in CodeBlock::getByIdExceptionInfoForBytecodeOffset() 17155 doesn't guarantee that it actually finds a match, so add an explicit check 17156 for this. 17157 17158 * bytecode/CodeBlock.cpp: 17159 (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): 17160 17161 2008-12-12 Gavin Barraclough <barraclough (a] apple.com> 17162 17163 Reviewed by Cameron Zwarich. 17164 17165 Replace emitPutCallArg methods with emitPutJITStubArg methods. Primarily to make the argument numbering 17166 more sensible (1-based incrementing by 1, rather than 0-based incrementing by 4). The CTI name also seems 17167 to be being deprecated from the code generally. 17168 17169 * jit/JIT.cpp: 17170 (JSC::JIT::privateCompileMainPass): 17171 (JSC::JIT::privateCompileSlowCases): 17172 (JSC::JIT::privateCompileCTIMachineTrampolines): 17173 * jit/JIT.h: 17174 * jit/JITArithmetic.cpp: 17175 (JSC::JIT::compileBinaryArithOp): 17176 (JSC::JIT::compileBinaryArithOpSlowCase): 17177 * jit/JITCall.cpp: 17178 (JSC::JIT::compileOpCallSetupArgs): 17179 (JSC::JIT::compileOpCallEvalSetupArgs): 17180 (JSC::JIT::compileOpConstructSetupArgs): 17181 (JSC::JIT::compileOpCall): 17182 * jit/JITInlineMethods.h: 17183 (JSC::JIT::emitPutJITStubArg): 17184 (JSC::JIT::emitPutJITStubArgConstant): 17185 (JSC::JIT::emitGetJITStubArg): 17186 (JSC::JIT::emitPutJITStubArgFromVirtualRegister): 17187 * jit/JITPropertyAccess.cpp: 17188 (JSC::JIT::compileGetByIdHotPath): 17189 (JSC::JIT::compilePutByIdHotPath): 17190 (JSC::JIT::compileGetByIdSlowCase): 17191 (JSC::JIT::compilePutByIdSlowCase): 17192 17193 2008-12-12 Gavin Barraclough <barraclough (a] apple.com> 17194 17195 Fix windows builds. 17196 17197 * jit/JIT.cpp: 17198 (JSC::JIT::privateCompileMainPass): 17199 (JSC::JIT::privateCompileSlowCases): 17200 (JSC::JIT::privateCompile): 17201 17202 2008-12-12 Gavin Barraclough <barraclough (a] apple.com> 17203 17204 Reviewed by Geoff Garen. 17205 17206 Remove loop counter 'i' from the JIT generation passes, replace with a member m_bytecodeIndex. 17207 17208 No impact on performance. 17209 17210 * jit/JIT.cpp: 17211 (JSC::JIT::compileOpStrictEq): 17212 (JSC::JIT::emitSlowScriptCheck): 17213 (JSC::JIT::privateCompileMainPass): 17214 (JSC::JIT::privateCompileSlowCases): 17215 (JSC::JIT::privateCompile): 17216 * jit/JIT.h: 17217 (JSC::CallRecord::CallRecord): 17218 (JSC::JmpTable::JmpTable): 17219 (JSC::JIT::emitCTICall): 17220 * jit/JITArithmetic.cpp: 17221 (JSC::JIT::compileBinaryArithOp): 17222 (JSC::JIT::compileBinaryArithOpSlowCase): 17223 * jit/JITCall.cpp: 17224 (JSC::JIT::compileOpCall): 17225 (JSC::JIT::compileOpCallSlowCase): 17226 * jit/JITInlineMethods.h: 17227 (JSC::JIT::emitGetVirtualRegister): 17228 (JSC::JIT::emitGetVirtualRegisters): 17229 (JSC::JIT::emitNakedCall): 17230 (JSC::JIT::emitCTICall_internal): 17231 (JSC::JIT::emitJumpSlowCaseIfJSCell): 17232 (JSC::JIT::emitJumpSlowCaseIfNotJSCell): 17233 (JSC::JIT::emitJumpSlowCaseIfNotImmNum): 17234 (JSC::JIT::emitJumpSlowCaseIfNotImmNums): 17235 (JSC::JIT::emitFastArithIntToImmOrSlowCase): 17236 (JSC::JIT::addSlowCase): 17237 (JSC::JIT::addJump): 17238 (JSC::JIT::emitJumpSlowToHot): 17239 * jit/JITPropertyAccess.cpp: 17240 (JSC::JIT::compileGetByIdHotPath): 17241 (JSC::JIT::compileGetByIdSlowCase): 17242 (JSC::JIT::compilePutByIdHotPath): 17243 (JSC::JIT::compilePutByIdSlowCase): 17244 17245 2008-12-12 Sam Weinig <sam (a] webkit.org> 17246 17247 Reviewed by Cameron Zwarich. 17248 17249 <rdar://problem/6428342> Look into feasibility of discarding bytecode after native codegen 17250 17251 Move more JIT functionality to using offsets into the Instruction buffer 17252 instead of raw pointers. Two to go! 17253 17254 * interpreter/Interpreter.cpp: 17255 (JSC::bytecodeOffsetForPC): Rename from vPCForPC. 17256 (JSC::Interpreter::resolve): Pass offset to exception helper. 17257 (JSC::Interpreter::resolveSkip): Ditto. 17258 (JSC::Interpreter::resolveGlobal): Ditto. 17259 (JSC::Interpreter::resolveBaseAndProperty): Ditto. 17260 (JSC::Interpreter::resolveBaseAndFunc): Ditto. 17261 (JSC::isNotObject): Ditto. 17262 (JSC::Interpreter::unwindCallFrame): Call bytecodeOffsetForPC. 17263 (JSC::Interpreter::throwException): Use offsets instead of vPCs. 17264 (JSC::Interpreter::privateExecute): Pass offset to exception helper. 17265 (JSC::Interpreter::retrieveLastCaller): Ditto. 17266 (JSC::Interpreter::cti_op_instanceof): Ditto. 17267 (JSC::Interpreter::cti_op_call_NotJSFunction): Ditto. 17268 (JSC::Interpreter::cti_op_resolve): Pass offset to exception helper. 17269 (JSC::Interpreter::cti_op_construct_NotJSConstruct): Ditto. 17270 (JSC::Interpreter::cti_op_resolve_func): Ditto. 17271 (JSC::Interpreter::cti_op_resolve_skip): Ditto. 17272 (JSC::Interpreter::cti_op_resolve_global): Ditto. 17273 (JSC::Interpreter::cti_op_resolve_with_base): Ditto. 17274 (JSC::Interpreter::cti_op_throw): Ditto. 17275 (JSC::Interpreter::cti_op_in): Ditto. 17276 (JSC::Interpreter::cti_vm_throw): Ditto. 17277 * interpreter/Interpreter.h: 17278 17279 * jit/JIT.cpp: 17280 (JSC::JIT::privateCompileMainPass): Don't pass unnecessary vPC to stub. 17281 * jit/JIT.h: Remove ARG_instr1 - ARG_instr3 and ARG_instr5 - ARG_instr6. 17282 * jit/JITCall.cpp: 17283 (JSC::JIT::compileOpCallEvalSetupArgs): Don't pass unnecessary vPC to stub.. 17284 (JSC::JIT::compileOpConstructSetupArgs): Ditto. 17285 17286 * runtime/ExceptionHelpers.cpp: 17287 (JSC::createUndefinedVariableError): Take an offset instead of vPC. 17288 (JSC::createInvalidParamError): Ditto. 17289 (JSC::createNotAConstructorError): Ditto. 17290 (JSC::createNotAFunctionError): Ditto. 17291 (JSC::createNotAnObjectError): Ditto. 17292 * runtime/ExceptionHelpers.h: 17293 17294 2008-12-12 Cameron Zwarich <zwarich (a] apple.com> 17295 17296 Reviewed by Oliver Hunt. 17297 17298 Bug 22835: Crash during bytecode generation when comparing to null 17299 <https://bugs.webkit.org/show_bug.cgi?id=22835> 17300 <rdar://problem/6286749> 17301 17302 Change the special cases in bytecode generation for comparison to null 17303 to use tempDestination(). 17304 17305 * parser/Nodes.cpp: 17306 (JSC::BinaryOpNode::emitBytecode): 17307 (JSC::EqualNode::emitBytecode): 17308 17309 2008-12-12 Gavin Barraclough <barraclough (a] apple.com> 17310 17311 Reviewed by Geoff Garen. 17312 17313 Move slow-cases of JIT code generation over to the MacroAssembler interface. 17314 17315 * assembler/MacroAssembler.h: 17316 (JSC::MacroAssembler::Label::Label): 17317 (JSC::MacroAssembler::jae32): 17318 (JSC::MacroAssembler::jg32): 17319 (JSC::MacroAssembler::jzPtr): 17320 * jit/JIT.cpp: 17321 (JSC::JIT::privateCompileSlowCases): 17322 (JSC::JIT::privateCompile): 17323 (JSC::JIT::emitGetVariableObjectRegister): 17324 (JSC::JIT::emitPutVariableObjectRegister): 17325 * jit/JIT.h: 17326 (JSC::SlowCaseEntry::SlowCaseEntry): 17327 (JSC::JIT::getSlowCase): 17328 (JSC::JIT::linkSlowCase): 17329 * jit/JITArithmetic.cpp: 17330 (JSC::JIT::compileBinaryArithOpSlowCase): 17331 * jit/JITCall.cpp: 17332 (JSC::JIT::compileOpCallInitializeCallFrame): 17333 (JSC::JIT::compileOpCall): 17334 (JSC::JIT::compileOpCallSlowCase): 17335 * jit/JITInlineMethods.h: 17336 (JSC::JIT::emitJumpSlowCaseIfNotJSCell): 17337 (JSC::JIT::linkSlowCaseIfNotJSCell): 17338 * jit/JITPropertyAccess.cpp: 17339 (JSC::JIT::compileGetByIdHotPath): 17340 (JSC::JIT::compilePutByIdHotPath): 17341 (JSC::JIT::compileGetByIdSlowCase): 17342 (JSC::JIT::compilePutByIdSlowCase): 17343 17344 2008-12-12 Cameron Zwarich <zwarich (a] apple.com> 17345 17346 Reviewed by Sam Weinig. 17347 17348 Bug 22828: Do not inspect bytecode instruction stream for op_get_by_id exception information 17349 <https://bugs.webkit.org/show_bug.cgi?id=22828> 17350 17351 In order to remove the bytecode instruction stream after generating 17352 native code, all inspection of bytecode instructions at runtime must 17353 be removed. One particular instance of this is the special handling of 17354 exceptions thrown by the op_get_by_id emitted directly before an 17355 op_construct or an op_instanceof. This patch moves that information to 17356 an auxiliary data structure in CodeBlock. 17357 17358 * bytecode/CodeBlock.cpp: 17359 (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): 17360 * bytecode/CodeBlock.h: 17361 (JSC::CodeBlock::addGetByIdExceptionInfo): 17362 * bytecompiler/BytecodeGenerator.cpp: 17363 (JSC::BytecodeGenerator::emitConstruct): 17364 * bytecompiler/BytecodeGenerator.h: 17365 (JSC::BytecodeGenerator::emitGetByIdExceptionInfo): 17366 * parser/Nodes.cpp: 17367 (JSC::InstanceOfNode::emitBytecode): 17368 * runtime/ExceptionHelpers.cpp: 17369 (JSC::createNotAnObjectError): 17370 17371 2008-12-12 Sam Weinig <sam (a] webkit.org> 17372 17373 Reviewed by Geoffrey Garen. 17374 17375 Change exception information accessors to take offsets into the bytecode 17376 instruction buffer instead of pointers so that they can work even even 17377 if the bytecode buffer is purged. 17378 17379 * bytecode/CodeBlock.cpp: 17380 (JSC::instructionOffsetForNth): 17381 (JSC::CodeBlock::handlerForBytecodeOffset): 17382 (JSC::CodeBlock::lineNumberForBytecodeOffset): 17383 (JSC::CodeBlock::expressionRangeForBytecodeOffset): 17384 * bytecode/CodeBlock.h: 17385 * bytecode/SamplingTool.cpp: 17386 (JSC::SamplingTool::dump): 17387 * interpreter/Interpreter.cpp: 17388 (JSC::Interpreter::throwException): 17389 (JSC::Interpreter::privateExecute): 17390 (JSC::Interpreter::retrieveLastCaller): 17391 * jit/JIT.cpp: 17392 (JSC::JIT::privateCompileMainPass): 17393 * runtime/ExceptionHelpers.cpp: 17394 (JSC::createUndefinedVariableError): 17395 (JSC::createInvalidParamError): 17396 (JSC::createNotAConstructorError): 17397 (JSC::createNotAFunctionError): 17398 (JSC::createNotAnObjectError): 17399 17400 2008-12-12 Geoffrey Garen <ggaren (a] apple.com> 17401 17402 Reviewed by Cameron Zwarich. 17403 17404 Tiny bit of refactoring in quantifier generation. 17405 17406 * wrec/WRECGenerator.cpp: 17407 (JSC::WREC::Generator::generateNonGreedyQuantifier): 17408 (JSC::WREC::Generator::generateGreedyQuantifier): 17409 17410 2008-12-11 Sam Weinig <sam (a] webkit.org> 17411 17412 Reviewed by Geoffrey Garen. 17413 17414 Remove dependancy on having the Instruction buffer in order to 17415 deref Structures used for property access and global resolves. 17416 Instead, we put references to the necessary Structures in auxiliary 17417 data structures on the CodeBlock. This is not an ideal solution, 17418 as we still pay for having the Structures in two places and we 17419 would like to eventually just hold on to offsets into the machine 17420 code buffer. 17421 17422 - Also removes CodeBlock bloat in non-JIT by #ifdefing the JIT 17423 only data structures. 17424 17425 * GNUmakefile.am: 17426 * JavaScriptCore.pri: 17427 * JavaScriptCore.scons: 17428 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 17429 * JavaScriptCore.xcodeproj/project.pbxproj: 17430 * JavaScriptCoreSources.bkl: 17431 * bytecode/CodeBlock.cpp: 17432 (JSC::isGlobalResolve): 17433 (JSC::isPropertyAccess): 17434 (JSC::instructionOffsetForNth): 17435 (JSC::printGlobalResolveInfo): 17436 (JSC::printStructureStubInfo): 17437 (JSC::CodeBlock::printStructures): 17438 (JSC::CodeBlock::dump): 17439 (JSC::CodeBlock::~CodeBlock): 17440 (JSC::CodeBlock::shrinkToFit): 17441 * bytecode/CodeBlock.h: 17442 (JSC::GlobalResolveInfo::GlobalResolveInfo): 17443 (JSC::getNativePC): 17444 (JSC::CodeBlock::instructions): 17445 (JSC::CodeBlock::getStubInfo): 17446 (JSC::CodeBlock::getBytecodeIndex): 17447 (JSC::CodeBlock::addPropertyAccessInstruction): 17448 (JSC::CodeBlock::addGlobalResolveInstruction): 17449 (JSC::CodeBlock::numberOfStructureStubInfos): 17450 (JSC::CodeBlock::addStructureStubInfo): 17451 (JSC::CodeBlock::structureStubInfo): 17452 (JSC::CodeBlock::addGlobalResolveInfo): 17453 (JSC::CodeBlock::globalResolveInfo): 17454 (JSC::CodeBlock::numberOfCallLinkInfos): 17455 (JSC::CodeBlock::addCallLinkInfo): 17456 (JSC::CodeBlock::callLinkInfo): 17457 * bytecode/Instruction.h: 17458 (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): 17459 (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): 17460 * bytecode/Opcode.h: 17461 (JSC::): 17462 * bytecode/StructureStubInfo.cpp: Copied from bytecode/CodeBlock.cpp. 17463 (JSC::StructureStubInfo::deref): 17464 * bytecode/StructureStubInfo.h: Copied from bytecode/CodeBlock.h. 17465 (JSC::StructureStubInfo::StructureStubInfo): 17466 (JSC::StructureStubInfo::initGetByIdSelf): 17467 (JSC::StructureStubInfo::initGetByIdProto): 17468 (JSC::StructureStubInfo::initGetByIdChain): 17469 (JSC::StructureStubInfo::initGetByIdSelfList): 17470 (JSC::StructureStubInfo::initGetByIdProtoList): 17471 (JSC::StructureStubInfo::initPutByIdTransition): 17472 (JSC::StructureStubInfo::initPutByIdReplace): 17473 (JSC::StructureStubInfo::): 17474 * bytecompiler/BytecodeGenerator.cpp: 17475 (JSC::BytecodeGenerator::emitResolve): 17476 (JSC::BytecodeGenerator::emitGetById): 17477 (JSC::BytecodeGenerator::emitPutById): 17478 (JSC::BytecodeGenerator::emitCall): 17479 (JSC::BytecodeGenerator::emitConstruct): 17480 (JSC::BytecodeGenerator::emitCatch): 17481 * interpreter/Interpreter.cpp: 17482 (JSC::Interpreter::tryCTICachePutByID): 17483 (JSC::Interpreter::tryCTICacheGetByID): 17484 (JSC::Interpreter::cti_op_get_by_id_self_fail): 17485 (JSC::getPolymorphicAccessStructureListSlot): 17486 (JSC::Interpreter::cti_op_get_by_id_proto_list): 17487 (JSC::Interpreter::cti_op_resolve_global): 17488 * jit/JIT.cpp: 17489 (JSC::JIT::JIT): 17490 (JSC::JIT::privateCompileMainPass): 17491 (JSC::JIT::privateCompileSlowCases): 17492 (JSC::JIT::privateCompile): 17493 * jit/JITPropertyAccess.cpp: 17494 (JSC::JIT::compileGetByIdHotPath): 17495 (JSC::JIT::compilePutByIdHotPath): 17496 (JSC::JIT::compileGetByIdSlowCase): 17497 (JSC::JIT::compilePutByIdSlowCase): 17498 (JSC::JIT::privateCompileGetByIdSelfList): 17499 (JSC::JIT::privateCompileGetByIdProtoList): 17500 (JSC::JIT::privateCompileGetByIdChainList): 17501 17502 2008-12-11 Gavin Barraclough <barraclough (a] apple.com> 17503 17504 Reviewed by Oliver Hunt. 17505 17506 Remove CTI_ARGUMENTS mode, use va_start implementation on Windows, 17507 unifying JIT callback (cti_*) argument access on OS X & Windows 17508 17509 No performance impact. 17510 17511 * interpreter/Interpreter.h: 17512 * jit/JIT.cpp: 17513 (JSC::JIT::privateCompileCTIMachineTrampolines): 17514 * jit/JIT.h: 17515 * jit/JITInlineMethods.h: 17516 (JSC::JIT::emitCTICall): 17517 * jit/JITPropertyAccess.cpp: 17518 (JSC::JIT::privateCompilePutByIdTransition): 17519 * wtf/Platform.h: 17520 17521 2008-12-11 Holger Freyther <zecke (a] selfish.org> 17522 17523 Reviewed by Simon Hausmann. 17524 17525 https://bugs.webkit.org/show_bug.cgi?id=20953 17526 17527 For Qt it is not pratical to have a FontCache and GlyphPageTreeNode 17528 implementation. This is one of the reasons why the Qt port is currently not 17529 using WebCore/platform/graphics/Font.cpp. By allowing to not use 17530 the simple/fast-path the Qt port will be able to use it. 17531 17532 Introduce USE(FONT_FAST_PATH) and define it for every port but the 17533 Qt one. 17534 17535 * wtf/Platform.h: Enable USE(FONT_FAST_PATH) 17536 17537 2008-12-11 Gabor Loki <loki (a] inf.u-szeged.hu> 17538 17539 Reviewed by Darin Adler and landed by Holger Freyther. 17540 17541 <https://bugs.webkit.org/show_bug.cgi?id=22648> 17542 Fix threading on Qt-port and Gtk-port for Sampling tool. 17543 17544 * wtf/ThreadingGtk.cpp: 17545 (WTF::waitForThreadCompletion): 17546 * wtf/ThreadingQt.cpp: 17547 (WTF::waitForThreadCompletion): 17548 17549 2008-12-10 Cameron Zwarich <zwarich (a] apple.com> 17550 17551 Reviewed by Oliver Hunt. 17552 17553 Bug 22734: Debugger crashes when stepping into a function call in a return statement 17554 <https://bugs.webkit.org/show_bug.cgi?id=22734> 17555 <rdar://problem/6426796> 17556 17557 * bytecompiler/BytecodeGenerator.cpp: 17558 (JSC::BytecodeGenerator::BytecodeGenerator): The DebuggerCallFrame uses 17559 the 'this' value stored in a callFrame, so op_convert_this should be 17560 emitted at the beginning of a function body when generating bytecode 17561 with debug hooks. 17562 * debugger/DebuggerCallFrame.cpp: 17563 (JSC::DebuggerCallFrame::thisObject): The assertion inherent in the call 17564 to asObject() here is valid, because any 'this' value should have been 17565 converted to a JSObject*. 17566 17567 2008-12-10 Gavin Barraclough <barraclough (a] apple.com> 17568 17569 Reviewed by Geoff Garen. 17570 17571 Port more of the JIT to use the MacroAssembler interface. 17572 17573 Everything in the main pass, bar a few corner cases (operations with required 17574 registers, or calling convention code). Slightly refactors array creation, 17575 moving the offset calculation into the callFrame into C code (reducing code 17576 planted). 17577 17578 Overall this appears to be a 1% win on v8-tests, due to the smaller immediates 17579 being planted (in jfalse in particular). 17580 17581 * interpreter/Interpreter.cpp: 17582 (JSC::Interpreter::cti_op_new_array): 17583 * jit/JIT.cpp: 17584 (JSC::JIT::privateCompileMainPass): 17585 (JSC::JIT::privateCompileSlowCases): 17586 * jit/JIT.h: 17587 * wrec/WRECGenerator.cpp: 17588 (JSC::WREC::Generator::generateEnter): 17589 17590 2008-12-10 Sam Weinig <sam (a] webkit.org> 17591 17592 Fix non-JIT builds. 17593 17594 * bytecode/CodeBlock.h: 17595 17596 2008-12-10 Sam Weinig <sam (a] webkit.org> 17597 17598 Reviewed by Geoffrey Garen. 17599 17600 <rdar://problem/6428332> Remove the CTI return address table from CodeBlock 17601 17602 Step 2: 17603 17604 Convert the return address table from a HashMap to a sorted Vector. This 17605 reduces the size of the data structure by ~4.5MB on Membuster head. 17606 17607 SunSpider reports a 0.5% progression. 17608 17609 * bytecode/CodeBlock.cpp: 17610 (JSC::sizeInBytes): Generic method to get the cost of a Vector. 17611 (JSC::CodeBlock::dumpStatistics): Add dumping of member sizes. 17612 * bytecode/CodeBlock.h: 17613 (JSC::PC::PC): Struct representing NativePC -> VirtualPC mappings. 17614 (JSC::getNativePC): Helper for binary chop. 17615 (JSC::CodeBlock::getBytecodeIndex): Used to get the VirtualPC from a 17616 NativePC using a binary chop of the pcVector. 17617 (JSC::CodeBlock::pcVector): Accessor. 17618 17619 * interpreter/Interpreter.cpp: 17620 (JSC::vPCForPC): Use getBytecodeIndex instead of jitReturnAddressVPCMap().get(). 17621 (JSC::Interpreter::cti_op_instanceof): Ditto. 17622 (JSC::Interpreter::cti_op_resolve): Ditto. 17623 (JSC::Interpreter::cti_op_resolve_func): Ditto. 17624 (JSC::Interpreter::cti_op_resolve_skip): Ditto. 17625 (JSC::Interpreter::cti_op_resolve_with_base): Ditto. 17626 (JSC::Interpreter::cti_op_throw): Ditto. 17627 (JSC::Interpreter::cti_op_in): Ditto. 17628 (JSC::Interpreter::cti_vm_throw): Ditto. 17629 17630 * jit/JIT.cpp: 17631 (JSC::JIT::privateCompile): Reserve exact capacity and fill the pcVector. 17632 17633 2008-12-09 Geoffrey Garen <ggaren (a] apple.com> 17634 17635 Reviewed by Oliver Hunt. 17636 17637 Added WREC support for an assertion followed by a quantifier. Fixed 17638 PCRE to match. 17639 17640 * wrec/WRECParser.cpp: 17641 (JSC::WREC::Parser::parseParentheses): Throw away the quantifier, since 17642 it's meaningless. (Firefox does the same.) 17643 17644 * pcre/pcre_compile.cpp: 17645 (compileBranch): ditto. 17646 17647 2008-12-09 Geoffrey Garen <ggaren (a] apple.com> 17648 17649 Reviewed by Cameron Zwarich. 17650 17651 In preparation for compiling WREC without PCRE: 17652 17653 Further relaxed WREC's parsing to be more web-compatible. Fixed PCRE to 17654 match in cases where it didn't already. 17655 17656 Changed JavaScriptCore to report syntax errors detected by WREC, rather 17657 than falling back on PCRE any time WREC sees an error. 17658 17659 * pcre/pcre_compile.cpp: 17660 (checkEscape): Relaxed parsing of \c and \N escapes to be more 17661 web-compatible. 17662 17663 * runtime/RegExp.cpp: 17664 (JSC::RegExp::RegExp): Only fall back on PCRE if WREC has not reported 17665 a syntax error. 17666 17667 * wrec/WREC.cpp: 17668 (JSC::WREC::Generator::compileRegExp): Fixed some error reporting to 17669 match PCRE. 17670 17671 * wrec/WRECParser.cpp: Added error messages that match PCRE. 17672 17673 (JSC::WREC::Parser::consumeGreedyQuantifier): 17674 (JSC::WREC::Parser::parseParentheses): 17675 (JSC::WREC::Parser::parseCharacterClass): 17676 (JSC::WREC::Parser::parseNonCharacterEscape): Updated the above functions to 17677 use the new setError API. 17678 17679 (JSC::WREC::Parser::consumeEscape): Relaxed parsing of \c \N \u \x \B 17680 to be more web-compatible. 17681 17682 (JSC::WREC::Parser::parseAlternative): Distinguish between a malformed 17683 quantifier and a quantifier with no prefix, like PCRE does. 17684 17685 (JSC::WREC::Parser::consumeParenthesesType): Updated to use the new setError API. 17686 17687 * wrec/WRECParser.h: 17688 (JSC::WREC::Parser::error): 17689 (JSC::WREC::Parser::syntaxError): 17690 (JSC::WREC::Parser::parsePattern): 17691 (JSC::WREC::Parser::reset): 17692 (JSC::WREC::Parser::setError): Store error messages instead of error codes, 17693 to provide for exception messages. Use a setter for reporting errors, so 17694 errors detected early are not overwritten by errors detected later. 17695 17696 2008-12-09 Gavin Barraclough <barraclough (a] apple.com> 17697 17698 Reviewed by Oliver Hunt. 17699 17700 Use va_args to access cti function arguments. 17701 https://bugs.webkit.org/show_bug.cgi?id=22774 17702 17703 This may be a minor regression, but we'll take the hit if so to reduce fragility. 17704 17705 * interpreter/Interpreter.cpp: 17706 * interpreter/Interpreter.h: 17707 17708 2008-12-09 Sam Weinig <sam (a] webkit.org> 17709 17710 Reviewed twice by Cameron Zwarich. 17711 17712 Fix for https://bugs.webkit.org/show_bug.cgi?id=22752 17713 Clear SymbolTable after codegen for Function codeblocks that 17714 don't require an activation 17715 17716 This is a ~1.5MB improvement on Membuster-head. 17717 17718 * bytecode/CodeBlock.cpp: 17719 (JSC::CodeBlock::dumpStatistics): Add logging of non-empty symbol tables 17720 and total size used by symbol tables. 17721 * bytecompiler/BytecodeGenerator.cpp: 17722 (JSC::BytecodeGenerator::generate): Clear the symbol table here. 17723 17724 2008-12-09 Sam Weinig <sam (a] webkit.org> 17725 17726 Reviewed by Geoffrey Garen. 17727 17728 Remove unnecessary extra lookup when throwing an exception. 17729 We used to first lookup the target offset using getHandlerForVPC 17730 and then we would lookup the native code stub using 17731 nativeExceptionCodeForHandlerVPC. Instead, we can just pass around 17732 the HandlerInfo. 17733 17734 * bytecode/CodeBlock.cpp: 17735 (JSC::CodeBlock::handlerForVPC): Return the HandlerInfo. 17736 * bytecode/CodeBlock.h: Remove nativeExceptionCodeForHandlerVPC. 17737 17738 * interpreter/Interpreter.cpp: 17739 (JSC::Interpreter::throwException): Return a HandlerInfo instead of 17740 and Instruction offset. 17741 (JSC::Interpreter::privateExecute): Get the offset from HandlerInfo. 17742 (JSC::Interpreter::cti_op_throw): Get the native code from the HandleInfo. 17743 (JSC::Interpreter::cti_vm_throw): Ditto. 17744 * interpreter/Interpreter.h: 17745 17746 2008-12-09 Eric Seidel <eric (a] webkit.org> 17747 17748 Build fix only, no review. 17749 17750 Speculative fix for the Chromium-Windows bot. 17751 Add JavaScriptCore/os-win32 to the include path (for stdint.h) 17752 Strangely it builds fine on my local windows box (or at least doesn't hit this error) 17753 17754 * JavaScriptCore.scons: 17755 17756 2008-12-09 Eric Seidel <eric (a] webkit.org> 17757 17758 No review, build fix only. 17759 17760 Add ExecutableAllocator files missing from Scons build. 17761 17762 * JavaScriptCore.scons: 17763 17764 2008-12-09 Dimitri Glazkov <dglazkov (a] chromium.org> 17765 17766 Reviewed by Timothy Hatcher. 17767 17768 https://bugs.webkit.org/show_bug.cgi?id=22631 17769 Allow ScriptCallFrame query names of functions in the call stack. 17770 17771 * JavaScriptCore.exp: added InternalFunction::name and 17772 UString operator==() as exported symbol 17773 17774 2008-12-08 Judit Jasz <jasy (a] inf.u-szeged.hu> 17775 17776 Reviewed and tweaked by Cameron Zwarich. 17777 17778 Bug 22352: Annotate opcodes with their length 17779 <https://bugs.webkit.org/show_bug.cgi?id=22352> 17780 17781 * bytecode/Opcode.cpp: 17782 * bytecode/Opcode.h: 17783 * interpreter/Interpreter.cpp: 17784 (JSC::Interpreter::privateExecute): 17785 * jit/JIT.cpp: 17786 (JSC::JIT::privateCompileMainPass): 17787 (JSC::JIT::privateCompileSlowCases): 17788 17789 2008-12-08 Geoffrey Garen <ggaren (a] apple.com> 17790 17791 Reviewed by Oliver Hunt. 17792 17793 Implemented more of the relaxed and somewhat weird rules for deciding 17794 how to interpret a non-pattern-character. 17795 17796 * wrec/Escapes.h: 17797 (JSC::WREC::Escape::): 17798 (JSC::WREC::Escape::Escape): Eliminated Escape::None because it was 17799 unused. If you see an '\\', it's either a valid escape or an error. 17800 17801 * wrec/Quantifier.h: 17802 (JSC::WREC::Quantifier::Quantifier): 17803 * wrec/WRECGenerator.cpp: 17804 (JSC::WREC::Generator::generateNonGreedyQuantifier): 17805 (JSC::WREC::Generator::generateGreedyQuantifier): Renamed "noMaxSpecified" 17806 to "Infinity", since that's what it means. 17807 17808 * wrec/WRECParser.cpp: 17809 (JSC::WREC::Parser::consumeGreedyQuantifier): Re-wrote {n,m} parsing rules 17810 because they were too strict before. Added support for backtracking 17811 in the case where the {n,m} fails to parse as a quantifier, and yet is 17812 not a syntax error. 17813 17814 (JSC::WREC::Parser::parseCharacterClass): 17815 (JSC::WREC::Parser::parseNonCharacterEscape): Eliminated Escape::None, 17816 as above. 17817 17818 (JSC::WREC::Parser::consumeEscape): Don't treat ASCII and _ escapes 17819 as syntax errors. See fast/regex/non-pattern-characters.html. 17820 17821 * wrec/WRECParser.h: 17822 (JSC::WREC::Parser::SavedState::SavedState): 17823 (JSC::WREC::Parser::SavedState::restore): Added a state backtracker, 17824 since parsing {n,m} forms requires backtracking if the form turns out 17825 not to be a quantifier. 17826 17827 2008-12-08 Geoffrey Garen <ggaren (a] apple.com> 17828 17829 Reviewed by Oliver Hunt. 17830 17831 Refactored WREC parsing so that only one piece of code needs to know 17832 the relaxed and somewhat weird rules for deciding how to interpret a 17833 non-pattern-character, in preparation for implementing those rules. 17834 17835 Also, implemented the relaxed and somewhat weird rules for '}' and ']'. 17836 17837 * wrec/WREC.cpp: Reduced the regular expression size limit. Now that 17838 WREC handles ']' properly, it compiles fast/js/regexp-charclass-crash.html, 17839 which makes it hang at the old limit. (The old limit was based on the 17840 misimpression that the same value in PCRE limited the regular expression 17841 pattern size; in reality, it limited the expected compiled regular 17842 expression size. WREC doesn't have a way to calculate an expected 17843 compiled regular expression size, but this should be good enough.) 17844 17845 * wrec/WRECParser.cpp: 17846 (JSC::WREC::parsePatternCharacterSequence): Nixed this function because 17847 it contained a second copy of the logic for handling non-pattern-characters, 17848 which is about to get a lot more complicated. 17849 17850 (JSC::WREC::PatternCharacterSequence::PatternCharacterSequence): 17851 (JSC::WREC::PatternCharacterSequence::size): 17852 (JSC::WREC::PatternCharacterSequence::append): 17853 (JSC::WREC::PatternCharacterSequence::flush): Helper object for generating 17854 an optimized sequence of pattern characters. 17855 17856 (JSC::WREC::Parser::parseNonCharacterEscape): Renamed to reflect the fact 17857 that the main parseAlternative loop handles character escapes. 17858 17859 (JSC::WREC::Parser::parseAlternative): Moved pattern character sequence 17860 logic from parsePatternCharacterSequence to here, using 17861 PatternCharacterSequence to help with the details. 17862 17863 * wrec/WRECParser.h: Updated for renames. 17864 17865 2008-12-08 Alexey Proskuryakov <ap (a] webkit.org> 17866 17867 Reviewed by Geoff Garen. 17868 17869 <rdar://problem/6166088> Give JSGlobalContextCreate a behavior that is concurrency aware, 17870 and un-deprecate it 17871 17872 * API/JSContextRef.cpp: (JSGlobalContextCreate): 17873 * API/JSContextRef.h: 17874 Use a unique context group for the context, unless the application was linked against old 17875 JavaScriptCore. 17876 17877 2008-12-08 Sam Weinig <sam (a] webkit.org> 17878 17879 Reviewed by Cameron Zwarich. 17880 17881 Fix for <rdar://problem/6428332> Remove the CTI return address table from CodeBlock 17882 17883 Step 1: 17884 17885 Remove use of jitReturnAddressVPCMap when looking for vPC to store Structures 17886 in for cached lookup. Instead, use the offset in the StructureStubInfo that is 17887 already required. 17888 17889 * bytecode/CodeBlock.cpp: 17890 (JSC::CodeBlock::dumpStatistics): Fix extraneous semicolon. 17891 * interpreter/Interpreter.cpp: 17892 (JSC::Interpreter::tryCTICachePutByID): 17893 (JSC::Interpreter::tryCTICacheGetByID): 17894 (JSC::Interpreter::cti_op_get_by_id_self_fail): 17895 (JSC::Interpreter::cti_op_get_by_id_proto_list): 17896 * jit/JIT.h: 17897 (JSC::JIT::compileGetByIdSelf): 17898 (JSC::JIT::compileGetByIdProto): 17899 (JSC::JIT::compileGetByIdChain): 17900 (JSC::JIT::compilePutByIdReplace): 17901 (JSC::JIT::compilePutByIdTransition): 17902 * jit/JITPropertyAccess.cpp: 17903 (JSC::JIT::privateCompilePutByIdTransition): 17904 (JSC::JIT::patchGetByIdSelf): 17905 (JSC::JIT::patchPutByIdReplace): 17906 (JSC::JIT::privateCompilePatchGetArrayLength): Remove extra call to getStubInfo. 17907 (JSC::JIT::privateCompileGetByIdSelf): 17908 (JSC::JIT::privateCompileGetByIdProto): 17909 (JSC::JIT::privateCompileGetByIdChain): 17910 (JSC::JIT::privateCompilePutByIdReplace): 17911 17912 2008-12-08 Gavin Barraclough <barraclough (a] apple.com> 17913 17914 Reviewed by Oliver Hunt. 17915 17916 Port the op_j?n?eq_null JIT code generation to use the MacroAssembler, 17917 and clean up slightly at the same time. The 'j' forms currently compare, 17918 then set a register, then compare again, then branch. Branch directly on 17919 the result of the first compare. 17920 17921 Around a 1% progression on deltablue, crypto & early boyer, for about 1/2% 17922 overall on v8-tests. 17923 17924 * jit/JIT.cpp: 17925 (JSC::JIT::privateCompileMainPass): 17926 * jit/JITPropertyAccess.cpp: 17927 (JSC::JIT::compileGetByIdSlowCase): 17928 17929 2008-12-08 Gavin Barraclough <barraclough (a] apple.com> 17930 17931 Reviewed by Geoff Garen. 17932 17933 Expand MacroAssembler to support more operations, required by the JIT. 17934 17935 Generally adds more operations and permutations of operands to the existing 17936 interface. Rename 'jset' to 'jnz' and 'jnset' to 'jz', which seem clearer, 17937 and require that immediate pointer operands (though not pointer addresses to 17938 load and store instructions) are wrapped in a ImmPtr() type, akin to Imm32(). 17939 17940 No performance impact. 17941 17942 * assembler/MacroAssembler.h: 17943 (JSC::MacroAssembler::): 17944 (JSC::MacroAssembler::ImmPtr::ImmPtr): 17945 (JSC::MacroAssembler::add32): 17946 (JSC::MacroAssembler::and32): 17947 (JSC::MacroAssembler::or32): 17948 (JSC::MacroAssembler::sub32): 17949 (JSC::MacroAssembler::xor32): 17950 (JSC::MacroAssembler::loadPtr): 17951 (JSC::MacroAssembler::load32): 17952 (JSC::MacroAssembler::storePtr): 17953 (JSC::MacroAssembler::store32): 17954 (JSC::MacroAssembler::poke): 17955 (JSC::MacroAssembler::move): 17956 (JSC::MacroAssembler::testImm32): 17957 (JSC::MacroAssembler::jae32): 17958 (JSC::MacroAssembler::jb32): 17959 (JSC::MacroAssembler::jePtr): 17960 (JSC::MacroAssembler::je32): 17961 (JSC::MacroAssembler::jnePtr): 17962 (JSC::MacroAssembler::jne32): 17963 (JSC::MacroAssembler::jnzPtr): 17964 (JSC::MacroAssembler::jnz32): 17965 (JSC::MacroAssembler::jzPtr): 17966 (JSC::MacroAssembler::jz32): 17967 (JSC::MacroAssembler::joSub32): 17968 (JSC::MacroAssembler::jump): 17969 (JSC::MacroAssembler::sete32): 17970 (JSC::MacroAssembler::setne32): 17971 (JSC::MacroAssembler::setnz32): 17972 (JSC::MacroAssembler::setz32): 17973 * assembler/X86Assembler.h: 17974 (JSC::X86Assembler::addl_mr): 17975 (JSC::X86Assembler::andl_i8r): 17976 (JSC::X86Assembler::cmpl_rm): 17977 (JSC::X86Assembler::cmpl_mr): 17978 (JSC::X86Assembler::cmpl_i8m): 17979 (JSC::X86Assembler::subl_mr): 17980 (JSC::X86Assembler::testl_i32m): 17981 (JSC::X86Assembler::xorl_i32r): 17982 (JSC::X86Assembler::movl_rm): 17983 (JSC::X86Assembler::modRm_opmsib): 17984 * jit/JIT.cpp: 17985 (JSC::JIT::privateCompileMainPass): 17986 * jit/JITInlineMethods.h: 17987 (JSC::JIT::emitGetVirtualRegister): 17988 (JSC::JIT::emitPutCTIArgConstant): 17989 (JSC::JIT::emitPutCTIParam): 17990 (JSC::JIT::emitPutImmediateToCallFrameHeader): 17991 (JSC::JIT::emitInitRegister): 17992 (JSC::JIT::checkStructure): 17993 (JSC::JIT::emitJumpIfJSCell): 17994 (JSC::JIT::emitJumpIfNotJSCell): 17995 (JSC::JIT::emitJumpSlowCaseIfNotImmNum): 17996 17997 2008-12-08 Geoffrey Garen <ggaren (a] apple.com> 17998 17999 Reviewed by Sam Weinig. 18000 18001 Fixed a bug where WREC would allow a quantifier whose minimum was 18002 greater than its maximum. 18003 18004 * wrec/Quantifier.h: 18005 (JSC::WREC::Quantifier::Quantifier): ASSERT that the quantifier is not 18006 backwards. 18007 18008 * wrec/WRECParser.cpp: 18009 (JSC::WREC::Parser::consumeGreedyQuantifier): Verify that the minimum 18010 is not greater than the maximum. 18011 18012 2008-12-08 Eric Seidel <eric (a] webkit.org> 18013 18014 Build fix only, no review. 18015 18016 * JavaScriptCore.scons: add bytecode/JumpTable.cpp 18017 18018 2008-12-08 Sam Weinig <sam (a] webkit.org> 18019 18020 Reviewed by Geoffrey Garen. 18021 18022 Patch for https://bugs.webkit.org/show_bug.cgi?id=22716 18023 <rdar://problem/6428315> 18024 Add RareData structure to CodeBlock for infrequently used auxiliary data 18025 members. 18026 18027 Reduces memory on Membuster-head by ~.5MB 18028 18029 * bytecode/CodeBlock.cpp: 18030 (JSC::CodeBlock::dump): 18031 (JSC::CodeBlock::dumpStatistics): 18032 (JSC::CodeBlock::mark): 18033 (JSC::CodeBlock::getHandlerForVPC): 18034 (JSC::CodeBlock::nativeExceptionCodeForHandlerVPC): 18035 (JSC::CodeBlock::shrinkToFit): 18036 * bytecode/CodeBlock.h: 18037 (JSC::CodeBlock::numberOfExceptionHandlers): 18038 (JSC::CodeBlock::addExceptionHandler): 18039 (JSC::CodeBlock::exceptionHandler): 18040 (JSC::CodeBlock::addFunction): 18041 (JSC::CodeBlock::function): 18042 (JSC::CodeBlock::addUnexpectedConstant): 18043 (JSC::CodeBlock::unexpectedConstant): 18044 (JSC::CodeBlock::addRegExp): 18045 (JSC::CodeBlock::regexp): 18046 (JSC::CodeBlock::numberOfImmediateSwitchJumpTables): 18047 (JSC::CodeBlock::addImmediateSwitchJumpTable): 18048 (JSC::CodeBlock::immediateSwitchJumpTable): 18049 (JSC::CodeBlock::numberOfCharacterSwitchJumpTables): 18050 (JSC::CodeBlock::addCharacterSwitchJumpTable): 18051 (JSC::CodeBlock::characterSwitchJumpTable): 18052 (JSC::CodeBlock::numberOfStringSwitchJumpTables): 18053 (JSC::CodeBlock::addStringSwitchJumpTable): 18054 (JSC::CodeBlock::stringSwitchJumpTable): 18055 (JSC::CodeBlock::evalCodeCache): 18056 (JSC::CodeBlock::createRareDataIfNecessary): 18057 18058 2008-11-26 Peter Kasting <pkasting (a] google.com> 18059 18060 Reviewed by Anders Carlsson. 18061 18062 https://bugs.webkit.org/show_bug.cgi?id=16814 18063 Allow ports to disable ActiveX->NPAPI conversion for Media Player. 18064 Improve handling of miscellaneous ActiveX objects. 18065 18066 * wtf/Platform.h: Add another ENABLE(...). 18067 18068 2008-12-08 Sam Weinig <sam (a] webkit.org> 18069 18070 Reviewed by Mark Rowe. 18071 18072 Add dumping of CodeBlock member structure usage. 18073 18074 * bytecode/CodeBlock.cpp: 18075 (JSC::CodeBlock::dumpStatistics): 18076 * bytecode/EvalCodeCache.h: 18077 (JSC::EvalCodeCache::isEmpty): 18078 18079 2008-12-08 David Kilzer <ddkilzer (a] apple.com> 18080 18081 Bug 22555: Sort "children" sections in Xcode project files 18082 18083 <https://bugs.webkit.org/show_bug.cgi?id=22555> 18084 18085 Reviewed by Eric Seidel. 18086 18087 * JavaScriptCore.xcodeproj/project.pbxproj: Sorted. 18088 18089 2008-12-08 Tony Chang <tony (a] chromium.org> 18090 18091 Reviewed by Eric Seidel. 18092 18093 Enable Pan scrolling only when building on PLATFORM(WIN_OS) 18094 Previously platforms like Apple Windows WebKit, Cairo Windows WebKit, 18095 Wx and Chromium were enabling it explicitly, now we just turn it on 18096 for all WIN_OS, later platforms can turn it off as needed on Windows 18097 (or turn it on under Linux, etc.) 18098 https://bugs.webkit.org/show_bug.cgi?id=22698 18099 18100 * wtf/Platform.h: 18101 18102 2008-12-08 Sam Weinig <sam (a] webkit.org> 18103 18104 Reviewed by Cameron Zwarich. 18105 18106 Add basic memory statistics dumping for CodeBlock. 18107 18108 * bytecode/CodeBlock.cpp: 18109 (JSC::CodeBlock::dumpStatistics): 18110 (JSC::CodeBlock::CodeBlock): 18111 (JSC::CodeBlock::~CodeBlock): 18112 * bytecode/CodeBlock.h: 18113 18114 2008-12-08 Simon Hausmann <simon.hausmann (a] nokia.com> 18115 18116 Fix the Linux build with newer gcc/glibc. 18117 18118 * jit/ExecutableAllocatorPosix.cpp: Include unistd.h for 18119 getpagesize(), according to 18120 http://opengroup.org/onlinepubs/007908775/xsh/getpagesize.html 18121 18122 2008-12-08 Simon Hausmann <simon.hausmann (a] nokia.com> 18123 18124 Fix the build with Qt on Windows. 18125 18126 * JavaScriptCore.pri: Compile ExecutableAllocatorWin.cpp on Windows. 18127 18128 2008-12-07 Oliver Hunt <oliver (a] apple.com> 18129 18130 Reviewed by NOBODY (Buildfix). 18131 18132 Fix non-WREC builds 18133 18134 * runtime/RegExp.cpp: 18135 (JSC::RegExp::RegExp): 18136 18137 2008-12-07 Oliver Hunt <oliver (a] apple.com> 18138 18139 Reviewed by NOBODY (Build fix). 18140 18141 Put ENABLE(ASSEMBLER) guards around use of ExecutableAllocator in global data 18142 18143 Correct Qt and Gtk project files 18144 18145 * GNUmakefile.am: 18146 * JavaScriptCore.pri: 18147 * runtime/JSGlobalData.h: 18148 18149 2008-12-07 Oliver Hunt <oliver (a] apple.com> 18150 18151 Reviewed by NOBODY (Build fix). 18152 18153 Add new files to other projects. 18154 18155 * GNUmakefile.am: 18156 * JavaScriptCore.pri: 18157 * JavaScriptCore.pro: 18158 18159 2008-12-07 Oliver Hunt <oliver (a] apple.com> 18160 18161 Rubber stamped by Mark Rowe. 18162 18163 Rename ExecutableAllocatorMMAP to the more sensible ExecutableAllocatorPosix 18164 18165 * JavaScriptCore.xcodeproj/project.pbxproj: 18166 * jit/ExecutableAllocator.h: 18167 * jit/ExecutableAllocatorPosix.cpp: Renamed from JavaScriptCore/jit/ExecutableAllocatorMMAP.cpp. 18168 (JSC::ExecutableAllocator::intializePageSize): 18169 (JSC::ExecutablePool::systemAlloc): 18170 (JSC::ExecutablePool::systemRelease): 18171 18172 2008-12-07 Oliver Hunt <oliver (a] apple.com> 18173 18174 Reviewed by Cameron Zwarich and Sam Weinig 18175 18176 <rdar://problem/6309878> Need more granular control over allocation of executable memory (21783) 18177 <https://bugs.webkit.org/show_bug.cgi?id=21783> 18178 18179 Add a new allocator for use by the JIT that provides executable pages, so 18180 we can get rid of the current hack that makes the entire heap executable. 18181 18182 1-2% progression on SunSpider-v8, 1% on SunSpider. Reduces memory usage as well! 18183 18184 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 18185 * JavaScriptCore.vcproj/jsc/jsc.vcproj: 18186 * JavaScriptCore.xcodeproj/project.pbxproj: 18187 * assembler/AssemblerBuffer.h: 18188 (JSC::AssemblerBuffer::size): 18189 (JSC::AssemblerBuffer::executableCopy): 18190 * assembler/MacroAssembler.h: 18191 (JSC::MacroAssembler::size): 18192 (JSC::MacroAssembler::copyCode): 18193 * assembler/X86Assembler.h: 18194 (JSC::X86Assembler::size): 18195 (JSC::X86Assembler::executableCopy): 18196 * bytecode/CodeBlock.cpp: 18197 (JSC::CodeBlock::~CodeBlock): 18198 * bytecode/CodeBlock.h: 18199 (JSC::CodeBlock::executablePool): 18200 (JSC::CodeBlock::setExecutablePool): 18201 * bytecode/Instruction.h: 18202 (JSC::PolymorphicAccessStructureList::derefStructures): 18203 * interpreter/Interpreter.cpp: 18204 (JSC::Interpreter::~Interpreter): 18205 * interpreter/Interpreter.h: 18206 * jit/ExecutableAllocator.cpp: Added. 18207 * jit/ExecutableAllocator.h: Added. 18208 (JSC::ExecutablePool::create): 18209 (JSC::ExecutablePool::alloc): 18210 (JSC::ExecutablePool::~ExecutablePool): 18211 (JSC::ExecutablePool::available): 18212 (JSC::ExecutablePool::ExecutablePool): 18213 (JSC::ExecutablePool::poolAllocate): 18214 (JSC::ExecutableAllocator::ExecutableAllocator): 18215 (JSC::ExecutableAllocator::poolForSize): 18216 (JSC::ExecutablePool::sizeForAllocation): 18217 * jit/ExecutableAllocatorMMAP.cpp: Added. 18218 (JSC::ExecutableAllocator::intializePageSize): 18219 (JSC::ExecutablePool::systemAlloc): 18220 (JSC::ExecutablePool::systemRelease): 18221 * jit/ExecutableAllocatorWin.cpp: Added. 18222 (JSC::ExecutableAllocator::intializePageSize): 18223 (JSC::ExecutablePool::systemAlloc): 18224 (JSC::ExecutablePool::systemRelease): 18225 * jit/JIT.cpp: 18226 (JSC::JIT::privateCompile): 18227 (JSC::JIT::privateCompileCTIMachineTrampolines): 18228 * jit/JIT.h: 18229 (JSC::JIT::compileCTIMachineTrampolines): 18230 * jit/JITPropertyAccess.cpp: 18231 (JSC::JIT::privateCompilePutByIdTransition): 18232 (JSC::JIT::privateCompilePatchGetArrayLength): 18233 (JSC::JIT::privateCompileGetByIdSelf): 18234 (JSC::JIT::privateCompileGetByIdProto): 18235 (JSC::JIT::privateCompileGetByIdSelfList): 18236 (JSC::JIT::privateCompileGetByIdProtoList): 18237 (JSC::JIT::privateCompileGetByIdChainList): 18238 (JSC::JIT::privateCompileGetByIdChain): 18239 (JSC::JIT::privateCompilePutByIdReplace): 18240 * parser/Nodes.cpp: 18241 (JSC::RegExpNode::emitBytecode): 18242 * runtime/JSGlobalData.h: 18243 (JSC::JSGlobalData::poolForSize): 18244 * runtime/RegExp.cpp: 18245 (JSC::RegExp::RegExp): 18246 (JSC::RegExp::create): 18247 (JSC::RegExp::~RegExp): 18248 * runtime/RegExp.h: 18249 * runtime/RegExpConstructor.cpp: 18250 (JSC::constructRegExp): 18251 * runtime/RegExpPrototype.cpp: 18252 (JSC::regExpProtoFuncCompile): 18253 * runtime/StringPrototype.cpp: 18254 (JSC::stringProtoFuncMatch): 18255 (JSC::stringProtoFuncSearch): 18256 * wrec/WREC.cpp: 18257 (JSC::WREC::Generator::compileRegExp): 18258 * wrec/WRECGenerator.h: 18259 * wtf/FastMalloc.cpp: 18260 * wtf/FastMalloc.h: 18261 * wtf/TCSystemAlloc.cpp: 18262 (TryMmap): 18263 (TryVirtualAlloc): 18264 (TryDevMem): 18265 (TCMalloc_SystemRelease): 18266 18267 2008-12-06 Sam Weinig <sam (a] webkit.org> 18268 18269 Fix the Gtk build. 18270 18271 * jit/JITPropertyAccess.cpp: 18272 (JSC::JIT::compileGetByIdHotPath): 18273 (JSC::JIT::compilePutByIdHotPath): 18274 18275 2008-12-06 Sam Weinig <sam (a] webkit.org> 18276 18277 Reviewed by Cameron Zwarich, 18278 18279 Move CodeBlock constructor into the .cpp file. 18280 18281 Sunspider reports a .7% progression, but I can only assume this 18282 is noise. 18283 18284 * bytecode/CodeBlock.cpp: 18285 (JSC::CodeBlock::CodeBlock): 18286 * bytecode/CodeBlock.h: 18287 18288 2008-12-06 Sam Weinig <sam (a] webkit.org> 18289 18290 Reviewed by Cameron Zwarich. 18291 18292 Split JumpTable code into its own file. 18293 18294 * GNUmakefile.am: 18295 * JavaScriptCore.pri: 18296 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 18297 * JavaScriptCore.xcodeproj/project.pbxproj: 18298 * JavaScriptCoreSources.bkl: 18299 * bytecode/CodeBlock.cpp: 18300 * bytecode/CodeBlock.h: 18301 * bytecode/JumpTable.cpp: Copied from bytecode/CodeBlock.cpp. 18302 * bytecode/JumpTable.h: Copied from bytecode/CodeBlock.h. 18303 18304 2008-12-05 Sam Weinig <sam (a] webkit.org> 18305 18306 Reviewed by Cameron Zwarich. 18307 18308 Fix for https://bugs.webkit.org/show_bug.cgi?id=22715 18309 Encapsulate more CodeBlock members in preparation 18310 of moving some of them to a rare data structure. 18311 18312 * bytecode/CodeBlock.cpp: 18313 (JSC::locationForOffset): 18314 (JSC::printConditionalJump): 18315 (JSC::printGetByIdOp): 18316 (JSC::printPutByIdOp): 18317 (JSC::CodeBlock::printStructure): 18318 (JSC::CodeBlock::printStructures): 18319 (JSC::CodeBlock::dump): 18320 (JSC::CodeBlock::~CodeBlock): 18321 (JSC::CodeBlock::unlinkCallers): 18322 (JSC::CodeBlock::derefStructures): 18323 (JSC::CodeBlock::refStructures): 18324 (JSC::CodeBlock::mark): 18325 (JSC::CodeBlock::getHandlerForVPC): 18326 (JSC::CodeBlock::nativeExceptionCodeForHandlerVPC): 18327 (JSC::CodeBlock::lineNumberForVPC): 18328 (JSC::CodeBlock::expressionRangeForVPC): 18329 (JSC::CodeBlock::shrinkToFit): 18330 * bytecode/CodeBlock.h: 18331 (JSC::CodeBlock::CodeBlock): 18332 (JSC::CodeBlock::addCaller): 18333 (JSC::CodeBlock::removeCaller): 18334 (JSC::CodeBlock::isKnownNotImmediate): 18335 (JSC::CodeBlock::isConstantRegisterIndex): 18336 (JSC::CodeBlock::getConstant): 18337 (JSC::CodeBlock::isTemporaryRegisterIndex): 18338 (JSC::CodeBlock::getStubInfo): 18339 (JSC::CodeBlock::getCallLinkInfo): 18340 (JSC::CodeBlock::instructions): 18341 (JSC::CodeBlock::setJITCode): 18342 (JSC::CodeBlock::jitCode): 18343 (JSC::CodeBlock::ownerNode): 18344 (JSC::CodeBlock::setGlobalData): 18345 (JSC::CodeBlock::setThisRegister): 18346 (JSC::CodeBlock::thisRegister): 18347 (JSC::CodeBlock::setNeedsFullScopeChain): 18348 (JSC::CodeBlock::needsFullScopeChain): 18349 (JSC::CodeBlock::setUsesEval): 18350 (JSC::CodeBlock::usesEval): 18351 (JSC::CodeBlock::setUsesArguments): 18352 (JSC::CodeBlock::usesArguments): 18353 (JSC::CodeBlock::codeType): 18354 (JSC::CodeBlock::source): 18355 (JSC::CodeBlock::sourceOffset): 18356 (JSC::CodeBlock::addGlobalResolveInstruction): 18357 (JSC::CodeBlock::numberOfPropertyAccessInstructions): 18358 (JSC::CodeBlock::addPropertyAccessInstruction): 18359 (JSC::CodeBlock::propertyAccessInstruction): 18360 (JSC::CodeBlock::numberOfCallLinkInfos): 18361 (JSC::CodeBlock::addCallLinkInfo): 18362 (JSC::CodeBlock::callLinkInfo): 18363 (JSC::CodeBlock::numberOfJumpTargets): 18364 (JSC::CodeBlock::addJumpTarget): 18365 (JSC::CodeBlock::jumpTarget): 18366 (JSC::CodeBlock::lastJumpTarget): 18367 (JSC::CodeBlock::numberOfExceptionHandlers): 18368 (JSC::CodeBlock::addExceptionHandler): 18369 (JSC::CodeBlock::exceptionHandler): 18370 (JSC::CodeBlock::addExpressionInfo): 18371 (JSC::CodeBlock::numberOfLineInfos): 18372 (JSC::CodeBlock::addLineInfo): 18373 (JSC::CodeBlock::lastLineInfo): 18374 (JSC::CodeBlock::jitReturnAddressVPCMap): 18375 (JSC::CodeBlock::numberOfIdentifiers): 18376 (JSC::CodeBlock::addIdentifier): 18377 (JSC::CodeBlock::identifier): 18378 (JSC::CodeBlock::numberOfConstantRegisters): 18379 (JSC::CodeBlock::addConstantRegister): 18380 (JSC::CodeBlock::constantRegister): 18381 (JSC::CodeBlock::addFunction): 18382 (JSC::CodeBlock::function): 18383 (JSC::CodeBlock::addFunctionExpression): 18384 (JSC::CodeBlock::functionExpression): 18385 (JSC::CodeBlock::addUnexpectedConstant): 18386 (JSC::CodeBlock::unexpectedConstant): 18387 (JSC::CodeBlock::addRegExp): 18388 (JSC::CodeBlock::regexp): 18389 (JSC::CodeBlock::symbolTable): 18390 (JSC::CodeBlock::evalCodeCache): 18391 New inline setters/getters. 18392 18393 (JSC::ProgramCodeBlock::ProgramCodeBlock): 18394 (JSC::ProgramCodeBlock::~ProgramCodeBlock): 18395 (JSC::ProgramCodeBlock::clearGlobalObject): 18396 * bytecode/SamplingTool.cpp: 18397 (JSC::ScopeSampleRecord::sample): 18398 (JSC::SamplingTool::dump): 18399 * bytecompiler/BytecodeGenerator.cpp: 18400 * bytecompiler/BytecodeGenerator.h: 18401 * bytecompiler/Label.h: 18402 * interpreter/CallFrame.cpp: 18403 * interpreter/Interpreter.cpp: 18404 * jit/JIT.cpp: 18405 * jit/JITCall.cpp: 18406 * jit/JITInlineMethods.h: 18407 * jit/JITPropertyAccess.cpp: 18408 * parser/Nodes.cpp: 18409 * runtime/Arguments.h: 18410 * runtime/ExceptionHelpers.cpp: 18411 * runtime/JSActivation.cpp: 18412 * runtime/JSActivation.h: 18413 * runtime/JSGlobalObject.cpp: 18414 Change direct access to use new getter/setters. 18415 18416 2008-12-05 Gavin Barraclough <barraclough (a] apple.com> 18417 18418 Reviewed by Oliver Hunt. 18419 18420 Prevent GCC4.2 from hanging when trying to compile Interpreter.cpp. 18421 Added "-fno-var-tracking" compiler flag. 18422 18423 https://bugs.webkit.org/show_bug.cgi?id=22704 18424 18425 * JavaScriptCore.xcodeproj/project.pbxproj: 18426 18427 2008-12-05 Gavin Barraclough <barraclough (a] apple.com> 18428 18429 Reviewed by Oliver Hunt. 18430 18431 Ordering of branch operands in MacroAssembler in unnecessarily inconsistent. 18432 18433 je, jg etc take an immediate operand as the second argument, but for the 18434 equality branches (je, jne) the immediate operand was the first argument. This 18435 was unnecessarily inconsistent. Change je, jne methods to take the immediate 18436 as the second argument. 18437 18438 https://bugs.webkit.org/show_bug.cgi?id=22703 18439 18440 * assembler/MacroAssembler.h: 18441 (JSC::MacroAssembler::je32): 18442 (JSC::MacroAssembler::jne32): 18443 * jit/JIT.cpp: 18444 (JSC::JIT::compileOpStrictEq): 18445 * wrec/WRECGenerator.cpp: 18446 (JSC::WREC::Generator::generateEnter): 18447 (JSC::WREC::Generator::generateNonGreedyQuantifier): 18448 (JSC::WREC::Generator::generateGreedyQuantifier): 18449 (JSC::WREC::Generator::generatePatternCharacterPair): 18450 (JSC::WREC::Generator::generatePatternCharacter): 18451 (JSC::WREC::Generator::generateCharacterClassInvertedRange): 18452 (JSC::WREC::Generator::generateCharacterClassInverted): 18453 (JSC::WREC::Generator::generateAssertionBOL): 18454 (JSC::WREC::Generator::generateAssertionWordBoundary): 18455 18456 2008-12-05 Gavin Barraclough <barraclough (a] apple.com> 18457 18458 Reviewed by Geoff Garen. 18459 18460 Second tranche of porting JIT.cpp to MacroAssembler interface. 18461 18462 * assembler/MacroAssembler.h: 18463 (JSC::MacroAssembler::mul32): 18464 (JSC::MacroAssembler::jl32): 18465 (JSC::MacroAssembler::jnzSub32): 18466 (JSC::MacroAssembler::joAdd32): 18467 (JSC::MacroAssembler::joMul32): 18468 (JSC::MacroAssembler::jzSub32): 18469 * jit/JIT.cpp: 18470 (JSC::JIT::emitSlowScriptCheck): 18471 (JSC::JIT::privateCompileMainPass): 18472 (JSC::JIT::privateCompileSlowCases): 18473 (JSC::JIT::privateCompileCTIMachineTrampolines): 18474 * jit/JIT.h: 18475 * jit/JITInlineMethods.h: 18476 (JSC::JIT::emitJumpIfNotJSCell): 18477 (JSC::JIT::emitJumpSlowCaseIfNotJSCell): 18478 18479 2008-12-05 David Kilzer <ddkilzer (a] apple.com> 18480 18481 Bug 22609: Provide a build-time choice when generating hash tables for properties of built-in DOM objects 18482 18483 <https://bugs.webkit.org/show_bug.cgi?id=22609> 18484 <rdar://problem/6331749> 18485 18486 Reviewed by Darin Adler. 18487 18488 Initial patch by Yosen Lin. Adapted for ToT WebKit by David Kilzer. 18489 18490 Added back the code that generates a "compact" hash (instead of a 18491 perfect hash) as a build-time option using the 18492 ENABLE(PERFECT_HASH_SIZE) macro as defined in Lookup.h. 18493 18494 * create_hash_table: Rename variables to differentiate perfect hash 18495 values from compact hash values. Added back code to compute compact 18496 hash tables. Generate both hash table sizes and emit 18497 conditionalized code based on ENABLE(PERFECT_HASH_SIZE). 18498 * runtime/Lookup.cpp: 18499 (JSC::HashTable::createTable): Added version of createTable() for 18500 use with compact hash tables. 18501 (JSC::HashTable::deleteTable): Updated to work with compact hash 18502 tables. 18503 * runtime/Lookup.h: Defined ENABLE(PERFECT_HASH_SIZE) macro here. 18504 (JSC::HashEntry::initialize): Set m_next to zero when using compact 18505 hash tables. 18506 (JSC::HashEntry::setNext): Added for compact hash tables. 18507 (JSC::HashEntry::next): Added for compact hash tables. 18508 (JSC::HashTable::entry): Added version of entry() for use with 18509 compact hash tables. 18510 * runtime/Structure.cpp: 18511 (JSC::Structure::getEnumerablePropertyNames): Updated to work with 18512 compact hash tables. 18513 18514 2008-12-05 Gavin Barraclough <barraclough (a] apple.com> 18515 18516 Reviewed by Geoff Garen. 18517 18518 Remove redundant calls to JIT::emitSlowScriptCheck. 18519 This is checked in the hot path, so is not needed on the slow path - and the code 18520 was being planted before the start of the slow case, so was completely unreachable! 18521 18522 * jit/JIT.cpp: 18523 (JSC::JIT::privateCompileSlowCases): 18524 18525 2008-12-05 Gavin Barraclough <barraclough (a] apple.com> 18526 18527 Reviewed by Geoff Garen. 18528 18529 Move JIT::compileOpStrictEq to MacroAssembler interface. 18530 18531 The rewrite also looks like a small (<1%) performance progression. 18532 18533 https://bugs.webkit.org/show_bug.cgi?id=22697 18534 18535 * jit/JIT.cpp: 18536 (JSC::JIT::compileOpStrictEq): 18537 (JSC::JIT::privateCompileSlowCases): 18538 * jit/JIT.h: 18539 * jit/JITInlineMethods.h: 18540 (JSC::JIT::emitJumpIfJSCell): 18541 (JSC::JIT::emitJumpSlowCaseIfJSCell): 18542 18543 2008-12-05 Gavin Barraclough <barraclough (a] apple.com> 18544 18545 Reviewed by Geoff Garen. 18546 18547 Remove m_assembler from MacroAssembler::Jump. 18548 Keeping a pointer allowed for some syntactic sugar - "link()" looks nicer 18549 than "link(this)". But maintaining this doubles the size of Jump, which 18550 is even more unfortunate for the JIT, since there are many large structures 18551 holding JmpSrcs. Probably best to remove it. 18552 18553 https://bugs.webkit.org/show_bug.cgi?id=22693 18554 18555 * assembler/MacroAssembler.h: 18556 (JSC::MacroAssembler::Jump::Jump): 18557 (JSC::MacroAssembler::Jump::link): 18558 (JSC::MacroAssembler::Jump::linkTo): 18559 (JSC::MacroAssembler::JumpList::link): 18560 (JSC::MacroAssembler::JumpList::linkTo): 18561 (JSC::MacroAssembler::jae32): 18562 (JSC::MacroAssembler::je32): 18563 (JSC::MacroAssembler::je16): 18564 (JSC::MacroAssembler::jg32): 18565 (JSC::MacroAssembler::jge32): 18566 (JSC::MacroAssembler::jl32): 18567 (JSC::MacroAssembler::jle32): 18568 (JSC::MacroAssembler::jnePtr): 18569 (JSC::MacroAssembler::jne32): 18570 (JSC::MacroAssembler::jnset32): 18571 (JSC::MacroAssembler::jset32): 18572 (JSC::MacroAssembler::jump): 18573 (JSC::MacroAssembler::jzSub32): 18574 (JSC::MacroAssembler::joAdd32): 18575 (JSC::MacroAssembler::call): 18576 * wrec/WREC.cpp: 18577 (JSC::WREC::Generator::compileRegExp): 18578 * wrec/WRECGenerator.cpp: 18579 (JSC::WREC::Generator::generateEnter): 18580 (JSC::WREC::Generator::generateBackreferenceQuantifier): 18581 (JSC::WREC::Generator::generateNonGreedyQuantifier): 18582 (JSC::WREC::Generator::generateGreedyQuantifier): 18583 (JSC::WREC::Generator::generatePatternCharacter): 18584 (JSC::WREC::Generator::generateCharacterClassInvertedRange): 18585 (JSC::WREC::Generator::generateCharacterClassInverted): 18586 (JSC::WREC::Generator::generateCharacterClass): 18587 (JSC::WREC::Generator::generateParenthesesAssertion): 18588 (JSC::WREC::Generator::generateParenthesesInvertedAssertion): 18589 (JSC::WREC::Generator::generateParenthesesNonGreedy): 18590 (JSC::WREC::Generator::generateParenthesesResetTrampoline): 18591 (JSC::WREC::Generator::generateAssertionBOL): 18592 (JSC::WREC::Generator::generateAssertionEOL): 18593 (JSC::WREC::Generator::generateAssertionWordBoundary): 18594 (JSC::WREC::Generator::generateBackreference): 18595 (JSC::WREC::Generator::terminateAlternative): 18596 (JSC::WREC::Generator::terminateDisjunction): 18597 * wrec/WRECParser.h: 18598 18599 2008-12-05 Gavin Barraclough <barraclough (a] apple.com> 18600 18601 Reviewed by Geoffrey Garen. 18602 18603 Simplify JIT generated checks for timeout code, by moving more work into the C function. 18604 https://bugs.webkit.org/show_bug.cgi?id=22688 18605 18606 * interpreter/Interpreter.cpp: 18607 (JSC::Interpreter::cti_timeout_check): 18608 * interpreter/Interpreter.h: 18609 * jit/JIT.cpp: 18610 (JSC::JIT::emitSlowScriptCheck): 18611 18612 2008-12-05 Sam Weinig <sam (a] webkit.org> 18613 18614 Reviewed by Geoffrey Garen. 18615 18616 Encapsulate access to jump tables in the CodeBlock in preparation 18617 of moving them to a rare data structure. 18618 18619 * bytecode/CodeBlock.cpp: 18620 (JSC::CodeBlock::dump): 18621 (JSC::CodeBlock::shrinkToFit): 18622 * bytecode/CodeBlock.h: 18623 (JSC::CodeBlock::numberOfImmediateSwitchJumpTables): 18624 (JSC::CodeBlock::addImmediateSwitchJumpTable): 18625 (JSC::CodeBlock::immediateSwitchJumpTable): 18626 (JSC::CodeBlock::numberOfCharacterSwitchJumpTables): 18627 (JSC::CodeBlock::addCharacterSwitchJumpTable): 18628 (JSC::CodeBlock::characterSwitchJumpTable): 18629 (JSC::CodeBlock::numberOfStringSwitchJumpTables): 18630 (JSC::CodeBlock::addStringSwitchJumpTable): 18631 (JSC::CodeBlock::stringSwitchJumpTable): 18632 * bytecompiler/BytecodeGenerator.cpp: 18633 (JSC::BytecodeGenerator::generate): 18634 (JSC::BytecodeGenerator::endSwitch): 18635 * interpreter/Interpreter.cpp: 18636 (JSC::Interpreter::privateExecute): 18637 (JSC::Interpreter::cti_op_switch_imm): 18638 (JSC::Interpreter::cti_op_switch_char): 18639 (JSC::Interpreter::cti_op_switch_string): 18640 * jit/JIT.cpp: 18641 (JSC::JIT::privateCompileMainPass): 18642 18643 2008-12-05 Adam Roben <aroben (a] apple.com> 18644 18645 Windows build fix after r39020 18646 18647 * jit/JITInlineMethods.h: 18648 (JSC::JIT::restoreArgumentReference): 18649 (JSC::JIT::restoreArgumentReferenceForTrampoline): 18650 Add some apparently-missing __. 18651 18652 2008-12-04 Geoffrey Garen <ggaren (a] apple.com> 18653 18654 Reviewed by Darin Adler. 18655 18656 https://bugs.webkit.org/show_bug.cgi?id=22673 18657 18658 Added support for the assertion (?=) and inverted assertion (?!) atoms 18659 in WREC. 18660 18661 * wrec/WRECGenerator.cpp: 18662 (JSC::WREC::Generator::generateParenthesesAssertion): 18663 (JSC::WREC::Generator::generateParenthesesInvertedAssertion): Split the 18664 old (unused) generateParentheses into these two functions, with more 18665 limited capabilities. 18666 18667 * wrec/WRECGenerator.h: 18668 (JSC::WREC::Generator::): Moved an enum to the top of the class definition, 18669 to match the WebKit style, and removed a defunct comment. 18670 18671 * wrec/WRECParser.cpp: 18672 (JSC::WREC::Parser::parseParentheses): 18673 (JSC::WREC::Parser::consumeParenthesesType): 18674 * wrec/WRECParser.h: 18675 (JSC::WREC::Parser::): Added support for parsing (?=) and (?!). 18676 18677 2008-12-05 Simon Hausmann <simon.hausmann (a] nokia.com> 18678 18679 Rubber-stamped by Tor Arne Vestb. 18680 18681 Disable the JIT for the Qt build alltogether again, after observing 18682 more miscompilations in a wider range of newer gcc versions. 18683 18684 * JavaScriptCore.pri: 18685 18686 2008-12-05 Simon Hausmann <simon.hausmann (a] nokia.com> 18687 18688 Reviewed by Tor Arne Vestb. 18689 18690 Disable the JIT for the Qt build on Linux unless gcc is >= 4.2, 18691 due to miscompilations. 18692 18693 * JavaScriptCore.pri: 18694 18695 2008-12-04 Gavin Barraclough <barraclough (a] apple.com> 18696 18697 Reviewed by Geoff Garen. 18698 18699 Start porting the JIT to use the MacroAssembler. 18700 18701 https://bugs.webkit.org/show_bug.cgi?id=22671 18702 No change in performance. 18703 18704 * assembler/MacroAssembler.h: 18705 (JSC::MacroAssembler::Jump::operator X86Assembler::JmpSrc): 18706 (JSC::MacroAssembler::add32): 18707 (JSC::MacroAssembler::and32): 18708 (JSC::MacroAssembler::lshift32): 18709 (JSC::MacroAssembler::rshift32): 18710 (JSC::MacroAssembler::storePtr): 18711 (JSC::MacroAssembler::store32): 18712 (JSC::MacroAssembler::poke): 18713 (JSC::MacroAssembler::move): 18714 (JSC::MacroAssembler::compareImm32ForBranchEquality): 18715 (JSC::MacroAssembler::jnePtr): 18716 (JSC::MacroAssembler::jnset32): 18717 (JSC::MacroAssembler::jset32): 18718 (JSC::MacroAssembler::jzeroSub32): 18719 (JSC::MacroAssembler::joverAdd32): 18720 (JSC::MacroAssembler::call): 18721 * assembler/X86Assembler.h: 18722 (JSC::X86Assembler::shll_i8r): 18723 * jit/JIT.cpp: 18724 (JSC::JIT::privateCompileMainPass): 18725 (JSC::JIT::privateCompile): 18726 (JSC::JIT::privateCompileCTIMachineTrampolines): 18727 * jit/JIT.h: 18728 * jit/JITArithmetic.cpp: 18729 (JSC::JIT::compileBinaryArithOp): 18730 * jit/JITInlineMethods.h: 18731 (JSC::JIT::emitGetVirtualRegister): 18732 (JSC::JIT::emitPutCTIArg): 18733 (JSC::JIT::emitPutCTIArgConstant): 18734 (JSC::JIT::emitGetCTIArg): 18735 (JSC::JIT::emitPutCTIArgFromVirtualRegister): 18736 (JSC::JIT::emitPutCTIParam): 18737 (JSC::JIT::emitGetCTIParam): 18738 (JSC::JIT::emitPutToCallFrameHeader): 18739 (JSC::JIT::emitPutImmediateToCallFrameHeader): 18740 (JSC::JIT::emitGetFromCallFrameHeader): 18741 (JSC::JIT::emitPutVirtualRegister): 18742 (JSC::JIT::emitInitRegister): 18743 (JSC::JIT::emitNakedCall): 18744 (JSC::JIT::restoreArgumentReference): 18745 (JSC::JIT::restoreArgumentReferenceForTrampoline): 18746 (JSC::JIT::emitCTICall): 18747 (JSC::JIT::checkStructure): 18748 (JSC::JIT::emitJumpSlowCaseIfNotJSCell): 18749 (JSC::JIT::emitJumpSlowCaseIfNotImmNum): 18750 (JSC::JIT::emitJumpSlowCaseIfNotImmNums): 18751 (JSC::JIT::emitFastArithDeTagImmediate): 18752 (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): 18753 (JSC::JIT::emitFastArithReTagImmediate): 18754 (JSC::JIT::emitFastArithPotentiallyReTagImmediate): 18755 (JSC::JIT::emitFastArithImmToInt): 18756 (JSC::JIT::emitFastArithIntToImmOrSlowCase): 18757 (JSC::JIT::emitFastArithIntToImmNoCheck): 18758 (JSC::JIT::emitTagAsBoolImmediate): 18759 * jit/JITPropertyAccess.cpp: 18760 (JSC::JIT::privateCompilePutByIdTransition): 18761 18762 2008-12-04 Geoffrey Garen <ggaren (a] apple.com> 18763 18764 Reviewed by Oliver Hunt. 18765 18766 Some refactoring for generateGreedyQuantifier. 18767 18768 SunSpider reports no change (possibly a 0.3% speedup). 18769 18770 * wrec/WRECGenerator.cpp: 18771 (JSC::WREC::Generator::generateGreedyQuantifier): Clarified label 18772 meanings and unified some logic to simplify things. 18773 18774 * wrec/WRECParser.h: 18775 (JSC::WREC::Parser::parseAlternative): Added a version of parseAlternative 18776 that can jump to a Label, instead of a JumpList, upon failure. (Eventually, 18777 when we have a true Label class, this will be redundant.) This makes 18778 things easier for generateGreedyQuantifier, because it can avoid 18779 explicitly linking things. 18780 18781 2008-12-04 Simon Hausmann <simon.hausmann (a] nokia.com> 18782 18783 Reviewed by Holger Freyther. 18784 18785 Fix crashes in the Qt build on Linux/i386 with non-executable memory 18786 by enabling TCSystemAlloc and the PROT_EXEC flag for mmap. 18787 18788 * JavaScriptCore.pri: Enable the use of TCSystemAlloc if the JIT is 18789 enabled. 18790 * wtf/TCSystemAlloc.cpp: Extend the PROT_EXEC permissions to 18791 PLATFORM(QT). 18792 18793 2008-12-04 Simon Hausmann <simon.hausmann (a] nokia.com> 18794 18795 Reviewed by Tor Arne Vestb. 18796 18797 Enable ENABLE_JIT_OPTIMIZE_CALL, ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS 18798 and ENABLE_JIT_OPTIMIZE_ARITHMETIC, as suggested by Niko. 18799 18800 * JavaScriptCore.pri: 18801 18802 2008-12-04 Kent Hansen <khansen (a] trolltech.com> 18803 18804 Reviewed by Simon Hausmann. 18805 18806 Enable the JSC jit for the Qt build by default for release builds on 18807 linux-g++ and win32-msvc. 18808 18809 * JavaScriptCore.pri: 18810 18811 2008-12-04 Gavin Barraclough <barraclough (a] apple.com> 18812 18813 Reviewed by Oliver Hunt. 18814 18815 Allow JIT to function without property access repatching and arithmetic optimizations. 18816 Controlled by ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS and ENABLE_JIT_OPTIMIZE_ARITHMETIC switches. 18817 18818 https://bugs.webkit.org/show_bug.cgi?id=22643 18819 18820 * JavaScriptCore.xcodeproj/project.pbxproj: 18821 * jit/JIT.cpp: 18822 (JSC::JIT::privateCompileMainPass): 18823 (JSC::JIT::privateCompileSlowCases): 18824 * jit/JIT.h: 18825 * jit/JITArithmetic.cpp: Copied from jit/JIT.cpp. 18826 (JSC::JIT::compileBinaryArithOp): 18827 (JSC::JIT::compileBinaryArithOpSlowCase): 18828 * jit/JITPropertyAccess.cpp: Copied from jit/JIT.cpp. 18829 (JSC::JIT::compileGetByIdHotPath): 18830 (JSC::JIT::compileGetByIdSlowCase): 18831 (JSC::JIT::compilePutByIdHotPath): 18832 (JSC::JIT::compilePutByIdSlowCase): 18833 (JSC::resizePropertyStorage): 18834 (JSC::transitionWillNeedStorageRealloc): 18835 (JSC::JIT::privateCompilePutByIdTransition): 18836 (JSC::JIT::patchGetByIdSelf): 18837 (JSC::JIT::patchPutByIdReplace): 18838 (JSC::JIT::privateCompilePatchGetArrayLength): 18839 * wtf/Platform.h: 18840 18841 2008-12-03 Geoffrey Garen <ggaren (a] apple.com> 18842 18843 Reviewed by Oliver Hunt. 18844 18845 Optimized sequences of characters in regular expressions by comparing 18846 two characters at a time. 18847 18848 1-2% speedup on SunSpider, 19-25% speedup on regexp-dna. 18849 18850 * assembler/MacroAssembler.h: 18851 (JSC::MacroAssembler::load32): 18852 (JSC::MacroAssembler::jge32): Filled out a few more macro methods. 18853 18854 * assembler/X86Assembler.h: 18855 (JSC::X86Assembler::movl_mr): Added a verion of movl_mr that operates 18856 without an offset, to allow the macro assembler to optmize for that case. 18857 18858 * wrec/WREC.cpp: 18859 (JSC::WREC::Generator::compileRegExp): Test the saved value of index 18860 instead of the index register when checking for "end of input." The 18861 index register doesn't increment by 1 in an orderly fashion, so testing 18862 it for == "end of input" is not valid. 18863 18864 Also, jump all the way to "return failure" upon reaching "end of input," 18865 instead of executing the next alternative. This is more logical, and 18866 it's a slight optimization in the case of an expression with many alternatives. 18867 18868 * wrec/WRECGenerator.cpp: 18869 (JSC::WREC::Generator::generateIncrementIndex): Added support for 18870 jumping to a failure label in the case where the index has reached "end 18871 of input." 18872 18873 (JSC::WREC::Generator::generatePatternCharacterSequence): 18874 (JSC::WREC::Generator::generatePatternCharacterPair): This is the 18875 optmization. It's basically like generatePatternCharacter, but it runs two 18876 characters at a time. 18877 18878 (JSC::WREC::Generator::generatePatternCharacter): Changed to use isASCII, 18879 since it's clearer than comparing to a magic hex value. 18880 18881 * wrec/WRECGenerator.h: 18882 18883 2008-12-03 Gavin Barraclough <barraclough (a] apple.com> 18884 18885 Reviewed by Cameron Zwarich. 18886 18887 Allow JIT to operate without the call-repatching optimization. 18888 Controlled by ENABLE(JIT_OPTIMIZE_CALL), defaults on, disabling 18889 this leads to significant performance regression. 18890 18891 https://bugs.webkit.org/show_bug.cgi?id=22639 18892 18893 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 18894 * JavaScriptCore.xcodeproj/project.pbxproj: 18895 * jit/JIT.cpp: 18896 (JSC::JIT::privateCompileSlowCases): 18897 * jit/JIT.h: 18898 * jit/JITCall.cpp: Copied from jit/JIT.cpp. 18899 (JSC::JIT::compileOpCallInitializeCallFrame): 18900 (JSC::JIT::compileOpCallSetupArgs): 18901 (JSC::JIT::compileOpCallEvalSetupArgs): 18902 (JSC::JIT::compileOpConstructSetupArgs): 18903 (JSC::JIT::compileOpCall): 18904 (JSC::JIT::compileOpCallSlowCase): 18905 (JSC::unreachable): 18906 * jit/JITInlineMethods.h: Copied from jit/JIT.cpp. 18907 (JSC::JIT::checkStructure): 18908 (JSC::JIT::emitFastArithPotentiallyReTagImmediate): 18909 (JSC::JIT::emitTagAsBoolImmediate): 18910 * wtf/Platform.h: 18911 18912 2008-12-03 Eric Seidel <eric (a] webkit.org> 18913 18914 Rubber-stamped by David Hyatt. 18915 18916 Make HAVE_ACCESSIBILITY only define if !defined 18917 18918 * wtf/Platform.h: 18919 18920 2008-12-03 Sam Weinig <sam (a] webkit.org> 18921 18922 Fix build. 18923 18924 * assembler/X86Assembler.h: 18925 (JSC::X86Assembler::orl_i32r): 18926 18927 2008-12-03 Sam Weinig <sam (a] webkit.org> 18928 18929 Reviewed by Geoffrey Garen. 18930 18931 Remove shared AssemblerBuffer 1MB buffer and instead give AssemblerBuffer 18932 an 256 byte inline capacity. 18933 18934 1% progression on Sunspider. 18935 18936 * assembler/AssemblerBuffer.h: 18937 (JSC::AssemblerBuffer::AssemblerBuffer): 18938 (JSC::AssemblerBuffer::~AssemblerBuffer): 18939 (JSC::AssemblerBuffer::grow): 18940 * assembler/MacroAssembler.h: 18941 (JSC::MacroAssembler::MacroAssembler): 18942 * assembler/X86Assembler.h: 18943 (JSC::X86Assembler::X86Assembler): 18944 * interpreter/Interpreter.cpp: 18945 (JSC::Interpreter::Interpreter): 18946 * interpreter/Interpreter.h: 18947 * jit/JIT.cpp: 18948 (JSC::JIT::JIT): 18949 * parser/Nodes.cpp: 18950 (JSC::RegExpNode::emitBytecode): 18951 * runtime/RegExp.cpp: 18952 (JSC::RegExp::RegExp): 18953 (JSC::RegExp::create): 18954 * runtime/RegExp.h: 18955 * runtime/RegExpConstructor.cpp: 18956 (JSC::constructRegExp): 18957 * runtime/RegExpPrototype.cpp: 18958 (JSC::regExpProtoFuncCompile): 18959 * runtime/StringPrototype.cpp: 18960 (JSC::stringProtoFuncMatch): 18961 (JSC::stringProtoFuncSearch): 18962 * wrec/WREC.cpp: 18963 (JSC::WREC::Generator::compileRegExp): 18964 * wrec/WRECGenerator.h: 18965 (JSC::WREC::Generator::Generator): 18966 * wrec/WRECParser.h: 18967 (JSC::WREC::Parser::Parser): 18968 18969 2008-12-03 Geoffrey Garen <ggaren (a] apple.com> 18970 18971 Reviewed by Oliver Hunt, with help from Gavin Barraclough. 18972 18973 orl_i32r was actually coded as an 8bit OR. So, I renamed orl_i32r to 18974 orl_i8r, changed all orl_i32r clients to use orl_i8r, and then added 18975 a new orl_i32r that actually does a 32bit OR. 18976 18977 (32bit OR is currently unused, but a patch I'm working on uses it.) 18978 18979 * assembler/MacroAssembler.h: 18980 (JSC::MacroAssembler::or32): Updated to choose between 8bit and 32bit OR. 18981 18982 * assembler/X86Assembler.h: 18983 (JSC::X86Assembler::orl_i8r): The old orl_i32r. 18984 (JSC::X86Assembler::orl_i32r): The new orl_i32r. 18985 18986 * jit/JIT.cpp: 18987 (JSC::JIT::emitFastArithPotentiallyReTagImmediate): 18988 (JSC::JIT::emitTagAsBoolImmediate): Use orl_i8r, since we're ORing 8bit 18989 values. 18990 18991 2008-12-03 Dean Jackson <dino (a] apple.com> 18992 18993 Reviewed by Dan Bernstein. 18994 18995 Helper functions for turn -> degrees. 18996 https://bugs.webkit.org/show_bug.cgi?id=22497 18997 18998 * wtf/MathExtras.h: 18999 (turn2deg): 19000 (deg2turn): 19001 19002 2008-12-02 Cameron Zwarich <zwarich (a] apple.com> 19003 19004 Reviewed by Geoff Garen. 19005 19006 Bug 22504: Crashes during code generation occur due to refing of ignoredResult() 19007 <https://bugs.webkit.org/show_bug.cgi?id=22504> 19008 19009 Since ignoredResult() was implemented by casting 1 to a RegisterID*, any 19010 attempt to ref ignoredResult() results in a crash. This will occur in 19011 code generation of a function body where a node emits another node with 19012 the dst that was passed to it, and then refs the returned RegisterID*. 19013 19014 To fix this problem, make ignoredResult() a member function of 19015 BytecodeGenerator that simply returns a pointe to a fixed RegisterID 19016 member of BytecodeGenerator. 19017 19018 * bytecompiler/BytecodeGenerator.h: 19019 (JSC::BytecodeGenerator::ignoredResult): 19020 * bytecompiler/RegisterID.h: 19021 * parser/Nodes.cpp: 19022 (JSC::NullNode::emitBytecode): 19023 (JSC::BooleanNode::emitBytecode): 19024 (JSC::NumberNode::emitBytecode): 19025 (JSC::StringNode::emitBytecode): 19026 (JSC::RegExpNode::emitBytecode): 19027 (JSC::ThisNode::emitBytecode): 19028 (JSC::ResolveNode::emitBytecode): 19029 (JSC::ObjectLiteralNode::emitBytecode): 19030 (JSC::PostfixResolveNode::emitBytecode): 19031 (JSC::PostfixBracketNode::emitBytecode): 19032 (JSC::PostfixDotNode::emitBytecode): 19033 (JSC::DeleteValueNode::emitBytecode): 19034 (JSC::VoidNode::emitBytecode): 19035 (JSC::TypeOfResolveNode::emitBytecode): 19036 (JSC::TypeOfValueNode::emitBytecode): 19037 (JSC::PrefixResolveNode::emitBytecode): 19038 (JSC::AssignResolveNode::emitBytecode): 19039 (JSC::CommaNode::emitBytecode): 19040 (JSC::ForNode::emitBytecode): 19041 (JSC::ForInNode::emitBytecode): 19042 (JSC::ReturnNode::emitBytecode): 19043 (JSC::ThrowNode::emitBytecode): 19044 (JSC::FunctionBodyNode::emitBytecode): 19045 (JSC::FuncDeclNode::emitBytecode): 19046 19047 2008-12-02 Geoffrey Garen <ggaren (a] apple.com> 19048 19049 Reviewed by Cameron Zwarich. 19050 19051 Fixed https://bugs.webkit.org/show_bug.cgi?id=22537 19052 REGRESSION (r38745): Assertion failure in jsSubstring() at ge.com 19053 19054 The bug was that index would become greater than length, so our 19055 "end of input" checks, which all check "index == length", would fail. 19056 19057 The solution is to check for end of input before incrementing index, 19058 to ensure that index is always <= length. 19059 19060 As a side benefit, generateJumpIfEndOfInput can now use je instead of 19061 jg, which should be slightly faster. 19062 19063 * wrec/WREC.cpp: 19064 (JSC::WREC::Generator::compileRegExp): 19065 * wrec/WRECGenerator.cpp: 19066 (JSC::WREC::Generator::generateJumpIfEndOfInput): 19067 19068 2008-12-02 Gavin Barraclough <barraclough (a] apple.com> 19069 19070 Reviewed by Geoffrey Garen. 19071 19072 Plant shift right immediate instructions, which are awesome. 19073 https://bugs.webkit.org/show_bug.cgi?id=22610 19074 ~5% on the v8-crypto test. 19075 19076 * jit/JIT.cpp: 19077 (JSC::JIT::privateCompileMainPass): 19078 (JSC::JIT::privateCompileSlowCases): 19079 19080 2008-12-02 Geoffrey Garen <ggaren (a] apple.com> 19081 19082 Reviewed by Sam Weinig. 19083 19084 Cleaned up SegmentedVector by abstracting segment access into helper 19085 functions. 19086 19087 SunSpider reports no change. 19088 19089 * bytecompiler/SegmentedVector.h: 19090 (JSC::SegmentedVector::SegmentedVector): 19091 (JSC::SegmentedVector::~SegmentedVector): 19092 (JSC::SegmentedVector::size): 19093 (JSC::SegmentedVector::at): 19094 (JSC::SegmentedVector::operator[]): 19095 (JSC::SegmentedVector::last): 19096 (JSC::SegmentedVector::append): 19097 (JSC::SegmentedVector::removeLast): 19098 (JSC::SegmentedVector::grow): 19099 (JSC::SegmentedVector::clear): 19100 (JSC::SegmentedVector::deleteAllSegments): 19101 (JSC::SegmentedVector::segmentFor): 19102 (JSC::SegmentedVector::subscriptFor): 19103 (JSC::SegmentedVector::ensureSegmentsFor): 19104 (JSC::SegmentedVector::ensureSegment): 19105 19106 2008-12-02 Geoffrey Garen <ggaren (a] apple.com> 19107 19108 Reviewed by Geoffrey Garen. (Patch by Cameron Zwarich <zwarich (a] apple.com>.) 19109 19110 Fixed https://bugs.webkit.org/show_bug.cgi?id=22482 19111 REGRESSION (r37991): Occasionally see "Scene rendered incorrectly" 19112 message when running the V8 Raytrace benchmark 19113 19114 Rolled out r37991. It didn't properly save xmm0, which is caller-save, 19115 before calling helper functions. 19116 19117 SunSpider and v8 benchmarks show little change -- possibly a .2% 19118 SunSpider regression, possibly a .2% v8 benchmark speedup. 19119 19120 * assembler/X86Assembler.h: 19121 (JSC::X86Assembler::): 19122 * bytecode/CodeBlock.cpp: 19123 (JSC::CodeBlock::dump): 19124 * bytecode/Instruction.h: 19125 (JSC::Instruction::): 19126 * bytecompiler/BytecodeGenerator.cpp: 19127 (JSC::BytecodeGenerator::emitUnaryOp): 19128 * bytecompiler/BytecodeGenerator.h: 19129 (JSC::BytecodeGenerator::emitToJSNumber): 19130 (JSC::BytecodeGenerator::emitTypeOf): 19131 (JSC::BytecodeGenerator::emitGetPropertyNames): 19132 * interpreter/Interpreter.cpp: 19133 (JSC::Interpreter::privateExecute): 19134 * interpreter/Interpreter.h: 19135 * jit/JIT.cpp: 19136 (JSC::JIT::privateCompileMainPass): 19137 (JSC::JIT::privateCompileSlowCases): 19138 * jit/JIT.h: 19139 * parser/Nodes.cpp: 19140 (JSC::UnaryOpNode::emitBytecode): 19141 (JSC::BinaryOpNode::emitBytecode): 19142 (JSC::EqualNode::emitBytecode): 19143 * parser/ResultType.h: 19144 (JSC::ResultType::isReusable): 19145 (JSC::ResultType::mightBeNumber): 19146 * runtime/JSNumberCell.h: 19147 19148 2008-12-01 Gavin Barraclough <barraclough (a] apple.com> 19149 19150 Reviewed by Geoffrey Garen. 19151 19152 Remove unused (sampling only, and derivable) argument to JIT::emitCTICall. 19153 https://bugs.webkit.org/show_bug.cgi?id=22587 19154 19155 * jit/JIT.cpp: 19156 (JSC::JIT::emitCTICall): 19157 (JSC::JIT::compileOpCall): 19158 (JSC::JIT::emitSlowScriptCheck): 19159 (JSC::JIT::compileBinaryArithOpSlowCase): 19160 (JSC::JIT::privateCompileMainPass): 19161 (JSC::JIT::privateCompileSlowCases): 19162 (JSC::JIT::privateCompile): 19163 * jit/JIT.h: 19164 19165 2008-12-02 Dimitri Glazkov <dglazkov (a] chromium.org> 19166 19167 Reviewed by Eric Seidel. 19168 19169 Fix the inheritance chain for JSFunction. 19170 19171 * runtime/JSFunction.cpp: 19172 (JSC::JSFunction::info): Add InternalFunction::info as parent class 19173 19174 2008-12-02 Simon Hausmann <hausmann (a] webkit.org> 19175 19176 Reviewed by Tor Arne Vestb. 19177 19178 Fix ability to include JavaScriptCore.pri from other .pro files. 19179 19180 * JavaScriptCore.pri: Moved -O3 setting into the .pro files. 19181 * JavaScriptCore.pro: 19182 * jsc.pro: 19183 19184 2008-12-01 Geoffrey Garen <ggaren (a] apple.com> 19185 19186 Reviewed by Cameron Zwarich, with help from Gavin Barraclough. 19187 19188 Fixed https://bugs.webkit.org/show_bug.cgi?id=22583. 19189 19190 Refactored regular expression parsing to parse sequences of characters 19191 as a single unit, in preparation for optimizing sequences of characters. 19192 19193 SunSpider reports no change. 19194 19195 * JavaScriptCore.xcodeproj/project.pbxproj: 19196 * wrec/Escapes.h: Added. Set of classes for representing an escaped 19197 token in a pattern. 19198 19199 * wrec/Quantifier.h: 19200 (JSC::WREC::Quantifier::Quantifier): Simplified this constructor slightly, 19201 to match the new Escape constructor. 19202 19203 * wrec/WRECGenerator.cpp: 19204 (JSC::WREC::Generator::generatePatternCharacterSequence): 19205 * wrec/WRECGenerator.h: Added an interface for generating a sequence 19206 of pattern characters at a time. It doesn't do anything special yet. 19207 19208 * wrec/WRECParser.cpp: 19209 (JSC::WREC::Parser::consumeGreedyQuantifier): 19210 (JSC::WREC::Parser::consumeQuantifier): Renamed "parse" to "consume" in 19211 these functions, to match "consumeEscape." 19212 19213 (JSC::WREC::Parser::parsePatternCharacterSequence): New function for 19214 iteratively aggregating a sequence of characters in a pattern. 19215 19216 (JSC::WREC::Parser::parseCharacterClassQuantifier): 19217 (JSC::WREC::Parser::parseBackreferenceQuantifier): Renamed "parse" to 19218 "consume" in these functions, to match "consumeEscape." 19219 19220 (JSC::WREC::Parser::parseCharacterClass): Refactored to use the common 19221 escape processing code in consumeEscape. 19222 19223 (JSC::WREC::Parser::parseEscape): Refactored to use the common 19224 escape processing code in consumeEscape. 19225 19226 (JSC::WREC::Parser::consumeEscape): Factored escaped token processing 19227 into a common function, since we were doing this in a few places. 19228 19229 (JSC::WREC::Parser::parseTerm): Refactored to use the common 19230 escape processing code in consumeEscape. 19231 19232 * wrec/WRECParser.h: 19233 (JSC::WREC::Parser::consumeOctal): Refactored to use a helper function 19234 for reading a digit. 19235 19236 2008-12-01 Cameron Zwarich <zwarich (a] apple.com> 19237 19238 Reviewed by Oliver Hunt. 19239 19240 Bug 20340: SegmentedVector segment allocations can lead to unsafe use of temporary registers 19241 <https://bugs.webkit.org/show_bug.cgi?id=20340> 19242 19243 SegmentedVector currently frees segments and reallocates them when used 19244 as a stack. This can lead to unsafe use of pointers into freed segments. 19245 19246 In order to fix this problem, SegmentedVector will be changed to only 19247 grow and never shrink. Also, rename the reserveCapacity() member 19248 function to grow() to match the actual usage in BytecodeGenerator, where 19249 this function is used to allocate a group of registers at once, rather 19250 than merely saving space for them. 19251 19252 * bytecompiler/BytecodeGenerator.cpp: 19253 (JSC::BytecodeGenerator::BytecodeGenerator): Use grow() instead of 19254 reserveCapacity(). 19255 * bytecompiler/SegmentedVector.h: 19256 (JSC::SegmentedVector::SegmentedVector): 19257 (JSC::SegmentedVector::last): 19258 (JSC::SegmentedVector::append): 19259 (JSC::SegmentedVector::removeLast): 19260 (JSC::SegmentedVector::grow): Renamed from reserveCapacity(). 19261 (JSC::SegmentedVector::clear): 19262 19263 2008-12-01 Mark Rowe <mrowe (a] apple.com> 19264 19265 Rubber-stamped by Anders Carlsson. 19266 19267 Disable WREC for x86_64 since memory allocated by the system allocator is not marked executable, 19268 which causes 64-bit debug builds to crash. Once we have a dedicated allocator for executable 19269 memory we can turn this back on. 19270 19271 * wtf/Platform.h: 19272 19273 2008-12-01 Antti Koivisto <antti (a] apple.com> 19274 19275 Reviewed by Maciej Stachowiak. 19276 19277 Restore inline buffer after vector is shrunk back below its inline capacity. 19278 19279 * wtf/Vector.h: 19280 (WTF::): 19281 (WTF::VectorBuffer::restoreInlineBufferIfNeeded): 19282 (WTF::::shrinkCapacity): 19283 19284 2008-11-30 Antti Koivisto <antti (a] apple.com> 19285 19286 Reviewed by Mark Rowe. 19287 19288 Try to return free pages in the current thread cache too. 19289 19290 * wtf/FastMalloc.cpp: 19291 (WTF::TCMallocStats::releaseFastMallocFreeMemory): 19292 19293 2008-12-01 David Levin <levin (a] chromium.org> 19294 19295 Reviewed by Alexey Proskuryakov. 19296 19297 https://bugs.webkit.org/show_bug.cgi?id=22567 19298 Make HashTable work as expected with respect to threads. Specifically, it has class-level 19299 thread safety and constant methods work on constant objects without synchronization. 19300 19301 No observable change in behavior, so no test. This only affects debug builds. 19302 19303 * wtf/HashTable.cpp: 19304 (WTF::hashTableStatsMutex): 19305 (WTF::HashTableStats::~HashTableStats): 19306 (WTF::HashTableStats::recordCollisionAtCount): 19307 Guarded variable access with a mutex. 19308 19309 * wtf/HashTable.h: 19310 (WTF::::lookup): 19311 (WTF::::lookupForWriting): 19312 (WTF::::fullLookupForWriting): 19313 (WTF::::add): 19314 (WTF::::reinsert): 19315 (WTF::::remove): 19316 (WTF::::rehash): 19317 Changed increments of static variables to use atomicIncrement. 19318 19319 (WTF::::invalidateIterators): 19320 (WTF::addIterator): 19321 (WTF::removeIterator): 19322 Guarded mutable access with a mutex. 19323 19324 2008-11-29 Gavin Barraclough <barraclough (a] apple.com> 19325 19326 Reviewed by Cameron Zwarich. 19327 19328 Enable WREC on PLATFORM(X86_64). This change predominantly requires changes to the 19329 WREC::Generator::generateEnter method to support the x86-64 ABI, and addition of 19330 support for a limited number of quadword operations in the X86Assembler. 19331 19332 This patch will cause the JS heap to be allocated with RWX permissions on 64-bit Mac 19333 platforms. This is a regression with respect to previous 64-bit behaviour, but is no 19334 more permissive than on 32-bit builds. This issue should be addressed at some point. 19335 (This is tracked by bug #21783.) 19336 19337 https://bugs.webkit.org/show_bug.cgi?id=22554 19338 Greater than 4x speedup on regexp-dna, on x86-64. 19339 19340 * assembler/MacroAssembler.h: 19341 (JSC::MacroAssembler::addPtr): 19342 (JSC::MacroAssembler::loadPtr): 19343 (JSC::MacroAssembler::storePtr): 19344 (JSC::MacroAssembler::pop): 19345 (JSC::MacroAssembler::push): 19346 (JSC::MacroAssembler::move): 19347 * assembler/X86Assembler.h: 19348 (JSC::X86Assembler::): 19349 (JSC::X86Assembler::movq_rr): 19350 (JSC::X86Assembler::addl_i8m): 19351 (JSC::X86Assembler::addl_i32r): 19352 (JSC::X86Assembler::addq_i8r): 19353 (JSC::X86Assembler::addq_i32r): 19354 (JSC::X86Assembler::movq_mr): 19355 (JSC::X86Assembler::movq_rm): 19356 * wrec/WREC.h: 19357 * wrec/WRECGenerator.cpp: 19358 (JSC::WREC::Generator::generateEnter): 19359 (JSC::WREC::Generator::generateReturnSuccess): 19360 (JSC::WREC::Generator::generateReturnFailure): 19361 * wtf/Platform.h: 19362 * wtf/TCSystemAlloc.cpp: 19363 19364 2008-12-01 Cameron Zwarich <zwarich (a] apple.com> 19365 19366 Reviewed by Sam Weinig. 19367 19368 Preliminary work for bug 20340: SegmentedVector segment allocations can lead to unsafe use of temporary registers 19369 <https://bugs.webkit.org/show_bug.cgi?id=20340> 19370 19371 SegmentedVector currently frees segments and reallocates them when used 19372 as a stack. This can lead to unsafe use of pointers into freed segments. 19373 19374 In order to fix this problem, SegmentedVector will be changed to only 19375 grow and never shrink, with the sole exception of clearing all of its 19376 data, a capability that is required by Lexer. This patch changes the 19377 public interface to only allow for these capabilities. 19378 19379 * bytecompiler/BytecodeGenerator.cpp: 19380 (JSC::BytecodeGenerator::BytecodeGenerator): Use reserveCapacity() 19381 instead of resize() for m_globals and m_parameters. 19382 * bytecompiler/SegmentedVector.h: 19383 (JSC::SegmentedVector::resize): Removed. 19384 (JSC::SegmentedVector::reserveCapacity): Added. 19385 (JSC::SegmentedVector::clear): Added. 19386 (JSC::SegmentedVector::shrink): Removed. 19387 (JSC::SegmentedVector::grow): Removed. 19388 * parser/Lexer.cpp: 19389 (JSC::Lexer::clear): Use clear() instead of resize(0). 19390 19391 2008-11-30 Sam Weinig <sam (a] webkit.org> 19392 19393 Reviewed by Mark Rowe. 19394 19395 Renames jumps to m_jumps in JumpList. 19396 19397 * assembler/MacroAssembler.h: 19398 (JSC::MacroAssembler::JumpList::link): 19399 (JSC::MacroAssembler::JumpList::linkTo): 19400 (JSC::MacroAssembler::JumpList::append): 19401 19402 2008-11-30 Antti Koivisto <antti (a] apple.com> 19403 19404 Reviewed by Mark Rowe. 19405 19406 https://bugs.webkit.org/show_bug.cgi?id=22557 19407 19408 Report free size in central and thread caches too. 19409 19410 * wtf/FastMalloc.cpp: 19411 (WTF::TCMallocStats::fastMallocStatistics): 19412 * wtf/FastMalloc.h: 19413 19414 2008-11-29 Antti Koivisto <antti (a] apple.com> 19415 19416 Reviewed by Dan Bernstein. 19417 19418 https://bugs.webkit.org/show_bug.cgi?id=22557 19419 Add statistics for JavaScript GC heap. 19420 19421 * JavaScriptCore.exp: 19422 * runtime/Collector.cpp: 19423 (JSC::Heap::objectCount): 19424 (JSC::addToStatistics): 19425 (JSC::Heap::statistics): 19426 * runtime/Collector.h: 19427 19428 2008-11-29 Antti Koivisto <antti (a] apple.com> 19429 19430 Fix debug build by adding a stub method. 19431 19432 * wtf/FastMalloc.cpp: 19433 (WTF::fastMallocStatistics): 19434 19435 2008-11-29 Antti Koivisto <antti (a] apple.com> 19436 19437 Reviewed by Alexey Proskuryakov. 19438 19439 https://bugs.webkit.org/show_bug.cgi?id=22557 19440 19441 Add function for getting basic statistics from FastMalloc. 19442 19443 * JavaScriptCore.exp: 19444 * wtf/FastMalloc.cpp: 19445 (WTF::DLL_Length): 19446 (WTF::TCMalloc_PageHeap::ReturnedBytes): 19447 (WTF::TCMallocStats::fastMallocStatistics): 19448 * wtf/FastMalloc.h: 19449 19450 2008-11-29 Cameron Zwarich <zwarich (a] apple.com> 19451 19452 Not reviewed. 19453 19454 The C++ standard does not automatically grant the friendships of an 19455 enclosing class to its nested subclasses, so we should do so explicitly. 19456 This fixes the GCC 4.0 build, although both GCC 4.2 and Visual C++ 2005 19457 accept the incorrect code as it is. 19458 19459 * assembler/MacroAssembler.h: 19460 19461 2008-11-29 Gavin Barraclough <barraclough (a] apple.com> 19462 19463 Reviewed by Cameron Zwarich. 19464 19465 Add the class MacroAssembler to provide some abstraction of code generation, 19466 and change WREC to make use of this class, rather than directly accessing 19467 the X86Assembler. 19468 19469 This patch also allows WREC to be compiled without the rest of the JIT enabled. 19470 19471 * JavaScriptCore.xcodeproj/project.pbxproj: 19472 * assembler/MacroAssembler.h: Added. 19473 (JSC::MacroAssembler::): 19474 (JSC::MacroAssembler::MacroAssembler): 19475 (JSC::MacroAssembler::copyCode): 19476 (JSC::MacroAssembler::Address::Address): 19477 (JSC::MacroAssembler::ImplicitAddress::ImplicitAddress): 19478 (JSC::MacroAssembler::BaseIndex::BaseIndex): 19479 (JSC::MacroAssembler::Label::Label): 19480 (JSC::MacroAssembler::Jump::Jump): 19481 (JSC::MacroAssembler::Jump::link): 19482 (JSC::MacroAssembler::Jump::linkTo): 19483 (JSC::MacroAssembler::JumpList::link): 19484 (JSC::MacroAssembler::JumpList::linkTo): 19485 (JSC::MacroAssembler::JumpList::append): 19486 (JSC::MacroAssembler::Imm32::Imm32): 19487 (JSC::MacroAssembler::add32): 19488 (JSC::MacroAssembler::or32): 19489 (JSC::MacroAssembler::sub32): 19490 (JSC::MacroAssembler::loadPtr): 19491 (JSC::MacroAssembler::load32): 19492 (JSC::MacroAssembler::load16): 19493 (JSC::MacroAssembler::storePtr): 19494 (JSC::MacroAssembler::store32): 19495 (JSC::MacroAssembler::pop): 19496 (JSC::MacroAssembler::push): 19497 (JSC::MacroAssembler::peek): 19498 (JSC::MacroAssembler::poke): 19499 (JSC::MacroAssembler::move): 19500 (JSC::MacroAssembler::compareImm32ForBranch): 19501 (JSC::MacroAssembler::compareImm32ForBranchEquality): 19502 (JSC::MacroAssembler::jae32): 19503 (JSC::MacroAssembler::je32): 19504 (JSC::MacroAssembler::je16): 19505 (JSC::MacroAssembler::jg32): 19506 (JSC::MacroAssembler::jge32): 19507 (JSC::MacroAssembler::jl32): 19508 (JSC::MacroAssembler::jle32): 19509 (JSC::MacroAssembler::jne32): 19510 (JSC::MacroAssembler::jump): 19511 (JSC::MacroAssembler::breakpoint): 19512 (JSC::MacroAssembler::ret): 19513 * assembler/X86Assembler.h: 19514 (JSC::X86Assembler::cmpw_rm): 19515 * interpreter/Interpreter.cpp: 19516 (JSC::Interpreter::Interpreter): 19517 * interpreter/Interpreter.h: 19518 (JSC::Interpreter::assemblerBuffer): 19519 * runtime/RegExp.cpp: 19520 (JSC::RegExp::RegExp): 19521 * wrec/WREC.cpp: 19522 (JSC::WREC::Generator::compileRegExp): 19523 * wrec/WREC.h: 19524 * wrec/WRECFunctors.cpp: 19525 (JSC::WREC::GeneratePatternCharacterFunctor::generateAtom): 19526 (JSC::WREC::GenerateCharacterClassFunctor::generateAtom): 19527 (JSC::WREC::GenerateBackreferenceFunctor::generateAtom): 19528 (JSC::WREC::GenerateParenthesesNonGreedyFunctor::generateAtom): 19529 * wrec/WRECFunctors.h: 19530 (JSC::WREC::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor): 19531 * wrec/WRECGenerator.cpp: 19532 (JSC::WREC::Generator::generateEnter): 19533 (JSC::WREC::Generator::generateReturnSuccess): 19534 (JSC::WREC::Generator::generateSaveIndex): 19535 (JSC::WREC::Generator::generateIncrementIndex): 19536 (JSC::WREC::Generator::generateLoadCharacter): 19537 (JSC::WREC::Generator::generateJumpIfEndOfInput): 19538 (JSC::WREC::Generator::generateJumpIfNotEndOfInput): 19539 (JSC::WREC::Generator::generateReturnFailure): 19540 (JSC::WREC::Generator::generateBacktrack1): 19541 (JSC::WREC::Generator::generateBacktrackBackreference): 19542 (JSC::WREC::Generator::generateBackreferenceQuantifier): 19543 (JSC::WREC::Generator::generateNonGreedyQuantifier): 19544 (JSC::WREC::Generator::generateGreedyQuantifier): 19545 (JSC::WREC::Generator::generatePatternCharacter): 19546 (JSC::WREC::Generator::generateCharacterClassInvertedRange): 19547 (JSC::WREC::Generator::generateCharacterClassInverted): 19548 (JSC::WREC::Generator::generateCharacterClass): 19549 (JSC::WREC::Generator::generateParentheses): 19550 (JSC::WREC::Generator::generateParenthesesNonGreedy): 19551 (JSC::WREC::Generator::generateParenthesesResetTrampoline): 19552 (JSC::WREC::Generator::generateAssertionBOL): 19553 (JSC::WREC::Generator::generateAssertionEOL): 19554 (JSC::WREC::Generator::generateAssertionWordBoundary): 19555 (JSC::WREC::Generator::generateBackreference): 19556 (JSC::WREC::Generator::terminateAlternative): 19557 (JSC::WREC::Generator::terminateDisjunction): 19558 * wrec/WRECGenerator.h: 19559 (JSC::WREC::Generator::Generator): 19560 * wrec/WRECParser.cpp: 19561 (JSC::WREC::Parser::parsePatternCharacterQualifier): 19562 (JSC::WREC::Parser::parseCharacterClassQuantifier): 19563 (JSC::WREC::Parser::parseBackreferenceQuantifier): 19564 (JSC::WREC::Parser::parseParentheses): 19565 (JSC::WREC::Parser::parseCharacterClass): 19566 (JSC::WREC::Parser::parseOctalEscape): 19567 (JSC::WREC::Parser::parseEscape): 19568 (JSC::WREC::Parser::parseTerm): 19569 (JSC::WREC::Parser::parseDisjunction): 19570 * wrec/WRECParser.h: 19571 (JSC::WREC::Parser::Parser): 19572 (JSC::WREC::Parser::parsePattern): 19573 (JSC::WREC::Parser::parseAlternative): 19574 * wtf/Platform.h: 19575 19576 2008-11-28 Simon Hausmann <hausmann (a] webkit.org> 19577 19578 Reviewed by Tor Arne Vestb. 19579 19580 Fix compilation on Windows CE 19581 19582 Port away from the use of errno after calling strtol(), instead 19583 detect conversion errors by checking the result and the stop 19584 position. 19585 19586 * runtime/DateMath.cpp: 19587 (JSC::parseLong): 19588 (JSC::parseDate): 19589 19590 2008-11-28 Joerg Bornemann <joerg.bornemann (a] trolltech.com> 19591 19592 Reviewed by Simon Hausmann. 19593 19594 Implement lowResUTCTime() on Windows CE using GetSystemTime as _ftime() is not available. 19595 19596 * runtime/DateMath.cpp: 19597 (JSC::lowResUTCTime): 19598 19599 2008-11-28 Simon Hausmann <hausmann (a] webkit.org> 19600 19601 Rubber-stamped by Tor Arne Vestb. 19602 19603 Removed unnecessary inclusion of errno.h, which also fixes compilation on Windows CE. 19604 19605 * runtime/JSGlobalObjectFunctions.cpp: 19606 19607 2008-11-27 Cameron Zwarich <zwarich (a] apple.com> 19608 19609 Not reviewed. 19610 19611 r38825 made JSFunction::m_body private, but some inspector code in 19612 WebCore sets the field. Add setters for it. 19613 19614 * runtime/JSFunction.h: 19615 (JSC::JSFunction::setBody): 19616 19617 2008-11-27 Sam Weinig <sam (a] webkit.org> 19618 19619 Reviewed by Cameron Zwarich. 19620 19621 Fix FIXME by adding accessor for JSFunction's m_body property. 19622 19623 * interpreter/Interpreter.cpp: 19624 (JSC::Interpreter::cti_op_call_JSFunction): 19625 (JSC::Interpreter::cti_vm_dontLazyLinkCall): 19626 (JSC::Interpreter::cti_vm_lazyLinkCall): 19627 * profiler/Profiler.cpp: 19628 (JSC::createCallIdentifierFromFunctionImp): 19629 * runtime/Arguments.h: 19630 (JSC::Arguments::getArgumentsData): 19631 (JSC::Arguments::Arguments): 19632 * runtime/FunctionPrototype.cpp: 19633 (JSC::functionProtoFuncToString): 19634 * runtime/JSFunction.h: 19635 (JSC::JSFunction::JSFunction): 19636 (JSC::JSFunction::body): 19637 19638 2008-11-27 Sam Weinig <sam (a] webkit.org> 19639 19640 Reviewed by Oliver Hunt. 19641 19642 Remove unused member variables from ProgramNode. 19643 19644 * parser/Nodes.h: 19645 19646 2008-11-27 Brent Fulgham <bfulgham (a] gmail.com> 19647 19648 Reviewed by Alexey Proskuryakov. 19649 19650 Enable mouse panning feaure on Windows Cairo build. 19651 See http://bugs.webkit.org/show_bug.cgi?id=22525 19652 19653 * wtf/Platform.h: Enable mouse panning feaure on Windows Cairo build. 19654 19655 2008-11-27 Alp Toker <alp (a] nuanti.com> 19656 19657 Change recently introduced C++ comments in Platform.h to C comments to 19658 fix the minidom build with traditional C. 19659 19660 Build GtkLauncher and minidom with the '-ansi' compiler flag to detect 19661 API header breakage at build time. 19662 19663 * GNUmakefile.am: 19664 * wtf/Platform.h: 19665 19666 2008-11-27 Alp Toker <alp (a] nuanti.com> 19667 19668 Remove C++ comment from JavaScriptCore API headers (introduced r35449). 19669 Fixes build for ANSI C applications using the public API. 19670 19671 * API/WebKitAvailability.h: 19672 19673 2008-11-26 Eric Seidel <eric (a] webkit.org> 19674 19675 No review, build fix only. 19676 19677 Fix the JSC Chromium Mac build by adding JavaScriptCore/icu into the include path 19678 19679 * JavaScriptCore.scons: 19680 19681 2008-11-25 Cameron Zwarich <zwarich (a] apple.com> 19682 19683 Reviewed by Maciej Stachowiak. 19684 19685 Remove the unused member function JSFunction::getParameterName(). 19686 19687 * runtime/JSFunction.cpp: 19688 * runtime/JSFunction.h: 19689 19690 2008-11-24 Gavin Barraclough <barraclough (a] apple.com> 19691 19692 Reviewed by Geoff Garen. 19693 19694 Polymorpic caching for get by id chain. Similar to the polymorphic caching already implemented 19695 for self and proto accesses (implemented by allowing multiple trampolines to be JIT genertaed, 19696 and linked together) - the get by id chain caching is implemented as a genericization of the 19697 proto list caching, allowing cached access lists to contain a mix of proto and proto chain 19698 accesses (since in JS style inheritance hierarchies you may commonly see a mix of properties 19699 being overridden on the direct prototype, or higher up its prototype chain). 19700 19701 In order to allow this patch to compile there is a fix to appease gcc 4.2 compiler issues 19702 (removing the jumps between fall-through cases in privateExecute). 19703 19704 This patch also removes redundant immediate checking from the reptach code, and fixes a related 19705 memory leak (failure to deallocate trampolines). 19706 19707 ~2% progression on v8 tests (bulk on the win on deltablue) 19708 19709 * bytecode/Instruction.h: 19710 (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::): 19711 (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): 19712 (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): 19713 (JSC::PolymorphicAccessStructureList::derefStructures): 19714 * interpreter/Interpreter.cpp: 19715 (JSC::countPrototypeChainEntriesAndCheckForProxies): 19716 (JSC::Interpreter::tryCacheGetByID): 19717 (JSC::Interpreter::privateExecute): 19718 (JSC::Interpreter::tryCTICacheGetByID): 19719 (JSC::Interpreter::cti_op_get_by_id_self_fail): 19720 (JSC::getPolymorphicAccessStructureListSlot): 19721 (JSC::Interpreter::cti_op_get_by_id_proto_list): 19722 * interpreter/Interpreter.h: 19723 * jit/JIT.cpp: 19724 (JSC::JIT::privateCompileGetByIdProto): 19725 (JSC::JIT::privateCompileGetByIdSelfList): 19726 (JSC::JIT::privateCompileGetByIdProtoList): 19727 (JSC::JIT::privateCompileGetByIdChainList): 19728 (JSC::JIT::privateCompileGetByIdChain): 19729 (JSC::JIT::privateCompilePatchGetArrayLength): 19730 * jit/JIT.h: 19731 (JSC::JIT::compileGetByIdChainList): 19732 19733 2008-11-25 Cameron Zwarich <zwarich (a] apple.com> 19734 19735 Reviewed by Alexey Proskuryakov. 19736 19737 Move the collect() call in Heap::heapAllocate() that is conditionally 19738 compiled under COLLECT_ON_EVERY_ALLOCATION so that it is before we get 19739 information about the heap. This was causing assertion failures for me 19740 while I was reducing a bug. 19741 19742 * runtime/Collector.cpp: 19743 (JSC::Heap::heapAllocate): 19744 19745 2008-11-24 Cameron Zwarich <zwarich (a] apple.com> 19746 19747 Reviewed by Geoff Garen. 19748 19749 Bug 13790: Function declarations are not treated as statements (used to affect starcraft2.com) 19750 <https://bugs.webkit.org/show_bug.cgi?id=13790> 19751 19752 Modify the parser to treat function declarations as statements, 19753 simplifying the grammar in the process. Technically, according to the 19754 grammar in the ECMA spec, function declarations are not statements and 19755 can not be used everywhere that statements can, but it is not worth the 19756 possibility compatibility issues just to stick to the spec in this case. 19757 19758 * parser/Grammar.y: 19759 * parser/Nodes.cpp: 19760 (JSC::FuncDeclNode::emitBytecode): Avoid returning ignoredResult() 19761 as a result, because it causes a crash in DoWhileNode::emitBytecode(). 19762 19763 2008-11-24 Geoffrey Garen <ggaren (a] apple.com> 19764 19765 Reviewed by Sam Weinig. 19766 19767 Unroll the regexp matching loop by 1. 10% speedup on simple matching 19768 stress test. No change on SunSpider. 19769 19770 (I decided not to unroll to arbitrary levels because the returns diminsh 19771 quickly.) 19772 19773 * wrec/WREC.cpp: 19774 (JSC::WREC::compileRegExp): 19775 * wrec/WRECGenerator.cpp: 19776 (JSC::WREC::Generator::generateJumpIfEndOfInput): 19777 (JSC::WREC::Generator::generateJumpIfNotEndOfInput): 19778 * wrec/WRECGenerator.h: 19779 * wrec/WRECParser.h: 19780 (JSC::WREC::Parser::error): 19781 (JSC::WREC::Parser::parsePattern): 19782 19783 2008-11-24 Geoffrey Garen <ggaren (a] apple.com> 19784 19785 Reviewed by Sam Weinig. 19786 19787 Removed some unnecessary "Generator::" prefixes. 19788 19789 * wrec/WRECGenerator.cpp: 19790 (JSC::WREC::Generator::generateEnter): 19791 (JSC::WREC::Generator::generateReturnSuccess): 19792 (JSC::WREC::Generator::generateSaveIndex): 19793 (JSC::WREC::Generator::generateIncrementIndex): 19794 (JSC::WREC::Generator::generateLoopIfNotEndOfInput): 19795 (JSC::WREC::Generator::generateReturnFailure): 19796 19797 2008-11-24 Geoffrey Garen <ggaren (a] apple.com> 19798 19799 Reviewed by Sam Weinig. 19800 19801 Made a bunch of WREC::Parser functions private, and added an explicit 19802 "reset()" function, so a parser can be reused. 19803 19804 * wrec/WRECParser.h: 19805 (JSC::WREC::Parser::Parser): 19806 (JSC::WREC::Parser::generator): 19807 (JSC::WREC::Parser::ignoreCase): 19808 (JSC::WREC::Parser::multiline): 19809 (JSC::WREC::Parser::recordSubpattern): 19810 (JSC::WREC::Parser::numSubpatterns): 19811 (JSC::WREC::Parser::parsePattern): 19812 (JSC::WREC::Parser::parseAlternative): 19813 (JSC::WREC::Parser::reset): 19814 19815 2008-11-24 Gavin Barraclough <barraclough (a] apple.com> 19816 19817 Reviewed by Cameron Zwarich. 19818 19819 Implement repatching for get by id chain. 19820 Previously the access is performed in a function stub, in the repatch form 19821 the trampoline is not called to; instead the hot path is relinked to jump 19822 directly to the trampoline, if it fails it will jump to the slow case. 19823 19824 https://bugs.webkit.org/show_bug.cgi?id=22449 19825 3% progression on deltablue. 19826 19827 * jit/JIT.cpp: 19828 (JSC::JIT::privateCompileGetByIdProto): 19829 (JSC::JIT::privateCompileGetByIdChain): 19830 19831 2008-11-24 Joerg Bornemann <joerg.bornemann (a] trolltech.com> 19832 19833 Reviewed by Simon Hausmann. 19834 19835 https://bugs.webkit.org/show_bug.cgi?id=20746 19836 19837 Various small compilation fixes to make the Qt port of WebKit 19838 compile on Windows CE. 19839 19840 * config.h: Don't set _CRT_RAND_S for CE, it's not available. 19841 * jsc.cpp: Disabled use of debugger includes for CE. It 19842 does not have the debugging functions. 19843 * runtime/DateMath.cpp: Use localtime() on Windows CE. 19844 * wtf/Assertions.cpp: Compile on Windows CE without debugger. 19845 * wtf/Assertions.h: Include windows.h before defining ASSERT. 19846 * wtf/MathExtras.h: Include stdlib.h instead of xmath.h. 19847 * wtf/Platform.h: Disable ERRNO_H and detect endianess based 19848 on the Qt endianess. On Qt for Windows CE the endianess is 19849 defined by the vendor specific build spec. 19850 * wtf/Threading.h: Use the volatile-less atomic functions. 19851 * wtf/dtoa.cpp: Compile without errno. 19852 * wtf/win/MainThreadWin.cpp: Don't include windows.h on CE after 19853 Assertions.h due to the redefinition of ASSERT. 19854 19855 2008-11-22 Gavin Barraclough <barraclough (a] apple.com> 19856 19857 Reviewed by Cameron Zwarich. 19858 19859 Replace accidentally deleted immediate check from get by id chain trampoline. 19860 https://bugs.webkit.org/show_bug.cgi?id=22413 19861 19862 * jit/JIT.cpp: 19863 (JSC::JIT::privateCompileGetByIdChain): 19864 19865 2008-11-21 Gavin Barraclough <barraclough (a] apple.com> 19866 19867 Reviewed by Oliver Hunt. 19868 19869 Add (really) polymorphic caching for get by id self. 19870 Very similar to caching of prototype accesses, described below. 19871 19872 Oh, also, probably shouldn't have been leaking those structure list objects. 19873 19874 4% preogression on deltablue. 19875 19876 * bytecode/CodeBlock.cpp: 19877 (JSC::CodeBlock::dump): 19878 (JSC::CodeBlock::derefStructures): 19879 (JSC::PrototypeStructureList::derefStructures): 19880 * bytecode/Instruction.h: 19881 * bytecode/Opcode.h: 19882 * interpreter/Interpreter.cpp: 19883 (JSC::Interpreter::privateExecute): 19884 (JSC::Interpreter::cti_op_get_by_id_self_fail): 19885 * jit/JIT.cpp: 19886 (JSC::JIT::privateCompileMainPass): 19887 (JSC::JIT::privateCompileGetByIdSelfList): 19888 (JSC::JIT::patchGetByIdSelf): 19889 * jit/JIT.h: 19890 (JSC::JIT::compileGetByIdSelfList): 19891 19892 2008-11-21 Geoffrey Garen <ggaren (a] apple.com> 19893 19894 Reviewed by Sam Weinig. 19895 19896 Fixed many crashes seen 'round the world (but only in release builds). 19897 19898 Update outputParameter offset to reflect slight re-ordering of push 19899 instructions in r38669. 19900 19901 * wrec/WRECGenerator.cpp: 19902 19903 2008-11-21 Geoffrey Garen <ggaren (a] apple.com> 19904 19905 Reviewed by Sam Weinig. 19906 19907 A little more RegExp refactoring. 19908 19909 Deployed a helper function for reading the next character. Used the "link 19910 vector of jumps" helper in a place I missed before. 19911 19912 * wrec/WRECGenerator.cpp: 19913 (JSC::WREC::Generator::generateLoadCharacter): 19914 (JSC::WREC::Generator::generatePatternCharacter): 19915 (JSC::WREC::Generator::generateCharacterClass): 19916 (JSC::WREC::Generator::generateAssertionEOL): 19917 (JSC::WREC::Generator::generateAssertionWordBoundary): 19918 * wrec/WRECGenerator.h: 19919 19920 2008-11-21 Alexey Proskuryakov <ap (a] webkit.org> 19921 19922 Reviewed by Dan Bernstein. 19923 19924 https://bugs.webkit.org/show_bug.cgi?id=22402 19925 Replace abort() with CRASH() 19926 19927 * wtf/Assertions.h: Added a different method to crash, which should work even is 0xbbadbeef 19928 is a valid memory address. 19929 19930 * runtime/Collector.cpp: 19931 * wtf/FastMalloc.cpp: 19932 * wtf/FastMalloc.h: 19933 * wtf/TCSpinLock.h: 19934 Replace abort() with CRASH(). 19935 19936 2008-11-21 Alexey Proskuryakov <ap (a] webkit.org> 19937 19938 Reverted fix for bug 22042 (Replace abort() with CRASH()), because it was breaking 19939 FOR_EACH_OPCODE_ID macro somehow, making Safari crash. 19940 19941 * runtime/Collector.cpp: 19942 (JSC::Heap::heapAllocate): 19943 (JSC::Heap::collect): 19944 * wtf/Assertions.h: 19945 * wtf/FastMalloc.cpp: 19946 (WTF::fastMalloc): 19947 (WTF::fastCalloc): 19948 (WTF::fastRealloc): 19949 (WTF::InitSizeClasses): 19950 (WTF::PageHeapAllocator::New): 19951 (WTF::TCMallocStats::do_malloc): 19952 * wtf/FastMalloc.h: 19953 * wtf/TCSpinLock.h: 19954 (TCMalloc_SpinLock::Init): 19955 (TCMalloc_SpinLock::Finalize): 19956 (TCMalloc_SpinLock::Lock): 19957 (TCMalloc_SpinLock::Unlock): 19958 19959 2008-11-21 Geoffrey Garen <ggaren (a] apple.com> 19960 19961 Reviewed by Sam Weinig. 19962 19963 A little more RegExp refactoring. 19964 19965 Moved all assembly from WREC.cpp into WRECGenerator helper functions. 19966 This should help with portability and readability. 19967 19968 Removed ASSERTs after calls to executableCopy(), and changed 19969 executableCopy() to ASSERT instead. 19970 19971 * assembler/X86Assembler.h: 19972 (JSC::X86Assembler::executableCopy): 19973 * jit/JIT.cpp: 19974 (JSC::JIT::privateCompile): 19975 (JSC::JIT::privateCompileGetByIdSelf): 19976 (JSC::JIT::privateCompileGetByIdProto): 19977 (JSC::JIT::privateCompileGetByIdChain): 19978 (JSC::JIT::privateCompilePutByIdReplace): 19979 (JSC::JIT::privateCompilePutByIdTransition): 19980 (JSC::JIT::privateCompileCTIMachineTrampolines): 19981 (JSC::JIT::privateCompilePatchGetArrayLength): 19982 * wrec/WREC.cpp: 19983 (JSC::WREC::compileRegExp): 19984 * wrec/WRECGenerator.cpp: 19985 (JSC::WREC::Generator::generateEnter): 19986 (JSC::WREC::Generator::generateReturnSuccess): 19987 (JSC::WREC::Generator::generateSaveIndex): 19988 (JSC::WREC::Generator::generateIncrementIndex): 19989 (JSC::WREC::Generator::generateLoopIfNotEndOfInput): 19990 (JSC::WREC::Generator::generateReturnFailure): 19991 * wrec/WRECGenerator.h: 19992 * wrec/WRECParser.h: 19993 (JSC::WREC::Parser::ignoreCase): 19994 (JSC::WREC::Parser::generator): 19995 19996 2008-11-21 Alexey Proskuryakov <ap (a] webkit.org> 19997 19998 Build fix. 19999 20000 * wtf/Assertions.h: Use ::abort for C++ code. 20001 20002 2008-11-21 Alexey Proskuryakov <ap (a] webkit.org> 20003 20004 Reviewed by Sam Weinig. 20005 20006 https://bugs.webkit.org/show_bug.cgi?id=22402 20007 Replace abort() with CRASH() 20008 20009 * wtf/Assertions.h: Added abort() after an attempt to crash for extra safety. 20010 20011 * runtime/Collector.cpp: 20012 * wtf/FastMalloc.cpp: 20013 * wtf/FastMalloc.h: 20014 * wtf/TCSpinLock.h: 20015 Replace abort() with CRASH(). 20016 20017 2008-11-21 Geoffrey Garen <ggaren (a] apple.com> 20018 20019 Reviewed by Sam Weinig. 20020 20021 Renamed wrec => generator. 20022 20023 * wrec/WRECFunctors.cpp: 20024 (JSC::WREC::GeneratePatternCharacterFunctor::generateAtom): 20025 (JSC::WREC::GeneratePatternCharacterFunctor::backtrack): 20026 (JSC::WREC::GenerateCharacterClassFunctor::generateAtom): 20027 (JSC::WREC::GenerateCharacterClassFunctor::backtrack): 20028 (JSC::WREC::GenerateBackreferenceFunctor::generateAtom): 20029 (JSC::WREC::GenerateBackreferenceFunctor::backtrack): 20030 (JSC::WREC::GenerateParenthesesNonGreedyFunctor::generateAtom): 20031 20032 2008-11-19 Gavin Barraclough <barraclough (a] apple.com> 20033 20034 Reviewed by Darin Adler. 20035 20036 Add support for (really) polymorphic caching of prototype accesses. 20037 20038 If a cached prototype access misses, cti_op_get_by_id_proto_list is called. 20039 When this occurs the Structure pointers from the instruction stream are copied 20040 off into a new ProtoStubInfo object. A second prototype access trampoline is 20041 generated, and chained onto the first. Subsequent missed call to 20042 cti_op_get_by_id_proto_list_append, which append futher new trampolines, up to 20043 PROTOTYPE_LIST_CACHE_SIZE (currently 4). If any of the misses result in an 20044 access other than to a direct prototype property, list formation is halted (or 20045 for the initial miss, does not take place at all). 20046 20047 Separate fail case functions are provided for each access since this contributes 20048 to the performance progression (enables better processor branch prediction). 20049 20050 Overall this is a near 5% progression on v8, with around 10% wins on richards 20051 and deltablue. 20052 20053 * bytecode/CodeBlock.cpp: 20054 (JSC::CodeBlock::dump): 20055 (JSC::CodeBlock::derefStructures): 20056 * bytecode/Instruction.h: 20057 (JSC::ProtoStructureList::ProtoStubInfo::set): 20058 (JSC::ProtoStructureList::ProtoStructureList): 20059 (JSC::Instruction::Instruction): 20060 (JSC::Instruction::): 20061 * bytecode/Opcode.h: 20062 * interpreter/Interpreter.cpp: 20063 (JSC::Interpreter::privateExecute): 20064 (JSC::Interpreter::tryCTICacheGetByID): 20065 (JSC::Interpreter::cti_op_put_by_id_fail): 20066 (JSC::Interpreter::cti_op_get_by_id_self_fail): 20067 (JSC::Interpreter::cti_op_get_by_id_proto_list): 20068 (JSC::Interpreter::cti_op_get_by_id_proto_list_append): 20069 (JSC::Interpreter::cti_op_get_by_id_proto_list_full): 20070 (JSC::Interpreter::cti_op_get_by_id_proto_fail): 20071 (JSC::Interpreter::cti_op_get_by_id_chain_fail): 20072 (JSC::Interpreter::cti_op_get_by_id_array_fail): 20073 (JSC::Interpreter::cti_op_get_by_id_string_fail): 20074 * interpreter/Interpreter.h: 20075 * jit/JIT.cpp: 20076 (JSC::JIT::privateCompileMainPass): 20077 (JSC::JIT::privateCompileGetByIdSelf): 20078 (JSC::JIT::privateCompileGetByIdProto): 20079 (JSC::JIT::privateCompileGetByIdProtoList): 20080 (JSC::JIT::privateCompileGetByIdChain): 20081 (JSC::JIT::privateCompileCTIMachineTrampolines): 20082 (JSC::JIT::privateCompilePatchGetArrayLength): 20083 * jit/JIT.h: 20084 (JSC::JIT::compileGetByIdProtoList): 20085 20086 2008-11-20 Sam Weinig <sam (a] webkit.org> 20087 20088 Try and fix the tiger build. 20089 20090 * parser/Grammar.y: 20091 20092 2008-11-20 Eric Seidel <eric (a] webkit.org> 20093 20094 Reviewed by Darin Adler. 20095 20096 Make JavaScriptCore Chromium build under Windows (cmd only, cygwin almost works) 20097 https://bugs.webkit.org/show_bug.cgi?id=22347 20098 20099 * JavaScriptCore.scons: 20100 * parser/Parser.cpp: Add using std::auto_ptr since we use auto_ptr 20101 20102 2008-11-20 Steve Falkenburg <sfalken (a] apple.com> 20103 20104 Fix build. 20105 20106 Reviewed by Sam Weinig. 20107 20108 * parser/Parser.cpp: 20109 (JSC::Parser::reparse): 20110 20111 2008-11-20 Geoffrey Garen <ggaren (a] apple.com> 20112 20113 Reviewed by Sam Weinig. 20114 20115 A little more RegExp refactoring. 20116 20117 Created a helper function in the assembler for linking a vector of 20118 JmpSrc to a location, and deployed it in a bunch of places. 20119 20120 * JavaScriptCore.xcodeproj/project.pbxproj: 20121 * assembler/X86Assembler.h: 20122 (JSC::X86Assembler::link): 20123 * wrec/WREC.cpp: 20124 (JSC::WREC::compileRegExp): 20125 * wrec/WRECGenerator.cpp: 20126 (JSC::WREC::Generator::generateNonGreedyQuantifier): 20127 (JSC::WREC::Generator::generateGreedyQuantifier): 20128 (JSC::WREC::Generator::generateCharacterClassInverted): 20129 (JSC::WREC::Generator::generateParentheses): 20130 (JSC::WREC::Generator::generateParenthesesResetTrampoline): 20131 (JSC::WREC::Generator::generateAssertionBOL): 20132 (JSC::WREC::Generator::generateAssertionEOL): 20133 (JSC::WREC::Generator::generateAssertionWordBoundary): 20134 (JSC::WREC::Generator::terminateAlternative): 20135 (JSC::WREC::Generator::terminateDisjunction): 20136 * wrec/WRECParser.cpp: 20137 * wrec/WRECParser.h: 20138 (JSC::WREC::Parser::consumeHex): 20139 20140 2008-11-20 Sam Weinig <sam (a] webkit.org> 20141 20142 Fix non-mac builds. 20143 20144 * parser/Lexer.cpp: 20145 * parser/Parser.cpp: 20146 20147 2008-11-20 Sam Weinig <sam (a] webkit.org> 20148 20149 Reviewed by Darin Adler. 20150 20151 Patch for https://bugs.webkit.org/show_bug.cgi?id=22385 20152 <rdar://problem/6390179> 20153 Lazily reparse FunctionBodyNodes on first execution. 20154 20155 - Saves 57MB on Membuster head. 20156 20157 * bytecompiler/BytecodeGenerator.cpp: 20158 (JSC::BytecodeGenerator::generate): Remove vector shrinking since this is now 20159 handled by destroying the ScopeNodeData after generation. 20160 20161 * parser/Grammar.y: Add alternate NoNode version of the grammar 20162 that does not create nodes. This is used to lazily create FunctionBodyNodes 20163 on first execution. 20164 20165 * parser/Lexer.cpp: 20166 (JSC::Lexer::setCode): Fix bug where on reparse, the Lexer was confused about 20167 what position and length meant. Position is the current position in the original 20168 data buffer (important for getting correct line/column information) and length 20169 the end offset in the original buffer. 20170 * parser/Lexer.h: 20171 (JSC::Lexer::sourceCode): Positions are relative to the beginning of the buffer. 20172 20173 * parser/Nodes.cpp: 20174 (JSC::ScopeNodeData::ScopeNodeData): Move initialization of ScopeNode data here. 20175 (JSC::ScopeNode::ScopeNode): Add constructor that only sets the JSGlobalData 20176 for FunctionBodyNode stubs. 20177 (JSC::ScopeNode::~ScopeNode): Release m_children now that we don't inherit from 20178 BlockNode. 20179 (JSC::ScopeNode::releaseNodes): Ditto. 20180 (JSC::EvalNode::generateBytecode): Only shrink m_children, as we need to keep around 20181 the rest of the data. 20182 (JSC::FunctionBodyNode::FunctionBodyNode): Add constructor that only sets the 20183 JSGlobalData. 20184 (JSC::FunctionBodyNode::create): Ditto. 20185 (JSC::FunctionBodyNode::generateBytecode): If we don't have the data, do a reparse 20186 to construct it. Then after generation, destroy the data. 20187 (JSC::ProgramNode::generateBytecode): After generation, destroy the AST data. 20188 * parser/Nodes.h: 20189 (JSC::ExpressionNode::): Add isFuncExprNode for FunctionConstructor. 20190 (JSC::StatementNode::): Add isExprStatementNode for FunctionConstructor. 20191 (JSC::ExprStatementNode::): Ditto. 20192 (JSC::ExprStatementNode::expr): Add accessor for FunctionConstructor. 20193 (JSC::FuncExprNode::): Add isFuncExprNode for FunctionConstructor 20194 20195 (JSC::ScopeNode::adoptData): Adopts a ScopeNodeData. 20196 (JSC::ScopeNode::data): Accessor for ScopeNodeData. 20197 (JSC::ScopeNode::destroyData): Deletes the ScopeNodeData. 20198 (JSC::ScopeNode::setFeatures): Added. 20199 (JSC::ScopeNode::varStack): Added assert. 20200 (JSC::ScopeNode::functionStack): Ditto. 20201 (JSC::ScopeNode::children): Ditto. 20202 (JSC::ScopeNode::neededConstants): Ditto. 20203 Factor m_varStack, m_functionStack, m_children and m_numConstants into ScopeNodeData. 20204 20205 * parser/Parser.cpp: 20206 (JSC::Parser::reparse): Reparse the SourceCode in the FunctionBodyNode and set 20207 set up the ScopeNodeData for it. 20208 * parser/Parser.h: 20209 20210 * parser/SourceCode.h: 20211 (JSC::SourceCode::endOffset): Added for use in the lexer. 20212 20213 * runtime/FunctionConstructor.cpp: 20214 (JSC::getFunctionBody): Assuming a ProgramNode with one FunctionExpression in it, 20215 get the FunctionBodyNode. Any issues signifies a parse failure in constructFunction. 20216 (JSC::constructFunction): Make parsing functions in the form new Function(""), easier 20217 by concatenating the strings together (with some glue) and parsing the function expression 20218 as a ProgramNode from which we can receive the FunctionBodyNode. This has the added benefit 20219 of not having special parsing code for the arguments and lazily constructing the 20220 FunctionBodyNode's AST on first execution. 20221 20222 * runtime/Identifier.h: 20223 (JSC::operator!=): Added. 20224 20225 2008-11-20 Sam Weinig <sam (a] webkit.org> 20226 20227 Reviewed by Geoffrey Garen. 20228 20229 Speedup the lexer to offset coming re-parsing patch. 20230 20231 - .6% progression on Sunspider. 20232 20233 * bytecompiler/SegmentedVector.h: 20234 (JSC::SegmentedVector::shrink): Fixed bug where m_size would not be 20235 set when shrinking to 0. 20236 20237 * parser/Lexer.cpp: 20238 (JSC::Lexer::Lexer): 20239 (JSC::Lexer::isIdentStart): Use isASCIIAlpha and isASCII to avoid going into ICU in the common cases. 20240 (JSC::Lexer::isIdentPart): Use isASCIIAlphanumeric and isASCII to avoid going into ICU in the common cases 20241 (JSC::isDecimalDigit): Use version in ASCIICType.h. Inlining it was a regression. 20242 (JSC::Lexer::isHexDigit): Ditto. 20243 (JSC::Lexer::isOctalDigit): Ditto. 20244 (JSC::Lexer::clear): Resize the m_identifiers SegmentedVector to initial 20245 capacity 20246 * parser/Lexer.h: Remove unused m_strings vector. Make m_identifiers 20247 a SegmentedVector<Identifier> to avoid allocating a new Identifier* for 20248 each identifier found. The SegmentedVector is need so we can passes 20249 references to the Identifier to the parser, which remain valid even when 20250 the vector is resized. 20251 (JSC::Lexer::makeIdentifier): Inline and return a reference to the added 20252 Identifier. 20253 20254 2008-11-20 Sam Weinig <sam (a] webkit.org> 20255 20256 Reviewed by Darin Adler. 20257 20258 Add isASCII to ASCIICType. Use coming soon! 20259 20260 * wtf/ASCIICType.h: 20261 (WTF::isASCII): 20262 20263 2008-11-20 Sam Weinig <sam (a] webkit.org> 20264 20265 Reviewed by Darin Adler. 20266 20267 Add OwnPtr constructor and OwnPtr::adopt that take an auto_ptr. 20268 20269 * wtf/OwnPtr.h: 20270 (WTF::OwnPtr::OwnPtr): 20271 (WTF::OwnPtr::adopt): 20272 20273 2008-11-20 Alexey Proskuryakov <ap (a] webkit.org> 20274 20275 Reviewed by Darin Adler. 20276 20277 https://bugs.webkit.org/show_bug.cgi?id=22364 20278 Crashes seen on Tiger buildbots due to worker threads exhausting pthread keys 20279 20280 * runtime/Collector.cpp: 20281 (JSC::Heap::Heap): 20282 (JSC::Heap::destroy): 20283 (JSC::Heap::makeUsableFromMultipleThreads): 20284 (JSC::Heap::registerThread): 20285 * runtime/Collector.h: 20286 Pthread key for tracking threads is only created on request now, because this is a limited 20287 resource, and thread tracking is not needed for worker heaps, or for WebCore heap. 20288 20289 * API/JSContextRef.cpp: (JSGlobalContextCreateInGroup): Call makeUsableFromMultipleThreads(). 20290 20291 * runtime/JSGlobalData.cpp: (JSC::JSGlobalData::sharedInstance): Ditto. 20292 20293 * runtime/JSGlobalData.h: (JSC::JSGlobalData::makeUsableFromMultipleThreads): Just forward 20294 the call to Heap, which clients need not know about, ideally. 20295 20296 2008-11-20 Geoffrey Garen <ggaren (a] apple.com> 20297 20298 Reviewed by Sam Weinig. 20299 20300 A little more WREC refactoring. 20301 20302 Removed the "Register" suffix from register names in WREC, and renamed: 20303 currentPosition => index 20304 currentValue => character 20305 quantifierCount => repeatCount 20306 20307 Added a top-level parsePattern function to the WREC parser, which 20308 allowed me to remove the error() and atEndOfPattern() accessors. 20309 20310 Factored out an MSVC customization into a constant. 20311 20312 Renamed nextLabel => beginPattern. 20313 20314 * wrec/WREC.cpp: 20315 (JSC::WREC::compileRegExp): 20316 * wrec/WRECGenerator.cpp: 20317 (JSC::WREC::Generator::generateBacktrack1): 20318 (JSC::WREC::Generator::generateBacktrackBackreference): 20319 (JSC::WREC::Generator::generateBackreferenceQuantifier): 20320 (JSC::WREC::Generator::generateNonGreedyQuantifier): 20321 (JSC::WREC::Generator::generateGreedyQuantifier): 20322 (JSC::WREC::Generator::generatePatternCharacter): 20323 (JSC::WREC::Generator::generateCharacterClassInvertedRange): 20324 (JSC::WREC::Generator::generateCharacterClassInverted): 20325 (JSC::WREC::Generator::generateCharacterClass): 20326 (JSC::WREC::Generator::generateParentheses): 20327 (JSC::WREC::Generator::generateParenthesesResetTrampoline): 20328 (JSC::WREC::Generator::generateAssertionBOL): 20329 (JSC::WREC::Generator::generateAssertionEOL): 20330 (JSC::WREC::Generator::generateAssertionWordBoundary): 20331 (JSC::WREC::Generator::generateBackreference): 20332 (JSC::WREC::Generator::generateDisjunction): 20333 (JSC::WREC::Generator::terminateDisjunction): 20334 * wrec/WRECGenerator.h: 20335 * wrec/WRECParser.h: 20336 (JSC::WREC::Parser::parsePattern): 20337 20338 2008-11-19 Geoffrey Garen <ggaren (a] apple.com> 20339 20340 Reviewed by Darin Adler. 20341 20342 https://bugs.webkit.org/show_bug.cgi?id=22361 20343 A little more RegExp refactoring. 20344 20345 Consistently named variables holding the starting position at which 20346 regexp matching should begin to "startOffset". 20347 20348 A few more "regExpObject" => "regExpConstructor" changes. 20349 20350 Refactored RegExpObject::match for clarity, and replaced a slow "get" 20351 of the "global" property with a fast access to the global bit. 20352 20353 Made the error message you see when RegExpObject::match has no input a 20354 little more informative, as in Firefox. 20355 20356 * runtime/RegExp.cpp: 20357 (JSC::RegExp::match): 20358 * runtime/RegExp.h: 20359 * runtime/RegExpObject.cpp: 20360 (JSC::RegExpObject::match): 20361 * runtime/StringPrototype.cpp: 20362 (JSC::stringProtoFuncReplace): 20363 (JSC::stringProtoFuncMatch): 20364 (JSC::stringProtoFuncSearch): 20365 20366 2008-11-19 Geoffrey Garen <ggaren (a] apple.com> 20367 20368 Reviewed by Sam Weinig. 20369 20370 A little more refactoring. 20371 20372 Removed the "emit" and "emitUnlinked" prefixes from the assembler. 20373 20374 Moved the JmpSrc and JmpDst class definitions to the top of the X86 20375 assembler class, in accordance with WebKit style guidelines. 20376 20377 * assembler/X86Assembler.h: 20378 (JSC::X86Assembler::JmpSrc::JmpSrc): 20379 (JSC::X86Assembler::JmpDst::JmpDst): 20380 (JSC::X86Assembler::int3): 20381 (JSC::X86Assembler::pushl_m): 20382 (JSC::X86Assembler::popl_m): 20383 (JSC::X86Assembler::movl_rr): 20384 (JSC::X86Assembler::addl_rr): 20385 (JSC::X86Assembler::addl_i8r): 20386 (JSC::X86Assembler::addl_i8m): 20387 (JSC::X86Assembler::addl_i32r): 20388 (JSC::X86Assembler::addl_mr): 20389 (JSC::X86Assembler::andl_rr): 20390 (JSC::X86Assembler::andl_i32r): 20391 (JSC::X86Assembler::cmpl_i8r): 20392 (JSC::X86Assembler::cmpl_rr): 20393 (JSC::X86Assembler::cmpl_rm): 20394 (JSC::X86Assembler::cmpl_mr): 20395 (JSC::X86Assembler::cmpl_i32r): 20396 (JSC::X86Assembler::cmpl_i32m): 20397 (JSC::X86Assembler::cmpl_i8m): 20398 (JSC::X86Assembler::cmpw_rm): 20399 (JSC::X86Assembler::orl_rr): 20400 (JSC::X86Assembler::orl_mr): 20401 (JSC::X86Assembler::orl_i32r): 20402 (JSC::X86Assembler::subl_rr): 20403 (JSC::X86Assembler::subl_i8r): 20404 (JSC::X86Assembler::subl_i8m): 20405 (JSC::X86Assembler::subl_i32r): 20406 (JSC::X86Assembler::subl_mr): 20407 (JSC::X86Assembler::testl_i32r): 20408 (JSC::X86Assembler::testl_i32m): 20409 (JSC::X86Assembler::testl_rr): 20410 (JSC::X86Assembler::xorl_i8r): 20411 (JSC::X86Assembler::xorl_rr): 20412 (JSC::X86Assembler::sarl_i8r): 20413 (JSC::X86Assembler::sarl_CLr): 20414 (JSC::X86Assembler::shl_i8r): 20415 (JSC::X86Assembler::shll_CLr): 20416 (JSC::X86Assembler::imull_rr): 20417 (JSC::X86Assembler::imull_i32r): 20418 (JSC::X86Assembler::idivl_r): 20419 (JSC::X86Assembler::negl_r): 20420 (JSC::X86Assembler::movl_mr): 20421 (JSC::X86Assembler::movzbl_rr): 20422 (JSC::X86Assembler::movzwl_mr): 20423 (JSC::X86Assembler::movl_rm): 20424 (JSC::X86Assembler::movl_i32r): 20425 (JSC::X86Assembler::movl_i32m): 20426 (JSC::X86Assembler::leal_mr): 20427 (JSC::X86Assembler::jmp_r): 20428 (JSC::X86Assembler::jmp_m): 20429 (JSC::X86Assembler::movsd_mr): 20430 (JSC::X86Assembler::xorpd_mr): 20431 (JSC::X86Assembler::movsd_rm): 20432 (JSC::X86Assembler::movd_rr): 20433 (JSC::X86Assembler::cvtsi2sd_rr): 20434 (JSC::X86Assembler::cvttsd2si_rr): 20435 (JSC::X86Assembler::addsd_mr): 20436 (JSC::X86Assembler::subsd_mr): 20437 (JSC::X86Assembler::mulsd_mr): 20438 (JSC::X86Assembler::addsd_rr): 20439 (JSC::X86Assembler::subsd_rr): 20440 (JSC::X86Assembler::mulsd_rr): 20441 (JSC::X86Assembler::ucomis_rr): 20442 (JSC::X86Assembler::pextrw_irr): 20443 (JSC::X86Assembler::call): 20444 (JSC::X86Assembler::jmp): 20445 (JSC::X86Assembler::jne): 20446 (JSC::X86Assembler::jnz): 20447 (JSC::X86Assembler::je): 20448 (JSC::X86Assembler::jl): 20449 (JSC::X86Assembler::jb): 20450 (JSC::X86Assembler::jle): 20451 (JSC::X86Assembler::jbe): 20452 (JSC::X86Assembler::jge): 20453 (JSC::X86Assembler::jg): 20454 (JSC::X86Assembler::ja): 20455 (JSC::X86Assembler::jae): 20456 (JSC::X86Assembler::jo): 20457 (JSC::X86Assembler::jp): 20458 (JSC::X86Assembler::js): 20459 (JSC::X86Assembler::predictNotTaken): 20460 (JSC::X86Assembler::convertToFastCall): 20461 (JSC::X86Assembler::restoreArgumentReference): 20462 (JSC::X86Assembler::restoreArgumentReferenceForTrampoline): 20463 (JSC::X86Assembler::modRm_rr): 20464 (JSC::X86Assembler::modRm_rr_Unchecked): 20465 (JSC::X86Assembler::modRm_rm): 20466 (JSC::X86Assembler::modRm_rm_Unchecked): 20467 (JSC::X86Assembler::modRm_rmsib): 20468 (JSC::X86Assembler::modRm_opr): 20469 (JSC::X86Assembler::modRm_opr_Unchecked): 20470 (JSC::X86Assembler::modRm_opm): 20471 (JSC::X86Assembler::modRm_opm_Unchecked): 20472 (JSC::X86Assembler::modRm_opmsib): 20473 * jit/JIT.cpp: 20474 (JSC::JIT::emitNakedCall): 20475 (JSC::JIT::emitNakedFastCall): 20476 (JSC::JIT::emitCTICall): 20477 (JSC::JIT::emitJumpSlowCaseIfNotJSCell): 20478 (JSC::JIT::emitJumpSlowCaseIfNotImmNum): 20479 (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): 20480 (JSC::JIT::emitFastArithIntToImmOrSlowCase): 20481 (JSC::JIT::emitArithIntToImmWithJump): 20482 (JSC::JIT::compileOpCall): 20483 (JSC::JIT::compileOpStrictEq): 20484 (JSC::JIT::emitSlowScriptCheck): 20485 (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): 20486 (JSC::JIT::compileBinaryArithOp): 20487 (JSC::JIT::privateCompileMainPass): 20488 (JSC::JIT::privateCompileSlowCases): 20489 (JSC::JIT::privateCompile): 20490 (JSC::JIT::privateCompileGetByIdSelf): 20491 (JSC::JIT::privateCompileGetByIdProto): 20492 (JSC::JIT::privateCompileGetByIdChain): 20493 (JSC::JIT::privateCompilePutByIdReplace): 20494 (JSC::JIT::privateCompilePutByIdTransition): 20495 (JSC::JIT::privateCompileCTIMachineTrampolines): 20496 (JSC::JIT::privateCompilePatchGetArrayLength): 20497 * wrec/WREC.cpp: 20498 (JSC::WREC::compileRegExp): 20499 * wrec/WRECGenerator.cpp: 20500 (JSC::WREC::Generator::generateBackreferenceQuantifier): 20501 (JSC::WREC::Generator::generateNonGreedyQuantifier): 20502 (JSC::WREC::Generator::generateGreedyQuantifier): 20503 (JSC::WREC::Generator::generatePatternCharacter): 20504 (JSC::WREC::Generator::generateCharacterClassInvertedRange): 20505 (JSC::WREC::Generator::generateCharacterClassInverted): 20506 (JSC::WREC::Generator::generateCharacterClass): 20507 (JSC::WREC::Generator::generateParentheses): 20508 (JSC::WREC::Generator::generateParenthesesNonGreedy): 20509 (JSC::WREC::Generator::generateParenthesesResetTrampoline): 20510 (JSC::WREC::Generator::generateAssertionBOL): 20511 (JSC::WREC::Generator::generateAssertionEOL): 20512 (JSC::WREC::Generator::generateAssertionWordBoundary): 20513 (JSC::WREC::Generator::generateBackreference): 20514 (JSC::WREC::Generator::generateDisjunction): 20515 20516 2008-11-19 Simon Hausmann <hausmann (a] webkit.org> 20517 20518 Sun CC build fix, removed trailing comman for last enum value. 20519 20520 * wtf/unicode/qt4/UnicodeQt4.h: 20521 (WTF::Unicode::): 20522 20523 2008-11-19 Mark Rowe <mrowe (a] apple.com> 20524 20525 Reviewed by Alexey Proskuryakov. 20526 20527 Expand the workaround for Apple GCC compiler bug <rdar://problem/6354696> to all versions of GCC 4.0.1. 20528 It has been observed with builds 5465 (Xcode 3.0) and 5484 (Xcode 3.1), and there is no evidence 20529 that it has been fixed in newer builds of GCC 4.0.1. 20530 20531 This addresses <https://bugs.webkit.org/show_bug.cgi?id=22351> (WebKit nightly crashes on launch on 10.4.11). 20532 20533 * wtf/StdLibExtras.h: 20534 20535 2008-11-18 Cameron Zwarich <zwarich (a] apple.com> 20536 20537 Reviewed by Maciej Stachowiak and Geoff Garen. 20538 20539 Bug 22287: ASSERTION FAILED: Not enough jumps linked in slow case codegen in CTI::privateCompileSlowCases()) 20540 <https://bugs.webkit.org/show_bug.cgi?id=22287> 20541 20542 Fix a typo in the number cell reuse code where the first and second 20543 operands are sometimes confused. 20544 20545 * jit/JIT.cpp: 20546 (JSC::JIT::compileBinaryArithOpSlowCase): 20547 20548 2008-11-18 Dan Bernstein <mitz (a] apple.com> 20549 20550 - try to fix the Windows build 20551 20552 * interpreter/Interpreter.cpp: 20553 (JSC::Interpreter::privateExecute): 20554 20555 2008-11-18 Geoffrey Garen <ggaren (a] apple.com> 20556 20557 Reviewed by Sam Weinig. 20558 20559 Minor RegExp cleanup. 20560 20561 SunSpider says no change. 20562 20563 * runtime/RegExpObject.cpp: 20564 (JSC::RegExpObject::match): Renamed "regExpObj" to "regExpConstructor". 20565 20566 * wrec/WREC.cpp: 20567 (JSC::WREC::compileRegExp): Instead of checking for a NULL output vector, 20568 ASSERT that the output vector is not NULL. (The rest of WREC is not 20569 safe to use with a NULL output vector, and we probably don't want to 20570 spend the time and/or performance to make it safe.) 20571 20572 2008-11-18 Geoffrey Garen <ggaren (a] apple.com> 20573 20574 Reviewed by Darin Adler. 20575 20576 A little more renaming and refactoring. 20577 20578 VM_CHECK_EXCEPTION() => CHECK_FOR_EXCEPTION(). 20579 NEXT_INSTRUCTION => NEXT_INSTRUCTION(). 20580 20581 Removed the "Error_" and "TempError_" prefixes from WREC error types. 20582 20583 Refactored the WREC parser so it doesn't need a "setError" function, 20584 and changed "isEndOfPattern" and its use -- they read kind of backwards 20585 before. 20586 20587 Changed our "TODO:" error messages at least to say something, since you 20588 can't say "TODO:" in shipping software. 20589 20590 * interpreter/Interpreter.cpp: 20591 (JSC::Interpreter::privateExecute): 20592 (JSC::Interpreter::cti_op_convert_this): 20593 (JSC::Interpreter::cti_op_add): 20594 (JSC::Interpreter::cti_op_pre_inc): 20595 (JSC::Interpreter::cti_op_loop_if_less): 20596 (JSC::Interpreter::cti_op_loop_if_lesseq): 20597 (JSC::Interpreter::cti_op_put_by_id): 20598 (JSC::Interpreter::cti_op_put_by_id_second): 20599 (JSC::Interpreter::cti_op_put_by_id_generic): 20600 (JSC::Interpreter::cti_op_put_by_id_fail): 20601 (JSC::Interpreter::cti_op_get_by_id): 20602 (JSC::Interpreter::cti_op_get_by_id_second): 20603 (JSC::Interpreter::cti_op_get_by_id_generic): 20604 (JSC::Interpreter::cti_op_get_by_id_fail): 20605 (JSC::Interpreter::cti_op_instanceof): 20606 (JSC::Interpreter::cti_op_del_by_id): 20607 (JSC::Interpreter::cti_op_mul): 20608 (JSC::Interpreter::cti_op_call_NotJSFunction): 20609 (JSC::Interpreter::cti_op_resolve): 20610 (JSC::Interpreter::cti_op_construct_NotJSConstruct): 20611 (JSC::Interpreter::cti_op_get_by_val): 20612 (JSC::Interpreter::cti_op_resolve_func): 20613 (JSC::Interpreter::cti_op_sub): 20614 (JSC::Interpreter::cti_op_put_by_val): 20615 (JSC::Interpreter::cti_op_put_by_val_array): 20616 (JSC::Interpreter::cti_op_lesseq): 20617 (JSC::Interpreter::cti_op_loop_if_true): 20618 (JSC::Interpreter::cti_op_negate): 20619 (JSC::Interpreter::cti_op_resolve_skip): 20620 (JSC::Interpreter::cti_op_resolve_global): 20621 (JSC::Interpreter::cti_op_div): 20622 (JSC::Interpreter::cti_op_pre_dec): 20623 (JSC::Interpreter::cti_op_jless): 20624 (JSC::Interpreter::cti_op_not): 20625 (JSC::Interpreter::cti_op_jtrue): 20626 (JSC::Interpreter::cti_op_post_inc): 20627 (JSC::Interpreter::cti_op_eq): 20628 (JSC::Interpreter::cti_op_lshift): 20629 (JSC::Interpreter::cti_op_bitand): 20630 (JSC::Interpreter::cti_op_rshift): 20631 (JSC::Interpreter::cti_op_bitnot): 20632 (JSC::Interpreter::cti_op_resolve_with_base): 20633 (JSC::Interpreter::cti_op_mod): 20634 (JSC::Interpreter::cti_op_less): 20635 (JSC::Interpreter::cti_op_neq): 20636 (JSC::Interpreter::cti_op_post_dec): 20637 (JSC::Interpreter::cti_op_urshift): 20638 (JSC::Interpreter::cti_op_bitxor): 20639 (JSC::Interpreter::cti_op_bitor): 20640 (JSC::Interpreter::cti_op_push_scope): 20641 (JSC::Interpreter::cti_op_to_jsnumber): 20642 (JSC::Interpreter::cti_op_in): 20643 (JSC::Interpreter::cti_op_del_by_val): 20644 * wrec/WREC.cpp: 20645 (JSC::WREC::compileRegExp): 20646 * wrec/WRECParser.cpp: 20647 (JSC::WREC::Parser::parseGreedyQuantifier): 20648 (JSC::WREC::Parser::parseParentheses): 20649 (JSC::WREC::Parser::parseCharacterClass): 20650 (JSC::WREC::Parser::parseEscape): 20651 * wrec/WRECParser.h: 20652 (JSC::WREC::Parser::): 20653 (JSC::WREC::Parser::atEndOfPattern): 20654 20655 2008-11-18 Alexey Proskuryakov <ap (a] webkit.org> 20656 20657 Reviewed by Darin Adler. 20658 20659 https://bugs.webkit.org/show_bug.cgi?id=22337 20660 Enable workers by default 20661 20662 * Configurations/JavaScriptCore.xcconfig: Define ENABLE_WORKERS. 20663 20664 2008-11-18 Alexey Proskuryakov <ap (a] webkit.org> 20665 20666 - Windows build fix 20667 20668 * wrec/WRECFunctors.h: 20669 * wrec/WRECGenerator.h: 20670 * wrec/WRECParser.h: 20671 CharacterClass is a struct, not a class, fix forward declarations. 20672 20673 2008-11-18 Dan Bernstein <mitz (a] apple.com> 20674 20675 - Windows build fix 20676 20677 * assembler/X86Assembler.h: 20678 20679 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20680 20681 Not reviewed. 20682 20683 Try to fix gtk build. 20684 20685 * wrec/Quantifier.h: 20686 20687 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20688 20689 Not reviewed. 20690 20691 Try to fix gtk build. 20692 20693 * assembler/AssemblerBuffer.h: 20694 20695 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20696 20697 Reviewed by Sam Weinig. 20698 20699 Split WREC classes out into individual files, with a few modifications 20700 to more closely match the WebKit coding style. 20701 20702 * GNUmakefile.am: 20703 * JavaScriptCore.scons: 20704 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 20705 * JavaScriptCore.xcodeproj/project.pbxproj: 20706 * assembler/X86Assembler.h: 20707 * runtime/RegExp.cpp: 20708 * wrec/CharacterClass.cpp: Copied from wrec/CharacterClassConstructor.cpp. 20709 (JSC::WREC::CharacterClass::newline): 20710 (JSC::WREC::CharacterClass::digits): 20711 (JSC::WREC::CharacterClass::spaces): 20712 (JSC::WREC::CharacterClass::wordchar): 20713 (JSC::WREC::CharacterClass::nondigits): 20714 (JSC::WREC::CharacterClass::nonspaces): 20715 (JSC::WREC::CharacterClass::nonwordchar): 20716 * wrec/CharacterClass.h: Copied from wrec/CharacterClassConstructor.h. 20717 * wrec/CharacterClassConstructor.cpp: 20718 (JSC::WREC::CharacterClassConstructor::addSortedRange): 20719 (JSC::WREC::CharacterClassConstructor::append): 20720 * wrec/CharacterClassConstructor.h: 20721 * wrec/Quantifier.h: Copied from wrec/WREC.h. 20722 * wrec/WREC.cpp: 20723 (JSC::WREC::compileRegExp): 20724 * wrec/WREC.h: 20725 * wrec/WRECFunctors.cpp: Copied from wrec/WREC.cpp. 20726 * wrec/WRECFunctors.h: Copied from wrec/WREC.cpp. 20727 (JSC::WREC::GenerateAtomFunctor::~GenerateAtomFunctor): 20728 (JSC::WREC::GeneratePatternCharacterFunctor::GeneratePatternCharacterFunctor): 20729 (JSC::WREC::GenerateCharacterClassFunctor::GenerateCharacterClassFunctor): 20730 (JSC::WREC::GenerateBackreferenceFunctor::GenerateBackreferenceFunctor): 20731 (JSC::WREC::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor): 20732 * wrec/WRECGenerator.cpp: Copied from wrec/WREC.cpp. 20733 (JSC::WREC::Generator::generatePatternCharacter): 20734 (JSC::WREC::Generator::generateCharacterClassInvertedRange): 20735 (JSC::WREC::Generator::generateCharacterClassInverted): 20736 (JSC::WREC::Generator::generateCharacterClass): 20737 (JSC::WREC::Generator::generateParentheses): 20738 (JSC::WREC::Generator::generateAssertionBOL): 20739 (JSC::WREC::Generator::generateAssertionEOL): 20740 (JSC::WREC::Generator::generateAssertionWordBoundary): 20741 * wrec/WRECGenerator.h: Copied from wrec/WREC.h. 20742 * wrec/WRECParser.cpp: Copied from wrec/WREC.cpp. 20743 (JSC::WREC::Parser::parseGreedyQuantifier): 20744 (JSC::WREC::Parser::parseCharacterClassQuantifier): 20745 (JSC::WREC::Parser::parseParentheses): 20746 (JSC::WREC::Parser::parseCharacterClass): 20747 (JSC::WREC::Parser::parseEscape): 20748 (JSC::WREC::Parser::parseTerm): 20749 * wrec/WRECParser.h: Copied from wrec/WREC.h. 20750 (JSC::WREC::Parser::): 20751 (JSC::WREC::Parser::Parser): 20752 (JSC::WREC::Parser::setError): 20753 (JSC::WREC::Parser::error): 20754 (JSC::WREC::Parser::recordSubpattern): 20755 (JSC::WREC::Parser::numSubpatterns): 20756 (JSC::WREC::Parser::ignoreCase): 20757 (JSC::WREC::Parser::multiline): 20758 20759 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20760 20761 Not reviewed. 20762 20763 Try to fix a few builds. 20764 20765 * JavaScriptCoreSources.bkl: 20766 20767 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20768 20769 Not reviewed. 20770 20771 Try to fix a few builds. 20772 20773 * JavaScriptCore.pri: 20774 * JavaScriptCore.scons: 20775 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 20776 20777 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20778 20779 Reviewed by Sam Weinig. 20780 20781 Moved VM/CTI.* => jit/JIT.*. 20782 20783 Removed VM. 20784 20785 * GNUmakefile.am: 20786 * JavaScriptCore.pri: 20787 * JavaScriptCore.scons: 20788 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 20789 * JavaScriptCore.xcodeproj/project.pbxproj: 20790 * VM/CTI.cpp: Removed. 20791 * VM/CTI.h: Removed. 20792 * bytecode/CodeBlock.cpp: 20793 * interpreter/Interpreter.cpp: 20794 * jit: Added. 20795 * jit/JIT.cpp: Copied from VM/CTI.cpp. 20796 * jit/JIT.h: Copied from VM/CTI.h. 20797 * runtime/RegExp.cpp: 20798 20799 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20800 20801 Reviewed by Sam Weinig. 20802 20803 Moved runtime/ExecState.* => interpreter/CallFrame.*. 20804 20805 * API/JSBase.cpp: 20806 * API/OpaqueJSString.cpp: 20807 * GNUmakefile.am: 20808 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 20809 * JavaScriptCore.xcodeproj/project.pbxproj: 20810 * debugger/DebuggerCallFrame.h: 20811 * interpreter/CallFrame.cpp: Copied from runtime/ExecState.cpp. 20812 * interpreter/CallFrame.h: Copied from runtime/ExecState.h. 20813 * interpreter/Interpreter.cpp: 20814 * parser/Nodes.cpp: 20815 * profiler/ProfileGenerator.cpp: 20816 * profiler/Profiler.cpp: 20817 * runtime/ClassInfo.h: 20818 * runtime/Collector.cpp: 20819 * runtime/Completion.cpp: 20820 * runtime/ExceptionHelpers.cpp: 20821 * runtime/ExecState.cpp: Removed. 20822 * runtime/ExecState.h: Removed. 20823 * runtime/Identifier.cpp: 20824 * runtime/JSFunction.cpp: 20825 * runtime/JSGlobalObjectFunctions.cpp: 20826 * runtime/JSLock.cpp: 20827 * runtime/JSNumberCell.h: 20828 * runtime/JSObject.h: 20829 * runtime/JSString.h: 20830 * runtime/Lookup.h: 20831 * runtime/PropertyNameArray.h: 20832 20833 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20834 20835 Not reviewed. 20836 20837 Try to fix Windows build. 20838 20839 * API/APICast.h: 20840 20841 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20842 20843 Not reviewed. 20844 20845 Try to fix Windows build. 20846 20847 * API/APICast.h: 20848 * runtime/ExecState.h: 20849 20850 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20851 20852 Reviewed by Sam Weinig. 20853 20854 Moved VM/SamplingTool.* => bytecode/SamplingTool.*. 20855 20856 * GNUmakefile.am: 20857 * JavaScriptCore.pri: 20858 * JavaScriptCore.scons: 20859 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 20860 * JavaScriptCore.xcodeproj/project.pbxproj: 20861 * JavaScriptCoreSources.bkl: 20862 * VM/SamplingTool.cpp: Removed. 20863 * VM/SamplingTool.h: Removed. 20864 * bytecode/SamplingTool.cpp: Copied from VM/SamplingTool.cpp. 20865 * bytecode/SamplingTool.h: Copied from VM/SamplingTool.h. 20866 * jsc.cpp: 20867 (runWithScripts): 20868 20869 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20870 20871 Not reviewed. 20872 20873 Try to fix Windows build. 20874 20875 * runtime/ExecState.h: 20876 20877 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20878 20879 Reviewed by Sam Weinig. 20880 20881 Moved VM/ExceptionHelpers.cpp => runtime/ExceptionHelpers.cpp. 20882 20883 * GNUmakefile.am: 20884 * JavaScriptCore.pri: 20885 * JavaScriptCore.scons: 20886 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 20887 * JavaScriptCore.xcodeproj/project.pbxproj: 20888 * JavaScriptCoreSources.bkl: 20889 * VM/ExceptionHelpers.cpp: Removed. 20890 * runtime/ExceptionHelpers.cpp: Copied from VM/ExceptionHelpers.cpp. 20891 20892 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20893 20894 Reviewed by Sam Weinig. 20895 20896 Moved VM/RegisterFile.cpp => interpreter/RegisterFile.cpp. 20897 20898 * AllInOneFile.cpp: 20899 * GNUmakefile.am: 20900 * JavaScriptCore.pri: 20901 * JavaScriptCore.scons: 20902 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 20903 * JavaScriptCore.xcodeproj/project.pbxproj: 20904 * JavaScriptCoreSources.bkl: 20905 * VM/RegisterFile.cpp: Removed. 20906 * interpreter/RegisterFile.cpp: Copied from VM/RegisterFile.cpp. 20907 20908 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20909 20910 Not reviewed. 20911 20912 Try to fix Windows build. 20913 20914 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 20915 20916 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20917 20918 Not reviewed. 20919 20920 Try to fix Windows build. 20921 20922 * JavaScriptCore.vcproj/jsc/jsc.vcproj: 20923 20924 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20925 20926 Not reviewed. 20927 20928 Try to fix Windows build. 20929 20930 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 20931 20932 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20933 20934 Reviewed by Sam Weinig. 20935 20936 Moved: 20937 VM/ExceptionHelpers.h => runtime/ExceptionHelpers.h 20938 VM/Register.h => interpreter/Register.h 20939 VM/RegisterFile.h => interpreter/RegisterFile.h 20940 20941 20942 * GNUmakefile.am: 20943 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 20944 * JavaScriptCore.xcodeproj/project.pbxproj: 20945 * VM/ExceptionHelpers.h: Removed. 20946 * VM/Register.h: Removed. 20947 * VM/RegisterFile.h: Removed. 20948 * interpreter/Register.h: Copied from VM/Register.h. 20949 * interpreter/RegisterFile.h: Copied from VM/RegisterFile.h. 20950 * runtime/ExceptionHelpers.h: Copied from VM/ExceptionHelpers.h. 20951 20952 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20953 20954 Not reviewed. 20955 20956 Try to fix Qt build. 20957 20958 * JavaScriptCore.pri: 20959 20960 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20961 20962 Reviewed by Sam Weinig. 20963 20964 Moved VM/Machine.cpp => interpreter/Interpreter.cpp. 20965 20966 * DerivedSources.make: 20967 * GNUmakefile.am: 20968 * JavaScriptCore.pri: 20969 * JavaScriptCore.scons: 20970 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 20971 * JavaScriptCore.xcodeproj/project.pbxproj: 20972 * JavaScriptCoreSources.bkl: 20973 * VM/Machine.cpp: Removed. 20974 * interpreter/Interpreter.cpp: Copied from VM/Machine.cpp. 20975 20976 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 20977 20978 Reviewed by Sam Weinig. 20979 20980 Moved VM/Machine.h => interpreter/Interpreter.h 20981 20982 * GNUmakefile.am: 20983 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 20984 * JavaScriptCore.xcodeproj/project.pbxproj: 20985 * VM/CTI.cpp: 20986 * VM/CTI.h: 20987 * VM/ExceptionHelpers.cpp: 20988 * VM/Machine.cpp: 20989 * VM/Machine.h: Removed. 20990 * VM/SamplingTool.cpp: 20991 * bytecode/CodeBlock.cpp: 20992 * bytecompiler/BytecodeGenerator.cpp: 20993 * bytecompiler/BytecodeGenerator.h: 20994 * debugger/DebuggerCallFrame.cpp: 20995 * interpreter: Added. 20996 * interpreter/Interpreter.h: Copied from VM/Machine.h. 20997 * profiler/ProfileGenerator.cpp: 20998 * runtime/Arguments.h: 20999 * runtime/ArrayPrototype.cpp: 21000 * runtime/Collector.cpp: 21001 * runtime/Completion.cpp: 21002 * runtime/ExecState.h: 21003 * runtime/FunctionPrototype.cpp: 21004 * runtime/JSActivation.cpp: 21005 * runtime/JSFunction.cpp: 21006 * runtime/JSGlobalData.cpp: 21007 * runtime/JSGlobalObject.cpp: 21008 * runtime/JSGlobalObjectFunctions.cpp: 21009 * wrec/WREC.cpp: 21010 21011 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 21012 21013 Reviewed by Sam Weinig. 21014 21015 Moved runtime/Interpreter.cpp => runtime/Completion.cpp. 21016 21017 Moved functions from Interpreter.h to Completion.h, and removed 21018 Interpreter.h from the project. 21019 21020 * API/JSBase.cpp: 21021 * AllInOneFile.cpp: 21022 * GNUmakefile.am: 21023 * JavaScriptCore.pri: 21024 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 21025 * JavaScriptCore.xcodeproj/project.pbxproj: 21026 * JavaScriptCoreSources.bkl: 21027 * jsc.cpp: 21028 * runtime/Completion.cpp: Copied from runtime/Interpreter.cpp. 21029 * runtime/Completion.h: 21030 * runtime/Interpreter.cpp: Removed. 21031 * runtime/Interpreter.h: Removed. 21032 21033 2008-11-17 Gabor Loki <loki (a] inf.u-szeged.hu> 21034 21035 Reviewed by Darin Adler. 21036 21037 <https://bugs.webkit.org/show_bug.cgi?id=22312> 21038 Fix PCRE include path problem on Qt-port 21039 21040 * JavaScriptCore.pri: 21041 * pcre/pcre.pri: 21042 21043 2008-11-17 Gabor Loki <loki (a] inf.u-szeged.hu> 21044 21045 Reviewed by Darin Adler. 21046 21047 <https://bugs.webkit.org/show_bug.cgi?id=22313> 21048 Add missing CTI source to the build system on Qt-port 21049 21050 * JavaScriptCore.pri: 21051 21052 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 21053 21054 Not reviewed. 21055 21056 Try to fix JSGlue build. 21057 21058 * JavaScriptCore.xcodeproj/project.pbxproj: 21059 21060 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 21061 21062 Not reviewed. 21063 21064 Try to fix Qt build. 21065 21066 * jsc.pro: 21067 21068 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 21069 21070 Not reviewed. 21071 21072 Try to fix Qt build. 21073 21074 * JavaScriptCore.pri: 21075 21076 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 21077 21078 Not reviewed. 21079 21080 Try to fix Qt build. 21081 21082 * JavaScriptCore.pri: 21083 21084 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 21085 21086 Reviewed by Sam Weinig. 21087 21088 More file moves: 21089 21090 VM/CodeBlock.* => bytecode/CodeBlock.* 21091 VM/EvalCodeCache.h => bytecode/EvalCodeCache.h 21092 VM/Instruction.h => bytecode/Instruction.h 21093 VM/Opcode.* => bytecode/Opcode.* 21094 21095 * GNUmakefile.am: 21096 * JavaScriptCore.scons: 21097 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 21098 * JavaScriptCore.vcproj/jsc/jsc.vcproj: 21099 * JavaScriptCore.xcodeproj/project.pbxproj: 21100 * JavaScriptCoreSources.bkl: 21101 * VM/CodeBlock.cpp: Removed. 21102 * VM/CodeBlock.h: Removed. 21103 * VM/EvalCodeCache.h: Removed. 21104 * VM/Instruction.h: Removed. 21105 * VM/Opcode.cpp: Removed. 21106 * VM/Opcode.h: Removed. 21107 * bytecode: Added. 21108 * bytecode/CodeBlock.cpp: Copied from VM/CodeBlock.cpp. 21109 * bytecode/CodeBlock.h: Copied from VM/CodeBlock.h. 21110 * bytecode/EvalCodeCache.h: Copied from VM/EvalCodeCache.h. 21111 * bytecode/Instruction.h: Copied from VM/Instruction.h. 21112 * bytecode/Opcode.cpp: Copied from VM/Opcode.cpp. 21113 * bytecode/Opcode.h: Copied from VM/Opcode.h. 21114 * jsc.pro: 21115 * jscore.bkl: 21116 21117 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 21118 21119 Not reviewed. 21120 21121 Try to fix a few more builds. 21122 21123 * GNUmakefile.am: 21124 * JavaScriptCore.pri: 21125 * JavaScriptCore.scons: 21126 * JavaScriptCoreSources.bkl: 21127 21128 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 21129 21130 Not reviewed. 21131 21132 Try to fix gtk build. 21133 21134 * GNUmakefile.am: 21135 21136 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 21137 21138 Not reviewed. 21139 21140 Try to fix Windows build. 21141 21142 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 21143 21144 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 21145 21146 Reviewed by Sam Weinig. 21147 21148 Some file moves: 21149 21150 VM/LabelID.h => bytecompiler/Label.h 21151 VM/RegisterID.h => bytecompiler/RegisterID.h 21152 VM/SegmentedVector.h => bytecompiler/SegmentedVector.h 21153 bytecompiler/CodeGenerator.* => bytecompiler/BytecodeGenerator.* 21154 21155 * AllInOneFile.cpp: 21156 * JavaScriptCore.xcodeproj/project.pbxproj: 21157 * VM/LabelID.h: Removed. 21158 * VM/RegisterID.h: Removed. 21159 * VM/SegmentedVector.h: Removed. 21160 * bytecompiler/BytecodeGenerator.cpp: Copied from bytecompiler/CodeGenerator.cpp. 21161 * bytecompiler/BytecodeGenerator.h: Copied from bytecompiler/CodeGenerator.h. 21162 * bytecompiler/CodeGenerator.cpp: Removed. 21163 * bytecompiler/CodeGenerator.h: Removed. 21164 * bytecompiler/Label.h: Copied from VM/LabelID.h. 21165 * bytecompiler/LabelScope.h: 21166 * bytecompiler/RegisterID.h: Copied from VM/RegisterID.h. 21167 * bytecompiler/SegmentedVector.h: Copied from VM/SegmentedVector.h. 21168 * jsc.cpp: 21169 * parser/Nodes.cpp: 21170 21171 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 21172 21173 Not reviewed. 21174 21175 Try to fix Windows build. 21176 21177 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 21178 21179 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 21180 21181 Not reviewed. 21182 21183 Try to fix Windows build. 21184 21185 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 21186 21187 2008-11-17 Geoffrey Garen <ggaren (a] apple.com> 21188 21189 Not reviewed. 21190 21191 Try to fix Windows build. 21192 21193 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 21194 21195 2008-11-16 Geoffrey Garen <ggaren (a] apple.com> 21196 21197 Not reviewed. 21198 21199 Try to fix Windows build. 21200 21201 * JavaScriptCore.vcproj/jsc/jsc.vcproj: 21202 21203 2008-11-16 Geoffrey Garen <ggaren (a] apple.com> 21204 21205 Not reviewed. 21206 21207 Try to fix Windows build. 21208 21209 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 21210 21211 2008-11-16 Geoffrey Garen <ggaren (a] apple.com> 21212 21213 Reviewed by Sam Weinig. 21214 21215 Moved masm => assembler and split "AssemblerBuffer.h" out of "X86Assembler.h". 21216 21217 Also renamed ENABLE_MASM to ENABLE_ASSEMBLER. 21218 21219 * GNUmakefile.am: 21220 * JavaScriptCore.xcodeproj/project.pbxproj: 21221 * assembler: Added. 21222 * assembler/AssemblerBuffer.h: Copied from masm/X86Assembler.h. 21223 (JSC::AssemblerBuffer::AssemblerBuffer): 21224 (JSC::AssemblerBuffer::~AssemblerBuffer): 21225 (JSC::AssemblerBuffer::ensureSpace): 21226 (JSC::AssemblerBuffer::isAligned): 21227 (JSC::AssemblerBuffer::putByteUnchecked): 21228 (JSC::AssemblerBuffer::putByte): 21229 (JSC::AssemblerBuffer::putShortUnchecked): 21230 (JSC::AssemblerBuffer::putShort): 21231 (JSC::AssemblerBuffer::putIntUnchecked): 21232 (JSC::AssemblerBuffer::putInt): 21233 (JSC::AssemblerBuffer::data): 21234 (JSC::AssemblerBuffer::size): 21235 (JSC::AssemblerBuffer::reset): 21236 (JSC::AssemblerBuffer::executableCopy): 21237 (JSC::AssemblerBuffer::grow): 21238 * assembler/X86Assembler.h: Copied from masm/X86Assembler.h. 21239 * masm: Removed. 21240 * masm/X86Assembler.h: Removed. 21241 * wtf/Platform.h: 21242 21243 2008-11-16 Geoffrey Garen <ggaren (a] apple.com> 21244 21245 Not reviewed. 21246 21247 Try to fix gtk build. 21248 21249 * GNUmakefile.am: 21250 21251 2008-11-16 Geoffrey Garen <ggaren (a] apple.com> 21252 21253 Not reviewed. 21254 21255 Fixed tyop. 21256 21257 * VM/CTI.cpp: 21258 21259 2008-11-16 Geoffrey Garen <ggaren (a] apple.com> 21260 21261 Not reviewed. 21262 21263 Try to fix windows build. 21264 21265 * VM/CTI.cpp: 21266 21267 2008-11-16 Geoffrey Garen <ggaren (a] apple.com> 21268 21269 Not reviewed. 21270 21271 Try to fix gtk build. 21272 21273 * GNUmakefile.am: 21274 21275 2008-11-16 Geoffrey Garen <ggaren (a] apple.com> 21276 21277 Reviewed by Sam Weinig. 21278 21279 Renamed ENABLE_CTI and ENABLE(CTI) to ENABLE_JIT and ENABLE(JIT). 21280 21281 * VM/CTI.cpp: 21282 * VM/CTI.h: 21283 * VM/CodeBlock.cpp: 21284 (JSC::CodeBlock::~CodeBlock): 21285 * VM/CodeBlock.h: 21286 (JSC::CodeBlock::CodeBlock): 21287 * VM/Machine.cpp: 21288 (JSC::Interpreter::Interpreter): 21289 (JSC::Interpreter::initialize): 21290 (JSC::Interpreter::~Interpreter): 21291 (JSC::Interpreter::execute): 21292 (JSC::Interpreter::privateExecute): 21293 * VM/Machine.h: 21294 * bytecompiler/CodeGenerator.cpp: 21295 (JSC::prepareJumpTableForStringSwitch): 21296 * runtime/JSFunction.cpp: 21297 (JSC::JSFunction::~JSFunction): 21298 * runtime/JSGlobalData.h: 21299 * wrec/WREC.h: 21300 * wtf/Platform.h: 21301 * wtf/TCSystemAlloc.cpp: 21302 21303 2008-11-16 Geoffrey Garen <ggaren (a] apple.com> 21304 21305 Not reviewed. 21306 21307 Try to fix gtk build. 21308 21309 * VM/CTI.cpp: 21310 21311 2008-11-16 Geoffrey Garen <ggaren (a] apple.com> 21312 21313 Reviewed by a few people on squirrelfish-dev. 21314 21315 Renamed CTI => JIT. 21316 21317 * VM/CTI.cpp: 21318 (JSC::JIT::killLastResultRegister): 21319 (JSC::JIT::emitGetVirtualRegister): 21320 (JSC::JIT::emitGetVirtualRegisters): 21321 (JSC::JIT::emitPutCTIArgFromVirtualRegister): 21322 (JSC::JIT::emitPutCTIArg): 21323 (JSC::JIT::emitGetCTIArg): 21324 (JSC::JIT::emitPutCTIArgConstant): 21325 (JSC::JIT::getConstantImmediateNumericArg): 21326 (JSC::JIT::emitPutCTIParam): 21327 (JSC::JIT::emitGetCTIParam): 21328 (JSC::JIT::emitPutToCallFrameHeader): 21329 (JSC::JIT::emitGetFromCallFrameHeader): 21330 (JSC::JIT::emitPutVirtualRegister): 21331 (JSC::JIT::emitInitRegister): 21332 (JSC::JIT::printBytecodeOperandTypes): 21333 (JSC::JIT::emitAllocateNumber): 21334 (JSC::JIT::emitNakedCall): 21335 (JSC::JIT::emitNakedFastCall): 21336 (JSC::JIT::emitCTICall): 21337 (JSC::JIT::emitJumpSlowCaseIfNotJSCell): 21338 (JSC::JIT::linkSlowCaseIfNotJSCell): 21339 (JSC::JIT::emitJumpSlowCaseIfNotImmNum): 21340 (JSC::JIT::emitJumpSlowCaseIfNotImmNums): 21341 (JSC::JIT::getDeTaggedConstantImmediate): 21342 (JSC::JIT::emitFastArithDeTagImmediate): 21343 (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): 21344 (JSC::JIT::emitFastArithReTagImmediate): 21345 (JSC::JIT::emitFastArithPotentiallyReTagImmediate): 21346 (JSC::JIT::emitFastArithImmToInt): 21347 (JSC::JIT::emitFastArithIntToImmOrSlowCase): 21348 (JSC::JIT::emitFastArithIntToImmNoCheck): 21349 (JSC::JIT::emitArithIntToImmWithJump): 21350 (JSC::JIT::emitTagAsBoolImmediate): 21351 (JSC::JIT::JIT): 21352 (JSC::JIT::compileOpCallInitializeCallFrame): 21353 (JSC::JIT::compileOpCallSetupArgs): 21354 (JSC::JIT::compileOpCallEvalSetupArgs): 21355 (JSC::JIT::compileOpConstructSetupArgs): 21356 (JSC::JIT::compileOpCall): 21357 (JSC::JIT::compileOpStrictEq): 21358 (JSC::JIT::emitSlowScriptCheck): 21359 (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): 21360 (JSC::JIT::compileBinaryArithOp): 21361 (JSC::JIT::compileBinaryArithOpSlowCase): 21362 (JSC::JIT::privateCompileMainPass): 21363 (JSC::JIT::privateCompileLinkPass): 21364 (JSC::JIT::privateCompileSlowCases): 21365 (JSC::JIT::privateCompile): 21366 (JSC::JIT::privateCompileGetByIdSelf): 21367 (JSC::JIT::privateCompileGetByIdProto): 21368 (JSC::JIT::privateCompileGetByIdChain): 21369 (JSC::JIT::privateCompilePutByIdReplace): 21370 (JSC::JIT::privateCompilePutByIdTransition): 21371 (JSC::JIT::unlinkCall): 21372 (JSC::JIT::linkCall): 21373 (JSC::JIT::privateCompileCTIMachineTrampolines): 21374 (JSC::JIT::freeCTIMachineTrampolines): 21375 (JSC::JIT::patchGetByIdSelf): 21376 (JSC::JIT::patchPutByIdReplace): 21377 (JSC::JIT::privateCompilePatchGetArrayLength): 21378 (JSC::JIT::emitGetVariableObjectRegister): 21379 (JSC::JIT::emitPutVariableObjectRegister): 21380 * VM/CTI.h: 21381 (JSC::JIT::compile): 21382 (JSC::JIT::compileGetByIdSelf): 21383 (JSC::JIT::compileGetByIdProto): 21384 (JSC::JIT::compileGetByIdChain): 21385 (JSC::JIT::compilePutByIdReplace): 21386 (JSC::JIT::compilePutByIdTransition): 21387 (JSC::JIT::compileCTIMachineTrampolines): 21388 (JSC::JIT::compilePatchGetArrayLength): 21389 * VM/CodeBlock.cpp: 21390 (JSC::CodeBlock::unlinkCallers): 21391 * VM/Machine.cpp: 21392 (JSC::Interpreter::initialize): 21393 (JSC::Interpreter::~Interpreter): 21394 (JSC::Interpreter::execute): 21395 (JSC::Interpreter::tryCTICachePutByID): 21396 (JSC::Interpreter::tryCTICacheGetByID): 21397 (JSC::Interpreter::cti_op_call_JSFunction): 21398 (JSC::Interpreter::cti_vm_dontLazyLinkCall): 21399 (JSC::Interpreter::cti_vm_lazyLinkCall): 21400 * VM/Machine.h: 21401 * VM/RegisterFile.h: 21402 * parser/Nodes.h: 21403 * runtime/JSArray.h: 21404 * runtime/JSCell.h: 21405 * runtime/JSFunction.h: 21406 * runtime/JSImmediate.h: 21407 * runtime/JSNumberCell.h: 21408 * runtime/JSObject.h: 21409 * runtime/JSString.h: 21410 * runtime/JSVariableObject.h: 21411 * runtime/ScopeChain.h: 21412 * runtime/Structure.h: 21413 * runtime/TypeInfo.h: 21414 * runtime/UString.h: 21415 21416 2008-11-16 Geoffrey Garen <ggaren (a] apple.com> 21417 21418 Not reviewed. 21419 21420 Try to fix wx build. 21421 21422 * jscore.bkl: 21423 21424 2008-11-16 Geoffrey Garen <ggaren (a] apple.com> 21425 21426 Reviewed by Sam Weinig. 21427 21428 Nixed X86:: and X86Assembler:: prefixes in a lot of places using typedefs. 21429 21430 * VM/CTI.cpp: 21431 (JSC::CTI::emitGetVirtualRegister): 21432 (JSC::CTI::emitGetVirtualRegisters): 21433 (JSC::CTI::emitPutCTIArgFromVirtualRegister): 21434 (JSC::CTI::emitPutCTIArg): 21435 (JSC::CTI::emitGetCTIArg): 21436 (JSC::CTI::emitPutCTIParam): 21437 (JSC::CTI::emitGetCTIParam): 21438 (JSC::CTI::emitPutToCallFrameHeader): 21439 (JSC::CTI::emitGetFromCallFrameHeader): 21440 (JSC::CTI::emitPutVirtualRegister): 21441 (JSC::CTI::emitNakedCall): 21442 (JSC::CTI::emitNakedFastCall): 21443 (JSC::CTI::emitCTICall): 21444 (JSC::CTI::emitJumpSlowCaseIfNotJSCell): 21445 (JSC::CTI::emitJumpSlowCaseIfNotImmNum): 21446 (JSC::CTI::emitJumpSlowCaseIfNotImmNums): 21447 (JSC::CTI::emitFastArithDeTagImmediate): 21448 (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero): 21449 (JSC::CTI::emitFastArithReTagImmediate): 21450 (JSC::CTI::emitFastArithPotentiallyReTagImmediate): 21451 (JSC::CTI::emitFastArithImmToInt): 21452 (JSC::CTI::emitFastArithIntToImmOrSlowCase): 21453 (JSC::CTI::emitFastArithIntToImmNoCheck): 21454 (JSC::CTI::emitArithIntToImmWithJump): 21455 (JSC::CTI::emitTagAsBoolImmediate): 21456 (JSC::CTI::compileOpCall): 21457 (JSC::CTI::compileOpStrictEq): 21458 (JSC::CTI::emitSlowScriptCheck): 21459 (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): 21460 (JSC::CTI::compileBinaryArithOp): 21461 (JSC::CTI::compileBinaryArithOpSlowCase): 21462 (JSC::CTI::privateCompileMainPass): 21463 (JSC::CTI::privateCompileSlowCases): 21464 (JSC::CTI::privateCompile): 21465 (JSC::CTI::privateCompileGetByIdSelf): 21466 (JSC::CTI::privateCompileGetByIdProto): 21467 (JSC::CTI::privateCompileGetByIdChain): 21468 (JSC::CTI::privateCompilePutByIdReplace): 21469 (JSC::CTI::privateCompilePutByIdTransition): 21470 (JSC::CTI::privateCompileCTIMachineTrampolines): 21471 (JSC::CTI::privateCompilePatchGetArrayLength): 21472 (JSC::CTI::emitGetVariableObjectRegister): 21473 (JSC::CTI::emitPutVariableObjectRegister): 21474 * VM/CTI.h: 21475 (JSC::CallRecord::CallRecord): 21476 (JSC::JmpTable::JmpTable): 21477 (JSC::SlowCaseEntry::SlowCaseEntry): 21478 (JSC::CTI::JSRInfo::JSRInfo): 21479 * wrec/WREC.h: 21480 21481 2008-11-16 Geoffrey Garen <ggaren (a] apple.com> 21482 21483 Not reviewed. 21484 21485 Try to fix Qt build. 21486 21487 * JavaScriptCore.pri: 21488 21489 2008-11-16 Geoffrey Garen <ggaren (a] apple.com> 21490 21491 Reviewed by Sam Weinig. 21492 21493 Renamed OBJECT_OFFSET => FIELD_OFFSET 21494 21495 Nixed use of OBJECT_OFFSET outside of CTI.cpp by making CTI a friend in 21496 more places. 21497 21498 * VM/CTI.cpp: 21499 (JSC::CTI::compileOpCallInitializeCallFrame): 21500 (JSC::CTI::compileOpCall): 21501 (JSC::CTI::emitSlowScriptCheck): 21502 (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): 21503 (JSC::CTI::compileBinaryArithOp): 21504 (JSC::CTI::privateCompileMainPass): 21505 (JSC::CTI::privateCompileSlowCases): 21506 (JSC::CTI::privateCompile): 21507 (JSC::CTI::privateCompileGetByIdSelf): 21508 (JSC::CTI::privateCompileGetByIdProto): 21509 (JSC::CTI::privateCompileGetByIdChain): 21510 (JSC::CTI::privateCompilePutByIdReplace): 21511 (JSC::CTI::privateCompilePutByIdTransition): 21512 (JSC::CTI::privateCompileCTIMachineTrampolines): 21513 (JSC::CTI::privateCompilePatchGetArrayLength): 21514 (JSC::CTI::emitGetVariableObjectRegister): 21515 (JSC::CTI::emitPutVariableObjectRegister): 21516 * runtime/JSValue.h: 21517 * runtime/JSVariableObject.h: 21518 21519 2008-11-16 Geoffrey Garen <ggaren (a] apple.com> 21520 21521 Reviewed by Sam Weinig. 21522 21523 Renames: 21524 21525 X86Assembler::copy => X86Assembler::executableCopy 21526 AssemblerBuffer::copy => AssemblerBuffer::executableCopy 21527 21528 * VM/CTI.cpp: 21529 (JSC::CTI::privateCompile): 21530 (JSC::CTI::privateCompileGetByIdSelf): 21531 (JSC::CTI::privateCompileGetByIdProto): 21532 (JSC::CTI::privateCompileGetByIdChain): 21533 (JSC::CTI::privateCompilePutByIdReplace): 21534 (JSC::CTI::privateCompilePutByIdTransition): 21535 (JSC::CTI::privateCompileCTIMachineTrampolines): 21536 (JSC::CTI::privateCompilePatchGetArrayLength): 21537 * masm/X86Assembler.h: 21538 (JSC::AssemblerBuffer::executableCopy): 21539 (JSC::X86Assembler::executableCopy): 21540 * wrec/WREC.cpp: 21541 (JSC::WREC::compileRegExp): 21542 21543 2008-11-16 Geoffrey Garen <ggaren (a] apple.com> 21544 21545 Reviewed by Sam Weinig. 21546 21547 Renamed WREC => JSC::WREC, removing JSC:: prefix in a lot of places. 21548 Renamed WRECFunction => WREC::CompiledRegExp, and deployed this type 21549 name in place of a few casts. 21550 21551 * runtime/RegExp.cpp: 21552 (JSC::RegExp::RegExp): 21553 (JSC::RegExp::~RegExp): 21554 (JSC::RegExp::match): 21555 * runtime/RegExp.h: 21556 * wrec/CharacterClassConstructor.cpp: 21557 * wrec/CharacterClassConstructor.h: 21558 * wrec/WREC.cpp: 21559 (JSC::WREC::compileRegExp): 21560 * wrec/WREC.h: 21561 (JSC::WREC::Generator::Generator): 21562 (JSC::WREC::Parser::Parser): 21563 (JSC::WREC::Parser::parseAlternative): 21564 21565 2008-11-16 Geoffrey Garen <ggaren (a] apple.com> 21566 21567 Reviewed by Sam Weinig. 21568 21569 Renamed BytecodeInterpreter => Interpreter. 21570 21571 * JavaScriptCore.exp: 21572 * VM/CTI.cpp: 21573 (JSC::): 21574 (JSC::CTI::compileOpCall): 21575 (JSC::CTI::emitSlowScriptCheck): 21576 (JSC::CTI::compileBinaryArithOpSlowCase): 21577 (JSC::CTI::privateCompileMainPass): 21578 (JSC::CTI::privateCompileSlowCases): 21579 (JSC::CTI::privateCompile): 21580 (JSC::CTI::privateCompileGetByIdSelf): 21581 (JSC::CTI::privateCompileGetByIdProto): 21582 (JSC::CTI::privateCompileGetByIdChain): 21583 (JSC::CTI::privateCompilePutByIdReplace): 21584 (JSC::CTI::privateCompilePutByIdTransition): 21585 (JSC::CTI::privateCompileCTIMachineTrampolines): 21586 (JSC::CTI::freeCTIMachineTrampolines): 21587 (JSC::CTI::patchGetByIdSelf): 21588 (JSC::CTI::patchPutByIdReplace): 21589 (JSC::CTI::privateCompilePatchGetArrayLength): 21590 * VM/CTI.h: 21591 * VM/CodeBlock.cpp: 21592 (JSC::CodeBlock::printStructures): 21593 (JSC::CodeBlock::derefStructures): 21594 (JSC::CodeBlock::refStructures): 21595 * VM/Machine.cpp: 21596 (JSC::jsLess): 21597 (JSC::jsLessEq): 21598 (JSC::Interpreter::resolve): 21599 (JSC::Interpreter::resolveSkip): 21600 (JSC::Interpreter::resolveGlobal): 21601 (JSC::Interpreter::resolveBase): 21602 (JSC::Interpreter::resolveBaseAndProperty): 21603 (JSC::Interpreter::resolveBaseAndFunc): 21604 (JSC::Interpreter::slideRegisterWindowForCall): 21605 (JSC::Interpreter::callEval): 21606 (JSC::Interpreter::Interpreter): 21607 (JSC::Interpreter::initialize): 21608 (JSC::Interpreter::~Interpreter): 21609 (JSC::Interpreter::dumpCallFrame): 21610 (JSC::Interpreter::dumpRegisters): 21611 (JSC::Interpreter::isOpcode): 21612 (JSC::Interpreter::unwindCallFrame): 21613 (JSC::Interpreter::throwException): 21614 (JSC::Interpreter::execute): 21615 (JSC::Interpreter::debug): 21616 (JSC::Interpreter::resetTimeoutCheck): 21617 (JSC::Interpreter::checkTimeout): 21618 (JSC::Interpreter::createExceptionScope): 21619 (JSC::Interpreter::tryCachePutByID): 21620 (JSC::Interpreter::uncachePutByID): 21621 (JSC::Interpreter::tryCacheGetByID): 21622 (JSC::Interpreter::uncacheGetByID): 21623 (JSC::Interpreter::privateExecute): 21624 (JSC::Interpreter::retrieveArguments): 21625 (JSC::Interpreter::retrieveCaller): 21626 (JSC::Interpreter::retrieveLastCaller): 21627 (JSC::Interpreter::findFunctionCallFrame): 21628 (JSC::Interpreter::tryCTICachePutByID): 21629 (JSC::Interpreter::tryCTICacheGetByID): 21630 (JSC::Interpreter::cti_op_convert_this): 21631 (JSC::Interpreter::cti_op_end): 21632 (JSC::Interpreter::cti_op_add): 21633 (JSC::Interpreter::cti_op_pre_inc): 21634 (JSC::Interpreter::cti_timeout_check): 21635 (JSC::Interpreter::cti_register_file_check): 21636 (JSC::Interpreter::cti_op_loop_if_less): 21637 (JSC::Interpreter::cti_op_loop_if_lesseq): 21638 (JSC::Interpreter::cti_op_new_object): 21639 (JSC::Interpreter::cti_op_put_by_id): 21640 (JSC::Interpreter::cti_op_put_by_id_second): 21641 (JSC::Interpreter::cti_op_put_by_id_generic): 21642 (JSC::Interpreter::cti_op_put_by_id_fail): 21643 (JSC::Interpreter::cti_op_get_by_id): 21644 (JSC::Interpreter::cti_op_get_by_id_second): 21645 (JSC::Interpreter::cti_op_get_by_id_generic): 21646 (JSC::Interpreter::cti_op_get_by_id_fail): 21647 (JSC::Interpreter::cti_op_instanceof): 21648 (JSC::Interpreter::cti_op_del_by_id): 21649 (JSC::Interpreter::cti_op_mul): 21650 (JSC::Interpreter::cti_op_new_func): 21651 (JSC::Interpreter::cti_op_call_JSFunction): 21652 (JSC::Interpreter::cti_op_call_arityCheck): 21653 (JSC::Interpreter::cti_vm_dontLazyLinkCall): 21654 (JSC::Interpreter::cti_vm_lazyLinkCall): 21655 (JSC::Interpreter::cti_op_push_activation): 21656 (JSC::Interpreter::cti_op_call_NotJSFunction): 21657 (JSC::Interpreter::cti_op_create_arguments): 21658 (JSC::Interpreter::cti_op_create_arguments_no_params): 21659 (JSC::Interpreter::cti_op_tear_off_activation): 21660 (JSC::Interpreter::cti_op_tear_off_arguments): 21661 (JSC::Interpreter::cti_op_profile_will_call): 21662 (JSC::Interpreter::cti_op_profile_did_call): 21663 (JSC::Interpreter::cti_op_ret_scopeChain): 21664 (JSC::Interpreter::cti_op_new_array): 21665 (JSC::Interpreter::cti_op_resolve): 21666 (JSC::Interpreter::cti_op_construct_JSConstruct): 21667 (JSC::Interpreter::cti_op_construct_NotJSConstruct): 21668 (JSC::Interpreter::cti_op_get_by_val): 21669 (JSC::Interpreter::cti_op_resolve_func): 21670 (JSC::Interpreter::cti_op_sub): 21671 (JSC::Interpreter::cti_op_put_by_val): 21672 (JSC::Interpreter::cti_op_put_by_val_array): 21673 (JSC::Interpreter::cti_op_lesseq): 21674 (JSC::Interpreter::cti_op_loop_if_true): 21675 (JSC::Interpreter::cti_op_negate): 21676 (JSC::Interpreter::cti_op_resolve_base): 21677 (JSC::Interpreter::cti_op_resolve_skip): 21678 (JSC::Interpreter::cti_op_resolve_global): 21679 (JSC::Interpreter::cti_op_div): 21680 (JSC::Interpreter::cti_op_pre_dec): 21681 (JSC::Interpreter::cti_op_jless): 21682 (JSC::Interpreter::cti_op_not): 21683 (JSC::Interpreter::cti_op_jtrue): 21684 (JSC::Interpreter::cti_op_post_inc): 21685 (JSC::Interpreter::cti_op_eq): 21686 (JSC::Interpreter::cti_op_lshift): 21687 (JSC::Interpreter::cti_op_bitand): 21688 (JSC::Interpreter::cti_op_rshift): 21689 (JSC::Interpreter::cti_op_bitnot): 21690 (JSC::Interpreter::cti_op_resolve_with_base): 21691 (JSC::Interpreter::cti_op_new_func_exp): 21692 (JSC::Interpreter::cti_op_mod): 21693 (JSC::Interpreter::cti_op_less): 21694 (JSC::Interpreter::cti_op_neq): 21695 (JSC::Interpreter::cti_op_post_dec): 21696 (JSC::Interpreter::cti_op_urshift): 21697 (JSC::Interpreter::cti_op_bitxor): 21698 (JSC::Interpreter::cti_op_new_regexp): 21699 (JSC::Interpreter::cti_op_bitor): 21700 (JSC::Interpreter::cti_op_call_eval): 21701 (JSC::Interpreter::cti_op_throw): 21702 (JSC::Interpreter::cti_op_get_pnames): 21703 (JSC::Interpreter::cti_op_next_pname): 21704 (JSC::Interpreter::cti_op_push_scope): 21705 (JSC::Interpreter::cti_op_pop_scope): 21706 (JSC::Interpreter::cti_op_typeof): 21707 (JSC::Interpreter::cti_op_is_undefined): 21708 (JSC::Interpreter::cti_op_is_boolean): 21709 (JSC::Interpreter::cti_op_is_number): 21710 (JSC::Interpreter::cti_op_is_string): 21711 (JSC::Interpreter::cti_op_is_object): 21712 (JSC::Interpreter::cti_op_is_function): 21713 (JSC::Interpreter::cti_op_stricteq): 21714 (JSC::Interpreter::cti_op_nstricteq): 21715 (JSC::Interpreter::cti_op_to_jsnumber): 21716 (JSC::Interpreter::cti_op_in): 21717 (JSC::Interpreter::cti_op_push_new_scope): 21718 (JSC::Interpreter::cti_op_jmp_scopes): 21719 (JSC::Interpreter::cti_op_put_by_index): 21720 (JSC::Interpreter::cti_op_switch_imm): 21721 (JSC::Interpreter::cti_op_switch_char): 21722 (JSC::Interpreter::cti_op_switch_string): 21723 (JSC::Interpreter::cti_op_del_by_val): 21724 (JSC::Interpreter::cti_op_put_getter): 21725 (JSC::Interpreter::cti_op_put_setter): 21726 (JSC::Interpreter::cti_op_new_error): 21727 (JSC::Interpreter::cti_op_debug): 21728 (JSC::Interpreter::cti_vm_throw): 21729 * VM/Machine.h: 21730 * VM/Register.h: 21731 * VM/SamplingTool.h: 21732 (JSC::SamplingTool::SamplingTool): 21733 * bytecompiler/CodeGenerator.cpp: 21734 (JSC::BytecodeGenerator::generate): 21735 (JSC::BytecodeGenerator::BytecodeGenerator): 21736 * jsc.cpp: 21737 (runWithScripts): 21738 * runtime/ExecState.h: 21739 (JSC::ExecState::interpreter): 21740 * runtime/JSCell.h: 21741 * runtime/JSFunction.h: 21742 * runtime/JSGlobalData.cpp: 21743 (JSC::JSGlobalData::JSGlobalData): 21744 * runtime/JSGlobalData.h: 21745 * runtime/JSString.h: 21746 * wrec/WREC.cpp: 21747 (WREC::compileRegExp): 21748 * wrec/WREC.h: 21749 21750 2008-11-16 Geoffrey Garen <ggaren (a] apple.com> 21751 21752 Roll out r38461 (my last patch) because it broke the world. 21753 21754 2008-11-16 Geoffrey Garen <ggaren (a] apple.com> 21755 21756 Reviewed by Sam Weinig. 21757 21758 A few more renames: 21759 21760 BytecodeInterpreter => Interpreter 21761 WREC => JSC::WREC, removing JSC:: prefix in a lot of places 21762 X86Assembler::copy => X86Assembler::executableCopy 21763 AssemblerBuffer::copy => AssemblerBuffer::executableCopy 21764 WRECFunction => WREC::RegExpFunction 21765 OBJECT_OFFSET => FIELD_OFFSET 21766 21767 Also: 21768 21769 Nixed use of OBJECT_OFFSET outside of CTI.cpp by making CTI a friend in more places. 21770 Nixed X86:: and X86Assembler:: prefixes in a lot of places using typedefs 21771 21772 * JavaScriptCore.exp: 21773 * VM/CTI.cpp: 21774 (JSC::): 21775 (JSC::CTI::emitGetVirtualRegister): 21776 (JSC::CTI::emitGetVirtualRegisters): 21777 (JSC::CTI::emitPutCTIArgFromVirtualRegister): 21778 (JSC::CTI::emitPutCTIArg): 21779 (JSC::CTI::emitGetCTIArg): 21780 (JSC::CTI::emitPutCTIParam): 21781 (JSC::CTI::emitGetCTIParam): 21782 (JSC::CTI::emitPutToCallFrameHeader): 21783 (JSC::CTI::emitGetFromCallFrameHeader): 21784 (JSC::CTI::emitPutVirtualRegister): 21785 (JSC::CTI::emitNakedCall): 21786 (JSC::CTI::emitNakedFastCall): 21787 (JSC::CTI::emitCTICall): 21788 (JSC::CTI::emitJumpSlowCaseIfNotJSCell): 21789 (JSC::CTI::emitJumpSlowCaseIfNotImmNum): 21790 (JSC::CTI::emitJumpSlowCaseIfNotImmNums): 21791 (JSC::CTI::emitFastArithDeTagImmediate): 21792 (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero): 21793 (JSC::CTI::emitFastArithReTagImmediate): 21794 (JSC::CTI::emitFastArithPotentiallyReTagImmediate): 21795 (JSC::CTI::emitFastArithImmToInt): 21796 (JSC::CTI::emitFastArithIntToImmOrSlowCase): 21797 (JSC::CTI::emitFastArithIntToImmNoCheck): 21798 (JSC::CTI::emitArithIntToImmWithJump): 21799 (JSC::CTI::emitTagAsBoolImmediate): 21800 (JSC::CTI::compileOpCallInitializeCallFrame): 21801 (JSC::CTI::compileOpCall): 21802 (JSC::CTI::compileOpStrictEq): 21803 (JSC::CTI::emitSlowScriptCheck): 21804 (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): 21805 (JSC::CTI::compileBinaryArithOp): 21806 (JSC::CTI::compileBinaryArithOpSlowCase): 21807 (JSC::CTI::privateCompileMainPass): 21808 (JSC::CTI::privateCompileSlowCases): 21809 (JSC::CTI::privateCompile): 21810 (JSC::CTI::privateCompileGetByIdSelf): 21811 (JSC::CTI::privateCompileGetByIdProto): 21812 (JSC::CTI::privateCompileGetByIdChain): 21813 (JSC::CTI::privateCompilePutByIdReplace): 21814 (JSC::CTI::privateCompilePutByIdTransition): 21815 (JSC::CTI::privateCompileCTIMachineTrampolines): 21816 (JSC::CTI::freeCTIMachineTrampolines): 21817 (JSC::CTI::patchGetByIdSelf): 21818 (JSC::CTI::patchPutByIdReplace): 21819 (JSC::CTI::privateCompilePatchGetArrayLength): 21820 (JSC::CTI::emitGetVariableObjectRegister): 21821 (JSC::CTI::emitPutVariableObjectRegister): 21822 * VM/CTI.h: 21823 (JSC::CallRecord::CallRecord): 21824 (JSC::JmpTable::JmpTable): 21825 (JSC::SlowCaseEntry::SlowCaseEntry): 21826 (JSC::CTI::JSRInfo::JSRInfo): 21827 * VM/CodeBlock.cpp: 21828 (JSC::CodeBlock::printStructures): 21829 (JSC::CodeBlock::derefStructures): 21830 (JSC::CodeBlock::refStructures): 21831 * VM/Machine.cpp: 21832 (JSC::jsLess): 21833 (JSC::jsLessEq): 21834 (JSC::Interpreter::resolve): 21835 (JSC::Interpreter::resolveSkip): 21836 (JSC::Interpreter::resolveGlobal): 21837 (JSC::Interpreter::resolveBase): 21838 (JSC::Interpreter::resolveBaseAndProperty): 21839 (JSC::Interpreter::resolveBaseAndFunc): 21840 (JSC::Interpreter::slideRegisterWindowForCall): 21841 (JSC::Interpreter::callEval): 21842 (JSC::Interpreter::Interpreter): 21843 (JSC::Interpreter::initialize): 21844 (JSC::Interpreter::~Interpreter): 21845 (JSC::Interpreter::dumpCallFrame): 21846 (JSC::Interpreter::dumpRegisters): 21847 (JSC::Interpreter::isOpcode): 21848 (JSC::Interpreter::unwindCallFrame): 21849 (JSC::Interpreter::throwException): 21850 (JSC::Interpreter::execute): 21851 (JSC::Interpreter::debug): 21852 (JSC::Interpreter::resetTimeoutCheck): 21853 (JSC::Interpreter::checkTimeout): 21854 (JSC::Interpreter::createExceptionScope): 21855 (JSC::Interpreter::tryCachePutByID): 21856 (JSC::Interpreter::uncachePutByID): 21857 (JSC::Interpreter::tryCacheGetByID): 21858 (JSC::Interpreter::uncacheGetByID): 21859 (JSC::Interpreter::privateExecute): 21860 (JSC::Interpreter::retrieveArguments): 21861 (JSC::Interpreter::retrieveCaller): 21862 (JSC::Interpreter::retrieveLastCaller): 21863 (JSC::Interpreter::findFunctionCallFrame): 21864 (JSC::Interpreter::tryCTICachePutByID): 21865 (JSC::Interpreter::tryCTICacheGetByID): 21866 (JSC::): 21867 (JSC::Interpreter::cti_op_convert_this): 21868 (JSC::Interpreter::cti_op_end): 21869 (JSC::Interpreter::cti_op_add): 21870 (JSC::Interpreter::cti_op_pre_inc): 21871 (JSC::Interpreter::cti_timeout_check): 21872 (JSC::Interpreter::cti_register_file_check): 21873 (JSC::Interpreter::cti_op_loop_if_less): 21874 (JSC::Interpreter::cti_op_loop_if_lesseq): 21875 (JSC::Interpreter::cti_op_new_object): 21876 (JSC::Interpreter::cti_op_put_by_id): 21877 (JSC::Interpreter::cti_op_put_by_id_second): 21878 (JSC::Interpreter::cti_op_put_by_id_generic): 21879 (JSC::Interpreter::cti_op_put_by_id_fail): 21880 (JSC::Interpreter::cti_op_get_by_id): 21881 (JSC::Interpreter::cti_op_get_by_id_second): 21882 (JSC::Interpreter::cti_op_get_by_id_generic): 21883 (JSC::Interpreter::cti_op_get_by_id_fail): 21884 (JSC::Interpreter::cti_op_instanceof): 21885 (JSC::Interpreter::cti_op_del_by_id): 21886 (JSC::Interpreter::cti_op_mul): 21887 (JSC::Interpreter::cti_op_new_func): 21888 (JSC::Interpreter::cti_op_call_JSFunction): 21889 (JSC::Interpreter::cti_op_call_arityCheck): 21890 (JSC::Interpreter::cti_vm_dontLazyLinkCall): 21891 (JSC::Interpreter::cti_vm_lazyLinkCall): 21892 (JSC::Interpreter::cti_op_push_activation): 21893 (JSC::Interpreter::cti_op_call_NotJSFunction): 21894 (JSC::Interpreter::cti_op_create_arguments): 21895 (JSC::Interpreter::cti_op_create_arguments_no_params): 21896 (JSC::Interpreter::cti_op_tear_off_activation): 21897 (JSC::Interpreter::cti_op_tear_off_arguments): 21898 (JSC::Interpreter::cti_op_profile_will_call): 21899 (JSC::Interpreter::cti_op_profile_did_call): 21900 (JSC::Interpreter::cti_op_ret_scopeChain): 21901 (JSC::Interpreter::cti_op_new_array): 21902 (JSC::Interpreter::cti_op_resolve): 21903 (JSC::Interpreter::cti_op_construct_JSConstruct): 21904 (JSC::Interpreter::cti_op_construct_NotJSConstruct): 21905 (JSC::Interpreter::cti_op_get_by_val): 21906 (JSC::Interpreter::cti_op_resolve_func): 21907 (JSC::Interpreter::cti_op_sub): 21908 (JSC::Interpreter::cti_op_put_by_val): 21909 (JSC::Interpreter::cti_op_put_by_val_array): 21910 (JSC::Interpreter::cti_op_lesseq): 21911 (JSC::Interpreter::cti_op_loop_if_true): 21912 (JSC::Interpreter::cti_op_negate): 21913 (JSC::Interpreter::cti_op_resolve_base): 21914 (JSC::Interpreter::cti_op_resolve_skip): 21915 (JSC::Interpreter::cti_op_resolve_global): 21916 (JSC::Interpreter::cti_op_div): 21917 (JSC::Interpreter::cti_op_pre_dec): 21918 (JSC::Interpreter::cti_op_jless): 21919 (JSC::Interpreter::cti_op_not): 21920 (JSC::Interpreter::cti_op_jtrue): 21921 (JSC::Interpreter::cti_op_post_inc): 21922 (JSC::Interpreter::cti_op_eq): 21923 (JSC::Interpreter::cti_op_lshift): 21924 (JSC::Interpreter::cti_op_bitand): 21925 (JSC::Interpreter::cti_op_rshift): 21926 (JSC::Interpreter::cti_op_bitnot): 21927 (JSC::Interpreter::cti_op_resolve_with_base): 21928 (JSC::Interpreter::cti_op_new_func_exp): 21929 (JSC::Interpreter::cti_op_mod): 21930 (JSC::Interpreter::cti_op_less): 21931 (JSC::Interpreter::cti_op_neq): 21932 (JSC::Interpreter::cti_op_post_dec): 21933 (JSC::Interpreter::cti_op_urshift): 21934 (JSC::Interpreter::cti_op_bitxor): 21935 (JSC::Interpreter::cti_op_new_regexp): 21936 (JSC::Interpreter::cti_op_bitor): 21937 (JSC::Interpreter::cti_op_call_eval): 21938 (JSC::Interpreter::cti_op_throw): 21939 (JSC::Interpreter::cti_op_get_pnames): 21940 (JSC::Interpreter::cti_op_next_pname): 21941 (JSC::Interpreter::cti_op_push_scope): 21942 (JSC::Interpreter::cti_op_pop_scope): 21943 (JSC::Interpreter::cti_op_typeof): 21944 (JSC::Interpreter::cti_op_is_undefined): 21945 (JSC::Interpreter::cti_op_is_boolean): 21946 (JSC::Interpreter::cti_op_is_number): 21947 (JSC::Interpreter::cti_op_is_string): 21948 (JSC::Interpreter::cti_op_is_object): 21949 (JSC::Interpreter::cti_op_is_function): 21950 (JSC::Interpreter::cti_op_stricteq): 21951 (JSC::Interpreter::cti_op_nstricteq): 21952 (JSC::Interpreter::cti_op_to_jsnumber): 21953 (JSC::Interpreter::cti_op_in): 21954 (JSC::Interpreter::cti_op_push_new_scope): 21955 (JSC::Interpreter::cti_op_jmp_scopes): 21956 (JSC::Interpreter::cti_op_put_by_index): 21957 (JSC::Interpreter::cti_op_switch_imm): 21958 (JSC::Interpreter::cti_op_switch_char): 21959 (JSC::Interpreter::cti_op_switch_string): 21960 (JSC::Interpreter::cti_op_del_by_val): 21961 (JSC::Interpreter::cti_op_put_getter): 21962 (JSC::Interpreter::cti_op_put_setter): 21963 (JSC::Interpreter::cti_op_new_error): 21964 (JSC::Interpreter::cti_op_debug): 21965 (JSC::Interpreter::cti_vm_throw): 21966 * VM/Machine.h: 21967 * VM/Register.h: 21968 * VM/SamplingTool.cpp: 21969 (JSC::SamplingTool::dump): 21970 * VM/SamplingTool.h: 21971 (JSC::SamplingTool::SamplingTool): 21972 * bytecompiler/CodeGenerator.cpp: 21973 (JSC::BytecodeGenerator::generate): 21974 (JSC::BytecodeGenerator::BytecodeGenerator): 21975 * jsc.cpp: 21976 (runWithScripts): 21977 * masm/X86Assembler.h: 21978 (JSC::AssemblerBuffer::executableCopy): 21979 (JSC::X86Assembler::executableCopy): 21980 * runtime/ExecState.h: 21981 (JSC::ExecState::interpreter): 21982 * runtime/JSCell.h: 21983 * runtime/JSFunction.h: 21984 * runtime/JSGlobalData.cpp: 21985 (JSC::JSGlobalData::JSGlobalData): 21986 * runtime/JSGlobalData.h: 21987 * runtime/JSImmediate.h: 21988 * runtime/JSString.h: 21989 * runtime/JSValue.h: 21990 * runtime/JSVariableObject.h: 21991 * runtime/RegExp.cpp: 21992 (JSC::RegExp::RegExp): 21993 (JSC::RegExp::~RegExp): 21994 (JSC::RegExp::match): 21995 * runtime/RegExp.h: 21996 * wrec/CharacterClassConstructor.cpp: 21997 * wrec/CharacterClassConstructor.h: 21998 * wrec/WREC.cpp: 21999 (JSC::WREC::compileRegExp): 22000 * wrec/WREC.h: 22001 (JSC::WREC::Generator::Generator): 22002 (JSC::WREC::Parser::): 22003 (JSC::WREC::Parser::Parser): 22004 (JSC::WREC::Parser::parseAlternative): 22005 22006 2008-11-16 Greg Bolsinga <bolsinga (a] apple.com> 22007 22008 Reviewed by Darin Adler. 22009 22010 https://bugs.webkit.org/show_bug.cgi?id=21810 22011 Remove use of static C++ objects that are destroyed at exit time (destructors) 22012 22013 Conditionally have the DEFINE_STATIC_LOCAL workaround <rdar://problem/6354696> 22014 (Codegen issue with C++ static reference in gcc build 5465) based upon the compiler 22015 build versions. It will use the: 22016 static T& = *new T; 22017 style for all other compilers. 22018 22019 * wtf/StdLibExtras.h: 22020 22021 2008-11-16 Alexey Proskuryakov <ap (a] webkit.org> 22022 22023 Reviewed by Dan Bernstein. 22024 22025 https://bugs.webkit.org/show_bug.cgi?id=22290 22026 Remove cross-heap GC and MessagePort multi-threading support 22027 22028 It is broken (and may not be implementable at all), and no longer needed, as we 22029 don't use MessagePorts for communication with workers any more. 22030 22031 * JavaScriptCore.exp: 22032 * runtime/Collector.cpp: 22033 (JSC::Heap::collect): 22034 * runtime/JSGlobalObject.cpp: 22035 * runtime/JSGlobalObject.h: 22036 Remove hooks for cross-heap GC. 22037 22038 2008-11-15 Sam Weinig <sam (a] webkit.org> 22039 22040 Reviewed by Cameron Zwarich. 22041 22042 Cleanup jsc command line code a little. 22043 22044 * jsc.cpp: 22045 (functionQuit): 22046 (main): Use standard exit status macros 22047 (cleanupGlobalData): Factor out cleanup code into this function. 22048 (printUsageStatement): Use standard exit status macros. 22049 22050 2008-11-15 Sam Weinig <sam (a] webkit.org> 22051 22052 Reviewed by Cameron Zwarich. 22053 22054 Cleanup BytecodeGenerator constructors. 22055 22056 * bytecompiler/CodeGenerator.cpp: 22057 (JSC::BytecodeGenerator::BytecodeGenerator): 22058 * bytecompiler/CodeGenerator.h: 22059 * parser/Nodes.cpp: 22060 (JSC::ProgramNode::generateBytecode): 22061 22062 2008-11-15 Darin Adler <darin (a] apple.com> 22063 22064 Rubber stamped by Geoff Garen. 22065 22066 - do the long-planned StructureID -> Structure rename 22067 22068 * API/JSCallbackConstructor.cpp: 22069 (JSC::JSCallbackConstructor::JSCallbackConstructor): 22070 * API/JSCallbackConstructor.h: 22071 (JSC::JSCallbackConstructor::createStructure): 22072 * API/JSCallbackFunction.h: 22073 (JSC::JSCallbackFunction::createStructure): 22074 * API/JSCallbackObject.h: 22075 (JSC::JSCallbackObject::createStructure): 22076 * API/JSCallbackObjectFunctions.h: 22077 (JSC::::JSCallbackObject): 22078 * API/JSValueRef.cpp: 22079 (JSValueIsInstanceOfConstructor): 22080 * GNUmakefile.am: 22081 * JavaScriptCore.exp: 22082 * JavaScriptCore.pri: 22083 * JavaScriptCore.scons: 22084 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 22085 * JavaScriptCore.xcodeproj/project.pbxproj: 22086 * JavaScriptCoreSources.bkl: 22087 * VM/CTI.cpp: 22088 (JSC::CTI::compileBinaryArithOp): 22089 (JSC::CTI::privateCompileMainPass): 22090 (JSC::CTI::privateCompileGetByIdSelf): 22091 (JSC::CTI::privateCompileGetByIdProto): 22092 (JSC::CTI::privateCompileGetByIdChain): 22093 (JSC::CTI::privateCompilePutByIdReplace): 22094 (JSC::transitionWillNeedStorageRealloc): 22095 (JSC::CTI::privateCompilePutByIdTransition): 22096 (JSC::CTI::patchGetByIdSelf): 22097 (JSC::CTI::patchPutByIdReplace): 22098 * VM/CTI.h: 22099 (JSC::CTI::compileGetByIdSelf): 22100 (JSC::CTI::compileGetByIdProto): 22101 (JSC::CTI::compileGetByIdChain): 22102 (JSC::CTI::compilePutByIdReplace): 22103 (JSC::CTI::compilePutByIdTransition): 22104 * VM/CodeBlock.cpp: 22105 (JSC::CodeBlock::printStructure): 22106 (JSC::CodeBlock::printStructures): 22107 (JSC::CodeBlock::dump): 22108 (JSC::CodeBlock::~CodeBlock): 22109 (JSC::CodeBlock::derefStructures): 22110 (JSC::CodeBlock::refStructures): 22111 * VM/CodeBlock.h: 22112 * VM/Instruction.h: 22113 (JSC::Instruction::Instruction): 22114 (JSC::Instruction::): 22115 * VM/Machine.cpp: 22116 (JSC::jsTypeStringForValue): 22117 (JSC::jsIsObjectType): 22118 (JSC::BytecodeInterpreter::resolveGlobal): 22119 (JSC::BytecodeInterpreter::BytecodeInterpreter): 22120 (JSC::cachePrototypeChain): 22121 (JSC::BytecodeInterpreter::tryCachePutByID): 22122 (JSC::BytecodeInterpreter::uncachePutByID): 22123 (JSC::BytecodeInterpreter::tryCacheGetByID): 22124 (JSC::BytecodeInterpreter::uncacheGetByID): 22125 (JSC::BytecodeInterpreter::privateExecute): 22126 (JSC::BytecodeInterpreter::tryCTICachePutByID): 22127 (JSC::BytecodeInterpreter::tryCTICacheGetByID): 22128 (JSC::BytecodeInterpreter::cti_op_instanceof): 22129 (JSC::BytecodeInterpreter::cti_op_construct_JSConstruct): 22130 (JSC::BytecodeInterpreter::cti_op_resolve_global): 22131 (JSC::BytecodeInterpreter::cti_op_is_undefined): 22132 * runtime/Arguments.h: 22133 (JSC::Arguments::createStructure): 22134 * runtime/ArrayConstructor.cpp: 22135 (JSC::ArrayConstructor::ArrayConstructor): 22136 * runtime/ArrayConstructor.h: 22137 * runtime/ArrayPrototype.cpp: 22138 (JSC::ArrayPrototype::ArrayPrototype): 22139 * runtime/ArrayPrototype.h: 22140 * runtime/BatchedTransitionOptimizer.h: 22141 (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer): 22142 (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer): 22143 * runtime/BooleanConstructor.cpp: 22144 (JSC::BooleanConstructor::BooleanConstructor): 22145 * runtime/BooleanConstructor.h: 22146 * runtime/BooleanObject.cpp: 22147 (JSC::BooleanObject::BooleanObject): 22148 * runtime/BooleanObject.h: 22149 * runtime/BooleanPrototype.cpp: 22150 (JSC::BooleanPrototype::BooleanPrototype): 22151 * runtime/BooleanPrototype.h: 22152 * runtime/DateConstructor.cpp: 22153 (JSC::DateConstructor::DateConstructor): 22154 * runtime/DateConstructor.h: 22155 * runtime/DateInstance.cpp: 22156 (JSC::DateInstance::DateInstance): 22157 * runtime/DateInstance.h: 22158 * runtime/DatePrototype.cpp: 22159 (JSC::DatePrototype::DatePrototype): 22160 * runtime/DatePrototype.h: 22161 (JSC::DatePrototype::createStructure): 22162 * runtime/ErrorConstructor.cpp: 22163 (JSC::ErrorConstructor::ErrorConstructor): 22164 * runtime/ErrorConstructor.h: 22165 * runtime/ErrorInstance.cpp: 22166 (JSC::ErrorInstance::ErrorInstance): 22167 * runtime/ErrorInstance.h: 22168 * runtime/ErrorPrototype.cpp: 22169 (JSC::ErrorPrototype::ErrorPrototype): 22170 * runtime/ErrorPrototype.h: 22171 * runtime/FunctionConstructor.cpp: 22172 (JSC::FunctionConstructor::FunctionConstructor): 22173 * runtime/FunctionConstructor.h: 22174 * runtime/FunctionPrototype.cpp: 22175 (JSC::FunctionPrototype::FunctionPrototype): 22176 (JSC::FunctionPrototype::addFunctionProperties): 22177 * runtime/FunctionPrototype.h: 22178 (JSC::FunctionPrototype::createStructure): 22179 * runtime/GlobalEvalFunction.cpp: 22180 (JSC::GlobalEvalFunction::GlobalEvalFunction): 22181 * runtime/GlobalEvalFunction.h: 22182 * runtime/Identifier.h: 22183 * runtime/InternalFunction.cpp: 22184 (JSC::InternalFunction::InternalFunction): 22185 * runtime/InternalFunction.h: 22186 (JSC::InternalFunction::createStructure): 22187 (JSC::InternalFunction::InternalFunction): 22188 * runtime/JSActivation.cpp: 22189 (JSC::JSActivation::JSActivation): 22190 * runtime/JSActivation.h: 22191 (JSC::JSActivation::createStructure): 22192 * runtime/JSArray.cpp: 22193 (JSC::JSArray::JSArray): 22194 * runtime/JSArray.h: 22195 (JSC::JSArray::createStructure): 22196 * runtime/JSCell.h: 22197 (JSC::JSCell::JSCell): 22198 (JSC::JSCell::isObject): 22199 (JSC::JSCell::isString): 22200 (JSC::JSCell::structure): 22201 (JSC::JSValue::needsThisConversion): 22202 * runtime/JSFunction.cpp: 22203 (JSC::JSFunction::construct): 22204 * runtime/JSFunction.h: 22205 (JSC::JSFunction::JSFunction): 22206 (JSC::JSFunction::createStructure): 22207 * runtime/JSGlobalData.cpp: 22208 (JSC::JSGlobalData::JSGlobalData): 22209 (JSC::JSGlobalData::createLeaked): 22210 * runtime/JSGlobalData.h: 22211 * runtime/JSGlobalObject.cpp: 22212 (JSC::markIfNeeded): 22213 (JSC::JSGlobalObject::reset): 22214 * runtime/JSGlobalObject.h: 22215 (JSC::JSGlobalObject::JSGlobalObject): 22216 (JSC::JSGlobalObject::argumentsStructure): 22217 (JSC::JSGlobalObject::arrayStructure): 22218 (JSC::JSGlobalObject::booleanObjectStructure): 22219 (JSC::JSGlobalObject::callbackConstructorStructure): 22220 (JSC::JSGlobalObject::callbackFunctionStructure): 22221 (JSC::JSGlobalObject::callbackObjectStructure): 22222 (JSC::JSGlobalObject::dateStructure): 22223 (JSC::JSGlobalObject::emptyObjectStructure): 22224 (JSC::JSGlobalObject::errorStructure): 22225 (JSC::JSGlobalObject::functionStructure): 22226 (JSC::JSGlobalObject::numberObjectStructure): 22227 (JSC::JSGlobalObject::prototypeFunctionStructure): 22228 (JSC::JSGlobalObject::regExpMatchesArrayStructure): 22229 (JSC::JSGlobalObject::regExpStructure): 22230 (JSC::JSGlobalObject::stringObjectStructure): 22231 (JSC::JSGlobalObject::createStructure): 22232 (JSC::Structure::prototypeForLookup): 22233 * runtime/JSNotAnObject.h: 22234 (JSC::JSNotAnObject::createStructure): 22235 * runtime/JSNumberCell.h: 22236 (JSC::JSNumberCell::createStructure): 22237 (JSC::JSNumberCell::JSNumberCell): 22238 * runtime/JSObject.cpp: 22239 (JSC::JSObject::mark): 22240 (JSC::JSObject::put): 22241 (JSC::JSObject::deleteProperty): 22242 (JSC::JSObject::defineGetter): 22243 (JSC::JSObject::defineSetter): 22244 (JSC::JSObject::getPropertyAttributes): 22245 (JSC::JSObject::getPropertyNames): 22246 (JSC::JSObject::removeDirect): 22247 (JSC::JSObject::createInheritorID): 22248 * runtime/JSObject.h: 22249 (JSC::JSObject::getDirect): 22250 (JSC::JSObject::getDirectLocation): 22251 (JSC::JSObject::hasCustomProperties): 22252 (JSC::JSObject::hasGetterSetterProperties): 22253 (JSC::JSObject::createStructure): 22254 (JSC::JSObject::JSObject): 22255 (JSC::JSObject::~JSObject): 22256 (JSC::JSObject::prototype): 22257 (JSC::JSObject::setPrototype): 22258 (JSC::JSObject::setStructure): 22259 (JSC::JSObject::inheritorID): 22260 (JSC::JSObject::inlineGetOwnPropertySlot): 22261 (JSC::JSObject::getOwnPropertySlotForWrite): 22262 (JSC::JSCell::fastGetOwnPropertySlot): 22263 (JSC::JSObject::putDirect): 22264 (JSC::JSObject::putDirectWithoutTransition): 22265 (JSC::JSObject::transitionTo): 22266 * runtime/JSPropertyNameIterator.h: 22267 (JSC::JSPropertyNameIterator::next): 22268 * runtime/JSStaticScopeObject.h: 22269 (JSC::JSStaticScopeObject::JSStaticScopeObject): 22270 (JSC::JSStaticScopeObject::createStructure): 22271 * runtime/JSString.h: 22272 (JSC::JSString::JSString): 22273 (JSC::JSString::createStructure): 22274 * runtime/JSVariableObject.h: 22275 (JSC::JSVariableObject::JSVariableObject): 22276 * runtime/JSWrapperObject.h: 22277 (JSC::JSWrapperObject::JSWrapperObject): 22278 * runtime/MathObject.cpp: 22279 (JSC::MathObject::MathObject): 22280 * runtime/MathObject.h: 22281 (JSC::MathObject::createStructure): 22282 * runtime/NativeErrorConstructor.cpp: 22283 (JSC::NativeErrorConstructor::NativeErrorConstructor): 22284 * runtime/NativeErrorConstructor.h: 22285 * runtime/NativeErrorPrototype.cpp: 22286 (JSC::NativeErrorPrototype::NativeErrorPrototype): 22287 * runtime/NativeErrorPrototype.h: 22288 * runtime/NumberConstructor.cpp: 22289 (JSC::NumberConstructor::NumberConstructor): 22290 * runtime/NumberConstructor.h: 22291 (JSC::NumberConstructor::createStructure): 22292 * runtime/NumberObject.cpp: 22293 (JSC::NumberObject::NumberObject): 22294 * runtime/NumberObject.h: 22295 * runtime/NumberPrototype.cpp: 22296 (JSC::NumberPrototype::NumberPrototype): 22297 * runtime/NumberPrototype.h: 22298 * runtime/ObjectConstructor.cpp: 22299 (JSC::ObjectConstructor::ObjectConstructor): 22300 * runtime/ObjectConstructor.h: 22301 * runtime/ObjectPrototype.cpp: 22302 (JSC::ObjectPrototype::ObjectPrototype): 22303 * runtime/ObjectPrototype.h: 22304 * runtime/Operations.h: 22305 (JSC::equalSlowCaseInline): 22306 * runtime/PropertyNameArray.h: 22307 (JSC::PropertyNameArrayData::setCachedStructure): 22308 (JSC::PropertyNameArrayData::cachedStructure): 22309 (JSC::PropertyNameArrayData::setCachedPrototypeChain): 22310 (JSC::PropertyNameArrayData::cachedPrototypeChain): 22311 (JSC::PropertyNameArrayData::PropertyNameArrayData): 22312 * runtime/PrototypeFunction.cpp: 22313 (JSC::PrototypeFunction::PrototypeFunction): 22314 * runtime/PrototypeFunction.h: 22315 * runtime/RegExpConstructor.cpp: 22316 (JSC::RegExpConstructor::RegExpConstructor): 22317 * runtime/RegExpConstructor.h: 22318 (JSC::RegExpConstructor::createStructure): 22319 * runtime/RegExpObject.cpp: 22320 (JSC::RegExpObject::RegExpObject): 22321 * runtime/RegExpObject.h: 22322 (JSC::RegExpObject::createStructure): 22323 * runtime/RegExpPrototype.cpp: 22324 (JSC::RegExpPrototype::RegExpPrototype): 22325 * runtime/RegExpPrototype.h: 22326 * runtime/StringConstructor.cpp: 22327 (JSC::StringConstructor::StringConstructor): 22328 * runtime/StringConstructor.h: 22329 * runtime/StringObject.cpp: 22330 (JSC::StringObject::StringObject): 22331 * runtime/StringObject.h: 22332 (JSC::StringObject::createStructure): 22333 * runtime/StringObjectThatMasqueradesAsUndefined.h: 22334 (JSC::StringObjectThatMasqueradesAsUndefined::create): 22335 (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): 22336 (JSC::StringObjectThatMasqueradesAsUndefined::createStructure): 22337 * runtime/StringPrototype.cpp: 22338 (JSC::StringPrototype::StringPrototype): 22339 * runtime/StringPrototype.h: 22340 * runtime/Structure.cpp: Copied from JavaScriptCore/runtime/StructureID.cpp. 22341 (JSC::Structure::dumpStatistics): 22342 (JSC::Structure::Structure): 22343 (JSC::Structure::~Structure): 22344 (JSC::Structure::startIgnoringLeaks): 22345 (JSC::Structure::stopIgnoringLeaks): 22346 (JSC::Structure::materializePropertyMap): 22347 (JSC::Structure::getEnumerablePropertyNames): 22348 (JSC::Structure::clearEnumerationCache): 22349 (JSC::Structure::growPropertyStorageCapacity): 22350 (JSC::Structure::addPropertyTransitionToExistingStructure): 22351 (JSC::Structure::addPropertyTransition): 22352 (JSC::Structure::removePropertyTransition): 22353 (JSC::Structure::changePrototypeTransition): 22354 (JSC::Structure::getterSetterTransition): 22355 (JSC::Structure::toDictionaryTransition): 22356 (JSC::Structure::fromDictionaryTransition): 22357 (JSC::Structure::addPropertyWithoutTransition): 22358 (JSC::Structure::removePropertyWithoutTransition): 22359 (JSC::Structure::createCachedPrototypeChain): 22360 (JSC::Structure::checkConsistency): 22361 (JSC::Structure::copyPropertyTable): 22362 (JSC::Structure::get): 22363 (JSC::Structure::put): 22364 (JSC::Structure::remove): 22365 (JSC::Structure::insertIntoPropertyMapHashTable): 22366 (JSC::Structure::createPropertyMapHashTable): 22367 (JSC::Structure::expandPropertyMapHashTable): 22368 (JSC::Structure::rehashPropertyMapHashTable): 22369 (JSC::Structure::getEnumerablePropertyNamesInternal): 22370 * runtime/Structure.h: Copied from JavaScriptCore/runtime/StructureID.h. 22371 (JSC::Structure::create): 22372 (JSC::Structure::previousID): 22373 (JSC::Structure::setCachedPrototypeChain): 22374 (JSC::Structure::cachedPrototypeChain): 22375 (JSC::Structure::): 22376 (JSC::Structure::get): 22377 * runtime/StructureChain.cpp: Copied from JavaScriptCore/runtime/StructureIDChain.cpp. 22378 (JSC::StructureChain::StructureChain): 22379 (JSC::structureChainsAreEqual): 22380 * runtime/StructureChain.h: Copied from JavaScriptCore/runtime/StructureIDChain.h. 22381 (JSC::StructureChain::create): 22382 (JSC::StructureChain::head): 22383 * runtime/StructureID.cpp: Removed. 22384 * runtime/StructureID.h: Removed. 22385 * runtime/StructureIDChain.cpp: Removed. 22386 * runtime/StructureIDChain.h: Removed. 22387 * runtime/StructureIDTransitionTable.h: Removed. 22388 * runtime/StructureTransitionTable.h: Copied from JavaScriptCore/runtime/StructureIDTransitionTable.h. 22389 22390 2008-11-15 Darin Adler <darin (a] apple.com> 22391 22392 - fix non-WREC build 22393 22394 * runtime/RegExp.cpp: Put "using namespace WREC" inside #if ENABLE(WREC). 22395 22396 2008-11-15 Kevin Ollivier <kevino (a] theolliviers.com> 22397 22398 Reviewed by Timothy Hatcher. 22399 22400 As ThreadingNone doesn't implement threads, isMainThread should return true, 22401 not false. 22402 22403 https://bugs.webkit.org/show_bug.cgi?id=22285 22404 22405 * wtf/ThreadingNone.cpp: 22406 (WTF::isMainThread): 22407 22408 2008-11-15 Geoffrey Garen <ggaren (a] apple.com> 22409 22410 Reviewed by Sam Weinig. 22411 22412 Moved all WREC-related code into WREC.cpp and put it in a WREC namespace. 22413 Removed the WREC prefix from class names. 22414 22415 * VM/CTI.cpp: 22416 * VM/CTI.h: 22417 * VM/Machine.h: 22418 (JSC::BytecodeInterpreter::assemblerBuffer): 22419 * masm/X86Assembler.h: 22420 * runtime/RegExp.cpp: 22421 (JSC::RegExp::RegExp): 22422 * wrec/CharacterClassConstructor.cpp: 22423 * wrec/CharacterClassConstructor.h: 22424 * wrec/WREC.cpp: 22425 (WREC::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor): 22426 (WREC::GeneratePatternCharacterFunctor::generateAtom): 22427 (WREC::GeneratePatternCharacterFunctor::backtrack): 22428 (WREC::GenerateCharacterClassFunctor::generateAtom): 22429 (WREC::GenerateCharacterClassFunctor::backtrack): 22430 (WREC::GenerateBackreferenceFunctor::generateAtom): 22431 (WREC::GenerateBackreferenceFunctor::backtrack): 22432 (WREC::GenerateParenthesesNonGreedyFunctor::generateAtom): 22433 (WREC::GenerateParenthesesNonGreedyFunctor::backtrack): 22434 (WREC::Generator::generateBacktrack1): 22435 (WREC::Generator::generateBacktrackBackreference): 22436 (WREC::Generator::generateBackreferenceQuantifier): 22437 (WREC::Generator::generateNonGreedyQuantifier): 22438 (WREC::Generator::generateGreedyQuantifier): 22439 (WREC::Generator::generatePatternCharacter): 22440 (WREC::Generator::generateCharacterClassInvertedRange): 22441 (WREC::Generator::generateCharacterClassInverted): 22442 (WREC::Generator::generateCharacterClass): 22443 (WREC::Generator::generateParentheses): 22444 (WREC::Generator::generateParenthesesNonGreedy): 22445 (WREC::Generator::generateParenthesesResetTrampoline): 22446 (WREC::Generator::generateAssertionBOL): 22447 (WREC::Generator::generateAssertionEOL): 22448 (WREC::Generator::generateAssertionWordBoundary): 22449 (WREC::Generator::generateBackreference): 22450 (WREC::Generator::generateDisjunction): 22451 (WREC::Generator::terminateDisjunction): 22452 (WREC::Parser::parseGreedyQuantifier): 22453 (WREC::Parser::parseQuantifier): 22454 (WREC::Parser::parsePatternCharacterQualifier): 22455 (WREC::Parser::parseCharacterClassQuantifier): 22456 (WREC::Parser::parseBackreferenceQuantifier): 22457 (WREC::Parser::parseParentheses): 22458 (WREC::Parser::parseCharacterClass): 22459 (WREC::Parser::parseOctalEscape): 22460 (WREC::Parser::parseEscape): 22461 (WREC::Parser::parseTerm): 22462 (WREC::Parser::parseDisjunction): 22463 (WREC::compileRegExp): 22464 * wrec/WREC.h: 22465 (WREC::Generator::Generator): 22466 (WREC::Parser::Parser): 22467 (WREC::Parser::parseAlternative): 22468 22469 2008-11-15 Geoffrey Garen <ggaren (a] apple.com> 22470 22471 Reviewed by Sam Weinig. 22472 22473 Changed another case of "m_jit" to "m_assembler". 22474 22475 * VM/CTI.cpp: 22476 * wrec/WREC.cpp: 22477 * wrec/WREC.h: 22478 (JSC::WRECGenerator::WRECGenerator): 22479 (JSC::WRECParser::WRECParser): 22480 22481 2008-11-15 Geoffrey Garen <ggaren (a] apple.com> 22482 22483 Reviewed by Sam Weinig. 22484 22485 Renamed "jit" to "assembler" and, for brevity, replaced *jit.* with __ 22486 using a macro. 22487 22488 * VM/CTI.cpp: 22489 (JSC::CTI::emitGetVirtualRegister): 22490 (JSC::CTI::emitPutCTIArgFromVirtualRegister): 22491 (JSC::CTI::emitPutCTIArg): 22492 (JSC::CTI::emitGetCTIArg): 22493 (JSC::CTI::emitPutCTIArgConstant): 22494 (JSC::CTI::emitPutCTIParam): 22495 (JSC::CTI::emitGetCTIParam): 22496 (JSC::CTI::emitPutToCallFrameHeader): 22497 (JSC::CTI::emitGetFromCallFrameHeader): 22498 (JSC::CTI::emitPutVirtualRegister): 22499 (JSC::CTI::emitInitRegister): 22500 (JSC::CTI::emitAllocateNumber): 22501 (JSC::CTI::emitNakedCall): 22502 (JSC::CTI::emitNakedFastCall): 22503 (JSC::CTI::emitCTICall): 22504 (JSC::CTI::emitJumpSlowCaseIfNotJSCell): 22505 (JSC::CTI::linkSlowCaseIfNotJSCell): 22506 (JSC::CTI::emitJumpSlowCaseIfNotImmNum): 22507 (JSC::CTI::emitJumpSlowCaseIfNotImmNums): 22508 (JSC::CTI::emitFastArithDeTagImmediate): 22509 (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero): 22510 (JSC::CTI::emitFastArithReTagImmediate): 22511 (JSC::CTI::emitFastArithPotentiallyReTagImmediate): 22512 (JSC::CTI::emitFastArithImmToInt): 22513 (JSC::CTI::emitFastArithIntToImmOrSlowCase): 22514 (JSC::CTI::emitFastArithIntToImmNoCheck): 22515 (JSC::CTI::emitArithIntToImmWithJump): 22516 (JSC::CTI::emitTagAsBoolImmediate): 22517 (JSC::CTI::CTI): 22518 (JSC::CTI::compileOpCallInitializeCallFrame): 22519 (JSC::CTI::compileOpCall): 22520 (JSC::CTI::compileOpStrictEq): 22521 (JSC::CTI::emitSlowScriptCheck): 22522 (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): 22523 (JSC::CTI::compileBinaryArithOp): 22524 (JSC::CTI::compileBinaryArithOpSlowCase): 22525 (JSC::CTI::privateCompileMainPass): 22526 (JSC::CTI::privateCompileLinkPass): 22527 (JSC::CTI::privateCompileSlowCases): 22528 (JSC::CTI::privateCompile): 22529 (JSC::CTI::privateCompileGetByIdSelf): 22530 (JSC::CTI::privateCompileGetByIdProto): 22531 (JSC::CTI::privateCompileGetByIdChain): 22532 (JSC::CTI::privateCompilePutByIdReplace): 22533 (JSC::CTI::privateCompilePutByIdTransition): 22534 (JSC::CTI::privateCompileCTIMachineTrampolines): 22535 (JSC::CTI::privateCompilePatchGetArrayLength): 22536 (JSC::CTI::emitGetVariableObjectRegister): 22537 (JSC::CTI::emitPutVariableObjectRegister): 22538 (JSC::CTI::compileRegExp): 22539 * VM/CTI.h: 22540 * wrec/WREC.cpp: 22541 (JSC::WRECGenerator::generateBacktrack1): 22542 (JSC::WRECGenerator::generateBacktrackBackreference): 22543 (JSC::WRECGenerator::generateBackreferenceQuantifier): 22544 (JSC::WRECGenerator::generateNonGreedyQuantifier): 22545 (JSC::WRECGenerator::generateGreedyQuantifier): 22546 (JSC::WRECGenerator::generatePatternCharacter): 22547 (JSC::WRECGenerator::generateCharacterClassInvertedRange): 22548 (JSC::WRECGenerator::generateCharacterClassInverted): 22549 (JSC::WRECGenerator::generateCharacterClass): 22550 (JSC::WRECGenerator::generateParentheses): 22551 (JSC::WRECGenerator::generateParenthesesNonGreedy): 22552 (JSC::WRECGenerator::generateParenthesesResetTrampoline): 22553 (JSC::WRECGenerator::generateAssertionBOL): 22554 (JSC::WRECGenerator::generateAssertionEOL): 22555 (JSC::WRECGenerator::generateAssertionWordBoundary): 22556 (JSC::WRECGenerator::generateBackreference): 22557 (JSC::WRECGenerator::generateDisjunction): 22558 (JSC::WRECGenerator::terminateDisjunction): 22559 22560 2008-11-15 Sam Weinig <sam (a] webkit.org> 22561 22562 Reviewed by Geoffrey Garen. 22563 22564 Remove dead method declaration. 22565 22566 * bytecompiler/CodeGenerator.h: 22567 22568 2008-11-15 Geoffrey Garen <ggaren (a] apple.com> 22569 22570 Reviewed by Sam Weinig. 22571 22572 Renamed LabelID to Label, Label::isForwardLabel to Label::isForward. 22573 22574 * VM/LabelID.h: 22575 (JSC::Label::Label): 22576 (JSC::Label::isForward): 22577 * bytecompiler/CodeGenerator.cpp: 22578 (JSC::BytecodeGenerator::newLabel): 22579 (JSC::BytecodeGenerator::emitLabel): 22580 (JSC::BytecodeGenerator::emitJump): 22581 (JSC::BytecodeGenerator::emitJumpIfTrue): 22582 (JSC::BytecodeGenerator::emitJumpIfFalse): 22583 (JSC::BytecodeGenerator::pushFinallyContext): 22584 (JSC::BytecodeGenerator::emitComplexJumpScopes): 22585 (JSC::BytecodeGenerator::emitJumpScopes): 22586 (JSC::BytecodeGenerator::emitNextPropertyName): 22587 (JSC::BytecodeGenerator::emitCatch): 22588 (JSC::BytecodeGenerator::emitJumpSubroutine): 22589 (JSC::prepareJumpTableForImmediateSwitch): 22590 (JSC::prepareJumpTableForCharacterSwitch): 22591 (JSC::prepareJumpTableForStringSwitch): 22592 (JSC::BytecodeGenerator::endSwitch): 22593 * bytecompiler/CodeGenerator.h: 22594 * bytecompiler/LabelScope.h: 22595 (JSC::LabelScope::LabelScope): 22596 (JSC::LabelScope::breakTarget): 22597 (JSC::LabelScope::continueTarget): 22598 * parser/Nodes.cpp: 22599 (JSC::LogicalOpNode::emitBytecode): 22600 (JSC::ConditionalNode::emitBytecode): 22601 (JSC::IfNode::emitBytecode): 22602 (JSC::IfElseNode::emitBytecode): 22603 (JSC::DoWhileNode::emitBytecode): 22604 (JSC::WhileNode::emitBytecode): 22605 (JSC::ForNode::emitBytecode): 22606 (JSC::ForInNode::emitBytecode): 22607 (JSC::ReturnNode::emitBytecode): 22608 (JSC::CaseBlockNode::emitBytecodeForBlock): 22609 (JSC::TryNode::emitBytecode): 22610 22611 2008-11-15 Geoffrey Garen <ggaren (a] apple.com> 22612 22613 Reviewed by Sam Weinig. 22614 22615 Renamed JITCodeBuffer to AssemblerBuffer and renamed its data members 22616 to be more like the rest of our buffer classes, with a size and a 22617 capacity. 22618 22619 Added an assert in the unchecked put case to match the test in the checked 22620 put case. 22621 22622 Changed a C-style cast to a C++-style cast. 22623 22624 Renamed MAX_INSTRUCTION_SIZE to maxInstructionSize. 22625 22626 * VM/CTI.cpp: 22627 (JSC::CTI::CTI): 22628 (JSC::CTI::compileRegExp): 22629 * VM/Machine.cpp: 22630 (JSC::BytecodeInterpreter::BytecodeInterpreter): 22631 * VM/Machine.h: 22632 (JSC::BytecodeInterpreter::assemblerBuffer): 22633 * masm/X86Assembler.h: 22634 (JSC::AssemblerBuffer::AssemblerBuffer): 22635 (JSC::AssemblerBuffer::~AssemblerBuffer): 22636 (JSC::AssemblerBuffer::ensureSpace): 22637 (JSC::AssemblerBuffer::isAligned): 22638 (JSC::AssemblerBuffer::putByteUnchecked): 22639 (JSC::AssemblerBuffer::putByte): 22640 (JSC::AssemblerBuffer::putShortUnchecked): 22641 (JSC::AssemblerBuffer::putShort): 22642 (JSC::AssemblerBuffer::putIntUnchecked): 22643 (JSC::AssemblerBuffer::putInt): 22644 (JSC::AssemblerBuffer::data): 22645 (JSC::AssemblerBuffer::size): 22646 (JSC::AssemblerBuffer::reset): 22647 (JSC::AssemblerBuffer::copy): 22648 (JSC::AssemblerBuffer::grow): 22649 (JSC::X86Assembler::): 22650 (JSC::X86Assembler::X86Assembler): 22651 (JSC::X86Assembler::testl_i32r): 22652 (JSC::X86Assembler::movl_mr): 22653 (JSC::X86Assembler::movl_rm): 22654 (JSC::X86Assembler::movl_i32m): 22655 (JSC::X86Assembler::emitCall): 22656 (JSC::X86Assembler::label): 22657 (JSC::X86Assembler::emitUnlinkedJmp): 22658 (JSC::X86Assembler::emitUnlinkedJne): 22659 (JSC::X86Assembler::emitUnlinkedJe): 22660 (JSC::X86Assembler::emitUnlinkedJl): 22661 (JSC::X86Assembler::emitUnlinkedJb): 22662 (JSC::X86Assembler::emitUnlinkedJle): 22663 (JSC::X86Assembler::emitUnlinkedJbe): 22664 (JSC::X86Assembler::emitUnlinkedJge): 22665 (JSC::X86Assembler::emitUnlinkedJg): 22666 (JSC::X86Assembler::emitUnlinkedJa): 22667 (JSC::X86Assembler::emitUnlinkedJae): 22668 (JSC::X86Assembler::emitUnlinkedJo): 22669 (JSC::X86Assembler::emitUnlinkedJp): 22670 (JSC::X86Assembler::emitUnlinkedJs): 22671 (JSC::X86Assembler::link): 22672 (JSC::X86Assembler::emitModRm_rr): 22673 (JSC::X86Assembler::emitModRm_rm): 22674 (JSC::X86Assembler::emitModRm_opr): 22675 22676 2008-11-15 Geoffrey Garen <ggaren (a] apple.com> 22677 22678 Suggested by Maciej Stachowiak. 22679 22680 Reverted most "opcode" => "bytecode" renames. We use "bytecode" as a 22681 mass noun to refer to a stream of instructions. Each instruction may be 22682 an opcode or an operand. 22683 22684 * VM/CTI.cpp: 22685 (JSC::CTI::emitCTICall): 22686 (JSC::CTI::compileOpCall): 22687 (JSC::CTI::compileBinaryArithOp): 22688 (JSC::CTI::compileBinaryArithOpSlowCase): 22689 (JSC::CTI::privateCompileMainPass): 22690 (JSC::CTI::privateCompileSlowCases): 22691 (JSC::CTI::privateCompile): 22692 * VM/CTI.h: 22693 * VM/CodeBlock.cpp: 22694 (JSC::CodeBlock::printStructureIDs): 22695 (JSC::CodeBlock::dump): 22696 (JSC::CodeBlock::derefStructureIDs): 22697 (JSC::CodeBlock::refStructureIDs): 22698 * VM/CodeBlock.h: 22699 * VM/ExceptionHelpers.cpp: 22700 (JSC::createNotAnObjectError): 22701 * VM/Instruction.h: 22702 (JSC::Instruction::Instruction): 22703 (JSC::Instruction::): 22704 * VM/Machine.cpp: 22705 (JSC::BytecodeInterpreter::isOpcode): 22706 (JSC::BytecodeInterpreter::throwException): 22707 (JSC::BytecodeInterpreter::tryCachePutByID): 22708 (JSC::BytecodeInterpreter::uncachePutByID): 22709 (JSC::BytecodeInterpreter::tryCacheGetByID): 22710 (JSC::BytecodeInterpreter::uncacheGetByID): 22711 (JSC::BytecodeInterpreter::privateExecute): 22712 (JSC::BytecodeInterpreter::tryCTICachePutByID): 22713 (JSC::BytecodeInterpreter::tryCTICacheGetByID): 22714 * VM/Machine.h: 22715 (JSC::BytecodeInterpreter::getOpcode): 22716 (JSC::BytecodeInterpreter::getOpcodeID): 22717 (JSC::BytecodeInterpreter::isCallBytecode): 22718 * VM/Opcode.cpp: 22719 (JSC::): 22720 (JSC::OpcodeStats::OpcodeStats): 22721 (JSC::compareOpcodeIndices): 22722 (JSC::compareOpcodePairIndices): 22723 (JSC::OpcodeStats::~OpcodeStats): 22724 (JSC::OpcodeStats::recordInstruction): 22725 (JSC::OpcodeStats::resetLastInstruction): 22726 * VM/Opcode.h: 22727 (JSC::): 22728 (JSC::padOpcodeName): 22729 * VM/SamplingTool.cpp: 22730 (JSC::ScopeSampleRecord::sample): 22731 (JSC::SamplingTool::run): 22732 (JSC::compareOpcodeIndicesSampling): 22733 (JSC::SamplingTool::dump): 22734 * VM/SamplingTool.h: 22735 (JSC::ScopeSampleRecord::ScopeSampleRecord): 22736 (JSC::SamplingTool::SamplingTool): 22737 * bytecompiler/CodeGenerator.cpp: 22738 (JSC::BytecodeGenerator::BytecodeGenerator): 22739 (JSC::BytecodeGenerator::emitLabel): 22740 (JSC::BytecodeGenerator::emitOpcode): 22741 (JSC::BytecodeGenerator::emitJump): 22742 (JSC::BytecodeGenerator::emitJumpIfTrue): 22743 (JSC::BytecodeGenerator::emitJumpIfFalse): 22744 (JSC::BytecodeGenerator::emitMove): 22745 (JSC::BytecodeGenerator::emitUnaryOp): 22746 (JSC::BytecodeGenerator::emitPreInc): 22747 (JSC::BytecodeGenerator::emitPreDec): 22748 (JSC::BytecodeGenerator::emitPostInc): 22749 (JSC::BytecodeGenerator::emitPostDec): 22750 (JSC::BytecodeGenerator::emitBinaryOp): 22751 (JSC::BytecodeGenerator::emitEqualityOp): 22752 (JSC::BytecodeGenerator::emitUnexpectedLoad): 22753 (JSC::BytecodeGenerator::emitInstanceOf): 22754 (JSC::BytecodeGenerator::emitResolve): 22755 (JSC::BytecodeGenerator::emitGetScopedVar): 22756 (JSC::BytecodeGenerator::emitPutScopedVar): 22757 (JSC::BytecodeGenerator::emitResolveBase): 22758 (JSC::BytecodeGenerator::emitResolveWithBase): 22759 (JSC::BytecodeGenerator::emitResolveFunction): 22760 (JSC::BytecodeGenerator::emitGetById): 22761 (JSC::BytecodeGenerator::emitPutById): 22762 (JSC::BytecodeGenerator::emitPutGetter): 22763 (JSC::BytecodeGenerator::emitPutSetter): 22764 (JSC::BytecodeGenerator::emitDeleteById): 22765 (JSC::BytecodeGenerator::emitGetByVal): 22766 (JSC::BytecodeGenerator::emitPutByVal): 22767 (JSC::BytecodeGenerator::emitDeleteByVal): 22768 (JSC::BytecodeGenerator::emitPutByIndex): 22769 (JSC::BytecodeGenerator::emitNewObject): 22770 (JSC::BytecodeGenerator::emitNewArray): 22771 (JSC::BytecodeGenerator::emitNewFunction): 22772 (JSC::BytecodeGenerator::emitNewRegExp): 22773 (JSC::BytecodeGenerator::emitNewFunctionExpression): 22774 (JSC::BytecodeGenerator::emitCall): 22775 (JSC::BytecodeGenerator::emitReturn): 22776 (JSC::BytecodeGenerator::emitUnaryNoDstOp): 22777 (JSC::BytecodeGenerator::emitConstruct): 22778 (JSC::BytecodeGenerator::emitPopScope): 22779 (JSC::BytecodeGenerator::emitDebugHook): 22780 (JSC::BytecodeGenerator::emitComplexJumpScopes): 22781 (JSC::BytecodeGenerator::emitJumpScopes): 22782 (JSC::BytecodeGenerator::emitNextPropertyName): 22783 (JSC::BytecodeGenerator::emitCatch): 22784 (JSC::BytecodeGenerator::emitNewError): 22785 (JSC::BytecodeGenerator::emitJumpSubroutine): 22786 (JSC::BytecodeGenerator::emitSubroutineReturn): 22787 (JSC::BytecodeGenerator::emitPushNewScope): 22788 (JSC::BytecodeGenerator::beginSwitch): 22789 * bytecompiler/CodeGenerator.h: 22790 * jsc.cpp: 22791 (runWithScripts): 22792 * masm/X86Assembler.h: 22793 (JSC::X86Assembler::): 22794 (JSC::X86Assembler::emitModRm_opr): 22795 (JSC::X86Assembler::emitModRm_opr_Unchecked): 22796 (JSC::X86Assembler::emitModRm_opm): 22797 (JSC::X86Assembler::emitModRm_opm_Unchecked): 22798 (JSC::X86Assembler::emitModRm_opmsib): 22799 * parser/Nodes.cpp: 22800 (JSC::UnaryOpNode::emitBytecode): 22801 (JSC::BinaryOpNode::emitBytecode): 22802 (JSC::ReverseBinaryOpNode::emitBytecode): 22803 (JSC::ThrowableBinaryOpNode::emitBytecode): 22804 (JSC::emitReadModifyAssignment): 22805 (JSC::ScopeNode::ScopeNode): 22806 * parser/Nodes.h: 22807 (JSC::UnaryPlusNode::): 22808 (JSC::NegateNode::): 22809 (JSC::BitwiseNotNode::): 22810 (JSC::LogicalNotNode::): 22811 (JSC::MultNode::): 22812 (JSC::DivNode::): 22813 (JSC::ModNode::): 22814 (JSC::AddNode::): 22815 (JSC::SubNode::): 22816 (JSC::LeftShiftNode::): 22817 (JSC::RightShiftNode::): 22818 (JSC::UnsignedRightShiftNode::): 22819 (JSC::LessNode::): 22820 (JSC::GreaterNode::): 22821 (JSC::LessEqNode::): 22822 (JSC::GreaterEqNode::): 22823 (JSC::InstanceOfNode::): 22824 (JSC::InNode::): 22825 (JSC::EqualNode::): 22826 (JSC::NotEqualNode::): 22827 (JSC::StrictEqualNode::): 22828 (JSC::NotStrictEqualNode::): 22829 (JSC::BitAndNode::): 22830 (JSC::BitOrNode::): 22831 (JSC::BitXOrNode::): 22832 * runtime/StructureID.cpp: 22833 (JSC::StructureID::fromDictionaryTransition): 22834 * wtf/Platform.h: 22835 22836 2008-11-15 Geoffrey Garen <ggaren (a] apple.com> 22837 22838 Reviewed by Sam Weinig. 22839 22840 Renames: 22841 22842 CodeGenerator => BytecodeGenerator 22843 emitCodeForBlock => emitBytecodeForBlock 22844 generatedByteCode => generatedBytecode 22845 generateCode => generateBytecode 22846 22847 * JavaScriptCore.exp: 22848 * bytecompiler/CodeGenerator.cpp: 22849 (JSC::BytecodeGenerator::setDumpsGeneratedCode): 22850 (JSC::BytecodeGenerator::generate): 22851 (JSC::BytecodeGenerator::addVar): 22852 (JSC::BytecodeGenerator::addGlobalVar): 22853 (JSC::BytecodeGenerator::allocateConstants): 22854 (JSC::BytecodeGenerator::BytecodeGenerator): 22855 (JSC::BytecodeGenerator::addParameter): 22856 (JSC::BytecodeGenerator::registerFor): 22857 (JSC::BytecodeGenerator::constRegisterFor): 22858 (JSC::BytecodeGenerator::isLocal): 22859 (JSC::BytecodeGenerator::isLocalConstant): 22860 (JSC::BytecodeGenerator::newRegister): 22861 (JSC::BytecodeGenerator::newTemporary): 22862 (JSC::BytecodeGenerator::highestUsedRegister): 22863 (JSC::BytecodeGenerator::newLabelScope): 22864 (JSC::BytecodeGenerator::newLabel): 22865 (JSC::BytecodeGenerator::emitLabel): 22866 (JSC::BytecodeGenerator::emitBytecode): 22867 (JSC::BytecodeGenerator::retrieveLastBinaryOp): 22868 (JSC::BytecodeGenerator::retrieveLastUnaryOp): 22869 (JSC::BytecodeGenerator::rewindBinaryOp): 22870 (JSC::BytecodeGenerator::rewindUnaryOp): 22871 (JSC::BytecodeGenerator::emitJump): 22872 (JSC::BytecodeGenerator::emitJumpIfTrue): 22873 (JSC::BytecodeGenerator::emitJumpIfFalse): 22874 (JSC::BytecodeGenerator::addConstant): 22875 (JSC::BytecodeGenerator::addUnexpectedConstant): 22876 (JSC::BytecodeGenerator::addRegExp): 22877 (JSC::BytecodeGenerator::emitMove): 22878 (JSC::BytecodeGenerator::emitUnaryOp): 22879 (JSC::BytecodeGenerator::emitPreInc): 22880 (JSC::BytecodeGenerator::emitPreDec): 22881 (JSC::BytecodeGenerator::emitPostInc): 22882 (JSC::BytecodeGenerator::emitPostDec): 22883 (JSC::BytecodeGenerator::emitBinaryOp): 22884 (JSC::BytecodeGenerator::emitEqualityOp): 22885 (JSC::BytecodeGenerator::emitLoad): 22886 (JSC::BytecodeGenerator::emitUnexpectedLoad): 22887 (JSC::BytecodeGenerator::findScopedProperty): 22888 (JSC::BytecodeGenerator::emitInstanceOf): 22889 (JSC::BytecodeGenerator::emitResolve): 22890 (JSC::BytecodeGenerator::emitGetScopedVar): 22891 (JSC::BytecodeGenerator::emitPutScopedVar): 22892 (JSC::BytecodeGenerator::emitResolveBase): 22893 (JSC::BytecodeGenerator::emitResolveWithBase): 22894 (JSC::BytecodeGenerator::emitResolveFunction): 22895 (JSC::BytecodeGenerator::emitGetById): 22896 (JSC::BytecodeGenerator::emitPutById): 22897 (JSC::BytecodeGenerator::emitPutGetter): 22898 (JSC::BytecodeGenerator::emitPutSetter): 22899 (JSC::BytecodeGenerator::emitDeleteById): 22900 (JSC::BytecodeGenerator::emitGetByVal): 22901 (JSC::BytecodeGenerator::emitPutByVal): 22902 (JSC::BytecodeGenerator::emitDeleteByVal): 22903 (JSC::BytecodeGenerator::emitPutByIndex): 22904 (JSC::BytecodeGenerator::emitNewObject): 22905 (JSC::BytecodeGenerator::emitNewArray): 22906 (JSC::BytecodeGenerator::emitNewFunction): 22907 (JSC::BytecodeGenerator::emitNewRegExp): 22908 (JSC::BytecodeGenerator::emitNewFunctionExpression): 22909 (JSC::BytecodeGenerator::emitCall): 22910 (JSC::BytecodeGenerator::emitCallEval): 22911 (JSC::BytecodeGenerator::emitReturn): 22912 (JSC::BytecodeGenerator::emitUnaryNoDstOp): 22913 (JSC::BytecodeGenerator::emitConstruct): 22914 (JSC::BytecodeGenerator::emitPushScope): 22915 (JSC::BytecodeGenerator::emitPopScope): 22916 (JSC::BytecodeGenerator::emitDebugHook): 22917 (JSC::BytecodeGenerator::pushFinallyContext): 22918 (JSC::BytecodeGenerator::popFinallyContext): 22919 (JSC::BytecodeGenerator::breakTarget): 22920 (JSC::BytecodeGenerator::continueTarget): 22921 (JSC::BytecodeGenerator::emitComplexJumpScopes): 22922 (JSC::BytecodeGenerator::emitJumpScopes): 22923 (JSC::BytecodeGenerator::emitNextPropertyName): 22924 (JSC::BytecodeGenerator::emitCatch): 22925 (JSC::BytecodeGenerator::emitNewError): 22926 (JSC::BytecodeGenerator::emitJumpSubroutine): 22927 (JSC::BytecodeGenerator::emitSubroutineReturn): 22928 (JSC::BytecodeGenerator::emitPushNewScope): 22929 (JSC::BytecodeGenerator::beginSwitch): 22930 (JSC::BytecodeGenerator::endSwitch): 22931 (JSC::BytecodeGenerator::emitThrowExpressionTooDeepException): 22932 * bytecompiler/CodeGenerator.h: 22933 * jsc.cpp: 22934 (runWithScripts): 22935 * parser/Nodes.cpp: 22936 (JSC::ThrowableExpressionData::emitThrowError): 22937 (JSC::NullNode::emitBytecode): 22938 (JSC::BooleanNode::emitBytecode): 22939 (JSC::NumberNode::emitBytecode): 22940 (JSC::StringNode::emitBytecode): 22941 (JSC::RegExpNode::emitBytecode): 22942 (JSC::ThisNode::emitBytecode): 22943 (JSC::ResolveNode::isPure): 22944 (JSC::ResolveNode::emitBytecode): 22945 (JSC::ArrayNode::emitBytecode): 22946 (JSC::ObjectLiteralNode::emitBytecode): 22947 (JSC::PropertyListNode::emitBytecode): 22948 (JSC::BracketAccessorNode::emitBytecode): 22949 (JSC::DotAccessorNode::emitBytecode): 22950 (JSC::ArgumentListNode::emitBytecode): 22951 (JSC::NewExprNode::emitBytecode): 22952 (JSC::EvalFunctionCallNode::emitBytecode): 22953 (JSC::FunctionCallValueNode::emitBytecode): 22954 (JSC::FunctionCallResolveNode::emitBytecode): 22955 (JSC::FunctionCallBracketNode::emitBytecode): 22956 (JSC::FunctionCallDotNode::emitBytecode): 22957 (JSC::emitPreIncOrDec): 22958 (JSC::emitPostIncOrDec): 22959 (JSC::PostfixResolveNode::emitBytecode): 22960 (JSC::PostfixBracketNode::emitBytecode): 22961 (JSC::PostfixDotNode::emitBytecode): 22962 (JSC::PostfixErrorNode::emitBytecode): 22963 (JSC::DeleteResolveNode::emitBytecode): 22964 (JSC::DeleteBracketNode::emitBytecode): 22965 (JSC::DeleteDotNode::emitBytecode): 22966 (JSC::DeleteValueNode::emitBytecode): 22967 (JSC::VoidNode::emitBytecode): 22968 (JSC::TypeOfResolveNode::emitBytecode): 22969 (JSC::TypeOfValueNode::emitBytecode): 22970 (JSC::PrefixResolveNode::emitBytecode): 22971 (JSC::PrefixBracketNode::emitBytecode): 22972 (JSC::PrefixDotNode::emitBytecode): 22973 (JSC::PrefixErrorNode::emitBytecode): 22974 (JSC::UnaryOpNode::emitBytecode): 22975 (JSC::BinaryOpNode::emitBytecode): 22976 (JSC::EqualNode::emitBytecode): 22977 (JSC::StrictEqualNode::emitBytecode): 22978 (JSC::ReverseBinaryOpNode::emitBytecode): 22979 (JSC::ThrowableBinaryOpNode::emitBytecode): 22980 (JSC::InstanceOfNode::emitBytecode): 22981 (JSC::LogicalOpNode::emitBytecode): 22982 (JSC::ConditionalNode::emitBytecode): 22983 (JSC::emitReadModifyAssignment): 22984 (JSC::ReadModifyResolveNode::emitBytecode): 22985 (JSC::AssignResolveNode::emitBytecode): 22986 (JSC::AssignDotNode::emitBytecode): 22987 (JSC::ReadModifyDotNode::emitBytecode): 22988 (JSC::AssignErrorNode::emitBytecode): 22989 (JSC::AssignBracketNode::emitBytecode): 22990 (JSC::ReadModifyBracketNode::emitBytecode): 22991 (JSC::CommaNode::emitBytecode): 22992 (JSC::ConstDeclNode::emitCodeSingle): 22993 (JSC::ConstDeclNode::emitBytecode): 22994 (JSC::ConstStatementNode::emitBytecode): 22995 (JSC::statementListEmitCode): 22996 (JSC::BlockNode::emitBytecode): 22997 (JSC::EmptyStatementNode::emitBytecode): 22998 (JSC::DebuggerStatementNode::emitBytecode): 22999 (JSC::ExprStatementNode::emitBytecode): 23000 (JSC::VarStatementNode::emitBytecode): 23001 (JSC::IfNode::emitBytecode): 23002 (JSC::IfElseNode::emitBytecode): 23003 (JSC::DoWhileNode::emitBytecode): 23004 (JSC::WhileNode::emitBytecode): 23005 (JSC::ForNode::emitBytecode): 23006 (JSC::ForInNode::emitBytecode): 23007 (JSC::ContinueNode::emitBytecode): 23008 (JSC::BreakNode::emitBytecode): 23009 (JSC::ReturnNode::emitBytecode): 23010 (JSC::WithNode::emitBytecode): 23011 (JSC::CaseBlockNode::emitBytecodeForBlock): 23012 (JSC::SwitchNode::emitBytecode): 23013 (JSC::LabelNode::emitBytecode): 23014 (JSC::ThrowNode::emitBytecode): 23015 (JSC::TryNode::emitBytecode): 23016 (JSC::EvalNode::emitBytecode): 23017 (JSC::EvalNode::generateBytecode): 23018 (JSC::FunctionBodyNode::generateBytecode): 23019 (JSC::FunctionBodyNode::emitBytecode): 23020 (JSC::ProgramNode::emitBytecode): 23021 (JSC::ProgramNode::generateBytecode): 23022 (JSC::FuncDeclNode::emitBytecode): 23023 (JSC::FuncExprNode::emitBytecode): 23024 * parser/Nodes.h: 23025 (JSC::ExpressionNode::): 23026 (JSC::BooleanNode::): 23027 (JSC::NumberNode::): 23028 (JSC::StringNode::): 23029 (JSC::ProgramNode::): 23030 (JSC::EvalNode::): 23031 (JSC::FunctionBodyNode::): 23032 * runtime/Arguments.h: 23033 (JSC::Arguments::getArgumentsData): 23034 (JSC::JSActivation::copyRegisters): 23035 * runtime/JSActivation.cpp: 23036 (JSC::JSActivation::mark): 23037 * runtime/JSActivation.h: 23038 (JSC::JSActivation::JSActivationData::JSActivationData): 23039 * runtime/JSFunction.cpp: 23040 (JSC::JSFunction::~JSFunction): 23041 23042 2008-11-15 Geoffrey Garen <ggaren (a] apple.com> 23043 23044 Reviewed by Sam Weinig. 23045 23046 Renamed all forms of "byte code" "opcode" "op code" "code" "bitcode" 23047 etc. to "bytecode". 23048 23049 * VM/CTI.cpp: 23050 (JSC::CTI::printBytecodeOperandTypes): 23051 (JSC::CTI::emitAllocateNumber): 23052 (JSC::CTI::emitNakedCall): 23053 (JSC::CTI::emitNakedFastCall): 23054 (JSC::CTI::emitCTICall): 23055 (JSC::CTI::emitJumpSlowCaseIfNotJSCell): 23056 (JSC::CTI::emitJumpSlowCaseIfNotImmNum): 23057 (JSC::CTI::emitJumpSlowCaseIfNotImmNums): 23058 (JSC::CTI::emitFastArithIntToImmOrSlowCase): 23059 (JSC::CTI::compileOpCall): 23060 (JSC::CTI::emitSlowScriptCheck): 23061 (JSC::CTI::compileBinaryArithOp): 23062 (JSC::CTI::compileBinaryArithOpSlowCase): 23063 (JSC::CTI::privateCompileMainPass): 23064 (JSC::CTI::privateCompileSlowCases): 23065 (JSC::CTI::privateCompile): 23066 * VM/CTI.h: 23067 (JSC::CallRecord::CallRecord): 23068 (JSC::SwitchRecord::SwitchRecord): 23069 * VM/CodeBlock.cpp: 23070 (JSC::CodeBlock::printStructureIDs): 23071 (JSC::CodeBlock::dump): 23072 (JSC::CodeBlock::~CodeBlock): 23073 (JSC::CodeBlock::derefStructureIDs): 23074 (JSC::CodeBlock::refStructureIDs): 23075 * VM/CodeBlock.h: 23076 (JSC::StructureStubInfo::StructureStubInfo): 23077 * VM/ExceptionHelpers.cpp: 23078 (JSC::createNotAnObjectError): 23079 * VM/Instruction.h: 23080 (JSC::Instruction::Instruction): 23081 (JSC::Instruction::): 23082 * VM/Machine.cpp: 23083 (JSC::BytecodeInterpreter::isBytecode): 23084 (JSC::BytecodeInterpreter::throwException): 23085 (JSC::BytecodeInterpreter::execute): 23086 (JSC::BytecodeInterpreter::tryCachePutByID): 23087 (JSC::BytecodeInterpreter::uncachePutByID): 23088 (JSC::BytecodeInterpreter::tryCacheGetByID): 23089 (JSC::BytecodeInterpreter::uncacheGetByID): 23090 (JSC::BytecodeInterpreter::privateExecute): 23091 (JSC::BytecodeInterpreter::tryCTICachePutByID): 23092 (JSC::BytecodeInterpreter::tryCTICacheGetByID): 23093 (JSC::BytecodeInterpreter::cti_op_call_JSFunction): 23094 (JSC::BytecodeInterpreter::cti_vm_dontLazyLinkCall): 23095 (JSC::BytecodeInterpreter::cti_vm_lazyLinkCall): 23096 * VM/Machine.h: 23097 (JSC::BytecodeInterpreter::getBytecode): 23098 (JSC::BytecodeInterpreter::getBytecodeID): 23099 (JSC::BytecodeInterpreter::isCallBytecode): 23100 * VM/Opcode.cpp: 23101 (JSC::): 23102 (JSC::BytecodeStats::BytecodeStats): 23103 (JSC::compareBytecodeIndices): 23104 (JSC::compareBytecodePairIndices): 23105 (JSC::BytecodeStats::~BytecodeStats): 23106 (JSC::BytecodeStats::recordInstruction): 23107 (JSC::BytecodeStats::resetLastInstruction): 23108 * VM/Opcode.h: 23109 (JSC::): 23110 (JSC::padBytecodeName): 23111 * VM/SamplingTool.cpp: 23112 (JSC::ScopeSampleRecord::sample): 23113 (JSC::SamplingTool::run): 23114 (JSC::compareBytecodeIndicesSampling): 23115 (JSC::SamplingTool::dump): 23116 * VM/SamplingTool.h: 23117 (JSC::ScopeSampleRecord::ScopeSampleRecord): 23118 (JSC::SamplingTool::SamplingTool): 23119 * bytecompiler/CodeGenerator.cpp: 23120 (JSC::CodeGenerator::generate): 23121 (JSC::CodeGenerator::CodeGenerator): 23122 (JSC::CodeGenerator::emitLabel): 23123 (JSC::CodeGenerator::emitBytecode): 23124 (JSC::CodeGenerator::emitJump): 23125 (JSC::CodeGenerator::emitJumpIfTrue): 23126 (JSC::CodeGenerator::emitJumpIfFalse): 23127 (JSC::CodeGenerator::emitMove): 23128 (JSC::CodeGenerator::emitUnaryOp): 23129 (JSC::CodeGenerator::emitPreInc): 23130 (JSC::CodeGenerator::emitPreDec): 23131 (JSC::CodeGenerator::emitPostInc): 23132 (JSC::CodeGenerator::emitPostDec): 23133 (JSC::CodeGenerator::emitBinaryOp): 23134 (JSC::CodeGenerator::emitEqualityOp): 23135 (JSC::CodeGenerator::emitUnexpectedLoad): 23136 (JSC::CodeGenerator::emitInstanceOf): 23137 (JSC::CodeGenerator::emitResolve): 23138 (JSC::CodeGenerator::emitGetScopedVar): 23139 (JSC::CodeGenerator::emitPutScopedVar): 23140 (JSC::CodeGenerator::emitResolveBase): 23141 (JSC::CodeGenerator::emitResolveWithBase): 23142 (JSC::CodeGenerator::emitResolveFunction): 23143 (JSC::CodeGenerator::emitGetById): 23144 (JSC::CodeGenerator::emitPutById): 23145 (JSC::CodeGenerator::emitPutGetter): 23146 (JSC::CodeGenerator::emitPutSetter): 23147 (JSC::CodeGenerator::emitDeleteById): 23148 (JSC::CodeGenerator::emitGetByVal): 23149 (JSC::CodeGenerator::emitPutByVal): 23150 (JSC::CodeGenerator::emitDeleteByVal): 23151 (JSC::CodeGenerator::emitPutByIndex): 23152 (JSC::CodeGenerator::emitNewObject): 23153 (JSC::CodeGenerator::emitNewArray): 23154 (JSC::CodeGenerator::emitNewFunction): 23155 (JSC::CodeGenerator::emitNewRegExp): 23156 (JSC::CodeGenerator::emitNewFunctionExpression): 23157 (JSC::CodeGenerator::emitCall): 23158 (JSC::CodeGenerator::emitReturn): 23159 (JSC::CodeGenerator::emitUnaryNoDstOp): 23160 (JSC::CodeGenerator::emitConstruct): 23161 (JSC::CodeGenerator::emitPopScope): 23162 (JSC::CodeGenerator::emitDebugHook): 23163 (JSC::CodeGenerator::emitComplexJumpScopes): 23164 (JSC::CodeGenerator::emitJumpScopes): 23165 (JSC::CodeGenerator::emitNextPropertyName): 23166 (JSC::CodeGenerator::emitCatch): 23167 (JSC::CodeGenerator::emitNewError): 23168 (JSC::CodeGenerator::emitJumpSubroutine): 23169 (JSC::CodeGenerator::emitSubroutineReturn): 23170 (JSC::CodeGenerator::emitPushNewScope): 23171 (JSC::CodeGenerator::beginSwitch): 23172 (JSC::CodeGenerator::endSwitch): 23173 * bytecompiler/CodeGenerator.h: 23174 (JSC::CodeGenerator::emitNode): 23175 * jsc.cpp: 23176 (runWithScripts): 23177 * masm/X86Assembler.h: 23178 (JSC::X86Assembler::): 23179 (JSC::X86Assembler::emitModRm_opr): 23180 (JSC::X86Assembler::emitModRm_opr_Unchecked): 23181 (JSC::X86Assembler::emitModRm_opm): 23182 (JSC::X86Assembler::emitModRm_opm_Unchecked): 23183 (JSC::X86Assembler::emitModRm_opmsib): 23184 * parser/Nodes.cpp: 23185 (JSC::NullNode::emitBytecode): 23186 (JSC::BooleanNode::emitBytecode): 23187 (JSC::NumberNode::emitBytecode): 23188 (JSC::StringNode::emitBytecode): 23189 (JSC::RegExpNode::emitBytecode): 23190 (JSC::ThisNode::emitBytecode): 23191 (JSC::ResolveNode::emitBytecode): 23192 (JSC::ArrayNode::emitBytecode): 23193 (JSC::ObjectLiteralNode::emitBytecode): 23194 (JSC::PropertyListNode::emitBytecode): 23195 (JSC::BracketAccessorNode::emitBytecode): 23196 (JSC::DotAccessorNode::emitBytecode): 23197 (JSC::ArgumentListNode::emitBytecode): 23198 (JSC::NewExprNode::emitBytecode): 23199 (JSC::EvalFunctionCallNode::emitBytecode): 23200 (JSC::FunctionCallValueNode::emitBytecode): 23201 (JSC::FunctionCallResolveNode::emitBytecode): 23202 (JSC::FunctionCallBracketNode::emitBytecode): 23203 (JSC::FunctionCallDotNode::emitBytecode): 23204 (JSC::PostfixResolveNode::emitBytecode): 23205 (JSC::PostfixBracketNode::emitBytecode): 23206 (JSC::PostfixDotNode::emitBytecode): 23207 (JSC::PostfixErrorNode::emitBytecode): 23208 (JSC::DeleteResolveNode::emitBytecode): 23209 (JSC::DeleteBracketNode::emitBytecode): 23210 (JSC::DeleteDotNode::emitBytecode): 23211 (JSC::DeleteValueNode::emitBytecode): 23212 (JSC::VoidNode::emitBytecode): 23213 (JSC::TypeOfResolveNode::emitBytecode): 23214 (JSC::TypeOfValueNode::emitBytecode): 23215 (JSC::PrefixResolveNode::emitBytecode): 23216 (JSC::PrefixBracketNode::emitBytecode): 23217 (JSC::PrefixDotNode::emitBytecode): 23218 (JSC::PrefixErrorNode::emitBytecode): 23219 (JSC::UnaryOpNode::emitBytecode): 23220 (JSC::BinaryOpNode::emitBytecode): 23221 (JSC::EqualNode::emitBytecode): 23222 (JSC::StrictEqualNode::emitBytecode): 23223 (JSC::ReverseBinaryOpNode::emitBytecode): 23224 (JSC::ThrowableBinaryOpNode::emitBytecode): 23225 (JSC::InstanceOfNode::emitBytecode): 23226 (JSC::LogicalOpNode::emitBytecode): 23227 (JSC::ConditionalNode::emitBytecode): 23228 (JSC::emitReadModifyAssignment): 23229 (JSC::ReadModifyResolveNode::emitBytecode): 23230 (JSC::AssignResolveNode::emitBytecode): 23231 (JSC::AssignDotNode::emitBytecode): 23232 (JSC::ReadModifyDotNode::emitBytecode): 23233 (JSC::AssignErrorNode::emitBytecode): 23234 (JSC::AssignBracketNode::emitBytecode): 23235 (JSC::ReadModifyBracketNode::emitBytecode): 23236 (JSC::CommaNode::emitBytecode): 23237 (JSC::ConstDeclNode::emitBytecode): 23238 (JSC::ConstStatementNode::emitBytecode): 23239 (JSC::BlockNode::emitBytecode): 23240 (JSC::EmptyStatementNode::emitBytecode): 23241 (JSC::DebuggerStatementNode::emitBytecode): 23242 (JSC::ExprStatementNode::emitBytecode): 23243 (JSC::VarStatementNode::emitBytecode): 23244 (JSC::IfNode::emitBytecode): 23245 (JSC::IfElseNode::emitBytecode): 23246 (JSC::DoWhileNode::emitBytecode): 23247 (JSC::WhileNode::emitBytecode): 23248 (JSC::ForNode::emitBytecode): 23249 (JSC::ForInNode::emitBytecode): 23250 (JSC::ContinueNode::emitBytecode): 23251 (JSC::BreakNode::emitBytecode): 23252 (JSC::ReturnNode::emitBytecode): 23253 (JSC::WithNode::emitBytecode): 23254 (JSC::SwitchNode::emitBytecode): 23255 (JSC::LabelNode::emitBytecode): 23256 (JSC::ThrowNode::emitBytecode): 23257 (JSC::TryNode::emitBytecode): 23258 (JSC::ScopeNode::ScopeNode): 23259 (JSC::EvalNode::emitBytecode): 23260 (JSC::FunctionBodyNode::emitBytecode): 23261 (JSC::ProgramNode::emitBytecode): 23262 (JSC::FuncDeclNode::emitBytecode): 23263 (JSC::FuncExprNode::emitBytecode): 23264 * parser/Nodes.h: 23265 (JSC::UnaryPlusNode::): 23266 (JSC::NegateNode::): 23267 (JSC::BitwiseNotNode::): 23268 (JSC::LogicalNotNode::): 23269 (JSC::MultNode::): 23270 (JSC::DivNode::): 23271 (JSC::ModNode::): 23272 (JSC::AddNode::): 23273 (JSC::SubNode::): 23274 (JSC::LeftShiftNode::): 23275 (JSC::RightShiftNode::): 23276 (JSC::UnsignedRightShiftNode::): 23277 (JSC::LessNode::): 23278 (JSC::GreaterNode::): 23279 (JSC::LessEqNode::): 23280 (JSC::GreaterEqNode::): 23281 (JSC::InstanceOfNode::): 23282 (JSC::InNode::): 23283 (JSC::EqualNode::): 23284 (JSC::NotEqualNode::): 23285 (JSC::StrictEqualNode::): 23286 (JSC::NotStrictEqualNode::): 23287 (JSC::BitAndNode::): 23288 (JSC::BitOrNode::): 23289 (JSC::BitXOrNode::): 23290 (JSC::ProgramNode::): 23291 (JSC::EvalNode::): 23292 (JSC::FunctionBodyNode::): 23293 * runtime/JSNotAnObject.h: 23294 * runtime/StructureID.cpp: 23295 (JSC::StructureID::fromDictionaryTransition): 23296 * wtf/Platform.h: 23297 23298 2008-11-15 Geoffrey Garen <ggaren (a] apple.com> 23299 23300 Reviewed by Sam Weinig. 23301 23302 Renamed Machine to BytecodeInterpreter. 23303 23304 Nixed the Interpreter class, and changed its two functions to stand-alone 23305 functions. 23306 23307 * JavaScriptCore.exp: 23308 * VM/CTI.cpp: 23309 (JSC::): 23310 (JSC::CTI::emitCTICall): 23311 (JSC::CTI::CTI): 23312 (JSC::CTI::compileOpCall): 23313 (JSC::CTI::emitSlowScriptCheck): 23314 (JSC::CTI::compileBinaryArithOpSlowCase): 23315 (JSC::CTI::privateCompileMainPass): 23316 (JSC::CTI::privateCompileSlowCases): 23317 (JSC::CTI::privateCompile): 23318 (JSC::CTI::privateCompileGetByIdSelf): 23319 (JSC::CTI::privateCompileGetByIdProto): 23320 (JSC::CTI::privateCompileGetByIdChain): 23321 (JSC::CTI::privateCompilePutByIdReplace): 23322 (JSC::CTI::privateCompilePutByIdTransition): 23323 (JSC::CTI::privateCompileCTIMachineTrampolines): 23324 (JSC::CTI::freeCTIMachineTrampolines): 23325 (JSC::CTI::patchGetByIdSelf): 23326 (JSC::CTI::patchPutByIdReplace): 23327 (JSC::CTI::privateCompilePatchGetArrayLength): 23328 (JSC::CTI::compileRegExp): 23329 * VM/CTI.h: 23330 * VM/CodeBlock.cpp: 23331 (JSC::CodeBlock::printStructureIDs): 23332 (JSC::CodeBlock::dump): 23333 (JSC::CodeBlock::derefStructureIDs): 23334 (JSC::CodeBlock::refStructureIDs): 23335 * VM/ExceptionHelpers.cpp: 23336 (JSC::createNotAnObjectError): 23337 * VM/Machine.cpp: 23338 (JSC::jsLess): 23339 (JSC::jsLessEq): 23340 (JSC::BytecodeInterpreter::resolve): 23341 (JSC::BytecodeInterpreter::resolveSkip): 23342 (JSC::BytecodeInterpreter::resolveGlobal): 23343 (JSC::BytecodeInterpreter::resolveBase): 23344 (JSC::BytecodeInterpreter::resolveBaseAndProperty): 23345 (JSC::BytecodeInterpreter::resolveBaseAndFunc): 23346 (JSC::BytecodeInterpreter::slideRegisterWindowForCall): 23347 (JSC::BytecodeInterpreter::callEval): 23348 (JSC::BytecodeInterpreter::BytecodeInterpreter): 23349 (JSC::BytecodeInterpreter::initialize): 23350 (JSC::BytecodeInterpreter::~BytecodeInterpreter): 23351 (JSC::BytecodeInterpreter::dumpCallFrame): 23352 (JSC::BytecodeInterpreter::dumpRegisters): 23353 (JSC::BytecodeInterpreter::isOpcode): 23354 (JSC::BytecodeInterpreter::unwindCallFrame): 23355 (JSC::BytecodeInterpreter::throwException): 23356 (JSC::BytecodeInterpreter::execute): 23357 (JSC::BytecodeInterpreter::debug): 23358 (JSC::BytecodeInterpreter::resetTimeoutCheck): 23359 (JSC::BytecodeInterpreter::checkTimeout): 23360 (JSC::BytecodeInterpreter::createExceptionScope): 23361 (JSC::BytecodeInterpreter::tryCachePutByID): 23362 (JSC::BytecodeInterpreter::uncachePutByID): 23363 (JSC::BytecodeInterpreter::tryCacheGetByID): 23364 (JSC::BytecodeInterpreter::uncacheGetByID): 23365 (JSC::BytecodeInterpreter::privateExecute): 23366 (JSC::BytecodeInterpreter::retrieveArguments): 23367 (JSC::BytecodeInterpreter::retrieveCaller): 23368 (JSC::BytecodeInterpreter::retrieveLastCaller): 23369 (JSC::BytecodeInterpreter::findFunctionCallFrame): 23370 (JSC::BytecodeInterpreter::tryCTICachePutByID): 23371 (JSC::BytecodeInterpreter::tryCTICacheGetByID): 23372 (JSC::BytecodeInterpreter::cti_op_convert_this): 23373 (JSC::BytecodeInterpreter::cti_op_end): 23374 (JSC::BytecodeInterpreter::cti_op_add): 23375 (JSC::BytecodeInterpreter::cti_op_pre_inc): 23376 (JSC::BytecodeInterpreter::cti_timeout_check): 23377 (JSC::BytecodeInterpreter::cti_register_file_check): 23378 (JSC::BytecodeInterpreter::cti_op_loop_if_less): 23379 (JSC::BytecodeInterpreter::cti_op_loop_if_lesseq): 23380 (JSC::BytecodeInterpreter::cti_op_new_object): 23381 (JSC::BytecodeInterpreter::cti_op_put_by_id): 23382 (JSC::BytecodeInterpreter::cti_op_put_by_id_second): 23383 (JSC::BytecodeInterpreter::cti_op_put_by_id_generic): 23384 (JSC::BytecodeInterpreter::cti_op_put_by_id_fail): 23385 (JSC::BytecodeInterpreter::cti_op_get_by_id): 23386 (JSC::BytecodeInterpreter::cti_op_get_by_id_second): 23387 (JSC::BytecodeInterpreter::cti_op_get_by_id_generic): 23388 (JSC::BytecodeInterpreter::cti_op_get_by_id_fail): 23389 (JSC::BytecodeInterpreter::cti_op_instanceof): 23390 (JSC::BytecodeInterpreter::cti_op_del_by_id): 23391 (JSC::BytecodeInterpreter::cti_op_mul): 23392 (JSC::BytecodeInterpreter::cti_op_new_func): 23393 (JSC::BytecodeInterpreter::cti_op_call_JSFunction): 23394 (JSC::BytecodeInterpreter::cti_op_call_arityCheck): 23395 (JSC::BytecodeInterpreter::cti_vm_dontLazyLinkCall): 23396 (JSC::BytecodeInterpreter::cti_vm_lazyLinkCall): 23397 (JSC::BytecodeInterpreter::cti_op_push_activation): 23398 (JSC::BytecodeInterpreter::cti_op_call_NotJSFunction): 23399 (JSC::BytecodeInterpreter::cti_op_create_arguments): 23400 (JSC::BytecodeInterpreter::cti_op_create_arguments_no_params): 23401 (JSC::BytecodeInterpreter::cti_op_tear_off_activation): 23402 (JSC::BytecodeInterpreter::cti_op_tear_off_arguments): 23403 (JSC::BytecodeInterpreter::cti_op_profile_will_call): 23404 (JSC::BytecodeInterpreter::cti_op_profile_did_call): 23405 (JSC::BytecodeInterpreter::cti_op_ret_scopeChain): 23406 (JSC::BytecodeInterpreter::cti_op_new_array): 23407 (JSC::BytecodeInterpreter::cti_op_resolve): 23408 (JSC::BytecodeInterpreter::cti_op_construct_JSConstruct): 23409 (JSC::BytecodeInterpreter::cti_op_construct_NotJSConstruct): 23410 (JSC::BytecodeInterpreter::cti_op_get_by_val): 23411 (JSC::BytecodeInterpreter::cti_op_resolve_func): 23412 (JSC::BytecodeInterpreter::cti_op_sub): 23413 (JSC::BytecodeInterpreter::cti_op_put_by_val): 23414 (JSC::BytecodeInterpreter::cti_op_put_by_val_array): 23415 (JSC::BytecodeInterpreter::cti_op_lesseq): 23416 (JSC::BytecodeInterpreter::cti_op_loop_if_true): 23417 (JSC::BytecodeInterpreter::cti_op_negate): 23418 (JSC::BytecodeInterpreter::cti_op_resolve_base): 23419 (JSC::BytecodeInterpreter::cti_op_resolve_skip): 23420 (JSC::BytecodeInterpreter::cti_op_resolve_global): 23421 (JSC::BytecodeInterpreter::cti_op_div): 23422 (JSC::BytecodeInterpreter::cti_op_pre_dec): 23423 (JSC::BytecodeInterpreter::cti_op_jless): 23424 (JSC::BytecodeInterpreter::cti_op_not): 23425 (JSC::BytecodeInterpreter::cti_op_jtrue): 23426 (JSC::BytecodeInterpreter::cti_op_post_inc): 23427 (JSC::BytecodeInterpreter::cti_op_eq): 23428 (JSC::BytecodeInterpreter::cti_op_lshift): 23429 (JSC::BytecodeInterpreter::cti_op_bitand): 23430 (JSC::BytecodeInterpreter::cti_op_rshift): 23431 (JSC::BytecodeInterpreter::cti_op_bitnot): 23432 (JSC::BytecodeInterpreter::cti_op_resolve_with_base): 23433 (JSC::BytecodeInterpreter::cti_op_new_func_exp): 23434 (JSC::BytecodeInterpreter::cti_op_mod): 23435 (JSC::BytecodeInterpreter::cti_op_less): 23436 (JSC::BytecodeInterpreter::cti_op_neq): 23437 (JSC::BytecodeInterpreter::cti_op_post_dec): 23438 (JSC::BytecodeInterpreter::cti_op_urshift): 23439 (JSC::BytecodeInterpreter::cti_op_bitxor): 23440 (JSC::BytecodeInterpreter::cti_op_new_regexp): 23441 (JSC::BytecodeInterpreter::cti_op_bitor): 23442 (JSC::BytecodeInterpreter::cti_op_call_eval): 23443 (JSC::BytecodeInterpreter::cti_op_throw): 23444 (JSC::BytecodeInterpreter::cti_op_get_pnames): 23445 (JSC::BytecodeInterpreter::cti_op_next_pname): 23446 (JSC::BytecodeInterpreter::cti_op_push_scope): 23447 (JSC::BytecodeInterpreter::cti_op_pop_scope): 23448 (JSC::BytecodeInterpreter::cti_op_typeof): 23449 (JSC::BytecodeInterpreter::cti_op_is_undefined): 23450 (JSC::BytecodeInterpreter::cti_op_is_boolean): 23451 (JSC::BytecodeInterpreter::cti_op_is_number): 23452 (JSC::BytecodeInterpreter::cti_op_is_string): 23453 (JSC::BytecodeInterpreter::cti_op_is_object): 23454 (JSC::BytecodeInterpreter::cti_op_is_function): 23455 (JSC::BytecodeInterpreter::cti_op_stricteq): 23456 (JSC::BytecodeInterpreter::cti_op_nstricteq): 23457 (JSC::BytecodeInterpreter::cti_op_to_jsnumber): 23458 (JSC::BytecodeInterpreter::cti_op_in): 23459 (JSC::BytecodeInterpreter::cti_op_push_new_scope): 23460 (JSC::BytecodeInterpreter::cti_op_jmp_scopes): 23461 (JSC::BytecodeInterpreter::cti_op_put_by_index): 23462 (JSC::BytecodeInterpreter::cti_op_switch_imm): 23463 (JSC::BytecodeInterpreter::cti_op_switch_char): 23464 (JSC::BytecodeInterpreter::cti_op_switch_string): 23465 (JSC::BytecodeInterpreter::cti_op_del_by_val): 23466 (JSC::BytecodeInterpreter::cti_op_put_getter): 23467 (JSC::BytecodeInterpreter::cti_op_put_setter): 23468 (JSC::BytecodeInterpreter::cti_op_new_error): 23469 (JSC::BytecodeInterpreter::cti_op_debug): 23470 (JSC::BytecodeInterpreter::cti_vm_throw): 23471 * VM/Machine.h: 23472 * VM/Register.h: 23473 * VM/SamplingTool.cpp: 23474 (JSC::SamplingTool::run): 23475 * VM/SamplingTool.h: 23476 (JSC::SamplingTool::SamplingTool): 23477 * bytecompiler/CodeGenerator.cpp: 23478 (JSC::CodeGenerator::generate): 23479 (JSC::CodeGenerator::CodeGenerator): 23480 (JSC::CodeGenerator::emitOpcode): 23481 * debugger/DebuggerCallFrame.cpp: 23482 (JSC::DebuggerCallFrame::evaluate): 23483 * jsc.cpp: 23484 (runWithScripts): 23485 * parser/Nodes.cpp: 23486 (JSC::ScopeNode::ScopeNode): 23487 * profiler/ProfileGenerator.cpp: 23488 (JSC::ProfileGenerator::addParentForConsoleStart): 23489 * runtime/ArrayPrototype.cpp: 23490 (JSC::arrayProtoFuncPop): 23491 (JSC::arrayProtoFuncPush): 23492 * runtime/Collector.cpp: 23493 (JSC::Heap::collect): 23494 * runtime/ExecState.h: 23495 (JSC::ExecState::interpreter): 23496 * runtime/FunctionPrototype.cpp: 23497 (JSC::functionProtoFuncApply): 23498 * runtime/Interpreter.cpp: 23499 (JSC::Interpreter::evaluate): 23500 * runtime/JSCell.h: 23501 * runtime/JSFunction.cpp: 23502 (JSC::JSFunction::call): 23503 (JSC::JSFunction::argumentsGetter): 23504 (JSC::JSFunction::callerGetter): 23505 (JSC::JSFunction::construct): 23506 * runtime/JSFunction.h: 23507 * runtime/JSGlobalData.cpp: 23508 (JSC::JSGlobalData::JSGlobalData): 23509 (JSC::JSGlobalData::~JSGlobalData): 23510 * runtime/JSGlobalData.h: 23511 * runtime/JSGlobalObject.cpp: 23512 (JSC::JSGlobalObject::~JSGlobalObject): 23513 (JSC::JSGlobalObject::setTimeoutTime): 23514 (JSC::JSGlobalObject::startTimeoutCheck): 23515 (JSC::JSGlobalObject::stopTimeoutCheck): 23516 (JSC::JSGlobalObject::mark): 23517 * runtime/JSGlobalObjectFunctions.cpp: 23518 (JSC::globalFuncEval): 23519 * runtime/JSString.h: 23520 * runtime/RegExp.cpp: 23521 (JSC::RegExp::RegExp): 23522 23523 2008-11-15 Maciej Stachowiak <mjs (a] apple.com> 23524 23525 Reviewed by Sam Weinig. 23526 23527 - Remove SymbolTable from FunctionBodyNode and move it to CodeBlock 23528 23529 It's not needed for functions that have never been executed, so no 23530 need to waste the memory. Saves ~4M on membuster after 30 pages. 23531 23532 * VM/CodeBlock.h: 23533 * VM/Machine.cpp: 23534 (JSC::Machine::retrieveArguments): 23535 * parser/Nodes.cpp: 23536 (JSC::EvalNode::generateCode): 23537 (JSC::FunctionBodyNode::generateCode): 23538 * parser/Nodes.h: 23539 * runtime/JSActivation.h: 23540 (JSC::JSActivation::JSActivationData::JSActivationData): 23541 23542 2008-11-14 Cameron Zwarich <zwarich (a] apple.com> 23543 23544 Reviewed by Darin Adler. 23545 23546 Bug 22259: Make all opcodes use eax as their final result register 23547 <https://bugs.webkit.org/show_bug.cgi?id=22259> 23548 23549 Change one case of op_add (and the corresponding slow case) to use eax 23550 rather than edx. Also, change the order in which the two results of 23551 resolve_func and resolve_base are emitted so that the retrieved value is 23552 put last into eax. 23553 23554 This gives no performance change on SunSpider or the V8 benchmark suite 23555 when run in either harness. 23556 23557 * VM/CTI.cpp: 23558 (JSC::CTI::privateCompileMainPass): 23559 (JSC::CTI::privateCompileSlowCases): 23560 23561 2008-11-14 Gavin Barraclough <barraclough (a] apple.com> 23562 23563 Reviewed by Geoff Garen. 23564 23565 Geoff has this wacky notion that emitGetArg and emitPutArg should be related to 23566 doing the same thing. Crazy. 23567 23568 Rename the methods for accessing virtual registers to say 'VirtualRegister' in the 23569 name, and those for setting up the arguments for CTI methods to contain 'CTIArg'. 23570 23571 * VM/CTI.cpp: 23572 (JSC::CTI::emitGetVirtualRegister): 23573 (JSC::CTI::emitGetVirtualRegisters): 23574 (JSC::CTI::emitPutCTIArgFromVirtualRegister): 23575 (JSC::CTI::emitPutCTIArg): 23576 (JSC::CTI::emitGetCTIArg): 23577 (JSC::CTI::emitPutCTIArgConstant): 23578 (JSC::CTI::emitPutVirtualRegister): 23579 (JSC::CTI::compileOpCallSetupArgs): 23580 (JSC::CTI::compileOpCallEvalSetupArgs): 23581 (JSC::CTI::compileOpConstructSetupArgs): 23582 (JSC::CTI::compileOpCall): 23583 (JSC::CTI::compileOpStrictEq): 23584 (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): 23585 (JSC::CTI::compileBinaryArithOp): 23586 (JSC::CTI::compileBinaryArithOpSlowCase): 23587 (JSC::CTI::privateCompileMainPass): 23588 (JSC::CTI::privateCompileSlowCases): 23589 (JSC::CTI::privateCompileCTIMachineTrampolines): 23590 * VM/CTI.h: 23591 23592 2008-11-14 Greg Bolsinga <bolsinga (a] apple.com> 23593 23594 Reviewed by Antti Koivisto 23595 23596 Fix potential build break by adding StdLibExtras.h 23597 23598 * GNUmakefile.am: 23599 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 23600 23601 2008-11-14 Gavin Barraclough <barraclough (a] apple.com> 23602 23603 Reviewed by Geoff Garen. 23604 23605 Generate less code for the slow cases of op_call and op_construct. 23606 https://bugs.webkit.org/show_bug.cgi?id=22272 23607 23608 1% progression on v8 tests. 23609 23610 * VM/CTI.cpp: 23611 (JSC::CTI::emitRetrieveArg): 23612 (JSC::CTI::emitNakedCall): 23613 (JSC::CTI::compileOpCallInitializeCallFrame): 23614 (JSC::CTI::compileOpCall): 23615 (JSC::CTI::privateCompileSlowCases): 23616 (JSC::CTI::privateCompileCTIMachineTrampolines): 23617 * VM/CTI.h: 23618 * VM/CodeBlock.h: 23619 (JSC::getCallLinkInfoReturnLocation): 23620 (JSC::CodeBlock::getCallLinkInfo): 23621 * VM/Machine.cpp: 23622 (JSC::Machine::Machine): 23623 (JSC::Machine::cti_vm_dontLazyLinkCall): 23624 (JSC::Machine::cti_vm_lazyLinkCall): 23625 * VM/Machine.h: 23626 23627 2008-11-14 Greg Bolsinga <bolsinga (a] apple.com> 23628 23629 Reviewed by Darin Alder. 23630 23631 https://bugs.webkit.org/show_bug.cgi?id=21810 23632 Remove use of static C++ objects that are destroyed at exit time (destructors) 23633 23634 Create DEFINE_STATIC_LOCAL macro. Change static local objects to leak to avoid 23635 exit-time destructor. Update code that was changed to fix this issue that ran 23636 into a gcc bug (<rdar://problem/6354696> Codegen issue with C++ static reference 23637 in gcc build 5465). Also typdefs for template types needed to be added in some 23638 cases so the type could make it through the macro successfully. 23639 23640 Basically code of the form: 23641 static T m; 23642 becomes: 23643 DEFINE_STATIC_LOCAL(T, m, ()); 23644 23645 Also any code of the form: 23646 static T& m = *new T; 23647 also becomes: 23648 DEFINE_STATIC_LOCAL(T, m, ()); 23649 23650 * JavaScriptCore.xcodeproj/project.pbxproj: 23651 * wtf/MainThread.cpp: 23652 (WTF::mainThreadFunctionQueueMutex): 23653 (WTF::functionQueue): 23654 * wtf/StdLibExtras.h: Added. Add DEFINE_STATIC_LOCAL macro 23655 * wtf/ThreadingPthreads.cpp: 23656 (WTF::threadMapMutex): 23657 (WTF::threadMap): 23658 (WTF::identifierByPthreadHandle): 23659 23660 2008-11-13 Sam Weinig <sam (a] webkit.org> 23661 23662 Reviewed by Darin Adler 23663 23664 Fix for https://bugs.webkit.org/show_bug.cgi?id=22269 23665 Reduce PropertyMap usage 23666 23667 From observation of StructureID statistics, it became clear that many 23668 StructureID's were not being used as StructureIDs themselves, but rather 23669 only being necessary as links in the transition chain. Acknowledging this 23670 and that PropertyMaps stored in StructureIDs can be treated as caches, that 23671 is that they can be reconstructed on demand, it became clear that we could 23672 reduce the memory consumption of StructureIDs by only keeping PropertyMaps 23673 for the StructureIDs that need them the most. 23674 23675 The specific strategy used to reduce the number of StructureIDs with 23676 PropertyMaps is to take the previous StructureIDs PropertyMap when initially 23677 transitioning (addPropertyTransition) from it and clearing out the pointer 23678 in the process. The next time we need to do the same transition, for instance 23679 repeated calls to the same constructor, we use the new addPropertyTransitionToExistingStructure 23680 first, which allows us not to need the PropertyMap to determine if the property 23681 exists already, since a transition to that property would require it not already 23682 be present in the StructureID. Should there be no transition, the PropertyMap 23683 can be constructed on demand (via materializePropertyMap) to determine if the put is a 23684 replace or a transition to a new StructureID. 23685 23686 Reduces memory use on Membuster head test (30 pages open) by ~15MB. 23687 23688 * JavaScriptCore.exp: 23689 * runtime/JSObject.h: 23690 (JSC::JSObject::putDirect): First use addPropertyTransitionToExistingStructure 23691 so that we can avoid building the PropertyMap on subsequent similar object 23692 creations. 23693 * runtime/PropertyMapHashTable.h: 23694 (JSC::PropertyMapEntry::PropertyMapEntry): Add version of constructor which takes 23695 all values to be used when lazily building the PropertyMap. 23696 * runtime/StructureID.cpp: 23697 (JSC::StructureID::dumpStatistics): Add statistics on the number of StructureIDs 23698 with PropertyMaps. 23699 (JSC::StructureID::StructureID): Rename m_cachedTransistionOffset to m_offset 23700 (JSC::isPowerOf2): 23701 (JSC::nextPowerOf2): 23702 (JSC::sizeForKeyCount): Returns the expected size of a PropertyMap for a key count. 23703 (JSC::StructureID::materializePropertyMap): Builds the PropertyMap out of its previous pointer chain. 23704 (JSC::StructureID::addPropertyTransitionToExistingStructure): Only transitions if there is a 23705 an existing transition. 23706 (JSC::StructureID::addPropertyTransition): Instead of always copying the ProperyMap, try and take 23707 it from it previous pointer. 23708 (JSC::StructureID::removePropertyTransition): Simplify by calling toDictionaryTransition() to do 23709 transition work. 23710 (JSC::StructureID::changePrototypeTransition): Build the PropertyMap if necessary before transitioning 23711 because once you have transitioned, you will not be able to reconstruct it afterwards as there is no 23712 previous pointer, pinning the ProperyMap as well. 23713 (JSC::StructureID::getterSetterTransition): Ditto. 23714 (JSC::StructureID::toDictionaryTransition): Pin the PropertyMap so that it is not destroyed on further transitions. 23715 (JSC::StructureID::fromDictionaryTransition): We can only transition back from a dictionary transition if there 23716 are no deleted offsets. 23717 (JSC::StructureID::addPropertyWithoutTransition): Build PropertyMap on demands and pin. 23718 (JSC::StructureID::removePropertyWithoutTransition): Ditto. 23719 (JSC::StructureID::get): Build on demand. 23720 (JSC::StructureID::createPropertyMapHashTable): Add version of create that takes a size 23721 for on demand building. 23722 (JSC::StructureID::expandPropertyMapHashTable): 23723 (JSC::StructureID::rehashPropertyMapHashTable): 23724 (JSC::StructureID::getEnumerablePropertyNamesInternal): Build PropertyMap on demand. 23725 * runtime/StructureID.h: 23726 (JSC::StructureID::propertyStorageSize): Account for StructureIDs without PropertyMaps. 23727 (JSC::StructureID::isEmpty): Ditto. 23728 (JSC::StructureID::materializePropertyMapIfNecessary): 23729 (JSC::StructureID::get): Build PropertyMap on demand 23730 23731 2008-11-14 Csaba Osztrogonac <oszi (a] inf.u-szeged.hu> 23732 23733 Reviewed by Simon Hausmann. 23734 23735 <https://bugs.webkit.org/show_bug.cgi?id=21500> 23736 23737 JavaScriptCore build with -O3 flag instead of -O2 (gcc). 23738 2.02% speedup on SunSpider (Qt-port on Linux) 23739 1.10% speedup on V8 (Qt-port on Linux) 23740 3.45% speedup on WindScorpion (Qt-port on Linux) 23741 23742 * JavaScriptCore.pri: 23743 23744 2008-11-14 Kristian Amlie <kristian.amlie (a] trolltech.com> 23745 23746 Reviewed by Darin Adler. 23747 23748 Compile fix for RVCT. 23749 23750 In reality, it is two fixes: 23751 23752 1. Remove typename. I believe typename can only be used when the named 23753 type depends on the template parameters, which it doesn't in this 23754 case, so I think this is more correct. 23755 2. Replace ::iterator scope with specialized typedef. This is to work 23756 around a bug in RVCT. 23757 23758 https://bugs.webkit.org/show_bug.cgi?id=22260 23759 23760 * wtf/ListHashSet.h: 23761 (WTF::::find): 23762 23763 2008-11-14 Kristian Amlie <kristian.amlie (a] trolltech.com> 23764 23765 Reviewed by Darin Adler. 23766 23767 Compile fix for WINSCW. 23768 23769 This fix doesn't protect against implicit conversions from bool to 23770 integers, but most likely that will be caught on another platform. 23771 23772 https://bugs.webkit.org/show_bug.cgi?id=22260 23773 23774 * wtf/PassRefPtr.h: 23775 (WTF::PassRefPtr::operator bool): 23776 * wtf/RefPtr.h: 23777 (WTF::RefPtr::operator bool): 23778 23779 2008-11-14 Cameron Zwarich <zwarich (a] apple.com> 23780 23781 Reviewed by Darin Adler. 23782 23783 Bug 22245: Move wtf/dtoa.h into the WTF namespace 23784 <https://bugs.webkit.org/show_bug.cgi?id=22245> 23785 23786 Move wtf/dtoa.h into the WTF namespace from the JSC namespace. This 23787 introduces some ambiguities in name lookups, so I changed all uses of 23788 the functions in wtf/dtoa.h to explicitly state the namespace. 23789 23790 * JavaScriptCore.exp: 23791 * parser/Lexer.cpp: 23792 (JSC::Lexer::lex): 23793 * runtime/InitializeThreading.cpp: 23794 * runtime/JSGlobalObjectFunctions.cpp: 23795 (JSC::parseInt): 23796 * runtime/NumberPrototype.cpp: 23797 (JSC::integerPartNoExp): 23798 (JSC::numberProtoFuncToExponential): 23799 * runtime/UString.cpp: 23800 (JSC::concatenate): 23801 (JSC::UString::from): 23802 (JSC::UString::toDouble): 23803 * wtf/dtoa.cpp: 23804 * wtf/dtoa.h: 23805 23806 2008-11-14 Cameron Zwarich <zwarich (a] apple.com> 23807 23808 Reviewed by Maciej Stachowiak. 23809 23810 Bug 22257: Enable redundant read optimizations for results generated by compileBinaryArithOp() 23811 <https://bugs.webkit.org/show_bug.cgi?id=22257> 23812 23813 This shows no change in performance on either SunSpider or the V8 23814 benchmark suite, but it removes an ugly special case and allows for 23815 future optimizations to be implemented in a cleaner fashion. 23816 23817 This patch was essentially given to me by Gavin Barraclough upon my 23818 request, but I did regression and performance testing so that he could 23819 work on something else. 23820 23821 * VM/CTI.cpp: 23822 (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): Move the final 23823 result to eax if it is not already there. 23824 (JSC::CTI::compileBinaryArithOp): Remove the killing of the final result 23825 register that disables the optimization. 23826 23827 2008-11-13 Eric Seidel <eric (a] webkit.org> 23828 23829 Reviewed by Adam Roben. 23830 23831 Add a Scons-based build system for building 23832 the Chromium-Mac build of JavaScriptCore. 23833 https://bugs.webkit.org/show_bug.cgi?id=21991 23834 23835 * JavaScriptCore.scons: Added. 23836 * SConstruct: Added. 23837 23838 2008-11-13 Eric Seidel <eric (a] webkit.org> 23839 23840 Reviewed by Adam Roben. 23841 23842 Add PLATFORM(CHROMIUM) to the "we don't use cairo" blacklist 23843 until https://bugs.webkit.org/show_bug.cgi?id=22250 is fixed. 23844 23845 * wtf/Platform.h: 23846 23847 2008-11-13 Cameron Zwarich <zwarich (a] apple.com> 23848 23849 Reviewed by Sam Weinig. 23850 23851 In r38375 the 'jsc' shell was changed to improve teardown on quit. The 23852 main() function in jsc.cpp uses Structured Exception Handling, so Visual 23853 C++ emits a warning when destructors are used. 23854 23855 In order to speculatively fix the Windows build, this patch changes that 23856 code to use explicit pointer manipulation and locking rather than smart 23857 pointers and RAII. 23858 23859 * jsc.cpp: 23860 (main): 23861 23862 2008-11-13 Cameron Zwarich <zwarich (a] apple.com> 23863 23864 Reviewed by Darin Adler. 23865 23866 Bug 22246: Get arguments for opcodes together to eliminate more redundant memory reads 23867 <https://bugs.webkit.org/show_bug.cgi?id=22246> 23868 23869 It is common for opcodes to read their first operand into eax and their 23870 second operand into edx. If the value intended for the second operand is 23871 in eax, we should first move eax to the register for the second operand 23872 and then read the first operand into eax. 23873 23874 This is a 0.5% speedup on SunSpider and a 2.0% speedup on the V8 23875 benchmark suite when measured using the V8 harness. 23876 23877 * VM/CTI.cpp: 23878 (JSC::CTI::emitGetArgs): 23879 (JSC::CTI::compileOpStrictEq): 23880 (JSC::CTI::compileBinaryArithOp): 23881 (JSC::CTI::privateCompileMainPass): 23882 (JSC::CTI::privateCompileSlowCases): 23883 * VM/CTI.h: 23884 23885 2008-11-13 Cameron Zwarich <zwarich (a] apple.com> 23886 23887 Reviewed by Darin Adler. 23888 23889 Bug 22238: Avoid unnecessary reads of temporaries when the target machine register is not eax 23890 <https://bugs.webkit.org/show_bug.cgi?id=22238> 23891 23892 Enable the optimization of not reading a value back from memory that we 23893 just wrote when the target machine register is not eax. In order to do 23894 this, the code generation for op_put_global_var must be changed to 23895 read its argument into a register before overwriting eax. 23896 23897 This is a 0.5% speedup on SunSpider and shows no change on the V8 23898 benchmark suite when run in either harness. 23899 23900 * VM/CTI.cpp: 23901 (JSC::CTI::emitGetArg): 23902 (JSC::CTI::privateCompileMainPass): 23903 23904 2008-11-13 Cameron Zwarich <zwarich (a] apple.com> 23905 23906 Reviewed by Alexey Proskuryakov. 23907 23908 Perform teardown in the 'jsc' shell in order to suppress annoying and 23909 misleading leak messages. There is still a lone JSC::Node leaking when 23910 quit() is called, but hopefully that can be fixed as well. 23911 23912 * jsc.cpp: 23913 (functionQuit): 23914 (main): 23915 23916 2008-11-13 Mike Pinkerton <pinkerton (a] chromium.org> 23917 23918 Reviewed by Sam Weinig. 23919 23920 Fix for https://bugs.webkit.org/show_bug.cgi?id=22087 23921 Need correct platform defines for Mac Chromium 23922 23923 Set the appropriate platform defines for Mac Chromium, which is 23924 similar to PLATFORM(MAC), but isn't. 23925 23926 * wtf/Platform.h: 23927 23928 2008-11-13 Maciej Stachowiak <mjs (a] apple.com> 23929 23930 Reviewed by Cameron Zwarich. 23931 23932 - remove immediate checks from native codegen for known non-immediate cases like "this" 23933 23934 ~.5% speedup on v8 benchmarks 23935 23936 In the future we can extend this model to remove all sorts of 23937 typechecks based on local type info or type inference. 23938 23939 I also added an assertion to verify that all slow cases linked as 23940 many slow case jumps as the corresponding fast case generated, and 23941 fixed the pre-existing cases where this was not true. 23942 23943 * VM/CTI.cpp: 23944 (JSC::CTI::emitJumpSlowCaseIfNotJSCell): 23945 (JSC::CTI::linkSlowCaseIfNotJSCell): 23946 (JSC::CTI::compileBinaryArithOp): 23947 (JSC::CTI::compileBinaryArithOpSlowCase): 23948 (JSC::CTI::privateCompileMainPass): 23949 (JSC::CTI::privateCompileSlowCases): 23950 * VM/CTI.h: 23951 * VM/CodeBlock.h: 23952 (JSC::CodeBlock::isKnownNotImmediate): 23953 23954 2008-11-13 Cameron Zwarich <zwarich (a] apple.com> 23955 23956 Reviewed by Maciej Stachowiak. 23957 23958 Bug 21943: Avoid needless reads of temporary values in CTI code 23959 <https://bugs.webkit.org/show_bug.cgi?id=21943> 23960 23961 If an opcode needs to load a virtual register and a previous opcode left 23962 the contents of that virtual register in a machine register, use the 23963 value in the machine register rather than getting it from memory. 23964 23965 In order to perform this optimization, it is necessary to know the 23966 jump tagets in the CodeBlock. For temporaries, the only problematic 23967 jump targets are binary logical operators and the ternary conditional 23968 operator. However, if this optimization were to be extended to local 23969 variable registers as well, other jump targets would need to be 23970 included, like switch statement cases and the beginnings of catch 23971 blocks. 23972 23973 This optimization also requires that the fast case and the slow case 23974 of an opcode use emitPutResult() on the same register, which was chosen 23975 to be eax, as that is the register into which we read the first operand 23976 of opcodes. In order to make this the case, we needed to add some mov 23977 instructions to the slow cases of some instructions. 23978 23979 This optimizaton is not applied whenever compileBinaryArithOp() is used 23980 to compile an opcode, because different machine registers may be used to 23981 store the final result. It seems possible to rewrite the code generation 23982 in compileBinaryArithOp() to allow for this optimization. 23983 23984 This optimization is also not applied when generating slow cases, 23985 because some fast cases overwrite the value of eax before jumping to the 23986 slow case. In the future, it may be possible to apply this optimization 23987 to slow cases as well, but it did not seem to be a speedup when testing 23988 an early version of this patch. 23989 23990 This is a 1.0% speedup on SunSpider and a 6.3% speedup on the V8 23991 benchmark suite. 23992 23993 * VM/CTI.cpp: 23994 (JSC::CTI::killLastResultRegister): 23995 (JSC::CTI::emitGetArg): 23996 (JSC::CTI::emitGetPutArg): 23997 (JSC::CTI::emitGetCTIParam): 23998 (JSC::CTI::emitGetFromCallFrameHeader): 23999 (JSC::CTI::emitPutResult): 24000 (JSC::CTI::emitCTICall): 24001 (JSC::CTI::CTI): 24002 (JSC::CTI::compileOpCall): 24003 (JSC::CTI::compileOpStrictEq): 24004 (JSC::CTI::emitSlowScriptCheck): 24005 (JSC::CTI::compileBinaryArithOp): 24006 (JSC::CTI::privateCompileMainPass): 24007 (JSC::CTI::privateCompileSlowCases): 24008 (JSC::CTI::privateCompileGetByIdProto): 24009 (JSC::CTI::privateCompilePatchGetArrayLength): 24010 * VM/CTI.h: 24011 * VM/CodeBlock.h: 24012 (JSC::CodeBlock::isTemporaryRegisterIndex): 24013 * bytecompiler/CodeGenerator.cpp: 24014 (JSC::CodeGenerator::emitLabel): 24015 24016 2008-11-12 Alp Toker <alp (a] nuanti.com> 24017 24018 autotools build system fix-up only. Add FloatQuad.h to the source 24019 lists and sort them. 24020 24021 * GNUmakefile.am: 24022 24023 2008-11-12 Geoffrey Garen <ggaren (a] apple.com> 24024 24025 Reviewed by Sam Weinig. 24026 24027 Fixed https://bugs.webkit.org/show_bug.cgi?id=22192 24028 +37 failures in fast/profiler 24029 24030 along with Darin's review comments in 24031 https://bugs.webkit.org/show_bug.cgi?id=22174 24032 Simplified op_call by nixing its responsibility for moving the value of 24033 "this" into the first argument slot 24034 24035 * VM/Machine.cpp: 24036 (JSC::returnToThrowTrampoline): 24037 (JSC::throwStackOverflowError): 24038 (JSC::Machine::cti_register_file_check): 24039 (JSC::Machine::cti_op_call_arityCheck): 24040 (JSC::Machine::cti_vm_throw): Moved the throw logic into a function, since 24041 functions are better than macros. 24042 24043 * bytecompiler/CodeGenerator.cpp: 24044 (JSC::CodeGenerator::emitCall): 24045 (JSC::CodeGenerator::emitConstruct): Ensure that the function register 24046 is preserved if profiling is enabled, since the profiler uses that 24047 register. 24048 24049 * runtime/JSGlobalData.h: Renamed throwReturnAddress to exceptionLocation, 24050 because I had a hard time understanding what "throwReturnAddress" meant. 24051 24052 2008-11-12 Geoffrey Garen <ggaren (a] apple.com> 24053 24054 Reviewed by Sam Weinig. 24055 24056 Roll in r38322, now that test failures have been fixed. 24057 24058 * VM/CTI.cpp: 24059 (JSC::CTI::compileOpCallSetupArgs): 24060 (JSC::CTI::compileOpCallEvalSetupArgs): 24061 (JSC::CTI::compileOpConstructSetupArgs): 24062 (JSC::CTI::compileOpCall): 24063 (JSC::CTI::privateCompileMainPass): 24064 (JSC::CTI::privateCompileSlowCases): 24065 * VM/CTI.h: 24066 * VM/CodeBlock.cpp: 24067 (JSC::CodeBlock::dump): 24068 * VM/Machine.cpp: 24069 (JSC::Machine::callEval): 24070 (JSC::Machine::dumpCallFrame): 24071 (JSC::Machine::dumpRegisters): 24072 (JSC::Machine::execute): 24073 (JSC::Machine::privateExecute): 24074 (JSC::Machine::cti_register_file_check): 24075 (JSC::Machine::cti_op_call_arityCheck): 24076 (JSC::Machine::cti_op_call_NotJSFunction): 24077 (JSC::Machine::cti_op_construct_JSConstruct): 24078 (JSC::Machine::cti_op_construct_NotJSConstruct): 24079 (JSC::Machine::cti_op_call_eval): 24080 (JSC::Machine::cti_vm_throw): 24081 * VM/Machine.h: 24082 * bytecompiler/CodeGenerator.cpp: 24083 (JSC::CodeGenerator::emitCall): 24084 (JSC::CodeGenerator::emitCallEval): 24085 (JSC::CodeGenerator::emitConstruct): 24086 * bytecompiler/CodeGenerator.h: 24087 * parser/Nodes.cpp: 24088 (JSC::EvalFunctionCallNode::emitCode): 24089 (JSC::FunctionCallValueNode::emitCode): 24090 (JSC::FunctionCallResolveNode::emitCode): 24091 (JSC::FunctionCallBracketNode::emitCode): 24092 (JSC::FunctionCallDotNode::emitCode): 24093 * parser/Nodes.h: 24094 (JSC::ScopeNode::neededConstants): 24095 24096 2008-11-12 Gavin Barraclough <barraclough (a] apple.com> 24097 24098 Reviewed by Cameron Zwarich. 24099 24100 Fix for https://bugs.webkit.org/show_bug.cgi?id=22201 24101 Integer conversion in array.length was safe signed values, 24102 but the length is unsigned. 24103 24104 * VM/CTI.cpp: 24105 (JSC::CTI::privateCompilePatchGetArrayLength): 24106 24107 2008-11-12 Cameron Zwarich <zwarich (a] apple.com> 24108 24109 Rubber-stamped by Mark Rowe. 24110 24111 Roll out r38322 due to test failures on the bots. 24112 24113 * VM/CTI.cpp: 24114 (JSC::CTI::compileOpCallSetupArgs): 24115 (JSC::CTI::compileOpCall): 24116 (JSC::CTI::privateCompileMainPass): 24117 (JSC::CTI::privateCompileSlowCases): 24118 * VM/CTI.h: 24119 * VM/CodeBlock.cpp: 24120 (JSC::CodeBlock::dump): 24121 * VM/Machine.cpp: 24122 (JSC::Machine::callEval): 24123 (JSC::Machine::dumpCallFrame): 24124 (JSC::Machine::dumpRegisters): 24125 (JSC::Machine::execute): 24126 (JSC::Machine::privateExecute): 24127 (JSC::Machine::throwStackOverflowPreviousFrame): 24128 (JSC::Machine::cti_register_file_check): 24129 (JSC::Machine::cti_op_call_arityCheck): 24130 (JSC::Machine::cti_op_call_NotJSFunction): 24131 (JSC::Machine::cti_op_construct_JSConstruct): 24132 (JSC::Machine::cti_op_construct_NotJSConstruct): 24133 (JSC::Machine::cti_op_call_eval): 24134 (JSC::Machine::cti_vm_throw): 24135 * VM/Machine.h: 24136 * bytecompiler/CodeGenerator.cpp: 24137 (JSC::CodeGenerator::emitCall): 24138 (JSC::CodeGenerator::emitCallEval): 24139 (JSC::CodeGenerator::emitConstruct): 24140 * bytecompiler/CodeGenerator.h: 24141 * parser/Nodes.cpp: 24142 (JSC::EvalFunctionCallNode::emitCode): 24143 (JSC::FunctionCallValueNode::emitCode): 24144 (JSC::FunctionCallResolveNode::emitCode): 24145 (JSC::FunctionCallBracketNode::emitCode): 24146 (JSC::FunctionCallDotNode::emitCode): 24147 * parser/Nodes.h: 24148 (JSC::ScopeNode::neededConstants): 24149 24150 2008-11-11 Geoffrey Garen <ggaren (a] apple.com> 24151 24152 Reviewed by Darin Adler. 24153 24154 Fixed https://bugs.webkit.org/show_bug.cgi?id=22174 24155 Simplified op_call by nixing its responsibility for moving the value of 24156 "this" into the first argument slot. 24157 24158 Instead, the caller emits an explicit load or mov instruction, or relies 24159 on implicit knowledge that "this" is already in the first argument slot. 24160 As a result, two operands to op_call are gone: firstArg and thisVal. 24161 24162 SunSpider and v8 tests show no change in bytecode or CTI. 24163 24164 * VM/CTI.cpp: 24165 (JSC::CTI::compileOpCallSetupArgs): 24166 (JSC::CTI::compileOpCallEvalSetupArgs): 24167 (JSC::CTI::compileOpConstructSetupArgs): Split apart these three versions 24168 of setting up arguments to op_call, because they're more different than 24169 they are the same -- even more so with this patch. 24170 24171 (JSC::CTI::compileOpCall): Updated for the fact that op_construct doesn't 24172 match op_call anymore. 24173 24174 (JSC::CTI::privateCompileMainPass): 24175 (JSC::CTI::privateCompileSlowCases): Merged a few call cases. Updated 24176 for changes mentioned above. 24177 24178 * VM/CTI.h: 24179 24180 * VM/CodeBlock.cpp: 24181 (JSC::CodeBlock::dump): Updated for new bytecode format of call / construct. 24182 24183 * VM/Machine.cpp: 24184 (JSC::Machine::callEval): Updated for new bytecode format of call / construct. 24185 24186 (JSC::Machine::dumpCallFrame): 24187 (JSC::Machine::dumpRegisters): Simplified these debugging functions, 24188 taking advantage of the new call frame layout. 24189 24190 (JSC::Machine::execute): Fixed up the eval version of execute to be 24191 friendlier to calls in the new format. 24192 24193 (JSC::Machine::privateExecute): Implemented the new call format in 24194 bytecode. 24195 24196 (JSC::Machine::cti_op_call_NotJSFunction): 24197 (JSC::Machine::cti_op_construct_JSConstruct): 24198 (JSC::Machine::cti_op_construct_NotJSConstruct): 24199 (JSC::Machine::cti_op_call_eval): Updated CTI helpers to match the new 24200 call format. 24201 24202 Fixed a latent bug in stack overflow checking that is now hit because 24203 the register layout has changed a bit -- namely: when throwing a stack 24204 overflow exception inside an op_call helper, we need to account for the 24205 fact that the current call frame is only half-constructed, and use the 24206 parent call frame instead. 24207 24208 * VM/Machine.h: 24209 24210 * bytecompiler/CodeGenerator.cpp: 24211 (JSC::CodeGenerator::emitCall): 24212 (JSC::CodeGenerator::emitCallEval): 24213 (JSC::CodeGenerator::emitConstruct): 24214 * bytecompiler/CodeGenerator.h: Updated codegen to match the new call 24215 format. 24216 24217 * parser/Nodes.cpp: 24218 (JSC::EvalFunctionCallNode::emitCode): 24219 (JSC::FunctionCallValueNode::emitCode): 24220 (JSC::FunctionCallResolveNode::emitCode): 24221 (JSC::FunctionCallBracketNode::emitCode): 24222 (JSC::FunctionCallDotNode::emitCode): 24223 * parser/Nodes.h: 24224 (JSC::ScopeNode::neededConstants): ditto 24225 24226 2008-11-11 Cameron Zwarich <zwarich (a] apple.com> 24227 24228 Reviewed by Geoff Garen. 24229 24230 Remove an unused forwarding header for a file that no longer exists. 24231 24232 * ForwardingHeaders/JavaScriptCore/JSLock.h: Removed. 24233 24234 2008-11-11 Mark Rowe <mrowe (a] apple.com> 24235 24236 Fix broken dependencies building JavaScriptCore on a freezing cold cat, caused 24237 by failure to update all instances of "kjs" to their new locations. 24238 24239 * JavaScriptCore.xcodeproj/project.pbxproj: 24240 24241 2008-11-11 Alexey Proskuryakov <ap (a] webkit.org> 24242 24243 Rubber-stamped by Adam Roben. 24244 24245 * wtf/AVLTree.h: (WTF::AVLTree::Iterator::start_iter): 24246 Fix indentation a little more. 24247 24248 2008-11-11 Cameron Zwarich <zwarich (a] apple.com> 24249 24250 Rubber-stamped by Sam Weinig. 24251 24252 Clean up EvalCodeCache to match our coding style a bit more. 24253 24254 * VM/EvalCodeCache.h: 24255 (JSC::EvalCodeCache::get): 24256 24257 2008-11-11 Cameron Zwarich <zwarich (a] apple.com> 24258 24259 Rubber-stamped by Sam Weinig. 24260 24261 Bug 22179: Move EvalCodeCache from CodeBlock.h into its own file 24262 <https://bugs.webkit.org/show_bug.cgi?id=22179> 24263 24264 * GNUmakefile.am: 24265 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 24266 * JavaScriptCore.xcodeproj/project.pbxproj: 24267 * VM/CodeBlock.h: 24268 * VM/EvalCodeCache.h: Copied from VM/CodeBlock.h. 24269 * VM/Machine.cpp: 24270 24271 2008-11-11 Cameron Zwarich <zwarich (a] apple.com> 24272 24273 Reviewed by Sam Weinig. 24274 24275 Remove the 'm_' prefix from the fields of the SwitchRecord struct. 24276 24277 * VM/CTI.cpp: 24278 (JSC::CTI::privateCompile): 24279 * VM/CTI.h: 24280 (JSC::SwitchRecord): 24281 (JSC::SwitchRecord::SwitchRecord): 24282 24283 2008-11-11 Cameron Zwarich <zwarich (a] apple.com> 24284 24285 Rubber-stamped by Sam Weinig. 24286 24287 Make asInteger() a static function so that it has internal linkage. 24288 24289 * VM/CTI.cpp: 24290 (JSC::asInteger): 24291 24292 2008-11-11 Maciej Stachowiak <mjs (a] apple.com> 24293 24294 Reviewed by Mark Rowe. 24295 24296 - shrink CodeBlock and AST related Vectors to exact fit (5-10M savings on membuster test) 24297 24298 No perf regression combined with the last patch (each seems like a small regression individually) 24299 24300 * bytecompiler/CodeGenerator.cpp: 24301 (JSC::CodeGenerator::generate): 24302 * parser/Nodes.h: 24303 (JSC::SourceElements::releaseContentsIntoVector): 24304 * wtf/Vector.h: 24305 (WTF::Vector::shrinkToFit): 24306 24307 2008-11-11 Maciej Stachowiak <mjs (a] apple.com> 24308 24309 Reviewed by Mark Rowe. 24310 24311 - remove inline capacity from declaration stacks (15M savings on membuster test) 24312 24313 No perf regression on SunSpider or V8 test combined with other upcoming memory improvement patch. 24314 24315 * JavaScriptCore.exp: 24316 * parser/Nodes.h: 24317 24318 2008-11-11 Cameron Zwarich <zwarich (a] apple.com> 24319 24320 Reviewed by Oliver Hunt. 24321 24322 While r38286 removed the need for the m_callFrame member variable of 24323 CTI, it should be also be removed. 24324 24325 * VM/CTI.h: 24326 24327 2008-11-10 Cameron Zwarich <zwarich (a] apple.com> 24328 24329 Reviewed by Oliver Hunt. 24330 24331 Make CTI::asInteger() a non-member function, since it needs no access to 24332 any of CTI's member variables. 24333 24334 * VM/CTI.cpp: 24335 (JSC::asInteger): 24336 * VM/CTI.h: 24337 24338 2008-11-10 Cameron Zwarich <zwarich (a] apple.com> 24339 24340 Reviewed by Maciej Stachowiak. 24341 24342 Use 'value' instead of 'js' in CTI as a name for JSValue* to match our 24343 usual convention elsewhere. 24344 24345 * VM/CTI.cpp: 24346 (JSC::CTI::emitGetArg): 24347 (JSC::CTI::emitGetPutArg): 24348 (JSC::CTI::getConstantImmediateNumericArg): 24349 (JSC::CTI::printOpcodeOperandTypes): 24350 24351 2008-11-10 Cameron Zwarich <zwarich (a] apple.com> 24352 24353 Reviewed by Maciej Stachowiak. 24354 24355 Make CTI::getConstant() a member function of CodeBlock instead. 24356 24357 * VM/CTI.cpp: 24358 (JSC::CTI::emitGetArg): 24359 (JSC::CTI::emitGetPutArg): 24360 (JSC::CTI::getConstantImmediateNumericArg): 24361 (JSC::CTI::printOpcodeOperandTypes): 24362 (JSC::CTI::privateCompileMainPass): 24363 * VM/CTI.h: 24364 * VM/CodeBlock.h: 24365 (JSC::CodeBlock::getConstant): 24366 24367 2008-11-10 Cameron Zwarich <zwarich (a] apple.com> 24368 24369 Reviewed by Sam Weinig. 24370 24371 Rename CodeBlock::isConstant() to isConstantRegisterIndex(). 24372 24373 * VM/CTI.cpp: 24374 (JSC::CTI::emitGetArg): 24375 (JSC::CTI::emitGetPutArg): 24376 (JSC::CTI::getConstantImmediateNumericArg): 24377 (JSC::CTI::printOpcodeOperandTypes): 24378 (JSC::CTI::privateCompileMainPass): 24379 * VM/CodeBlock.h: 24380 (JSC::CodeBlock::isConstantRegisterIndex): 24381 * bytecompiler/CodeGenerator.cpp: 24382 (JSC::CodeGenerator::emitEqualityOp): 24383 24384 2008-11-10 Gavin Barraclough <barraclough (a] apple.com> 24385 24386 Build fix for non-CTI builds. 24387 24388 * VM/Machine.cpp: 24389 (JSC::Machine::initialize): 24390 24391 2008-11-10 Cameron Zwarich <zwarich (a] apple.com> 24392 24393 Reviewed by Sam Weinig. 24394 24395 Remove the unused labels member variable of CodeBlock. 24396 24397 * VM/CodeBlock.h: 24398 * VM/LabelID.h: 24399 (JSC::LabelID::setLocation): 24400 24401 2008-11-10 Gavin Barraclough <barraclough (a] apple.com> 24402 24403 Reviewed by Cameron Zwarich. 24404 24405 Batch compile the set of static trampolines at the point Machine is constructed, using a single allocation. 24406 Refactor out m_callFrame from CTI, since this is only needed to access the global data (instead store a 24407 pointer to the global data directly, since this is available at the point the Machine is constructed). 24408 Add a method to align the code buffer, to allow JIT generation for multiple trampolines in one block. 24409 24410 * VM/CTI.cpp: 24411 (JSC::CTI::getConstant): 24412 (JSC::CTI::emitGetArg): 24413 (JSC::CTI::emitGetPutArg): 24414 (JSC::CTI::getConstantImmediateNumericArg): 24415 (JSC::CTI::printOpcodeOperandTypes): 24416 (JSC::CTI::CTI): 24417 (JSC::CTI::compileBinaryArithOp): 24418 (JSC::CTI::privateCompileMainPass): 24419 (JSC::CTI::privateCompileGetByIdProto): 24420 (JSC::CTI::privateCompileGetByIdChain): 24421 (JSC::CTI::privateCompileCTIMachineTrampolines): 24422 (JSC::CTI::freeCTIMachineTrampolines): 24423 * VM/CTI.h: 24424 (JSC::CTI::compile): 24425 (JSC::CTI::compileGetByIdSelf): 24426 (JSC::CTI::compileGetByIdProto): 24427 (JSC::CTI::compileGetByIdChain): 24428 (JSC::CTI::compilePutByIdReplace): 24429 (JSC::CTI::compilePutByIdTransition): 24430 (JSC::CTI::compileCTIMachineTrampolines): 24431 (JSC::CTI::compilePatchGetArrayLength): 24432 * VM/Machine.cpp: 24433 (JSC::Machine::initialize): 24434 (JSC::Machine::~Machine): 24435 (JSC::Machine::execute): 24436 (JSC::Machine::tryCTICachePutByID): 24437 (JSC::Machine::tryCTICacheGetByID): 24438 (JSC::Machine::cti_op_call_JSFunction): 24439 (JSC::Machine::cti_vm_lazyLinkCall): 24440 * VM/Machine.h: 24441 * masm/X86Assembler.h: 24442 (JSC::JITCodeBuffer::isAligned): 24443 (JSC::X86Assembler::): 24444 (JSC::X86Assembler::align): 24445 * runtime/JSGlobalData.cpp: 24446 (JSC::JSGlobalData::JSGlobalData): 24447 24448 2008-11-10 Maciej Stachowiak <mjs (a] apple.com> 24449 24450 Reviewed by Antti Koivisto. 24451 24452 - Make Vector::clear() release the Vector's memory (1MB savings on membuster) 24453 https://bugs.webkit.org/show_bug.cgi?id=22170 24454 24455 * wtf/Vector.h: 24456 (WTF::VectorBufferBase::deallocateBuffer): Set capacity to 0 as 24457 well as size, otherwise shrinking capacity to 0 can fail to reset 24458 the capacity and thus cause a future crash. 24459 (WTF::Vector::~Vector): Shrink size not capacity; we only need 24460 to call destructors, the buffer will be freed anyway. 24461 (WTF::Vector::clear): Change this to shrinkCapacity(0), not just shrink(0). 24462 (WTF::::shrinkCapacity): Use shrink() instead of resize() for case where 24463 the size is greater than the new capacity, to work with types that have no 24464 default constructor. 24465 24466 2008-11-10 Cameron Zwarich <zwarich (a] apple.com> 24467 24468 Reviewed by Maciej Stachowiak. 24469 24470 Split multiple definitions into separate lines. 24471 24472 * VM/CTI.cpp: 24473 (JSC::CTI::compileBinaryArithOp): 24474 24475 2008-11-10 Cameron Zwarich <zwarich (a] apple.com> 24476 24477 Reviewed by Geoff Garen. 24478 24479 Bug 22162: Remove cachedValueGetter from the JavaScriptCore API implementation 24480 <https://bugs.webkit.org/show_bug.cgi?id=22162> 24481 24482 There is no more need for the cachedValueGetter hack now that we have 24483 PropertySlot::setValue(), so we should remove it. 24484 24485 * API/JSCallbackObject.h: 24486 * API/JSCallbackObjectFunctions.h: 24487 (JSC::::getOwnPropertySlot): 24488 24489 2008-11-10 Cameron Zwarich <zwarich (a] apple.com> 24490 24491 Reviewed by Darin Adler. 24492 24493 Bug 22152: Remove asObject() call from JSCallbackObject::getOwnPropertySlot() 24494 <https://bugs.webkit.org/show_bug.cgi?id=22152> 24495 24496 With the recent change to adopt asType() style cast functions with 24497 assertions instead of static_casts in many places, the assertion for 24498 the asObject() call in JSCallbackObject::getOwnPropertySlot() has been 24499 failing when using any nontrivial client of the JavaScriptCore API. 24500 The cast isn't even necessary to call slot.setCustom(), so it should 24501 be removed. 24502 24503 * API/JSCallbackObjectFunctions.h: 24504 (JSC::JSCallbackObject::getOwnPropertySlot): 24505 24506 2008-11-10 Alexey Proskuryakov <ap (a] webkit.org> 24507 24508 Reviewed by Adam Roben. 24509 24510 A few coding style fixes for AVLTree. 24511 24512 * wtf/AVLTree.h: Moved to WTF namespace, Removed "KJS_" from include guards. 24513 (WTF::AVLTree::Iterator::start_iter): Fixed indentation 24514 24515 * runtime/JSArray.cpp: Added "using namepace WTF". 24516 24517 2008-11-09 Cameron Zwarich <zwarich (a] apple.com> 24518 24519 Not reviewed. 24520 24521 Speculatively fix the non-AllInOne build. 24522 24523 * runtime/NativeErrorConstructor.cpp: 24524 24525 2008-11-09 Darin Adler <darin (a] apple.com> 24526 24527 Reviewed by Tim Hatcher. 24528 24529 - https://bugs.webkit.org/show_bug.cgi?id=22149 24530 remove unused code from the parser 24531 24532 * AllInOneFile.cpp: Removed nodes2string.cpp. 24533 * GNUmakefile.am: Ditto. 24534 * JavaScriptCore.exp: Ditto. 24535 * JavaScriptCore.pri: Ditto. 24536 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto. 24537 * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. 24538 * JavaScriptCoreSources.bkl: Ditto. 24539 24540 * VM/CodeBlock.h: Added include. 24541 24542 * VM/Machine.cpp: (JSC::Machine::execute): Use the types from 24543 DeclarationStacks as DeclarationStacks:: rather than Node:: since 24544 "Node" really has little to do with it. 24545 * bytecompiler/CodeGenerator.cpp: 24546 (JSC::CodeGenerator::CodeGenerator): Ditto. 24547 24548 * jsc.cpp: 24549 (Options::Options): Removed prettyPrint option. 24550 (runWithScripts): Ditto. 24551 (printUsageStatement): Ditto. 24552 (parseArguments): Ditto. 24553 (jscmain): Ditto. 24554 24555 * parser/Grammar.y: Removed use of obsolete ImmediateNumberNode. 24556 24557 * parser/Nodes.cpp: 24558 (JSC::ThrowableExpressionData::emitThrowError): Use inline functions 24559 instead of direct member access for ThrowableExpressionData values. 24560 (JSC::BracketAccessorNode::emitCode): Ditto. 24561 (JSC::DotAccessorNode::emitCode): Ditto. 24562 (JSC::NewExprNode::emitCode): Ditto. 24563 (JSC::EvalFunctionCallNode::emitCode): Ditto. 24564 (JSC::FunctionCallValueNode::emitCode): Ditto. 24565 (JSC::FunctionCallResolveNode::emitCode): Ditto. 24566 (JSC::FunctionCallBracketNode::emitCode): Ditto. 24567 (JSC::FunctionCallDotNode::emitCode): Ditto. 24568 (JSC::PostfixResolveNode::emitCode): Ditto. 24569 (JSC::PostfixBracketNode::emitCode): Ditto. 24570 (JSC::PostfixDotNode::emitCode): Ditto. 24571 (JSC::DeleteResolveNode::emitCode): Ditto. 24572 (JSC::DeleteBracketNode::emitCode): Ditto. 24573 (JSC::DeleteDotNode::emitCode): Ditto. 24574 (JSC::PrefixResolveNode::emitCode): Ditto. 24575 (JSC::PrefixBracketNode::emitCode): Ditto. 24576 (JSC::PrefixDotNode::emitCode): Ditto. 24577 (JSC::ThrowableBinaryOpNode::emitCode): Ditto. 24578 (JSC::InstanceOfNode::emitCode): Ditto. 24579 (JSC::ReadModifyResolveNode::emitCode): Ditto. 24580 (JSC::AssignResolveNode::emitCode): Ditto. 24581 (JSC::AssignDotNode::emitCode): Ditto. 24582 (JSC::ReadModifyDotNode::emitCode): Ditto. 24583 (JSC::AssignBracketNode::emitCode): Ditto. 24584 (JSC::ReadModifyBracketNode::emitCode): Ditto. 24585 (JSC::statementListEmitCode): Take a const StatementVector instead 24586 of a non-const one. Also removed unused statementListPushFIFO. 24587 (JSC::ForInNode::emitCode): Inline functions instead of member access. 24588 (JSC::ThrowNode::emitCode): Ditto. 24589 (JSC::EvalNode::emitCode): Ditto. 24590 (JSC::FunctionBodyNode::emitCode): Ditto. 24591 (JSC::ProgramNode::emitCode): Ditto. 24592 24593 * parser/Nodes.h: Removed unused includes and forward declarations. 24594 Removed Precedence enum. Made many more members private instead of 24595 protected or public. Removed unused NodeStack typedef. Moved the 24596 VarStack and FunctionStack typedefs from Node to ScopeNode. Made 24597 Node::emitCode pure virtual and changed classes that don't emit 24598 any code to inherit from ParserRefCounted rather than Node. 24599 Moved isReturnNode from Node to StatementNode. Removed the 24600 streamTo, precedence, and needsParensIfLeftmost functions from 24601 all classes. Removed the ImmediateNumberNode class and make 24602 NumberNode::setValue nonvirtual. 24603 24604 * parser/nodes2string.cpp: Removed. 24605 24606 2008-11-09 Darin Adler <darin (a] apple.com> 24607 24608 Reviewed by Sam Weinig and Maciej Stachowiak. 24609 Includes some work done by Chris Brichford. 24610 24611 - fix https://bugs.webkit.org/show_bug.cgi?id=14886 24612 Stack overflow due to deeply nested parse tree doing repeated string concatentation 24613 24614 Test: fast/js/large-expressions.html 24615 24616 1) Code generation is recursive, so takes stack proportional to the complexity 24617 of the source code expression. Fixed by setting an arbitrary recursion limit 24618 of 10,000 nodes. 24619 24620 2) Destruction of the syntax tree was recursive. Fixed by introducing a 24621 non-recursive mechanism for destroying the tree. 24622 24623 * bytecompiler/CodeGenerator.cpp: 24624 (JSC::CodeGenerator::CodeGenerator): Initialize depth to 0. 24625 (JSC::CodeGenerator::emitThrowExpressionTooDeepException): Added. Emits the code 24626 to throw a "too deep" exception. 24627 * bytecompiler/CodeGenerator.h: 24628 (JSC::CodeGenerator::emitNode): Check depth and emit an exception if we exceed 24629 the maximum depth. 24630 24631 * parser/Nodes.cpp: 24632 (JSC::NodeReleaser::releaseAllNodes): Added. To be called inside node destructors 24633 to avoid recursive calls to destructors for nodes inside this one. 24634 (JSC::NodeReleaser::release): Added. To be called inside releaseNodes functions. 24635 Also added releaseNodes functions and calls to releaseAllNodes inside destructors 24636 for each class derived from Node that has RefPtr to other nodes. 24637 (JSC::NodeReleaser::adopt): Added. Used by the release function. 24638 (JSC::NodeReleaser::adoptFunctionBodyNode): Added. 24639 24640 * parser/Nodes.h: Added declarations of releaseNodes and destructors in all classes 24641 that needed it. Eliminated use of ListRefPtr and releaseNext, which are the two parts 24642 of an older solution to the non-recursive destruction problem that works only for 24643 lists, whereas the new solution works for other graphs. Changed ReverseBinaryOpNode 24644 to use BinaryOpNode as a base class to avoid some duplicated code. 24645 24646 2008-11-08 Kevin Ollivier <kevino (a] theolliviers.com> 24647 24648 wx build fixes after addition of JSCore parser and bycompiler dirs. Also cleanup 24649 the JSCore Bakefile's group names to be consistent. 24650 24651 * JavaScriptCoreSources.bkl: 24652 * jscore.bkl: 24653 24654 2008-11-07 Cameron Zwarich <zwarich (a] apple.com> 24655 24656 Reviewed by Geoff Garen. 24657 24658 Bug 21801: REGRESSION (r37821): YUI date formatting JavaScript puts the letter 'd' in place of the day 24659 <https://bugs.webkit.org/show_bug.cgi?id=21801> 24660 24661 Fix the constant register check in the 'typeof' optimization in 24662 CodeGenerator, which was completely broken after r37821. 24663 24664 * bytecompiler/CodeGenerator.cpp: 24665 (JSC::CodeGenerator::emitEqualityOp): 24666 24667 2008-11-07 Cameron Zwarich <zwarich (a] apple.com> 24668 24669 Reviewed by Geoff Garen. 24670 24671 Bug 22129: Move CTI::isConstant() to CodeBlock 24672 <https://bugs.webkit.org/show_bug.cgi?id=22129> 24673 24674 * VM/CTI.cpp: 24675 (JSC::CTI::emitGetArg): 24676 (JSC::CTI::emitGetPutArg): 24677 (JSC::CTI::getConstantImmediateNumericArg): 24678 (JSC::CTI::printOpcodeOperandTypes): 24679 (JSC::CTI::privateCompileMainPass): 24680 * VM/CTI.h: 24681 * VM/CodeBlock.h: 24682 (JSC::CodeBlock::isConstant): 24683 24684 2008-11-07 Alp Toker <alp (a] nuanti.com> 24685 24686 autotools fix. Always use the configured perl binary (which may be 24687 different to the one in $PATH) when generating sources. 24688 24689 * GNUmakefile.am: 24690 24691 2008-11-07 Cameron Zwarich <zwarich (a] apple.com> 24692 24693 Not reviewed. 24694 24695 Change grammar.cpp to Grammar.cpp and grammar.h to Grammar.h in several 24696 build scripts. 24697 24698 * DerivedSources.make: 24699 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 24700 * JavaScriptCoreSources.bkl: 24701 24702 2008-11-07 Alp Toker <alp (a] nuanti.com> 24703 24704 More grammar.cpp -> Grammar.cpp build fixes. 24705 24706 * AllInOneFile.cpp: 24707 * GNUmakefile.am: 24708 24709 2008-11-07 Simon Hausmann <hausmann (a] webkit.org> 24710 24711 Fix the build on case-sensitive file systems. grammar.y was renamed to 24712 Grammar.y but Lexer.cpp includes grammar.h. The build bots didn't 24713 notice this change because of stale files. 24714 24715 * parser/Lexer.cpp: 24716 24717 2008-11-07 Cameron Zwarich <zwarich (a] apple.com> 24718 24719 Reviewed by Alexey Proskuryakov. 24720 24721 Rename the m_nextGlobal, m_nextParameter, and m_nextConstant member 24722 variables of CodeGenerator to m_nextGlobalIndex, m_nextParameterIndex, 24723 and m_nextConstantIndex respectively. This is to distinguish these from 24724 member variables like m_lastConstant, which are actually RefPtrs to 24725 Registers. 24726 24727 * bytecompiler/CodeGenerator.cpp: 24728 (JSC::CodeGenerator::addGlobalVar): 24729 (JSC::CodeGenerator::allocateConstants): 24730 (JSC::CodeGenerator::CodeGenerator): 24731 (JSC::CodeGenerator::addParameter): 24732 (JSC::CodeGenerator::addConstant): 24733 * bytecompiler/CodeGenerator.h: 24734 24735 2008-11-06 Gavin Barraclough barraclough (a] apple.com 24736 24737 Reviewed by Oliver Hunt. 24738 24739 Do not make a cti_* call to perform an op_call unless either: 24740 (1) The codeblock for the function body has not been generated. 24741 (2) The number of arguments passed does not match the callee arity. 24742 24743 ~1% progression on sunspider --v8 24744 24745 * VM/CTI.cpp: 24746 (JSC::CTI::compileOpCallInitializeCallFrame): 24747 (JSC::CTI::compileOpCall): 24748 (JSC::CTI::privateCompileSlowCases): 24749 * VM/CTI.h: 24750 * VM/Machine.cpp: 24751 (JSC::Machine::cti_op_call_JSFunction): 24752 (JSC::Machine::cti_op_call_arityCheck): 24753 (JSC::Machine::cti_op_construct_JSConstruct): 24754 * VM/Machine.h: 24755 * kjs/nodes.h: 24756 24757 2008-11-06 Cameron Zwarich <zwarich (a] apple.com> 24758 24759 Reviewed by Geoff Garen. 24760 24761 Move the remaining files in the kjs subdirectory of JavaScriptCore to 24762 a new parser subdirectory, and remove the kjs subdirectory entirely. 24763 24764 * AllInOneFile.cpp: 24765 * DerivedSources.make: 24766 * GNUmakefile.am: 24767 * JavaScriptCore.pri: 24768 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 24769 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 24770 * JavaScriptCore.vcproj/jsc/jsc.vcproj: 24771 * JavaScriptCore.xcodeproj/project.pbxproj: 24772 * JavaScriptCoreSources.bkl: 24773 * VM/CodeBlock.h: 24774 * VM/ExceptionHelpers.cpp: 24775 * VM/SamplingTool.h: 24776 * bytecompiler/CodeGenerator.h: 24777 * jsc.pro: 24778 * jscore.bkl: 24779 * kjs: Removed. 24780 * kjs/NodeInfo.h: Removed. 24781 * kjs/Parser.cpp: Removed. 24782 * kjs/Parser.h: Removed. 24783 * kjs/ResultType.h: Removed. 24784 * kjs/SourceCode.h: Removed. 24785 * kjs/SourceProvider.h: Removed. 24786 * kjs/grammar.y: Removed. 24787 * kjs/keywords.table: Removed. 24788 * kjs/lexer.cpp: Removed. 24789 * kjs/lexer.h: Removed. 24790 * kjs/nodes.cpp: Removed. 24791 * kjs/nodes.h: Removed. 24792 * kjs/nodes2string.cpp: Removed. 24793 * parser: Added. 24794 * parser/Grammar.y: Copied from kjs/grammar.y. 24795 * parser/Keywords.table: Copied from kjs/keywords.table. 24796 * parser/Lexer.cpp: Copied from kjs/lexer.cpp. 24797 * parser/Lexer.h: Copied from kjs/lexer.h. 24798 * parser/NodeInfo.h: Copied from kjs/NodeInfo.h. 24799 * parser/Nodes.cpp: Copied from kjs/nodes.cpp. 24800 * parser/Nodes.h: Copied from kjs/nodes.h. 24801 * parser/Parser.cpp: Copied from kjs/Parser.cpp. 24802 * parser/Parser.h: Copied from kjs/Parser.h. 24803 * parser/ResultType.h: Copied from kjs/ResultType.h. 24804 * parser/SourceCode.h: Copied from kjs/SourceCode.h. 24805 * parser/SourceProvider.h: Copied from kjs/SourceProvider.h. 24806 * parser/nodes2string.cpp: Copied from kjs/nodes2string.cpp. 24807 * pcre/pcre.pri: 24808 * pcre/pcre_exec.cpp: 24809 * runtime/FunctionConstructor.cpp: 24810 * runtime/JSActivation.h: 24811 * runtime/JSFunction.h: 24812 * runtime/JSGlobalData.cpp: 24813 * runtime/JSGlobalObjectFunctions.cpp: 24814 * runtime/JSObject.cpp: 24815 (JSC::JSObject::toNumber): 24816 * runtime/RegExp.cpp: 24817 24818 2008-11-06 Adam Roben <aroben (a] apple.com> 24819 24820 Windows build fix after r38196 24821 24822 * JavaScriptCore.vcproj/jsc/jsc.vcproj: Added bytecompiler/ to the 24823 include path. 24824 24825 2008-11-06 Cameron Zwarich <zwarich (a] apple.com> 24826 24827 Rubber-stamped by Sam Weinig. 24828 24829 Create a new bytecompiler subdirectory of JavaScriptCore and move some 24830 relevant files to it. 24831 24832 * AllInOneFile.cpp: 24833 * GNUmakefile.am: 24834 * JavaScriptCore.pri: 24835 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 24836 * JavaScriptCore.xcodeproj/project.pbxproj: 24837 * JavaScriptCoreSources.bkl: 24838 * VM/CodeGenerator.cpp: Removed. 24839 * VM/CodeGenerator.h: Removed. 24840 * bytecompiler: Added. 24841 * bytecompiler/CodeGenerator.cpp: Copied from VM/CodeGenerator.cpp. 24842 * bytecompiler/CodeGenerator.h: Copied from VM/CodeGenerator.h. 24843 * bytecompiler/LabelScope.h: Copied from kjs/LabelScope.h. 24844 * jscore.bkl: 24845 * kjs/LabelScope.h: Removed. 24846 24847 2008-11-06 Adam Roben <aroben (a] apple.com> 24848 24849 Windows clean build fix after r38155 24850 24851 Rubberstamped by Cameron Zwarich. 24852 24853 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update 24854 the post-build event for the move of create_hash_table out of kjs/. 24855 24856 2008-11-06 Laszlo Gombos <laszlo.1.gombos (a] nokia.com> 24857 24858 Reviewed by Darin Adler. 24859 24860 https://bugs.webkit.org/show_bug.cgi?id=22107 24861 24862 Bug uncovered during RVCT port in functions not used. get_lt() and 24863 get_gt() takes only one argument - remove second argument where 24864 applicable. 24865 24866 * wtf/AVLTree.h: 24867 (JSC::AVLTree::remove): Remove second argument of get_lt/get_gt(). 24868 (JSC::AVLTree::subst): Ditto. 24869 24870 2008-11-06 Alp Toker <alp (a] nuanti.com> 24871 24872 Reviewed by Cameron Zwarich. 24873 24874 https://bugs.webkit.org/show_bug.cgi?id=22033 24875 [GTK] CTI/Linux r38064 crashes; JIT requires executable memory 24876 24877 Mark pages allocated by the FastMalloc mmap code path executable with 24878 PROT_EXEC. This fixes crashes seen on CPUs and kernels that enforce 24879 non-executable memory (like ExecShield on Fedora Linux) when the JIT 24880 is enabled. 24881 24882 This patch does not resolve the issue on debug builds so affected 24883 developers may still need to pass --disable-jit to configure. 24884 24885 * wtf/TCSystemAlloc.cpp: 24886 (TryMmap): 24887 (TryDevMem): 24888 (TCMalloc_SystemRelease): 24889 24890 2008-11-06 Peter Gal <galpeter (a] inf.u-szeged.hu> 24891 24892 Reviewed by Cameron Zwarich. 24893 24894 Bug 22099: Make the Qt port build the JSC shell in the correct place 24895 <https://bugs.webkit.org/show_bug.cgi?id=22099> 24896 24897 Adjust include paths and build destination dir for the 'jsc' executable 24898 in the Qt build. 24899 24900 * jsc.pro: 24901 24902 2008-11-06 Kristian Amlie <kristian.amlie (a] nokia.com> 24903 24904 Reviewed by Simon Hausmann. 24905 24906 Implemented the block allocation on Symbian through heap allocation. 24907 24908 Unfortunately there is no way to allocate virtual memory. The Posix 24909 layer provides mmap() but no anonymous mapping. So this is a very slow 24910 solution but it should work as a start. 24911 24912 * runtime/Collector.cpp: 24913 (JSC::allocateBlock): 24914 (JSC::freeBlock): 24915 24916 2008-11-06 Laszlo Gombos <laszlo.1.gombos (a] nokia.com> 24917 24918 Reviewed by Simon Hausmann. 24919 24920 Borrow some math functions from the MSVC port to the build with the 24921 RVCT compiler. 24922 24923 * wtf/MathExtras.h: 24924 (isinf): 24925 (isnan): 24926 (signbit): 24927 24928 2008-11-06 Laszlo Gombos <laszlo.1.gombos (a] nokia.com> 24929 24930 Reviewed by Simon Hausmann. 24931 24932 Include strings.h for strncasecmp(). 24933 This is needed for compilation inside Symbian and it is also 24934 confirmed by the man-page on Linux. 24935 24936 * runtime/DateMath.cpp: 24937 24938 2008-11-06 Norbert Leser <norbert.leser (a] nokia.com> 24939 24940 Reviewed by Simon Hausmann. 24941 24942 Implemented currentThreadStackBase for Symbian. 24943 24944 * runtime/Collector.cpp: 24945 (JSC::currentThreadStackBase): 24946 24947 2008-11-06 Laszlo Gombos <laszlo.1.gombos (a] nokia.com> 24948 24949 Reviewed by Simon Hausmann. 24950 24951 RVCT does not support tm_gmtoff field, so disable that code just like 24952 for MSVC. 24953 24954 * runtime/DateMath.h: 24955 (JSC::GregorianDateTime::GregorianDateTime): 24956 (JSC::GregorianDateTime::operator tm): 24957 24958 2008-11-06 Kristian Amlie <kristian.amlie (a] nokia.com> 24959 24960 Reviewed by Simon Hausmann. 24961 24962 Define PLATFORM(UNIX) for S60. Effectively WebKit on S60 is compiled 24963 on top of the Posix layer. 24964 24965 * wtf/Platform.h: 24966 24967 2008-11-06 Norbert Leser <norbert.leser (a] nokia.com> 24968 24969 Reviewed by Simon Hausmann. 24970 24971 Added __SYMBIAN32__ condition for defining PLATFORM(SYMBIAN). 24972 24973 * wtf/Platform.h: 24974 24975 2008-11-06 Ariya Hidayat <ariya.hidayat (a] trolltech.com> 24976 24977 Reviewed by Simon Hausmann. 24978 24979 Added WINSCW compiler define for Symbian S60. 24980 24981 * wtf/Platform.h: 24982 24983 2008-11-06 Kristian Amlie <kristian.amlie (a] nokia.com> 24984 24985 Reviewed by Simon Hausmann. 24986 24987 Use the GCC defines of the WTF_ALIGN* macros for the RVCT and the 24988 MINSCW compiler. 24989 24990 * wtf/Vector.h: 24991 24992 2008-11-06 Kristian Amlie <kristian.amlie (a] nokia.com> 24993 24994 Reviewed by Simon Hausmann. 24995 24996 Define capabilities of the SYMBIAN platform. Some of the system 24997 headers are actually dependent on RVCT. 24998 24999 * wtf/Platform.h: 25000 25001 2008-11-06 Kristian Amlie <kristian.amlie (a] nokia.com> 25002 25003 Reviewed by Simon Hausmann. 25004 25005 Add missing stddef.h header needed for compilation in Symbian. 25006 25007 * runtime/Collector.h: 25008 25009 2008-11-06 Kristian Amlie <kristian.amlie (a] nokia.com> 25010 25011 Reviewed by Simon Hausmann. 25012 25013 Added COMPILER(RVCT) to detect the ARM RVCT compiler used in the Symbian environment. 25014 25015 * wtf/Platform.h: 25016 25017 2008-11-06 Simon Hausmann <hausmann (a] webkit.org> 25018 25019 Fix the Qt build, adjust include paths after move of jsc.pro. 25020 25021 * jsc.pro: 25022 25023 2008-11-06 Cameron Zwarich <zwarich (a] apple.com> 25024 25025 Rubber-stamped by Sam Weinig. 25026 25027 Move kjs/Shell.cpp to the top level of the JavaScriptCore directory and 25028 rename it to jsc.cpp to reflect the name of the binary compiled from it. 25029 25030 * GNUmakefile.am: 25031 * JavaScriptCore.vcproj/jsc/jsc.vcproj: 25032 * JavaScriptCore.xcodeproj/project.pbxproj: 25033 * jsc.cpp: Copied from kjs/Shell.cpp. 25034 * jsc.pro: 25035 * jscore.bkl: 25036 * kjs/Shell.cpp: Removed. 25037 25038 2008-11-06 Cameron Zwarich <zwarich (a] apple.com> 25039 25040 Rubber-stamped by Sam Weinig. 25041 25042 Move create_hash_table and jsc.pro out of the kjs directory and into the 25043 root directory of JavaScriptCore. 25044 25045 * DerivedSources.make: 25046 * JavaScriptCore.pri: 25047 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 25048 * JavaScriptCore.xcodeproj/project.pbxproj: 25049 * create_hash_table: Copied from kjs/create_hash_table. 25050 * jsc.pro: Copied from kjs/jsc.pro. 25051 * kjs/create_hash_table: Removed. 25052 * kjs/jsc.pro: Removed. 25053 * make-generated-sources.sh: 25054 25055 2008-11-05 Gavin Barraclough <barraclough (a] apple.com> 25056 25057 Reviewed by Maciej Stachowiak. 25058 25059 https://bugs.webkit.org/show_bug.cgi?id=22094 25060 25061 Fix for bug where the callee incorrectly recieves the caller's lexical 25062 global object as this, rather than its own. Implementation closely 25063 follows the spec, passing jsNull, checking in the callee and replacing 25064 with the global object where necessary. 25065 25066 * VM/CTI.cpp: 25067 (JSC::CTI::compileOpCall): 25068 * VM/Machine.cpp: 25069 (JSC::Machine::cti_op_call_NotJSFunction): 25070 (JSC::Machine::cti_op_call_eval): 25071 * runtime/JSCell.h: 25072 (JSC::JSValue::toThisObject): 25073 * runtime/JSImmediate.cpp: 25074 (JSC::JSImmediate::toThisObject): 25075 * runtime/JSImmediate.h: 25076 25077 2008-11-05 Kevin Ollivier <kevino (a] theolliviers.com> 25078 25079 wx build fix after Operations.cpp move. 25080 25081 * JavaScriptCoreSources.bkl: 25082 25083 2008-11-05 Cameron Zwarich <zwarich (a] apple.com> 25084 25085 Not reviewed. 25086 25087 Fix the build for case-sensitive build systems and wxWindows. 25088 25089 * JavaScriptCoreSources.bkl: 25090 * kjs/create_hash_table: 25091 25092 2008-11-05 Cameron Zwarich <zwarich (a] apple.com> 25093 25094 Not reviewed. 25095 25096 Fix the build for case-sensitive build systems. 25097 25098 * JavaScriptCoreSources.bkl: 25099 * kjs/Shell.cpp: 25100 * runtime/Interpreter.cpp: 25101 * runtime/JSArray.cpp: 25102 25103 2008-11-05 Cameron Zwarich <zwarich (a] apple.com> 25104 25105 Not reviewed. 25106 25107 Fix the build for case-sensitive build systems. 25108 25109 * API/JSBase.cpp: 25110 * API/JSObjectRef.cpp: 25111 * runtime/CommonIdentifiers.h: 25112 * runtime/Identifier.cpp: 25113 * runtime/InitializeThreading.cpp: 25114 * runtime/InternalFunction.h: 25115 * runtime/JSString.h: 25116 * runtime/Lookup.h: 25117 * runtime/PropertyNameArray.h: 25118 * runtime/PropertySlot.h: 25119 * runtime/StructureID.cpp: 25120 * runtime/StructureID.h: 25121 * runtime/UString.cpp: 25122 25123 2008-11-05 Cameron Zwarich <zwarich (a] apple.com> 25124 25125 Rubber-stamped by Sam Weinig. 25126 25127 Move more files to the runtime subdirectory of JavaScriptCore. 25128 25129 * API/APICast.h: 25130 * API/JSBase.cpp: 25131 * API/JSCallbackObject.cpp: 25132 * API/JSClassRef.cpp: 25133 * API/JSClassRef.h: 25134 * API/JSStringRefCF.cpp: 25135 * API/JSValueRef.cpp: 25136 * API/OpaqueJSString.cpp: 25137 * API/OpaqueJSString.h: 25138 * AllInOneFile.cpp: 25139 * GNUmakefile.am: 25140 * JavaScriptCore.pri: 25141 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 25142 * JavaScriptCore.xcodeproj/project.pbxproj: 25143 * JavaScriptCoreSources.bkl: 25144 * VM/CodeBlock.h: 25145 * VM/CodeGenerator.cpp: 25146 * VM/Machine.cpp: 25147 * VM/RegisterFile.h: 25148 * debugger/Debugger.h: 25149 * kjs/SourceProvider.h: 25150 * kjs/TypeInfo.h: Removed. 25151 * kjs/collector.cpp: Removed. 25152 * kjs/collector.h: Removed. 25153 * kjs/completion.h: Removed. 25154 * kjs/create_hash_table: 25155 * kjs/identifier.cpp: Removed. 25156 * kjs/identifier.h: Removed. 25157 * kjs/interpreter.cpp: Removed. 25158 * kjs/interpreter.h: Removed. 25159 * kjs/lexer.cpp: 25160 * kjs/lexer.h: 25161 * kjs/lookup.cpp: Removed. 25162 * kjs/lookup.h: Removed. 25163 * kjs/nodes.cpp: 25164 * kjs/nodes.h: 25165 * kjs/operations.cpp: Removed. 25166 * kjs/operations.h: Removed. 25167 * kjs/protect.h: Removed. 25168 * kjs/regexp.cpp: Removed. 25169 * kjs/regexp.h: Removed. 25170 * kjs/ustring.cpp: Removed. 25171 * kjs/ustring.h: Removed. 25172 * pcre/pcre_exec.cpp: 25173 * profiler/CallIdentifier.h: 25174 * profiler/Profile.h: 25175 * runtime/ArrayConstructor.cpp: 25176 * runtime/ArrayPrototype.cpp: 25177 * runtime/ArrayPrototype.h: 25178 * runtime/Collector.cpp: Copied from kjs/collector.cpp. 25179 * runtime/Collector.h: Copied from kjs/collector.h. 25180 * runtime/CollectorHeapIterator.h: 25181 * runtime/Completion.h: Copied from kjs/completion.h. 25182 * runtime/ErrorPrototype.cpp: 25183 * runtime/Identifier.cpp: Copied from kjs/identifier.cpp. 25184 * runtime/Identifier.h: Copied from kjs/identifier.h. 25185 * runtime/InitializeThreading.cpp: 25186 * runtime/Interpreter.cpp: Copied from kjs/interpreter.cpp. 25187 * runtime/Interpreter.h: Copied from kjs/interpreter.h. 25188 * runtime/JSCell.h: 25189 * runtime/JSGlobalData.cpp: 25190 * runtime/JSGlobalData.h: 25191 * runtime/JSLock.cpp: 25192 * runtime/JSNumberCell.cpp: 25193 * runtime/JSNumberCell.h: 25194 * runtime/JSObject.cpp: 25195 * runtime/JSValue.h: 25196 * runtime/Lookup.cpp: Copied from kjs/lookup.cpp. 25197 * runtime/Lookup.h: Copied from kjs/lookup.h. 25198 * runtime/MathObject.cpp: 25199 * runtime/NativeErrorPrototype.cpp: 25200 * runtime/NumberPrototype.cpp: 25201 * runtime/Operations.cpp: Copied from kjs/operations.cpp. 25202 * runtime/Operations.h: Copied from kjs/operations.h. 25203 * runtime/PropertyMapHashTable.h: 25204 * runtime/Protect.h: Copied from kjs/protect.h. 25205 * runtime/RegExp.cpp: Copied from kjs/regexp.cpp. 25206 * runtime/RegExp.h: Copied from kjs/regexp.h. 25207 * runtime/RegExpConstructor.cpp: 25208 * runtime/RegExpObject.h: 25209 * runtime/RegExpPrototype.cpp: 25210 * runtime/SmallStrings.h: 25211 * runtime/StringObjectThatMasqueradesAsUndefined.h: 25212 * runtime/StructureID.cpp: 25213 * runtime/StructureID.h: 25214 * runtime/StructureIDTransitionTable.h: 25215 * runtime/SymbolTable.h: 25216 * runtime/TypeInfo.h: Copied from kjs/TypeInfo.h. 25217 * runtime/UString.cpp: Copied from kjs/ustring.cpp. 25218 * runtime/UString.h: Copied from kjs/ustring.h. 25219 * wrec/CharacterClassConstructor.h: 25220 * wrec/WREC.h: 25221 25222 2008-11-05 Geoffrey Garen <ggaren (a] apple.com> 25223 25224 Suggested by Darin Adler. 25225 25226 Removed two copy constructors that the compiler can generate for us 25227 automatically. 25228 25229 * VM/LabelID.h: 25230 (JSC::LabelID::setLocation): 25231 (JSC::LabelID::offsetFrom): 25232 (JSC::LabelID::ref): 25233 (JSC::LabelID::refCount): 25234 * kjs/LabelScope.h: 25235 25236 2008-11-05 Anders Carlsson <andersca (a] apple.com> 25237 25238 Fix Snow Leopard build. 25239 25240 * JavaScriptCore.xcodeproj/project.pbxproj: 25241 25242 2008-11-04 Cameron Zwarich <zwarich (a] apple.com> 25243 25244 Rubber-stamped by Steve Falkenburg. 25245 25246 Move dtoa.cpp and dtoa.h to the WTF Visual Studio project to reflect 25247 their movement in the filesystem. 25248 25249 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 25250 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 25251 25252 2008-11-04 Cameron Zwarich <zwarich (a] apple.com> 25253 25254 Rubber-stamped by Sam Weinig. 25255 25256 Move kjs/dtoa.h to the wtf subdirectory of JavaScriptCore. 25257 25258 * AllInOneFile.cpp: 25259 * GNUmakefile.am: 25260 * JavaScriptCore.pri: 25261 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 25262 * JavaScriptCore.xcodeproj/project.pbxproj: 25263 * JavaScriptCoreSources.bkl: 25264 * kjs/dtoa.cpp: Removed. 25265 * kjs/dtoa.h: Removed. 25266 * wtf/dtoa.cpp: Copied from kjs/dtoa.cpp. 25267 * wtf/dtoa.h: Copied from kjs/dtoa.h. 25268 25269 2008-11-04 Cameron Zwarich <zwarich (a] apple.com> 25270 25271 Rubber-stamped by Sam Weinig. 25272 25273 Move kjs/config.h to the top level of JavaScriptCore. 25274 25275 * GNUmakefile.am: 25276 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 25277 * JavaScriptCore.xcodeproj/project.pbxproj: 25278 * config.h: Copied from kjs/config.h. 25279 * kjs/config.h: Removed. 25280 25281 2008-11-04 Darin Adler <darin (a] apple.com> 25282 25283 Reviewed by Tim Hatcher. 25284 25285 * wtf/ThreadingNone.cpp: Tweak formatting. 25286 25287 2008-11-03 Darin Adler <darin (a] apple.com> 25288 25289 Reviewed by Tim Hatcher. 25290 25291 - https://bugs.webkit.org/show_bug.cgi?id=22061 25292 create script to check for exit-time destructors 25293 25294 * JavaScriptCore.exp: Changed to export functions rather than 25295 a global for the atomically initialized static mutex. 25296 25297 * JavaScriptCore.xcodeproj/project.pbxproj: Added a script 25298 phase that runs the check-for-exit-time-destructors script. 25299 25300 * wtf/MainThread.cpp: 25301 (WTF::mainThreadFunctionQueueMutex): Changed to leak an object 25302 rather than using an exit time destructor. 25303 (WTF::functionQueue): Ditto. 25304 * wtf/unicode/icu/CollatorICU.cpp: 25305 (WTF::cachedCollatorMutex): Ditto. 25306 25307 * wtf/Threading.h: Changed other platforms to share the Windows 25308 approach where the mutex is internal and the functions are exported. 25309 * wtf/ThreadingGtk.cpp: 25310 (WTF::lockAtomicallyInitializedStaticMutex): Ditto. 25311 (WTF::unlockAtomicallyInitializedStaticMutex): Ditto. 25312 * wtf/ThreadingNone.cpp: 25313 (WTF::lockAtomicallyInitializedStaticMutex): Ditto. 25314 (WTF::unlockAtomicallyInitializedStaticMutex): Ditto. 25315 * wtf/ThreadingPthreads.cpp: 25316 (WTF::threadMapMutex): Changed to leak an object rather than using 25317 an exit time destructor. 25318 (WTF::lockAtomicallyInitializedStaticMutex): Mutex change. 25319 (WTF::unlockAtomicallyInitializedStaticMutex): Ditto. 25320 (WTF::threadMap): Changed to leak an object rather than using 25321 an exit time destructor. 25322 * wtf/ThreadingQt.cpp: 25323 (WTF::lockAtomicallyInitializedStaticMutex): Mutex change. 25324 (WTF::unlockAtomicallyInitializedStaticMutex): Ditto. 25325 * wtf/ThreadingWin.cpp: 25326 (WTF::lockAtomicallyInitializedStaticMutex): Added an assertion. 25327 25328 2008-11-04 Adam Roben <aroben (a] apple.com> 25329 25330 Windows build fix 25331 25332 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update 25333 the location of JSStaticScopeObject.{cpp,h}. 25334 25335 2008-11-04 Cameron Zwarich <zwarich (a] apple.com> 25336 25337 Reviewed by Alexey Proskuryakov. 25338 25339 Move AllInOneFile.cpp to the top level of JavaScriptCore. 25340 25341 * AllInOneFile.cpp: Copied from kjs/AllInOneFile.cpp. 25342 * GNUmakefile.am: 25343 * JavaScriptCore.xcodeproj/project.pbxproj: 25344 * kjs/AllInOneFile.cpp: Removed. 25345 25346 2008-11-04 Cameron Zwarich <zwarich (a] apple.com> 25347 25348 Rubber-stamped by Alexey Proskuryakov. 25349 25350 Add NodeInfo.h to the JavaScriptCore Xcode project. 25351 25352 * JavaScriptCore.xcodeproj/project.pbxproj: 25353 25354 2008-11-03 Cameron Zwarich <zwarich (a] apple.com> 25355 25356 Rubber-stamped by Maciej Stachowiak. 25357 25358 Move more files into the runtime subdirectory of JavaScriptCore. 25359 25360 * API/JSBase.cpp: 25361 * API/JSCallbackConstructor.cpp: 25362 * API/JSCallbackFunction.cpp: 25363 * API/JSClassRef.cpp: 25364 * API/OpaqueJSString.cpp: 25365 * GNUmakefile.am: 25366 * JavaScriptCore.pri: 25367 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 25368 * JavaScriptCore.xcodeproj/project.pbxproj: 25369 * JavaScriptCoreSources.bkl: 25370 * kjs/AllInOneFile.cpp: 25371 * kjs/ArgList.cpp: Removed. 25372 * kjs/ArgList.h: Removed. 25373 * kjs/Arguments.cpp: Removed. 25374 * kjs/Arguments.h: Removed. 25375 * kjs/BatchedTransitionOptimizer.h: Removed. 25376 * kjs/CollectorHeapIterator.h: Removed. 25377 * kjs/CommonIdentifiers.cpp: Removed. 25378 * kjs/CommonIdentifiers.h: Removed. 25379 * kjs/ExecState.cpp: Removed. 25380 * kjs/ExecState.h: Removed. 25381 * kjs/GetterSetter.cpp: Removed. 25382 * kjs/GetterSetter.h: Removed. 25383 * kjs/InitializeThreading.cpp: Removed. 25384 * kjs/InitializeThreading.h: Removed. 25385 * kjs/JSActivation.cpp: Removed. 25386 * kjs/JSActivation.h: Removed. 25387 * kjs/JSGlobalData.cpp: Removed. 25388 * kjs/JSGlobalData.h: Removed. 25389 * kjs/JSLock.cpp: Removed. 25390 * kjs/JSLock.h: Removed. 25391 * kjs/JSStaticScopeObject.cpp: Removed. 25392 * kjs/JSStaticScopeObject.h: Removed. 25393 * kjs/JSType.h: Removed. 25394 * kjs/PropertyNameArray.cpp: Removed. 25395 * kjs/PropertyNameArray.h: Removed. 25396 * kjs/ScopeChain.cpp: Removed. 25397 * kjs/ScopeChain.h: Removed. 25398 * kjs/ScopeChainMark.h: Removed. 25399 * kjs/SymbolTable.h: Removed. 25400 * kjs/Tracing.d: Removed. 25401 * kjs/Tracing.h: Removed. 25402 * runtime/ArgList.cpp: Copied from kjs/ArgList.cpp. 25403 * runtime/ArgList.h: Copied from kjs/ArgList.h. 25404 * runtime/Arguments.cpp: Copied from kjs/Arguments.cpp. 25405 * runtime/Arguments.h: Copied from kjs/Arguments.h. 25406 * runtime/BatchedTransitionOptimizer.h: Copied from kjs/BatchedTransitionOptimizer.h. 25407 * runtime/CollectorHeapIterator.h: Copied from kjs/CollectorHeapIterator.h. 25408 * runtime/CommonIdentifiers.cpp: Copied from kjs/CommonIdentifiers.cpp. 25409 * runtime/CommonIdentifiers.h: Copied from kjs/CommonIdentifiers.h. 25410 * runtime/ExecState.cpp: Copied from kjs/ExecState.cpp. 25411 * runtime/ExecState.h: Copied from kjs/ExecState.h. 25412 * runtime/GetterSetter.cpp: Copied from kjs/GetterSetter.cpp. 25413 * runtime/GetterSetter.h: Copied from kjs/GetterSetter.h. 25414 * runtime/InitializeThreading.cpp: Copied from kjs/InitializeThreading.cpp. 25415 * runtime/InitializeThreading.h: Copied from kjs/InitializeThreading.h. 25416 * runtime/JSActivation.cpp: Copied from kjs/JSActivation.cpp. 25417 * runtime/JSActivation.h: Copied from kjs/JSActivation.h. 25418 * runtime/JSGlobalData.cpp: Copied from kjs/JSGlobalData.cpp. 25419 * runtime/JSGlobalData.h: Copied from kjs/JSGlobalData.h. 25420 * runtime/JSLock.cpp: Copied from kjs/JSLock.cpp. 25421 * runtime/JSLock.h: Copied from kjs/JSLock.h. 25422 * runtime/JSStaticScopeObject.cpp: Copied from kjs/JSStaticScopeObject.cpp. 25423 * runtime/JSStaticScopeObject.h: Copied from kjs/JSStaticScopeObject.h. 25424 * runtime/JSType.h: Copied from kjs/JSType.h. 25425 * runtime/PropertyNameArray.cpp: Copied from kjs/PropertyNameArray.cpp. 25426 * runtime/PropertyNameArray.h: Copied from kjs/PropertyNameArray.h. 25427 * runtime/ScopeChain.cpp: Copied from kjs/ScopeChain.cpp. 25428 * runtime/ScopeChain.h: Copied from kjs/ScopeChain.h. 25429 * runtime/ScopeChainMark.h: Copied from kjs/ScopeChainMark.h. 25430 * runtime/SymbolTable.h: Copied from kjs/SymbolTable.h. 25431 * runtime/Tracing.d: Copied from kjs/Tracing.d. 25432 * runtime/Tracing.h: Copied from kjs/Tracing.h. 25433 25434 2008-11-03 Sam Weinig <sam (a] webkit.org> 25435 25436 Reviewed by Mark Rowe. 25437 25438 Move #define to turn on dumping StructureID statistics to StructureID.cpp so that 25439 turning it on does not require a full rebuild. 25440 25441 * runtime/StructureID.cpp: 25442 (JSC::StructureID::dumpStatistics): 25443 * runtime/StructureID.h: 25444 25445 2008-11-03 Alp Toker <alp (a] nuanti.com> 25446 25447 Reviewed by Geoffrey Garen. 25448 25449 Fix warning when building on Darwin without JSC_MULTIPLE_THREADS 25450 enabled. 25451 25452 * kjs/InitializeThreading.cpp: 25453 25454 2008-11-02 Matt Lilek <webkit (a] mattlilek.com> 25455 25456 Reviewed by Cameron Zwarich. 25457 25458 Bug 22042: REGRESSION(r38066): ASSERTION FAILED: source in CodeBlock 25459 <https://bugs.webkit.org/show_bug.cgi?id=22042> 25460 25461 Rename parameter name to avoid ASSERT. 25462 25463 * VM/CodeBlock.h: 25464 (JSC::CodeBlock::CodeBlock): 25465 (JSC::ProgramCodeBlock::ProgramCodeBlock): 25466 (JSC::EvalCodeBlock::EvalCodeBlock): 25467 25468 2008-11-02 Cameron Zwarich <zwarich (a] apple.com> 25469 25470 Reviewed by Oliver Hunt. 25471 25472 Bug 22035: Remove the '_' suffix on constructor parameter names for structs 25473 <https://bugs.webkit.org/show_bug.cgi?id=22035> 25474 25475 * API/JSCallbackObject.h: 25476 (JSC::JSCallbackObject::JSCallbackObjectData::JSCallbackObjectData): 25477 * VM/CodeBlock.h: 25478 (JSC::CodeBlock::CodeBlock): 25479 (JSC::ProgramCodeBlock::ProgramCodeBlock): 25480 (JSC::EvalCodeBlock::EvalCodeBlock): 25481 * wrec/WREC.h: 25482 (JSC::Quantifier::Quantifier): 25483 25484 2008-10-31 Cameron Zwarich <zwarich (a] apple.com> 25485 25486 Rubber-stamped by Geoff Garen. 25487 25488 Rename SourceRange.h to SourceCode.h. 25489 25490 * API/JSBase.cpp: 25491 * GNUmakefile.am: 25492 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 25493 * JavaScriptCore.xcodeproj/project.pbxproj: 25494 * VM/CodeBlock.h: 25495 * kjs/SourceCode.h: Copied from kjs/SourceRange.h. 25496 * kjs/SourceRange.h: Removed. 25497 * kjs/grammar.y: 25498 * kjs/lexer.h: 25499 * kjs/nodes.cpp: 25500 (JSC::ForInNode::ForInNode): 25501 * kjs/nodes.h: 25502 (JSC::ThrowableExpressionData::setExceptionSourceCode): 25503 25504 2008-10-31 Cameron Zwarich <zwarich (a] apple.com> 25505 25506 Reviewed by Darin Adler. 25507 25508 Bug 22019: Move JSC::Interpreter::shouldPrintExceptions() to WebCore::Console 25509 <https://bugs.webkit.org/show_bug.cgi?id=22019> 25510 25511 The JSC::Interpreter::shouldPrintExceptions() function is not used at 25512 all in JavaScriptCore, so it should be moved to WebCore::Console, its 25513 only user. 25514 25515 * JavaScriptCore.exp: 25516 * kjs/interpreter.cpp: 25517 * kjs/interpreter.h: 25518 25519 2008-10-31 Cameron Zwarich <zwarich (a] apple.com> 25520 25521 Not reviewed. 25522 25523 Windows build fix. 25524 25525 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 25526 25527 2008-10-31 Cameron Zwarich <zwarich (a] apple.com> 25528 25529 Rubber-stamped by Sam Weinig. 25530 25531 Remove the call to Interpreter::setShouldPrintExceptions() from the 25532 GlobalObject constructor in the shell. The shouldPrintExceptions() 25533 information is not used anywhere in JavaScriptCore, only in WebCore. 25534 25535 * kjs/Shell.cpp: 25536 (GlobalObject::GlobalObject): 25537 25538 2008-10-31 Kevin Ollivier <kevino (a] theolliviers.com> 25539 25540 wxMSW build fix. 25541 25542 * wtf/Threading.h: 25543 25544 2008-10-31 Cameron Zwarich <zwarich (a] apple.com> 25545 25546 Rubber-stamped by Sam Weinig. 25547 25548 Move more files from the kjs subdirectory of JavaScriptCore to the 25549 runtime subdirectory. 25550 25551 * GNUmakefile.am: 25552 * JavaScriptCore.pri: 25553 * JavaScriptCore.xcodeproj/project.pbxproj: 25554 * JavaScriptCoreSources.bkl: 25555 * kjs/AllInOneFile.cpp: 25556 * kjs/RegExpConstructor.cpp: Removed. 25557 * kjs/RegExpConstructor.h: Removed. 25558 * kjs/RegExpMatchesArray.h: Removed. 25559 * kjs/RegExpObject.cpp: Removed. 25560 * kjs/RegExpObject.h: Removed. 25561 * kjs/RegExpPrototype.cpp: Removed. 25562 * kjs/RegExpPrototype.h: Removed. 25563 * runtime/RegExpConstructor.cpp: Copied from kjs/RegExpConstructor.cpp. 25564 * runtime/RegExpConstructor.h: Copied from kjs/RegExpConstructor.h. 25565 * runtime/RegExpMatchesArray.h: Copied from kjs/RegExpMatchesArray.h. 25566 * runtime/RegExpObject.cpp: Copied from kjs/RegExpObject.cpp. 25567 * runtime/RegExpObject.h: Copied from kjs/RegExpObject.h. 25568 * runtime/RegExpPrototype.cpp: Copied from kjs/RegExpPrototype.cpp. 25569 * runtime/RegExpPrototype.h: Copied from kjs/RegExpPrototype.h. 25570 25571 2008-10-31 Mark Rowe <mrowe (a] apple.com> 25572 25573 Revert an incorrect portion of r38034. 25574 25575 * profiler/ProfilerServer.mm: 25576 25577 2008-10-31 Mark Rowe <mrowe (a] apple.com> 25578 25579 Fix the 64-bit build. 25580 25581 Disable strict aliasing in ProfilerServer.mm as it leads to the compiler being unhappy 25582 with the common Obj-C idiom self = [super init]; 25583 25584 * JavaScriptCore.xcodeproj/project.pbxproj: 25585 25586 2008-10-31 Cameron Zwarich <zwarich (a] apple.com> 25587 25588 Reviewed by Alexey Proskuryakov. 25589 25590 Change a header guard to match our coding style. 25591 25592 * kjs/InitializeThreading.h: 25593 25594 2008-10-30 Geoffrey Garen <ggaren (a] apple.com> 25595 25596 Reviewed by Oliver Hunt. 25597 25598 Fixed a small bit of https://bugs.webkit.org/show_bug.cgi?id=21962 25599 AST uses way too much memory 25600 25601 Removed a word from StatementNode by nixing LabelStack and turning it 25602 into a compile-time data structure managed by CodeGenerator. 25603 25604 v8 tests and SunSpider, run by Gavin, report no change. 25605 25606 * GNUmakefile.am: 25607 * JavaScriptCore.order: 25608 * JavaScriptCore.pri: 25609 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 25610 * JavaScriptCore.xcodeproj/project.pbxproj: 25611 * kjs/AllInOneFile.cpp: 25612 * JavaScriptCoreSources.bkl: I sure hope this builds! 25613 25614 * VM/CodeGenerator.cpp: 25615 (JSC::CodeGenerator::CodeGenerator): 25616 (JSC::CodeGenerator::newLabelScope): 25617 (JSC::CodeGenerator::breakTarget): 25618 (JSC::CodeGenerator::continueTarget): 25619 * VM/CodeGenerator.h: Nixed the JumpContext system because it depended 25620 on a LabelStack in the AST, and it was a little cumbersome on the client 25621 side. Replaced with LabelScope, which tracks all break / continue 25622 information in the CodeGenerator, just like we track LabelIDs and other 25623 stacks of compile-time data. 25624 25625 * kjs/LabelScope.h: Added. 25626 (JSC::LabelScope::): 25627 (JSC::LabelScope::LabelScope): 25628 (JSC::LabelScope::ref): 25629 (JSC::LabelScope::deref): 25630 (JSC::LabelScope::refCount): 25631 (JSC::LabelScope::breakTarget): 25632 (JSC::LabelScope::continueTarget): 25633 (JSC::LabelScope::type): 25634 (JSC::LabelScope::name): 25635 (JSC::LabelScope::scopeDepth): Simple abstraction for holding everything 25636 you might want to know about a break-able / continue-able scope. 25637 25638 * kjs/LabelStack.cpp: Removed. 25639 * kjs/LabelStack.h: Removed. 25640 25641 * kjs/grammar.y: No need to push labels at parse time -- we don't store 25642 LabelStacks in the AST anymore. 25643 25644 * kjs/nodes.cpp: 25645 (JSC::DoWhileNode::emitCode): 25646 (JSC::WhileNode::emitCode): 25647 (JSC::ForNode::emitCode): 25648 (JSC::ForInNode::emitCode): 25649 (JSC::ContinueNode::emitCode): 25650 (JSC::BreakNode::emitCode): 25651 (JSC::SwitchNode::emitCode): 25652 (JSC::LabelNode::emitCode): 25653 * kjs/nodes.h: 25654 (JSC::StatementNode::): 25655 (JSC::LabelNode::): Use LabelScope where we used to use JumpContext. 25656 Simplified a bunch of code. Touched up label-related error messages a 25657 bit. 25658 25659 * kjs/nodes2string.cpp: 25660 (JSC::LabelNode::streamTo): Updated for rename. 25661 25662 2008-10-31 Cameron Zwarich <zwarich (a] apple.com> 25663 25664 Reviewed by Darin Adler. 25665 25666 Bug 22005: Move StructureIDChain into its own file 25667 <https://bugs.webkit.org/show_bug.cgi?id=22005> 25668 25669 * GNUmakefile.am: 25670 * JavaScriptCore.pri: 25671 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 25672 * JavaScriptCore.xcodeproj/project.pbxproj: 25673 * JavaScriptCoreSources.bkl: 25674 * runtime/StructureID.cpp: 25675 * runtime/StructureID.h: 25676 * runtime/StructureIDChain.cpp: Copied from runtime/StructureID.cpp. 25677 * runtime/StructureIDChain.h: Copied from runtime/StructureID.h. 25678 25679 2008-10-31 Steve Falkenburg <sfalken (a] apple.com> 25680 25681 Build fix. 25682 25683 * JavaScriptCore.vcproj/jsc/jsc.vcproj: 25684 25685 2008-10-31 Steve Falkenburg <sfalken (a] apple.com> 25686 25687 Build fix. 25688 25689 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 25690 25691 2008-10-31 Darin Adler <darin (a] apple.com> 25692 25693 Reviewed by Dan Bernstein. 25694 25695 - fix storage leak seen on buildbot 25696 25697 Some other cleanup too. The storage leak was caused by the fact 25698 that HashTraits<CallIdentifier>::needsDestruction was false, so 25699 the call identifier objects didn't get deleted. 25700 25701 * profiler/CallIdentifier.h: 25702 25703 Added a default constructor to create empty call identifiers. 25704 25705 Changed the normal constructor to use const UString& 25706 to avoid extra copying and reference count thrash. 25707 25708 Removed the explicit copy constructor definition, since it's what 25709 the compiler will automatically generate. (Rule of thumb: Either 25710 you need both a custom copy constructor and a custom assignment 25711 operator, or neither.) 25712 25713 Moved the CallIdentifier hash function out of the WTF namespace; 25714 there's no reason to put it there. 25715 25716 Changed the CallIdentifier hash function to be a struct rather than 25717 a specialization of the IntHash struct template. Having it be 25718 a specialization made no sense, since CallIdentifier is not an integer, 25719 and did no good. 25720 25721 Removed explicit definition of emptyValueIsZero in the hash traits, 25722 since inheriting from GenericHashTraits already makes that false. 25723 25724 Removed explicit definition of emptyValue, instead relying on the 25725 default constructor and GenericHashTraits. 25726 25727 Removed explicit definition of needsDestruction, because we want it 25728 to have its default value: true, not false. This fixes the leak! 25729 25730 Changed constructDeletedValue and isDeletedValue to use a line number 25731 of numeric_limits<unsigned>::max() to indicate a value is deleted. 25732 Previously this used empty strings for the empty value and null strings 25733 for the deleted value, but it's more efficient to use null for both. 25734 25735 2008-10-31 Timothy Hatcher <timothy (a] apple.com> 25736 25737 Emit the WillExecuteStatement debugger hook before the for loop body 25738 when the statement node for the body isn't a block. This allows 25739 breakpoints on those statements in the Web Inspector. 25740 25741 https://bugs.webkit.org/show_bug.cgi?id=22004 25742 25743 Reviewed by Darin Adler. 25744 25745 * kjs/nodes.cpp: 25746 (JSC::ForNode::emitCode): Emit the WillExecuteStatement 25747 debugger hook before the statement node if isn't a block. 25748 Also emit the WillExecuteStatement debugger hook for the 25749 loop as the first op-code. 25750 (JSC::ForInNode::emitCode): Ditto. 25751 25752 2008-10-31 Timothy Hatcher <timothy (a] apple.com> 25753 25754 Fixes console warnings about not having an autorelease pool. 25755 Also fixes the build for Snow Leopard, by including individual 25756 Foundation headers instead of Foundation.h. 25757 25758 https://bugs.webkit.org/show_bug.cgi?id=21995 25759 25760 Reviewed by Oliver Hunt. 25761 25762 * profiler/ProfilerServer.mm: 25763 (-[ProfilerServer init]): Create a NSAutoreleasePool and drain it. 25764 25765 2008-10-31 Cameron Zwarich <zwarich (a] apple.com> 25766 25767 Not reviewed. 25768 25769 Speculative wxWindows build fix. 25770 25771 * JavaScriptCoreSources.bkl: 25772 * jscore.bkl: 25773 25774 2008-10-31 Cameron Zwarich <zwarich (a] apple.com> 25775 25776 Rubber-stamped by Maciej Stachowiak. 25777 25778 Move VM/JSPropertyNameIterator.cpp and VM/JSPropertyNameIterator.h to 25779 the runtime directory. 25780 25781 * GNUmakefile.am: 25782 * JavaScriptCore.pri: 25783 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 25784 * JavaScriptCore.xcodeproj/project.pbxproj: 25785 * JavaScriptCoreSources.bkl: 25786 * VM/JSPropertyNameIterator.cpp: Removed. 25787 * VM/JSPropertyNameIterator.h: Removed. 25788 * runtime/JSPropertyNameIterator.cpp: Copied from VM/JSPropertyNameIterator.cpp. 25789 * runtime/JSPropertyNameIterator.h: Copied from VM/JSPropertyNameIterator.h. 25790 25791 2008-10-31 Cameron Zwarich <zwarich (a] apple.com> 25792 25793 Not reviewed. 25794 25795 Speculative wxWindows build fix. 25796 25797 * jscore.bkl: 25798 25799 2008-10-30 Mark Rowe <mrowe (a] apple.com> 25800 25801 Reviewed by Jon Homeycutt. 25802 25803 Explicitly default to building for only the native architecture in debug and release builds. 25804 25805 * Configurations/DebugRelease.xcconfig: 25806 25807 2008-10-30 Cameron Zwarich <zwarich (a] apple.com> 25808 25809 Rubber-stamped by Sam Weinig. 25810 25811 Create a debugger directory in JavaScriptCore and move the relevant 25812 files to it. 25813 25814 * GNUmakefile.am: 25815 * JavaScriptCore.pri: 25816 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 25817 * JavaScriptCore.xcodeproj/project.pbxproj: 25818 * VM/CodeBlock.cpp: 25819 * VM/CodeGenerator.h: 25820 * VM/Machine.cpp: 25821 * debugger: Added. 25822 * debugger/Debugger.cpp: Copied from kjs/debugger.cpp. 25823 * debugger/Debugger.h: Copied from kjs/debugger.h. 25824 * debugger/DebuggerCallFrame.cpp: Copied from kjs/DebuggerCallFrame.cpp. 25825 * debugger/DebuggerCallFrame.h: Copied from kjs/DebuggerCallFrame.h. 25826 * kjs/AllInOneFile.cpp: 25827 * kjs/DebuggerCallFrame.cpp: Removed. 25828 * kjs/DebuggerCallFrame.h: Removed. 25829 * kjs/Parser.cpp: 25830 * kjs/Parser.h: 25831 * kjs/debugger.cpp: Removed. 25832 * kjs/debugger.h: Removed. 25833 * kjs/interpreter.cpp: 25834 * kjs/nodes.cpp: 25835 * runtime/FunctionConstructor.cpp: 25836 * runtime/JSGlobalObject.cpp: 25837 25838 2008-10-30 Benjamin K. Stuhl <bks24 (a] cornell.edu> 25839 25840 gcc 4.3.3/linux-x86 generates "suggest parentheses around && within ||" 25841 warnings; add some parentheses to disambiguate things. No functional 25842 changes, so no tests. 25843 25844 https://bugs.webkit.org/show_bug.cgi?id=21973 25845 Add parentheses to clean up some gcc warnings 25846 25847 Reviewed by Dan Bernstein. 25848 25849 * wtf/ASCIICType.h: 25850 (WTF::isASCIIAlphanumeric): 25851 (WTF::isASCIIHexDigit): 25852 25853 2008-10-30 Kevin Lindeman <klindeman (a] apple.com> 25854 25855 Adds ProfilerServer, which is a distributed notification listener 25856 that allows starting and stopping the profiler remotely for use 25857 in conjunction with the profiler's DTace probes. 25858 25859 https://bugs.webkit.org/show_bug.cgi?id=21719 25860 25861 Reviewed by Timothy Hatcher. 25862 25863 * JavaScriptCore.xcodeproj/project.pbxproj: 25864 * kjs/JSGlobalData.cpp: 25865 (JSC::JSGlobalData::JSGlobalData): Calls startProfilerServerIfNeeded. 25866 * profiler/ProfilerServer.h: Added. 25867 * profiler/ProfilerServer.mm: Added. 25868 (+[ProfilerServer sharedProfileServer]): 25869 (-[ProfilerServer init]): 25870 (-[ProfilerServer startProfiling]): 25871 (-[ProfilerServer stopProfiling]): 25872 (JSC::startProfilerServerIfNeeded): 25873 25874 2008-10-30 Kevin Ollivier <kevino (a] theolliviers.com> 25875 25876 wx build fix after PropertyMap and StructureID merge. 25877 25878 * JavaScriptCoreSources.bkl: 25879 25880 2008-10-30 Cameron Zwarich <zwarich (a] apple.com> 25881 25882 Reviewed by Mark Rowe. 25883 25884 Change the JavaScriptCore Xcode project to use relative paths for the 25885 PCRE source files. 25886 25887 * JavaScriptCore.xcodeproj/project.pbxproj: 25888 25889 2008-10-30 Sam Weinig <sam (a] webkit.org> 25890 25891 Reviewed by Cameron Zwarich and Geoffrey Garen. 25892 25893 Fix for https://bugs.webkit.org/show_bug.cgi?id=21989 25894 Merge PropertyMap and StructureID 25895 25896 - Move PropertyMap code into StructureID in preparation for lazily 25897 creating the map on gets. 25898 - Make remove with transition explicit by adding removePropertyTransition. 25899 - Make the put/remove without transition explicit. 25900 - Make cache invalidation part of put/remove without transition. 25901 25902 1% speedup on SunSpider; 0.5% speedup on v8 suite. 25903 25904 * GNUmakefile.am: 25905 * JavaScriptCore.exp: 25906 * JavaScriptCore.pri: 25907 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 25908 * JavaScriptCore.xcodeproj/project.pbxproj: 25909 * JavaScriptCoreSources.bkl: 25910 * kjs/AllInOneFile.cpp: 25911 * kjs/identifier.h: 25912 * runtime/JSObject.cpp: 25913 (JSC::JSObject::removeDirect): 25914 * runtime/JSObject.h: 25915 (JSC::JSObject::putDirect): 25916 * runtime/PropertyMap.cpp: Removed. 25917 * runtime/PropertyMap.h: Removed. 25918 * runtime/PropertyMapHashTable.h: Copied from runtime/PropertyMap.h. 25919 * runtime/StructureID.cpp: 25920 (JSC::StructureID::dumpStatistics): 25921 (JSC::StructureID::StructureID): 25922 (JSC::StructureID::~StructureID): 25923 (JSC::StructureID::getEnumerablePropertyNames): 25924 (JSC::StructureID::addPropertyTransition): 25925 (JSC::StructureID::removePropertyTransition): 25926 (JSC::StructureID::toDictionaryTransition): 25927 (JSC::StructureID::changePrototypeTransition): 25928 (JSC::StructureID::getterSetterTransition): 25929 (JSC::StructureID::addPropertyWithoutTransition): 25930 (JSC::StructureID::removePropertyWithoutTransition): 25931 (JSC::PropertyMapStatisticsExitLogger::~PropertyMapStatisticsExitLogger): 25932 (JSC::StructureID::checkConsistency): 25933 (JSC::StructureID::copyPropertyTable): 25934 (JSC::StructureID::get): 25935 (JSC::StructureID::put): 25936 (JSC::StructureID::remove): 25937 (JSC::StructureID::insertIntoPropertyMapHashTable): 25938 (JSC::StructureID::expandPropertyMapHashTable): 25939 (JSC::StructureID::createPropertyMapHashTable): 25940 (JSC::StructureID::rehashPropertyMapHashTable): 25941 (JSC::comparePropertyMapEntryIndices): 25942 (JSC::StructureID::getEnumerablePropertyNamesInternal): 25943 * runtime/StructureID.h: 25944 (JSC::StructureID::propertyStorageSize): 25945 (JSC::StructureID::isEmpty): 25946 (JSC::StructureID::get): 25947 25948 2008-10-30 Cameron Zwarich <zwarich (a] apple.com> 25949 25950 Reviewed by Oliver Hunt. 25951 25952 Bug 21987: CTI::putDoubleResultToJSNumberCellOrJSImmediate() hardcodes its result register 25953 <https://bugs.webkit.org/show_bug.cgi?id=21987> 25954 25955 CTI::putDoubleResultToJSNumberCellOrJSImmediate() hardcodes its result 25956 register as ecx, but it should be tempReg1, which is ecx at all of its 25957 callsites. 25958 25959 * VM/CTI.cpp: 25960 (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): 25961 25962 2008-10-30 Cameron Zwarich <zwarich (a] apple.com> 25963 25964 Reviewed by Sam Weinig. 25965 25966 Bug 21985: Opcodes should use eax as their destination register whenever possible 25967 <https://bugs.webkit.org/show_bug.cgi?id=21985> 25968 25969 Change more opcodes to use eax as the register for their final result, 25970 and change calls to emitPutResult() that pass eax to rely on the default 25971 value of eax. 25972 25973 * VM/CTI.cpp: 25974 (JSC::CTI::privateCompileMainPass): 25975 25976 2008-10-30 Alp Toker <alp (a] nuanti.com> 25977 25978 Build fix attempt for older gcc on the trunk-mac-intel build bot 25979 (error: initializer for scalar variable requires one element). 25980 25981 Modify the initializer syntax slightly with an additional comma. 25982 25983 * VM/Machine.cpp: 25984 (JSC::Machine::cti_op_call_JSFunction): 25985 (JSC::Machine::cti_op_construct_JSConstruct): 25986 (JSC::Machine::cti_op_resolve_func): 25987 (JSC::Machine::cti_op_post_inc): 25988 (JSC::Machine::cti_op_resolve_with_base): 25989 (JSC::Machine::cti_op_post_dec): 25990 25991 2008-10-30 Alp Toker <alp (a] nuanti.com> 25992 25993 Reviewed by Alexey Proskuryakov. 25994 25995 https://bugs.webkit.org/show_bug.cgi?id=21571 25996 VoidPtrPair breaks CTI on Linux 25997 25998 The VoidPtrPair return change made in r37457 does not work on Linux 25999 since POD structs aren't passed in registers. 26000 26001 This patch uses a union to vectorize VoidPtrPair to a uint64_t and 26002 matches Darwin/MSVC fixing CTI/WREC on Linux. 26003 26004 Alexey reports no measurable change in Mac performance with this fix. 26005 26006 * VM/Machine.cpp: 26007 (JSC::Machine::cti_op_call_JSFunction): 26008 (JSC::Machine::cti_op_construct_JSConstruct): 26009 (JSC::Machine::cti_op_resolve_func): 26010 (JSC::Machine::cti_op_post_inc): 26011 (JSC::Machine::cti_op_resolve_with_base): 26012 (JSC::Machine::cti_op_post_dec): 26013 * VM/Machine.h: 26014 (JSC::): 26015 26016 2008-10-29 Oliver Hunt <oliver (a] apple.com> 26017 26018 Reviewed by Geoff Garen. 26019 26020 Initial work to reduce cost of JSNumberCell allocation 26021 26022 This does the initial work needed to bring more of number 26023 allocation into CTI code directly, rather than just falling 26024 back onto the slow paths if we can't guarantee that a number 26025 cell can be reused. 26026 26027 Initial implementation only used by op_negate to make sure 26028 it all works. In a negate heavy (though not dominated) test 26029 it results in a 10% win in the non-reusable cell case. 26030 26031 * VM/CTI.cpp: 26032 (JSC::): 26033 (JSC::CTI::emitAllocateNumber): 26034 (JSC::CTI::emitNakedFastCall): 26035 (JSC::CTI::emitArithIntToImmWithJump): 26036 (JSC::CTI::privateCompileMainPass): 26037 (JSC::CTI::privateCompileSlowCases): 26038 * VM/CTI.h: 26039 * VM/CodeBlock.cpp: 26040 (JSC::CodeBlock::dump): 26041 * VM/CodeGenerator.cpp: 26042 (JSC::CodeGenerator::emitUnaryOp): 26043 * VM/CodeGenerator.h: 26044 (JSC::CodeGenerator::emitToJSNumber): 26045 (JSC::CodeGenerator::emitTypeOf): 26046 (JSC::CodeGenerator::emitGetPropertyNames): 26047 * VM/Machine.cpp: 26048 (JSC::Machine::privateExecute): 26049 * VM/Machine.h: 26050 * kjs/ResultType.h: 26051 (JSC::ResultType::isReusableNumber): 26052 (JSC::ResultType::toInt): 26053 * kjs/nodes.cpp: 26054 (JSC::UnaryOpNode::emitCode): 26055 (JSC::BinaryOpNode::emitCode): 26056 (JSC::EqualNode::emitCode): 26057 * masm/X86Assembler.h: 26058 (JSC::X86Assembler::): 26059 (JSC::X86Assembler::negl_r): 26060 (JSC::X86Assembler::xorpd_mr): 26061 * runtime/JSNumberCell.h: 26062 (JSC::JSNumberCell::JSNumberCell): 26063 26064 2008-10-29 Steve Falkenburg <sfalken (a] apple.com> 26065 26066 <rdar://problem/6326563> Crash on launch 26067 26068 For Windows, export explicit functions rather than exporting data for atomicallyInitializedStaticMutex. 26069 26070 Exporting data from a DLL on Windows requires specifying __declspec(dllimport) in the header used by 26071 callers, but __declspec(dllexport) when defined in the DLL implementation. By instead exporting 26072 the explicit lock/unlock functions, we can avoid this. 26073 26074 Fixes a crash on launch, since we were previously erroneously exporting atomicallyInitializedStaticMutex as a function. 26075 26076 Reviewed by Darin Adler. 26077 26078 * wtf/Threading.h: 26079 (WTF::lockAtomicallyInitializedStaticMutex): 26080 (WTF::unlockAtomicallyInitializedStaticMutex): 26081 * wtf/ThreadingWin.cpp: 26082 (WTF::lockAtomicallyInitializedStaticMutex): 26083 (WTF::unlockAtomicallyInitializedStaticMutex): 26084 26085 2008-10-29 Sam Weinig <sam (a] webkit.org> 26086 26087 Reviewed by Oliver Hunt. 26088 26089 Remove direct use of PropertyMap. 26090 26091 * JavaScriptCore.exp: 26092 * runtime/JSObject.cpp: 26093 (JSC::JSObject::mark): 26094 (JSC::JSObject::put): 26095 (JSC::JSObject::deleteProperty): 26096 (JSC::JSObject::getPropertyAttributes): 26097 (JSC::JSObject::removeDirect): 26098 * runtime/JSObject.h: 26099 (JSC::JSObject::getDirect): 26100 (JSC::JSObject::getDirectLocation): 26101 (JSC::JSObject::hasCustomProperties): 26102 (JSC::JSObject::JSObject): 26103 (JSC::JSObject::putDirect): 26104 * runtime/PropertyMap.cpp: 26105 (JSC::PropertyMap::get): 26106 * runtime/PropertyMap.h: 26107 (JSC::PropertyMap::isEmpty): 26108 (JSC::PropertyMap::get): 26109 * runtime/StructureID.cpp: 26110 (JSC::StructureID::dumpStatistics): 26111 * runtime/StructureID.h: 26112 (JSC::StructureID::propertyStorageSize): 26113 (JSC::StructureID::get): 26114 (JSC::StructureID::put): 26115 (JSC::StructureID::remove): 26116 (JSC::StructureID::isEmpty): 26117 26118 2008-10-29 Sam Weinig <sam (a] webkit.org> 26119 26120 Reviewed by Geoffrey Garen. 26121 26122 Rename and move the StructureID transition table to its own file. 26123 26124 * GNUmakefile.am: 26125 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 26126 * JavaScriptCore.xcodeproj/project.pbxproj: 26127 * runtime/StructureID.cpp: 26128 (JSC::StructureID::addPropertyTransition): 26129 * runtime/StructureID.h: 26130 (JSC::StructureID::): 26131 * runtime/StructureIDTransitionTable.h: Copied from runtime/StructureID.h. 26132 (JSC::StructureIDTransitionTableHash::hash): 26133 (JSC::StructureIDTransitionTableHash::equal): 26134 26135 2008-10-29 Sam Weinig <sam (a] webkit.org> 26136 26137 Reviewed by Cameron Zwarich. 26138 26139 Fix for https://bugs.webkit.org/show_bug.cgi?id=21958 26140 Pack bits in StructureID to reduce the size of each StructureID by 2 words. 26141 26142 * runtime/PropertyMap.h: 26143 (JSC::PropertyMap::propertyMapSize): 26144 * runtime/StructureID.cpp: 26145 (JSC::StructureID::dumpStatistics): Add additional size statistics when dumping. 26146 (JSC::StructureID::StructureID): 26147 * runtime/StructureID.h: 26148 26149 2008-10-29 Kevin Ollivier <kevino (a] theolliviers.com> 26150 26151 wx build fixes after addition of runtime and ImageBuffer changes. 26152 26153 * JavaScriptCoreSources.bkl: 26154 * jscore.bkl: 26155 26156 2008-10-29 Timothy Hatcher <timothy (a] apple.com> 26157 26158 Emit the WillExecuteStatement debugger hook before the "else" body 26159 when there is no block for the "else" body. This allows breakpoints 26160 on those statements in the Web Inspector. 26161 26162 https://bugs.webkit.org/show_bug.cgi?id=21944 26163 26164 Reviewed by Maciej Stachowiak. 26165 26166 * kjs/nodes.cpp: 26167 (JSC::IfElseNode::emitCode): Emit the WillExecuteStatement 26168 debugger hook before the else node if isn't a block. 26169 26170 2008-10-29 Alexey Proskuryakov <ap (a] webkit.org> 26171 26172 Build fix. 26173 26174 * JavaScriptCore.exp: Export HashTable::deleteTable(). 26175 26176 2008-10-28 Alp Toker <alp (a] nuanti.com> 26177 26178 Fix builddir != srcdir builds after kjs -> runtime breakage. Sources 26179 may now be generated in both kjs/ and runtime/. 26180 26181 Also sort the sources list for readability. 26182 26183 * GNUmakefile.am: 26184 26185 2008-10-28 Alp Toker <alp (a] nuanti.com> 26186 26187 Reviewed by Cameron Zwarich. 26188 26189 Build fix attempt after kjs -> runtime rename. 26190 26191 * GNUmakefile.am: 26192 26193 2008-10-28 Cameron Zwarich <zwarich (a] apple.com> 26194 26195 Not reviewed. 26196 26197 Remove a duplicate includes directory. 26198 26199 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 26200 26201 2008-10-28 Cameron Zwarich <zwarich (a] apple.com> 26202 26203 Not reviewed. 26204 26205 Attempt to fix the Windows build. 26206 26207 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 26208 * JavaScriptCore.vcproj/jsc/jsc.vcproj: 26209 26210 2008-10-28 Dan Bernstein <mitz (a] apple.com> 26211 26212 Reviewed by Mark Rowe. 26213 26214 - export WTF::atomicallyInitializedStaticMutex 26215 26216 * JavaScriptCore.exp: 26217 26218 2008-10-28 Geoffrey Garen <ggaren (a] apple.com> 26219 26220 Reviewed by Cameron Zwarich. 26221 26222 Fixed CodeBlock dumping to accurately report constant register indices. 26223 26224 * VM/CodeBlock.cpp: 26225 (JSC::CodeBlock::dump): 26226 26227 2008-10-28 Cameron Zwarich <zwarich (a] apple.com> 26228 26229 Not reviewed. 26230 26231 More Qt build fixes. 26232 26233 * JavaScriptCore.pri: 26234 26235 2008-10-28 Cameron Zwarich <zwarich (a] apple.com> 26236 26237 Not reviewed. 26238 26239 Fix the Qt build, hopefully for real this time. 26240 26241 * JavaScriptCore.pri: 26242 26243 2008-10-28 Cameron Zwarich <zwarich (a] apple.com> 26244 26245 Not reviewed. 26246 26247 Fix the Qt build. 26248 26249 * JavaScriptCore.pri: 26250 26251 2008-10-28 Cameron Zwarich <zwarich (a] apple.com> 26252 26253 Not reviewed. 26254 26255 Fix the Windows build. 26256 26257 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 26258 26259 2008-10-28 Cameron Zwarich <zwarich (a] apple.com> 26260 26261 Rubber-stamped by Sam Weinig. 26262 26263 Create a runtime directory in JavaScriptCore and begin moving files to 26264 it. This is the first step towards removing the kjs directory and 26265 placing files in more meaningful subdirectories of JavaScriptCore. 26266 26267 * API/JSBase.cpp: 26268 * API/JSCallbackConstructor.cpp: 26269 * API/JSCallbackConstructor.h: 26270 * API/JSCallbackFunction.cpp: 26271 * API/JSClassRef.cpp: 26272 * API/JSClassRef.h: 26273 * API/JSStringRefCF.cpp: 26274 * API/JSValueRef.cpp: 26275 * API/OpaqueJSString.cpp: 26276 * DerivedSources.make: 26277 * GNUmakefile.am: 26278 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 26279 * JavaScriptCore.xcodeproj/project.pbxproj: 26280 * kjs/AllInOneFile.cpp: 26281 * kjs/ArrayConstructor.cpp: Removed. 26282 * kjs/ArrayConstructor.h: Removed. 26283 * kjs/ArrayPrototype.cpp: Removed. 26284 * kjs/ArrayPrototype.h: Removed. 26285 * kjs/BooleanConstructor.cpp: Removed. 26286 * kjs/BooleanConstructor.h: Removed. 26287 * kjs/BooleanObject.cpp: Removed. 26288 * kjs/BooleanObject.h: Removed. 26289 * kjs/BooleanPrototype.cpp: Removed. 26290 * kjs/BooleanPrototype.h: Removed. 26291 * kjs/CallData.cpp: Removed. 26292 * kjs/CallData.h: Removed. 26293 * kjs/ClassInfo.h: Removed. 26294 * kjs/ConstructData.cpp: Removed. 26295 * kjs/ConstructData.h: Removed. 26296 * kjs/DateConstructor.cpp: Removed. 26297 * kjs/DateConstructor.h: Removed. 26298 * kjs/DateInstance.cpp: Removed. 26299 * kjs/DateInstance.h: Removed. 26300 * kjs/DateMath.cpp: Removed. 26301 * kjs/DateMath.h: Removed. 26302 * kjs/DatePrototype.cpp: Removed. 26303 * kjs/DatePrototype.h: Removed. 26304 * kjs/Error.cpp: Removed. 26305 * kjs/Error.h: Removed. 26306 * kjs/ErrorConstructor.cpp: Removed. 26307 * kjs/ErrorConstructor.h: Removed. 26308 * kjs/ErrorInstance.cpp: Removed. 26309 * kjs/ErrorInstance.h: Removed. 26310 * kjs/ErrorPrototype.cpp: Removed. 26311 * kjs/ErrorPrototype.h: Removed. 26312 * kjs/FunctionConstructor.cpp: Removed. 26313 * kjs/FunctionConstructor.h: Removed. 26314 * kjs/FunctionPrototype.cpp: Removed. 26315 * kjs/FunctionPrototype.h: Removed. 26316 * kjs/GlobalEvalFunction.cpp: Removed. 26317 * kjs/GlobalEvalFunction.h: Removed. 26318 * kjs/InternalFunction.cpp: Removed. 26319 * kjs/InternalFunction.h: Removed. 26320 * kjs/JSArray.cpp: Removed. 26321 * kjs/JSArray.h: Removed. 26322 * kjs/JSCell.cpp: Removed. 26323 * kjs/JSCell.h: Removed. 26324 * kjs/JSFunction.cpp: Removed. 26325 * kjs/JSFunction.h: Removed. 26326 * kjs/JSGlobalObject.cpp: Removed. 26327 * kjs/JSGlobalObject.h: Removed. 26328 * kjs/JSGlobalObjectFunctions.cpp: Removed. 26329 * kjs/JSGlobalObjectFunctions.h: Removed. 26330 * kjs/JSImmediate.cpp: Removed. 26331 * kjs/JSImmediate.h: Removed. 26332 * kjs/JSNotAnObject.cpp: Removed. 26333 * kjs/JSNotAnObject.h: Removed. 26334 * kjs/JSNumberCell.cpp: Removed. 26335 * kjs/JSNumberCell.h: Removed. 26336 * kjs/JSObject.cpp: Removed. 26337 * kjs/JSObject.h: Removed. 26338 * kjs/JSString.cpp: Removed. 26339 * kjs/JSString.h: Removed. 26340 * kjs/JSValue.cpp: Removed. 26341 * kjs/JSValue.h: Removed. 26342 * kjs/JSVariableObject.cpp: Removed. 26343 * kjs/JSVariableObject.h: Removed. 26344 * kjs/JSWrapperObject.cpp: Removed. 26345 * kjs/JSWrapperObject.h: Removed. 26346 * kjs/MathObject.cpp: Removed. 26347 * kjs/MathObject.h: Removed. 26348 * kjs/NativeErrorConstructor.cpp: Removed. 26349 * kjs/NativeErrorConstructor.h: Removed. 26350 * kjs/NativeErrorPrototype.cpp: Removed. 26351 * kjs/NativeErrorPrototype.h: Removed. 26352 * kjs/NumberConstructor.cpp: Removed. 26353 * kjs/NumberConstructor.h: Removed. 26354 * kjs/NumberObject.cpp: Removed. 26355 * kjs/NumberObject.h: Removed. 26356 * kjs/NumberPrototype.cpp: Removed. 26357 * kjs/NumberPrototype.h: Removed. 26358 * kjs/ObjectConstructor.cpp: Removed. 26359 * kjs/ObjectConstructor.h: Removed. 26360 * kjs/ObjectPrototype.cpp: Removed. 26361 * kjs/ObjectPrototype.h: Removed. 26362 * kjs/PropertyMap.cpp: Removed. 26363 * kjs/PropertyMap.h: Removed. 26364 * kjs/PropertySlot.cpp: Removed. 26365 * kjs/PropertySlot.h: Removed. 26366 * kjs/PrototypeFunction.cpp: Removed. 26367 * kjs/PrototypeFunction.h: Removed. 26368 * kjs/PutPropertySlot.h: Removed. 26369 * kjs/SmallStrings.cpp: Removed. 26370 * kjs/SmallStrings.h: Removed. 26371 * kjs/StringConstructor.cpp: Removed. 26372 * kjs/StringConstructor.h: Removed. 26373 * kjs/StringObject.cpp: Removed. 26374 * kjs/StringObject.h: Removed. 26375 * kjs/StringObjectThatMasqueradesAsUndefined.h: Removed. 26376 * kjs/StringPrototype.cpp: Removed. 26377 * kjs/StringPrototype.h: Removed. 26378 * kjs/StructureID.cpp: Removed. 26379 * kjs/StructureID.h: Removed. 26380 * kjs/completion.h: 26381 * kjs/interpreter.h: 26382 * runtime: Added. 26383 * runtime/ArrayConstructor.cpp: Copied from kjs/ArrayConstructor.cpp. 26384 * runtime/ArrayConstructor.h: Copied from kjs/ArrayConstructor.h. 26385 * runtime/ArrayPrototype.cpp: Copied from kjs/ArrayPrototype.cpp. 26386 * runtime/ArrayPrototype.h: Copied from kjs/ArrayPrototype.h. 26387 * runtime/BooleanConstructor.cpp: Copied from kjs/BooleanConstructor.cpp. 26388 * runtime/BooleanConstructor.h: Copied from kjs/BooleanConstructor.h. 26389 * runtime/BooleanObject.cpp: Copied from kjs/BooleanObject.cpp. 26390 * runtime/BooleanObject.h: Copied from kjs/BooleanObject.h. 26391 * runtime/BooleanPrototype.cpp: Copied from kjs/BooleanPrototype.cpp. 26392 * runtime/BooleanPrototype.h: Copied from kjs/BooleanPrototype.h. 26393 * runtime/CallData.cpp: Copied from kjs/CallData.cpp. 26394 * runtime/CallData.h: Copied from kjs/CallData.h. 26395 * runtime/ClassInfo.h: Copied from kjs/ClassInfo.h. 26396 * runtime/ConstructData.cpp: Copied from kjs/ConstructData.cpp. 26397 * runtime/ConstructData.h: Copied from kjs/ConstructData.h. 26398 * runtime/DateConstructor.cpp: Copied from kjs/DateConstructor.cpp. 26399 * runtime/DateConstructor.h: Copied from kjs/DateConstructor.h. 26400 * runtime/DateInstance.cpp: Copied from kjs/DateInstance.cpp. 26401 * runtime/DateInstance.h: Copied from kjs/DateInstance.h. 26402 * runtime/DateMath.cpp: Copied from kjs/DateMath.cpp. 26403 * runtime/DateMath.h: Copied from kjs/DateMath.h. 26404 * runtime/DatePrototype.cpp: Copied from kjs/DatePrototype.cpp. 26405 * runtime/DatePrototype.h: Copied from kjs/DatePrototype.h. 26406 * runtime/Error.cpp: Copied from kjs/Error.cpp. 26407 * runtime/Error.h: Copied from kjs/Error.h. 26408 * runtime/ErrorConstructor.cpp: Copied from kjs/ErrorConstructor.cpp. 26409 * runtime/ErrorConstructor.h: Copied from kjs/ErrorConstructor.h. 26410 * runtime/ErrorInstance.cpp: Copied from kjs/ErrorInstance.cpp. 26411 * runtime/ErrorInstance.h: Copied from kjs/ErrorInstance.h. 26412 * runtime/ErrorPrototype.cpp: Copied from kjs/ErrorPrototype.cpp. 26413 * runtime/ErrorPrototype.h: Copied from kjs/ErrorPrototype.h. 26414 * runtime/FunctionConstructor.cpp: Copied from kjs/FunctionConstructor.cpp. 26415 * runtime/FunctionConstructor.h: Copied from kjs/FunctionConstructor.h. 26416 * runtime/FunctionPrototype.cpp: Copied from kjs/FunctionPrototype.cpp. 26417 * runtime/FunctionPrototype.h: Copied from kjs/FunctionPrototype.h. 26418 * runtime/GlobalEvalFunction.cpp: Copied from kjs/GlobalEvalFunction.cpp. 26419 * runtime/GlobalEvalFunction.h: Copied from kjs/GlobalEvalFunction.h. 26420 * runtime/InternalFunction.cpp: Copied from kjs/InternalFunction.cpp. 26421 * runtime/InternalFunction.h: Copied from kjs/InternalFunction.h. 26422 * runtime/JSArray.cpp: Copied from kjs/JSArray.cpp. 26423 * runtime/JSArray.h: Copied from kjs/JSArray.h. 26424 * runtime/JSCell.cpp: Copied from kjs/JSCell.cpp. 26425 * runtime/JSCell.h: Copied from kjs/JSCell.h. 26426 * runtime/JSFunction.cpp: Copied from kjs/JSFunction.cpp. 26427 * runtime/JSFunction.h: Copied from kjs/JSFunction.h. 26428 * runtime/JSGlobalObject.cpp: Copied from kjs/JSGlobalObject.cpp. 26429 * runtime/JSGlobalObject.h: Copied from kjs/JSGlobalObject.h. 26430 * runtime/JSGlobalObjectFunctions.cpp: Copied from kjs/JSGlobalObjectFunctions.cpp. 26431 * runtime/JSGlobalObjectFunctions.h: Copied from kjs/JSGlobalObjectFunctions.h. 26432 * runtime/JSImmediate.cpp: Copied from kjs/JSImmediate.cpp. 26433 * runtime/JSImmediate.h: Copied from kjs/JSImmediate.h. 26434 * runtime/JSNotAnObject.cpp: Copied from kjs/JSNotAnObject.cpp. 26435 * runtime/JSNotAnObject.h: Copied from kjs/JSNotAnObject.h. 26436 * runtime/JSNumberCell.cpp: Copied from kjs/JSNumberCell.cpp. 26437 * runtime/JSNumberCell.h: Copied from kjs/JSNumberCell.h. 26438 * runtime/JSObject.cpp: Copied from kjs/JSObject.cpp. 26439 * runtime/JSObject.h: Copied from kjs/JSObject.h. 26440 * runtime/JSString.cpp: Copied from kjs/JSString.cpp. 26441 * runtime/JSString.h: Copied from kjs/JSString.h. 26442 * runtime/JSValue.cpp: Copied from kjs/JSValue.cpp. 26443 * runtime/JSValue.h: Copied from kjs/JSValue.h. 26444 * runtime/JSVariableObject.cpp: Copied from kjs/JSVariableObject.cpp. 26445 * runtime/JSVariableObject.h: Copied from kjs/JSVariableObject.h. 26446 * runtime/JSWrapperObject.cpp: Copied from kjs/JSWrapperObject.cpp. 26447 * runtime/JSWrapperObject.h: Copied from kjs/JSWrapperObject.h. 26448 * runtime/MathObject.cpp: Copied from kjs/MathObject.cpp. 26449 * runtime/MathObject.h: Copied from kjs/MathObject.h. 26450 * runtime/NativeErrorConstructor.cpp: Copied from kjs/NativeErrorConstructor.cpp. 26451 * runtime/NativeErrorConstructor.h: Copied from kjs/NativeErrorConstructor.h. 26452 * runtime/NativeErrorPrototype.cpp: Copied from kjs/NativeErrorPrototype.cpp. 26453 * runtime/NativeErrorPrototype.h: Copied from kjs/NativeErrorPrototype.h. 26454 * runtime/NumberConstructor.cpp: Copied from kjs/NumberConstructor.cpp. 26455 * runtime/NumberConstructor.h: Copied from kjs/NumberConstructor.h. 26456 * runtime/NumberObject.cpp: Copied from kjs/NumberObject.cpp. 26457 * runtime/NumberObject.h: Copied from kjs/NumberObject.h. 26458 * runtime/NumberPrototype.cpp: Copied from kjs/NumberPrototype.cpp. 26459 * runtime/NumberPrototype.h: Copied from kjs/NumberPrototype.h. 26460 * runtime/ObjectConstructor.cpp: Copied from kjs/ObjectConstructor.cpp. 26461 * runtime/ObjectConstructor.h: Copied from kjs/ObjectConstructor.h. 26462 * runtime/ObjectPrototype.cpp: Copied from kjs/ObjectPrototype.cpp. 26463 * runtime/ObjectPrototype.h: Copied from kjs/ObjectPrototype.h. 26464 * runtime/PropertyMap.cpp: Copied from kjs/PropertyMap.cpp. 26465 * runtime/PropertyMap.h: Copied from kjs/PropertyMap.h. 26466 * runtime/PropertySlot.cpp: Copied from kjs/PropertySlot.cpp. 26467 * runtime/PropertySlot.h: Copied from kjs/PropertySlot.h. 26468 * runtime/PrototypeFunction.cpp: Copied from kjs/PrototypeFunction.cpp. 26469 * runtime/PrototypeFunction.h: Copied from kjs/PrototypeFunction.h. 26470 * runtime/PutPropertySlot.h: Copied from kjs/PutPropertySlot.h. 26471 * runtime/SmallStrings.cpp: Copied from kjs/SmallStrings.cpp. 26472 * runtime/SmallStrings.h: Copied from kjs/SmallStrings.h. 26473 * runtime/StringConstructor.cpp: Copied from kjs/StringConstructor.cpp. 26474 * runtime/StringConstructor.h: Copied from kjs/StringConstructor.h. 26475 * runtime/StringObject.cpp: Copied from kjs/StringObject.cpp. 26476 * runtime/StringObject.h: Copied from kjs/StringObject.h. 26477 * runtime/StringObjectThatMasqueradesAsUndefined.h: Copied from kjs/StringObjectThatMasqueradesAsUndefined.h. 26478 * runtime/StringPrototype.cpp: Copied from kjs/StringPrototype.cpp. 26479 * runtime/StringPrototype.h: Copied from kjs/StringPrototype.h. 26480 * runtime/StructureID.cpp: Copied from kjs/StructureID.cpp. 26481 * runtime/StructureID.h: Copied from kjs/StructureID.h. 26482 26483 2008-10-28 Geoffrey Garen <ggaren (a] apple.com> 26484 26485 Reviewed by Sam Weinig. 26486 26487 Fixed https://bugs.webkit.org/show_bug.cgi?id=21919 26488 Sampler reports bogus time in op_enter during 3d-raytrace.js 26489 26490 Fixed a bug where we would pass the incorrect Instruction* during some 26491 parts of CTI codegen. 26492 26493 * VM/CTI.cpp: 26494 (JSC::CTI::privateCompileMainPass): 26495 (JSC::CTI::privateCompileSlowCases): 26496 * VM/SamplingTool.cpp: 26497 (JSC::SamplingTool::run): 26498 * wtf/Platform.h: 26499 26500 2008-10-28 Kevin McCullough <kmccullough (a] apple.com> 26501 26502 Reviewed by Dan Bernstein. 26503 26504 -Removed unused includes. 26505 Apparent .4% speedup in Sunspider 26506 26507 * kjs/JSObject.cpp: 26508 * kjs/interpreter.cpp: 26509 26510 2008-10-28 Alp Toker <alp (a] nuanti.com> 26511 26512 Include copyright license files in the autotools dist target. 26513 26514 Change suggested by Mike Hommey. 26515 26516 * GNUmakefile.am: 26517 26518 2008-10-27 Geoffrey Garen <ggaren (a] apple.com> 26519 26520 Reviewed by Maciej Stachowiak. 26521 26522 Stop discarding CodeBlock samples that can't be charged to a specific 26523 opcode. Instead, charge the relevant CodeBlock, and provide a footnote 26524 explaining the situation. 26525 26526 This will help us tell which CodeBlocks are hot, even if we can't 26527 identify specific lines of code within the CodeBlocks. 26528 26529 * VM/SamplingTool.cpp: 26530 (JSC::ScopeSampleRecord::sample): 26531 (JSC::compareScopeSampleRecords): 26532 (JSC::SamplingTool::dump): 26533 26534 * VM/SamplingTool.h: 26535 (JSC::ScopeSampleRecord::ScopeSampleRecord): 26536 (JSC::ScopeSampleRecord::~ScopeSampleRecord): 26537 26538 2008-10-27 Geoffrey Garen <ggaren (a] apple.com> 26539 26540 Reviewed by Sam Weinig. 26541 26542 Added a mutex around the SamplingTool's ScopeNode* map, to solve a crash 26543 when sampling the v8 tests. 26544 26545 * VM/SamplingTool.cpp: 26546 (JSC::SamplingTool::run): 26547 (JSC::SamplingTool::notifyOfScope): 26548 * VM/SamplingTool.h: Since new ScopeNodes can be created after 26549 the SamplingTools has begun sampling, reads and writes to / from the 26550 map need to be synchronized. Shark says this doesn't measurably increase 26551 sampling overhead. 26552 26553 2008-10-25 Geoffrey Garen <ggaren (a] apple.com> 26554 26555 Not reviewed. 26556 26557 Try to fix Windows build. 26558 26559 * VM/Machine.cpp: 26560 (JSC::Machine::privateExecute): Provide a dummy value to the 26561 HostCallRecord in CTI non-sampling builds, to silence compiler warning. 26562 26563 2008-10-25 Geoffrey Garen <ggaren (a] apple.com> 26564 26565 Not reviewed. 26566 26567 Try to fix Windows build. 26568 26569 * VM/SamplingTool.h: 26570 (JSC::SamplingTool::encodeSample): Explicitly cast bool to int, to 26571 silence compiler warning. 26572 26573 2008-10-25 Geoffrey Garen <ggaren (a] apple.com> 26574 26575 Reviewed by Sam Weinig, with Gavin Barraclough's help. 26576 26577 Fixed Sampling Tool: 26578 - Made CodeBlock sampling work with CTI 26579 - Improved accuracy by unifying most sampling data into a single 26580 32bit word, which can be written / read atomically. 26581 - Split out three different #ifdefs for modularity: OPCODE_SAMPLING; 26582 CODEBLOCK_SAMPLING; OPCODE_STATS. 26583 - Improved reporting clarity 26584 - Refactored for code clarity 26585 26586 * JavaScriptCore.exp: Exported another symbol. 26587 26588 * VM/CTI.cpp: 26589 (JSC::CTI::emitCTICall): 26590 (JSC::CTI::compileOpCall): 26591 (JSC::CTI::emitSlowScriptCheck): 26592 (JSC::CTI::compileBinaryArithOpSlowCase): 26593 (JSC::CTI::privateCompileMainPass): 26594 (JSC::CTI::privateCompileSlowCases): 26595 (JSC::CTI::privateCompile): 26596 * VM/CTI.h: Updated CTI codegen to use the unified SamplingTool interface 26597 for encoding samples. (This required passing the current vPC to a lot 26598 more functions, since the unified interface samples the current vPC.) 26599 Added hooks for writing the current CodeBlock* on function entry and 26600 after a function call, for the sake of the CodeBlock sampler. Removed 26601 obsolete hook for clearing the current sample inside op_end. Also removed 26602 the custom enum used to differentiate flavors of op_call, since the 26603 OpcodeID enum works just as well. (This was important in an earlier 26604 version of the patch, but now it's just cleanup.) 26605 26606 * VM/CodeBlock.cpp: 26607 (JSC::CodeBlock::lineNumberForVPC): 26608 * VM/CodeBlock.h: Upated for refactored #ifdefs. Changed lineNumberForVPC 26609 to be robust against vPCs not recorded for exception handling, since 26610 the Sampler may ask for an arbitrary vPC. 26611 26612 * VM/Machine.cpp: 26613 (JSC::Machine::execute): 26614 (JSC::Machine::privateExecute): 26615 (JSC::Machine::cti_op_call_NotJSFunction): 26616 (JSC::Machine::cti_op_construct_NotJSConstruct): 26617 * VM/Machine.h: 26618 (JSC::Machine::setSampler): 26619 (JSC::Machine::sampler): 26620 (JSC::Machine::jitCodeBuffer): Upated for refactored #ifdefs. Changed 26621 Machine to use SamplingTool helper objects to record movement in and 26622 out of host code. This makes samples a bit more precise. 26623 26624 * VM/Opcode.cpp: 26625 (JSC::OpcodeStats::~OpcodeStats): 26626 * VM/Opcode.h: Upated for refactored #ifdefs. Added a little more padding, 26627 to accomodate our more verbose opcode names. 26628 26629 * VM/SamplingTool.cpp: 26630 (JSC::ScopeSampleRecord::sample): Only count a sample toward our total 26631 if we actually record it. This solves cases where a CodeBlock will 26632 claim to have been sampled many times, with reported samples that don't 26633 match. 26634 26635 (JSC::SamplingTool::run): Read the current sample into a Sample helper 26636 object, to ensure that the data doesn't change while we're analyzing it, 26637 and to help decode the data. Only access the CodeBlock sampling hash 26638 table if CodeBlock sampling has been enabled, so non-CodeBlock sampling 26639 runs can operate with even less overhead. 26640 26641 (JSC::SamplingTool::dump): I reorganized this code a lot to print the 26642 most important info at the top, print as a table, annotate and document 26643 the stuff I didn't understand when I started, etc. 26644 26645 * VM/SamplingTool.h: New helper classes, described above. 26646 26647 * kjs/Parser.h: 26648 * kjs/Shell.cpp: 26649 (runWithScripts): 26650 * kjs/nodes.cpp: 26651 (JSC::ScopeNode::ScopeNode): Updated for new sampling APIs. 26652 26653 * wtf/Platform.h: Moved sampling #defines here, since our custom is to 26654 put ENABLE #defines into Platform.h. Made explicit the fact that 26655 CODEBLOCK_SAMPLING depends on OPCODE_SAMPLING. 26656 26657 2008-10-25 Jan Michael Alonzo <jmalonzo (a] webkit.org> 26658 26659 JSC Build fix, not reviewed. 26660 26661 * VM/CTI.cpp: add missing include stdio.h for debug builds 26662 26663 2008-10-24 Eric Seidel <eric (a] webkit.org> 26664 26665 Reviewed by Darin Adler. 26666 26667 Get rid of a bonus ASSERT when using a null string as a regexp. 26668 Specifically calling: RegularExpression::match() with String::empty() 26669 will hit this ASSERT. 26670 Chromium hits this, but I don't know of any way to make a layout test. 26671 26672 * pcre/pcre_exec.cpp: 26673 (jsRegExpExecute): 26674 26675 2008-10-24 Alexey Proskuryakov <ap (a] webkit.org> 26676 26677 Suggested and rubber-stamped by Geoff Garen. 26678 26679 Fix a crash when opening Font Picker. 26680 26681 The change also hopefully fixes this bug, which I could never reproduce: 26682 https://bugs.webkit.org/show_bug.cgi?id=20241 26683 <rdar://problem/6290576> Safari crashes at JSValueUnprotect() when fontpicker view close 26684 26685 * API/JSContextRef.cpp: (JSContextGetGlobalObject): Use lexical global object instead of 26686 dynamic one. 26687 26688 2008-10-24 Cameron Zwarich <zwarich (a] apple.com> 26689 26690 Reviewed by Geoff Garen. 26691 26692 Remove ScopeChainNode::bottom() and inline it into its only caller, 26693 ScopeChainnode::globalObject(). 26694 26695 * kjs/JSGlobalObject.h: 26696 (JSC::ScopeChainNode::globalObject): 26697 * kjs/ScopeChain.h: 26698 (JSC::ScopeChain::bottom): 26699 26700 2008-10-24 Cameron Zwarich <zwarich (a] apple.com> 26701 26702 Reviewed by Maciej Stachowiak. 26703 26704 Bug 21862: Create JSFunction prototype property lazily 26705 <https://bugs.webkit.org/show_bug.cgi?id=21862> 26706 26707 This is a 1.5% speedup on SunSpider and a 1.4% speedup on the V8 26708 benchmark suite, including a 3.8% speedup on Earley-Boyer. 26709 26710 * kjs/JSFunction.cpp: 26711 (JSC::JSFunction::getOwnPropertySlot): 26712 * kjs/nodes.cpp: 26713 (JSC::FuncDeclNode::makeFunction): 26714 (JSC::FuncExprNode::makeFunction): 26715 26716 2008-10-24 Greg Bolsinga <bolsinga (a] apple.com> 26717 26718 Reviewed by Sam Weinig. 26719 26720 https://bugs.webkit.org/show_bug.cgi?id=21475 26721 26722 Provide support for the Geolocation API 26723 26724 http://dev.w3.org/geo/api/spec-source.html 26725 26726 * wtf/Platform.h: ENABLE_GEOLOCATION defaults to 0 26727 26728 2008-10-24 Darin Adler <darin (a] apple.com> 26729 26730 - finish rolling out https://bugs.webkit.org/show_bug.cgi?id=21732 26731 26732 * API/APICast.h: 26733 * API/JSCallbackConstructor.h: 26734 * API/JSCallbackFunction.cpp: 26735 * API/JSCallbackFunction.h: 26736 * API/JSCallbackObject.h: 26737 * API/JSCallbackObjectFunctions.h: 26738 * API/JSContextRef.cpp: 26739 * API/JSObjectRef.cpp: 26740 * API/JSValueRef.cpp: 26741 * VM/CTI.cpp: 26742 * VM/CTI.h: 26743 * VM/CodeBlock.cpp: 26744 * VM/CodeBlock.h: 26745 * VM/CodeGenerator.cpp: 26746 * VM/CodeGenerator.h: 26747 * VM/ExceptionHelpers.cpp: 26748 * VM/ExceptionHelpers.h: 26749 * VM/JSPropertyNameIterator.cpp: 26750 * VM/JSPropertyNameIterator.h: 26751 * VM/Machine.cpp: 26752 * VM/Machine.h: 26753 * VM/Register.h: 26754 * kjs/ArgList.cpp: 26755 * kjs/ArgList.h: 26756 * kjs/Arguments.cpp: 26757 * kjs/Arguments.h: 26758 * kjs/ArrayConstructor.cpp: 26759 * kjs/ArrayPrototype.cpp: 26760 * kjs/BooleanConstructor.cpp: 26761 * kjs/BooleanConstructor.h: 26762 * kjs/BooleanObject.h: 26763 * kjs/BooleanPrototype.cpp: 26764 * kjs/CallData.cpp: 26765 * kjs/CallData.h: 26766 * kjs/ConstructData.cpp: 26767 * kjs/ConstructData.h: 26768 * kjs/DateConstructor.cpp: 26769 * kjs/DateInstance.h: 26770 * kjs/DatePrototype.cpp: 26771 * kjs/DatePrototype.h: 26772 * kjs/DebuggerCallFrame.cpp: 26773 * kjs/DebuggerCallFrame.h: 26774 * kjs/ErrorConstructor.cpp: 26775 * kjs/ErrorPrototype.cpp: 26776 * kjs/ExecState.cpp: 26777 * kjs/ExecState.h: 26778 * kjs/FunctionConstructor.cpp: 26779 * kjs/FunctionPrototype.cpp: 26780 * kjs/FunctionPrototype.h: 26781 * kjs/GetterSetter.cpp: 26782 * kjs/GetterSetter.h: 26783 * kjs/InternalFunction.h: 26784 * kjs/JSActivation.cpp: 26785 * kjs/JSActivation.h: 26786 * kjs/JSArray.cpp: 26787 * kjs/JSArray.h: 26788 * kjs/JSCell.cpp: 26789 * kjs/JSCell.h: 26790 * kjs/JSFunction.cpp: 26791 * kjs/JSFunction.h: 26792 * kjs/JSGlobalData.h: 26793 * kjs/JSGlobalObject.cpp: 26794 * kjs/JSGlobalObject.h: 26795 * kjs/JSGlobalObjectFunctions.cpp: 26796 * kjs/JSGlobalObjectFunctions.h: 26797 * kjs/JSImmediate.cpp: 26798 * kjs/JSImmediate.h: 26799 * kjs/JSNotAnObject.cpp: 26800 * kjs/JSNotAnObject.h: 26801 * kjs/JSNumberCell.cpp: 26802 * kjs/JSNumberCell.h: 26803 * kjs/JSObject.cpp: 26804 * kjs/JSObject.h: 26805 * kjs/JSStaticScopeObject.cpp: 26806 * kjs/JSStaticScopeObject.h: 26807 * kjs/JSString.cpp: 26808 * kjs/JSString.h: 26809 * kjs/JSValue.h: 26810 * kjs/JSVariableObject.h: 26811 * kjs/JSWrapperObject.h: 26812 * kjs/MathObject.cpp: 26813 * kjs/MathObject.h: 26814 * kjs/NativeErrorConstructor.cpp: 26815 * kjs/NumberConstructor.cpp: 26816 * kjs/NumberConstructor.h: 26817 * kjs/NumberObject.cpp: 26818 * kjs/NumberObject.h: 26819 * kjs/NumberPrototype.cpp: 26820 * kjs/ObjectConstructor.cpp: 26821 * kjs/ObjectPrototype.cpp: 26822 * kjs/ObjectPrototype.h: 26823 * kjs/PropertyMap.h: 26824 * kjs/PropertySlot.cpp: 26825 * kjs/PropertySlot.h: 26826 * kjs/RegExpConstructor.cpp: 26827 * kjs/RegExpConstructor.h: 26828 * kjs/RegExpMatchesArray.h: 26829 * kjs/RegExpObject.cpp: 26830 * kjs/RegExpObject.h: 26831 * kjs/RegExpPrototype.cpp: 26832 * kjs/Shell.cpp: 26833 * kjs/StringConstructor.cpp: 26834 * kjs/StringObject.cpp: 26835 * kjs/StringObject.h: 26836 * kjs/StringObjectThatMasqueradesAsUndefined.h: 26837 * kjs/StringPrototype.cpp: 26838 * kjs/StructureID.cpp: 26839 * kjs/StructureID.h: 26840 * kjs/collector.cpp: 26841 * kjs/collector.h: 26842 * kjs/completion.h: 26843 * kjs/grammar.y: 26844 * kjs/interpreter.cpp: 26845 * kjs/interpreter.h: 26846 * kjs/lookup.cpp: 26847 * kjs/lookup.h: 26848 * kjs/nodes.h: 26849 * kjs/operations.cpp: 26850 * kjs/operations.h: 26851 * kjs/protect.h: 26852 * profiler/ProfileGenerator.cpp: 26853 * profiler/Profiler.cpp: 26854 * profiler/Profiler.h: 26855 Use JSValue* instead of JSValuePtr. 26856 26857 2008-10-24 David Kilzer <ddkilzer (a] apple.com> 26858 26859 Rolled out r37840. 26860 26861 * wtf/Platform.h: 26862 26863 2008-10-23 Greg Bolsinga <bolsinga (a] apple.com> 26864 26865 Reviewed by Sam Weinig. 26866 26867 https://bugs.webkit.org/show_bug.cgi?id=21475 26868 26869 Provide support for the Geolocation API 26870 26871 http://dev.w3.org/geo/api/spec-source.html 26872 26873 * wtf/Platform.h: ENABLE_GEOLOCATION defaults to 0 26874 26875 2008-10-23 David Kilzer <ddkilzer (a] apple.com> 26876 26877 Bug 21832: Fix scripts using 'new File::Temp' for Perl 5.10 26878 26879 <https://bugs.webkit.org/show_bug.cgi?id=21832> 26880 26881 Reviewed by Sam Weinig. 26882 26883 * pcre/dftables: Use imported tempfile() from File::Temp instead of 26884 'new File::Temp' to make the script work with Perl 5.10. 26885 26886 2008-10-23 Gavin Barraclough <barraclough (a] apple.com> 26887 26888 Reviewed by Oliver Hunt. 26889 26890 Fix hideous pathological case performance when looking up repatch info, bug #21727. 26891 26892 When repatching JIT code to optimize we look up records providing information about 26893 the generated code (also used to track recsources used in linking to be later released). 26894 The lookup was being performed using a linear scan of all such records. 26895 26896 (1) Split up the different types of reptach information. This means we can search them 26897 separately, and in some cases should reduce their size. 26898 (2) In the case of property accesses, search with a binary chop over the data. 26899 (3) In the case of calls, pass a pointer to the repatch info into the relink function. 26900 26901 * VM/CTI.cpp: 26902 (JSC::CTI::CTI): 26903 (JSC::CTI::compileOpCall): 26904 (JSC::CTI::privateCompileMainPass): 26905 (JSC::CTI::privateCompileSlowCases): 26906 (JSC::CTI::privateCompile): 26907 (JSC::CTI::unlinkCall): 26908 (JSC::CTI::linkCall): 26909 * VM/CTI.h: 26910 * VM/CodeBlock.cpp: 26911 (JSC::CodeBlock::dump): 26912 (JSC::CodeBlock::~CodeBlock): 26913 (JSC::CodeBlock::unlinkCallers): 26914 (JSC::CodeBlock::derefStructureIDs): 26915 * VM/CodeBlock.h: 26916 (JSC::StructureStubInfo::StructureStubInfo): 26917 (JSC::CallLinkInfo::CallLinkInfo): 26918 (JSC::CallLinkInfo::setUnlinked): 26919 (JSC::CallLinkInfo::isLinked): 26920 (JSC::getStructureStubInfoReturnLocation): 26921 (JSC::binaryChop): 26922 (JSC::CodeBlock::addCaller): 26923 (JSC::CodeBlock::getStubInfo): 26924 * VM/CodeGenerator.cpp: 26925 (JSC::CodeGenerator::emitResolve): 26926 (JSC::CodeGenerator::emitGetById): 26927 (JSC::CodeGenerator::emitPutById): 26928 (JSC::CodeGenerator::emitCall): 26929 (JSC::CodeGenerator::emitConstruct): 26930 * VM/Machine.cpp: 26931 (JSC::Machine::cti_vm_lazyLinkCall): 26932 26933 2008-10-23 Peter Kasting <pkasting (a] google.com> 26934 26935 Reviewed by Adam Roben. 26936 26937 https://bugs.webkit.org/show_bug.cgi?id=21833 26938 Place JavaScript Debugger hooks under #if ENABLE(JAVASCRIPT_DEBUGGER). 26939 26940 * wtf/Platform.h: 26941 26942 2008-10-23 David Kilzer <ddkilzer (a] apple.com> 26943 26944 Bug 21831: Fix create_hash_table for Perl 5.10 26945 26946 <https://bugs.webkit.org/show_bug.cgi?id=21831> 26947 26948 Reviewed by Sam Weinig. 26949 26950 * kjs/create_hash_table: Escaped square brackets so that Perl 5.10 26951 doesn't try to use @nameEntries. 26952 26953 2008-10-23 Darin Adler <darin (a] apple.com> 26954 26955 - roll out https://bugs.webkit.org/show_bug.cgi?id=21732 26956 to remove the JSValuePtr class, to fix two problems 26957 26958 1) slowness under MSVC, since it doesn't handle a 26959 class with a single pointer in it as efficiently 26960 as a pointer 26961 26962 2) uninitialized pointers in Vector 26963 26964 * JavaScriptCore.exp: Updated. 26965 26966 * API/APICast.h: 26967 (toRef): 26968 * VM/CTI.cpp: 26969 (JSC::CTI::asInteger): 26970 * VM/CodeGenerator.cpp: 26971 (JSC::CodeGenerator::addConstant): 26972 * VM/CodeGenerator.h: 26973 (JSC::CodeGenerator::JSValueHashTraits::constructDeletedValue): 26974 (JSC::CodeGenerator::JSValueHashTraits::isDeletedValue): 26975 * VM/Machine.cpp: 26976 (JSC::Machine::cti_op_add): 26977 (JSC::Machine::cti_op_pre_inc): 26978 (JSC::Machine::cti_op_get_by_id): 26979 (JSC::Machine::cti_op_get_by_id_second): 26980 (JSC::Machine::cti_op_get_by_id_generic): 26981 (JSC::Machine::cti_op_get_by_id_fail): 26982 (JSC::Machine::cti_op_instanceof): 26983 (JSC::Machine::cti_op_del_by_id): 26984 (JSC::Machine::cti_op_mul): 26985 (JSC::Machine::cti_op_call_NotJSFunction): 26986 (JSC::Machine::cti_op_resolve): 26987 (JSC::Machine::cti_op_construct_NotJSConstruct): 26988 (JSC::Machine::cti_op_get_by_val): 26989 (JSC::Machine::cti_op_sub): 26990 (JSC::Machine::cti_op_lesseq): 26991 (JSC::Machine::cti_op_negate): 26992 (JSC::Machine::cti_op_resolve_base): 26993 (JSC::Machine::cti_op_resolve_skip): 26994 (JSC::Machine::cti_op_resolve_global): 26995 (JSC::Machine::cti_op_div): 26996 (JSC::Machine::cti_op_pre_dec): 26997 (JSC::Machine::cti_op_not): 26998 (JSC::Machine::cti_op_eq): 26999 (JSC::Machine::cti_op_lshift): 27000 (JSC::Machine::cti_op_bitand): 27001 (JSC::Machine::cti_op_rshift): 27002 (JSC::Machine::cti_op_bitnot): 27003 (JSC::Machine::cti_op_mod): 27004 (JSC::Machine::cti_op_less): 27005 (JSC::Machine::cti_op_neq): 27006 (JSC::Machine::cti_op_urshift): 27007 (JSC::Machine::cti_op_bitxor): 27008 (JSC::Machine::cti_op_bitor): 27009 (JSC::Machine::cti_op_call_eval): 27010 (JSC::Machine::cti_op_throw): 27011 (JSC::Machine::cti_op_next_pname): 27012 (JSC::Machine::cti_op_typeof): 27013 (JSC::Machine::cti_op_is_undefined): 27014 (JSC::Machine::cti_op_is_boolean): 27015 (JSC::Machine::cti_op_is_number): 27016 (JSC::Machine::cti_op_is_string): 27017 (JSC::Machine::cti_op_is_object): 27018 (JSC::Machine::cti_op_is_function): 27019 (JSC::Machine::cti_op_stricteq): 27020 (JSC::Machine::cti_op_nstricteq): 27021 (JSC::Machine::cti_op_to_jsnumber): 27022 (JSC::Machine::cti_op_in): 27023 (JSC::Machine::cti_op_del_by_val): 27024 (JSC::Machine::cti_vm_throw): 27025 Removed calls to payload functions. 27026 27027 * VM/Register.h: 27028 (JSC::Register::Register): Removed overload for JSCell and call 27029 to payload function. 27030 27031 * kjs/JSCell.h: Changed JSCell to derive from JSValue again. 27032 Removed JSValuePtr constructor. 27033 (JSC::asCell): Changed cast from reinterpret_cast to static_cast. 27034 27035 * kjs/JSImmediate.h: Removed JSValuePtr class. Added typedef back. 27036 27037 * kjs/JSValue.h: 27038 (JSC::JSValue::JSValue): Added empty protected inline constructor back. 27039 (JSC::JSValue::~JSValue): Same for destructor. 27040 Removed == and != operator for JSValuePtr. 27041 27042 * kjs/PropertySlot.h: 27043 (JSC::PropertySlot::PropertySlot): Chnaged argument to const JSValue* 27044 and added a const_cast. 27045 27046 * kjs/protect.h: Removed overloads and specialization for JSValuePtr. 27047 27048 2008-10-22 Oliver Hunt <oliver (a] apple.com> 27049 27050 Reviewed by Maciej Stachowiak. 27051 27052 Really "fix" CTI mode on windows 2k3. 27053 27054 This adds new methods fastMallocExecutable and fastFreeExecutable 27055 to wrap allocation for cti code. This still just makes fastMalloc 27056 return executable memory all the time, which will be fixed in a 27057 later patch. 27058 27059 However in windows debug builds all executable allocations will be 27060 allocated on separate executable pages, which should resolve any 27061 remaining 2k3 issues. Conveniently the 2k3 bot will now also fail 27062 if there are any fastFree vs. fastFreeExecutable errors. 27063 27064 * ChangeLog: 27065 * VM/CodeBlock.cpp: 27066 (JSC::CodeBlock::~CodeBlock): 27067 * kjs/regexp.cpp: 27068 (JSC::RegExp::~RegExp): 27069 * masm/X86Assembler.h: 27070 (JSC::JITCodeBuffer::copy): 27071 * wtf/FastMalloc.cpp: 27072 (WTF::fastMallocExecutable): 27073 (WTF::fastFreeExecutable): 27074 (WTF::TCMallocStats::fastMallocExecutable): 27075 (WTF::TCMallocStats::fastFreeExecutable): 27076 * wtf/FastMalloc.h: 27077 27078 2008-10-22 Darin Adler <darin (a] apple.com> 27079 27080 Reviewed by Sam Weinig. 27081 27082 - fix https://bugs.webkit.org/show_bug.cgi?id=21294 27083 Bug 21294: Devirtualize getOwnPropertySlot() 27084 27085 A bit over 3% faster on V8 tests. 27086 27087 * JavascriptCore.exp: Export leak-related functions.. 27088 27089 * API/JSCallbackConstructor.h: 27090 (JSC::JSCallbackConstructor::createStructureID): Set HasStandardGetOwnPropertySlot 27091 since this class doesn't override getPropertySlot. 27092 * API/JSCallbackFunction.h: 27093 (JSC::JSCallbackFunction::createStructureID): Ditto. 27094 27095 * VM/ExceptionHelpers.cpp: 27096 (JSC::InterruptedExecutionError::InterruptedExecutionError): Use a structure 27097 that's created just for this class instead of trying to share a single "null 27098 prototype" structure. 27099 27100 * VM/Machine.cpp: 27101 (JSC::Machine::cti_op_create_arguments_no_params): Rename 27102 Arguments::ArgumentsNoParameters to Arguments::NoParameters. 27103 27104 * kjs/Arguments.h: Rename the enum from Arguments::ArgumentsParameters to 27105 Arguments::NoParametersType and the value from Arguments::ArgumentsNoParameters 27106 to Arguments::NoParameters. 27107 (JSC::Arguments::createStructureID): Added. Returns a structure without 27108 HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. 27109 (JSC::Arguments::Arguments): Added an assertion that there are no parameters. 27110 27111 * kjs/DatePrototype.h: 27112 (JSC::DatePrototype::createStructureID): Added. Returns a structure without 27113 HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. 27114 27115 * kjs/FunctionPrototype.h: 27116 (JSC::FunctionPrototype::createStructureID): Set HasStandardGetOwnPropertySlot 27117 since this class doesn't override getPropertySlot. 27118 * kjs/InternalFunction.h: 27119 (JSC::InternalFunction::createStructureID): Ditto. 27120 27121 * kjs/JSArray.h: 27122 (JSC::JSArray::createStructureID): Added. Returns a structure without 27123 HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. 27124 27125 * kjs/JSCell.h: Added declaration of fastGetOwnPropertySlot; a non-virtual 27126 version that uses the structure bit to decide whether to call the virtual 27127 version. 27128 27129 * kjs/JSFunction.h: 27130 (JSC::JSFunction::createStructureID): Added. Returns a structure without 27131 HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. 27132 27133 * kjs/JSGlobalData.cpp: 27134 (JSC::JSGlobalData::JSGlobalData): Initialize new structures; removed 27135 nullProtoStructureID. 27136 * kjs/JSGlobalData.h: Added new structures. Removed nullProtoStructureID. 27137 27138 * kjs/JSGlobalObject.h: 27139 (JSC::JSGlobalObject::createStructureID): Added. Returns a structure without 27140 HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. 27141 27142 * kjs/JSNotAnObject.h: 27143 (JSC::JSNotAnObjectErrorStub::JSNotAnObjectErrorStub): Use a structure 27144 that's created just for this class instead of trying to share a single "null 27145 prototype" structure. 27146 (JSC::JSNotAnObjectErrorStub::isNotAnObjectErrorStub): Marked this function 27147 virtual for clarity and made it private since no one should call it if they 27148 already have a pointer to this specific type. 27149 (JSC::JSNotAnObject::JSNotAnObject): Use a structure that's created just 27150 for this class instead of trying to share a single "null prototype" structure. 27151 (JSC::JSNotAnObject::createStructureID): Added. Returns a structure without 27152 HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. 27153 27154 * kjs/JSObject.h: 27155 (JSC::JSObject::createStructureID): Added HasStandardGetOwnPropertySlot. 27156 (JSC::JSObject::inlineGetOwnPropertySlot): Added. Used so we can share code 27157 between getOwnPropertySlot and fastGetOwnPropertySlot. 27158 (JSC::JSObject::getOwnPropertySlot): Moved so that functions are above the 27159 functions that call them. Moved the guts of this function into 27160 inlineGetOwnPropertySlot. 27161 (JSC::JSCell::fastGetOwnPropertySlot): Added. Checks the 27162 HasStandardGetOwnPropertySlot bit and if it's set, calls 27163 inlineGetOwnPropertySlot, otherwise calls getOwnPropertySlot. 27164 (JSC::JSObject::getPropertySlot): Changed to call fastGetOwnPropertySlot. 27165 (JSC::JSValue::get): Changed to call fastGetOwnPropertySlot. 27166 27167 * kjs/JSWrapperObject.h: Made constructor protected to emphasize that 27168 this class is only a base class and never instantiated. 27169 27170 * kjs/MathObject.h: 27171 (JSC::MathObject::createStructureID): Added. Returns a structure without 27172 HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. 27173 * kjs/NumberConstructor.h: 27174 (JSC::NumberConstructor::createStructureID): Ditto. 27175 * kjs/RegExpConstructor.h: 27176 (JSC::RegExpConstructor::createStructureID): Ditto. 27177 * kjs/RegExpObject.h: 27178 (JSC::RegExpObject::createStructureID): Ditto. 27179 * kjs/StringObject.h: 27180 (JSC::StringObject::createStructureID): Ditto. 27181 27182 * kjs/TypeInfo.h: Added HasStandardGetOwnPropertySlot flag and 27183 hasStandardGetOwnPropertySlot accessor function. 27184 27185 2008-10-22 Cameron Zwarich <zwarich (a] apple.com> 27186 27187 Reviewed by Geoff Garen. 27188 27189 Bug 21803: Fuse op_jfalse with op_eq_null and op_neq_null 27190 <https://bugs.webkit.org/show_bug.cgi?id=21803> 27191 27192 Fuse op_jfalse with op_eq_null and op_neq_null to make the new opcodes 27193 op_jeq_null and op_jneq_null. 27194 27195 This is a 2.6% speedup on the V8 Raytrace benchmark, and strangely also 27196 a 4.7% speedup on the V8 Arguments benchmark, even though it uses 27197 neither of the two new opcodes. 27198 27199 * VM/CTI.cpp: 27200 (JSC::CTI::privateCompileMainPass): 27201 * VM/CodeBlock.cpp: 27202 (JSC::CodeBlock::dump): 27203 * VM/CodeGenerator.cpp: 27204 (JSC::CodeGenerator::emitJumpIfTrue): 27205 (JSC::CodeGenerator::emitJumpIfFalse): 27206 * VM/Machine.cpp: 27207 (JSC::Machine::privateExecute): 27208 * VM/Opcode.h: 27209 27210 2008-10-22 Darin Fisher <darin (a] chromium.org> 27211 27212 Reviewed by Eric Seidel. 27213 27214 Should not define PLATFORM(WIN,MAC,GTK) when PLATFORM(CHROMIUM) is defined 27215 https://bugs.webkit.org/show_bug.cgi?id=21757 27216 27217 PLATFORM(CHROMIUM) implies HAVE_ACCESSIBILITY 27218 27219 * wtf/Platform.h: 27220 27221 2008-10-22 Cameron Zwarich <zwarich (a] apple.com> 27222 27223 Reviewed by Alexey Proskuryakov. 27224 27225 Correct opcode names in documentation. 27226 27227 * VM/Machine.cpp: 27228 (JSC::Machine::privateExecute): 27229 27230 2008-10-21 Oliver Hunt <oliver (a] apple.com> 27231 27232 RS=Maciej Stachowiak. 27233 27234 Force FastMalloc to make all allocated pages executable in 27235 a vague hope this will allow the Win2k3 bot to be able to 27236 run tests. 27237 27238 Filed Bug 21783: Need more granular control over allocation of executable memory 27239 to cover a more granular version of this patch. 27240 27241 * wtf/TCSystemAlloc.cpp: 27242 (TryVirtualAlloc): 27243 27244 2008-10-21 Alexey Proskuryakov <ap (a] webkit.org> 27245 27246 Reviewed by Darin Adler. 27247 27248 https://bugs.webkit.org/show_bug.cgi?id=21769 27249 MessagePort should be GC protected if there are messages to be delivered 27250 27251 * wtf/MessageQueue.h: 27252 (WTF::::isEmpty): Added. Also added a warning for methods that return a snapshot of queue 27253 state, thus likely to cause race conditions. 27254 27255 2008-10-21 Darin Adler <darin (a] apple.com> 27256 27257 Reviewed by Maciej Stachowiak. 27258 27259 - convert post-increment to pre-increment in a couple more places for speed 27260 27261 Speeds up V8 benchmarks a little on most computers. (But, strangely, slows 27262 them down a little on my computer.) 27263 27264 * kjs/nodes.cpp: 27265 (JSC::statementListEmitCode): Removed default argument, since we always want 27266 to specify this explicitly. 27267 (JSC::ForNode::emitCode): Tolerate ignoredResult() as the dst -- means the 27268 same thing as 0. 27269 (JSC::ReturnNode::emitCode): Ditto. 27270 (JSC::ThrowNode::emitCode): Ditto. 27271 (JSC::FunctionBodyNode::emitCode): Pass ignoredResult() so that we know we 27272 don't have to compute the result of function statements. 27273 27274 2008-10-21 Peter Kasting <pkasting (a] google.com> 27275 27276 Reviewed by Maciej Stachowiak. 27277 27278 Fix an include of a non-public header to use "" instead of <>. 27279 27280 * API/JSProfilerPrivate.cpp: 27281 27282 2008-10-20 Sam Weinig <sam (a] webkit.org> 27283 27284 Reviewed by Cameron Zwarich. 27285 27286 Fix for https://bugs.webkit.org/show_bug.cgi?id=21766 27287 REGRESSION: 12 JSC tests fail 27288 27289 The JSGlobalObject was mutating the shared nullProtoStructureID when 27290 used in jsc. Instead of using nullProtoStructureID, use a new StructureID. 27291 27292 * API/JSCallbackObject.h: 27293 * API/JSCallbackObjectFunctions.h: 27294 (JSC::::JSCallbackObject): 27295 * API/JSContextRef.cpp: 27296 (JSGlobalContextCreateInGroup): 27297 * kjs/JSGlobalObject.h: 27298 (JSC::JSGlobalObject::JSGlobalObject): 27299 * kjs/Shell.cpp: 27300 (GlobalObject::GlobalObject): 27301 (jscmain): 27302 27303 2008-10-20 Cameron Zwarich <zwarich (a] apple.com> 27304 27305 Reviewed by Maciej Stachowiak. 27306 27307 Remove an untaken branch in CodeGenerator::emitJumpIfFalse(). This 27308 function is never called with a backwards target LabelID, and there is 27309 even an assertion to this effect at the top of the function body. 27310 27311 * VM/CodeGenerator.cpp: 27312 (JSC::CodeGenerator::emitJumpIfFalse): 27313 27314 2008-10-20 Cameron Zwarich <zwarich (a] apple.com> 27315 27316 Rubber-stamped by Sam Weinig. 27317 27318 Add opcode documentation for undocumented opcodes. 27319 27320 * VM/Machine.cpp: 27321 (JSC::Machine::privateExecute): 27322 27323 2008-10-16 Sam Weinig <sam (a] webkit.org> 27324 27325 Reviewed by Cameron Zwarich. 27326 27327 Fix for https://bugs.webkit.org/show_bug.cgi?id=21683 27328 Don't create intermediate StructureIDs for builtin objects 27329 27330 Second stage in reduce number of StructureIDs created when initializing the 27331 JSGlobalObject. 27332 27333 - Use putDirectWithoutTransition for the remaining singleton objects to reduce 27334 the number of StructureIDs create for about:blank from 132 to 73. 27335 27336 * kjs/ArrayConstructor.cpp: 27337 (JSC::ArrayConstructor::ArrayConstructor): 27338 * kjs/BooleanConstructor.cpp: 27339 (JSC::BooleanConstructor::BooleanConstructor): 27340 * kjs/BooleanPrototype.cpp: 27341 (JSC::BooleanPrototype::BooleanPrototype): 27342 * kjs/DateConstructor.cpp: 27343 (JSC::DateConstructor::DateConstructor): 27344 * kjs/ErrorConstructor.cpp: 27345 (JSC::ErrorConstructor::ErrorConstructor): 27346 * kjs/ErrorPrototype.cpp: 27347 (JSC::ErrorPrototype::ErrorPrototype): 27348 * kjs/FunctionConstructor.cpp: 27349 (JSC::FunctionConstructor::FunctionConstructor): 27350 * kjs/FunctionPrototype.cpp: 27351 (JSC::FunctionPrototype::FunctionPrototype): 27352 (JSC::FunctionPrototype::addFunctionProperties): 27353 * kjs/FunctionPrototype.h: 27354 (JSC::FunctionPrototype::createStructureID): 27355 * kjs/InternalFunction.cpp: 27356 * kjs/InternalFunction.h: 27357 (JSC::InternalFunction::InternalFunction): 27358 * kjs/JSGlobalObject.cpp: 27359 (JSC::JSGlobalObject::reset): 27360 * kjs/JSObject.h: 27361 * kjs/MathObject.cpp: 27362 (JSC::MathObject::MathObject): 27363 * kjs/NumberConstructor.cpp: 27364 (JSC::NumberConstructor::NumberConstructor): 27365 * kjs/NumberPrototype.cpp: 27366 (JSC::NumberPrototype::NumberPrototype): 27367 * kjs/ObjectConstructor.cpp: 27368 (JSC::ObjectConstructor::ObjectConstructor): 27369 * kjs/RegExpConstructor.cpp: 27370 (JSC::RegExpConstructor::RegExpConstructor): 27371 * kjs/RegExpPrototype.cpp: 27372 (JSC::RegExpPrototype::RegExpPrototype): 27373 * kjs/StringConstructor.cpp: 27374 (JSC::StringConstructor::StringConstructor): 27375 * kjs/StringPrototype.cpp: 27376 (JSC::StringPrototype::StringPrototype): 27377 * kjs/StructureID.cpp: 27378 (JSC::StructureID::dumpStatistics): 27379 * kjs/StructureID.h: 27380 (JSC::StructureID::setPrototypeWithoutTransition): 27381 27382 2008-10-20 Alp Toker <alp (a] nuanti.com> 27383 27384 Fix autotools dist build target by listing recently added header 27385 files only. Not reviewed. 27386 27387 * GNUmakefile.am: 27388 27389 2008-10-20 Geoffrey Garen <ggaren (a] apple.com> 27390 27391 Reviewed by Anders Carlsson. 27392 27393 * VM/Machine.cpp: 27394 (JSC::Machine::tryCacheGetByID): Removed a redundant and sometimes 27395 incorrect cast, which started ASSERTing after Darin's last checkin. 27396 27397 2008-10-20 Geoffrey Garen <ggaren (a] apple.com> 27398 27399 Not reviewed. 27400 27401 Re-enable CTI, which I accidentally disabled while checking in fixes 27402 to bytecode. 27403 27404 * wtf/Platform.h: 27405 27406 2008-10-20 Alp Toker <alp (a] nuanti.com> 27407 27408 Rubber-stamped by Mark Rowe. 27409 27410 Typo fix in function name: mimimum -> minimum. 27411 27412 * kjs/DateMath.cpp: 27413 (JSC::minimumYearForDST): 27414 (JSC::equivalentYearForDST): 27415 27416 2008-10-20 Alp Toker <alp (a] nuanti.com> 27417 27418 Reviewed by Mark Rowe. 27419 27420 Use pthread instead of GThread where possible in the GTK+ port. This 27421 fixes issues with global initialisation, particularly on GTK+/Win32 27422 where a late g_thread_init() will cause hangs. 27423 27424 * GNUmakefile.am: 27425 * wtf/Platform.h: 27426 * wtf/Threading.h: 27427 * wtf/ThreadingGtk.cpp: 27428 * wtf/ThreadingPthreads.cpp: 27429 27430 2008-10-20 Geoffrey Garen <ggaren (a] apple.com> 27431 27432 Reviewed by Darin Adler. 27433 27434 Fixed https://bugs.webkit.org/show_bug.cgi?id=21735 27435 Emit profiling instrumentation only if the Web Inspector's profiling 27436 feature is enabled 27437 27438 22.2% speedup on empty function call benchmark. 27439 2.9% speedup on v8 benchmark. 27440 0.7% speedup on SunSpider. 27441 27442 Lesser but similar speedups in bytecode. 27443 27444 * VM/CTI.cpp: 27445 (JSC::CTI::compileOpCall): 27446 (JSC::CTI::privateCompileMainPass): 27447 (JSC::CTI::privateCompileSlowCases): Nixed JITed profiler hooks. Profiler 27448 hooks now have their own opcodes. Added support for compiling profiler 27449 hook opcodes. 27450 27451 (JSC::CodeBlock::dump): Dump support for the new profiling opcodes. 27452 27453 * VM/CodeGenerator.h: 27454 * VM/CodeGenerator.cpp: 27455 (JSC::CodeGenerator::CodeGenerator): 27456 (JSC::CodeGenerator::emitCall): 27457 (JSC::CodeGenerator::emitConstruct): Conditionally emit profiling hooks 27458 around call and construct, at the call site. (It's easier to get things 27459 right this way, if you have profiled code calling non-profiled code. 27460 Also, you get a slightly more accurate profile, since you charge the full 27461 cost of the call / construct operation to the callee.) 27462 27463 Also, fixed a bug where construct would fetch the ".prototype" property 27464 from the constructor before evaluating the arguments to the constructor, 27465 incorrectly allowing an "invalid constructor" exception to short-circuit 27466 argument evaluation. I encountered this bug when trying to make 27467 constructor exceptions work with profiling. 27468 27469 * VM/Machine.cpp: 27470 (JSC::Machine::callEval): Removed obsolete profiler hooks. 27471 27472 (JSC::Machine::throwException): Added a check for an exception thrown 27473 within a call instruction. We didn't need this before because the call 27474 instruction would check for a valid call before involing the profiler. 27475 (JSC::Machine::execute): Added a didExecute hook at the end of top-level 27476 function invocation, since op_ret no longer does this for us. 27477 27478 (JSC::Machine::privateExecute): Removed obsolete profiler hooks. Added 27479 profiler opcodes. Changed some ++vPC to vPC[x] notation, since the 27480 latter is better for performance, and it makes reasoning about the 27481 current opcode in exception handling much simpler. 27482 27483 (JSC::Machine::cti_op_call_NotJSFunction): Removed obsolete profiler 27484 hooks. 27485 27486 (JSC::Machine::cti_op_create_arguments_no_params): Added missing 27487 CTI_STACK_HACK that I noticed when adding CTI_STACK_HACK to the new 27488 profiler opcode functions. 27489 27490 (JSC::Machine::cti_op_profile_will_call): 27491 (JSC::Machine::cti_op_profile_did_call): The new profiler opcode 27492 functions. 27493 27494 (JSC::Machine::cti_op_construct_NotJSConstruct): Removed obsolete profiler 27495 hooks. 27496 27497 * VM/Machine.h: 27498 (JSC::Machine::isCallOpcode): Helper for exception handling. 27499 27500 * VM/Opcode.h: Declare new opcodes. 27501 27502 * kjs/JSGlobalObject.h: 27503 (JSC::JSGlobalObject::supportsProfiling): Added virtual interface that 27504 allows WebCore to specify whether the target global object has the Web 27505 Inspector's profiling feature enabled. 27506 27507 * profiler/Profiler.cpp: 27508 (JSC::Profiler::willExecute): 27509 (JSC::Profiler::didExecute): 27510 (JSC::Profiler::createCallIdentifier): 27511 * profiler/Profiler.h: Added support for invoking the profiler with 27512 an arbitrary JSValue*, and not a known object. We didn't need this 27513 before because the call instruction would check for a valid call before 27514 involing the profiler. 27515 27516 2008-10-20 Darin Adler <darin (a] apple.com> 27517 27518 Reviewed by Geoff Garen. 27519 27520 - get CTI working on Windows again 27521 27522 * VM/CTI.cpp: 27523 (JSC::CTI::emitCTICall): Add an overload for functions that 27524 return JSObject*. 27525 * VM/CTI.h: Use JSValue* and JSObject* as return types for 27526 cti_op functions. Apparently, MSVC doesn't handle returning 27527 the JSValuePtr struct in a register. We'll have to look into 27528 this more. 27529 27530 * VM/Machine.cpp: 27531 (JSC::Machine::cti_op_convert_this): 27532 (JSC::Machine::cti_op_add): 27533 (JSC::Machine::cti_op_pre_inc): 27534 (JSC::Machine::cti_op_new_object): 27535 (JSC::Machine::cti_op_get_by_id): 27536 (JSC::Machine::cti_op_get_by_id_second): 27537 (JSC::Machine::cti_op_get_by_id_generic): 27538 (JSC::Machine::cti_op_get_by_id_fail): 27539 (JSC::Machine::cti_op_instanceof): 27540 (JSC::Machine::cti_op_del_by_id): 27541 (JSC::Machine::cti_op_mul): 27542 (JSC::Machine::cti_op_new_func): 27543 (JSC::Machine::cti_op_push_activation): 27544 (JSC::Machine::cti_op_call_NotJSFunction): 27545 (JSC::Machine::cti_op_new_array): 27546 (JSC::Machine::cti_op_resolve): 27547 (JSC::Machine::cti_op_construct_JSConstructFast): 27548 (JSC::Machine::cti_op_construct_NotJSConstruct): 27549 (JSC::Machine::cti_op_get_by_val): 27550 (JSC::Machine::cti_op_sub): 27551 (JSC::Machine::cti_op_lesseq): 27552 (JSC::Machine::cti_op_negate): 27553 (JSC::Machine::cti_op_resolve_base): 27554 (JSC::Machine::cti_op_resolve_skip): 27555 (JSC::Machine::cti_op_resolve_global): 27556 (JSC::Machine::cti_op_div): 27557 (JSC::Machine::cti_op_pre_dec): 27558 (JSC::Machine::cti_op_not): 27559 (JSC::Machine::cti_op_eq): 27560 (JSC::Machine::cti_op_lshift): 27561 (JSC::Machine::cti_op_bitand): 27562 (JSC::Machine::cti_op_rshift): 27563 (JSC::Machine::cti_op_bitnot): 27564 (JSC::Machine::cti_op_new_func_exp): 27565 (JSC::Machine::cti_op_mod): 27566 (JSC::Machine::cti_op_less): 27567 (JSC::Machine::cti_op_neq): 27568 (JSC::Machine::cti_op_urshift): 27569 (JSC::Machine::cti_op_bitxor): 27570 (JSC::Machine::cti_op_new_regexp): 27571 (JSC::Machine::cti_op_bitor): 27572 (JSC::Machine::cti_op_call_eval): 27573 (JSC::Machine::cti_op_throw): 27574 (JSC::Machine::cti_op_next_pname): 27575 (JSC::Machine::cti_op_typeof): 27576 (JSC::Machine::cti_op_is_undefined): 27577 (JSC::Machine::cti_op_is_boolean): 27578 (JSC::Machine::cti_op_is_number): 27579 (JSC::Machine::cti_op_is_string): 27580 (JSC::Machine::cti_op_is_object): 27581 (JSC::Machine::cti_op_is_function): 27582 (JSC::Machine::cti_op_stricteq): 27583 (JSC::Machine::cti_op_nstricteq): 27584 (JSC::Machine::cti_op_to_jsnumber): 27585 (JSC::Machine::cti_op_in): 27586 (JSC::Machine::cti_op_push_new_scope): 27587 (JSC::Machine::cti_op_del_by_val): 27588 (JSC::Machine::cti_op_new_error): 27589 (JSC::Machine::cti_vm_throw): 27590 Change these functions to return pointer types, and never 27591 JSValuePtr. 27592 * VM/Machine.h: Ditto. 27593 27594 2008-10-20 Geoffrey Garen <ggaren (a] apple.com> 27595 27596 Reviewed by Darin Adler. 27597 27598 Fixed some recent break-age in bytecode mode. 27599 27600 * VM/CodeBlock.cpp: 27601 (JSC::CodeBlock::printStructureIDs): Fixed up an ASSERT caused by 27602 Gavin's last checkin. This is a temporary fix so I can keep on moving. 27603 I'll send email about what I think is an underlying problem soon. 27604 27605 * VM/Machine.cpp: 27606 (JSC::Machine::privateExecute): Removed a redundant and sometimes 27607 incorrect cast, which started ASSERTing after Darin's last checkin. 27608 27609 2008-10-20 Darin Adler <darin (a] apple.com> 27610 27611 - another similar Windows build fix 27612 27613 * VM/CTI.cpp: Changed return type to JSObject* instead of JSValuePtr. 27614 27615 2008-10-20 Darin Adler <darin (a] apple.com> 27616 27617 - try to fix Windows build 27618 27619 * VM/CTI.cpp: Use JSValue* instead of JSValuePtr for ctiTrampoline. 27620 * VM/CTI.h: Ditto. 27621 27622 2008-10-19 Darin Adler <darin (a] apple.com> 27623 27624 Reviewed by Cameron Zwarich. 27625 27626 - finish https://bugs.webkit.org/show_bug.cgi?id=21732 27627 improve performance by eliminating JSValue as a base class for JSCell 27628 27629 * VM/Machine.cpp: 27630 (JSC::Machine::cti_op_call_profiler): Use asFunction. 27631 (JSC::Machine::cti_vm_lazyLinkCall): Ditto. 27632 (JSC::Machine::cti_op_construct_JSConstructFast): Use asObject. 27633 27634 * kjs/JSCell.h: Re-sort friend classes. Eliminate inheritance from 27635 JSValue. Changed cast in asCell from static_cast to reinterpret_cast. 27636 Removed JSValue::getNumber(double&) and one of JSValue::getObject 27637 overloads. 27638 27639 * kjs/JSValue.h: Made the private constructor and destructor both 27640 non-virtual and also remove the definitions. This class can never 27641 be instantiated or derived. 27642 27643 2008-10-19 Darin Adler <darin (a] apple.com> 27644 27645 Reviewed by Cameron Zwarich. 27646 27647 - next step of https://bugs.webkit.org/show_bug.cgi?id=21732 27648 improve performance by eliminating JSValue as a base class for JSCell 27649 27650 Change JSValuePtr from a typedef into a class. This allows us to support 27651 conversion from JSCell* to JSValuePtr even if JSCell isn't derived from 27652 JSValue. 27653 27654 * JavaScriptCore.exp: Updated symbols that involve JSValuePtr, since 27655 it's now a distinct type. 27656 27657 * API/APICast.h: 27658 (toRef): Extract the JSValuePtr payload explicitly since we can't just 27659 cast any more. 27660 * VM/CTI.cpp: 27661 (JSC::CTI::asInteger): Ditto. 27662 27663 * VM/CodeGenerator.cpp: 27664 (JSC::CodeGenerator::addConstant): Get at the payload directly. 27665 (JSC::CodeGenerator::emitLoad): Added an overload of JSCell* because 27666 otherwise classes derived from JSValue end up calling the bool 27667 overload instead of JSValuePtr. 27668 * VM/CodeGenerator.h: Ditto. Also update traits to use JSValue* 27669 and the payload functions. 27670 27671 * VM/Register.h: Added a JSCell* overload and use of payload functions. 27672 27673 * kjs/JSCell.h: 27674 (JSC::asCell): Use payload function. 27675 (JSC::JSValue::asCell): Use JSValue* instead of JSValuePtr. 27676 (JSC::JSValuePtr::JSValuePtr): Added. Constructor that takes JSCell* 27677 and creates a JSValuePtr. 27678 27679 * kjs/JSImmediate.h: Added JSValuePtr class. Also updated makeValue 27680 and makeInt to work with JSValue* and the payload function. 27681 27682 * kjs/JSValue.h: Added == and != operators for JSValuePtr. Put them 27683 here because eventually all the JSValue functions should go here 27684 except what's needed by JSImmediate. Also fix asValue to use 27685 JSValue* instead of JSValuePtr. 27686 27687 * kjs/PropertySlot.h: Change constructor to take JSValuePtr. 27688 27689 * kjs/protect.h: Update gcProtect functions to work with JSCell* 27690 as well as JSValuePtr. Also updated the ProtectedPtr<JSValuePtr> 27691 specialization to work more directly. Also changed all the call 27692 sites to use gcProtectNullTolerant. 27693 27694 2008-10-19 Darin Adler <darin (a] apple.com> 27695 27696 Reviewed by Oliver Hunt. 27697 27698 - next step of https://bugs.webkit.org/show_bug.cgi?id=21732 27699 improve performance by eliminating JSValue as a base class for JSCell 27700 27701 Remove most uses of JSValue, which will be removed in a future patch. 27702 27703 * VM/Machine.cpp: 27704 (JSC::fastToUInt32): Call toUInt32SlowCase function; no longer a member 27705 of JSValue. 27706 * kjs/JSNumberCell.h: 27707 (JSC::JSNumberCell::toInt32): Ditto. 27708 (JSC::JSNumberCell::toUInt32): Ditto. 27709 27710 * kjs/JSValue.cpp: 27711 (JSC::toInt32SlowCase): Made a non-member function. 27712 (JSC::JSValue::toInt32SlowCase): Changed to call non-member function. 27713 (JSC::toUInt32SlowCase): More of the same. 27714 (JSC::JSValue::toUInt32SlowCase): Ditto. 27715 27716 * kjs/JSValue.h: Moved static member function so they are no longer 27717 member functions at all. 27718 27719 * VM/CTI.h: Removed forward declaration of JSValue. 27720 * VM/ExceptionHelpers.h: Ditto. 27721 * kjs/CallData.h: Ditto. 27722 * kjs/ConstructData.h: Ditto. 27723 * kjs/JSGlobalObjectFunctions.h: Ditto. 27724 * kjs/PropertyMap.h: Ditto. 27725 * kjs/StructureID.h: Ditto. 27726 * kjs/collector.h: Ditto. 27727 * kjs/completion.h: Ditto. 27728 27729 * kjs/grammar.y: 27730 (JSC::makeBitwiseNotNode): Call new non-member toInt32 function. 27731 (JSC::makeLeftShiftNode): More of the same. 27732 (JSC::makeRightShiftNode): Ditto. 27733 27734 * kjs/protect.h: Added a specialization for ProtectedPtr<JSValuePtr> 27735 so this can be used with JSValuePtr. 27736 27737 2008-10-18 Darin Adler <darin (a] apple.com> 27738 27739 Reviewed by Oliver Hunt. 27740 27741 - next step of https://bugs.webkit.org/show_bug.cgi?id=21732 27742 improve performance by eliminating JSValue as a base class for JSCell 27743 27744 Tweak a little more to get closer to where we can make JSValuePtr a class. 27745 27746 * API/APICast.h: 27747 (toJS): Change back to JSValue* here, since we're converting the 27748 pointer type. 27749 * VM/CTI.cpp: 27750 (JSC::CTI::unlinkCall): Call asPointer. 27751 * VM/CTI.h: Cast to JSValue* here, since it's a pointer cast. 27752 * kjs/DebuggerCallFrame.h: 27753 (JSC::DebuggerCallFrame::DebuggerCallFrame): Call noValue. 27754 * kjs/JSGlobalData.cpp: 27755 (JSC::JSGlobalData::JSGlobalData): Call noValue. 27756 * kjs/JSImmediate.cpp: 27757 (JSC::JSImmediate::toObject): Remove unneeded const_cast. 27758 * kjs/JSWrapperObject.h: 27759 (JSC::JSWrapperObject::JSWrapperObject): Call noValue. 27760 27761 2008-10-18 Darin Adler <darin (a] apple.com> 27762 27763 - fix non-all-in-one build 27764 27765 * kjs/completion.h: 27766 (JSC::Completion::Completion): Add include of JSValue.h. 27767 27768 2008-10-18 Darin Adler <darin (a] apple.com> 27769 27770 Reviewed by Oliver Hunt. 27771 27772 - fix assertions I introduced with my casting changes 27773 27774 These were showing up as failures in the JavaScriptCore tests. 27775 27776 * VM/Machine.cpp: 27777 (JSC::Machine::cti_op_instanceof): Remove the bogus asCell casting that 27778 was at the top of the function, and instead cast at the point of use. 27779 (JSC::Machine::cti_op_construct_NotJSConstruct): Moved the cast to 27780 object after checking the construct type. 27781 27782 2008-10-18 Darin Adler <darin (a] apple.com> 27783 27784 - fix non-all-in-one build 27785 27786 * kjs/JSGlobalObjectFunctions.h: Add include of JSImmedate.h (for now). 27787 27788 2008-10-18 Darin Adler <darin (a] apple.com> 27789 27790 - fix build 27791 27792 * kjs/interpreter.h: Include JSValue.h instead of JSImmediate.h. 27793 27794 2008-10-18 Darin Adler <darin (a] apple.com> 27795 27796 * kjs/interpreter.h: Fix include of JSImmediate.h. 27797 27798 2008-10-18 Darin Adler <darin (a] apple.com> 27799 27800 - fix non-all-in-one build 27801 27802 * kjs/interpreter.h: Add include of JSImmediate.h. 27803 27804 2008-10-18 Darin Adler <darin (a] apple.com> 27805 27806 - fix non-all-in-one build 27807 27808 * kjs/ConstructData.h: Add include of JSImmedate.h (for now). 27809 27810 2008-10-18 Darin Adler <darin (a] apple.com> 27811 27812 - try to fix Windows build 27813 27814 * VM/Machine.cpp: 27815 (JSC::Machine::Machine): Use JSCell* type since MSVC seems to only allow 27816 calling ~JSCell directly if it's a JSCell*. 27817 27818 2008-10-18 Darin Adler <darin (a] apple.com> 27819 27820 Reviewed by Cameron Zwarich. 27821 27822 - next step on https://bugs.webkit.org/show_bug.cgi?id=21732 27823 improve performance by eliminating JSValue as a base class for JSCell 27824 27825 Use JSValuePtr everywhere instead of JSValue*. In the future, we'll be 27826 changing JSValuePtr to be a class, and then eventually renaming it 27827 to JSValue once that's done. 27828 27829 * JavaScriptCore.exp: Update entry points, since some now take JSValue* 27830 instead of const JSValue*. 27831 27832 * API/APICast.h: 27833 * API/JSCallbackConstructor.h: 27834 * API/JSCallbackFunction.cpp: 27835 * API/JSCallbackFunction.h: 27836 * API/JSCallbackObject.h: 27837 * API/JSCallbackObjectFunctions.h: 27838 * API/JSContextRef.cpp: 27839 * API/JSObjectRef.cpp: 27840 * API/JSValueRef.cpp: 27841 * VM/CTI.cpp: 27842 * VM/CTI.h: 27843 * VM/CodeBlock.cpp: 27844 * VM/CodeBlock.h: 27845 * VM/CodeGenerator.cpp: 27846 * VM/CodeGenerator.h: 27847 * VM/ExceptionHelpers.cpp: 27848 * VM/ExceptionHelpers.h: 27849 * VM/JSPropertyNameIterator.cpp: 27850 * VM/JSPropertyNameIterator.h: 27851 * VM/Machine.cpp: 27852 * VM/Machine.h: 27853 * VM/Register.h: 27854 * kjs/ArgList.cpp: 27855 * kjs/ArgList.h: 27856 * kjs/Arguments.cpp: 27857 * kjs/Arguments.h: 27858 * kjs/ArrayConstructor.cpp: 27859 * kjs/ArrayPrototype.cpp: 27860 * kjs/BooleanConstructor.cpp: 27861 * kjs/BooleanConstructor.h: 27862 * kjs/BooleanObject.h: 27863 * kjs/BooleanPrototype.cpp: 27864 * kjs/CallData.cpp: 27865 * kjs/CallData.h: 27866 * kjs/ConstructData.cpp: 27867 * kjs/ConstructData.h: 27868 * kjs/DateConstructor.cpp: 27869 * kjs/DateInstance.h: 27870 * kjs/DatePrototype.cpp: 27871 * kjs/DebuggerCallFrame.cpp: 27872 * kjs/DebuggerCallFrame.h: 27873 * kjs/ErrorConstructor.cpp: 27874 * kjs/ErrorPrototype.cpp: 27875 * kjs/ExecState.cpp: 27876 * kjs/ExecState.h: 27877 * kjs/FunctionConstructor.cpp: 27878 * kjs/FunctionPrototype.cpp: 27879 * kjs/GetterSetter.cpp: 27880 * kjs/GetterSetter.h: 27881 * kjs/InternalFunction.h: 27882 * kjs/JSActivation.cpp: 27883 * kjs/JSActivation.h: 27884 * kjs/JSArray.cpp: 27885 * kjs/JSArray.h: 27886 * kjs/JSCell.cpp: 27887 * kjs/JSCell.h: 27888 * kjs/JSFunction.cpp: 27889 * kjs/JSFunction.h: 27890 * kjs/JSGlobalData.h: 27891 * kjs/JSGlobalObject.cpp: 27892 * kjs/JSGlobalObject.h: 27893 * kjs/JSGlobalObjectFunctions.cpp: 27894 * kjs/JSGlobalObjectFunctions.h: 27895 * kjs/JSImmediate.cpp: 27896 * kjs/JSImmediate.h: 27897 * kjs/JSNotAnObject.cpp: 27898 * kjs/JSNotAnObject.h: 27899 * kjs/JSNumberCell.cpp: 27900 * kjs/JSNumberCell.h: 27901 * kjs/JSObject.cpp: 27902 * kjs/JSObject.h: 27903 * kjs/JSStaticScopeObject.cpp: 27904 * kjs/JSStaticScopeObject.h: 27905 * kjs/JSString.cpp: 27906 * kjs/JSString.h: 27907 * kjs/JSValue.h: 27908 * kjs/JSVariableObject.h: 27909 * kjs/JSWrapperObject.h: 27910 * kjs/MathObject.cpp: 27911 * kjs/NativeErrorConstructor.cpp: 27912 * kjs/NumberConstructor.cpp: 27913 * kjs/NumberConstructor.h: 27914 * kjs/NumberObject.cpp: 27915 * kjs/NumberObject.h: 27916 * kjs/NumberPrototype.cpp: 27917 * kjs/ObjectConstructor.cpp: 27918 * kjs/ObjectPrototype.cpp: 27919 * kjs/ObjectPrototype.h: 27920 * kjs/PropertyMap.h: 27921 * kjs/PropertySlot.cpp: 27922 * kjs/PropertySlot.h: 27923 * kjs/RegExpConstructor.cpp: 27924 * kjs/RegExpConstructor.h: 27925 * kjs/RegExpMatchesArray.h: 27926 * kjs/RegExpObject.cpp: 27927 * kjs/RegExpObject.h: 27928 * kjs/RegExpPrototype.cpp: 27929 * kjs/Shell.cpp: 27930 * kjs/StringConstructor.cpp: 27931 * kjs/StringObject.cpp: 27932 * kjs/StringObject.h: 27933 * kjs/StringObjectThatMasqueradesAsUndefined.h: 27934 * kjs/StringPrototype.cpp: 27935 * kjs/StructureID.cpp: 27936 * kjs/StructureID.h: 27937 * kjs/collector.cpp: 27938 * kjs/collector.h: 27939 * kjs/completion.h: 27940 * kjs/grammar.y: 27941 * kjs/interpreter.cpp: 27942 * kjs/interpreter.h: 27943 * kjs/lookup.cpp: 27944 * kjs/lookup.h: 27945 * kjs/nodes.h: 27946 * kjs/operations.cpp: 27947 * kjs/operations.h: 27948 * kjs/protect.h: 27949 * profiler/ProfileGenerator.cpp: 27950 Replace JSValue* with JSValuePtr. 27951 27952 2008-10-18 Darin Adler <darin (a] apple.com> 27953 27954 * VM/Machine.cpp: 27955 (JSC::Machine::cti_op_call_eval): Removed stray parentheses from my 27956 last check-in. 27957 27958 2008-10-18 Darin Adler <darin (a] apple.com> 27959 27960 Reviewed by Oliver Hunt. 27961 27962 - first step of https://bugs.webkit.org/show_bug.cgi?id=21732 27963 improve performance by eliminating JSValue as a base class for JSCell 27964 27965 Remove casts from JSValue* to derived classes, replacing them with 27966 calls to inline casting functions. These functions are also a bit 27967 better than aidrect cast because they also do a runtime assertion. 27968 27969 Removed use of 0 as for JSValue*, changing call sites to use a 27970 noValue() function instead. 27971 27972 Move things needed by classes derived from JSValue out of the class, 27973 since the classes won't be deriving from JSValue any more soon. 27974 27975 I did most of these changes by changing JSValue to not be JSValue* any 27976 more, then fixing a lot of the compilation problems, then rolling out 27977 the JSValue change. 27978 27979 1.011x as fast on SunSpider (presumably due to some of the Machine.cpp changes) 27980 27981 * API/APICast.h: Removed unneeded forward declarations. 27982 27983 * API/JSCallbackObject.h: Added an asCallbackObject function for casting. 27984 * API/JSCallbackObjectFunctions.h: 27985 (JSC::JSCallbackObject::asCallbackObject): Added. 27986 (JSC::JSCallbackObject::getOwnPropertySlot): Use asObject. 27987 (JSC::JSCallbackObject::call): Use noValue. 27988 (JSC::JSCallbackObject::staticValueGetter): Use asCallbackObject. 27989 (JSC::JSCallbackObject::staticFunctionGetter): Ditto. 27990 (JSC::JSCallbackObject::callbackGetter): Ditto. 27991 27992 * JavaScriptCore.exp: Updated. 27993 27994 * JavaScriptCore.xcodeproj/project.pbxproj: Added RegExpMatchesArray.h. 27995 27996 * VM/CTI.cpp: 27997 (JSC::CTI::asInteger): Added. For use casting a JSValue to an integer. 27998 (JSC::CTI::emitGetArg): Use asInteger. 27999 (JSC::CTI::emitGetPutArg): Ditto. 28000 (JSC::CTI::getConstantImmediateNumericArg): Ditto. Also use noValue. 28001 (JSC::CTI::emitInitRegister): Use asInteger. 28002 (JSC::CTI::getDeTaggedConstantImmediate): Ditto. 28003 (JSC::CTI::compileOpCallInitializeCallFrame): Ditto. 28004 (JSC::CTI::compileOpCall): Ditto. 28005 (JSC::CTI::compileOpStrictEq): Ditto. 28006 (JSC::CTI::privateCompileMainPass): Ditto. 28007 (JSC::CTI::privateCompileGetByIdProto): Ditto. 28008 (JSC::CTI::privateCompileGetByIdChain): Ditto. 28009 (JSC::CTI::privateCompilePutByIdTransition): Ditto. 28010 * VM/CTI.h: Rewrite the ARG-related macros to use C++ casts instead of 28011 C casts and get rid of some extra parentheses. Addd declaration of 28012 asInteger. 28013 28014 * VM/CodeGenerator.cpp: 28015 (JSC::CodeGenerator::emitEqualityOp): Use asString. 28016 (JSC::CodeGenerator::emitLoad): Use noValue. 28017 (JSC::CodeGenerator::findScopedProperty): Change globalObject argument 28018 to JSObject* instead of JSValue*. 28019 (JSC::CodeGenerator::emitResolve): Remove unneeded cast. 28020 (JSC::CodeGenerator::emitGetScopedVar): Use asCell. 28021 (JSC::CodeGenerator::emitPutScopedVar): Ditto. 28022 * VM/CodeGenerator.h: Changed out argument of findScopedProperty. 28023 Also change the JSValueMap to use PtrHash explicitly instead of 28024 getting it from DefaultHash. 28025 28026 * VM/JSPropertyNameIterator.cpp: 28027 (JSC::JSPropertyNameIterator::toPrimitive): Use noValue. 28028 * VM/JSPropertyNameIterator.h: 28029 (JSC::JSPropertyNameIterator::next): Ditto. 28030 28031 * VM/Machine.cpp: 28032 (JSC::fastIsNumber): Moved isImmediate check here instead of 28033 checking for 0 inside Heap::isNumber. Use asCell and asNumberCell. 28034 (JSC::fastToInt32): Ditto. 28035 (JSC::fastToUInt32): Ditto. 28036 (JSC::jsLess): Use asString. 28037 (JSC::jsLessEq): Ditto. 28038 (JSC::jsAdd): Ditto. 28039 (JSC::jsTypeStringForValue): Use asObject. 28040 (JSC::jsIsObjectType): Ditto. 28041 (JSC::jsIsFunctionType): Ditto. 28042 (JSC::inlineResolveBase): Use noValue. 28043 (JSC::Machine::callEval): Use asString. Initialize result to 28044 undefined, not 0. 28045 (JSC::Machine::Machine): Remove unneeded casts to JSCell*. 28046 (JSC::Machine::throwException): Use asObject. 28047 (JSC::Machine::debug): Remove explicit calls to the DebuggerCallFrame 28048 constructor. 28049 (JSC::Machine::checkTimeout): Use noValue. 28050 (JSC::cachePrototypeChain): Use asObject. 28051 (JSC::Machine::tryCachePutByID): Use asCell. 28052 (JSC::Machine::tryCacheGetByID): Use aCell and asObject. 28053 (JSC::Machine::privateExecute): Use noValue, asCell, asObject, asString, 28054 asArray, asActivation, asFunction. Changed code that creates call frames 28055 for host functions to pass 0 for the function pointer -- the call frame 28056 needs a JSFunction* and a host function object is not one. This was 28057 caught by the assertions in the casting functions. Also remove some 28058 unneeded casts in cases where two values are compared. 28059 (JSC::Machine::retrieveLastCaller): Use noValue. 28060 (JSC::Machine::tryCTICachePutByID): Use asCell. 28061 (JSC::Machine::tryCTICacheGetByID): Use aCell and asObject. 28062 (JSC::setUpThrowTrampolineReturnAddress): Added this function to restore 28063 the PIC-branch-avoidance that was recently lost. 28064 (JSC::Machine::cti_op_add): Use asString. 28065 (JSC::Machine::cti_op_instanceof): Use asCell and asObject. 28066 (JSC::Machine::cti_op_call_JSFunction): Use asFunction. 28067 (JSC::Machine::cti_op_call_NotJSFunction): Changed code to pass 0 for 28068 the function pointer, since we don't have a JSFunction. Use asObject. 28069 (JSC::Machine::cti_op_tear_off_activation): Use asActivation. 28070 (JSC::Machine::cti_op_construct_JSConstruct): Use asFunction and asObject. 28071 (JSC::Machine::cti_op_construct_NotJSConstruct): use asObject. 28072 (JSC::Machine::cti_op_get_by_val): Use asArray and asString. 28073 (JSC::Machine::cti_op_resolve_func): Use asPointer; this helps prepare 28074 us for a situation where JSValue is not a pointer. 28075 (JSC::Machine::cti_op_put_by_val): Use asArray. 28076 (JSC::Machine::cti_op_put_by_val_array): Ditto. 28077 (JSC::Machine::cti_op_resolve_global): Use asGlobalObject. 28078 (JSC::Machine::cti_op_post_inc): Change VM_CHECK_EXCEPTION_2 to 28079 VM_CHECK_EXCEPTION_AT_END, since there's no observable work done after 28080 that point. Also use asPointer. 28081 (JSC::Machine::cti_op_resolve_with_base): Use asPointer. 28082 (JSC::Machine::cti_op_post_dec): Change VM_CHECK_EXCEPTION_2 to 28083 VM_CHECK_EXCEPTION_AT_END, since there's no observable work done after 28084 that point. Also use asPointer. 28085 (JSC::Machine::cti_op_call_eval): Use asObject, noValue, and change 28086 VM_CHECK_EXCEPTION_ARG to VM_THROW_EXCEPTION_AT_END. 28087 (JSC::Machine::cti_op_throw): Change return value to a JSValue*. 28088 (JSC::Machine::cti_op_in): Use asObject. 28089 (JSC::Machine::cti_op_switch_char): Use asString. 28090 (JSC::Machine::cti_op_switch_string): Ditto. 28091 (JSC::Machine::cti_op_put_getter): Use asObject. 28092 (JSC::Machine::cti_op_put_setter): Ditto. 28093 (JSC::Machine::cti_vm_throw): Change return value to a JSValue*. 28094 Use noValue. 28095 * VM/Machine.h: Change return values of both cti_op_throw and 28096 cti_vm_throw to JSValue*. 28097 28098 * VM/Register.h: Remove nullJSValue, which is the same thing 28099 as noValue(). Also removed unneeded definition of JSValue. 28100 28101 * kjs/ArgList.h: Removed unneeded definition of JSValue. 28102 28103 * kjs/Arguments.h: 28104 (JSC::asArguments): Added. 28105 28106 * kjs/ArrayPrototype.cpp: 28107 (JSC::getProperty): Use noValue. 28108 (JSC::arrayProtoFuncToString): Use asArray. 28109 (JSC::arrayProtoFuncToLocaleString): Ditto. 28110 (JSC::arrayProtoFuncConcat): Ditto. 28111 (JSC::arrayProtoFuncPop): Ditto. Also removed unneeded initialization 28112 of the result, which is set in both sides of the branch. 28113 (JSC::arrayProtoFuncPush): Ditto. 28114 (JSC::arrayProtoFuncShift): Removed unneeded initialization 28115 of the result, which is set in both sides of the branch. 28116 (JSC::arrayProtoFuncSort): Use asArray. 28117 28118 * kjs/BooleanObject.h: 28119 (JSC::asBooleanObject): Added. 28120 28121 * kjs/BooleanPrototype.cpp: 28122 (JSC::booleanProtoFuncToString): Use asBooleanObject. 28123 (JSC::booleanProtoFuncValueOf): Ditto. 28124 28125 * kjs/CallData.cpp: 28126 (JSC::call): Use asObject and asFunction. 28127 * kjs/ConstructData.cpp: 28128 (JSC::construct): Ditto. 28129 28130 * kjs/DateConstructor.cpp: 28131 (JSC::constructDate): Use asDateInstance. 28132 28133 * kjs/DateInstance.h: 28134 (JSC::asDateInstance): Added. 28135 28136 * kjs/DatePrototype.cpp: 28137 (JSC::dateProtoFuncToString): Use asDateInstance. 28138 (JSC::dateProtoFuncToUTCString): Ditto. 28139 (JSC::dateProtoFuncToDateString): Ditto. 28140 (JSC::dateProtoFuncToTimeString): Ditto. 28141 (JSC::dateProtoFuncToLocaleString): Ditto. 28142 (JSC::dateProtoFuncToLocaleDateString): Ditto. 28143 (JSC::dateProtoFuncToLocaleTimeString): Ditto. 28144 (JSC::dateProtoFuncValueOf): Ditto. 28145 (JSC::dateProtoFuncGetTime): Ditto. 28146 (JSC::dateProtoFuncGetFullYear): Ditto. 28147 (JSC::dateProtoFuncGetUTCFullYear): Ditto. 28148 (JSC::dateProtoFuncToGMTString): Ditto. 28149 (JSC::dateProtoFuncGetMonth): Ditto. 28150 (JSC::dateProtoFuncGetUTCMonth): Ditto. 28151 (JSC::dateProtoFuncGetDate): Ditto. 28152 (JSC::dateProtoFuncGetUTCDate): Ditto. 28153 (JSC::dateProtoFuncGetDay): Ditto. 28154 (JSC::dateProtoFuncGetUTCDay): Ditto. 28155 (JSC::dateProtoFuncGetHours): Ditto. 28156 (JSC::dateProtoFuncGetUTCHours): Ditto. 28157 (JSC::dateProtoFuncGetMinutes): Ditto. 28158 (JSC::dateProtoFuncGetUTCMinutes): Ditto. 28159 (JSC::dateProtoFuncGetSeconds): Ditto. 28160 (JSC::dateProtoFuncGetUTCSeconds): Ditto. 28161 (JSC::dateProtoFuncGetMilliSeconds): Ditto. 28162 (JSC::dateProtoFuncGetUTCMilliseconds): Ditto. 28163 (JSC::dateProtoFuncGetTimezoneOffset): Ditto. 28164 (JSC::dateProtoFuncSetTime): Ditto. 28165 (JSC::setNewValueFromTimeArgs): Ditto. 28166 (JSC::setNewValueFromDateArgs): Ditto. 28167 (JSC::dateProtoFuncSetYear): Ditto. 28168 (JSC::dateProtoFuncGetYear): Ditto. 28169 28170 * kjs/DebuggerCallFrame.cpp: 28171 (JSC::DebuggerCallFrame::thisObject): Use asObject. 28172 (JSC::DebuggerCallFrame::evaluate): Use noValue. 28173 * kjs/DebuggerCallFrame.h: Added a constructor that 28174 takes only a callFrame. 28175 28176 * kjs/ExecState.h: 28177 (JSC::ExecState::clearException): Use noValue. 28178 28179 * kjs/FunctionPrototype.cpp: 28180 (JSC::functionProtoFuncToString): Use asFunction. 28181 (JSC::functionProtoFuncApply): Use asArguments and asArray. 28182 28183 * kjs/GetterSetter.cpp: 28184 (JSC::GetterSetter::getPrimitiveNumber): Use noValue. 28185 28186 * kjs/GetterSetter.h: 28187 (JSC::asGetterSetter): Added. 28188 28189 * kjs/InternalFunction.cpp: 28190 (JSC::InternalFunction::name): Use asString. 28191 28192 * kjs/InternalFunction.h: 28193 (JSC::asInternalFunction): Added. 28194 28195 * kjs/JSActivation.cpp: 28196 (JSC::JSActivation::argumentsGetter): Use asActivation. 28197 28198 * kjs/JSActivation.h: 28199 (JSC::asActivation): Added. 28200 28201 * kjs/JSArray.cpp: 28202 (JSC::JSArray::putSlowCase): Use noValue. 28203 (JSC::JSArray::deleteProperty): Ditto. 28204 (JSC::JSArray::increaseVectorLength): Ditto. 28205 (JSC::JSArray::setLength): Ditto. 28206 (JSC::JSArray::pop): Ditto. 28207 (JSC::JSArray::sort): Ditto. 28208 (JSC::JSArray::compactForSorting): Ditto. 28209 * kjs/JSArray.h: 28210 (JSC::asArray): Added. 28211 28212 * kjs/JSCell.cpp: 28213 (JSC::JSCell::getJSNumber): Use noValue. 28214 28215 * kjs/JSCell.h: 28216 (JSC::asCell): Added. 28217 (JSC::JSValue::asCell): Changed to not preserve const. 28218 Given the wide use of JSValue* and JSCell*, it's not 28219 really useful to use const. 28220 (JSC::JSValue::isNumber): Use asValue. 28221 (JSC::JSValue::isString): Ditto. 28222 (JSC::JSValue::isGetterSetter): Ditto. 28223 (JSC::JSValue::isObject): Ditto. 28224 (JSC::JSValue::getNumber): Ditto. 28225 (JSC::JSValue::getString): Ditto. 28226 (JSC::JSValue::getObject): Ditto. 28227 (JSC::JSValue::getCallData): Ditto. 28228 (JSC::JSValue::getConstructData): Ditto. 28229 (JSC::JSValue::getUInt32): Ditto. 28230 (JSC::JSValue::getTruncatedInt32): Ditto. 28231 (JSC::JSValue::getTruncatedUInt32): Ditto. 28232 (JSC::JSValue::mark): Ditto. 28233 (JSC::JSValue::marked): Ditto. 28234 (JSC::JSValue::toPrimitive): Ditto. 28235 (JSC::JSValue::getPrimitiveNumber): Ditto. 28236 (JSC::JSValue::toBoolean): Ditto. 28237 (JSC::JSValue::toNumber): Ditto. 28238 (JSC::JSValue::toString): Ditto. 28239 (JSC::JSValue::toObject): Ditto. 28240 (JSC::JSValue::toThisObject): Ditto. 28241 (JSC::JSValue::needsThisConversion): Ditto. 28242 (JSC::JSValue::toThisString): Ditto. 28243 (JSC::JSValue::getJSNumber): Ditto. 28244 28245 * kjs/JSFunction.cpp: 28246 (JSC::JSFunction::argumentsGetter): Use asFunction. 28247 (JSC::JSFunction::callerGetter): Ditto. 28248 (JSC::JSFunction::lengthGetter): Ditto. 28249 (JSC::JSFunction::construct): Use asObject. 28250 28251 * kjs/JSFunction.h: 28252 (JSC::asFunction): Added. 28253 28254 * kjs/JSGlobalObject.cpp: 28255 (JSC::lastInPrototypeChain): Use asObject. 28256 28257 * kjs/JSGlobalObject.h: 28258 (JSC::asGlobalObject): Added. 28259 (JSC::ScopeChainNode::globalObject): Use asGlobalObject. 28260 28261 * kjs/JSImmediate.h: Added noValue, asPointer, and makeValue 28262 functions. Use rawValue, makeValue, and noValue consistently 28263 instead of doing reinterpret_cast in various functions. 28264 28265 * kjs/JSNumberCell.h: 28266 (JSC::asNumberCell): Added. 28267 (JSC::JSValue::uncheckedGetNumber): Use asValue and asNumberCell. 28268 (JSC::JSValue::toJSNumber): Use asValue. 28269 28270 * kjs/JSObject.cpp: 28271 (JSC::JSObject::put): Use asObject and asGetterSetter. 28272 (JSC::callDefaultValueFunction): Use noValue. 28273 (JSC::JSObject::defineGetter): Use asGetterSetter. 28274 (JSC::JSObject::defineSetter): Ditto. 28275 (JSC::JSObject::lookupGetter): Ditto. Also use asObject. 28276 (JSC::JSObject::lookupSetter): Ditto. 28277 (JSC::JSObject::hasInstance): Use asObject. 28278 (JSC::JSObject::fillGetterPropertySlot): Use asGetterSetter. 28279 28280 * kjs/JSObject.h: 28281 (JSC::JSObject::getDirect): Use noValue. 28282 (JSC::asObject): Added. 28283 (JSC::JSValue::isObject): Use asValue. 28284 (JSC::JSObject::get): Removed unneeded const_cast. 28285 (JSC::JSObject::getPropertySlot): Use asObject. 28286 (JSC::JSValue::get): Removed unneeded const_cast. 28287 Use asValue, asCell, and asObject. 28288 (JSC::JSValue::put): Ditto. 28289 (JSC::JSObject::allocatePropertyStorageInline): Fixed spelling 28290 of "oldPropertStorage". 28291 28292 * kjs/JSString.cpp: 28293 (JSC::JSString::getOwnPropertySlot): Use asObject. 28294 28295 * kjs/JSString.h: 28296 (JSC::asString): Added. 28297 (JSC::JSValue::toThisJSString): Use asValue. 28298 28299 * kjs/JSValue.h: Make PreferredPrimitiveType a top level enum 28300 instead of a member of JSValue. Added an asValue function that 28301 returns this. Removed overload of asCell for const. Use asValue 28302 instead of getting right at this. 28303 28304 * kjs/ObjectPrototype.cpp: 28305 (JSC::objectProtoFuncIsPrototypeOf): Use asObject. 28306 (JSC::objectProtoFuncDefineGetter): Ditto. 28307 (JSC::objectProtoFuncDefineSetter): Ditto. 28308 28309 * kjs/PropertySlot.h: 28310 (JSC::PropertySlot::PropertySlot): Take a const JSValue* so the 28311 callers don't have to worry about const. 28312 (JSC::PropertySlot::clearBase): Use noValue. 28313 (JSC::PropertySlot::clearValue): Ditto. 28314 28315 * kjs/RegExpConstructor.cpp: 28316 (JSC::regExpConstructorDollar1): Use asRegExpConstructor. 28317 (JSC::regExpConstructorDollar2): Ditto. 28318 (JSC::regExpConstructorDollar3): Ditto. 28319 (JSC::regExpConstructorDollar4): Ditto. 28320 (JSC::regExpConstructorDollar5): Ditto. 28321 (JSC::regExpConstructorDollar6): Ditto. 28322 (JSC::regExpConstructorDollar7): Ditto. 28323 (JSC::regExpConstructorDollar8): Ditto. 28324 (JSC::regExpConstructorDollar9): Ditto. 28325 (JSC::regExpConstructorInput): Ditto. 28326 (JSC::regExpConstructorMultiline): Ditto. 28327 (JSC::regExpConstructorLastMatch): Ditto. 28328 (JSC::regExpConstructorLastParen): Ditto. 28329 (JSC::regExpConstructorLeftContext): Ditto. 28330 (JSC::regExpConstructorRightContext): Ditto. 28331 (JSC::setRegExpConstructorInput): Ditto. 28332 (JSC::setRegExpConstructorMultiline): Ditto. 28333 (JSC::constructRegExp): Use asObject. 28334 28335 * kjs/RegExpConstructor.h: 28336 (JSC::asRegExpConstructor): Added. 28337 28338 * kjs/RegExpObject.cpp: 28339 (JSC::regExpObjectGlobal): Use asRegExpObject. 28340 (JSC::regExpObjectIgnoreCase): Ditto. 28341 (JSC::regExpObjectMultiline): Ditto. 28342 (JSC::regExpObjectSource): Ditto. 28343 (JSC::regExpObjectLastIndex): Ditto. 28344 (JSC::setRegExpObjectLastIndex): Ditto. 28345 (JSC::callRegExpObject): Ditto. 28346 28347 * kjs/RegExpObject.h: 28348 (JSC::asRegExpObject): Added. 28349 28350 * kjs/RegExpPrototype.cpp: 28351 (JSC::regExpProtoFuncTest): Use asRegExpObject. 28352 (JSC::regExpProtoFuncExec): Ditto. 28353 (JSC::regExpProtoFuncCompile): Ditto. 28354 (JSC::regExpProtoFuncToString): Ditto. 28355 28356 * kjs/StringObject.h: 28357 (JSC::StringObject::internalValue): Use asString. 28358 (JSC::asStringObject): Added. 28359 28360 * kjs/StringPrototype.cpp: 28361 (JSC::stringProtoFuncReplace): Use asRegExpObject. 28362 (JSC::stringProtoFuncToString): Ue asStringObject. 28363 (JSC::stringProtoFuncMatch): Use asRegExpObject. 28364 (JSC::stringProtoFuncSearch): Ditto. 28365 (JSC::stringProtoFuncSplit): Ditto. 28366 28367 * kjs/StructureID.cpp: 28368 (JSC::StructureID::getEnumerablePropertyNames): Use asObject. 28369 (JSC::StructureID::createCachedPrototypeChain): Ditto. 28370 (JSC::StructureIDChain::StructureIDChain): Use asCell and asObject. 28371 28372 * kjs/collector.h: 28373 (JSC::Heap::isNumber): Removed null handling. This can only be called 28374 on valid cells. 28375 (JSC::Heap::cellBlock): Removed overload for const and non-const. 28376 Whether the JSCell* is const or not really should have no effect on 28377 whether you can modify the collector block it's in. 28378 28379 * kjs/interpreter.cpp: 28380 (JSC::Interpreter::evaluate): Use noValue and noObject. 28381 28382 * kjs/nodes.cpp: 28383 (JSC::FunctionCallResolveNode::emitCode): Use JSObject for the global 28384 object rather than JSValue. 28385 (JSC::PostfixResolveNode::emitCode): Ditto. 28386 (JSC::PrefixResolveNode::emitCode): Ditto. 28387 (JSC::ReadModifyResolveNode::emitCode): Ditto. 28388 (JSC::AssignResolveNode::emitCode): Ditto. 28389 28390 * kjs/operations.h: 28391 (JSC::equalSlowCaseInline): Use asString, asCell, asNumberCell, 28392 (JSC::strictEqualSlowCaseInline): Ditto. 28393 28394 2008-10-18 Cameron Zwarich <zwarich (a] apple.com> 28395 28396 Reviewed by Oliver Hunt. 28397 28398 Bug 21702: Special op_create_activation for the case where there are no named parameters 28399 <https://bugs.webkit.org/show_bug.cgi?id=21702> 28400 28401 This is a 2.5% speedup on the V8 Raytrace benchmark and a 1.1% speedup 28402 on the V8 Earley-Boyer benchmark. 28403 28404 * VM/CTI.cpp: 28405 (JSC::CTI::privateCompileMainPass): 28406 * VM/Machine.cpp: 28407 (JSC::Machine::cti_op_create_arguments_no_params): 28408 * VM/Machine.h: 28409 * kjs/Arguments.h: 28410 (JSC::Arguments::): 28411 (JSC::Arguments::Arguments): 28412 28413 2008-10-17 Maciej Stachowiak <mjs (a] apple.com> 28414 28415 Reviewed by Cameron Zwarich. 28416 28417 - in debug builds, alter the stack to avoid blowing out MallocStackLogging 28418 28419 (In essence, while executing a CTI function we alter the return 28420 address to jscGeneratedNativeCode so that a single consistent 28421 function is on the stack instead of many random functions without 28422 symbols.) 28423 28424 * VM/CTI.h: 28425 * VM/Machine.cpp: 28426 (JSC::doSetReturnAddress): 28427 (JSC::): 28428 (JSC::StackHack::StackHack): 28429 (JSC::StackHack::~StackHack): 28430 (JSC::Machine::cti_op_convert_this): 28431 (JSC::Machine::cti_op_end): 28432 (JSC::Machine::cti_op_add): 28433 (JSC::Machine::cti_op_pre_inc): 28434 (JSC::Machine::cti_timeout_check): 28435 (JSC::Machine::cti_register_file_check): 28436 (JSC::Machine::cti_op_loop_if_less): 28437 (JSC::Machine::cti_op_loop_if_lesseq): 28438 (JSC::Machine::cti_op_new_object): 28439 (JSC::Machine::cti_op_put_by_id): 28440 (JSC::Machine::cti_op_put_by_id_second): 28441 (JSC::Machine::cti_op_put_by_id_generic): 28442 (JSC::Machine::cti_op_put_by_id_fail): 28443 (JSC::Machine::cti_op_get_by_id): 28444 (JSC::Machine::cti_op_get_by_id_second): 28445 (JSC::Machine::cti_op_get_by_id_generic): 28446 (JSC::Machine::cti_op_get_by_id_fail): 28447 (JSC::Machine::cti_op_instanceof): 28448 (JSC::Machine::cti_op_del_by_id): 28449 (JSC::Machine::cti_op_mul): 28450 (JSC::Machine::cti_op_new_func): 28451 (JSC::Machine::cti_op_call_profiler): 28452 (JSC::Machine::cti_op_call_JSFunction): 28453 (JSC::Machine::cti_vm_lazyLinkCall): 28454 (JSC::Machine::cti_vm_compile): 28455 (JSC::Machine::cti_op_push_activation): 28456 (JSC::Machine::cti_op_call_NotJSFunction): 28457 (JSC::Machine::cti_op_create_arguments): 28458 (JSC::Machine::cti_op_tear_off_activation): 28459 (JSC::Machine::cti_op_tear_off_arguments): 28460 (JSC::Machine::cti_op_ret_profiler): 28461 (JSC::Machine::cti_op_ret_scopeChain): 28462 (JSC::Machine::cti_op_new_array): 28463 (JSC::Machine::cti_op_resolve): 28464 (JSC::Machine::cti_op_construct_JSConstructFast): 28465 (JSC::Machine::cti_op_construct_JSConstruct): 28466 (JSC::Machine::cti_op_construct_NotJSConstruct): 28467 (JSC::Machine::cti_op_get_by_val): 28468 (JSC::Machine::cti_op_resolve_func): 28469 (JSC::Machine::cti_op_sub): 28470 (JSC::Machine::cti_op_put_by_val): 28471 (JSC::Machine::cti_op_put_by_val_array): 28472 (JSC::Machine::cti_op_lesseq): 28473 (JSC::Machine::cti_op_loop_if_true): 28474 (JSC::Machine::cti_op_negate): 28475 (JSC::Machine::cti_op_resolve_base): 28476 (JSC::Machine::cti_op_resolve_skip): 28477 (JSC::Machine::cti_op_resolve_global): 28478 (JSC::Machine::cti_op_div): 28479 (JSC::Machine::cti_op_pre_dec): 28480 (JSC::Machine::cti_op_jless): 28481 (JSC::Machine::cti_op_not): 28482 (JSC::Machine::cti_op_jtrue): 28483 (JSC::Machine::cti_op_post_inc): 28484 (JSC::Machine::cti_op_eq): 28485 (JSC::Machine::cti_op_lshift): 28486 (JSC::Machine::cti_op_bitand): 28487 (JSC::Machine::cti_op_rshift): 28488 (JSC::Machine::cti_op_bitnot): 28489 (JSC::Machine::cti_op_resolve_with_base): 28490 (JSC::Machine::cti_op_new_func_exp): 28491 (JSC::Machine::cti_op_mod): 28492 (JSC::Machine::cti_op_less): 28493 (JSC::Machine::cti_op_neq): 28494 (JSC::Machine::cti_op_post_dec): 28495 (JSC::Machine::cti_op_urshift): 28496 (JSC::Machine::cti_op_bitxor): 28497 (JSC::Machine::cti_op_new_regexp): 28498 (JSC::Machine::cti_op_bitor): 28499 (JSC::Machine::cti_op_call_eval): 28500 (JSC::Machine::cti_op_throw): 28501 (JSC::Machine::cti_op_get_pnames): 28502 (JSC::Machine::cti_op_next_pname): 28503 (JSC::Machine::cti_op_push_scope): 28504 (JSC::Machine::cti_op_pop_scope): 28505 (JSC::Machine::cti_op_typeof): 28506 (JSC::Machine::cti_op_is_undefined): 28507 (JSC::Machine::cti_op_is_boolean): 28508 (JSC::Machine::cti_op_is_number): 28509 (JSC::Machine::cti_op_is_string): 28510 (JSC::Machine::cti_op_is_object): 28511 (JSC::Machine::cti_op_is_function): 28512 (JSC::Machine::cti_op_stricteq): 28513 (JSC::Machine::cti_op_nstricteq): 28514 (JSC::Machine::cti_op_to_jsnumber): 28515 (JSC::Machine::cti_op_in): 28516 (JSC::Machine::cti_op_push_new_scope): 28517 (JSC::Machine::cti_op_jmp_scopes): 28518 (JSC::Machine::cti_op_put_by_index): 28519 (JSC::Machine::cti_op_switch_imm): 28520 (JSC::Machine::cti_op_switch_char): 28521 (JSC::Machine::cti_op_switch_string): 28522 (JSC::Machine::cti_op_del_by_val): 28523 (JSC::Machine::cti_op_put_getter): 28524 (JSC::Machine::cti_op_put_setter): 28525 (JSC::Machine::cti_op_new_error): 28526 (JSC::Machine::cti_op_debug): 28527 (JSC::Machine::cti_vm_throw): 28528 28529 2008-10-17 Gavin Barraclough <barraclough (a] apple.com> 28530 28531 Optimize op_call by allowing call sites to be directly linked to callees. 28532 28533 For the hot path of op_call, CTI now generates a check (initially for an impossible 28534 value), and the first time the call is executed we attempt to link the call directly 28535 to the callee. We can currently only do so if the arity of the caller and callee 28536 match. The (optimized) setup for the call on the hot path is linked directly to 28537 the ctiCode for the callee, without indirection. 28538 28539 Two forms of the slow case of the call are generated, the first will be executed the 28540 first time the call is reached. As well as this path attempting to link the call to 28541 a callee, it also relinks the slow case to a second slow case, which will not continue 28542 to attempt relinking the call. (This policy could be changed in future, but for not 28543 this is intended to prevent thrashing). 28544 28545 If a callee that the caller has been linked to is garbage collected, then the link 28546 in the caller's JIt code will be reset back to a value that cannot match - to prevent 28547 any false positive matches. 28548 28549 ~20% progression on deltablue & richards, >12% overall reduction in v8-tests 28550 runtime, one or two percent progression on sunspider. 28551 28552 Reviewed by Oliver Hunt. 28553 28554 * VM/CTI.cpp: 28555 (JSC::): 28556 (JSC::CTI::emitNakedCall): 28557 (JSC::unreachable): 28558 (JSC::CTI::compileOpCallInitializeCallFrame): 28559 (JSC::CTI::compileOpCallSetupArgs): 28560 (JSC::CTI::compileOpCall): 28561 (JSC::CTI::privateCompileMainPass): 28562 (JSC::CTI::privateCompileSlowCases): 28563 (JSC::CTI::privateCompile): 28564 (JSC::CTI::unlinkCall): 28565 (JSC::CTI::linkCall): 28566 * VM/CTI.h: 28567 * VM/CodeBlock.cpp: 28568 (JSC::CodeBlock::~CodeBlock): 28569 (JSC::CodeBlock::unlinkCallers): 28570 (JSC::CodeBlock::derefStructureIDs): 28571 * VM/CodeBlock.h: 28572 (JSC::StructureStubInfo::StructureStubInfo): 28573 (JSC::CallLinkInfo::CallLinkInfo): 28574 (JSC::CodeBlock::addCaller): 28575 (JSC::CodeBlock::removeCaller): 28576 (JSC::CodeBlock::getStubInfo): 28577 * VM/CodeGenerator.cpp: 28578 (JSC::CodeGenerator::emitCall): 28579 (JSC::CodeGenerator::emitConstruct): 28580 * VM/Machine.cpp: 28581 (JSC::Machine::cti_op_call_profiler): 28582 (JSC::Machine::cti_op_call_JSFunction): 28583 (JSC::Machine::cti_vm_lazyLinkCall): 28584 (JSC::Machine::cti_op_construct_JSConstructFast): 28585 (JSC::Machine::cti_op_construct_JSConstruct): 28586 (JSC::Machine::cti_op_construct_NotJSConstruct): 28587 * VM/Machine.h: 28588 * kjs/JSFunction.cpp: 28589 (JSC::JSFunction::~JSFunction): 28590 * kjs/JSFunction.h: 28591 * kjs/nodes.h: 28592 (JSC::FunctionBodyNode::): 28593 * masm/X86Assembler.h: 28594 (JSC::X86Assembler::getDifferenceBetweenLabels): 28595 28596 2008-10-17 Maciej Stachowiak <mjs (a] apple.com> 28597 28598 Reviewed by Geoff Garen. 28599 28600 - remove ASSERT that makes the leaks buildbot cry 28601 28602 * kjs/JSFunction.cpp: 28603 (JSC::JSFunction::JSFunction): 28604 28605 2008-10-17 Maciej Stachowiak <mjs (a] apple.com> 28606 28607 Reviewed by Cameron Zwarich 28608 28609 - don't bother to do arguments tearoff when it will have no effect 28610 28611 ~1% on v8 raytrace 28612 28613 * VM/CodeGenerator.cpp: 28614 (JSC::CodeGenerator::emitReturn): 28615 28616 2008-10-17 Marco Barisione <marco.barisione (a] collabora.co.uk> 28617 28618 Reviewed by Sam Weinig. Landed by Jan Alonzo. 28619 28620 https://bugs.webkit.org/show_bug.cgi?id=21603 28621 [GTK] Minor fixes to GOwnPtr 28622 28623 * wtf/GOwnPtr.cpp: 28624 (WTF::GError): 28625 (WTF::GList): 28626 (WTF::GCond): 28627 (WTF::GMutex): 28628 (WTF::GPatternSpec): 28629 (WTF::GDir): 28630 * wtf/GOwnPtr.h: 28631 (WTF::freeOwnedGPtr): 28632 (WTF::GOwnPtr::~GOwnPtr): 28633 (WTF::GOwnPtr::outPtr): 28634 (WTF::GOwnPtr::set): 28635 (WTF::GOwnPtr::clear): 28636 * wtf/Threading.h: 28637 28638 2008-10-17 Maciej Stachowiak <mjs (a] apple.com> 28639 28640 Reviewed by Cameron Zwarich. 28641 28642 - speed up transitions that resize the property storage a fair bit 28643 28644 ~3% speedup on v8 RayTrace benchmark, ~1% on DeltaBlue 28645 28646 * VM/CTI.cpp: 28647 (JSC::resizePropertyStorage): renamed from transitionObject, and reduced to just resize 28648 the object's property storage with one inline call. 28649 (JSC::CTI::privateCompilePutByIdTransition): Use a separate function for property storage 28650 resize, but still do all the rest of the work in assembly in that case, and pass the known 28651 compile-time constants of old and new size rather than structureIDs, saving a bunch of 28652 redundant memory access. 28653 * kjs/JSObject.cpp: 28654 (JSC::JSObject::allocatePropertyStorage): Just call the inline version. 28655 * kjs/JSObject.h: 28656 (JSC::JSObject::allocatePropertyStorageInline): Inline version of allocatePropertyStorage 28657 * masm/X86Assembler.h: 28658 (JSC::X86Assembler::): 28659 (JSC::X86Assembler::pushl_i32): Add code to assmeble push of a constant; code originally by Cameron Zwarich. 28660 28661 2008-10-17 Cameron Zwarich <zwarich (a] apple.com> 28662 28663 Reviewed by Maciej Stachowiak. 28664 28665 Remove some C style casts. 28666 28667 * masm/X86Assembler.h: 28668 (JSC::JITCodeBuffer::putIntUnchecked): 28669 (JSC::X86Assembler::link): 28670 (JSC::X86Assembler::linkAbsoluteAddress): 28671 (JSC::X86Assembler::getRelocatedAddress): 28672 28673 2008-10-17 Cameron Zwarich <zwarich (a] apple.com> 28674 28675 Rubber-stamped by Maciej Stachowiak. 28676 28677 Remove some C style casts. 28678 28679 * VM/CTI.cpp: 28680 (JSC::CTI::patchGetByIdSelf): 28681 (JSC::CTI::patchPutByIdReplace): 28682 * VM/Machine.cpp: 28683 (JSC::Machine::tryCTICachePutByID): 28684 (JSC::Machine::tryCTICacheGetByID): 28685 (JSC::Machine::cti_op_put_by_id): 28686 (JSC::Machine::cti_op_put_by_id_fail): 28687 (JSC::Machine::cti_op_get_by_id): 28688 (JSC::Machine::cti_op_get_by_id_fail): 28689 28690 2008-10-17 Maciej Stachowiak <mjs (a] apple.com> 28691 28692 Reviewed by Cameron Zwarich. 28693 28694 - Avoid restoring the caller's 'r' value in op_ret 28695 https://bugs.webkit.org/show_bug.cgi?id=21319 28696 28697 This patch stops writing the call frame at call and return points; 28698 instead it does so immediately before any CTI call. 28699 28700 0.5% speedup or so on the v8 benchmark 28701 28702 * VM/CTI.cpp: 28703 (JSC::CTI::emitCTICall): 28704 (JSC::CTI::compileOpCall): 28705 (JSC::CTI::emitSlowScriptCheck): 28706 (JSC::CTI::compileBinaryArithOpSlowCase): 28707 (JSC::CTI::privateCompileMainPass): 28708 (JSC::CTI::privateCompileSlowCases): 28709 (JSC::CTI::privateCompile): 28710 * VM/CTI.h: 28711 28712 2008-10-17 Cameron Zwarich <zwarich (a] apple.com> 28713 28714 Reviewed by Sam Weinig. 28715 28716 Make WREC require CTI because it won't actually compile otherwise. 28717 28718 * wtf/Platform.h: 28719 28720 2008-10-16 Maciej Stachowiak <mjs (a] apple.com> 28721 28722 Reviewed by Geoff Garen. 28723 28724 - fixed <rdar://problem/5806316> JavaScriptCore should not force building with gcc 4.0 28725 - use gcc 4.2 when building with Xcode 3.1 or newer on Leopard, even though this is not the default 28726 28727 This time there is no performance regression; we can avoid having 28728 to use the fastcall calling convention for CTI functions by using 28729 varargs to prevent the compiler from moving things around on the 28730 stack. 28731 28732 * Configurations/DebugRelease.xcconfig: 28733 * JavaScriptCore.xcodeproj/project.pbxproj: 28734 * VM/CTI.cpp: 28735 * VM/Machine.h: 28736 * wtf/Platform.h: 28737 28738 2008-10-16 Maciej Stachowiak <mjs (a] apple.com> 28739 28740 Reviewed by Oliver Hunt. 28741 28742 - fix for REGRESSION: r37631 causing crashes on buildbot 28743 https://bugs.webkit.org/show_bug.cgi?id=21682 28744 28745 * kjs/collector.cpp: 28746 (JSC::Heap::collect): Avoid crashing when a GC occurs while no global objects are live. 28747 28748 2008-10-16 Sam Weinig <sam (a] webkit.org> 28749 28750 Reviewed by Maciej Stachowiak. 28751 28752 Fix for https://bugs.webkit.org/show_bug.cgi?id=21683 28753 Don't create intermediate StructureIDs for builtin objects 28754 28755 First step in reduce number of StructureIDs created when initializing the 28756 JSGlobalObject. 28757 28758 - In order to avoid creating the intermediate StructureIDs use the new putDirectWithoutTransition 28759 and putDirectFunctionWithoutTransition to add properties to JSObjects without transitioning 28760 the StructureID. This patch just implements this strategy for ObjectPrototype but alone 28761 reduces the number of StructureIDs create for about:blank by 10, from 142 to 132. 28762 28763 * kjs/JSGlobalObject.cpp: 28764 (JSC::JSGlobalObject::reset): 28765 * kjs/JSObject.cpp: 28766 (JSC::JSObject::putDirectFunctionWithoutTransition): 28767 * kjs/JSObject.h: 28768 (JSC::JSObject::putDirectWithoutTransition): 28769 * kjs/ObjectPrototype.cpp: 28770 (JSC::ObjectPrototype::ObjectPrototype): 28771 * kjs/ObjectPrototype.h: 28772 * kjs/StructureID.cpp: 28773 (JSC::StructureID::addPropertyWithoutTransition): 28774 * kjs/StructureID.h: 28775 28776 2008-10-16 Maciej Stachowiak <mjs (a] apple.com> 28777 28778 Reviewed by Cameron Zwarich. 28779 28780 - fix for: REGRESSION: over 100 StructureIDs leak loading about:blank (result of fix for bug 21633) 28781 28782 Apparent slight progression (< 0.5%) on v8 benchmarks and SunSpider. 28783 28784 * kjs/StructureID.cpp: 28785 (JSC::StructureID::~StructureID): Don't deref this object's parent's pointer to 28786 itself from the destructor; that doesn't even make sense. 28787 (JSC::StructureID::addPropertyTransition): Don't refer the single transition; 28788 the rule is that parent StructureIDs are ref'd but child ones are not. Refing 28789 the child creates a cycle. 28790 28791 2008-10-15 Alexey Proskuryakov <ap (a] webkit.org> 28792 28793 Reviewed by Darin Adler. 28794 28795 https://bugs.webkit.org/show_bug.cgi?id=21609 28796 Make MessagePorts protect their peers across heaps 28797 28798 * JavaScriptCore.exp: 28799 * kjs/JSGlobalObject.cpp: 28800 (JSC::JSGlobalObject::markCrossHeapDependentObjects): 28801 * kjs/JSGlobalObject.h: 28802 * kjs/collector.cpp: 28803 (JSC::Heap::collect): 28804 Before GC sweep phase, a function supplied by global object is now called for all global 28805 objects in the heap, making it possible to implement cross-heap dependencies. 28806 28807 2008-10-15 Alexey Proskuryakov <ap (a] webkit.org> 28808 28809 Reviewed by Darin Adler. 28810 28811 https://bugs.webkit.org/show_bug.cgi?id=21610 28812 run-webkit-threads --threaded crashes in StructureID destructor 28813 28814 * kjs/StructureID.cpp: 28815 (JSC::StructureID::StructureID): 28816 (JSC::StructureID::~StructureID): 28817 Protect access to a static (debug-only) HashSet with a lock. 28818 28819 2008-10-15 Sam Weinig <sam (a] webkit.org> 28820 28821 Reviewed by Goeffrey Garen. 28822 28823 Add function to dump statistics for StructureIDs. 28824 28825 * kjs/StructureID.cpp: 28826 (JSC::StructureID::dumpStatistics): 28827 (JSC::StructureID::StructureID): 28828 (JSC::StructureID::~StructureID): 28829 * kjs/StructureID.h: 28830 28831 2008-10-15 Cameron Zwarich <zwarich (a] apple.com> 28832 28833 Reviewed by Maciej Stachowiak. 28834 28835 Bug 21633: Avoid using a HashMap when there is only a single transition 28836 <https://bugs.webkit.org/show_bug.cgi?id=21633> 28837 28838 This is a 0.8% speedup on SunSpider and between a 0.5% and 1.0% speedup 28839 on the V8 benchmark suite, depending on which harness we use. It will 28840 also slightly reduce the memory footprint of a StructureID. 28841 28842 * kjs/StructureID.cpp: 28843 (JSC::StructureID::StructureID): 28844 (JSC::StructureID::~StructureID): 28845 (JSC::StructureID::addPropertyTransition): 28846 * kjs/StructureID.h: 28847 (JSC::StructureID::): 28848 28849 2008-10-15 Csaba Osztrogonac <oszi (a] inf.u-szeged.hu> 28850 28851 Reviewed by Geoffrey Garen. 28852 28853 1.40% speedup on SunSpider, 1.44% speedup on V8. (Linux) 28854 28855 No change on Mac. 28856 28857 * VM/Machine.cpp: 28858 (JSC::fastIsNumber): ALWAYS_INLINE modifier added. 28859 28860 2008-10-15 Geoffrey Garen <ggaren (a] apple.com> 28861 28862 Reviewed by Cameron Zwarich. 28863 28864 Fixed https://bugs.webkit.org/show_bug.cgi?id=21345 28865 Start the debugger without reloading the inspected page 28866 28867 * JavaScriptCore.exp: New symbols. 28868 * JavaScriptCore.xcodeproj/project.pbxproj: New files. 28869 28870 * VM/CodeBlock.h: 28871 (JSC::EvalCodeCache::get): Updated for tweak to parsing API. 28872 28873 * kjs/CollectorHeapIterator.h: Added. An iterator for the object heap, 28874 which we use to find all the live functions and recompile them. 28875 28876 * kjs/DebuggerCallFrame.cpp: 28877 (JSC::DebuggerCallFrame::evaluate): Updated for tweak to parsing API. 28878 28879 * kjs/FunctionConstructor.cpp: 28880 (JSC::constructFunction): Updated for tweak to parsing API. 28881 28882 * kjs/JSFunction.cpp: 28883 (JSC::JSFunction::JSFunction): Try to validate our SourceCode in debug 28884 builds by ASSERTing that it's syntactically valid. This doesn't catch 28885 all SourceCode bugs, but it catches a lot of them. 28886 28887 * kjs/JSGlobalObjectFunctions.cpp: 28888 (JSC::globalFuncEval): Updated for tweak to parsing API. 28889 28890 * kjs/Parser.cpp: 28891 (JSC::Parser::parse): 28892 * kjs/Parser.h: 28893 (JSC::Parser::parse): Tweaked the parser to make it possible to parse 28894 without an ExecState, and to allow the client to specify a debugger to 28895 notify (or not) about the source we parse. This allows the inspector 28896 to recompile even though no JavaScript is executing, then notify the 28897 debugger about all source code when it's done. 28898 28899 * kjs/Shell.cpp: 28900 (prettyPrintScript): Updated for tweak to parsing API. 28901 28902 * kjs/SourceRange.h: 28903 (JSC::SourceCode::isNull): Added to help with ASSERTs. 28904 28905 * kjs/collector.cpp: 28906 (JSC::Heap::heapAllocate): 28907 (JSC::Heap::sweep): 28908 (JSC::Heap::primaryHeapBegin): 28909 (JSC::Heap::primaryHeapEnd): 28910 * kjs/collector.h: 28911 (JSC::): Moved a bunch of declarations around to enable compilation of 28912 CollectorHeapIterator. 28913 28914 * kjs/interpreter.cpp: 28915 (JSC::Interpreter::checkSyntax): 28916 (JSC::Interpreter::evaluate): Updated for tweak to parsing API. 28917 28918 * kjs/lexer.h: 28919 (JSC::Lexer::sourceCode): BUG FIX: Calculate SourceCode ranges relative 28920 to the SourceCode range in which we're lexing, otherwise nested functions 28921 that are compiled individually get SourceCode ranges that don't reflect 28922 their nesting. 28923 28924 * kjs/nodes.cpp: 28925 (JSC::FunctionBodyNode::FunctionBodyNode): 28926 (JSC::FunctionBodyNode::finishParsing): 28927 (JSC::FunctionBodyNode::create): 28928 (JSC::FunctionBodyNode::copyParameters): 28929 * kjs/nodes.h: 28930 (JSC::ScopeNode::setSource): 28931 (JSC::FunctionBodyNode::parameterCount): Added some helper functions for 28932 copying one FunctionBodyNode's parameters to another. The recompiler uses 28933 these when calling "finishParsing". 28934 28935 2008-10-15 Joerg Bornemann <joerg.bornemann (a] trolltech.com> 28936 28937 Reviewed by Darin Adler. 28938 28939 - part of https://bugs.webkit.org/show_bug.cgi?id=20746 28940 Fix compilation on Windows CE. 28941 28942 str(n)icmp, strdup and vsnprintf are not available on Windows CE, 28943 they are called _str(n)icmp, etc. instead 28944 28945 * wtf/StringExtras.h: Added inline function implementations. 28946 28947 2008-10-15 Gabor Loki <loki (a] inf.u-szeged.hu> 28948 28949 Reviewed by Cameron Zwarich. 28950 28951 <https://bugs.webkit.org/show_bug.cgi?id=20912> 28952 Use simple uint32_t multiplication on op_mul if both operands are 28953 immediate number and they are between zero and 0x7FFF. 28954 28955 * VM/Machine.cpp: 28956 (JSC::Machine::privateExecute): 28957 28958 2008-10-09 Darin Fisher <darin (a] chromium.org> 28959 28960 Reviewed by Sam Weinig. 28961 28962 Make pan scrolling a platform configurable option. 28963 https://bugs.webkit.org/show_bug.cgi?id=21515 28964 28965 * wtf/Platform.h: Add ENABLE_PAN_SCROLLING 28966 28967 2008-10-14 Maciej Stachowiak <mjs (a] apple.com> 28968 28969 Rubber stamped by Sam Weinig. 28970 28971 - revert r37572 and r37581 for now 28972 28973 Turns out GCC 4.2 is still a (small) regression, we'll have to do 28974 more work to turn it on. 28975 28976 * Configurations/DebugRelease.xcconfig: 28977 * JavaScriptCore.xcodeproj/project.pbxproj: 28978 * VM/CTI.cpp: 28979 * VM/CTI.h: 28980 * VM/Machine.cpp: 28981 (JSC::Machine::cti_op_convert_this): 28982 (JSC::Machine::cti_op_end): 28983 (JSC::Machine::cti_op_add): 28984 (JSC::Machine::cti_op_pre_inc): 28985 (JSC::Machine::cti_timeout_check): 28986 (JSC::Machine::cti_register_file_check): 28987 (JSC::Machine::cti_op_loop_if_less): 28988 (JSC::Machine::cti_op_loop_if_lesseq): 28989 (JSC::Machine::cti_op_new_object): 28990 (JSC::Machine::cti_op_put_by_id): 28991 (JSC::Machine::cti_op_put_by_id_second): 28992 (JSC::Machine::cti_op_put_by_id_generic): 28993 (JSC::Machine::cti_op_put_by_id_fail): 28994 (JSC::Machine::cti_op_get_by_id): 28995 (JSC::Machine::cti_op_get_by_id_second): 28996 (JSC::Machine::cti_op_get_by_id_generic): 28997 (JSC::Machine::cti_op_get_by_id_fail): 28998 (JSC::Machine::cti_op_instanceof): 28999 (JSC::Machine::cti_op_del_by_id): 29000 (JSC::Machine::cti_op_mul): 29001 (JSC::Machine::cti_op_new_func): 29002 (JSC::Machine::cti_op_call_JSFunction): 29003 (JSC::Machine::cti_vm_compile): 29004 (JSC::Machine::cti_op_push_activation): 29005 (JSC::Machine::cti_op_call_NotJSFunction): 29006 (JSC::Machine::cti_op_create_arguments): 29007 (JSC::Machine::cti_op_tear_off_activation): 29008 (JSC::Machine::cti_op_tear_off_arguments): 29009 (JSC::Machine::cti_op_ret_profiler): 29010 (JSC::Machine::cti_op_ret_scopeChain): 29011 (JSC::Machine::cti_op_new_array): 29012 (JSC::Machine::cti_op_resolve): 29013 (JSC::Machine::cti_op_construct_JSConstruct): 29014 (JSC::Machine::cti_op_construct_NotJSConstruct): 29015 (JSC::Machine::cti_op_get_by_val): 29016 (JSC::Machine::cti_op_resolve_func): 29017 (JSC::Machine::cti_op_sub): 29018 (JSC::Machine::cti_op_put_by_val): 29019 (JSC::Machine::cti_op_put_by_val_array): 29020 (JSC::Machine::cti_op_lesseq): 29021 (JSC::Machine::cti_op_loop_if_true): 29022 (JSC::Machine::cti_op_negate): 29023 (JSC::Machine::cti_op_resolve_base): 29024 (JSC::Machine::cti_op_resolve_skip): 29025 (JSC::Machine::cti_op_resolve_global): 29026 (JSC::Machine::cti_op_div): 29027 (JSC::Machine::cti_op_pre_dec): 29028 (JSC::Machine::cti_op_jless): 29029 (JSC::Machine::cti_op_not): 29030 (JSC::Machine::cti_op_jtrue): 29031 (JSC::Machine::cti_op_post_inc): 29032 (JSC::Machine::cti_op_eq): 29033 (JSC::Machine::cti_op_lshift): 29034 (JSC::Machine::cti_op_bitand): 29035 (JSC::Machine::cti_op_rshift): 29036 (JSC::Machine::cti_op_bitnot): 29037 (JSC::Machine::cti_op_resolve_with_base): 29038 (JSC::Machine::cti_op_new_func_exp): 29039 (JSC::Machine::cti_op_mod): 29040 (JSC::Machine::cti_op_less): 29041 (JSC::Machine::cti_op_neq): 29042 (JSC::Machine::cti_op_post_dec): 29043 (JSC::Machine::cti_op_urshift): 29044 (JSC::Machine::cti_op_bitxor): 29045 (JSC::Machine::cti_op_new_regexp): 29046 (JSC::Machine::cti_op_bitor): 29047 (JSC::Machine::cti_op_call_eval): 29048 (JSC::Machine::cti_op_throw): 29049 (JSC::Machine::cti_op_get_pnames): 29050 (JSC::Machine::cti_op_next_pname): 29051 (JSC::Machine::cti_op_push_scope): 29052 (JSC::Machine::cti_op_pop_scope): 29053 (JSC::Machine::cti_op_typeof): 29054 (JSC::Machine::cti_op_is_undefined): 29055 (JSC::Machine::cti_op_is_boolean): 29056 (JSC::Machine::cti_op_is_number): 29057 (JSC::Machine::cti_op_is_string): 29058 (JSC::Machine::cti_op_is_object): 29059 (JSC::Machine::cti_op_is_function): 29060 (JSC::Machine::cti_op_stricteq): 29061 (JSC::Machine::cti_op_nstricteq): 29062 (JSC::Machine::cti_op_to_jsnumber): 29063 (JSC::Machine::cti_op_in): 29064 (JSC::Machine::cti_op_push_new_scope): 29065 (JSC::Machine::cti_op_jmp_scopes): 29066 (JSC::Machine::cti_op_put_by_index): 29067 (JSC::Machine::cti_op_switch_imm): 29068 (JSC::Machine::cti_op_switch_char): 29069 (JSC::Machine::cti_op_switch_string): 29070 (JSC::Machine::cti_op_del_by_val): 29071 (JSC::Machine::cti_op_put_getter): 29072 (JSC::Machine::cti_op_put_setter): 29073 (JSC::Machine::cti_op_new_error): 29074 (JSC::Machine::cti_op_debug): 29075 (JSC::Machine::cti_vm_throw): 29076 * VM/Machine.h: 29077 * masm/X86Assembler.h: 29078 (JSC::X86Assembler::emitRestoreArgumentReference): 29079 (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline): 29080 * wtf/Platform.h: 29081 29082 2008-10-14 Alexey Proskuryakov <ap (a] webkit.org> 29083 29084 Reviewed by Darin Adler. 29085 29086 https://bugs.webkit.org/show_bug.cgi?id=20256 29087 Array.push and other standard methods disappear 29088 29089 * kjs/JSGlobalData.cpp: 29090 (JSC::JSGlobalData::JSGlobalData): 29091 (JSC::JSGlobalData::~JSGlobalData): 29092 Don't use static hash tables even on platforms that don't enable JSC_MULTIPLE_THREADS - 29093 these tables reference IdentifierTable, which is always per-GlobalData. 29094 29095 2008-10-14 Maciej Stachowiak <mjs (a] apple.com> 29096 29097 Reviewed by Cameron Zwarich. 29098 29099 - always use CTI_ARGUMENTS and CTI_ARGUMENTS_FASTCALL 29100 29101 This is a small regression for GCC 4.0, but simplifies the code 29102 for future improvements and lets us focus on GCC 4.2+ and MSVC. 29103 29104 * VM/CTI.cpp: 29105 * VM/CTI.h: 29106 * VM/Machine.cpp: 29107 (JSC::Machine::cti_op_convert_this): 29108 (JSC::Machine::cti_op_end): 29109 (JSC::Machine::cti_op_add): 29110 (JSC::Machine::cti_op_pre_inc): 29111 (JSC::Machine::cti_timeout_check): 29112 (JSC::Machine::cti_register_file_check): 29113 (JSC::Machine::cti_op_loop_if_less): 29114 (JSC::Machine::cti_op_loop_if_lesseq): 29115 (JSC::Machine::cti_op_new_object): 29116 (JSC::Machine::cti_op_put_by_id): 29117 (JSC::Machine::cti_op_put_by_id_second): 29118 (JSC::Machine::cti_op_put_by_id_generic): 29119 (JSC::Machine::cti_op_put_by_id_fail): 29120 (JSC::Machine::cti_op_get_by_id): 29121 (JSC::Machine::cti_op_get_by_id_second): 29122 (JSC::Machine::cti_op_get_by_id_generic): 29123 (JSC::Machine::cti_op_get_by_id_fail): 29124 (JSC::Machine::cti_op_instanceof): 29125 (JSC::Machine::cti_op_del_by_id): 29126 (JSC::Machine::cti_op_mul): 29127 (JSC::Machine::cti_op_new_func): 29128 (JSC::Machine::cti_op_call_JSFunction): 29129 (JSC::Machine::cti_vm_compile): 29130 (JSC::Machine::cti_op_push_activation): 29131 (JSC::Machine::cti_op_call_NotJSFunction): 29132 (JSC::Machine::cti_op_create_arguments): 29133 (JSC::Machine::cti_op_tear_off_activation): 29134 (JSC::Machine::cti_op_tear_off_arguments): 29135 (JSC::Machine::cti_op_ret_profiler): 29136 (JSC::Machine::cti_op_ret_scopeChain): 29137 (JSC::Machine::cti_op_new_array): 29138 (JSC::Machine::cti_op_resolve): 29139 (JSC::Machine::cti_op_construct_JSConstruct): 29140 (JSC::Machine::cti_op_construct_NotJSConstruct): 29141 (JSC::Machine::cti_op_get_by_val): 29142 (JSC::Machine::cti_op_resolve_func): 29143 (JSC::Machine::cti_op_sub): 29144 (JSC::Machine::cti_op_put_by_val): 29145 (JSC::Machine::cti_op_put_by_val_array): 29146 (JSC::Machine::cti_op_lesseq): 29147 (JSC::Machine::cti_op_loop_if_true): 29148 (JSC::Machine::cti_op_negate): 29149 (JSC::Machine::cti_op_resolve_base): 29150 (JSC::Machine::cti_op_resolve_skip): 29151 (JSC::Machine::cti_op_resolve_global): 29152 (JSC::Machine::cti_op_div): 29153 (JSC::Machine::cti_op_pre_dec): 29154 (JSC::Machine::cti_op_jless): 29155 (JSC::Machine::cti_op_not): 29156 (JSC::Machine::cti_op_jtrue): 29157 (JSC::Machine::cti_op_post_inc): 29158 (JSC::Machine::cti_op_eq): 29159 (JSC::Machine::cti_op_lshift): 29160 (JSC::Machine::cti_op_bitand): 29161 (JSC::Machine::cti_op_rshift): 29162 (JSC::Machine::cti_op_bitnot): 29163 (JSC::Machine::cti_op_resolve_with_base): 29164 (JSC::Machine::cti_op_new_func_exp): 29165 (JSC::Machine::cti_op_mod): 29166 (JSC::Machine::cti_op_less): 29167 (JSC::Machine::cti_op_neq): 29168 (JSC::Machine::cti_op_post_dec): 29169 (JSC::Machine::cti_op_urshift): 29170 (JSC::Machine::cti_op_bitxor): 29171 (JSC::Machine::cti_op_new_regexp): 29172 (JSC::Machine::cti_op_bitor): 29173 (JSC::Machine::cti_op_call_eval): 29174 (JSC::Machine::cti_op_throw): 29175 (JSC::Machine::cti_op_get_pnames): 29176 (JSC::Machine::cti_op_next_pname): 29177 (JSC::Machine::cti_op_push_scope): 29178 (JSC::Machine::cti_op_pop_scope): 29179 (JSC::Machine::cti_op_typeof): 29180 (JSC::Machine::cti_op_is_undefined): 29181 (JSC::Machine::cti_op_is_boolean): 29182 (JSC::Machine::cti_op_is_number): 29183 (JSC::Machine::cti_op_is_string): 29184 (JSC::Machine::cti_op_is_object): 29185 (JSC::Machine::cti_op_is_function): 29186 (JSC::Machine::cti_op_stricteq): 29187 (JSC::Machine::cti_op_nstricteq): 29188 (JSC::Machine::cti_op_to_jsnumber): 29189 (JSC::Machine::cti_op_in): 29190 (JSC::Machine::cti_op_push_new_scope): 29191 (JSC::Machine::cti_op_jmp_scopes): 29192 (JSC::Machine::cti_op_put_by_index): 29193 (JSC::Machine::cti_op_switch_imm): 29194 (JSC::Machine::cti_op_switch_char): 29195 (JSC::Machine::cti_op_switch_string): 29196 (JSC::Machine::cti_op_del_by_val): 29197 (JSC::Machine::cti_op_put_getter): 29198 (JSC::Machine::cti_op_put_setter): 29199 (JSC::Machine::cti_op_new_error): 29200 (JSC::Machine::cti_op_debug): 29201 (JSC::Machine::cti_vm_throw): 29202 * VM/Machine.h: 29203 * masm/X86Assembler.h: 29204 (JSC::X86Assembler::emitRestoreArgumentReference): 29205 (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline): 29206 * wtf/Platform.h: 29207 29208 2008-10-13 Maciej Stachowiak <mjs (a] apple.com> 29209 29210 Reviewed by Cameron Zwarich. 29211 29212 - make Machine::getArgumentsData an Arguments method and inline it 29213 29214 ~2% on v8 raytrace 29215 29216 * VM/Machine.cpp: 29217 * kjs/Arguments.h: 29218 (JSC::Machine::getArgumentsData): 29219 29220 2008-10-13 Alp Toker <alp (a] nuanti.com> 29221 29222 Fix autotools dist build target by listing recently added header 29223 files only. Not reviewed. 29224 29225 * GNUmakefile.am: 29226 29227 2008-10-13 Maciej Stachowiak <mjs (a] apple.com> 29228 29229 Rubber stamped by Mark Rowe. 29230 29231 - fixed <rdar://problem/5806316> JavaScriptCore should not force building with gcc 4.0 29232 - use gcc 4.2 when building with Xcode 3.1 or newer on Leopard, even though this is not the default 29233 29234 * Configurations/DebugRelease.xcconfig: 29235 * JavaScriptCore.xcodeproj/project.pbxproj: 29236 29237 2008-10-13 Cameron Zwarich <zwarich (a] apple.com> 29238 29239 Reviewed by Geoff Garen. 29240 29241 Bug 21541: Move RegisterFile growth check to callee 29242 <https://bugs.webkit.org/show_bug.cgi?id=21541> 29243 29244 Move the RegisterFile growth check to the callee in the common case, 29245 where some of the information is known statically at JIT time. There is 29246 still a check in the caller in the case where the caller provides too 29247 few arguments. 29248 29249 This is a 2.1% speedup on the V8 benchmark, including a 5.1% speedup on 29250 the Richards benchmark, a 4.1% speedup on the DeltaBlue benchmark, and a 29251 1.4% speedup on the Earley-Boyer benchmark. It is also a 0.5% speedup on 29252 SunSpider. 29253 29254 * VM/CTI.cpp: 29255 (JSC::CTI::privateCompile): 29256 * VM/Machine.cpp: 29257 (JSC::Machine::cti_register_file_check): 29258 (JSC::Machine::cti_op_call_JSFunction): 29259 (JSC::Machine::cti_op_construct_JSConstruct): 29260 * VM/Machine.h: 29261 * VM/RegisterFile.h: 29262 * masm/X86Assembler.h: 29263 (JSC::X86Assembler::): 29264 (JSC::X86Assembler::cmpl_mr): 29265 (JSC::X86Assembler::emitUnlinkedJg): 29266 29267 2008-10-13 Sam Weinig <sam (a] webkit.org> 29268 29269 Reviewed by Dan Bernstein. 29270 29271 Fix for https://bugs.webkit.org/show_bug.cgi?id=21577 29272 5 false positive StructureID leaks 29273 29274 - Add leak ignore set to StructureID to selectively ignore leaking some StructureIDs. 29275 - Add create method to JSGlolalData to be used when the data will be intentionally 29276 leaked and ignore all leaks caused the StructureIDs stored in it. 29277 29278 * JavaScriptCore.exp: 29279 * kjs/JSGlobalData.cpp: 29280 (JSC::JSGlobalData::createLeaked): 29281 * kjs/JSGlobalData.h: 29282 * kjs/StructureID.cpp: 29283 (JSC::StructureID::StructureID): 29284 (JSC::StructureID::~StructureID): 29285 (JSC::StructureID::startIgnoringLeaks): 29286 (JSC::StructureID::stopIgnoringLeaks): 29287 * kjs/StructureID.h: 29288 29289 2008-10-13 Marco Barisione <marco.barisione (a] collabora.co.uk> 29290 29291 Reviewed by Darin Adler. Landed by Jan Alonzo. 29292 29293 WebKit GTK Port needs a smartpointer to handle g_free (GFreePtr?) 29294 http://bugs.webkit.org/show_bug.cgi?id=20483 29295 29296 Add a GOwnPtr smart pointer (similar to OwnPtr) to handle memory 29297 allocated by GLib and start the conversion to use it. 29298 29299 * GNUmakefile.am: 29300 * wtf/GOwnPtr.cpp: Added. 29301 (WTF::GError): 29302 (WTF::GList): 29303 (WTF::GCond): 29304 (WTF::GMutex): 29305 (WTF::GPatternSpec): 29306 (WTF::GDir): 29307 * wtf/GOwnPtr.h: Added. 29308 (WTF::freeOwnedPtr): 29309 (WTF::GOwnPtr::GOwnPtr): 29310 (WTF::GOwnPtr::~GOwnPtr): 29311 (WTF::GOwnPtr::get): 29312 (WTF::GOwnPtr::release): 29313 (WTF::GOwnPtr::rawPtr): 29314 (WTF::GOwnPtr::set): 29315 (WTF::GOwnPtr::clear): 29316 (WTF::GOwnPtr::operator*): 29317 (WTF::GOwnPtr::operator->): 29318 (WTF::GOwnPtr::operator!): 29319 (WTF::GOwnPtr::operator UnspecifiedBoolType): 29320 (WTF::GOwnPtr::swap): 29321 (WTF::swap): 29322 (WTF::operator==): 29323 (WTF::operator!=): 29324 (WTF::getPtr): 29325 * wtf/Threading.h: 29326 * wtf/ThreadingGtk.cpp: 29327 (WTF::Mutex::~Mutex): 29328 (WTF::Mutex::lock): 29329 (WTF::Mutex::tryLock): 29330 (WTF::Mutex::unlock): 29331 (WTF::ThreadCondition::~ThreadCondition): 29332 (WTF::ThreadCondition::wait): 29333 (WTF::ThreadCondition::timedWait): 29334 (WTF::ThreadCondition::signal): 29335 (WTF::ThreadCondition::broadcast): 29336 29337 2008-10-12 Gabriella Toth <gtoth (a] inf.u-szeged.hu> 29338 29339 Reviewed by Darin Adler. 29340 29341 - part of https://bugs.webkit.org/show_bug.cgi?id=21055 29342 Bug 21055: not invoked functions 29343 29344 * kjs/nodes.cpp: Deleted a function that is not invoked: 29345 statementListInitializeVariableAccessStack. 29346 29347 2008-10-12 Darin Adler <darin (a] apple.com> 29348 29349 Reviewed by Sam Weinig. 29350 29351 * wtf/unicode/icu/UnicodeIcu.h: Fixed indentation to match WebKit coding style. 29352 * wtf/unicode/qt4/UnicodeQt4.h: Ditto. 29353 29354 2008-10-12 Darin Adler <darin (a] apple.com> 29355 29356 Reviewed by Sam Weinig. 29357 29358 - https://bugs.webkit.org/show_bug.cgi?id=21556 29359 Bug 21556: non-ASCII digits are allowed in places where only ASCII should be 29360 29361 * wtf/unicode/icu/UnicodeIcu.h: Removed isDigit, digitValue, and isFormatChar. 29362 * wtf/unicode/qt4/UnicodeQt4.h: Ditto. 29363 29364 2008-10-12 Anders Carlsson <andersca (a] apple.com> 29365 29366 Reviewed by Darin Adler. 29367 29368 Make the append method that takes a Vector more strict - it now requires the elements 29369 of the vector to be appended same type as the elements of the Vector they're being appended to. 29370 29371 This would cause problems when dealing with Vectors containing other Vectors. 29372 29373 * wtf/Vector.h: 29374 (WTF::::append): 29375 29376 2008-10-11 Cameron Zwarich <zwarich (a] apple.com> 29377 29378 Reviewed by Sam Weinig. 29379 29380 Clean up RegExpMatchesArray.h to match our coding style. 29381 29382 * kjs/RegExpMatchesArray.h: 29383 (JSC::RegExpMatchesArray::getOwnPropertySlot): 29384 (JSC::RegExpMatchesArray::put): 29385 (JSC::RegExpMatchesArray::deleteProperty): 29386 (JSC::RegExpMatchesArray::getPropertyNames): 29387 29388 2008-10-11 Cameron Zwarich <zwarich (a] apple.com> 29389 29390 Reviewed by Sam Weinig. 29391 29392 Bug 21525: 55 StructureID leaks on Wikitravel's main page 29393 <https://bugs.webkit.org/show_bug.cgi?id=21525> 29394 29395 Bug 21533: Simple JavaScript code leaks StructureIDs 29396 <https://bugs.webkit.org/show_bug.cgi?id=21533> 29397 29398 StructureID::getEnumerablePropertyNames() ends up calling back to itself 29399 via JSObject::getPropertyNames(), which causes the PropertyNameArray to 29400 be cached twice. This leads to a memory leak in almost every use of 29401 JSObject::getPropertyNames() on an object. The fix here is based on a 29402 suggestion of Sam Weinig. 29403 29404 This patch also fixes every StructureID leaks that occurs while running 29405 the Mozilla MemBuster test. 29406 29407 * kjs/PropertyNameArray.h: 29408 (JSC::PropertyNameArray::PropertyNameArray): 29409 (JSC::PropertyNameArray::setCacheable): 29410 (JSC::PropertyNameArray::cacheable): 29411 * kjs/StructureID.cpp: 29412 (JSC::StructureID::getEnumerablePropertyNames): 29413 29414 2008-10-10 Oliver Hunt <oliver (a] apple.com> 29415 29416 Reviewed by Cameron Zwarich. 29417 29418 Use fastcall calling convention on GCC > 4.0 29419 29420 Results in a 2-3% improvement in GCC 4.2 performance, so 29421 that it is no longer a regression vs. GCC 4.0 29422 29423 * VM/CTI.cpp: 29424 * VM/Machine.h: 29425 * wtf/Platform.h: 29426 29427 2008-10-10 Sam Weinig <sam (a] webkit.org> 29428 29429 Reviewed by Darin Adler. 29430 29431 - Add a workaround for a bug in ceil in Darwin libc. 29432 - Remove old workarounds for JS math functions that are not needed 29433 anymore. 29434 29435 The math functions are heavily tested by fast/js/math.html. 29436 29437 * kjs/MathObject.cpp: 29438 (JSC::mathProtoFuncAbs): Remove workaround. 29439 (JSC::mathProtoFuncCeil): Ditto. 29440 (JSC::mathProtoFuncFloor): Ditto. 29441 * wtf/MathExtras.h: 29442 (wtf_ceil): Add ceil workaround for darwin. 29443 29444 2008-10-10 Sam Weinig <sam (a] webkit.org> 29445 29446 Reviewed by Darin Adler 29447 29448 Add Assertions to JSObject constructor. 29449 29450 * kjs/JSObject.h: 29451 (JSC::JSObject::JSObject): 29452 29453 2008-10-10 Sam Weinig <sam (a] webkit.org> 29454 29455 Reviewed by Cameron Zwarich. 29456 29457 Remove now unused m_getterSetterFlag variable from PropertyMap. 29458 29459 * kjs/PropertyMap.cpp: 29460 (JSC::PropertyMap::operator=): 29461 * kjs/PropertyMap.h: 29462 (JSC::PropertyMap::PropertyMap): 29463 29464 2008-10-09 Sam Weinig <sam (a] webkit.org> 29465 29466 Reviewed by Maciej Stachowiak. 29467 29468 Add leaks checking to StructureID. 29469 29470 * kjs/StructureID.cpp: 29471 (JSC::StructureID::StructureID): 29472 (JSC::StructureID::~StructureID): 29473 29474 2008-10-09 Alp Toker <alp (a] nuanti.com> 29475 29476 Reviewed by Mark Rowe. 29477 29478 https://bugs.webkit.org/show_bug.cgi?id=20760 29479 Implement support for x86 Linux in CTI 29480 29481 Prepare to enable CTI/WREC on supported architectures. 29482 29483 Make it possible to use the CTI_ARGUMENT workaround with GCC as well 29484 as MSVC by fixing some preprocessor conditionals. 29485 29486 Note that CTI/WREC no longer requires CTI_ARGUMENT on Linux so we 29487 don't actually enable it except when building with MSVC. GCC on Win32 29488 remains untested. 29489 29490 Adapt inline ASM code to use the global symbol underscore prefix only 29491 on Darwin and to call the properly mangled Machine::cti_vm_throw 29492 symbol name depending on CTI_ARGUMENT. 29493 29494 Also avoid global inclusion of the JIT infrastructure headers 29495 throughout WebCore and WebKit causing recompilation of about ~1500 29496 source files after modification to X86Assembler.h, CTI.h, WREC.h, 29497 which are only used deep inside JavaScriptCore. 29498 29499 * GNUmakefile.am: 29500 * VM/CTI.cpp: 29501 * VM/CTI.h: 29502 * VM/Machine.cpp: 29503 * VM/Machine.h: 29504 * kjs/regexp.cpp: 29505 (JSC::RegExp::RegExp): 29506 (JSC::RegExp::~RegExp): 29507 (JSC::RegExp::match): 29508 * kjs/regexp.h: 29509 * masm/X86Assembler.h: 29510 (JSC::X86Assembler::emitConvertToFastCall): 29511 (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline): 29512 (JSC::X86Assembler::emitRestoreArgumentReference): 29513 29514 2008-10-09 Gavin Barraclough <barraclough (a] apple.com> 29515 29516 Reviewed by Cameron Zwarich. 29517 29518 Fix for bug #21160, x=0;1/(x*-1) == -Infinity 29519 29520 * ChangeLog: 29521 * VM/CTI.cpp: 29522 (JSC::CTI::emitFastArithDeTagImmediate): 29523 (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero): 29524 (JSC::CTI::compileBinaryArithOp): 29525 (JSC::CTI::compileBinaryArithOpSlowCase): 29526 (JSC::CTI::privateCompileMainPass): 29527 (JSC::CTI::privateCompileSlowCases): 29528 * VM/CTI.h: 29529 * masm/X86Assembler.h: 29530 (JSC::X86Assembler::): 29531 (JSC::X86Assembler::emitUnlinkedJs): 29532 29533 2008-10-09 Cameron Zwarich <zwarich (a] apple.com> 29534 29535 Reviewed by Oliver Hunt. 29536 29537 Bug 21459: REGRESSION (r37324): Safari crashes inside JavaScriptCore while browsing hulu.com 29538 <https://bugs.webkit.org/show_bug.cgi?id=21459> 29539 29540 After r37324, an Arguments object does not mark an associated activation 29541 object. This change was made because Arguments no longer directly used 29542 the activation object in any way. However, if an activation is torn off, 29543 then the backing store of Arguments becomes the register array of the 29544 activation object. Arguments directly marks all of the arguments, but 29545 the activation object is being collected, which causes its register 29546 array to be freed and new memory to be allocated in its place. 29547 29548 Unfortunately, it does not seem possible to reproduce this issue in a 29549 layout test. 29550 29551 * kjs/Arguments.cpp: 29552 (JSC::Arguments::mark): 29553 * kjs/Arguments.h: 29554 (JSC::Arguments::setActivation): 29555 (JSC::Arguments::Arguments): 29556 (JSC::JSActivation::copyRegisters): 29557 29558 2008-10-09 Ariya Hidayat <ariya.hidayat (a] trolltech.com> 29559 29560 Reviewed by Simon. 29561 29562 Build fix for MinGW. 29563 29564 * wtf/AlwaysInline.h: 29565 29566 2008-10-08 Cameron Zwarich <zwarich (a] apple.com> 29567 29568 Reviewed by Maciej Stachowiak. 29569 29570 Bug 21497: REGRESSION (r37433): Bytecode JSC tests are severely broken 29571 <https://bugs.webkit.org/show_bug.cgi?id=21497> 29572 29573 Fix a typo in r37433 that causes the failure of a large number of JSC 29574 tests with the bytecode interpreter enabled. 29575 29576 * VM/Machine.cpp: 29577 (JSC::Machine::privateExecute): 29578 29579 2008-10-08 Mark Rowe <mrowe (a] apple.com> 29580 29581 Windows build fix. 29582 29583 * VM/CTI.cpp: 29584 (JSC::): Update type of argument to ctiTrampoline. 29585 29586 2008-10-08 Darin Adler <darin (a] apple.com> 29587 29588 Reviewed by Cameron Zwarich. 29589 29590 - https://bugs.webkit.org/show_bug.cgi?id=21403 29591 Bug 21403: use new CallFrame class rather than Register* for call frame manipulation 29592 29593 Add CallFrame as a synonym for ExecState. Arguably, some day we should switch every 29594 client over to the new name. 29595 29596 Use CallFrame* consistently rather than Register* or ExecState* in low-level code such 29597 as Machine.cpp and CTI.cpp. Similarly, use callFrame rather than r as its name and use 29598 accessor functions to get at things in the frame. 29599 29600 Eliminate other uses of ExecState* that aren't needed, replacing in some cases with 29601 JSGlobalData* and in other cases eliminating them entirely. 29602 29603 * API/JSObjectRef.cpp: 29604 (JSObjectMakeFunctionWithCallback): 29605 (JSObjectMakeFunction): 29606 (JSObjectHasProperty): 29607 (JSObjectGetProperty): 29608 (JSObjectSetProperty): 29609 (JSObjectDeleteProperty): 29610 * API/OpaqueJSString.cpp: 29611 * API/OpaqueJSString.h: 29612 * VM/CTI.cpp: 29613 (JSC::CTI::getConstant): 29614 (JSC::CTI::emitGetArg): 29615 (JSC::CTI::emitGetPutArg): 29616 (JSC::CTI::getConstantImmediateNumericArg): 29617 (JSC::CTI::printOpcodeOperandTypes): 29618 (JSC::CTI::CTI): 29619 (JSC::CTI::compileOpCall): 29620 (JSC::CTI::compileBinaryArithOp): 29621 (JSC::CTI::privateCompileMainPass): 29622 (JSC::CTI::privateCompile): 29623 (JSC::CTI::privateCompileGetByIdProto): 29624 (JSC::CTI::privateCompileGetByIdChain): 29625 (JSC::CTI::compileRegExp): 29626 * VM/CTI.h: 29627 * VM/CodeBlock.h: 29628 * VM/CodeGenerator.cpp: 29629 (JSC::CodeGenerator::emitEqualityOp): 29630 (JSC::CodeGenerator::emitLoad): 29631 (JSC::CodeGenerator::emitUnexpectedLoad): 29632 (JSC::CodeGenerator::emitConstruct): 29633 * VM/CodeGenerator.h: 29634 * VM/Machine.cpp: 29635 (JSC::jsLess): 29636 (JSC::jsLessEq): 29637 (JSC::jsAddSlowCase): 29638 (JSC::jsAdd): 29639 (JSC::jsTypeStringForValue): 29640 (JSC::Machine::resolve): 29641 (JSC::Machine::resolveSkip): 29642 (JSC::Machine::resolveGlobal): 29643 (JSC::inlineResolveBase): 29644 (JSC::Machine::resolveBase): 29645 (JSC::Machine::resolveBaseAndProperty): 29646 (JSC::Machine::resolveBaseAndFunc): 29647 (JSC::Machine::slideRegisterWindowForCall): 29648 (JSC::isNotObject): 29649 (JSC::Machine::callEval): 29650 (JSC::Machine::dumpCallFrame): 29651 (JSC::Machine::dumpRegisters): 29652 (JSC::Machine::unwindCallFrame): 29653 (JSC::Machine::throwException): 29654 (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): 29655 (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope): 29656 (JSC::Machine::execute): 29657 (JSC::Machine::debug): 29658 (JSC::Machine::createExceptionScope): 29659 (JSC::cachePrototypeChain): 29660 (JSC::Machine::tryCachePutByID): 29661 (JSC::Machine::tryCacheGetByID): 29662 (JSC::Machine::privateExecute): 29663 (JSC::Machine::retrieveArguments): 29664 (JSC::Machine::retrieveCaller): 29665 (JSC::Machine::retrieveLastCaller): 29666 (JSC::Machine::findFunctionCallFrame): 29667 (JSC::Machine::getArgumentsData): 29668 (JSC::Machine::tryCTICachePutByID): 29669 (JSC::Machine::getCTIArrayLengthTrampoline): 29670 (JSC::Machine::getCTIStringLengthTrampoline): 29671 (JSC::Machine::tryCTICacheGetByID): 29672 (JSC::Machine::cti_op_convert_this): 29673 (JSC::Machine::cti_op_end): 29674 (JSC::Machine::cti_op_add): 29675 (JSC::Machine::cti_op_pre_inc): 29676 (JSC::Machine::cti_timeout_check): 29677 (JSC::Machine::cti_op_loop_if_less): 29678 (JSC::Machine::cti_op_loop_if_lesseq): 29679 (JSC::Machine::cti_op_new_object): 29680 (JSC::Machine::cti_op_put_by_id): 29681 (JSC::Machine::cti_op_put_by_id_second): 29682 (JSC::Machine::cti_op_put_by_id_generic): 29683 (JSC::Machine::cti_op_put_by_id_fail): 29684 (JSC::Machine::cti_op_get_by_id): 29685 (JSC::Machine::cti_op_get_by_id_second): 29686 (JSC::Machine::cti_op_get_by_id_generic): 29687 (JSC::Machine::cti_op_get_by_id_fail): 29688 (JSC::Machine::cti_op_instanceof): 29689 (JSC::Machine::cti_op_del_by_id): 29690 (JSC::Machine::cti_op_mul): 29691 (JSC::Machine::cti_op_new_func): 29692 (JSC::Machine::cti_op_call_JSFunction): 29693 (JSC::Machine::cti_vm_compile): 29694 (JSC::Machine::cti_op_push_activation): 29695 (JSC::Machine::cti_op_call_NotJSFunction): 29696 (JSC::Machine::cti_op_create_arguments): 29697 (JSC::Machine::cti_op_tear_off_activation): 29698 (JSC::Machine::cti_op_tear_off_arguments): 29699 (JSC::Machine::cti_op_ret_profiler): 29700 (JSC::Machine::cti_op_ret_scopeChain): 29701 (JSC::Machine::cti_op_new_array): 29702 (JSC::Machine::cti_op_resolve): 29703 (JSC::Machine::cti_op_construct_JSConstruct): 29704 (JSC::Machine::cti_op_construct_NotJSConstruct): 29705 (JSC::Machine::cti_op_get_by_val): 29706 (JSC::Machine::cti_op_resolve_func): 29707 (JSC::Machine::cti_op_sub): 29708 (JSC::Machine::cti_op_put_by_val): 29709 (JSC::Machine::cti_op_put_by_val_array): 29710 (JSC::Machine::cti_op_lesseq): 29711 (JSC::Machine::cti_op_loop_if_true): 29712 (JSC::Machine::cti_op_negate): 29713 (JSC::Machine::cti_op_resolve_base): 29714 (JSC::Machine::cti_op_resolve_skip): 29715 (JSC::Machine::cti_op_resolve_global): 29716 (JSC::Machine::cti_op_div): 29717 (JSC::Machine::cti_op_pre_dec): 29718 (JSC::Machine::cti_op_jless): 29719 (JSC::Machine::cti_op_not): 29720 (JSC::Machine::cti_op_jtrue): 29721 (JSC::Machine::cti_op_post_inc): 29722 (JSC::Machine::cti_op_eq): 29723 (JSC::Machine::cti_op_lshift): 29724 (JSC::Machine::cti_op_bitand): 29725 (JSC::Machine::cti_op_rshift): 29726 (JSC::Machine::cti_op_bitnot): 29727 (JSC::Machine::cti_op_resolve_with_base): 29728 (JSC::Machine::cti_op_new_func_exp): 29729 (JSC::Machine::cti_op_mod): 29730 (JSC::Machine::cti_op_less): 29731 (JSC::Machine::cti_op_neq): 29732 (JSC::Machine::cti_op_post_dec): 29733 (JSC::Machine::cti_op_urshift): 29734 (JSC::Machine::cti_op_bitxor): 29735 (JSC::Machine::cti_op_new_regexp): 29736 (JSC::Machine::cti_op_bitor): 29737 (JSC::Machine::cti_op_call_eval): 29738 (JSC::Machine::cti_op_throw): 29739 (JSC::Machine::cti_op_get_pnames): 29740 (JSC::Machine::cti_op_next_pname): 29741 (JSC::Machine::cti_op_push_scope): 29742 (JSC::Machine::cti_op_pop_scope): 29743 (JSC::Machine::cti_op_typeof): 29744 (JSC::Machine::cti_op_to_jsnumber): 29745 (JSC::Machine::cti_op_in): 29746 (JSC::Machine::cti_op_push_new_scope): 29747 (JSC::Machine::cti_op_jmp_scopes): 29748 (JSC::Machine::cti_op_put_by_index): 29749 (JSC::Machine::cti_op_switch_imm): 29750 (JSC::Machine::cti_op_switch_char): 29751 (JSC::Machine::cti_op_switch_string): 29752 (JSC::Machine::cti_op_del_by_val): 29753 (JSC::Machine::cti_op_put_getter): 29754 (JSC::Machine::cti_op_put_setter): 29755 (JSC::Machine::cti_op_new_error): 29756 (JSC::Machine::cti_op_debug): 29757 (JSC::Machine::cti_vm_throw): 29758 * VM/Machine.h: 29759 * VM/Register.h: 29760 * VM/RegisterFile.h: 29761 * kjs/Arguments.h: 29762 * kjs/DebuggerCallFrame.cpp: 29763 (JSC::DebuggerCallFrame::functionName): 29764 (JSC::DebuggerCallFrame::type): 29765 (JSC::DebuggerCallFrame::thisObject): 29766 (JSC::DebuggerCallFrame::evaluate): 29767 * kjs/DebuggerCallFrame.h: 29768 * kjs/ExecState.cpp: 29769 (JSC::CallFrame::thisValue): 29770 * kjs/ExecState.h: 29771 * kjs/FunctionConstructor.cpp: 29772 (JSC::constructFunction): 29773 * kjs/JSActivation.cpp: 29774 (JSC::JSActivation::JSActivation): 29775 (JSC::JSActivation::argumentsGetter): 29776 * kjs/JSActivation.h: 29777 * kjs/JSGlobalObject.cpp: 29778 (JSC::JSGlobalObject::init): 29779 * kjs/JSGlobalObjectFunctions.cpp: 29780 (JSC::globalFuncEval): 29781 * kjs/JSVariableObject.h: 29782 * kjs/Parser.cpp: 29783 (JSC::Parser::parse): 29784 * kjs/RegExpConstructor.cpp: 29785 (JSC::constructRegExp): 29786 * kjs/RegExpPrototype.cpp: 29787 (JSC::regExpProtoFuncCompile): 29788 * kjs/Shell.cpp: 29789 (prettyPrintScript): 29790 * kjs/StringPrototype.cpp: 29791 (JSC::stringProtoFuncMatch): 29792 (JSC::stringProtoFuncSearch): 29793 * kjs/identifier.cpp: 29794 (JSC::Identifier::checkSameIdentifierTable): 29795 * kjs/interpreter.cpp: 29796 (JSC::Interpreter::checkSyntax): 29797 (JSC::Interpreter::evaluate): 29798 * kjs/nodes.cpp: 29799 (JSC::ThrowableExpressionData::emitThrowError): 29800 (JSC::RegExpNode::emitCode): 29801 (JSC::ArrayNode::emitCode): 29802 (JSC::InstanceOfNode::emitCode): 29803 * kjs/nodes.h: 29804 * kjs/regexp.cpp: 29805 (JSC::RegExp::RegExp): 29806 (JSC::RegExp::create): 29807 * kjs/regexp.h: 29808 * profiler/HeavyProfile.h: 29809 * profiler/Profile.h: 29810 * wrec/WREC.cpp: 29811 * wrec/WREC.h: 29812 29813 2008-10-08 Mark Rowe <mrowe (a] apple.com> 29814 29815 Typed by Maciej Stachowiak, reviewed by Mark Rowe. 29816 29817 Fix crash in fast/js/constant-folding.html with CTI disabled. 29818 29819 * VM/Machine.cpp: 29820 (JSC::Machine::privateExecute): 29821 29822 2008-10-08 Timothy Hatcher <timothy (a] apple.com> 29823 29824 Roll out r37427 because it causes an infinite recursion loading about:blank. 29825 29826 https://bugs.webkit.org/show_bug.cgi?id=21476 29827 29828 2008-10-08 Darin Adler <darin (a] apple.com> 29829 29830 Reviewed by Cameron Zwarich. 29831 29832 - https://bugs.webkit.org/show_bug.cgi?id=21403 29833 Bug 21403: use new CallFrame class rather than Register* for call frame manipulation 29834 29835 Add CallFrame as a synonym for ExecState. Arguably, some day we should switch every 29836 client over to the new name. 29837 29838 Use CallFrame* consistently rather than Register* or ExecState* in low-level code such 29839 as Machine.cpp and CTI.cpp. Similarly, use callFrame rather than r as its name and use 29840 accessor functions to get at things in the frame. 29841 29842 Eliminate other uses of ExecState* that aren't needed, replacing in some cases with 29843 JSGlobalData* and in other cases eliminating them entirely. 29844 29845 * API/JSObjectRef.cpp: 29846 (JSObjectMakeFunctionWithCallback): 29847 (JSObjectMakeFunction): 29848 (JSObjectHasProperty): 29849 (JSObjectGetProperty): 29850 (JSObjectSetProperty): 29851 (JSObjectDeleteProperty): 29852 * API/OpaqueJSString.cpp: 29853 * API/OpaqueJSString.h: 29854 * VM/CTI.cpp: 29855 (JSC::CTI::getConstant): 29856 (JSC::CTI::emitGetArg): 29857 (JSC::CTI::emitGetPutArg): 29858 (JSC::CTI::getConstantImmediateNumericArg): 29859 (JSC::CTI::printOpcodeOperandTypes): 29860 (JSC::CTI::CTI): 29861 (JSC::CTI::compileOpCall): 29862 (JSC::CTI::compileBinaryArithOp): 29863 (JSC::CTI::privateCompileMainPass): 29864 (JSC::CTI::privateCompile): 29865 (JSC::CTI::privateCompileGetByIdProto): 29866 (JSC::CTI::privateCompileGetByIdChain): 29867 (JSC::CTI::compileRegExp): 29868 * VM/CTI.h: 29869 * VM/CodeBlock.h: 29870 * VM/CodeGenerator.cpp: 29871 (JSC::CodeGenerator::emitEqualityOp): 29872 (JSC::CodeGenerator::emitLoad): 29873 (JSC::CodeGenerator::emitUnexpectedLoad): 29874 (JSC::CodeGenerator::emitConstruct): 29875 * VM/CodeGenerator.h: 29876 * VM/Machine.cpp: 29877 (JSC::jsLess): 29878 (JSC::jsLessEq): 29879 (JSC::jsAddSlowCase): 29880 (JSC::jsAdd): 29881 (JSC::jsTypeStringForValue): 29882 (JSC::Machine::resolve): 29883 (JSC::Machine::resolveSkip): 29884 (JSC::Machine::resolveGlobal): 29885 (JSC::inlineResolveBase): 29886 (JSC::Machine::resolveBase): 29887 (JSC::Machine::resolveBaseAndProperty): 29888 (JSC::Machine::resolveBaseAndFunc): 29889 (JSC::Machine::slideRegisterWindowForCall): 29890 (JSC::isNotObject): 29891 (JSC::Machine::callEval): 29892 (JSC::Machine::dumpCallFrame): 29893 (JSC::Machine::dumpRegisters): 29894 (JSC::Machine::unwindCallFrame): 29895 (JSC::Machine::throwException): 29896 (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): 29897 (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope): 29898 (JSC::Machine::execute): 29899 (JSC::Machine::debug): 29900 (JSC::Machine::createExceptionScope): 29901 (JSC::cachePrototypeChain): 29902 (JSC::Machine::tryCachePutByID): 29903 (JSC::Machine::tryCacheGetByID): 29904 (JSC::Machine::privateExecute): 29905 (JSC::Machine::retrieveArguments): 29906 (JSC::Machine::retrieveCaller): 29907 (JSC::Machine::retrieveLastCaller): 29908 (JSC::Machine::findFunctionCallFrame): 29909 (JSC::Machine::getArgumentsData): 29910 (JSC::Machine::tryCTICachePutByID): 29911 (JSC::Machine::getCTIArrayLengthTrampoline): 29912 (JSC::Machine::getCTIStringLengthTrampoline): 29913 (JSC::Machine::tryCTICacheGetByID): 29914 (JSC::Machine::cti_op_convert_this): 29915 (JSC::Machine::cti_op_end): 29916 (JSC::Machine::cti_op_add): 29917 (JSC::Machine::cti_op_pre_inc): 29918 (JSC::Machine::cti_timeout_check): 29919 (JSC::Machine::cti_op_loop_if_less): 29920 (JSC::Machine::cti_op_loop_if_lesseq): 29921 (JSC::Machine::cti_op_new_object): 29922 (JSC::Machine::cti_op_put_by_id): 29923 (JSC::Machine::cti_op_put_by_id_second): 29924 (JSC::Machine::cti_op_put_by_id_generic): 29925 (JSC::Machine::cti_op_put_by_id_fail): 29926 (JSC::Machine::cti_op_get_by_id): 29927 (JSC::Machine::cti_op_get_by_id_second): 29928 (JSC::Machine::cti_op_get_by_id_generic): 29929 (JSC::Machine::cti_op_get_by_id_fail): 29930 (JSC::Machine::cti_op_instanceof): 29931 (JSC::Machine::cti_op_del_by_id): 29932 (JSC::Machine::cti_op_mul): 29933 (JSC::Machine::cti_op_new_func): 29934 (JSC::Machine::cti_op_call_JSFunction): 29935 (JSC::Machine::cti_vm_compile): 29936 (JSC::Machine::cti_op_push_activation): 29937 (JSC::Machine::cti_op_call_NotJSFunction): 29938 (JSC::Machine::cti_op_create_arguments): 29939 (JSC::Machine::cti_op_tear_off_activation): 29940 (JSC::Machine::cti_op_tear_off_arguments): 29941 (JSC::Machine::cti_op_ret_profiler): 29942 (JSC::Machine::cti_op_ret_scopeChain): 29943 (JSC::Machine::cti_op_new_array): 29944 (JSC::Machine::cti_op_resolve): 29945 (JSC::Machine::cti_op_construct_JSConstruct): 29946 (JSC::Machine::cti_op_construct_NotJSConstruct): 29947 (JSC::Machine::cti_op_get_by_val): 29948 (JSC::Machine::cti_op_resolve_func): 29949 (JSC::Machine::cti_op_sub): 29950 (JSC::Machine::cti_op_put_by_val): 29951 (JSC::Machine::cti_op_put_by_val_array): 29952 (JSC::Machine::cti_op_lesseq): 29953 (JSC::Machine::cti_op_loop_if_true): 29954 (JSC::Machine::cti_op_negate): 29955 (JSC::Machine::cti_op_resolve_base): 29956 (JSC::Machine::cti_op_resolve_skip): 29957 (JSC::Machine::cti_op_resolve_global): 29958 (JSC::Machine::cti_op_div): 29959 (JSC::Machine::cti_op_pre_dec): 29960 (JSC::Machine::cti_op_jless): 29961 (JSC::Machine::cti_op_not): 29962 (JSC::Machine::cti_op_jtrue): 29963 (JSC::Machine::cti_op_post_inc): 29964 (JSC::Machine::cti_op_eq): 29965 (JSC::Machine::cti_op_lshift): 29966 (JSC::Machine::cti_op_bitand): 29967 (JSC::Machine::cti_op_rshift): 29968 (JSC::Machine::cti_op_bitnot): 29969 (JSC::Machine::cti_op_resolve_with_base): 29970 (JSC::Machine::cti_op_new_func_exp): 29971 (JSC::Machine::cti_op_mod): 29972 (JSC::Machine::cti_op_less): 29973 (JSC::Machine::cti_op_neq): 29974 (JSC::Machine::cti_op_post_dec): 29975 (JSC::Machine::cti_op_urshift): 29976 (JSC::Machine::cti_op_bitxor): 29977 (JSC::Machine::cti_op_new_regexp): 29978 (JSC::Machine::cti_op_bitor): 29979 (JSC::Machine::cti_op_call_eval): 29980 (JSC::Machine::cti_op_throw): 29981 (JSC::Machine::cti_op_get_pnames): 29982 (JSC::Machine::cti_op_next_pname): 29983 (JSC::Machine::cti_op_push_scope): 29984 (JSC::Machine::cti_op_pop_scope): 29985 (JSC::Machine::cti_op_typeof): 29986 (JSC::Machine::cti_op_to_jsnumber): 29987 (JSC::Machine::cti_op_in): 29988 (JSC::Machine::cti_op_push_new_scope): 29989 (JSC::Machine::cti_op_jmp_scopes): 29990 (JSC::Machine::cti_op_put_by_index): 29991 (JSC::Machine::cti_op_switch_imm): 29992 (JSC::Machine::cti_op_switch_char): 29993 (JSC::Machine::cti_op_switch_string): 29994 (JSC::Machine::cti_op_del_by_val): 29995 (JSC::Machine::cti_op_put_getter): 29996 (JSC::Machine::cti_op_put_setter): 29997 (JSC::Machine::cti_op_new_error): 29998 (JSC::Machine::cti_op_debug): 29999 (JSC::Machine::cti_vm_throw): 30000 * VM/Machine.h: 30001 * VM/Register.h: 30002 * VM/RegisterFile.h: 30003 * kjs/Arguments.h: 30004 * kjs/DebuggerCallFrame.cpp: 30005 (JSC::DebuggerCallFrame::functionName): 30006 (JSC::DebuggerCallFrame::type): 30007 (JSC::DebuggerCallFrame::thisObject): 30008 (JSC::DebuggerCallFrame::evaluate): 30009 * kjs/DebuggerCallFrame.h: 30010 * kjs/ExecState.cpp: 30011 (JSC::CallFrame::thisValue): 30012 * kjs/ExecState.h: 30013 * kjs/FunctionConstructor.cpp: 30014 (JSC::constructFunction): 30015 * kjs/JSActivation.cpp: 30016 (JSC::JSActivation::JSActivation): 30017 (JSC::JSActivation::argumentsGetter): 30018 * kjs/JSActivation.h: 30019 * kjs/JSGlobalObject.cpp: 30020 (JSC::JSGlobalObject::init): 30021 * kjs/JSGlobalObjectFunctions.cpp: 30022 (JSC::globalFuncEval): 30023 * kjs/JSVariableObject.h: 30024 * kjs/Parser.cpp: 30025 (JSC::Parser::parse): 30026 * kjs/RegExpConstructor.cpp: 30027 (JSC::constructRegExp): 30028 * kjs/RegExpPrototype.cpp: 30029 (JSC::regExpProtoFuncCompile): 30030 * kjs/Shell.cpp: 30031 (prettyPrintScript): 30032 * kjs/StringPrototype.cpp: 30033 (JSC::stringProtoFuncMatch): 30034 (JSC::stringProtoFuncSearch): 30035 * kjs/identifier.cpp: 30036 (JSC::Identifier::checkSameIdentifierTable): 30037 * kjs/interpreter.cpp: 30038 (JSC::Interpreter::checkSyntax): 30039 (JSC::Interpreter::evaluate): 30040 * kjs/nodes.cpp: 30041 (JSC::ThrowableExpressionData::emitThrowError): 30042 (JSC::RegExpNode::emitCode): 30043 (JSC::ArrayNode::emitCode): 30044 (JSC::InstanceOfNode::emitCode): 30045 * kjs/nodes.h: 30046 * kjs/regexp.cpp: 30047 (JSC::RegExp::RegExp): 30048 (JSC::RegExp::create): 30049 * kjs/regexp.h: 30050 * profiler/HeavyProfile.h: 30051 * profiler/Profile.h: 30052 * wrec/WREC.cpp: 30053 * wrec/WREC.h: 30054 30055 2008-10-08 Prasanth Ullattil <pullatti (a] trolltech.com> 30056 30057 Reviewed by Oliver Hunt. 30058 30059 Avoid endless loops when compiling without the computed goto 30060 optimization. 30061 30062 NEXT_OPCODE expands to "continue", which will not work inside 30063 loops. 30064 30065 * VM/Machine.cpp: 30066 (JSC::Machine::privateExecute): 30067 30068 2008-10-08 Maciej Stachowiak <mjs (a] apple.com> 30069 30070 Reviewed by Oliver Hunt. 30071 30072 Re-landing the following fix with the crashing bug in it fixed (r37405): 30073 30074 - optimize away multiplication by constant 1.0 30075 30076 2.3% speedup on v8 RayTrace benchmark 30077 30078 Apparently it's not uncommon for JavaScript code to multiply by 30079 constant 1.0 in the mistaken belief that this converts integer to 30080 floating point and that there is any operational difference. 30081 30082 * VM/CTI.cpp: 30083 (JSC::CTI::privateCompileMainPass): Optimize to_jsnumber for 30084 case where parameter is already number. 30085 (JSC::CTI::privateCompileSlowCases): ditto 30086 * VM/Machine.cpp: 30087 (JSC::Machine::privateExecute): ditto 30088 * kjs/grammar.y: 30089 (makeMultNode): Transform as follows: 30090 +FOO * BAR ==> FOO * BAR 30091 FOO * +BAR ==> FOO * BAR 30092 FOO * 1 ==> +FOO 30093 1 * FOO ==> +FOO 30094 (makeDivNode): Transform as follows: 30095 +FOO / BAR ==> FOO / BAR 30096 FOO / +BAR ==> FOO / BAR 30097 (makeSubNode): Transform as follows: 30098 +FOO - BAR ==> FOO - BAR 30099 FOO - +BAR ==> FOO - BAR 30100 * kjs/nodes.h: 30101 (JSC::ExpressionNode::stripUnaryPlus): Helper for above 30102 grammar.y changes 30103 (JSC::UnaryPlusNode::stripUnaryPlus): ditto 30104 30105 2008-10-08 Maciej Stachowiak <mjs (a] apple.com> 30106 30107 Reviewed by Oliver Hunt. 30108 30109 - correctly handle appending -0 to a string, it should stringify as just 0 30110 30111 * kjs/ustring.cpp: 30112 (JSC::concatenate): 30113 30114 2008-10-08 Prasanth Ullattil <pullatti (a] trolltech.com> 30115 30116 Reviewed by Simon. 30117 30118 Fix WebKit compilation with VC2008SP1 30119 30120 Apply the TR1 workaround for JavaScriptCore, too. 30121 30122 * JavaScriptCore.pro: 30123 30124 2008-10-08 Prasanth Ullattil <pullatti (a] trolltech.com> 30125 30126 Reviewed by Simon. 30127 30128 Fix compilation errors on VS2008 64Bit 30129 30130 * kjs/collector.cpp: 30131 (JSC::currentThreadStackBase): 30132 30133 2008-10-08 Andr Pnitz <apoenitz (a] trolltech.com> 30134 30135 Reviewed by Simon. 30136 30137 Fix compilation with Qt namespaces. 30138 30139 * wtf/Threading.h: 30140 30141 2008-10-07 Sam Weinig <sam (a] webkit.org> 30142 30143 Roll out r37405. 30144 30145 2008-10-07 Oliver Hunt <oliver (a] apple.com> 30146 30147 Reviewed by Cameron Zwarich. 30148 30149 Switch CTI runtime calls to the fastcall calling convention 30150 30151 Basically this means that we get to store the argument for CTI 30152 calls in the ECX register, which saves a register->memory write 30153 and subsequent memory->register read. 30154 30155 This is a 1.7% progression in SunSpider and 2.4% on commandline 30156 v8 tests on Windows 30157 30158 * VM/CTI.cpp: 30159 (JSC::): 30160 (JSC::CTI::privateCompilePutByIdTransition): 30161 (JSC::CTI::privateCompilePatchGetArrayLength): 30162 * VM/CTI.h: 30163 * VM/Machine.h: 30164 * masm/X86Assembler.h: 30165 (JSC::X86Assembler::emitRestoreArgumentReference): 30166 (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline): 30167 We need this to correctly reload ecx from inside certain property access 30168 trampolines. 30169 * wtf/Platform.h: 30170 30171 2008-10-07 Maciej Stachowiak <mjs (a] apple.com> 30172 30173 Reviewed by Mark Rowe. 30174 30175 - optimize away multiplication by constant 1.0 30176 30177 2.3% speedup on v8 RayTrace benchmark 30178 30179 Apparently it's not uncommon for JavaScript code to multiply by 30180 constant 1.0 in the mistaken belief that this converts integer to 30181 floating point and that there is any operational difference. 30182 30183 * VM/CTI.cpp: 30184 (JSC::CTI::privateCompileMainPass): Optimize to_jsnumber for 30185 case where parameter is already number. 30186 (JSC::CTI::privateCompileSlowCases): ditto 30187 * VM/Machine.cpp: 30188 (JSC::Machine::privateExecute): ditto 30189 * kjs/grammar.y: 30190 (makeMultNode): Transform as follows: 30191 +FOO * BAR ==> FOO * BAR 30192 FOO * +BAR ==> FOO * BAR 30193 FOO * 1 ==> +FOO 30194 1 * FOO ==> +FOO 30195 (makeDivNode): Transform as follows: 30196 +FOO / BAR ==> FOO / BAR 30197 FOO / +BAR ==> FOO / BAR 30198 (makeSubNode): Transform as follows: 30199 +FOO - BAR ==> FOO - BAR 30200 FOO - +BAR ==> FOO - BAR 30201 * kjs/nodes.h: 30202 (JSC::ExpressionNode::stripUnaryPlus): Helper for above 30203 grammar.y changes 30204 (JSC::UnaryPlusNode::stripUnaryPlus): ditto 30205 30206 2008-10-07 Maciej Stachowiak <mjs (a] apple.com> 30207 30208 Reviewed by Oliver Hunt. 30209 30210 - make constant folding code more consistent 30211 30212 Added a makeSubNode to match add, mult and div; use the makeFooNode functions always, 30213 instead of allocating nodes directly in other places in the grammar. 30214 30215 * kjs/grammar.y: 30216 30217 2008-10-07 Sam Weinig <sam (a] webkit.org> 30218 30219 Reviewed by Cameron Zwarich. 30220 30221 Move hasGetterSetterProperties flag from PropertyMap to StructureID. 30222 30223 * kjs/JSObject.cpp: 30224 (JSC::JSObject::put): 30225 (JSC::JSObject::defineGetter): 30226 (JSC::JSObject::defineSetter): 30227 * kjs/JSObject.h: 30228 (JSC::JSObject::hasGetterSetterProperties): 30229 (JSC::JSObject::getOwnPropertySlotForWrite): 30230 (JSC::JSObject::getOwnPropertySlot): 30231 * kjs/PropertyMap.h: 30232 * kjs/StructureID.cpp: 30233 (JSC::StructureID::StructureID): 30234 (JSC::StructureID::addPropertyTransition): 30235 (JSC::StructureID::toDictionaryTransition): 30236 (JSC::StructureID::changePrototypeTransition): 30237 (JSC::StructureID::getterSetterTransition): 30238 * kjs/StructureID.h: 30239 (JSC::StructureID::hasGetterSetterProperties): 30240 (JSC::StructureID::setHasGetterSetterProperties): 30241 30242 2008-10-07 Sam Weinig <sam (a] webkit.org> 30243 30244 Reviewed by Cameron Zwarich. 30245 30246 Roll r37370 back in with bug fixes. 30247 30248 - PropertyMap::storageSize() should reflect the number of keys + deletedOffsets 30249 and has nothing to do with the internal deletedSentinel count anymore. 30250 30251 2008-10-07 Gavin Barraclough <barraclough (a] apple.com> 30252 30253 Reviewed by Oliver Hunt. 30254 30255 Move callframe initialization into JIT code, again. 30256 30257 As a part of the restructuring the second result from functions is now 30258 returned in edx, allowing the new value of 'r' to be returned via a 30259 register, and stored to the stack from JIT code, too. 30260 30261 4.5% progression on v8-tests. (3% in their harness) 30262 30263 * VM/CTI.cpp: 30264 (JSC::): 30265 (JSC::CTI::emitCall): 30266 (JSC::CTI::compileOpCall): 30267 (JSC::CTI::privateCompileMainPass): 30268 (JSC::CTI::privateCompileSlowCases): 30269 (JSC::CTI::privateCompile): 30270 * VM/CTI.h: 30271 (JSC::CallRecord::CallRecord): 30272 * VM/Machine.cpp: 30273 (JSC::Machine::cti_op_call_JSFunction): 30274 (JSC::Machine::cti_op_construct_JSConstruct): 30275 (JSC::Machine::cti_op_resolve_func): 30276 (JSC::Machine::cti_op_post_inc): 30277 (JSC::Machine::cti_op_resolve_with_base): 30278 (JSC::Machine::cti_op_post_dec): 30279 * VM/Machine.h: 30280 * kjs/JSFunction.h: 30281 * kjs/ScopeChain.h: 30282 30283 2008-10-07 Mark Rowe <mrowe (a] apple.com> 30284 30285 Fix typo in method name. 30286 30287 * wrec/WREC.cpp: 30288 * wrec/WREC.h: 30289 30290 2008-10-07 Cameron Zwarich <zwarich (a] apple.com> 30291 30292 Rubber-stamped by Mark Rowe. 30293 30294 Roll out r37370. 30295 30296 2008-10-06 Sam Weinig <sam (a] webkit.org> 30297 30298 Reviewed by Cameron Zwarich. 30299 30300 Fix for https://bugs.webkit.org/show_bug.cgi?id=21415 30301 Improve the division between PropertyStorageArray and PropertyMap 30302 30303 - Rework ProperyMap to store offsets in the value so that they don't 30304 change when rehashing. This allows us not to have to keep the 30305 PropertyStorageArray in sync and thus not have to pass it in. 30306 - Rename PropertyMap::getOffset -> PropertyMap::get since put/remove 30307 now also return offsets. 30308 - A Vector of deleted offsets is now needed since the storage is out of 30309 band. 30310 30311 1% win on SunSpider. Wash on V8 suite. 30312 30313 * JavaScriptCore.exp: 30314 * VM/CTI.cpp: 30315 (JSC::transitionWillNeedStorageRealloc): 30316 * VM/Machine.cpp: 30317 (JSC::Machine::privateExecute): 30318 Transition logic can be greatly simplified by the fact that 30319 the storage capacity is always known, and is correct for the 30320 inline case. 30321 * kjs/JSObject.cpp: 30322 (JSC::JSObject::put): Rename getOffset -> get. 30323 (JSC::JSObject::deleteProperty): Ditto. 30324 (JSC::JSObject::getPropertyAttributes): Ditto. 30325 (JSC::JSObject::removeDirect): Use returned offset to 30326 clear the value in the PropertyNameArray. 30327 (JSC::JSObject::allocatePropertyStorage): Add assert. 30328 * kjs/JSObject.h: 30329 (JSC::JSObject::getDirect): Rename getOffset -> get 30330 (JSC::JSObject::getDirectLocation): Rename getOffset -> get 30331 (JSC::JSObject::putDirect): Use propertyStorageCapacity to determine whether 30332 or not to resize. Also, since put now returns an offset (and thus 30333 addPropertyTransition does also) setting of the PropertyStorageArray is 30334 now done here. 30335 (JSC::JSObject::transitionTo): 30336 * kjs/PropertyMap.cpp: 30337 (JSC::PropertyMap::checkConsistency): PropertyStorageArray is no longer 30338 passed in. 30339 (JSC::PropertyMap::operator=): Copy the delete offsets vector. 30340 (JSC::PropertyMap::put): Instead of setting the PropertyNameArray 30341 explicitly, return the offset where the value should go. 30342 (JSC::PropertyMap::remove): Instead of removing from the PropertyNameArray 30343 explicitly, return the offset where the value should be removed. 30344 (JSC::PropertyMap::get): Switch to using the stored offset, instead 30345 of the implicit one. 30346 (JSC::PropertyMap::insert): 30347 (JSC::PropertyMap::expand): This is never called when m_table is null, 30348 so remove that branch and add it as an assertion. 30349 (JSC::PropertyMap::createTable): Consistency checks no longer take 30350 a PropertyNameArray. 30351 (JSC::PropertyMap::rehash): No need to rehash the PropertyNameArray 30352 now that it is completely out of band. 30353 * kjs/PropertyMap.h: 30354 (JSC::PropertyMapEntry::PropertyMapEntry): Store offset into PropertyNameArray. 30355 (JSC::PropertyMap::get): Switch to using the stored offset, instead 30356 of the implicit one. 30357 * kjs/StructureID.cpp: 30358 (JSC::StructureID::StructureID): Initialize the propertyStorageCapacity to 30359 JSObject::inlineStorageCapacity. 30360 (JSC::StructureID::growPropertyStorageCapacity): Grow the storage capacity as 30361 described below. 30362 (JSC::StructureID::addPropertyTransition): Copy the storage capacity. 30363 (JSC::StructureID::toDictionaryTransition): Ditto. 30364 (JSC::StructureID::changePrototypeTransition): Ditto. 30365 (JSC::StructureID::getterSetterTransition): Ditto. 30366 * kjs/StructureID.h: 30367 (JSC::StructureID::propertyStorageCapacity): Add propertyStorageCapacity 30368 which is the current capacity for the JSObjects PropertyStorageArray. 30369 It starts at the JSObject::inlineStorageCapacity (currently 2), then 30370 when it first needs to be resized moves to the JSObject::nonInlineBaseStorageCapacity 30371 (currently 16), and after that doubles each time. 30372 30373 2008-10-06 Cameron Zwarich <zwarich (a] apple.com> 30374 30375 Reviewed by Oliver Hunt. 30376 30377 Bug 21396: Remove the OptionalCalleeActivation call frame slot 30378 <https://bugs.webkit.org/show_bug.cgi?id=21396> 30379 30380 Remove the OptionalCalleeActivation call frame slot. We have to be 30381 careful to store the activation object in a register, because objects 30382 in the scope chain do not get marked. 30383 30384 This is a 0.3% speedup on both SunSpider and the V8 benchmark. 30385 30386 * VM/CTI.cpp: 30387 (JSC::CTI::privateCompileMainPass): 30388 * VM/CodeBlock.cpp: 30389 (JSC::CodeBlock::dump): 30390 * VM/CodeGenerator.cpp: 30391 (JSC::CodeGenerator::CodeGenerator): 30392 (JSC::CodeGenerator::emitReturn): 30393 * VM/CodeGenerator.h: 30394 * VM/Machine.cpp: 30395 (JSC::Machine::dumpRegisters): 30396 (JSC::Machine::unwindCallFrame): 30397 (JSC::Machine::privateExecute): 30398 (JSC::Machine::cti_op_call_JSFunction): 30399 (JSC::Machine::cti_op_push_activation): 30400 (JSC::Machine::cti_op_tear_off_activation): 30401 (JSC::Machine::cti_op_construct_JSConstruct): 30402 * VM/Machine.h: 30403 (JSC::Machine::initializeCallFrame): 30404 * VM/RegisterFile.h: 30405 (JSC::RegisterFile::): 30406 30407 2008-10-06 Tony Chang <tony (a] chromium.org> 30408 30409 Reviewed by Alexey Proskuryakov. 30410 30411 Chromium doesn't use pthreads on windows, so make its use conditional. 30412 30413 Also convert a WORD to a DWORD to avoid a compiler warning. This 30414 matches the other methods around it. 30415 30416 * wtf/ThreadingWin.cpp: 30417 (WTF::wtfThreadEntryPoint): 30418 (WTF::ThreadCondition::broadcast): 30419 30420 2008-10-06 Mark Mentovai <mark (a] moxienet.com> 30421 30422 Reviewed by Tim Hatcher. 30423 30424 Allow ENABLE_DASHBOARD_SUPPORT and ENABLE_MAC_JAVA_BRIDGE to be 30425 disabled on the Mac. 30426 30427 https://bugs.webkit.org/show_bug.cgi?id=21333 30428 30429 * wtf/Platform.h: 30430 30431 2008-10-06 Steve Falkenburg <sfalken (a] apple.com> 30432 30433 https://bugs.webkit.org/show_bug.cgi?id=21416 30434 Pass 0 for size to VirtualAlloc, as documented by MSDN. 30435 Identified by Application Verifier. 30436 30437 Reviewed by Darin Adler. 30438 30439 * kjs/collector.cpp: 30440 (KJS::freeBlock): 30441 30442 2008-10-06 Kevin McCullough <kmccullough (a] apple.com> 30443 30444 Reviewed by Tim Hatcheri and Oliver Hunt. 30445 30446 https://bugs.webkit.org/show_bug.cgi?id=21412 30447 Bug 21412: Refactor user initiated profile count to be more stable 30448 - Export UString::from for use with creating the profile title. 30449 30450 * JavaScriptCore.exp: 30451 30452 2008-10-06 Maciej Stachowiak <mjs (a] apple.com> 30453 30454 Not reviewed. Build fix. 30455 30456 - revert toBoolean changes (r37333 and r37335); need to make WebCore work with these 30457 30458 * API/JSValueRef.cpp: 30459 (JSValueToBoolean): 30460 * ChangeLog: 30461 * JavaScriptCore.exp: 30462 * VM/CodeBlock.cpp: 30463 (JSC::CodeBlock::dump): 30464 * VM/Machine.cpp: 30465 (JSC::Machine::privateExecute): 30466 (JSC::Machine::cti_op_loop_if_true): 30467 (JSC::Machine::cti_op_not): 30468 (JSC::Machine::cti_op_jtrue): 30469 * kjs/ArrayPrototype.cpp: 30470 (JSC::arrayProtoFuncFilter): 30471 (JSC::arrayProtoFuncEvery): 30472 (JSC::arrayProtoFuncSome): 30473 * kjs/BooleanConstructor.cpp: 30474 (JSC::constructBoolean): 30475 (JSC::callBooleanConstructor): 30476 * kjs/GetterSetter.h: 30477 * kjs/JSCell.h: 30478 (JSC::JSValue::toBoolean): 30479 * kjs/JSNumberCell.cpp: 30480 (JSC::JSNumberCell::toBoolean): 30481 * kjs/JSNumberCell.h: 30482 * kjs/JSObject.cpp: 30483 (JSC::JSObject::toBoolean): 30484 * kjs/JSObject.h: 30485 * kjs/JSString.cpp: 30486 (JSC::JSString::toBoolean): 30487 * kjs/JSString.h: 30488 * kjs/JSValue.h: 30489 * kjs/RegExpConstructor.cpp: 30490 (JSC::setRegExpConstructorMultiline): 30491 * kjs/RegExpObject.cpp: 30492 (JSC::RegExpObject::match): 30493 * kjs/RegExpPrototype.cpp: 30494 (JSC::regExpProtoFuncToString): 30495 30496 2008-10-06 Maciej Stachowiak <mjs (a] apple.com> 30497 30498 Reviewed by Sam Weinig. 30499 30500 - optimize op_jtrue, op_loop_if_true and op_not in various ways 30501 https://bugs.webkit.org/show_bug.cgi?id=21404 30502 30503 1) Make JSValue::toBoolean nonvirtual and completely inline by 30504 making use of the StructureID type field. 30505 30506 2) Make JSValue::toBoolean not take an ExecState; doesn't need it. 30507 30508 3) Make op_not, op_loop_if_true and op_jtrue not read the 30509 ExecState (toBoolean doesn't need it any more) and not check 30510 exceptions (toBoolean can't throw). 30511 30512 * API/JSValueRef.cpp: 30513 (JSValueToBoolean): 30514 * JavaScriptCore.exp: 30515 * VM/CodeBlock.cpp: 30516 (JSC::CodeBlock::dump): 30517 * VM/Machine.cpp: 30518 (JSC::Machine::privateExecute): 30519 (JSC::Machine::cti_op_loop_if_true): 30520 (JSC::Machine::cti_op_not): 30521 (JSC::Machine::cti_op_jtrue): 30522 * kjs/ArrayPrototype.cpp: 30523 (JSC::arrayProtoFuncFilter): 30524 (JSC::arrayProtoFuncEvery): 30525 (JSC::arrayProtoFuncSome): 30526 * kjs/BooleanConstructor.cpp: 30527 (JSC::constructBoolean): 30528 (JSC::callBooleanConstructor): 30529 * kjs/GetterSetter.h: 30530 * kjs/JSCell.h: 30531 (JSC::JSValue::toBoolean): 30532 * kjs/JSNumberCell.cpp: 30533 * kjs/JSNumberCell.h: 30534 (JSC::JSNumberCell::toBoolean): 30535 * kjs/JSObject.cpp: 30536 * kjs/JSObject.h: 30537 (JSC::JSObject::toBoolean): 30538 (JSC::JSCell::toBoolean): 30539 * kjs/JSString.cpp: 30540 * kjs/JSString.h: 30541 (JSC::JSString::toBoolean): 30542 * kjs/JSValue.h: 30543 * kjs/RegExpConstructor.cpp: 30544 (JSC::setRegExpConstructorMultiline): 30545 * kjs/RegExpObject.cpp: 30546 (JSC::RegExpObject::match): 30547 * kjs/RegExpPrototype.cpp: 30548 (JSC::regExpProtoFuncToString): 30549 30550 2008-10-06 Ariya Hidayat <ariya.hidayat (a] trolltech.com> 30551 30552 Reviewed by Simon. 30553 30554 Build fix for MinGW. 30555 30556 * JavaScriptCore.pri: 30557 * kjs/DateMath.cpp: 30558 (JSC::highResUpTime): 30559 30560 2008-10-05 Cameron Zwarich <zwarich (a] apple.com> 30561 30562 Reviewed by Oliver Hunt. 30563 30564 Remove ScopeNode::containsClosures() now that it is unused. 30565 30566 * kjs/nodes.h: 30567 (JSC::ScopeNode::containsClosures): 30568 30569 2008-10-05 Maciej Stachowiak <mjs (a] apple.com> 30570 30571 Reviewed by Cameron Zwarich. 30572 30573 - fix releas-only test failures caused by the fix to bug 21375 30574 30575 * VM/Machine.cpp: 30576 (JSC::Machine::unwindCallFrame): Update ExecState while unwinding call frames; 30577 it now matters more to have a still-valid ExecState, since dynamicGlobalObject 30578 will make use of the ExecState's scope chain. 30579 * VM/Machine.h: 30580 30581 2008-10-05 Cameron Zwarich <zwarich (a] apple.com> 30582 30583 Reviewed by Oliver Hunt. 30584 30585 Bug 21364: Remove the branch in op_ret for OptionalCalleeActivation and OptionalCalleeArguments 30586 <https://bugs.webkit.org/show_bug.cgi?id=21364> 30587 30588 Use information from the parser to detect whether an activation is 30589 needed or 'arguments' is used, and emit explicit instructions to tear 30590 them off before op_ret. This allows a branch to be removed from op_ret 30591 and simplifies some other code. This does cause a small change in the 30592 behaviour of 'f.arguments'; it is no longer live when 'arguments' is not 30593 mentioned in the lexical scope of the function. 30594 30595 It should now be easy to remove the OptionaCalleeActivation slot in the 30596 call frame, but this will be done in a later patch. 30597 30598 * VM/CTI.cpp: 30599 (JSC::CTI::privateCompileMainPass): 30600 * VM/CodeBlock.cpp: 30601 (JSC::CodeBlock::dump): 30602 * VM/CodeGenerator.cpp: 30603 (JSC::CodeGenerator::emitReturn): 30604 * VM/CodeGenerator.h: 30605 * VM/Machine.cpp: 30606 (JSC::Machine::unwindCallFrame): 30607 (JSC::Machine::privateExecute): 30608 (JSC::Machine::retrieveArguments): 30609 (JSC::Machine::cti_op_create_arguments): 30610 (JSC::Machine::cti_op_tear_off_activation): 30611 (JSC::Machine::cti_op_tear_off_arguments): 30612 * VM/Machine.h: 30613 * VM/Opcode.h: 30614 * kjs/Arguments.cpp: 30615 (JSC::Arguments::mark): 30616 * kjs/Arguments.h: 30617 (JSC::Arguments::isTornOff): 30618 (JSC::Arguments::Arguments): 30619 (JSC::Arguments::copyRegisters): 30620 (JSC::JSActivation::copyRegisters): 30621 * kjs/JSActivation.cpp: 30622 (JSC::JSActivation::argumentsGetter): 30623 * kjs/JSActivation.h: 30624 30625 2008-10-05 Maciej Stachowiak <mjs (a] apple.com> 30626 30627 Reviewed by Oliver Hunt. 30628 30629 - fixed "REGRESSION (r37297): fast/js/deep-recursion-test takes too long and times out" 30630 https://bugs.webkit.org/show_bug.cgi?id=21375 30631 30632 The problem is that dynamicGlobalObject had become O(N) in number 30633 of call frames, but unwinding the stack for an exception called it 30634 for every call frame, resulting in O(N^2) behavior for an 30635 exception thrown from inside deep recursion. 30636 30637 Instead of doing it that way, stash the dynamic global object in JSGlobalData. 30638 30639 * JavaScriptCore.exp: 30640 * VM/Machine.cpp: 30641 (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Helper class to temporarily 30642 store and later restore a dynamicGlobalObject in JSGlobalData. 30643 (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope): 30644 (JSC::Machine::execute): In each version, establish a DynamicGlobalObjectScope. 30645 For ProgramNode, always establish set new dynamicGlobalObject, for FunctionBody and Eval, 30646 only if none is currently set. 30647 * VM/Machine.h: 30648 * kjs/ExecState.h: 30649 * kjs/JSGlobalData.cpp: 30650 (JSC::JSGlobalData::JSGlobalData): Ininitalize new dynamicGlobalObject field to 0. 30651 * kjs/JSGlobalData.h: 30652 * kjs/JSGlobalObject.h: 30653 (JSC::ExecState::dynamicGlobalObject): Moved here from ExecState for benefit of inlining. 30654 Return lexical global object if this is a globalExec(), otherwise look in JSGlobalData 30655 for the one stashed there. 30656 30657 2008-10-05 Sam Weinig <sam (a] webkit.org> 30658 30659 Reviewed by Maciej Stachowiak. 30660 30661 Avoid an extra lookup when transitioning to an existing StructureID 30662 by caching the offset of property that caused the transition. 30663 30664 1% win on V8 suite. Wash on SunSpider. 30665 30666 * kjs/PropertyMap.cpp: 30667 (JSC::PropertyMap::put): 30668 * kjs/PropertyMap.h: 30669 * kjs/StructureID.cpp: 30670 (JSC::StructureID::StructureID): 30671 (JSC::StructureID::addPropertyTransition): 30672 * kjs/StructureID.h: 30673 (JSC::StructureID::setCachedTransistionOffset): 30674 (JSC::StructureID::cachedTransistionOffset): 30675 30676 2008-10-05 Cameron Zwarich <zwarich (a] apple.com> 30677 30678 Reviewed by Maciej Stachowiak. 30679 30680 Bug 21364: Remove the branch in op_ret for OptionalCalleeActivation and OptionalCalleeArguments 30681 <https://bugs.webkit.org/show_bug.cgi?id=21364> 30682 30683 This patch does not yet remove the branch, but it does a bit of refactoring 30684 so that a CodeGenerator now knows whether the associated CodeBlock will need 30685 a full scope before doing any code generation. This makes it possible to emit 30686 explicit tear-off instructions before every op_ret. 30687 30688 * VM/CodeBlock.h: 30689 (JSC::CodeBlock::CodeBlock): 30690 * VM/CodeGenerator.cpp: 30691 (JSC::CodeGenerator::generate): 30692 (JSC::CodeGenerator::CodeGenerator): 30693 (JSC::CodeGenerator::emitPushScope): 30694 (JSC::CodeGenerator::emitPushNewScope): 30695 * kjs/nodes.h: 30696 (JSC::ScopeNode::needsActivation): 30697 30698 2008-10-05 Gavin Barraclough <barraclough (a] apple.com> 30699 30700 Reviewed by Cameron Zwarich. 30701 30702 Fix for bug #21387 - using SamplingTool with CTI. 30703 30704 (1) A repatch offset offset changes due to an additional instruction to update SamplingTool state. 30705 (2) Fix an incusion order problem due to ExecState changes. 30706 (3) Change to a MACHINE_SAMPLING macro, use of exec should now be accessing global data. 30707 30708 * VM/CTI.h: 30709 (JSC::CTI::execute): 30710 * VM/SamplingTool.h: 30711 (JSC::SamplingTool::privateExecuteReturned): 30712 * kjs/Shell.cpp: 30713 30714 2008-10-04 Mark Rowe <mrowe (a] apple.com> 30715 30716 Reviewed by Tim Hatcher. 30717 30718 Add a 'Check For Weak VTables' build phase to catch weak vtables as early as possible. 30719 30720 * JavaScriptCore.xcodeproj/project.pbxproj: 30721 30722 2008-10-04 Sam Weinig <sam (a] webkit.org> 30723 30724 Reviewed by Oliver Hunt. 30725 30726 Fix https://bugs.webkit.org/show_bug.cgi?id=21320 30727 leaks of PropertyNameArrayData seen on buildbot 30728 30729 - Fix RefPtr cycle by making PropertyNameArrayData's pointer back 30730 to the StructureID a weak pointer. 30731 30732 * kjs/PropertyNameArray.h: 30733 (JSC::PropertyNameArrayData::setCachedStructureID): 30734 (JSC::PropertyNameArrayData::cachedStructureID): 30735 * kjs/StructureID.cpp: 30736 (JSC::StructureID::getEnumerablePropertyNames): 30737 (JSC::StructureID::clearEnumerationCache): 30738 (JSC::StructureID::~StructureID): 30739 30740 2008-10-04 Darin Adler <darin (a] apple.com> 30741 30742 Reviewed by Cameron Zwarich. 30743 30744 - https://bugs.webkit.org/show_bug.cgi?id=21295 30745 Bug 21295: Replace ExecState with a call frame Register pointer 30746 30747 10% faster on Richards; other v8 benchmarks faster too. 30748 A wash on SunSpider. 30749 30750 This does the minimum necessary to get the speedup. Next step in 30751 cleaning this up is to replace ExecState with a CallFrame class, 30752 and be more judicious about when to pass a call frame and when 30753 to pass a global data pointer, global object pointer, or perhaps 30754 something else entirely. 30755 30756 * VM/CTI.cpp: Remove the debug-only check of the exception in 30757 ctiVMThrowTrampoline -- already checked in the code the trampoline 30758 jumps to, so not all that useful. Removed the exec argument from 30759 ctiTrampoline. Removed emitDebugExceptionCheck -- no longer needed. 30760 (JSC::CTI::emitCall): Removed code to set ExecState::m_callFrame. 30761 (JSC::CTI::privateCompileMainPass): Removed code in catch to extract 30762 the exception from ExecState::m_exception; instead, the code that 30763 jumps into catch will make sure the exception is already in eax. 30764 * VM/CTI.h: Removed exec from the ctiTrampoline. Also removed the 30765 non-helpful "volatile". Temporarily left ARG_exec in as a synonym 30766 for ARG_r; I'll change that on a future cleanup pass when introducing 30767 more use of the CallFrame type. 30768 (JSC::CTI::execute): Removed the ExecState* argument. 30769 30770 * VM/ExceptionHelpers.cpp: 30771 (JSC::InterruptedExecutionError::InterruptedExecutionError): Take 30772 JSGlobalData* instead of ExecState*. 30773 (JSC::createInterruptedExecutionException): Ditto. 30774 * VM/ExceptionHelpers.h: Ditto. Also removed an unneeded include. 30775 30776 * VM/Machine.cpp: 30777 (JSC::slideRegisterWindowForCall): Removed the exec and 30778 exceptionValue arguments. Changed to return 0 when there's a stack 30779 overflow rather than using a separate exception argument to cut 30780 down on memory accesses in the calling convention. 30781 (JSC::Machine::unwindCallFrame): Removed the exec argument when 30782 constructing a DebuggerCallFrame. Also removed code to set 30783 ExecState::m_callFrame. 30784 (JSC::Machine::throwException): Removed the exec argument when 30785 construction a DebuggerCallFrame. 30786 (JSC::Machine::execute): Updated to use the register instead of 30787 ExecState and also removed various uses of ExecState. 30788 (JSC::Machine::debug): 30789 (JSC::Machine::privateExecute): Put globalData into a local 30790 variable so it can be used throughout the interpreter. Changed 30791 the VM_CHECK_EXCEPTION to get the exception in globalData instead 30792 of through ExecState. 30793 (JSC::Machine::retrieveLastCaller): Turn exec into a registers 30794 pointer by calling registers() instead of by getting m_callFrame. 30795 (JSC::Machine::callFrame): Ditto. 30796 Tweaked exception macros. Made new versions for when you know 30797 you have an exception. Get at global exception with ARG_globalData. 30798 Got rid of the need to pass in the return value type. 30799 (JSC::Machine::cti_op_add): Update to use new version of exception 30800 macros. 30801 (JSC::Machine::cti_op_pre_inc): Ditto. 30802 (JSC::Machine::cti_timeout_check): Ditto. 30803 (JSC::Machine::cti_op_instanceof): Ditto. 30804 (JSC::Machine::cti_op_new_func): Ditto. 30805 (JSC::Machine::cti_op_call_JSFunction): Optimized by using the 30806 ARG values directly instead of through local variables -- this gets 30807 rid of code that just shuffles things around in the stack frame. 30808 Also get rid of ExecState and update for the new way exceptions are 30809 handled in slideRegisterWindowForCall. 30810 (JSC::Machine::cti_vm_compile): Update to make exec out of r since 30811 they are both the same thing now. 30812 (JSC::Machine::cti_op_call_NotJSFunction): Ditto. 30813 (JSC::Machine::cti_op_init_arguments): Ditto. 30814 (JSC::Machine::cti_op_resolve): Ditto. 30815 (JSC::Machine::cti_op_construct_JSConstruct): Ditto. 30816 (JSC::Machine::cti_op_construct_NotJSConstruct): Ditto. 30817 (JSC::Machine::cti_op_resolve_func): Ditto. 30818 (JSC::Machine::cti_op_put_by_val): Ditto. 30819 (JSC::Machine::cti_op_put_by_val_array): Ditto. 30820 (JSC::Machine::cti_op_resolve_skip): Ditto. 30821 (JSC::Machine::cti_op_resolve_global): Ditto. 30822 (JSC::Machine::cti_op_post_inc): Ditto. 30823 (JSC::Machine::cti_op_resolve_with_base): Ditto. 30824 (JSC::Machine::cti_op_post_dec): Ditto. 30825 (JSC::Machine::cti_op_call_eval): Ditto. 30826 (JSC::Machine::cti_op_throw): Ditto. Also rearranged to return 30827 the exception value as the return value so it can be used by 30828 op_catch. 30829 (JSC::Machine::cti_op_push_scope): Ditto. 30830 (JSC::Machine::cti_op_in): Ditto. 30831 (JSC::Machine::cti_op_del_by_val): Ditto. 30832 (JSC::Machine::cti_vm_throw): Ditto. Also rearranged to return 30833 the exception value as the return value so it can be used by 30834 op_catch. 30835 30836 * kjs/DebuggerCallFrame.cpp: 30837 (JSC::DebuggerCallFrame::functionName): Pass globalData. 30838 (JSC::DebuggerCallFrame::evaluate): Eliminated code to make a 30839 new ExecState. 30840 * kjs/DebuggerCallFrame.h: Removed ExecState argument from 30841 constructor. 30842 30843 * kjs/ExecState.h: Eliminated all data members and made ExecState 30844 inherit privately from Register instead. Also added a typedef to 30845 the future name for this class, which is CallFrame. It's just a 30846 Register* that knows it's a pointer at a call frame. The new class 30847 can't be constructed or copied. Changed all functions to use 30848 the this pointer instead of m_callFrame. Changed exception-related 30849 functions to access an exception in JSGlobalData. Removed functions 30850 used by CTI to pass the return address to the throw machinery -- 30851 this is now done directly with a global in the global data. 30852 30853 * kjs/FunctionPrototype.cpp: 30854 (JSC::functionProtoFuncToString): Pass globalData instead of exec. 30855 30856 * kjs/InternalFunction.cpp: 30857 (JSC::InternalFunction::name): Take globalData instead of exec. 30858 * kjs/InternalFunction.h: Ditto. 30859 30860 * kjs/JSGlobalData.cpp: Initialize the new exception global to 0. 30861 * kjs/JSGlobalData.h: Declare two new globals. One for the current 30862 exception and another for the return address used by CTI to 30863 implement the throw operation. 30864 30865 * kjs/JSGlobalObject.cpp: 30866 (JSC::JSGlobalObject::init): Removed code to set up globalExec, 30867 which is now the same thing as globalCallFrame. 30868 (JSC::JSGlobalObject::reset): Get globalExec from our globalExec 30869 function so we don't have to repeat the logic twice. 30870 (JSC::JSGlobalObject::mark): Removed code to mark the exception; 30871 the exception is now stored in JSGlobalData and marked there. 30872 (JSC::JSGlobalObject::globalExec): Return a pointer to the end 30873 of the global call frame. 30874 * kjs/JSGlobalObject.h: Removed the globalExec data member. 30875 30876 * kjs/JSObject.cpp: 30877 (JSC::JSObject::putDirectFunction): Pass globalData instead of exec. 30878 30879 * kjs/collector.cpp: 30880 (JSC::Heap::collect): Mark the global exception. 30881 30882 * profiler/ProfileGenerator.cpp: 30883 (JSC::ProfileGenerator::addParentForConsoleStart): Pass globalData 30884 instead of exec to createCallIdentifier. 30885 30886 * profiler/Profiler.cpp: 30887 (JSC::Profiler::willExecute): Pass globalData instead of exec to 30888 createCallIdentifier. 30889 (JSC::Profiler::didExecute): Ditto. 30890 (JSC::Profiler::createCallIdentifier): Take globalData instead of 30891 exec. 30892 (JSC::createCallIdentifierFromFunctionImp): Ditto. 30893 * profiler/Profiler.h: Change interface to take a JSGlobalData 30894 instead of an ExecState. 30895 30896 2008-10-04 Cameron Zwarich <zwarich (a] apple.com> 30897 30898 Reviewed by Darin Adler. 30899 30900 Bug 21369: Add opcode documentation for all undocumented opcodes 30901 <https://bugs.webkit.org/show_bug.cgi?id=21369> 30902 30903 This patch adds opcode documentation for all undocumented opcodes, and 30904 it also renames op_init_arguments to op_create_arguments. 30905 30906 * VM/CTI.cpp: 30907 (JSC::CTI::privateCompileMainPass): 30908 * VM/CodeBlock.cpp: 30909 (JSC::CodeBlock::dump): 30910 * VM/CodeGenerator.cpp: 30911 (JSC::CodeGenerator::CodeGenerator): 30912 * VM/Machine.cpp: 30913 (JSC::Machine::privateExecute): 30914 (JSC::Machine::cti_op_create_arguments): 30915 * VM/Machine.h: 30916 * VM/Opcode.h: 30917 30918 2008-10-03 Maciej Stachowiak <mjs (a] apple.com> 30919 30920 Reviewed by Cameron Zwarich. 30921 30922 - "this" object in methods called on primitives should be wrapper object 30923 https://bugs.webkit.org/show_bug.cgi?id=21362 30924 30925 I changed things so that functions which use "this" do a fast 30926 version of toThisObject conversion if needed. Currently we miss 30927 the conversion entirely, at least for primitive types. Using 30928 TypeInfo and the primitive check, I made the fast case bail out 30929 pretty fast. 30930 30931 This is inexplicably an 1.007x SunSpider speedup (and a wash on V8 benchmarks). 30932 30933 Also renamed some opcodes for clarity: 30934 30935 init ==> enter 30936 init_activation ==> enter_with_activation 30937 30938 * VM/CTI.cpp: 30939 (JSC::CTI::privateCompileMainPass): 30940 (JSC::CTI::privateCompileSlowCases): 30941 * VM/CodeBlock.cpp: 30942 (JSC::CodeBlock::dump): 30943 * VM/CodeGenerator.cpp: 30944 (JSC::CodeGenerator::generate): 30945 (JSC::CodeGenerator::CodeGenerator): 30946 * VM/Machine.cpp: 30947 (JSC::Machine::privateExecute): 30948 (JSC::Machine::cti_op_convert_this): 30949 * VM/Machine.h: 30950 * VM/Opcode.h: 30951 * kjs/JSActivation.cpp: 30952 (JSC::JSActivation::JSActivation): 30953 * kjs/JSActivation.h: 30954 (JSC::JSActivation::createStructureID): 30955 * kjs/JSCell.h: 30956 (JSC::JSValue::needsThisConversion): 30957 * kjs/JSGlobalData.cpp: 30958 (JSC::JSGlobalData::JSGlobalData): 30959 * kjs/JSGlobalData.h: 30960 * kjs/JSNumberCell.h: 30961 (JSC::JSNumberCell::createStructureID): 30962 * kjs/JSStaticScopeObject.h: 30963 (JSC::JSStaticScopeObject::JSStaticScopeObject): 30964 (JSC::JSStaticScopeObject::createStructureID): 30965 * kjs/JSString.h: 30966 (JSC::JSString::createStructureID): 30967 * kjs/JSValue.h: 30968 * kjs/TypeInfo.h: 30969 (JSC::TypeInfo::needsThisConversion): 30970 * kjs/nodes.h: 30971 (JSC::ScopeNode::usesThis): 30972 30973 2008-10-03 Cameron Zwarich <zwarich (a] apple.com> 30974 30975 Reviewed by Maciej Stachowiak. 30976 30977 Bug 21356: The size of the RegisterFile differs depending on 32-bit / 64-bit and Debug / Release 30978 <https://bugs.webkit.org/show_bug.cgi?id=21356> 30979 30980 The RegisterFile decreases in size (measured in terms of numbers of 30981 Registers) as the size of a Register increases. This causes 30982 30983 js1_5/Regress/regress-159334.js 30984 30985 to fail in 64-bit debug builds. This fix makes the RegisterFile on all 30986 platforms the same size that it is in 32-bit Release builds. 30987 30988 * VM/RegisterFile.h: 30989 (JSC::RegisterFile::RegisterFile): 30990 30991 2008-10-03 Maciej Stachowiak <mjs (a] apple.com> 30992 30993 Reviewed by Cameron Zwarich. 30994 30995 - Some code cleanup to how we handle code features. 30996 30997 1) Rename FeatureInfo typedef to CodeFeatures. 30998 2) Rename NodeFeatureInfo template to NodeInfo. 30999 3) Keep CodeFeature bitmask in ScopeNode instead of trying to break it out into individual bools. 31000 4) Rename misleadingly named "needsClosure" method to "containsClosures", which better describes the meaning 31001 of ClosureFeature. 31002 5) Make setUsersArguments() not take an argument since it only goes one way. 31003 31004 * JavaScriptCore.exp: 31005 * VM/CodeBlock.h: 31006 (JSC::CodeBlock::CodeBlock): 31007 * kjs/NodeInfo.h: 31008 * kjs/Parser.cpp: 31009 (JSC::Parser::didFinishParsing): 31010 * kjs/Parser.h: 31011 (JSC::Parser::parse): 31012 * kjs/grammar.y: 31013 * kjs/nodes.cpp: 31014 (JSC::ScopeNode::ScopeNode): 31015 (JSC::ProgramNode::ProgramNode): 31016 (JSC::ProgramNode::create): 31017 (JSC::EvalNode::EvalNode): 31018 (JSC::EvalNode::create): 31019 (JSC::FunctionBodyNode::FunctionBodyNode): 31020 (JSC::FunctionBodyNode::create): 31021 * kjs/nodes.h: 31022 (JSC::ScopeNode::usesEval): 31023 (JSC::ScopeNode::containsClosures): 31024 (JSC::ScopeNode::usesArguments): 31025 (JSC::ScopeNode::setUsesArguments): 31026 31027 2008-10-03 Cameron Zwarich <zwarich (a] apple.com> 31028 31029 Reviewed by Maciej Stachowiak. 31030 31031 Bug 21343: REGRESSSION (r37160): ecma_3/ExecutionContexts/10.1.3-1.js and js1_4/Functions/function-001.js fail on 64-bit 31032 <https://bugs.webkit.org/show_bug.cgi?id=21343> 31033 31034 A fix was landed for this issue in r37253, and the ChangeLog assumes 31035 that it is a compiler bug, but it turns out that it is a subtle issue 31036 with mixing signed and unsigned 32-bit values in a 64-bit environment. 31037 In order to properly fix this bug, we should convert our signed offsets 31038 into the register file to use ptrdiff_t. 31039 31040 This may not be the only instance of this issue, but I will land this 31041 fix first and look for more later. 31042 31043 * VM/Machine.cpp: 31044 (JSC::Machine::getArgumentsData): 31045 * VM/Machine.h: 31046 * kjs/Arguments.cpp: 31047 (JSC::Arguments::getOwnPropertySlot): 31048 * kjs/Arguments.h: 31049 (JSC::Arguments::init): 31050 31051 2008-10-03 Darin Adler <darin (a] apple.com> 31052 31053 * VM/CTI.cpp: Another Windows build fix. Change the args of ctiTrampoline. 31054 31055 * kjs/JSNumberCell.h: A build fix for newer versions of gcc. Added 31056 declarations of JSGlobalData overloads of jsNumberCell. 31057 31058 2008-10-03 Darin Adler <darin (a] apple.com> 31059 31060 - try to fix Windows build 31061 31062 * kjs/ScopeChain.h: Add forward declaration of JSGlobalData. 31063 31064 2008-10-03 Darin Adler <darin (a] apple.com> 31065 31066 Reviewed by Geoff Garen. 31067 31068 - next step of https://bugs.webkit.org/show_bug.cgi?id=21295 31069 Turn ExecState into a call frame pointer. 31070 31071 Remove m_globalObject and m_globalData from ExecState. 31072 31073 SunSpider says this is a wash (slightly faster but not statistically 31074 significant); which is good enough since it's a preparation step and 31075 not supposed to be a spedup. 31076 31077 * API/JSCallbackFunction.cpp: 31078 (JSC::JSCallbackFunction::JSCallbackFunction): 31079 * kjs/ArrayConstructor.cpp: 31080 (JSC::ArrayConstructor::ArrayConstructor): 31081 * kjs/BooleanConstructor.cpp: 31082 (JSC::BooleanConstructor::BooleanConstructor): 31083 * kjs/DateConstructor.cpp: 31084 (JSC::DateConstructor::DateConstructor): 31085 * kjs/ErrorConstructor.cpp: 31086 (JSC::ErrorConstructor::ErrorConstructor): 31087 * kjs/FunctionPrototype.cpp: 31088 (JSC::FunctionPrototype::FunctionPrototype): 31089 * kjs/JSFunction.cpp: 31090 (JSC::JSFunction::JSFunction): 31091 * kjs/NativeErrorConstructor.cpp: 31092 (JSC::NativeErrorConstructor::NativeErrorConstructor): 31093 * kjs/NumberConstructor.cpp: 31094 (JSC::NumberConstructor::NumberConstructor): 31095 * kjs/ObjectConstructor.cpp: 31096 (JSC::ObjectConstructor::ObjectConstructor): 31097 * kjs/PrototypeFunction.cpp: 31098 (JSC::PrototypeFunction::PrototypeFunction): 31099 * kjs/RegExpConstructor.cpp: 31100 (JSC::RegExpConstructor::RegExpConstructor): 31101 * kjs/StringConstructor.cpp: 31102 (JSC::StringConstructor::StringConstructor): 31103 Pass JSGlobalData* instead of ExecState* to the InternalFunction 31104 constructor. 31105 31106 * API/OpaqueJSString.cpp: Added now-needed include. 31107 31108 * JavaScriptCore.exp: Updated. 31109 31110 * VM/CTI.cpp: 31111 (JSC::CTI::emitSlowScriptCheck): Changed to use ARGS_globalData 31112 instead of ARGS_exec. 31113 31114 * VM/CTI.h: Added a new argument to the CTI, the global data pointer. 31115 While it's possible to get to the global data pointer using the 31116 ExecState pointer, it's slow enough that it's better to just keep 31117 it around in the CTI arguments. 31118 31119 * VM/CodeBlock.h: Moved the CodeType enum here from ExecState.h. 31120 31121 * VM/Machine.cpp: 31122 (JSC::Machine::execute): Pass fewer arguments when constructing 31123 ExecState, and pass the global data pointer when invoking CTI. 31124 (JSC::Machine::firstCallFrame): Added. Used to get the dynamic global 31125 object, which is in the scope chain of the first call frame. 31126 (JSC::Machine::cti_op_add): Use globalData instead of exec when 31127 possible, to keep fast cases fast, since it's now more expensive to 31128 get to it through the exec pointer. 31129 (JSC::Machine::cti_timeout_check): Ditto. 31130 (JSC::Machine::cti_op_put_by_id_second): Ditto. 31131 (JSC::Machine::cti_op_get_by_id_second): Ditto. 31132 (JSC::Machine::cti_op_mul): Ditto. 31133 (JSC::Machine::cti_vm_compile): Ditto. 31134 (JSC::Machine::cti_op_get_by_val): Ditto. 31135 (JSC::Machine::cti_op_sub): Ditto. 31136 (JSC::Machine::cti_op_put_by_val): Ditto. 31137 (JSC::Machine::cti_op_put_by_val_array): Ditto. 31138 (JSC::Machine::cti_op_negate): Ditto. 31139 (JSC::Machine::cti_op_div): Ditto. 31140 (JSC::Machine::cti_op_pre_dec): Ditto. 31141 (JSC::Machine::cti_op_post_inc): Ditto. 31142 (JSC::Machine::cti_op_lshift): Ditto. 31143 (JSC::Machine::cti_op_bitand): Ditto. 31144 (JSC::Machine::cti_op_rshift): Ditto. 31145 (JSC::Machine::cti_op_bitnot): Ditto. 31146 (JSC::Machine::cti_op_mod): Ditto. 31147 (JSC::Machine::cti_op_post_dec): Ditto. 31148 (JSC::Machine::cti_op_urshift): Ditto. 31149 (JSC::Machine::cti_op_bitxor): Ditto. 31150 (JSC::Machine::cti_op_bitor): Ditto. 31151 (JSC::Machine::cti_op_call_eval): Ditto. 31152 (JSC::Machine::cti_op_throw): Ditto. 31153 (JSC::Machine::cti_op_is_string): Ditto. 31154 (JSC::Machine::cti_op_debug): Ditto. 31155 (JSC::Machine::cti_vm_throw): Ditto. 31156 31157 * VM/Machine.h: Added firstCallFrame. 31158 31159 * kjs/DebuggerCallFrame.cpp: 31160 (JSC::DebuggerCallFrame::evaluate): Pass fewer arguments when 31161 constructing ExecState. 31162 31163 * kjs/ExecState.cpp: Deleted contents. Later we'll remove the 31164 file altogether. 31165 31166 * kjs/ExecState.h: Removed m_globalObject and m_globalData. 31167 Moved CodeType into another header. 31168 (JSC::ExecState::ExecState): Take only a single argument, a 31169 call frame pointer. 31170 (JSC::ExecState::dynamicGlobalObject): Get the object from 31171 the first call frame since it's no longer stored. 31172 (JSC::ExecState::globalData): Get the global data from the 31173 scope chain, since we no longer store a pointer to it here. 31174 (JSC::ExecState::identifierTable): Ditto. 31175 (JSC::ExecState::propertyNames): Ditto. 31176 (JSC::ExecState::emptyList): Ditto. 31177 (JSC::ExecState::lexer): Ditto. 31178 (JSC::ExecState::parser): Ditto. 31179 (JSC::ExecState::machine): Ditto. 31180 (JSC::ExecState::arrayTable): Ditto. 31181 (JSC::ExecState::dateTable): Ditto. 31182 (JSC::ExecState::mathTable): Ditto. 31183 (JSC::ExecState::numberTable): Ditto. 31184 (JSC::ExecState::regExpTable): Ditto. 31185 (JSC::ExecState::regExpConstructorTable): Ditto. 31186 (JSC::ExecState::stringTable): Ditto. 31187 (JSC::ExecState::heap): Ditto. 31188 31189 * kjs/FunctionConstructor.cpp: 31190 (JSC::FunctionConstructor::FunctionConstructor): Pass 31191 JSGlobalData* instead of ExecState* to the InternalFunction 31192 constructor. 31193 (JSC::constructFunction): Pass the global data pointer when 31194 constructing a new scope chain. 31195 31196 * kjs/InternalFunction.cpp: 31197 (JSC::InternalFunction::InternalFunction): Take a JSGlobalData* 31198 instead of an ExecState*. Later we can change more places to 31199 work this way -- it's more efficient to take the type you need 31200 since the caller might already have it. 31201 * kjs/InternalFunction.h: Ditto. 31202 31203 * kjs/JSCell.h: 31204 (JSC::JSCell::operator new): Added an overload that takes a 31205 JSGlobalData* so you can construct without an ExecState*. 31206 31207 * kjs/JSGlobalObject.cpp: 31208 (JSC::JSGlobalObject::init): Moved creation of the global scope 31209 chain in here, since it now requires a pointer to the global data. 31210 Moved the initialization of the call frame in here since it requires 31211 the global scope chain node. Removed the extra argument to ExecState 31212 when creating the global ExecState*. 31213 * kjs/JSGlobalObject.h: Removed initialization of globalScopeChain 31214 and the call frame from the JSGlobalObjectData constructor. Added 31215 a thisValue argument to the init function. 31216 31217 * kjs/JSNumberCell.cpp: Added versions of jsNumberCell that take 31218 JSGlobalData* rather than ExecState*. 31219 * kjs/JSNumberCell.h: 31220 (JSC::JSNumberCell::operator new): Added a version that takes 31221 JSGlobalData*. 31222 (JSC::JSNumberCell::JSNumberCell): Ditto. 31223 (JSC::jsNumber): Ditto. 31224 * kjs/JSString.cpp: 31225 (JSC::jsString): Ditto. 31226 (JSC::jsSubstring): Ditto. 31227 (JSC::jsOwnedString): Ditto. 31228 * kjs/JSString.h: 31229 (JSC::JSString::JSString): Changed to take JSGlobalData*. 31230 (JSC::jsEmptyString): Added a version that takes JSGlobalData*. 31231 (JSC::jsSingleCharacterString): Ditto. 31232 (JSC::jsSingleCharacterSubstring): Ditto. 31233 (JSC::jsNontrivialString): Ditto. 31234 (JSC::JSString::getIndex): Ditto. 31235 (JSC::jsString): Ditto. 31236 (JSC::jsSubstring): Ditto. 31237 (JSC::jsOwnedString): Ditto. 31238 31239 * kjs/ScopeChain.h: Added a globalData pointer to each node. 31240 (JSC::ScopeChainNode::ScopeChainNode): Initialize the globalData 31241 pointer. 31242 (JSC::ScopeChainNode::push): Set the global data pointer in the 31243 new node. 31244 (JSC::ScopeChain::ScopeChain): Take a globalData argument. 31245 31246 * kjs/SmallStrings.cpp: 31247 (JSC::SmallStrings::createEmptyString): Take JSGlobalData* instead of 31248 ExecState*. 31249 (JSC::SmallStrings::createSingleCharacterString): Ditto. 31250 * kjs/SmallStrings.h: 31251 (JSC::SmallStrings::emptyString): Ditto. 31252 (JSC::SmallStrings::singleCharacterString): Ditto. 31253 31254 2008-10-03 Cameron Zwarich <zwarich (a] apple.com> 31255 31256 Reviewed by Geoff Garen. 31257 31258 Bug 21343: REGRESSSION (r37160): ecma_3/ExecutionContexts/10.1.3-1.js and js1_4/Functions/function-001.js fail on 64-bit 31259 <https://bugs.webkit.org/show_bug.cgi?id=21343> 31260 31261 Add a workaround for a bug in GCC, which affects GCC 4.0, GCC 4.2, and 31262 llvm-gcc 4.2. I put it in an #ifdef because it was a slight regression 31263 on SunSpider in 32-bit, although that might be entirely random. 31264 31265 * kjs/Arguments.cpp: 31266 (JSC::Arguments::getOwnPropertySlot): 31267 31268 2008-10-03 Darin Adler <darin (a] apple.com> 31269 31270 Rubber stamped by Alexey Proskuryakov. 31271 31272 * kjs/Shell.cpp: (main): Don't delete JSGlobalData. Later, we need to change 31273 this tool to use public JavaScriptCore API instead. 31274 31275 2008-10-03 Darin Adler <darin (a] apple.com> 31276 31277 Suggested by Alexey Proskuryakov. 31278 31279 * kjs/JSGlobalData.cpp: 31280 (JSC::JSGlobalData::~JSGlobalData): Remove call to heap.destroy() because 31281 it's too late to ref the JSGlobalData object once it's already being 31282 destroyed. In practice this is not a problem because WebCore's JSGlobalData 31283 is never destroyed and JSGlobalContextRelease takes care of calling 31284 heap.destroy() in advance. 31285 31286 2008-10-02 Oliver Hunt <oliver (a] apple.com> 31287 31288 Reviewed by Maciej Stachowiak. 31289 31290 Replace SSE3 check with an SSE2 check, and implement SSE2 check on windows. 31291 31292 5.6% win on SunSpider on windows. 31293 31294 * VM/CTI.cpp: 31295 (JSC::isSSE2Present): 31296 (JSC::CTI::compileBinaryArithOp): 31297 (JSC::CTI::compileBinaryArithOpSlowCase): 31298 31299 2008-10-03 Maciej Stachowiak <mjs (a] apple.com> 31300 31301 Rubber stamped by Cameron Zwarich. 31302 31303 - fix mistaken change of | to || which caused a big perf regression on EarleyBoyer 31304 31305 * kjs/grammar.y: 31306 31307 2008-10-02 Darin Adler <darin (a] apple.com> 31308 31309 Reviewed by Geoff Garen. 31310 31311 - https://bugs.webkit.org/show_bug.cgi?id=21321 31312 Bug 21321: speed up JavaScriptCore by inlining Heap in JSGlobalData 31313 31314 1.019x as fast on SunSpider. 31315 31316 * API/JSBase.cpp: 31317 (JSEvaluateScript): Use heap. instead of heap-> to work with the heap. 31318 (JSCheckScriptSyntax): Ditto. 31319 (JSGarbageCollect): Ditto. 31320 (JSReportExtraMemoryCost): Ditto. 31321 * API/JSContextRef.cpp: 31322 (JSGlobalContextRetain): Ditto. 31323 (JSGlobalContextRelease): Destroy the heap with the destroy function instead 31324 of the delete operator. 31325 (JSContextGetGlobalObject): Use heap. instead of heap-> to work with the heap. 31326 * API/JSObjectRef.cpp: 31327 (JSObjectMake): Use heap. instead of heap-> to work with the heap. 31328 (JSObjectMakeFunctionWithCallback): Ditto. 31329 (JSObjectMakeConstructor): Ditto. 31330 (JSObjectMakeFunction): Ditto. 31331 (JSObjectMakeArray): Ditto. 31332 (JSObjectMakeDate): Ditto. 31333 (JSObjectMakeError): Ditto. 31334 (JSObjectMakeRegExp): Ditto. 31335 (JSObjectHasProperty): Ditto. 31336 (JSObjectGetProperty): Ditto. 31337 (JSObjectSetProperty): Ditto. 31338 (JSObjectGetPropertyAtIndex): Ditto. 31339 (JSObjectSetPropertyAtIndex): Ditto. 31340 (JSObjectDeleteProperty): Ditto. 31341 (JSObjectCallAsFunction): Ditto. 31342 (JSObjectCallAsConstructor): Ditto. 31343 (JSObjectCopyPropertyNames): Ditto. 31344 (JSPropertyNameAccumulatorAddName): Ditto. 31345 * API/JSValueRef.cpp: 31346 (JSValueIsEqual): Ditto. 31347 (JSValueIsInstanceOfConstructor): Ditto. 31348 (JSValueMakeNumber): Ditto. 31349 (JSValueMakeString): Ditto. 31350 (JSValueToNumber): Ditto. 31351 (JSValueToStringCopy): Ditto. 31352 (JSValueToObject): Ditto. 31353 (JSValueProtect): Ditto. 31354 (JSValueUnprotect): Ditto. 31355 31356 * kjs/ExecState.h: 31357 (JSC::ExecState::heap): Update to use the & operator. 31358 31359 * kjs/JSGlobalData.cpp: 31360 (JSC::JSGlobalData::JSGlobalData): Update to initialize a heap member 31361 instead of calling new to make a heap. 31362 (JSC::JSGlobalData::~JSGlobalData): Destroy the heap with the destroy 31363 function instead of the delete operator. 31364 * kjs/JSGlobalData.h: Change from Heap* to a Heap. 31365 * kjs/JSGlobalObject.cpp: 31366 (JSC::JSGlobalObject::mark): Use the & operator here. 31367 (JSC::JSGlobalObject::operator new): Use heap. instead of heap-> to work 31368 with the heap. 31369 31370 2008-10-02 Cameron Zwarich <zwarich (a] apple.com> 31371 31372 Reviewed by Geoff Garen. 31373 31374 Bug 21317: Replace RegisterFile size and capacity information with Register pointers 31375 <https://bugs.webkit.org/show_bug.cgi?id=21317> 31376 31377 This is a 2.3% speedup on the V8 DeltaBlue benchmark, a 3.3% speedup on 31378 the V8 Raytrace benchmark, and a 1.0% speedup on SunSpider. 31379 31380 * VM/Machine.cpp: 31381 (JSC::slideRegisterWindowForCall): 31382 (JSC::Machine::callEval): 31383 (JSC::Machine::execute): 31384 (JSC::Machine::privateExecute): 31385 (JSC::Machine::cti_op_call_JSFunction): 31386 (JSC::Machine::cti_op_construct_JSConstruct): 31387 * VM/RegisterFile.cpp: 31388 (JSC::RegisterFile::~RegisterFile): 31389 * VM/RegisterFile.h: 31390 (JSC::RegisterFile::RegisterFile): 31391 (JSC::RegisterFile::start): 31392 (JSC::RegisterFile::end): 31393 (JSC::RegisterFile::size): 31394 (JSC::RegisterFile::shrink): 31395 (JSC::RegisterFile::grow): 31396 (JSC::RegisterFile::lastGlobal): 31397 (JSC::RegisterFile::markGlobals): 31398 (JSC::RegisterFile::markCallFrames): 31399 * kjs/JSGlobalObject.cpp: 31400 (JSC::JSGlobalObject::copyGlobalsTo): 31401 31402 2008-10-02 Cameron Zwarich <zwarich (a] apple.com> 31403 31404 Rubber-stamped by Darin Adler. 31405 31406 Change bitwise operations introduced in r37166 to boolean operations. We 31407 only use bitwise operations over boolean operations for increasing 31408 performance in extremely hot code, but that does not apply to anything 31409 in the parser. 31410 31411 * kjs/grammar.y: 31412 31413 2008-10-02 Gavin Barraclough <barraclough (a] apple.com> 31414 31415 Reviewed by Darin Adler. 31416 31417 Fix for bug #21232 - should reset m_isPendingDash on flush, 31418 and should allow '\-' as beginning or end of a range (though 31419 not to specifiy a range itself). 31420 31421 * ChangeLog: 31422 * wrec/CharacterClassConstructor.cpp: 31423 (JSC::CharacterClassConstructor::put): 31424 (JSC::CharacterClassConstructor::flush): 31425 * wrec/CharacterClassConstructor.h: 31426 (JSC::CharacterClassConstructor::flushBeforeEscapedHyphen): 31427 * wrec/WREC.cpp: 31428 (JSC::WRECGenerator::generateDisjunction): 31429 (JSC::WRECParser::parseCharacterClass): 31430 (JSC::WRECParser::parseDisjunction): 31431 * wrec/WREC.h: 31432 31433 2008-10-02 Darin Adler <darin (a] apple.com> 31434 31435 Reviewed by Sam Weinig. 31436 31437 - remove the "static" from declarations in a header file, since we 31438 don't want them to have internal linkage 31439 31440 * VM/Machine.h: Remove the static keyword from the constant and the 31441 three inline functions that Geoff just moved here. 31442 31443 2008-10-02 Geoffrey Garen <ggaren (a] apple.com> 31444 31445 Reviewed by Sam Weinig. 31446 31447 Fixed https://bugs.webkit.org/show_bug.cgi?id=21283. 31448 Profiler Crashes When Started 31449 31450 * VM/Machine.cpp: 31451 * VM/Machine.h: 31452 (JSC::makeHostCallFramePointer): 31453 (JSC::isHostCallFrame): 31454 (JSC::stripHostCallFrameBit): Moved some things to the header so 31455 JSGlobalObject could use them. 31456 31457 * kjs/JSGlobalObject.h: 31458 (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Call the 31459 new makeHostCallFramePointer API, since 0 no longer indicates a host 31460 call frame. 31461 31462 2008-10-02 Alexey Proskuryakov <ap (a] webkit.org> 31463 31464 Reviewed by Darin Adler. 31465 31466 https://bugs.webkit.org/show_bug.cgi?id=21304 31467 Stop using a static wrapper map for WebCore JS bindings 31468 31469 * kjs/JSGlobalData.cpp: 31470 (JSC::JSGlobalData::JSGlobalData): 31471 (JSC::JSGlobalData::~JSGlobalData): 31472 (JSC::JSGlobalData::ClientData::~ClientData): 31473 * kjs/JSGlobalData.h: 31474 Added a client data member to JSGlobalData. WebCore will use it to store bindings-related 31475 global data. 31476 31477 * JavaScriptCore.exp: Export virtual ClientData destructor. 31478 31479 2008-10-02 Geoffrey Garen <ggaren (a] apple.com> 31480 31481 Not reviewed. 31482 31483 Try to fix Qt build. 31484 31485 * kjs/Error.h: 31486 31487 2008-10-01 Geoffrey Garen <ggaren (a] apple.com> 31488 31489 Reviewed by Darin Adler and Cameron Zwarich. 31490 31491 Preliminary step toward dynamic recompilation: Standardized and 31492 simplified the parsing interface. 31493 31494 The main goal in this patch is to make it easy to ask for a duplicate 31495 compilation, and get back a duplicate result -- same source URL, same 31496 debugger / profiler ID, same toString behavior, etc. 31497 31498 The basic unit of compilation and evaluation is now SourceCode, which 31499 encompasses a SourceProvider, a range in that provider, and a starting 31500 line number. 31501 31502 A SourceProvider now encompasses a source URL, and *is* a source ID, 31503 since a pointer is a unique identifier. 31504 31505 * API/JSBase.cpp: 31506 (JSEvaluateScript): 31507 (JSCheckScriptSyntax): Provide a SourceCode to the Interpreter, since 31508 other APIs are no longer supported. 31509 31510 * VM/CodeBlock.h: 31511 (JSC::EvalCodeCache::get): Provide a SourceCode to the Interpreter, since 31512 other APIs are no longer supported. 31513 (JSC::CodeBlock::CodeBlock): ASSERT something that used to be ASSERTed 31514 by our caller -- this is a better bottleneck. 31515 31516 * VM/CodeGenerator.cpp: 31517 (JSC::CodeGenerator::CodeGenerator): Updated for the fact that 31518 FunctionBodyNode's parameters are no longer a WTF::Vector. 31519 31520 * kjs/Arguments.cpp: 31521 (JSC::Arguments::Arguments): ditto 31522 31523 * kjs/DebuggerCallFrame.cpp: 31524 (JSC::DebuggerCallFrame::evaluate): Provide a SourceCode to the Parser, 31525 since other APIs are no longer supported. 31526 31527 * kjs/FunctionConstructor.cpp: 31528 (JSC::constructFunction): Provide a SourceCode to the Parser, since 31529 other APIs are no longer supported. Adopt FunctionBodyNode's new 31530 "finishParsing" API. 31531 31532 * kjs/JSFunction.cpp: 31533 (JSC::JSFunction::lengthGetter): 31534 (JSC::JSFunction::getParameterName): Updated for the fact that 31535 FunctionBodyNode's parameters are no longer a wtf::Vector. 31536 31537 * kjs/JSFunction.h: Nixed some cruft. 31538 31539 * kjs/JSGlobalObjectFunctions.cpp: 31540 (JSC::globalFuncEval): Provide a SourceCode to the Parser, since 31541 other APIs are no longer supported. 31542 31543 * kjs/Parser.cpp: 31544 (JSC::Parser::parse): Require a SourceCode argument, instead of a bunch 31545 of broken out parameters. Stop tracking sourceId as an integer, since we 31546 use the SourceProvider pointer for this now. Don't clamp the 31547 startingLineNumber, since SourceCode does that now. 31548 31549 * kjs/Parser.h: 31550 (JSC::Parser::parse): Standardized the parsing interface to require a 31551 SourceCode. 31552 31553 * kjs/Shell.cpp: 31554 (functionRun): 31555 (functionLoad): 31556 (prettyPrintScript): 31557 (runWithScripts): 31558 (runInteractive): Provide a SourceCode to the Interpreter, since 31559 other APIs are no longer supported. 31560 31561 * kjs/SourceProvider.h: 31562 (JSC::SourceProvider::SourceProvider): 31563 (JSC::SourceProvider::url): 31564 (JSC::SourceProvider::asId): 31565 (JSC::UStringSourceProvider::create): 31566 (JSC::UStringSourceProvider::UStringSourceProvider): Added new 31567 responsibilities described above. 31568 31569 * kjs/SourceRange.h: 31570 (JSC::SourceCode::SourceCode): 31571 (JSC::SourceCode::toString): 31572 (JSC::SourceCode::provider): 31573 (JSC::SourceCode::firstLine): 31574 (JSC::SourceCode::data): 31575 (JSC::SourceCode::length): Added new responsibilities described above. 31576 Renamed SourceRange to SourceCode, based on review feedback. Added 31577 a makeSource function for convenience. 31578 31579 * kjs/debugger.h: Provide a SourceCode to the client, since other APIs 31580 are no longer supported. 31581 31582 * kjs/grammar.y: Provide startingLineNumber when creating a SourceCode. 31583 31584 * kjs/debugger.h: Treat sourceId as intptr_t to avoid loss of precision 31585 on 64bit platforms. 31586 31587 * kjs/interpreter.cpp: 31588 (JSC::Interpreter::checkSyntax): 31589 (JSC::Interpreter::evaluate): 31590 * kjs/interpreter.h: Require a SourceCode instead of broken out arguments. 31591 31592 * kjs/lexer.cpp: 31593 (JSC::Lexer::setCode): 31594 * kjs/lexer.h: 31595 (JSC::Lexer::sourceRange): Fold together the SourceProvider and line number 31596 into a SourceCode. Fixed a bug where the Lexer would accidentally keep 31597 alive the last SourceProvider forever. 31598 31599 * kjs/nodes.cpp: 31600 (JSC::ScopeNode::ScopeNode): 31601 (JSC::ProgramNode::ProgramNode): 31602 (JSC::ProgramNode::create): 31603 (JSC::EvalNode::EvalNode): 31604 (JSC::EvalNode::generateCode): 31605 (JSC::EvalNode::create): 31606 (JSC::FunctionBodyNode::FunctionBodyNode): 31607 (JSC::FunctionBodyNode::finishParsing): 31608 (JSC::FunctionBodyNode::create): 31609 (JSC::FunctionBodyNode::generateCode): 31610 (JSC::ProgramNode::generateCode): 31611 (JSC::FunctionBodyNode::paramString): 31612 * kjs/nodes.h: 31613 (JSC::ScopeNode::): 31614 (JSC::ScopeNode::sourceId): 31615 (JSC::FunctionBodyNode::): 31616 (JSC::FunctionBodyNode::parameterCount): 31617 (JSC::FuncExprNode::): 31618 (JSC::FuncDeclNode::): Store a SourceCode in all ScopeNodes, since 31619 SourceCode is now responsible for tracking URL, ID, etc. Streamlined 31620 some ad hoc FunctionBodyNode fixups into a "finishParsing" function, to 31621 help make clear what you need to do in order to finish parsing a 31622 FunctionBodyNode. 31623 31624 * wtf/Vector.h: 31625 (WTF::::releaseBuffer): Don't ASSERT that releaseBuffer() is only called 31626 when buffer is not 0, since FunctionBodyNode is more than happy 31627 to get back a 0 buffer, and other functions like RefPtr::release() allow 31628 for 0, too. 31629 31630 2008-10-01 Cameron Zwarich <zwarich (a] apple.com> 31631 31632 Reviewed by Maciej Stachowiak. 31633 31634 Bug 21289: REGRESSION (r37160): Inspector crashes on load 31635 <https://bugs.webkit.org/show_bug.cgi?id=21289> 31636 31637 The code in Arguments::mark() in r37160 was wrong. It marks indices in 31638 d->registers, but that makes no sense (they are local variables, not 31639 arguments). It should mark those indices in d->registerArray instead. 31640 31641 This patch also changes Arguments::copyRegisters() to use d->numParameters 31642 instead of recomputing it. 31643 31644 * kjs/Arguments.cpp: 31645 (JSC::Arguments::mark): 31646 * kjs/Arguments.h: 31647 (JSC::Arguments::copyRegisters): 31648 31649 2008-09-30 Darin Adler <darin (a] apple.com> 31650 31651 Reviewed by Eric Seidel. 31652 31653 - https://bugs.webkit.org/show_bug.cgi?id=21214 31654 work on getting rid of ExecState 31655 31656 Eliminate some unneeded uses of dynamicGlobalObject. 31657 31658 * API/JSClassRef.cpp: 31659 (OpaqueJSClass::contextData): Changed to use a map in the global data instead 31660 of on the global object. Also fixed to use only a single hash table lookup. 31661 31662 * API/JSObjectRef.cpp: 31663 (JSObjectMakeConstructor): Use lexicalGlobalObject rather than dynamicGlobalObject 31664 to get the object prototype. 31665 31666 * kjs/ArrayPrototype.cpp: 31667 (JSC::arrayProtoFuncToString): Use arrayVisitedElements set in global data rather 31668 than in the global object. 31669 (JSC::arrayProtoFuncToLocaleString): Ditto. 31670 (JSC::arrayProtoFuncJoin): Ditto. 31671 31672 * kjs/JSGlobalData.cpp: 31673 (JSC::JSGlobalData::JSGlobalData): Don't initialize opaqueJSClassData, since 31674 it's no longer a pointer. 31675 (JSC::JSGlobalData::~JSGlobalData): We still need to delete all the values, but 31676 we don't need to delete the map since it's no longer a pointer. 31677 31678 * kjs/JSGlobalData.h: Made opaqueJSClassData a map instead of a pointer to a map. 31679 Also added arrayVisitedElements. 31680 31681 * kjs/JSGlobalObject.h: Removed arrayVisitedElements. 31682 31683 * kjs/Shell.cpp: 31684 (functionRun): Use lexicalGlobalObject instead of dynamicGlobalObject. 31685 (functionLoad): Ditto. 31686 31687 2008-10-01 Cameron Zwarich <zwarich (a] apple.com> 31688 31689 Not reviewed. 31690 31691 Speculative Windows build fix. 31692 31693 * kjs/grammar.y: 31694 31695 2008-10-01 Cameron Zwarich <zwarich (a] apple.com> 31696 31697 Reviewed by Darin Adler. 31698 31699 Bug 21123: using "arguments" in a function should not force creation of an activation object 31700 <https://bugs.webkit.org/show_bug.cgi?id=21123> 31701 31702 Make the 'arguments' object not require a JSActivation. We store the 31703 'arguments' object in the OptionalCalleeArguments call frame slot. We 31704 need to be able to get the original 'arguments' object to tear it off 31705 when returning from a function, but 'arguments' may be assigned to in a 31706 number of ways. 31707 31708 Therefore, we use the OptionalCalleeArguments slot when we want to get 31709 the original activation or we know that 'arguments' was not assigned a 31710 different value. When 'arguments' may have been assigned a new value, 31711 we use a new local variable that is initialized with 'arguments'. Since 31712 a function parameter named 'arguments' may overwrite the value of 31713 'arguments', we also need to be careful to look up 'arguments' in the 31714 symbol table, so we get the parameter named 'arguments' instead of the 31715 local variable that we have added for holding the 'arguments' object. 31716 31717 This is a 19.1% win on the V8 Raytrace benchmark using the SunSpider 31718 harness, and a 20.7% win using the V8 harness. This amounts to a 6.5% 31719 total speedup on the V8 benchmark suite using the V8 harness. 31720 31721 * VM/CTI.cpp: 31722 (JSC::CTI::privateCompileMainPass): 31723 * VM/CodeBlock.h: 31724 * VM/CodeGenerator.cpp: 31725 (JSC::CodeGenerator::CodeGenerator): 31726 * VM/Machine.cpp: 31727 (JSC::Machine::unwindCallFrame): 31728 (JSC::Machine::privateExecute): 31729 (JSC::Machine::retrieveArguments): 31730 (JSC::Machine::cti_op_init_arguments): 31731 (JSC::Machine::cti_op_ret_activation_arguments): 31732 * VM/Machine.h: 31733 * VM/RegisterFile.h: 31734 (JSC::RegisterFile::): 31735 * kjs/Arguments.cpp: 31736 (JSC::Arguments::mark): 31737 (JSC::Arguments::fillArgList): 31738 (JSC::Arguments::getOwnPropertySlot): 31739 (JSC::Arguments::put): 31740 * kjs/Arguments.h: 31741 (JSC::Arguments::setRegisters): 31742 (JSC::Arguments::init): 31743 (JSC::Arguments::Arguments): 31744 (JSC::Arguments::copyRegisters): 31745 (JSC::JSActivation::copyRegisters): 31746 * kjs/JSActivation.cpp: 31747 (JSC::JSActivation::argumentsGetter): 31748 * kjs/JSActivation.h: 31749 (JSC::JSActivation::JSActivationData::JSActivationData): 31750 * kjs/grammar.y: 31751 * kjs/nodes.h: 31752 (JSC::ScopeNode::setUsesArguments): 31753 * masm/X86Assembler.h: 31754 (JSC::X86Assembler::): 31755 (JSC::X86Assembler::orl_mr): 31756 31757 2008-10-01 Kevin McCullough <kmccullough (a] apple.com> 31758 31759 Rubberstamped by Geoff Garen. 31760 31761 Remove BreakpointCheckStatement because it's not used anymore. 31762 No effect on sunspider or the jsc tests. 31763 31764 * kjs/nodes.cpp: 31765 * kjs/nodes.h: 31766 31767 2008-09-30 Oliver Hunt <oliver (a] apple.com> 31768 31769 Reviewed by Geoff Garen. 31770 31771 Improve performance of CTI on windows. 31772 31773 Currently on platforms where the compiler doesn't allow us to safely 31774 index relative to the address of a parameter we need to actually 31775 provide a pointer to CTI runtime call arguments. This patch improves 31776 performance in this case by making the CTI logic for restoring this 31777 parameter much less conservative by only resetting it before we actually 31778 make a call, rather than between each and every SF bytecode we generate 31779 code for. 31780 31781 This results in a 3.6% progression on the v8 benchmark when compiled with MSVC. 31782 31783 * VM/CTI.cpp: 31784 (JSC::CTI::emitCall): 31785 (JSC::CTI::compileOpCall): 31786 (JSC::CTI::privateCompileMainPass): 31787 (JSC::CTI::privateCompileSlowCases): 31788 (JSC::CTI::privateCompilePutByIdTransition): 31789 * VM/CTI.h: 31790 * masm/X86Assembler.h: 31791 * wtf/Platform.h: 31792 31793 2008-09-30 Maciej Stachowiak <mjs (a] apple.com> 31794 31795 Reviewed by Oliver Hunt. 31796 31797 - track uses of "this", "with" and "catch" in the parser 31798 31799 Knowing this up front will be useful for future optimizations. 31800 31801 Perf and correctness remain the same. 31802 31803 * kjs/NodeInfo.h: 31804 * kjs/grammar.y: 31805 31806 2008-09-30 Sam Weinig <sam (a] webkit.org> 31807 31808 Reviewed by Mark Rowe. 31809 31810 Add WebKitAvailability macros for JSObjectMakeArray, JSObjectMakeDate, JSObjectMakeError, 31811 and JSObjectMakeRegExp 31812 31813 * API/JSObjectRef.h: 31814 31815 2008-09-30 Darin Adler <darin (a] apple.com> 31816 31817 Reviewed by Geoff Garen. 31818 31819 - https://bugs.webkit.org/show_bug.cgi?id=21214 31820 work on getting rid of ExecState 31821 31822 Replaced the m_prev field of ExecState with a bit in the 31823 call frame pointer to indicate "host" call frames. 31824 31825 * VM/Machine.cpp: 31826 (JSC::makeHostCallFramePointer): Added. Sets low bit. 31827 (JSC::isHostCallFrame): Added. Checks low bit. 31828 (JSC::stripHostCallFrameBit): Added. Clears low bit. 31829 (JSC::Machine::unwindCallFrame): Replaced null check that was 31830 formerly used to detect host call frames with an isHostCallFrame check. 31831 (JSC::Machine::execute): Pass in a host call frame pointer rather than 31832 always passing 0 when starting execution from the host. This allows us 31833 to follow the entire call frame pointer chain when desired, or to stop 31834 at the host calls when that's desired. 31835 (JSC::Machine::privateExecute): Replaced null check that was 31836 formerly used to detect host call frames with an isHostCallFrame check. 31837 (JSC::Machine::retrieveCaller): Ditto. 31838 (JSC::Machine::retrieveLastCaller): Ditto. 31839 (JSC::Machine::callFrame): Removed the code to walk up m_prev pointers 31840 and replaced it with code that uses the caller pointer and uses the 31841 stripHostCallFrameBit function. 31842 31843 * kjs/ExecState.cpp: Removed m_prev. 31844 * kjs/ExecState.h: Ditto. 31845 31846 2008-09-30 Cameron Zwarich <zwarich (a] apple.com> 31847 31848 Reviewed by Geoff Garen. 31849 31850 Move all detection of 'arguments' in a lexical scope to the parser, in 31851 preparation for fixing 31852 31853 Bug 21123: using "arguments" in a function should not force creation of an activation object 31854 <https://bugs.webkit.org/show_bug.cgi?id=21123> 31855 31856 * VM/CodeGenerator.cpp: 31857 (JSC::CodeGenerator::CodeGenerator): 31858 * kjs/NodeInfo.h: 31859 * kjs/grammar.y: 31860 31861 2008-09-30 Geoffrey Garen <ggaren (a] apple.com> 31862 31863 Not reviewed. 31864 31865 * kjs/Shell.cpp: 31866 (runWithScripts): Fixed indentation. 31867 31868 2008-09-30 Mark Rowe <mrowe (a] apple.com> 31869 31870 Rubber-stamped by Sam Weinig. 31871 31872 Build fix. Move InternalFunction::classInfo implementation into the .cpp 31873 file to prevent the vtable for InternalFunction being generated as a weak symbol. 31874 Has no effect on SunSpider. 31875 31876 * kjs/InternalFunction.cpp: 31877 (JSC::InternalFunction::classInfo): 31878 * kjs/InternalFunction.h: 31879 31880 2008-09-29 Maciej Stachowiak <mjs (a] apple.com> 31881 31882 Reviewed by Darin Adler. 31883 31884 - optimize appending a number to a string 31885 https://bugs.webkit.org/show_bug.cgi?id=21203 31886 31887 It's pretty common in real-world code (and on some of the v8 31888 benchmarks) to append a number to a string, so I made this one of 31889 the fast cases, and also added support to UString to do it 31890 directly without allocating a temporary UString. 31891 31892 ~1% speedup on v8 benchmark. 31893 31894 * VM/Machine.cpp: 31895 (JSC::jsAddSlowCase): Make this NEVER_INLINE because somehow otherwise 31896 the change is a regression. 31897 (JSC::jsAdd): Handle number + string special case. 31898 (JSC::Machine::cti_op_add): Integrate much of the logic of jsAdd to 31899 avoid exception check in the str + str, num + num and str + num cases. 31900 * kjs/ustring.cpp: 31901 (JSC::expandedSize): Make this a non-member function, since it needs to be 31902 called in non-member functions but not outside this file. 31903 (JSC::expandCapacity): Ditto. 31904 (JSC::UString::expandCapacity): Call the non-member version. 31905 (JSC::createRep): Helper to make a rep from a char*. 31906 (JSC::UString::UString): Use above helper. 31907 (JSC::concatenate): Guts of concatenating constructor for cases where first 31908 item is a UString::Rep, and second is a UChar* and length, or a char*. 31909 (JSC::UString::append): Implement for cases where first item is a UString::Rep, 31910 and second is an int or double. Sadly duplicates logic of UString::from(int) 31911 and UString::from(double). 31912 * kjs/ustring.h: 31913 31914 2008-09-29 Darin Adler <darin (a] apple.com> 31915 31916 Reviewed by Sam Weinig. 31917 31918 - https://bugs.webkit.org/show_bug.cgi?id=21214 31919 work on getting rid of ExecState 31920 31921 * JavaScriptCore.exp: Updated since JSGlobalObject::init 31922 no longer takes a parameter. 31923 31924 * VM/Machine.cpp: 31925 (JSC::Machine::execute): Removed m_registerFile argument 31926 for ExecState constructors. 31927 31928 * kjs/DebuggerCallFrame.cpp: 31929 (JSC::DebuggerCallFrame::evaluate): Removed globalThisValue 31930 argument for ExecState constructor. 31931 31932 * kjs/ExecState.cpp: 31933 (JSC::ExecState::ExecState): Removed globalThisValue and 31934 registerFile arguments to constructors. 31935 31936 * kjs/ExecState.h: Removed m_globalThisValue and 31937 m_registerFile data members. 31938 31939 * kjs/JSGlobalObject.cpp: 31940 (JSC::JSGlobalObject::init): Removed globalThisValue 31941 argument for ExecState constructor. 31942 31943 * kjs/JSGlobalObject.h: 31944 (JSC::JSGlobalObject::JSGlobalObject): Got rid of parameter 31945 for the init function. 31946 31947 2008-09-29 Geoffrey Garen <ggaren (a] apple.com> 31948 31949 Rubber-stamped by Cameron Zwarich. 31950 31951 Fixed https://bugs.webkit.org/show_bug.cgi?id=21225 31952 Machine::retrieveLastCaller should check for a NULL codeBlock 31953 31954 In order to crash, you would need to call retrieveCaller in a situation 31955 where you had two host call frames in a row in the register file. I 31956 don't know how to make that happen, or if it's even possible, so I don't 31957 have a test case -- but better safe than sorry! 31958 31959 * VM/Machine.cpp: 31960 (JSC::Machine::retrieveLastCaller): 31961 31962 2008-09-29 Geoffrey Garen <ggaren (a] apple.com> 31963 31964 Reviewed by Cameron Zwarich. 31965 31966 Store the callee ScopeChain, not the caller ScopeChain, in the call frame 31967 header. Nix the "scopeChain" local variable and ExecState::m_scopeChain, and 31968 access the callee ScopeChain through the call frame header instead. 31969 31970 Profit: call + return are simpler, because they don't have to update the 31971 "scopeChain" local variable, or ExecState::m_scopeChain. 31972 31973 Because CTI keeps "r" in a register, reading the callee ScopeChain relative 31974 to "r" can be very fast, in any cases we care to optimize. 31975 31976 0% speedup on empty function call benchmark. (5.5% speedup in bytecode.) 31977 0% speedup on SunSpider. (7.5% speedup on controlflow-recursive.) 31978 2% speedup on SunSpider --v8. 31979 2% speedup on v8 benchmark. 31980 31981 * VM/CTI.cpp: Changed scope chain access to read the scope chain from 31982 the call frame header. Sped up op_ret by changing it not to fuss with 31983 the "scopeChain" local variable or ExecState::m_scopeChain. 31984 31985 * VM/CTI.h: Updated CTI trampolines not to take a ScopeChainNode* 31986 argument, since that's stored in the call frame header now. 31987 31988 * VM/Machine.cpp: Access "scopeChain" and "codeBlock" through new helper 31989 functions that read from the call frame header. Updated functions operating 31990 on ExecState::m_callFrame to account for / take advantage of the fact that 31991 Exec:m_callFrame is now never NULL. 31992 31993 Fixed a bug in op_construct, where it would use the caller's default 31994 object prototype, rather than the callee's, when constructing a new object. 31995 31996 * VM/Machine.h: Made some helper functions available. Removed 31997 ScopeChainNode* arguments to a lot of functions, since the ScopeChainNode* 31998 is now stored in the call frame header. 31999 32000 * VM/RegisterFile.h: Renamed "CallerScopeChain" to "ScopeChain", since 32001 that's what it is now. 32002 32003 * kjs/DebuggerCallFrame.cpp: Updated for change to ExecState signature. 32004 32005 * kjs/ExecState.cpp: 32006 * kjs/ExecState.h: Nixed ExecState::m_callFrame, along with the unused 32007 isGlobalObject function. 32008 32009 * kjs/JSGlobalObject.cpp: 32010 * kjs/JSGlobalObject.h: Gave the global object a fake call frame in 32011 which to store the global scope chain, since our code now assumes that 32012 it can always read the scope chain out of the ExecState's call frame. 32013 32014 2008-09-29 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 32015 32016 Reviewed by Sam Weinig. 32017 32018 Remove the isActivationObject() virtual method on JSObject and use 32019 StructureID information instead. This should be slightly faster, but 32020 isActivationObject() is only used in assertions and unwinding the stack 32021 for exceptions. 32022 32023 * VM/Machine.cpp: 32024 (JSC::depth): 32025 (JSC::Machine::unwindCallFrame): 32026 (JSC::Machine::privateExecute): 32027 (JSC::Machine::cti_op_ret_activation): 32028 * kjs/JSActivation.cpp: 32029 * kjs/JSActivation.h: 32030 * kjs/JSObject.h: 32031 32032 2008-09-29 Peter Gal <galpeter (a] inf.u-szeged.hu> 32033 32034 Reviewed and tweaked by Darin Adler. 32035 32036 Fix build for non-all-in-one platforms. 32037 32038 * kjs/StringPrototype.cpp: Added missing ASCIICType.h include. 32039 32040 2008-09-29 Bradley T. Hughes <bradley.hughes (a] nokia.com> 32041 32042 Reviewed by Simon Hausmann. 32043 32044 Fix compilation with icpc 32045 32046 * wtf/HashSet.h: 32047 (WTF::::find): 32048 (WTF::::contains): 32049 32050 2008-09-29 Thiago Macieira <thiago.macieira (a] nokia.com> 32051 32052 Reviewed by Simon Hausmann. 32053 32054 Changed copyright from Trolltech ASA to Nokia. 32055 32056 Nokia acquired Trolltech ASA, assets were transferred on September 26th 2008. 32057 32058 32059 * wtf/qt/MainThreadQt.cpp: 32060 32061 2008-09-29 Simon Hausmann <hausmann (a] webkit.org> 32062 32063 Reviewed by Lars Knoll. 32064 32065 Don't accidentially install libJavaScriptCore.a for the build inside 32066 Qt. 32067 32068 * JavaScriptCore.pro: 32069 32070 2008-09-28 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 32071 32072 Reviewed by Maciej Stachowiak. 32073 32074 Bug 21200: Allow direct access to 'arguments' without using op_resolve 32075 <https://bugs.webkit.org/show_bug.cgi?id=21200> 32076 32077 Allow fast access to the 'arguments' object by adding an extra slot to 32078 the callframe to store it. 32079 32080 This is a 3.0% speedup on the V8 Raytrace benchmark. 32081 32082 * JavaScriptCore.exp: 32083 * VM/CTI.cpp: 32084 (JSC::CTI::privateCompileMainPass): 32085 * VM/CodeBlock.cpp: 32086 (JSC::CodeBlock::dump): 32087 * VM/CodeGenerator.cpp: 32088 (JSC::CodeGenerator::CodeGenerator): 32089 (JSC::CodeGenerator::registerFor): 32090 * VM/CodeGenerator.h: 32091 (JSC::CodeGenerator::registerFor): 32092 * VM/Machine.cpp: 32093 (JSC::Machine::initializeCallFrame): 32094 (JSC::Machine::dumpRegisters): 32095 (JSC::Machine::privateExecute): 32096 (JSC::Machine::retrieveArguments): 32097 (JSC::Machine::cti_op_call_JSFunction): 32098 (JSC::Machine::cti_op_create_arguments): 32099 (JSC::Machine::cti_op_construct_JSConstruct): 32100 * VM/Machine.h: 32101 * VM/Opcode.h: 32102 * VM/RegisterFile.h: 32103 (JSC::RegisterFile::): 32104 * kjs/JSActivation.cpp: 32105 (JSC::JSActivation::mark): 32106 (JSC::JSActivation::argumentsGetter): 32107 * kjs/JSActivation.h: 32108 (JSC::JSActivation::JSActivationData::JSActivationData): 32109 * kjs/NodeInfo.h: 32110 * kjs/Parser.cpp: 32111 (JSC::Parser::didFinishParsing): 32112 * kjs/Parser.h: 32113 (JSC::Parser::parse): 32114 * kjs/grammar.y: 32115 * kjs/nodes.cpp: 32116 (JSC::ScopeNode::ScopeNode): 32117 (JSC::ProgramNode::ProgramNode): 32118 (JSC::ProgramNode::create): 32119 (JSC::EvalNode::EvalNode): 32120 (JSC::EvalNode::create): 32121 (JSC::FunctionBodyNode::FunctionBodyNode): 32122 (JSC::FunctionBodyNode::create): 32123 * kjs/nodes.h: 32124 (JSC::ScopeNode::usesArguments): 32125 32126 2008-09-28 Mark Rowe <mrowe (a] apple.com> 32127 32128 Reviewed by Sam Weinig. 32129 32130 Add an ASCII fast-path to toLowerCase and toUpperCase. 32131 32132 The fast path speeds up the common case of an ASCII-only string by up to 60% while adding a less than 5% penalty 32133 to the less common non-ASCII case. 32134 32135 This also removes stringProtoFuncToLocaleLowerCase and stringProtoFuncToLocaleUpperCase, which were identical 32136 to the non-locale variants of the functions. toLocaleLowerCase and toLocaleUpperCase now use the non-locale 32137 variants of the functions directly. 32138 32139 * kjs/StringPrototype.cpp: 32140 (JSC::stringProtoFuncToLowerCase): 32141 (JSC::stringProtoFuncToUpperCase): 32142 32143 2008-09-28 Mark Rowe <mrowe (a] apple.com> 32144 32145 Reviewed by Cameron Zwarich. 32146 32147 Speed up parseInt and parseFloat. 32148 32149 Repeatedly indexing into a UString is slow, so retrieve a pointer into the underlying buffer once up front 32150 and use that instead. This is a 7% win on a parseInt/parseFloat micro-benchmark. 32151 32152 * kjs/JSGlobalObjectFunctions.cpp: 32153 (JSC::parseInt): 32154 (JSC::parseFloat): 32155 32156 2008-09-28 Simon Hausmann <hausmann (a] webkit.org> 32157 32158 Reviewed by David Hyatt. 32159 32160 In Qt's initializeThreading re-use an existing thread identifier for the main 32161 thread if it exists. 32162 32163 currentThread() implicitly creates new identifiers and it could be that 32164 it is called before initializeThreading(). 32165 32166 * wtf/ThreadingQt.cpp: 32167 (WTF::initializeThreading): 32168 32169 2008-09-27 Keishi Hattori <casey.hattori (a] gmail.com> 32170 32171 Added Machine::retrieveCaller to the export list. 32172 32173 Reviewed by Kevin McCullough and Tim Hatcher. 32174 32175 * JavaScriptCore.exp: Added Machine::retrieveCaller. 32176 32177 2008-09-27 Anders Carlsson <andersca (a] apple.com> 32178 32179 Fix build. 32180 32181 * VM/CTI.cpp: 32182 (JSC::): 32183 32184 2008-09-27 Geoffrey Garen <ggaren (a] apple.com> 32185 32186 Reviewed by Cameron Zwarich. 32187 32188 https://bugs.webkit.org/show_bug.cgi?id=21175 32189 32190 Store the callee CodeBlock, not the caller CodeBlock, in the call frame 32191 header. Nix the "codeBlock" local variable, and access the callee 32192 CodeBlock through the call frame header instead. 32193 32194 Profit: call + return are simpler, because they don't have to update the 32195 "codeBlock" local variable. 32196 32197 Because CTI keeps "r" in a register, reading the callee CodeBlock relative 32198 to "r" can be very fast, in any cases we care to optimize. Presently, 32199 no such cases seem important. 32200 32201 Also, stop writing "dst" to the call frame header. CTI doesn't use it. 32202 32203 21.6% speedup on empty function call benchmark. 32204 3.8% speedup on SunSpider --v8. 32205 2.1% speedup on v8 benchmark. 32206 0.7% speedup on SunSpider (6% speedup on controlflow-recursive). 32207 32208 Small regression in bytecode, because currently every op_ret reads the 32209 callee CodeBlock to check needsFullScopeChain, and bytecode does not 32210 keep "r" in a register. On-balance, this is probably OK, since CTI is 32211 our high-performance execution model. Also, this should go away once 32212 we make needsFullScopeChain statically determinable at parse time. 32213 32214 * VM/CTI.cpp: 32215 (JSC::CTI::compileOpCall): The speedup! 32216 (JSC::CTI::privateCompileSlowCases): ditto 32217 32218 * VM/CTI.h: 32219 (JSC::): Fixed up magic trampoline constants to account for the nixed 32220 "codeBlock" argument. 32221 (JSC::CTI::execute): Changed trampoline function not to take a "codeBlock" 32222 argument, since codeBlock is now stored in the call frame header. 32223 32224 * VM/Machine.cpp: Read the callee CodeBlock from the register file. Use 32225 a NULL CallerRegisters in the call frame header to signal a built-in 32226 caller, since CodeBlock is now never NULL. 32227 32228 * VM/Machine.h: Made some stand-alone functions Machine member functions 32229 so they could call the private codeBlock() accessor in the Register 32230 class, of which Machine is a friend. Renamed "CallerCodeBlock" to 32231 "CodeBlock", since it's no longer the caller's CodeBlock. 32232 32233 * VM/RegisterFile.h: Marked some methods const to accommodate a 32234 const RegisterFile* being passed around in Machine.cpp. 32235 32236 2008-09-26 Jan Michael Alonzo <jmalonzo (a] webkit.org> 32237 32238 Gtk build fix. Not reviewed. 32239 32240 Narrow-down the target of the JavaScriptCore .lut.h generator so 32241 it won't try to create the WebCore .lut.hs. 32242 32243 * GNUmakefile.am: 32244 32245 2008-09-26 Matt Lilek <webkit (a] mattlilek.com> 32246 32247 Reviewed by Tim Hatcher. 32248 32249 Update FEATURE_DEFINES after ENABLE_CROSS_DOCUMENT_MESSAGING was removed. 32250 32251 * Configurations/JavaScriptCore.xcconfig: 32252 32253 2008-09-26 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 32254 32255 Rubber-stamped by Anders Carlson. 32256 32257 Change the name 'sc' to 'scopeChainNode' in a few places. 32258 32259 * kjs/nodes.cpp: 32260 (JSC::EvalNode::generateCode): 32261 (JSC::FunctionBodyNode::generateCode): 32262 (JSC::ProgramNode::generateCode): 32263 32264 2008-09-26 Sam Weinig <sam (a] webkit.org> 32265 32266 Reviewed by Darin Adler. 32267 32268 Patch for https://bugs.webkit.org/show_bug.cgi?id=21152 32269 Speedup static property get/put 32270 32271 Convert getting/setting static property values to use static functions 32272 instead of storing an integer and switching in getValueProperty/putValueProperty. 32273 32274 * kjs/JSObject.cpp: 32275 (JSC::JSObject::deleteProperty): 32276 (JSC::JSObject::getPropertyAttributes): 32277 * kjs/MathObject.cpp: 32278 (JSC::MathObject::getOwnPropertySlot): 32279 * kjs/NumberConstructor.cpp: 32280 (JSC::numberConstructorNaNValue): 32281 (JSC::numberConstructorNegInfinity): 32282 (JSC::numberConstructorPosInfinity): 32283 (JSC::numberConstructorMaxValue): 32284 (JSC::numberConstructorMinValue): 32285 * kjs/PropertySlot.h: 32286 (JSC::PropertySlot::): 32287 * kjs/RegExpConstructor.cpp: 32288 (JSC::regExpConstructorDollar1): 32289 (JSC::regExpConstructorDollar2): 32290 (JSC::regExpConstructorDollar3): 32291 (JSC::regExpConstructorDollar4): 32292 (JSC::regExpConstructorDollar5): 32293 (JSC::regExpConstructorDollar6): 32294 (JSC::regExpConstructorDollar7): 32295 (JSC::regExpConstructorDollar8): 32296 (JSC::regExpConstructorDollar9): 32297 (JSC::regExpConstructorInput): 32298 (JSC::regExpConstructorMultiline): 32299 (JSC::regExpConstructorLastMatch): 32300 (JSC::regExpConstructorLastParen): 32301 (JSC::regExpConstructorLeftContext): 32302 (JSC::regExpConstructorRightContext): 32303 (JSC::setRegExpConstructorInput): 32304 (JSC::setRegExpConstructorMultiline): 32305 (JSC::RegExpConstructor::setInput): 32306 (JSC::RegExpConstructor::setMultiline): 32307 (JSC::RegExpConstructor::multiline): 32308 * kjs/RegExpConstructor.h: 32309 * kjs/RegExpObject.cpp: 32310 (JSC::regExpObjectGlobal): 32311 (JSC::regExpObjectIgnoreCase): 32312 (JSC::regExpObjectMultiline): 32313 (JSC::regExpObjectSource): 32314 (JSC::regExpObjectLastIndex): 32315 (JSC::setRegExpObjectLastIndex): 32316 * kjs/RegExpObject.h: 32317 (JSC::RegExpObject::setLastIndex): 32318 (JSC::RegExpObject::lastIndex): 32319 (JSC::RegExpObject::RegExpObjectData::RegExpObjectData): 32320 * kjs/StructureID.cpp: 32321 (JSC::StructureID::getEnumerablePropertyNames): 32322 * kjs/create_hash_table: 32323 * kjs/lexer.cpp: 32324 (JSC::Lexer::lex): 32325 * kjs/lookup.cpp: 32326 (JSC::HashTable::createTable): 32327 (JSC::HashTable::deleteTable): 32328 (JSC::setUpStaticFunctionSlot): 32329 * kjs/lookup.h: 32330 (JSC::HashEntry::initialize): 32331 (JSC::HashEntry::setKey): 32332 (JSC::HashEntry::key): 32333 (JSC::HashEntry::attributes): 32334 (JSC::HashEntry::function): 32335 (JSC::HashEntry::functionLength): 32336 (JSC::HashEntry::propertyGetter): 32337 (JSC::HashEntry::propertyPutter): 32338 (JSC::HashEntry::lexerValue): 32339 (JSC::HashEntry::): 32340 (JSC::HashTable::entry): 32341 (JSC::getStaticPropertySlot): 32342 (JSC::getStaticValueSlot): 32343 (JSC::lookupPut): 32344 32345 2008-09-26 Gavin Barraclough <barraclough (a] apple.com> 32346 32347 Reviewed by Maciej Stachowiak & Oliver Hunt. 32348 32349 Add support for reusing temporary JSNumberCells. This change is based on the observation 32350 that if the result of certain operations is a JSNumberCell and is consumed by a subsequent 32351 operation that would produce a JSNumberCell, we can reuse the object rather than allocating 32352 a fresh one. E.g. given the expression ((a * b) * c), we can statically determine that 32353 (a * b) will have a numeric result (or else it will have thrown an exception), so the result 32354 will either be a JSNumberCell or a JSImmediate. 32355 32356 This patch changes three areas of JSC: 32357 * The AST now tracks type information about the result of each node. 32358 * This information is consumed in bytecode compilation, and certain bytecode operations 32359 now carry the statically determined type information about their operands. 32360 * CTI uses the information in a number of fashions: 32361 * Where an operand to certain arithmetic operations is reusable, it will plant code 32362 to try to perform the operation in JIT code & reuse the cell, where appropriate. 32363 * Where it can be statically determined that an operand can only be numeric (typically 32364 the result of another arithmetic operation) the code will not redundantly check that 32365 the JSCell is a JSNumberCell. 32366 * Where either of the operands to an add are non-numeric do not plant an optimized 32367 arithmetic code path, just call straight out to the C function. 32368 32369 +6% Sunspider (10% progression on 3D, 16% progression on math, 60% progression on access-nbody), 32370 +1% v8-tests (improvements in raytrace & crypto) 32371 32372 * VM/CTI.cpp: Add optimized code generation with reuse of temporary JSNumberCells. 32373 * VM/CTI.h: 32374 * kjs/JSNumberCell.h: 32375 * masm/X86Assembler.h: 32376 32377 * VM/CodeBlock.cpp: Add type information to specific bytecodes. 32378 * VM/CodeGenerator.cpp: 32379 * VM/CodeGenerator.h: 32380 * VM/Machine.cpp: 32381 32382 * kjs/nodes.cpp: Track static type information for nodes. 32383 * kjs/nodes.h: 32384 * kjs/ResultDescriptor.h: (Added) 32385 * JavaScriptCore.xcodeproj/project.pbxproj: 32386 32387 2008-09-26 Yichao Yin <yichao.yin (a] torchmobile.com.cn> 32388 32389 Reviewed by George Staikos, Maciej Stachowiak. 32390 32391 Add utility functions needed for upcoming WML code. 32392 32393 * wtf/ASCIICType.h: 32394 (WTF::isASCIIPrintable): 32395 32396 2008-09-26 Geoffrey Garen <ggaren (a] apple.com> 32397 32398 Reviewed by Darin Adler. 32399 32400 Reverted the part of r36614 that used static data because static data 32401 is not thread-safe. 32402 32403 2008-09-26 Geoffrey Garen <ggaren (a] apple.com> 32404 32405 Reviewed by Maciej Stachowiak. 32406 32407 Removed dynamic check for whether the callee needs an activation object. 32408 Replaced with callee code to create the activation object. 32409 32410 0.5% speedup on SunSpider. 32411 No change on v8 benchmark. (Might be a speedup, but it's in range of the 32412 variance.) 32413 32414 0.7% speedup on v8 benchmark in bytecode. 32415 1.3% speedup on empty call benchmark in bytecode. 32416 32417 * VM/CTI.cpp: 32418 (JSC::CTI::privateCompileMainPass): Added support for op_init_activation, 32419 the new opcode that specifies that the callee's initialization should 32420 create an activation object. 32421 (JSC::CTI::privateCompile): Removed previous code that did a similar 32422 thing in an ad-hoc way. 32423 32424 * VM/CodeBlock.cpp: 32425 (JSC::CodeBlock::dump): Added a case for dumping op_init_activation. 32426 32427 * VM/CodeGenerator.cpp: 32428 (JSC::CodeGenerator::generate): Added fixup code to change op_init to 32429 op_init_activation if necessary. (With a better parser, we would know 32430 which to use from the beginning.) 32431 32432 * VM/Instruction.h: 32433 (JSC::Instruction::Instruction): 32434 (WTF::): Faster traits for the instruction vector. An earlier version 32435 of this patch relied on inserting at the beginning of the vector, and 32436 depended on this change for speed. 32437 32438 * VM/Machine.cpp: 32439 (JSC::Machine::execute): Removed clients of setScopeChain, the old 32440 abstraction for dynamically checking for whether an activation object 32441 needed to be created. 32442 (JSC::Machine::privateExecute): ditto 32443 32444 (JSC::Machine::cti_op_push_activation): Renamed this function from 32445 cti_vm_updateScopeChain, and made it faster by removing the call to 32446 setScopeChain. 32447 * VM/Machine.h: 32448 32449 * VM/Opcode.h: Declared op_init_activation. 32450 32451 2008-09-24 Geoffrey Garen <ggaren (a] apple.com> 32452 32453 Reviewed by Maciej Stachowiak. 32454 32455 Move most of the return code back into the callee, now that the callee 32456 doesn't have to calculate anything dynamically. 32457 32458 11.5% speedup on empty function call benchmark. 32459 32460 SunSpider says 0.3% faster. SunSpider --v8 says no change. 32461 32462 * VM/CTI.cpp: 32463 (JSC::CTI::compileOpCall): 32464 (JSC::CTI::privateCompileMainPass): 32465 (JSC::CTI::privateCompileSlowCases): 32466 32467 2008-09-24 Sam Weinig <sam (a] webkit.org> 32468 32469 Reviewed by Maciej Stachowiak. 32470 32471 Remove staticFunctionGetter. There is only one remaining user of 32472 staticFunctionGetter and it can be converted to use setUpStaticFunctionSlot. 32473 32474 * JavaScriptCore.exp: 32475 * kjs/lookup.cpp: 32476 * kjs/lookup.h: 32477 32478 2008-09-24 Maciej Stachowiak <mjs (a] apple.com> 32479 32480 Reviewed by Oliver Hunt. 32481 32482 - inline JIT fast case of op_neq 32483 - remove extra level of function call indirection from slow cases of eq and neq 32484 32485 1% speedup on Richards 32486 32487 * VM/CTI.cpp: 32488 (JSC::CTI::privateCompileMainPass): 32489 (JSC::CTI::privateCompileSlowCases): 32490 * VM/Machine.cpp: 32491 (JSC::Machine::privateExecute): 32492 (JSC::Machine::cti_op_eq): 32493 (JSC::Machine::cti_op_neq): 32494 * kjs/operations.cpp: 32495 (JSC::equal): 32496 (JSC::equalSlowCase): 32497 * kjs/operations.h: 32498 (JSC::equalSlowCaseInline): 32499 32500 2008-09-24 Sam Weinig <sam (a] webkit.org> 32501 32502 Reviewed by Darin Adler. 32503 32504 Fix for https://bugs.webkit.org/show_bug.cgi?id=21080 32505 <rdar://problem/6243534> 32506 Crash below Function.apply when using a runtime array as the argument list 32507 32508 Test: plugins/bindings-array-apply-crash.html 32509 32510 * kjs/FunctionPrototype.cpp: 32511 (JSC::functionProtoFuncApply): Revert to the slow case if the object inherits from 32512 JSArray (via ClassInfo) but is not a JSArray. 32513 32514 2008-09-24 Kevin McCullough <kmccullough (a] apple.com> 32515 32516 Style change. 32517 32518 * kjs/nodes.cpp: 32519 (JSC::statementListEmitCode): 32520 32521 2008-09-24 Kevin McCullough <kmccullough (a] apple.com> 32522 32523 Reviewed by Geoff. 32524 32525 Bug 21031: Breakpoints in the condition of loops only breaks the first 32526 time 32527 - Now when setting breakpoints in the condition of a loop (for, while, 32528 for in, and do while) will successfully break each time throught the 32529 loop. 32530 - For 'for' loops we need a little more complicated behavior that cannot 32531 be accomplished without some more significant changes: 32532 https://bugs.webkit.org/show_bug.cgi?id=21073 32533 32534 * kjs/nodes.cpp: 32535 (JSC::statementListEmitCode): We don't want to blindly emit a debug hook 32536 at the first line of loops, instead let the loop emit the debug hooks. 32537 (JSC::DoWhileNode::emitCode): 32538 (JSC::WhileNode::emitCode): 32539 (JSC::ForNode::emitCode): 32540 (JSC::ForInNode::emitCode): 32541 * kjs/nodes.h: 32542 (JSC::StatementNode::): 32543 (JSC::DoWhileNode::): 32544 (JSC::WhileNode::): 32545 (JSC::ForInNode::): 32546 32547 2008-09-24 Geoffrey Garen <ggaren (a] apple.com> 32548 32549 Reviewed by Darin Adler. 32550 32551 Fixed <rdar://problem/5605532> Need a SPI for telling JS the size of 32552 the objects it retains 32553 32554 * API/tests/testapi.c: Test the new SPI a little. 32555 32556 * API/JSSPI.cpp: Add the new SPI. 32557 * API/JSSPI.h: Add the new SPI. 32558 * JavaScriptCore.exp: Add the new SPI. 32559 * JavaScriptCore.xcodeproj/project.pbxproj: Add the new SPI. 32560 32561 2008-09-24 Geoffrey Garen <ggaren (a] apple.com> 32562 32563 Reviewed by Darin Adler. 32564 32565 * API/JSBase.h: Filled in some missing function names. 32566 32567 2008-09-24 Geoffrey Garen <ggaren (a] apple.com> 32568 32569 Reviewed by Cameron Zwarich. 32570 32571 Fixed https://bugs.webkit.org/show_bug.cgi?id=21057 32572 Crash in RegisterID::deref() running fast/canvas/canvas-putImageData.html 32573 32574 * VM/CodeGenerator.h: Changed declaration order to ensure the 32575 m_lastConstant, which is a RefPtr that points into m_calleeRegisters, 32576 has its destructor called before the destructor for m_calleeRegisters. 32577 32578 2008-09-24 Darin Adler <darin (a] apple.com> 32579 32580 Reviewed by Sam Weinig. 32581 32582 - https://bugs.webkit.org/show_bug.cgi?id=21047 32583 speed up ret_activation with inlining 32584 32585 About 1% on v8-raytrace. 32586 32587 * JavaScriptCore.exp: Removed JSVariableObject::setRegisters. 32588 32589 * kjs/JSActivation.cpp: Moved copyRegisters to the header to make it inline. 32590 * kjs/JSActivation.h: 32591 (JSC::JSActivation::copyRegisters): Moved here. Also removed the registerArraySize 32592 argument to setRegisters, since the object doesn't need to store the number of 32593 registers. 32594 32595 * kjs/JSGlobalObject.cpp: 32596 (JSC::JSGlobalObject::reset): Removed unnecessary clearing left over from when we 32597 used this on objects that weren't brand new. These days, this function is really 32598 just part of the constructor. 32599 32600 * kjs/JSGlobalObject.h: Added registerArraySize to JSGlobalObjectData, since 32601 JSVariableObjectData no longer needs it. Added a setRegisters override here 32602 that handles storing the size. 32603 32604 * kjs/JSStaticScopeObject.h: Removed code to set registerArraySize, since it 32605 no longer exists. 32606 32607 * kjs/JSVariableObject.cpp: Moved copyRegisterArray and setRegisters to the 32608 header to make them inline. 32609 * kjs/JSVariableObject.h: Removed registerArraySize from JSVariableObjectData, 32610 since it was only used for the global object. 32611 (JSC::JSVariableObject::copyRegisterArray): Moved here ot make it inline. 32612 (JSC::JSVariableObject::setRegisters): Moved here to make it inline. Also 32613 removed the code to set registerArraySize and changed an if statement into 32614 an assert to save an unnnecessary branch. 32615 32616 2008-09-24 Maciej Stachowiak <mjs (a] apple.com> 32617 32618 Reviewed by Oliver Hunt. 32619 32620 - inline PropertyMap::getOffset to speed up polymorphic lookups 32621 32622 ~1.5% speedup on v8 benchmark 32623 no effect on SunSpider 32624 32625 * JavaScriptCore.exp: 32626 * kjs/PropertyMap.cpp: 32627 * kjs/PropertyMap.h: 32628 (JSC::PropertyMap::getOffset): 32629 32630 2008-09-24 Jan Michael Alonzo <jmalonzo (a] webkit.org> 32631 32632 Reviewed by Alp Toker. 32633 32634 https://bugs.webkit.org/show_bug.cgi?id=20992 32635 Build fails on GTK+ Mac OS 32636 32637 * wtf/ThreadingGtk.cpp: Remove platform ifdef as suggested by 32638 Richard Hult. 32639 (WTF::initializeThreading): 32640 32641 2008-09-23 Oliver Hunt <oliver (a] apple.com> 32642 32643 Reviewed by Maciej Stachowiak. 32644 32645 Bug 19968: Slow Script at www.huffingtonpost.com 32646 <https://bugs.webkit.org/show_bug.cgi?id=19968> 32647 32648 Finally found the cause of this accursed issue. It is triggered 32649 by synchronous creation of a new global object from JS. The new 32650 global object resets the timer state in this execution group's 32651 Machine, taking timerCheckCount to 0. Then when JS returns the 32652 timerCheckCount is decremented making it non-zero. The next time 32653 we execute JS we will start the timeout counter, however the non-zero 32654 timeoutCheckCount means we don't reset the timer information. This 32655 means that the timeout check is now checking the cumulative time 32656 since the creation of the global object rather than the time since 32657 JS was last entered. At this point the slow script dialog is guaranteed 32658 to eventually be displayed incorrectly unless a page is loaded 32659 asynchronously (which will reset everything into a sane state). 32660 32661 The fix for this is rather trivial -- the JSGlobalObject constructor 32662 should not be resetting the machine timer state. 32663 32664 * VM/Machine.cpp: 32665 (JSC::Machine::Machine): 32666 Now that we can't rely on the GlobalObject initialising the timeout 32667 state, we do it in the Machine constructor. 32668 32669 * VM/Machine.h: 32670 (JSC::Machine::stopTimeoutCheck): 32671 Add assertions to guard against this happening. 32672 32673 * kjs/JSGlobalObject.cpp: 32674 (JSC::JSGlobalObject::init): 32675 Don't reset the timeout state. 32676 32677 2008-09-23 Geoffrey Garen <ggaren (a] apple.com> 32678 32679 Reviewed by Oliver Hunt. 32680 32681 Fixed https://bugs.webkit.org/show_bug.cgi?id=21038 | <rdar://problem/6240812> 32682 Uncaught exceptions in regex replace callbacks crash webkit 32683 32684 This was a combination of two problems: 32685 32686 (1) the replace function would continue execution after an exception 32687 had been thrown. 32688 32689 (2) In some cases, the Machine would return 0 in the case of an exception, 32690 despite the fact that a few clients dereference the Machine's return 32691 value without first checking for an exception. 32692 32693 * VM/Machine.cpp: 32694 (JSC::Machine::execute): 32695 32696 ^ Return jsNull() instead of 0 in the case of an exception, since some 32697 clients depend on using our return value. 32698 32699 ^ ASSERT that execution does not continue after an exception has been 32700 thrown, to help catch problems like this in the future. 32701 32702 * kjs/StringPrototype.cpp: 32703 (JSC::stringProtoFuncReplace): 32704 32705 ^ Stop execution if an exception has been thrown. 32706 32707 2008-09-23 Geoffrey Garen <ggaren (a] apple.com> 32708 32709 Try to fix the windows build. 32710 32711 * VM/CTI.cpp: 32712 (JSC::CTI::compileOpCall): 32713 (JSC::CTI::privateCompileMainPass): 32714 32715 2008-09-23 Alp Toker <alp (a] nuanti.com> 32716 32717 Build fix. 32718 32719 * VM/CTI.h: 32720 32721 2008-09-23 Geoffrey Garen <ggaren (a] apple.com> 32722 32723 Reviewed by Darin Adler. 32724 32725 * wtf/Platform.h: Removed duplicate #if. 32726 32727 2008-09-23 Geoffrey Garen <ggaren (a] apple.com> 32728 32729 Reviewed by Darin Adler. 32730 32731 Changed the layout of the call frame from 32732 32733 { header, parameters, locals | constants, temporaries } 32734 32735 to 32736 32737 { parameters, header | locals, constants, temporaries } 32738 32739 This simplifies function entry+exit, and enables a number of future 32740 optimizations. 32741 32742 13.5% speedup on empty call benchmark for bytecode; 23.6% speedup on 32743 empty call benchmark for CTI. 32744 32745 SunSpider says no change. SunSpider --v8 says 1% faster. 32746 32747 * VM/CTI.cpp: 32748 32749 Added a bit of abstraction for calculating whether a register is a 32750 constant, since this patch changes that calculation: 32751 (JSC::CTI::isConstant): 32752 (JSC::CTI::getConstant): 32753 (JSC::CTI::emitGetArg): 32754 (JSC::CTI::emitGetPutArg): 32755 (JSC::CTI::getConstantImmediateNumericArg): 32756 32757 Updated for changes to callframe header location: 32758 (JSC::CTI::emitPutToCallFrameHeader): 32759 (JSC::CTI::emitGetFromCallFrameHeader): 32760 (JSC::CTI::printOpcodeOperandTypes): 32761 32762 Renamed to spite Oliver: 32763 (JSC::CTI::emitInitRegister): 32764 32765 Added an abstraction for emitting a call through a register, so that 32766 calls through registers generate exception info, too: 32767 (JSC::CTI::emitCall): 32768 32769 Updated to match the new callframe header layout, and to support calls 32770 through registers, which have no destination address: 32771 (JSC::CTI::compileOpCall): 32772 (JSC::CTI::privateCompileMainPass): 32773 (JSC::CTI::privateCompileSlowCases): 32774 (JSC::CTI::privateCompile): 32775 32776 * VM/CTI.h: 32777 32778 More of the above: 32779 (JSC::CallRecord::CallRecord): 32780 32781 * VM/CodeBlock.cpp: 32782 32783 Updated for new register layout: 32784 (JSC::registerName): 32785 (JSC::CodeBlock::dump): 32786 32787 * VM/CodeBlock.h: 32788 32789 Updated CodeBlock to track slightly different information about the 32790 register frame, and tweaked the style of an ASSERT_NOT_REACHED. 32791 (JSC::CodeBlock::CodeBlock): 32792 (JSC::CodeBlock::getStubInfo): 32793 32794 * VM/CodeGenerator.cpp: 32795 32796 Added some abstraction around constant register allocation, since this 32797 patch changes it, changed codegen to account for the new callframe 32798 layout, and added abstraction around register fetching code 32799 that used to assume that all local registers lived at negative indices, 32800 since vars now live at positive indices: 32801 (JSC::CodeGenerator::generate): 32802 (JSC::CodeGenerator::addVar): 32803 (JSC::CodeGenerator::addGlobalVar): 32804 (JSC::CodeGenerator::allocateConstants): 32805 (JSC::CodeGenerator::CodeGenerator): 32806 (JSC::CodeGenerator::addParameter): 32807 (JSC::CodeGenerator::registerFor): 32808 (JSC::CodeGenerator::constRegisterFor): 32809 (JSC::CodeGenerator::newRegister): 32810 (JSC::CodeGenerator::newTemporary): 32811 (JSC::CodeGenerator::highestUsedRegister): 32812 (JSC::CodeGenerator::addConstant): 32813 32814 ASSERT that our caller referenced the registers it passed to us. 32815 Otherwise, we might overwrite them with parameters: 32816 (JSC::CodeGenerator::emitCall): 32817 (JSC::CodeGenerator::emitConstruct): 32818 32819 * VM/CodeGenerator.h: 32820 32821 Added some abstraction for getting a RegisterID for a given index, 32822 since the rules are a little weird: 32823 (JSC::CodeGenerator::registerFor): 32824 32825 * VM/Machine.cpp: 32826 32827 Utility function to transform a machine return PC to a virtual machine 32828 return VPC, for the sake of stack unwinding, since both PCs are stored 32829 in the same location now: 32830 (JSC::vPCForPC): 32831 32832 Tweaked to account for new call frame: 32833 (JSC::Machine::initializeCallFrame): 32834 32835 Tweaked to account for registerOffset supplied by caller: 32836 (JSC::slideRegisterWindowForCall): 32837 32838 Tweaked to account for new register layout: 32839 (JSC::scopeChainForCall): 32840 (JSC::Machine::callEval): 32841 (JSC::Machine::dumpRegisters): 32842 (JSC::Machine::unwindCallFrame): 32843 (JSC::Machine::execute): 32844 32845 Changed op_call and op_construct to implement the new calling convention: 32846 (JSC::Machine::privateExecute): 32847 32848 Tweaked to account for the new register layout: 32849 (JSC::Machine::retrieveArguments): 32850 (JSC::Machine::retrieveCaller): 32851 (JSC::Machine::retrieveLastCaller): 32852 (JSC::Machine::callFrame): 32853 (JSC::Machine::getArgumentsData): 32854 32855 Changed CTI call helpers to implement the new calling convention: 32856 (JSC::Machine::cti_op_call_JSFunction): 32857 (JSC::Machine::cti_op_call_NotJSFunction): 32858 (JSC::Machine::cti_op_ret_activation): 32859 (JSC::Machine::cti_op_ret_profiler): 32860 (JSC::Machine::cti_op_construct_JSConstruct): 32861 (JSC::Machine::cti_op_construct_NotJSConstruct): 32862 (JSC::Machine::cti_op_call_eval): 32863 32864 * VM/Machine.h: 32865 32866 * VM/Opcode.h: 32867 32868 Renamed op_initialise_locals to op_init, because this opcode 32869 doesn't initialize all locals, and it doesn't initialize only locals. 32870 Also, to spite Oliver. 32871 32872 * VM/RegisterFile.h: 32873 32874 New call frame enumeration values: 32875 (JSC::RegisterFile::): 32876 32877 Simplified the calculation of whether a RegisterID is a temporary, 32878 since we can no longer assume that all positive non-constant registers 32879 are temporaries: 32880 * VM/RegisterID.h: 32881 (JSC::RegisterID::RegisterID): 32882 (JSC::RegisterID::setTemporary): 32883 (JSC::RegisterID::isTemporary): 32884 32885 Renamed firstArgumentIndex to firstParameterIndex because the assumption 32886 that this variable pertained to the actual arguments supplied by the 32887 caller caused me to write some buggy code: 32888 * kjs/Arguments.cpp: 32889 (JSC::ArgumentsData::ArgumentsData): 32890 (JSC::Arguments::Arguments): 32891 (JSC::Arguments::fillArgList): 32892 (JSC::Arguments::getOwnPropertySlot): 32893 (JSC::Arguments::put): 32894 32895 Updated for new call frame layout: 32896 * kjs/DebuggerCallFrame.cpp: 32897 (JSC::DebuggerCallFrame::functionName): 32898 (JSC::DebuggerCallFrame::type): 32899 * kjs/DebuggerCallFrame.h: 32900 32901 Changed the activation object to account for the fact that a call frame 32902 header now sits between parameters and local variables. This change 32903 requires all variable objects to do their own marking, since they 32904 now use their register storage differently: 32905 * kjs/JSActivation.cpp: 32906 (JSC::JSActivation::mark): 32907 (JSC::JSActivation::copyRegisters): 32908 (JSC::JSActivation::createArgumentsObject): 32909 * kjs/JSActivation.h: 32910 32911 Updated global object to use the new interfaces required by the change 32912 to JSActivation above: 32913 * kjs/JSGlobalObject.cpp: 32914 (JSC::JSGlobalObject::reset): 32915 (JSC::JSGlobalObject::mark): 32916 (JSC::JSGlobalObject::copyGlobalsFrom): 32917 (JSC::JSGlobalObject::copyGlobalsTo): 32918 * kjs/JSGlobalObject.h: 32919 (JSC::JSGlobalObject::addStaticGlobals): 32920 32921 Updated static scope object to use the new interfaces required by the 32922 change to JSActivation above: 32923 * kjs/JSStaticScopeObject.cpp: 32924 (JSC::JSStaticScopeObject::mark): 32925 (JSC::JSStaticScopeObject::~JSStaticScopeObject): 32926 * kjs/JSStaticScopeObject.h: 32927 (JSC::JSStaticScopeObject::JSStaticScopeObject): 32928 (JSC::JSStaticScopeObject::d): 32929 32930 Updated variable object to use the new interfaces required by the 32931 change to JSActivation above: 32932 * kjs/JSVariableObject.cpp: 32933 (JSC::JSVariableObject::copyRegisterArray): 32934 (JSC::JSVariableObject::setRegisters): 32935 * kjs/JSVariableObject.h: 32936 32937 Changed the bit twiddling in symbol table not to assume that all indices 32938 are negative, since they can be positive now: 32939 * kjs/SymbolTable.h: 32940 (JSC::SymbolTableEntry::SymbolTableEntry): 32941 (JSC::SymbolTableEntry::isNull): 32942 (JSC::SymbolTableEntry::getIndex): 32943 (JSC::SymbolTableEntry::getAttributes): 32944 (JSC::SymbolTableEntry::setAttributes): 32945 (JSC::SymbolTableEntry::isReadOnly): 32946 (JSC::SymbolTableEntry::pack): 32947 (JSC::SymbolTableEntry::isValidIndex): 32948 32949 Changed call and construct nodes to ref their functions and/or bases, 32950 so that emitCall/emitConstruct doesn't overwrite them with parameters. 32951 Also, updated for rename to registerFor: 32952 * kjs/nodes.cpp: 32953 (JSC::ResolveNode::emitCode): 32954 (JSC::NewExprNode::emitCode): 32955 (JSC::EvalFunctionCallNode::emitCode): 32956 (JSC::FunctionCallValueNode::emitCode): 32957 (JSC::FunctionCallResolveNode::emitCode): 32958 (JSC::FunctionCallBracketNode::emitCode): 32959 (JSC::FunctionCallDotNode::emitCode): 32960 (JSC::PostfixResolveNode::emitCode): 32961 (JSC::DeleteResolveNode::emitCode): 32962 (JSC::TypeOfResolveNode::emitCode): 32963 (JSC::PrefixResolveNode::emitCode): 32964 (JSC::ReadModifyResolveNode::emitCode): 32965 (JSC::AssignResolveNode::emitCode): 32966 (JSC::ConstDeclNode::emitCodeSingle): 32967 (JSC::ForInNode::emitCode): 32968 32969 Added abstraction for getting exception info out of a call through a 32970 register: 32971 * masm/X86Assembler.h: 32972 (JSC::X86Assembler::emitCall): 32973 32974 Removed duplicate #if: 32975 * wtf/Platform.h: 32976 32977 2008-09-23 Kevin McCullough <kmccullough (a] apple.com> 32978 32979 Reviewed by Darin. 32980 32981 Bug 21030: The JS debugger breaks on the do of a do-while not the while 32982 (where the conditional statement is) 32983 https://bugs.webkit.org/show_bug.cgi?id=21030 32984 Now the statementListEmitCode detects if a do-while node is being 32985 emited and emits the debug hook on the last line instead of the first. 32986 32987 This change had no effect on sunspider. 32988 32989 * kjs/nodes.cpp: 32990 (JSC::statementListEmitCode): 32991 * kjs/nodes.h: 32992 (JSC::StatementNode::isDoWhile): 32993 (JSC::DoWhileNode::isDoWhile): 32994 32995 2008-09-23 Maciej Stachowiak <mjs (a] apple.com> 32996 32997 Reviewed by Cameron Zwarich. 32998 32999 - inline the fast case of instanceof 33000 https://bugs.webkit.org/show_bug.cgi?id=20818 33001 33002 ~2% speedup on EarleyBoyer test. 33003 33004 * VM/CTI.cpp: 33005 (JSC::CTI::privateCompileMainPass): 33006 (JSC::CTI::privateCompileSlowCases): 33007 * VM/Machine.cpp: 33008 (JSC::Machine::cti_op_instanceof): 33009 33010 2008-09-23 Maciej Stachowiak <mjs (a] apple.com> 33011 33012 Reviewed by Cameron Zwarich. 33013 33014 - add forgotten slow case logic for !== 33015 33016 * VM/CTI.cpp: 33017 (JSC::CTI::privateCompileSlowCases): 33018 33019 2008-09-23 Maciej Stachowiak <mjs (a] apple.com> 33020 33021 Reviewed by Cameron Zwarich. 33022 33023 - inline the fast cases of !==, same as for === 33024 33025 2.9% speedup on EarleyBoyer benchmark 33026 33027 * VM/CTI.cpp: 33028 (JSC::CTI::compileOpStrictEq): Factored stricteq codegen into this function, 33029 and parameterized so it can do the reverse version as well. 33030 (JSC::CTI::privateCompileMainPass): Use the above for stricteq and nstricteq. 33031 * VM/CTI.h: 33032 (JSC::CTI::): Declare above stuff. 33033 * VM/Machine.cpp: 33034 (JSC::Machine::cti_op_nstricteq): Removed fast cases, now handled inline. 33035 33036 2008-09-23 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 33037 33038 Reviewed by Oliver Hunt. 33039 33040 Bug 20989: Aguments constructor should put 'callee' and 'length' properties in a more efficient way 33041 <https://bugs.webkit.org/show_bug.cgi?id=20989> 33042 33043 Make special cases for the 'callee' and 'length' properties in the 33044 Arguments object. 33045 33046 This is somewhere between a 7.8% speedup and a 10% speedup on the V8 33047 Raytrace benchmark, depending on whether it is run alone or with the 33048 other V8 benchmarks. 33049 33050 * kjs/Arguments.cpp: 33051 (JSC::ArgumentsData::ArgumentsData): 33052 (JSC::Arguments::Arguments): 33053 (JSC::Arguments::mark): 33054 (JSC::Arguments::getOwnPropertySlot): 33055 (JSC::Arguments::put): 33056 (JSC::Arguments::deleteProperty): 33057 33058 2008-09-23 Maciej Stachowiak <mjs (a] apple.com> 33059 33060 Reviewed by Darin. 33061 33062 - speed up instanceof some more 33063 https://bugs.webkit.org/show_bug.cgi?id=20818 33064 33065 ~2% speedup on EarleyBoyer 33066 33067 The idea here is to record in the StructureID whether the class 33068 needs a special hasInstance or if it can use the normal logic from 33069 JSObject. 33070 33071 Based on this I inlined the real work directly into 33072 cti_op_instanceof and put the fastest checks up front and the 33073 error handling at the end (so it should be fairly straightforward 33074 to split off the beginning to be inlined if desired). 33075 33076 I only did this for CTI, not the bytecode interpreter. 33077 33078 * API/JSCallbackObject.h: 33079 (JSC::JSCallbackObject::createStructureID): 33080 * ChangeLog: 33081 * VM/Machine.cpp: 33082 (JSC::Machine::cti_op_instanceof): 33083 * kjs/JSImmediate.h: 33084 (JSC::JSImmediate::isAnyImmediate): 33085 * kjs/TypeInfo.h: 33086 (JSC::TypeInfo::overridesHasInstance): 33087 (JSC::TypeInfo::flags): 33088 33089 2008-09-22 Darin Adler <darin (a] apple.com> 33090 33091 Reviewed by Sam Weinig. 33092 33093 - https://bugs.webkit.org/show_bug.cgi?id=21019 33094 make FunctionBodyNode::ref/deref fast 33095 33096 Speeds up v8-raytrace by 7.2%. 33097 33098 * kjs/nodes.cpp: 33099 (JSC::FunctionBodyNode::FunctionBodyNode): Initialize m_refCount to 0. 33100 * kjs/nodes.h: 33101 (JSC::FunctionBodyNode::ref): Call base class ref once, and thereafter use 33102 m_refCount. 33103 (JSC::FunctionBodyNode::deref): Ditto, but the deref side. 33104 33105 2008-09-22 Darin Adler <darin (a] apple.com> 33106 33107 Pointed out by Sam Weinig. 33108 33109 * kjs/Arguments.cpp: 33110 (JSC::Arguments::fillArgList): Fix bad copy and paste. Oops! 33111 33112 2008-09-22 Darin Adler <darin (a] apple.com> 33113 33114 Reviewed by Cameron Zwarich. 33115 33116 - https://bugs.webkit.org/show_bug.cgi?id=20983 33117 ArgumentsData should have some room to allocate some extra arguments inline 33118 33119 Speeds up v8-raytrace by 5%. 33120 33121 * kjs/Arguments.cpp: 33122 (JSC::ArgumentsData::ArgumentsData): Use a fixed buffer if there are 4 or fewer 33123 extra arguments. 33124 (JSC::Arguments::Arguments): Use a fixed buffer if there are 4 or fewer 33125 extra arguments. 33126 (JSC::Arguments::~Arguments): Delete the buffer if necessary. 33127 (JSC::Arguments::mark): Update since extraArguments are now Register. 33128 (JSC::Arguments::fillArgList): Added special case for the only case that's 33129 actually used in the practice, when there are no parameters. There are some 33130 other special cases in there too, but that's the only one that matters. 33131 (JSC::Arguments::getOwnPropertySlot): Updated to use setValueSlot since there's 33132 no operation to get you at the JSValue* inside a Register as a "slot". 33133 33134 2008-09-22 Sam Weinig <sam (a] webkit.org> 33135 33136 Reviewed by Maciej Stachowiak. 33137 33138 Patch for https://bugs.webkit.org/show_bug.cgi?id=21014 33139 Speed up for..in by using StructureID to avoid calls to hasProperty 33140 33141 Speeds up fasta by 8%. 33142 33143 * VM/JSPropertyNameIterator.cpp: 33144 (JSC::JSPropertyNameIterator::invalidate): 33145 * VM/JSPropertyNameIterator.h: 33146 (JSC::JSPropertyNameIterator::next): 33147 * kjs/PropertyNameArray.h: 33148 (JSC::PropertyNameArrayData::begin): 33149 (JSC::PropertyNameArrayData::end): 33150 (JSC::PropertyNameArrayData::setCachedStructureID): 33151 (JSC::PropertyNameArrayData::cachedStructureID): 33152 * kjs/StructureID.cpp: 33153 (JSC::StructureID::getEnumerablePropertyNames): 33154 (JSC::structureIDChainsAreEqual): 33155 * kjs/StructureID.h: 33156 33157 2008-09-22 Kelvin Sherlock <ksherlock (a] gmail.com> 33158 33159 Updated and tweaked by Sam Weinig. 33160 33161 Reviewed by Geoffrey Garen. 33162 33163 Bug 20020: Proposed enhancement to JavaScriptCore API 33164 <https://bugs.webkit.org/show_bug.cgi?id=20020> 33165 33166 Add JSObjectMakeArray, JSObjectMakeDate, JSObjectMakeError, and JSObjectMakeRegExp 33167 functions to create JavaScript Array, Date, Error, and RegExp objects, respectively. 33168 33169 * API/JSObjectRef.cpp: The functions 33170 * API/JSObjectRef.h: Function prototype and documentation 33171 * JavaScriptCore.exp: Added functions to exported function list 33172 * API/tests/testapi.c: Added basic functionality tests. 33173 33174 * kjs/DateConstructor.cpp: 33175 Replaced static JSObject* constructDate(ExecState* exec, JSObject*, const ArgList& args) 33176 with JSObject* constructDate(ExecState* exec, const ArgList& args). 33177 Added static JSObject* constructWithDateConstructor(ExecState* exec, JSObject*, const ArgList& args) function 33178 33179 * kjs/DateConstructor.h: 33180 added prototype for JSObject* constructDate(ExecState* exec, const ArgList& args) 33181 33182 * kjs/ErrorConstructor.cpp: 33183 removed static qualifier from ErrorInstance* constructError(ExecState* exec, const ArgList& args) 33184 33185 * kjs/ErrorConstructor.h: 33186 added prototype for ErrorInstance* constructError(ExecState* exec, const ArgList& args) 33187 33188 * kjs/RegExpConstructor.cpp: 33189 removed static qualifier from JSObject* constructRegExp(ExecState* exec, const ArgList& args) 33190 33191 * kjs/RegExpConstructor.h: 33192 added prototype for JSObject* constructRegExp(ExecState* exec, const ArgList& args) 33193 33194 2008-09-22 Matt Lilek <webkit (a] mattlilek.com> 33195 33196 Not reviewed, Windows build fix. 33197 33198 * kjs/Arguments.cpp: 33199 * kjs/FunctionPrototype.cpp: 33200 33201 2008-09-22 Sam Weinig <sam (a] webkit.org> 33202 33203 Reviewed by Darin Adler. 33204 33205 Patch for https://bugs.webkit.org/show_bug.cgi?id=20982 33206 Speed up the apply method of functions by special-casing array and 'arguments' objects 33207 33208 1% speedup on v8-raytrace. 33209 33210 Test: fast/js/function-apply.html 33211 33212 * kjs/Arguments.cpp: 33213 (JSC::Arguments::fillArgList): 33214 * kjs/Arguments.h: 33215 * kjs/FunctionPrototype.cpp: 33216 (JSC::functionProtoFuncApply): 33217 * kjs/JSArray.cpp: 33218 (JSC::JSArray::fillArgList): 33219 * kjs/JSArray.h: 33220 33221 2008-09-22 Darin Adler <darin (a] apple.com> 33222 33223 Reviewed by Sam Weinig. 33224 33225 - https://bugs.webkit.org/show_bug.cgi?id=20993 33226 Array.push/pop need optimized cases for JSArray 33227 33228 3% or so speedup on DeltaBlue benchmark. 33229 33230 * kjs/ArrayPrototype.cpp: 33231 (JSC::arrayProtoFuncPop): Call JSArray::pop when appropriate. 33232 (JSC::arrayProtoFuncPush): Call JSArray::push when appropriate. 33233 33234 * kjs/JSArray.cpp: 33235 (JSC::JSArray::putSlowCase): Set m_fastAccessCutoff when appropriate, getting 33236 us into the fast code path. 33237 (JSC::JSArray::pop): Added. 33238 (JSC::JSArray::push): Added. 33239 * kjs/JSArray.h: Added push and pop. 33240 33241 * kjs/operations.cpp: 33242 (JSC::throwOutOfMemoryError): Don't inline this. Helps us avoid PIC branches. 33243 33244 2008-09-22 Maciej Stachowiak <mjs (a] apple.com> 33245 33246 Reviewed by Cameron Zwarich. 33247 33248 - speed up instanceof operator by replacing implementsHasInstance method with a TypeInfo flag 33249 33250 Partial work towards <https://bugs.webkit.org/show_bug.cgi?id=20818> 33251 33252 2.2% speedup on EarleyBoyer benchmark. 33253 33254 * API/JSCallbackConstructor.cpp: 33255 * API/JSCallbackConstructor.h: 33256 (JSC::JSCallbackConstructor::createStructureID): 33257 * API/JSCallbackFunction.cpp: 33258 * API/JSCallbackFunction.h: 33259 (JSC::JSCallbackFunction::createStructureID): 33260 * API/JSCallbackObject.h: 33261 (JSC::JSCallbackObject::createStructureID): 33262 * API/JSCallbackObjectFunctions.h: 33263 (JSC::::hasInstance): 33264 * API/JSValueRef.cpp: 33265 (JSValueIsInstanceOfConstructor): 33266 * JavaScriptCore.exp: 33267 * VM/Machine.cpp: 33268 (JSC::Machine::privateExecute): 33269 (JSC::Machine::cti_op_instanceof): 33270 * kjs/InternalFunction.cpp: 33271 * kjs/InternalFunction.h: 33272 (JSC::InternalFunction::createStructureID): 33273 * kjs/JSObject.cpp: 33274 * kjs/JSObject.h: 33275 * kjs/TypeInfo.h: 33276 (JSC::TypeInfo::implementsHasInstance): 33277 33278 2008-09-22 Maciej Stachowiak <mjs (a] apple.com> 33279 33280 Reviewed by Dave Hyatt. 33281 33282 Based on initial work by Darin Adler. 33283 33284 - replace masqueradesAsUndefined virtual method with a flag in TypeInfo 33285 - use this to JIT inline code for eq_null and neq_null 33286 https://bugs.webkit.org/show_bug.cgi?id=20823 33287 33288 0.5% speedup on SunSpider 33289 ~4% speedup on Richards benchmark 33290 33291 * VM/CTI.cpp: 33292 (JSC::CTI::privateCompileMainPass): 33293 * VM/Machine.cpp: 33294 (JSC::jsTypeStringForValue): 33295 (JSC::jsIsObjectType): 33296 (JSC::Machine::privateExecute): 33297 (JSC::Machine::cti_op_is_undefined): 33298 * VM/Machine.h: 33299 * kjs/JSCell.h: 33300 * kjs/JSValue.h: 33301 * kjs/StringObjectThatMasqueradesAsUndefined.h: 33302 (JSC::StringObjectThatMasqueradesAsUndefined::create): 33303 (JSC::StringObjectThatMasqueradesAsUndefined::createStructureID): 33304 * kjs/StructureID.h: 33305 (JSC::StructureID::mutableTypeInfo): 33306 * kjs/TypeInfo.h: 33307 (JSC::TypeInfo::TypeInfo): 33308 (JSC::TypeInfo::masqueradesAsUndefined): 33309 * kjs/operations.cpp: 33310 (JSC::equal): 33311 * masm/X86Assembler.h: 33312 (JSC::X86Assembler::): 33313 (JSC::X86Assembler::setne_r): 33314 (JSC::X86Assembler::setnz_r): 33315 (JSC::X86Assembler::testl_i32m): 33316 33317 2008-09-22 Tor Arne Vestb <tavestbo (a] trolltech.com> 33318 33319 Reviewed by Simon. 33320 33321 Initialize QCoreApplication in kjs binary/Shell.cpp 33322 33323 This allows us to use QCoreApplication::instance() to 33324 get the main thread in ThreadingQt.cpp 33325 33326 * kjs/Shell.cpp: 33327 (main): 33328 * wtf/ThreadingQt.cpp: 33329 (WTF::initializeThreading): 33330 33331 2008-09-21 Darin Adler <darin (a] apple.com> 33332 33333 - blind attempt to fix non-all-in-one builds 33334 33335 * kjs/JSGlobalObject.cpp: Added includes of Arguments.h and RegExpObject.h. 33336 33337 2008-09-21 Darin Adler <darin (a] apple.com> 33338 33339 - fix debug build 33340 33341 * kjs/StructureID.cpp: 33342 (JSC::StructureID::addPropertyTransition): Use typeInfo().type() instead of m_type. 33343 (JSC::StructureID::createCachedPrototypeChain): Ditto. 33344 33345 2008-09-21 Maciej Stachowiak <mjs (a] apple.com> 33346 33347 Reviewed by Darin Adler. 33348 33349 - introduce a TypeInfo class, for holding per-type (in the C++ class sense) date in StructureID 33350 https://bugs.webkit.org/show_bug.cgi?id=20981 33351 33352 * JavaScriptCore.exp: 33353 * JavaScriptCore.xcodeproj/project.pbxproj: 33354 * VM/CTI.cpp: 33355 (JSC::CTI::privateCompileMainPass): 33356 (JSC::CTI::privateCompilePutByIdTransition): 33357 * VM/Machine.cpp: 33358 (JSC::jsIsObjectType): 33359 (JSC::Machine::Machine): 33360 * kjs/AllInOneFile.cpp: 33361 * kjs/JSCell.h: 33362 (JSC::JSCell::isObject): 33363 (JSC::JSCell::isString): 33364 * kjs/JSGlobalData.cpp: 33365 (JSC::JSGlobalData::JSGlobalData): 33366 * kjs/JSGlobalObject.cpp: 33367 (JSC::JSGlobalObject::reset): 33368 * kjs/JSGlobalObject.h: 33369 (JSC::StructureID::prototypeForLookup): 33370 * kjs/JSNumberCell.h: 33371 (JSC::JSNumberCell::createStructureID): 33372 * kjs/JSObject.cpp: 33373 (JSC::JSObject::createInheritorID): 33374 * kjs/JSObject.h: 33375 (JSC::JSObject::createStructureID): 33376 * kjs/JSString.h: 33377 (JSC::JSString::createStructureID): 33378 * kjs/NativeErrorConstructor.cpp: 33379 (JSC::NativeErrorConstructor::NativeErrorConstructor): 33380 * kjs/RegExpConstructor.cpp: 33381 * kjs/RegExpMatchesArray.h: Added. 33382 (JSC::RegExpMatchesArray::getOwnPropertySlot): 33383 (JSC::RegExpMatchesArray::put): 33384 (JSC::RegExpMatchesArray::deleteProperty): 33385 (JSC::RegExpMatchesArray::getPropertyNames): 33386 * kjs/StructureID.cpp: 33387 (JSC::StructureID::StructureID): 33388 (JSC::StructureID::addPropertyTransition): 33389 (JSC::StructureID::toDictionaryTransition): 33390 (JSC::StructureID::changePrototypeTransition): 33391 (JSC::StructureID::getterSetterTransition): 33392 * kjs/StructureID.h: 33393 (JSC::StructureID::create): 33394 (JSC::StructureID::typeInfo): 33395 * kjs/TypeInfo.h: Added. 33396 (JSC::TypeInfo::TypeInfo): 33397 (JSC::TypeInfo::type): 33398 33399 2008-09-21 Darin Adler <darin (a] apple.com> 33400 33401 Reviewed by Cameron Zwarich. 33402 33403 - fix crash logging into Gmail due to recent Arguments change 33404 33405 * kjs/Arguments.cpp: 33406 (JSC::Arguments::Arguments): Fix window where mark() function could 33407 see d->extraArguments with uninitialized contents. 33408 (JSC::Arguments::mark): Check d->extraArguments for 0 to handle two 33409 cases: 1) Inside the constructor before it's initialized. 33410 2) numArguments <= numParameters. 33411 33412 2008-09-21 Darin Adler <darin (a] apple.com> 33413 33414 - fix loose end from the "duplicate constant values" patch 33415 33416 * VM/CodeGenerator.cpp: 33417 (JSC::CodeGenerator::emitLoad): Add a special case for values the 33418 hash table can't handle. 33419 33420 2008-09-21 Mark Rowe <mrowe (a] apple.com> 33421 33422 Fix the non-AllInOneFile build. 33423 33424 * kjs/Arguments.cpp: Add missing #include. 33425 33426 2008-09-21 Darin Adler <darin (a] apple.com> 33427 33428 Reviewed by Cameron Zwarich and Mark Rowe. 33429 33430 - fix test failure caused by my recent IndexToNameMap patch 33431 33432 * kjs/Arguments.cpp: 33433 (JSC::Arguments::deleteProperty): Added the accidentally-omitted 33434 check of the boolean result from toArrayIndex. 33435 33436 2008-09-21 Darin Adler <darin (a] apple.com> 33437 33438 Reviewed by Maciej Stachowiak. 33439 33440 - https://bugs.webkit.org/show_bug.cgi?id=20975 33441 inline immediate-number case of == 33442 33443 * VM/CTI.h: Renamed emitJumpSlowCaseIfNotImm to 33444 emitJumpSlowCaseIfNotImmNum, since the old name was incorrect. 33445 33446 * VM/CTI.cpp: Updated for new name. 33447 (JSC::CTI::privateCompileMainPass): Added op_eq. 33448 (JSC::CTI::privateCompileSlowCases): Added op_eq. 33449 33450 * VM/Machine.cpp: 33451 (JSC::Machine::cti_op_eq): Removed fast case, since it's now 33452 compiled. 33453 33454 2008-09-21 Peter Gal <galpter (a] inf.u-szeged.hu> 33455 33456 Reviewed by Tim Hatcher and Eric Seidel. 33457 33458 Fix the QT/Linux JavaScriptCore segmentation fault. 33459 https://bugs.webkit.org/show_bug.cgi?id=20914 33460 33461 * wtf/ThreadingQt.cpp: 33462 (WTF::initializeThreading): Use currentThread() if 33463 platform is not a MAC (like in pre 36541 revisions) 33464 33465 2008-09-21 Darin Adler <darin (a] apple.com> 33466 33467 Reviewed by Sam Weinig. 33468 33469 * kjs/debugger.h: Removed some unneeded includes and declarations. 33470 33471 2008-09-21 Darin Adler <darin (a] apple.com> 33472 33473 Reviewed by Sam Weinig. 33474 33475 - https://bugs.webkit.org/show_bug.cgi?id=20972 33476 speed up Arguments further by eliminating the IndexToNameMap 33477 33478 No change on SunSpider. 1.29x as fast on V8 Raytrace. 33479 33480 * kjs/Arguments.cpp: Moved ArgumentsData in here. Eliminated the 33481 indexToNameMap and hadDeletes data members. Changed extraArguments into 33482 an OwnArrayPtr and added deletedArguments, another OwnArrayPtr. 33483 Replaced numExtraArguments with numParameters, since that's what's 33484 used more directly in hot code paths. 33485 (JSC::Arguments::Arguments): Pass in argument count instead of ArgList. 33486 Initialize ArgumentsData the new way. 33487 (JSC::Arguments::mark): Updated. 33488 (JSC::Arguments::getOwnPropertySlot): Overload for the integer form so 33489 we don't have to convert integers to identifiers just to get an argument. 33490 Integrated the deleted case with the fast case. 33491 (JSC::Arguments::put): Ditto. 33492 (JSC::Arguments::deleteProperty): Ditto. 33493 33494 * kjs/Arguments.h: Minimized includes. Made everything private. Added 33495 overloads for the integral property name case. Eliminated mappedIndexSetter. 33496 Moved ArgumentsData into the .cpp file. 33497 33498 * kjs/IndexToNameMap.cpp: Emptied out and prepared for deletion. 33499 * kjs/IndexToNameMap.h: Ditto. 33500 33501 * kjs/JSActivation.cpp: 33502 (JSC::JSActivation::createArgumentsObject): Elminated ArgList. 33503 33504 * GNUmakefile.am: 33505 * JavaScriptCore.pri: 33506 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 33507 * JavaScriptCore.xcodeproj/project.pbxproj: 33508 * JavaScriptCoreSources.bkl: 33509 * kjs/AllInOneFile.cpp: 33510 Removed IndexToNameMap. 33511 33512 2008-09-21 Darin Adler <darin (a] apple.com> 33513 33514 * VM/CodeGenerator.cpp: 33515 (JSC::CodeGenerator::emitLoad): One more tweak: Wrote this in a slightly 33516 clearer style. 33517 33518 2008-09-21 Judit Jasz <jasy (a] inf.u-szeged.hu> 33519 33520 Reviewed and tweaked by Darin Adler. 33521 33522 - https://bugs.webkit.org/show_bug.cgi?id=20645 33523 Elminate duplicate constant values in CodeBlocks. 33524 33525 Seems to be a wash on SunSpider. 33526 33527 * VM/CodeGenerator.cpp: 33528 (JSC::CodeGenerator::emitLoad): Use m_numberMap and m_stringMap to guarantee 33529 we emit the same JSValue* for identical numbers and strings. 33530 * VM/CodeGenerator.h: Added overload of emitLoad for const Identifier&. 33531 Add NumberMap and IdentifierStringMap types and m_numberMap and m_stringMap. 33532 * kjs/nodes.cpp: 33533 (JSC::StringNode::emitCode): Call the new emitLoad and let it do the 33534 JSString creation. 33535 33536 2008-09-21 Paul Pedriana <webkit (a] pedriana.com> 33537 33538 Reviewed and tweaked by Darin Adler. 33539 33540 - https://bugs.webkit.org/show_bug.cgi?id=16925 33541 Fixed lack of Vector buffer alignment for both GCC and MSVC. 33542 Since there's no portable way to do this, for now we don't support 33543 other compilers. 33544 33545 * wtf/Vector.h: Added WTF_ALIGH_ON, WTF_ALIGNED, AlignedBufferChar, and AlignedBuffer. 33546 Use AlignedBuffer insteadof an array of char in VectorBuffer. 33547 33548 2008-09-21 Gabor Loki <loki (a] inf.u-szeged.hu> 33549 33550 Reviewed by Darin Adler. 33551 33552 - https://bugs.webkit.org/show_bug.cgi?id=19408 33553 Add lightweight constant folding to the parser for *, /, + (only for numbers), <<, >>, ~ operators. 33554 33555 1.008x as fast on SunSpider. 33556 33557 * kjs/grammar.y: 33558 (makeNegateNode): Fold if expression is a number > 0. 33559 (makeBitwiseNotNode): Fold if expression is a number. 33560 (makeMultNode): Fold if expressions are both numbers. 33561 (makeDivNode): Fold if expressions are both numbers. 33562 (makeAddNode): Fold if expressions are both numbers. 33563 (makeLeftShiftNode): Fold if expressions are both numbers. 33564 (makeRightShiftNode): Fold if expressions are both numbers. 33565 33566 2008-09-21 Maciej Stachowiak <mjs (a] apple.com> 33567 33568 Reviewed by Oliver. 33569 33570 - speed up === operator by generating inline machine code for the fast paths 33571 https://bugs.webkit.org/show_bug.cgi?id=20820 33572 33573 * VM/CTI.cpp: 33574 (JSC::CTI::emitJumpSlowCaseIfNotImmediateNumber): 33575 (JSC::CTI::emitJumpSlowCaseIfNotImmediateNumbers): 33576 (JSC::CTI::emitJumpSlowCaseIfNotImmediates): 33577 (JSC::CTI::emitTagAsBoolImmediate): 33578 (JSC::CTI::privateCompileMainPass): 33579 (JSC::CTI::privateCompileSlowCases): 33580 * VM/CTI.h: 33581 * VM/Machine.cpp: 33582 (JSC::Machine::cti_op_stricteq): 33583 * masm/X86Assembler.h: 33584 (JSC::X86Assembler::): 33585 (JSC::X86Assembler::sete_r): 33586 (JSC::X86Assembler::setz_r): 33587 (JSC::X86Assembler::movzbl_rr): 33588 (JSC::X86Assembler::emitUnlinkedJnz): 33589 33590 2008-09-21 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 33591 33592 Reviewed by Maciej Stachowiak. 33593 33594 Free memory allocated for extra arguments in the destructor of the 33595 Arguments object. 33596 33597 * kjs/Arguments.cpp: 33598 (JSC::Arguments::~Arguments): 33599 * kjs/Arguments.h: 33600 33601 2008-09-21 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 33602 33603 Reviewed by Maciej Stachowiak. 33604 33605 Bug 20815: 'arguments' object creation is non-optimal 33606 <https://bugs.webkit.org/show_bug.cgi?id=20815> 33607 33608 Fix our inefficient way of creating the arguments object by only 33609 creating named properties for each of the arguments after a use of the 33610 'delete' statement. This patch also speeds up access to the 'arguments' 33611 object slightly, but it still does not use the array fast path for 33612 indexed access that exists for many opcodes. 33613 33614 This is about a 20% improvement on the V8 Raytrace benchmark, and a 1.5% 33615 improvement on the Earley-Boyer benchmark, which gives a 4% improvement 33616 overall. 33617 33618 * kjs/Arguments.cpp: 33619 (JSC::Arguments::Arguments): 33620 (JSC::Arguments::mark): 33621 (JSC::Arguments::getOwnPropertySlot): 33622 (JSC::Arguments::put): 33623 (JSC::Arguments::deleteProperty): 33624 * kjs/Arguments.h: 33625 (JSC::Arguments::ArgumentsData::ArgumentsData): 33626 * kjs/IndexToNameMap.h: 33627 (JSC::IndexToNameMap::size): 33628 * kjs/JSActivation.cpp: 33629 (JSC::JSActivation::createArgumentsObject): 33630 * kjs/JSActivation.h: 33631 (JSC::JSActivation::uncheckedSymbolTableGet): 33632 (JSC::JSActivation::uncheckedSymbolTableGetValue): 33633 (JSC::JSActivation::uncheckedSymbolTablePut): 33634 * kjs/JSFunction.h: 33635 (JSC::JSFunction::numParameters): 33636 33637 2008-09-20 Darin Adler <darin (a] apple.com> 33638 33639 Reviewed by Mark Rowe. 33640 33641 - fix crash seen on buildbot 33642 33643 * kjs/JSGlobalObject.cpp: 33644 (JSC::JSGlobalObject::mark): Add back mark of arrayPrototype, 33645 deleted by accident in my recent check-in. 33646 33647 2008-09-20 Maciej Stachowiak <mjs (a] apple.com> 33648 33649 Not reviewed, build fix. 33650 33651 - speculative fix for non-AllInOne builds 33652 33653 * kjs/operations.h: 33654 33655 2008-09-20 Maciej Stachowiak <mjs (a] apple.com> 33656 33657 Reviewed by Darin Adler. 33658 33659 - assorted optimizations to === and !== operators 33660 (work towards <https://bugs.webkit.org/show_bug.cgi?id=20820>) 33661 33662 2.5% speedup on earley-boyer test 33663 33664 * VM/Machine.cpp: 33665 (JSC::Machine::cti_op_stricteq): Use inline version of 33666 strictEqualSlowCase; remove unneeded exception check. 33667 (JSC::Machine::cti_op_nstricteq): ditto 33668 * kjs/operations.cpp: 33669 (JSC::strictEqual): Use strictEqualSlowCaseInline 33670 (JSC::strictEqualSlowCase): ditto 33671 * kjs/operations.h: 33672 (JSC::strictEqualSlowCaseInline): Version of strictEqualSlowCase that can be inlined, 33673 since the extra function call indirection is a lose for CTI. 33674 33675 2008-09-20 Darin Adler <darin (a] apple.com> 33676 33677 Reviewed by Maciej Stachowiak. 33678 33679 - finish https://bugs.webkit.org/show_bug.cgi?id=20858 33680 make each distinct C++ class get a distinct JSC::Structure 33681 33682 This also includes some optimizations that make the change an overall 33683 small speedup. Without those it was a bit of a slowdown. 33684 33685 * API/JSCallbackConstructor.cpp: 33686 (JSC::JSCallbackConstructor::JSCallbackConstructor): Take a structure. 33687 * API/JSCallbackConstructor.h: Ditto. 33688 * API/JSCallbackFunction.cpp: 33689 (JSC::JSCallbackFunction::JSCallbackFunction): Pass a structure. 33690 * API/JSCallbackObject.h: Take a structure. 33691 * API/JSCallbackObjectFunctions.h: 33692 (JSC::JSCallbackObject::JSCallbackObject): Ditto. 33693 33694 * API/JSClassRef.cpp: 33695 (OpaqueJSClass::prototype): Pass in a structure. Call setPrototype 33696 if there's a custom prototype involved. 33697 * API/JSObjectRef.cpp: 33698 (JSObjectMake): Ditto. 33699 (JSObjectMakeConstructor): Pass in a structure. 33700 33701 * JavaScriptCore.exp: Updated. 33702 33703 * VM/Machine.cpp: 33704 (JSC::jsLess): Added a special case for when both arguments are strings. 33705 This avoids converting both strings to with UString::toDouble. 33706 (JSC::jsLessEq): Ditto. 33707 (JSC::Machine::privateExecute): Pass in a structure. 33708 (JSC::Machine::cti_op_construct_JSConstruct): Ditto. 33709 (JSC::Machine::cti_op_new_regexp): Ditto. 33710 (JSC::Machine::cti_op_is_string): Ditto. 33711 * VM/Machine.h: Made isJSString public so it can be used in the CTI. 33712 33713 * kjs/Arguments.cpp: 33714 (JSC::Arguments::Arguments): Pass in a structure. 33715 33716 * kjs/JSCell.h: Mark constructor explicit. 33717 33718 * kjs/JSGlobalObject.cpp: 33719 (JSC::markIfNeeded): Added an overload for marking structures. 33720 (JSC::JSGlobalObject::reset): Eliminate code to set data members to 33721 zero. We now do that in the constructor, and we no longer use this 33722 anywhere except in the constructor. Added code to create structures. 33723 Pass structures rather than prototypes when creating objects. 33724 (JSC::JSGlobalObject::mark): Mark the structures. 33725 33726 * kjs/JSGlobalObject.h: Removed unneeded class declarations. 33727 Added initializers for raw pointers in JSGlobalObjectData so 33728 everything starts with a 0. Added structure data and accessor 33729 functions. 33730 33731 * kjs/JSImmediate.cpp: 33732 (JSC::JSImmediate::nonInlineNaN): Added. 33733 * kjs/JSImmediate.h: 33734 (JSC::JSImmediate::toDouble): Rewrote to avoid PIC branches. 33735 33736 * kjs/JSNumberCell.cpp: 33737 (JSC::jsNumberCell): Made non-inline to avoid PIC branches 33738 in functions that call this one. 33739 (JSC::jsNaN): Ditto. 33740 * kjs/JSNumberCell.h: Ditto. 33741 33742 * kjs/JSObject.h: Removed constructor that takes a prototype. 33743 All callers now pass structures. 33744 33745 * kjs/ArrayConstructor.cpp: 33746 (JSC::ArrayConstructor::ArrayConstructor): 33747 (JSC::constructArrayWithSizeQuirk): 33748 * kjs/ArrayConstructor.h: 33749 * kjs/ArrayPrototype.cpp: 33750 (JSC::ArrayPrototype::ArrayPrototype): 33751 * kjs/ArrayPrototype.h: 33752 * kjs/BooleanConstructor.cpp: 33753 (JSC::BooleanConstructor::BooleanConstructor): 33754 (JSC::constructBoolean): 33755 (JSC::constructBooleanFromImmediateBoolean): 33756 * kjs/BooleanConstructor.h: 33757 * kjs/BooleanObject.cpp: 33758 (JSC::BooleanObject::BooleanObject): 33759 * kjs/BooleanObject.h: 33760 * kjs/BooleanPrototype.cpp: 33761 (JSC::BooleanPrototype::BooleanPrototype): 33762 * kjs/BooleanPrototype.h: 33763 * kjs/DateConstructor.cpp: 33764 (JSC::DateConstructor::DateConstructor): 33765 (JSC::constructDate): 33766 * kjs/DateConstructor.h: 33767 * kjs/DateInstance.cpp: 33768 (JSC::DateInstance::DateInstance): 33769 * kjs/DateInstance.h: 33770 * kjs/DatePrototype.cpp: 33771 (JSC::DatePrototype::DatePrototype): 33772 * kjs/DatePrototype.h: 33773 * kjs/ErrorConstructor.cpp: 33774 (JSC::ErrorConstructor::ErrorConstructor): 33775 (JSC::constructError): 33776 * kjs/ErrorConstructor.h: 33777 * kjs/ErrorInstance.cpp: 33778 (JSC::ErrorInstance::ErrorInstance): 33779 * kjs/ErrorInstance.h: 33780 * kjs/ErrorPrototype.cpp: 33781 (JSC::ErrorPrototype::ErrorPrototype): 33782 * kjs/ErrorPrototype.h: 33783 * kjs/FunctionConstructor.cpp: 33784 (JSC::FunctionConstructor::FunctionConstructor): 33785 * kjs/FunctionConstructor.h: 33786 * kjs/FunctionPrototype.cpp: 33787 (JSC::FunctionPrototype::FunctionPrototype): 33788 (JSC::FunctionPrototype::addFunctionProperties): 33789 * kjs/FunctionPrototype.h: 33790 * kjs/GlobalEvalFunction.cpp: 33791 (JSC::GlobalEvalFunction::GlobalEvalFunction): 33792 * kjs/GlobalEvalFunction.h: 33793 * kjs/InternalFunction.cpp: 33794 (JSC::InternalFunction::InternalFunction): 33795 * kjs/InternalFunction.h: 33796 (JSC::InternalFunction::InternalFunction): 33797 * kjs/JSArray.cpp: 33798 (JSC::JSArray::JSArray): 33799 (JSC::constructEmptyArray): 33800 (JSC::constructArray): 33801 * kjs/JSArray.h: 33802 * kjs/JSFunction.cpp: 33803 (JSC::JSFunction::JSFunction): 33804 (JSC::JSFunction::construct): 33805 * kjs/JSObject.cpp: 33806 (JSC::constructEmptyObject): 33807 * kjs/JSString.cpp: 33808 (JSC::StringObject::create): 33809 * kjs/JSWrapperObject.h: 33810 * kjs/MathObject.cpp: 33811 (JSC::MathObject::MathObject): 33812 * kjs/MathObject.h: 33813 * kjs/NativeErrorConstructor.cpp: 33814 (JSC::NativeErrorConstructor::NativeErrorConstructor): 33815 (JSC::NativeErrorConstructor::construct): 33816 * kjs/NativeErrorConstructor.h: 33817 * kjs/NativeErrorPrototype.cpp: 33818 (JSC::NativeErrorPrototype::NativeErrorPrototype): 33819 * kjs/NativeErrorPrototype.h: 33820 * kjs/NumberConstructor.cpp: 33821 (JSC::NumberConstructor::NumberConstructor): 33822 (JSC::constructWithNumberConstructor): 33823 * kjs/NumberConstructor.h: 33824 * kjs/NumberObject.cpp: 33825 (JSC::NumberObject::NumberObject): 33826 (JSC::constructNumber): 33827 (JSC::constructNumberFromImmediateNumber): 33828 * kjs/NumberObject.h: 33829 * kjs/NumberPrototype.cpp: 33830 (JSC::NumberPrototype::NumberPrototype): 33831 * kjs/NumberPrototype.h: 33832 * kjs/ObjectConstructor.cpp: 33833 (JSC::ObjectConstructor::ObjectConstructor): 33834 (JSC::constructObject): 33835 * kjs/ObjectConstructor.h: 33836 * kjs/ObjectPrototype.cpp: 33837 (JSC::ObjectPrototype::ObjectPrototype): 33838 * kjs/ObjectPrototype.h: 33839 * kjs/PrototypeFunction.cpp: 33840 (JSC::PrototypeFunction::PrototypeFunction): 33841 * kjs/PrototypeFunction.h: 33842 * kjs/RegExpConstructor.cpp: 33843 (JSC::RegExpConstructor::RegExpConstructor): 33844 (JSC::RegExpMatchesArray::RegExpMatchesArray): 33845 (JSC::constructRegExp): 33846 * kjs/RegExpConstructor.h: 33847 * kjs/RegExpObject.cpp: 33848 (JSC::RegExpObject::RegExpObject): 33849 * kjs/RegExpObject.h: 33850 * kjs/RegExpPrototype.cpp: 33851 (JSC::RegExpPrototype::RegExpPrototype): 33852 * kjs/RegExpPrototype.h: 33853 * kjs/Shell.cpp: 33854 (GlobalObject::GlobalObject): 33855 * kjs/StringConstructor.cpp: 33856 (JSC::StringConstructor::StringConstructor): 33857 (JSC::constructWithStringConstructor): 33858 * kjs/StringConstructor.h: 33859 * kjs/StringObject.cpp: 33860 (JSC::StringObject::StringObject): 33861 * kjs/StringObject.h: 33862 * kjs/StringObjectThatMasqueradesAsUndefined.h: 33863 (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): 33864 * kjs/StringPrototype.cpp: 33865 (JSC::StringPrototype::StringPrototype): 33866 * kjs/StringPrototype.h: 33867 Take and pass structures. 33868 33869 2008-09-19 Alp Toker <alp (a] nuanti.com> 33870 33871 Build fix for the 'gold' linker and recent binutils. New behaviour 33872 requires that we link to used libraries explicitly. 33873 33874 * GNUmakefile.am: 33875 33876 2008-09-19 Sam Weinig <sam (a] webkit.org> 33877 33878 Roll r36694 back in. It did not cause the crash. 33879 33880 * JavaScriptCore.exp: 33881 * VM/JSPropertyNameIterator.cpp: 33882 (JSC::JSPropertyNameIterator::~JSPropertyNameIterator): 33883 (JSC::JSPropertyNameIterator::invalidate): 33884 * VM/JSPropertyNameIterator.h: 33885 (JSC::JSPropertyNameIterator::JSPropertyNameIterator): 33886 (JSC::JSPropertyNameIterator::create): 33887 * kjs/JSObject.cpp: 33888 (JSC::JSObject::getPropertyNames): 33889 * kjs/PropertyMap.cpp: 33890 (JSC::PropertyMap::getEnumerablePropertyNames): 33891 * kjs/PropertyMap.h: 33892 * kjs/PropertyNameArray.cpp: 33893 (JSC::PropertyNameArray::add): 33894 * kjs/PropertyNameArray.h: 33895 (JSC::PropertyNameArrayData::create): 33896 (JSC::PropertyNameArrayData::propertyNameVector): 33897 (JSC::PropertyNameArrayData::setCachedPrototypeChain): 33898 (JSC::PropertyNameArrayData::cachedPrototypeChain): 33899 (JSC::PropertyNameArrayData::begin): 33900 (JSC::PropertyNameArrayData::end): 33901 (JSC::PropertyNameArrayData::PropertyNameArrayData): 33902 (JSC::PropertyNameArray::PropertyNameArray): 33903 (JSC::PropertyNameArray::addKnownUnique): 33904 (JSC::PropertyNameArray::size): 33905 (JSC::PropertyNameArray::operator[]): 33906 (JSC::PropertyNameArray::begin): 33907 (JSC::PropertyNameArray::end): 33908 (JSC::PropertyNameArray::setData): 33909 (JSC::PropertyNameArray::data): 33910 (JSC::PropertyNameArray::releaseData): 33911 * kjs/StructureID.cpp: 33912 (JSC::structureIDChainsAreEqual): 33913 (JSC::StructureID::getEnumerablePropertyNames): 33914 (JSC::StructureID::clearEnumerationCache): 33915 (JSC::StructureID::createCachedPrototypeChain): 33916 * kjs/StructureID.h: 33917 33918 2008-09-19 Sam Weinig <sam (a] webkit.org> 33919 33920 Roll out r36694. 33921 33922 * JavaScriptCore.exp: 33923 * VM/JSPropertyNameIterator.cpp: 33924 (JSC::JSPropertyNameIterator::~JSPropertyNameIterator): 33925 (JSC::JSPropertyNameIterator::invalidate): 33926 * VM/JSPropertyNameIterator.h: 33927 (JSC::JSPropertyNameIterator::JSPropertyNameIterator): 33928 (JSC::JSPropertyNameIterator::create): 33929 * kjs/JSObject.cpp: 33930 (JSC::JSObject::getPropertyNames): 33931 * kjs/PropertyMap.cpp: 33932 (JSC::PropertyMap::getEnumerablePropertyNames): 33933 * kjs/PropertyMap.h: 33934 * kjs/PropertyNameArray.cpp: 33935 (JSC::PropertyNameArray::add): 33936 * kjs/PropertyNameArray.h: 33937 (JSC::PropertyNameArray::PropertyNameArray): 33938 (JSC::PropertyNameArray::addKnownUnique): 33939 (JSC::PropertyNameArray::begin): 33940 (JSC::PropertyNameArray::end): 33941 (JSC::PropertyNameArray::size): 33942 (JSC::PropertyNameArray::operator[]): 33943 (JSC::PropertyNameArray::releaseIdentifiers): 33944 * kjs/StructureID.cpp: 33945 (JSC::StructureID::getEnumerablePropertyNames): 33946 * kjs/StructureID.h: 33947 (JSC::StructureID::clearEnumerationCache): 33948 33949 2008-09-19 Oliver Hunt <oliver (a] apple.com> 33950 33951 Reviewed by Maciej Stachowiak. 33952 33953 Improve peformance of local variable initialisation. 33954 33955 Pull local and constant initialisation out of slideRegisterWindowForCall 33956 and into its own opcode. This allows the JIT to generate the initialisation 33957 code for a function directly into the instruction stream and so avoids a few 33958 branches on function entry. 33959 33960 Results a 1% progression in SunSpider, particularly in a number of the bitop 33961 tests where the called functions are very fast. 33962 33963 * VM/CTI.cpp: 33964 (JSC::CTI::emitInitialiseRegister): 33965 (JSC::CTI::privateCompileMainPass): 33966 * VM/CTI.h: 33967 * VM/CodeBlock.cpp: 33968 (JSC::CodeBlock::dump): 33969 * VM/CodeGenerator.cpp: 33970 (JSC::CodeGenerator::CodeGenerator): 33971 * VM/Machine.cpp: 33972 (JSC::slideRegisterWindowForCall): 33973 (JSC::Machine::privateExecute): 33974 * VM/Opcode.h: 33975 33976 2008-09-19 Sam Weinig <sam (a] webkit.org> 33977 33978 Reviewed by Darin Adler. 33979 33980 Patch for https://bugs.webkit.org/show_bug.cgi?id=20928 33981 Speed up JS property enumeration by caching entire PropertyNameArray 33982 33983 1.3% speedup on Sunspider, 30% on string-fasta. 33984 33985 * JavaScriptCore.exp: 33986 * VM/JSPropertyNameIterator.cpp: 33987 (JSC::JSPropertyNameIterator::~JSPropertyNameIterator): 33988 (JSC::JSPropertyNameIterator::invalidate): 33989 * VM/JSPropertyNameIterator.h: 33990 (JSC::JSPropertyNameIterator::JSPropertyNameIterator): 33991 (JSC::JSPropertyNameIterator::create): 33992 * kjs/JSObject.cpp: 33993 (JSC::JSObject::getPropertyNames): 33994 * kjs/PropertyMap.cpp: 33995 (JSC::PropertyMap::getEnumerablePropertyNames): 33996 * kjs/PropertyMap.h: 33997 * kjs/PropertyNameArray.cpp: 33998 (JSC::PropertyNameArray::add): 33999 * kjs/PropertyNameArray.h: 34000 (JSC::PropertyNameArrayData::create): 34001 (JSC::PropertyNameArrayData::propertyNameVector): 34002 (JSC::PropertyNameArrayData::setCachedPrototypeChain): 34003 (JSC::PropertyNameArrayData::cachedPrototypeChain): 34004 (JSC::PropertyNameArrayData::begin): 34005 (JSC::PropertyNameArrayData::end): 34006 (JSC::PropertyNameArrayData::PropertyNameArrayData): 34007 (JSC::PropertyNameArray::PropertyNameArray): 34008 (JSC::PropertyNameArray::addKnownUnique): 34009 (JSC::PropertyNameArray::size): 34010 (JSC::PropertyNameArray::operator[]): 34011 (JSC::PropertyNameArray::begin): 34012 (JSC::PropertyNameArray::end): 34013 (JSC::PropertyNameArray::setData): 34014 (JSC::PropertyNameArray::data): 34015 (JSC::PropertyNameArray::releaseData): 34016 * kjs/ScopeChain.cpp: 34017 (JSC::ScopeChainNode::print): 34018 * kjs/StructureID.cpp: 34019 (JSC::structureIDChainsAreEqual): 34020 (JSC::StructureID::getEnumerablePropertyNames): 34021 (JSC::StructureID::clearEnumerationCache): 34022 (JSC::StructureID::createCachedPrototypeChain): 34023 * kjs/StructureID.h: 34024 34025 2008-09-19 Holger Hans Peter Freyther <zecke (a] selfish.org> 34026 34027 Reviewed by Maciej Stachowiak. 34028 34029 Fix a mismatched new[]/delete in JSObject::allocatePropertyStorage 34030 34031 * kjs/JSObject.cpp: 34032 (JSC::JSObject::allocatePropertyStorage): Spotted by valgrind. 34033 34034 2008-09-19 Darin Adler <darin (a] apple.com> 34035 34036 Reviewed by Sam Weinig. 34037 34038 - part 2 of https://bugs.webkit.org/show_bug.cgi?id=20858 34039 make each distinct C++ class get a distinct JSC::Structure 34040 34041 * JavaScriptCore.exp: Exported constructEmptyObject for use in WebCore. 34042 34043 * kjs/JSGlobalObject.h: Changed the protected constructor to take a 34044 structure instead of a prototype. 34045 34046 * kjs/JSVariableObject.h: Removed constructor that takes a prototype. 34047 34048 2008-09-19 Julien Chaffraix <jchaffraix (a] pleyo.com> 34049 34050 Reviewed by Alexey Proskuryakov. 34051 34052 Use the template hoisting technique on the RefCounted class. This reduces the code bloat due to 34053 non-template methods' code been copied for each instance of the template. 34054 The patch splits RefCounted between a base class that holds non-template methods and attributes 34055 and the template RefCounted class that keeps the same functionnality. 34056 34057 On my Linux with gcc 4.3 for the Gtk port, this is: 34058 - a ~600KB save on libwebkit.so in release. 34059 - a ~1.6MB save on libwebkit.so in debug. 34060 34061 It is a wash on Sunspider and a small win on Dromaeo (not sure it is relevant). 34062 On the whole, it should be a small win as we reduce the compiled code size and the only 34063 new function call should be inlined by the compiler. 34064 34065 * wtf/RefCounted.h: 34066 (WTF::RefCountedBase::ref): Copied from RefCounted. 34067 (WTF::RefCountedBase::hasOneRef): Ditto. 34068 (WTF::RefCountedBase::refCount): Ditto. 34069 (WTF::RefCountedBase::RefCountedBase): Ditto. 34070 (WTF::RefCountedBase::~RefCountedBase): Ditto. 34071 (WTF::RefCountedBase::derefBase): Tweaked from the RefCounted version to remove 34072 template section. 34073 (WTF::RefCounted::RefCounted): 34074 (WTF::RefCounted::deref): Small wrapper around RefCountedBase::derefBase(). 34075 (WTF::RefCounted::~RefCounted): Keep private destructor. 34076 34077 2008-09-18 Darin Adler <darin (a] apple.com> 34078 34079 Reviewed by Maciej Stachowiak. 34080 34081 - part 1 of https://bugs.webkit.org/show_bug.cgi?id=20858 34082 make each distinct C++ class get a distinct JSC::Structure 34083 34084 * kjs/lookup.h: Removed things here that were used only in WebCore: 34085 cacheGlobalObject, JSC_DEFINE_PROTOTYPE, JSC_DEFINE_PROTOTYPE_WITH_PROTOTYPE, 34086 and JSC_IMPLEMENT_PROTOTYPE. 34087 34088 2008-09-18 Darin Adler <darin (a] apple.com> 34089 34090 Reviewed by Maciej Stachowiak. 34091 34092 - https://bugs.webkit.org/show_bug.cgi?id=20927 34093 simplify/streamline the code to turn strings into identifiers while parsing 34094 34095 * kjs/grammar.y: Get rid of string from the union, and use ident for STRING as 34096 well as for IDENT. 34097 34098 * kjs/lexer.cpp: 34099 (JSC::Lexer::lex): Use makeIdentifier instead of makeUString for String. 34100 * kjs/lexer.h: Remove makeUString. 34101 34102 * kjs/nodes.h: Changed StringNode to hold an Identifier instead of UString. 34103 34104 * VM/CodeGenerator.cpp: 34105 (JSC::keyForCharacterSwitch): Updated since StringNode now holds an Identifier. 34106 (JSC::prepareJumpTableForStringSwitch): Ditto. 34107 * kjs/nodes.cpp: 34108 (JSC::StringNode::emitCode): Ditto. The comment from here is now in the lexer. 34109 (JSC::processClauseList): Ditto. 34110 * kjs/nodes2string.cpp: 34111 (JSC::StringNode::streamTo): Ditto. 34112 34113 2008-09-18 Sam Weinig <sam (a] webkit.org> 34114 34115 Fix style. 34116 34117 * VM/Instruction.h: 34118 (JSC::Instruction::Instruction): 34119 34120 2008-09-18 Oliver Hunt <oliver (a] apple.com> 34121 34122 Reviewed by Maciej Stachowiak. 34123 34124 Bug 20911: REGRESSION(r36480?): Reproducible assertion failure below derefStructureIDs 64-bit JavaScriptCore 34125 <https://bugs.webkit.org/show_bug.cgi?id=20911> 34126 34127 The problem was simply caused by the int constructor for Instruction 34128 failing to initialise the full struct in 64bit builds. 34129 34130 * VM/Instruction.h: 34131 (JSC::Instruction::Instruction): 34132 34133 2008-09-18 Darin Adler <darin (a] apple.com> 34134 34135 - fix release build 34136 34137 * wtf/RefCountedLeakCounter.cpp: Removed stray "static". 34138 34139 2008-09-18 Darin Adler <darin (a] apple.com> 34140 34141 Reviewed by Sam Weinig. 34142 34143 * kjs/JSGlobalObject.h: Tiny style guideline tweak. 34144 34145 2008-09-18 Darin Adler <darin (a] apple.com> 34146 34147 Reviewed by Sam Weinig. 34148 34149 - fix https://bugs.webkit.org/show_bug.cgi?id=20925 34150 LEAK messages appear every time I quit 34151 34152 * JavaScriptCore.exp: Updated, and also added an export 34153 needed for future WebCore use of JSC::StructureID. 34154 34155 * wtf/RefCountedLeakCounter.cpp: 34156 (WTF::RefCountedLeakCounter::suppressMessages): Added. 34157 (WTF::RefCountedLeakCounter::cancelMessageSuppression): Added. 34158 (WTF::RefCountedLeakCounter::RefCountedLeakCounter): Tweaked a bit. 34159 (WTF::RefCountedLeakCounter::~RefCountedLeakCounter): Added code to 34160 log the reason there was no leak checking done. 34161 (WTF::RefCountedLeakCounter::increment): Tweaked a bit. 34162 (WTF::RefCountedLeakCounter::decrement): Ditto. 34163 34164 * wtf/RefCountedLeakCounter.h: Replaced setLogLeakMessages with two 34165 new functions, suppressMessages and cancelMessageSuppression. Also 34166 added m_ prefixes to the data member names. 34167 34168 2008-09-18 Holger Hans Peter Freyther <zecke (a] selfish.org> 34169 34170 Reviewed by Mark Rowe. 34171 34172 https://bugs.webkit.org/show_bug.cgi?id=20437 34173 34174 Add a proper #define to define which XML Parser implementation to use. Client 34175 code can use #if USE(QXMLSTREAM) to decide if the Qt XML StreamReader 34176 implementation is going to be used. 34177 34178 * wtf/Platform.h: 34179 34180 2008-09-18 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 34181 34182 Reviewed by Maciej Stachowiak. 34183 34184 Make a Unicode non-breaking space count as a whitespace character in 34185 PCRE. This change was already made in WREC, and it fixes one of the 34186 Mozilla JS tests. Since it is now fixed in PCRE as well, we can check 34187 in a new set of expected test results. 34188 34189 * pcre/pcre_internal.h: 34190 (isSpaceChar): 34191 * tests/mozilla/expected.html: 34192 34193 2008-09-18 Stephanie Lewis <slewis (a] apple.com> 34194 34195 Reviewed by Mark Rowe and Maciej Stachowiak. 34196 34197 add an option use arch to specify which architecture to run. 34198 34199 * tests/mozilla/jsDriver.pl: 34200 34201 2008-09-17 Oliver Hunt <oliver (a] apple.com> 34202 34203 Correctly restore argument reference prior to SFX runtime calls. 34204 34205 Reviewed by Steve Falkenburg. 34206 34207 * VM/CTI.cpp: 34208 (JSC::CTI::privateCompileSlowCases): 34209 (JSC::CTI::privateCompile): 34210 34211 2008-09-17 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 34212 34213 Reviewed by Maciej Stachowiak. 34214 34215 Bug 20876: REGRESSION (r36417, r36427): fast/js/exception-expression-offset.html fails 34216 <https://bugs.webkit.org/show_bug.cgi?id=20876> 34217 34218 r36417 and r36427 caused an get_by_id opcode to be emitted before the 34219 instanceof and construct opcodes, in order to enable inline caching of 34220 the prototype property. Unfortunately, this regressed some tests dealing 34221 with exceptions thrown by 'instanceof' and the 'new' operator. We fix 34222 these problems by detecting whether an "is not an object" exception is 34223 thrown before op_instanceof or op_construct, and emit the proper 34224 exception in those cases. 34225 34226 * VM/CodeGenerator.cpp: 34227 (JSC::CodeGenerator::emitConstruct): 34228 * VM/CodeGenerator.h: 34229 * VM/ExceptionHelpers.cpp: 34230 (JSC::createInvalidParamError): 34231 (JSC::createNotAConstructorError): 34232 (JSC::createNotAnObjectError): 34233 * VM/ExceptionHelpers.h: 34234 * VM/Machine.cpp: 34235 (JSC::Machine::getOpcode): 34236 (JSC::Machine::privateExecute): 34237 * VM/Machine.h: 34238 * kjs/nodes.cpp: 34239 (JSC::NewExprNode::emitCode): 34240 (JSC::InstanceOfNode::emitCode): 34241 34242 2008-09-17 Gavin Barraclough <barraclough (a] apple.com> 34243 34244 Reviewed by Oliver Hunt. 34245 34246 JIT generation cti_op_construct_verify. 34247 34248 Quarter to half percent progression on v8-tests. 34249 Roughly not change on SunSpider (possible minor progression). 34250 34251 * VM/CTI.cpp: 34252 (JSC::CTI::privateCompileMainPass): 34253 * VM/Machine.cpp: 34254 * VM/Machine.h: 34255 34256 2008-09-15 Steve Falkenburg <sfalken (a] apple.com> 34257 34258 Improve timer accuracy for JavaScript Date object on Windows. 34259 34260 Use a combination of ftime and QueryPerformanceCounter. 34261 ftime returns the information we want, but doesn't have sufficient resolution. 34262 QueryPerformanceCounter has high resolution, but is only usable to measure time intervals. 34263 To combine them, we call ftime and QueryPerformanceCounter initially. Later calls will use 34264 QueryPerformanceCounter by itself, adding the delta to the saved ftime. We re-sync to 34265 correct for drift if the low-res and high-res elapsed time between calls differs by more 34266 than twice the low-resolution timer resolution. 34267 34268 QueryPerformanceCounter may be inaccurate due to a problems with: 34269 - some PCI bridge chipsets (http://support.microsoft.com/kb/274323) 34270 - BIOS bugs (http://support.microsoft.com/kb/895980/) 34271 - BIOS/HAL bugs on multiprocessor/multicore systems (http://msdn.microsoft.com/en-us/library/ms644904.aspx) 34272 34273 Reviewed by Darin Adler. 34274 34275 * kjs/DateMath.cpp: 34276 (JSC::highResUpTime): 34277 (JSC::lowResUTCTime): 34278 (JSC::qpcAvailable): 34279 (JSC::getCurrentUTCTimeWithMicroseconds): 34280 34281 2008-09-17 Gavin Barraclough <barraclough (a] apple.com> 34282 34283 Reviewed by Geoff Garen. 34284 34285 Implement JIT generation of CallFrame initialization, for op_call. 34286 34287 1% sunspider 2.5% v8-tests. 34288 34289 * VM/CTI.cpp: 34290 (JSC::CTI::compileOpCall): 34291 * VM/Machine.cpp: 34292 (JSC::Machine::cti_op_call_JSFunction): 34293 (JSC::Machine::cti_op_call_NotJSFunction): 34294 34295 2008-09-17 Gavin Barraclough <barraclough (a] apple.com> 34296 34297 Reviewed by Geoff Garen. 34298 34299 Optimizations for op_call in CTI. Move check for (ctiCode == 0) into JIT code, 34300 move copying of scopeChain for CodeBlocks that needFullScopeChain into head of 34301 functions, instead of checking prior to making the call. 34302 34303 3% on v8-tests (4% on richards, 6% in delta-blue) 34304 34305 * VM/CTI.cpp: 34306 (JSC::CTI::compileOpCall): 34307 (JSC::CTI::privateCompileSlowCases): 34308 (JSC::CTI::privateCompile): 34309 * VM/Machine.cpp: 34310 (JSC::Machine::execute): 34311 (JSC::Machine::cti_op_call_JSFunction): 34312 (JSC::Machine::cti_vm_compile): 34313 (JSC::Machine::cti_vm_updateScopeChain): 34314 (JSC::Machine::cti_op_construct_JSConstruct): 34315 * VM/Machine.h: 34316 34317 2008-09-17 Tor Arne Vestb <tavestbo (a] trolltech.com> 34318 34319 Fix the QtWebKit/Mac build 34320 34321 * wtf/ThreadingQt.cpp: 34322 (WTF::initializeThreading): use QCoreApplication to get the main thread 34323 34324 2008-09-16 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 34325 34326 Reviewed by Maciej Stachowiak. 34327 34328 Bug 20857: REGRESSION (r36427): ASSERTION FAILED: m_refCount >= 0 in RegisterID::deref() 34329 <https://bugs.webkit.org/show_bug.cgi?id=20857> 34330 34331 Fix a problem stemming from the slightly unsafe behaviour of the 34332 CodeGenerator::finalDestination() method by putting the "func" argument 34333 of the emitConstruct() method in a RefPtr in its caller. Also, add an 34334 assertion guaranteeing that this is always the case. 34335 34336 CodeGenerator::finalDestination() is still incorrect and can cause 34337 problems with a different allocator; see bug 20340 for more details. 34338 34339 * VM/CodeGenerator.cpp: 34340 (JSC::CodeGenerator::emitConstruct): 34341 * kjs/nodes.cpp: 34342 (JSC::NewExprNode::emitCode): 34343 34344 2008-09-16 Alice Liu <alice.liu (a] apple.com> 34345 34346 build fix. 34347 34348 * VM/CTI.cpp: 34349 (JSC::CTI::privateCompileMainPass): 34350 34351 2008-09-16 Gavin Barraclough <barraclough (a] apple.com> 34352 34353 Reviewed by Geoff Garen. 34354 34355 CTI code generation for op_ret. The majority of the work 34356 (updating variables on the stack & on exec) can be performed 34357 directly in generated code. 34358 34359 We still need to check, & to call out to C-code to handle 34360 activation records, profiling, and full scope chains. 34361 34362 +1.5% Sunspider, +5/6% v8 tests. 34363 34364 * VM/CTI.cpp: 34365 (JSC::CTI::emitPutCTIParam): 34366 (JSC::CTI::compileOpCall): 34367 (JSC::CTI::privateCompileMainPass): 34368 * VM/CTI.h: 34369 * VM/Machine.cpp: 34370 (JSC::Machine::cti_op_ret_activation): 34371 (JSC::Machine::cti_op_ret_profiler): 34372 (JSC::Machine::cti_op_ret_scopeChain): 34373 * VM/Machine.h: 34374 34375 2008-09-16 Dimitri Glazkov <dglazkov (a] chromium.org> 34376 34377 Fix the Windows build. 34378 34379 Add some extra parentheses to stop MSVC from complaining so much. 34380 34381 * VM/Machine.cpp: 34382 (JSC::Machine::privateExecute): 34383 (JSC::Machine::cti_op_stricteq): 34384 (JSC::Machine::cti_op_nstricteq): 34385 * kjs/operations.cpp: 34386 (JSC::strictEqual): 34387 34388 2008-09-15 Maciej Stachowiak <mjs (a] apple.com> 34389 34390 Reviewed by Cameron Zwarich. 34391 34392 - speed up the === and !== operators by choosing the fast cases better 34393 34394 No effect on SunSpider but speeds up the V8 EarlyBoyer benchmark about 4%. 34395 34396 * VM/Machine.cpp: 34397 (JSC::Machine::privateExecute): 34398 (JSC::Machine::cti_op_stricteq): 34399 (JSC::Machine::cti_op_nstricteq): 34400 * kjs/JSImmediate.h: 34401 (JSC::JSImmediate::areBothImmediate): 34402 * kjs/operations.cpp: 34403 (JSC::strictEqual): 34404 (JSC::strictEqualSlowCase): 34405 * kjs/operations.h: 34406 34407 2008-09-15 Oliver Hunt <oliver (a] apple.com> 34408 34409 RS=Sam Weinig. 34410 34411 Coding style cleanup. 34412 34413 * VM/Machine.cpp: 34414 (JSC::Machine::privateExecute): 34415 34416 2008-09-15 Oliver Hunt <oliver (a] apple.com> 34417 34418 Reviewed by Cameron Zwarich. 34419 34420 Bug 20874: op_resolve does not do any form of caching 34421 <https://bugs.webkit.org/show_bug.cgi?id=20874> 34422 34423 This patch adds an op_resolve_global opcode to handle (and cache) 34424 property lookup we can statically determine must occur on the global 34425 object (if at all). 34426 34427 3% progression on sunspider, 3.2x improvement to bitops-bitwise-and, and 34428 10% in math-partial-sums 34429 34430 * VM/CTI.cpp: 34431 (JSC::CTI::privateCompileMainPass): 34432 * VM/CTI.h: 34433 * VM/CodeBlock.cpp: 34434 (JSC::CodeBlock::dump): 34435 * VM/CodeGenerator.cpp: 34436 (JSC::CodeGenerator::findScopedProperty): 34437 (JSC::CodeGenerator::emitResolve): 34438 * VM/Machine.cpp: 34439 (JSC::resolveGlobal): 34440 (JSC::Machine::privateExecute): 34441 (JSC::Machine::cti_op_resolve_global): 34442 * VM/Machine.h: 34443 * VM/Opcode.h: 34444 34445 2008-09-15 Sam Weinig <sam (a] webkit.org> 34446 34447 Roll out r36462. It broke document.all. 34448 34449 * VM/CTI.cpp: 34450 (JSC::CTI::privateCompileMainPass): 34451 (JSC::CTI::privateCompileSlowCases): 34452 * VM/CTI.h: 34453 * VM/Machine.cpp: 34454 (JSC::Machine::Machine): 34455 (JSC::Machine::cti_op_eq_null): 34456 (JSC::Machine::cti_op_neq_null): 34457 * VM/Machine.h: 34458 (JSC::Machine::isJSString): 34459 * kjs/JSCell.h: 34460 * kjs/JSWrapperObject.h: 34461 * kjs/StringObject.h: 34462 * kjs/StringObjectThatMasqueradesAsUndefined.h: 34463 34464 2008-09-15 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 34465 34466 Reviewed by Maciej Stachowiak. 34467 34468 Bug 20863: ASSERTION FAILED: addressOffset < instructions.size() in CodeBlock::getHandlerForVPC 34469 <https://bugs.webkit.org/show_bug.cgi?id=20863> 34470 34471 r36427 changed the number of arguments to op_construct without changing 34472 the argument index for the vPC in the call to initializeCallFrame() in 34473 the CTI case. This caused a JSC test failure. Correcting the argument 34474 index fixes the test failure. 34475 34476 * VM/Machine.cpp: 34477 (JSC::Machine::cti_op_construct_JSConstruct): 34478 34479 2008-09-15 Mark Rowe <mrowe (a] apple.com> 34480 34481 Fix GCC 4.2 build. 34482 34483 * VM/CTI.h: 34484 34485 2008-09-15 Geoffrey Garen <ggaren (a] apple.com> 34486 34487 Reviewed by Maciej Stachowiak. 34488 34489 Fixed a typo in op_get_by_id_chain that caused it to miss every time 34490 in the interpreter. 34491 34492 Also, a little cleanup. 34493 34494 * VM/Machine.cpp: 34495 (JSC::Machine::privateExecute): Set up baseObject before entering the 34496 loop, so we compare against the right values. 34497 34498 2008-09-15 Geoffrey Garen <ggaren (a] apple.com> 34499 34500 Reviewed by Sam Weinig. 34501 34502 Removed the CalledAsConstructor flag from the call frame header. Now, 34503 we use an explicit opcode at the call site to fix up constructor results. 34504 34505 SunSpider says 0.4% faster. 34506 34507 cti_op_construct_verify is an out-of-line function call for now, but we 34508 can fix that once StructureID holds type information like isObject. 34509 34510 * VM/CTI.cpp: 34511 (JSC::CTI::privateCompileMainPass): Codegen for the new opcode. 34512 34513 * VM/CodeBlock.cpp: 34514 (JSC::CodeBlock::dump): 34515 34516 * VM/CodeGenerator.cpp: Codegen for the new opcode. Also... 34517 (JSC::CodeGenerator::emitCall): ... don't test for known non-zero value. 34518 (JSC::CodeGenerator::emitConstruct): ... ditto. 34519 34520 * VM/Machine.cpp: No more CalledAsConstructor 34521 (JSC::Machine::privateExecute): Implementation for the new opcode. 34522 (JSC::Machine::cti_op_ret): The speedup: no need to check whether we were 34523 called as a constructor. 34524 (JSC::Machine::cti_op_construct_verify): Implementation for the new opcode. 34525 * VM/Machine.h: 34526 34527 * VM/Opcode.h: Declare new opcode. 34528 34529 * VM/RegisterFile.h: 34530 (JSC::RegisterFile::): No more CalledAsConstructor 34531 34532 2008-09-15 Gavin Barraclough <barraclough (a] apple.com> 34533 34534 Reviewed by Geoff Garen. 34535 34536 Inline code generation of eq_null/neq_null for CTI. Uses vptr checking for 34537 StringObjectsThatAreMasqueradingAsBeingUndefined. In the long run, the 34538 masquerading may be handled differently (through the StructureIDs - see bug 34539 #20823). 34540 34541 >1% on v8-tests. 34542 34543 * VM/CTI.cpp: 34544 (JSC::CTI::emitJumpSlowCaseIfIsJSCell): 34545 (JSC::CTI::privateCompileMainPass): 34546 (JSC::CTI::privateCompileSlowCases): 34547 * VM/CTI.h: 34548 * VM/Machine.cpp: 34549 (JSC::Machine::Machine): 34550 (JSC::Machine::cti_op_eq_null): 34551 (JSC::Machine::cti_op_neq_null): 34552 * VM/Machine.h: 34553 (JSC::Machine::doesMasqueradesAsUndefined): 34554 * kjs/JSWrapperObject.h: 34555 (JSC::JSWrapperObject::): 34556 (JSC::JSWrapperObject::JSWrapperObject): 34557 * kjs/StringObject.h: 34558 (JSC::StringObject::StringObject): 34559 * kjs/StringObjectThatMasqueradesAsUndefined.h: 34560 (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): 34561 34562 2008-09-15 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 34563 34564 Rubber-stamped by Oliver Hunt. 34565 34566 r36427 broke CodeBlock::dump() by changing the number of arguments to 34567 op_construct without changing the code that prints it. This patch fixes 34568 it by printing the additional argument. 34569 34570 * JavaScriptCore.xcodeproj/project.pbxproj: 34571 * VM/CodeBlock.cpp: 34572 (JSC::CodeBlock::dump): 34573 34574 2008-09-15 Adam Roben <aroben (a] apple.com> 34575 34576 Build fix 34577 34578 * kjs/StructureID.cpp: Removed a stray semicolon. 34579 34580 2008-09-15 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 34581 34582 Reviewed by Maciej Stachowiak. 34583 34584 Fix a crash in fast/js/exception-expression-offset.html caused by not 34585 updating all mentions of the length of op_construct in r36427. 34586 34587 * VM/Machine.cpp: 34588 (JSC::Machine::cti_op_construct_NotJSConstruct): 34589 34590 2008-09-15 Maciej Stachowiak <mjs (a] apple.com> 34591 34592 Reviewed by Cameron Zwarich. 34593 34594 - fix layout test failure introduced by fix for 20849 34595 34596 (The failing test was fast/js/delete-then-put.html) 34597 34598 * kjs/JSObject.cpp: 34599 (JSC::JSObject::removeDirect): Clear enumeration cache 34600 in the dictionary case. 34601 * kjs/JSObject.h: 34602 (JSC::JSObject::putDirect): Ditto. 34603 * kjs/StructureID.h: 34604 (JSC::StructureID::clearEnumerationCache): Inline to handle the 34605 clear. 34606 34607 2008-09-15 Maciej Stachowiak <mjs (a] apple.com> 34608 34609 Reviewed by Cameron Zwarich. 34610 34611 - fix JSC test failures introduced by fix for 20849 34612 34613 * kjs/PropertyMap.cpp: 34614 (JSC::PropertyMap::getEnumerablePropertyNames): Use the correct count. 34615 34616 2008-09-15 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 34617 34618 Reviewed by Maciej Stachowiak. 34619 34620 Bug 20851: REGRESSION (r36410): fast/js/kde/GlobalObject.html fails 34621 <https://bugs.webkit.org/show_bug.cgi?id=20851> 34622 34623 r36410 introduced an optimization for parseInt() that is incorrect when 34624 its argument is larger than the range of a 32-bit integer. If the 34625 argument is a number that is not an immediate integer, then the correct 34626 behaviour is to return the floor of its value, unless it is an infinite 34627 value, in which case the correct behaviour is to return 0. 34628 34629 * kjs/JSGlobalObjectFunctions.cpp: 34630 (JSC::globalFuncParseInt): 34631 34632 2008-09-15 Sam Weinig <sam (a] webkit.org> 34633 34634 Reviewed by Maciej Stachowiak. 34635 34636 Patch for https://bugs.webkit.org/show_bug.cgi?id=20849 34637 Cache property names for getEnumerablePropertyNames in the StructureID. 34638 34639 ~0.5% speedup on Sunspider overall (9.7% speedup on string-fasta). ~1% speedup 34640 on the v8 test suite. 34641 34642 * kjs/JSObject.cpp: 34643 (JSC::JSObject::getPropertyNames): 34644 * kjs/PropertyMap.cpp: 34645 (JSC::PropertyMap::getEnumerablePropertyNames): 34646 * kjs/PropertyMap.h: 34647 * kjs/StructureID.cpp: 34648 (JSC::StructureID::StructureID): 34649 (JSC::StructureID::getEnumerablePropertyNames): 34650 * kjs/StructureID.h: 34651 34652 2008-09-14 Maciej Stachowiak <mjs (a] apple.com> 34653 34654 Reviewed by Cameron Zwarich. 34655 34656 - speed up JS construction by extracting "prototype" lookup so PIC applies. 34657 34658 ~0.5% speedup on SunSpider 34659 Speeds up some of the V8 tests as well, most notably earley-boyer. 34660 34661 * VM/CTI.cpp: 34662 (JSC::CTI::compileOpCall): Account for extra arg for prototype. 34663 (JSC::CTI::privateCompileMainPass): Account for increased size of op_construct. 34664 * VM/CodeGenerator.cpp: 34665 (JSC::CodeGenerator::emitConstruct): Emit separate lookup to get prototype property. 34666 * VM/Machine.cpp: 34667 (JSC::Machine::privateExecute): Expect prototype arg in op_construct. 34668 (JSC::Machine::cti_op_construct_JSConstruct): ditto 34669 (JSC::Machine::cti_op_construct_NotJSConstruct): ditto 34670 34671 2008-09-10 Alexey Proskuryakov <ap (a] webkit.org> 34672 34673 Reviewed by Eric Seidel. 34674 34675 Add a protected destructor for RefCounted. 34676 34677 It is wrong to call its destructor directly, because (1) this should be taken care of by 34678 deref(), and (2) many classes that use RefCounted have non-virtual destructors. 34679 34680 No change in behavior. 34681 34682 * wtf/RefCounted.h: (WTF::RefCounted::~RefCounted): 34683 34684 2008-09-14 Gavin Barraclough <barraclough (a] apple.com> 34685 34686 Reviewed by Sam Weinig. 34687 34688 Accelerated property accesses. 34689 34690 Inline more of the array access code into the JIT code for get/put_by_val. 34691 Accelerate get/put_by_id by speculatively inlining a disable direct access 34692 into the hot path of the code, and repatch this with the correct StructureID 34693 and property map offset once these are known. In the case of accesses to the 34694 prototype and reading the array-length a trampoline is genertaed, and the 34695 branch to the slow-case is relinked to jump to this. 34696 34697 By repatching, we mean rewriting the x86 instruction stream. Instructions are 34698 only modified in a simple fasion - altering immediate operands, memory access 34699 deisplacements, and branch offsets. 34700 34701 For regular get_by_id/put_by_id accesses to an object, a StructureID in an 34702 instruction's immediate operant is updateded, and a memory access operation's 34703 displacement is updated to access the correct field on the object. In the case 34704 of more complex accesses (array length and get_by_id_prototype) the offset on 34705 the branch to slow-case is updated, to now jump to a trampoline. 34706 34707 +2.8% sunspider, +13% v8-tests 34708 34709 * VM/CTI.cpp: 34710 (JSC::CTI::emitCall): 34711 (JSC::CTI::emitJumpSlowCaseIfNotJSCell): 34712 (JSC::CTI::CTI): 34713 (JSC::CTI::privateCompileMainPass): 34714 (JSC::CTI::privateCompileSlowCases): 34715 (JSC::CTI::privateCompile): 34716 (JSC::CTI::privateCompileGetByIdSelf): 34717 (JSC::CTI::privateCompileGetByIdProto): 34718 (JSC::CTI::privateCompileGetByIdChain): 34719 (JSC::CTI::privateCompilePutByIdReplace): 34720 (JSC::CTI::privateCompilePutByIdTransition): 34721 (JSC::CTI::privateCompileArrayLengthTrampoline): 34722 (JSC::CTI::privateCompileStringLengthTrampoline): 34723 (JSC::CTI::patchGetByIdSelf): 34724 (JSC::CTI::patchPutByIdReplace): 34725 (JSC::CTI::privateCompilePatchGetArrayLength): 34726 (JSC::CTI::privateCompilePatchGetStringLength): 34727 * VM/CTI.h: 34728 (JSC::CTI::compileGetByIdSelf): 34729 (JSC::CTI::compileGetByIdProto): 34730 (JSC::CTI::compileGetByIdChain): 34731 (JSC::CTI::compilePutByIdReplace): 34732 (JSC::CTI::compilePutByIdTransition): 34733 (JSC::CTI::compileArrayLengthTrampoline): 34734 (JSC::CTI::compileStringLengthTrampoline): 34735 (JSC::CTI::compilePatchGetArrayLength): 34736 (JSC::CTI::compilePatchGetStringLength): 34737 * VM/CodeBlock.cpp: 34738 (JSC::CodeBlock::dump): 34739 (JSC::CodeBlock::~CodeBlock): 34740 * VM/CodeBlock.h: 34741 (JSC::StructureStubInfo::StructureStubInfo): 34742 (JSC::CodeBlock::getStubInfo): 34743 * VM/Machine.cpp: 34744 (JSC::Machine::tryCTICachePutByID): 34745 (JSC::Machine::tryCTICacheGetByID): 34746 (JSC::Machine::cti_op_put_by_val_array): 34747 * VM/Machine.h: 34748 * masm/X86Assembler.h: 34749 (JSC::X86Assembler::): 34750 (JSC::X86Assembler::cmpl_i8m): 34751 (JSC::X86Assembler::emitUnlinkedJa): 34752 (JSC::X86Assembler::getRelocatedAddress): 34753 (JSC::X86Assembler::getDifferenceBetweenLabels): 34754 (JSC::X86Assembler::emitModRm_opmsib): 34755 34756 2008-09-14 Maciej Stachowiak <mjs (a] apple.com> 34757 34758 Reviewed by Cameron Zwarich. 34759 34760 - split the "prototype" lookup for hasInstance into opcode stream so it can be cached 34761 34762 ~5% speedup on v8 earley-boyer test 34763 34764 * API/JSCallbackObject.h: Add a parameter for the pre-looked-up prototype. 34765 * API/JSCallbackObjectFunctions.h: 34766 (JSC::::hasInstance): Ditto. 34767 * API/JSValueRef.cpp: 34768 (JSValueIsInstanceOfConstructor): Look up and pass in prototype. 34769 * JavaScriptCore.exp: 34770 * VM/CTI.cpp: 34771 (JSC::CTI::privateCompileMainPass): Pass along prototype. 34772 * VM/CodeBlock.cpp: 34773 (JSC::CodeBlock::dump): Print third arg. 34774 * VM/CodeGenerator.cpp: 34775 (JSC::CodeGenerator::emitInstanceOf): Implement this, now that there 34776 is a third argument. 34777 * VM/CodeGenerator.h: 34778 * VM/Machine.cpp: 34779 (JSC::Machine::privateExecute): Pass along the prototype. 34780 (JSC::Machine::cti_op_instanceof): ditto 34781 * kjs/JSObject.cpp: 34782 (JSC::JSObject::hasInstance): Expect to get a pre-looked-up prototype. 34783 * kjs/JSObject.h: 34784 * kjs/nodes.cpp: 34785 (JSC::InstanceOfNode::emitCode): Emit a get_by_id of the prototype 34786 property and pass that register to instanceof. 34787 * kjs/nodes.h: 34788 34789 2008-09-14 Gavin Barraclough <barraclough (a] apple.com> 34790 34791 Reviewed by Sam Weinig. 34792 34793 Remove unnecessary virtual function call from cti_op_call_JSFunction - 34794 ~5% on richards, ~2.5% on v8-tests, ~0.5% on sunspider. 34795 34796 * VM/Machine.cpp: 34797 (JSC::Machine::cti_op_call_JSFunction): 34798 34799 2008-09-14 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 34800 34801 Reviewed by Maciej Stachowiak. 34802 34803 Bug 20827: the 'typeof' operator is slow 34804 <https://bugs.webkit.org/show_bug.cgi?id=20827> 34805 34806 Optimize the 'typeof' operator when its result is compared to a constant 34807 string. 34808 34809 This is a 5.5% speedup on the V8 Earley-Boyer test. 34810 34811 * VM/CTI.cpp: 34812 (JSC::CTI::privateCompileMainPass): 34813 * VM/CodeBlock.cpp: 34814 (JSC::CodeBlock::dump): 34815 * VM/CodeGenerator.cpp: 34816 (JSC::CodeGenerator::emitEqualityOp): 34817 * VM/CodeGenerator.h: 34818 * VM/Machine.cpp: 34819 (JSC::jsIsObjectType): 34820 (JSC::jsIsFunctionType): 34821 (JSC::Machine::privateExecute): 34822 (JSC::Machine::cti_op_is_undefined): 34823 (JSC::Machine::cti_op_is_boolean): 34824 (JSC::Machine::cti_op_is_number): 34825 (JSC::Machine::cti_op_is_string): 34826 (JSC::Machine::cti_op_is_object): 34827 (JSC::Machine::cti_op_is_function): 34828 * VM/Machine.h: 34829 * VM/Opcode.h: 34830 * kjs/nodes.cpp: 34831 (JSC::BinaryOpNode::emitCode): 34832 (JSC::EqualNode::emitCode): 34833 (JSC::StrictEqualNode::emitCode): 34834 * kjs/nodes.h: 34835 34836 2008-09-14 Sam Weinig <sam (a] webkit.org> 34837 34838 Reviewed by Cameron Zwarich. 34839 34840 Patch for https://bugs.webkit.org/show_bug.cgi?id=20844 34841 Speed up parseInt for numbers 34842 34843 Sunspider reports this as 1.029x as fast overall and 1.37x as fast on string-unpack-code. 34844 No change on the v8 suite. 34845 34846 * kjs/JSGlobalObjectFunctions.cpp: 34847 (JSC::globalFuncParseInt): Don't convert numbers to strings just to 34848 convert them back to numbers. 34849 34850 2008-09-14 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 34851 34852 Reviewed by Oliver Hunt. 34853 34854 Bug 20816: op_lesseq should be optimized 34855 <https://bugs.webkit.org/show_bug.cgi?id=20816> 34856 34857 Add a loop_if_lesseq opcode that is similar to the loop_if_less opcode. 34858 34859 This is a 9.4% speedup on the V8 Crypto benchmark. 34860 34861 * VM/CTI.cpp: 34862 (JSC::CTI::privateCompileMainPass): 34863 (JSC::CTI::privateCompileSlowCases): 34864 * VM/CodeBlock.cpp: 34865 (JSC::CodeBlock::dump): 34866 * VM/CodeGenerator.cpp: 34867 (JSC::CodeGenerator::emitJumpIfTrue): 34868 * VM/Machine.cpp: 34869 (JSC::Machine::privateExecute): 34870 (JSC::Machine::cti_op_loop_if_lesseq): 34871 * VM/Machine.h: 34872 * VM/Opcode.h: 34873 34874 2008-09-14 Sam Weinig <sam (a] webkit.org> 34875 34876 Reviewed by Cameron Zwarich. 34877 34878 Cleanup Sampling code. 34879 34880 * VM/CTI.cpp: 34881 (JSC::CTI::emitCall): 34882 (JSC::CTI::privateCompileMainPass): 34883 * VM/CTI.h: 34884 (JSC::CTI::execute): 34885 * VM/SamplingTool.cpp: 34886 (JSC::): 34887 (JSC::SamplingTool::run): 34888 (JSC::SamplingTool::dump): 34889 * VM/SamplingTool.h: 34890 (JSC::SamplingTool::callingHostFunction): 34891 34892 2008-09-13 Oliver Hunt <oliver (a] apple.com> 34893 34894 Reviewed by Cameron Zwarich. 34895 34896 Bug 20821: Cache property transitions to speed up object initialization 34897 https://bugs.webkit.org/show_bug.cgi?id=20821 34898 34899 Implement a transition cache to improve the performance of new properties 34900 being added to objects. This is extremely beneficial in constructors and 34901 shows up as a 34% improvement on access-binary-trees in SunSpider (0.8% 34902 overall) 34903 34904 * VM/CTI.cpp: 34905 (JSC::CTI::privateCompileMainPass): 34906 (JSC::): 34907 (JSC::transitionWillNeedStorageRealloc): 34908 (JSC::CTI::privateCompilePutByIdTransition): 34909 * VM/CTI.h: 34910 (JSC::CTI::compilePutByIdTransition): 34911 * VM/CodeBlock.cpp: 34912 (JSC::printPutByIdOp): 34913 (JSC::CodeBlock::printStructureIDs): 34914 (JSC::CodeBlock::dump): 34915 (JSC::CodeBlock::derefStructureIDs): 34916 (JSC::CodeBlock::refStructureIDs): 34917 * VM/CodeGenerator.cpp: 34918 (JSC::CodeGenerator::emitPutById): 34919 * VM/Machine.cpp: 34920 (JSC::cachePrototypeChain): 34921 (JSC::Machine::tryCachePutByID): 34922 (JSC::Machine::tryCacheGetByID): 34923 (JSC::Machine::privateExecute): 34924 (JSC::Machine::tryCTICachePutByID): 34925 (JSC::Machine::tryCTICacheGetByID): 34926 * VM/Machine.h: 34927 * VM/Opcode.h: 34928 * kjs/JSObject.h: 34929 (JSC::JSObject::putDirect): 34930 (JSC::JSObject::transitionTo): 34931 * kjs/PutPropertySlot.h: 34932 (JSC::PutPropertySlot::PutPropertySlot): 34933 (JSC::PutPropertySlot::wasTransition): 34934 (JSC::PutPropertySlot::setWasTransition): 34935 * kjs/StructureID.cpp: 34936 (JSC::StructureID::transitionTo): 34937 (JSC::StructureIDChain::StructureIDChain): 34938 * kjs/StructureID.h: 34939 (JSC::StructureID::previousID): 34940 (JSC::StructureID::setCachedPrototypeChain): 34941 (JSC::StructureID::cachedPrototypeChain): 34942 (JSC::StructureID::propertyMap): 34943 * masm/X86Assembler.h: 34944 (JSC::X86Assembler::addl_i8m): 34945 (JSC::X86Assembler::subl_i8m): 34946 34947 2008-09-12 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 34948 34949 Reviewed by Maciej Stachowiak. 34950 34951 Bug 20819: JSValue::isObject() is slow 34952 <https://bugs.webkit.org/show_bug.cgi?id=20819> 34953 34954 Optimize JSCell::isObject() and JSCell::isString() by making them 34955 non-virtual calls that rely on the StructureID type information. 34956 34957 This is a 0.7% speedup on SunSpider and a 1.0% speedup on the V8 34958 benchmark suite. 34959 34960 * JavaScriptCore.exp: 34961 * kjs/JSCell.cpp: 34962 * kjs/JSCell.h: 34963 (JSC::JSCell::isObject): 34964 (JSC::JSCell::isString): 34965 * kjs/JSObject.cpp: 34966 * kjs/JSObject.h: 34967 * kjs/JSString.cpp: 34968 * kjs/JSString.h: 34969 (JSC::JSString::JSString): 34970 * kjs/StructureID.h: 34971 (JSC::StructureID::type): 34972 34973 2008-09-11 Stephanie Lewis <slewis (a] apple.com> 34974 34975 Reviewed by Oliver Hunt. 34976 34977 Turn off PGO Optimization on CTI.cpp -> <rdar://problem/6207709>. Fixes 34978 crash on CNN and on Dromaeo. 34979 Fix Missing close tag in vcproj. 34980 34981 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 34982 34983 2008-09-11 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 34984 34985 Not reviewed. 34986 34987 Correct an SVN problem with the last commit and actually add the new 34988 files. 34989 34990 * wrec/CharacterClassConstructor.cpp: Added. 34991 (JSC::): 34992 (JSC::getCharacterClassNewline): 34993 (JSC::getCharacterClassDigits): 34994 (JSC::getCharacterClassSpaces): 34995 (JSC::getCharacterClassWordchar): 34996 (JSC::getCharacterClassNondigits): 34997 (JSC::getCharacterClassNonspaces): 34998 (JSC::getCharacterClassNonwordchar): 34999 (JSC::CharacterClassConstructor::addSorted): 35000 (JSC::CharacterClassConstructor::addSortedRange): 35001 (JSC::CharacterClassConstructor::put): 35002 (JSC::CharacterClassConstructor::flush): 35003 (JSC::CharacterClassConstructor::append): 35004 * wrec/CharacterClassConstructor.h: Added. 35005 (JSC::CharacterClassConstructor::CharacterClassConstructor): 35006 (JSC::CharacterClassConstructor::isUpsideDown): 35007 (JSC::CharacterClassConstructor::charClass): 35008 35009 2008-09-11 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 35010 35011 Reviewed by Maciej Stachowiak. 35012 35013 Bug 20788: Split CharacterClassConstructor into its own file 35014 <https://bugs.webkit.org/show_bug.cgi?id=20788> 35015 35016 Split CharacterClassConstructor into its own file and clean up some 35017 style issues. 35018 35019 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 35020 * JavaScriptCore.xcodeproj/project.pbxproj: 35021 * wrec/CharacterClassConstructor.cpp: Added. 35022 (JSC::): 35023 (JSC::getCharacterClassNewline): 35024 (JSC::getCharacterClassDigits): 35025 (JSC::getCharacterClassSpaces): 35026 (JSC::getCharacterClassWordchar): 35027 (JSC::getCharacterClassNondigits): 35028 (JSC::getCharacterClassNonspaces): 35029 (JSC::getCharacterClassNonwordchar): 35030 (JSC::CharacterClassConstructor::addSorted): 35031 (JSC::CharacterClassConstructor::addSortedRange): 35032 (JSC::CharacterClassConstructor::put): 35033 (JSC::CharacterClassConstructor::flush): 35034 (JSC::CharacterClassConstructor::append): 35035 * wrec/CharacterClassConstructor.h: Added. 35036 (JSC::CharacterClassConstructor::CharacterClassConstructor): 35037 (JSC::CharacterClassConstructor::isUpsideDown): 35038 (JSC::CharacterClassConstructor::charClass): 35039 * wrec/WREC.cpp: 35040 (JSC::WRECParser::parseCharacterClass): 35041 35042 2008-09-10 Simon Hausmann <hausmann (a] webkit.org> 35043 35044 Not reviewed but trivial one-liner for yet unused macro. 35045 35046 Changed PLATFORM(WINCE) to PLATFORM(WIN_CE) as requested by Mark. 35047 35048 (part of https://bugs.webkit.org/show_bug.cgi?id=20746) 35049 35050 * wtf/Platform.h: 35051 35052 2008-09-10 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 35053 35054 Rubber-stamped by Oliver Hunt. 35055 35056 Fix a typo by renaming the overloaded orl_rr that takes an immediate to 35057 orl_i32r. 35058 35059 * VM/CTI.cpp: 35060 (JSC::CTI::emitFastArithPotentiallyReTagImmediate): 35061 * masm/X86Assembler.h: 35062 (JSC::X86Assembler::orl_i32r): 35063 * wrec/WREC.cpp: 35064 (JSC::WRECGenerator::generatePatternCharacter): 35065 (JSC::WRECGenerator::generateCharacterClassInverted): 35066 35067 2008-09-10 Sam Weinig <sam (a] webkit.org> 35068 35069 Reviewed by Geoff Garen. 35070 35071 Add inline property storage for JSObject. 35072 35073 1.2% progression on Sunspider. .5% progression on the v8 test suite. 35074 35075 * JavaScriptCore.exp: 35076 * VM/CTI.cpp: 35077 (JSC::CTI::privateCompileGetByIdProto): 35078 (JSC::CTI::privateCompileGetByIdChain): 35079 * kjs/JSObject.cpp: 35080 (JSC::JSObject::mark): There is no reason to check storageSize now that 35081 we start from 0. 35082 (JSC::JSObject::allocatePropertyStorage): Allocates/reallocates heap storage. 35083 * kjs/JSObject.h: 35084 (JSC::JSObject::offsetForLocation): m_propertyStorage is not an OwnArrayPtr 35085 now so there is no reason to .get() 35086 (JSC::JSObject::usingInlineStorage): 35087 (JSC::JSObject::JSObject): Start with m_propertyStorage pointing to the 35088 inline storage. 35089 (JSC::JSObject::~JSObject): Free the heap storage if not using the inline 35090 storage. 35091 (JSC::JSObject::putDirect): Switch to the heap storage only when we know 35092 we know that we are about to add a property that will overflow the inline 35093 storage. 35094 * kjs/PropertyMap.cpp: 35095 (JSC::PropertyMap::createTable): Don't allocate the propertyStorage, that is 35096 now handled by JSObject. 35097 (JSC::PropertyMap::rehash): PropertyStorage is not a OwnArrayPtr anymore. 35098 * kjs/PropertyMap.h: 35099 (JSC::PropertyMap::storageSize): Rename from markingCount. 35100 * kjs/StructureID.cpp: 35101 (JSC::StructureID::addPropertyTransition): Don't resize the property storage 35102 if we are using inline storage. 35103 * kjs/StructureID.h: 35104 35105 2008-09-10 Oliver Hunt <oliver (a] apple.com> 35106 35107 Reviewed by Geoff Garen. 35108 35109 Inline immediate number version of op_mul. 35110 35111 Renamed mull_rr to imull_rr as that's what it's 35112 actually doing, and added imull_i32r for the constant 35113 case immediate multiply. 35114 35115 1.1% improvement to SunSpider. 35116 35117 * VM/CTI.cpp: 35118 (JSC::CTI::privateCompileMainPass): 35119 (JSC::CTI::privateCompileSlowCases): 35120 * masm/X86Assembler.h: 35121 (JSC::X86Assembler::): 35122 (JSC::X86Assembler::imull_rr): 35123 (JSC::X86Assembler::imull_i32r): 35124 35125 2008-09-10 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 35126 35127 Not reviewed. 35128 35129 Mac build fix. 35130 35131 * JavaScriptCore.xcodeproj/project.pbxproj: 35132 35133 2008-09-09 Oliver Hunt <oliver (a] apple.com> 35134 35135 Reviewed by Maciej Stachowiak. 35136 35137 Add optimised access to known properties on the global object. 35138 35139 Improve cross scope access to the global object by emitting 35140 code to access it directly rather than by walking the scope chain. 35141 35142 This is a 0.8% win in SunSpider and a 1.7% win in the v8 benchmarks. 35143 35144 * VM/CTI.cpp: 35145 (JSC::CTI::privateCompileMainPass): 35146 (JSC::CTI::emitGetVariableObjectRegister): 35147 (JSC::CTI::emitPutVariableObjectRegister): 35148 * VM/CTI.h: 35149 * VM/CodeBlock.cpp: 35150 (JSC::CodeBlock::dump): 35151 * VM/CodeGenerator.cpp: 35152 (JSC::CodeGenerator::findScopedProperty): 35153 (JSC::CodeGenerator::emitResolve): 35154 (JSC::CodeGenerator::emitGetScopedVar): 35155 (JSC::CodeGenerator::emitPutScopedVar): 35156 * VM/CodeGenerator.h: 35157 * VM/Machine.cpp: 35158 (JSC::Machine::privateExecute): 35159 * VM/Opcode.h: 35160 * kjs/nodes.cpp: 35161 (JSC::FunctionCallResolveNode::emitCode): 35162 (JSC::PostfixResolveNode::emitCode): 35163 (JSC::PrefixResolveNode::emitCode): 35164 (JSC::ReadModifyResolveNode::emitCode): 35165 (JSC::AssignResolveNode::emitCode): 35166 35167 2008-09-10 Maciej Stachowiak <mjs (a] apple.com> 35168 35169 Reviewed by Oliver. 35170 35171 - enable polymorphic inline caching of properties of primitives 35172 35173 1.012x speedup on SunSpider. 35174 35175 We create special structure IDs for JSString and 35176 JSNumberCell. Unlike normal structure IDs, these cannot hold the 35177 true prototype. Due to JS autoboxing semantics, the prototype used 35178 when looking up string or number properties depends on the lexical 35179 global object of the call site, not the creation site. Thus we 35180 enable StructureIDs to handle this quirk for primitives. 35181 35182 Everything else should be straightforward. 35183 35184 * VM/CTI.cpp: 35185 (JSC::CTI::privateCompileGetByIdProto): 35186 (JSC::CTI::privateCompileGetByIdChain): 35187 * VM/CTI.h: 35188 (JSC::CTI::compileGetByIdProto): 35189 (JSC::CTI::compileGetByIdChain): 35190 * VM/JSPropertyNameIterator.h: 35191 (JSC::JSPropertyNameIterator::JSPropertyNameIterator): 35192 * VM/Machine.cpp: 35193 (JSC::Machine::Machine): 35194 (JSC::cachePrototypeChain): 35195 (JSC::Machine::tryCachePutByID): 35196 (JSC::Machine::tryCacheGetByID): 35197 (JSC::Machine::privateExecute): 35198 (JSC::Machine::tryCTICachePutByID): 35199 (JSC::Machine::tryCTICacheGetByID): 35200 * kjs/GetterSetter.h: 35201 (JSC::GetterSetter::GetterSetter): 35202 * kjs/JSCell.h: 35203 * kjs/JSGlobalData.cpp: 35204 (JSC::JSGlobalData::JSGlobalData): 35205 * kjs/JSGlobalData.h: 35206 * kjs/JSGlobalObject.h: 35207 (JSC::StructureID::prototypeForLookup): 35208 * kjs/JSNumberCell.h: 35209 (JSC::JSNumberCell::JSNumberCell): 35210 (JSC::jsNumberCell): 35211 * kjs/JSObject.h: 35212 (JSC::JSObject::prototype): 35213 * kjs/JSString.cpp: 35214 (JSC::jsString): 35215 (JSC::jsSubstring): 35216 (JSC::jsOwnedString): 35217 * kjs/JSString.h: 35218 (JSC::JSString::JSString): 35219 (JSC::JSString::): 35220 (JSC::jsSingleCharacterString): 35221 (JSC::jsSingleCharacterSubstring): 35222 (JSC::jsNontrivialString): 35223 * kjs/SmallStrings.cpp: 35224 (JSC::SmallStrings::createEmptyString): 35225 (JSC::SmallStrings::createSingleCharacterString): 35226 * kjs/StructureID.cpp: 35227 (JSC::StructureID::StructureID): 35228 (JSC::StructureID::addPropertyTransition): 35229 (JSC::StructureID::getterSetterTransition): 35230 (JSC::StructureIDChain::StructureIDChain): 35231 * kjs/StructureID.h: 35232 (JSC::StructureID::create): 35233 (JSC::StructureID::storedPrototype): 35234 35235 2008-09-09 Joerg Bornemann <joerg.bornemann (a] trolltech.com> 35236 35237 Reviewed by Sam Weinig. 35238 35239 https://bugs.webkit.org/show_bug.cgi?id=20746 35240 35241 Added WINCE platform macro. 35242 35243 * wtf/Platform.h: 35244 35245 2008-09-09 Sam Weinig <sam (a] webkit.org> 35246 35247 Reviewed by Mark Rowe. 35248 35249 Remove unnecessary override of getOffset. 35250 35251 Sunspider reports this as a .6% progression. 35252 35253 * JavaScriptCore.exp: 35254 * kjs/JSObject.h: 35255 (JSC::JSObject::getDirectLocation): 35256 (JSC::JSObject::getOwnPropertySlotForWrite): 35257 (JSC::JSObject::putDirect): 35258 * kjs/PropertyMap.cpp: 35259 * kjs/PropertyMap.h: 35260 35261 2008-09-09 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 35262 35263 Reviewed by Maciej Stachowiak. 35264 35265 Bug 20759: Remove MacroAssembler 35266 <https://bugs.webkit.org/show_bug.cgi?id=20759> 35267 35268 Remove MacroAssembler and move its functionality to X86Assembler. 35269 35270 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 35271 * JavaScriptCore.xcodeproj/project.pbxproj: 35272 * VM/CTI.cpp: 35273 (JSC::CTI::emitGetArg): 35274 (JSC::CTI::emitGetPutArg): 35275 (JSC::CTI::emitPutArg): 35276 (JSC::CTI::emitPutCTIParam): 35277 (JSC::CTI::emitGetCTIParam): 35278 (JSC::CTI::emitPutToCallFrameHeader): 35279 (JSC::CTI::emitGetFromCallFrameHeader): 35280 (JSC::CTI::emitPutResult): 35281 (JSC::CTI::emitDebugExceptionCheck): 35282 (JSC::CTI::emitJumpSlowCaseIfNotImm): 35283 (JSC::CTI::emitJumpSlowCaseIfNotImms): 35284 (JSC::CTI::emitFastArithDeTagImmediate): 35285 (JSC::CTI::emitFastArithReTagImmediate): 35286 (JSC::CTI::emitFastArithPotentiallyReTagImmediate): 35287 (JSC::CTI::emitFastArithImmToInt): 35288 (JSC::CTI::emitFastArithIntToImmOrSlowCase): 35289 (JSC::CTI::emitFastArithIntToImmNoCheck): 35290 (JSC::CTI::compileOpCall): 35291 (JSC::CTI::emitSlowScriptCheck): 35292 (JSC::CTI::privateCompileMainPass): 35293 (JSC::CTI::privateCompileSlowCases): 35294 (JSC::CTI::privateCompile): 35295 (JSC::CTI::privateCompileGetByIdSelf): 35296 (JSC::CTI::privateCompileGetByIdProto): 35297 (JSC::CTI::privateCompileGetByIdChain): 35298 (JSC::CTI::privateCompilePutByIdReplace): 35299 (JSC::CTI::privateArrayLengthTrampoline): 35300 (JSC::CTI::privateStringLengthTrampoline): 35301 (JSC::CTI::compileRegExp): 35302 * VM/CTI.h: 35303 (JSC::CallRecord::CallRecord): 35304 (JSC::JmpTable::JmpTable): 35305 (JSC::SlowCaseEntry::SlowCaseEntry): 35306 (JSC::CTI::JSRInfo::JSRInfo): 35307 * masm/MacroAssembler.h: Removed. 35308 * masm/MacroAssemblerWin.cpp: Removed. 35309 * masm/X86Assembler.h: 35310 (JSC::X86Assembler::emitConvertToFastCall): 35311 (JSC::X86Assembler::emitRestoreArgumentReference): 35312 * wrec/WREC.h: 35313 (JSC::WRECGenerator::WRECGenerator): 35314 (JSC::WRECParser::WRECParser): 35315 35316 2008-09-09 Sam Weinig <sam (a] webkit.org> 35317 35318 Reviewed by Cameron Zwarich. 35319 35320 Don't waste the first item in the PropertyStorage. 35321 35322 - Fix typo (makingCount -> markingCount) 35323 - Remove undefined method declaration. 35324 35325 No change on Sunspider. 35326 35327 * kjs/JSObject.cpp: 35328 (JSC::JSObject::mark): 35329 * kjs/PropertyMap.cpp: 35330 (JSC::PropertyMap::put): 35331 (JSC::PropertyMap::remove): 35332 (JSC::PropertyMap::getOffset): 35333 (JSC::PropertyMap::insert): 35334 (JSC::PropertyMap::rehash): 35335 (JSC::PropertyMap::resizePropertyStorage): 35336 (JSC::PropertyMap::checkConsistency): 35337 * kjs/PropertyMap.h: 35338 (JSC::PropertyMap::markingCount): Fix typo. 35339 35340 2008-09-09 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 35341 35342 Not reviewed. 35343 35344 Speculative Windows build fix. 35345 35346 * masm/MacroAssemblerWin.cpp: 35347 (JSC::MacroAssembler::emitConvertToFastCall): 35348 (JSC::MacroAssembler::emitRestoreArgumentReference): 35349 35350 2008-09-09 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 35351 35352 Reviewed by Maciej Stachowiak. 35353 35354 Bug 20755: Create an X86 namespace for register names and other things 35355 <https://bugs.webkit.org/show_bug.cgi?id=20755> 35356 35357 Create an X86 namespace to put X86 register names. Perhaps I will move 35358 opcode names here later as well. 35359 35360 * VM/CTI.cpp: 35361 (JSC::CTI::emitGetArg): 35362 (JSC::CTI::emitGetPutArg): 35363 (JSC::CTI::emitPutArg): 35364 (JSC::CTI::emitPutArgConstant): 35365 (JSC::CTI::emitPutCTIParam): 35366 (JSC::CTI::emitGetCTIParam): 35367 (JSC::CTI::emitPutToCallFrameHeader): 35368 (JSC::CTI::emitGetFromCallFrameHeader): 35369 (JSC::CTI::emitPutResult): 35370 (JSC::CTI::emitDebugExceptionCheck): 35371 (JSC::CTI::emitJumpSlowCaseIfNotImms): 35372 (JSC::CTI::compileOpCall): 35373 (JSC::CTI::emitSlowScriptCheck): 35374 (JSC::CTI::privateCompileMainPass): 35375 (JSC::CTI::privateCompileSlowCases): 35376 (JSC::CTI::privateCompile): 35377 (JSC::CTI::privateCompileGetByIdSelf): 35378 (JSC::CTI::privateCompileGetByIdProto): 35379 (JSC::CTI::privateCompileGetByIdChain): 35380 (JSC::CTI::privateCompilePutByIdReplace): 35381 (JSC::CTI::privateArrayLengthTrampoline): 35382 (JSC::CTI::privateStringLengthTrampoline): 35383 (JSC::CTI::compileRegExp): 35384 * VM/CTI.h: 35385 * masm/X86Assembler.h: 35386 (JSC::X86::): 35387 (JSC::X86Assembler::emitModRm_rm): 35388 (JSC::X86Assembler::emitModRm_rm_Unchecked): 35389 (JSC::X86Assembler::emitModRm_rmsib): 35390 * wrec/WREC.cpp: 35391 (JSC::WRECGenerator::generateNonGreedyQuantifier): 35392 (JSC::WRECGenerator::generateGreedyQuantifier): 35393 (JSC::WRECGenerator::generateParentheses): 35394 (JSC::WRECGenerator::generateBackreference): 35395 (JSC::WRECGenerator::gernerateDisjunction): 35396 * wrec/WREC.h: 35397 35398 2008-09-09 Sam Weinig <sam (a] webkit.org> 35399 35400 Reviewed by Geoffrey Garen. 35401 35402 Remove unnecessary friend declaration. 35403 35404 * kjs/PropertyMap.h: 35405 35406 2008-09-09 Sam Weinig <sam (a] webkit.org> 35407 35408 Reviewed by Geoffrey Garen. 35409 35410 Replace uses of PropertyMap::get and PropertyMap::getLocation with 35411 PropertyMap::getOffset. 35412 35413 Sunspider reports this as a .6% improvement. 35414 35415 * JavaScriptCore.exp: 35416 * kjs/JSObject.cpp: 35417 (JSC::JSObject::put): 35418 (JSC::JSObject::deleteProperty): 35419 (JSC::JSObject::getPropertyAttributes): 35420 * kjs/JSObject.h: 35421 (JSC::JSObject::getDirect): 35422 (JSC::JSObject::getDirectLocation): 35423 (JSC::JSObject::locationForOffset): 35424 * kjs/PropertyMap.cpp: 35425 (JSC::PropertyMap::remove): 35426 (JSC::PropertyMap::getOffset): 35427 * kjs/PropertyMap.h: 35428 35429 2008-09-09 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 35430 35431 Reviewed by Sam Weinig. 35432 35433 Bug 20754: Remove emit prefix from assembler opcode methods 35434 <https://bugs.webkit.org/show_bug.cgi?id=20754> 35435 35436 * VM/CTI.cpp: 35437 (JSC::CTI::emitGetArg): 35438 (JSC::CTI::emitGetPutArg): 35439 (JSC::CTI::emitPutArg): 35440 (JSC::CTI::emitPutArgConstant): 35441 (JSC::CTI::emitPutCTIParam): 35442 (JSC::CTI::emitGetCTIParam): 35443 (JSC::CTI::emitPutToCallFrameHeader): 35444 (JSC::CTI::emitGetFromCallFrameHeader): 35445 (JSC::CTI::emitPutResult): 35446 (JSC::CTI::emitDebugExceptionCheck): 35447 (JSC::CTI::emitCall): 35448 (JSC::CTI::emitJumpSlowCaseIfNotImm): 35449 (JSC::CTI::emitJumpSlowCaseIfNotImms): 35450 (JSC::CTI::emitFastArithDeTagImmediate): 35451 (JSC::CTI::emitFastArithReTagImmediate): 35452 (JSC::CTI::emitFastArithPotentiallyReTagImmediate): 35453 (JSC::CTI::emitFastArithImmToInt): 35454 (JSC::CTI::emitFastArithIntToImmOrSlowCase): 35455 (JSC::CTI::emitFastArithIntToImmNoCheck): 35456 (JSC::CTI::compileOpCall): 35457 (JSC::CTI::emitSlowScriptCheck): 35458 (JSC::CTI::privateCompileMainPass): 35459 (JSC::CTI::privateCompileSlowCases): 35460 (JSC::CTI::privateCompile): 35461 (JSC::CTI::privateCompileGetByIdSelf): 35462 (JSC::CTI::privateCompileGetByIdProto): 35463 (JSC::CTI::privateCompileGetByIdChain): 35464 (JSC::CTI::privateCompilePutByIdReplace): 35465 (JSC::CTI::privateArrayLengthTrampoline): 35466 (JSC::CTI::privateStringLengthTrampoline): 35467 (JSC::CTI::compileRegExp): 35468 * masm/MacroAssemblerWin.cpp: 35469 (JSC::MacroAssembler::emitConvertToFastCall): 35470 (JSC::MacroAssembler::emitRestoreArgumentReference): 35471 * masm/X86Assembler.h: 35472 (JSC::X86Assembler::pushl_r): 35473 (JSC::X86Assembler::pushl_m): 35474 (JSC::X86Assembler::popl_r): 35475 (JSC::X86Assembler::popl_m): 35476 (JSC::X86Assembler::movl_rr): 35477 (JSC::X86Assembler::addl_rr): 35478 (JSC::X86Assembler::addl_i8r): 35479 (JSC::X86Assembler::addl_i32r): 35480 (JSC::X86Assembler::addl_mr): 35481 (JSC::X86Assembler::andl_rr): 35482 (JSC::X86Assembler::andl_i32r): 35483 (JSC::X86Assembler::cmpl_i8r): 35484 (JSC::X86Assembler::cmpl_rr): 35485 (JSC::X86Assembler::cmpl_rm): 35486 (JSC::X86Assembler::cmpl_i32r): 35487 (JSC::X86Assembler::cmpl_i32m): 35488 (JSC::X86Assembler::cmpw_rm): 35489 (JSC::X86Assembler::orl_rr): 35490 (JSC::X86Assembler::subl_rr): 35491 (JSC::X86Assembler::subl_i8r): 35492 (JSC::X86Assembler::subl_i32r): 35493 (JSC::X86Assembler::subl_mr): 35494 (JSC::X86Assembler::testl_i32r): 35495 (JSC::X86Assembler::testl_rr): 35496 (JSC::X86Assembler::xorl_i8r): 35497 (JSC::X86Assembler::xorl_rr): 35498 (JSC::X86Assembler::sarl_i8r): 35499 (JSC::X86Assembler::sarl_CLr): 35500 (JSC::X86Assembler::shl_i8r): 35501 (JSC::X86Assembler::shll_CLr): 35502 (JSC::X86Assembler::mull_rr): 35503 (JSC::X86Assembler::idivl_r): 35504 (JSC::X86Assembler::cdq): 35505 (JSC::X86Assembler::movl_mr): 35506 (JSC::X86Assembler::movzwl_mr): 35507 (JSC::X86Assembler::movl_rm): 35508 (JSC::X86Assembler::movl_i32r): 35509 (JSC::X86Assembler::movl_i32m): 35510 (JSC::X86Assembler::leal_mr): 35511 (JSC::X86Assembler::ret): 35512 (JSC::X86Assembler::jmp_r): 35513 (JSC::X86Assembler::jmp_m): 35514 (JSC::X86Assembler::call_r): 35515 * wrec/WREC.cpp: 35516 (JSC::WRECGenerator::generateBacktrack1): 35517 (JSC::WRECGenerator::generateBacktrackBackreference): 35518 (JSC::WRECGenerator::generateBackreferenceQuantifier): 35519 (JSC::WRECGenerator::generateNonGreedyQuantifier): 35520 (JSC::WRECGenerator::generateGreedyQuantifier): 35521 (JSC::WRECGenerator::generatePatternCharacter): 35522 (JSC::WRECGenerator::generateCharacterClassInvertedRange): 35523 (JSC::WRECGenerator::generateCharacterClassInverted): 35524 (JSC::WRECGenerator::generateCharacterClass): 35525 (JSC::WRECGenerator::generateParentheses): 35526 (JSC::WRECGenerator::gererateParenthesesResetTrampoline): 35527 (JSC::WRECGenerator::generateAssertionBOL): 35528 (JSC::WRECGenerator::generateAssertionEOL): 35529 (JSC::WRECGenerator::generateAssertionWordBoundary): 35530 (JSC::WRECGenerator::generateBackreference): 35531 (JSC::WRECGenerator::gernerateDisjunction): 35532 35533 2008-09-09 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 35534 35535 Reviewed by Maciej Stachowiak. 35536 35537 Clean up the WREC code some more. 35538 35539 * VM/CTI.cpp: 35540 (JSC::CTI::compileRegExp): 35541 * wrec/WREC.cpp: 35542 (JSC::getCharacterClassNewline): 35543 (JSC::getCharacterClassDigits): 35544 (JSC::getCharacterClassSpaces): 35545 (JSC::getCharacterClassWordchar): 35546 (JSC::getCharacterClassNondigits): 35547 (JSC::getCharacterClassNonspaces): 35548 (JSC::getCharacterClassNonwordchar): 35549 (JSC::WRECGenerator::generateBacktrack1): 35550 (JSC::WRECGenerator::generateBacktrackBackreference): 35551 (JSC::WRECGenerator::generateBackreferenceQuantifier): 35552 (JSC::WRECGenerator::generateNonGreedyQuantifier): 35553 (JSC::WRECGenerator::generateGreedyQuantifier): 35554 (JSC::WRECGenerator::generatePatternCharacter): 35555 (JSC::WRECGenerator::generateCharacterClassInvertedRange): 35556 (JSC::WRECGenerator::generateCharacterClassInverted): 35557 (JSC::WRECGenerator::generateCharacterClass): 35558 (JSC::WRECGenerator::generateParentheses): 35559 (JSC::WRECGenerator::gererateParenthesesResetTrampoline): 35560 (JSC::WRECGenerator::generateAssertionBOL): 35561 (JSC::WRECGenerator::generateAssertionEOL): 35562 (JSC::WRECGenerator::generateAssertionWordBoundary): 35563 (JSC::WRECGenerator::generateBackreference): 35564 (JSC::WRECGenerator::gernerateDisjunction): 35565 (JSC::WRECParser::parseCharacterClass): 35566 (JSC::WRECParser::parseEscape): 35567 (JSC::WRECParser::parseTerm): 35568 * wrec/WREC.h: 35569 35570 2008-09-09 Mark Rowe <mrowe (a] apple.com> 35571 35572 Build fix, rubber-stamped by Anders Carlsson. 35573 35574 Silence spurious build warnings about missing format attributes on functions in Assertions.cpp. 35575 35576 * JavaScriptCore.xcodeproj/project.pbxproj: 35577 35578 2008-09-09 Mark Rowe <mrowe (a] apple.com> 35579 35580 Rubber-stamped by Oliver Hunt. 35581 35582 Fix builds using the "debug" variant. 35583 35584 This reverts r36130 and tweaks Identifier to export the same symbols for Debug 35585 and Release configurations. 35586 35587 * Configurations/JavaScriptCore.xcconfig: 35588 * DerivedSources.make: 35589 * JavaScriptCore.Debug.exp: Removed. 35590 * JavaScriptCore.base.exp: Removed. 35591 * JavaScriptCore.exp: Added. 35592 * JavaScriptCore.xcodeproj/project.pbxproj: 35593 * kjs/identifier.cpp: 35594 (JSC::Identifier::addSlowCase): #ifdef the call to checkSameIdentifierTable so that 35595 there is no overhead in Release builds. 35596 (JSC::Identifier::checkSameIdentifierTable): Add empty functions for Release builds. 35597 * kjs/identifier.h: 35598 (JSC::Identifier::add): #ifdef the calls to checkSameIdentifierTable so that there is 35599 no overhead in Release builds, and remove the inline definitions of checkSameIdentifierTable. 35600 35601 2008-09-09 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 35602 35603 Reviewed by Maciej Stachowiak. 35604 35605 Clean up WREC a bit to bring it closer to our coding style guidelines. 35606 35607 * wrec/WREC.cpp: 35608 (JSC::): 35609 (JSC::getCharacterClass_newline): 35610 (JSC::getCharacterClass_d): 35611 (JSC::getCharacterClass_s): 35612 (JSC::getCharacterClass_w): 35613 (JSC::getCharacterClass_D): 35614 (JSC::getCharacterClass_S): 35615 (JSC::getCharacterClass_W): 35616 (JSC::CharacterClassConstructor::append): 35617 (JSC::WRECGenerator::generateNonGreedyQuantifier): 35618 (JSC::WRECGenerator::generateGreedyQuantifier): 35619 (JSC::WRECGenerator::generateCharacterClassInverted): 35620 (JSC::WRECParser::parseQuantifier): 35621 (JSC::WRECParser::parsePatternCharacterQualifier): 35622 (JSC::WRECParser::parseCharacterClassQuantifier): 35623 (JSC::WRECParser::parseBackreferenceQuantifier): 35624 * wrec/WREC.h: 35625 (JSC::Quantifier::): 35626 (JSC::Quantifier::Quantifier): 35627 35628 2008-09-09 Jungshik Shin <jungshik.shin (a] gmail.com> 35629 35630 Reviewed by Alexey Proskuryakov. 35631 35632 Try MIME charset names before trying IANA names 35633 ( https://bugs.webkit.org/show_bug.cgi?id=17537 ) 35634 35635 * wtf/StringExtras.h: (strcasecmp): Added. 35636 35637 2008-09-09 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 35638 35639 Reviewed by Mark Rowe. 35640 35641 Bug 20719: REGRESSION (r36135-36244): Hangs, then crashes after several seconds 35642 <https://bugs.webkit.org/show_bug.cgi?id=20719> 35643 <rdar://problem/6205787> 35644 35645 Fix a typo in the case-insensitive matching of character patterns. 35646 35647 * wrec/WREC.cpp: 35648 (JSC::WRECGenerator::generatePatternCharacter): 35649 35650 2008-09-09 Maciej Stachowiak <mjs (a] apple.com> 35651 35652 Reviewed by Sam Weinig. 35653 35654 - allow polymorphic inline cache to handle Math object functions and possibly other similar things 35655 35656 1.012x speedup on SunSpider. 35657 35658 * kjs/MathObject.cpp: 35659 (JSC::MathObject::getOwnPropertySlot): 35660 * kjs/lookup.cpp: 35661 (JSC::setUpStaticFunctionSlot): 35662 * kjs/lookup.h: 35663 (JSC::getStaticPropertySlot): 35664 35665 2008-09-08 Sam Weinig <sam (a] webkit.org> 35666 35667 Reviewed by Maciej Stachowiak and Oliver Hunt. 35668 35669 Split storage of properties out of the PropertyMap and into the JSObject 35670 to allow sharing PropertyMap on the StructureID. In order to get this 35671 function correctly, the StructureID's transition mappings were changed to 35672 transition based on property name and attribute pairs, instead of just 35673 property name. 35674 35675 - Removes the single property optimization now that the PropertyMap is shared. 35676 This will be replaced by in-lining some values on the JSObject. 35677 35678 This is a wash on Sunspider and a 6.7% win on the v8 test suite. 35679 35680 * JavaScriptCore.base.exp: 35681 * VM/CTI.cpp: 35682 (JSC::CTI::privateCompileGetByIdSelf): Get the storage directly off the JSObject. 35683 (JSC::CTI::privateCompileGetByIdProto): Ditto. 35684 (JSC::CTI::privateCompileGetByIdChain): Ditto. 35685 (JSC::CTI::privateCompilePutByIdReplace): Ditto. 35686 * kjs/JSObject.cpp: 35687 (JSC::JSObject::mark): Mark the PropertyStorage. 35688 (JSC::JSObject::put): Update to get the propertyMap of the StructureID. 35689 (JSC::JSObject::deleteProperty): Ditto. 35690 (JSC::JSObject::defineGetter): Return early if the property is already a getter/setter. 35691 (JSC::JSObject::defineSetter): Ditto. 35692 (JSC::JSObject::getPropertyAttributes): Update to get the propertyMap of the StructureID 35693 (JSC::JSObject::getPropertyNames): Ditto. 35694 (JSC::JSObject::removeDirect): Ditto. 35695 * kjs/JSObject.h: Remove PropertyMap and add PropertyStorage. 35696 (JSC::JSObject::propertyStorage): return the PropertyStorage. 35697 (JSC::JSObject::getDirect): Update to get the propertyMap of the StructureID. 35698 (JSC::JSObject::getDirectLocation): Ditto. 35699 (JSC::JSObject::offsetForLocation): Compute location directly. 35700 (JSC::JSObject::hasCustomProperties): Update to get the propertyMap of the StructureID. 35701 (JSC::JSObject::hasGetterSetterProperties): Ditto. 35702 (JSC::JSObject::getDirectOffset): Get by indexing into PropertyStorage. 35703 (JSC::JSObject::putDirectOffset): Put by indexing into PropertyStorage. 35704 (JSC::JSObject::getOwnPropertySlotForWrite): Update to get the propertyMap of the StructureID. 35705 (JSC::JSObject::getOwnPropertySlot): Ditto. 35706 (JSC::JSObject::putDirect): Move putting into the StructureID unless the property already exists. 35707 * kjs/PropertyMap.cpp: Use the propertyStorage as the storage for the JSValues. 35708 (JSC::PropertyMap::checkConsistency): 35709 (JSC::PropertyMap::operator=): 35710 (JSC::PropertyMap::~PropertyMap): 35711 (JSC::PropertyMap::get): 35712 (JSC::PropertyMap::getLocation): 35713 (JSC::PropertyMap::put): 35714 (JSC::PropertyMap::getOffset): 35715 (JSC::PropertyMap::insert): 35716 (JSC::PropertyMap::expand): 35717 (JSC::PropertyMap::rehash): 35718 (JSC::PropertyMap::createTable): 35719 (JSC::PropertyMap::resizePropertyStorage): Resize the storage to match the size of the map 35720 (JSC::PropertyMap::remove): 35721 (JSC::PropertyMap::getEnumerablePropertyNames): 35722 * kjs/PropertyMap.h: 35723 (JSC::PropertyMapEntry::PropertyMapEntry): 35724 (JSC::PropertyMap::isEmpty): 35725 (JSC::PropertyMap::size): 35726 (JSC::PropertyMap::makingCount): 35727 (JSC::PropertyMap::PropertyMap): 35728 35729 * kjs/StructureID.cpp: 35730 (JSC::StructureID::addPropertyTransition): Transitions now are based off the property name 35731 and attributes. 35732 (JSC::StructureID::toDictionaryTransition): Copy the map. 35733 (JSC::StructureID::changePrototypeTransition): Copy the map. 35734 (JSC::StructureID::getterSetterTransition): Copy the map. 35735 (JSC::StructureID::~StructureID): 35736 * kjs/StructureID.h: 35737 (JSC::TransitionTableHash::hash): Custom hash for transition map. 35738 (JSC::TransitionTableHash::equal): Ditto. 35739 (JSC::TransitionTableHashTraits::emptyValue): Custom traits for transition map 35740 (JSC::TransitionTableHashTraits::constructDeletedValue): Ditto. 35741 (JSC::TransitionTableHashTraits::isDeletedValue): Ditto. 35742 (JSC::StructureID::propertyMap): Added. 35743 35744 2008-09-08 Oliver Hunt <oliver (a] apple.com> 35745 35746 Reviewed by Mark Rowe. 35747 35748 Bug 20694: Slow Script error pops up when running Dromaeo tests 35749 35750 Correct error in timeout logic where execution tick count would 35751 be reset to incorrect value due to incorrect offset and indirection. 35752 Codegen for the slow script dialog was factored out into a separate 35753 method (emitSlowScriptCheck) rather than having multiple copies of 35754 the same code. Also added calls to generate slow script checks 35755 for loop_if_less and loop_if_true opcodes. 35756 35757 * VM/CTI.cpp: 35758 (JSC::CTI::emitSlowScriptCheck): 35759 (JSC::CTI::privateCompileMainPass): 35760 (JSC::CTI::privateCompileSlowCases): 35761 * VM/CTI.h: 35762 35763 2008-09-08 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 35764 35765 Reviewed by Maciej Stachowiak. 35766 35767 Remove references to the removed WRECompiler class. 35768 35769 * VM/Machine.h: 35770 * wrec/WREC.h: 35771 35772 2008-09-08 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 35773 35774 Rubber-stamped by Mark Rowe. 35775 35776 Fix the build with CTI enabled but WREC disabled. 35777 35778 * VM/CTI.cpp: 35779 * VM/CTI.h: 35780 35781 2008-09-08 Dan Bernstein <mitz (a] apple.com> 35782 35783 - build fix 35784 35785 * kjs/nodes.h: 35786 (JSC::StatementNode::): 35787 (JSC::BlockNode::): 35788 35789 2008-09-08 Kevin McCullough <kmccullough (a] apple.com> 35790 35791 Reviewed by Geoff. 35792 35793 <rdar://problem/6134407> Breakpoints in for loops, while loops or 35794 conditions without curly braces don't break. (19306) 35795 -Statement Lists already emit debug hooks but conditionals without 35796 brackets are not lists. 35797 35798 * kjs/nodes.cpp: 35799 (KJS::IfNode::emitCode): 35800 (KJS::IfElseNode::emitCode): 35801 (KJS::DoWhileNode::emitCode): 35802 (KJS::WhileNode::emitCode): 35803 (KJS::ForNode::emitCode): 35804 (KJS::ForInNode::emitCode): 35805 * kjs/nodes.h: 35806 (KJS::StatementNode::): 35807 (KJS::BlockNode::): 35808 35809 2008-09-08 Maciej Stachowiak <mjs (a] apple.com> 35810 35811 Reviewed by Anders Carlsson. 35812 35813 - Cache the code generated for eval to speed up SunSpider and web sites 35814 https://bugs.webkit.org/show_bug.cgi?id=20718 35815 35816 1.052x on SunSpider 35817 2.29x on date-format-tofte 35818 35819 Lots of real sites seem to get many hits on this cache as well, 35820 including GMail, Google Spreadsheets, Slate and Digg (the last of 35821 these gets over 100 hits on initial page load). 35822 35823 * VM/CodeBlock.h: 35824 (JSC::EvalCodeCache::get): 35825 * VM/Machine.cpp: 35826 (JSC::Machine::callEval): 35827 (JSC::Machine::privateExecute): 35828 (JSC::Machine::cti_op_call_eval): 35829 * VM/Machine.h: 35830 35831 2008-09-07 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 35832 35833 Reviewed by Oliver Hunt. 35834 35835 Bug 20711: Change KJS prefix on preprocessor macros to JSC 35836 <https://bugs.webkit.org/show_bug.cgi?id=20711> 35837 35838 * kjs/CommonIdentifiers.cpp: 35839 (JSC::CommonIdentifiers::CommonIdentifiers): 35840 * kjs/CommonIdentifiers.h: 35841 * kjs/PropertySlot.h: 35842 (JSC::PropertySlot::getValue): 35843 (JSC::PropertySlot::putValue): 35844 (JSC::PropertySlot::setValueSlot): 35845 (JSC::PropertySlot::setValue): 35846 (JSC::PropertySlot::setRegisterSlot): 35847 * kjs/lookup.h: 35848 * kjs/nodes.cpp: 35849 * kjs/nodes.h: 35850 (JSC::Node::): 35851 (JSC::ExpressionNode::): 35852 (JSC::StatementNode::): 35853 (JSC::NullNode::): 35854 (JSC::BooleanNode::): 35855 (JSC::NumberNode::): 35856 (JSC::ImmediateNumberNode::): 35857 (JSC::StringNode::): 35858 (JSC::RegExpNode::): 35859 (JSC::ThisNode::): 35860 (JSC::ResolveNode::): 35861 (JSC::ElementNode::): 35862 (JSC::ArrayNode::): 35863 (JSC::PropertyNode::): 35864 (JSC::PropertyListNode::): 35865 (JSC::ObjectLiteralNode::): 35866 (JSC::BracketAccessorNode::): 35867 (JSC::DotAccessorNode::): 35868 (JSC::ArgumentListNode::): 35869 (JSC::ArgumentsNode::): 35870 (JSC::NewExprNode::): 35871 (JSC::EvalFunctionCallNode::): 35872 (JSC::FunctionCallValueNode::): 35873 (JSC::FunctionCallResolveNode::): 35874 (JSC::FunctionCallBracketNode::): 35875 (JSC::FunctionCallDotNode::): 35876 (JSC::PrePostResolveNode::): 35877 (JSC::PostfixResolveNode::): 35878 (JSC::PostfixBracketNode::): 35879 (JSC::PostfixDotNode::): 35880 (JSC::PostfixErrorNode::): 35881 (JSC::DeleteResolveNode::): 35882 (JSC::DeleteBracketNode::): 35883 (JSC::DeleteDotNode::): 35884 (JSC::DeleteValueNode::): 35885 (JSC::VoidNode::): 35886 (JSC::TypeOfResolveNode::): 35887 (JSC::TypeOfValueNode::): 35888 (JSC::PrefixResolveNode::): 35889 (JSC::PrefixBracketNode::): 35890 (JSC::PrefixDotNode::): 35891 (JSC::PrefixErrorNode::): 35892 (JSC::UnaryPlusNode::): 35893 (JSC::NegateNode::): 35894 (JSC::BitwiseNotNode::): 35895 (JSC::LogicalNotNode::): 35896 (JSC::MultNode::): 35897 (JSC::DivNode::): 35898 (JSC::ModNode::): 35899 (JSC::AddNode::): 35900 (JSC::SubNode::): 35901 (JSC::LeftShiftNode::): 35902 (JSC::RightShiftNode::): 35903 (JSC::UnsignedRightShiftNode::): 35904 (JSC::LessNode::): 35905 (JSC::GreaterNode::): 35906 (JSC::LessEqNode::): 35907 (JSC::GreaterEqNode::): 35908 (JSC::ThrowableBinaryOpNode::): 35909 (JSC::InstanceOfNode::): 35910 (JSC::InNode::): 35911 (JSC::EqualNode::): 35912 (JSC::NotEqualNode::): 35913 (JSC::StrictEqualNode::): 35914 (JSC::NotStrictEqualNode::): 35915 (JSC::BitAndNode::): 35916 (JSC::BitOrNode::): 35917 (JSC::BitXOrNode::): 35918 (JSC::LogicalOpNode::): 35919 (JSC::ConditionalNode::): 35920 (JSC::ReadModifyResolveNode::): 35921 (JSC::AssignResolveNode::): 35922 (JSC::ReadModifyBracketNode::): 35923 (JSC::AssignBracketNode::): 35924 (JSC::AssignDotNode::): 35925 (JSC::ReadModifyDotNode::): 35926 (JSC::AssignErrorNode::): 35927 (JSC::CommaNode::): 35928 (JSC::VarDeclCommaNode::): 35929 (JSC::ConstDeclNode::): 35930 (JSC::ConstStatementNode::): 35931 (JSC::EmptyStatementNode::): 35932 (JSC::DebuggerStatementNode::): 35933 (JSC::ExprStatementNode::): 35934 (JSC::VarStatementNode::): 35935 (JSC::IfNode::): 35936 (JSC::IfElseNode::): 35937 (JSC::DoWhileNode::): 35938 (JSC::WhileNode::): 35939 (JSC::ForNode::): 35940 (JSC::ContinueNode::): 35941 (JSC::BreakNode::): 35942 (JSC::ReturnNode::): 35943 (JSC::WithNode::): 35944 (JSC::LabelNode::): 35945 (JSC::ThrowNode::): 35946 (JSC::TryNode::): 35947 (JSC::ParameterNode::): 35948 (JSC::ScopeNode::): 35949 (JSC::ProgramNode::): 35950 (JSC::EvalNode::): 35951 (JSC::FunctionBodyNode::): 35952 (JSC::FuncExprNode::): 35953 (JSC::FuncDeclNode::): 35954 (JSC::CaseClauseNode::): 35955 (JSC::ClauseListNode::): 35956 (JSC::CaseBlockNode::): 35957 (JSC::SwitchNode::): 35958 35959 2008-09-07 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 35960 35961 Reviewed by Maciej Stachowiak. 35962 35963 Bug 20704: Replace the KJS namespace 35964 <https://bugs.webkit.org/show_bug.cgi?id=20704> 35965 35966 Rename the KJS namespace to JSC. There are still some uses of KJS in 35967 preprocessor macros and comments, but these will also be changed some 35968 time in the near future. 35969 35970 * API/APICast.h: 35971 (toJS): 35972 (toRef): 35973 (toGlobalRef): 35974 * API/JSBase.cpp: 35975 * API/JSCallbackConstructor.cpp: 35976 * API/JSCallbackConstructor.h: 35977 * API/JSCallbackFunction.cpp: 35978 * API/JSCallbackFunction.h: 35979 * API/JSCallbackObject.cpp: 35980 * API/JSCallbackObject.h: 35981 * API/JSCallbackObjectFunctions.h: 35982 * API/JSClassRef.cpp: 35983 (OpaqueJSClass::staticValues): 35984 (OpaqueJSClass::staticFunctions): 35985 * API/JSClassRef.h: 35986 * API/JSContextRef.cpp: 35987 * API/JSObjectRef.cpp: 35988 * API/JSProfilerPrivate.cpp: 35989 * API/JSStringRef.cpp: 35990 * API/JSValueRef.cpp: 35991 (JSValueGetType): 35992 * API/OpaqueJSString.cpp: 35993 * API/OpaqueJSString.h: 35994 * JavaScriptCore.Debug.exp: 35995 * JavaScriptCore.base.exp: 35996 * VM/CTI.cpp: 35997 (JSC::): 35998 * VM/CTI.h: 35999 * VM/CodeBlock.cpp: 36000 * VM/CodeBlock.h: 36001 * VM/CodeGenerator.cpp: 36002 * VM/CodeGenerator.h: 36003 * VM/ExceptionHelpers.cpp: 36004 * VM/ExceptionHelpers.h: 36005 * VM/Instruction.h: 36006 * VM/JSPropertyNameIterator.cpp: 36007 * VM/JSPropertyNameIterator.h: 36008 * VM/LabelID.h: 36009 * VM/Machine.cpp: 36010 * VM/Machine.h: 36011 * VM/Opcode.cpp: 36012 * VM/Opcode.h: 36013 * VM/Register.h: 36014 (WTF::): 36015 * VM/RegisterFile.cpp: 36016 * VM/RegisterFile.h: 36017 * VM/RegisterID.h: 36018 (WTF::): 36019 * VM/SamplingTool.cpp: 36020 * VM/SamplingTool.h: 36021 * VM/SegmentedVector.h: 36022 * kjs/ArgList.cpp: 36023 * kjs/ArgList.h: 36024 * kjs/Arguments.cpp: 36025 * kjs/Arguments.h: 36026 * kjs/ArrayConstructor.cpp: 36027 * kjs/ArrayConstructor.h: 36028 * kjs/ArrayPrototype.cpp: 36029 * kjs/ArrayPrototype.h: 36030 * kjs/BatchedTransitionOptimizer.h: 36031 * kjs/BooleanConstructor.cpp: 36032 * kjs/BooleanConstructor.h: 36033 * kjs/BooleanObject.cpp: 36034 * kjs/BooleanObject.h: 36035 * kjs/BooleanPrototype.cpp: 36036 * kjs/BooleanPrototype.h: 36037 * kjs/CallData.cpp: 36038 * kjs/CallData.h: 36039 * kjs/ClassInfo.h: 36040 * kjs/CommonIdentifiers.cpp: 36041 * kjs/CommonIdentifiers.h: 36042 * kjs/ConstructData.cpp: 36043 * kjs/ConstructData.h: 36044 * kjs/DateConstructor.cpp: 36045 * kjs/DateConstructor.h: 36046 * kjs/DateInstance.cpp: 36047 (JSC::DateInstance::msToGregorianDateTime): 36048 * kjs/DateInstance.h: 36049 * kjs/DateMath.cpp: 36050 * kjs/DateMath.h: 36051 * kjs/DatePrototype.cpp: 36052 * kjs/DatePrototype.h: 36053 * kjs/DebuggerCallFrame.cpp: 36054 * kjs/DebuggerCallFrame.h: 36055 * kjs/Error.cpp: 36056 * kjs/Error.h: 36057 * kjs/ErrorConstructor.cpp: 36058 * kjs/ErrorConstructor.h: 36059 * kjs/ErrorInstance.cpp: 36060 * kjs/ErrorInstance.h: 36061 * kjs/ErrorPrototype.cpp: 36062 * kjs/ErrorPrototype.h: 36063 * kjs/ExecState.cpp: 36064 * kjs/ExecState.h: 36065 * kjs/FunctionConstructor.cpp: 36066 * kjs/FunctionConstructor.h: 36067 * kjs/FunctionPrototype.cpp: 36068 * kjs/FunctionPrototype.h: 36069 * kjs/GetterSetter.cpp: 36070 * kjs/GetterSetter.h: 36071 * kjs/GlobalEvalFunction.cpp: 36072 * kjs/GlobalEvalFunction.h: 36073 * kjs/IndexToNameMap.cpp: 36074 * kjs/IndexToNameMap.h: 36075 * kjs/InitializeThreading.cpp: 36076 * kjs/InitializeThreading.h: 36077 * kjs/InternalFunction.cpp: 36078 * kjs/InternalFunction.h: 36079 (JSC::InternalFunction::InternalFunction): 36080 * kjs/JSActivation.cpp: 36081 * kjs/JSActivation.h: 36082 * kjs/JSArray.cpp: 36083 * kjs/JSArray.h: 36084 * kjs/JSCell.cpp: 36085 * kjs/JSCell.h: 36086 * kjs/JSFunction.cpp: 36087 * kjs/JSFunction.h: 36088 (JSC::JSFunction::JSFunction): 36089 * kjs/JSGlobalData.cpp: 36090 (JSC::JSGlobalData::JSGlobalData): 36091 * kjs/JSGlobalData.h: 36092 * kjs/JSGlobalObject.cpp: 36093 * kjs/JSGlobalObject.h: 36094 * kjs/JSGlobalObjectFunctions.cpp: 36095 * kjs/JSGlobalObjectFunctions.h: 36096 * kjs/JSImmediate.cpp: 36097 * kjs/JSImmediate.h: 36098 * kjs/JSLock.cpp: 36099 * kjs/JSLock.h: 36100 * kjs/JSNotAnObject.cpp: 36101 * kjs/JSNotAnObject.h: 36102 * kjs/JSNumberCell.cpp: 36103 * kjs/JSNumberCell.h: 36104 * kjs/JSObject.cpp: 36105 * kjs/JSObject.h: 36106 * kjs/JSStaticScopeObject.cpp: 36107 * kjs/JSStaticScopeObject.h: 36108 * kjs/JSString.cpp: 36109 * kjs/JSString.h: 36110 * kjs/JSType.h: 36111 * kjs/JSValue.cpp: 36112 * kjs/JSValue.h: 36113 * kjs/JSVariableObject.cpp: 36114 * kjs/JSVariableObject.h: 36115 * kjs/JSWrapperObject.cpp: 36116 * kjs/JSWrapperObject.h: 36117 * kjs/LabelStack.cpp: 36118 * kjs/LabelStack.h: 36119 * kjs/MathObject.cpp: 36120 * kjs/MathObject.h: 36121 * kjs/NativeErrorConstructor.cpp: 36122 * kjs/NativeErrorConstructor.h: 36123 * kjs/NativeErrorPrototype.cpp: 36124 * kjs/NativeErrorPrototype.h: 36125 * kjs/NodeInfo.h: 36126 * kjs/NumberConstructor.cpp: 36127 * kjs/NumberConstructor.h: 36128 * kjs/NumberObject.cpp: 36129 * kjs/NumberObject.h: 36130 * kjs/NumberPrototype.cpp: 36131 * kjs/NumberPrototype.h: 36132 * kjs/ObjectConstructor.cpp: 36133 * kjs/ObjectConstructor.h: 36134 * kjs/ObjectPrototype.cpp: 36135 * kjs/ObjectPrototype.h: 36136 * kjs/Parser.cpp: 36137 * kjs/Parser.h: 36138 * kjs/PropertyMap.cpp: 36139 (JSC::PropertyMapStatisticsExitLogger::~PropertyMapStatisticsExitLogger): 36140 * kjs/PropertyMap.h: 36141 * kjs/PropertyNameArray.cpp: 36142 * kjs/PropertyNameArray.h: 36143 * kjs/PropertySlot.cpp: 36144 * kjs/PropertySlot.h: 36145 * kjs/PrototypeFunction.cpp: 36146 * kjs/PrototypeFunction.h: 36147 * kjs/PutPropertySlot.h: 36148 * kjs/RegExpConstructor.cpp: 36149 * kjs/RegExpConstructor.h: 36150 * kjs/RegExpObject.cpp: 36151 * kjs/RegExpObject.h: 36152 * kjs/RegExpPrototype.cpp: 36153 * kjs/RegExpPrototype.h: 36154 * kjs/ScopeChain.cpp: 36155 * kjs/ScopeChain.h: 36156 * kjs/ScopeChainMark.h: 36157 * kjs/Shell.cpp: 36158 (jscmain): 36159 * kjs/SmallStrings.cpp: 36160 * kjs/SmallStrings.h: 36161 * kjs/SourceProvider.h: 36162 * kjs/SourceRange.h: 36163 * kjs/StringConstructor.cpp: 36164 * kjs/StringConstructor.h: 36165 * kjs/StringObject.cpp: 36166 * kjs/StringObject.h: 36167 * kjs/StringObjectThatMasqueradesAsUndefined.h: 36168 * kjs/StringPrototype.cpp: 36169 * kjs/StringPrototype.h: 36170 * kjs/StructureID.cpp: 36171 * kjs/StructureID.h: 36172 * kjs/SymbolTable.h: 36173 * kjs/collector.cpp: 36174 * kjs/collector.h: 36175 * kjs/completion.h: 36176 * kjs/create_hash_table: 36177 * kjs/debugger.cpp: 36178 * kjs/debugger.h: 36179 * kjs/dtoa.cpp: 36180 * kjs/dtoa.h: 36181 * kjs/grammar.y: 36182 * kjs/identifier.cpp: 36183 * kjs/identifier.h: 36184 (JSC::Identifier::equal): 36185 * kjs/interpreter.cpp: 36186 * kjs/interpreter.h: 36187 * kjs/lexer.cpp: 36188 (JSC::Lexer::Lexer): 36189 (JSC::Lexer::clear): 36190 (JSC::Lexer::makeIdentifier): 36191 * kjs/lexer.h: 36192 * kjs/lookup.cpp: 36193 * kjs/lookup.h: 36194 * kjs/nodes.cpp: 36195 * kjs/nodes.h: 36196 * kjs/nodes2string.cpp: 36197 * kjs/operations.cpp: 36198 * kjs/operations.h: 36199 * kjs/protect.h: 36200 * kjs/regexp.cpp: 36201 * kjs/regexp.h: 36202 * kjs/ustring.cpp: 36203 * kjs/ustring.h: 36204 (JSC::operator!=): 36205 (JSC::IdentifierRepHash::hash): 36206 (WTF::): 36207 * masm/MacroAssembler.h: 36208 * masm/MacroAssemblerWin.cpp: 36209 * masm/X86Assembler.h: 36210 * pcre/pcre_exec.cpp: 36211 * profiler/CallIdentifier.h: 36212 (WTF::): 36213 * profiler/HeavyProfile.cpp: 36214 * profiler/HeavyProfile.h: 36215 * profiler/Profile.cpp: 36216 * profiler/Profile.h: 36217 * profiler/ProfileGenerator.cpp: 36218 * profiler/ProfileGenerator.h: 36219 * profiler/ProfileNode.cpp: 36220 * profiler/ProfileNode.h: 36221 * profiler/Profiler.cpp: 36222 * profiler/Profiler.h: 36223 * profiler/TreeProfile.cpp: 36224 * profiler/TreeProfile.h: 36225 * wrec/WREC.cpp: 36226 * wrec/WREC.h: 36227 * wtf/AVLTree.h: 36228 36229 2008-09-07 Maciej Stachowiak <mjs (a] apple.com> 36230 36231 Reviewed by Dan Bernstein. 36232 36233 - rename IA32MacroAssembler class to X86Assembler 36234 36235 We otherwise call the platform X86, and also, I don't see any macros. 36236 36237 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 36238 * JavaScriptCore.xcodeproj/project.pbxproj: 36239 * masm/IA32MacroAsm.h: Removed. 36240 * masm/MacroAssembler.h: 36241 (KJS::MacroAssembler::MacroAssembler): 36242 * masm/MacroAssemblerWin.cpp: 36243 (KJS::MacroAssembler::emitRestoreArgumentReference): 36244 * masm/X86Assembler.h: Copied from masm/IA32MacroAsm.h. 36245 (KJS::X86Assembler::X86Assembler): 36246 * wrec/WREC.cpp: 36247 (KJS::WRECGenerator::generateNonGreedyQuantifier): 36248 (KJS::WRECGenerator::generateGreedyQuantifier): 36249 (KJS::WRECGenerator::generateParentheses): 36250 (KJS::WRECGenerator::generateBackreference): 36251 (KJS::WRECGenerator::gernerateDisjunction): 36252 * wrec/WREC.h: 36253 36254 2008-09-07 Cameron Zwarich <cwzwarich (a] webkit.org> 36255 36256 Not reviewed. 36257 36258 Visual C++ seems to have some odd casting rules, so just convert the 36259 offending cast back to a C-style cast for now. 36260 36261 * kjs/collector.cpp: 36262 (KJS::otherThreadStackPointer): 36263 36264 2008-09-07 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 36265 36266 Reviewed by Mark Rowe. 36267 36268 Attempt to fix the Windows build by using a const_cast to cast regs.Esp 36269 to a uintptr_t instead of a reinterpret_cast. 36270 36271 * kjs/collector.cpp: 36272 (KJS::otherThreadStackPointer): 36273 36274 2008-09-07 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 36275 36276 Reviewed by Sam Weinig. 36277 36278 Remove C-style casts from kjs/collector.cpp. 36279 36280 * kjs/collector.cpp: 36281 (KJS::Heap::heapAllocate): 36282 (KJS::currentThreadStackBase): 36283 (KJS::Heap::markConservatively): 36284 (KJS::otherThreadStackPointer): 36285 (KJS::Heap::markOtherThreadConservatively): 36286 (KJS::Heap::sweep): 36287 36288 2008-09-07 Mark Rowe <mrowe (a] apple.com> 36289 36290 Build fix for the debug variant. 36291 36292 * DerivedSources.make: Also use the .Debug.exp exports file when building the debug variant. 36293 36294 2008-09-07 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 36295 36296 Reviewed by Timothy Hatcher. 36297 36298 Remove C-style casts from the CTI code. 36299 36300 * VM/CTI.cpp: 36301 (KJS::CTI::emitGetArg): 36302 (KJS::CTI::emitGetPutArg): 36303 (KJS::ctiRepatchCallByReturnAddress): 36304 (KJS::CTI::compileOpCall): 36305 (KJS::CTI::privateCompileMainPass): 36306 (KJS::CTI::privateCompileGetByIdSelf): 36307 (KJS::CTI::privateCompileGetByIdProto): 36308 (KJS::CTI::privateCompileGetByIdChain): 36309 (KJS::CTI::privateCompilePutByIdReplace): 36310 (KJS::CTI::privateArrayLengthTrampoline): 36311 (KJS::CTI::privateStringLengthTrampoline): 36312 36313 === End merge of squirrelfish-extreme === 36314 36315 2008-09-06 Gavin Barraclough <barraclough (a] apple.com> 36316 36317 Reviewed by Sam Weinig. Adapted somewhat by Maciej Stachowiak. 36318 36319 - refactor WREC to share more of the JIT infrastructure with CTI 36320 36321 * VM/CTI.cpp: 36322 (KJS::CTI::emitGetArg): 36323 (KJS::CTI::emitGetPutArg): 36324 (KJS::CTI::emitPutArg): 36325 (KJS::CTI::emitPutArgConstant): 36326 (KJS::CTI::emitPutCTIParam): 36327 (KJS::CTI::emitGetCTIParam): 36328 (KJS::CTI::emitPutToCallFrameHeader): 36329 (KJS::CTI::emitGetFromCallFrameHeader): 36330 (KJS::CTI::emitPutResult): 36331 (KJS::CTI::emitDebugExceptionCheck): 36332 (KJS::CTI::emitJumpSlowCaseIfNotImm): 36333 (KJS::CTI::emitJumpSlowCaseIfNotImms): 36334 (KJS::CTI::emitFastArithDeTagImmediate): 36335 (KJS::CTI::emitFastArithReTagImmediate): 36336 (KJS::CTI::emitFastArithPotentiallyReTagImmediate): 36337 (KJS::CTI::emitFastArithImmToInt): 36338 (KJS::CTI::emitFastArithIntToImmOrSlowCase): 36339 (KJS::CTI::emitFastArithIntToImmNoCheck): 36340 (KJS::CTI::CTI): 36341 (KJS::CTI::compileOpCall): 36342 (KJS::CTI::privateCompileMainPass): 36343 (KJS::CTI::privateCompileSlowCases): 36344 (KJS::CTI::privateCompile): 36345 (KJS::CTI::privateCompileGetByIdSelf): 36346 (KJS::CTI::privateCompileGetByIdProto): 36347 (KJS::CTI::privateCompileGetByIdChain): 36348 (KJS::CTI::privateCompilePutByIdReplace): 36349 (KJS::CTI::privateArrayLengthTrampoline): 36350 (KJS::CTI::privateStringLengthTrampoline): 36351 (KJS::CTI::compileRegExp): 36352 * VM/CTI.h: 36353 (KJS::CallRecord::CallRecord): 36354 (KJS::JmpTable::JmpTable): 36355 (KJS::SlowCaseEntry::SlowCaseEntry): 36356 (KJS::CTI::JSRInfo::JSRInfo): 36357 * kjs/regexp.cpp: 36358 (KJS::RegExp::RegExp): 36359 * wrec/WREC.cpp: 36360 (KJS::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor): 36361 (KJS::GeneratePatternCharacterFunctor::generateAtom): 36362 (KJS::GeneratePatternCharacterFunctor::backtrack): 36363 (KJS::GenerateCharacterClassFunctor::generateAtom): 36364 (KJS::GenerateCharacterClassFunctor::backtrack): 36365 (KJS::GenerateBackreferenceFunctor::generateAtom): 36366 (KJS::GenerateBackreferenceFunctor::backtrack): 36367 (KJS::GenerateParenthesesNonGreedyFunctor::generateAtom): 36368 (KJS::GenerateParenthesesNonGreedyFunctor::backtrack): 36369 (KJS::WRECGenerate::generateBacktrack1): 36370 (KJS::WRECGenerate::generateBacktrackBackreference): 36371 (KJS::WRECGenerate::generateBackreferenceQuantifier): 36372 (KJS::WRECGenerate::generateNonGreedyQuantifier): 36373 (KJS::WRECGenerate::generateGreedyQuantifier): 36374 (KJS::WRECGenerate::generatePatternCharacter): 36375 (KJS::WRECGenerate::generateCharacterClassInvertedRange): 36376 (KJS::WRECGenerate::generateCharacterClassInverted): 36377 (KJS::WRECGenerate::generateCharacterClass): 36378 (KJS::WRECGenerate::generateParentheses): 36379 (KJS::WRECGenerate::generateParenthesesNonGreedy): 36380 (KJS::WRECGenerate::gererateParenthesesResetTrampoline): 36381 (KJS::WRECGenerate::generateAssertionBOL): 36382 (KJS::WRECGenerate::generateAssertionEOL): 36383 (KJS::WRECGenerate::generateAssertionWordBoundary): 36384 (KJS::WRECGenerate::generateBackreference): 36385 (KJS::WRECGenerate::gernerateDisjunction): 36386 (KJS::WRECGenerate::terminateDisjunction): 36387 (KJS::WRECParser::parseGreedyQuantifier): 36388 (KJS::WRECParser::parseQuantifier): 36389 (KJS::WRECParser::parsePatternCharacterQualifier): 36390 (KJS::WRECParser::parseCharacterClassQuantifier): 36391 (KJS::WRECParser::parseBackreferenceQuantifier): 36392 (KJS::WRECParser::parseParentheses): 36393 (KJS::WRECParser::parseCharacterClass): 36394 (KJS::WRECParser::parseOctalEscape): 36395 (KJS::WRECParser::parseEscape): 36396 (KJS::WRECParser::parseTerm): 36397 (KJS::WRECParser::parseDisjunction): 36398 * wrec/WREC.h: 36399 (KJS::WRECGenerate::WRECGenerate): 36400 (KJS::WRECParser::): 36401 (KJS::WRECParser::WRECParser): 36402 (KJS::WRECParser::parseAlternative): 36403 (KJS::WRECParser::isEndOfPattern): 36404 36405 2008-09-06 Oliver Hunt <oliver (a] apple.com> 36406 36407 Reviewed by NOBODY (Build fix). 36408 36409 Fix the sampler build. 36410 36411 * VM/SamplingTool.h: 36412 36413 2008-09-06 Oliver Hunt <oliver (a] apple.com> 36414 36415 Reviewed by Maciej Stachowiak. 36416 36417 Jump through the necessary hoops required to make MSVC cooperate with SFX 36418 36419 We now explicitly declare the calling convention on all cti_op_* cfunctions, 36420 and return int instead of bool where appropriate (despite the cdecl calling 36421 convention seems to state MSVC generates code that returns the result value 36422 through ecx). SFX behaves slightly differently under MSVC, specifically it 36423 stores the base argument address for the cti_op_* functions in the first 36424 argument, and then does the required stack manipulation through that pointer. 36425 This is necessary as MSVC's optimisations assume they have complete control 36426 of the stack, and periodically elide our stack manipulations, or move 36427 values in unexpected ways. MSVC also frequently produces tail calls which may 36428 clobber the first argument, so the MSVC path is slightly less efficient due 36429 to the need to restore it. 36430 36431 * JavaScriptCore.xcodeproj/project.pbxproj: 36432 * VM/CTI.cpp: 36433 (KJS::): 36434 (KJS::CTI::compileOpCall): 36435 (KJS::CTI::privateCompileMainPass): 36436 (KJS::CTI::privateCompileSlowCases): 36437 * VM/CTI.h: 36438 * VM/Machine.cpp: 36439 * VM/Machine.h: 36440 * masm/MacroAssembler.h: 36441 (KJS::MacroAssembler::emitConvertToFastCall): 36442 * masm/MacroAssemblerIA32GCC.cpp: Removed. 36443 For performance reasons we need these no-op functions to be inlined. 36444 36445 * masm/MacroAssemblerWin.cpp: 36446 (KJS::MacroAssembler::emitRestoreArgumentReference): 36447 * wtf/Platform.h: 36448 36449 2008-09-05 Geoffrey Garen <ggaren (a] apple.com> 36450 36451 Reviewed by Maciej Stachowiak, or maybe the other way around. 36452 36453 Added the ability to coalesce JITCode buffer grow operations by first 36454 growing the buffer and then executing unchecked puts to it. 36455 36456 About a 2% speedup on date-format-tofte. 36457 36458 * VM/CTI.cpp: 36459 (KJS::CTI::compileOpCall): 36460 * masm/IA32MacroAsm.h: 36461 (KJS::JITCodeBuffer::ensureSpace): 36462 (KJS::JITCodeBuffer::putByteUnchecked): 36463 (KJS::JITCodeBuffer::putByte): 36464 (KJS::JITCodeBuffer::putShortUnchecked): 36465 (KJS::JITCodeBuffer::putShort): 36466 (KJS::JITCodeBuffer::putIntUnchecked): 36467 (KJS::JITCodeBuffer::putInt): 36468 (KJS::IA32MacroAssembler::emitTestl_i32r): 36469 (KJS::IA32MacroAssembler::emitMovl_mr): 36470 (KJS::IA32MacroAssembler::emitMovl_rm): 36471 (KJS::IA32MacroAssembler::emitMovl_i32m): 36472 (KJS::IA32MacroAssembler::emitUnlinkedJe): 36473 (KJS::IA32MacroAssembler::emitModRm_rr): 36474 (KJS::IA32MacroAssembler::emitModRm_rr_Unchecked): 36475 (KJS::IA32MacroAssembler::emitModRm_rm_Unchecked): 36476 (KJS::IA32MacroAssembler::emitModRm_rm): 36477 (KJS::IA32MacroAssembler::emitModRm_opr): 36478 (KJS::IA32MacroAssembler::emitModRm_opr_Unchecked): 36479 (KJS::IA32MacroAssembler::emitModRm_opm_Unchecked): 36480 36481 2008-09-05 Mark Rowe <mrowe (a] apple.com> 36482 36483 Reviewed by Sam Weinig. 36484 36485 Disable WREC and CTI on platforms that we have not yet had a chance to test with. 36486 36487 * wtf/Platform.h: 36488 36489 2008-09-05 Geoffrey Garen <ggaren (a] apple.com> 36490 36491 Reviewed by Sam Weinig. 36492 36493 Use jo instead of a mask compare when fetching array.length and 36494 string.length. 4% speedup on array.length / string.length torture 36495 test. 36496 36497 * VM/CTI.cpp: 36498 (KJS::CTI::privateArrayLengthTrampoline): 36499 (KJS::CTI::privateStringLengthTrampoline): 36500 36501 2008-09-05 Geoffrey Garen <ggaren (a] apple.com> 36502 36503 Reviewed by Sam Weinig. 36504 36505 Removed a CTI compilation pass by recording labels during bytecode 36506 generation. This is more to reduce complexity than it is to improve 36507 performance. 36508 36509 SunSpider reports no change. 36510 36511 CodeBlock now keeps a "labels" set, which holds the offsets of all the 36512 instructions that can be jumped to. 36513 36514 * VM/CTI.cpp: Nixed a pass. 36515 36516 * VM/CodeBlock.h: Added a "labels" set. 36517 36518 * VM/LabelID.h: No need for a special LableID for holding jump 36519 destinations, since the CodeBlock now knows all jump destinations. 36520 36521 * wtf/HashTraits.h: New hash traits to accomodate putting offset 0 in 36522 the set. 36523 36524 * kjs/nodes.cpp: 36525 (KJS::TryNode::emitCode): Emit a dummy label to record sret targets. 36526 36527 2008-09-05 Mark Rowe <mrowe (a] apple.com> 36528 36529 Reviewed by Oliver Hunt and Gavin Barraclough. 36530 36531 Move the JITCodeBuffer onto Machine and remove the static variables. 36532 36533 * VM/CTI.cpp: Initialize m_jit with the Machine's code buffer. 36534 * VM/Machine.cpp: 36535 (KJS::Machine::Machine): Allocate a JITCodeBuffer. 36536 * VM/Machine.h: 36537 * kjs/RegExpConstructor.cpp: 36538 (KJS::constructRegExp): Pass the ExecState through. 36539 * kjs/RegExpPrototype.cpp: 36540 (KJS::regExpProtoFuncCompile): Ditto. 36541 * kjs/StringPrototype.cpp: 36542 (KJS::stringProtoFuncMatch): Ditto. 36543 (KJS::stringProtoFuncSearch): Ditto. 36544 * kjs/nodes.cpp: 36545 (KJS::RegExpNode::emitCode): Compile the pattern at code generation time 36546 so that we have access to an ExecState. 36547 * kjs/nodes.h: 36548 (KJS::RegExpNode::): 36549 * kjs/nodes2string.cpp: 36550 * kjs/regexp.cpp: 36551 (KJS::RegExp::RegExp): Pass the ExecState through. 36552 (KJS::RegExp::create): Ditto. 36553 * kjs/regexp.h: 36554 * masm/IA32MacroAsm.h: 36555 (KJS::IA32MacroAssembler::IA32MacroAssembler): Reset the JITCodeBuffer when we are 36556 constructed. 36557 * wrec/WREC.cpp: 36558 (KJS::WRECompiler::compile): Retrieve the JITCodeBuffer from the Machine. 36559 * wrec/WREC.h: 36560 36561 2008-09-05 Mark Rowe <mrowe (a] apple.com> 36562 36563 Reviewed by Oliver Hunt and Gavin Barraclough. 36564 36565 Fix the build when CTI is disabled. 36566 36567 * VM/CodeBlock.cpp: 36568 (KJS::CodeBlock::~CodeBlock): 36569 * VM/CodeGenerator.cpp: 36570 (KJS::prepareJumpTableForStringSwitch): 36571 * VM/Machine.cpp: 36572 (KJS::Machine::Machine): 36573 (KJS::Machine::~Machine): 36574 36575 2008-09-05 Gavin Barraclough <barraclough (a] apple.com> 36576 36577 Reviewed by Mark Rowe. 36578 36579 Fix some windows abi issues. 36580 36581 * VM/CTI.cpp: 36582 (KJS::CTI::privateCompileMainPass): 36583 (KJS::CTI::privateCompileSlowCases): 36584 * VM/CTI.h: 36585 (KJS::CallRecord::CallRecord): 36586 (KJS::): 36587 * VM/Machine.cpp: 36588 (KJS::Machine::cti_op_resolve_func): 36589 (KJS::Machine::cti_op_post_inc): 36590 (KJS::Machine::cti_op_resolve_with_base): 36591 (KJS::Machine::cti_op_post_dec): 36592 * VM/Machine.h: 36593 36594 2008-09-05 Mark Rowe <mrowe (a] apple.com> 36595 36596 Reviewed by Sam Weinig. 36597 36598 Fix ecma/FunctionObjects/15.3.5.3.js after I broke it in r93. 36599 36600 * VM/Machine.cpp: 36601 (KJS::Machine::cti_op_call_NotJSFunction): Restore m_callFrame to the correct value after making the native call. 36602 (KJS::Machine::cti_op_construct_NotJSConstruct): Ditto. 36603 36604 2008-09-04 Mark Rowe <mrowe (a] apple.com> 36605 36606 Reviewed by Sam Weinig. 36607 36608 Fix fast/dom/Window/console-functions.html. 36609 36610 The call frame on the ExecState was not being updated on calls into native functions. This meant that functions 36611 such as console.log would use the line number of the last JS function on the call stack. 36612 36613 * VM/Machine.cpp: 36614 (KJS::Machine::cti_op_call_NotJSFunction): Update the ExecState's call frame before making a native function call, 36615 and restore it when the function is done. 36616 (KJS::Machine::cti_op_construct_NotJSConstruct): Ditto. 36617 36618 2008-09-05 Oliver Hunt <oliver (a] apple.com> 36619 36620 Start bringing up SFX on windows. 36621 36622 Reviewed by Mark Rowe and Sam Weinig 36623 36624 Start doing the work to bring up SFX on windows. Initially 36625 just working on WREC, as it does not make any calls so reduces 36626 the amount of code that needs to be corrected. 36627 36628 Start abstracting the CTI JIT codegen engine. 36629 36630 * ChangeLog: 36631 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 36632 * JavaScriptCore.xcodeproj/project.pbxproj: 36633 * VM/CTI.cpp: 36634 * masm/IA32MacroAsm.h: 36635 * masm/MacroAssembler.h: Added. 36636 (KJS::MacroAssembler::MacroAssembler): 36637 * masm/MacroAssemblerIA32GCC.cpp: Added. 36638 (KJS::MacroAssembler::emitConvertToFastCall): 36639 * masm/MacroAssemblerWin.cpp: Added. 36640 (KJS::MacroAssembler::emitConvertToFastCall): 36641 * wrec/WREC.cpp: 36642 (KJS::WRECompiler::parseGreedyQuantifier): 36643 (KJS::WRECompiler::parseCharacterClass): 36644 (KJS::WRECompiler::parseEscape): 36645 (KJS::WRECompiler::compilePattern): 36646 * wrec/WREC.h: 36647 36648 2008-09-04 Gavin Barraclough <barraclough (a] apple.com> 36649 36650 Reviewed by Sam Weinig. 36651 36652 Support for slow scripts (timeout checking). 36653 36654 * VM/CTI.cpp: 36655 (KJS::CTI::privateCompileMainPass): 36656 (KJS::CTI::privateCompile): 36657 * VM/Machine.cpp: 36658 (KJS::slideRegisterWindowForCall): 36659 (KJS::Machine::cti_timeout_check): 36660 (KJS::Machine::cti_vm_throw): 36661 36662 2008-09-04 Sam Weinig <sam (a] webkit.org> 36663 36664 Reviewed by Mark Rowe. 36665 36666 Third round of style cleanup. 36667 36668 * VM/CTI.cpp: 36669 * VM/CTI.h: 36670 * VM/CodeBlock.h: 36671 * VM/Machine.cpp: 36672 * VM/Machine.h: 36673 * kjs/ExecState.h: 36674 36675 2008-09-04 Sam Weinig <sam (a] webkit.org> 36676 36677 Reviewed by Jon Honeycutt. 36678 36679 Second round of style cleanup. 36680 36681 * VM/CTI.cpp: 36682 * VM/CTI.h: 36683 * wrec/WREC.h: 36684 36685 2008-09-04 Sam Weinig <sam (a] webkit.org> 36686 36687 Reviewed by Mark Rowe. 36688 36689 First round of style cleanup. 36690 36691 * VM/CTI.cpp: 36692 * VM/CTI.h: 36693 * masm/IA32MacroAsm.h: 36694 * wrec/WREC.cpp: 36695 * wrec/WREC.h: 36696 36697 2008-09-04 Geoffrey Garen <ggaren (a] apple.com> 36698 36699 Reviewed by Mark Rowe. 36700 36701 Merged http://trac.webkit.org/changeset/36081 to work with CTI. 36702 36703 * VM/Machine.cpp: 36704 (KJS::Machine::tryCtiCacheGetByID): 36705 36706 2008-09-04 Gavin Barraclough <barraclough (a] apple.com> 36707 36708 Reviewed by Sam Weinig. 36709 36710 Enable profiling in CTI. 36711 36712 * VM/CTI.h: 36713 (KJS::): 36714 (KJS::CTI::execute): 36715 * VM/Machine.cpp: 36716 (KJS::Machine::cti_op_call_JSFunction): 36717 (KJS::Machine::cti_op_call_NotJSFunction): 36718 (KJS::Machine::cti_op_ret): 36719 (KJS::Machine::cti_op_construct_JSConstruct): 36720 (KJS::Machine::cti_op_construct_NotJSConstruct): 36721 36722 2008-09-04 Victor Hernandez <vhernandez (a] apple.com> 36723 36724 Reviewed by Geoffrey Garen. 36725 36726 Fixed an #if to support using WREC without CTI. 36727 36728 * kjs/regexp.cpp: 36729 (KJS::RegExp::match): 36730 36731 2008-09-04 Gavin Barraclough <barraclough (a] apple.com> 36732 36733 Reviewed by Oliver Hunt. 36734 36735 The array/string length trampolines are owned by the Machine, not the codeblock that compiled them. 36736 36737 * VM/CTI.cpp: 36738 (KJS::CTI::privateArrayLengthTrampoline): 36739 (KJS::CTI::privateStringLengthTrampoline): 36740 * VM/Machine.cpp: 36741 (KJS::Machine::~Machine): 36742 * VM/Machine.h: 36743 36744 2008-09-04 Mark Rowe <mrowe (a] apple.com> 36745 36746 Reviewed by Gavin Barraclough and Sam Weinig. 36747 36748 Fix a crash on launch of jsc when GuardMalloc is enabled. 36749 36750 * kjs/ScopeChain.h: 36751 (KJS::ScopeChain::ScopeChain): Initialize m_node to 0 when we have no valid scope chain. 36752 (KJS::ScopeChain::~ScopeChain): Null-check m_node before calling deref. 36753 36754 2008-09-03 Oliver Hunt <oliver (a] apple.com> 36755 36756 Reviewed by Gavin Barraclough and Geoff Garen. 36757 36758 Fix inspector and fast array access so that it bounds 36759 checks correctly. 36760 36761 * VM/CTI.cpp: 36762 (KJS::CTI::privateCompile_pass2_Main): 36763 * masm/IA32MacroAsm.h: 36764 (KJS::IA32MacroAssembler::): 36765 (KJS::IA32MacroAssembler::emitUnlinkedJb): 36766 (KJS::IA32MacroAssembler::emitUnlinkedJbe): 36767 36768 2008-09-03 Mark Rowe <mrowe (a] apple.com> 36769 36770 Move the assertion after the InitializeAndReturn block, as 36771 that is used even when CTI is enabled. 36772 36773 * VM/Machine.cpp: 36774 (KJS::Machine::privateExecute): 36775 36776 2008-09-03 Mark Rowe <mrowe (a] apple.com> 36777 36778 Reviewed by Sam Weinig. 36779 36780 Replace calls to exit with ASSERT_WITH_MESSAGE or ASSERT_NOT_REACHED. 36781 36782 * VM/CTI.cpp: 36783 (KJS::CTI::privateCompile_pass1_Scan): 36784 (KJS::CTI::privateCompile_pass2_Main): 36785 (KJS::CTI::privateCompile_pass4_SlowCases): 36786 * VM/Machine.cpp: 36787 (KJS::Machine::privateExecute): 36788 (KJS::Machine::cti_vm_throw): 36789 36790 2008-09-03 Mark Rowe <mrowe (a] apple.com> 36791 36792 Reviewed by Sam Weinig. 36793 36794 Tweak JavaScriptCore to compile on non-x86 platforms. This is achieved 36795 by wrapping more code with ENABLE(CTI), ENABLE(WREC), and PLATFORM(X86) 36796 #if's. 36797 36798 * VM/CTI.cpp: 36799 * VM/CTI.h: 36800 * VM/CodeBlock.cpp: 36801 (KJS::CodeBlock::printStructureIDs): Use %td as the format specifier for 36802 printing a ptrdiff_t. 36803 * VM/Machine.cpp: 36804 * VM/Machine.h: 36805 * kjs/regexp.cpp: 36806 (KJS::RegExp::RegExp): 36807 (KJS::RegExp::~RegExp): 36808 (KJS::RegExp::match): 36809 * kjs/regexp.h: 36810 * masm/IA32MacroAsm.h: 36811 * wrec/WREC.cpp: 36812 * wrec/WREC.h: 36813 * wtf/Platform.h: Only enable CTI and WREC on x86. Add an extra define to 36814 track whether any MASM-using features are enabled. 36815 36816 2008-09-03 Gavin Barraclough <barraclough (a] apple.com> 36817 36818 Reviewed by Oliver Hunt. 36819 36820 Copy Geoff's array/string length optimization for CTI. 36821 36822 * VM/CTI.cpp: 36823 (KJS::CTI::privateArrayLengthTrampoline): 36824 (KJS::CTI::privateStringLengthTrampoline): 36825 * VM/CTI.h: 36826 (KJS::CTI::compileArrayLengthTrampoline): 36827 (KJS::CTI::compileStringLengthTrampoline): 36828 * VM/Machine.cpp: 36829 (KJS::Machine::Machine): 36830 (KJS::Machine::getCtiArrayLengthTrampoline): 36831 (KJS::Machine::getCtiStringLengthTrampoline): 36832 (KJS::Machine::tryCtiCacheGetByID): 36833 (KJS::Machine::cti_op_get_by_id_second): 36834 * VM/Machine.h: 36835 * kjs/JSString.h: 36836 * kjs/ustring.h: 36837 36838 2008-09-03 Gavin Barraclough <barraclough (a] apple.com> 36839 36840 Reviewed by Oliver Hunt. 36841 36842 Implement fast array accesses in CTI - 2-3% progression on sunspider. 36843 36844 * VM/CTI.cpp: 36845 (KJS::CTI::emitFastArithIntToImmNoCheck): 36846 (KJS::CTI::compileOpCall): 36847 (KJS::CTI::privateCompile_pass2_Main): 36848 (KJS::CTI::privateCompile_pass4_SlowCases): 36849 * VM/CTI.h: 36850 * kjs/JSArray.h: 36851 36852 2008-09-02 Gavin Barraclough <barraclough (a] apple.com> 36853 36854 Reviewed by Oliver Hunt. 36855 36856 Enable fast property access support in CTI. 36857 36858 * VM/CTI.cpp: 36859 (KJS::ctiSetReturnAddress): 36860 (KJS::ctiRepatchCallByReturnAddress): 36861 (KJS::CTI::privateCompile_pass2_Main): 36862 (KJS::CTI::privateCompile): 36863 (KJS::CTI::privateCompileGetByIdSelf): 36864 (KJS::CTI::privateCompileGetByIdProto): 36865 (KJS::CTI::privateCompileGetByIdChain): 36866 (KJS::CTI::privateCompilePutByIdReplace): 36867 * VM/CTI.h: 36868 (KJS::CTI::compileGetByIdSelf): 36869 (KJS::CTI::compileGetByIdProto): 36870 (KJS::CTI::compileGetByIdChain): 36871 (KJS::CTI::compilePutByIdReplace): 36872 * VM/CodeBlock.cpp: 36873 (KJS::CodeBlock::~CodeBlock): 36874 * VM/CodeBlock.h: 36875 * VM/Machine.cpp: 36876 (KJS::doSetReturnAddressVmThrowTrampoline): 36877 (KJS::Machine::tryCtiCachePutByID): 36878 (KJS::Machine::tryCtiCacheGetByID): 36879 (KJS::Machine::cti_op_put_by_id): 36880 (KJS::Machine::cti_op_put_by_id_second): 36881 (KJS::Machine::cti_op_put_by_id_generic): 36882 (KJS::Machine::cti_op_put_by_id_fail): 36883 (KJS::Machine::cti_op_get_by_id): 36884 (KJS::Machine::cti_op_get_by_id_second): 36885 (KJS::Machine::cti_op_get_by_id_generic): 36886 (KJS::Machine::cti_op_get_by_id_fail): 36887 (KJS::Machine::cti_op_throw): 36888 (KJS::Machine::cti_vm_throw): 36889 * VM/Machine.h: 36890 * kjs/JSCell.h: 36891 * kjs/JSObject.h: 36892 * kjs/PropertyMap.h: 36893 * kjs/StructureID.cpp: 36894 (KJS::StructureIDChain::StructureIDChain): 36895 * masm/IA32MacroAsm.h: 36896 (KJS::IA32MacroAssembler::emitCmpl_i32m): 36897 (KJS::IA32MacroAssembler::emitMovl_mr): 36898 (KJS::IA32MacroAssembler::emitMovl_rm): 36899 36900 2008-09-02 Sam Weinig <sam (a] webkit.org> 36901 36902 Reviewed by Gavin Barraclough and Mark Rowe. 36903 36904 A backslash (\) at the of a RegEx should produce an error. 36905 Fixes fast/regex/test1.html. 36906 36907 * wrec/WREC.cpp: 36908 (KJS::WRECompiler::parseEscape): 36909 36910 2008-09-02 Sam Weinig <sam (a] webkit.org> 36911 36912 Reviewed by Geoff Garen. 36913 36914 Link jumps for the slow case of op_loop_if_less. Fixes acid3. 36915 36916 * VM/CTI.cpp: 36917 (KJS::CTI::privateCompile_pass4_SlowCases): 36918 36919 2008-09-01 Sam Weinig <sam (a] webkit.org> 36920 36921 Rubber-stamped by Maciej Stachowiak. 36922 36923 Switch WREC on by default. 36924 36925 * wtf/Platform.h: 36926 36927 2008-09-01 Sam Weinig <sam (a] webkit.org> 36928 36929 Reviewed by Mark Rowe. 36930 36931 Fix two failures in fast/regex/test1.html 36932 - \- in a character class should be treated as a literal - 36933 - A missing max quantifier needs to be treated differently than 36934 a null max quantifier. 36935 36936 * wrec/WREC.cpp: 36937 (KJS::WRECompiler::generateNonGreedyQuantifier): 36938 (KJS::WRECompiler::generateGreedyQuantifier): 36939 (KJS::WRECompiler::parseCharacterClass): 36940 * wrec/WREC.h: 36941 (KJS::Quantifier::Quantifier): 36942 36943 2008-09-01 Sam Weinig <sam (a] webkit.org> 36944 36945 Reviewed by Mark Rowe. 36946 36947 Fix crash in fast/js/kde/evil-n.html 36948 36949 * kjs/regexp.cpp: Always pass a non-null offset vector to the wrec function. 36950 36951 2008-09-01 Sam Weinig <sam (a] webkit.org> 36952 36953 Reviewed by Gavin Barraclough and Mark Rowe. 36954 36955 Add pattern length limit fixing one test in fast/js. 36956 36957 * wrec/WREC.cpp: 36958 (KJS::WRECompiler::compile): 36959 * wrec/WREC.h: 36960 (KJS::WRECompiler::): 36961 36962 2008-09-01 Sam Weinig <sam (a] webkit.org> 36963 36964 Reviewed by Gavin Barraclough and Mark Rowe. 36965 36966 Make octal escape parsing/back-reference parsing more closely match 36967 prior behavior fixing one test in fast/js. 36968 36969 * wrec/WREC.cpp: 36970 (KJS::WRECompiler::parseCharacterClass): 8 and 9 should be IdentityEscaped 36971 (KJS::WRECompiler::parseEscape): 36972 * wrec/WREC.h: 36973 (KJS::WRECompiler::peekDigit): 36974 36975 2008-09-01 Sam Weinig <sam (a] webkit.org> 36976 36977 Reviewed by Gavin Barraclough and Mark Rowe. 36978 36979 Fix one mozilla test. 36980 36981 * wrec/WREC.cpp: 36982 (KJS::WRECompiler::generateCharacterClassInverted): Fix incorrect not 36983 ascii upper check. 36984 36985 2008-09-01 Sam Weinig <sam (a] webkit.org> 36986 36987 Reviewed by Gavin Barraclough and Mark Rowe. 36988 36989 Parse octal escapes in character classes fixing one mozilla test. 36990 36991 * wrec/WREC.cpp: 36992 (KJS::WRECompiler::parseCharacterClass): 36993 (KJS::WRECompiler::parseOctalEscape): 36994 * wrec/WREC.h: 36995 (KJS::WRECompiler::consumeOctal): 36996 36997 2008-09-01 Sam Weinig <sam (a] webkit.org> 36998 36999 Reviewed by Oliver Hunt. 37000 37001 Fixes two mozilla tests with WREC enabled. 37002 37003 * wrec/WREC.cpp: 37004 (KJS::CharacterClassConstructor::append): Keep the character class sorted 37005 when appending another character class. 37006 37007 2008-09-01 Sam Weinig <sam (a] webkit.org> 37008 37009 Reviewed by Gavin Barraclough and Mark Rowe. 37010 37011 Fixes two mozilla tests with WREC enabled. 37012 37013 * wrec/WREC.cpp: 37014 (KJS::CharacterClassConstructor::addSortedRange): Insert the range at the correct position 37015 instead of appending it to the end. 37016 37017 2008-09-01 Gavin Barraclough <barraclough (a] apple.com> 37018 37019 Reviewed by Oliver Hunt. 37020 37021 Move cross-compilation unit call into NEVER_INLINE function. 37022 37023 * VM/Machine.cpp: 37024 (KJS::doSetReturnAddressVmThrowTrampoline): 37025 37026 2008-09-01 Sam Weinig <sam (a] webkit.org> 37027 37028 Reviewed by Gavin Barraclough and Geoff Garen. 37029 37030 Fix one test in fast/js. 37031 37032 * VM/Machine.cpp: 37033 (KJS::Machine::cti_op_construct_NotJSConstruct): Throw a createNotAConstructorError, 37034 instead of a createNotAFunctionError. 37035 37036 2008-08-31 Gavin Barraclough <barraclough (a] apple.com> 37037 37038 Reviewed by Maciej Stachowiak. 37039 37040 Zero-cost exception handling. This patch takes the exception checking 37041 back of the hot path. When an exception occurs in a Machine::cti* 37042 method, the return address to JIT code is recorded, and is then 37043 overwritten with a pointer to a trampoline routine. When the method 37044 returns the trampoline will cause the cti_vm_throw method to be invoked. 37045 37046 cti_vm_throw uses the return address preserved above, to discover the 37047 vPC of the bytecode that raised the exception (using a map build during 37048 translation). From the VPC of the faulting bytecode the vPC of a catch 37049 routine may be discovered (unwinding the stack where necesary), and then 37050 a bytecode address for the catch routine is looked up. Final cti_vm_throw 37051 overwrites its return address to JIT code again, to trampoline directly 37052 to the catch routine. 37053 37054 cti_op_throw is handled in a similar fashion. 37055 37056 * VM/CTI.cpp: 37057 (KJS::CTI::emitPutCTIParam): 37058 (KJS::CTI::emitPutToCallFrameHeader): 37059 (KJS::CTI::emitGetFromCallFrameHeader): 37060 (KJS::ctiSetReturnAddressForArgs): 37061 (KJS::CTI::emitDebugExceptionCheck): 37062 (KJS::CTI::printOpcodeOperandTypes): 37063 (KJS::CTI::emitCall): 37064 (KJS::CTI::compileOpCall): 37065 (KJS::CTI::privateCompile_pass2_Main): 37066 (KJS::CTI::privateCompile): 37067 * VM/CTI.h: 37068 (KJS::CallRecord::CallRecord): 37069 (KJS::): 37070 (KJS::CTI::execute): 37071 * VM/CodeBlock.h: 37072 * VM/Machine.cpp: 37073 (KJS::Machine::privateExecute): 37074 (KJS::Machine::cti_op_instanceof): 37075 (KJS::Machine::cti_op_call_NotJSFunction): 37076 (KJS::Machine::cti_op_resolve): 37077 (KJS::Machine::cti_op_resolve_func): 37078 (KJS::Machine::cti_op_resolve_skip): 37079 (KJS::Machine::cti_op_resolve_with_base): 37080 (KJS::Machine::cti_op_throw): 37081 (KJS::Machine::cti_op_in): 37082 (KJS::Machine::cti_vm_throw): 37083 * VM/RegisterFile.h: 37084 (KJS::RegisterFile::): 37085 * kjs/ExecState.h: 37086 (KJS::ExecState::setCtiReturnAddress): 37087 (KJS::ExecState::ctiReturnAddress): 37088 * masm/IA32MacroAsm.h: 37089 (KJS::IA32MacroAssembler::): 37090 (KJS::IA32MacroAssembler::emitPushl_m): 37091 (KJS::IA32MacroAssembler::emitPopl_m): 37092 (KJS::IA32MacroAssembler::getRelocatedAddress): 37093 37094 2008-08-31 Mark Rowe <mrowe (a] apple.com> 37095 37096 Reviewed by Oliver Hunt. 37097 37098 Fall back to PCRE for any regexp containing parentheses until we correctly backtrack within them. 37099 37100 * wrec/WREC.cpp: 37101 (KJS::WRECompiler::parseParentheses): 37102 * wrec/WREC.h: 37103 (KJS::WRECompiler::): 37104 37105 2008-08-31 Mark Rowe <mrowe (a] apple.com> 37106 37107 Reviewed by Oliver Hunt. 37108 37109 Fix several issues within ecma_3/RegExp/perlstress-001.js with WREC enabled. 37110 37111 * wrec/WREC.cpp: 37112 (KJS::WRECompiler::generateNonGreedyQuantifier): Compare with the maximum quantifier count rather than the minimum. 37113 (KJS::WRECompiler::generateAssertionEOL): Do a register-to-register comparison rather than immediate-to-register. 37114 (KJS::WRECompiler::parseCharacterClass): Pass through the correct inversion flag. 37115 37116 2008-08-30 Mark Rowe <mrowe (a] apple.com> 37117 37118 Reviewed by Oliver Hunt. 37119 37120 Re-fix the six remaining failures in the Mozilla JavaScript tests in a manner that does not kill performance. 37121 This shows up as a 0.6% progression on SunSpider on my machine. 37122 37123 Grow the JITCodeBuffer's underlying buffer when we run out of space rather than just bailing out. 37124 37125 * VM/CodeBlock.h: 37126 (KJS::CodeBlock::~CodeBlock): Switch to using fastFree now that JITCodeBuffer::copy uses fastMalloc. 37127 * kjs/regexp.cpp: Ditto. 37128 * masm/IA32MacroAsm.h: 37129 (KJS::JITCodeBuffer::growBuffer): 37130 (KJS::JITCodeBuffer::JITCodeBuffer): 37131 (KJS::JITCodeBuffer::~JITCodeBuffer): 37132 (KJS::JITCodeBuffer::putByte): 37133 (KJS::JITCodeBuffer::putShort): 37134 (KJS::JITCodeBuffer::putInt): 37135 (KJS::JITCodeBuffer::reset): 37136 (KJS::JITCodeBuffer::copy): 37137 37138 2008-08-29 Oliver Hunt <oliver (a] apple.com> 37139 37140 RS=Maciej 37141 37142 Roll out previous patch as it causes a 5% performance regression 37143 37144 * JavaScriptCore.xcodeproj/project.pbxproj: 37145 * VM/CTI.cpp: 37146 (KJS::getJCB): 37147 (KJS::CTI::privateCompile): 37148 * VM/CodeBlock.h: 37149 (KJS::CodeBlock::~CodeBlock): 37150 * masm/IA32MacroAsm.h: 37151 (KJS::JITCodeBuffer::JITCodeBuffer): 37152 (KJS::JITCodeBuffer::putByte): 37153 (KJS::JITCodeBuffer::putShort): 37154 (KJS::JITCodeBuffer::putInt): 37155 (KJS::JITCodeBuffer::getEIP): 37156 (KJS::JITCodeBuffer::start): 37157 (KJS::JITCodeBuffer::getOffset): 37158 (KJS::JITCodeBuffer::reset): 37159 (KJS::JITCodeBuffer::copy): 37160 (KJS::IA32MacroAssembler::emitModRm_rr): 37161 (KJS::IA32MacroAssembler::emitModRm_rm): 37162 (KJS::IA32MacroAssembler::emitModRm_rmsib): 37163 (KJS::IA32MacroAssembler::IA32MacroAssembler): 37164 (KJS::IA32MacroAssembler::emitInt3): 37165 (KJS::IA32MacroAssembler::emitPushl_r): 37166 (KJS::IA32MacroAssembler::emitPopl_r): 37167 (KJS::IA32MacroAssembler::emitMovl_rr): 37168 (KJS::IA32MacroAssembler::emitAddl_rr): 37169 (KJS::IA32MacroAssembler::emitAddl_i8r): 37170 (KJS::IA32MacroAssembler::emitAddl_i32r): 37171 (KJS::IA32MacroAssembler::emitAddl_mr): 37172 (KJS::IA32MacroAssembler::emitAndl_rr): 37173 (KJS::IA32MacroAssembler::emitAndl_i32r): 37174 (KJS::IA32MacroAssembler::emitCmpl_i8r): 37175 (KJS::IA32MacroAssembler::emitCmpl_rr): 37176 (KJS::IA32MacroAssembler::emitCmpl_rm): 37177 (KJS::IA32MacroAssembler::emitCmpl_i32r): 37178 (KJS::IA32MacroAssembler::emitCmpl_i32m): 37179 (KJS::IA32MacroAssembler::emitCmpw_rm): 37180 (KJS::IA32MacroAssembler::emitOrl_rr): 37181 (KJS::IA32MacroAssembler::emitOrl_i8r): 37182 (KJS::IA32MacroAssembler::emitSubl_rr): 37183 (KJS::IA32MacroAssembler::emitSubl_i8r): 37184 (KJS::IA32MacroAssembler::emitSubl_i32r): 37185 (KJS::IA32MacroAssembler::emitSubl_mr): 37186 (KJS::IA32MacroAssembler::emitTestl_i32r): 37187 (KJS::IA32MacroAssembler::emitTestl_rr): 37188 (KJS::IA32MacroAssembler::emitXorl_i8r): 37189 (KJS::IA32MacroAssembler::emitXorl_rr): 37190 (KJS::IA32MacroAssembler::emitSarl_i8r): 37191 (KJS::IA32MacroAssembler::emitSarl_CLr): 37192 (KJS::IA32MacroAssembler::emitShl_i8r): 37193 (KJS::IA32MacroAssembler::emitShll_CLr): 37194 (KJS::IA32MacroAssembler::emitMull_rr): 37195 (KJS::IA32MacroAssembler::emitIdivl_r): 37196 (KJS::IA32MacroAssembler::emitCdq): 37197 (KJS::IA32MacroAssembler::emitMovl_mr): 37198 (KJS::IA32MacroAssembler::emitMovzwl_mr): 37199 (KJS::IA32MacroAssembler::emitMovl_rm): 37200 (KJS::IA32MacroAssembler::emitMovl_i32r): 37201 (KJS::IA32MacroAssembler::emitMovl_i32m): 37202 (KJS::IA32MacroAssembler::emitLeal_mr): 37203 (KJS::IA32MacroAssembler::emitRet): 37204 (KJS::IA32MacroAssembler::emitJmpN_r): 37205 (KJS::IA32MacroAssembler::emitJmpN_m): 37206 (KJS::IA32MacroAssembler::emitCall): 37207 (KJS::IA32MacroAssembler::label): 37208 (KJS::IA32MacroAssembler::emitUnlinkedJmp): 37209 (KJS::IA32MacroAssembler::emitUnlinkedJne): 37210 (KJS::IA32MacroAssembler::emitUnlinkedJe): 37211 (KJS::IA32MacroAssembler::emitUnlinkedJl): 37212 (KJS::IA32MacroAssembler::emitUnlinkedJle): 37213 (KJS::IA32MacroAssembler::emitUnlinkedJge): 37214 (KJS::IA32MacroAssembler::emitUnlinkedJae): 37215 (KJS::IA32MacroAssembler::emitUnlinkedJo): 37216 (KJS::IA32MacroAssembler::link): 37217 * wrec/WREC.cpp: 37218 (KJS::WRECompiler::compilePattern): 37219 (KJS::WRECompiler::compile): 37220 * wrec/WREC.h: 37221 37222 2008-08-29 Mark Rowe <mrowe (a] apple.com> 37223 37224 Reviewed by Oliver Hunt. 37225 37226 Have JITCodeBuffer manage a Vector containing the generated code so that it can grow 37227 as needed when generating code for a large function. This fixes all six remaining failures 37228 in Mozilla tests in both debug and release builds. 37229 37230 * VM/CTI.cpp: 37231 (KJS::CTI::privateCompile): 37232 * VM/CodeBlock.h: 37233 (KJS::CodeBlock::~CodeBlock): 37234 * masm/IA32MacroAsm.h: 37235 (KJS::JITCodeBuffer::putByte): 37236 (KJS::JITCodeBuffer::putShort): 37237 (KJS::JITCodeBuffer::putInt): 37238 (KJS::JITCodeBuffer::getEIP): 37239 (KJS::JITCodeBuffer::start): 37240 (KJS::JITCodeBuffer::getOffset): 37241 (KJS::JITCodeBuffer::getCode): 37242 (KJS::IA32MacroAssembler::emitModRm_rr): 37243 * wrec/WREC.cpp: 37244 (KJS::WRECompiler::compilePattern): 37245 * wrec/WREC.h: 37246 37247 2008-08-29 Mark Rowe <mrowe (a] apple.com> 37248 37249 Reviewed by Oliver Hunt. 37250 37251 Implement parsing of octal escapes in regular expressions. This fixes three Mozilla tests. 37252 37253 * wrec/WREC.cpp: 37254 (KJS::WRECompiler::parseOctalEscape): 37255 (KJS::WRECompiler::parseEscape): Parse the escape sequence as an octal escape if it has a leading zero. 37256 Add a FIXME about treating invalid backreferences as octal escapes in the future. 37257 * wrec/WREC.h: 37258 (KJS::WRECompiler::consumeNumber): Multiply by 10 rather than 0 so that we handle numbers with more than 37259 one digit. 37260 * wtf/ASCIICType.h: 37261 (WTF::isASCIIOctalDigit): 37262 37263 2008-08-29 Sam Weinig <sam (a] webkit.org> 37264 37265 Reviewed by Mark Rowe. 37266 37267 Pass vPC to instanceof method. Fixes 2 mozilla tests in debug. 37268 37269 * VM/CTI.cpp: 37270 (KJS::CTI::privateCompile_pass2_Main): 37271 * VM/Machine.cpp: 37272 (KJS::Machine::cti_op_instanceof): 37273 37274 2008-08-29 Sam Weinig <sam (a] webkit.org> 37275 37276 Reviewed by Mark Rowe. 37277 37278 Pass vPCs to resolve methods for correct exception creation. Fixes 37279 17 mozilla tests in debug. 37280 37281 * VM/CTI.cpp: 37282 (KJS::CTI::privateCompile_pass2_Main): 37283 * VM/CTI.h: 37284 * VM/Machine.cpp: 37285 (KJS::Machine::cti_op_resolve): 37286 (KJS::Machine::cti_op_resolve_func): 37287 (KJS::Machine::cti_op_resolve_skip): 37288 (KJS::Machine::cti_op_resolve_with_base): 37289 37290 2008-08-29 Gavin Barraclough <barraclough (a] apple.com> 37291 37292 Reviewed by Oliver Hunt. 37293 37294 Remembering to actually throw the exception passed to op throw helps. 37295 Regressions 19 -> 6. 37296 37297 * VM/Machine.cpp: 37298 (KJS::Machine::cti_op_throw): 37299 (KJS::Machine::cti_vm_throw): 37300 37301 2008-08-29 Gavin Barraclough <barraclough (a] apple.com> 37302 37303 Reviewed by Sam Weinig. 37304 37305 Support for exception unwinding the stack. 37306 37307 Once upon a time, Sam asked me for a bettr ChangeLog entry. The return address 37308 is now preserved on entry to a JIT code function (if we preserve lazily we need 37309 restore the native return address during exception stack unwind). This takes 37310 the number of regressions down from ~150 to 19. 37311 37312 * VM/CTI.cpp: 37313 (KJS::getJCB): 37314 (KJS::CTI::emitExceptionCheck): 37315 (KJS::CTI::compileOpCall): 37316 (KJS::CTI::privateCompile_pass2_Main): 37317 (KJS::CTI::privateCompile): 37318 * VM/CTI.h: 37319 (KJS::): 37320 * VM/Machine.cpp: 37321 (KJS::Machine::throwException): 37322 (KJS::Machine::cti_op_call_JSFunction): 37323 (KJS::Machine::cti_op_call_NotJSFunction): 37324 (KJS::Machine::cti_op_construct_JSConstruct): 37325 (KJS::Machine::cti_op_construct_NotJSConstruct): 37326 (KJS::Machine::cti_op_throw): 37327 (KJS::Machine::cti_vm_throw): 37328 37329 2008-08-29 Mark Rowe <mrowe (a] apple.com> 37330 37331 Reviewed by Oliver Hunt. 37332 37333 Fix js1_2/regexp/word_boundary.js and four other Mozilla tests with WREC enabled. 37334 37335 * wrec/WREC.cpp: 37336 (KJS::WRECompiler::generateCharacterClassInvertedRange): If none of the exact matches 37337 succeeded, jump to failure. 37338 (KJS::WRECompiler::compilePattern): Restore and increment the current position stored 37339 on the stack to ensure that it will be reset to the correct position after a failed 37340 match has consumed input. 37341 37342 2008-08-29 Mark Rowe <mrowe (a] apple.com> 37343 37344 Reviewed by Oliver Hunt. 37345 37346 Fix a hang in ecma_3/RegExp/15.10.2-1.js with WREC enabled. 37347 A backreference with a quantifier would get stuck in an infinite 37348 loop if the captured range was empty. 37349 37350 * wrec/WREC.cpp: 37351 (KJS::WRECompiler::generateBackreferenceQuantifier): If the captured range 37352 was empty, do not attempt to match the backreference. 37353 (KJS::WRECompiler::parseBackreferenceQuantifier): 37354 * wrec/WREC.h: 37355 (KJS::Quantifier::): 37356 37357 2008-08-28 Sam Weinig <sam (a] webkit.org> 37358 37359 Reviewed by Oliver Hunt. 37360 37361 Implement op_debug. 37362 37363 * VM/CTI.cpp: 37364 (KJS::CTI::privateCompile_pass1_Scan): 37365 (KJS::CTI::privateCompile_pass2_Main): 37366 * VM/Machine.cpp: 37367 (KJS::Machine::debug): 37368 (KJS::Machine::privateExecute): 37369 (KJS::Machine::cti_op_debug): 37370 * VM/Machine.h: 37371 37372 2008-08-28 Sam Weinig <sam (a] webkit.org> 37373 37374 Reviewed by Gavin Barraclough and Geoff Garen. 37375 37376 Implement op_switch_string fixing 1 mozilla test and one test in fast/js. 37377 37378 * VM/CTI.cpp: 37379 (KJS::CTI::privateCompile_pass1_Scan): 37380 (KJS::CTI::privateCompile_pass2_Main): 37381 (KJS::CTI::privateCompile): 37382 * VM/CTI.h: 37383 (KJS::SwitchRecord::): 37384 (KJS::SwitchRecord::SwitchRecord): 37385 * VM/CodeBlock.cpp: 37386 (KJS::CodeBlock::dump): 37387 * VM/CodeBlock.h: 37388 (KJS::ExpressionRangeInfo::): 37389 (KJS::StringJumpTable::offsetForValue): 37390 (KJS::StringJumpTable::ctiForValue): 37391 (KJS::SimpleJumpTable::add): 37392 (KJS::SimpleJumpTable::ctiForValue): 37393 * VM/CodeGenerator.cpp: 37394 (KJS::prepareJumpTableForStringSwitch): 37395 * VM/Machine.cpp: 37396 (KJS::Machine::privateExecute): 37397 (KJS::Machine::cti_op_switch_string): 37398 * VM/Machine.h: 37399 37400 2008-08-28 Gavin Barraclough <barraclough (a] apple.com> 37401 37402 Reviewed by Oliver Hunt. 37403 37404 Do not recurse on the machine stack when executing op_call. 37405 37406 * VM/CTI.cpp: 37407 (KJS::CTI::emitGetPutArg): 37408 (KJS::CTI::emitPutArg): 37409 (KJS::CTI::emitPutArgConstant): 37410 (KJS::CTI::compileOpCall): 37411 (KJS::CTI::privateCompile_pass2_Main): 37412 (KJS::CTI::privateCompile): 37413 * VM/CTI.h: 37414 (KJS::): 37415 (KJS::CTI::compile): 37416 (KJS::CTI::execute): 37417 (KJS::CTI::): 37418 * VM/Machine.cpp: 37419 (KJS::Machine::Machine): 37420 (KJS::Machine::execute): 37421 (KJS::Machine::cti_op_call_JSFunction): 37422 (KJS::Machine::cti_op_call_NotJSFunction): 37423 (KJS::Machine::cti_op_ret): 37424 (KJS::Machine::cti_op_construct_JSConstruct): 37425 (KJS::Machine::cti_op_construct_NotJSConstruct): 37426 (KJS::Machine::cti_op_call_eval): 37427 * VM/Machine.h: 37428 * VM/Register.h: 37429 (KJS::Register::Register): 37430 * VM/RegisterFile.h: 37431 (KJS::RegisterFile::): 37432 * kjs/InternalFunction.h: 37433 (KJS::InternalFunction::InternalFunction): 37434 * kjs/JSFunction.h: 37435 (KJS::JSFunction::JSFunction): 37436 * kjs/ScopeChain.h: 37437 (KJS::ScopeChain::ScopeChain): 37438 * masm/IA32MacroAsm.h: 37439 (KJS::IA32MacroAssembler::): 37440 (KJS::IA32MacroAssembler::emitModRm_opm): 37441 (KJS::IA32MacroAssembler::emitCmpl_i32m): 37442 (KJS::IA32MacroAssembler::emitCallN_r): 37443 37444 2008-08-28 Sam Weinig <sam (a] webkit.org> 37445 37446 Reviewed by Mark Rowe. 37447 37448 Exit instead of crashing in ctiUnsupported and ctiTimedOut. 37449 37450 * VM/Machine.cpp: 37451 (KJS::ctiUnsupported): 37452 (KJS::ctiTimedOut): 37453 37454 2008-08-28 Oliver Hunt <oliver (a] apple.com> 37455 37456 Reviewed by Maciej Stachowiak. 37457 37458 Implement codegen for op_jsr and op_sret. 37459 37460 * VM/CTI.cpp: 37461 (KJS::CTI::privateCompile_pass1_Scan): 37462 (KJS::CTI::privateCompile_pass2_Main): 37463 (KJS::CTI::privateCompile): 37464 * VM/CTI.h: 37465 (KJS::CTI::JSRInfo::JSRInfo): 37466 * masm/IA32MacroAsm.h: 37467 (KJS::IA32MacroAssembler::emitJmpN_m): 37468 (KJS::IA32MacroAssembler::linkAbsoluteAddress): 37469 37470 2008-08-28 Gavin Barraclough <barraclough (a] apple.com> 37471 37472 Reviewed by Oliver Hunt. 37473 37474 Initial support for exceptions (throw / catch must occur in same CodeBlock). 37475 37476 * VM/CTI.cpp: 37477 (KJS::CTI::emitExceptionCheck): 37478 (KJS::CTI::emitCall): 37479 (KJS::CTI::privateCompile_pass2_Main): 37480 (KJS::CTI::privateCompile_pass4_SlowCases): 37481 (KJS::CTI::privateCompile): 37482 * VM/CTI.h: 37483 * VM/CodeBlock.cpp: 37484 (KJS::CodeBlock::nativeExceptionCodeForHandlerVPC): 37485 * VM/CodeBlock.h: 37486 * VM/CodeGenerator.cpp: 37487 (KJS::CodeGenerator::emitCatch): 37488 * VM/Machine.cpp: 37489 (KJS::Machine::throwException): 37490 (KJS::Machine::privateExecute): 37491 (KJS::ctiUnsupported): 37492 (KJS::ctiTimedOut): 37493 (KJS::Machine::cti_op_add): 37494 (KJS::Machine::cti_op_pre_inc): 37495 (KJS::Machine::cti_timeout_check): 37496 (KJS::Machine::cti_op_loop_if_less): 37497 (KJS::Machine::cti_op_put_by_id): 37498 (KJS::Machine::cti_op_get_by_id): 37499 (KJS::Machine::cti_op_instanceof): 37500 (KJS::Machine::cti_op_del_by_id): 37501 (KJS::Machine::cti_op_mul): 37502 (KJS::Machine::cti_op_call): 37503 (KJS::Machine::cti_op_resolve): 37504 (KJS::Machine::cti_op_construct): 37505 (KJS::Machine::cti_op_get_by_val): 37506 (KJS::Machine::cti_op_resolve_func): 37507 (KJS::Machine::cti_op_sub): 37508 (KJS::Machine::cti_op_put_by_val): 37509 (KJS::Machine::cti_op_lesseq): 37510 (KJS::Machine::cti_op_loop_if_true): 37511 (KJS::Machine::cti_op_negate): 37512 (KJS::Machine::cti_op_resolve_skip): 37513 (KJS::Machine::cti_op_div): 37514 (KJS::Machine::cti_op_pre_dec): 37515 (KJS::Machine::cti_op_jless): 37516 (KJS::Machine::cti_op_not): 37517 (KJS::Machine::cti_op_jtrue): 37518 (KJS::Machine::cti_op_post_inc): 37519 (KJS::Machine::cti_op_eq): 37520 (KJS::Machine::cti_op_lshift): 37521 (KJS::Machine::cti_op_bitand): 37522 (KJS::Machine::cti_op_rshift): 37523 (KJS::Machine::cti_op_bitnot): 37524 (KJS::Machine::cti_op_resolve_with_base): 37525 (KJS::Machine::cti_op_mod): 37526 (KJS::Machine::cti_op_less): 37527 (KJS::Machine::cti_op_neq): 37528 (KJS::Machine::cti_op_post_dec): 37529 (KJS::Machine::cti_op_urshift): 37530 (KJS::Machine::cti_op_bitxor): 37531 (KJS::Machine::cti_op_bitor): 37532 (KJS::Machine::cti_op_call_eval): 37533 (KJS::Machine::cti_op_throw): 37534 (KJS::Machine::cti_op_push_scope): 37535 (KJS::Machine::cti_op_stricteq): 37536 (KJS::Machine::cti_op_nstricteq): 37537 (KJS::Machine::cti_op_to_jsnumber): 37538 (KJS::Machine::cti_op_in): 37539 (KJS::Machine::cti_op_del_by_val): 37540 (KJS::Machine::cti_vm_throw): 37541 * VM/Machine.h: 37542 * kjs/ExecState.h: 37543 * masm/IA32MacroAsm.h: 37544 (KJS::IA32MacroAssembler::emitCmpl_i32m): 37545 37546 2008-08-28 Mark Rowe <mrowe (a] apple.com> 37547 37548 Rubber-stamped by Oliver Hunt. 37549 37550 Print debugging info to stderr so that run-webkit-tests can capture it. 37551 This makes it easy to check whether test failures are due to unimplemented 37552 op codes, missing support for exceptions, etc. 37553 37554 * VM/CTI.cpp: 37555 (KJS::CTI::privateCompile_pass1_Scan): 37556 (KJS::CTI::printOpcodeOperandTypes): 37557 (KJS::CTI::privateCompile_pass2_Main): 37558 (KJS::CTI::privateCompile_pass4_SlowCases): 37559 (KJS::CTI::privateCompile): 37560 * VM/Machine.cpp: 37561 (KJS::Machine::privateExecute): 37562 (KJS::ctiException): 37563 (KJS::ctiUnsupported): 37564 (KJS::Machine::cti_op_call): 37565 (KJS::Machine::cti_op_resolve): 37566 (KJS::Machine::cti_op_construct): 37567 (KJS::Machine::cti_op_get_by_val): 37568 (KJS::Machine::cti_op_resolve_func): 37569 (KJS::Machine::cti_op_resolve_skip): 37570 (KJS::Machine::cti_op_resolve_with_base): 37571 (KJS::Machine::cti_op_call_eval): 37572 37573 2008-08-27 Mark Rowe <mrowe (a] apple.com> 37574 37575 Reviewed by Gavin Barraclough and Maciej Stachowiak. 37576 37577 Fix fast/js/bitwise-and-on-undefined.html. 37578 37579 A temporary value in the slow path of op_bitand was being stored in edx, but was 37580 being clobbered by emitGetPutArg before we used it. To fix this, emitGetPutArg 37581 now takes a third argument that specifies the scratch register to use when loading 37582 from memory. This allows us to avoid clobbering the temporary in op_bitand. 37583 37584 * VM/CTI.cpp: 37585 (KJS::CTI::emitGetPutArg): 37586 (KJS::CTI::privateCompile_pass2_Main): 37587 (KJS::CTI::privateCompile_pass4_SlowCases): 37588 * VM/CTI.h: 37589 37590 2008-08-27 Mark Rowe <mrowe (a] apple.com> 37591 37592 Rubber-stamped by Oliver Hunt. 37593 37594 Switch CTI on by default. 37595 37596 * wtf/Platform.h: 37597 37598 2008-08-27 Mark Rowe <mrowe (a] apple.com> 37599 37600 Reviewed by Oliver Hunt. 37601 37602 Fix the build of the full WebKit stack. 37603 37604 * JavaScriptCore.xcodeproj/project.pbxproj: Mark two new headers as private so they can be pulled in from WebCore. 37605 * VM/CTI.h: Fix build issues that show up when compiled with GCC 4.2 as part of WebCore. 37606 * wrec/WREC.h: Ditto. 37607 37608 2008-08-27 Mark Rowe <mrowe (a] apple.com> 37609 37610 Reviewed by Sam Weinig. 37611 37612 Implement op_new_error. Does not fix any tests as it is always followed by the unimplemented op_throw. 37613 37614 * VM/CTI.cpp: 37615 (KJS::CTI::privateCompile_pass1_Scan): 37616 (KJS::CTI::privateCompile_pass2_Main): 37617 * VM/Machine.cpp: 37618 (KJS::Machine::cti_op_new_error): 37619 * VM/Machine.h: 37620 37621 2008-08-27 Sam Weinig <sam (a] webkit.org> 37622 37623 Reviewed by Gavin Barraclough and Geoff Garen. 37624 37625 Implement op_put_getter and op_put_setter. 37626 37627 * VM/CTI.cpp: 37628 (KJS::CTI::privateCompile_pass1_Scan): 37629 (KJS::CTI::privateCompile_pass2_Main): 37630 * VM/Machine.cpp: 37631 (KJS::Machine::cti_op_put_getter): 37632 (KJS::Machine::cti_op_put_setter): 37633 * VM/Machine.h: 37634 37635 2008-08-27 Sam Weinig <sam (a] webkit.org> 37636 37637 Reviewed by Gavin Barraclough and Geoff Garen. 37638 37639 Implement op_del_by_val fixing 3 mozilla tests. 37640 37641 * VM/CTI.cpp: 37642 (KJS::CTI::privateCompile_pass1_Scan): 37643 (KJS::CTI::privateCompile_pass2_Main): 37644 * VM/Machine.cpp: 37645 (KJS::Machine::cti_op_del_by_val): 37646 * VM/Machine.h: 37647 37648 2008-08-27 Gavin Barraclough <barraclough (a] apple.com> 37649 37650 Reviewed by Oliver Hunt. 37651 37652 Quick & dirty fix to get SamplingTool sampling op_call. 37653 37654 * VM/SamplingTool.h: 37655 (KJS::SamplingTool::callingHostFunction): 37656 37657 2008-08-27 Sam Weinig <sam (a] webkit.org> 37658 37659 Reviewed by Gavin Barraclough and Geoff Garen. 37660 37661 Fix op_put_by_index. 37662 37663 * VM/CTI.cpp: 37664 (KJS::CTI::privateCompile_pass2_Main): Use emitPutArgConstant instead of emitGetPutArg 37665 for the property value. 37666 * VM/Machine.cpp: 37667 (KJS::Machine::cti_op_put_by_index): Get the property value from the correct argument. 37668 37669 2008-08-27 Sam Weinig <sam (a] webkit.org> 37670 37671 Reviewed by Gavin Barraclough and Geoff Garen. 37672 37673 Implement op_switch_imm in the CTI fixing 13 mozilla tests. 37674 37675 * VM/CTI.cpp: 37676 (KJS::CTI::privateCompile_pass1_Scan): 37677 (KJS::CTI::privateCompile_pass2_Main): 37678 * VM/Machine.cpp: 37679 (KJS::Machine::cti_op_switch_imm): 37680 * VM/Machine.h: 37681 37682 2008-08-27 Gavin Barraclough <barraclough (a] apple.com> 37683 37684 Reviewed by Oliver Hunt. 37685 37686 Implement op_switch_char in CTI. 37687 37688 * VM/CTI.cpp: 37689 (KJS::CTI::emitCall): 37690 (KJS::CTI::privateCompile_pass1_Scan): 37691 (KJS::CTI::privateCompile_pass2_Main): 37692 (KJS::CTI::privateCompile): 37693 * VM/CTI.h: 37694 (KJS::CallRecord::CallRecord): 37695 (KJS::SwitchRecord::SwitchRecord): 37696 * VM/CodeBlock.h: 37697 (KJS::SimpleJumpTable::SimpleJumpTable::ctiForValue): 37698 * VM/Machine.cpp: 37699 (KJS::Machine::cti_op_switch_char): 37700 * VM/Machine.h: 37701 * masm/IA32MacroAsm.h: 37702 (KJS::IA32MacroAssembler::): 37703 (KJS::IA32MacroAssembler::emitJmpN_r): 37704 (KJS::IA32MacroAssembler::getRelocatedAddress): 37705 * wtf/Platform.h: 37706 37707 2008-08-26 Sam Weinig <sam (a] webkit.org> 37708 37709 Reviewed by Mark Rowe. 37710 37711 Implement op_put_by_index to fix 1 mozilla test. 37712 37713 * VM/CTI.cpp: 37714 (KJS::CTI::privateCompile_pass1_Scan): 37715 (KJS::CTI::privateCompile_pass2_Main): 37716 * VM/Machine.cpp: 37717 (KJS::Machine::cti_op_put_by_index): 37718 * VM/Machine.h: 37719 37720 2008-08-26 Gavin Barraclough <barraclough (a] apple.com> 37721 37722 Reviewed by Geoff Garen. 37723 37724 More fixes from Geoff's review. 37725 37726 * VM/CTI.cpp: 37727 (KJS::CTI::emitGetArg): 37728 (KJS::CTI::emitGetPutArg): 37729 (KJS::CTI::emitPutArg): 37730 (KJS::CTI::emitPutArgConstant): 37731 (KJS::CTI::getConstantImmediateNumericArg): 37732 (KJS::CTI::emitGetCTIParam): 37733 (KJS::CTI::emitPutResult): 37734 (KJS::CTI::emitCall): 37735 (KJS::CTI::emitJumpSlowCaseIfNotImm): 37736 (KJS::CTI::emitJumpSlowCaseIfNotImms): 37737 (KJS::CTI::getDeTaggedConstantImmediate): 37738 (KJS::CTI::emitFastArithDeTagImmediate): 37739 (KJS::CTI::emitFastArithReTagImmediate): 37740 (KJS::CTI::emitFastArithPotentiallyReTagImmediate): 37741 (KJS::CTI::emitFastArithImmToInt): 37742 (KJS::CTI::emitFastArithIntToImmOrSlowCase): 37743 (KJS::CTI::privateCompile_pass2_Main): 37744 (KJS::CTI::privateCompile_pass4_SlowCases): 37745 (KJS::CTI::privateCompile): 37746 * VM/CTI.h: 37747 37748 2008-08-26 Mark Rowe <mrowe (a] apple.com> 37749 37750 Reviewed by Gavin Barraclough and Geoff Garen. 37751 37752 Implement op_jmp_scopes to fix 2 Mozilla tests. 37753 37754 * VM/CTI.cpp: 37755 (KJS::CTI::privateCompile_pass1_Scan): 37756 (KJS::CTI::privateCompile_pass2_Main): 37757 * VM/Machine.cpp: 37758 (KJS::Machine::cti_op_push_new_scope): Update ExecState::m_scopeChain after calling ARG_setScopeChain. 37759 (KJS::Machine::cti_op_jmp_scopes): 37760 * VM/Machine.h: 37761 37762 2008-08-26 Gavin Barraclough <barraclough (a] apple.com> 37763 37764 Reviewed by Oliver Hunt. 37765 37766 WebKit Regular Expression Compiler. (set ENABLE_WREC = 1 in Platform.h). 37767 37768 * JavaScriptCore.xcodeproj/project.pbxproj: 37769 * kjs/regexp.cpp: 37770 * kjs/regexp.h: 37771 * wrec: Added. 37772 * wrec/WREC.cpp: Added. 37773 * wrec/WREC.h: Added. 37774 * wtf/Platform.h: 37775 37776 2008-08-26 Sam Weinig <sam (a] webkit.org> 37777 37778 Rubber-stamped by Oliver Hunt. 37779 37780 Remove bogus assertion. 37781 37782 * VM/Machine.cpp: 37783 (KJS::Machine::cti_op_del_by_id): 37784 37785 2008-08-26 Mark Rowe <mrowe (a] apple.com> 37786 37787 Reviewed by Sam Weinig. 37788 37789 Implement op_push_new_scope and stub out op_catch. This fixes 11 Mozilla tests. 37790 37791 * VM/CTI.cpp: 37792 (KJS::CTI::privateCompile_pass1_Scan): 37793 (KJS::CTI::privateCompile_pass2_Main): 37794 * VM/Machine.cpp: 37795 (KJS::Machine::cti_op_push_new_scope): 37796 (KJS::Machine::cti_op_catch): 37797 * VM/Machine.h: 37798 37799 2008-08-26 Mark Rowe <mrowe (a] apple.com> 37800 37801 Reviewed by Sam Weinig. 37802 37803 Clean up op_resolve_base so that it shares its implementation with the bytecode interpreter. 37804 37805 * VM/Machine.cpp: 37806 (KJS::inlineResolveBase): 37807 (KJS::resolveBase): 37808 37809 2008-08-26 Oliver Hunt <oliver (a] apple.com> 37810 37811 Reviewed by Sam Weinig. 37812 37813 Add codegen support for op_instanceof, fixing 15 mozilla tests. 37814 37815 * VM/CTI.cpp: 37816 (KJS::CTI::privateCompile_pass1_Scan): 37817 (KJS::CTI::privateCompile_pass2_Main): 37818 * VM/Machine.cpp: 37819 (KJS::Machine::cti_op_instanceof): 37820 (KJS::Machine::cti_op_del_by_id): 37821 * VM/Machine.h: 37822 * wtf/Platform.h: 37823 37824 2008-08-26 Gavin Barraclough <barraclough (a] apple.com> 37825 37826 Reviewed by Geoff Garen. 37827 37828 Fixes for initial review comments. 37829 37830 * VM/CTI.cpp: 37831 (KJS::CTI::ctiCompileGetArg): 37832 (KJS::CTI::ctiCompileGetPutArg): 37833 (KJS::CTI::ctiCompilePutResult): 37834 (KJS::CTI::ctiCompileCall): 37835 (KJS::CTI::CTI): 37836 (KJS::CTI::privateCompile_pass1_Scan): 37837 (KJS::CTI::printOpcodeOperandTypes): 37838 (KJS::CTI::privateCompile_pass2_Main): 37839 (KJS::CTI::privateCompile_pass4_SlowCases): 37840 (KJS::CTI::privateCompile): 37841 * VM/CTI.h: 37842 * VM/Register.h: 37843 * kjs/JSValue.h: 37844 37845 2008-08-26 Sam Weinig <sam (a] webkit.org> 37846 37847 Reviewed by Gavin Barraclough and Geoff Garen. 37848 37849 Fix up exception checking code. 37850 37851 * VM/Machine.cpp: 37852 (KJS::Machine::cti_op_call): 37853 (KJS::Machine::cti_op_resolve): 37854 (KJS::Machine::cti_op_construct): 37855 (KJS::Machine::cti_op_resolve_func): 37856 (KJS::Machine::cti_op_resolve_skip): 37857 (KJS::Machine::cti_op_resolve_with_base): 37858 (KJS::Machine::cti_op_call_eval): 37859 37860 2008-08-26 Sam Weinig <sam (a] webkit.org> 37861 37862 Reviewed by Oliver Hunt. 37863 37864 Fix slowcase for op_post_inc and op_post_dec fixing 2 mozilla tests. 37865 37866 * VM/CTI.cpp: 37867 (KJS::CTI::privateCompile_pass4_SlowCases): 37868 37869 2008-08-26 Mark Rowe <mrowe (a] apple.com> 37870 37871 Reviewed by Sam Weinig. 37872 37873 Implement op_in, fixing 8 mozilla tests. 37874 37875 * VM/CTI.cpp: 37876 (KJS::CTI::privateCompile_pass1_Scan): 37877 (KJS::CTI::privateCompile_pass2_Main): 37878 * VM/Machine.cpp: 37879 (KJS::Machine::cti_op_in): 37880 * VM/Machine.h: 37881 37882 2008-08-26 Mark Rowe <mrowe (a] apple.com> 37883 37884 Rubber-stamped by Oliver Hunt. 37885 37886 Don't hardcode the size of a Register for op_new_array. Fixes a crash 37887 seen during the Mozilla tests. 37888 37889 * VM/CTI.cpp: 37890 (KJS::CTI::privateCompile_pass2_Main): 37891 37892 2008-08-26 Sam Weinig <sam (a] webkit.org> 37893 37894 Reviewed by Gavin Barraclough and Geoff Garen. 37895 37896 Add support for op_push_scope and op_pop_scope, fixing 20 mozilla tests. 37897 37898 * VM/CTI.cpp: 37899 (KJS::CTI::privateCompile_pass1_Scan): 37900 (KJS::CTI::privateCompile_pass2_Main): 37901 * VM/CTI.h: 37902 * VM/Machine.cpp: 37903 (KJS::Machine::cti_op_push_scope): 37904 (KJS::Machine::cti_op_pop_scope): 37905 * VM/Machine.h: 37906 37907 2008-08-26 Oliver Hunt <oliver (a] apple.com> 37908 37909 Reviewed by Maciej Stachowiak. 37910 37911 Add codegen support for op_del_by_id, fixing 49 mozilla tests. 37912 37913 * VM/CTI.cpp: 37914 (KJS::CTI::privateCompile_pass1_Scan): 37915 (KJS::CTI::privateCompile_pass2_Main): 37916 * VM/Machine.cpp: 37917 (KJS::Machine::cti_op_del_by_id): 37918 * VM/Machine.h: 37919 37920 2008-08-26 Sam Weinig <sam (a] webkit.org> 37921 37922 Reviewed by Gavin Barraclough and Geoff Garen. 37923 37924 Don't hardcode the size of a Register for op_get_scoped_var and op_put_scoped_var 37925 fixing 513 mozilla tests in debug build. 37926 37927 * VM/CTI.cpp: 37928 (KJS::CTI::privateCompile_pass2_Main): 37929 37930 2008-08-26 Oliver Hunt <oliver (a] apple.com> 37931 37932 Reviewed by Maciej Stachowiak. 37933 37934 Added code generator support for op_loop, fixing around 60 mozilla tests. 37935 37936 * VM/CTI.cpp: 37937 (KJS::CTI::privateCompile_pass1_Scan): 37938 (KJS::CTI::privateCompile_pass2_Main): 37939 37940 2008-08-26 Mark Rowe <mrowe (a] apple.com> 37941 37942 Reviewed by Sam Weinig. 37943 37944 Set -fomit-frame-pointer in the correct location. 37945 37946 * Configurations/JavaScriptCore.xcconfig: 37947 * JavaScriptCore.xcodeproj/project.pbxproj: 37948 37949 2008-08-26 Gavin Barraclough <barraclough (a] apple.com> 37950 37951 Reviewed by Geoff Garen. 37952 37953 Inital cut of CTI, Geoff's review fixes to follow. 37954 37955 * JavaScriptCore.xcodeproj/project.pbxproj: 37956 * VM/CTI.cpp: Added. 37957 (KJS::getJCB): 37958 (KJS::CTI::ctiCompileGetArg): 37959 (KJS::CTI::ctiCompileGetPutArg): 37960 (KJS::CTI::ctiCompilePutArg): 37961 (KJS::CTI::ctiCompilePutArgImm): 37962 (KJS::CTI::ctiImmediateNumericArg): 37963 (KJS::CTI::ctiCompileGetCTIParam): 37964 (KJS::CTI::ctiCompilePutResult): 37965 (KJS::CTI::ctiCompileCall): 37966 (KJS::CTI::slowCaseIfNotImm): 37967 (KJS::CTI::slowCaseIfNotImms): 37968 (KJS::CTI::ctiFastArithDeTagConstImmediate): 37969 (KJS::CTI::ctiFastArithDeTagImmediate): 37970 (KJS::CTI::ctiFastArithReTagImmediate): 37971 (KJS::CTI::ctiFastArithPotentiallyReTagImmediate): 37972 (KJS::CTI::ctiFastArithImmToInt): 37973 (KJS::CTI::ctiFastArithIntToImmOrSlowCase): 37974 (KJS::CTI::CTI): 37975 (KJS::CTI::privateCompile_pass1_Scan): 37976 (KJS::CTI::ctiCompileAdd): 37977 (KJS::CTI::ctiCompileAddImm): 37978 (KJS::CTI::ctiCompileAddImmNotInt): 37979 (KJS::CTI::TEMP_HACK_PRINT_TYPES): 37980 (KJS::CTI::privateCompile_pass2_Main): 37981 (KJS::CTI::privateCompile_pass3_Link): 37982 (KJS::CTI::privateCompile_pass4_SlowCases): 37983 (KJS::CTI::privateCompile): 37984 * VM/CTI.h: Added. 37985 (KJS::CTI2Result::CTI2Result): 37986 (KJS::CallRecord::CallRecord): 37987 (KJS::JmpTable::JmpTable): 37988 (KJS::SlowCaseEntry::SlowCaseEntry): 37989 (KJS::CTI::compile): 37990 (KJS::CTI::LabelInfo::LabelInfo): 37991 * VM/CodeBlock.h: 37992 (KJS::CodeBlock::CodeBlock): 37993 (KJS::CodeBlock::~CodeBlock): 37994 * VM/Machine.cpp: 37995 (KJS::Machine::execute): 37996 (KJS::Machine::privateExecute): 37997 (KJS::ctiException): 37998 (KJS::ctiUnsupported): 37999 (KJS::ctiTimedOut): 38000 (KJS::Machine::cti_op_end): 38001 (KJS::Machine::cti_op_add): 38002 (KJS::Machine::cti_op_pre_inc): 38003 (KJS::Machine::cti_timeout_check): 38004 (KJS::Machine::cti_op_loop_if_less): 38005 (KJS::Machine::cti_op_new_object): 38006 (KJS::Machine::cti_op_put_by_id): 38007 (KJS::Machine::cti_op_get_by_id): 38008 (KJS::Machine::cti_op_mul): 38009 (KJS::Machine::cti_op_new_func): 38010 (KJS::Machine::cti_op_call): 38011 (KJS::Machine::cti_op_ret): 38012 (KJS::Machine::cti_op_new_array): 38013 (KJS::Machine::cti_op_resolve): 38014 (KJS::Machine::cti_op_construct): 38015 (KJS::Machine::cti_op_get_by_val): 38016 (KJS::Machine::cti_op_resolve_func): 38017 (KJS::Machine::cti_op_sub): 38018 (KJS::Machine::cti_op_put_by_val): 38019 (KJS::Machine::cti_op_lesseq): 38020 (KJS::Machine::cti_op_loop_if_true): 38021 (KJS::Machine::cti_op_negate): 38022 (KJS::Machine::cti_op_resolve_base): 38023 (KJS::Machine::cti_op_resolve_skip): 38024 (KJS::Machine::cti_op_div): 38025 (KJS::Machine::cti_op_pre_dec): 38026 (KJS::Machine::cti_op_jless): 38027 (KJS::Machine::cti_op_not): 38028 (KJS::Machine::cti_op_jtrue): 38029 (KJS::Machine::cti_op_post_inc): 38030 (KJS::Machine::cti_op_eq): 38031 (KJS::Machine::cti_op_lshift): 38032 (KJS::Machine::cti_op_bitand): 38033 (KJS::Machine::cti_op_rshift): 38034 (KJS::Machine::cti_op_bitnot): 38035 (KJS::Machine::cti_op_resolve_with_base): 38036 (KJS::Machine::cti_op_new_func_exp): 38037 (KJS::Machine::cti_op_mod): 38038 (KJS::Machine::cti_op_less): 38039 (KJS::Machine::cti_op_neq): 38040 (KJS::Machine::cti_op_post_dec): 38041 (KJS::Machine::cti_op_urshift): 38042 (KJS::Machine::cti_op_bitxor): 38043 (KJS::Machine::cti_op_new_regexp): 38044 (KJS::Machine::cti_op_bitor): 38045 (KJS::Machine::cti_op_call_eval): 38046 (KJS::Machine::cti_op_throw): 38047 (KJS::Machine::cti_op_get_pnames): 38048 (KJS::Machine::cti_op_next_pname): 38049 (KJS::Machine::cti_op_typeof): 38050 (KJS::Machine::cti_op_stricteq): 38051 (KJS::Machine::cti_op_nstricteq): 38052 (KJS::Machine::cti_op_to_jsnumber): 38053 * VM/Machine.h: 38054 * VM/Register.h: 38055 (KJS::Register::jsValue): 38056 (KJS::Register::getJSValue): 38057 (KJS::Register::codeBlock): 38058 (KJS::Register::scopeChain): 38059 (KJS::Register::i): 38060 (KJS::Register::r): 38061 (KJS::Register::vPC): 38062 (KJS::Register::jsPropertyNameIterator): 38063 * VM/SamplingTool.cpp: 38064 (KJS::): 38065 (KJS::SamplingTool::run): 38066 (KJS::SamplingTool::dump): 38067 * VM/SamplingTool.h: 38068 * kjs/JSImmediate.h: 38069 (KJS::JSImmediate::zeroImmediate): 38070 (KJS::JSImmediate::oneImmediate): 38071 * kjs/JSValue.h: 38072 * kjs/JSVariableObject.h: 38073 (KJS::JSVariableObject::JSVariableObjectData::offsetOf_registers): 38074 (KJS::JSVariableObject::offsetOf_d): 38075 (KJS::JSVariableObject::offsetOf_Data_registers): 38076 * masm: Added. 38077 * masm/IA32MacroAsm.h: Added. 38078 (KJS::JITCodeBuffer::JITCodeBuffer): 38079 (KJS::JITCodeBuffer::putByte): 38080 (KJS::JITCodeBuffer::putShort): 38081 (KJS::JITCodeBuffer::putInt): 38082 (KJS::JITCodeBuffer::getEIP): 38083 (KJS::JITCodeBuffer::start): 38084 (KJS::JITCodeBuffer::getOffset): 38085 (KJS::JITCodeBuffer::reset): 38086 (KJS::JITCodeBuffer::copy): 38087 (KJS::IA32MacroAssembler::): 38088 (KJS::IA32MacroAssembler::emitModRm_rr): 38089 (KJS::IA32MacroAssembler::emitModRm_rm): 38090 (KJS::IA32MacroAssembler::emitModRm_rmsib): 38091 (KJS::IA32MacroAssembler::emitModRm_opr): 38092 (KJS::IA32MacroAssembler::emitModRm_opm): 38093 (KJS::IA32MacroAssembler::IA32MacroAssembler): 38094 (KJS::IA32MacroAssembler::emitInt3): 38095 (KJS::IA32MacroAssembler::emitPushl_r): 38096 (KJS::IA32MacroAssembler::emitPopl_r): 38097 (KJS::IA32MacroAssembler::emitMovl_rr): 38098 (KJS::IA32MacroAssembler::emitAddl_rr): 38099 (KJS::IA32MacroAssembler::emitAddl_i8r): 38100 (KJS::IA32MacroAssembler::emitAddl_i32r): 38101 (KJS::IA32MacroAssembler::emitAddl_mr): 38102 (KJS::IA32MacroAssembler::emitAndl_rr): 38103 (KJS::IA32MacroAssembler::emitAndl_i32r): 38104 (KJS::IA32MacroAssembler::emitCmpl_i8r): 38105 (KJS::IA32MacroAssembler::emitCmpl_rr): 38106 (KJS::IA32MacroAssembler::emitCmpl_rm): 38107 (KJS::IA32MacroAssembler::emitCmpl_i32r): 38108 (KJS::IA32MacroAssembler::emitCmpw_rm): 38109 (KJS::IA32MacroAssembler::emitOrl_rr): 38110 (KJS::IA32MacroAssembler::emitOrl_i8r): 38111 (KJS::IA32MacroAssembler::emitSubl_rr): 38112 (KJS::IA32MacroAssembler::emitSubl_i8r): 38113 (KJS::IA32MacroAssembler::emitSubl_i32r): 38114 (KJS::IA32MacroAssembler::emitSubl_mr): 38115 (KJS::IA32MacroAssembler::emitTestl_i32r): 38116 (KJS::IA32MacroAssembler::emitTestl_rr): 38117 (KJS::IA32MacroAssembler::emitXorl_i8r): 38118 (KJS::IA32MacroAssembler::emitXorl_rr): 38119 (KJS::IA32MacroAssembler::emitSarl_i8r): 38120 (KJS::IA32MacroAssembler::emitSarl_CLr): 38121 (KJS::IA32MacroAssembler::emitShl_i8r): 38122 (KJS::IA32MacroAssembler::emitShll_CLr): 38123 (KJS::IA32MacroAssembler::emitMull_rr): 38124 (KJS::IA32MacroAssembler::emitIdivl_r): 38125 (KJS::IA32MacroAssembler::emitCdq): 38126 (KJS::IA32MacroAssembler::emitMovl_mr): 38127 (KJS::IA32MacroAssembler::emitMovzwl_mr): 38128 (KJS::IA32MacroAssembler::emitMovl_rm): 38129 (KJS::IA32MacroAssembler::emitMovl_i32r): 38130 (KJS::IA32MacroAssembler::emitMovl_i32m): 38131 (KJS::IA32MacroAssembler::emitLeal_mr): 38132 (KJS::IA32MacroAssembler::emitRet): 38133 (KJS::IA32MacroAssembler::JmpSrc::JmpSrc): 38134 (KJS::IA32MacroAssembler::JmpDst::JmpDst): 38135 (KJS::IA32MacroAssembler::emitCall): 38136 (KJS::IA32MacroAssembler::label): 38137 (KJS::IA32MacroAssembler::emitUnlinkedJmp): 38138 (KJS::IA32MacroAssembler::emitUnlinkedJne): 38139 (KJS::IA32MacroAssembler::emitUnlinkedJe): 38140 (KJS::IA32MacroAssembler::emitUnlinkedJl): 38141 (KJS::IA32MacroAssembler::emitUnlinkedJle): 38142 (KJS::IA32MacroAssembler::emitUnlinkedJge): 38143 (KJS::IA32MacroAssembler::emitUnlinkedJae): 38144 (KJS::IA32MacroAssembler::emitUnlinkedJo): 38145 (KJS::IA32MacroAssembler::emitPredictionNotTaken): 38146 (KJS::IA32MacroAssembler::link): 38147 (KJS::IA32MacroAssembler::copy): 38148 * wtf/Platform.h: 38149 38150 2008-08-26 Oliver Hunt <oliver (a] apple.com> 38151 38152 RS=Maciej. 38153 38154 Enabled -fomit-frame-pointer on Release and Production builds, add additional Profiling build config for shark, etc. 38155 38156 * JavaScriptCore.xcodeproj/project.pbxproj: 38157 38158 === Start merge of squirrelfish-extreme === 38159 38160 2008-09-06 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 38161 38162 Reviewed by Maciej Stachowiak. 38163 38164 Fix the Mac Debug build by adding symbols that are exported only in a 38165 Debug configuration. 38166 38167 * Configurations/JavaScriptCore.xcconfig: 38168 * DerivedSources.make: 38169 * JavaScriptCore.Debug.exp: Added. 38170 * JavaScriptCore.base.exp: Copied from JavaScriptCore.exp. 38171 * JavaScriptCore.exp: Removed. 38172 * JavaScriptCore.xcodeproj/project.pbxproj: 38173 38174 2008-09-05 Darin Adler <darin (a] apple.com> 38175 38176 Reviewed by Cameron Zwarich. 38177 38178 - https://bugs.webkit.org/show_bug.cgi?id=20681 38179 JSPropertyNameIterator functions need to be inlined 38180 38181 1.007x as fast on SunSpider overall 38182 1.081x as fast on SunSpider math-cordic 38183 38184 * VM/JSPropertyNameIterator.cpp: Moved functions out of here. 38185 * VM/JSPropertyNameIterator.h: 38186 (KJS::JSPropertyNameIterator::JSPropertyNameIterator): Moved 38187 this into the header and marked it inline. 38188 (KJS::JSPropertyNameIterator::create): Ditto. 38189 (KJS::JSPropertyNameIterator::next): Ditto. 38190 38191 2008-09-05 Darin Adler <darin (a] apple.com> 38192 38193 Reviewed by Geoffrey Garen. 38194 38195 - fix https://bugs.webkit.org/show_bug.cgi?id=20673 38196 single-character strings are churning in the Identifier table 38197 38198 1.007x as fast on SunSpider overall 38199 1.167x as fast on SunSpider string-fasta 38200 38201 * JavaScriptCore.exp: Updated. 38202 * kjs/SmallStrings.cpp: 38203 (KJS::SmallStrings::singleCharacterStringRep): Added. 38204 * kjs/SmallStrings.h: Added singleCharacterStringRep for clients that 38205 need just a UString, not a JSString. 38206 * kjs/identifier.cpp: 38207 (KJS::Identifier::add): Added special cases for single character strings 38208 so that the UString::Rep that ends up in the identifier table is the one 38209 from the single-character string optimization; otherwise we end up having 38210 to look it up in the identifier table over and over again. 38211 (KJS::Identifier::addSlowCase): Ditto. 38212 (KJS::Identifier::checkSameIdentifierTable): Made this function an empty 38213 inline in release builds so that callers don't have to put #ifndef NDEBUG 38214 at each call site. 38215 * kjs/identifier.h: 38216 (KJS::Identifier::add): Removed #ifndef NDEBUG around the calls to 38217 checkSameIdentifierTable. 38218 (KJS::Identifier::checkSameIdentifierTable): Added. Empty inline version 38219 for NDEBUG builds. 38220 38221 2008-09-05 Mark Rowe <mrowe (a] apple.com> 38222 38223 Build fix. 38224 38225 * kjs/JSObject.h: Move the inline virtual destructor after a non-inline 38226 virtual function so that the symbol for the vtable is not marked as a 38227 weakly exported symbol. 38228 38229 2008-09-05 Darin Adler <darin (a] apple.com> 38230 38231 Reviewed by Sam Weinig. 38232 38233 - fix https://bugs.webkit.org/show_bug.cgi?id=20671 38234 JavaScriptCore string manipulation spends too much time in memcpy 38235 38236 1.011x as fast on SunSpider overall 38237 1.028x as fast on SunSpider string tests 38238 38239 For small strings, use a loop rather than calling memcpy. The loop can 38240 be faster because there's no function call overhead, and because it can 38241 assume the pointers are aligned instead of checking that. Currently the 38242 threshold is set at 20 characters, based on some testing on one particular 38243 computer. Later we can tune this for various platforms by setting 38244 USTRING_COPY_CHARS_INLINE_CUTOFF appropriately, but it does no great harm 38245 if not perfectly tuned. 38246 38247 * kjs/ustring.cpp: 38248 (KJS::overflowIndicator): Removed bogus const. 38249 (KJS::maxUChars): Ditto. 38250 (KJS::copyChars): Added. 38251 (KJS::UString::Rep::createCopying): Call copyChars instead of memcpy. 38252 Also eliminated need for const_cast. 38253 (KJS::UString::expandPreCapacity): Ditto. 38254 (KJS::concatenate): Ditto. 38255 (KJS::UString::spliceSubstringsWithSeparators): Ditto. 38256 (KJS::UString::append): Ditto. 38257 38258 2008-09-05 Kevin McCullough <kmccullough (a] apple.com> 38259 38260 Reviewed by Sam and Alexey. 38261 38262 Make the profiler work with a null exec state. This will allow other 38263 applications start the profiler to get DTrace probes going without 38264 needing a WebView. 38265 38266 * ChangeLog: 38267 * profiler/ProfileGenerator.cpp: 38268 (KJS::ProfileGenerator::ProfileGenerator): 38269 (KJS::ProfileGenerator::willExecute): 38270 (KJS::ProfileGenerator::didExecute): 38271 * profiler/Profiler.cpp: 38272 (KJS::Profiler::startProfiling): 38273 (KJS::Profiler::stopProfiling): 38274 (KJS::dispatchFunctionToProfiles): 38275 38276 2008-09-04 Gavin Barraclough <barraclough (a] apple.com> 38277 38278 Reviewed by Geoffrey Garen. 38279 38280 Fixed an off-by-one error that would cause the StructureIDChain to 38281 be one object too short. 38282 38283 Can't construct a test case because other factors make this not crash 38284 (yet!). 38285 38286 * kjs/StructureID.cpp: 38287 (KJS::StructureIDChain::StructureIDChain): 38288 38289 2008-09-04 Kevin Ollivier <kevino (a] theolliviers.com> 38290 38291 wx build fixes. 38292 38293 * JavaScriptCoreSources.bkl: 38294 38295 2008-09-04 Mark Rowe <mrowe (a] apple.com> 38296 38297 Reviewed by Eric Seidel. 38298 38299 Fix https://bugs.webkit.org/show_bug.cgi?id=20639. 38300 Bug 20639: ENABLE_DASHBOARD_SUPPORT does not need to be a FEATURE_DEFINE 38301 38302 * Configurations/JavaScriptCore.xcconfig: Remove ENABLE_DASHBOARD_SUPPORT from FEATURE_DEFINES. 38303 * wtf/Platform.h: Set ENABLE_DASHBOARD_SUPPORT for PLATFORM(MAC). 38304 38305 2008-09-04 Adele Peterson <adele (a] apple.com> 38306 38307 Build fix. 38308 38309 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 38310 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 38311 * JavaScriptCore.vcproj/jsc/jsc.vcproj: 38312 38313 2008-09-04 Mark Rowe <mrowe (a] apple.com> 38314 38315 Mac build fix. 38316 38317 * kjs/config.h: Only check the value of HAVE_CONFIG_H if it is defined. 38318 38319 2008-09-04 Marco Barisione <marco.barisione (a] collabora.co.uk> 38320 38321 Reviewed by Eric Seidel. 38322 38323 http://bugs.webkit.org/show_bug.cgi?id=20380 38324 [GTK][AUTOTOOLS] Include autotoolsconfig.h from config.h 38325 38326 * kjs/config.h: Include the configuration header generated by 38327 autotools if available. 38328 38329 2008-09-04 Tor Arne Vestb <tavestbo (a] trolltech.com> 38330 38331 Reviewed by Simon. 38332 38333 Fix the QtWebKit build to match changes in r36016 38334 38335 * JavaScriptCore.pri: 38336 38337 2008-09-04 Mark Rowe <mrowe (a] apple.com> 38338 38339 Fix the 64-bit build. 38340 38341 * VM/CodeBlock.cpp: 38342 (KJS::CodeBlock::printStructureID): Store the instruction offset into an unsigned local 38343 to avoid a warning related to format specifiers. 38344 (KJS::CodeBlock::printStructureIDs): Ditto. 38345 38346 2008-09-04 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 38347 38348 Rubber-stamped by Oliver Hunt. 38349 38350 Correct the spelling of 'entryIndices'. 38351 38352 * kjs/PropertyMap.cpp: 38353 (KJS::PropertyMap::get): 38354 (KJS::PropertyMap::getLocation): 38355 (KJS::PropertyMap::put): 38356 (KJS::PropertyMap::insert): 38357 (KJS::PropertyMap::remove): 38358 (KJS::PropertyMap::checkConsistency): 38359 * kjs/PropertyMap.h: 38360 (KJS::PropertyMapHashTable::entries): 38361 (KJS::PropertyMap::getOffset): 38362 (KJS::PropertyMap::putOffset): 38363 (KJS::PropertyMap::offsetForTableLocation): 38364 38365 2008-09-03 Geoffrey Garen <ggaren (a] apple.com> 38366 38367 Reviewed by Cameron Zwarich. 38368 38369 Fixed <rdar://problem/6193925> REGRESSION: Crash occurs at 38370 KJS::Machine::privateExecute() when attempting to load my Mobile Gallery 38371 (http://www.me.com/gallery/#home) 38372 38373 also 38374 38375 https://bugs.webkit.org/show_bug.cgi?id=20633 Crash in privateExecute 38376 @ cs.byu.edu 38377 38378 The underlying problem was that we would cache prototype properties 38379 even if the prototype was a dictionary. 38380 38381 The fix is to transition a prototype back from dictionary to normal 38382 status when an opcode caches access to it. (This is better than just 38383 refusing to cache, since a heavily accessed prototype is almost 38384 certainly not a true dictionary.) 38385 38386 * VM/Machine.cpp: 38387 (KJS::Machine::tryCacheGetByID): 38388 * kjs/JSObject.h: 38389 38390 2008-09-03 Eric Seidel <eric (a] webkit.org> 38391 38392 Reviewed by Sam. 38393 38394 Clean up Platform.h and add PLATFORM(CHROMIUM), PLATFORM(SKIA) and USE(V8_BINDINGS) 38395 38396 * Configurations/JavaScriptCore.xcconfig: add missing ENABLE_* 38397 * wtf/ASCIICType.h: include <wtf/Assertions.h> since it depends on it. 38398 * wtf/Platform.h: 38399 38400 2008-09-03 Kevin McCullough <kmccullough (a] apple.com> 38401 38402 Reviewed by Tim. 38403 38404 Remove the rest of the "zombie" code from the profiler. 38405 - There is no longer a need for the ProfilerClient callback mechanism. 38406 38407 * API/JSProfilerPrivate.cpp: 38408 (JSStartProfiling): 38409 * JavaScriptCore.exp: 38410 * profiler/HeavyProfile.h: 38411 * profiler/ProfileGenerator.cpp: 38412 (KJS::ProfileGenerator::create): 38413 (KJS::ProfileGenerator::ProfileGenerator): 38414 * profiler/ProfileGenerator.h: 38415 (KJS::ProfileGenerator::profileGroup): 38416 * profiler/Profiler.cpp: 38417 (KJS::Profiler::startProfiling): 38418 (KJS::Profiler::stopProfiling): Immediately return the profile when 38419 stopped instead of using a callback. 38420 * profiler/Profiler.h: 38421 * profiler/TreeProfile.h: 38422 38423 2008-09-03 Adele Peterson <adele (a] apple.com> 38424 38425 Build fix. 38426 38427 * wtf/win/MainThreadWin.cpp: 38428 38429 2008-09-02 Kevin McCullough <kmccullough (a] apple.com> 38430 38431 Reviewed by Darin and Tim. 38432 38433 Remove most of the "zombie" mode from the profiler. Next we will need 38434 to remove the client callback mechanism in profiles. 38435 38436 - This simplifies the code, leverages the recent changes I've made in 38437 getting line numbers from SquirrelFish, and is a slight speed 38438 improvement on SunSpider. 38439 - Also the "zombie" mode was a constant source of odd edge cases and 38440 obscure bugs so it's good to remove since all of its issues may not have 38441 been found. 38442 38443 * API/JSProfilerPrivate.cpp: No need to call didFinishAllExecution() any 38444 more. 38445 (JSEndProfiling): 38446 * JavaScriptCore.exp: Export the new signature of retrieveLastCaller() 38447 * VM/Machine.cpp: 38448 (KJS::Machine::execute): No need to call didFinishAllExecution() any 38449 more. 38450 (KJS::Machine::retrieveCaller): Now operates on InternalFunctions now 38451 since the RegisterFile is no longer guaranteeded to store only 38452 JSFunctions 38453 (KJS::Machine::retrieveLastCaller): Now also retrieve the function's 38454 name 38455 (KJS::Machine::callFrame): A result of changing retrieveCaller() 38456 * VM/Machine.h: 38457 * VM/Register.h: 38458 * kjs/JSGlobalObject.cpp: 38459 (KJS::JSGlobalObject::~JSGlobalObject): 38460 * kjs/nodes.h: 38461 * profiler/ProfileGenerator.cpp: 38462 (KJS::ProfileGenerator::create): Now pass the original exec and get the 38463 global exec and client when necessary. We need the original exec so we 38464 can have the stack frame where profiling started. 38465 (KJS::ProfileGenerator::ProfileGenerator): ditto. 38466 (KJS::ProfileGenerator::addParentForConsoleStart): This is where the 38467 parent to star of the profile is added, if there is one. 38468 (KJS::ProfileGenerator::willExecute): Remove uglyness! 38469 (KJS::ProfileGenerator::didExecute): Ditto! 38470 (KJS::ProfileGenerator::stopProfiling): 38471 (KJS::ProfileGenerator::removeProfileStart): Use a better way to find 38472 and remove the function we are looking for. 38473 (KJS::ProfileGenerator::removeProfileEnd): Ditto. 38474 * profiler/ProfileGenerator.h: 38475 (KJS::ProfileGenerator::client): 38476 * profiler/ProfileNode.cpp: 38477 (KJS::ProfileNode::removeChild): Add a better way to remove a child from 38478 a ProfileNode. 38479 (KJS::ProfileNode::stopProfiling): 38480 (KJS::ProfileNode::debugPrintData): Modified a debug-only diagnostic 38481 function to be sane. 38482 * profiler/ProfileNode.h: 38483 * profiler/Profiler.cpp: Change to pass the original exec state. 38484 (KJS::Profiler::startProfiling): 38485 (KJS::Profiler::stopProfiling): 38486 (KJS::Profiler::willExecute): 38487 (KJS::Profiler::didExecute): 38488 (KJS::Profiler::createCallIdentifier): 38489 * profiler/Profiler.h: 38490 38491 2008-09-01 Alexey Proskuryakov <ap (a] webkit.org> 38492 38493 Reviewed by Darin Adler. 38494 38495 Implement callOnMainThreadAndWait(). 38496 38497 This will be useful when a background thread needs to perform UI calls synchronously 38498 (e.g. an openDatabase() call cannot return until the user answers to a confirmation dialog). 38499 38500 * wtf/MainThread.cpp: 38501 (WTF::FunctionWithContext::FunctionWithContext): Added a ThreadCondition member. When 38502 non-zero, the condition is signalled after the function is called. 38503 (WTF::mainThreadFunctionQueueMutex): Renamed from functionQueueMutex, sinc this is no longer 38504 static. Changed to be initialized from initializeThreading() to avoid lock contention. 38505 (WTF::initializeMainThread): On non-Windows platforms, just call mainThreadFunctionQueueMutex. 38506 (WTF::dispatchFunctionsFromMainThread): Signal synchronous calls when done. 38507 (WTF::callOnMainThread): Updated for functionQueueMutex rename. 38508 (WTF::callOnMainThreadAndWait): Added. 38509 38510 * wtf/MainThread.h: Added callOnMainThreadAndWait(); initializeMainThread() now exists on 38511 all platforms. 38512 38513 * wtf/win/MainThreadWin.cpp: (WTF::initializeMainThread): Added a callOnMainThreadAndWait() 38514 call to initialize function queue mutex. 38515 38516 * wtf/ThreadingGtk.cpp: (WTF::initializeThreading): 38517 * wtf/ThreadingPthreads.cpp: (WTF::initializeThreading): 38518 * wtf/ThreadingQt.cpp: (WTF::initializeThreading): 38519 Only initialize mainThreadIdentifier on non-Darwin platforms. It was not guaranteed to be 38520 accurate on Darwin. 38521 38522 2008-09-03 Geoffrey Garen <ggaren (a] apple.com> 38523 38524 Reviewed by Darin Adler. 38525 38526 Use isUndefinedOrNull() instead of separate checks for each in op_eq_null 38527 and op_neq_null. 38528 38529 * VM/Machine.cpp: 38530 (KJS::Machine::privateExecute): 38531 38532 2008-09-02 Csaba Osztrogonac <oszi (a] inf.u-szeged.hu> 38533 38534 Reviewed by Darin Adler. 38535 38536 Bug 20296: OpcodeStats doesn't build on platforms which don't have mergesort(). 38537 <https://bugs.webkit.org/show_bug.cgi?id=20296> 38538 38539 * VM/Opcode.cpp: 38540 (KJS::OpcodeStats::~OpcodeStats): mergesort() replaced with qsort() 38541 38542 2008-09-02 Geoffrey Garen <ggaren (a] apple.com> 38543 38544 Reviewed by Oliver Hunt. 38545 38546 Fast path for array.length and string.length. 38547 38548 SunSpider says 0.5% faster. 38549 38550 2008-09-02 Geoffrey Garen <ggaren (a] apple.com> 38551 38552 Reviewed by Anders Carlsson. 38553 38554 Added optimized paths for comparing to null. 38555 38556 SunSpider says 0.5% faster. 38557 38558 2008-09-02 Geoffrey Garen <ggaren (a] apple.com> 38559 38560 Reviewed by Sam Weinig. 38561 38562 Changed jsDriver.pl to dump the exact text you would need in order to 38563 reproduce a test result. This enables a fast workflow where you copy 38564 and paste a test failure in the terminal. 38565 38566 * tests/mozilla/jsDriver.pl: 38567 38568 2008-09-02 Geoffrey Garen <ggaren (a] apple.com> 38569 38570 Reviewed by Sam Weinig. 38571 38572 Implemented the rest of Darin's review comments for the 09-01 inline 38573 caching patch. 38574 38575 SunSpider says 0.5% faster, but that seems like noise. 38576 38577 * JavaScriptCore.xcodeproj/project.pbxproj: Put PutPropertySlot into 38578 its own file, and added BatchedTransitionOptimizer. 38579 38580 * VM/CodeBlock.cpp: 38581 (KJS::CodeBlock::~CodeBlock): Use array indexing instead of a pointer 38582 iterator. 38583 38584 * VM/CodeGenerator.cpp: 38585 (KJS::CodeGenerator::CodeGenerator): Used BatchedTransitionOptimizer to 38586 make batched put and remove for declared variables fast, without forever 38587 pessimizing the global object. Removed the old getDirect/removeDirect hack 38588 that tried to do the same in a more limited way. 38589 38590 * VM/CodeGenerator.h: Moved IdentifierRepHash to the KJS namespace since 38591 it doesn't specialize anything in WTF. 38592 38593 * VM/Machine.cpp: 38594 (KJS::Machine::Machine): Nixed the DummyConstruct tag because it was 38595 confusingly named. 38596 38597 (KJS::Machine::execute): Used BatchedTransitionOptimizer, as above. Fixed 38598 up some comments. 38599 38600 (KJS::cachePrototypeChain): Cast to JSObject*, since it's more specific. 38601 38602 (KJS::Machine::tryCachePutByID): Use isNull() instead of comparing to 38603 jsNull(), since isNull() leaves more options open for the future. 38604 (KJS::Machine::tryCacheGetByID): ditto 38605 (KJS::Machine::privateExecute): ditto 38606 38607 * VM/SamplingTool.cpp: 38608 (KJS::SamplingTool::dump): Use C++-style cast, to match our style 38609 guidelines. 38610 38611 * kjs/BatchedTransitionOptimizer.h: Added. New class that allows host 38612 code to add a batch of properties to an object in an efficient way. 38613 38614 * kjs/JSActivation.cpp: Use isNull(), as above. 38615 38616 * kjs/JSArray.cpp: Get rid of DummyConstruct tag, as above. 38617 * kjs/JSArray.h: 38618 38619 * kjs/JSGlobalData.cpp: Nixed two unused StructureIDs. 38620 * kjs/JSGlobalData.h: 38621 38622 * kjs/JSImmediate.cpp: Use isNull(), as above. 38623 38624 * kjs/JSObject.cpp: 38625 (KJS::JSObject::mark): Moved mark tracing code elsewhere, to make this 38626 function more readable. 38627 38628 (KJS::JSObject::put): Use isNull(), as above. 38629 38630 (KJS::JSObject::createInheritorID): Return a raw pointer, since the 38631 object is owned by a data member, not necessarily the caller. 38632 * kjs/JSObject.h: 38633 38634 * kjs/JSString.cpp: Use isNull(), as above. 38635 38636 * kjs/PropertyMap.h: Updated to use PropertySlot::invalidOffset. 38637 38638 * kjs/PropertySlot.h: Changed KJS_INVALID_OFFSET to WTF::notFound 38639 because C macros are so 80's. 38640 38641 * kjs/PutPropertySlot.h: Added. Split out of PropertySlot.h. Also renamed 38642 PutPropertySlot::SlotType to PutPropertySlot::Type, and slotBase to base, 38643 since "slot" was redundant. 38644 38645 * kjs/StructureID.cpp: Added a new transition *away* from dictionary 38646 status, to support BatchedTransitionOptimizer. 38647 38648 (KJS::StructureIDChain::StructureIDChain): No need to store m_size as 38649 a data member, so keep it in a local, which might be faster. 38650 * kjs/StructureID.h: 38651 38652 * kjs/SymbolTable.h: Moved IdentifierRepHash to KJS namespace, as above. 38653 * kjs/ustring.h: 38654 38655 2008-09-02 Adam Roben <aroben (a] apple.com> 38656 38657 Windows build fixes 38658 38659 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add 38660 StructureID.{cpp,h} to the project. Also let VS reorder this file. 38661 * VM/CodeBlock.cpp: Include StringExtras so that snprintf will be 38662 defined on Windows. 38663 38664 2008-09-01 Sam Weinig <sam (a] webkit.org> 38665 38666 Fix release build. 38667 38668 * JavaScriptCore.exp: 38669 38670 2008-09-01 Jan Michael Alonzo <jmalonzo (a] webkit.org> 38671 38672 Reviewed by Oliver Hunt. 38673 38674 Gtk buildfix 38675 38676 * GNUmakefile.am: 38677 * kjs/PropertyMap.cpp: rename Identifier.h to identifier.h 38678 * kjs/StructureID.cpp: include JSObject.h 38679 38680 2008-09-01 Geoffrey Garen <ggaren (a] apple.com> 38681 38682 Reviewed by Darin Adler. 38683 38684 First cut at inline caching for access to vanilla JavaScript properties. 38685 38686 SunSpider says 4% faster. Tests heavy on dictionary-like access have 38687 regressed a bit -- we have a lot of room to improve in this area, 38688 but this patch is over-ripe as-is. 38689 38690 JSCells now have a StructureID that uniquely identifies their layout, 38691 and holds their prototype. 38692 38693 JSValue::put takes a PropertySlot& argument, so it can fill in details 38694 about where it put a value, for the sake of caching. 38695 38696 * VM/CodeGenerator.cpp: 38697 (KJS::CodeGenerator::CodeGenerator): Avoid calling removeDirect if we 38698 can, since it disables inline caching in the global object. This can 38699 probably improve in the future. 38700 38701 * kjs/JSGlobalObject.cpp: Nixed reset(), since it complicates caching, and 38702 wasn't really necessary. 38703 38704 * kjs/JSObject.cpp: Tweaked getter / setter behavior not to rely on the 38705 IsGetterSetter flag, since the flag was buggy. This is necessary in order 38706 to avoid accidentally accessing a getter / setter as a normal property. 38707 38708 Also changed getter / setter creation to honor ReadOnly, matching Mozilla. 38709 38710 * kjs/PropertyMap.cpp: Nixed clear(), since it complicates caching and 38711 isn't necessary. 38712 38713 * kjs/Shell.cpp: Moved SamplingTool dumping outside the loop. This allows 38714 you to aggregate sampling of multiple files (or the same file repeatedly), 38715 which helped me track down regressions. 38716 38717 * kjs/ustring.h: Moved IdentifierRepHash here to share it. 38718 38719 2008-09-01 Geoffrey Garen <ggaren (a] apple.com> 38720 38721 Reviewed by Sam Weinig. 38722 38723 Eagerly allocate the Math object's numeric constants. This avoids 38724 constantly reallocating them in loops, and also ensures that the Math 38725 object will not use the single property optimization, which makes 38726 properties ineligible for caching. 38727 38728 SunSpider reports a small speedup, in combination with inline caching. 38729 38730 * kjs/MathObject.cpp: 38731 (KJS::MathObject::MathObject): 38732 (KJS::MathObject::getOwnPropertySlot): 38733 * kjs/MathObject.h: 38734 38735 2008-09-01 Jan Michael Alonzo <jmalonzo (a] webkit.org> 38736 38737 Gtk build fix, not reviewed. 38738 38739 * GNUmakefile.am: Add SmallStrings.cpp in both release and debug builds 38740 38741 2008-08-31 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 38742 38743 Reviewed by Maciej Stachowiak. 38744 38745 Bug 20577: REGRESSION (r36006): Gmail is broken 38746 <https://bugs.webkit.org/show_bug.cgi?id=20577> 38747 38748 r36006 changed stringProtoFuncSubstr() so that it is uses the more 38749 efficient jsSubstring(), rather than using UString::substr() and then 38750 calling jsString(). However, the change did not account for the case 38751 where the start and the length of the substring extend beyond the length 38752 of the original string. This patch corrects that. 38753 38754 * kjs/StringPrototype.cpp: 38755 (KJS::stringProtoFuncSubstr): 38756 38757 2008-08-31 Simon Hausmann <hausmann (a] wekit.org> 38758 38759 Unreviewed build fix (with gcc 4.3) 38760 38761 * kjs/ustring.h: Properly forward declare operator== for UString and 38762 the the concatenate functions inside the KJS namespace. 38763 38764 2008-08-30 Darin Adler <darin (a] apple.com> 38765 38766 Reviewed by Maciej. 38767 38768 - https://bugs.webkit.org/show_bug.cgi?id=20333 38769 improve JavaScript speed when handling single-character strings 38770 38771 1.035x as fast on SunSpider overall. 38772 1.127x as fast on SunSpider string tests. 38773 1.910x as fast on SunSpider string-base64 test. 38774 38775 * API/JSObjectRef.cpp: 38776 (JSObjectMakeFunction): Removed unneeded explicit construction of UString. 38777 38778 * GNUmakefile.am: Added SmallStrings.h and SmallStrings.cpp. 38779 * JavaScriptCore.pri: Ditto. 38780 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 38781 Ditto. 38782 * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. 38783 * JavaScriptCoreSources.bkl: Ditto. 38784 38785 * JavaScriptCore.exp: Updated. 38786 38787 * VM/Machine.cpp: 38788 (KJS::jsAddSlowCase): Changed to use a code path that doesn't involve 38789 a UString constructor. This avoids an extra jump caused by the "in charge" 38790 vs. "not in charge" constructors. 38791 (KJS::jsAdd): Ditto. 38792 (KJS::jsTypeStringForValue): Adopted jsNontrivialString. 38793 38794 * kjs/ArrayPrototype.cpp: 38795 (KJS::arrayProtoFuncToString): Adopted jsEmptyString. 38796 (KJS::arrayProtoFuncToLocaleString): Ditto. 38797 (KJS::arrayProtoFuncJoin): Ditto. 38798 * kjs/BooleanPrototype.cpp: 38799 (KJS::booleanProtoFuncToString): Adopted jsNontrivialString. 38800 * kjs/DateConstructor.cpp: 38801 (KJS::callDate): Ditto. 38802 * kjs/DatePrototype.cpp: 38803 (KJS::formatLocaleDate): Adopted jsEmptyString and jsNontrivialString. 38804 (KJS::dateProtoFuncToString): Ditto. 38805 (KJS::dateProtoFuncToUTCString): Ditto. 38806 (KJS::dateProtoFuncToDateString): Ditto. 38807 (KJS::dateProtoFuncToTimeString): Ditto. 38808 (KJS::dateProtoFuncToLocaleString): Ditto. 38809 (KJS::dateProtoFuncToLocaleDateString): Ditto. 38810 (KJS::dateProtoFuncToLocaleTimeString): Ditto. 38811 (KJS::dateProtoFuncToGMTString): Ditto. 38812 38813 * kjs/ErrorPrototype.cpp: 38814 (KJS::ErrorPrototype::ErrorPrototype): Ditto. 38815 (KJS::errorProtoFuncToString): Ditto. 38816 38817 * kjs/JSGlobalData.h: Added SmallStrings. 38818 38819 * kjs/JSString.cpp: 38820 (KJS::jsString): Eliminated the overload that takes a const char*. 38821 Added code to use SmallStrings to get strings of small sizes rather 38822 than creating a new JSString every time. 38823 (KJS::jsSubstring): Added. Used when creating a string from a substring 38824 to avoid creating a JSString in cases where the substring will end up 38825 empty or as one character. 38826 (KJS::jsOwnedString): Added the same code as in jsString. 38827 38828 * kjs/JSString.h: Added new functions jsEmptyString, jsSingleCharacterString, 38829 jsSingleCharacterSubstring, jsSubstring, and jsNontrivialString for various 38830 cases where we want to create JSString, and want special handling for small 38831 strings. 38832 (KJS::JSString::JSString): Added an overload that takes a PassRefPtr of 38833 a UString::Rep so you don't have to construct a UString; PassRefPtr can be 38834 more efficient. 38835 (KJS::jsEmptyString): Added. 38836 (KJS::jsSingleCharacterString): Added. 38837 (KJS::jsSingleCharacterSubstring): Added. 38838 (KJS::jsNontrivialString): Added. 38839 (KJS::JSString::getIndex): Adopted jsSingleCharacterSubstring. 38840 (KJS::JSString::getStringPropertySlot): Ditto. 38841 38842 * kjs/NumberPrototype.cpp: 38843 (KJS::numberProtoFuncToFixed): Adopted jsNontrivialString. 38844 (KJS::numberProtoFuncToExponential): Ditto. 38845 (KJS::numberProtoFuncToPrecision): Ditto. 38846 38847 * kjs/ObjectPrototype.cpp: 38848 (KJS::objectProtoFuncToLocaleString): Adopted toThisJSString. 38849 (KJS::objectProtoFuncToString): Adopted jsNontrivialString. 38850 38851 * kjs/RegExpConstructor.cpp: Separated the lastInput value that's used 38852 with the lastOvector to return matches from the input value that can be 38853 changed via JavaScript. They will be equal in many cases, but not all. 38854 (KJS::RegExpConstructor::performMatch): Set input. 38855 (KJS::RegExpMatchesArray::RegExpMatchesArray): Ditto. 38856 (KJS::RegExpMatchesArray::fillArrayInstance): Adopted jsSubstring. Also, 38857 use input rather than lastInput in the appropriate place. 38858 (KJS::RegExpConstructor::getBackref): Adopted jsSubstring and jsEmptyString. 38859 Added code to handle the case where there is no backref -- before this 38860 depended on range checking in UString::substr which is not present in 38861 jsSubstring. 38862 (KJS::RegExpConstructor::getLastParen): Ditto. 38863 (KJS::RegExpConstructor::getLeftContext): Ditto. 38864 (KJS::RegExpConstructor::getRightContext): Ditto. 38865 (KJS::RegExpConstructor::getValueProperty): Use input rather than lastInput. 38866 Also adopt jsEmptyString. 38867 (KJS::RegExpConstructor::putValueProperty): Ditto. 38868 (KJS::RegExpConstructor::input): Ditto. 38869 38870 * kjs/RegExpPrototype.cpp: 38871 (KJS::regExpProtoFuncToString): Adopt jsNonTrivialString. Also changed to 38872 use UString::append to append single characters rather than using += and 38873 a C-style string. 38874 38875 * kjs/SmallStrings.cpp: Added. 38876 (KJS::SmallStringsStorage::SmallStringsStorage): Construct the 38877 buffer and UString::Rep for all 256 single-character strings for 38878 the U+0000 through U+00FF. This covers all the values used in 38879 the base64 test as well as most values seen elsewhere on the web 38880 as well. It's possible that later we might fix this to only work 38881 for U+0000 through U+007F but the others are used quite a bit in 38882 the current version of the base64 test. 38883 (KJS::SmallStringsStorage::~SmallStringsStorage): Free memory. 38884 (KJS::SmallStrings::SmallStrings): Create a set of small strings, 38885 initially not created; created later when they are used. 38886 (KJS::SmallStrings::~SmallStrings): Deallocate. Not left compiler 38887 generated because the SmallStringsStorage class's destructor needs 38888 to be visible. 38889 (KJS::SmallStrings::mark): Mark all the strings. 38890 (KJS::SmallStrings::createEmptyString): Create a cell for the 38891 empty string. Called only the first time. 38892 (KJS::SmallStrings::createSingleCharacterString): Create a cell 38893 for one of the single-character strings. Called only the first time. 38894 * kjs/SmallStrings.h: Added. 38895 38896 * kjs/StringConstructor.cpp: 38897 (KJS::stringFromCharCodeSlowCase): Factored out of strinFromCharCode. 38898 Only used for cases where the caller does not pass exactly one argument. 38899 (KJS::stringFromCharCode): Adopted jsSingleCharacterString. 38900 (KJS::callStringConstructor): Adopted jsEmptyString. 38901 38902 * kjs/StringObject.cpp: 38903 (KJS::StringObject::StringObject): Adopted jsEmptyString. 38904 38905 * kjs/StringPrototype.cpp: 38906 (KJS::stringProtoFuncReplace): Adopted jsSubstring. 38907 (KJS::stringProtoFuncCharAt): Adopted jsEmptyString and 38908 jsSingleCharacterSubstring and also added a special case when the 38909 index is an immediate number to avoid conversion to and from floating 38910 point, since that's the common case. 38911 (KJS::stringProtoFuncCharCodeAt): Ditto. 38912 (KJS::stringProtoFuncMatch): Adopted jsSubstring and jsEmptyString. 38913 (KJS::stringProtoFuncSlice): Adopted jsSubstring and 38914 jsSingleCharacterSubstring. Also got rid of some unneeded locals and 38915 removed unneeded code to set the length property of the array, since it 38916 is automatically updated as values are added to the array. 38917 (KJS::stringProtoFuncSplit): Adopted jsEmptyString. 38918 (KJS::stringProtoFuncSubstr): Adopted jsSubstring. 38919 (KJS::stringProtoFuncSubstring): Ditto. 38920 38921 * kjs/collector.cpp: 38922 (KJS::Heap::collect): Added a call to mark SmallStrings. 38923 38924 * kjs/ustring.cpp: 38925 (KJS::UString::expandedSize): Made this a static member function since 38926 it doesn't need to look at any data members. 38927 (KJS::UString::expandCapacity): Use a non-inline function, makeNull, to 38928 set the rep to null in failure cases. This avoids adding a PIC branch for 38929 the normal case when there is no failure. 38930 (KJS::UString::expandPreCapacity): Ditto. 38931 (KJS::UString::UString): Ditto. 38932 (KJS::concatenate): Refactored the concatenation constructor into this 38933 separate function. Calling the concatenation constructor was leading to 38934 an extra branch because of the in-charge vs. not-in-charge versions not 38935 both being inlined, and this was showing up as nearly 1% on Shark. Also 38936 added a special case for when the second string is a single character, 38937 since it's a common idiom to build up a string that way and we can do 38938 things much more quickly, without involving memcpy for example. Also 38939 adopted the non-inline function, nullRep, for the same reason given for 38940 makeNull above. 38941 (KJS::UString::append): Adopted makeNull for failure cases. 38942 (KJS::UString::operator=): Ditto. 38943 (KJS::UString::toDouble): Added a special case for converting single 38944 character strings to numbers. We're doing this a ton of times while 38945 running the base64 test. 38946 (KJS::operator==): Added special cases so we can compare single-character 38947 strings without calling memcmp. Later we might want to special case other 38948 short lengths similarly. 38949 (KJS::UString::makeNull): Added. 38950 (KJS::UString::nullRep): Added. 38951 * kjs/ustring.h: Added declarations for the nullRep and makeNull. Changed 38952 expandedSize to be a static member function. Added a declaration of the 38953 concatenate function. Removed the concatenation constructor. Rewrote 38954 operator+ to use the concatenate function. 38955 38956 2008-08-29 Anders Carlsson <andersca (a] apple.com> 38957 38958 Build fix. 38959 38960 * VM/Machine.cpp: 38961 (KJS::getCPUTime): 38962 38963 2008-08-29 Anders Carlsson <andersca (a] apple.com> 38964 38965 Reviewed by Darin Adler. 38966 38967 <rdar://problem/6174667> 38968 When a machine is under heavy load, the Slow Script dialog often comes up many times and just gets in the way 38969 38970 Instead of using clock time, use the CPU time spent executing the current thread when 38971 determining if the script has been running for too long. 38972 38973 * VM/Machine.cpp: 38974 (KJS::getCPUTime): 38975 (KJS::Machine::checkTimeout): 38976 38977 2008-08-28 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 38978 38979 Rubber-stamped by Sam Weinig. 38980 38981 Change 'term' to 'expr' in variable names to standardize terminology. 38982 38983 * kjs/nodes.cpp: 38984 (KJS::BinaryOpNode::emitCode): 38985 (KJS::ReverseBinaryOpNode::emitCode): 38986 (KJS::ThrowableBinaryOpNode::emitCode): 38987 * kjs/nodes.h: 38988 (KJS::BinaryOpNode::BinaryOpNode): 38989 (KJS::ReverseBinaryOpNode::ReverseBinaryOpNode): 38990 (KJS::MultNode::): 38991 (KJS::DivNode::): 38992 (KJS::ModNode::): 38993 (KJS::AddNode::): 38994 (KJS::SubNode::): 38995 (KJS::LeftShiftNode::): 38996 (KJS::RightShiftNode::): 38997 (KJS::UnsignedRightShiftNode::): 38998 (KJS::LessNode::): 38999 (KJS::GreaterNode::): 39000 (KJS::LessEqNode::): 39001 (KJS::GreaterEqNode::): 39002 (KJS::ThrowableBinaryOpNode::): 39003 (KJS::InstanceOfNode::): 39004 (KJS::InNode::): 39005 (KJS::EqualNode::): 39006 (KJS::NotEqualNode::): 39007 (KJS::StrictEqualNode::): 39008 (KJS::NotStrictEqualNode::): 39009 (KJS::BitAndNode::): 39010 (KJS::BitOrNode::): 39011 (KJS::BitXOrNode::): 39012 * kjs/nodes2string.cpp: 39013 (KJS::MultNode::streamTo): 39014 (KJS::DivNode::streamTo): 39015 (KJS::ModNode::streamTo): 39016 (KJS::AddNode::streamTo): 39017 (KJS::SubNode::streamTo): 39018 (KJS::LeftShiftNode::streamTo): 39019 (KJS::RightShiftNode::streamTo): 39020 (KJS::UnsignedRightShiftNode::streamTo): 39021 (KJS::LessNode::streamTo): 39022 (KJS::GreaterNode::streamTo): 39023 (KJS::LessEqNode::streamTo): 39024 (KJS::GreaterEqNode::streamTo): 39025 (KJS::InstanceOfNode::streamTo): 39026 (KJS::InNode::streamTo): 39027 (KJS::EqualNode::streamTo): 39028 (KJS::NotEqualNode::streamTo): 39029 (KJS::StrictEqualNode::streamTo): 39030 (KJS::NotStrictEqualNode::streamTo): 39031 (KJS::BitAndNode::streamTo): 39032 (KJS::BitXOrNode::streamTo): 39033 (KJS::BitOrNode::streamTo): 39034 39035 2008-08-28 Alp Toker <alp (a] nuanti.com> 39036 39037 GTK+ dist/build fix. List newly added header files. 39038 39039 * GNUmakefile.am: 39040 39041 2008-08-28 Sam Weinig <sam (a] webkit.org> 39042 39043 Reviewed by Oliver Hunt. 39044 39045 Change to throw a ReferenceError at runtime instead of a ParseError 39046 at parse time, when the left hand side expression of a for-in statement 39047 is not an lvalue. 39048 39049 * kjs/grammar.y: 39050 * kjs/nodes.cpp: 39051 (KJS::ForInNode::emitCode): 39052 39053 2008-08-28 Alexey Proskuryakov <ap (a] webkit.org> 39054 39055 Not reviewed, build fix (at least for OpenBSD, posssibly more). 39056 39057 https://bugs.webkit.org/show_bug.cgi?id=20545 39058 missing #include <unistd.h> in JavaScriptCore/VM/SamplingTool.cpp 39059 39060 * VM/SamplingTool.cpp: add the missing include. 39061 39062 2008-08-26 Kevin McCullough <kmccullough (a] apple.com> 39063 39064 Reviewed by Geoff and Cameron. 39065 39066 <rdar://problem/6174603> Hitting assertion in Register::codeBlock when 39067 loading facebook (20516). 39068 39069 - This was a result of my line numbers change. After a host function is 39070 called the stack does not get reset correctly. 39071 - Oddly this also appears to be a slight speedup on SunSpider. 39072 39073 * VM/Machine.cpp: 39074 (KJS::Machine::privateExecute): 39075 39076 2008-08-26 Alexey Proskuryakov <ap (a] webkit.org> 39077 39078 Reviewed by Geoff and Tim. 39079 39080 Export new API methods. 39081 39082 * JavaScriptCore.exp: 39083 39084 2008-08-25 Kevin McCullough <kmccullough (a] apple.com> 39085 39086 Reviewed by Geoff, Tim and Mark. 39087 39088 <rdar://problem/6150623> JSProfiler: It would be nice if the profiles 39089 in the console said what file and line number they came from 39090 - Lay the foundation for getting line numbers and other data from the 39091 JavaScript engine. With the cleanup in kjs/ExecState this is actually 39092 a slight performance improvement. 39093 39094 * JavaScriptCore.exp: Export retrieveLastCaller() for WebCore. 39095 * JavaScriptCore.xcodeproj/project.pbxproj: 39096 * VM/Machine.cpp: Now Host and JS functions set a call frame on the 39097 exec state, so this and the profiler code were pulled out of the 39098 branches. 39099 (KJS::Machine::privateExecute): 39100 (KJS::Machine::retrieveLastCaller): This get's the lineNumber, sourceID 39101 and sourceURL for the previously called function. 39102 * VM/Machine.h: 39103 * kjs/ExecState.cpp: Remove references to JSFunction since it's not used 39104 anywhere. 39105 * kjs/ExecState.h: 39106 39107 2008-08-25 Alexey Proskuryakov <ap (a] webkit.org> 39108 39109 Reviewed by Darin Adler. 39110 39111 Ensure that JSGlobalContextRelease() performs garbage collection, even if there are other 39112 contexts in the current context's group. 39113 39114 This is only really necessary when the last reference is released, but there is no way to 39115 determine that, and no harm in collecting slightly more often. 39116 39117 * API/JSContextRef.cpp: (JSGlobalContextRelease): Explicitly collect the heap if it is not 39118 being destroyed. 39119 39120 2008-08-24 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 39121 39122 Reviewed by Oliver Hunt. 39123 39124 Bug 20093: JSC shell does not clear exceptions after it executes toString on an expression 39125 <https://bugs.webkit.org/show_bug.cgi?id=20093> 39126 39127 Clear exceptions after evaluating any code in the JSC shell. We do not 39128 report exceptions that are caused by calling toString on the final 39129 valued, but at least we avoid incorrect behaviour. 39130 39131 Also, print any exceptions that occurred while evaluating code at the 39132 interactive prompt, not just while evaluating code from a file. 39133 39134 * kjs/Shell.cpp: 39135 (runWithScripts): 39136 (runInteractive): 39137 39138 2008-08-24 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 39139 39140 Reviewed by Oliver. 39141 39142 Remove an unnecessary RefPtr to a RegisterID. 39143 39144 * kjs/nodes.cpp: 39145 (KJS::DeleteBracketNode::emitCode): 39146 39147 2008-08-24 Mark Rowe <mrowe (a] apple.com> 39148 39149 Reviewed by Oliver Hunt. 39150 39151 Use the correct version number for when JSGlobalContextCreate was introduced. 39152 39153 * API/JSContextRef.h: 39154 39155 2008-08-23 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 39156 39157 Rubber-stamped by Mark Rowe. 39158 39159 Remove modelines. 39160 39161 * API/APICast.h: 39162 * API/JSBase.cpp: 39163 * API/JSCallbackConstructor.cpp: 39164 * API/JSCallbackConstructor.h: 39165 * API/JSCallbackFunction.cpp: 39166 * API/JSCallbackFunction.h: 39167 * API/JSCallbackObject.cpp: 39168 * API/JSCallbackObject.h: 39169 * API/JSCallbackObjectFunctions.h: 39170 * API/JSClassRef.cpp: 39171 * API/JSContextRef.cpp: 39172 * API/JSObjectRef.cpp: 39173 * API/JSProfilerPrivate.cpp: 39174 * API/JSStringRef.cpp: 39175 * API/JSStringRefBSTR.cpp: 39176 * API/JSStringRefCF.cpp: 39177 * API/JSValueRef.cpp: 39178 * API/tests/JSNode.c: 39179 * API/tests/JSNode.h: 39180 * API/tests/JSNodeList.c: 39181 * API/tests/JSNodeList.h: 39182 * API/tests/Node.c: 39183 * API/tests/Node.h: 39184 * API/tests/NodeList.c: 39185 * API/tests/NodeList.h: 39186 * API/tests/minidom.c: 39187 * API/tests/minidom.js: 39188 * API/tests/testapi.c: 39189 * API/tests/testapi.js: 39190 * JavaScriptCore.pro: 39191 * kjs/FunctionConstructor.h: 39192 * kjs/FunctionPrototype.h: 39193 * kjs/JSArray.h: 39194 * kjs/JSString.h: 39195 * kjs/JSWrapperObject.cpp: 39196 * kjs/NumberConstructor.h: 39197 * kjs/NumberObject.h: 39198 * kjs/NumberPrototype.h: 39199 * kjs/lexer.h: 39200 * kjs/lookup.h: 39201 * wtf/Assertions.cpp: 39202 * wtf/Assertions.h: 39203 * wtf/HashCountedSet.h: 39204 * wtf/HashFunctions.h: 39205 * wtf/HashIterators.h: 39206 * wtf/HashMap.h: 39207 * wtf/HashSet.h: 39208 * wtf/HashTable.h: 39209 * wtf/HashTraits.h: 39210 * wtf/ListHashSet.h: 39211 * wtf/ListRefPtr.h: 39212 * wtf/Noncopyable.h: 39213 * wtf/OwnArrayPtr.h: 39214 * wtf/OwnPtr.h: 39215 * wtf/PassRefPtr.h: 39216 * wtf/Platform.h: 39217 * wtf/RefPtr.h: 39218 * wtf/RefPtrHashMap.h: 39219 * wtf/RetainPtr.h: 39220 * wtf/UnusedParam.h: 39221 * wtf/Vector.h: 39222 * wtf/VectorTraits.h: 39223 * wtf/unicode/Unicode.h: 39224 * wtf/unicode/icu/UnicodeIcu.h: 39225 39226 2008-08-22 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 39227 39228 Reviewed by Oliver. 39229 39230 Some cleanup to match our coding style. 39231 39232 * VM/CodeGenerator.h: 39233 * VM/Machine.cpp: 39234 (KJS::Machine::privateExecute): 39235 * kjs/ExecState.cpp: 39236 * kjs/ExecState.h: 39237 * kjs/completion.h: 39238 * kjs/identifier.cpp: 39239 (KJS::Identifier::equal): 39240 (KJS::CStringTranslator::hash): 39241 (KJS::CStringTranslator::equal): 39242 (KJS::CStringTranslator::translate): 39243 (KJS::UCharBufferTranslator::equal): 39244 (KJS::UCharBufferTranslator::translate): 39245 (KJS::Identifier::remove): 39246 * kjs/operations.h: 39247 39248 2008-08-20 Alexey Proskuryakov <ap (a] webkit.org> 39249 39250 Windows build fix. 39251 39252 * API/WebKitAvailability.h: Define DEPRECATED_ATTRIBUTE. 39253 39254 2008-08-19 Alexey Proskuryakov <ap (a] webkit.org> 39255 39256 Reviewed by Geoff Garen. 39257 39258 Bring back shared JSGlobalData and implicit locking, because too many clients rely on it. 39259 39260 * kjs/JSGlobalData.cpp: 39261 (KJS::JSGlobalData::~JSGlobalData): 39262 (KJS::JSGlobalData::JSGlobalData): Re-add shared instance. 39263 (KJS::JSGlobalData::sharedInstanceExists): Ditto. 39264 (KJS::JSGlobalData::sharedInstance): Ditto. 39265 (KJS::JSGlobalData::sharedInstanceInternal): Ditto. 39266 39267 * API/JSContextRef.h: Deprecated JSGlobalContextCreate(). Added a very conservative 39268 description of its threading model (nothing is allowed). 39269 39270 * API/JSContextRef.cpp: 39271 (JSGlobalContextCreate): Use shared JSGlobalData. 39272 (JSGlobalContextCreateInGroup): Support passing NULL group to request a unique one. 39273 (JSGlobalContextRetain): Added back locking. 39274 (JSGlobalContextRelease): Ditto. 39275 (JSContextGetGlobalObject): Ditto. 39276 39277 * API/tests/minidom.c: (main): 39278 * API/tests/testapi.c: (main): 39279 Switched to JSGlobalContextCreateInGroup() to avoid deprecation warnings. 39280 39281 * JavaScriptCore.exp: Re-added JSLock methods. Added JSGlobalContextCreateInGroup (d'oh!). 39282 39283 * API/JSBase.cpp: 39284 (JSEvaluateScript): 39285 (JSCheckScriptSyntax): 39286 (JSGarbageCollect): 39287 * API/JSCallbackConstructor.cpp: 39288 (KJS::constructJSCallback): 39289 * API/JSCallbackFunction.cpp: 39290 (KJS::JSCallbackFunction::call): 39291 * API/JSCallbackObjectFunctions.h: 39292 (KJS::::init): 39293 (KJS::::getOwnPropertySlot): 39294 (KJS::::put): 39295 (KJS::::deleteProperty): 39296 (KJS::::construct): 39297 (KJS::::hasInstance): 39298 (KJS::::call): 39299 (KJS::::getPropertyNames): 39300 (KJS::::toNumber): 39301 (KJS::::toString): 39302 (KJS::::staticValueGetter): 39303 (KJS::::callbackGetter): 39304 * API/JSObjectRef.cpp: 39305 (JSObjectMake): 39306 (JSObjectMakeFunctionWithCallback): 39307 (JSObjectMakeConstructor): 39308 (JSObjectMakeFunction): 39309 (JSObjectHasProperty): 39310 (JSObjectGetProperty): 39311 (JSObjectSetProperty): 39312 (JSObjectGetPropertyAtIndex): 39313 (JSObjectSetPropertyAtIndex): 39314 (JSObjectDeleteProperty): 39315 (JSObjectCallAsFunction): 39316 (JSObjectCallAsConstructor): 39317 (JSObjectCopyPropertyNames): 39318 (JSPropertyNameArrayRelease): 39319 (JSPropertyNameAccumulatorAddName): 39320 * API/JSValueRef.cpp: 39321 (JSValueIsEqual): 39322 (JSValueIsInstanceOfConstructor): 39323 (JSValueMakeNumber): 39324 (JSValueMakeString): 39325 (JSValueToNumber): 39326 (JSValueToStringCopy): 39327 (JSValueToObject): 39328 (JSValueProtect): 39329 (JSValueUnprotect): 39330 * ForwardingHeaders/JavaScriptCore/JSLock.h: Added. 39331 * GNUmakefile.am: 39332 * JavaScriptCore.pri: 39333 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 39334 * JavaScriptCore.xcodeproj/project.pbxproj: 39335 * JavaScriptCoreSources.bkl: 39336 * kjs/AllInOneFile.cpp: 39337 * kjs/JSGlobalData.h: 39338 * kjs/JSGlobalObject.cpp: 39339 (KJS::JSGlobalObject::~JSGlobalObject): 39340 (KJS::JSGlobalObject::init): 39341 * kjs/JSLock.cpp: Added. 39342 (KJS::createJSLockCount): 39343 (KJS::JSLock::lockCount): 39344 (KJS::setLockCount): 39345 (KJS::JSLock::JSLock): 39346 (KJS::JSLock::lock): 39347 (KJS::JSLock::unlock): 39348 (KJS::JSLock::currentThreadIsHoldingLock): 39349 (KJS::JSLock::DropAllLocks::DropAllLocks): 39350 (KJS::JSLock::DropAllLocks::~DropAllLocks): 39351 * kjs/JSLock.h: Added. 39352 (KJS::JSLock::JSLock): 39353 (KJS::JSLock::~JSLock): 39354 * kjs/Shell.cpp: 39355 (functionGC): 39356 (jscmain): 39357 * kjs/collector.cpp: 39358 (KJS::Heap::~Heap): 39359 (KJS::Heap::heapAllocate): 39360 (KJS::Heap::setGCProtectNeedsLocking): 39361 (KJS::Heap::protect): 39362 (KJS::Heap::unprotect): 39363 (KJS::Heap::collect): 39364 * kjs/identifier.cpp: 39365 * kjs/interpreter.cpp: 39366 (KJS::Interpreter::checkSyntax): 39367 (KJS::Interpreter::evaluate): 39368 Re-added implicit locking. 39369 39370 2008-08-19 Kevin McCullough <kmccullough (a] apple.com> 39371 39372 Reviewed by Tim and Mark. 39373 39374 Implement DTrace hooks for dashcode and instruments. 39375 39376 * API/JSProfilerPrivate.cpp: Added. Expose SPI so that profiling can be 39377 turned on from a client. The DTrace probes were added within the 39378 profiler mechanism for performance reasons so the profiler must be 39379 started to enable tracing. 39380 (JSStartProfiling): 39381 (JSEndProfiling): 39382 * API/JSProfilerPrivate.h: Added. Ditto. 39383 * JavaScriptCore.exp: Exposing the start/stop methods to clients. 39384 * JavaScriptCore.xcodeproj/project.pbxproj: 39385 * kjs/Tracing.d: Define the DTrace probes. 39386 * kjs/Tracing.h: Ditto. 39387 * profiler/ProfileGenerator.cpp: Implement the DTrace probes in the 39388 profiler. 39389 (KJS::ProfileGenerator::willExecute): 39390 (KJS::ProfileGenerator::didExecute): 39391 39392 2008-08-19 Steve Falkenburg <sfalken (a] apple.com> 39393 39394 Build fix. 39395 39396 * kjs/operations.cpp: 39397 (KJS::equal): 39398 39399 2008-08-18 Timothy Hatcher <timothy (a] apple.com> 39400 39401 Fix an assertion when generating a heavy profile because the 39402 empty value and deleted value of CallIdentifier where equal. 39403 39404 https://bugs.webkit.org/show_bug.cgi?id=20439 39405 39406 Reviewed by Dan Bernstein. 39407 39408 * profiler/CallIdentifier.h: Make the emptyValue for CallIdentifier 39409 use empty strings for URL and function name. 39410 39411 2008-08-12 Darin Adler <darin (a] apple.com> 39412 39413 Reviewed by Geoff. 39414 39415 - eliminate JSValue::type() 39416 39417 This will make it slightly easier to change the JSImmediate design without 39418 having to touch so many call sites. 39419 39420 SunSpider says this change is a wash (looked like a slight speedup, but not 39421 statistically significant). 39422 39423 * API/JSStringRef.cpp: Removed include of JSType.h. 39424 * API/JSValueRef.cpp: Removed include of JSType.h. 39425 (JSValueGetType): Replaced use of JSValue::type() with 39426 JSValue::is functions. 39427 39428 * JavaScriptCore.exp: Updated. 39429 39430 * VM/JSPropertyNameIterator.cpp: Removed type() implementation. 39431 (KJS::JSPropertyNameIterator::toPrimitive): Changed to take 39432 PreferredPrimitiveType argument instead of JSType. 39433 * VM/JSPropertyNameIterator.h: Ditto. 39434 39435 * VM/Machine.cpp: 39436 (KJS::fastIsNumber): Updated for name change. 39437 (KJS::fastToInt32): Ditto. 39438 (KJS::fastToUInt32): Ditto. 39439 (KJS::jsAddSlowCase): Updated toPrimitive caller for change from 39440 JSType to PreferredPrimitiveType. 39441 (KJS::jsAdd): Replaced calls to JSValue::type() with calls to 39442 JSValue::isString(). 39443 (KJS::jsTypeStringForValue): Replaced calls to JSValue::type() 39444 with multiple calls to JSValue::is -- we could make this a 39445 virtual function instead if we want to have faster performance. 39446 (KJS::Machine::privateExecute): Renamed JSImmediate::toTruncatedUInt32 39447 to JSImmediate::getTruncatedUInt32 for consistency with other functions. 39448 Changed two calls of JSValue::type() to JSValue::isString(). 39449 39450 * kjs/GetterSetter.cpp: 39451 (KJS::GetterSetter::toPrimitive): Changed to take 39452 PreferredPrimitiveType argument instead of JSType. 39453 (KJS::GetterSetter::isGetterSetter): Added. 39454 * kjs/GetterSetter.h: 39455 39456 * kjs/JSCell.cpp: 39457 (KJS::JSCell::isString): Added. 39458 (KJS::JSCell::isGetterSetter): Added. 39459 (KJS::JSCell::isObject): Added. 39460 39461 * kjs/JSCell.h: Eliminated type function. Added isGetterSetter. 39462 Made isString and isObject virtual. Changed toPrimitive to take 39463 PreferredPrimitiveType argument instead of JSType. 39464 (KJS::JSCell::isNumber): Use Heap::isNumber for faster performance. 39465 (KJS::JSValue::isGetterSetter): Added. 39466 (KJS::JSValue::toPrimitive): Changed to take 39467 PreferredPrimitiveType argument instead of JSType. 39468 39469 * kjs/JSImmediate.h: Removed JSValue::type() and replaced 39470 JSValue::toTruncatedUInt32 with JSValue::getTruncatedUInt32. 39471 (KJS::JSImmediate::isEitherImmediate): Added. 39472 39473 * kjs/JSNotAnObject.cpp: 39474 (KJS::JSNotAnObject::toPrimitive): Changed to take 39475 PreferredPrimitiveType argument instead of JSType. 39476 * kjs/JSNotAnObject.h: Ditto. 39477 * kjs/JSNumberCell.cpp: 39478 (KJS::JSNumberCell::toPrimitive): Ditto. 39479 * kjs/JSNumberCell.h: 39480 (KJS::JSNumberCell::toInt32): Renamed from fastToInt32. There's no 39481 other "slow" version of this once you have a JSNumberCell, so there's 39482 no need for "fast" in the name. It's a feature that this hides the 39483 base class toInt32, which does the same job less efficiently (and has 39484 an additional ExecState argument). 39485 (KJS::JSNumberCell::toUInt32): Ditto. 39486 39487 * kjs/JSObject.cpp: 39488 (KJS::callDefaultValueFunction): Use isGetterSetter instead of type. 39489 (KJS::JSObject::getPrimitiveNumber): Use PreferredPrimitiveType. 39490 (KJS::JSObject::defaultValue): Ditto. 39491 (KJS::JSObject::defineGetter): Use isGetterSetter. 39492 (KJS::JSObject::defineSetter): Ditto. 39493 (KJS::JSObject::lookupGetter): Ditto. 39494 (KJS::JSObject::lookupSetter): Ditto. 39495 (KJS::JSObject::toNumber): Use PreferredPrimitiveType. 39496 (KJS::JSObject::toString): Ditto. 39497 (KJS::JSObject::isObject): Added. 39498 39499 * kjs/JSObject.h: 39500 (KJS::JSObject::inherits): Call the isObject from JSCell; it's now 39501 hidden by our override of isObject. 39502 (KJS::JSObject::getOwnPropertySlotForWrite): Use isGetterSetter 39503 instead of type. 39504 (KJS::JSObject::getOwnPropertySlot): Ditto. 39505 (KJS::JSObject::toPrimitive): Use PreferredPrimitiveType. 39506 39507 * kjs/JSString.cpp: 39508 (KJS::JSString::toPrimitive): Use PreferredPrimitiveType. 39509 (KJS::JSString::isString): Added. 39510 * kjs/JSString.h: Ditto. 39511 39512 * kjs/JSValue.h: Removed type(), added isGetterSetter(). Added 39513 PreferredPrimitiveType enum and used it as the argument for the 39514 toPrimitive function. 39515 (KJS::JSValue::getBoolean): Simplified a bit an removed a branch. 39516 39517 * kjs/collector.cpp: 39518 (KJS::typeName): Changed to use JSCell::is functions instead of 39519 calling JSCell::type. 39520 39521 * kjs/collector.h: 39522 (KJS::Heap::isNumber): Renamed from fastIsNumber. 39523 39524 * kjs/nodes.h: Added now-needed include of JSType, since the type 39525 is used here to record types of values in the tree. 39526 39527 * kjs/operations.cpp: 39528 (KJS::equal): Rewrote to no longer depend on type(). 39529 (KJS::strictEqual): Ditto. 39530 39531 2008-08-18 Kevin McCullough <kmccullough (a] apple.com> 39532 39533 Reviewed by Tim. 39534 39535 If there are no nodes in a profile all the time should be attributed to 39536 (idle) 39537 39538 * profiler/Profile.cpp: If ther are no nodes make sure we still process 39539 the head. 39540 (KJS::Profile::forEach): 39541 * profiler/ProfileGenerator.cpp: Remove some useless code. 39542 (KJS::ProfileGenerator::stopProfiling): 39543 39544 2008-08-18 Alexey Proskuryakov <ap (a] webkit.org> 39545 39546 Reviewed by Maciej. 39547 39548 Make JSGlobalContextRetain/Release actually work. 39549 39550 * API/JSContextRef.cpp: 39551 (JSGlobalContextRetain): 39552 (JSGlobalContextRelease): 39553 Ref/deref global data to give checking for globalData.refCount() some sense. 39554 39555 * API/tests/testapi.c: (main): Added a test for this bug. 39556 39557 * kjs/JSGlobalData.cpp: 39558 (KJS::JSGlobalData::~JSGlobalData): 39559 While checking for memory leaks, found that JSGlobalData::emptyList has changed to 39560 a pointer, but it was not destructed, causing a huge leak in run-webkit-tests --threaded. 39561 39562 2008-08-17 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 39563 39564 Reviewed by Maciej. 39565 39566 Change the counting of constants so that preincrement and predecrement of 39567 const local variables are considered unexpected loads. 39568 39569 * kjs/nodes.cpp: 39570 (KJS::PrefixResolveNode::emitCode): 39571 * kjs/nodes.h: 39572 (KJS::ScopeNode::neededConstants): 39573 39574 2008-08-17 Oliver Hunt <oliver (a] apple.com> 39575 39576 Reviewed by Cameron Zwarich. 39577 39578 <rdar://problem/6150322> In Gmail, a crash occurs at KJS::Machine::privateExecute() when applying list styling to text after a quote had been removed 39579 <https://bugs.webkit.org/show_bug.cgi?id=20386> 39580 39581 This crash was caused by "depth()" incorrectly determining the scope depth 39582 of a 0 depth function without a full scope chain. Because such a function 39583 would not have an activation the depth function would return the scope depth 39584 of the parent frame, thus triggering an incorrect unwind. Any subsequent 39585 look up that walked the scope chain would result in incorrect behaviour, 39586 leading to a crash or incorrect variable resolution. This can only actually 39587 happen in try...finally statements as that's the only path that can result in 39588 the need to unwind the scope chain, but not force the function to need a 39589 full scope chain. 39590 39591 The fix is simply to check for this case before attempting to walk the scope chain. 39592 39593 * VM/Machine.cpp: 39594 (KJS::depth): 39595 (KJS::Machine::throwException): 39596 39597 2008-08-17 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 39598 39599 Reviewed by Maciej. 39600 39601 Bug 20419: Remove op_jless 39602 <https://bugs.webkit.org/show_bug.cgi?id=20419> 39603 39604 Remove op_jless, which is rarely used now that we have op_loop_if_less. 39605 39606 * VM/CodeBlock.cpp: 39607 (KJS::CodeBlock::dump): 39608 * VM/CodeGenerator.cpp: 39609 (KJS::CodeGenerator::emitJumpIfTrue): 39610 * VM/Machine.cpp: 39611 (KJS::Machine::privateExecute): 39612 * VM/Opcode.h: 39613 39614 2008-08-17 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 39615 39616 Reviewed by Dan Bernstein. 39617 39618 Fix a typo in r35807 that is also causing build failures for 39619 non-AllInOne builds. 39620 39621 * kjs/NumberConstructor.cpp: 39622 39623 2008-08-17 Geoffrey Garen <ggaren (a] apple.com> 39624 39625 Reviewed by Cameron Zwarich. 39626 39627 Made room for a free word in JSCell. 39628 39629 SunSpider says no change. 39630 39631 I changed JSCallbackObjectData, Arguments, JSArray, and RegExpObject to 39632 store auxiliary data in a secondary structure. 39633 39634 I changed InternalFunction to store the function's name in the property 39635 map. 39636 39637 I changed JSGlobalObjectData to use a virtual destructor, so WebCore's 39638 JSDOMWindowBaseData could inherit from it safely. (It's a strange design 39639 for JSDOMWindowBase to allocate an object that JSGlobalObject deletes, 39640 but that's really our only option, given the size constraint.) 39641 39642 I also added a bunch of compile-time ASSERTs, and removed lots of comments 39643 in JSObject.h because they were often out of date, and they got in the 39644 way of reading what was actually going on. 39645 39646 Also renamed JSArray::getLength to JSArray::length, to match our style 39647 guidelines. 39648 39649 2008-08-16 Geoffrey Garen <ggaren (a] apple.com> 39650 39651 Reviewed by Oliver Hunt. 39652 39653 Sped up property access for array.length and string.length by adding a 39654 mechanism for returning a temporary value directly instead of returning 39655 a pointer to a function that retrieves the value. 39656 39657 Also removed some unused cruft from PropertySlot. 39658 39659 SunSpider says 0.5% - 1.2% faster. 39660 39661 NOTE: This optimization is not a good idea in general, because it's 39662 actually a pessimization in the case of resolve for assignment, 39663 and it may get in the way of other optimizations in the future. 39664 39665 2008-08-16 Dan Bernstein <mitz (a] apple.com> 39666 39667 Reviewed by Geoffrey Garen. 39668 39669 Disable dead code stripping in debug builds. 39670 39671 * Configurations/Base.xcconfig: 39672 * JavaScriptCore.xcodeproj/project.pbxproj: 39673 39674 2008-08-15 Mark Rowe <mrowe (a] apple.com> 39675 39676 Reviewed by Oliver Hunt. 39677 39678 <rdar://problem/6143072> FastMallocZone's enumeration code makes assumptions about handling of remote memory regions that overlap 39679 39680 * wtf/FastMalloc.cpp: 39681 (WTF::TCMalloc_Central_FreeList::enumerateFreeObjects): Don't directly compare pointers mapped into the local process with 39682 a pointer that has not been mapped. Instead, calculate a local address for the pointer and compare with that. 39683 (WTF::TCMallocStats::FreeObjectFinder::findFreeObjects): Pass in the remote address of the central free list so that it can 39684 be used when calculating local addresses. 39685 (WTF::TCMallocStats::FastMallocZone::enumerate): Ditto. 39686 39687 2008-08-15 Mark Rowe <mrowe (a] apple.com> 39688 39689 Rubber-stamped by Geoff Garen. 39690 39691 <rdar://problem/6139914> Please include a _debug version of JavaScriptCore framework 39692 39693 * Configurations/Base.xcconfig: Factor out the debug-only settings so that they can shared 39694 between the Debug configuration and debug Production variant. 39695 * JavaScriptCore.xcodeproj/project.pbxproj: Enable the debug variant. 39696 39697 2008-08-15 Mark Rowe <mrowe (a] apple.com> 39698 39699 Fix the 64-bit build. 39700 39701 Add extra cast to avoid warnings about loss of precision when casting from 39702 JSValue* to an integer type. 39703 39704 * kjs/JSImmediate.h: 39705 (KJS::JSImmediate::intValue): 39706 (KJS::JSImmediate::uintValue): 39707 39708 2008-08-15 Alexey Proskuryakov <ap (a] webkit.org> 39709 39710 Still fixing Windows build. 39711 39712 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Added OpaqueJSString 39713 to yet another place. 39714 39715 2008-08-15 Alexey Proskuryakov <ap (a] webkit.org> 39716 39717 Trying to fix non-Apple builds. 39718 39719 * ForwardingHeaders/JavaScriptCore/OpaqueJSString.h: Added. 39720 39721 2008-08-15 Gavin Barraclough <barraclough (a] apple.com> 39722 39723 Reviewed by Geoff Garen. 39724 39725 Allow JSImmediate to hold 31 bit signed integer immediate values. The low two bits of a 39726 JSValue* are a tag, with the tag value 00 indicating the JSValue* is a pointer to a 39727 JSCell. Non-zero tag values used to indicate that the JSValue* is not a real pointer, 39728 but instead holds an immediate value encoded within the pointer. This patch changes the 39729 encoding so both the tag values 01 and 11 indicate the value is a signed integer, allowing 39730 a 31 bit value to be stored. All other immediates are tagged with the value 10, and 39731 distinguished by a secondary tag. 39732 39733 Roughly +2% on SunSpider. 39734 39735 * kjs/JSImmediate.h: Encoding of JSImmediates has changed - see comment at head of file for 39736 descption of new layout. 39737 39738 2008-08-15 Alexey Proskuryakov <ap (a] webkit.org> 39739 39740 More build fixes. 39741 39742 * API/OpaqueJSString.h: Add a namespace to friend declaration to appease MSVC. 39743 * API/JSStringRefCF.h: (JSStringCreateWithCFString) Cast UniChar* to UChar* explicitly. 39744 * JavaScriptCore.exp: Added OpaqueJSString::create(const KJS::UString&) to fix WebCore build. 39745 39746 2008-08-15 Alexey Proskuryakov <ap (a] webkit.org> 39747 39748 Build fix. 39749 39750 * JavaScriptCore.xcodeproj/project.pbxproj: Marked OpaqueJSString as private 39751 39752 * kjs/identifier.cpp: 39753 (KJS::Identifier::checkSameIdentifierTable): 39754 * kjs/identifier.h: 39755 (KJS::Identifier::add): 39756 Since checkSameIdentifierTable is exported for debug build's sake, gcc wants it to be 39757 non-inline in release builds, too. 39758 39759 * JavaScriptCore.exp: Don't export inline OpaqueJSString destructor. 39760 39761 2008-08-15 Alexey Proskuryakov <ap (a] webkit.org> 39762 39763 Reviewed by Geoff Garen. 39764 39765 JSStringRef is created context-free, but can get linked to one via an identifier table, 39766 breaking an implicit API contract. 39767 39768 Made JSStringRef point to OpaqueJSString, which is a new string object separate from UString. 39769 39770 * API/APICast.h: Removed toRef/toJS conversions for JSStringRef, as this is no longer a 39771 simple typecast. 39772 39773 * kjs/identifier.cpp: 39774 (KJS::Identifier::checkSameIdentifierTable): 39775 * kjs/identifier.h: 39776 (KJS::Identifier::add): 39777 (KJS::UString::checkSameIdentifierTable): 39778 Added assertions to verify that an identifier is not being added to a different JSGlobalData. 39779 39780 * API/JSObjectRef.cpp: 39781 (OpaqueJSPropertyNameArray::OpaqueJSPropertyNameArray): Changed OpaqueJSPropertyNameArray to 39782 hold JSStringRefs. This is necessary to avoid having to construct (and leak) a new instance 39783 in JSPropertyNameArrayGetNameAtIndex(), now that making a JSStringRef is not just a typecast. 39784 39785 * API/OpaqueJSString.cpp: Added. 39786 (OpaqueJSString::create): 39787 (OpaqueJSString::ustring): 39788 (OpaqueJSString::identifier): 39789 * API/OpaqueJSString.h: Added. 39790 (OpaqueJSString::create): 39791 (OpaqueJSString::characters): 39792 (OpaqueJSString::length): 39793 (OpaqueJSString::OpaqueJSString): 39794 (OpaqueJSString::~OpaqueJSString): 39795 39796 * API/JSBase.cpp: 39797 (JSEvaluateScript): 39798 (JSCheckScriptSyntax): 39799 * API/JSCallbackObjectFunctions.h: 39800 (KJS::::getOwnPropertySlot): 39801 (KJS::::put): 39802 (KJS::::deleteProperty): 39803 (KJS::::staticValueGetter): 39804 (KJS::::callbackGetter): 39805 * API/JSStringRef.cpp: 39806 (JSStringCreateWithCharacters): 39807 (JSStringCreateWithUTF8CString): 39808 (JSStringRetain): 39809 (JSStringRelease): 39810 (JSStringGetLength): 39811 (JSStringGetCharactersPtr): 39812 (JSStringGetMaximumUTF8CStringSize): 39813 (JSStringGetUTF8CString): 39814 (JSStringIsEqual): 39815 * API/JSStringRefCF.cpp: 39816 (JSStringCreateWithCFString): 39817 (JSStringCopyCFString): 39818 * API/JSValueRef.cpp: 39819 (JSValueMakeString): 39820 (JSValueToStringCopy): 39821 Updated to use OpaqueJSString. 39822 39823 * GNUmakefile.am: 39824 * JavaScriptCore.exp: 39825 * JavaScriptCore.pri: 39826 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 39827 * JavaScriptCore.xcodeproj/project.pbxproj: 39828 * JavaScriptCoreSources.bkl: 39829 Added OpaqueJSString. 39830 39831 2008-08-14 Kevin McCullough <kmccullough (a] apple.com> 39832 39833 Reviewed by Tim. 39834 39835 <rdar://problem/6115819> Notify of profile in console 39836 - Profiles now have a unique ID so that they can be linked to the 39837 console message that announces that a profile completed. 39838 39839 * profiler/HeavyProfile.cpp: 39840 (KJS::HeavyProfile::HeavyProfile): 39841 * profiler/Profile.cpp: 39842 (KJS::Profile::create): 39843 (KJS::Profile::Profile): 39844 * profiler/Profile.h: 39845 (KJS::Profile::uid): 39846 * profiler/ProfileGenerator.cpp: 39847 (KJS::ProfileGenerator::create): 39848 (KJS::ProfileGenerator::ProfileGenerator): 39849 * profiler/ProfileGenerator.h: 39850 * profiler/Profiler.cpp: 39851 (KJS::Profiler::startProfiling): 39852 * profiler/TreeProfile.cpp: 39853 (KJS::TreeProfile::create): 39854 (KJS::TreeProfile::TreeProfile): 39855 * profiler/TreeProfile.h: 39856 39857 2008-08-13 Geoffrey Garen <ggaren (a] apple.com> 39858 39859 Reviewed by Oliver Hunt. 39860 39861 Nixed a PIC branch from JSObject::getOwnPropertySlot, by forcing 39862 fillGetterProperty, which references a global function pointer, 39863 out-of-line. 39864 39865 .2% SunSpider speedup, 4.3% access-nbody speedup, 8.7% speedup on a 39866 custom property access benchmark for objects with one property. 39867 39868 * kjs/JSObject.cpp: 39869 (KJS::JSObject::fillGetterPropertySlot): 39870 39871 2008-08-13 Alp Toker <alp (a] nuanti.com> 39872 39873 Reviewed by Eric Seidel. 39874 39875 https://bugs.webkit.org/show_bug.cgi?id=20349 39876 WTF::initializeThreading() fails if threading is already initialized 39877 39878 Fix threading initialization logic to support cases where 39879 g_thread_init() has already been called elsewhere. 39880 39881 Resolves database-related crashers reported in several applications. 39882 39883 * wtf/ThreadingGtk.cpp: 39884 (WTF::initializeThreading): 39885 39886 2008-08-13 Brad Hughes <bhughes (a] trolltech.com> 39887 39888 Reviewed by Simon. 39889 39890 Fix compiling of QtWebKit in release mode with the Intel C++ Compiler for Linux 39891 39892 The latest upgrade of the intel compiler allows us to compile all of 39893 Qt with optimizations enabled (yay!). 39894 39895 * JavaScriptCore.pro: 39896 39897 2008-08-12 Oliver Hunt <oliver (a] apple.com> 39898 39899 Reviewed by Geoff Garen. 39900 39901 Add peephole optimisation to 'op_not... jfalse...' (eg. if(!...) ) 39902 39903 This is a very slight win in sunspider, and a fairly substantial win 39904 in hot code that does if(!...), etc. 39905 39906 * VM/CodeGenerator.cpp: 39907 (KJS::CodeGenerator::retrieveLastUnaryOp): 39908 (KJS::CodeGenerator::rewindBinaryOp): 39909 (KJS::CodeGenerator::rewindUnaryOp): 39910 (KJS::CodeGenerator::emitJumpIfFalse): 39911 * VM/CodeGenerator.h: 39912 39913 2008-08-12 Dan Bernstein <mitz (a] apple.com> 39914 39915 - JavaScriptCore part of <rdar://problem/6121636> 39916 Make fast*alloc() abort() on failure and add "try" variants that 39917 return NULL on failure. 39918 39919 Reviewed by Darin Adler. 39920 39921 * JavaScriptCore.exp: Exported tryFastCalloc(). 39922 * VM/RegisterFile.h: 39923 (KJS::RegisterFile::RegisterFile): Removed an ASSERT(). 39924 * kjs/JSArray.cpp: 39925 (KJS::JSArray::putSlowCase): Changed to use tryFastRealloc(). 39926 (KJS::JSArray::increaseVectorLength): Ditto. 39927 * kjs/ustring.cpp: 39928 (KJS::allocChars): Changed to use tryFastMalloc(). 39929 (KJS::reallocChars): Changed to use tryFastRealloc(). 39930 * wtf/FastMalloc.cpp: 39931 (WTF::fastZeroedMalloc): Removed null checking of fastMalloc()'s result 39932 and removed extra call to InvokeNewHook(). 39933 (WTF::tryFastZeroedMalloc): Added. Uses tryFastMalloc(). 39934 (WTF::tryFastMalloc): Renamed fastMalloc() to this. 39935 (WTF::fastMalloc): Added. This version abort()s if allocation fails. 39936 (WTF::tryFastCalloc): Renamed fastCalloc() to this. 39937 (WTF::fastCalloc): Added. This version abort()s if allocation fails. 39938 (WTF::tryFastRealloc): Renamed fastRealloc() to this. 39939 (WTF::fastRealloc): Added. This version abort()s if allocation fails. 39940 (WTF::do_malloc): Made this a function template. When the abortOnFailure 39941 template parameter is set, the function abort()s on failure to allocate. 39942 Otherwise, it sets errno to ENOMEM and returns zero. 39943 (WTF::TCMallocStats::fastMalloc): Defined to abort() on failure. 39944 (WTF::TCMallocStats::tryFastMalloc): Added. Does not abort() on 39945 failure. 39946 (WTF::TCMallocStats::fastCalloc): Defined to abort() on failure. 39947 (WTF::TCMallocStats::tryFastCalloc): Added. Does not abort() on 39948 failure. 39949 (WTF::TCMallocStats::fastRealloc): Defined to abort() on failure. 39950 (WTF::TCMallocStats::tryFastRealloc): Added. Does not abort() on 39951 failure. 39952 * wtf/FastMalloc.h: Declared the "try" variants. 39953 39954 2008-08-11 Adam Roben <aroben (a] apple.com> 39955 39956 Move WTF::notFound into its own header so that it can be used 39957 independently of Vector 39958 39959 Rubberstamped by Darin Adler. 39960 39961 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 39962 * JavaScriptCore.xcodeproj/project.pbxproj: 39963 Added NotFound.h to the project. 39964 * wtf/NotFound.h: Added. Moved the notFound constant here... 39965 * wtf/Vector.h: ...from here. 39966 39967 2008-08-11 Alexey Proskuryakov <ap (a] webkit.org> 39968 39969 Reviewed by Mark Rowe. 39970 39971 <rdar://problem/6130393> REGRESSION: PhotoBooth hangs after launching under TOT Webkit 39972 39973 * API/JSContextRef.cpp: (JSGlobalContextRelease): Corrected a comment. 39974 39975 * kjs/collector.cpp: (KJS::Heap::~Heap): Ensure that JSGlobalData is not deleted while 39976 sweeping the heap. 39977 39978 == Rolled over to ChangeLog-2008-08-10 == 39979