1 2008-08-10 Jan Michael Alonzo <jmalonzo (a] webkit.org> 2 3 Reviewed (and updated) by Alp Toker. 4 5 https://bugs.webkit.org/show_bug.cgi?id=16620 6 [GTK] Autotools make dist and make check support 7 8 Get make dist working. 9 10 Note that not all possible configurations have been tested yet. 11 12 * GNUmakefile.am: 13 14 2008-08-09 Alexey Proskuryakov <ap (a] webkit.org> 15 16 Reviewed by Sam Weinig. 17 18 Added same heap debug checks to more code paths. 19 20 * kjs/JSActivation.cpp: 21 (KJS::JSActivation::put): 22 (KJS::JSActivation::putWithAttributes): 23 * kjs/JSGlobalObject.cpp: 24 (KJS::JSGlobalObject::putWithAttributes): 25 * kjs/JSObject.h: 26 (KJS::JSObject::putDirect): 27 * kjs/JSVariableObject.h: 28 (KJS::JSVariableObject::symbolTablePut): 29 (KJS::JSVariableObject::symbolTablePutWithAttributes): 30 31 2008-08-09 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 32 33 Reviewed by Maciej. 34 35 Fix some style issues in the sampling tool. 36 37 * VM/SamplingTool.cpp: 38 (KJS::sleepForMicroseconds): 39 (KJS::SamplingTool::dump): 40 41 2008-08-09 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 42 43 Reviewed by Oliver. 44 45 Revision 35651, despite being a rather trivial change, introduced a 46 large regression on the regexp-dna SunSpider test. This regression 47 stemmed from an increase in the size of CodeBlock::dump(). There is 48 no reason for this method (and several related methods) to be compiled 49 in non-debug builds with the sampling tool disabled. This patch 50 conditionally compiles them, reversing the regression on SunSpider. 51 52 * JavaScriptCore.exp: 53 * VM/CodeBlock.cpp: 54 * VM/CodeBlock.h: 55 * VM/Machine.cpp: 56 57 2008-08-08 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 58 59 Reviewed by Oliver. 60 61 Bug 20330: JSCore crash loading any filehurricane media page 62 <https://bugs.webkit.org/show_bug.cgi?id=20330> 63 64 Fix a typo in the constant loading patch. Also, add a case for 65 op_unexpected_load to CodeBlock::dump(). 66 67 * VM/CodeBlock.cpp: 68 (KJS::CodeBlock::dump): 69 * VM/CodeGenerator.cpp: 70 (KJS::CodeGenerator::addUnexpectedConstant): 71 72 2008-08-08 Matt Lilek <webkit (a] mattlilek.com> 73 74 Not reviewed, build fix. 75 76 * JavaScriptCore.exp: 77 78 2008-08-08 Oliver Hunt <oliver (a] apple.com> 79 80 Reviewed by Cameron Zwarich. 81 82 Improve performance of arithmetic operators 83 84 Added a fast (non-virtual) mechanism to determine if a non-immediate JSValue* 85 is a JSNumberCell. We then use this to allow improved specialisation in many 86 arithmetic operators. SunSpider reports a 2.5% progression overall, with greater 87 than 10% progressions on a number of arithmetic heavy tests. 88 89 * VM/Machine.cpp: 90 (KJS::fastIsNumber): 91 (KJS::fastToInt32): 92 (KJS::fastToUInt32): 93 (KJS::jsLess): 94 (KJS::jsLessEq): 95 (KJS::jsAdd): 96 (KJS::Machine::privateExecute): 97 * kjs/JSNumberCell.h: 98 (KJS::JSNumberCell::fastToInt32): 99 (KJS::JSNumberCell::fastToUInt32): 100 * kjs/collector.cpp: 101 (KJS::allocateBlock): 102 (KJS::Heap::heapAllocate): 103 * kjs/collector.h: 104 (KJS::Heap::fastIsNumber): 105 106 2008-08-06 Adam Roben <aroben (a] apple.com> 107 108 Try to fix the Windows build bots 109 110 * API/JSBase.cpp: Touch this to force JSC to rebuild and re-copy the 111 WTF headers. 112 113 2008-08-06 Tor Arne Vestb <tavestbo (a] trolltech.com> 114 115 Revert change 35595. 116 117 * wtf/RetainPtr.h: 118 119 2008-08-06 Ariya Hidayat <ariya.hidayat (a] trolltech.com> 120 121 Fix non-Mac build. 122 123 * wtf/RetainPtr.h: CoreFoundation only for PLATFORM(MAC) 124 125 2008-08-06 Ariya Hidayat <ariya.hidayat (a] trolltech.com> 126 127 Fix non-Mac build. 128 129 * wtf/RetainPtr.h: CoreFoundation only for PLATFORM(MAC) 130 131 2008-08-06 Csaba Osztrogonac <oszi (a] inf.u-szeged.hu> 132 133 Reviewed by Darin. Landed by Cameron. 134 135 Bug 20272: typo in JavaScriptCore 136 <https://bugs.webkit.org/show_bug.cgi?id=20272> 137 138 Correct the documentation for op_not. (typo) 139 Fix #undef. (typo) 140 141 * VM/Machine.cpp: 142 (KJS::Machine::privateExecute): 143 144 2008-08-06 Cameron Zwarich <cwzwarich (a] webkit.org> 145 146 Reviewed by Maciej. 147 148 Bug 20286: Load constants all at once instead of using op_load 149 <https://bugs.webkit.org/show_bug.cgi?id=20286> 150 151 Load constants all at once into temporary registers instead of using 152 individual instances of op_load. 153 154 This is a 2.6% speedup on SunSpider. 155 156 * JavaScriptCore.exp: 157 * VM/CodeBlock.cpp: 158 (KJS::CodeBlock::dump): 159 (KJS::CodeBlock::mark): 160 * VM/CodeBlock.h: 161 * VM/CodeGenerator.cpp: 162 (KJS::CodeGenerator::CodeGenerator): 163 (KJS::CodeGenerator::newTemporary): 164 (KJS::CodeGenerator::addConstant): 165 (KJS::CodeGenerator::addUnexpectedConstant): 166 (KJS::CodeGenerator::emitLoad): 167 (KJS::CodeGenerator::emitUnexpectedLoad): 168 (KJS::CodeGenerator::emitNewError): 169 * VM/CodeGenerator.h: 170 * VM/Machine.cpp: 171 (KJS::slideRegisterWindowForCall): 172 (KJS::Machine::unwindCallFrame): 173 (KJS::Machine::throwException): 174 (KJS::Machine::execute): 175 (KJS::Machine::privateExecute): 176 * VM/Machine.h: 177 * VM/Opcode.h: 178 * VM/RegisterID.h: 179 (KJS::RegisterID::RegisterID): 180 (KJS::RegisterID::makeConstant): 181 (KJS::RegisterID::isTemporary): 182 * kjs/NodeInfo.h: 183 * kjs/Parser.cpp: 184 (KJS::Parser::didFinishParsing): 185 * kjs/Parser.h: 186 (KJS::Parser::parse): 187 * kjs/grammar.y: 188 * kjs/nodes.cpp: 189 (KJS::NullNode::emitCode): 190 (KJS::BooleanNode::emitCode): 191 (KJS::NumberNode::emitCode): 192 (KJS::StringNode::emitCode): 193 (KJS::ArrayNode::emitCode): 194 (KJS::DeleteResolveNode::emitCode): 195 (KJS::DeleteValueNode::emitCode): 196 (KJS::VoidNode::emitCode): 197 (KJS::ConstDeclNode::emitCodeSingle): 198 (KJS::ReturnNode::emitCode): 199 (KJS::ScopeNode::ScopeNode): 200 (KJS::ProgramNode::ProgramNode): 201 (KJS::ProgramNode::create): 202 (KJS::EvalNode::EvalNode): 203 (KJS::EvalNode::create): 204 (KJS::FunctionBodyNode::FunctionBodyNode): 205 (KJS::FunctionBodyNode::create): 206 (KJS::FunctionBodyNode::emitCode): 207 * kjs/nodes.h: 208 (KJS::ScopeNode::neededConstants): 209 210 2008-08-05 Maciej Stachowiak <mjs (a] apple.com> 211 212 Reviewed by Cameron. 213 214 - add fast path for immediates to % operator, as we have for many other math ops 215 216 This fixes handling for a 0 divisor relative to the last patch. Only an 0.2% speedup on SunSpider but 217 still a 1.4x win on Oliver's prime test. 218 219 * VM/Machine.cpp: 220 (KJS::Machine::privateExecute): 221 222 2008-08-05 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 223 224 Reviewed by Darin. 225 226 Bug 20293: Crash in JavaScript codegen for eval("const a;") 227 <https://bugs.webkit.org/show_bug.cgi?id=20293> 228 229 Correctly handle constant declarations in eval code with no initializer. 230 231 * kjs/nodes.cpp: 232 (KJS::ConstDeclNode::emitCodeSingle): 233 234 2008-08-05 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 235 236 Reviewed by Oliver. 237 238 Roll out r35555 because of correctness issues. 239 240 * VM/Machine.cpp: 241 (KJS::Machine::privateExecute): 242 243 2008-08-05 Maciej Stachowiak <mjs (a] apple.com> 244 245 Reviewed by Geoff. 246 247 - add fast path for immediates to % operator, as we have for many other math ops 248 249 0.6% speedup on SunSpider. 1.4x speedup on a prime testing torture test that Oliver whipped up. 250 251 * VM/Machine.cpp: 252 (KJS::Machine::privateExecute): 253 254 2008-07-31 Oliver Hunt <oliver (a] apple.com> 255 256 Reviewed by Cameron Zwarich. 257 258 Bug 19359: JavaScriptCore behaves differently from FF2/3 and IE when handling context in catch statement 259 <https://bugs.webkit.org/show_bug.cgi?id=19359> 260 261 Make our catch behave like Firefox and IE, we do this by using a StaticScopeObject 262 instead of a generic JSObject for the scope node. We still don't make use of the 263 fact that we have a static scope inside the catch block, so the internal performance 264 of the catch block is not improved, even though technically it would be possible to 265 do so. 266 267 * VM/CodeBlock.cpp: 268 (KJS::CodeBlock::dump): 269 * VM/CodeGenerator.cpp: 270 (KJS::CodeGenerator::emitPushNewScope): 271 * VM/CodeGenerator.h: 272 * VM/Machine.cpp: 273 (KJS::createExceptionScope): 274 (KJS::Machine::privateExecute): 275 * VM/Machine.h: 276 * VM/Opcode.h: 277 * kjs/JSStaticScopeObject.cpp: 278 (KJS::JSStaticScopeObject::toThisObject): 279 (KJS::JSStaticScopeObject::put): 280 * kjs/JSStaticScopeObject.h: 281 * kjs/nodes.cpp: 282 (KJS::TryNode::emitCode): 283 284 2008-08-02 Rob Gowin <robg (a] gowin.net> 285 286 Reviewed by Eric Seidel. 287 288 Added JavaScriptCore/API/WebKitAvailability to list of files in 289 javascriptcore_h_api. 290 291 * GNUmakefile.am: 292 293 2008-08-01 Alexey Proskuryakov <ap (a] webkit.org> 294 295 Rubber-stamped by Maciej. 296 297 Remove JSGlobalData::DataInstance. It was only needed when we had per-thread JSGlobalData 298 instances. 299 300 * kjs/JSGlobalData.h: 301 302 2008-07-31 Kevin Ollivier <kevino (a] theolliviers.com> 303 304 Second attempt at Windows/wx build fix. Instead of avoiding inclusion of windows.h, 305 use defines, etc. to avoid conflicts in each affected file. Also, change PLATFORM(WIN) 306 to PLATFORM(WIN_OS) so that other ports using Windows headers get the right impls. 307 308 * VM/SamplingTool.cpp: 309 * wtf/Threading.h: 310 311 2008-07-31 Anders Carlsson <andersca (a] apple.com> 312 313 Reviewed by Adam. 314 315 Fix Windows build. 316 317 * kjs/collector.h: 318 * wtf/FastMalloc.cpp: 319 320 2008-07-31 Csaba Osztrogonac <oszi (a] inf.u-szeged.hu> 321 322 Reviewed by Simon. 323 324 Bug 20170: [Qt] missing namespace defines in JavaScriptCore.pro 325 <https://bugs.webkit.org/show_bug.cgi?id=20170> 326 327 * JavaScriptCore.pro: Added missing define. 328 329 2008-07-31 Alexey Proskuryakov <ap (a] webkit.org> 330 331 Rubber-stamped by Maciej. 332 333 Eliminate JSLock (it was already disabled, removing the stub implementaion and all 334 call sites now). 335 336 * API/JSBase.cpp: 337 (JSEvaluateScript): 338 (JSCheckScriptSyntax): 339 (JSGarbageCollect): 340 * API/JSCallbackConstructor.cpp: 341 (KJS::constructJSCallback): 342 * API/JSCallbackFunction.cpp: 343 (KJS::JSCallbackFunction::call): 344 * API/JSCallbackObjectFunctions.h: 345 (KJS::::init): 346 (KJS::::getOwnPropertySlot): 347 (KJS::::put): 348 (KJS::::deleteProperty): 349 (KJS::::construct): 350 (KJS::::hasInstance): 351 (KJS::::call): 352 (KJS::::getPropertyNames): 353 (KJS::::toNumber): 354 (KJS::::toString): 355 (KJS::::staticValueGetter): 356 (KJS::::callbackGetter): 357 * API/JSContextRef.cpp: 358 (JSGlobalContextCreateInGroup): 359 (JSGlobalContextRetain): 360 (JSGlobalContextRelease): 361 * API/JSObjectRef.cpp: 362 (JSObjectMake): 363 (JSObjectMakeFunctionWithCallback): 364 (JSObjectMakeConstructor): 365 (JSObjectMakeFunction): 366 (JSObjectHasProperty): 367 (JSObjectGetProperty): 368 (JSObjectSetProperty): 369 (JSObjectGetPropertyAtIndex): 370 (JSObjectSetPropertyAtIndex): 371 (JSObjectDeleteProperty): 372 (JSObjectCallAsFunction): 373 (JSObjectCallAsConstructor): 374 (JSObjectCopyPropertyNames): 375 (JSPropertyNameArrayRelease): 376 (JSPropertyNameAccumulatorAddName): 377 * API/JSStringRef.cpp: 378 (JSStringRelease): 379 * API/JSValueRef.cpp: 380 (JSValueIsEqual): 381 (JSValueIsInstanceOfConstructor): 382 (JSValueMakeNumber): 383 (JSValueMakeString): 384 (JSValueToNumber): 385 (JSValueToStringCopy): 386 (JSValueToObject): 387 (JSValueProtect): 388 (JSValueUnprotect): 389 * ForwardingHeaders/JavaScriptCore/JSLock.h: Removed. 390 * GNUmakefile.am: 391 * JavaScriptCore.exp: 392 * JavaScriptCore.order: 393 * JavaScriptCore.pri: 394 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 395 * JavaScriptCore.xcodeproj/project.pbxproj: 396 * JavaScriptCoreSources.bkl: 397 * kjs/AllInOneFile.cpp: 398 * kjs/JSGlobalData.cpp: 399 (KJS::JSGlobalData::JSGlobalData): 400 * kjs/JSGlobalData.h: 401 * kjs/JSGlobalObject.cpp: 402 (KJS::JSGlobalObject::~JSGlobalObject): 403 (KJS::JSGlobalObject::init): 404 * kjs/JSLock.cpp: Removed. 405 * kjs/JSLock.h: Removed. 406 * kjs/Shell.cpp: 407 (functionGC): 408 (jscmain): 409 * kjs/collector.cpp: 410 (KJS::Heap::~Heap): 411 (KJS::Heap::heapAllocate): 412 (KJS::Heap::setGCProtectNeedsLocking): 413 (KJS::Heap::protect): 414 (KJS::Heap::unprotect): 415 (KJS::Heap::collect): 416 * kjs/identifier.cpp: 417 * kjs/interpreter.cpp: 418 (KJS::Interpreter::checkSyntax): 419 (KJS::Interpreter::evaluate): 420 421 2008-07-31 Alexey Proskuryakov <ap (a] webkit.org> 422 423 Rubber-stamped by Oliver Hunt. 424 425 Fix the Mac project to not display "test/" as part of file name for tests. 426 427 * JavaScriptCore.xcodeproj/project.pbxproj: 428 429 2008-07-31 Eric Seidel <eric (a] webkit.org> 430 431 Reviewed by Alexey Proskuryakov. 432 433 Rename USE(MULTIPLE_THREADS) to ENABLE(JSC_MULTIPLE_THREADS) 434 to better match the use/enable pattern (and better describe 435 the usage of the feature in question.) 436 437 I also fixed a couple other ENABLE_ macros to be pre-processor 438 definition override-able to match the rest of the ENABLE_ macros 439 since it seems to be our convention that build systems can set 440 ENABLE_ macros in Makefiles. 441 442 * kjs/InitializeThreading.cpp: 443 (KJS::initializeThreadingOnce): 444 * kjs/JSGlobalData.cpp: 445 (KJS::JSGlobalData::JSGlobalData): 446 (KJS::JSGlobalData::~JSGlobalData): 447 * kjs/MathObject.cpp: 448 * kjs/collector.cpp: 449 (KJS::Heap::Heap): 450 (KJS::Heap::~Heap): 451 (KJS::allocateBlock): 452 (KJS::Heap::markStackObjectsConservatively): 453 * kjs/collector.h: 454 * kjs/dtoa.cpp: 455 (KJS::pow5mult): 456 (KJS::rv_alloc): 457 (KJS::freedtoa): 458 (KJS::dtoa): 459 * wtf/FastMalloc.cpp: 460 * wtf/Platform.h: 461 * wtf/RefCountedLeakCounter.cpp: 462 463 2008-07-30 Eric Seidel <eric (a] webkit.org> 464 465 Reviewed by Mark Rowe. 466 467 Try to clean up our usage of USE(MULTIPLE_THREADS) vs. USE(PTHREADS) a little. 468 It looks like JSC assumes that if MULTIPLE_THREADS is defined, then pthreads will always be available 469 I'm not sure that's always the case for gtk, certainly not for Windows. We should eventually go back 470 and fix wtf/Threading.h to cover all these cases some day. 471 472 * kjs/JSLock.cpp: 473 * kjs/collector.h: 474 * wtf/Platform.h: 475 476 2008-07-30 Eric Seidel <eric (a] webkit.org> 477 478 Reviewed by Oliver. 479 480 MSVC warns when structs are called classes or vice versa. 481 Make all the source refer to JSGlobalData as a class. 482 483 * kjs/CommonIdentifiers.h: 484 * kjs/JSGlobalData.h: 485 * kjs/Parser.h: 486 * kjs/lexer.h: 487 488 2008-07-30 Alexey Proskuryakov <ap (a] webkit.org> 489 490 Reviewed by Geoff Garen. 491 492 Add consistency checks to UString to document and enforce its design. 493 494 * kjs/ustring.cpp: 495 (KJS::UString::Rep::create): 496 (KJS::UString::Rep::destroy): 497 (KJS::UString::Rep::checkConsistency): 498 (KJS::UString::expandCapacity): 499 (KJS::UString::expandPreCapacity): 500 (KJS::UString::UString): 501 (KJS::UString::spliceSubstringsWithSeparators): 502 (KJS::UString::append): 503 * kjs/ustring.h: 504 (KJS::UString::Rep::checkConsistency): 505 506 2008-07-30 Gavin Barraclough <barraclough (a] apple.com> 507 508 Reviewed by Geoff Garen. 509 510 Fixes for Windows and non-AllInOne file build with SamplingTool, plus review fixes. 511 512 * GNUmakefile.am: Adding SamplingTool.cpp to build. 513 * JavaScriptCore.exp: Export hooks to init & control SamplingTool. 514 * JavaScriptCore.pri: Adding SamplingTool.cpp to build. 515 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Adding SamplingTool.cpp to build. 516 * JavaScriptCore.xcodeproj/project.pbxproj: Adding SamplingTool.cpp to build. 517 * JavaScriptCoreSources.bkl: Adding SamplingTool.cpp to build. 518 * VM/Machine.cpp: MACHINE_SAMPLING_callingNativeFunction renamed MACHINE_SAMPLING_callingHostFunction 519 * VM/Machine.h: 520 * VM/Opcode.cpp: SamplingTool moved to SamplingTool.cpp/.h, opcodeNames generated from FOR_EACH_OPCODE_ID. 521 * VM/Opcode.h: 522 * VM/SamplingTool.cpp: Added .cpp/.h for SamplingTool. 523 * VM/SamplingTool.h: 524 * kjs/Shell.cpp: Switched SAMPLING_TOOL_ENABLED to ENABLE_SAMPLING_TOOL. 525 * wtf/Platform.h: Added ENABLE_SAMPLING_TOOL config option. 526 * kjs/nodes.cpp: Header include to fix non-AllInOne builds. 527 528 2008-07-30 Ariya Hidayat <ariya.hidayat (a] trolltech.com> 529 530 Reviewed by Alexey Proskuryakov. 531 532 Fix compilation without multi-threading support. 533 534 * kjs/collector.cpp: 535 (KJS::Heap::Heap): 536 537 2008-07-30 Anders Carlsson <andersca (a] apple.com> 538 539 Add WebKitAvailability.h forwarding header. 540 541 * ForwardingHeaders/JavaScriptCore/WebKitAvailability.h: Added. 542 543 2008-07-30 Anders Carlsson <andersca (a] apple.com> 544 545 Fix the else. 546 547 * API/WebKitAvailability.h: 548 549 2008-07-30 Anders Carlsson <andersca (a] apple.com> 550 551 * API/WebKitAvailability.h: 552 Fix Windows (and other non-Mac builds). 553 554 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 555 Add WebKitAvailability.h to the project. 556 557 2008-07-30 Anders Carlsson <andersca (a] apple.com> 558 559 One step closer towards fixing the Windows build. 560 561 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: 562 Make sure to copy WebKitAvailability.h 563 564 2008-07-29 Gavin Barraclough <barraclough (a] apple.com> 565 566 Reviewed by Geoff Garen. 567 568 Bug 20209: Atomize constant strings 569 <https://bugs.webkit.org/show_bug.cgi?id=20209> 570 571 Prevents significant performance degradation seen when a script contains multiple 572 identical strings that are used as keys to identify properties on objects. 573 574 No performance change on SunSpider. 575 576 * kjs/nodes.cpp: Atomize constant strings. 577 578 2008-07-30 Oliver Hunt <oliver (a] apple.com> 579 580 Reviewed by Alexey Proskuryakov. 581 582 <rdar://problem/6111648> JavaScript exceptions fail if the scope chain includes the global object 583 584 In an attempt to remove the branch I just added to KJS::depth I 585 used the existence of a Variable Object at a point in the scope 586 chain as an indicator of function or global scope activation. 587 However this assumption results in incorrect behaviour if the 588 global object is injected into the scope chain with 'with'. 589 590 * VM/Machine.cpp: 591 (KJS::depth): 592 593 2008-07-30 Alexey Proskuryakov <ap (a] webkit.org> 594 595 Reviewed by Geoff Garen. 596 597 Don't call JSGarbageCollect() on a released context. 598 599 * API/testapi.c: (main): 600 601 2008-07-29 Alexey Proskuryakov <ap (a] webkit.org> 602 603 Reviewed by Geoff Garen. 604 605 Implement JSContextGroup APIs to make concurrent execution possible for 606 JavaScriptCore clients. 607 608 This changes the behavior of JSGlobalContextCreate(), so that it now uses a private context 609 group for each context, making JSlock implicit locking unnecessary. 610 611 * API/JSContextRef.h: 612 * API/JSContextRef.cpp: 613 (JSContextGroupCreate): 614 (JSContextGroupRetain): 615 (JSContextGroupRelease): 616 (JSGlobalContextCreate): 617 (JSGlobalContextCreateInGroup): 618 (JSGlobalContextRelease): 619 (JSContextGetGroup): 620 Added new methods. JSGlobalContextCreate() calls JSGlobalContextCreateInGroup() now. 621 622 * API/APICast.h: (toJS): (toRef): Added converters for JSContextGroupRef. 623 * API/JSBase.cpp: (JSGarbageCollect): JSGarbageCollect(0) is now a no-op, and the passed in 624 context is actually used. 625 626 * API/JSBase.h: Aded a typedef for JSContextGroupRef. Updated documentation for 627 JSGarbageCollect(). 628 629 * JavaScriptCore.exp: Removed JSGlobalData::sharedInstance(). 630 631 * kjs/JSGlobalData.cpp: 632 * kjs/JSGlobalData.h: 633 Removed support for JSGlobalData shared instance. JSGlobalData::isSharedInstance member 634 variable still remains, to be deleted in a followup patch. 635 636 * kjs/JSLock.cpp: (KJS::JSLock::JSLock): Disabled JSLock, to be deleted in a follow-up patch. 637 638 * kjs/collector.cpp: 639 (KJS::Heap::markOtherThreadConservatively): Removed an assertion that referenced 640 JSGlobalData::sharedInstance. 641 642 * kjs/collector.h: Made Heap destructor public, so that JSContextRelease can use it. 643 644 2008-07-29 Alexey Proskuryakov <ap (a] webkit.org> 645 646 Reviewed by Geoff Garen. 647 648 Fix a leak of ThreadRegistrar objects. 649 650 As the heap is usually deleted when registered threads still exist, ThreadSpecific doesn't 651 have a chance to clean up per-thread object. Switched to native pthread calls, storing a 652 plain pointer that doesn't require cleanup. 653 654 * kjs/collector.cpp: 655 (KJS::PlatformThread::PlatformThread): 656 (KJS::Heap::Thread::Thread): 657 (KJS::Heap::Heap): 658 (KJS::Heap::~Heap): 659 (KJS::Heap::registerThread): 660 (KJS::Heap::unregisterThread): 661 * kjs/collector.h: 662 663 2008-07-29 Alexey Proskuryakov <ap (a] webkit.org> 664 665 Reviewed by Sam Weinig. 666 667 https://bugs.webkit.org/show_bug.cgi?id=20169 668 Memory allocated with fastMalloc is freed with delete 669 670 * VM/JSPropertyNameIterator.cpp: 671 (KJS::JSPropertyNameIterator::invalidate): Free the array properly. 672 (KJS::JSPropertyNameIterator::~JSPropertyNameIterator): Delete the array by calling 673 invalidate(). 674 675 2008-07-29 Mark Rowe <mrowe (a] apple.com> 676 677 Attempt to fix the Qt build. 678 679 * wtf/ThreadingQt.cpp: Add the extra argument to createThread. 680 681 2008-07-29 Adam Roben <aroben (a] apple.com> 682 683 Change Vector::find to return an index instead of an iterator 684 685 Indices are more natural than iterators when working with Vector. 686 687 Reviewed by John Sullivan. 688 689 * wtf/Vector.h: 690 (WTF::Vector::find): Changed to iterate the Vector manually and return 691 the index of the found item, rather than an iterator. When the item 692 could not be found, we return WTF::notFound. 693 694 2008-07-29 Adam Roben <aroben (a] apple.com> 695 696 Windows build fix 697 698 * wtf/ThreadingWin.cpp: 699 (WTF::setThreadName): Move a misplaced assertion to here... 700 (WTF::createThread): ...from here. 701 702 2008-07-29 Adam Roben <aroben (a] apple.com> 703 704 Add support for setting thread names on Windows 705 706 These thread names make it much easier to identify particular threads 707 in Visual Studio's Threads panel. 708 709 WTF::createThread now takes a const char* representing the thread's 710 name. On Windows, we throw a special exception to set this string as 711 the thread's name. Other platforms do nothing with this name for now. 712 713 Reviewed by Anders Carlsson. 714 715 * JavaScriptCore.exp: Export the new version of createThread that 716 takes 3 arguments (the old one continues to be exported for backward 717 compatibility). 718 * wtf/Threading.h: Add a threadName argument to createThread. 719 720 * wtf/ThreadingGtk.cpp: 721 (WTF::createThread): 722 * wtf/ThreadingNone.cpp: 723 (WTF::createThread): 724 Updated for function signature change. 725 726 * wtf/ThreadingPthreads.cpp: 727 (WTF::createThread): Updated for function signature change. We keep 728 around the old 2-argument version of createThread for backward 729 compatibility. 730 731 * wtf/ThreadingWin.cpp: 732 (WTF::setThreadName): Added. This function's implementation came from 733 MSDN. 734 (WTF::initializeThreading): Set the name of the main thread. 735 (WTF::createThread): Call setThreadName. We keep around the old 736 2-argument version of createThread for backward compatibility. 737 738 2008-07-29 Alexey Proskuryakov <ap (a] webkit.org> 739 740 Reviewed by Oliver Hunt. 741 742 Store UString::Rep::isStatic bit in identifierTable pointer instead of reportedCost for 743 slightly nicer code and a 0.5% SunSpider improvement. 744 745 * API/JSClassRef.cpp: 746 (OpaqueJSClass::~OpaqueJSClass): 747 (OpaqueJSClassContextData::OpaqueJSClassContextData): 748 * API/JSStringRef.cpp: 749 (JSStringRelease): 750 * kjs/PropertyNameArray.cpp: 751 (KJS::PropertyNameArray::add): 752 * kjs/identifier.cpp: 753 (KJS::IdentifierTable::~IdentifierTable): 754 (KJS::IdentifierTable::add): 755 (KJS::Identifier::addSlowCase): 756 (KJS::Identifier::remove): 757 * kjs/identifier.h: 758 (KJS::Identifier::add): 759 * kjs/ustring.cpp: 760 (KJS::): 761 (KJS::UString::Rep::create): 762 (KJS::UString::Rep::destroy): 763 * kjs/ustring.h: 764 (KJS::UString::Rep::identifierTable): 765 (KJS::UString::Rep::setIdentifierTable): 766 (KJS::UString::Rep::isStatic): 767 (KJS::UString::Rep::setStatic): 768 (KJS::UString::cost): 769 770 2008-07-28 Geoffrey Garen <ggaren (a] apple.com> 771 772 Reviewed by Sam Weinig. 773 774 Renamed "ConstructTypeNative" => "ConstructTypeHost". 775 776 2008-07-26 Mark Rowe <mrowe (a] apple.com> 777 778 Speculative fix for the wx build. 779 780 * JavaScriptCoreSources.bkl: Add JSStaticScopeObject.cpp to the list of source files. 781 782 2008-07-25 Oliver Hunt <oliver (a] apple.com> 783 784 RS=Cameron Zwarich. 785 786 Whoops, forgot to save style correction. 787 788 * kjs/JSStaticScopeObject.h: 789 790 2008-07-25 Oliver Hunt <oliver (a] apple.com> 791 792 Reviewed by Cameron Zwarich. 793 794 Bug 19718: Named anonymous functions are slow accessing global variables 795 <https://bugs.webkit.org/show_bug.cgi?id=19718> 796 797 To fix this we switch over to an activation-like scope object for 798 on which we attach the function name property, and add logic to 799 prevent cross scope assignment to read only properties. 800 801 * GNUmakefile.am: 802 * JavaScriptCore.pri: 803 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 804 * JavaScriptCore.xcodeproj/project.pbxproj: 805 * VM/CodeGenerator.cpp: 806 (KJS::CodeGenerator::findScopedProperty): 807 (KJS::CodeGenerator::emitResolve): 808 * VM/CodeGenerator.h: 809 * kjs/AllInOneFile.cpp: 810 * kjs/JSStaticScopeObject.cpp: Added. 811 (KJS::JSStaticScopeObject::putWithAttributes): 812 (KJS::JSStaticScopeObject::isDynamicScope): 813 (KJS::JSStaticScopeObject::~JSStaticScopeObject): 814 (KJS::JSStaticScopeObject::getOwnPropertySlot): 815 * kjs/JSStaticScopeObject.h: Added. 816 (KJS::JSStaticScopeObject::JSStaticScopeObjectData::JSStaticScopeObjectData): 817 (KJS::JSStaticScopeObject::JSStaticScopeObject): 818 * kjs/nodes.cpp: 819 (KJS::FunctionCallResolveNode::emitCode): 820 (KJS::PostfixResolveNode::emitCode): 821 (KJS::PrefixResolveNode::emitCode): 822 (KJS::ReadModifyResolveNode::emitCode): 823 (KJS::AssignResolveNode::emitCode): 824 (KJS::FuncExprNode::makeFunction): 825 826 2008-07-25 kevino <kevino (a] theolliviers.com> 827 828 wx build fix for Win. 829 830 On wx/Win, including windows.h in Threading.h causes multiply-defined symbol errors 831 for libjpeg and wx, and also wx needs to include windows.h itself first for wx 832 includes to work right. So until we can find a better solution to this problem, 833 on wx, we work around the need to include windows.h here. 834 835 * wtf/Threading.h: 836 837 2008-07-25 Adam Roben <aroben (a] apple.com> 838 839 Windows build fix 840 841 * JavaScriptCore.vcproj/testapi/testapi.vcproj: Add API/ to the 842 include path. 843 844 2008-07-25 Simon Hausmann <hausmann (a] webkit.org> 845 846 Fix the build of jsc on Qt/Windows, make sure os-win32 is in the 847 include search path (added by WebKit.pri). 848 849 * kjs/jsc.pro: 850 851 2008-07-25 Alexey Proskuryakov <ap (a] webkit.org> 852 853 Reviewed by Simon Hausmann. 854 855 Move JavaScriptCore API tests into a subdirectory of their own to avoid header name 856 conflicts and developer confusion. 857 858 * API/JSNode.c: Removed. 859 * API/JSNode.h: Removed. 860 * API/JSNodeList.c: Removed. 861 * API/JSNodeList.h: Removed. 862 * API/Node.c: Removed. 863 * API/Node.h: Removed. 864 * API/NodeList.c: Removed. 865 * API/NodeList.h: Removed. 866 * API/minidom.c: Removed. 867 * API/minidom.html: Removed. 868 * API/minidom.js: Removed. 869 * API/testapi.c: Removed. 870 * API/testapi.js: Removed. 871 * API/tests: Added. 872 * API/tests/JSNode.c: Copied from JavaScriptCore/API/JSNode.c. 873 * API/tests/JSNode.h: Copied from JavaScriptCore/API/JSNode.h. 874 * API/tests/JSNodeList.c: Copied from JavaScriptCore/API/JSNodeList.c. 875 * API/tests/JSNodeList.h: Copied from JavaScriptCore/API/JSNodeList.h. 876 * API/tests/Node.c: Copied from JavaScriptCore/API/Node.c. 877 * API/tests/Node.h: Copied from JavaScriptCore/API/Node.h. 878 * API/tests/NodeList.c: Copied from JavaScriptCore/API/NodeList.c. 879 * API/tests/NodeList.h: Copied from JavaScriptCore/API/NodeList.h. 880 * API/tests/minidom.c: Copied from JavaScriptCore/API/minidom.c. 881 * API/tests/minidom.html: Copied from JavaScriptCore/API/minidom.html. 882 * API/tests/minidom.js: Copied from JavaScriptCore/API/minidom.js. 883 * API/tests/testapi.c: Copied from JavaScriptCore/API/testapi.c. 884 * API/tests/testapi.js: Copied from JavaScriptCore/API/testapi.js. 885 * GNUmakefile.am: 886 * JavaScriptCore.vcproj/testapi/testapi.vcproj: 887 * JavaScriptCore.xcodeproj/project.pbxproj: 888 889 2008-07-25 Simon Hausmann <hausmann (a] webkit.org> 890 891 Prospective WX build fix, add JavaScriptCore/API to the include search 892 path. 893 894 * jscore.bkl: 895 896 2008-07-25 Simon Hausmann <hausmann (a] webkit.org> 897 898 Rubber-stamped by Lars. 899 900 Fix the build on Windows. operator new for ArgList is implemented using fastMalloc() 901 but operator delete was not implemented. Unfortunately MSVC decides to call/reference 902 the function, so a simple implementation using fastFree() fixes the build. 903 904 * kjs/ArgList.h: 905 (KJS::ArgList::operator delete): 906 907 2008-07-25 Simon Hausmann <hausmann (a] webkit.org> 908 909 Discussed with and rubber-stamped by Lars. 910 911 Fix the build system for the Qt port. 912 913 Recent JavaScriptCore changes require the addition of JavaScriptCore/API to the 914 include search path. With a build process that combines JavaScriptCore and 915 WebCore in one build process/Makefile the existance of 916 JavaScriptCore/API/Node.h and WebCore/dom/Node.h causes include conflicts. 917 918 This commit solves this by introducing a separate build of JavaScriptCore into 919 a static library. 920 921 As a result of the split-up a race-condition due to broken dependencies of 922 regular source files to header files of generated sources showed up very 923 frequently when doing parallel builds (which the buildbot does). This commit at 924 the same time tries to address the dependency problem by making the 925 addExtraCompiler() function also generate a pseudo extra compiler that 926 represents the header file output, so that qmake is aware of the creation of 927 the header file for dependency calculation. 928 929 At the same time I removed a lot of cruft from the pro files to ease maintenance. 930 931 * JavaScriptCore.pri: 932 * JavaScriptCore.pro: Added. 933 * kjs/jsc.pro: 934 935 2008-07-24 Geoffrey Garen <ggaren (a] apple.com> 936 937 Reviewed by Maciej Stachowiak. 938 939 Fixed a strict aliasing violation, which caused hash tables with floating 940 point keys not to find items that were indeed in the tables 941 (intermittently, and only in release builds, of course). 942 943 SunSpider reports no change. 944 945 This bug doesn't seem to affect any existing code, but it causes obvious 946 crashes in some new code I'm working on. 947 948 * wtf/HashFunctions.h: 949 (WTF::FloatHash::hash): Use a union when punning between a float / double 950 and an unsigned (bucket of bits). With strict aliasing enabled, unions 951 are the only safe way to do this kind of type punning. 952 953 * wtf/HashTable.h: When rehashing, ASSERT that the item we just added to 954 the table is indeed in the table. In the buggy case described above, this 955 ASSERT fires. 956 957 2008-07-24 Oliver Hunt <oliver (a] apple.com> 958 959 Reviewed by Alexey Proskuryakov. 960 961 Bug 20142: REGRESSION(r35245): /=/ weirdness 962 <https://bugs.webkit.org/show_bug.cgi?id=20142> 963 964 When adding all the meta data needed for exception error messages 965 I accidentally clobbered the handling of regex beginning with /=. 966 967 * kjs/grammar.y: 968 969 2008-07-23 Alp Toker <alp (a] nuanti.com> 970 971 Build fix after r35293: Add API/ to the include path. 972 973 * GNUmakefile.am: 974 975 2008-07-23 Adam Roben <aroben (a] apple.com> 976 977 Windows build fixes 978 979 Build fix after r35293: 980 981 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add API/ 982 to the include path. 983 984 Build fix after r35305: 985 986 * VM/Machine.cpp: 987 * VM/Machine.h: 988 * VM/Opcode.cpp: 989 * VM/Opcode.h: 990 Completely compile out all sampler-related code when 991 SAMPLING_TOOL_ENABLED is 0. The sampler code can't be compiled 1) on 992 non-AllInOne configurations due to circular header dependencies, and 993 2) on platforms that don't have a usleep() function, such as Windows. 994 995 2008-07-23 Oliver Hunt <oliver (a] apple.com> 996 997 Reviewed by Geoff Garen and Sam Weinig. 998 999 Improve switch performance. 1000 1001 Improve switch performance by converting to a hashmap based jump 1002 table to avoid the sequence of dispatches that would otherwise be 1003 needed. This results in a 9-19x performance win for string switches 1004 based on ad hoc testing, and a 6x improvement for integer switch 1005 statements. SunSpider reports a 1.2% progression. 1006 1007 * VM/CodeBlock.cpp: 1008 (KJS::CodeBlock::dump): 1009 (KJS::SimpleJumpTable::offsetForValue): 1010 * VM/CodeBlock.h: 1011 * VM/CodeGenerator.cpp: 1012 (KJS::CodeGenerator::beginSwitch): 1013 (KJS::prepareJumpTableForImmediateSwitch): 1014 (KJS::prepareJumpTableForCharacterSwitch): 1015 (KJS::prepareJumpTableForStringSwitch): 1016 (KJS::CodeGenerator::endSwitch): 1017 * VM/CodeGenerator.h: 1018 * VM/Machine.cpp: 1019 (KJS::offsetForStringSwitch): 1020 (KJS::Machine::privateExecute): 1021 * VM/Opcode.cpp: 1022 (KJS::): 1023 * VM/Opcode.h: 1024 * kjs/JSImmediate.h: 1025 * kjs/nodes.cpp: 1026 (KJS::): 1027 (KJS::processClauseList): 1028 (KJS::CaseBlockNode::tryOptimisedSwitch): 1029 (KJS::CaseBlockNode::emitCodeForBlock): 1030 * kjs/nodes.h: 1031 (KJS::SwitchInfo::): 1032 1033 2008-07-23 Gavin Barraclough <barraclough (a] apple.com> 1034 1035 Reviewed by Geoff Garen. 1036 1037 Sampling tool to analyze cost of instruction execution and identify hot regions of JS code. 1038 Enable Switches by setting SAMPLING_TOOL_ENABLED in Opcode.h. 1039 1040 * JavaScriptCore.exp: Export symbols for Shell.cpp. 1041 * VM/Machine.cpp: Added sampling hooks. 1042 * VM/Machine.h: Machine contains a pointer to a sampler, when sampling. 1043 * VM/Opcode.cpp: Tool implementation. 1044 * VM/Opcode.h: Tool declaration. 1045 * kjs/Shell.cpp: Initialize the sampler, if enabled. 1046 * kjs/nodes.cpp: Added sampling hooks. 1047 1048 2008-07-23 Gabor Loki <loki (a] inf.u-szeged.hu> 1049 1050 Bug 20097: [Qt] 20% Sunspider slow-down 1051 1052 <https://bugs.webkit.org/show_bug.cgi?id=20097> 1053 1054 Reviewed by Simon Hausmann. 1055 1056 * kjs/jsc.pro: Added missing NDEBUG define for release builds. 1057 1058 2008-07-23 Alexey Proskuryakov <ap (a] webkit.org> 1059 1060 Reviewed by Geoff Garen. 1061 1062 JSClassRef is created context-free, but gets infatuated with the first context it sees. 1063 1064 The implicit API contract is that JSClassRef can be used with any context on any thread. 1065 This no longer worked, because UStrings in the class were turned into per-context 1066 identifiers, and the cached JSObject prototype was tied to JSGlobalData, too. 1067 1068 * API/JSClassRef.h: Made a separate struct for context-dependent parts of OpaqueJSClass. 1069 * API/JSClassRef.cpp: 1070 (OpaqueJSClass::OpaqueJSClass): Updated for renames and changed member variable order. 1071 (OpaqueJSClass::~OpaqueJSClass): Assert that string members are not identifiers. 1072 (clearReferenceToPrototype): Update for the new reference location. 1073 (OpaqueJSClassContextData::OpaqueJSClassContextData): Make a deep copy of all strings. 1074 (OpaqueJSClass::contextData): Added a function that finds the per-context part of 1075 OpaqueJSClass in JSGlobalData, or creates it if not found. 1076 (OpaqueJSClass::className): Always make a deep copy. Callers of this function do not have 1077 a way to access JSGlobalData, so a per-context copy could not be made. 1078 (OpaqueJSClass::staticValues): Updated for new data location. 1079 (OpaqueJSClass::staticFunctions): Ditto. 1080 (OpaqueJSClass::prototype): Changed to take an internal type for consistency. 1081 1082 * kjs/JSGlobalData.cpp: 1083 (KJS::JSGlobalData::JSGlobalData): 1084 (KJS::JSGlobalData::~JSGlobalData): 1085 * kjs/JSGlobalData.h: 1086 Keep a HashMap to access per-context JSClass data given a pointr to the shared part. 1087 1088 * API/JSCallbackObjectFunctions.h: 1089 (KJS::::className): 1090 (KJS::::getOwnPropertySlot): 1091 (KJS::::put): 1092 (KJS::::deleteProperty): 1093 (KJS::::getPropertyNames): 1094 (KJS::::staticValueGetter): 1095 (KJS::::staticFunctionGetter):j 1096 Use function accessors instead of accessing OpaqueJSClass members directly. 1097 1098 * API/JSContextRef.cpp: (JSGlobalContextCreate): Updated for the change in 1099 OpaqueJSClass::prototype() argument type. 1100 1101 * API/JSObjectRef.cpp: 1102 (JSObjectMake): Updated for the change in OpaqueJSClass::prototype() argument type. 1103 (JSObjectMakeConstructor): Ditto. 1104 1105 2008-07-23 Alexey Proskuryakov <ap (a] webkit.org> 1106 1107 Build fix. 1108 1109 * kjs/ArgList.h: (KJS::ArgList::operator new): removed an extraneous "ArgList::" inside the 1110 class definition. 1111 1112 2008-07-22 Geoffrey Garen <ggaren (a] apple.com> 1113 1114 Reviewed by Oliver Hunt and Sam Weinig. 1115 1116 Next step toward putting doubles in registers: Prepare the Register class 1117 and its clients for registers that don't contain JSValue*s. 1118 1119 This means a few things: 1120 1121 1. Register::jsValue() clients, including ArgList clients, must now supply 1122 an ExecState* when accessing an entry in an ArgList, in case the entry 1123 will need to create a JSValue* on the fly. 1124 1125 2. Register clients that definitely don't want to create a JSValue* on 1126 the fly now use different APIs: getJSValue() for clients that know 1127 the register contains a JSValue*, and v() for clients who just want a 1128 void*. 1129 1130 3. I had to change some headers around in order to resolve dependency 1131 problems created by using a Register in the ArgList header. 1132 1133 SunSpider reports no change. 1134 1135 2008-07-22 Gavin Barraclough <barraclough (a] apple.com> 1136 1137 Reviewed by Alexey Proskuryakov. 1138 1139 Prevent integer overflow when reallocating storage vector for arrays. 1140 1141 Sunspider reports 1.005x as fast (no change expected). 1142 1143 * kjs/JSArray.cpp: 1144 1145 2008-07-21 Mark Rowe <mrowe (a] apple.com> 1146 1147 Reviewed by Sam Weinig. 1148 1149 <rdar://problem/6091287> Revamp the handling of CFBundleShortVersionString to be fixed at the major component of the version number. 1150 1151 * Configurations/Version.xcconfig: 1152 * Info.plist: 1153 1154 2008-07-21 Adam Roben <aroben (a] apple.com> 1155 1156 Add Vector::find 1157 1158 This is a convenience wrapper around std::find. 1159 1160 Reviewed by Anders Carlsson. 1161 1162 * wtf/Vector.h: 1163 1164 2008-07-19 Oliver Hunt <oliver (a] apple.com> 1165 1166 Reviewed by Cameron Zwarich. 1167 1168 Bug 20104: Exception in tables/mozilla_expected_failures/bugs/bug92868_1.html includes the equals operator in the quoted expression 1169 <https://bugs.webkit.org/show_bug.cgi?id=20104> 1170 1171 To make this correct we make the dot and bracket assign nodes emit the information to indicate 1172 the failure range is the dot/bracket accessor. 1173 1174 * kjs/grammar.y: 1175 1176 2008-07-18 Steve Falkenburg <sfalken (a] apple.com> 1177 1178 Windows build fix. 1179 1180 * kjs/JSGlobalObjectFunctions.cpp: 1181 (KJS::isStrWhiteSpace): 1182 1183 2008-07-18 Steve Falkenburg <sfalken (a] apple.com> 1184 1185 Windows build fix. 1186 1187 * kjs/nodes.h: 1188 (KJS::ThrowableExpressionData::ThrowableExpressionData): 1189 1190 2008-07-18 Oliver Hunt <oliver (a] apple.com> 1191 1192 Reviewed by Cameron Zwarich. 1193 1194 Bug 18774: SQUIRRELFISH: print meaningful error messages <https://bugs.webkit.org/show_bug.cgi?id=18774> 1195 <rdar://problem/5769353> SQUIRRELFISH: JavaScript error messages are missing informative text 1196 1197 Add support for decent error messages in JavaScript. This patch achieves this by providing 1198 ensuring the common errors and exceptions have messages that provide the text of expression 1199 that trigger the exception. In addition it attaches a number of properties to the exception 1200 object detailing where in the source the expression came from. 1201 1202 * JavaScriptCore.exp: 1203 * VM/CodeBlock.cpp: 1204 (KJS::CodeBlock::lineNumberForVPC): 1205 (KJS::CodeBlock::expressionRangeForVPC): 1206 Function to recover the expression range for an instruction 1207 that triggered an exception. 1208 * VM/CodeBlock.h: 1209 (KJS::ExpressionRangeInfo::): 1210 (KJS::CodeBlock::CodeBlock): 1211 * VM/CodeGenerator.cpp: 1212 (KJS::CodeGenerator::emitCall): 1213 (KJS::CodeGenerator::emitCallEval): 1214 Emit call needed to be modified so to place the expression range info internally, 1215 as the CodeGenerator emits the arguments nodes itself, rather than the various call 1216 nodes. 1217 * VM/CodeGenerator.h: 1218 (KJS::CodeGenerator::emitExpressionInfo): 1219 Record the expression range info. 1220 * VM/ExceptionHelpers.cpp: 1221 (KJS::createErrorMessage): 1222 (KJS::createInvalidParamError): 1223 (KJS::createUndefinedVariableError): 1224 (KJS::createNotAConstructorError): 1225 (KJS::createNotAFunctionError): 1226 (KJS::createNotAnObjectErrorStub): 1227 (KJS::createNotAnObjectError): 1228 Rewrite all the code for the error messages so that they make use of the newly available 1229 information. 1230 * VM/ExceptionHelpers.h: 1231 * VM/Machine.cpp: 1232 (KJS::isNotObject): Now needs vPC and codeBlock 1233 (KJS::Machine::throwException): 1234 New logic to handle the NotAnObjectErrorStub and to handle the absurd "no default value" edge case 1235 (KJS::Machine::privateExecute): 1236 * VM/Machine.h: 1237 * kjs/DebuggerCallFrame.cpp: 1238 (KJS::DebuggerCallFrame::evaluate): 1239 * kjs/Error.cpp: 1240 (KJS::Error::create): 1241 * kjs/Error.h: 1242 * kjs/JSGlobalObjectFunctions.cpp: 1243 * kjs/JSImmediate.cpp: 1244 (KJS::JSImmediate::toObject): 1245 (KJS::JSImmediate::prototype): 1246 My changes to the JSNotAnObject constructor needed to be handled here. 1247 * kjs/JSNotAnObject.h: 1248 (KJS::JSNotAnObjectErrorStub::JSNotAnObjectErrorStub): 1249 (KJS::JSNotAnObjectErrorStub::isNull): 1250 (KJS::JSNotAnObjectErrorStub::isNotAnObjectErrorStub): 1251 Added a JSNotAnObjectErrorStub class to ease the handling of toObject failure exceptions, 1252 and potentially allow even more detailed error messages in future. 1253 * kjs/JSObject.h: 1254 * kjs/Parser.h: 1255 (KJS::Parser::parse): 1256 * kjs/SourceRange.h: 1257 * kjs/grammar.y: 1258 Large amounts of position propagation. 1259 * kjs/lexer.cpp: 1260 (KJS::Lexer::Lexer): 1261 (KJS::Lexer::shift): 1262 (KJS::Lexer::lex): 1263 The lexer needed a few changes to be able to correctly track token character positions. 1264 * kjs/lexer.h: 1265 * kjs/nodes.cpp: 1266 (KJS::ThrowableExpressionData::emitThrowError): 1267 (KJS::StatementNode::StatementNode): 1268 (KJS::ResolveNode::emitCode): 1269 (KJS::BracketAccessorNode::emitCode): 1270 (KJS::DotAccessorNode::emitCode): 1271 (KJS::NewExprNode::emitCode): 1272 (KJS::EvalFunctionCallNode::emitCode): 1273 (KJS::FunctionCallValueNode::emitCode): 1274 (KJS::FunctionCallResolveNode::emitCode): 1275 (KJS::FunctionCallBracketNode::emitCode): 1276 (KJS::FunctionCallDotNode::emitCode): 1277 (KJS::PostfixResolveNode::emitCode): 1278 (KJS::PostfixBracketNode::emitCode): 1279 (KJS::PostfixDotNode::emitCode): 1280 (KJS::DeleteResolveNode::emitCode): 1281 (KJS::DeleteBracketNode::emitCode): 1282 (KJS::DeleteDotNode::emitCode): 1283 (KJS::PrefixResolveNode::emitCode): 1284 (KJS::PrefixBracketNode::emitCode): 1285 (KJS::PrefixDotNode::emitCode): 1286 (KJS::ThrowableBinaryOpNode::emitCode): 1287 (KJS::ReadModifyResolveNode::emitCode): 1288 (KJS::AssignResolveNode::emitCode): 1289 (KJS::AssignDotNode::emitCode): 1290 (KJS::ReadModifyDotNode::emitCode): 1291 (KJS::AssignBracketNode::emitCode): 1292 (KJS::ReadModifyBracketNode::emitCode): 1293 (KJS::ForInNode::ForInNode): 1294 (KJS::ForInNode::emitCode): 1295 (KJS::WithNode::emitCode): 1296 (KJS::LabelNode::emitCode): 1297 (KJS::ThrowNode::emitCode): 1298 (KJS::ProgramNode::ProgramNode): 1299 (KJS::ProgramNode::create): 1300 (KJS::EvalNode::generateCode): 1301 (KJS::FunctionBodyNode::create): 1302 (KJS::FunctionBodyNode::generateCode): 1303 (KJS::ProgramNode::generateCode): 1304 All of these methods were handling the position information. 1305 Constructors and create methods were modified to store the information. 1306 All the emitCall implementations listed needed to be updated to actually 1307 record the position information we have so carefully collected. 1308 * kjs/nodes.h: 1309 (KJS::ThrowableExpressionData::ThrowableExpressionData): 1310 (KJS::ThrowableExpressionData::setExceptionSourceRange): 1311 (KJS::ThrowableExpressionData::divot): 1312 (KJS::ThrowableExpressionData::startOffset): 1313 (KJS::ThrowableExpressionData::endOffset): 1314 (KJS::ThrowableSubExpressionData::ThrowableSubExpressionData): 1315 (KJS::ThrowableSubExpressionData::setSubexpressionInfo): 1316 (KJS::ThrowablePrefixedSubExpressionData::ThrowablePrefixedSubExpressionData): 1317 (KJS::ThrowablePrefixedSubExpressionData::setSubexpressionInfo): 1318 ThrowableExpressionData is just a uniform mechanism for storing the position 1319 information. 1320 (KJS::ResolveNode::): 1321 (KJS::PrePostResolveNode::): 1322 (KJS::ThrowableBinaryOpNode::): 1323 (KJS::WithNode::): 1324 1325 2008-07-18 Geoffrey Garen <ggaren (a] apple.com> 1326 1327 Reviewed by Cameron Zwarich. 1328 1329 Three renames: 1330 1331 "CallTypeNative" => "CallTypeHost" 1332 "code" => "byteCode" 1333 "generatedCode" => "generatedByteCode" 1334 1335 2008-07-18 Geoffrey Garen <ggaren (a] apple.com> 1336 1337 Reviewed by Oliver Hunt. 1338 1339 Optimized <= for immediate number cases. 1340 1341 SunSpider reports no overall change, but a 10% speedup on access-nsieve. 1342 1343 2008-07-18 Mark Rowe <mrowe (a] apple.com> 1344 1345 Rubber-stamped by Sam Weinig. 1346 1347 Fix some casts added in a previous build fix to match the style used 1348 throughout WebKit. 1349 1350 * VM/Machine.cpp: 1351 (KJS::Machine::initializeCallFrame): 1352 * VM/Register.h: 1353 (KJS::Register::Register): 1354 1355 2008-07-18 Landry Breuil <landry (a] openbsd.org> 1356 1357 Bug 19975: [OpenBSD] Patches to enable build of WebKit 1358 1359 <https://bugs.webkit.org/show_bug.cgi?id=19975> 1360 1361 Reviewed by David Kilzer. 1362 1363 Support for OpenBSD, mostly threading and libm tweaks. 1364 1365 * kjs/collector.cpp: #include <pthread.h> 1366 (KJS::currentThreadStackBase): use pthread_stackseg_np() to get stack base 1367 * kjs/config.h: OpenBSD also provides <pthread_np.h> 1368 * wtf/MathExtras.h: #include <sys/types.h> and <machine/ieee.h> 1369 (isfinite), (signbit): as long as we don't have those functions provide fallback implementations 1370 * wtf/Platform.h: Add support for PLATFORM(OPENBSD) and PLATFORM(SPARC64) macro 1371 1372 2008-07-17 Geoffrey Garen <ggaren (a] apple.com> 1373 1374 Reviewed by Oliver Hunt. 1375 1376 Next step toward putting doubles in registers: Store constant pool 1377 entries as registers, not JSValue*s. 1378 1379 SunSpider reports no change. 1380 1381 2008-07-17 Geoffrey Garen <ggaren (a] apple.com> 1382 1383 Reviewed by John Sullivan and Oliver Hunt. 1384 1385 A tiny bit of tidying in function call register allocation. 1386 1387 This patch saves one register when invoking a function expression and/or 1388 a new expression that is stored in a temporary. 1389 1390 Since it's just one register, I can't make a testcase for it. 1391 1392 * VM/CodeGenerator.cpp: 1393 (KJS::CodeGenerator::emitCall): No need to ref the function we're calling 1394 or its base. We'd like the call frame to overlap with them, if possible. 1395 op_call will read the function and its base before writing the call frame, 1396 so this is safe. 1397 1398 * kjs/nodes.cpp: 1399 (KJS::NewExprNode::emitCode): No need to ref the function we're new-ing, 1400 for the same reasons stated above. 1401 1402 (KJS::FunctionCallValueNode::emitCode): ditto 1403 1404 2008-07-17 Steve Falkenburg <sfalken (a] apple.com> 1405 1406 Build fix. 1407 1408 * kjs/InternalFunction.cpp: 1409 1410 2008-07-17 Sam Weinig <sam (a] webkit.org> 1411 1412 Roll out r35199 as it is causing failures on the PPC build. 1413 1414 2008-07-17 Geoffrey Garen <ggaren (a] apple.com> 1415 1416 Reviewed by David Kilzer. 1417 1418 Fixed https://bugs.webkit.org/show_bug.cgi?id=20067 1419 Support function.name (Firefox extension) 1420 1421 Pretty straight-forward. 1422 1423 2008-07-17 Geoffrey Garen <ggaren (a] apple.com> 1424 1425 Reviewed by Oliver Hunt. 1426 1427 Fixed <rdar://problem/6081636> Functions calls use more temporary 1428 registers than necessary 1429 1430 Holding a reference to the last statement result register caused each 1431 successive statement to output its result to an even higher register. 1432 1433 Happily, statements don't actually need to return a result register 1434 at all. I hope to make this clearer in a future cleanup patch, 1435 but this change will fix the major bug for now. 1436 1437 * kjs/nodes.cpp: 1438 (KJS::statementListEmitCode): 1439 1440 2008-07-17 Gavin Barraclough <barraclough (a] apple.com> 1441 1442 Reviewed by Sam Weinig. 1443 1444 Merge pre&post dot nodes to simplify the parse tree. 1445 Sunspider results show 0.6% progression (no performance change expected). 1446 1447 * kjs/grammar.y: 1448 * kjs/nodes.cpp: 1449 * kjs/nodes.h: 1450 * kjs/nodes2string.cpp: 1451 1452 2008-07-17 Gavin Barraclough <barraclough (a] apple.com> 1453 1454 Reviewed by Cameron Zwarich. 1455 1456 Merge pre&post resolve nodes to simplify the parse tree. 1457 Sunspider results show no performance change. 1458 1459 * kjs/grammar.y: 1460 * kjs/nodes.cpp: 1461 * kjs/nodes.h: 1462 * kjs/nodes2string.cpp: 1463 1464 2008-07-17 Gavin Barraclough <barraclough (a] apple.com> 1465 1466 Reviewed by Cameron Zwarich. 1467 1468 Merge logical nodes to simplify the parse tree. 1469 Sunspider results show 0.6% progression (no performance change expected). 1470 1471 * kjs/grammar.y: 1472 * kjs/nodes.cpp: 1473 * kjs/nodes.h: 1474 * kjs/nodes2string.cpp: 1475 1476 2008-07-17 Ariya Hidayat <ariya.hidayat (a] trolltech.com> 1477 1478 Reviewed by Simon. 1479 1480 Fix MinGW build (broken in r35198) and simplify getLocalTime(). 1481 1482 * kjs/DateMath.cpp: 1483 (KJS::getLocalTime): 1484 1485 2008-07-17 Gavin Barraclough <barraclough (a] apple.com> 1486 1487 Reviewed by Sam Weinig. 1488 1489 Merge pre&post bracket nodes to simplify the parse tree. 1490 Sunspider results show no performance change. 1491 1492 * kjs/grammar.y: 1493 * kjs/nodes.cpp: 1494 * kjs/nodes.h: 1495 * kjs/nodes2string.cpp: 1496 1497 2008-07-17 Ariya Hidayat <ariya.hidayat (a] trolltech.com> 1498 1499 Reviewed by Simon. 1500 1501 Fix the 32-bit gcc builds, conversion from "long int" to Register is 1502 ambiguous. Explicitly choose the intptr_t constructor. 1503 1504 * VM/Machine.cpp: 1505 (KJS::Machine::initializeCallFrame): 1506 * VM/Register.h: 1507 (KJS::Register::Register): 1508 1509 2008-07-16 Mark Rowe <mrowe (a] apple.com> 1510 1511 Rubber-stamped by Geoff Garen. 1512 1513 Fix JavaScript in 64-bit by using a pointer-sized integer 1514 type in the Register union. Also includes a rename of 1515 the intType constant to IntType. 1516 1517 * VM/Machine.cpp: 1518 (KJS::Machine::initializeCallFrame): 1519 * VM/Register.h: 1520 (KJS::Register::): 1521 (KJS::Register::Register): 1522 1523 2008-07-17 Geoffrey Garen <ggaren (a] apple.com> 1524 1525 Reviewed by Oliver Hunt. 1526 1527 First step toward putting doubles in registers: Turned Register into a 1528 proper abstraction layer. It is no longer possible to cast a Register 1529 to a JSValue*, or a Register& to a JSValue*&, or to access the union 1530 inside a Register directly. 1531 1532 SunSpider reports no change. 1533 1534 In support of this change, I had to make the following mechanical changes 1535 in a lot of places: 1536 1537 1. Clients now use explicit accessors to read data out of Registers, and 1538 implicit copy constructors to write data into registers. 1539 1540 So, assignment that used to look like 1541 1542 x.u.jsValue = y; 1543 1544 now looks like 1545 1546 x = y; 1547 1548 And access that used to look like 1549 1550 x = y.u.jsValue; 1551 1552 now looks like 1553 1554 x = y.jsValue(); 1555 1556 2. I made generic flow control specific in opcodes that made their flow 1557 control generic by treating a Register& as a JSValue*&. This had the 1558 added benefit of removing some exception checking branches from immediate 1559 number code. 1560 1561 3. I beefed up PropertySlot to support storing a Register* in a property 1562 slot. For now, only JSVariableObject's symbolTableGet and symbolTablePut 1563 use this functionality, but I expect more clients to use it in the future. 1564 1565 4. I changed ArgList to be a buffer of Registers, not JSValue*'s, and I 1566 changed ArgList iterator clients to iterate Registers, not JSValue*'s. 1567 1568 2008-07-16 Ada Chan <adachan (a] apple.com> 1569 1570 Fixed build. 1571 1572 * kjs/JSGlobalObject.cpp: 1573 1574 2008-07-16 Kevin McCullough <kmccullough (a] apple.com> 1575 1576 Reviewed by Sam and Geoff. 1577 1578 <rdar://problem/5958840> Navigating to another page while profiler is 1579 attached results in slow JavaScript for all time. 1580 1581 - The UNLIKELY keeps this from being a sunspider performance regression. 1582 1583 * kjs/JSGlobalObject.cpp: 1584 (KJS::JSGlobalObject::~JSGlobalObject): Stop the profiler associated 1585 with this exec state. 1586 1587 2008-07-16 Sam Weinig <sam (a] webkit.org> 1588 1589 Reviewed by Steve Falkenburg. 1590 1591 Replace adopting UString constructor in favor of explicit 1592 static adopt method. 1593 1594 * API/JSStringRefCF.cpp: 1595 (JSStringCreateWithCFString): 1596 * kjs/StringConstructor.cpp: 1597 (KJS::stringFromCharCode): 1598 * kjs/StringPrototype.cpp: 1599 (KJS::stringProtoFuncToLowerCase): 1600 (KJS::stringProtoFuncToUpperCase): 1601 (KJS::stringProtoFuncToLocaleLowerCase): 1602 (KJS::stringProtoFuncToLocaleUpperCase): 1603 * kjs/ustring.cpp: 1604 (KJS::UString::adopt): 1605 * kjs/ustring.h: 1606 (KJS::UString::UString): 1607 (KJS::UString::~UString): 1608 1609 2008-07-16 Ariya Hidayat <ariya.hidayat (a] trolltech.com> 1610 1611 Reviewed by Simon. 1612 1613 http://trolltech.com/developer/task-tracker/index_html?method=entry&id=216179 1614 Fix potential crash (on Qt for Windows port) when performing JavaScript date 1615 conversion. 1616 1617 * kjs/DateMath.cpp: 1618 (KJS::getLocalTime): For the Qt port, prefer to use Windows code, i.e. 1619 localtime_s() instead of localtime() since the latter might crash (on Windows) 1620 given a non-sensible, e.g. NaN, argument. 1621 1622 2008-07-16 Alexey Proskuryakov <ap (a] webkit.org> 1623 1624 Reviewed by Anders and Geoff. 1625 1626 https://bugs.webkit.org/show_bug.cgi?id=20023 1627 Failed assertion in PropertyNameArray.cpp 1628 1629 This is already tested by testapi. 1630 1631 * API/JSObjectRef.cpp: (JSPropertyNameAccumulatorAddName): Add the string to identifier 1632 table to appease PropertyNameArray. 1633 1634 2008-07-16 Alexey Proskuryakov <ap (a] webkit.org> 1635 1636 Reviewed by Geoff. 1637 1638 Dereference identifiers when deleting a hash table (fixes leaks with private JSGlobalData 1639 objects). 1640 1641 * kjs/JSGlobalData.cpp: (KJS::JSGlobalData::~JSGlobalData): 1642 * kjs/lookup.cpp: (KJS::HashTable::deleteTable): 1643 * kjs/lookup.h: 1644 * kjs/lexer.cpp: (KJS::Lexer::~Lexer) 1645 HashTable cannot have a destructor, because check-for-global-initializers complains about 1646 having a global constructor then. 1647 1648 2008-07-16 Alexey Proskuryakov <ap (a] webkit.org> 1649 1650 Reviewed by Geoff. 1651 1652 Check pthread_key_create return value. 1653 1654 This check was helpful when debugging a crash in run-webkit-tests --threaded that happened 1655 because JSGlobalData objects were not deleted, and we were running out of pthread keys soon. 1656 It also looks useful for production builds. 1657 1658 * wtf/ThreadSpecific.h: (WTF::::ThreadSpecific): 1659 1660 2008-07-15 Kevin McCullough <kmccullough (a] apple.com> 1661 1662 Reviewed by Geoff. 1663 1664 Rename pageGroupIdentifier to profileGroup to keep mention of a 1665 pageGroup out of JavaScriptCore. 1666 1667 * kjs/JSGlobalObject.cpp: 1668 (KJS::JSGlobalObject::init): 1669 * kjs/JSGlobalObject.h: 1670 (KJS::JSGlobalObject::setProfileGroup): 1671 (KJS::JSGlobalObject::profileGroup): 1672 * profiler/ProfileGenerator.cpp: 1673 (KJS::ProfileGenerator::create): 1674 (KJS::ProfileGenerator::ProfileGenerator): 1675 * profiler/ProfileGenerator.h: 1676 (KJS::ProfileGenerator::profileGroup): 1677 * profiler/Profiler.cpp: 1678 (KJS::Profiler::startProfiling): 1679 (KJS::dispatchFunctionToProfiles): 1680 (KJS::Profiler::willExecute): 1681 (KJS::Profiler::didExecute): 1682 1683 2008-07-14 Mark Rowe <mrowe (a] apple.com> 1684 1685 Reviewed by Sam Weinig. 1686 1687 Fix https://bugs.webkit.org/show_bug.cgi?id=20037 1688 Bug 20037: GCC 4.2 build broken due to strict aliasing violation. 1689 1690 * kjs/ustring.cpp: 1691 (KJS::UString::Rep::computeHash): Add a version of computeHash that takes a char* and explicit length. 1692 * kjs/ustring.h: 1693 * profiler/CallIdentifier.h: 1694 (WTF::): Use new version of computeHash that takes a char* and explicit length to avoid unsafe aliasing. 1695 1696 2008-07-14 David Hyatt <hyatt (a] apple.com> 1697 1698 Fix a crashing bug in ListHashSet's -- operator. Make sure that end() can be -- by special-casing the null 1699 position. 1700 1701 Reviewed by Maciej 1702 1703 * wtf/ListHashSet.h: 1704 (WTF::ListHashSetConstIterator::operator--): 1705 1706 2008-07-14 David Hyatt <hyatt (a] apple.com> 1707 1708 Buidl fix. Make sure the second insertBefore method returns a value. 1709 1710 * wtf/ListHashSet.h: 1711 (WTF::::insertBefore): 1712 1713 2008-07-14 Adam Roben <aroben (a] apple.com> 1714 1715 Windows build fix 1716 1717 * JavaScriptCore.vcproj/jsc/jsc.vcproj: Added include/pthreads to the 1718 include path. 1719 1720 2008-07-14 Alexey Proskuryakov <ap (a] webkit.org> 1721 1722 Reviewed by Kevin McCullough. 1723 1724 Make JSGlobalData refcounted in preparation to adding a way to create contexts that share 1725 global data. 1726 1727 * JavaScriptCore.exp: 1728 * kjs/JSGlobalData.cpp: 1729 (KJS::JSGlobalData::create): 1730 * kjs/JSGlobalData.h: 1731 Made contructor private, and added a static create() method. Made the class inherit from 1732 RefCounted. 1733 1734 * kjs/JSGlobalObject.h: 1735 (KJS::JSGlobalObject::globalData): 1736 JSGlobalData is now owned by JSGlobalObject (except for the shared one, and the common 1737 WebCore one, which are never deleted). 1738 1739 * kjs/Shell.cpp: (main): Create JSGlobalData with create() method. 1740 1741 2008-07-14 Simon Hausmann <hausmann (a] webkit.org> 1742 1743 Fix the single-threaded build. 1744 1745 * kjs/JSLock.cpp: Removed undeclared registerThread() function. 1746 * kjs/collector.cpp: 1747 (KJS::Heap::registerThread): Added dummy implementation. 1748 1749 2008-07-14 Alexey Proskuryakov <ap (a] webkit.org> 1750 1751 Reviewed by Geoff Garen. 1752 1753 Eliminate per-thread JavaScript global data instance support and make arbitrary 1754 global data/global object combinations possible. 1755 1756 * kjs/collector.cpp: 1757 (KJS::Heap::Heap): Store a JSGlobalData pointer instead of multiple pointers to its members. 1758 This allows for going from any JS object to its associated global data, currently used in 1759 JSGlobalObject constructor to initialize its JSGlobalData pointer. 1760 (KJS::Heap::registerThread): Changed thread registration data to be per-heap. Previously, 1761 only the shared heap could be used from multiple threads, so it was the only one that needed 1762 thread registration, but now this can happen to any heap. 1763 (KJS::Heap::unregisterThread): Ditto. 1764 (KJS::Heap::markStackObjectsConservatively): Adapt for the above changes. 1765 (KJS::Heap::setGCProtectNeedsLocking): Ditto. 1766 (KJS::Heap::protect): Ditto. 1767 (KJS::Heap::unprotect): Ditto. 1768 (KJS::Heap::collect): Ditto. 1769 (KJS::Heap::globalObjectCount): Use global object list associated with the current heap, 1770 not the late per-thread one. 1771 (KJS::Heap::protectedGlobalObjectCount): Ditto. 1772 1773 * kjs/collector.h: 1774 (KJS::Heap::ThreadRegistrar): Added a helper object that unregisters a thread when it is 1775 destroyed. 1776 1777 * kjs/JSLock.cpp: 1778 (KJS::JSLock::JSLock): 1779 * kjs/JSLock.h: 1780 (KJS::JSLock::JSLock): 1781 Don't use JSLock to implicitly register threads. I've added registerThread() calls to most 1782 places that use JSLock - we cannot guarantee absolute safety unless we always mark all 1783 threads in the process, but these implicit registration calls should cover reasonable usage 1784 scenarios, I hope. 1785 1786 * API/JSBase.cpp: 1787 (JSEvaluateScript): Explicitly register the current thread. 1788 (JSCheckScriptSyntax): Explicitly register the current thread. 1789 (JSGarbageCollect): Changed to use the passed in context. Unfortunately, this creates a race 1790 condition for clients that pass an already released context to JSGarbageCollect - but it is 1791 unlikely to create real life problems. 1792 To maintain compatibility, the shared heap is collected if NULL is passed. 1793 1794 * API/JSContextRef.cpp: 1795 (JSGlobalContextCreate): Use a new syntax for JSGlobalObject allocation. 1796 (JSGlobalContextRetain): Register the thread. 1797 (JSContextGetGlobalObject): Register the thread. 1798 1799 * API/JSObjectRef.cpp: 1800 (JSObjectMake): 1801 (JSObjectMakeFunctionWithCallback): 1802 (JSObjectMakeConstructor): 1803 (JSObjectMakeFunction): 1804 (JSObjectHasProperty): 1805 (JSObjectGetProperty): 1806 (JSObjectSetProperty): 1807 (JSObjectGetPropertyAtIndex): 1808 (JSObjectSetPropertyAtIndex): 1809 (JSObjectDeleteProperty): 1810 (JSObjectCallAsFunction): 1811 (JSObjectCallAsConstructor): 1812 (JSObjectCopyPropertyNames): 1813 (JSPropertyNameAccumulatorAddName): 1814 * API/JSValueRef.cpp: 1815 (JSValueIsEqual): 1816 (JSValueIsInstanceOfConstructor): 1817 (JSValueMakeNumber): 1818 (JSValueMakeString): 1819 (JSValueToNumber): 1820 (JSValueToStringCopy): 1821 (JSValueToObject): 1822 (JSValueProtect): 1823 (JSValueUnprotect): 1824 Register the thread. 1825 1826 * API/JSStringRef.cpp: (JSStringRelease): Changed a comment to not mention per-thread contexts. 1827 1828 * API/JSStringRefCF.cpp: Removed an unnecessary include of JSLock.h. 1829 1830 * JavaScriptCore.exp: Export JSGlobalData constructor/destructor, now that anyone can have 1831 their own instances. Adapt to other changes, too. 1832 1833 * JavaScriptCore.xcodeproj/project.pbxproj: Made ThreadSpecific.h private, as it is now 1834 included by collector.h and is thus needed in other projects. 1835 1836 * kjs/InitializeThreading.cpp: (KJS::initializeThreadingOnce): Don't initialize per-thread 1837 global data, as it no longer exists. 1838 1839 * kjs/JSGlobalData.cpp: 1840 (KJS::JSGlobalData::JSGlobalData): 1841 (KJS::JSGlobalData::~JSGlobalData): 1842 * kjs/JSGlobalData.h: 1843 Removed support for per-thread instance. Made constructor and destructor public. 1844 1845 * kjs/JSGlobalObject.cpp: (KJS::JSGlobalObject::init): Get to now arbitrary JSGlobalData 1846 via the heap. 1847 (KJS::JSGlobalObject::operator new): Changed ot take JSGlobalDatra pointer. 1848 * kjs/JSGlobalObject.h: 1849 1850 * kjs/Shell.cpp: 1851 (main): 1852 (jscmain): 1853 Changed to maintain a custom JSGlobalData pointer instead of a per-thread one. 1854 1855 2008-07-13 Ada Chan <adachan (a] apple.com> 1856 1857 Windows build fix: Add wtf/RefCountedLeakCounter to the project. 1858 1859 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 1860 1861 2008-07-12 Jan Michael Alonzo <jmalonzo (a] webkit.org> 1862 1863 Gtk, Qt and Wx build fix: Add wtf/RefCountedLeakCounter in the 1864 build scripts 1865 1866 * GNUmakefile.am: 1867 * JavaScriptCore.pri: 1868 * JavaScriptCoreSources.bkl: 1869 1870 2008-07-11 Stephanie Lewis <slewis (a] apple.com> 1871 1872 Reviewed by Darin Adler and Oliver Hunt. 1873 1874 Refactor RefCounting Leak counting code into a common class. 1875 1876 In order to export the symbols I needed to put the debug defines inside the function names 1877 1878 Before we had a separate channel for each Logging each Leak type. Since the leak channels were only used in one location, and only at quit for simplicity I combined them all into one leak channel. 1879 1880 * JavaScriptCore.exp: 1881 * JavaScriptCore.xcodeproj/project.pbxproj: add new class 1882 * kjs/nodes.cpp: remove old leak counting code 1883 * wtf/RefCountedLeakCounter.cpp: Added. create a common leak counting class 1884 * wtf/RefCountedLeakCounter.h: Added. 1885 1886 2008-07-11 David Hyatt <hyatt (a] apple.com> 1887 1888 Add an insertBefore method to ListHashSet to allow for insertions in the middle of the list (rather than just 1889 at the end). 1890 1891 Reviewed by Anders 1892 1893 * wtf/ListHashSet.h: 1894 (WTF::::insertBefore): 1895 (WTF::::insertNodeBefore): 1896 1897 2008-07-11 Sam Weinig <sam (a] webkit.org> 1898 1899 Rubber-stamped by Darin Adler. 1900 1901 Move call function to CallData.cpp and construct to ConstructData.cpp. 1902 1903 * GNUmakefile.am: 1904 * JavaScriptCore.pri: 1905 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 1906 * JavaScriptCore.xcodeproj/project.pbxproj: 1907 * JavaScriptCoreSources.bkl: 1908 * kjs/AllInOneFile.cpp: 1909 * kjs/CallData.cpp: Copied from kjs/JSValue.cpp. 1910 * kjs/ConstructData.cpp: Copied from kjs/JSValue.cpp. 1911 * kjs/JSValue.cpp: 1912 1913 2008-07-10 Mark Rowe <mrowe (a] apple.com> 1914 1915 Reviewed by Sam Weinig. 1916 1917 Define WEBKIT_VERSION_MIN_REQUIRED=WEBKIT_VERSION_LATEST when building WebKit to ensure that no symbols end up with the weak_import attribute. 1918 1919 * Configurations/Base.xcconfig: 1920 1921 2008-07-10 Mark Rowe <mrowe (a] apple.com> 1922 1923 Reviewed by Sam Weinig. 1924 1925 Fix the Tiger build by omitting annotations from methods declared in categories when using old versions of GCC. 1926 1927 * API/WebKitAvailability.h: 1928 1929 2008-07-10 Kevin McCullough <kmccullough (a] apple.com> 1930 1931 Reviewed by Darin. 1932 1933 -Minor cleanup. Renamed callTree() to head() and no longer use m_head 1934 directly but instead keep it private and access via a method(). 1935 1936 * profiler/HeavyProfile.cpp: 1937 (KJS::HeavyProfile::HeavyProfile): 1938 (KJS::HeavyProfile::generateHeavyStructure): 1939 (KJS::HeavyProfile::addNode): 1940 * profiler/Profile.h: 1941 (KJS::Profile::head): 1942 * profiler/ProfileGenerator.cpp: 1943 (KJS::ProfileGenerator::ProfileGenerator): 1944 1945 2008-07-10 Alexey Proskuryakov <ap (a] webkit.org> 1946 1947 Reviewed by Mark Rowe. 1948 1949 Eliminate CollectorHeapIntrospector. 1950 1951 CollectorHeapIntrospector was added primarily in the hopes to improve leaks tool output, 1952 a result that it didn't deliver. Also, it helped by labeling JSC heap regions as reported by 1953 vmmap tool, but at the same time, it made them mislabeled as malloc'd ones - the correct 1954 way to label mapped regions is to use a VM tag. 1955 1956 So, it makes more sense to remove it completely than to make it work with multiple heaps. 1957 1958 * JavaScriptCore.exp: 1959 * JavaScriptCore.xcodeproj/project.pbxproj: 1960 * kjs/AllInOneFile.cpp: 1961 * kjs/InitializeThreading.cpp: 1962 (KJS::initializeThreading): 1963 * kjs/collector.cpp: 1964 * kjs/collector.h: 1965 * kjs/CollectorHeapIntrospector.cpp: Removed. 1966 * kjs/CollectorHeapIntrospector.h: Removed. 1967 1968 2008-07-09 Kevin McCullough <kmccullough (a] apple.com> 1969 1970 Reviewed by Darin. 1971 1972 <rdar://problem/5951532> JSProfiler: Implement heavy (or bottom-up) 1973 view (19228) 1974 - Implemented the time and call count portionof heavy. Now all that we 1975 need is some UI. 1976 1977 * profiler/CallIdentifier.h: Removed an unused constructor. 1978 * profiler/HeavyProfile.cpp: 1979 (KJS::HeavyProfile::HeavyProfile): Set the initial time of the head 1980 node so that percentages work correctly. 1981 (KJS::HeavyProfile::mergeProfiles): Sum the times and call count of 1982 nodes being merged. 1983 * profiler/ProfileNode.cpp: Set the intital values of time and call 1984 count when copying ProfileNodes. 1985 (KJS::ProfileNode::ProfileNode): 1986 1987 2008-07-10 Jan Michael Alonzo <jmalonzo (a] webkit.org> 1988 1989 Gtk build fix. 1990 1991 * GNUmakefile.am: Add HeavyProfile.cpp 1992 1993 2008-07-09 Mark Rowe <mrowe (a] apple.com> 1994 1995 Reviewed by Geoff Garen. 1996 1997 Don't warn about deprecated functions in production builds. 1998 1999 * Configurations/Base.xcconfig: 2000 * Configurations/DebugRelease.xcconfig: 2001 2002 2008-07-09 Darin Adler <darin (a] apple.com> 2003 2004 * JavaScriptCore.pri: Fix Qt build by adding HeavyProfile.cpp. 2005 2006 2008-07-09 Kevin Ollivier <kevino (a] theolliviers.com> 2007 2008 wx biuld fix. Add HeavyProfile.cpp to build files. 2009 2010 * JavaScriptCoreSources.bkl: 2011 2012 2008-07-09 Kevin McCullough <kmccullough (a] apple.com> 2013 2014 - Windows build fix. 2015 2016 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 2017 2018 2008-07-09 Kevin McCullough <kmccullough (a] apple.com> 2019 2020 - Build fix. 2021 2022 * profiler/HeavyProfile.cpp: 2023 (KJS::HeavyProfile::mergeProfiles): 2024 2025 2008-07-09 Kevin McCullough <kmccullough (a] apple.com> 2026 2027 Reviewed by Geoff and Adam. 2028 2029 <rdar://problem/5951532> JSProfiler: Implement Bottom-Up view (19228) 2030 - This is the plumbing for bottom-up, but does not include calculating 2031 time, mostly because I'm still undclear about what the end result should 2032 look like. 2033 - This, obviously, does not include the UI to expose this in the 2034 inspector yet. 2035 2036 * JavaScriptCore.xcodeproj/project.pbxproj: 2037 * profiler/CallIdentifier.h: 2038 (KJS::CallIdentifier::CallIdentifier): 2039 (WTF::): Added HashTraits for CallIdentifiers to be used by a HashMap. 2040 * profiler/HeavyProfile.cpp: Added. 2041 (KJS::HeavyProfile::HeavyProfile): 2042 (KJS::HeavyProfile::generateHeavyStructure): 2043 (KJS::HeavyProfile::addNode): 2044 (KJS::HeavyProfile::mergeProfiles): 2045 (KJS::HeavyProfile::addAncestorsAsChildren): 2046 * profiler/HeavyProfile.h: Added. 2047 (KJS::HeavyProfile::create): 2048 (KJS::HeavyProfile::heavyProfile): 2049 (KJS::HeavyProfile::treeProfile): 2050 * profiler/Profile.cpp: Removed old commented out includes. 2051 * profiler/Profile.h: The m_head is needed by the HeavyProfile so it 2052 is now protected as opposed to private. 2053 * profiler/ProfileNode.cpp: 2054 (KJS::ProfileNode::ProfileNode): Created a constructor to copy 2055 ProfileNodes. 2056 (KJS::ProfileNode::findChild): Added a null check to make HeavyProfile 2057 children finding easier and avoid a potential crasher. 2058 * profiler/ProfileNode.h: Mostly moved things around but also added some 2059 functionality needed by HeavyProfile. 2060 (KJS::ProfileNode::create): 2061 (KJS::ProfileNode::functionName): 2062 (KJS::ProfileNode::url): 2063 (KJS::ProfileNode::lineNumber): 2064 (KJS::ProfileNode::head): 2065 (KJS::ProfileNode::setHead): 2066 (KJS::ProfileNode::setNextSibling): 2067 (KJS::ProfileNode::actualTotalTime): 2068 (KJS::ProfileNode::actualSelfTime): 2069 * profiler/TreeProfile.cpp: Implemented the ability to get a 2070 HeavyProfile. 2071 (KJS::TreeProfile::heavyProfile): 2072 * profiler/TreeProfile.h: 2073 2074 2008-07-08 Geoffrey Garen <ggaren (a] apple.com> 2075 2076 Reviewed by Oliver Hunt. 2077 2078 Added support for checking if an object has custom properties in its 2079 property map. WebCore uses this to optimize marking DOM wrappers. 2080 2081 2008-07-08 Simon Hausmann <hausmann (a] webkit.org> 2082 2083 Prospective Gtk/Wx build fixes, add ProfileGenerator.cpp to the build. 2084 2085 * GNUmakefile.am: 2086 * JavaScriptCoreSources.bkl: 2087 2088 2008-07-08 Simon Hausmann <hausmann (a] webkit.org> 2089 2090 Fix the Qt build, add ProfileGenerator.cpp to the build. 2091 2092 * JavaScriptCore.pri: 2093 2094 2008-07-07 David Kilzer <ddkilzer (a] apple.com> 2095 2096 releaseFastMallocFreeMemory() should always be defined 2097 2098 Reviewed by Darin. 2099 2100 * JavaScriptCore.exp: Changed to export C++ binding for 2101 WTF::releaseFastMallocFreeMemory() instead of C binding for 2102 releaseFastMallocFreeMemory(). 2103 * wtf/FastMalloc.cpp: Moved definitions of 2104 releaseFastMallocFreeMemory() to be in the WTF namespace 2105 regardless whether FORCE_SYSTEM_MALLOC is defined. 2106 * wtf/FastMalloc.h: Moved releaseFastMallocFreeMemory() from 2107 extern "C" binding to WTF::releaseFastMallocFreeMemory(). 2108 2109 2008-07-07 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 2110 2111 Reviewed by Geoff. 2112 2113 Bug 19926: URL causes crash within a minute 2114 <https://bugs.webkit.org/show_bug.cgi?id=19926> 2115 2116 Add a check that lastGlobalObject is non-null in Machine::execute() 2117 before copying its globals to the current register file. 2118 2119 In theory, it is possible to make a test case for this, but it will 2120 take a while to get it right. 2121 2122 * VM/Machine.cpp: 2123 (KJS::Machine::execute): 2124 2125 2008-07-07 Darin Adler <darin (a] apple.com> 2126 2127 Rubber stamped by Adele. 2128 2129 * VM/Machine.cpp: 2130 (KJS::Machine::privateExecute): Fix a typo in a comment. 2131 2132 2008-07-07 Steve Falkenburg <sfalken (a] apple.com> 2133 2134 Build fixes. 2135 2136 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 2137 * JavaScriptCore.vcproj/testapi/testapi.vcproj: 2138 2139 2008-07-07 Kevin McCullough <kmccullough (a] apple.com> 2140 2141 Reviewed by Darin. 2142 2143 When the profiler is running it gathers information and creates a 2144 Profile. After it finishes the Profile can be sorted and have other 2145 data refinements run over it. Both of these were done in the same class 2146 before. Now I split the gathering operations into a new class called 2147 ProfileGenerator. 2148 2149 * JavaScriptCore.xcodeproj/project.pbxproj: 2150 * profiler/Profile.cpp: Removed code related to the gather stage of a 2151 Profile's creation. 2152 (KJS::Profile::create): 2153 (KJS::Profile::Profile): 2154 * profiler/Profile.h: Ditto. 2155 (KJS::Profile::title): 2156 (KJS::Profile::callTree): 2157 (KJS::Profile::setHead): 2158 * profiler/ProfileGenerator.cpp: Added. This is the class that will 2159 handle the stage of creating a Profile. Once the Profile is finished 2160 being created, this class goes away. 2161 (KJS::ProfileGenerator::create): 2162 (KJS::ProfileGenerator::ProfileGenerator): 2163 (KJS::ProfileGenerator::title): 2164 (KJS::ProfileGenerator::willExecute): 2165 (KJS::ProfileGenerator::didExecute): 2166 (KJS::ProfileGenerator::stopProfiling): 2167 (KJS::ProfileGenerator::didFinishAllExecution): 2168 (KJS::ProfileGenerator::removeProfileStart): 2169 (KJS::ProfileGenerator::removeProfileEnd): 2170 * profiler/ProfileGenerator.h: Added. 2171 (KJS::ProfileGenerator::profile): 2172 (KJS::ProfileGenerator::originatingGlobalExec): 2173 (KJS::ProfileGenerator::pageGroupIdentifier): 2174 (KJS::ProfileGenerator::client): 2175 (KJS::ProfileGenerator::stoppedProfiling): 2176 * profiler/Profiler.cpp: Now operates with the ProfileGenerator instead 2177 of the Profile. 2178 (KJS::Profiler::startProfiling): 2179 (KJS::Profiler::stopProfiling): 2180 (KJS::Profiler::didFinishAllExecution): It is here that the Profile is 2181 handed off to its client and the Profile Generator is no longer needed. 2182 (KJS::dispatchFunctionToProfiles): 2183 (KJS::Profiler::willExecute): 2184 (KJS::Profiler::didExecute): 2185 * profiler/Profiler.h: Cleaned up the includes and subsequently the 2186 forward declarations. Also use the new ProfileGenerator. 2187 (KJS::ProfilerClient::~ProfilerClient): 2188 (KJS::Profiler::currentProfiles): 2189 * profiler/TreeProfile.cpp: Use Profile's new interface. 2190 (KJS::TreeProfile::create): 2191 (KJS::TreeProfile::TreeProfile): 2192 * profiler/TreeProfile.h: 2193 2194 2008-07-07 Sam Weinig <sam (a] webkit.org> 2195 2196 Reviewed by Cameron Zwarich. 2197 2198 Third step in broad cleanup effort. 2199 2200 [ File list elided ] 2201 2202 2008-07-06 Sam Weinig <sam (a] webkit.org> 2203 2204 Reviewed by Cameron Zwarich. 2205 2206 Second step in broad cleanup effort. 2207 2208 [ File list elided ] 2209 2210 2008-07-05 Sam Weinig <sam (a] webkit.org> 2211 2212 Reviewed by Cameron Zwarich. 2213 2214 First step in broad cleanup effort. 2215 2216 [ File list elided ] 2217 2218 2008-07-05 Sam Weinig <sam (a] webkit.org> 2219 2220 Rubber-stamped by Cameron Zwarich. 2221 2222 Rename list.h/cpp to ArgList.h/cpp. 2223 2224 * GNUmakefile.am: 2225 * JavaScriptCore.pri: 2226 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 2227 * JavaScriptCore.xcodeproj/project.pbxproj: 2228 * JavaScriptCoreSources.bkl: 2229 * VM/Machine.h: 2230 * kjs/AllInOneFile.cpp: 2231 * kjs/ArgList.cpp: Copied from JavaScriptCore/kjs/list.cpp. 2232 * kjs/ArgList.h: Copied from JavaScriptCore/kjs/list.h. 2233 * kjs/IndexToNameMap.cpp: 2234 * kjs/JSGlobalData.cpp: 2235 * kjs/JSGlobalData.h: 2236 * kjs/JSObject.h: 2237 * kjs/collector.cpp: 2238 * kjs/list.cpp: Removed. 2239 * kjs/list.h: Removed. 2240 2241 2008-07-05 Sam Weinig <sam (a] webkit.org> 2242 2243 Fix non-AllInOne builds again. 2244 2245 * kjs/BooleanPrototype.cpp: 2246 * kjs/ErrorPrototype.cpp: 2247 * kjs/FunctionPrototype.cpp: 2248 * kjs/NumberPrototype.cpp: 2249 * kjs/ObjectPrototype.cpp: 2250 2251 2008-07-05 Sam Weinig <sam (a] webkit.org> 2252 2253 Fix build on case-sensitive build systems. 2254 2255 * kjs/IndexToNameMap.cpp: 2256 2257 2008-07-05 Sam Weinig <sam (a] webkit.org> 2258 2259 Fix build. 2260 2261 * kjs/Arguments.cpp: 2262 * kjs/BooleanPrototype.cpp: 2263 * kjs/DateConstructor.cpp: 2264 * kjs/ErrorPrototype.cpp: 2265 * kjs/FunctionPrototype.cpp: 2266 * kjs/NumberPrototype.cpp: 2267 * kjs/ObjectPrototype.cpp: 2268 * kjs/RegExpPrototype.cpp: 2269 * kjs/StringConstructor.cpp: 2270 * kjs/lookup.cpp: 2271 2272 2008-07-05 Sam Weinig <sam (a] webkit.org> 2273 2274 Fix non-AllInOne build. 2275 2276 * kjs/JSGlobalObject.cpp: 2277 2278 2008-07-05 Sam Weinig <sam (a] webkit.org> 2279 2280 Rubber-stamped by Cameron Zwarich. 2281 2282 Split Arguments, IndexToNameMap, PrototypeFunction, GlobalEvalFunction and 2283 the functions on the global object out of JSFunction.h/cpp. 2284 2285 * GNUmakefile.am: 2286 * JavaScriptCore.pri: 2287 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 2288 * JavaScriptCore.xcodeproj/project.pbxproj: 2289 * JavaScriptCoreSources.bkl: 2290 * VM/Machine.cpp: 2291 * kjs/AllInOneFile.cpp: 2292 * kjs/Arguments.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp. 2293 * kjs/Arguments.h: Copied from JavaScriptCore/kjs/JSFunction.h. 2294 * kjs/GlobalEvalFunction.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp. 2295 * kjs/GlobalEvalFunction.h: Copied from JavaScriptCore/kjs/JSFunction.h. 2296 * kjs/IndexToNameMap.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp. 2297 * kjs/IndexToNameMap.h: Copied from JavaScriptCore/kjs/JSFunction.h. 2298 * kjs/JSActivation.cpp: 2299 * kjs/JSFunction.cpp: 2300 * kjs/JSFunction.h: 2301 * kjs/JSGlobalObject.cpp: 2302 * kjs/JSGlobalObjectFunctions.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp. 2303 * kjs/JSGlobalObjectFunctions.h: Copied from JavaScriptCore/kjs/JSFunction.h. 2304 The functions on the global object should be in JSGlobalObject.cpp, but putting them there 2305 was a 0.5% regression. 2306 2307 * kjs/PrototypeFunction.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp. 2308 * kjs/PrototypeFunction.h: Copied from JavaScriptCore/kjs/JSFunction.h. 2309 * kjs/Shell.cpp: 2310 * kjs/lexer.cpp: 2311 * kjs/ustring.cpp: 2312 2313 2008-07-04 Sam Weinig <sam (a] webkit.org> 2314 2315 Really fix the mac build. 2316 2317 * JavaScriptCore.xcodeproj/project.pbxproj: 2318 2319 2008-07-04 Sam Weinig <sam (a] webkit.org> 2320 2321 Fix mac build. 2322 2323 * JavaScriptCore.xcodeproj/project.pbxproj: 2324 2325 2008-07-04 Sam Weinig <sam (a] webkit.org> 2326 2327 Fix non-AllInOne builds. 2328 2329 * kjs/Error.cpp: 2330 * kjs/GetterSetter.cpp: 2331 * kjs/JSImmediate.cpp: 2332 * kjs/operations.cpp: 2333 2334 2008-07-04 Sam Weinig <sam (a] webkit.org> 2335 2336 Rubber-stamped by Dan Bernstein. 2337 2338 Split Error and GetterSetter out of JSObject.h. 2339 2340 * API/JSCallbackObjectFunctions.h: 2341 * GNUmakefile.am: 2342 * JavaScriptCore.pri: 2343 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 2344 * JavaScriptCore.xcodeproj/project.pbxproj: 2345 * JavaScriptCoreSources.bkl: 2346 * kjs/AllInOneFile.cpp: 2347 * kjs/ClassInfo.h: Copied from JavaScriptCore/kjs/JSObject.h. 2348 * kjs/Error.cpp: Copied from JavaScriptCore/kjs/JSObject.cpp. 2349 * kjs/Error.h: Copied from JavaScriptCore/kjs/JSObject.h. 2350 * kjs/GetterSetter.cpp: 2351 * kjs/GetterSetter.h: Copied from JavaScriptCore/kjs/JSObject.h. 2352 * kjs/JSObject.cpp: 2353 * kjs/JSObject.h: 2354 * kjs/nodes.h: 2355 2356 2008-07-04 Simon Hausmann <hausmann (a] webkit.org> 2357 2358 Fix the Wx build, added TreeProfile.cpp to the build. 2359 2360 * JavaScriptCoreSources.bkl: 2361 2362 2008-07-03 Mark Rowe <mrowe (a] apple.com> 2363 2364 Reviewed by Oliver Hunt. 2365 2366 Fix output path of recently-added script phase to reference the correct file. 2367 This prevents Xcode from running the script phase unnecessarily, which caused 2368 the generated header to be recreated and lead to AllInOneFile.cpp rebuilding. 2369 2370 * JavaScriptCore.xcodeproj/project.pbxproj: 2371 2372 2008-07-03 Mark Rowe <mrowe (a] apple.com> 2373 2374 Follow-up to the 64-bit build fix. Use intptr_t rather than ssize_t as 2375 the latter is non-standard and does not exist on Windows. 2376 2377 * kjs/JSLock.cpp: 2378 (KJS::JSLock::lockCount): 2379 (KJS::JSLock::lock): 2380 (KJS::JSLock::unlock): 2381 (KJS::JSLock::DropAllLocks::DropAllLocks): 2382 * kjs/JSLock.h: 2383 2384 2008-07-02 Mark Rowe <mrowe (a] apple.com> 2385 2386 Fix the 64-bit build. pthread_getspecific works with pointer-sized values, 2387 so use ssize_t rather than int to track the lock count to avoid warnings about 2388 truncating the result of pthread_getspecific. 2389 2390 * kjs/JSLock.cpp: 2391 (KJS::JSLock::lockCount): 2392 (KJS::JSLock::lock): 2393 (KJS::JSLock::unlock): 2394 (KJS::JSLock::DropAllLocks::DropAllLocks): 2395 * kjs/JSLock.h: 2396 2397 2008-07-03 Geoffrey Garen <ggaren (a] apple.com> 2398 2399 Reviewed by Sam Weinig. 2400 2401 Removed checking for the array get/put fast case from the array code. 2402 Callers who want the fast case should call getIndex and/or setIndex 2403 instead. (get_by_val and put_by_val already do this.) 2404 2405 SunSpider reports no change overall, but a 1.4% speedup on fannkuch and 2406 a 3.6% speedup on nsieve. 2407 2408 2008-07-03 Dan Bernstein <mitz (a] apple.com> 2409 2410 - Windows build fix 2411 2412 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added TreeProfile.{h,cpp}. 2413 2414 2008-07-03 Dan Bernstein <mitz (a] apple.com> 2415 2416 Reviewed by Anders Carlsson. 2417 2418 - Windows build fix 2419 2420 * VM/Machine.cpp: 2421 (KJS::Machine::Machine): 2422 2423 2008-07-03 Simon Hausmann <hausmann (a] webkit.org> 2424 2425 Reviewed by Alexey Proskuryakov. 2426 2427 Fix the non-threaded build. 2428 2429 * kjs/JSGlobalData.cpp: 2430 (KJS::JSGlobalData::threadInstanceInternal): 2431 2432 2008-07-03 Simon Hausmann <hausmann (a] webkit.org> 2433 2434 Fix the Qt build, added TreeProfile to the build. 2435 2436 * JavaScriptCore.pri: 2437 2438 2008-07-02 Alexey Proskuryakov <ap (a] webkit.org> 2439 2440 Reviewed by Geoff. 2441 2442 Don't create unnecessary JSGlobalData instances. 2443 2444 * kjs/JSGlobalData.h: 2445 * kjs/JSGlobalData.cpp: 2446 (KJS::JSGlobalData::threadInstanceExists): 2447 (KJS::JSGlobalData::sharedInstanceExists): 2448 (KJS::JSGlobalData::threadInstance): 2449 (KJS::JSGlobalData::sharedInstance): 2450 (KJS::JSGlobalData::threadInstanceInternal): 2451 (KJS::JSGlobalData::sharedInstanceInternal): 2452 Added methods to query instance existence. 2453 2454 * kjs/InitializeThreading.cpp: 2455 (KJS::initializeThreadingOnce): 2456 Initialize thread instance static in a new way. 2457 2458 * API/JSBase.cpp: 2459 (JSGarbageCollect): 2460 * kjs/collector.cpp: 2461 (KJS::Heap::collect): 2462 Check for instance existence before accessing it. 2463 2464 2008-07-02 Geoffrey Garen <ggaren (a] apple.com> 2465 2466 Reviewed by Cameron Zwarich. 2467 2468 Fixed https://bugs.webkit.org/show_bug.cgi?id=19862 2469 REGRESSION (r34907): Gmail crashes in JavaScriptCore code while editing drafts 2470 2471 I was never able to reproduce this issue, but Cameron could, and he says 2472 that this patch fixes it. 2473 2474 The crash seems tied to a timer or event handler callback. In such a case, 2475 the sole reference to the global object may be in the current call frame, 2476 so we can't depend on the global object to mark the call frame area in 2477 the register file. 2478 2479 The new GC marking rule is: the global object is not responsible for 2480 marking the whole register file -- it's just responsible for the globals 2481 section it's tied to. The heap is responsible for marking the call frame area. 2482 2483 2008-07-02 Mark Rowe <mrowe (a] apple.com> 2484 2485 Reviewed by Sam Weinig. 2486 2487 Add the ability to trace JavaScriptCore garabge collections using dtrace. 2488 2489 * JavaScriptCore.xcodeproj/project.pbxproj: Generate the dtrace probe header 2490 file when building on a new enough version of Mac OS X. 2491 * JavaScriptCorePrefix.h: Add our standard Mac OS X version detection macros. 2492 * kjs/Tracing.d: Declare three dtrace probes. 2493 * kjs/Tracing.h: Include the generated dtrace macros if dtrace is available, 2494 otherwise provide versions that do nothing. 2495 * kjs/collector.cpp: 2496 (KJS::Heap::collect): Fire dtrace probes when starting a collection, after the 2497 mark phase has completed, and when the collection is complete. 2498 * wtf/Platform.h: Define HAVE_DTRACE when building on a new enough version of Mac OS X. 2499 2500 2008-07-02 Geoffrey Garen <ggaren (a] apple.com> 2501 2502 Rubber stamped by Oliver Hunt. 2503 2504 Reduced the max register file size from 8MB to 2MB. 2505 2506 We still allow about 20,000 levels of recursion. 2507 2508 2008-07-02 Alp Toker <alp (a] nuanti.com> 2509 2510 Build fix for r34960. Add TreeProfile.cpp to build. 2511 2512 * GNUmakefile.am: 2513 2514 2008-07-02 Geoffrey Garen <ggaren (a] apple.com> 2515 2516 Reviewed by Oliver Hunt. 2517 2518 Optimized a[n] get for cases when a is an array or a string. When a is 2519 an array, we optimize both get and put. When a is a string, we only 2520 optimize get, since you can't put to a string. 2521 2522 SunSpider says 3.4% faster. 2523 2524 2008-07-02 Kevin McCullough <kmccullough (a] apple.com> 2525 2526 Reviewed by Darin. 2527 2528 -Small cleanup in preparation for implementing Bottom-up. 2529 2530 * profiler/CallIdentifier.h: Rename debug function to make it clear of 2531 its output and intention to be debug only. 2532 (KJS::CallIdentifier::operator const char* ): Implement in terms of 2533 c_str. 2534 (KJS::CallIdentifier::c_str): 2535 * profiler/ProfileNode.cpp: Impelment findChild() which will be needed 2536 by the bottom-up implementation. 2537 (KJS::ProfileNode::findChild): 2538 * profiler/ProfileNode.h: Added comments to make the collections of 2539 functions more clear. 2540 (KJS::ProfileNode::operator==): 2541 (KJS::ProfileNode::c_str): 2542 2543 2008-07-02 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 2544 2545 Reviewed by Darin. 2546 2547 Bug 19776: Number.toExponential() is incorrect for numbers between 0.1 and 1 2548 <https://bugs.webkit.org/show_bug.cgi?id=19776> 2549 2550 Perform the sign check for the exponent on the actual exponent value, 2551 which is 1 less than the value of decimalPoint, instead of on the value 2552 of decimalPoint itself. 2553 2554 * kjs/NumberPrototype.cpp: 2555 (KJS::exponentialPartToString): 2556 2557 2008-07-02 Kevin McCullough <kmccullough (a] apple.com> 2558 2559 Reviewed by Darin. 2560 2561 <rdar://problem/5951532> JSProfiler: Implement Bottom-Up view (19228) 2562 - Subclass TreeProfile as I prepare for a HeavyProfile to be comming 2563 later. 2564 2565 * JavaScriptCore.xcodeproj/project.pbxproj: 2566 * profiler/Profile.cpp: By default we create a TreeProfile. 2567 (KJS::Profile::create): 2568 * profiler/Profile.h: Changes to the Profile class to make it amenable 2569 to be inherited from. 2570 (KJS::Profile::~Profile): 2571 * profiler/TreeProfile.cpp: Added. 2572 (KJS::TreeProfile::create): 2573 (KJS::TreeProfile::TreeProfile): 2574 (KJS::TreeProfile::heavyProfile): 2575 * profiler/TreeProfile.h: Added. 2576 (KJS::TreeProfile::treeProfile): 2577 2578 2008-07-02 Kevin McCullough <kmccullough (a] apple.com> 2579 2580 Reviewed by Dan. 2581 2582 Broke CallIdentifier out into its own file. I did this because it's 2583 going to grow a lot soon and I wanted this to be a separate patch. 2584 2585 * JavaScriptCore.xcodeproj/project.pbxproj: 2586 * profiler/CallIdentifier.h: Added. 2587 (KJS::CallIdentifier::CallIdentifier): 2588 (KJS::CallIdentifier::operator==): 2589 (KJS::CallIdentifier::operator!=): 2590 (KJS::CallIdentifier::operator const char* ): 2591 (KJS::CallIdentifier::toString): 2592 * profiler/ProfileNode.h: 2593 2594 2008-07-02 Simon Hausmann <hausmann (a] webkit.org> 2595 2596 Build fix. Implemented missing functions for single-threaded build. 2597 2598 * kjs/JSLock.cpp: 2599 (KJS::JSLock::JSLock): 2600 (KJS::JSLock::lock): 2601 (KJS::JSLock::unlock): 2602 (KJS::JSLock::DropAllLocks::DropAllLocks): 2603 2604 2008-07-02 Alexey Proskuryakov <ap (a] webkit.org> 2605 2606 Another non-AllInOne build fix. 2607 2608 * kjs/JSGlobalObject.cpp: Include JSLock.h here, too. 2609 2610 2008-07-02 Alexey Proskuryakov <ap (a] webkit.org> 2611 2612 Non-AllInOne build fix. 2613 2614 * kjs/interpreter.cpp: Include JSLock.h. 2615 2616 2008-06-30 Alexey Proskuryakov <ap (a] webkit.org> 2617 2618 Reviewed by Darin. 2619 2620 Disable JSLock for per-thread contexts. 2621 2622 No change on SunSpider. 2623 2624 * kjs/JSGlobalData.h: 2625 * kjs/JSGlobalData.cpp: 2626 (KJS::JSGlobalData::JSGlobalData): 2627 (KJS::JSGlobalData::sharedInstance): 2628 Added isSharedInstance as a better way to tell whether the instance is shared (legacy). 2629 2630 * kjs/JSLock.cpp: 2631 (KJS::createJSLockCount): 2632 (KJS::JSLock::lockCount): 2633 (KJS::setLockCount): 2634 (KJS::JSLock::JSLock): 2635 (KJS::JSLock::lock): 2636 (KJS::JSLock::unlock): 2637 (KJS::JSLock::currentThreadIsHoldingLock): 2638 (KJS::JSLock::DropAllLocks::DropAllLocks): 2639 (KJS::JSLock::DropAllLocks::~DropAllLocks): 2640 * kjs/JSLock.h: 2641 (KJS::JSLock::JSLock): 2642 (KJS::JSLock::~JSLock): 2643 Made JSLock and JSLock::DropAllLocks constructors take a parameter to decide whether to 2644 actually lock a mutex, or only to increment recursion count. We cannot turn it into no-op 2645 if we want to keep existing assertions working. 2646 Made recursion count per-thread, now that locks may not lock. 2647 2648 * API/JSBase.cpp: 2649 (JSEvaluateScript): Take JSLock after casting JSContextRef to ExecState* (which doesn't need 2650 locking in any case), so that a decision whether to actually lock can be made. 2651 (JSCheckScriptSyntax): Ditto. 2652 (JSGarbageCollect): Only lock while collecting the shared heap, not the per-thread one. 2653 2654 * API/JSObjectRef.cpp: 2655 (JSClassCreate): Don't lock, as there is no reason to. 2656 (JSClassRetain): Ditto. 2657 (JSClassRelease): Ditto. 2658 (JSPropertyNameArrayRetain): Ditto. 2659 (JSPropertyNameArrayRelease): Only lock while deleting the array, as that may touch 2660 identifier table. 2661 (JSPropertyNameAccumulatorAddName): Adding a string also involves an identifier table 2662 lookup, and possibly modification. 2663 2664 * API/JSStringRef.cpp: 2665 (JSStringCreateWithCharacters): 2666 (JSStringCreateWithUTF8CString): 2667 (JSStringRetain): 2668 (JSStringRelease): 2669 (JSStringGetUTF8CString): 2670 (JSStringIsEqual): 2671 * API/JSStringRefCF.cpp: 2672 (JSStringCreateWithCFString): 2673 JSStringRef operations other than releasing do not need locking. 2674 2675 * VM/Machine.cpp: Don't include unused JSLock.h. 2676 2677 * kjs/CollectorHeapIntrospector.cpp: (KJS::CollectorHeapIntrospector::statistics): 2678 Don't take the lock for real, as heap introspection pauses the process anyway. It seems that 2679 the existing code could cause deadlocks. 2680 2681 * kjs/Shell.cpp: 2682 (functionGC): 2683 (main): 2684 (jscmain): 2685 The test tool uses a per-thread context, so no real locking is required. 2686 2687 * kjs/collector.h: 2688 (KJS::Heap::setGCProtectNeedsLocking): Optionally protect m_protectedValues access with a 2689 per-heap mutex. This is only needed for WebCore Database code, which violates the "no data 2690 migration between threads" by using ProtectedPtr on a background thread. 2691 (KJS::Heap::isShared): Keep a shared flag here, as well. 2692 2693 * kjs/protect.h: 2694 (KJS::::ProtectedPtr): 2695 (KJS::::~ProtectedPtr): 2696 (KJS::::operator): 2697 (KJS::operator==): 2698 (KJS::operator!=): 2699 ProtectedPtr is ony used from WebCore, so it doesn't need to take JSLock. An assertion in 2700 Heap::protect/unprotect guards agains possible future unlocked uses of ProtectedPtr in JSC. 2701 2702 * kjs/collector.cpp: 2703 (KJS::Heap::Heap): Initialize m_isShared. 2704 (KJS::Heap::~Heap): No need to lock for real during destruction, but must keep assertions 2705 in sweep() working. 2706 (KJS::destroyRegisteredThread): Registered thread list is only accessed for shared heap, 2707 so locking is always needed here. 2708 (KJS::Heap::registerThread): Ditto. 2709 (KJS::Heap::markStackObjectsConservatively): Use m_isShared instead of comparing to a shared 2710 instance for a small speedup. 2711 (KJS::Heap::setGCProtectNeedsLocking): Create m_protectedValuesMutex. There is currently no 2712 way to undo this - and ideally, Database code will be fixed to lo longer require this quirk. 2713 (KJS::Heap::protect): Take m_protectedValuesMutex (if it exists) while accessing 2714 m_protectedValues. 2715 (KJS::Heap::unprotect): Ditto. 2716 (KJS::Heap::markProtectedObjects): Ditto. 2717 (KJS::Heap::protectedGlobalObjectCount): Ditto. 2718 (KJS::Heap::protectedObjectCount): Ditto. 2719 (KJS::Heap::protectedObjectTypeCounts): Ditto. 2720 2721 * kjs/ustring.cpp: 2722 * kjs/ustring.h: 2723 Don't include JSLock.h, which is no longer used here. As a result, an explicit include had 2724 to be added to many files in JavaScriptGlue, WebCore and WebKit. 2725 2726 * kjs/JSGlobalObject.cpp: 2727 (KJS::JSGlobalObject::init): 2728 * API/JSCallbackConstructor.cpp: 2729 (KJS::constructJSCallback): 2730 * API/JSCallbackFunction.cpp: 2731 (KJS::JSCallbackFunction::call): 2732 * API/JSCallbackObjectFunctions.h: 2733 (KJS::::init): 2734 (KJS::::getOwnPropertySlot): 2735 (KJS::::put): 2736 (KJS::::deleteProperty): 2737 (KJS::::construct): 2738 (KJS::::hasInstance): 2739 (KJS::::call): 2740 (KJS::::getPropertyNames): 2741 (KJS::::toNumber): 2742 (KJS::::toString): 2743 (KJS::::staticValueGetter): 2744 (KJS::::callbackGetter): 2745 * API/JSContextRef.cpp: 2746 (JSGlobalContextCreate): 2747 (JSGlobalContextRetain): 2748 (JSGlobalContextRelease): 2749 * API/JSValueRef.cpp: 2750 (JSValueIsEqual): 2751 (JSValueIsStrictEqual): 2752 (JSValueIsInstanceOfConstructor): 2753 (JSValueMakeNumber): 2754 (JSValueMakeString): 2755 (JSValueToNumber): 2756 (JSValueToStringCopy): 2757 (JSValueToObject): 2758 (JSValueProtect): 2759 (JSValueUnprotect): 2760 * JavaScriptCore.exp: 2761 * kjs/PropertyNameArray.h: 2762 (KJS::PropertyNameArray::globalData): 2763 * kjs/interpreter.cpp: 2764 (KJS::Interpreter::checkSyntax): 2765 (KJS::Interpreter::evaluate): 2766 Pass a parameter to JSLock/JSLock::DropAllLocks to decide whether the lock needs to be taken. 2767 2768 2008-07-01 Alexey Proskuryakov <ap (a] webkit.org> 2769 2770 Reviewed by Darin. 2771 2772 https://bugs.webkit.org/show_bug.cgi?id=19834 2773 Failed assertion in JavaScriptCore/VM/SegmentedVector.h:82 2774 2775 Creating a global object with a custom prototype resets it twice (wasteful!). 2776 So, addStaticGlobals() was called twice, but JSGlobalObject::reset() didn't reset 2777 the register array. 2778 2779 * kjs/JSGlobalObject.cpp: (KJS::JSGlobalObject::reset): Call setRegisterArray(0, 0). 2780 2781 * kjs/JSVariableObject.h: Changed registerArray to OwnArrayPtr. Also, added private copy 2782 constructor and operator= to ensure that no one attempts to copy this object (for whatever 2783 reason, I couldn't make Noncopyable work). 2784 2785 * kjs/JSGlobalObject.h: (KJS::JSGlobalObject::addStaticGlobals): Allocate registerArray 2786 with new[]. 2787 2788 * kjs/JSVariableObject.cpp: 2789 (KJS::JSVariableObject::copyRegisterArray): Allocate registerArray with new[]. 2790 (KJS::JSVariableObject::setRegisterArray): Avoid hitting an assertion in OwnArrayPtr when 2791 "changing" the value from 0 to 0. 2792 2793 2008-07-01 Geoffrey Garen <ggaren (a] apple.com> 2794 2795 Reviewed by Oliver Hunt. 2796 2797 Removed and/or reordered exception checks in array-style a[n] access. 2798 2799 SunSpider says 1.4% faster. 2800 2801 * VM/Machine.cpp: 2802 (KJS::Machine::privateExecute): No need to check for exceptions before 2803 calling toString, toNumber and/or get. If the call ends up being observable 2804 through toString, valueOf, or a getter, we short-circuit it there, instead. 2805 In the op_del_by_val case, I removed the incorrect comment without actually 2806 removing the code, since I didn't want to tempt the GCC fates! 2807 2808 * kjs/JSObject.cpp: 2809 (KJS::callDefaultValueFunction): Added exception check to prevent 2810 toString and valueOf functions from observing execution after an exception 2811 has been thrown. This removes some of the burden of exception checking 2812 from the machine. 2813 2814 (KJS::JSObject::defaultValue): Removed redundant exception check here. 2815 2816 * kjs/PropertySlot.cpp: 2817 (KJS::PropertySlot::functionGetter): Added exception check to prevent 2818 getter functions from observing execution after an exception has been 2819 thrown. This removes some of the burden of exception checking from the 2820 machine. 2821 2822 2008-07-01 Geoffrey Garen <ggaren (a] apple.com> 2823 2824 Reviewed by Oliver Hunt. 2825 2826 Optimized a[n] get and put for cases where n is an immediate unsigned 2827 value. 2828 2829 SunSpider says 3.5% faster. 2830 2831 2008-07-01 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 2832 2833 Reviewed by Darin. 2834 2835 Bug 19844: JavaScript Switch statement modifies "this" 2836 <https://bugs.webkit.org/show_bug.cgi?id=19844> 2837 2838 Use a temporary when generating code for switch clauses to avoid 2839 overwriting 'this' or a local variable. 2840 2841 * kjs/nodes.cpp: 2842 (KJS::CaseBlockNode::emitCodeForBlock): 2843 2844 2008-07-01 Christian Dywan <christian (a] twotoasts.de> 2845 2846 Gtk+ build fix. 2847 2848 * kjs/list.cpp: Include "JSCell.h" 2849 2850 2008-07-01 Kevin McCullough <kmccullough (a] apple.com> 2851 2852 Build fix. 2853 2854 * JavaScriptCore.xcodeproj/project.pbxproj: 2855 2856 2008-07-01 Dan Bernstein <mitz (a] apple.com> 2857 2858 Reviewed by Anders Carlsson. 2859 2860 - Mac release build fix 2861 2862 * JavaScriptCore.exp: 2863 2864 2008-07-01 Sam Weinig <sam (a] webkit.org> 2865 2866 Try and fix mac builds. 2867 2868 * JavaScriptCore.exp: 2869 2870 2008-07-01 Sam Weinig <sam (a] webkit.org> 2871 2872 Fix non-AllInOne builds. 2873 2874 * kjs/DateMath.cpp: 2875 2876 2008-07-01 Sam Weinig <sam (a] webkit.org> 2877 2878 Reviewed by Darin Adler. 2879 2880 Split JSCell and JSNumberCell class declarations out of JSValue.h 2881 2882 * GNUmakefile.am: 2883 * JavaScriptCore.pri: 2884 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 2885 * JavaScriptCore.xcodeproj/project.pbxproj: 2886 * JavaScriptCoreSources.bkl: 2887 * VM/JSPropertyNameIterator.h: 2888 * kjs/AllInOneFile.cpp: 2889 * kjs/JSCell.cpp: Copied from JavaScriptCore/kjs/JSValue.cpp. 2890 * kjs/JSCell.h: Copied from JavaScriptCore/kjs/JSValue.h. 2891 (KJS::JSValue::getJSNumber): 2892 * kjs/JSNumberCell.cpp: 2893 * kjs/JSNumberCell.h: Copied from JavaScriptCore/kjs/JSValue.h. 2894 * kjs/JSObject.h: 2895 * kjs/JSString.cpp: 2896 (KJS::jsString): 2897 (KJS::jsOwnedString): 2898 * kjs/JSString.h: 2899 (KJS::JSValue::toThisJSString): 2900 * kjs/JSValue.cpp: 2901 * kjs/JSValue.h: 2902 2903 2008-07-01 Anders Carlsson <andersca (a] apple.com> 2904 2905 Build fixes. 2906 2907 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 2908 * kjs/JSGlobalObject.h: 2909 (KJS::JSGlobalObject::addStaticGlobals): 2910 2911 2008-07-01 Simon Hausmann <hausmann (a] webkit.org> 2912 2913 Build fix, include OwnPtr.h. 2914 2915 * kjs/RegExpConstructor.h: 2916 2917 2008-06-30 Geoffrey Garen <ggaren (a] apple.com> 2918 2919 Reviewed by Oliver Hunt. 2920 2921 Fixed a global object leak caused by the switch to one register file. 2922 2923 Don't unconditionally mark the register file, since that logically 2924 makes all global variables GC roots, even when their global object is 2925 no longer reachable. 2926 2927 Instead, make the global object associated with the register file 2928 responsible for marking the register file. 2929 2930 2008-06-30 Geoffrey Garen <ggaren (a] apple.com> 2931 2932 Reviewed by Oliver Hunt. 2933 2934 Removed the "registerBase" abstraction. Since the register file never 2935 reallocates, we can keep direct pointers into it, instead of 2936 <registerBase, offset> tuples. 2937 2938 SunSpider says 0.8% faster. 2939 2940 2008-06-30 Oliver Hunt <oliver (a] apple.com> 2941 2942 Reviewed by NOBODY (build fix). 2943 2944 Fix build by adding all (hopefully) the missing includes. 2945 2946 * kjs/BooleanPrototype.cpp: 2947 * kjs/DateConstructor.cpp: 2948 * kjs/ErrorPrototype.cpp: 2949 * kjs/FunctionPrototype.cpp: 2950 * kjs/NativeErrorConstructor.cpp: 2951 * kjs/NumberPrototype.cpp: 2952 * kjs/ObjectPrototype.cpp: 2953 * kjs/RegExpConstructor.cpp: 2954 * kjs/StringConstructor.cpp: 2955 * kjs/StringPrototype.cpp: 2956 2957 2008-06-30 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 2958 2959 Reviewed by Oliver. 2960 2961 Bug 19830: REGRESSION (r34883): Google Reader doesn't show up feed list on sidebar 2962 <https://bugs.webkit.org/show_bug.cgi?id=19830> 2963 2964 Ensure that we do not eliminate a write to a local register when doing 2965 peephole optimizations. 2966 2967 * VM/CodeGenerator.cpp: 2968 (KJS::CodeGenerator::emitJumpIfTrue): 2969 (KJS::CodeGenerator::emitJumpIfFalse): 2970 2971 2008-06-30 Sam Weinig <sam (a] webkit.org> 2972 2973 Rubber-stamped by Darin Alder. 2974 2975 Split InternalFunction into its own header file. 2976 2977 * API/JSCallbackFunction.h: 2978 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 2979 * JavaScriptCore.xcodeproj/project.pbxproj: 2980 * kjs/ArrayConstructor.h: 2981 * kjs/BooleanConstructor.h: 2982 * kjs/DateConstructor.h: 2983 * kjs/ErrorConstructor.h: 2984 * kjs/FunctionConstructor.h: 2985 * kjs/FunctionPrototype.h: 2986 * kjs/InternalFunction.h: Copied from kjs/JSFunction.h. 2987 * kjs/JSFunction.h: 2988 * kjs/NativeErrorConstructor.h: 2989 * kjs/NumberConstructor.h: 2990 * kjs/ObjectConstructor.h: 2991 * kjs/RegExpConstructor.h: 2992 * kjs/StringConstructor.h: 2993 * profiler/Profiler.cpp: 2994 2995 2008-06-30 Sam Weinig <sam (a] webkit.org> 2996 2997 Reviewed by Kevin McCullough. 2998 2999 Remove empty files Instruction.cpp, LabelID.cpp, Register.cpp and RegisterID.cpp. 3000 3001 * GNUmakefile.am: 3002 * JavaScriptCore.pri: 3003 * JavaScriptCore.xcodeproj/project.pbxproj: 3004 * JavaScriptCoreSources.bkl: 3005 * VM/Instruction.cpp: Removed. 3006 * VM/LabelID.cpp: Removed. 3007 * VM/Register.cpp: Removed. 3008 * VM/RegisterID.cpp: Removed. 3009 3010 2008-06-30 Sam Weinig <sam (a] webkit.org> 3011 3012 Rubber-stamped (reluctantly) by Kevin McCullough. 3013 3014 Rename date_object.h/cpp to DateInstance.h/cpp 3015 3016 * GNUmakefile.am: 3017 * JavaScriptCore.pri: 3018 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 3019 * JavaScriptCore.xcodeproj/project.pbxproj: 3020 * JavaScriptCoreSources.bkl: 3021 * kjs/AllInOneFile.cpp: 3022 * kjs/DateConstructor.cpp: 3023 * kjs/DateInstance.cpp: Copied from kjs/date_object.cpp. 3024 * kjs/DateInstance.h: Copied from kjs/date_object.h. 3025 * kjs/DatePrototype.cpp: 3026 * kjs/DatePrototype.h: 3027 * kjs/date_object.cpp: Removed. 3028 * kjs/date_object.h: Removed. 3029 3030 2008-06-30 Sam Weinig <sam (a] webkit.org> 3031 3032 Rubber-stamped by Darin Adler. 3033 3034 Remove internal.cpp and move its contents to there own .cpp files. 3035 3036 * GNUmakefile.am: 3037 * JavaScriptCore.pri: 3038 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 3039 * JavaScriptCore.xcodeproj/project.pbxproj: 3040 * JavaScriptCoreSources.bkl: 3041 * kjs/AllInOneFile.cpp: 3042 * kjs/GetterSetter.cpp: Copied from kjs/internal.cpp. 3043 * kjs/InternalFunction.cpp: Copied from kjs/internal.cpp. 3044 * kjs/JSNumberCell.cpp: Copied from kjs/internal.cpp. 3045 * kjs/JSString.cpp: Copied from kjs/internal.cpp. 3046 * kjs/JSString.h: 3047 * kjs/LabelStack.cpp: Copied from kjs/internal.cpp. 3048 * kjs/NumberConstructor.cpp: 3049 * kjs/NumberObject.cpp: 3050 (KJS::constructNumber): 3051 (KJS::constructNumberFromImmediateNumber): 3052 * kjs/internal.cpp: Removed. 3053 3054 2008-06-30 Adam Roben <aroben (a] apple.com> 3055 3056 Fix <rdar://5954749> Assertion failure due to HashTable's use of 3057 operator& 3058 3059 HashTable was passing &value to constructDeletedValue, which in 3060 classes like WebCore::COMPtr would cause an assertion. We now pass 3061 value by reference instead of by address so that the HashTraits 3062 implementations have more flexibility in constructing the deleted 3063 value. 3064 3065 Reviewed by Ada Chan. 3066 3067 * VM/CodeGenerator.h: Updated for changes to HashTraits. 3068 * wtf/HashTable.h: 3069 (WTF::::deleteBucket): Changed to pass bucket by reference instead of 3070 by address. 3071 (WTF::::checkKey): Ditto. 3072 * wtf/HashTraits.h: 3073 (WTF::): Updated HashTraits for HashTable change. 3074 3075 2008-07-01 Alexey Proskuryakov <ap (a] webkit.org> 3076 3077 Reviewed by Cameron Zwarich. 3078 3079 Make RegisterFile really unmap memory on destruction. 3080 3081 This fixes run-webkit-tests --threaded, which ran out of address space in a few seconds. 3082 3083 * VM/RegisterFile.cpp: (KJS::RegisterFile::~RegisterFile): Unmap all the memory, not just 3084 1/4 of it. 3085 3086 * kjs/JSGlobalObject.h: Don't include RegisterFile.h, so that changes to it don't make 3087 half of WebCore rebuild. 3088 3089 * VM/Machine.h: Don't forward declare RegisterFile, as RegisterFile.h is included already. 3090 3091 * VM/RegisterFile.h: (KJS::RegisterFile::RegisterFile): Assert that the allocation succeeded. 3092 3093 2008-06-30 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 3094 3095 Rubber-stamped by Oliver. 3096 3097 Correct the documentation for op_put_by_index. 3098 3099 * VM/Machine.cpp: 3100 (KJS::Machine::privateExecute): 3101 3102 2008-06-29 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 3103 3104 Reviewed by Oliver. 3105 3106 Bug 19821: Merge the instruction pair (less, jfalse) 3107 <https://bugs.webkit.org/show_bug.cgi?id=19821> 3108 3109 This is a 2.4% win on SunSpider. I needed to add an ALWAYS_INLINE 3110 intrinisc to CodeGenerator::rewindBinaryOp() to avoid a massive 3111 regression in regexp-dna. 3112 3113 * VM/CodeBlock.cpp: 3114 (KJS::CodeBlock::dump): 3115 * VM/CodeGenerator.cpp: 3116 (KJS::CodeGenerator::rewindBinaryOp): 3117 (KJS::CodeGenerator::emitJumpIfFalse): 3118 * VM/Machine.cpp: 3119 (KJS::Machine::privateExecute): 3120 * VM/Opcode.cpp: 3121 (KJS::): 3122 * VM/Opcode.h: 3123 3124 2008-06-29 Sam Weinig <sam (a] webkit.org> 3125 3126 Fix non-AllInOne builds. 3127 3128 * kjs/JSObject.cpp: 3129 * kjs/JSValue.cpp: 3130 3131 2008-06-29 Sam Weinig <sam (a] webkit.org> 3132 3133 Build fix for Qt. 3134 3135 * kjs/DateMath.cpp: 3136 * kjs/DatePrototype.cpp: 3137 3138 2008-06-29 Sam Weinig <sam (a] webkit.org> 3139 3140 Rubber-stamped by Cameron Zwarich. 3141 3142 Splits ErrorConstructor, ErrorPrototype, NativeErrorConstructor and 3143 NativeErrorPrototype out of error_object.h/cpp and renames it ErrorInstance. 3144 3145 * GNUmakefile.am: 3146 * JavaScriptCore.pri: 3147 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 3148 * JavaScriptCore.xcodeproj/project.pbxproj: 3149 * JavaScriptCoreSources.bkl: 3150 * kjs/AllInOneFile.cpp: 3151 * kjs/ArrayConstructor.cpp: 3152 * kjs/ArrayPrototype.cpp: 3153 * kjs/BooleanPrototype.cpp: 3154 * kjs/DatePrototype.cpp: 3155 * kjs/ErrorConstructor.cpp: Copied from kjs/error_object.cpp. 3156 * kjs/ErrorConstructor.h: Copied from kjs/error_object.h. 3157 * kjs/ErrorInstance.cpp: Copied from kjs/error_object.cpp. 3158 * kjs/ErrorInstance.h: Copied from kjs/error_object.h. 3159 * kjs/ErrorPrototype.cpp: Copied from kjs/error_object.cpp. 3160 * kjs/ErrorPrototype.h: Copied from kjs/error_object.h. 3161 * kjs/JSGlobalObject.cpp: 3162 * kjs/JSObject.cpp: 3163 * kjs/JSValue.cpp: 3164 * kjs/NativeErrorConstructor.cpp: Copied from kjs/error_object.cpp. 3165 * kjs/NativeErrorConstructor.h: Copied from kjs/error_object.h. 3166 * kjs/NativeErrorPrototype.cpp: Copied from kjs/error_object.cpp. 3167 * kjs/NativeErrorPrototype.h: Copied from kjs/error_object.h. 3168 * kjs/NumberPrototype.cpp: 3169 * kjs/RegExpConstructor.cpp: 3170 * kjs/RegExpObject.cpp: 3171 * kjs/RegExpPrototype.cpp: 3172 * kjs/StringPrototype.cpp: 3173 * kjs/error_object.cpp: Removed. 3174 * kjs/error_object.h: Removed. 3175 * kjs/internal.cpp: 3176 3177 2008-06-29 Sam Weinig <sam (a] webkit.org> 3178 3179 Fix non-AllInOne build. 3180 3181 * kjs/DateConstructor.cpp: 3182 * kjs/DateMath.cpp: 3183 * kjs/JSObject.cpp: 3184 3185 2008-06-29 Sam Weinig <sam (a] webkit.org> 3186 3187 Rubber-stamped by Oliver Hunt. 3188 3189 Splits DateConstructor and DatePrototype out of date_object.h/cpp 3190 Moves shared Date code into DateMath. 3191 3192 * DerivedSources.make: 3193 * GNUmakefile.am: 3194 * JavaScriptCore.pri: 3195 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 3196 * JavaScriptCore.xcodeproj/project.pbxproj: 3197 * JavaScriptCoreSources.bkl: 3198 * kjs/AllInOneFile.cpp: 3199 * kjs/DateConstructor.cpp: Copied from kjs/date_object.cpp. 3200 * kjs/DateConstructor.h: Copied from kjs/date_object.h. 3201 * kjs/DateMath.cpp: 3202 (KJS::ymdhmsToSeconds): 3203 (KJS::): 3204 (KJS::skipSpacesAndComments): 3205 (KJS::findMonth): 3206 (KJS::parseDate): 3207 (KJS::timeClip): 3208 (KJS::formatDate): 3209 (KJS::formatDateUTCVariant): 3210 (KJS::formatTime): 3211 * kjs/DateMath.h: 3212 (KJS::gmtoffset): 3213 * kjs/DatePrototype.cpp: Copied from kjs/date_object.cpp. 3214 * kjs/DatePrototype.h: Copied from kjs/date_object.h. 3215 * kjs/JSGlobalObject.cpp: 3216 * kjs/JSObject.cpp: 3217 * kjs/date_object.cpp: 3218 * kjs/date_object.h: 3219 * kjs/internal.cpp: 3220 3221 2008-06-29 Jan Michael Alonzo <jmalonzo (a] webkit.org> 3222 3223 Rubber-stamped by Cameron Zwarich 3224 3225 Fix Gtk non-AllInOne build 3226 3227 * GNUmakefile.am: include JSVariableObject.cpp 3228 * kjs/RegExpConstructor.cpp: include RegExpObject.h 3229 * kjs/RegExpObject.h: forward declare RegExpPrototype 3230 3231 2008-06-28 Darin Adler <darin (a] apple.com> 3232 3233 Reviewed by Sam and Cameron. 3234 3235 - fix https://bugs.webkit.org/show_bug.cgi?id=19805 3236 Array.concat turns missing array elements into "undefined" 3237 3238 Test: fast/js/array-holes.html 3239 3240 * JavaScriptCore.exp: No longer export JSArray::getItem. 3241 3242 * kjs/ArrayPrototype.cpp: 3243 (KJS::arrayProtoFuncConcat): Changed to use getProperty instead of 3244 JSArray::getItem -- need to handle properties from the prototype chain 3245 instead of ignoring them. 3246 3247 * kjs/JSArray.cpp: Removed getItem. 3248 * kjs/JSArray.h: Ditto. 3249 3250 2008-06-28 Darin Adler <darin (a] apple.com> 3251 3252 Reviewed by Cameron. 3253 3254 - https://bugs.webkit.org/show_bug.cgi?id=19804 3255 optimize access to arrays without "holes" 3256 3257 SunSpider says 1.8% faster. 3258 3259 * kjs/JSArray.cpp: 3260 (KJS::JSArray::JSArray): Initialize m_fastAccessCutoff when creating 3261 arrays. Also updated for new location of m_vectorLength. 3262 (KJS::JSArray::getItem): Updated for new location of m_vectorLength. 3263 (KJS::JSArray::getSlowCase): Added. Broke out the non-hot parts of 3264 getOwnPropertySlot to make the hot part faster. 3265 (KJS::JSArray::getOwnPropertySlot): Added a new faster case for 3266 indices lower than m_fastAccessCutoff. We can do theese with no 3267 additional checks or branches. 3268 (KJS::JSArray::put): Added a new faster case for indices lower than 3269 m_fastAccessCutoff. We can do theese with no additional checks or 3270 branches. Moved the maxArrayIndex handling out of this function. 3271 Added code to set m_fastAccessCutoff when the very last hole in 3272 an array is filled; this is how the cutoff gets set for most arrays. 3273 (KJS::JSArray::putSlowCase): Moved the rest of the put function logic 3274 in here, to make the hot part of the put function faster. 3275 (KJS::JSArray::deleteProperty): Added code to lower m_fastAccessCutoff 3276 when a delete makes a new hole in the array. 3277 (KJS::JSArray::getPropertyNames): Updated for new location of 3278 m_vectorLength. 3279 (KJS::JSArray::increaseVectorLength): Ditto. 3280 (KJS::JSArray::setLength): Added code to lower m_fastAccessCutoff 3281 when setLength makes the array smaller. 3282 (KJS::JSArray::mark): Updated for new location of m_vectorLength. 3283 (KJS::JSArray::sort): Ditto. Set m_fastAccessCutoff after moving 3284 all the holes to the end of the array. 3285 (KJS::JSArray::compactForSorting): Ditto. 3286 (KJS::JSArray::checkConsistency): Added consistency checks fro 3287 m_fastAccessCutoff and updated for the new location of m_vectorLength. 3288 3289 * kjs/JSArray.h: Added declarations for slow case functions. 3290 Replaced m_vectorLength with m_fastAccessCutoff. 3291 3292 2008-06-28 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 3293 3294 Reviewed by Sam. 3295 3296 When executing a native call, check for an exception before writing the 3297 return value. 3298 3299 * VM/Machine.cpp: 3300 (KJS::Machine::privateExecute): 3301 3302 2008-06-28 Mark Rowe <mrowe (a] apple.com> 3303 3304 Build fix. Flag headers as private or public as is appropriate. 3305 These settings were accidentally removed during some project file cleanup. 3306 3307 * JavaScriptCore.xcodeproj/project.pbxproj: 3308 3309 2008-06-28 Sam Weinig <sam (a] webkit.org> 3310 3311 Rubber-stamped by Darin Adler. 3312 3313 Splits RegExpConstructor and RegExpPrototype out of RegExpObject.h/cpp 3314 3315 * DerivedSources.make: 3316 * GNUmakefile.am: 3317 * JavaScriptCore.pri: 3318 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 3319 * JavaScriptCore.xcodeproj/project.pbxproj: 3320 * JavaScriptCoreSources.bkl: 3321 * VM/Machine.cpp: 3322 * kjs/AllInOneFile.cpp: 3323 * kjs/JSGlobalObject.cpp: 3324 * kjs/RegExpConstructor.cpp: Copied from kjs/RegExpObject.cpp. 3325 * kjs/RegExpConstructor.h: Copied from kjs/RegExpObject.h. 3326 * kjs/RegExpObject.cpp: 3327 * kjs/RegExpObject.h: 3328 * kjs/RegExpPrototype.cpp: Copied from kjs/RegExpObject.cpp. 3329 * kjs/RegExpPrototype.h: Copied from kjs/RegExpObject.h. 3330 * kjs/StringPrototype.cpp: 3331 * kjs/internal.cpp: 3332 3333 2008-06-28 Sam Weinig <sam (a] webkit.org> 3334 3335 Fix non-AllInOne builds. 3336 3337 * kjs/StringConstructor.cpp: 3338 3339 2008-06-28 Sam Weinig <sam (a] webkit.org> 3340 3341 Rubber-stamped by Darin Adler. 3342 3343 Rename string_object.h/cpp to StringObject.h/cpp and split out StringObjectThatMasqueradesAsUndefined, 3344 StringConstructor and StringPrototype. 3345 3346 * DerivedSources.make: 3347 * GNUmakefile.am: 3348 * JavaScriptCore.pri: 3349 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 3350 * JavaScriptCore.xcodeproj/project.pbxproj: 3351 * JavaScriptCoreSources.bkl: 3352 * kjs/AllInOneFile.cpp: 3353 * kjs/JSGlobalObject.cpp: 3354 * kjs/StringConstructor.cpp: Copied from JavaScriptCore/kjs/string_object.cpp. 3355 * kjs/StringConstructor.h: Copied from JavaScriptCore/kjs/string_object.h. 3356 * kjs/StringObject.cpp: Copied from JavaScriptCore/kjs/string_object.cpp. 3357 * kjs/StringObject.h: Copied from JavaScriptCore/kjs/string_object.h. 3358 * kjs/StringObjectThatMasqueradesAsUndefined.h: Copied from JavaScriptCore/kjs/string_object.h. 3359 * kjs/StringPrototype.cpp: Copied from JavaScriptCore/kjs/string_object.cpp. 3360 * kjs/StringPrototype.h: Copied from JavaScriptCore/kjs/string_object.h. 3361 * kjs/internal.cpp: 3362 * kjs/string_object.cpp: Removed. 3363 * kjs/string_object.h: Removed. 3364 3365 2008-06-28 Jan Michael Alonzo <jmalonzo (a] webkit.org> 3366 3367 Gtk build fix: JSVariableObject is now part of AllInOne 3368 3369 * GNUmakefile.am: 3370 3371 2008-06-28 Darin Adler <darin (a] apple.com> 3372 3373 Reviewed by Oliver. 3374 3375 - https://bugs.webkit.org/show_bug.cgi?id=19801 3376 add a feature so we can tell what regular expressions are taking time 3377 3378 * pcre/pcre_compile.cpp: 3379 (jsRegExpCompile): Compile in the string if REGEXP_HISTOGRAM is on. 3380 3381 * pcre/pcre_exec.cpp: 3382 (jsRegExpExecute): Add hook to time execution. 3383 (Histogram::~Histogram): Print a sorted list of what took time. 3384 (Histogram::add): Accumulate records of what took time. 3385 (HistogramTimeLogger::~HistogramTimeLogger): Hook that calls 3386 Histogram::add at the right moment and creates the global histogram 3387 object. 3388 3389 * pcre/pcre_internal.h: Define REGEXP_HISTOGRAM. 3390 3391 * pcre/pcre_tables.cpp: Added missing include of "config.h". Not needed 3392 any more, but an omissions an earlier version of this patch detected. 3393 * pcre/pcre_ucp_searchfuncs.cpp: Ditto. 3394 * pcre/pcre_xclass.cpp: Ditto. 3395 3396 2008-06-28 Sam Weinig <sam (a] webkit.org> 3397 3398 Try and fix the Windows build again. 3399 3400 * kjs/RegExpObject.cpp: 3401 * kjs/date_object.cpp: 3402 * kjs/error_object.cpp: 3403 3404 2008-06-28 Sam Weinig <sam (a] webkit.org> 3405 3406 Rubber-stamped by Darin Adler. 3407 3408 Remove unused StringConstructorFunction class. 3409 3410 * kjs/string_object.h: 3411 3412 2008-06-28 Sam Weinig <sam (a] webkit.org> 3413 3414 Fix windows build. 3415 3416 * kjs/ArrayPrototype.cpp: 3417 * kjs/BooleanPrototype.cpp: 3418 * kjs/BooleanPrototype.h: 3419 * kjs/FunctionPrototype.cpp: 3420 * kjs/JSImmediate.cpp: 3421 * kjs/JSObject.cpp: 3422 * kjs/MathObject.cpp: 3423 * kjs/NumberPrototype.cpp: 3424 * kjs/NumberPrototype.h: 3425 * kjs/ObjectConstructor.cpp: 3426 * kjs/RegExpObject.h: 3427 * kjs/error_object.h: 3428 * kjs/string_object.cpp: 3429 3430 2008-06-28 Sam Weinig <sam (a] webkit.org> 3431 3432 Rubber-stamped by Oliver Hunt. 3433 3434 Splits FunctionConstructor out of FunctionPrototype.h/cpp 3435 Splits NumberConstructor and NumberPrototype out of NumberObject.h/cpp 3436 Rename object_object.h/cpp to ObjectPrototype.h/cpp and split out ObjectConstructor. 3437 3438 * API/JSCallbackConstructor.cpp: 3439 * API/JSClassRef.cpp: 3440 * API/JSObjectRef.cpp: 3441 * DerivedSources.make: 3442 * GNUmakefile.am: 3443 * JavaScriptCore.pri: 3444 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 3445 * JavaScriptCore.xcodeproj/project.pbxproj: 3446 * JavaScriptCoreSources.bkl: 3447 * VM/Machine.cpp: 3448 * kjs/AllInOneFile.cpp: 3449 * kjs/ArrayConstructor.cpp: 3450 * kjs/ArrayConstructor.h: 3451 * kjs/FunctionConstructor.cpp: Copied from JavaScriptCore/kjs/FunctionPrototype.cpp. 3452 * kjs/FunctionConstructor.h: Copied from JavaScriptCore/kjs/FunctionPrototype.h. 3453 * kjs/FunctionPrototype.cpp: 3454 * kjs/FunctionPrototype.h: 3455 * kjs/JSFunction.cpp: 3456 * kjs/JSGlobalObject.cpp: 3457 * kjs/JSImmediate.cpp: 3458 * kjs/MathObject.h: 3459 * kjs/NumberConstructor.cpp: Copied from JavaScriptCore/kjs/NumberObject.cpp. 3460 * kjs/NumberConstructor.h: Copied from JavaScriptCore/kjs/NumberObject.h. 3461 * kjs/NumberObject.cpp: 3462 * kjs/NumberObject.h: 3463 * kjs/NumberPrototype.cpp: Copied from JavaScriptCore/kjs/NumberObject.cpp. 3464 * kjs/NumberPrototype.h: Copied from JavaScriptCore/kjs/NumberObject.h. 3465 * kjs/ObjectConstructor.cpp: Copied from JavaScriptCore/kjs/object_object.cpp. 3466 * kjs/ObjectConstructor.h: Copied from JavaScriptCore/kjs/object_object.h. 3467 * kjs/ObjectPrototype.cpp: Copied from JavaScriptCore/kjs/object_object.cpp. 3468 * kjs/ObjectPrototype.h: Copied from JavaScriptCore/kjs/object_object.h. 3469 * kjs/RegExpObject.h: 3470 * kjs/Shell.cpp: 3471 * kjs/error_object.h: 3472 * kjs/internal.cpp: 3473 * kjs/nodes.cpp: 3474 * kjs/object_object.cpp: Removed. 3475 * kjs/object_object.h: Removed. 3476 * kjs/string_object.h: 3477 3478 2008-06-28 Darin Adler <darin (a] apple.com> 3479 3480 Reviewed by Oliver. 3481 3482 - fix https://bugs.webkit.org/show_bug.cgi?id=19796 3483 optimize expressions with ignored results (especially post-increment) 3484 3485 SunSpider says 0.9% faster. 3486 3487 * VM/CodeGenerator.h: 3488 (KJS::CodeGenerator::tempDestination): Create a new temporary for 3489 ignoredResult() too, just as we would for 0. 3490 (KJS::CodeGenerator::finalDestination): Use the temporary if the 3491 register passed in is ignoredResult() too, just as we would for 0. 3492 (KJS::CodeGenerator::destinationForAssignResult): Return 0 if the 3493 passed in register is ignoredResult(), just as we would for 0. 3494 (KJS::CodeGenerator::moveToDestinationIfNeeded): Return 0 if the 3495 register passed in is ignoredResult(). What matters is that we 3496 don't want to emit a move. The return value won't be looked at. 3497 (KJS::CodeGenerator::emitNode): Allow ignoredResult() and pass it 3498 through to the node's emitCode function. 3499 3500 * VM/RegisterID.h: 3501 (KJS::ignoredResult): Added. Special value to indicate the result of 3502 a node will be ignored and need not be put in any register. 3503 3504 * kjs/nodes.cpp: 3505 (KJS::NullNode::emitCode): Do nothing if dst == ignoredResult(). 3506 (KJS::BooleanNode::emitCode): Ditto. 3507 (KJS::NumberNode::emitCode): Ditto. 3508 (KJS::StringNode::emitCode): Ditto. 3509 (KJS::RegExpNode::emitCode): Ditto. 3510 (KJS::ThisNode::emitCode): Ditto. 3511 (KJS::ResolveNode::emitCode): Do nothing if dst == ignoredResult() and 3512 the identifier resolves to a local variable. 3513 (KJS::ObjectLiteralNode::emitCode): Do nothing if dst == ignoredResult() 3514 and the object is empty. 3515 (KJS::PostIncResolveNode::emitCode): If dst == ignoredResult(), then do 3516 nothing for the local constant case, and do a pre-increment in all the 3517 other cases. 3518 (KJS::PostDecResolveNode::emitCode): Ditto. 3519 (KJS::PostIncBracketNode::emitCode): Ditto. 3520 (KJS::PostDecBracketNode::emitCode): Ditto. 3521 (KJS::PostIncDotNode::emitCode): Ditto. 3522 (KJS::PostDecDotNode::emitCode): Ditto. 3523 (KJS::DeleteValueNode::emitCode): Pass ignoredResult() when evaluating 3524 the expression. 3525 (KJS::VoidNode::emitCode): Ditto. 3526 (KJS::TypeOfResolveNode::emitCode): If dst == ignoredResult(), do nothing 3527 if the identifier resolves to a local variable, and don't bother generating 3528 a typeof opcode in the other case. 3529 (KJS::TypeOfValueNode::emitCode): Ditto. 3530 (KJS::PreIncResolveNode::emitCode): Do nothing if dst == ignoredResult() and 3531 the identifier resolves to a local constant. 3532 (KJS::PreDecResolveNode::emitCode): Ditto. 3533 (KJS::AssignResolveNode::emitCode): Turn ignoredResult() into 0 in a couple 3534 places, because we need to put the result into a register so we can assign 3535 it. At other sites this is taken care of by functions like finalDestination. 3536 (KJS::CommaNode::emitCode): Pass ignoredResult() when evaluating the first 3537 expression. 3538 (KJS::ForNode::emitCode): Pass ignoredResult() when evaluating the first and 3539 third expressions. 3540 (KJS::ForInNode::emitCode): Pass ignoredResult() when evaluating the first 3541 expression. 3542 3543 2008-06-28 Darin Adler <darin (a] apple.com> 3544 3545 Reviewed by Oliver. 3546 3547 - https://bugs.webkit.org/show_bug.cgi?id=19787 3548 create most arrays from values in registers rather than with multiple put operations 3549 3550 SunSpider says 0.8% faster. 3551 3552 * VM/CodeBlock.cpp: 3553 (KJS::CodeBlock::dump): Added argv and argc parameters to new_array. 3554 * VM/Machine.cpp: 3555 (KJS::Machine::privateExecute): Ditto. 3556 3557 * VM/CodeGenerator.cpp: 3558 (KJS::CodeGenerator::emitNewArray): Added. 3559 * VM/CodeGenerator.h: Added ElementNode* argument to emitNewArray. 3560 3561 * kjs/nodes.cpp: 3562 (KJS::ArrayNode::emitCode): Pass the ElementNode to emitNewArray so it can be 3563 initialized with as many elements as possible. If the array doesn't have any 3564 holes in it, that's all that's needed. If there are holes, then emit some separate 3565 put operations for the other values in the array and for the length as needed. 3566 3567 * kjs/nodes.h: Added some accessors to ElementNode so the code generator can 3568 iterate through elements and generate code to evaluate them. Now ArrayNode does 3569 not need to be a friend. Also took out some unused PlacementNewAdoptType 3570 constructors. 3571 3572 2008-06-28 Darin Adler <darin (a] apple.com> 3573 3574 Reviewed by Oliver. 3575 3576 * kjs/nodes.h: Remove obsolete PlacementNewAdopt constructors. 3577 We no longer mutate the AST in place. 3578 3579 2008-06-28 Jan Michael Alonzo <jmalonzo (a] webkit.org> 3580 3581 Reviewed by Oliver Hunt. 3582 3583 Build fix 3584 3585 * VM/Machine.cpp: include stdio.h for printf 3586 3587 2008-06-27 Sam Weinig <sam (a] webkit.org> 3588 3589 Reviewed by Oliver Hunt. 3590 3591 Fix platforms that don't use AllInOne.cpp 3592 3593 * kjs/BooleanConstructor.h: 3594 * kjs/BooleanPrototype.h: 3595 * kjs/FunctionPrototype.cpp: 3596 3597 2008-06-27 Sam Weinig <sam (a] webkit.org> 3598 3599 Rubber-stamped by Oliver Hunt. 3600 3601 Splits ArrayConstructor out of ArrayPrototype.h/cpp 3602 Splits BooleanConstructor and BooleanPrototype out of BooleanObject.h/cpp 3603 3604 * GNUmakefile.am: 3605 * JavaScriptCore.pri: 3606 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 3607 * JavaScriptCore.xcodeproj/project.pbxproj: 3608 * JavaScriptCoreSources.bkl: 3609 * VM/Machine.cpp: 3610 * kjs/AllInOneFile.cpp: 3611 * kjs/ArrayConstructor.cpp: Copied from kjs/ArrayPrototype.cpp. 3612 * kjs/ArrayConstructor.h: Copied from kjs/ArrayPrototype.h. 3613 * kjs/ArrayPrototype.cpp: 3614 * kjs/ArrayPrototype.h: 3615 * kjs/BooleanConstructor.cpp: Copied from kjs/BooleanObject.cpp. 3616 * kjs/BooleanConstructor.h: Copied from kjs/BooleanObject.h. 3617 * kjs/BooleanObject.cpp: 3618 * kjs/BooleanObject.h: 3619 * kjs/BooleanPrototype.cpp: Copied from kjs/BooleanObject.cpp. 3620 * kjs/BooleanPrototype.h: Copied from kjs/BooleanObject.h. 3621 * kjs/CommonIdentifiers.h: 3622 * kjs/FunctionPrototype.cpp: 3623 * kjs/JSArray.cpp: 3624 * kjs/JSGlobalObject.cpp: 3625 * kjs/JSImmediate.cpp: 3626 * kjs/Shell.cpp: 3627 * kjs/internal.cpp: 3628 * kjs/nodes.cpp: 3629 * kjs/string_object.cpp: 3630 3631 2008-06-27 Oliver Hunt <oliver (a] apple.com> 3632 3633 Reviewed by Sam. 3634 3635 Bug 18626: SQUIRRELFISH: support the "slow script" dialog <https://bugs.webkit.org/show_bug.cgi?id=18626> 3636 <rdar://problem/5973931> Slow script dialog needs to be reimplemented for squirrelfish 3637 3638 Adds support for the slow script dialog in squirrelfish. This requires the addition 3639 of three new op codes, op_loop, op_loop_if_true, and op_loop_if_less which have the 3640 same behaviour as their simple jump equivalents but have an additional time out check. 3641 3642 Additional assertions were added to other jump instructions to prevent accidentally 3643 creating loops with jump types that do not support time out checks. 3644 3645 Sunspider does not report a regression, however this appears very sensitive to code 3646 layout and hardware, so i would expect up to a 1% regression on other systems. 3647 3648 Part of this required moving the old timeout logic from JSGlobalObject and into Machine 3649 which is the cause of a number of the larger diff blocks. 3650 3651 * JavaScriptCore.exp: 3652 * VM/CodeBlock.cpp: 3653 (KJS::CodeBlock::dump): 3654 * VM/CodeGenerator.cpp: 3655 (KJS::CodeGenerator::emitJumpIfTrue): 3656 (KJS::CodeGenerator::emitJumpScopes): 3657 * VM/ExceptionHelpers.cpp: 3658 (KJS::InterruptedExecutionError::isWatchdogException): 3659 (KJS::createInterruptedExecutionException): 3660 * VM/ExceptionHelpers.h: 3661 * VM/LabelID.h: 3662 * VM/Machine.cpp: 3663 (KJS::Machine::Machine): 3664 (KJS::Machine::throwException): 3665 (KJS::Machine::resetTimeoutCheck): 3666 (KJS::getCurrentTime): 3667 (KJS::Machine::checkTimeout): 3668 (KJS::Machine::privateExecute): 3669 * VM/Machine.h: 3670 (KJS::Machine::setTimeoutTime): 3671 (KJS::Machine::startTimeoutCheck): 3672 (KJS::Machine::stopTimeoutCheck): 3673 (KJS::Machine::initTimeout): 3674 * VM/Opcode.cpp: 3675 (KJS::): 3676 * VM/Opcode.h: 3677 * kjs/JSGlobalObject.cpp: 3678 (KJS::JSGlobalObject::init): 3679 (KJS::JSGlobalObject::setTimeoutTime): 3680 (KJS::JSGlobalObject::startTimeoutCheck): 3681 * kjs/JSGlobalObject.h: 3682 * kjs/JSObject.h: 3683 * kjs/interpreter.cpp: 3684 (KJS::Interpreter::evaluate): 3685 3686 2008-06-27 Jan Michael Alonzo <jmalonzo (a] webkit.org> 3687 3688 Gtk and Qt build fix: Remove RegisterFileStack from the build 3689 scripts. 3690 3691 * GNUmakefile.am: 3692 * JavaScriptCore.pri: 3693 3694 2008-06-27 Adele Peterson <adele (a] apple.com> 3695 3696 Reviewed by Geoff. 3697 3698 Build fixes. 3699 3700 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 3701 * VM/RegisterFile.h: 3702 (KJS::RegisterFile::RegisterFile): 3703 * kjs/JSGlobalObject.cpp: 3704 * kjs/collector.cpp: 3705 3706 2008-06-27 Geoffrey Garen <ggaren (a] apple.com> 3707 3708 Reviewed by Oliver Hunt. 3709 3710 One RegisterFile to rule them all! 3711 3712 SunSpider reports a 0.2% speedup. 3713 3714 This patch removes the RegisterFileStack abstraction and replaces it with 3715 a single register file that 3716 3717 (a) allocates a fixed storage area, including a fixed area for global 3718 vars, so that no operation may cause the register file to reallocate 3719 3720 and 3721 3722 (b) swaps between global storage areas when executing code in different 3723 global objects. 3724 3725 This patch also changes the layout of the register file so that all call 3726 frames, including call frames for global code, get a header. This is 3727 required to support re-entrant global code. It also just makes things simpler. 3728 3729 * VM/CodeGenerator.cpp: 3730 (KJS::CodeGenerator::addGlobalVar): New function. Differs from addVar in 3731 that 3732 3733 (a) global vars don't contribute to a CodeBlock's numLocals count, since 3734 global storage is fixed and allocated at startup 3735 3736 and 3737 3738 (b) references to global vars get shifted to elide intermediate stack 3739 between "r" and the global storage area. 3740 3741 * VM/Machine.cpp: 3742 (KJS::Machine::dumpRegisters): Updated this function to match the new 3743 register file layout, and added the ability to dump exact identifiers 3744 for the different parts of a call frame. 3745 3746 (KJS::Machine::unwindCallFrame): Updated this function to match the new 3747 register file layout. 3748 3749 (KJS::Machine::execute): Updated this function to initialize a call frame 3750 header for global code, and to swap global storage areas when switching 3751 to execution in a new global object. 3752 3753 (KJS::Machine::privateExecute): Got rid of "safeForReentry" and re-reading 3754 of registerBase because the register file is always safe for reentry now, 3755 and registerBase never changes. 3756 3757 * VM/Machine.h: Moved the call frame header enum from Machine to RegisterFile, 3758 to resolve a header dependency problem (a good sign that the enum belonged 3759 in RegisterFile all along!) 3760 3761 * VM/RegisterFile.cpp: 3762 * VM/RegisterFile.h: Changed RegisterFile to mmap a fixed size register 3763 area. This allows us to avoid re-allocting the register file later on. 3764 Instead, we rely on the OS to allocate physical pages to the register 3765 file as necessary. 3766 3767 * VM/RegisterFileStack.cpp: Removed. Tada! 3768 * VM/RegisterFileStack.h: Removed. Tada! 3769 3770 * kjs/DebuggerCallFrame.cpp: Updated this class to match the new 3771 register file layout, greatly simplifying it in the process. 3772 3773 * kjs/JSActivation.h: 3774 * kjs/JSActivation.cpp: Moved some of this logic up to JSVariableObject, 3775 since the global object now needs to be able to tear off its registers 3776 just like the activation object. 3777 3778 * kjs/JSFunction.cpp: No need to fiddle with the register file anymore. 3779 3780 * kjs/JSGlobalObject.h: 3781 * kjs/JSGlobalObject.cpp: Updated JSGlobalObject to support moving its 3782 global storage area into and out of the register file. 3783 3784 * kjs/PropertySlot.cpp: No need to fiddle with the register file anymore. 3785 3786 * kjs/collector.cpp: Renamed markStackObjectConservatively to 3787 markConservatively, since we don't just mark stack objects this way. 3788 3789 Also, added code to mark the machine's register file. 3790 3791 * kjs/config.h: Moved some platforms #defines from here... 3792 * wtf/Platform.h: ...to here, to support mmap/VirtualAlloc detection 3793 in RegisterFile.h. 3794 3795 2008-06-26 Mark Rowe <mrowe (a] apple.com> 3796 3797 Speculative fix for the Windows build. 3798 3799 * kjs/JSImmediate.cpp: 3800 3801 2008-06-26 Mark Rowe <mrowe (a] apple.com> 3802 3803 Reviewed by Darin Adler and Geoff Garen. 3804 3805 Fix the malloc zone introspection functions so that malloc_zone_statistics does not give 3806 bogus output in an application that uses JavaScriptCore. 3807 3808 * kjs/CollectorHeapIntrospector.cpp: 3809 (KJS::CollectorHeapIntrospector::statistics): Return statistics about memory allocated by the collector. 3810 * kjs/CollectorHeapIntrospector.h: 3811 * wtf/FastMalloc.cpp: Zero out the statistics. FastMalloc doesn't track this information at present. 3812 Returning zero for all values is preferable to returning bogus data. 3813 3814 2008-06-26 Darin Adler <darin (a] apple.com> 3815 3816 Reviewed by Geoff. 3817 3818 - https://bugs.webkit.org/show_bug.cgi?id=19721 3819 speed up JavaScriptCore by not wrapping strings in objects just 3820 to call functions on them 3821 3822 - optimize UString append and the replace function a bit 3823 3824 SunSpider says 1.8% faster. 3825 3826 * JavaScriptCore.exp: Updated. 3827 3828 * VM/JSPropertyNameIterator.cpp: Added include of JSString.h, now needed 3829 because jsString returns a JSString*. 3830 3831 * VM/Machine.cpp: 3832 (KJS::Machine::privateExecute): Removed the toObject call from native 3833 function calls. Also removed code to put the this value into a register. 3834 3835 * kjs/BooleanObject.cpp: 3836 (KJS::booleanProtoFuncToString): Rewrite to handle false and true 3837 separately. 3838 3839 * kjs/FunctionPrototype.cpp: 3840 (KJS::constructFunction): Use single-character append rather than building 3841 a string for each character. 3842 * kjs/JSFunction.cpp: 3843 (KJS::globalFuncUnescape): Ditto. 3844 3845 * kjs/JSImmediate.cpp: 3846 (KJS::JSImmediate::prototype): Added. Gets the appropriate prototype for 3847 use with an immediate value. To be used instead of toObject when doing a 3848 get on an immediate value. 3849 * kjs/JSImmediate.h: Added prototype. 3850 3851 * kjs/JSObject.cpp: 3852 (KJS::JSObject::toString): Tweaked formatting. 3853 3854 * kjs/JSObject.h: 3855 (KJS::JSValue::get): Use prototype instead of toObject to avoid creating 3856 an object wrapper just to search for properties. This also saves an 3857 unnecessary hash table lookup since the object wrappers themselves don't 3858 have any properties. 3859 3860 * kjs/JSString.h: Added toThisString and toThisJSString. 3861 3862 * kjs/JSValue.cpp: 3863 (KJS::JSCell::toThisString): Added. 3864 (KJS::JSCell::toThisJSString): Added. 3865 (KJS::JSCell::getJSNumber): Added. 3866 (KJS::jsString): Changed return type to JSString*. 3867 (KJS::jsOwnedString): Ditto. 3868 3869 * kjs/JSValue.h: 3870 (KJS::JSValue::toThisString): Added. 3871 (KJS::JSValue::toThisJSString): Added. 3872 (KJS::JSValue::getJSNumber): Added. 3873 3874 * kjs/NumberObject.cpp: 3875 (KJS::NumberObject::getJSNumber): Added. 3876 (KJS::integer_part_noexp): Append C string directly rather than first 3877 turning it into a UString. 3878 (KJS::numberProtoFuncToString): Use getJSNumber to check if the value 3879 is a number rather than isObject(&NumberObject::info). This works for 3880 immediate numbers, number cells, and NumberObject instances. 3881 (KJS::numberProtoFuncToLocaleString): Ditto. 3882 (KJS::numberProtoFuncValueOf): Ditto. 3883 (KJS::numberProtoFuncToFixed): Ditto. 3884 (KJS::numberProtoFuncToExponential): Ditto. 3885 (KJS::numberProtoFuncToPrecision): Ditto. 3886 * kjs/NumberObject.h: Added getJSNumber. 3887 3888 * kjs/PropertySlot.cpp: Tweaked comment. 3889 3890 * kjs/internal.cpp: 3891 (KJS::JSString::toThisString): Added. 3892 (KJS::JSString::toThisJSString): Added. 3893 (KJS::JSString::getOwnPropertySlot): Changed code that searches the 3894 prototype chain to start with the string prototype and not create a 3895 string object. 3896 (KJS::JSNumberCell::toThisString): Added. 3897 (KJS::JSNumberCell::getJSNumber): Added. 3898 3899 * kjs/lookup.cpp: 3900 (KJS::staticFunctionGetter): Moved here, because there's no point in 3901 having a function that's only used for a function pointer be inline. 3902 (KJS::setUpStaticFunctionSlot): New function for getStaticFunctionSlot. 3903 3904 * kjs/lookup.h: 3905 (KJS::staticValueGetter): Don't mark this inline. It doesn't make sense 3906 to have a function that's only used for a function pointer be inline. 3907 (KJS::getStaticFunctionSlot): Changed to get properties from the parent 3908 first before doing any handling of functions. This is the fastest way 3909 to return the function once the initial setup is done. 3910 3911 * kjs/string_object.cpp: 3912 (KJS::StringObject::getPropertyNames): Call value() instead of getString(), 3913 avoiding an unnecessary virtual function call (the call to the type() 3914 function in the implementation of the isString() function). 3915 (KJS::StringObject::toString): Added. 3916 (KJS::StringObject::toThisString): Added. 3917 (KJS::StringObject::toThisJSString): Added. 3918 (KJS::substituteBackreferences): Rewrote to use a appending algorithm 3919 instead of a the old one that tried to replace in place. 3920 (KJS::stringProtoFuncReplace): Merged this function and the replace function. 3921 Replaced the hand-rolled dynamic arrays for source ranges and replacements 3922 with Vector. 3923 (KJS::stringProtoFuncToString): Handle JSString as well as StringObject. 3924 Removed the separate valueOf implementation, since it can just share this. 3925 (KJS::stringProtoFuncCharAt): Use toThisString, which handles JSString as 3926 well as StringObject, and is slightly more efficient than the old code too. 3927 (KJS::stringProtoFuncCharCodeAt): Ditto. 3928 (KJS::stringProtoFuncConcat): Ditto. 3929 (KJS::stringProtoFuncIndexOf): Ditto. 3930 (KJS::stringProtoFuncLastIndexOf): Ditto. 3931 (KJS::stringProtoFuncMatch): Ditto. 3932 (KJS::stringProtoFuncSearch): Ditto. 3933 (KJS::stringProtoFuncSlice): Ditto. 3934 (KJS::stringProtoFuncSplit): Ditto. 3935 (KJS::stringProtoFuncSubstr): Ditto. 3936 (KJS::stringProtoFuncSubstring): Ditto. 3937 (KJS::stringProtoFuncToLowerCase): Use toThisJSString. 3938 (KJS::stringProtoFuncToUpperCase): Ditto. 3939 (KJS::stringProtoFuncToLocaleLowerCase): Ditto. 3940 (KJS::stringProtoFuncToLocaleUpperCase): Ditto. 3941 (KJS::stringProtoFuncLocaleCompare): Ditto. 3942 (KJS::stringProtoFuncBig): Use toThisString. 3943 (KJS::stringProtoFuncSmall): Ditto. 3944 (KJS::stringProtoFuncBlink): Ditto. 3945 (KJS::stringProtoFuncBold): Ditto. 3946 (KJS::stringProtoFuncFixed): Ditto. 3947 (KJS::stringProtoFuncItalics): Ditto. 3948 (KJS::stringProtoFuncStrike): Ditto. 3949 (KJS::stringProtoFuncSub): Ditto. 3950 (KJS::stringProtoFuncSup): Ditto. 3951 (KJS::stringProtoFuncFontcolor): Ditto. 3952 (KJS::stringProtoFuncFontsize): Ditto. 3953 (KJS::stringProtoFuncAnchor): Ditto. 3954 (KJS::stringProtoFuncLink): Ditto. 3955 3956 * kjs/string_object.h: Added toString, toThisString, and toThisJSString. 3957 3958 * kjs/ustring.cpp: 3959 (KJS::UString::append): Added a version that takes a character pointer and 3960 size, so we don't have to create a UString just to append to another UString. 3961 * kjs/ustring.h: 3962 3963 2008-06-26 Alexey Proskuryakov <ap (a] webkit.org> 3964 3965 Reviewed by Maciej. 3966 3967 Make JSGlobalData per-thread. 3968 3969 No change on SunSpider total. 3970 3971 * wtf/ThreadSpecific.h: Re-enabled the actual implementation. 3972 3973 * kjs/JSGlobalObject.cpp: 3974 (KJS::JSGlobalObject::~JSGlobalObject): Re-added a JSLock-related assertion. We'll probably 3975 want to preserve these somehow to keep legacy behavior in working condition. 3976 (KJS::JSGlobalObject::init): Initialize globalData pointer earlier, so that it is ready 3977 when updating JSGlobalObject linked list. 3978 3979 * kjs/JSGlobalObject.h: (KJS::JSGlobalObject::head): Changed head() to be non-static, and 3980 to use JSGlobalData associated with the current object. 3981 3982 * kjs/InitializeThreading.cpp: (KJS::initializeThreadingOnce): Removed a no longer needed 3983 Heap::registerAsMainThread() call. 3984 3985 * kjs/JSGlobalData.h: Removed a lying lie comment - parserObjectExtraRefCounts is not 3986 transient, and while newParserObjects may conceptually be such, there is still some node 3987 manipulation going on outside Parser::parse which touches it. 3988 3989 * kjs/JSGlobalData.cpp: 3990 (KJS::JSGlobalData::~JSGlobalData): Delete recently added members. 3991 (KJS::JSGlobalData::sharedInstance): Actually use a separate instance. 3992 3993 * kjs/collector.cpp: 3994 (KJS::Heap::Heap): 3995 (KJS::Heap::~Heap): Added a destructor, which unconditionally deletes everything. 3996 (KJS::Heap::sweep): Removed code related to "collect on main thread only" logic. 3997 (KJS::Heap::collect): Ditto. 3998 (KJS::Heap::globalObjectCount): Explicitly use per-thread instance of JSGlobalObject linked 3999 list now that JSGlobalObject::head() is not static. Curently, WebCoreStatistics methods only 4000 work with the main thread currently anyway. 4001 (KJS::Heap::protectedGlobalObjectCount): Ditto. 4002 4003 * kjs/collector.h: Removed code related to "collect on main thread only" logic. 4004 4005 * JavaScriptCore.exp: Removed Heap::collectOnMainThreadOnly. 4006 4007 2008-06-26 Alexey Proskuryakov <ap (a] webkit.org> 4008 4009 Reviewed by Darin. 4010 4011 https://bugs.webkit.org/show_bug.cgi?id=19767 4012 REGRESSION: Crash in sort() when visiting http://www.onnyturf.com/subway/ 4013 4014 * kjs/JSArray.cpp: (KJS::AVLTreeAbstractorForArrayCompare::set_balance_factor): 4015 Made changing balance factor from -1 to +1 work correctly. 4016 4017 * wtf/AVLTree.h: (KJS::AVLTreeDefaultBSet::operator[]): Added an assertion that catches 4018 this slightly earlier. 4019 4020 2008-06-25 Timothy Hatcher <timothy (a] apple.com> 4021 4022 Fixes an ASSERT in the profiler when starting multiple profiles 4023 with the same name inside the same function/program. 4024 4025 Reviewed by Kevin McCullough. 4026 4027 * profiler/Profile.cpp: 4028 (KJS::Profile::Profile): Initialize m_stoppedCallDepth to zero. 4029 (KJS::Profile::stopProfiling): Set the current node to the parent, 4030 because we are in a call that will not get a didExecute call. 4031 (KJS::Profile::removeProfile): Increment m_stoppedCallDepth to 4032 account for didExecute not being called for profile. 4033 (KJS::Profile::willExecute): Increment m_stoppedCallDepth if stopped. 4034 (KJS::Profile::didExecute): Decrement m_stoppedCallDepth if stopped and 4035 greater than zero, and return early. 4036 * profiler/Profile.h: Added stoppedProfiling(). 4037 * profiler/Profiler.cpp: 4038 (KJS::Profiler::findProfile): Removed. 4039 (KJS::Profiler::startProfiling): Don't return early for stopped profiles. 4040 (KJS::Profiler::stopProfiling): Skipp stopped profiles. 4041 (KJS::Profiler::didFinishAllExecution): Code clean-up. 4042 * profiler/Profiler.h: Removed findProfile. 4043 4044 2008-06-25 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 4045 4046 Reviewed by Alexey Proskuryakov. 4047 4048 Attempt to fix Windows debug build. The compiler gives a warning when 4049 Structured Exception Handling and destructors are used in the same 4050 function. Using manual locking and unlocking instead of constructors 4051 and destructors should fix the warning. 4052 4053 * kjs/Shell.cpp: 4054 (main): 4055 4056 2008-06-25 Alexey Proskuryakov <ap (a] webkit.org> 4057 4058 Forgot to address a review comment about better names for tracked objects, doing it now. 4059 4060 * kjs/JSGlobalData.cpp: 4061 (KJS::JSGlobalData::JSGlobalData): 4062 * kjs/JSGlobalData.h: 4063 * kjs/nodes.cpp: 4064 (KJS::ParserRefCounted::ParserRefCounted): 4065 (KJS::ParserRefCounted::ref): 4066 (KJS::ParserRefCounted::deref): 4067 (KJS::ParserRefCounted::hasOneRef): 4068 (KJS::ParserRefCounted::deleteNewObjects): 4069 4070 2008-06-25 Alexey Proskuryakov <ap (a] webkit.org> 4071 4072 Reviewed by Geoff. 4073 4074 Remove more threadInstance() calls. 4075 4076 * kjs/JSFunction.cpp: 4077 (KJS::JSFunction::getParameterName): 4078 (KJS::IndexToNameMap::unMap): 4079 (KJS::Arguments::deleteProperty): 4080 * kjs/JSFunction.h: 4081 Access nullIdentifier without going to thread specific storage. 4082 4083 * JavaScriptCore.exp: 4084 * kjs/JSGlobalData.cpp: 4085 (KJS::JSGlobalData::JSGlobalData): 4086 * kjs/JSGlobalData.h: 4087 * kjs/Parser.cpp: 4088 (KJS::Parser::parse): 4089 * kjs/Parser.h: 4090 (KJS::ParserRefCountedData::ParserRefCountedData): 4091 (KJS::Parser::parse): 4092 * kjs/grammar.y: 4093 * kjs/nodes.cpp: 4094 (KJS::ParserRefCounted::ParserRefCounted): 4095 (KJS::ParserRefCounted::ref): 4096 (KJS::ParserRefCounted::deref): 4097 (KJS::ParserRefCounted::hasOneRef): 4098 (KJS::ParserRefCounted::deleteNewObjects): 4099 (KJS::Node::Node): 4100 (KJS::StatementNode::StatementNode): 4101 (KJS::BreakpointCheckStatement::BreakpointCheckStatement): 4102 (KJS::ConstDeclNode::ConstDeclNode): 4103 (KJS::BlockNode::BlockNode): 4104 (KJS::ForInNode::ForInNode): 4105 (KJS::ScopeNode::ScopeNode): 4106 (KJS::ProgramNode::ProgramNode): 4107 (KJS::ProgramNode::create): 4108 (KJS::EvalNode::EvalNode): 4109 (KJS::EvalNode::create): 4110 (KJS::FunctionBodyNode::FunctionBodyNode): 4111 (KJS::FunctionBodyNode::create): 4112 * kjs/nodes.h: 4113 (KJS::ExpressionNode::): 4114 (KJS::NullNode::): 4115 (KJS::BooleanNode::): 4116 (KJS::NumberNode::): 4117 (KJS::ImmediateNumberNode::): 4118 (KJS::StringNode::): 4119 (KJS::RegExpNode::): 4120 (KJS::ThisNode::): 4121 (KJS::ResolveNode::): 4122 (KJS::ElementNode::): 4123 (KJS::ArrayNode::): 4124 (KJS::PropertyNode::): 4125 (KJS::PropertyListNode::): 4126 (KJS::ObjectLiteralNode::): 4127 (KJS::BracketAccessorNode::): 4128 (KJS::DotAccessorNode::): 4129 (KJS::ArgumentListNode::): 4130 (KJS::ArgumentsNode::): 4131 (KJS::NewExprNode::): 4132 (KJS::EvalFunctionCallNode::): 4133 (KJS::FunctionCallValueNode::): 4134 (KJS::FunctionCallResolveNode::): 4135 (KJS::FunctionCallBracketNode::): 4136 (KJS::FunctionCallDotNode::): 4137 (KJS::PrePostResolveNode::): 4138 (KJS::PostIncResolveNode::): 4139 (KJS::PostDecResolveNode::): 4140 (KJS::PostfixBracketNode::): 4141 (KJS::PostIncBracketNode::): 4142 (KJS::PostDecBracketNode::): 4143 (KJS::PostfixDotNode::): 4144 (KJS::PostIncDotNode::): 4145 (KJS::PostDecDotNode::): 4146 (KJS::PostfixErrorNode::): 4147 (KJS::DeleteResolveNode::): 4148 (KJS::DeleteBracketNode::): 4149 (KJS::DeleteDotNode::): 4150 (KJS::DeleteValueNode::): 4151 (KJS::VoidNode::): 4152 (KJS::TypeOfResolveNode::): 4153 (KJS::TypeOfValueNode::): 4154 (KJS::PreIncResolveNode::): 4155 (KJS::PreDecResolveNode::): 4156 (KJS::PrefixBracketNode::): 4157 (KJS::PreIncBracketNode::): 4158 (KJS::PreDecBracketNode::): 4159 (KJS::PrefixDotNode::): 4160 (KJS::PreIncDotNode::): 4161 (KJS::PreDecDotNode::): 4162 (KJS::PrefixErrorNode::): 4163 (KJS::UnaryOpNode::UnaryOpNode): 4164 (KJS::UnaryPlusNode::): 4165 (KJS::NegateNode::): 4166 (KJS::BitwiseNotNode::): 4167 (KJS::LogicalNotNode::): 4168 (KJS::BinaryOpNode::BinaryOpNode): 4169 (KJS::ReverseBinaryOpNode::ReverseBinaryOpNode): 4170 (KJS::MultNode::): 4171 (KJS::DivNode::): 4172 (KJS::ModNode::): 4173 (KJS::AddNode::): 4174 (KJS::SubNode::): 4175 (KJS::LeftShiftNode::): 4176 (KJS::RightShiftNode::): 4177 (KJS::UnsignedRightShiftNode::): 4178 (KJS::LessNode::): 4179 (KJS::GreaterNode::): 4180 (KJS::LessEqNode::): 4181 (KJS::GreaterEqNode::): 4182 (KJS::InstanceOfNode::): 4183 (KJS::InNode::): 4184 (KJS::EqualNode::): 4185 (KJS::NotEqualNode::): 4186 (KJS::StrictEqualNode::): 4187 (KJS::NotStrictEqualNode::): 4188 (KJS::BitAndNode::): 4189 (KJS::BitOrNode::): 4190 (KJS::BitXOrNode::): 4191 (KJS::LogicalAndNode::): 4192 (KJS::LogicalOrNode::): 4193 (KJS::ConditionalNode::): 4194 (KJS::ReadModifyResolveNode::): 4195 (KJS::AssignResolveNode::): 4196 (KJS::ReadModifyBracketNode::): 4197 (KJS::AssignBracketNode::): 4198 (KJS::AssignDotNode::): 4199 (KJS::ReadModifyDotNode::): 4200 (KJS::AssignErrorNode::): 4201 (KJS::CommaNode::): 4202 (KJS::VarDeclCommaNode::): 4203 (KJS::ConstStatementNode::): 4204 (KJS::SourceElements::SourceElements): 4205 (KJS::EmptyStatementNode::): 4206 (KJS::DebuggerStatementNode::): 4207 (KJS::ExprStatementNode::): 4208 (KJS::VarStatementNode::): 4209 (KJS::IfNode::): 4210 (KJS::IfElseNode::): 4211 (KJS::DoWhileNode::): 4212 (KJS::WhileNode::): 4213 (KJS::ForNode::): 4214 (KJS::ContinueNode::): 4215 (KJS::BreakNode::): 4216 (KJS::ReturnNode::): 4217 (KJS::WithNode::): 4218 (KJS::LabelNode::): 4219 (KJS::ThrowNode::): 4220 (KJS::TryNode::): 4221 (KJS::ParameterNode::): 4222 (KJS::FuncExprNode::): 4223 (KJS::FuncDeclNode::): 4224 (KJS::CaseClauseNode::): 4225 (KJS::ClauseListNode::): 4226 (KJS::CaseBlockNode::): 4227 (KJS::SwitchNode::): 4228 Changed ParserRefCounted to hold a JSGlobalData pointer, and used it to replace 4229 threadInstance calls. 4230 4231 2008-06-24 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 4232 4233 Reviewed by Alexey Proskuryakov. 4234 4235 Make the JavaScript shell collect the heap from main() instead of 4236 jscmain() to suppress leak messages in debug builds. 4237 4238 * kjs/Shell.cpp: 4239 (main): 4240 (jscmain): 4241 4242 2008-06-24 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 4243 4244 Reviewed by Maciej. 4245 4246 Make the conversion of the pair (less, jtrue) to jless use register 4247 reference counting information for safety instead of requiring callers 4248 to decide whether it is safe. 4249 4250 No changes on SunSpider codegen. 4251 4252 * VM/CodeGenerator.cpp: 4253 (KJS::CodeGenerator::emitJumpIfTrue): 4254 * VM/CodeGenerator.h: 4255 * kjs/nodes.cpp: 4256 (KJS::DoWhileNode::emitCode): 4257 (KJS::WhileNode::emitCode): 4258 (KJS::ForNode::emitCode): 4259 (KJS::CaseBlockNode::emitCodeForBlock): 4260 4261 2008-06-24 Kevin McCullough <kmccullough (a] apple.com> 4262 4263 Reviewed by Tim. 4264 4265 <rdar://problem/6031594> JSProfiler: Profiler goes into an infinite 4266 loop sometimes. 4267 <rdar://problem/6031603> JSProfiler: Profiler asserts in debug and 4268 give the wrong times in release 4269 4270 Fixed two issues found by Tim in the same test. 4271 4272 * profiler/Profile.cpp: 4273 (KJS::Profile::removeProfileStart): No longer take profile's time from 4274 all ancestors, but instead attribute it to its parent. Also add an 4275 Assert to ensure we only delete the child we mean to. 4276 (KJS::Profile::removeProfileEnd): Ditto for profileEnd. 4277 (KJS::Profile::didExecute): Cleaned up the execution order and correctly 4278 attribute all of the parent's time to the new node. 4279 * profiler/ProfileNode.cpp: If this node does not have a startTime it 4280 should not get a giant total time, but instead be 0. 4281 (KJS::ProfileNode::endAndRecordCall): 4282 * profiler/ProfileNode.h: 4283 (KJS::ProfileNode::removeChild): Should reset the sibling pointers since 4284 one of them has been removed. 4285 4286 2008-06-24 Darin Adler <darin (a] apple.com> 4287 4288 Reviewed by Cameron. 4289 4290 - fix https://bugs.webkit.org/show_bug.cgi?id=19739 4291 REGRESSION: fast/js/property-getters-and-setters.html fails 4292 4293 * kjs/JSObject.cpp: 4294 (KJS::JSObject::put): Remove an untested optimization I checked in by accident. 4295 The two loops up the prototype chain both need to start from this; instead the 4296 second loop was starting where the first loop left off. 4297 4298 2008-06-24 Steve Falkenburg <sfalken (a] apple.com> 4299 4300 Build fix. 4301 4302 * kjs/nodes.cpp: 4303 4304 2008-06-24 Joerg Bornemann <joerg.bornemann (a] trolltech.com> 4305 4306 Reviewed by Simon. 4307 4308 For the Qt build on Windows don't depend on the presence of GNU CPP 4309 but use MSVC's preprocessor instead. 4310 dftables accepts a --preprocessor option which is set in pcre.pri for MSVC platforms. 4311 4312 * pcre/dftables: Added support for specifying the preprocessor command 4313 to use via --preprocessor, similar to 4314 WebCore/bindings/scripts/generate-bindings.pl. 4315 * pcre/pcre.pri: Pass --preprocessor='cl /e' to dftables, or more 4316 generally speaking QMAKE_CC /E for the win32-msvc buildspecs. 4317 4318 2008-06-24 Simon Hausmann <hausmann (a] webkit.org> 4319 4320 Fix the Qt build, added missing include. 4321 4322 * kjs/PropertySlot.cpp: 4323 4324 2008-06-24 Alexey Proskuryakov <ap (a] webkit.org> 4325 4326 Reviewed by Cameron Zwarich. 4327 4328 Make ParserRefCountedCounter actually perform a leak check. 4329 4330 * kjs/nodes.cpp: 4331 (KJS::ParserRefCountedCounter::~ParserRefCountedCounter): Check for leaks in destructor, 4332 not in constructor. 4333 (KJS::ParserRefCountedCounter::increment): 4334 (KJS::ParserRefCountedCounter::decrement): 4335 (KJS::ParserRefCounted::ParserRefCounted): 4336 (KJS::ParserRefCounted::~ParserRefCounted): 4337 While at it, also made counting thread-safe. 4338 4339 2008-06-24 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 4340 4341 Reviewed by Oliver. 4342 4343 Bug 19730: REGRESSION (r34497): Text in alerts in "Leisure suit Larry" is not wrapped 4344 <https://bugs.webkit.org/show_bug.cgi?id=19730> 4345 4346 Do not convert the pair (less, jtrue) to jless when jtrue is a jump 4347 target. An example of this is when the condition of a while loop is a 4348 LogicalOrNode. 4349 4350 * VM/CodeGenerator.cpp: 4351 (KJS::CodeGenerator::emitLabel): 4352 4353 2008-06-20 Ariya Hidayat <ariya.hidayat (a] trolltech.com> 4354 4355 Reviewed by Adam Roben. 4356 4357 Fix compile with MinGW. 4358 4359 * kjs/Shell.cpp: 4360 * wtf/Threading.h: 4361 (WTF::atomicIncrement): 4362 (WTF::atomicDecrement): 4363 4364 2008-06-23 Mark Rowe <mrowe (a] apple.com> 4365 4366 Reviewed by Oliver Hunt. 4367 4368 Prepration for returning memory to the OS on Windows. Track whether a portion of a span of memory was returned to the OS. 4369 If it was, ask that it be recommitted before returning it to the application as an allocated region. 4370 4371 * wtf/FastMalloc.cpp: 4372 (WTF::TCMalloc_PageHeap::New): If the span was decommitted, ask that it be recommitted before returning it. 4373 (WTF::TCMalloc_PageHeap::AllocLarge): Ditto. 4374 (WTF::TCMalloc_PageHeap::Carve): When splitting a span, ensure that the decommitted state propogates to the two new spans. 4375 (WTF::TCMalloc_PageHeap::Delete): When merging a span, ensure that the resulting span is marked as decommitted if any of the 4376 spans being merged were marked as decommitted. 4377 (WTF::TCMalloc_PageHeap::IncrementalScavenge): Mark as decommitted after releasing the span. 4378 (WTF::TCMalloc_Central_FreeList::FetchFromSpans): Add an assertion to catch a decommitted span being returned to the application 4379 without first being recommitted. 4380 (WTF::TCMalloc_Central_FreeList::Populate): Ditto. 4381 * wtf/TCSystemAlloc.cpp: Stub out TCMalloc_SystemCommit. 4382 * wtf/TCSystemAlloc.h: 4383 4384 2008-06-23 Mark Rowe <mrowe (a] apple.com> 4385 4386 Reviewed by Sam Weinig. 4387 4388 Remove the sample member of Span when NO_TCMALLOC_SAMPLES is defined. 4389 4390 * wtf/FastMalloc.cpp: 4391 (WTF::TCMalloc_PageHeap::Delete): Only update Span::sample if NO_TCMALLOC_SAMPLES is not defined. 4392 (WTF::TCMallocStats::do_free): Ditto. 4393 4394 2008-06-23 Darin Adler <darin (a] apple.com> 4395 4396 Reviewed by Geoff. 4397 4398 - work toward https://bugs.webkit.org/show_bug.cgi?id=19721 4399 4400 More preparation toward making functions work on primitive types without 4401 creating wrapper objects. No speedup this time, but prepares for a future 4402 speedup without slowing things down. 4403 4404 SunSpider reports no change. 4405 4406 - Eliminated the implementsCall, callAsFunction and construct virtual 4407 functions from JSObject. Instead, the CallData and ConstructData for 4408 a native function includes a function pointer that the caller can use 4409 directly. Changed all call sites to use CallData and ConstructData. 4410 4411 - Changed the "this" argument to native functions to be a JSValue rather 4412 than a JSObject. This prepares us for passing primitives into these 4413 functions. The conversion to an object now must be done inside the 4414 function. Critically, if it's a function that can be called on a DOM 4415 window object, then we have to be sure to call toThisObject on the 4416 argument before we use it for anything even if it's already an object. 4417 4418 - Eliminated the practice of using constructor objects in the global 4419 object to make objects of the various basic types. Since these 4420 constructors can't be replaced by script, there's no reason to involve 4421 a constructor object at all. Added functions to do the construction 4422 directly. 4423 4424 - Made some more class members private and protected, including virtual 4425 function overrides. This can catch code using unnecessarily slow virtual 4426 function code paths when the type of an object is known statically. If we 4427 later find a new reason use the members outside the class it's easy to 4428 make them public again. 4429 4430 - Moved the declarations of the native implementations for functions out 4431 of header files. These can have internal linkage and be declared inside 4432 the source file. 4433 4434 - Changed PrototypeFunction to take function pointers with the right 4435 arguments to be put directly into CallData. This eliminates the 4436 need to have a separate PrototypeReflexiveFunction, and reveals that the 4437 real purpose of that class included something else specific to eval -- 4438 storage of a cached global object. So renamed PrototypeReflexiveFunction 4439 to GlobalEvalFunction. 4440 4441 * API/JSCallbackConstructor.cpp: 4442 (KJS::constructJSCallback): 4443 (KJS::JSCallbackConstructor::getConstructData): 4444 * API/JSCallbackConstructor.h: 4445 * API/JSCallbackFunction.cpp: 4446 (KJS::JSCallbackFunction::implementsHasInstance): 4447 (KJS::JSCallbackFunction::call): 4448 (KJS::JSCallbackFunction::getCallData): 4449 * API/JSCallbackFunction.h: 4450 (KJS::JSCallbackFunction::classInfo): 4451 * API/JSCallbackObject.h: 4452 (KJS::JSCallbackObject::classRef): 4453 (KJS::JSCallbackObject::classInfo): 4454 * API/JSCallbackObjectFunctions.h: 4455 (KJS::::getConstructData): 4456 (KJS::::construct): 4457 (KJS::::getCallData): 4458 (KJS::::call): 4459 * API/JSObjectRef.cpp: 4460 (JSObjectMakeFunction): 4461 (JSObjectIsFunction): 4462 (JSObjectCallAsFunction): 4463 (JSObjectCallAsConstructor): 4464 * JavaScriptCore.exp: 4465 * VM/Machine.cpp: 4466 (KJS::jsTypeStringForValue): 4467 (KJS::Machine::privateExecute): 4468 * kjs/ArrayPrototype.cpp: 4469 (KJS::arrayProtoFuncToString): 4470 (KJS::arrayProtoFuncToLocaleString): 4471 (KJS::arrayProtoFuncJoin): 4472 (KJS::arrayProtoFuncConcat): 4473 (KJS::arrayProtoFuncPop): 4474 (KJS::arrayProtoFuncPush): 4475 (KJS::arrayProtoFuncReverse): 4476 (KJS::arrayProtoFuncShift): 4477 (KJS::arrayProtoFuncSlice): 4478 (KJS::arrayProtoFuncSort): 4479 (KJS::arrayProtoFuncSplice): 4480 (KJS::arrayProtoFuncUnShift): 4481 (KJS::arrayProtoFuncFilter): 4482 (KJS::arrayProtoFuncMap): 4483 (KJS::arrayProtoFuncEvery): 4484 (KJS::arrayProtoFuncForEach): 4485 (KJS::arrayProtoFuncSome): 4486 (KJS::arrayProtoFuncIndexOf): 4487 (KJS::arrayProtoFuncLastIndexOf): 4488 (KJS::ArrayConstructor::ArrayConstructor): 4489 (KJS::constructArrayWithSizeQuirk): 4490 (KJS::constructWithArrayConstructor): 4491 (KJS::ArrayConstructor::getConstructData): 4492 (KJS::callArrayConstructor): 4493 (KJS::ArrayConstructor::getCallData): 4494 * kjs/ArrayPrototype.h: 4495 * kjs/BooleanObject.cpp: 4496 (KJS::booleanProtoFuncToString): 4497 (KJS::booleanProtoFuncValueOf): 4498 (KJS::constructBoolean): 4499 (KJS::constructWithBooleanConstructor): 4500 (KJS::BooleanConstructor::getConstructData): 4501 (KJS::callBooleanConstructor): 4502 (KJS::BooleanConstructor::getCallData): 4503 (KJS::constructBooleanFromImmediateBoolean): 4504 * kjs/BooleanObject.h: 4505 * kjs/CallData.h: 4506 (KJS::): 4507 * kjs/ConstructData.h: 4508 (KJS::): 4509 * kjs/FunctionPrototype.cpp: 4510 (KJS::callFunctionPrototype): 4511 (KJS::FunctionPrototype::getCallData): 4512 (KJS::functionProtoFuncToString): 4513 (KJS::functionProtoFuncApply): 4514 (KJS::functionProtoFuncCall): 4515 (KJS::constructWithFunctionConstructor): 4516 (KJS::FunctionConstructor::getConstructData): 4517 (KJS::callFunctionConstructor): 4518 (KJS::FunctionConstructor::getCallData): 4519 (KJS::constructFunction): 4520 * kjs/FunctionPrototype.h: 4521 * kjs/JSArray.cpp: 4522 (KJS::AVLTreeAbstractorForArrayCompare::compare_key_key): 4523 (KJS::JSArray::sort): 4524 (KJS::constructEmptyArray): 4525 (KJS::constructArray): 4526 * kjs/JSArray.h: 4527 (KJS::JSArray::classInfo): 4528 * kjs/JSFunction.cpp: 4529 (KJS::JSFunction::call): 4530 (KJS::globalFuncEval): 4531 (KJS::globalFuncParseInt): 4532 (KJS::globalFuncParseFloat): 4533 (KJS::globalFuncIsNaN): 4534 (KJS::globalFuncIsFinite): 4535 (KJS::globalFuncDecodeURI): 4536 (KJS::globalFuncDecodeURIComponent): 4537 (KJS::globalFuncEncodeURI): 4538 (KJS::globalFuncEncodeURIComponent): 4539 (KJS::globalFuncEscape): 4540 (KJS::globalFuncUnescape): 4541 (KJS::globalFuncKJSPrint): 4542 (KJS::PrototypeFunction::PrototypeFunction): 4543 (KJS::PrototypeFunction::getCallData): 4544 (KJS::GlobalEvalFunction::GlobalEvalFunction): 4545 (KJS::GlobalEvalFunction::mark): 4546 * kjs/JSFunction.h: 4547 (KJS::InternalFunction::classInfo): 4548 (KJS::InternalFunction::functionName): 4549 (KJS::JSFunction::classInfo): 4550 (KJS::GlobalEvalFunction::cachedGlobalObject): 4551 * kjs/JSGlobalObject.cpp: 4552 (KJS::JSGlobalObject::reset): 4553 (KJS::JSGlobalObject::mark): 4554 * kjs/JSGlobalObject.h: 4555 (KJS::JSGlobalObject::JSGlobalObject): 4556 (KJS::JSGlobalObject::evalFunction): 4557 * kjs/JSImmediate.cpp: 4558 (KJS::JSImmediate::toObject): 4559 * kjs/JSNotAnObject.cpp: 4560 * kjs/JSNotAnObject.h: 4561 * kjs/JSObject.cpp: 4562 (KJS::JSObject::put): 4563 (KJS::callDefaultValueFunction): 4564 (KJS::JSObject::defaultValue): 4565 (KJS::JSObject::lookupGetter): 4566 (KJS::JSObject::lookupSetter): 4567 (KJS::JSObject::hasInstance): 4568 (KJS::JSObject::fillGetterPropertySlot): 4569 (KJS::Error::create): 4570 (KJS::constructEmptyObject): 4571 * kjs/JSObject.h: 4572 (KJS::GetterSetter::GetterSetter): 4573 (KJS::GetterSetter::getter): 4574 (KJS::GetterSetter::setGetter): 4575 (KJS::GetterSetter::setter): 4576 (KJS::GetterSetter::setSetter): 4577 * kjs/JSValue.cpp: 4578 (KJS::JSCell::deleteProperty): 4579 (KJS::call): 4580 (KJS::construct): 4581 * kjs/JSValue.h: 4582 * kjs/MathObject.cpp: 4583 (KJS::mathProtoFuncAbs): 4584 (KJS::mathProtoFuncACos): 4585 (KJS::mathProtoFuncASin): 4586 (KJS::mathProtoFuncATan): 4587 (KJS::mathProtoFuncATan2): 4588 (KJS::mathProtoFuncCeil): 4589 (KJS::mathProtoFuncCos): 4590 (KJS::mathProtoFuncExp): 4591 (KJS::mathProtoFuncFloor): 4592 (KJS::mathProtoFuncLog): 4593 (KJS::mathProtoFuncMax): 4594 (KJS::mathProtoFuncMin): 4595 (KJS::mathProtoFuncPow): 4596 (KJS::mathProtoFuncRandom): 4597 (KJS::mathProtoFuncRound): 4598 (KJS::mathProtoFuncSin): 4599 (KJS::mathProtoFuncSqrt): 4600 (KJS::mathProtoFuncTan): 4601 * kjs/MathObject.h: 4602 * kjs/NumberObject.cpp: 4603 (KJS::numberProtoFuncToString): 4604 (KJS::numberProtoFuncToLocaleString): 4605 (KJS::numberProtoFuncValueOf): 4606 (KJS::numberProtoFuncToFixed): 4607 (KJS::numberProtoFuncToExponential): 4608 (KJS::numberProtoFuncToPrecision): 4609 (KJS::NumberConstructor::NumberConstructor): 4610 (KJS::constructWithNumberConstructor): 4611 (KJS::NumberConstructor::getConstructData): 4612 (KJS::callNumberConstructor): 4613 (KJS::NumberConstructor::getCallData): 4614 (KJS::constructNumber): 4615 (KJS::constructNumberFromImmediateNumber): 4616 * kjs/NumberObject.h: 4617 (KJS::NumberObject::classInfo): 4618 (KJS::NumberConstructor::classInfo): 4619 * kjs/PropertySlot.cpp: 4620 (KJS::PropertySlot::functionGetter): 4621 * kjs/RegExpObject.cpp: 4622 (KJS::regExpProtoFuncTest): 4623 (KJS::regExpProtoFuncExec): 4624 (KJS::regExpProtoFuncCompile): 4625 (KJS::regExpProtoFuncToString): 4626 (KJS::callRegExpObject): 4627 (KJS::RegExpObject::getCallData): 4628 (KJS::constructRegExp): 4629 (KJS::constructWithRegExpConstructor): 4630 (KJS::RegExpConstructor::getConstructData): 4631 (KJS::callRegExpConstructor): 4632 (KJS::RegExpConstructor::getCallData): 4633 * kjs/RegExpObject.h: 4634 (KJS::RegExpConstructor::classInfo): 4635 * kjs/Shell.cpp: 4636 (GlobalObject::GlobalObject): 4637 (functionPrint): 4638 (functionDebug): 4639 (functionGC): 4640 (functionVersion): 4641 (functionRun): 4642 (functionLoad): 4643 (functionReadline): 4644 (functionQuit): 4645 * kjs/date_object.cpp: 4646 (KJS::gmtoffset): 4647 (KJS::formatLocaleDate): 4648 (KJS::fillStructuresUsingDateArgs): 4649 (KJS::DateInstance::getTime): 4650 (KJS::DateInstance::getUTCTime): 4651 (KJS::DateConstructor::DateConstructor): 4652 (KJS::constructDate): 4653 (KJS::DateConstructor::getConstructData): 4654 (KJS::callDate): 4655 (KJS::DateConstructor::getCallData): 4656 (KJS::dateParse): 4657 (KJS::dateNow): 4658 (KJS::dateUTC): 4659 (KJS::dateProtoFuncToString): 4660 (KJS::dateProtoFuncToUTCString): 4661 (KJS::dateProtoFuncToDateString): 4662 (KJS::dateProtoFuncToTimeString): 4663 (KJS::dateProtoFuncToLocaleString): 4664 (KJS::dateProtoFuncToLocaleDateString): 4665 (KJS::dateProtoFuncToLocaleTimeString): 4666 (KJS::dateProtoFuncValueOf): 4667 (KJS::dateProtoFuncGetTime): 4668 (KJS::dateProtoFuncGetFullYear): 4669 (KJS::dateProtoFuncGetUTCFullYear): 4670 (KJS::dateProtoFuncToGMTString): 4671 (KJS::dateProtoFuncGetMonth): 4672 (KJS::dateProtoFuncGetUTCMonth): 4673 (KJS::dateProtoFuncGetDate): 4674 (KJS::dateProtoFuncGetUTCDate): 4675 (KJS::dateProtoFuncGetDay): 4676 (KJS::dateProtoFuncGetUTCDay): 4677 (KJS::dateProtoFuncGetHours): 4678 (KJS::dateProtoFuncGetUTCHours): 4679 (KJS::dateProtoFuncGetMinutes): 4680 (KJS::dateProtoFuncGetUTCMinutes): 4681 (KJS::dateProtoFuncGetSeconds): 4682 (KJS::dateProtoFuncGetUTCSeconds): 4683 (KJS::dateProtoFuncGetMilliSeconds): 4684 (KJS::dateProtoFuncGetUTCMilliseconds): 4685 (KJS::dateProtoFuncGetTimezoneOffset): 4686 (KJS::dateProtoFuncSetTime): 4687 (KJS::setNewValueFromTimeArgs): 4688 (KJS::setNewValueFromDateArgs): 4689 (KJS::dateProtoFuncSetMilliSeconds): 4690 (KJS::dateProtoFuncSetUTCMilliseconds): 4691 (KJS::dateProtoFuncSetSeconds): 4692 (KJS::dateProtoFuncSetUTCSeconds): 4693 (KJS::dateProtoFuncSetMinutes): 4694 (KJS::dateProtoFuncSetUTCMinutes): 4695 (KJS::dateProtoFuncSetHours): 4696 (KJS::dateProtoFuncSetUTCHours): 4697 (KJS::dateProtoFuncSetDate): 4698 (KJS::dateProtoFuncSetUTCDate): 4699 (KJS::dateProtoFuncSetMonth): 4700 (KJS::dateProtoFuncSetUTCMonth): 4701 (KJS::dateProtoFuncSetFullYear): 4702 (KJS::dateProtoFuncSetUTCFullYear): 4703 (KJS::dateProtoFuncSetYear): 4704 (KJS::dateProtoFuncGetYear): 4705 * kjs/date_object.h: 4706 (KJS::DateInstance::internalNumber): 4707 (KJS::DateInstance::classInfo): 4708 * kjs/error_object.cpp: 4709 (KJS::errorProtoFuncToString): 4710 (KJS::constructError): 4711 (KJS::constructWithErrorConstructor): 4712 (KJS::ErrorConstructor::getConstructData): 4713 (KJS::callErrorConstructor): 4714 (KJS::ErrorConstructor::getCallData): 4715 (KJS::NativeErrorConstructor::construct): 4716 (KJS::constructWithNativeErrorConstructor): 4717 (KJS::NativeErrorConstructor::getConstructData): 4718 (KJS::callNativeErrorConstructor): 4719 (KJS::NativeErrorConstructor::getCallData): 4720 * kjs/error_object.h: 4721 (KJS::NativeErrorConstructor::classInfo): 4722 * kjs/internal.cpp: 4723 (KJS::JSNumberCell::toObject): 4724 (KJS::JSNumberCell::toThisObject): 4725 (KJS::GetterSetter::mark): 4726 (KJS::GetterSetter::toPrimitive): 4727 (KJS::GetterSetter::toBoolean): 4728 (KJS::GetterSetter::toNumber): 4729 (KJS::GetterSetter::toString): 4730 (KJS::GetterSetter::toObject): 4731 (KJS::InternalFunction::InternalFunction): 4732 (KJS::InternalFunction::implementsHasInstance): 4733 * kjs/lookup.h: 4734 (KJS::HashEntry::): 4735 * kjs/nodes.cpp: 4736 (KJS::FuncDeclNode::makeFunction): 4737 (KJS::FuncExprNode::makeFunction): 4738 * kjs/object_object.cpp: 4739 (KJS::objectProtoFuncValueOf): 4740 (KJS::objectProtoFuncHasOwnProperty): 4741 (KJS::objectProtoFuncIsPrototypeOf): 4742 (KJS::objectProtoFuncDefineGetter): 4743 (KJS::objectProtoFuncDefineSetter): 4744 (KJS::objectProtoFuncLookupGetter): 4745 (KJS::objectProtoFuncLookupSetter): 4746 (KJS::objectProtoFuncPropertyIsEnumerable): 4747 (KJS::objectProtoFuncToLocaleString): 4748 (KJS::objectProtoFuncToString): 4749 (KJS::ObjectConstructor::ObjectConstructor): 4750 (KJS::constructObject): 4751 (KJS::constructWithObjectConstructor): 4752 (KJS::ObjectConstructor::getConstructData): 4753 (KJS::callObjectConstructor): 4754 (KJS::ObjectConstructor::getCallData): 4755 * kjs/object_object.h: 4756 * kjs/string_object.cpp: 4757 (KJS::replace): 4758 (KJS::stringProtoFuncToString): 4759 (KJS::stringProtoFuncValueOf): 4760 (KJS::stringProtoFuncCharAt): 4761 (KJS::stringProtoFuncCharCodeAt): 4762 (KJS::stringProtoFuncConcat): 4763 (KJS::stringProtoFuncIndexOf): 4764 (KJS::stringProtoFuncLastIndexOf): 4765 (KJS::stringProtoFuncMatch): 4766 (KJS::stringProtoFuncSearch): 4767 (KJS::stringProtoFuncReplace): 4768 (KJS::stringProtoFuncSlice): 4769 (KJS::stringProtoFuncSplit): 4770 (KJS::stringProtoFuncSubstr): 4771 (KJS::stringProtoFuncSubstring): 4772 (KJS::stringProtoFuncToLowerCase): 4773 (KJS::stringProtoFuncToUpperCase): 4774 (KJS::stringProtoFuncToLocaleLowerCase): 4775 (KJS::stringProtoFuncToLocaleUpperCase): 4776 (KJS::stringProtoFuncLocaleCompare): 4777 (KJS::stringProtoFuncBig): 4778 (KJS::stringProtoFuncSmall): 4779 (KJS::stringProtoFuncBlink): 4780 (KJS::stringProtoFuncBold): 4781 (KJS::stringProtoFuncFixed): 4782 (KJS::stringProtoFuncItalics): 4783 (KJS::stringProtoFuncStrike): 4784 (KJS::stringProtoFuncSub): 4785 (KJS::stringProtoFuncSup): 4786 (KJS::stringProtoFuncFontcolor): 4787 (KJS::stringProtoFuncFontsize): 4788 (KJS::stringProtoFuncAnchor): 4789 (KJS::stringProtoFuncLink): 4790 (KJS::stringFromCharCode): 4791 (KJS::StringConstructor::StringConstructor): 4792 (KJS::constructWithStringConstructor): 4793 (KJS::StringConstructor::getConstructData): 4794 (KJS::callStringConstructor): 4795 (KJS::StringConstructor::getCallData): 4796 * kjs/string_object.h: 4797 4798 2008-06-23 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 4799 4800 Reviewed by Oliver. 4801 4802 Bug 19716: REGRESSION (SquirrelFish): Reproducible crash after entering a username at mint.com 4803 <https://bugs.webkit.org/show_bug.cgi?id=19716> 4804 4805 When unwinding callframes for exceptions, check whether the callframe 4806 was created by a reentrant native call to JavaScript after tearing off 4807 the local variables instead of before. 4808 4809 * VM/Machine.cpp: 4810 (KJS::Machine::unwindCallFrame): 4811 4812 2008-06-23 Mark Rowe <mrowe (a] apple.com> 4813 4814 Reviewed by Oliver Hunt. 4815 4816 Get testapi passing again in a debug build. 4817 4818 * API/testapi.c: 4819 (main): Update the expected output of calling JSValueMakeString on a function object. 4820 4821 2008-06-21 Mark Rowe <mrowe (a] apple.com> 4822 4823 Reviewed by Sam Weinig. 4824 4825 Print a blank line when exiting the jsc interactive mode to ensure that the shell 4826 prompt will start on a new line. 4827 4828 * kjs/Shell.cpp: 4829 (runInteractive): 4830 4831 2008-06-21 Mark Rowe <mrowe (a] apple.com> 4832 4833 Rubber-stamped by Sam Weinig. 4834 4835 Tweak the paths of the items in the "tests" group to clean things up a little. 4836 4837 * JavaScriptCore.xcodeproj/project.pbxproj: 4838 4839 2008-06-21 Mark Rowe <mrowe (a] apple.com> 4840 4841 Rubber-stamped by Sam Weinig. 4842 4843 Fix jsc to link against libedit.dylib rather than libedit.2.dylib. 4844 4845 * JavaScriptCore.xcodeproj/project.pbxproj: 4846 4847 2008-06-21 Mark Rowe <mrowe (a] apple.com> 4848 4849 Reviewed by Sam Weinig. 4850 4851 Copy the JavaScriptCore shell (jsc) into JavaScriptCore.framework so that it will 4852 be included in nightly builds. 4853 https://bugs.webkit.org/show_bug.cgi?id=19691 4854 4855 * JavaScriptCore.xcodeproj/project.pbxproj: 4856 4857 2008-06-21 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 4858 4859 Reviewed by Mark Rowe. 4860 4861 Fix the build for non-Mac Darwin platforms by disabling their support 4862 for readline in the JavaScript shell. 4863 4864 * kjs/config.h: 4865 4866 2008-06-20 Timothy Hatcher <timothy (a] apple.com> 4867 4868 Use member function pointers for the Profile::forEach function. 4869 Eliminating a few static functions and simplified things a little. 4870 4871 Reviewed by Alexey Proskuryakov. 4872 4873 * JavaScriptCore.exp: Change the symbol for forEach. 4874 * profiler/Profile.cpp: 4875 (KJS::Profile::forEach): Use a member function pointer. 4876 * profiler/Profile.h: 4877 (KJS::Profile::sortTotalTimeDescending): Pass a function pointer. 4878 (KJS::Profile::sortTotalTimeAscending): Ditto. 4879 (KJS::Profile::sortSelfTimeDescending): Ditto. 4880 (KJS::Profile::sortSelfTimeAscending): Ditto. 4881 (KJS::Profile::sortCallsDescending): Ditto. 4882 * profiler/ProfileNode.h: 4883 (KJS::ProfileNode::sortTotalTimeDescending): No longer static. 4884 (KJS::ProfileNode::sortTotalTimeAscending): Ditto. 4885 (KJS::ProfileNode::sortSelfTimeDescending): Ditto. 4886 (KJS::ProfileNode::sortSelfTimeAscending): Ditto. 4887 (KJS::ProfileNode::sortCallsDescending): Ditto. 4888 4889 2008-06-20 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 4890 4891 Reviewed by Oliver. 4892 4893 Remove unused destructors. 4894 4895 * kjs/nodes.cpp: 4896 * kjs/nodes.h: 4897 4898 2008-06-20 Timothy Hatcher <timothy (a] apple.com> 4899 4900 Fixed an ASSERT(m_actualSelfTime <= m_actualTotalTime) when starting 4901 and stopping a profile from the Develop menu. Also prevents 4902 inserting an incorrect parent node as the new head after profiling 4903 is stopped from the Develop menu. 4904 4905 Reviewed by Dan Bernstein. 4906 4907 * profiler/Profile.cpp: 4908 (KJS::Profile::stopProfiling): If the current node is already the head 4909 then there is no more need to record future nodes in didExecute. 4910 (KJS::Profile::didExecute): Move the code of setupCurrentNodeAsStopped 4911 into here since this was the only caller. When setting the total time 4912 keep any current total time while adding the self time of the head. 4913 (KJS::Profile::setupCurrentNodeAsStopped): Removed. 4914 * profiler/Profile.h: Removed setupCurrentNodeAsStopped. 4915 4916 2008-06-20 Kevin Ollivier <kevino (a] theolliviers.com> 4917 4918 !USE(MULTIPLE_THREADS) on Darwin build fix 4919 4920 * kjs/InitializeThreading.cpp: 4921 (KJS::initializeThreading): 4922 * kjs/collector.h: 4923 4924 2008-06-20 Kevin McCullough <kmccullough (a] apple.com> 4925 4926 -Leopard Build Fix. 4927 4928 * profiler/Profile.cpp: 4929 (KJS::Profile::removeProfileStart): 4930 (KJS::Profile::removeProfileEnd): 4931 4932 2008-06-20 Kevin McCullough <kmccullough (a] apple.com> 4933 4934 Just giving credit. 4935 4936 * ChangeLog: 4937 4938 2008-06-20 Kevin McCullough <kmccullough (a] apple.com> 4939 4940 Reviewed by Tim and Dan. 4941 4942 <rdar://problem/6024846> JSProfiler: ASSERT hit in Profiler. 4943 - Because InspectorController can call startProfiling() and 4944 stopProfiling() we cannot assert that console.profile() and 4945 console.profileEnd() will be in the profile tree. 4946 4947 * profiler/Profile.cpp: 4948 (KJS::Profile::removeProfileStart): 4949 (KJS::Profile::removeProfileEnd): 4950 4951 2008-06-20 Kevin McCullough <kmccullough (a] apple.com> 4952 4953 Reviewed by Tim. 4954 4955 <rdar://problem/5958770> JSProfiler: Time incorrectly given to (idle) 4956 if profiling is started and finished within the same function. (19230) 4957 - Now we profile one more stack frame up from the last frame to allocate 4958 the time spent in it, if it exists. 4959 4960 * JavaScriptCore.exp: 4961 * VM/Machine.cpp: We need to let the profiler know when the JS program 4962 has finished since that is what will actually stop the profiler instead 4963 of just calling stopProfiling(). 4964 (KJS::Machine::execute): 4965 * profiler/Profile.cpp: 4966 (KJS::Profile::create): Moved from Profile.h since it was getting pretty 4967 long. 4968 (KJS::Profile::Profile): We now have a client, which is a listener who 4969 we will return this profile to, once it has actually finished. 4970 (KJS::Profile::stopProfiling): Instead of fully stopping the profiler 4971 here, we set the flag and keep it profiling in the background. 4972 (KJS::Profile::didFinishAllExecution): This is where the profiler 4973 actually finishes and creates the (idle) node if one should be made. 4974 (KJS::Profile::removeProfileStart): Don't use m_currentNode since it is 4975 needed by the profiler as it runs silently in the background. 4976 (KJS::Profile::removeProfileEnd): Ditto. 4977 (KJS::Profile::willExecute): Don't profile new functions if we have 4978 stopped profiling. 4979 (KJS::Profile::didExecute): Only record one more return as all the 4980 remaining time will be attributed to that function. 4981 (KJS::Profile::setupCurrentNodeAsStopped): Sets the current node's time. 4982 * profiler/Profile.h: Added functions and variables for the above 4983 changes. 4984 (KJS::Profile::client): 4985 * profiler/ProfileNode.h: 4986 (KJS::CallIdentifier::toString): Debug method. 4987 * profiler/Profiler.cpp: Added support for the ProfilerClient. 4988 (KJS::Profiler::startProfiling): 4989 (KJS::Profiler::stopProfiling): No longer return sthe profile. 4990 (KJS::Profiler::didFinishAllExecution): Now returns the profile to the 4991 client instead of stopProfiling. 4992 * profiler/Profiler.h: 4993 (KJS::ProfilerClient::~ProfilerClient): Clients will implement this 4994 interface. 4995 4996 2008-06-19 Ariya Hidayat <ariya.hidayat (a] trolltech.com> 4997 4998 Reviewed by Simon. 4999 5000 Surpress compiler warning (int vs unsigned comparison). 5001 5002 * wtf/unicode/qt4/UnicodeQt4.h: 5003 (WTF::Unicode::toLower): 5004 5005 2008-06-19 Ariya Hidayat <ariya.hidayat (a] trolltech.com> 5006 5007 Reviewed by Timothy Hatcher. 5008 5009 Introduce compiler define for MinGW, to have COMPILER(MINGW). 5010 5011 * wtf/Platform.h: 5012 5013 2008-06-19 Alexey Proskuryakov <ap (a] webkit.org> 5014 5015 Reviewed by Geoff. 5016 5017 Make Machine per-JSGlobalData. 5018 5019 * VM/CodeBlock.cpp: 5020 (KJS::CodeBlock::dump): 5021 * VM/CodeGenerator.cpp: 5022 (KJS::CodeGenerator::emitOpcode): 5023 * VM/Machine.cpp: 5024 (KJS::callEval): 5025 (KJS::Machine::unwindCallFrame): 5026 (KJS::Machine::throwException): 5027 (KJS::Machine::execute): 5028 (KJS::Machine::debug): 5029 * VM/Machine.h: 5030 * kjs/DebuggerCallFrame.cpp: 5031 (KJS::DebuggerCallFrame::evaluate): 5032 * kjs/DebuggerCallFrame.h: 5033 (KJS::DebuggerCallFrame::DebuggerCallFrame): 5034 * kjs/ExecState.cpp: 5035 (KJS::ExecState::ExecState): 5036 * kjs/ExecState.h: 5037 (KJS::ExecState::machine): 5038 * kjs/JSFunction.cpp: 5039 (KJS::JSFunction::callAsFunction): 5040 (KJS::JSFunction::argumentsGetter): 5041 (KJS::JSFunction::callerGetter): 5042 (KJS::JSFunction::construct): 5043 (KJS::globalFuncEval): 5044 * kjs/JSGlobalData.cpp: 5045 (KJS::JSGlobalData::JSGlobalData): 5046 * kjs/JSGlobalData.h: 5047 * kjs/interpreter.cpp: 5048 (KJS::Interpreter::evaluate): 5049 5050 2008-06-19 Alp Toker <alp (a] nuanti.com> 5051 5052 GTK+/autotools build fix. JSGlobalObject.cpp in now in 5053 AllInOneFile.cpp and shouldn't be built separately. 5054 5055 * GNUmakefile.am: 5056 5057 2008-06-19 Alexey Proskuryakov <ap (a] webkit.org> 5058 5059 Reviewed by Darin. 5060 5061 Get rid of some threadInstance calls. 5062 5063 * kjs/JSGlobalObject.cpp: 5064 (KJS::JSGlobalObject::init): 5065 * kjs/Parser.cpp: 5066 (KJS::Parser::parse): 5067 * kjs/Shell.cpp: 5068 (jscmain): 5069 5070 2008-06-19 Alexey Proskuryakov <ap (a] webkit.org> 5071 5072 Reviewed by Sam. 5073 5074 Fix an assertion failure at startup. 5075 5076 * kjs/JSObject.h: (KJS::JSObject::JSObject): Allow jsNull prototype in an assertion (I had 5077 it fixed in a wrong copy of the file, so I wasn't getting the failure). 5078 5079 2008-06-19 Alexey Proskuryakov <ap (a] webkit.org> 5080 5081 Build fix. 5082 5083 * kjs/collector.cpp: 5084 (KJS::Heap::Heap): 5085 (KJS::allocateBlock): 5086 * kjs/collector.h: 5087 No, #if PLATFORM(UNIX) was not right. I've just moved the unsafe initialization back for now, 5088 as the platforms that use that code path do not use multiple threads yet. 5089 5090 2008-06-19 Alexey Proskuryakov <ap (a] webkit.org> 5091 5092 Windows and Qt build fixes. 5093 5094 * kjs/collector.h: 5095 * kjs/collector.cpp: 5096 (KJS::Heap::Heap): 5097 Wrapped m_pagesize in #if PLATFORM(UNIX), which should better match the sequence of #elifs 5098 in allocateBlock(). Changed MIN_ARRAY_SIZE to be explicitly size_t, as this type is different 5099 on different platforms. 5100 5101 2008-06-17 Alexey Proskuryakov <ap (a] webkit.org> 5102 5103 Reviewed by Darin. 5104 5105 Prepare JavaScript heap for being per-thread. 5106 5107 * kjs/ExecState.h: Shuffle includes, making it possible to include ExecState.h in JSValue.h. 5108 (KJS::ExecState::heap): Added an accessor. 5109 5110 * API/JSBase.cpp: (JSGarbageCollect): Collect both shared and per-thread heaps. 5111 5112 * API/JSContextRef.cpp: (JSGlobalContextCreate): When allocating JSGlobalObject, indicate 5113 that it belongs to a shared heap. 5114 5115 * JavaScriptCore.xcodeproj/project.pbxproj: 5116 * kjs/AllInOneFile.cpp: 5117 Moved JSGlobalObject.cpp to AllInOneFile, as a build fix for inlineAllocate magic. 5118 5119 * VM/CodeGenerator.h: (KJS::CodeGenerator::globalExec): Added an accessor (working via 5120 m_scopeChain). 5121 5122 * VM/RegisterFile.h: 5123 (KJS::RegisterFile::mark): 5124 * VM/RegisterFileStack.h: 5125 (KJS::RegisterFileStack::mark): 5126 Made these pseudo-mark functions take Heap*. 5127 5128 * kjs/InitializeThreading.cpp: 5129 (KJS::initializeThreading): Initialize heap introspector. 5130 5131 * kjs/JSGlobalData.h: Added Heap to the structure. 5132 5133 * kjs/JSGlobalData.cpp: 5134 (KJS::JSGlobalData::JSGlobalData): Initialize Heap. 5135 (KJS::JSGlobalData::sharedInstance): Added a method to access shared global data instance 5136 for legacy clients. 5137 5138 * kjs/JSGlobalObject.cpp: 5139 (KJS::JSGlobalObject::~JSGlobalObject): Changed to work with per-thread head; fixed list 5140 maintenance logic. 5141 (KJS::JSGlobalObject::init): Changed to work with per-thread head. 5142 (KJS::JSGlobalObject::put): Assert that a cross-heap operation is not being attempted. 5143 (KJS::JSGlobalObject::reset): Pass ExecState* where now required. 5144 (KJS::JSGlobalObject::mark): Pass the current heap to RegisterFileStack::mark. 5145 (KJS::JSGlobalObject::operator new): Overload operator new to use per-thread or shared heap. 5146 * kjs/JSGlobalObject.h: Removed static s_head member. 5147 5148 * kjs/PropertyMap.h: (KJS::PropertyMap::PropertyMap): Removed unused SavedProperty. 5149 5150 * kjs/collector.h: Turned Collector into an actual object with its own data, renamed to Heap. 5151 (KJS::Heap::initializeHeapIntrospector): Added. 5152 (KJS::Heap::heap): Added a method to determine which heap a JSValue is in, if any. 5153 (KJS::Heap::allocate): Made non-static. 5154 (KJS::Heap::inlineAllocateNumber): Ditto. 5155 (KJS::Heap::markListSet): Ditto. 5156 (KJS::Heap::cellBlock): Ditto. 5157 (KJS::Heap::cellOffset): Ditto. 5158 (KJS::Heap::isCellMarked): Ditto. 5159 (KJS::Heap::markCell): Ditto. 5160 (KJS::Heap::reportExtraMemoryCost): Ditto. 5161 (KJS::CollectorBlock): Added a back-reference to Heap for Heap::heap() method. 5162 (KJS::SmallCellCollectorBlock): Ditto. 5163 5164 * kjs/collector.cpp: Changed MIN_ARRAY_SIZE to a #define to avoid a PIC branch. Removed 5165 main thread related machinery. 5166 (KJS::Heap::Heap): Initialize the newly added data members. 5167 (KJS::allocateBlock): Marked NEVER_INLINE, as this is a rare case that uses a PIC branch. 5168 Moved static pagesize to the class to make it safely initialized. 5169 (KJS::Heap::heapAllocate): Initialize heap back reference after a new block is allocated. 5170 (KJS::Heap::registerThread): Removed introspector initialization, as it is now performed 5171 in InitializeThreading.cpp. 5172 (KJS::Heap::markOtherThreadConservatively): Assert that the "other thread" case only occurs 5173 for legacy clients using a shared heap. 5174 (KJS::Heap::markStackObjectsConservatively): Moved fastMallocForbid/Allow down here, since 5175 it doesn't need to be forbidden during other GC phases. 5176 5177 * kjs/JSImmediate.h: 5178 (KJS::jsUndefined): 5179 (KJS::jsNull): 5180 (KJS::jsBoolean): 5181 Moved from JSvalue.h, to make these usable in files that cannot include JSValue.h (such 5182 as list.h). 5183 5184 * API/JSCallbackObjectFunctions.h: 5185 (KJS::::staticFunctionGetter): 5186 * API/JSClassRef.cpp: 5187 (OpaqueJSClass::prototype): 5188 * API/JSObjectRef.cpp: 5189 (JSObjectMake): 5190 (JSObjectMakeFunctionWithCallback): 5191 (JSObjectMakeConstructor): 5192 (JSObjectMakeFunction): 5193 * API/JSValueRef.cpp: 5194 (JSValueMakeNumber): 5195 (JSValueMakeString): 5196 * JavaScriptCore.exp: 5197 * VM/CodeGenerator.cpp: 5198 (KJS::CodeGenerator::emitLoad): 5199 * VM/JSPropertyNameIterator.cpp: 5200 (KJS::JSPropertyNameIterator::create): 5201 (KJS::JSPropertyNameIterator::next): 5202 * VM/Machine.cpp: 5203 (KJS::jsAddSlowCase): 5204 (KJS::jsAdd): 5205 (KJS::jsTypeStringForValue): 5206 (KJS::scopeChainForCall): 5207 (KJS::Machine::throwException): 5208 (KJS::Machine::execute): 5209 (KJS::Machine::privateExecute): 5210 (KJS::Machine::retrieveArguments): 5211 * kjs/ArrayPrototype.cpp: 5212 (KJS::arrayProtoFuncToString): 5213 (KJS::arrayProtoFuncToLocaleString): 5214 (KJS::arrayProtoFuncJoin): 5215 (KJS::arrayProtoFuncConcat): 5216 (KJS::arrayProtoFuncPop): 5217 (KJS::arrayProtoFuncPush): 5218 (KJS::arrayProtoFuncShift): 5219 (KJS::arrayProtoFuncSlice): 5220 (KJS::arrayProtoFuncSplice): 5221 (KJS::arrayProtoFuncUnShift): 5222 (KJS::arrayProtoFuncFilter): 5223 (KJS::arrayProtoFuncMap): 5224 (KJS::arrayProtoFuncEvery): 5225 (KJS::arrayProtoFuncForEach): 5226 (KJS::arrayProtoFuncSome): 5227 (KJS::arrayProtoFuncIndexOf): 5228 (KJS::arrayProtoFuncLastIndexOf): 5229 (KJS::ArrayConstructor::ArrayConstructor): 5230 (KJS::ArrayConstructor::construct): 5231 (KJS::ArrayConstructor::callAsFunction): 5232 * kjs/BooleanObject.cpp: 5233 (KJS::BooleanPrototype::BooleanPrototype): 5234 (KJS::booleanProtoFuncToString): 5235 (KJS::BooleanConstructor::BooleanConstructor): 5236 (KJS::BooleanConstructor::construct): 5237 * kjs/FunctionPrototype.cpp: 5238 (KJS::FunctionPrototype::FunctionPrototype): 5239 (KJS::functionProtoFuncToString): 5240 (KJS::FunctionConstructor::FunctionConstructor): 5241 (KJS::FunctionConstructor::construct): 5242 * kjs/JSActivation.cpp: 5243 (KJS::JSActivation::createArgumentsObject): 5244 * kjs/JSArray.cpp: 5245 (KJS::JSArray::JSArray): 5246 (KJS::JSArray::lengthGetter): 5247 * kjs/JSFunction.cpp: 5248 (KJS::JSFunction::lengthGetter): 5249 (KJS::JSFunction::construct): 5250 (KJS::Arguments::Arguments): 5251 (KJS::encode): 5252 (KJS::decode): 5253 (KJS::globalFuncParseInt): 5254 (KJS::globalFuncParseFloat): 5255 (KJS::globalFuncEscape): 5256 (KJS::globalFuncUnescape): 5257 (KJS::PrototypeFunction::PrototypeFunction): 5258 (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction): 5259 * kjs/JSImmediate.cpp: 5260 (KJS::JSImmediate::toObject): 5261 * kjs/JSLock.cpp: 5262 (KJS::JSLock::registerThread): 5263 * kjs/JSObject.cpp: 5264 (KJS::JSObject::put): 5265 (KJS::JSObject::defineGetter): 5266 (KJS::JSObject::defineSetter): 5267 (KJS::Error::create): 5268 * kjs/JSObject.h: 5269 (KJS::JSObject::putDirect): 5270 * kjs/JSString.h: 5271 (KJS::JSString::JSString): 5272 * kjs/JSValue.cpp: 5273 (KJS::JSCell::operator new): 5274 (KJS::jsString): 5275 (KJS::jsOwnedString): 5276 * kjs/JSValue.h: 5277 (KJS::JSNumberCell::operator new): 5278 (KJS::jsNumberCell): 5279 (KJS::jsNaN): 5280 (KJS::jsNumber): 5281 (KJS::JSCell::marked): 5282 (KJS::JSCell::mark): 5283 (KJS::JSValue::toJSNumber): 5284 * kjs/MathObject.cpp: 5285 (KJS::MathObject::getValueProperty): 5286 (KJS::mathProtoFuncAbs): 5287 (KJS::mathProtoFuncACos): 5288 (KJS::mathProtoFuncASin): 5289 (KJS::mathProtoFuncATan): 5290 (KJS::mathProtoFuncATan2): 5291 (KJS::mathProtoFuncCeil): 5292 (KJS::mathProtoFuncCos): 5293 (KJS::mathProtoFuncExp): 5294 (KJS::mathProtoFuncFloor): 5295 (KJS::mathProtoFuncLog): 5296 (KJS::mathProtoFuncMax): 5297 (KJS::mathProtoFuncMin): 5298 (KJS::mathProtoFuncPow): 5299 (KJS::mathProtoFuncRandom): 5300 (KJS::mathProtoFuncRound): 5301 (KJS::mathProtoFuncSin): 5302 (KJS::mathProtoFuncSqrt): 5303 (KJS::mathProtoFuncTan): 5304 * kjs/NumberObject.cpp: 5305 (KJS::NumberPrototype::NumberPrototype): 5306 (KJS::numberProtoFuncToString): 5307 (KJS::numberProtoFuncToLocaleString): 5308 (KJS::numberProtoFuncToFixed): 5309 (KJS::numberProtoFuncToExponential): 5310 (KJS::numberProtoFuncToPrecision): 5311 (KJS::NumberConstructor::NumberConstructor): 5312 (KJS::NumberConstructor::getValueProperty): 5313 (KJS::NumberConstructor::construct): 5314 (KJS::NumberConstructor::callAsFunction): 5315 * kjs/RegExpObject.cpp: 5316 (KJS::RegExpPrototype::RegExpPrototype): 5317 (KJS::regExpProtoFuncToString): 5318 (KJS::RegExpObject::getValueProperty): 5319 (KJS::RegExpConstructor::RegExpConstructor): 5320 (KJS::RegExpMatchesArray::fillArrayInstance): 5321 (KJS::RegExpConstructor::arrayOfMatches): 5322 (KJS::RegExpConstructor::getBackref): 5323 (KJS::RegExpConstructor::getLastParen): 5324 (KJS::RegExpConstructor::getLeftContext): 5325 (KJS::RegExpConstructor::getRightContext): 5326 (KJS::RegExpConstructor::getValueProperty): 5327 (KJS::RegExpConstructor::construct): 5328 * kjs/RegExpObject.h: 5329 * kjs/Shell.cpp: 5330 (GlobalObject::GlobalObject): 5331 (functionGC): 5332 (functionRun): 5333 (functionReadline): 5334 (jscmain): 5335 * kjs/date_object.cpp: 5336 (KJS::formatLocaleDate): 5337 (KJS::DatePrototype::DatePrototype): 5338 (KJS::DateConstructor::DateConstructor): 5339 (KJS::DateConstructor::construct): 5340 (KJS::DateConstructor::callAsFunction): 5341 (KJS::DateFunction::DateFunction): 5342 (KJS::DateFunction::callAsFunction): 5343 (KJS::dateProtoFuncToString): 5344 (KJS::dateProtoFuncToUTCString): 5345 (KJS::dateProtoFuncToDateString): 5346 (KJS::dateProtoFuncToTimeString): 5347 (KJS::dateProtoFuncToLocaleString): 5348 (KJS::dateProtoFuncToLocaleDateString): 5349 (KJS::dateProtoFuncToLocaleTimeString): 5350 (KJS::dateProtoFuncValueOf): 5351 (KJS::dateProtoFuncGetTime): 5352 (KJS::dateProtoFuncGetFullYear): 5353 (KJS::dateProtoFuncGetUTCFullYear): 5354 (KJS::dateProtoFuncToGMTString): 5355 (KJS::dateProtoFuncGetMonth): 5356 (KJS::dateProtoFuncGetUTCMonth): 5357 (KJS::dateProtoFuncGetDate): 5358 (KJS::dateProtoFuncGetUTCDate): 5359 (KJS::dateProtoFuncGetDay): 5360 (KJS::dateProtoFuncGetUTCDay): 5361 (KJS::dateProtoFuncGetHours): 5362 (KJS::dateProtoFuncGetUTCHours): 5363 (KJS::dateProtoFuncGetMinutes): 5364 (KJS::dateProtoFuncGetUTCMinutes): 5365 (KJS::dateProtoFuncGetSeconds): 5366 (KJS::dateProtoFuncGetUTCSeconds): 5367 (KJS::dateProtoFuncGetMilliSeconds): 5368 (KJS::dateProtoFuncGetUTCMilliseconds): 5369 (KJS::dateProtoFuncGetTimezoneOffset): 5370 (KJS::dateProtoFuncSetTime): 5371 (KJS::setNewValueFromTimeArgs): 5372 (KJS::setNewValueFromDateArgs): 5373 (KJS::dateProtoFuncSetYear): 5374 (KJS::dateProtoFuncGetYear): 5375 * kjs/error_object.cpp: 5376 (KJS::ErrorPrototype::ErrorPrototype): 5377 (KJS::errorProtoFuncToString): 5378 (KJS::ErrorConstructor::ErrorConstructor): 5379 (KJS::ErrorConstructor::construct): 5380 (KJS::NativeErrorPrototype::NativeErrorPrototype): 5381 (KJS::NativeErrorConstructor::NativeErrorConstructor): 5382 (KJS::NativeErrorConstructor::construct): 5383 * kjs/identifier.h: 5384 * kjs/internal.cpp: 5385 (KJS::StringObject::create): 5386 (KJS::JSString::lengthGetter): 5387 (KJS::JSString::indexGetter): 5388 (KJS::JSString::indexNumericPropertyGetter): 5389 * kjs/interpreter.cpp: 5390 * kjs/list.cpp: 5391 (KJS::ArgList::slowAppend): 5392 * kjs/list.h: 5393 * kjs/lookup.h: 5394 (KJS::staticFunctionGetter): 5395 (KJS::cacheGlobalObject): 5396 * kjs/nodes.cpp: 5397 (KJS::Node::emitThrowError): 5398 (KJS::StringNode::emitCode): 5399 (KJS::ArrayNode::emitCode): 5400 (KJS::FuncDeclNode::makeFunction): 5401 (KJS::FuncExprNode::makeFunction): 5402 * kjs/nodes.h: 5403 * kjs/object_object.cpp: 5404 (KJS::ObjectPrototype::ObjectPrototype): 5405 (KJS::objectProtoFuncToLocaleString): 5406 (KJS::objectProtoFuncToString): 5407 (KJS::ObjectConstructor::ObjectConstructor): 5408 (KJS::ObjectConstructor::construct): 5409 * kjs/protect.h: 5410 (KJS::gcProtect): 5411 (KJS::gcUnprotect): 5412 * kjs/string_object.cpp: 5413 (KJS::StringObject::StringObject): 5414 (KJS::StringPrototype::StringPrototype): 5415 (KJS::replace): 5416 (KJS::stringProtoFuncCharAt): 5417 (KJS::stringProtoFuncCharCodeAt): 5418 (KJS::stringProtoFuncConcat): 5419 (KJS::stringProtoFuncIndexOf): 5420 (KJS::stringProtoFuncLastIndexOf): 5421 (KJS::stringProtoFuncMatch): 5422 (KJS::stringProtoFuncSearch): 5423 (KJS::stringProtoFuncReplace): 5424 (KJS::stringProtoFuncSlice): 5425 (KJS::stringProtoFuncSplit): 5426 (KJS::stringProtoFuncSubstr): 5427 (KJS::stringProtoFuncSubstring): 5428 (KJS::stringProtoFuncToLowerCase): 5429 (KJS::stringProtoFuncToUpperCase): 5430 (KJS::stringProtoFuncToLocaleLowerCase): 5431 (KJS::stringProtoFuncToLocaleUpperCase): 5432 (KJS::stringProtoFuncLocaleCompare): 5433 (KJS::stringProtoFuncBig): 5434 (KJS::stringProtoFuncSmall): 5435 (KJS::stringProtoFuncBlink): 5436 (KJS::stringProtoFuncBold): 5437 (KJS::stringProtoFuncFixed): 5438 (KJS::stringProtoFuncItalics): 5439 (KJS::stringProtoFuncStrike): 5440 (KJS::stringProtoFuncSub): 5441 (KJS::stringProtoFuncSup): 5442 (KJS::stringProtoFuncFontcolor): 5443 (KJS::stringProtoFuncFontsize): 5444 (KJS::stringProtoFuncAnchor): 5445 (KJS::stringProtoFuncLink): 5446 (KJS::StringConstructor::StringConstructor): 5447 (KJS::StringConstructor::construct): 5448 (KJS::StringConstructor::callAsFunction): 5449 (KJS::StringConstructorFunction::StringConstructorFunction): 5450 (KJS::StringConstructorFunction::callAsFunction): 5451 * kjs/string_object.h: 5452 (KJS::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): 5453 * kjs/ustring.h: 5454 Updated for the above changes. 5455 5456 2008-06-17 Timothy Hatcher <timothy (a] apple.com> 5457 5458 Added a type to DebuggerCallFrame so the under interface can 5459 distinguish anonymous functions and program call frames. 5460 5461 https://bugs.webkit.org/show_bug.cgi?id=19585 5462 5463 Reviewed by Geoff Garen. 5464 5465 * JavaScriptCore.exp: Export the DebuggerCallFrame::type symbol. 5466 * kjs/DebuggerCallFrame.cpp: 5467 (KJS::DebuggerCallFrame::type): Added. 5468 * kjs/DebuggerCallFrame.h: 5469 5470 2008-06-17 Eric Seidel <eric (a] webkit.org> 5471 5472 Reviewed by Tim H. 5473 5474 Remove bogus ASSERT which tripped every time for those who use PAC files. 5475 5476 * kjs/Parser.cpp: 5477 (KJS::Parser::parse): 5478 5479 2008-06-17 Kevin McCullough <kmccullough (a] apple.com> 5480 5481 Reviewed by Geoff. 5482 5483 <rdar://problem/5951534> JSProfiler: Don't profile console.profile() 5484 or console.profileEnd() 5485 5486 * profiler/Profile.cpp: 5487 (KJS::Profile::stopProfiling): Moved the creation of the (idle) node to 5488 the Profile (not ProfileNode). This makes sense since the Profile 5489 should be the one to modify the profile tree. Also each stopProfiling() 5490 does not need to check if it's the head node anymore. Also fixed an 5491 oddity where I was using willExecute to create the node. 5492 (KJS::Profile::removeProfileStart): Removes the call to console.profile 5493 that started this profile. 5494 (KJS::Profile::removeProfileEnd): Removes the call to console.profileEnd 5495 that ended this profile. 5496 * profiler/Profile.h: 5497 * profiler/ProfileNode.cpp: Moved the creation of the (idle) node to 5498 the Profile object. 5499 (KJS::ProfileNode::stopProfiling): 5500 * profiler/ProfileNode.h: Added some helper functions and whitespace to 5501 facilitate readability and the removal of profile() and profileEnd() 5502 from the Profile tree. 5503 (KJS::CallIdentifier::operator const char* ): 5504 (KJS::ProfileNode::firstChild): 5505 (KJS::ProfileNode::lastChild): 5506 (KJS::ProfileNode::removeChild): 5507 (KJS::ProfileNode::toString): 5508 5509 2008-06-17 Ariya Hidayat <ariya.hidayat (a] trolltech.com> 5510 5511 Rubber stamped by Adam Roben. 5512 5513 Include JSGlobalObject.h to fix the build. 5514 5515 * kjs/ScopeChain.cpp: 5516 5517 2008-06-17 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 5518 5519 Reviewed by Oliver. 5520 5521 Reduce code duplication in emitReadModifyAssignment(). 5522 5523 * kjs/nodes.cpp: 5524 (KJS::emitReadModifyAssignment): 5525 5526 2008-06-17 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 5527 5528 Reviewed by Oliver. 5529 5530 Sort includes alphabetically. 5531 5532 * kjs/nodes.cpp: 5533 5534 2008-06-16 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 5535 5536 Reviewed by Maciej. 5537 5538 Bug 19596: LEAK: Gmail leaks SegmentedVector<RegisterID> 5539 <https://bugs.webkit.org/show_bug.cgi?id=19596> 5540 5541 When growing SegmentedVector, we start adding segments at the position 5542 of the last segment, overwriting it. The destructor frees allocated 5543 segments starting at the segment of index 1, because the segment of 5544 index 0 is assumed to be the initial inline segment. This causes a leak 5545 of the segment that is referenced by index 0. Modifying grow() so that 5546 it starts adding segments at the position after the last segment fixes 5547 the leak. 5548 5549 Since the initial segment is a special case in the lookup code, this 5550 bug never manifested itself via incorrect results. 5551 5552 * VM/SegmentedVector.h: 5553 (KJS::SegmentedVector::grow): 5554 5555 2008-06-16 Maciej Stachowiak <mjs (a] apple.com> 5556 5557 Reviewed by Alexey. 5558 5559 - removed nearly unused types.h and LocalStorageEntry.h headers 5560 5561 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 5562 * JavaScriptCore.xcodeproj/project.pbxproj: 5563 * kjs/ExecState.h: 5564 * kjs/LocalStorageEntry.h: Removed. 5565 * kjs/RegExpObject.cpp: 5566 * kjs/error_object.cpp: 5567 * kjs/grammar.y: 5568 * kjs/nodes.cpp: 5569 * kjs/types.h: Removed. 5570 5571 2008-06-16 Alp Toker <alp (a] nuanti.com> 5572 5573 Rubber-stamped by Geoff. 5574 5575 Change c++ to c in minidom and testapi emacs mode line comments. 5576 5577 * API/Node.h: 5578 * API/NodeList.c: 5579 * API/NodeList.h: 5580 * API/testapi.c: 5581 5582 2008-06-16 Alexey Proskuryakov <ap (a] webkit.org> 5583 5584 Trying to fix Windows build. 5585 5586 * kjs/PropertyNameArray.h: 5587 * kjs/identifier.cpp: 5588 Include ExecState.h 5589 5590 2008-06-16 Geoffrey Garen <ggaren (a] apple.com> 5591 5592 Reviewed by Oliver Hunt. 5593 5594 Slight cleanup to the SymbolTableEntry class. 5595 5596 Renamed isEmpty to isNull, since we usually use "empty" to mean "holds 5597 the valid, empty value", and "null" to mean "holds no value". 5598 5599 Changed an "== 0" to a "!", to match our style guidelines. 5600 5601 Added some ASSERTs to verify the (possibly questionable) assumption that 5602 all register indexes will have their high two bits set. Also clarified a 5603 comment to make that assumption clear. 5604 5605 2008-06-16 Alexey Proskuryakov <ap (a] webkit.org> 5606 5607 Reviewed by Darin. 5608 5609 Initialize functionQueueMutex in a safe manner. 5610 5611 * wtf/MainThread.cpp: 5612 (WTF::functionQueueMutex): Made it an AtomicallyInitializedStatic. 5613 5614 (WTF::dispatchFunctionsFromMainThread): 5615 (WTF::setMainThreadCallbacksPaused): 5616 Assert that the current thread is main, meaning that the callbacksPaused static can be 5617 accessed. 5618 5619 2008-06-16 Alexey Proskuryakov <ap (a] webkit.org> 5620 5621 Reviewed by Geoff Garen. 5622 5623 Make Identifier construction use an explicitly passed IdentifierTable. 5624 5625 No change on SunSpider total. 5626 5627 * API/JSCallbackObjectFunctions.h: 5628 (KJS::::getOwnPropertySlot): 5629 (KJS::::put): 5630 (KJS::::deleteProperty): 5631 (KJS::::getPropertyNames): 5632 * API/JSObjectRef.cpp: 5633 (JSObjectMakeFunctionWithCallback): 5634 (JSObjectMakeFunction): 5635 (JSObjectHasProperty): 5636 (JSObjectGetProperty): 5637 (JSObjectSetProperty): 5638 (JSObjectDeleteProperty): 5639 (OpaqueJSPropertyNameArray::OpaqueJSPropertyNameArray): 5640 (JSObjectCopyPropertyNames): 5641 * JavaScriptCore.exp: 5642 * VM/CodeGenerator.cpp: 5643 (KJS::CodeGenerator::CodeGenerator): 5644 (KJS::CodeGenerator::registerForLocal): 5645 (KJS::CodeGenerator::isLocal): 5646 (KJS::CodeGenerator::addConstant): 5647 (KJS::CodeGenerator::findScopedProperty): 5648 * VM/CodeGenerator.h: 5649 (KJS::CodeGenerator::globalData): 5650 (KJS::CodeGenerator::propertyNames): 5651 * VM/JSPropertyNameIterator.cpp: 5652 (KJS::JSPropertyNameIterator::create): 5653 * VM/Machine.cpp: 5654 (KJS::Machine::throwException): 5655 (KJS::Machine::privateExecute): 5656 * kjs/ArrayPrototype.cpp: 5657 (KJS::ArrayConstructor::ArrayConstructor): 5658 * kjs/BooleanObject.cpp: 5659 (KJS::BooleanConstructor::BooleanConstructor): 5660 * kjs/FunctionPrototype.cpp: 5661 (KJS::FunctionConstructor::FunctionConstructor): 5662 (KJS::FunctionConstructor::construct): 5663 * kjs/JSArray.cpp: 5664 (KJS::JSArray::inlineGetOwnPropertySlot): 5665 (KJS::JSArray::put): 5666 (KJS::JSArray::deleteProperty): 5667 (KJS::JSArray::getPropertyNames): 5668 * kjs/JSFunction.cpp: 5669 (KJS::Arguments::Arguments): 5670 * kjs/JSGlobalData.cpp: 5671 (KJS::JSGlobalData::JSGlobalData): 5672 * kjs/JSGlobalObject.cpp: 5673 (KJS::JSGlobalObject::reset): 5674 * kjs/JSObject.cpp: 5675 (KJS::JSObject::getOwnPropertySlot): 5676 (KJS::JSObject::put): 5677 (KJS::JSObject::putWithAttributes): 5678 (KJS::JSObject::deleteProperty): 5679 (KJS::JSObject::findPropertyHashEntry): 5680 (KJS::JSObject::getPropertyNames): 5681 (KJS::Error::create): 5682 * kjs/JSVariableObject.cpp: 5683 (KJS::JSVariableObject::getPropertyNames): 5684 * kjs/NumberObject.cpp: 5685 (KJS::NumberConstructor::NumberConstructor): 5686 * kjs/PropertyNameArray.cpp: 5687 (KJS::PropertyNameArray::add): 5688 * kjs/PropertyNameArray.h: 5689 (KJS::PropertyNameArray::PropertyNameArray): 5690 (KJS::PropertyNameArray::addKnownUnique): 5691 * kjs/PropertySlot.h: 5692 (KJS::PropertySlot::getValue): 5693 * kjs/RegExpObject.cpp: 5694 (KJS::RegExpConstructor::RegExpConstructor): 5695 * kjs/ScopeChain.cpp: 5696 (KJS::ScopeChainNode::print): 5697 * kjs/Shell.cpp: 5698 (GlobalObject::GlobalObject): 5699 * kjs/date_object.cpp: 5700 (KJS::DateConstructor::DateConstructor): 5701 * kjs/error_object.cpp: 5702 (KJS::ErrorConstructor::ErrorConstructor): 5703 (KJS::NativeErrorConstructor::NativeErrorConstructor): 5704 * kjs/grammar.y: 5705 * kjs/identifier.cpp: 5706 (KJS::Identifier::add): 5707 (KJS::Identifier::addSlowCase): 5708 * kjs/identifier.h: 5709 (KJS::Identifier::Identifier): 5710 (KJS::Identifier::from): 5711 (KJS::Identifier::equal): 5712 (KJS::Identifier::add): 5713 (KJS::operator==): 5714 (KJS::operator!=): 5715 * kjs/internal.cpp: 5716 (KJS::JSString::getOwnPropertySlot): 5717 * kjs/lexer.cpp: 5718 (KJS::Lexer::Lexer): 5719 (KJS::Lexer::lex): 5720 (KJS::Lexer::makeIdentifier): 5721 * kjs/lexer.h: 5722 * kjs/lookup.cpp: 5723 (KJS::HashTable::createTable): 5724 * kjs/lookup.h: 5725 (KJS::HashTable::initializeIfNeeded): 5726 (KJS::HashTable::entry): 5727 (KJS::getStaticPropertySlot): 5728 (KJS::getStaticFunctionSlot): 5729 (KJS::getStaticValueSlot): 5730 (KJS::lookupPut): 5731 * kjs/object_object.cpp: 5732 (KJS::objectProtoFuncHasOwnProperty): 5733 (KJS::objectProtoFuncDefineGetter): 5734 (KJS::objectProtoFuncDefineSetter): 5735 (KJS::objectProtoFuncLookupGetter): 5736 (KJS::objectProtoFuncLookupSetter): 5737 (KJS::objectProtoFuncPropertyIsEnumerable): 5738 (KJS::ObjectConstructor::ObjectConstructor): 5739 * kjs/string_object.cpp: 5740 (KJS::StringObject::getOwnPropertySlot): 5741 (KJS::StringObject::getPropertyNames): 5742 (KJS::StringConstructor::StringConstructor): 5743 Just pass ExecState or JSGlobalData everywhere. Identifier construction is now always 5744 explicit. 5745 5746 * kjs/nodes.cpp: (KJS::RegExpNode::emitCode): Here, Identifier was created from a non-literal 5747 char*, which was incorrect, as that uses the pointer value as a key. 5748 5749 2008-06-16 Thiago Macieira <tjmaciei (a] trolltech.com> 5750 5751 Reviewed by Darin. 5752 5753 https://bugs.webkit.org/show_bug.cgi?id=19577 5754 5755 Fix compilation in C++ environments where C99 headers are not present 5756 5757 The stdbool.h header is a C99 feature, defining the "_Bool" type as well as the 5758 "true" and "false" constants. But it's completely unnecessary in C++ as the 5759 language already defines the "bool" type and its two values. 5760 5761 * API/JSBase.h: 5762 * API/JSContextRef.h: 5763 * API/JSObjectRef.h: 5764 * API/JSStringRef.h: 5765 * API/JSValueRef.h: 5766 5767 2008-06-16 Kevin McCullough <kmccullough (a] apple.com> 5768 5769 Reviewed by John. 5770 5771 <rdar://problem/6012509> JSProfiler: %s are incorrect if you exclude a 5772 top level node like (idle) 5773 5774 * profiler/Profile.cpp: 5775 (KJS::Profile::focus): 5776 (KJS::Profile::exclude): Subtract the selfTime from the totalTime of the 5777 head since its self time will only be non-zero when one of its children 5778 were excluded. Since the head's totalTime is used to calculate %s when 5779 its totalTime is the same as the sum of all its visible childrens' times 5780 their %s will sum to 100%. 5781 5782 2008-06-16 Kevin McCullough <kmccullough (a] apple.com> 5783 5784 Reviewed by Sam Weinig. 5785 5786 <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the profiler. 5787 5788 * profiler/Profile.cpp: 5789 (KJS::Profile::willExecute): 5790 5791 2008-06-16 Kevin McCullough <kmccullough (a] apple.com> 5792 5793 Reviewed by Sam. 5794 5795 <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the 5796 profiler. 5797 - Remove the last of the uses of recursion in the profiler. 5798 5799 * JavaScriptCore.exp: Export the new function's signature. 5800 * profiler/Profile.cpp: 5801 (KJS::calculateVisibleTotalTime): Added a new static method for 5802 recalculating the visibleTotalTime of methods after focus has changed 5803 which are visible. 5804 (KJS::stopProfiling): 5805 (KJS::Profile::focus): Implemented focus without recursion. 5806 * profiler/Profile.h: Moved implementation into the definition file. 5807 * profiler/ProfileNode.cpp: 5808 (KJS::ProfileNode::traverseNextNodePreOrder): Added an argument for 5809 whether or not to process the children nodes, this allows focus to skip 5810 sub trees which have been set as not visible. 5811 (KJS::ProfileNode::calculateVisibleTotalTime): This function set's a 5812 node's total visible time to the sum of its self time and its children's 5813 total times. 5814 (KJS::ProfileNode::focus): Implemented focus without recursion. 5815 * profiler/ProfileNode.h: 5816 (KJS::CallIdentifier::operator!= ): 5817 (KJS::ProfileNode::setActualTotalTime): Expanded setting the total time 5818 so that focus could modify only the visible total time. 5819 (KJS::ProfileNode::setVisibleTotalTime): 5820 5821 2008-06-16 Christian Dywan <christian (a] twotoasts.de> 5822 5823 Reviewed by Sam. 5824 5825 https://bugs.webkit.org/show_bug.cgi?id=19552 5826 JavaScriptCore headers use C++ style comments 5827 5828 Replace all C++ style comments with C style multiline 5829 comments and remove all "mode" lines. 5830 5831 * API/JSBase.h: 5832 * API/JSClassRef.h: 5833 * API/JSContextRef.h: 5834 * API/JSObjectRef.h: 5835 * API/JSStringRef.h: 5836 * API/JSStringRefBSTR.h: 5837 * API/JSStringRefCF.h: 5838 * API/JSValueRef.h: 5839 * API/JavaScript.h: 5840 * API/JavaScriptCore.h: 5841 5842 2008-06-16 Christian Dywan <christian (a] twotoasts.de> 5843 5844 Reviewed by Sam. 5845 5846 https://bugs.webkit.org/show_bug.cgi?id=19557 5847 (JavaScriptCore) minidom uses C++ style comments 5848 5849 Use only C style comments in minidom sources 5850 5851 * API/JSNode.c: 5852 (JSNode_appendChild): 5853 (JSNode_removeChild): 5854 * API/JSNode.h: 5855 * API/JSNodeList.c: 5856 (JSNodeList_getProperty): 5857 * API/JSNodeList.h: 5858 * API/Node.c: 5859 * API/Node.h: 5860 * API/NodeList.c: 5861 (NodeList_new): 5862 (NodeList_item): 5863 * API/NodeList.h: 5864 * API/minidom.c: 5865 (createStringWithContentsOfFile): 5866 * wtf/Assertions.h: 5867 * wtf/UnusedParam.h: 5868 5869 2008-06-16 Adriaan de Groot <groot (a] kde.org> 5870 5871 Reviewed by Simon. 5872 5873 Fix compilation on Solaris 5874 5875 On some systems, munmap takes a char* instead of a void* (contrary to POSIX and 5876 Single Unix Specification). Since you can always convert from char* to void* 5877 but not vice-versa, do the casting to char*. 5878 5879 * kjs/collector.cpp: 5880 (KJS::allocateBlock): 5881 (KJS::freeBlock): 5882 5883 2008-06-16 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 5884 5885 Reviewed by Maciej. 5886 5887 Make a UnaryOpNode class to reduce boilerplate code for UnaryPlusNode, 5888 NegateNode, BitwiseNotNode, and LogicalNotNode. 5889 5890 * VM/CodeGenerator.h: 5891 (KJS::CodeGenerator::emitToJSNumber): 5892 * kjs/nodes.cpp: 5893 (KJS::UnaryOpNode::emitCode): 5894 * kjs/nodes.h: 5895 (KJS::UnaryOpNode::UnaryOpNode): 5896 (KJS::UnaryPlusNode::): 5897 (KJS::NegateNode::): 5898 (KJS::NegateNode::precedence): 5899 (KJS::BitwiseNotNode::): 5900 (KJS::BitwiseNotNode::precedence): 5901 (KJS::LogicalNotNode::): 5902 (KJS::LogicalNotNode::precedence): 5903 5904 2008-06-16 Jan Michael Alonzo <jmalonzo (a] webkit.org> 5905 5906 Gtk build fix 5907 5908 * GNUmakefile.am: 5909 5910 2008-06-15 Darin Adler <darin (a] apple.com> 5911 5912 - rename KJS::List to KJS::ArgList 5913 5914 * API/JSCallbackConstructor.cpp: 5915 (KJS::JSCallbackConstructor::construct): 5916 * API/JSCallbackConstructor.h: 5917 * API/JSCallbackFunction.cpp: 5918 (KJS::JSCallbackFunction::callAsFunction): 5919 * API/JSCallbackFunction.h: 5920 * API/JSCallbackObject.h: 5921 * API/JSCallbackObjectFunctions.h: 5922 (KJS::::construct): 5923 (KJS::::callAsFunction): 5924 * API/JSObjectRef.cpp: 5925 (JSObjectMakeFunction): 5926 (JSObjectCallAsFunction): 5927 (JSObjectCallAsConstructor): 5928 * JavaScriptCore.exp: 5929 * VM/Machine.cpp: 5930 (KJS::Machine::execute): 5931 (KJS::Machine::privateExecute): 5932 * VM/Machine.h: 5933 * kjs/ArrayPrototype.cpp: 5934 (KJS::arrayProtoFuncToString): 5935 (KJS::arrayProtoFuncToLocaleString): 5936 (KJS::arrayProtoFuncJoin): 5937 (KJS::arrayProtoFuncConcat): 5938 (KJS::arrayProtoFuncPop): 5939 (KJS::arrayProtoFuncPush): 5940 (KJS::arrayProtoFuncReverse): 5941 (KJS::arrayProtoFuncShift): 5942 (KJS::arrayProtoFuncSlice): 5943 (KJS::arrayProtoFuncSort): 5944 (KJS::arrayProtoFuncSplice): 5945 (KJS::arrayProtoFuncUnShift): 5946 (KJS::arrayProtoFuncFilter): 5947 (KJS::arrayProtoFuncMap): 5948 (KJS::arrayProtoFuncEvery): 5949 (KJS::arrayProtoFuncForEach): 5950 (KJS::arrayProtoFuncSome): 5951 (KJS::arrayProtoFuncIndexOf): 5952 (KJS::arrayProtoFuncLastIndexOf): 5953 (KJS::ArrayConstructor::construct): 5954 (KJS::ArrayConstructor::callAsFunction): 5955 * kjs/ArrayPrototype.h: 5956 * kjs/BooleanObject.cpp: 5957 (KJS::booleanProtoFuncToString): 5958 (KJS::booleanProtoFuncValueOf): 5959 (KJS::BooleanConstructor::construct): 5960 (KJS::BooleanConstructor::callAsFunction): 5961 * kjs/BooleanObject.h: 5962 * kjs/CommonIdentifiers.h: 5963 * kjs/ExecState.h: 5964 (KJS::ExecState::emptyList): 5965 * kjs/FunctionPrototype.cpp: 5966 (KJS::FunctionPrototype::callAsFunction): 5967 (KJS::functionProtoFuncToString): 5968 (KJS::functionProtoFuncApply): 5969 (KJS::functionProtoFuncCall): 5970 (KJS::FunctionConstructor::construct): 5971 (KJS::FunctionConstructor::callAsFunction): 5972 * kjs/FunctionPrototype.h: 5973 * kjs/JSActivation.cpp: 5974 (KJS::JSActivation::createArgumentsObject): 5975 * kjs/JSArray.cpp: 5976 (KJS::JSArray::JSArray): 5977 (KJS::AVLTreeAbstractorForArrayCompare::compare_key_key): 5978 * kjs/JSArray.h: 5979 * kjs/JSFunction.cpp: 5980 (KJS::JSFunction::callAsFunction): 5981 (KJS::JSFunction::construct): 5982 (KJS::IndexToNameMap::IndexToNameMap): 5983 (KJS::Arguments::Arguments): 5984 (KJS::encode): 5985 (KJS::decode): 5986 (KJS::globalFuncEval): 5987 (KJS::globalFuncParseInt): 5988 (KJS::globalFuncParseFloat): 5989 (KJS::globalFuncIsNaN): 5990 (KJS::globalFuncIsFinite): 5991 (KJS::globalFuncDecodeURI): 5992 (KJS::globalFuncDecodeURIComponent): 5993 (KJS::globalFuncEncodeURI): 5994 (KJS::globalFuncEncodeURIComponent): 5995 (KJS::globalFuncEscape): 5996 (KJS::globalFuncUnescape): 5997 (KJS::globalFuncKJSPrint): 5998 (KJS::PrototypeFunction::callAsFunction): 5999 (KJS::PrototypeReflexiveFunction::callAsFunction): 6000 * kjs/JSFunction.h: 6001 * kjs/JSGlobalData.h: 6002 * kjs/JSImmediate.cpp: 6003 (KJS::JSImmediate::toObject): 6004 * kjs/JSNotAnObject.cpp: 6005 (KJS::JSNotAnObject::construct): 6006 (KJS::JSNotAnObject::callAsFunction): 6007 * kjs/JSNotAnObject.h: 6008 * kjs/JSObject.cpp: 6009 (KJS::JSObject::put): 6010 (KJS::JSObject::construct): 6011 (KJS::JSObject::callAsFunction): 6012 (KJS::Error::create): 6013 * kjs/JSObject.h: 6014 * kjs/MathObject.cpp: 6015 (KJS::mathProtoFuncAbs): 6016 (KJS::mathProtoFuncACos): 6017 (KJS::mathProtoFuncASin): 6018 (KJS::mathProtoFuncATan): 6019 (KJS::mathProtoFuncATan2): 6020 (KJS::mathProtoFuncCeil): 6021 (KJS::mathProtoFuncCos): 6022 (KJS::mathProtoFuncExp): 6023 (KJS::mathProtoFuncFloor): 6024 (KJS::mathProtoFuncLog): 6025 (KJS::mathProtoFuncMax): 6026 (KJS::mathProtoFuncMin): 6027 (KJS::mathProtoFuncPow): 6028 (KJS::mathProtoFuncRandom): 6029 (KJS::mathProtoFuncRound): 6030 (KJS::mathProtoFuncSin): 6031 (KJS::mathProtoFuncSqrt): 6032 (KJS::mathProtoFuncTan): 6033 * kjs/MathObject.h: 6034 * kjs/NumberObject.cpp: 6035 (KJS::numberProtoFuncToString): 6036 (KJS::numberProtoFuncToLocaleString): 6037 (KJS::numberProtoFuncValueOf): 6038 (KJS::numberProtoFuncToFixed): 6039 (KJS::numberProtoFuncToExponential): 6040 (KJS::numberProtoFuncToPrecision): 6041 (KJS::NumberConstructor::construct): 6042 (KJS::NumberConstructor::callAsFunction): 6043 * kjs/NumberObject.h: 6044 * kjs/RegExpObject.cpp: 6045 (KJS::regExpProtoFuncTest): 6046 (KJS::regExpProtoFuncExec): 6047 (KJS::regExpProtoFuncCompile): 6048 (KJS::regExpProtoFuncToString): 6049 (KJS::RegExpObject::match): 6050 (KJS::RegExpObject::test): 6051 (KJS::RegExpObject::exec): 6052 (KJS::RegExpObject::callAsFunction): 6053 (KJS::RegExpConstructor::construct): 6054 (KJS::RegExpConstructor::callAsFunction): 6055 * kjs/RegExpObject.h: 6056 * kjs/Shell.cpp: 6057 (functionPrint): 6058 (functionDebug): 6059 (functionGC): 6060 (functionVersion): 6061 (functionRun): 6062 (functionLoad): 6063 (functionReadline): 6064 (functionQuit): 6065 * kjs/collector.cpp: 6066 (KJS::Collector::collect): 6067 * kjs/collector.h: 6068 (KJS::Collector::markListSet): 6069 * kjs/date_object.cpp: 6070 (KJS::formatLocaleDate): 6071 (KJS::fillStructuresUsingTimeArgs): 6072 (KJS::fillStructuresUsingDateArgs): 6073 (KJS::DateConstructor::construct): 6074 (KJS::DateConstructor::callAsFunction): 6075 (KJS::DateFunction::callAsFunction): 6076 (KJS::dateProtoFuncToString): 6077 (KJS::dateProtoFuncToUTCString): 6078 (KJS::dateProtoFuncToDateString): 6079 (KJS::dateProtoFuncToTimeString): 6080 (KJS::dateProtoFuncToLocaleString): 6081 (KJS::dateProtoFuncToLocaleDateString): 6082 (KJS::dateProtoFuncToLocaleTimeString): 6083 (KJS::dateProtoFuncValueOf): 6084 (KJS::dateProtoFuncGetTime): 6085 (KJS::dateProtoFuncGetFullYear): 6086 (KJS::dateProtoFuncGetUTCFullYear): 6087 (KJS::dateProtoFuncToGMTString): 6088 (KJS::dateProtoFuncGetMonth): 6089 (KJS::dateProtoFuncGetUTCMonth): 6090 (KJS::dateProtoFuncGetDate): 6091 (KJS::dateProtoFuncGetUTCDate): 6092 (KJS::dateProtoFuncGetDay): 6093 (KJS::dateProtoFuncGetUTCDay): 6094 (KJS::dateProtoFuncGetHours): 6095 (KJS::dateProtoFuncGetUTCHours): 6096 (KJS::dateProtoFuncGetMinutes): 6097 (KJS::dateProtoFuncGetUTCMinutes): 6098 (KJS::dateProtoFuncGetSeconds): 6099 (KJS::dateProtoFuncGetUTCSeconds): 6100 (KJS::dateProtoFuncGetMilliSeconds): 6101 (KJS::dateProtoFuncGetUTCMilliseconds): 6102 (KJS::dateProtoFuncGetTimezoneOffset): 6103 (KJS::dateProtoFuncSetTime): 6104 (KJS::setNewValueFromTimeArgs): 6105 (KJS::setNewValueFromDateArgs): 6106 (KJS::dateProtoFuncSetMilliSeconds): 6107 (KJS::dateProtoFuncSetUTCMilliseconds): 6108 (KJS::dateProtoFuncSetSeconds): 6109 (KJS::dateProtoFuncSetUTCSeconds): 6110 (KJS::dateProtoFuncSetMinutes): 6111 (KJS::dateProtoFuncSetUTCMinutes): 6112 (KJS::dateProtoFuncSetHours): 6113 (KJS::dateProtoFuncSetUTCHours): 6114 (KJS::dateProtoFuncSetDate): 6115 (KJS::dateProtoFuncSetUTCDate): 6116 (KJS::dateProtoFuncSetMonth): 6117 (KJS::dateProtoFuncSetUTCMonth): 6118 (KJS::dateProtoFuncSetFullYear): 6119 (KJS::dateProtoFuncSetUTCFullYear): 6120 (KJS::dateProtoFuncSetYear): 6121 (KJS::dateProtoFuncGetYear): 6122 * kjs/date_object.h: 6123 * kjs/debugger.h: 6124 * kjs/error_object.cpp: 6125 (KJS::errorProtoFuncToString): 6126 (KJS::ErrorConstructor::construct): 6127 (KJS::ErrorConstructor::callAsFunction): 6128 (KJS::NativeErrorConstructor::construct): 6129 (KJS::NativeErrorConstructor::callAsFunction): 6130 * kjs/error_object.h: 6131 * kjs/internal.cpp: 6132 (KJS::JSNumberCell::toObject): 6133 (KJS::JSNumberCell::toThisObject): 6134 * kjs/list.cpp: 6135 (KJS::ArgList::getSlice): 6136 (KJS::ArgList::markLists): 6137 (KJS::ArgList::slowAppend): 6138 * kjs/list.h: 6139 (KJS::ArgList::ArgList): 6140 (KJS::ArgList::~ArgList): 6141 * kjs/object_object.cpp: 6142 (KJS::objectProtoFuncValueOf): 6143 (KJS::objectProtoFuncHasOwnProperty): 6144 (KJS::objectProtoFuncIsPrototypeOf): 6145 (KJS::objectProtoFuncDefineGetter): 6146 (KJS::objectProtoFuncDefineSetter): 6147 (KJS::objectProtoFuncLookupGetter): 6148 (KJS::objectProtoFuncLookupSetter): 6149 (KJS::objectProtoFuncPropertyIsEnumerable): 6150 (KJS::objectProtoFuncToLocaleString): 6151 (KJS::objectProtoFuncToString): 6152 (KJS::ObjectConstructor::construct): 6153 (KJS::ObjectConstructor::callAsFunction): 6154 * kjs/object_object.h: 6155 * kjs/string_object.cpp: 6156 (KJS::replace): 6157 (KJS::stringProtoFuncToString): 6158 (KJS::stringProtoFuncValueOf): 6159 (KJS::stringProtoFuncCharAt): 6160 (KJS::stringProtoFuncCharCodeAt): 6161 (KJS::stringProtoFuncConcat): 6162 (KJS::stringProtoFuncIndexOf): 6163 (KJS::stringProtoFuncLastIndexOf): 6164 (KJS::stringProtoFuncMatch): 6165 (KJS::stringProtoFuncSearch): 6166 (KJS::stringProtoFuncReplace): 6167 (KJS::stringProtoFuncSlice): 6168 (KJS::stringProtoFuncSplit): 6169 (KJS::stringProtoFuncSubstr): 6170 (KJS::stringProtoFuncSubstring): 6171 (KJS::stringProtoFuncToLowerCase): 6172 (KJS::stringProtoFuncToUpperCase): 6173 (KJS::stringProtoFuncToLocaleLowerCase): 6174 (KJS::stringProtoFuncToLocaleUpperCase): 6175 (KJS::stringProtoFuncLocaleCompare): 6176 (KJS::stringProtoFuncBig): 6177 (KJS::stringProtoFuncSmall): 6178 (KJS::stringProtoFuncBlink): 6179 (KJS::stringProtoFuncBold): 6180 (KJS::stringProtoFuncFixed): 6181 (KJS::stringProtoFuncItalics): 6182 (KJS::stringProtoFuncStrike): 6183 (KJS::stringProtoFuncSub): 6184 (KJS::stringProtoFuncSup): 6185 (KJS::stringProtoFuncFontcolor): 6186 (KJS::stringProtoFuncFontsize): 6187 (KJS::stringProtoFuncAnchor): 6188 (KJS::stringProtoFuncLink): 6189 (KJS::StringConstructor::construct): 6190 (KJS::StringConstructor::callAsFunction): 6191 (KJS::StringConstructorFunction::callAsFunction): 6192 * kjs/string_object.h: 6193 6194 2008-06-15 Darin Adler <darin (a] apple.com> 6195 6196 - new names for more JavaScriptCore files 6197 6198 * API/JSCallbackFunction.cpp: 6199 * API/JSObjectRef.cpp: 6200 * DerivedSources.make: 6201 * GNUmakefile.am: 6202 * JavaScriptCore.exp: 6203 * JavaScriptCore.pri: 6204 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 6205 * JavaScriptCore.xcodeproj/project.pbxproj: 6206 * JavaScriptCoreSources.bkl: 6207 * VM/Machine.cpp: 6208 * kjs/AllInOneFile.cpp: 6209 * kjs/ArrayPrototype.cpp: Copied from JavaScriptCore/kjs/array_object.cpp. 6210 * kjs/ArrayPrototype.h: Copied from JavaScriptCore/kjs/array_object.h. 6211 * kjs/BooleanObject.cpp: Copied from JavaScriptCore/kjs/bool_object.cpp. 6212 * kjs/BooleanObject.h: Copied from JavaScriptCore/kjs/bool_object.h. 6213 * kjs/ExecState.cpp: 6214 * kjs/ExecState.h: 6215 * kjs/FunctionPrototype.cpp: Copied from JavaScriptCore/kjs/function_object.cpp. 6216 * kjs/FunctionPrototype.h: Copied from JavaScriptCore/kjs/function_object.h. 6217 * kjs/JSArray.cpp: Copied from JavaScriptCore/kjs/array_instance.cpp. 6218 * kjs/JSArray.h: Copied from JavaScriptCore/kjs/array_instance.h. 6219 * kjs/JSFunction.cpp: 6220 * kjs/JSFunction.h: 6221 * kjs/JSGlobalObject.cpp: 6222 * kjs/JSImmediate.cpp: 6223 * kjs/JSObject.h: 6224 * kjs/JSString.h: 6225 * kjs/JSValue.h: 6226 * kjs/JSVariableObject.cpp: 6227 * kjs/MathObject.cpp: Copied from JavaScriptCore/kjs/math_object.cpp. 6228 * kjs/MathObject.h: Copied from JavaScriptCore/kjs/math_object.h. 6229 * kjs/NumberObject.cpp: Copied from JavaScriptCore/kjs/number_object.cpp. 6230 * kjs/NumberObject.h: Copied from JavaScriptCore/kjs/number_object.h. 6231 * kjs/PropertyMap.cpp: Copied from JavaScriptCore/kjs/property_map.cpp. 6232 * kjs/PropertyMap.h: Copied from JavaScriptCore/kjs/property_map.h. 6233 * kjs/PropertySlot.cpp: Copied from JavaScriptCore/kjs/property_slot.cpp. 6234 * kjs/PropertySlot.h: Copied from JavaScriptCore/kjs/property_slot.h. 6235 * kjs/RegExpObject.cpp: Copied from JavaScriptCore/kjs/regexp_object.cpp. 6236 * kjs/RegExpObject.h: Copied from JavaScriptCore/kjs/regexp_object.h. 6237 * kjs/ScopeChain.cpp: Copied from JavaScriptCore/kjs/scope_chain.cpp. 6238 * kjs/ScopeChain.h: Copied from JavaScriptCore/kjs/scope_chain.h. 6239 * kjs/ScopeChainMark.h: Copied from JavaScriptCore/kjs/scope_chain_mark.h. 6240 * kjs/Shell.cpp: 6241 * kjs/array_instance.cpp: Removed. 6242 * kjs/array_instance.h: Removed. 6243 * kjs/array_object.cpp: Removed. 6244 * kjs/array_object.h: Removed. 6245 * kjs/bool_object.cpp: Removed. 6246 * kjs/bool_object.h: Removed. 6247 * kjs/error_object.h: 6248 * kjs/function_object.cpp: Removed. 6249 * kjs/function_object.h: Removed. 6250 * kjs/internal.cpp: 6251 * kjs/math_object.cpp: Removed. 6252 * kjs/math_object.h: Removed. 6253 * kjs/nodes.cpp: 6254 * kjs/number_object.cpp: Removed. 6255 * kjs/number_object.h: Removed. 6256 * kjs/object_object.cpp: 6257 * kjs/property_map.cpp: Removed. 6258 * kjs/property_map.h: Removed. 6259 * kjs/property_slot.cpp: Removed. 6260 * kjs/property_slot.h: Removed. 6261 * kjs/regexp_object.cpp: Removed. 6262 * kjs/regexp_object.h: Removed. 6263 * kjs/scope_chain.cpp: Removed. 6264 * kjs/scope_chain.h: Removed. 6265 * kjs/scope_chain_mark.h: Removed. 6266 * kjs/string_object.cpp: 6267 * kjs/string_object.h: 6268 6269 2008-06-15 Darin Adler <darin (a] apple.com> 6270 6271 - new names for a few key JavaScriptCore files 6272 6273 * API/JSBase.cpp: 6274 * API/JSCallbackConstructor.h: 6275 * API/JSCallbackFunction.cpp: 6276 * API/JSCallbackFunction.h: 6277 * API/JSCallbackObject.h: 6278 * API/JSCallbackObjectFunctions.h: 6279 * API/JSClassRef.h: 6280 * API/JSContextRef.cpp: 6281 * API/JSObjectRef.cpp: 6282 * API/JSStringRef.cpp: 6283 * API/JSStringRefCF.cpp: 6284 * API/JSValueRef.cpp: 6285 * GNUmakefile.am: 6286 * JavaScriptCore.pri: 6287 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 6288 * JavaScriptCore.xcodeproj/project.pbxproj: 6289 * JavaScriptCoreSources.bkl: 6290 * VM/CodeBlock.cpp: 6291 * VM/CodeGenerator.cpp: 6292 * VM/ExceptionHelpers.cpp: 6293 * VM/ExceptionHelpers.h: 6294 * VM/JSPropertyNameIterator.cpp: 6295 * VM/JSPropertyNameIterator.h: 6296 * VM/Machine.cpp: 6297 * kjs/AllInOneFile.cpp: 6298 * kjs/DateMath.cpp: 6299 * kjs/DebuggerCallFrame.cpp: 6300 * kjs/ExecState.cpp: 6301 * kjs/JSActivation.cpp: 6302 * kjs/JSFunction.cpp: Copied from JavaScriptCore/kjs/function.cpp. 6303 * kjs/JSFunction.h: Copied from JavaScriptCore/kjs/function.h. 6304 * kjs/JSImmediate.cpp: 6305 * kjs/JSNotAnObject.h: 6306 * kjs/JSObject.cpp: Copied from JavaScriptCore/kjs/object.cpp. 6307 * kjs/JSObject.h: Copied from JavaScriptCore/kjs/object.h. 6308 * kjs/JSString.h: Copied from JavaScriptCore/kjs/internal.h. 6309 * kjs/JSValue.cpp: Copied from JavaScriptCore/kjs/value.cpp. 6310 * kjs/JSValue.h: Copied from JavaScriptCore/kjs/value.h. 6311 * kjs/JSVariableObject.h: 6312 * kjs/JSWrapperObject.h: 6313 * kjs/Shell.cpp: 6314 * kjs/SymbolTable.h: 6315 * kjs/array_instance.h: 6316 * kjs/collector.cpp: 6317 * kjs/date_object.cpp: 6318 * kjs/date_object.h: 6319 * kjs/error_object.cpp: 6320 * kjs/function.cpp: Removed. 6321 * kjs/function.h: Removed. 6322 * kjs/function_object.cpp: 6323 * kjs/function_object.h: 6324 * kjs/grammar.y: 6325 * kjs/internal.cpp: 6326 * kjs/internal.h: Removed. 6327 * kjs/lexer.cpp: 6328 * kjs/list.h: 6329 * kjs/lookup.h: 6330 * kjs/nodes.h: 6331 * kjs/object.cpp: Removed. 6332 * kjs/object.h: Removed. 6333 * kjs/object_object.h: 6334 * kjs/operations.cpp: 6335 * kjs/property_map.cpp: 6336 * kjs/property_slot.cpp: 6337 * kjs/property_slot.h: 6338 * kjs/protect.h: 6339 * kjs/regexp_object.cpp: 6340 * kjs/scope_chain.cpp: 6341 * kjs/string_object.h: 6342 * kjs/ustring.cpp: 6343 * kjs/value.cpp: Removed. 6344 * kjs/value.h: Removed. 6345 * profiler/Profile.cpp: 6346 * profiler/Profiler.cpp: 6347 6348 2008-06-15 Darin Adler <darin (a] apple.com> 6349 6350 Rubber stamped by Sam. 6351 6352 - cut down on confusing uses of "Object" and "Imp" in 6353 JavaScriptCore class names 6354 6355 * API/JSCallbackFunction.cpp: 6356 (KJS::JSCallbackFunction::JSCallbackFunction): 6357 * API/JSCallbackFunction.h: 6358 * VM/Machine.cpp: 6359 (KJS::Machine::privateExecute): 6360 * kjs/ExecState.h: 6361 (KJS::ExecState::regExpTable): 6362 (KJS::ExecState::regExpConstructorTable): 6363 * kjs/JSGlobalData.cpp: 6364 (KJS::JSGlobalData::JSGlobalData): 6365 (KJS::JSGlobalData::~JSGlobalData): 6366 * kjs/JSGlobalData.h: 6367 * kjs/JSGlobalObject.cpp: 6368 (KJS::JSGlobalObject::reset): 6369 * kjs/JSGlobalObject.h: 6370 (KJS::JSGlobalObject::objectConstructor): 6371 (KJS::JSGlobalObject::functionConstructor): 6372 (KJS::JSGlobalObject::arrayConstructor): 6373 (KJS::JSGlobalObject::booleanConstructor): 6374 (KJS::JSGlobalObject::stringConstructor): 6375 (KJS::JSGlobalObject::numberConstructor): 6376 (KJS::JSGlobalObject::dateConstructor): 6377 (KJS::JSGlobalObject::regExpConstructor): 6378 (KJS::JSGlobalObject::errorConstructor): 6379 (KJS::JSGlobalObject::evalErrorConstructor): 6380 (KJS::JSGlobalObject::rangeErrorConstructor): 6381 (KJS::JSGlobalObject::referenceErrorConstructor): 6382 (KJS::JSGlobalObject::syntaxErrorConstructor): 6383 (KJS::JSGlobalObject::typeErrorConstructor): 6384 (KJS::JSGlobalObject::URIErrorConstructor): 6385 * kjs/array_object.cpp: 6386 (KJS::ArrayConstructor::ArrayConstructor): 6387 (KJS::ArrayConstructor::getConstructData): 6388 (KJS::ArrayConstructor::construct): 6389 (KJS::ArrayConstructor::callAsFunction): 6390 * kjs/array_object.h: 6391 * kjs/bool_object.cpp: 6392 (KJS::BooleanObject::BooleanObject): 6393 (KJS::BooleanPrototype::BooleanPrototype): 6394 (KJS::booleanProtoFuncToString): 6395 (KJS::booleanProtoFuncValueOf): 6396 (KJS::BooleanConstructor::BooleanConstructor): 6397 (KJS::BooleanConstructor::getConstructData): 6398 (KJS::BooleanConstructor::construct): 6399 (KJS::BooleanConstructor::callAsFunction): 6400 * kjs/bool_object.h: 6401 * kjs/date_object.cpp: 6402 (KJS::DatePrototype::DatePrototype): 6403 (KJS::DateConstructor::DateConstructor): 6404 (KJS::DateConstructor::getConstructData): 6405 (KJS::DateConstructor::construct): 6406 (KJS::DateConstructor::callAsFunction): 6407 (KJS::DateFunction::DateFunction): 6408 (KJS::DateFunction::callAsFunction): 6409 * kjs/date_object.h: 6410 * kjs/error_object.cpp: 6411 (KJS::ErrorPrototype::ErrorPrototype): 6412 (KJS::ErrorConstructor::ErrorConstructor): 6413 (KJS::ErrorConstructor::getConstructData): 6414 (KJS::ErrorConstructor::construct): 6415 (KJS::ErrorConstructor::callAsFunction): 6416 (KJS::NativeErrorConstructor::NativeErrorConstructor): 6417 (KJS::NativeErrorConstructor::getConstructData): 6418 (KJS::NativeErrorConstructor::construct): 6419 (KJS::NativeErrorConstructor::callAsFunction): 6420 (KJS::NativeErrorConstructor::mark): 6421 * kjs/error_object.h: 6422 * kjs/function.cpp: 6423 (KJS::JSFunction::JSFunction): 6424 (KJS::JSFunction::mark): 6425 (KJS::JSFunction::getOwnPropertySlot): 6426 (KJS::JSFunction::put): 6427 (KJS::JSFunction::deleteProperty): 6428 (KJS::PrototypeFunction::PrototypeFunction): 6429 (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction): 6430 (KJS::PrototypeReflexiveFunction::mark): 6431 * kjs/function.h: 6432 * kjs/function_object.cpp: 6433 (KJS::functionProtoFuncToString): 6434 (KJS::FunctionConstructor::FunctionConstructor): 6435 (KJS::FunctionConstructor::getConstructData): 6436 (KJS::FunctionConstructor::construct): 6437 (KJS::FunctionConstructor::callAsFunction): 6438 * kjs/function_object.h: 6439 * kjs/internal.cpp: 6440 (KJS::StringObject::create): 6441 (KJS::JSString::toObject): 6442 (KJS::JSString::toThisObject): 6443 (KJS::JSString::getOwnPropertySlot): 6444 (KJS::InternalFunction::InternalFunction): 6445 (KJS::InternalFunction::getCallData): 6446 (KJS::InternalFunction::implementsHasInstance): 6447 * kjs/math_object.cpp: 6448 (KJS::MathObject::MathObject): 6449 (KJS::MathObject::getOwnPropertySlot): 6450 (KJS::MathObject::getValueProperty): 6451 * kjs/math_object.h: 6452 * kjs/number_object.cpp: 6453 (KJS::NumberObject::NumberObject): 6454 (KJS::NumberPrototype::NumberPrototype): 6455 (KJS::numberProtoFuncToString): 6456 (KJS::numberProtoFuncToLocaleString): 6457 (KJS::numberProtoFuncValueOf): 6458 (KJS::numberProtoFuncToFixed): 6459 (KJS::numberProtoFuncToExponential): 6460 (KJS::numberProtoFuncToPrecision): 6461 (KJS::NumberConstructor::NumberConstructor): 6462 (KJS::NumberConstructor::getOwnPropertySlot): 6463 (KJS::NumberConstructor::getValueProperty): 6464 (KJS::NumberConstructor::getConstructData): 6465 (KJS::NumberConstructor::construct): 6466 (KJS::NumberConstructor::callAsFunction): 6467 * kjs/number_object.h: 6468 * kjs/object.cpp: 6469 (KJS::JSObject::putDirectFunction): 6470 * kjs/object.h: 6471 * kjs/object_object.cpp: 6472 (KJS::ObjectConstructor::ObjectConstructor): 6473 (KJS::ObjectConstructor::getConstructData): 6474 (KJS::ObjectConstructor::construct): 6475 (KJS::ObjectConstructor::callAsFunction): 6476 * kjs/object_object.h: 6477 * kjs/regexp.cpp: 6478 (KJS::RegExp::RegExp): 6479 * kjs/regexp_object.cpp: 6480 (KJS::regExpProtoFuncTest): 6481 (KJS::regExpProtoFuncExec): 6482 (KJS::regExpProtoFuncCompile): 6483 (KJS::regExpProtoFuncToString): 6484 (KJS::RegExpObject::RegExpObject): 6485 (KJS::RegExpObject::~RegExpObject): 6486 (KJS::RegExpObject::getOwnPropertySlot): 6487 (KJS::RegExpObject::getValueProperty): 6488 (KJS::RegExpObject::put): 6489 (KJS::RegExpObject::putValueProperty): 6490 (KJS::RegExpObject::match): 6491 (KJS::RegExpObject::test): 6492 (KJS::RegExpObject::exec): 6493 (KJS::RegExpObject::getCallData): 6494 (KJS::RegExpObject::callAsFunction): 6495 (KJS::RegExpConstructorPrivate::RegExpConstructorPrivate): 6496 (KJS::RegExpConstructor::RegExpConstructor): 6497 (KJS::RegExpConstructor::performMatch): 6498 (KJS::RegExpMatchesArray::RegExpMatchesArray): 6499 (KJS::RegExpMatchesArray::~RegExpMatchesArray): 6500 (KJS::RegExpMatchesArray::fillArrayInstance): 6501 (KJS::RegExpConstructor::arrayOfMatches): 6502 (KJS::RegExpConstructor::getBackref): 6503 (KJS::RegExpConstructor::getLastParen): 6504 (KJS::RegExpConstructor::getLeftContext): 6505 (KJS::RegExpConstructor::getRightContext): 6506 (KJS::RegExpConstructor::getOwnPropertySlot): 6507 (KJS::RegExpConstructor::getValueProperty): 6508 (KJS::RegExpConstructor::put): 6509 (KJS::RegExpConstructor::putValueProperty): 6510 (KJS::RegExpConstructor::getConstructData): 6511 (KJS::RegExpConstructor::construct): 6512 (KJS::RegExpConstructor::callAsFunction): 6513 (KJS::RegExpConstructor::input): 6514 * kjs/regexp_object.h: 6515 * kjs/string_object.cpp: 6516 (KJS::StringObject::StringObject): 6517 (KJS::StringObject::getOwnPropertySlot): 6518 (KJS::StringObject::put): 6519 (KJS::StringObject::deleteProperty): 6520 (KJS::StringObject::getPropertyNames): 6521 (KJS::StringPrototype::StringPrototype): 6522 (KJS::StringPrototype::getOwnPropertySlot): 6523 (KJS::replace): 6524 (KJS::stringProtoFuncToString): 6525 (KJS::stringProtoFuncValueOf): 6526 (KJS::stringProtoFuncCharAt): 6527 (KJS::stringProtoFuncCharCodeAt): 6528 (KJS::stringProtoFuncConcat): 6529 (KJS::stringProtoFuncIndexOf): 6530 (KJS::stringProtoFuncLastIndexOf): 6531 (KJS::stringProtoFuncMatch): 6532 (KJS::stringProtoFuncSearch): 6533 (KJS::stringProtoFuncReplace): 6534 (KJS::stringProtoFuncSlice): 6535 (KJS::stringProtoFuncSplit): 6536 (KJS::stringProtoFuncSubstr): 6537 (KJS::stringProtoFuncSubstring): 6538 (KJS::stringProtoFuncToLowerCase): 6539 (KJS::stringProtoFuncToUpperCase): 6540 (KJS::stringProtoFuncToLocaleLowerCase): 6541 (KJS::stringProtoFuncToLocaleUpperCase): 6542 (KJS::stringProtoFuncLocaleCompare): 6543 (KJS::stringProtoFuncBig): 6544 (KJS::stringProtoFuncSmall): 6545 (KJS::stringProtoFuncBlink): 6546 (KJS::stringProtoFuncBold): 6547 (KJS::stringProtoFuncFixed): 6548 (KJS::stringProtoFuncItalics): 6549 (KJS::stringProtoFuncStrike): 6550 (KJS::stringProtoFuncSub): 6551 (KJS::stringProtoFuncSup): 6552 (KJS::stringProtoFuncFontcolor): 6553 (KJS::stringProtoFuncFontsize): 6554 (KJS::stringProtoFuncAnchor): 6555 (KJS::stringProtoFuncLink): 6556 (KJS::StringConstructor::StringConstructor): 6557 (KJS::StringConstructor::getConstructData): 6558 (KJS::StringConstructor::construct): 6559 (KJS::StringConstructor::callAsFunction): 6560 (KJS::StringConstructorFunction::StringConstructorFunction): 6561 (KJS::StringConstructorFunction::callAsFunction): 6562 * kjs/string_object.h: 6563 (KJS::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): 6564 * profiler/Profiler.cpp: 6565 (KJS::createCallIdentifier): 6566 6567 2008-06-15 Darin Adler <darin (a] apple.com> 6568 6569 Rubber stamped by Sam. 6570 6571 - use JS prefix and simpler names for basic JavaScriptCore types, 6572 to complement JSValue and JSObject 6573 6574 * JavaScriptCore.exp: 6575 * VM/Machine.cpp: 6576 (KJS::jsLess): 6577 (KJS::jsLessEq): 6578 (KJS::jsAdd): 6579 (KJS::callEval): 6580 (KJS::Machine::execute): 6581 (KJS::Machine::retrieveArguments): 6582 (KJS::Machine::retrieveCaller): 6583 (KJS::Machine::getCallFrame): 6584 (KJS::Machine::getFunctionAndArguments): 6585 * VM/Machine.h: 6586 * VM/Register.h: 6587 * kjs/DebuggerCallFrame.cpp: 6588 (KJS::DebuggerCallFrame::functionName): 6589 * kjs/ExecState.h: 6590 * kjs/JSActivation.cpp: 6591 (KJS::JSActivation::createArgumentsObject): 6592 * kjs/array_instance.cpp: 6593 (KJS::JSArray::checkConsistency): 6594 (KJS::JSArray::JSArray): 6595 (KJS::JSArray::~JSArray): 6596 (KJS::JSArray::getItem): 6597 (KJS::JSArray::lengthGetter): 6598 (KJS::JSArray::inlineGetOwnPropertySlot): 6599 (KJS::JSArray::getOwnPropertySlot): 6600 (KJS::JSArray::put): 6601 (KJS::JSArray::deleteProperty): 6602 (KJS::JSArray::getPropertyNames): 6603 (KJS::JSArray::increaseVectorLength): 6604 (KJS::JSArray::setLength): 6605 (KJS::JSArray::mark): 6606 (KJS::JSArray::sort): 6607 (KJS::JSArray::compactForSorting): 6608 (KJS::JSArray::lazyCreationData): 6609 (KJS::JSArray::setLazyCreationData): 6610 * kjs/array_instance.h: 6611 * kjs/array_object.cpp: 6612 (KJS::ArrayPrototype::ArrayPrototype): 6613 (KJS::ArrayPrototype::getOwnPropertySlot): 6614 (KJS::arrayProtoFuncToString): 6615 (KJS::arrayProtoFuncToLocaleString): 6616 (KJS::arrayProtoFuncConcat): 6617 (KJS::arrayProtoFuncSort): 6618 (KJS::ArrayObjectImp::construct): 6619 * kjs/array_object.h: 6620 * kjs/completion.h: 6621 * kjs/function.cpp: 6622 (KJS::JSFunction::JSFunction): 6623 (KJS::JSFunction::mark): 6624 (KJS::JSFunction::getCallData): 6625 (KJS::JSFunction::callAsFunction): 6626 (KJS::JSFunction::argumentsGetter): 6627 (KJS::JSFunction::callerGetter): 6628 (KJS::JSFunction::lengthGetter): 6629 (KJS::JSFunction::getOwnPropertySlot): 6630 (KJS::JSFunction::put): 6631 (KJS::JSFunction::deleteProperty): 6632 (KJS::JSFunction::getParameterName): 6633 (KJS::JSFunction::getConstructData): 6634 (KJS::JSFunction::construct): 6635 (KJS::IndexToNameMap::IndexToNameMap): 6636 (KJS::Arguments::Arguments): 6637 * kjs/function.h: 6638 * kjs/function_object.cpp: 6639 (KJS::functionProtoFuncToString): 6640 (KJS::functionProtoFuncApply): 6641 (KJS::FunctionObjectImp::construct): 6642 * kjs/internal.cpp: 6643 (KJS::JSString::toPrimitive): 6644 (KJS::JSString::getPrimitiveNumber): 6645 (KJS::JSString::toBoolean): 6646 (KJS::JSString::toNumber): 6647 (KJS::JSString::toString): 6648 (KJS::StringInstance::create): 6649 (KJS::JSString::toObject): 6650 (KJS::JSString::toThisObject): 6651 (KJS::JSString::lengthGetter): 6652 (KJS::JSString::indexGetter): 6653 (KJS::JSString::indexNumericPropertyGetter): 6654 (KJS::JSString::getOwnPropertySlot): 6655 (KJS::JSNumberCell::type): 6656 (KJS::JSNumberCell::toPrimitive): 6657 (KJS::JSNumberCell::getPrimitiveNumber): 6658 (KJS::JSNumberCell::toBoolean): 6659 (KJS::JSNumberCell::toNumber): 6660 (KJS::JSNumberCell::toString): 6661 (KJS::JSNumberCell::toObject): 6662 (KJS::JSNumberCell::toThisObject): 6663 (KJS::JSNumberCell::getUInt32): 6664 (KJS::JSNumberCell::getTruncatedInt32): 6665 (KJS::JSNumberCell::getTruncatedUInt32): 6666 (KJS::GetterSetter::mark): 6667 (KJS::GetterSetter::toPrimitive): 6668 (KJS::GetterSetter::getPrimitiveNumber): 6669 (KJS::GetterSetter::toBoolean): 6670 (KJS::GetterSetter::toNumber): 6671 (KJS::GetterSetter::toString): 6672 (KJS::GetterSetter::toObject): 6673 (KJS::GetterSetter::getOwnPropertySlot): 6674 (KJS::GetterSetter::put): 6675 (KJS::GetterSetter::toThisObject): 6676 * kjs/internal.h: 6677 (KJS::JSString::JSString): 6678 (KJS::JSString::getStringPropertySlot): 6679 * kjs/nodes.cpp: 6680 (KJS::FuncDeclNode::makeFunction): 6681 (KJS::FuncExprNode::makeFunction): 6682 * kjs/nodes.h: 6683 * kjs/object.cpp: 6684 (KJS::JSObject::put): 6685 (KJS::JSObject::deleteProperty): 6686 (KJS::JSObject::defineGetter): 6687 (KJS::JSObject::defineSetter): 6688 (KJS::JSObject::lookupGetter): 6689 (KJS::JSObject::lookupSetter): 6690 (KJS::JSObject::fillGetterPropertySlot): 6691 * kjs/object.h: 6692 (KJS::GetterSetter::GetterSetter): 6693 * kjs/operations.cpp: 6694 (KJS::equal): 6695 (KJS::strictEqual): 6696 * kjs/property_map.cpp: 6697 (KJS::PropertyMap::containsGettersOrSetters): 6698 * kjs/regexp_object.cpp: 6699 (KJS::RegExpMatchesArray::getOwnPropertySlot): 6700 (KJS::RegExpMatchesArray::put): 6701 (KJS::RegExpMatchesArray::deleteProperty): 6702 (KJS::RegExpMatchesArray::getPropertyNames): 6703 (KJS::RegExpMatchesArray::RegExpMatchesArray): 6704 (KJS::RegExpMatchesArray::fillArrayInstance): 6705 * kjs/string_object.cpp: 6706 (KJS::StringInstance::StringInstance): 6707 (KJS::replace): 6708 (KJS::stringProtoFuncReplace): 6709 (KJS::stringProtoFuncToLowerCase): 6710 (KJS::stringProtoFuncToUpperCase): 6711 (KJS::stringProtoFuncToLocaleLowerCase): 6712 (KJS::stringProtoFuncToLocaleUpperCase): 6713 * kjs/string_object.h: 6714 (KJS::StringInstance::internalValue): 6715 * kjs/value.cpp: 6716 (KJS::JSCell::getNumber): 6717 (KJS::JSCell::getString): 6718 (KJS::JSCell::getObject): 6719 (KJS::jsString): 6720 (KJS::jsOwnedString): 6721 * kjs/value.h: 6722 (KJS::JSNumberCell::JSNumberCell): 6723 (KJS::jsNumberCell): 6724 (KJS::JSValue::uncheckedGetNumber): 6725 * profiler/Profiler.cpp: 6726 (KJS::createCallIdentifier): 6727 (KJS::createCallIdentifierFromFunctionImp): 6728 6729 2008-06-15 Maciej Stachowiak <mjs (a] apple.com> 6730 6731 Reviewed by Alexey. 6732 6733 - add emitUnaryOp, emitNullaryOp and emitUnaryOpNoDst; use them 6734 6735 This removes some boilerplate code and also reduces the number of 6736 places that will need to be changed to do on-demand emit of 6737 loads (and thus support k operands). 6738 6739 * VM/CodeGenerator.cpp: 6740 (KJS::CodeGenerator::emitUnaryOp): 6741 (KJS::CodeGenerator::emitNullaryOp): 6742 (KJS::CodeGenerator::emitUnaryOpNoDst): 6743 (KJS::CodeGenerator::emitPushScope): 6744 * VM/CodeGenerator.h: 6745 (KJS::CodeGenerator::emitNewObject): 6746 (KJS::CodeGenerator::emitNewArray): 6747 (KJS::CodeGenerator::emitNot): 6748 (KJS::CodeGenerator::emitBitNot): 6749 (KJS::CodeGenerator::emitToJSNumber): 6750 (KJS::CodeGenerator::emitNegate): 6751 (KJS::CodeGenerator::emitInstanceOf): 6752 (KJS::CodeGenerator::emitTypeOf): 6753 (KJS::CodeGenerator::emitIn): 6754 (KJS::CodeGenerator::emitReturn): 6755 (KJS::CodeGenerator::emitEnd): 6756 (KJS::CodeGenerator::emitGetPropertyNames): 6757 6758 2008-06-15 Alp Toker <alp (a] nuanti.com> 6759 6760 Rubber-stamped by Maciej. 6761 6762 Install 'jsc' application by default. 6763 6764 * GNUmakefile.am: 6765 6766 2008-06-15 Maciej Stachowiak <mjs (a] apple.com> 6767 6768 Reviewed by Oliver. 6769 6770 - rename testkjs to jsc 6771 6772 * GNUmakefile.am: 6773 * JavaScriptCore.vcproj/JavaScriptCore.sln: 6774 * JavaScriptCore.vcproj/jsc: Added. 6775 * JavaScriptCore.vcproj/jsc/jsc.vcproj: Copied from JavaScriptCore.vcproj/testkjs/testkjs.vcproj. 6776 * JavaScriptCore.vcproj/testkjs: Removed. 6777 * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Removed. 6778 * JavaScriptCore.xcodeproj/project.pbxproj: 6779 * jscore.bkl: 6780 * kjs/Shell.cpp: Copied from kjs/testkjs.cpp. 6781 (main): 6782 (printUsageStatement): 6783 (jscmain): 6784 * kjs/jsc.pro: Copied from kjs/testkjs.pro. 6785 * kjs/testkjs.cpp: Removed. 6786 * kjs/testkjs.pro: Removed. 6787 * tests/mozilla/expected.html: 6788 * tests/mozilla/js1_2/Array/tostring_1.js: 6789 * tests/mozilla/js1_2/Array/tostring_2.js: 6790 * tests/mozilla/jsDriver.pl: 6791 6792 2008-06-15 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 6793 6794 Reviewed by Maciej. 6795 6796 Mac build fix. 6797 6798 * JavaScriptCore.xcodeproj/project.pbxproj: 6799 * kjs/nodes.h: 6800 6801 2008-06-15 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 6802 6803 Reviewed by Maciej. 6804 6805 Change the spelling of PrecMultiplicitave to PrecMultiplicative. 6806 6807 * kjs/nodes.h: 6808 (KJS::MultNode::precedence): 6809 (KJS::DivNode::precedence): 6810 (KJS::ModNode::precedence): 6811 6812 2008-06-15 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 6813 6814 Reviewed by Maciej. 6815 6816 Remove unused preprocessor macros related to exceptions in the old 6817 interpreter. 6818 6819 * kjs/nodes.cpp: 6820 6821 2008-06-15 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 6822 6823 Reviewed by Maciej. 6824 6825 Bug 19484: More instructions needs to use temporary registers 6826 <https://bugs.webkit.org/show_bug.cgi?id=19484> 6827 6828 Fix codegen for all binary operations so that temporaries are used if 6829 necessary. This was done by making BinaryOpNode and ReverseBinaryOpNode 6830 subclasses of ExpressionNode, and eliminating the custom emitCode() 6831 methods for the individual node classes. 6832 6833 This only adds 3 new instructions to SunSpider code, and there is no 6834 difference in SunSpider execution time. 6835 6836 * VM/CodeGenerator.cpp: 6837 (KJS::CodeGenerator::emitBitNot): 6838 (KJS::CodeGenerator::emitBinaryOp): 6839 * VM/CodeGenerator.h: 6840 * kjs/grammar.y: 6841 * kjs/nodes.cpp: 6842 (KJS::PreIncResolveNode::emitCode): 6843 (KJS::PreDecResolveNode::emitCode): 6844 (KJS::BinaryOpNode::emitCode): 6845 (KJS::ReverseBinaryOpNode::emitCode): 6846 (KJS::emitReadModifyAssignment): 6847 (KJS::CaseBlockNode::emitCodeForBlock): 6848 * kjs/nodes.h: 6849 (KJS::BinaryOpNode::BinaryOpNode): 6850 (KJS::ReverseBinaryOpNode::ReverseBinaryOpNode): 6851 (KJS::MultNode::): 6852 (KJS::DivNode::): 6853 (KJS::DivNode::precedence): 6854 (KJS::ModNode::): 6855 (KJS::ModNode::precedence): 6856 (KJS::AddNode::): 6857 (KJS::AddNode::precedence): 6858 (KJS::SubNode::): 6859 (KJS::SubNode::precedence): 6860 (KJS::LeftShiftNode::): 6861 (KJS::LeftShiftNode::precedence): 6862 (KJS::RightShiftNode::): 6863 (KJS::RightShiftNode::precedence): 6864 (KJS::UnsignedRightShiftNode::): 6865 (KJS::UnsignedRightShiftNode::precedence): 6866 (KJS::LessNode::): 6867 (KJS::LessNode::precedence): 6868 (KJS::GreaterNode::): 6869 (KJS::GreaterNode::precedence): 6870 (KJS::LessEqNode::): 6871 (KJS::LessEqNode::precedence): 6872 (KJS::GreaterEqNode::): 6873 (KJS::GreaterEqNode::precedence): 6874 (KJS::InstanceOfNode::): 6875 (KJS::InstanceOfNode::precedence): 6876 (KJS::InNode::): 6877 (KJS::InNode::precedence): 6878 (KJS::EqualNode::): 6879 (KJS::EqualNode::precedence): 6880 (KJS::NotEqualNode::): 6881 (KJS::NotEqualNode::precedence): 6882 (KJS::StrictEqualNode::): 6883 (KJS::StrictEqualNode::precedence): 6884 (KJS::NotStrictEqualNode::): 6885 (KJS::NotStrictEqualNode::precedence): 6886 (KJS::BitAndNode::): 6887 (KJS::BitAndNode::precedence): 6888 (KJS::BitOrNode::): 6889 (KJS::BitOrNode::precedence): 6890 (KJS::BitXOrNode::): 6891 (KJS::BitXOrNode::precedence): 6892 * kjs/nodes2string.cpp: 6893 (KJS::LessNode::streamTo): 6894 (KJS::GreaterNode::streamTo): 6895 (KJS::LessEqNode::streamTo): 6896 (KJS::GreaterEqNode::streamTo): 6897 (KJS::InstanceOfNode::streamTo): 6898 (KJS::InNode::streamTo): 6899 (KJS::EqualNode::streamTo): 6900 (KJS::NotEqualNode::streamTo): 6901 (KJS::StrictEqualNode::streamTo): 6902 (KJS::NotStrictEqualNode::streamTo): 6903 (KJS::BitAndNode::streamTo): 6904 (KJS::BitXOrNode::streamTo): 6905 (KJS::BitOrNode::streamTo): 6906 6907 2008-06-14 Darin Adler <darin (a] apple.com> 6908 6909 Rubber stamped by Sam. 6910 6911 - rename a bunch of local symbols within the regular expression code to 6912 follow our usual coding style, and do a few other name tweaks 6913 6914 * pcre/pcre_compile.cpp: 6915 (CompileData::CompileData): 6916 (checkEscape): 6917 (readRepeatCounts): 6918 (compileBranch): 6919 (compileBracket): 6920 (calculateCompiledPatternLength): 6921 (returnError): 6922 (jsRegExpCompile): 6923 * pcre/pcre_exec.cpp: 6924 (MatchStack::MatchStack): 6925 (MatchStack::canUseStackBufferForNextFrame): 6926 (MatchStack::popCurrentFrame): 6927 (match): 6928 (tryFirstByteOptimization): 6929 (tryRequiredByteOptimization): 6930 (jsRegExpExecute): 6931 * pcre/pcre_internal.h: 6932 6933 2008-06-14 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 6934 6935 Reviewed by Darin. 6936 6937 Remove redundant uses of get(). 6938 6939 * kjs/nodes.cpp: 6940 (KJS::BracketAccessorNode::emitCode): 6941 (KJS::AddNode::emitCode): 6942 (KJS::SubNode::emitCode): 6943 (KJS::ReadModifyResolveNode::emitCode): 6944 (KJS::AssignDotNode::emitCode): 6945 (KJS::ReadModifyDotNode::emitCode): 6946 (KJS::AssignBracketNode::emitCode): 6947 (KJS::ReadModifyBracketNode::emitCode): 6948 6949 2008-06-14 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 6950 6951 Reviewed by Maciej. 6952 6953 Make code generation not use a temporary for the left-hand side of an 6954 expression if the right-hand side is a local variable. 6955 6956 * VM/CodeGenerator.cpp: 6957 (KJS::CodeGenerator::isLocal): 6958 * VM/CodeGenerator.h: 6959 (KJS::CodeGenerator::leftHandSideNeedsCopy): 6960 (KJS::CodeGenerator::emitNodeForLeftHandSide): 6961 * kjs/nodes.cpp: 6962 (KJS::ResolveNode::isPure): 6963 (KJS::BracketAccessorNode::emitCode): 6964 (KJS::AddNode::emitCode): 6965 (KJS::SubNode::emitCode): 6966 (KJS::ReadModifyResolveNode::emitCode): 6967 (KJS::AssignDotNode::emitCode): 6968 (KJS::ReadModifyDotNode::emitCode): 6969 (KJS::AssignBracketNode::emitCode): 6970 (KJS::ReadModifyBracketNode::emitCode): 6971 * kjs/nodes.h: 6972 (KJS::ExpressionNode::): 6973 (KJS::BooleanNode::): 6974 (KJS::NumberNode::): 6975 (KJS::StringNode::): 6976 6977 2008-06-14 Darin Adler <darin (a] apple.com> 6978 6979 Reviewed by Sam. 6980 6981 - more of https://bugs.webkit.org/show_bug.cgi?id=17257 6982 start ref counts at 1 instead of 0 for speed 6983 6984 * kjs/nodes.cpp: 6985 (KJS::ParserRefCounted::hasOneRef): Added. Replaces refcount. 6986 * kjs/nodes.h: Replaced refcount with hasOneRef. 6987 6988 * wtf/ListRefPtr.h: 6989 (WTF::ListRefPtr::~ListRefPtr): Changed to use hasOneRef instead of 6990 refcount, so this class can be used with the RefCounted template. 6991 6992 * wtf/RefCounted.h: 6993 (WTF::RefCounted::hasOneRef): Made const, since there's no reason for 6994 it to be non-const. 6995 6996 2008-06-14 Maciej Stachowiak <mjs (a] apple.com> 6997 6998 Reviewed by Oliver. 6999 7000 - initialize local vars as side effect of call instead of in bytecode 7001 1.004x speedup on SunSpider. 7002 7003 This removes just the dispatch overhead for these loads - in the 7004 future, dead store elimination might be able to eliminate them 7005 entirely. 7006 7007 * VM/CodeGenerator.cpp: 7008 (KJS::CodeGenerator::CodeGenerator): For function blocks, don't 7009 emit loads of undefined for var initialization. 7010 * VM/Machine.cpp: 7011 (KJS::slideRegisterWindowForCall): Instead, initialize locals 7012 as part of the call. 7013 7014 2008-06-14 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 7015 7016 Reviewed by Oliver. 7017 7018 Remove helper functions in the parser that are no longer needed. 7019 7020 * kjs/grammar.y: 7021 7022 2008-06-14 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 7023 7024 Reviewed by Oliver. 7025 7026 Bug 19484: More instructions needs to use temporary registers 7027 <https://bugs.webkit.org/show_bug.cgi?id=19484> 7028 7029 Make code generation for AddNode and SubNode use temporaries when 7030 necessary. 7031 7032 * kjs/grammar.y: 7033 * kjs/nodes.cpp: 7034 (KJS::AddNode::emitCode): 7035 (KJS::SubNode::emitCode): 7036 * kjs/nodes.h: 7037 (KJS::AddNode::): 7038 (KJS::SubNode::): 7039 7040 2008-06-13 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 7041 7042 Reviewed by Maciej. 7043 7044 Combine TrueNode and FalseNode to make BooleanNode, and remove the 7045 unused class PlaceholderTrueNode. 7046 7047 * kjs/grammar.y: 7048 * kjs/nodes.cpp: 7049 (KJS::BooleanNode::emitCode): 7050 * kjs/nodes.h: 7051 (KJS::BooleanNode::): 7052 (KJS::BooleanNode::precedence): 7053 * kjs/nodes2string.cpp: 7054 (KJS::BooleanNode::streamTo): 7055 7056 2008-06-13 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 7057 7058 Reviewed by Maciej. 7059 7060 Eliminate the use of temporaries to store the left hand side of an 7061 expression when the right hand side is a constant. This slightly 7062 improves the generated bytecode for a few SunSpider tests, but it is 7063 mostly in preparation for fixing 7064 7065 Bug 19484: More instructions needs to use temporary registers 7066 <https://bugs.webkit.org/show_bug.cgi?id=19484> 7067 7068 * VM/CodeGenerator.h: 7069 (KJS::CodeGenerator::leftHandSideNeedsCopy): 7070 (KJS::CodeGenerator::emitNodeForLeftHandSide): 7071 * kjs/nodes.cpp: 7072 (KJS::BracketAccessorNode::emitCode): 7073 (KJS::ReadModifyResolveNode::emitCode): 7074 (KJS::AssignDotNode::emitCode): 7075 (KJS::ReadModifyDotNode::emitCode): 7076 (KJS::AssignBracketNode::emitCode): 7077 (KJS::ReadModifyBracketNode::emitCode): 7078 * kjs/nodes.h: 7079 (KJS::ExpressionNode::): 7080 (KJS::FalseNode::): 7081 (KJS::TrueNode::): 7082 (KJS::NumberNode::): 7083 (KJS::StringNode::): 7084 7085 2008-06-13 Maciej Stachowiak <mjs (a] apple.com> 7086 7087 Reviewed by Oliver. 7088 7089 - prettify opcode stats output 7090 7091 I changed things to be a bit more aligned, also there is a new 7092 section listing most common opcodes and most common sequences that 7093 include them. 7094 7095 * VM/Opcode.cpp: 7096 (KJS::OpcodeStats::~OpcodeStats): 7097 * VM/Opcode.h: 7098 7099 2008-06-13 Kevin McCullough <kmccullough (a] apple.com> 7100 7101 Reviewed by Geoff. 7102 7103 <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the 7104 profiler. 7105 - Remove recursion from exclude(). This leaves only focus() to fix. 7106 7107 * JavaScriptCore.exp: Change the signatures of the exported functions. 7108 * profiler/Profile.cpp: 7109 (KJS::Profile::forEach): I added a traverseNextNodePreOrder() function 7110 and so needed to distinguish the other function by labeling it 7111 traverseNextNodePostOrder(). 7112 (KJS::Profile::exclude): All new exclude that iteratively walks the tree 7113 * profiler/Profile.h: 7114 (KJS::Profile::focus): Add a null check for m_head. 7115 * profiler/ProfileNode.cpp: 7116 (KJS::ProfileNode::traverseNextNodePostOrder): Renamed 7117 (KJS::ProfileNode::traverseNextNodePreOrder): Walks the tree in pre- 7118 order, where the parent is processed before the children. 7119 (KJS::ProfileNode::setTreeVisible): Iterate over the sub-tree and set 7120 all of the nodes visible value. This changes another function that used 7121 recursion. 7122 (KJS::ProfileNode::exclude): Remove recursion from this function. 7123 Because we now check for m_visible and we are walking the tree in pre- 7124 order we do not need to check if an excluded node is in an excluded 7125 sub-tree. 7126 * profiler/ProfileNode.h: Added specific selfTime functions to 7127 facilitate exclude(). 7128 (KJS::ProfileNode::setSelfTime): 7129 (KJS::ProfileNode::setActualSelfTime): 7130 (KJS::ProfileNode::setVisibleSelfTime): 7131 7132 2008-06-12 Darin Adler <darin (a] apple.com> 7133 7134 Reviewed by Maciej. 7135 7136 - https://bugs.webkit.org/show_bug.cgi?id=19434 7137 speed up SunSpider by avoiding some string boxing 7138 7139 Speeds up SunSpider by 1.1%. 7140 7141 Optimized code path for getting built-in properties from strings -- avoid 7142 boxing with a string object in that case. We can make further changes to avoid 7143 even more boxing, but this change alone is a win. 7144 7145 * API/JSCallbackObjectFunctions.h: 7146 (KJS::JSCallbackObject::staticValueGetter): Use isObject instead of inherits 7147 in asssert, since the type of slotBase() is now JSValue, not JSObject. 7148 (KJS::JSCallbackObject::staticFunctionGetter): Ditto. 7149 (KJS::JSCallbackObject::callbackGetter): Ditto. 7150 7151 * kjs/internal.cpp: 7152 (KJS::StringImp::getPrimitiveNumber): Updated for change of data member name. 7153 (KJS::StringImp::toBoolean): Ditto. 7154 (KJS::StringImp::toNumber): Ditto. 7155 (KJS::StringImp::toString): Ditto. 7156 (KJS::StringInstance::create): Added; avoids a bit of cut and paste code. 7157 (KJS::StringImp::toObject): Use StringInstance::create. 7158 (KJS::StringImp::toThisObject): Ditto. 7159 (KJS::StringImp::lengthGetter): Added. Replaces the getter that used to live in 7160 the StringInstance class. 7161 (KJS::StringImp::indexGetter): Ditto. 7162 (KJS::StringImp::indexNumericPropertyGetter): Ditto. 7163 (KJS::StringImp::getOwnPropertySlot): Added. Deals with built in properties of 7164 the string class without creating a StringInstance. 7165 7166 * kjs/internal.h: 7167 (KJS::StringImp::getStringPropertySlot): Added. To be used by both the string 7168 and string object getOwnPropertySlot function. 7169 7170 * kjs/lookup.h: 7171 (KJS::staticFunctionGetter): Updated since slotBase() is now a JSValue rather 7172 than a JSObject. 7173 7174 * kjs/object.h: Removed PropertySlot::slotBase() function, which can now move 7175 back into property_slot.h where it belongs since it doesn't have to cast to 7176 JSObject*. 7177 7178 * kjs/property_slot.cpp: 7179 (KJS::PropertySlot::functionGetter): Updated since slot.slotBase() is now a JSValue* 7180 instead of JSObject*. setGetterSlot still guarantees the base is a JSObject*. 7181 * kjs/property_slot.h: 7182 (KJS::PropertySlot::PropertySlot): Changed base to JSValue* intead of JSCell*. 7183 (KJS::PropertySlot::setStaticEntry): Ditto. 7184 (KJS::PropertySlot::setCustom): Ditto. 7185 (KJS::PropertySlot::setCustomIndex): Ditto. 7186 (KJS::PropertySlot::setCustomNumeric): Ditto. 7187 (KJS::PropertySlot::slotBase): Moved inline here since it no longer involves a 7188 downcast to JSObject*. 7189 (KJS::PropertySlot::setBase): Changed to JSValue*. 7190 7191 * kjs/string_object.cpp: 7192 (KJS::StringInstance::getOwnPropertySlot): Changed to use getStringPropertySlot 7193 instead of coding the properties here. This allows sharing the code with StringImp. 7194 7195 * kjs/string_object.h: Removed inlineGetOwnPropertySlot, lengthGetter, and indexGetter. 7196 Made one of the constructors protected. 7197 7198 * kjs/value.h: Made getOwnPropertySlot private in the JSCell class -- this is better 7199 since it's not the real JSObject getOwnPropertySlot semantic and most callers shouldn't 7200 use it. 7201 7202 2008-06-12 Alexey Proskuryakov <ap (a] webkit.org> 7203 7204 Reviewed by Maciej. 7205 7206 Preparation to making JavaScript heap per-thread. 7207 7208 * kjs/collector.cpp: 7209 (KJS::Collector::collect): 7210 * kjs/collector.h: 7211 (KJS::Collector::markListSet): 7212 The collector now holds the list of protected lists itself, to be made per-instance. 7213 7214 * kjs/list.h: Changed to hold a pointer to a mark set this list is in, if any. 7215 (KJS::List::List): Explicitly initialize m_size with zero, as m_vector.size() is 7216 guaranteed to be such anyway. 7217 (KJS::List::append): Changed the fast case to only be executed as long as inline buffer 7218 is used, because otherwise, we now do more expensive checks. 7219 7220 * kjs/list.cpp: 7221 (KJS::List::markLists): Renamed from markProtectedListsSlowCase, made it take the list set 7222 as a parameter. 7223 (KJS::List::slowAppend): If a non-immediate value is appended, the list needs to be added 7224 to an appropriate Heap's protected list. For now, a static Collector::markListSet() is 7225 used, but the code is layed out in preparation to making the switch to multiple heaps. 7226 7227 * JavaScriptCore.exp: Updated export list. 7228 7229 2008-06-12 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 7230 7231 Reviewed by Maciej. 7232 7233 Bug 19510: CodeBlock::needsFullScopeChain not always set for global code 7234 <https://bugs.webkit.org/show_bug.cgi?id=19510> 7235 7236 This fixes the symptoms by using CodeGenerator::m_codeType to determine 7237 when to use temporaries instead of CodeBlock::needsFullScopeChain, but 7238 it does not fix the problem itself. 7239 7240 * VM/CodeGenerator.h: 7241 (KJS::CodeGenerator::leftHandSideNeedsCopy): 7242 7243 2008-06-11 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 7244 7245 Reviewed by Maciej. 7246 7247 Bug 19498: REGRESSION (r34497): crash while loading GMail 7248 <https://bugs.webkit.org/show_bug.cgi?id=19498> 7249 7250 * VM/CodeGenerator.cpp: 7251 (KJS::CodeGenerator::emitJumpIfTrueMayCombine): 7252 (KJS::CodeGenerator::emitJumpIfTrue): 7253 * VM/CodeGenerator.h: 7254 * kjs/nodes.cpp: 7255 (KJS::DoWhileNode::emitCode): 7256 (KJS::WhileNode::emitCode): 7257 (KJS::ForNode::emitCode): 7258 (KJS::CaseBlockNode::emitCodeForBlock): 7259 7260 2008-06-11 Darin Adler <darin (a] apple.com> 7261 7262 Reviewed by Maciej. 7263 7264 - a little bit of cleanup and prep for some upcoming optimizations 7265 7266 * JavaScriptCore.exp: Re-sorted this file (with sort command line tool). 7267 * VM/CodeBlock.cpp: 7268 (KJS::CodeBlock::dump): Fixed printf to avoid warnings -- to use %lu we 7269 need to make sure the type is unsigned long. 7270 * kjs/object.cpp: 7271 (KJS::Error::create): Eliminated unused error names array, and also put 7272 the strings into the code since there was already a switch statment. 7273 This also avoids having to contemplate a hypothetical access past the 7274 end of the array. 7275 * kjs/object.h: Got rid of errorNames. 7276 * kjs/property_slot.cpp: Deleted unused ungettableGetter. 7277 * kjs/property_slot.h: Ditto. 7278 * wtf/AlwaysInline.h: Added LIKELY alongside UNLIKELY. 7279 7280 2008-06-11 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 7281 7282 Reviewed by Darin. 7283 7284 Bug 19457: Create fused opcodes for tests and conditional jumps 7285 <https://bugs.webkit.org/show_bug.cgi?id=19457> 7286 7287 Add a new jless instruction, and modify the code generator to emit it 7288 instead of the pair (less, jtrue). 7289 7290 Gives a 3.6% improvement on SunSpider. 7291 7292 * VM/CodeBlock.cpp: 7293 (KJS::CodeBlock::dump): 7294 * VM/CodeGenerator.cpp: 7295 (KJS::CodeGenerator::CodeGenerator): 7296 (KJS::CodeGenerator::emitOpcode): 7297 (KJS::CodeGenerator::retrieveLastBinaryOp): 7298 (KJS::CodeGenerator::rewindBinaryOp): 7299 (KJS::CodeGenerator::emitJump): 7300 (KJS::CodeGenerator::emitJumpIfTrue): 7301 (KJS::CodeGenerator::emitJumpIfFalse): 7302 (KJS::CodeGenerator::emitMove): 7303 (KJS::CodeGenerator::emitNot): 7304 (KJS::CodeGenerator::emitEqual): 7305 (KJS::CodeGenerator::emitNotEqual): 7306 (KJS::CodeGenerator::emitStrictEqual): 7307 (KJS::CodeGenerator::emitNotStrictEqual): 7308 (KJS::CodeGenerator::emitLess): 7309 (KJS::CodeGenerator::emitLessEq): 7310 (KJS::CodeGenerator::emitPreInc): 7311 (KJS::CodeGenerator::emitPreDec): 7312 (KJS::CodeGenerator::emitPostInc): 7313 (KJS::CodeGenerator::emitPostDec): 7314 (KJS::CodeGenerator::emitToJSNumber): 7315 (KJS::CodeGenerator::emitNegate): 7316 (KJS::CodeGenerator::emitAdd): 7317 (KJS::CodeGenerator::emitMul): 7318 (KJS::CodeGenerator::emitDiv): 7319 (KJS::CodeGenerator::emitMod): 7320 (KJS::CodeGenerator::emitSub): 7321 (KJS::CodeGenerator::emitLeftShift): 7322 (KJS::CodeGenerator::emitRightShift): 7323 (KJS::CodeGenerator::emitUnsignedRightShift): 7324 (KJS::CodeGenerator::emitBitAnd): 7325 (KJS::CodeGenerator::emitBitXOr): 7326 (KJS::CodeGenerator::emitBitOr): 7327 (KJS::CodeGenerator::emitBitNot): 7328 (KJS::CodeGenerator::emitInstanceOf): 7329 (KJS::CodeGenerator::emitTypeOf): 7330 (KJS::CodeGenerator::emitIn): 7331 (KJS::CodeGenerator::emitLoad): 7332 (KJS::CodeGenerator::emitNewObject): 7333 (KJS::CodeGenerator::emitNewArray): 7334 (KJS::CodeGenerator::emitResolve): 7335 (KJS::CodeGenerator::emitGetScopedVar): 7336 (KJS::CodeGenerator::emitPutScopedVar): 7337 (KJS::CodeGenerator::emitResolveBase): 7338 (KJS::CodeGenerator::emitResolveWithBase): 7339 (KJS::CodeGenerator::emitResolveFunction): 7340 (KJS::CodeGenerator::emitGetById): 7341 (KJS::CodeGenerator::emitPutById): 7342 (KJS::CodeGenerator::emitPutGetter): 7343 (KJS::CodeGenerator::emitPutSetter): 7344 (KJS::CodeGenerator::emitDeleteById): 7345 (KJS::CodeGenerator::emitGetByVal): 7346 (KJS::CodeGenerator::emitPutByVal): 7347 (KJS::CodeGenerator::emitDeleteByVal): 7348 (KJS::CodeGenerator::emitPutByIndex): 7349 (KJS::CodeGenerator::emitNewFunction): 7350 (KJS::CodeGenerator::emitNewRegExp): 7351 (KJS::CodeGenerator::emitNewFunctionExpression): 7352 (KJS::CodeGenerator::emitCall): 7353 (KJS::CodeGenerator::emitReturn): 7354 (KJS::CodeGenerator::emitEnd): 7355 (KJS::CodeGenerator::emitConstruct): 7356 (KJS::CodeGenerator::emitPushScope): 7357 (KJS::CodeGenerator::emitPopScope): 7358 (KJS::CodeGenerator::emitDebugHook): 7359 (KJS::CodeGenerator::emitComplexJumpScopes): 7360 (KJS::CodeGenerator::emitJumpScopes): 7361 (KJS::CodeGenerator::emitNextPropertyName): 7362 (KJS::CodeGenerator::emitGetPropertyNames): 7363 (KJS::CodeGenerator::emitCatch): 7364 (KJS::CodeGenerator::emitThrow): 7365 (KJS::CodeGenerator::emitNewError): 7366 (KJS::CodeGenerator::emitJumpSubroutine): 7367 (KJS::CodeGenerator::emitSubroutineReturn): 7368 * VM/CodeGenerator.h: 7369 * VM/Machine.cpp: 7370 (KJS::Machine::privateExecute): 7371 * VM/Opcode.cpp: 7372 * VM/Opcode.h: 7373 7374 2008-06-11 Darin Adler <darin (a] apple.com> 7375 7376 Reviewed by Alexey. 7377 7378 - fix https://bugs.webkit.org/show_bug.cgi?id=19442 7379 JavaScript array implementation doesn't maintain m_numValuesInVector when sorting 7380 7381 * kjs/array_instance.cpp: 7382 (KJS::ArrayInstance::checkConsistency): Added. Empty inline version for when 7383 consistency checks are turned off. 7384 (KJS::ArrayInstance::ArrayInstance): Check consistency after construction. 7385 (KJS::ArrayInstance::~ArrayInstance): Check consistency before destruction. 7386 (KJS::ArrayInstance::put): Check consistency before and after. 7387 (KJS::ArrayInstance::deleteProperty): Ditto. 7388 (KJS::ArrayInstance::setLength): Ditto. 7389 (KJS::compareByStringPairForQSort): Use typedef for clarity. 7390 (KJS::ArrayInstance::sort): Check consistency before and after. Also broke the loop 7391 to set up sorting into two separate passes. Added FIXMEs about various exception 7392 safety issues. Added code to set m_numValuesInVector after sorting. 7393 (KJS::ArrayInstance::compactForSorting): Ditto. 7394 7395 * kjs/array_instance.h: Added a definition of an enum for the types of consistency 7396 check and a declaration of the consistency checking function. 7397 7398 2008-06-10 Kevin Ollivier <kevino (a] theolliviers.com> 7399 7400 wx build fix. Link against libedit on Mac since HAVE(READLINE) is defined there. 7401 7402 * jscore.bkl: 7403 7404 2008-06-10 Alexey Proskuryakov <ap (a] webkit.org> 7405 7406 Reviewed by Darin. 7407 7408 https://bugs.webkit.org/show_bug.cgi?id=16503 7409 match limit takes at least 13% of the time on the SunSpider regexp-dna test 7410 7411 Make the limit test slightly more efficient. It is not clear how much of a win it is, 7412 as the improvement on regexp-dna varies from 2.3% to 0.6% depending on what revision I 7413 apply the patch to. Today, the win on regexp-dna was minimal, but the total win was whopping 7414 0.5%, due to random code generation changes. 7415 7416 * pcre/pcre_exec.cpp: (match): Avoid loading a constant on each iteration. 7417 7418 2008-06-09 Alp Toker <alp (a] nuanti.com> 7419 7420 gcc3/autotools build fix. Add explicit -O2 -fno-strict-aliasing to 7421 each of the tools since these are no longer set globally. 7422 7423 * GNUmakefile.am: 7424 7425 2008-06-09 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 7426 7427 Reviewed by Sam. 7428 7429 Add an include for readline/history.h to fix the build for Darwin users 7430 with the GNU readline library installed. Also, clean up the style of 7431 the HAVE(READLINE) check. 7432 7433 * kjs/testkjs.cpp: 7434 (runInteractive): 7435 7436 2008-06-09 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 7437 7438 Reviewed by Darin. 7439 7440 Bug 17531: Add interactive mode to testkjs 7441 <https://bugs.webkit.org/show_bug.cgi?id=17531> 7442 7443 This is a cleaned up version of Sam's earlier patch to add an 7444 interactive mode to testkjs. 7445 7446 Readline support is only enabled on Darwin platforms for now, but 7447 other ports can enable it by defining HAVE_READLINE in kjs/config.h. 7448 7449 * JavaScriptCore.xcodeproj/project.pbxproj: 7450 * kjs/config.h: 7451 * kjs/testkjs.cpp: 7452 (Options::Options): 7453 (runWithScripts): 7454 (runInteractive): 7455 (printUsageStatement): 7456 (parseArguments): 7457 (kjsmain): 7458 7459 2008-06-08 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 7460 7461 Reviewed by Darin. 7462 7463 Bug 19346: REGRESSION: Mootools 1.2 Class inheritance broken in post-SquirrelFish merge 7464 <https://bugs.webkit.org/show_bug.cgi?id=19346> 7465 7466 A check for whether a function's caller is eval code accidentally included 7467 the case where the caller's caller is native code. Add a CodeType field to 7468 CodeBlock and use this for the eval caller test instead. 7469 7470 * VM/CodeBlock.h: 7471 (KJS::CodeBlock::CodeBlock): 7472 (KJS::ProgramCodeBlock::ProgramCodeBlock): 7473 (KJS::EvalCodeBlock::EvalCodeBlock): 7474 * VM/Machine.cpp: 7475 (KJS::getCallerFunctionOffset): 7476 * kjs/nodes.cpp: 7477 (KJS::FunctionBodyNode::generateCode): 7478 (KJS::ProgramNode::generateCode): 7479 7480 2008-06-07 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 7481 7482 Reviewed by Dan Bernstein. 7483 7484 Bug 17928: testkjs shouldn't require "-f" 7485 <https://bugs.webkit.org/show_bug.cgi?id=17928> 7486 7487 * kjs/testkjs.cpp: 7488 (printUsageStatement): 7489 (parseArguments): 7490 7491 2008-06-07 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 7492 7493 Reviewed by Eric. 7494 7495 Bug 17548: JavaScriptCore print(a, b) differs from Spidermonkey Behavior 7496 <https://bugs.webkit.org/show_bug.cgi?id=17548> 7497 7498 * kjs/testkjs.cpp: 7499 (functionPrint): 7500 7501 2008-06-07 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 7502 7503 Reviewed by Sam. 7504 7505 Bug 17547: JavaScriptCore print() differs from Spidermonkey Behavior 7506 <https://bugs.webkit.org/show_bug.cgi?id=17547> 7507 7508 * kjs/testkjs.cpp: 7509 (functionPrint): 7510 7511 2008-06-07 Alexey Proskuryakov <ap (a] webkit.org> 7512 7513 More build fixes. 7514 7515 * kjs/JSGlobalData.cpp: Fixed an included file name for case-sensitive file systems, fixed 7516 JSGlobalData::threadInstance() for non-multithreaded builds. 7517 7518 2008-06-07 Alexey Proskuryakov <ap (a] webkit.org> 7519 7520 Build fix - actually adding JSGlobalData.cpp to non-Mac builds! 7521 7522 * GNUmakefile.am: 7523 * JavaScriptCore.pri: 7524 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 7525 * JavaScriptCoreSources.bkl: 7526 7527 2008-06-07 Alexey Proskuryakov <ap (a] webkit.org> 7528 7529 Try to fix Gtk/gcc 4.3 build. 7530 7531 * kjs/JSGlobalData.h: Include ustring.h instead of forward-declaring UString::Rep. 7532 7533 2008-06-06 Alexey Proskuryakov <ap (a] webkit.org> 7534 7535 Reviewed by Darin. 7536 7537 Combine per-thread objects into one, to make it easier to support legacy clients (for 7538 which they shouldn't be really per-thread). 7539 7540 No change on SunSpider total. 7541 7542 * JavaScriptCore.xcodeproj/project.pbxproj: Added JSGlobalData.{h,cpp} 7543 7544 * kjs/JSGlobalData.cpp: Added. 7545 (KJS::JSGlobalData::JSGlobalData): 7546 (KJS::JSGlobalData::~JSGlobalData): 7547 (KJS::JSGlobalData::threadInstance): 7548 * kjs/JSGlobalData.h: Added. 7549 This class encapsulates all data that should be per-thread (or shared between legacy clients). 7550 It will also keep a Heap pointer, but right now, Heap (Collector) methods are all static. 7551 7552 * kjs/identifier.h: 7553 (KJS::Identifier::Identifier): 7554 Added a constructor explicitly taking JSGlobalData to access IdentifierTable. Actually, 7555 all of them should, but this will be a separate patch. 7556 7557 * kjs/identifier.cpp: 7558 (KJS::IdentifierTable::literalTable): 7559 (KJS::createIdentifierTable): 7560 (KJS::deleteIdentifierTable): 7561 (KJS::Identifier::add): 7562 (KJS::Identifier::addSlowCase): 7563 Combined IdentifierTable and LiteralIdentifierTable into a single class for simplicity. 7564 7565 * kjs/grammar.y: kjsyyparse now takes JSGlobalData, not just a Lexer. 7566 7567 * kjs/nodes.cpp: 7568 (KJS::Node::Node): 7569 (KJS::EvalFunctionCallNode::emitCode): 7570 (KJS::ScopeNode::ScopeNode): 7571 Changed to access Lexer and Parser via JSGlobalData::threadInstance(). This is also a 7572 temporary measure, they will need to use JSGlobalData explicitly. 7573 7574 * VM/CodeGenerator.cpp: 7575 (KJS::CodeGenerator::CodeGenerator): 7576 * VM/CodeGenerator.h: 7577 * VM/Machine.cpp: 7578 (KJS::callEval): 7579 * kjs/CommonIdentifiers.cpp: 7580 (KJS::CommonIdentifiers::CommonIdentifiers): 7581 * kjs/CommonIdentifiers.h: 7582 * kjs/DebuggerCallFrame.cpp: 7583 (KJS::DebuggerCallFrame::evaluate): 7584 * kjs/ExecState.cpp: 7585 (KJS::ExecState::ExecState): 7586 * kjs/ExecState.h: 7587 (KJS::ExecState::globalData): 7588 (KJS::ExecState::identifierTable): 7589 (KJS::ExecState::propertyNames): 7590 (KJS::ExecState::emptyList): 7591 (KJS::ExecState::lexer): 7592 (KJS::ExecState::parser): 7593 (KJS::ExecState::arrayTable): 7594 (KJS::ExecState::dateTable): 7595 (KJS::ExecState::mathTable): 7596 (KJS::ExecState::numberTable): 7597 (KJS::ExecState::RegExpImpTable): 7598 (KJS::ExecState::RegExpObjectImpTable): 7599 (KJS::ExecState::stringTable): 7600 * kjs/InitializeThreading.cpp: 7601 (KJS::initializeThreadingOnce): 7602 * kjs/JSGlobalObject.cpp: 7603 (KJS::JSGlobalObject::init): 7604 * kjs/JSGlobalObject.h: 7605 (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): 7606 (KJS::JSGlobalObject::head): 7607 (KJS::JSGlobalObject::globalData): 7608 * kjs/Parser.cpp: 7609 (KJS::Parser::parse): 7610 * kjs/Parser.h: 7611 * kjs/function.cpp: 7612 (KJS::FunctionImp::getParameterName): 7613 (KJS::IndexToNameMap::unMap): 7614 (KJS::globalFuncEval): 7615 * kjs/function_object.cpp: 7616 (KJS::FunctionObjectImp::construct): 7617 * kjs/interpreter.cpp: 7618 (KJS::Interpreter::checkSyntax): 7619 (KJS::Interpreter::evaluate): 7620 * kjs/lexer.cpp: 7621 (kjsyylex): 7622 * kjs/lexer.h: 7623 * kjs/testkjs.cpp: 7624 (prettyPrintScript): 7625 Updated for the above changes. Most of threadInstance uses here will need to be replaced with 7626 explicitly passed pointers to support legacy JSC clients. 7627 7628 * JavaScriptCore.exp: Removed KJS::parser(). 7629 7630 2008-06-06 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 7631 7632 Reviewed by Oliver. 7633 7634 Bug 19424: Add support for logging opcode pair counts 7635 <https://bugs.webkit.org/show_bug.cgi?id=19424> 7636 7637 * VM/Machine.cpp: 7638 (KJS::Machine::privateExecute): 7639 * VM/Opcode.cpp: 7640 (KJS::OpcodeStats::OpcodeStats): 7641 (KJS::compareOpcodeIndices): 7642 (KJS::compareOpcodePairIndices): 7643 (KJS::OpcodeStats::~OpcodeStats): 7644 (KJS::OpcodeStats::recordInstruction): 7645 (KJS::OpcodeStats::resetLastInstruction): 7646 * VM/Opcode.h: 7647 7648 2008-06-06 Kevin McCullough <kmccullough (a] apple.com> 7649 7650 Reviewed by Adam. 7651 7652 <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the 7653 profiler. 7654 - Change the remaining functions that do not take arguments, from using 7655 recursion to using iteration. 7656 7657 * JavaScriptCore.exp: 7658 * profiler/Profile.cpp: 7659 (KJS::stopProfiling): 7660 (KJS::restoreAll): 7661 (KJS::Profile::stopProfiling): Use foreach instead of recursion. 7662 (KJS::Profile::restoreAll): Ditto. 7663 * profiler/Profile.h: 7664 * profiler/ProfileNode.cpp: Remove recursion. 7665 (KJS::ProfileNode::stopProfiling): 7666 (KJS::ProfileNode::restore): 7667 * profiler/ProfileNode.h: 7668 7669 2008-06-05 Oliver Hunt <oliver (a] apple.com> 7670 7671 Reviewed by Alexey. 7672 7673 Fix Greater and GreaterEq nodes to emit code for the left 7674 and right sub-expressions in the correct order. 7675 7676 * kjs/nodes.cpp: 7677 (KJS::GreaterNode::emitCode): 7678 (KJS::GreaterEqNode::emitCode): 7679 7680 2008-06-05 Antti Koivisto <antti (a] apple.com> 7681 7682 Reviewed by Alp Toker. 7683 7684 Fix whitespaces. 7685 7686 * kjs/collector.cpp: 7687 (KJS::getPlatformThreadRegisters): 7688 7689 2008-06-05 Antti Koivisto <antti (a] apple.com> 7690 7691 Reviewed by Darin. 7692 7693 Support compiling JavaScriptCore for ARM. 7694 7695 * kjs/collector.cpp: 7696 (KJS::getPlatformThreadRegisters): 7697 (KJS::otherThreadStackPointer): 7698 7699 2008-06-05 Kevin McCullough <kmccullough (a] apple.com> 7700 7701 Reviewed by Jon. 7702 7703 - Name changes. 7704 7705 * JavaScriptCore.exp: 7706 * profiler/Profile.cpp: 7707 (KJS::Profile::Profile): 7708 (KJS::Profile::stopProfiling): 7709 (KJS::Profile::didExecute): 7710 (KJS::Profile::forEach): 7711 (KJS::Profile::debugPrintData): 7712 (KJS::Profile::debugPrintDataSampleStyle): 7713 * profiler/Profile.h: 7714 (KJS::Profile::callTree): 7715 (KJS::Profile::totalTime): 7716 (KJS::Profile::sortTotalTimeDescending): 7717 (KJS::Profile::sortTotalTimeAscending): 7718 (KJS::Profile::sortSelfTimeDescending): 7719 (KJS::Profile::sortSelfTimeAscending): 7720 (KJS::Profile::sortCallsDescending): 7721 (KJS::Profile::sortCallsAscending): 7722 (KJS::Profile::sortFunctionNameDescending): 7723 (KJS::Profile::sortFunctionNameAscending): 7724 (KJS::Profile::focus): 7725 (KJS::Profile::exclude): 7726 (KJS::Profile::restoreAll): 7727 7728 2008-06-05 Geoffrey Garen <ggaren (a] apple.com> 7729 7730 Reviewed by Stephanie Lewis. 7731 7732 Added the -fno-move-loop-invariants flag to the pcre_exec.cpp build, to 7733 tell GCC not to perform loop invariant motion, since GCC's loop 7734 invariant motion doesn't do very well with computed goto code. 7735 7736 SunSpider reports no change. 7737 7738 2008-06-05 Geoffrey Garen <ggaren (a] apple.com> 7739 7740 Reviewed by Stephanie Lewis. 7741 7742 Added the -fno-tree-pre flag to the Machine.cpp build, to tell GCC not 7743 to perform Partial Redundancy Elimination (PRE) on trees in Machine.cpp, 7744 since GCC's PRE doesn't do very well with computed goto code. 7745 7746 SunSpider reports a .7% speedup. 7747 7748 2008-06-05 Geoffrey Garen <ggaren (a] apple.com> 7749 7750 Reviewed by Stephanie Lewis (or maybe the other way around). 7751 7752 Minor change to PCRE to help out certain compilers. 7753 7754 SunSpider reports no change, maybe a small speedup. 7755 7756 * pcre/pcre_exec.cpp: 7757 (match): Use instructionPtr++ a little less, to avoid confusing the 7758 optimizer. 7759 7760 2008-06-05 Alexey Proskuryakov <ap (a] webkit.org> 7761 7762 Re-landing an independent part of a previously rolled out threading patch. 7763 7764 * wtf/ThreadSpecific.h: Make sure to initialize POD thread-specific varaibles, too 7765 (replaced "new T" with "new T()"). 7766 7767 2008-06-05 Maciej Stachowiak <mjs (a] apple.com> 7768 7769 Reviewed by Hyatt. 7770 7771 - force inlining of a template function that only has one call site per specialization 7772 1.3% speedup on SunSpider 7773 7774 * kjs/collector.cpp: 7775 (KJS::Collector::heapAllocate): This template function is only 7776 called from allocate() and allocateNumber() (once per 7777 specialization) and the extra call overhead for GC allocation 7778 shows up, so force inlining. 7779 7780 2008-06-05 Maciej Stachowiak <mjs (a] apple.com> 7781 7782 Reviewed by Alexey and Oliver. 7783 7784 - remove profiler fetch hack 7785 I measure an 0.5% progression from this, others show a wash. It seems not needed any more. 7786 7787 * VM/Machine.cpp: 7788 (KJS::Machine::privateExecute): 7789 7790 2008-06-05 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 7791 7792 Reviewed by Maciej. 7793 7794 Bug 19400: subscript operator does not protect base when necessary 7795 <https://bugs.webkit.org/show_bug.cgi?id=19400> 7796 7797 Use a temporary for the base in BracketAccessorNode if the subscript 7798 might possibly modify it. 7799 7800 * kjs/grammar.y: 7801 * kjs/nodes.cpp: 7802 (KJS::BracketAccessorNode::emitCode): 7803 * kjs/nodes.h: 7804 (KJS::BracketAccessorNode::): 7805 7806 2008-06-04 Sam Weinig <sam (a] webkit.org> 7807 7808 Reviewed by Maciej Stachowiak. 7809 7810 Big cleanup of formatting and whitespace. 7811 7812 2008-06-04 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 7813 7814 Reviewed by Oliver. 7815 7816 Add an option to dump statistics on executed instructions. 7817 7818 * VM/Machine.cpp: 7819 (KJS::Machine::privateExecute): 7820 * VM/Opcode.cpp: 7821 (KJS::OpcodeStats::~OpcodeStats): 7822 (KJS::OpcodeStats::recordInstruction): 7823 * VM/Opcode.h: 7824 7825 2008-06-04 Kevin McCullough <kmccullough (a] apple.com> 7826 7827 Reviewed by Geoff. 7828 7829 <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the 7830 profiler. 7831 - This patch removes the use of recursion for the sort functions. 7832 7833 * JavaScriptCore.exp: Change the signatures of the functions being 7834 exported. 7835 * profiler/Profile.cpp: 7836 (KJS::Profile::sort): This generic function will accept any of the 7837 static sort functions and apply them to the whole tree. 7838 * profiler/Profile.h: All of the sorting functions now call the new 7839 sort() function. 7840 (KJS::Profile::sortTotalTimeDescending): 7841 (KJS::Profile::sortTotalTimeAscending): 7842 (KJS::Profile::sortSelfTimeDescending): 7843 (KJS::Profile::sortSelfTimeAscending): 7844 (KJS::Profile::sortCallsDescending): 7845 (KJS::Profile::sortCallsAscending): 7846 (KJS::Profile::sortFunctionNameDescending): 7847 (KJS::Profile::sortFunctionNameAscending): 7848 * profiler/ProfileNode.cpp: 7849 (KJS::ProfileNode::ProfileNode): m_head used to point to the head node 7850 if this was the head node. It now points to null to make iteration easy 7851 (KJS::ProfileNode::willExecute): Now must check if m_head is null, this 7852 check used to happend in the constructor. 7853 (KJS::ProfileNode::stopProfiling): Again the check is slightly different 7854 to determine if this is the head. 7855 (KJS::ProfileNode::traverseNextNode): This function returns the next 7856 node in post order. 7857 (KJS::ProfileNode::sort): This generic function will sort according to 7858 the comparator passed in, then reset the children pointers to macth the 7859 new order. 7860 * profiler/ProfileNode.h: The sorting function were removed from the 7861 definition file and instead use the new generic sort() function 7862 (KJS::ProfileNode::totalPercent): because the head can now be empty we 7863 need to check here too for the head node. 7864 (KJS::ProfileNode::selfPercent): Ditto 7865 (KJS::ProfileNode::firstChild): This function is necessary for the 7866 iterative algorithm in Profile.cpp. 7867 (KJS::ProfileNode::sortTotalTimeDescending): 7868 (KJS::ProfileNode::sortTotalTimeAscending): 7869 (KJS::ProfileNode::sortSelfTimeDescending): 7870 (KJS::ProfileNode::sortSelfTimeAscending): 7871 (KJS::ProfileNode::sortCallsDescending): 7872 (KJS::ProfileNode::sortCallsAscending): 7873 (KJS::ProfileNode::sortFunctionNameDescending): 7874 (KJS::ProfileNode::sortFunctionNameAscending): 7875 (KJS::ProfileNode::childrenBegin): 7876 (KJS::ProfileNode::childrenEnd): 7877 (KJS::ProfileNode::totalTimeDescendingComparator): 7878 (KJS::ProfileNode::totalTimeAscendingComparator): 7879 (KJS::ProfileNode::selfTimeDescendingComparator): 7880 (KJS::ProfileNode::selfTimeAscendingComparator): 7881 (KJS::ProfileNode::callsDescendingComparator): 7882 (KJS::ProfileNode::callsAscendingComparator): 7883 (KJS::ProfileNode::functionNameDescendingComparator): 7884 (KJS::ProfileNode::functionNameAscendingComparator): 7885 7886 2008-06-04 Alexey Proskuryakov <ap (a] webkit.org> 7887 7888 Reviewed by Darin. 7889 7890 Fix JSClassCreate to work with old JSCore API threading model. 7891 7892 No change on SunSpider. 7893 7894 * API/JSClassRef.cpp: (OpaqueJSClass::OpaqueJSClass): Since JSClass is constructed without 7895 a context, there is no way for it to create Identifiers. 7896 Also, added initializeThreading(), just for good measure. 7897 7898 * API/JSCallbackObjectFunctions.h: (KJS::::getPropertyNames): Make an Identifier out of the 7899 string here, because propertyNames.add() needs that. 7900 7901 * kjs/identifier.cpp: 7902 * kjs/identifier.h: 7903 (KJS::Identifier::equal): 7904 * kjs/ustring.cpp: 7905 (KJS::equal): 7906 Moved equal() from identifier.h to ustring.h, because it's not really about Identifiers, 7907 and to make it possible to use it from StrHash. 7908 Include StrHash.h from ustring.h to avoid having the behavior depend on headers that happen 7909 to be included. 7910 7911 * wtf/StrHash.h: Removed. 7912 * kjs/ustring.h: Made RefPtr<UString::Rep> use the same default hash as UString::Rep* (it 7913 used to default to pointer equality). Moved the whole StrHash header into ustring.h. 7914 7915 * JavaScriptCore.exp: Export equal() for WebCore use (this StrHash is used in c_class.cpp, 7916 jni_class.cpp, and npruntime.cpp). 7917 7918 2008-06-04 Alexey Proskuryakov <ap (a] webkit.org> 7919 7920 Rubber-stamped by Darin. 7921 7922 Fix spacing in collector.{h,cpp}. 7923 7924 * kjs/collector.cpp: 7925 * kjs/collector.h: 7926 7927 2008-06-03 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 7928 7929 Reviewed by Maciej. 7930 7931 Build fix. The cleanup in r34355 missed a method. 7932 7933 * kjs/nodes.cpp: 7934 * kjs/nodes.h: 7935 7936 2008-06-03 Darin Adler <darin (a] apple.com> 7937 7938 Reviewed by Geoff. 7939 7940 - https://bugs.webkit.org/show_bug.cgi?id=19269 7941 speed up SunSpider by eliminating the toObject call for most get/put/delete 7942 7943 Makes standalone SunSpider 1.025x as fast as before. 7944 7945 The getOwnPropertySlot virtual function now takes care of the toObject call 7946 for get. Similarly, the put function (and later deleteProperty) does the 7947 same for those operations. To do this, the virtual functions were moved from 7948 the JSObject class to the JSCell class. Also, since the caller no longer knows 7949 the identity of the "original object", which is used by JavaScript-function 7950 based getters, changed the PropertySlot class so the original object is 7951 already stored in the slot when getOwnPropertySlot is called, if the caller 7952 intends to call getValue. 7953 7954 This affected the old interpreter code enough that the easiest thing for me 7955 was to just delete it. While I am not certain the mysterious slowdown is not 7956 still occurring, the net change is definitely a significant speedup. 7957 7958 * JavaScriptCore.exp: Updated. 7959 7960 * VM/Machine.cpp: Moved the UNLIKELY macro into AlwaysInline.h. 7961 (KJS::resolve): Set up the originalObject in the PropertySlot before 7962 calling getPropertySlot. Also removed the originalObject argument from 7963 getValue. 7964 (KJS::resolve_skip): Ditto. 7965 (KJS::resolveBaseAndProperty): Ditto. 7966 (KJS::resolveBaseAndFunc): Ditto. 7967 (KJS::Machine::privateExecute): Removed the toObject calls from the get and 7968 put functions where possible, instead calling directly with JSValue and letting 7969 the JSValue and JSCell calls handle toObject. Same for toThisObject. 7970 7971 * kjs/ExecState.h: Removed OldInterpreterExecState. 7972 7973 * API/JSBase.cpp: Updated includes. 7974 7975 * kjs/LocalStorageEntry.h: Removed contents. Later we can remove the file too. 7976 7977 * kjs/array_instance.cpp: 7978 (KJS::ArrayInstance::lengthGetter): Removed originalObject argumet. 7979 (KJS::ArrayInstance::inlineGetOwnPropertySlot): Don't pass a base value to 7980 setValueSlot. Also use UNLIKELY around the "getting elements past the end of 7981 the array" code path; less common than successfully getting an element. 7982 7983 * kjs/array_object.cpp: 7984 (KJS::getProperty): Initialize the PropertySlot with the original object. 7985 Don't pass the original object to the get function. 7986 (KJS::arrayProtoFuncFilter): Ditto. 7987 (KJS::arrayProtoFuncMap): Ditto. 7988 (KJS::arrayProtoFuncEvery): Ditto. 7989 (KJS::arrayProtoFuncForEach): Ditto. 7990 (KJS::arrayProtoFuncSome): Ditto. 7991 7992 * kjs/function_object.cpp: 7993 (KJS::FunctionObjectImp::construct): Removed an obsolete comment. 7994 7995 * kjs/grammar.y: Eliminated support for some of the node types that were 7996 used to optimize executing from the syntax tree. 7997 7998 * kjs/internal.cpp: 7999 (KJS::StringImp::toThisObject): Added. Same as toObject. 8000 (KJS::NumberImp::toThisObject): Ditto. 8001 (KJS::GetterSetterImp::getOwnPropertySlot): Added. Not reached. 8002 (KJS::GetterSetterImp::put): Ditto. 8003 (KJS::GetterSetterImp::toThisObject): Ditto. 8004 8005 * kjs/internal.h: Added toThisObject to NumberImp for speed. 8006 8007 * kjs/lexer.cpp: 8008 (KJS::Lexer::shift): Changed shift to just do a single character, to unroll 8009 the loop and especially to make the one character case faster. 8010 (KJS::Lexer::setCode): Call shift multiple times instead of passing a number. 8011 (KJS::Lexer::lex): Ditto. 8012 (KJS::Lexer::matchPunctuator): Ditto. Also removed unneeded elses after returns. 8013 (KJS::Lexer::scanRegExp): Ditto. 8014 * kjs/lexer.h: Removed the count argument from shift. 8015 8016 * kjs/math_object.cpp: 8017 (KJS::mathProtoFuncPow): Call jsNaN instead of jsNumber(NaN). 8018 8019 * kjs/nodes.cpp: Removed some of the things needed only for the pre-SquirrelFish 8020 execution model. 8021 (KJS::ForNode::emitCode): Handle cases where some expressions are missing by 8022 not emitting any code at all. The old way was to emit code for "true", but 8023 this is an unnecessary remnant of the old way of doing things. 8024 8025 * kjs/nodes.h: Removed some of the things needed only for the pre-SquirrelFish 8026 execution model. 8027 8028 * kjs/object.cpp: 8029 (KJS::JSObject::fillGetterPropertySlot): Changed to only pass in the getter 8030 function. The old code passed in a base, but it was never used when 8031 actually getting the property; the toThisObject call was pointless. Also 8032 changed to not pass a base for setUndefined. 8033 8034 * kjs/object.h: Added the new JSCell operations to GetterSetterImp. 8035 Never called. 8036 (KJS::JSObject::get): Initialize the object in the PropertySlot and don't 8037 pass it in getValue. 8038 (KJS::JSObject::getOwnPropertySlotForWrite): Removed the base argument 8039 in calls to setValueSlot. 8040 (KJS::JSObject::getOwnPropertySlot): Ditto. 8041 (KJS::JSValue::get): Added. Here because it calls through to JSObject. 8042 A version of JSObject::get that also handles the other types of JSValue 8043 by creating the appropriate wrapper. Saves the virtual call to toObject. 8044 (KJS::JSValue::put): Ditto. 8045 (KJS::JSValue::deleteProperty): Ditto. 8046 8047 * kjs/property_slot.cpp: 8048 (KJS::PropertySlot::undefinedGetter): Removed the originalObject argument. 8049 (KJS::PropertySlot::ungettableGetter): Ditto. 8050 (KJS::PropertySlot::functionGetter): Ditto. Use the value in the base 8051 as the "this" object, which will be set to the original object by the new 8052 PropertySlot initialization code. Also call toThisObject. The old code did 8053 not do this, but needed to so we can properly handle the activation object 8054 like the other similar code paths. 8055 8056 * kjs/property_slot.h: 8057 (KJS::PropertySlot::PropertySlot): Added a constructor that takes a base 8058 object. In debug builds, set the base to 0 if you don't pass one. 8059 (KJS::PropertySlot::getValue): Don't take or pass the originalObject. 8060 (KJS::PropertySlot::setValueSlot): Don't take a base object, and clear the 8061 base object in debug builds. 8062 (KJS::PropertySlot::setGetterSlot): Ditto. 8063 (KJS::PropertySlot::setUndefined): Ditto. 8064 (KJS::PropertySlot::setUngettable): Ditto. 8065 (KJS::PropertySlot::slotBase): Assert that a base object is present. 8066 This will fire if someone actually calls the get function without having 8067 passed in a base object and the getter needs it. 8068 (KJS::PropertySlot::setBase): Added. Used by the code that implements 8069 toObject so it can supply the original object after the fact. 8070 (KJS::PropertySlot::clearBase): Added. Clears the base, but is debug-only 8071 code because it's an error to fetch the base if you don't have a guarantee 8072 it was set. 8073 8074 * API/JSCallbackObject.h: 8075 * API/JSCallbackObjectFunctions.h: 8076 (KJS::JSCallbackObject::cachedValueGetter): 8077 (KJS::JSCallbackObject::staticValueGetter): 8078 (KJS::JSCallbackObject::staticFunctionGetter): 8079 (KJS::JSCallbackObject::callbackGetter): 8080 * kjs/JSActivation.cpp: 8081 (KJS::JSActivation::getOwnPropertySlot): 8082 (KJS::JSActivation::argumentsGetter): 8083 * kjs/JSActivation.h: 8084 * kjs/JSVariableObject.h: 8085 (KJS::JSVariableObject::symbolTableGet): 8086 * kjs/array_instance.h: 8087 * kjs/function.cpp: 8088 (KJS::FunctionImp::argumentsGetter): 8089 (KJS::FunctionImp::callerGetter): 8090 (KJS::FunctionImp::lengthGetter): 8091 (KJS::Arguments::mappedIndexGetter): 8092 * kjs/function.h: 8093 * kjs/lookup.h: 8094 (KJS::staticFunctionGetter): 8095 (KJS::staticValueGetter): 8096 * kjs/string_object.cpp: 8097 (KJS::StringInstance::lengthGetter): 8098 (KJS::StringInstance::indexGetter): 8099 (KJS::stringInstanceNumericPropertyGetter): 8100 * kjs/string_object.h: 8101 Removed originalObject arguments from getters. Don't pass base values to 8102 the various PropertySlot functions that no longer take them. 8103 8104 * kjs/value.cpp: 8105 (KJS::JSCell::getOwnPropertySlot): Added. Calls toObject and then sets the slot. 8106 This function has to always return true, because the caller can't walk the prototype 8107 chain. Because of that, we do a getPropertySlot, not getOwnPropertySlot, which works 8108 for the caller. This is private, only called by getOwnPropertySlotInternal. 8109 (KJS::JSCell::put): Added. Calls toObject and then put. 8110 (KJS::JSCell::toThisObject): Added. Calls toObject. 8111 8112 * kjs/value.h: Added get, put, and toThisObject to both JSValue 8113 and JSCell. These take care of the toObject operation without an additional virtual 8114 function call, and so make the common "already an object" case faster. 8115 8116 * wtf/AlwaysInline.h: Moved the UNLIKELY macro here for now. Maybe we can find a 8117 better place later, or rename this header. 8118 8119 2008-06-03 Oliver Hunt <oliver (a] apple.com> 8120 8121 Reviewed by Tim. 8122 8123 Bug 12983: Web Inspector break on the debugger keyword 8124 <https://bugs.webkit.org/show_bug.cgi?id=12983> 8125 8126 Added a DebuggerStatementNode to handle codegen, and added a new 8127 DidReachBreakPoint debug event (which will hopefully be useful 8128 if we ever move breakpoint management into JSC proper). Also 8129 added didReachBreakpoint to Debugger to allow us to actually respond 8130 to this event. 8131 8132 * VM/CodeBlock.cpp: 8133 (KJS::debugHookName): 8134 * VM/Machine.cpp: 8135 (KJS::Machine::debug): 8136 * VM/Machine.h: 8137 * kjs/debugger.h: 8138 * kjs/grammar.y: 8139 * kjs/nodes.cpp: 8140 (KJS::DebuggerStatementNode::emitCode): 8141 (KJS::DebuggerStatementNode::execute): 8142 * kjs/nodes.h: 8143 (KJS::DebuggerStatementNode::): 8144 * kjs/nodes2string.cpp: 8145 (KJS::DebuggerStatementNode::streamTo): 8146 8147 2008-06-03 Maciej Stachowiak <mjs (a] apple.com> 8148 8149 Reviewed by Oliver. 8150 8151 - document remaining opcodes. 8152 8153 * VM/Machine.cpp: 8154 (KJS::Machine::privateExecute): Document call, call_eval, 8155 construct, ret and end opcodes. 8156 8157 2008-06-03 Maciej Stachowiak <mjs (a] apple.com> 8158 8159 Reviewed by Oliver. 8160 8161 * VM/Machine.cpp: 8162 (KJS::Machine::privateExecute): Document throw and catch opcodes. 8163 8164 2008-06-02 Geoffrey Garen <ggaren (a] apple.com> 8165 8166 Reviewed by Alexey Proskuryakov. 8167 8168 Removed JSObject::call, since it just called JSObject::callAsFunction. 8169 8170 SunSpider reports no change. 8171 8172 2008-06-02 Geoffrey Garen <ggaren (a] apple.com> 8173 8174 Reviewed by Darin Adler. 8175 8176 A little cleanup in the CodeGenerator. 8177 8178 * VM/CodeGenerator.cpp: A few changes here. 8179 8180 (1) Removed remaining cases of the old hack of putting "this" into the 8181 symbol table; replaced with explicit tracking of m_thisRegister. 8182 8183 (2) Made m_thisRegister behave the same for function, eval, and program 8184 code, removing the static programCodeThis() function. 8185 8186 (3) Added a feature to nix a ScopeNode's declaration stacks when done 8187 compiling, to save memory. 8188 8189 (4) Removed code that copied eval declarations into special vectors: we 8190 just use the originals in the ScopeNode now. 8191 8192 * VM/CodeGenerator.h: Removed unneded parameters from the CodeGenerator 8193 constructor: we just use get that data from the ScopeNode now. 8194 8195 * VM/Machine.cpp: 8196 (KJS::Machine::execute): When executing an eval node, don't iterate a 8197 special copy of its declarations; iterate the originals, instead. 8198 8199 * kjs/nodes.cpp: Moved responsibility for knowing what AST data to throw 8200 away into the CodeGenerator. Nodes no longer call shrinkCapacity on 8201 their data directly. 8202 8203 * kjs/nodes.h: Changed FunctionStack to ref its contents, so declaration 8204 data stays around even after we've thrown away the AST, unless we explicitly 8205 throw away the declaration data, too. This is useful for eval code, which 8206 needs to reference its declaration data at execution time. (Soon, it will 8207 be useful for program code, too, since program code should do the same.) 8208 8209 2008-06-02 Adam Roben <aroben (a] apple.com> 8210 8211 Build fix for non-AllInOne builds 8212 8213 * kjs/array_object.cpp: Added a missing #include. 8214 8215 2008-06-02 Kevin McCullough <kmccullough (a] apple.com> 8216 8217 Took out accidental confilct lines I checked in. 8218 8219 * ChangeLog: 8220 8221 2008-06-02 Kevin McCullough <kmccullough (a] apple.com> 8222 8223 Reviewed by Darin. 8224 8225 <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the 8226 profiler 8227 Implement Next Sibling pointers as groundwork for removing the recursion 8228 limit in the profiler. 8229 8230 * profiler/ProfileNode.cpp: Also I renamed parentNode and headNode since 8231 'node' is redundant. 8232 (KJS::ProfileNode::ProfileNode): Initialize the nextSibling. 8233 (KJS::ProfileNode::willExecute): If there are already children then the 8234 new child needs to be the nextSibling of the last child. 8235 (KJS::ProfileNode::didExecute): 8236 (KJS::ProfileNode::addChild): Ditto. 8237 (KJS::ProfileNode::stopProfiling): 8238 (KJS::ProfileNode::sortTotalTimeDescending): For all of the sorting 8239 algorithms once the children are sorted their nextSibling pointers need 8240 to be reset to reflect the new order. 8241 (KJS::ProfileNode::sortTotalTimeAscending): 8242 (KJS::ProfileNode::sortSelfTimeDescending): 8243 (KJS::ProfileNode::sortSelfTimeAscending): 8244 (KJS::ProfileNode::sortCallsDescending): 8245 (KJS::ProfileNode::sortCallsAscending): 8246 (KJS::ProfileNode::sortFunctionNameDescending): 8247 (KJS::ProfileNode::sortFunctionNameAscending): 8248 (KJS::ProfileNode::resetChildrensSiblings): This new function simply 8249 loops over all of the children and sets their nextSibling pointers to 8250 the next child in the Vector 8251 (KJS::ProfileNode::debugPrintData): 8252 * profiler/ProfileNode.h: 8253 (KJS::ProfileNode::parent): 8254 (KJS::ProfileNode::setParent): 8255 (KJS::ProfileNode::nextSibling): 8256 (KJS::ProfileNode::setNextSibling): 8257 (KJS::ProfileNode::totalPercent): 8258 (KJS::ProfileNode::selfPercent): 8259 8260 2008-06-02 Geoffrey Garen <ggaren (a] apple.com> 8261 8262 Reviewed by Maciej Stachowiak. 8263 8264 Removed the recursion limit from JSObject::call, since the VM does 8265 recursion checking now. 8266 8267 This should allow us to remove JSObject::call entirely, netting a small 8268 speedup. 8269 8270 * kjs/object.cpp: 8271 (KJS::JSObject::call): 8272 8273 2008-06-02 Geoffrey Garen <ggaren (a] apple.com> 8274 8275 Reviewed by Adele Peterson. 8276 8277 Added a specific affordance for avoiding stack overflow when converting 8278 recursive arrays to string, in preparation for removing generic stack 8279 overflow checking from JSObject::call. 8280 8281 Tested by fast/js/toString-stack-overflow.html. 8282 8283 2008-06-02 Geoffrey Garen <ggaren (a] apple.com> 8284 8285 Reviewed by Alice Liu. 8286 8287 Refactored some hand-rolled code to call ScopeChain::globalObject instead. 8288 8289 2008-06-02 Geoffrey Garen <ggaren (a] apple.com> 8290 8291 Reviewed by Darin Adler. 8292 8293 Fixed ASSERT due to execution continuing after an exception is thrown 8294 during array sort. 8295 8296 * kjs/array_instance.cpp: 8297 (KJS::AVLTreeAbstractorForArrayCompare::compare_key_key): Don't call the 8298 custom comparator function if an exception has been thrown. Just return 8299 1 for everything, so the sort completes quickly. (The result will be 8300 thrown away.) 8301 8302 2008-05-30 Timothy Hatcher <timothy (a] apple.com> 8303 8304 Made the starting line number of scripts be 1-based throughout the engine. 8305 This cleans up script line numbers so they are all consistent now and fixes 8306 some cases where script execution was shown as off by one line in the debugger. 8307 8308 No change in SunSpider. 8309 8310 Reviewed by Oliver Hunt. 8311 8312 * API/minidom.c: 8313 (main): Pass a line number of 1 instead of 0 to parser().parse(). 8314 * API/testapi.c: 8315 (main): Ditto. And removes a FIXME and changed an assertEqualsAsNumber 8316 to use 1 instead of 2 for the line number. 8317 * VM/Machine.cpp: 8318 (KJS::callEval): Pass a line number of 1 instead of 0. 8319 (KJS::Machine::debug): Use firstLine for WillExecuteProgram instead of 8320 lastLine. Use lastLine for DidExecuteProgram instead of firstLine. 8321 * kjs/DebuggerCallFrame.cpp: 8322 (KJS::DebuggerCallFrame::evaluate): Pass a line number of 1 instead of 8323 0 to parser().parse(). 8324 * kjs/Parser.cpp: 8325 (KJS::Parser::parse): ASSERT startingLineNumber is greatter than 0. Change 8326 the startingLineNumber to be 1 if it was less than or equal to 0. This is needed 8327 for release builds to maintain compatibility with the JavaScriptCore API. 8328 * kjs/function.cpp: 8329 (KJS::globalFuncEval): Pass a line number of 1 instead of 0 to parser().parse(). 8330 * kjs/function_object.cpp: 8331 (FunctionObjectImp::construct): Pass a line number of 1 instead of 0 to construct(). 8332 * kjs/lexer.cpp: 8333 (Lexer::setCode): Made yylineno = startingLineNumber instead of adding 1. 8334 * kjs/testkjs.cpp: 8335 (functionRun): Pass a line number of 1 instead of 0 to Interpreter::evaluate(). 8336 (functionLoad): Ditto. 8337 (prettyPrintScript): Ditto. 8338 (runWithScripts): Ditto. 8339 * profiler/Profiler.cpp: 8340 (WebCore::createCallIdentifier): Removed a plus 1 of startingLineNumber. 8341 8342 2008-05-30 Alexey Proskuryakov <ap (a] webkit.org> 8343 8344 Reviewed by Darin. 8345 8346 https://bugs.webkit.org/show_bug.cgi?id=19180 8347 speed up SunSpider by optimizing immediate number cases 8348 8349 Also fixed a JavaScriptCore regression seen on PowerPC - we didn't clip left shift 8350 parameter to 0...31. 8351 8352 0.5% improvement on SunSpider overall, although a 8.5 regression on bitops-3bit-bits-in-byte. 8353 8354 * VM/Machine.cpp: 8355 (KJS::Machine::privateExecute): 8356 8357 * kjs/JSImmediate.h: 8358 (KJS::JSImmediate::toTruncatedUInt32): Added. Same as getTruncatedInt32, but casts the result 8359 to unsigned. 8360 8361 2008-05-30 Alexey Proskuryakov <ap (a] webkit.org> 8362 8363 Reviewed by Oliver Hunt. 8364 8365 https://bugs.webkit.org/show_bug.cgi?id=19180 8366 speed up SunSpider by optimizing immediate number cases 8367 8368 Also fixed two JavaScriptCore regressions seen on PowerPC - we didn't clip right shift 8369 parameter to 0...31. 8370 8371 1.6% improvement on SunSpider, without significant regressions on any tests. 8372 8373 * VM/Machine.cpp: 8374 (KJS::Machine::privateExecute): 8375 Added fast paths for >>, ==, ===, !=, !==. Changed order of memory accesses in many 8376 cases, making them less dependent on gcc's ability to properly assign registers. With this, 8377 I could move exception checks back into slow code paths, and saw less randomness in general. 8378 8379 * kjs/JSImmediate.h: 8380 (KJS::JSImmediate::rightShiftImmediateNumbers): 8381 Added. 8382 8383 2008-05-29 Maciej Stachowiak <mjs (a] apple.com> 8384 8385 Reviewed by Oliver. 8386 8387 - fixed <rdar://problem/5972943> REGRESSION(r33979): Flash clips do not play on cnn.com 8388 8389 Finally blocks could clobber registers that had to remain live 8390 until they returned. This patch takes a conservative approach and 8391 makes sure that finally blocks do not reuse any registers that 8392 were previously allocated for the function. In the future this 8393 could probably be tightened up to be less profligate with the 8394 register allocation. 8395 8396 * VM/CodeGenerator.cpp: 8397 (KJS::CodeGenerator::highestUsedRegister): 8398 * VM/CodeGenerator.h: 8399 * kjs/nodes.cpp: 8400 (KJS::TryNode::emitCode): 8401 8402 2008-05-29 Steve Falkenburg <sfalken (a] apple.com> 8403 8404 Build fix. 8405 8406 * kjs/array_instance.cpp: 8407 8408 2008-05-29 Alexey Proskuryakov <ap (a] webkit.org> 8409 8410 Reviewed by Darin. 8411 8412 https://bugs.webkit.org/show_bug.cgi?id=19294 8413 <rdar://problem/5969062> A crash when iterating over a sparse array backwards. 8414 8415 * kjs/array_instance.cpp: Turned sparseArrayCutoff into a macro, so that using max() on it 8416 doesn't cause a PIC branch. 8417 (KJS::ArrayInstance::increaseVectorLength): Added a comment about this function not 8418 preserving class invariants. 8419 (KJS::ArrayInstance::put): Update m_storage after reallocation. Move values that fit to 8420 the vector from the map in all code paths. 8421 8422 2008-05-29 Thiago Macieira <tjmaciei (a] trolltech.com> 8423 8424 Reviewed by Simon. 8425 8426 Fix compilation in Solaris with Sun CC 8427 8428 Lots of WebKit code uses C99 functions that, strict as it 8429 is, the Solaris system doesn't provide in C++. So we must define them 8430 for both GCC and the Sun CC. 8431 8432 * wtf/MathExtras.h: 8433 8434 2008-05-28 Oliver Hunt <oliver (a] apple.com> 8435 8436 Reviewed by Anders. 8437 8438 Fix codegen for assignment being used as a function. 8439 8440 FunctionCallValueNode::emitCode failed to account for the 8441 potential of the function expression to allocate arbitrary 8442 registers. 8443 8444 * kjs/nodes.cpp: 8445 (KJS::FunctionCallValueNode::emitCode): 8446 8447 2008-05-27 Geoffrey Garen <ggaren (a] apple.com> 8448 8449 Reviewed by Tim Hatcher. 8450 8451 Fixed https://bugs.webkit.org/show_bug.cgi?id=19183 8452 REGRESSION (r33979): Crash in DebuggerCallFrame::functionName when 8453 clicking button in returnEvent-crash.html 8454 8455 Added two new debugger hooks, willExecuteProgram and didExecuteProgram, 8456 along with code to generate them, code to invoke them when unwinding 8457 due to an exception, and code to dump them. 8458 8459 SunSpider reports no change. 8460 8461 * VM/CodeBlock.cpp: 8462 (KJS::debugHookName): I had to mark this function NEVER_INLINE to avoid 8463 a .4% performance regression. The mind boggles. 8464 8465 2008-05-28 Adam Roben <aroben (a] apple.com> 8466 8467 Fix JavaScriptCore tests on OS X 8468 8469 We were quoting the path to testkjs too late, after it had already 8470 been combined with spaces and other options. 8471 8472 * tests/mozilla/jsDriver.pl: 8473 (top level): Move path quoting from here... 8474 (sub get_kjs_engine_command): ...to here. 8475 8476 2008-05-28 Anders Carlsson <andersca (a] apple.com> 8477 8478 Reviewed by Oliver. 8479 8480 <rdar://problem/5968071> "const f" crashes in JavaScriptCore 8481 8482 Make sure to null check the initializer. 8483 8484 * kjs/nodes.cpp: 8485 (KJS::ConstDeclNode::emitCodeSingle): 8486 8487 2008-05-28 Adam Roben <aroben (a] apple.com> 8488 8489 Make run-javascriptcore-tests work with a space in the path to testkjs 8490 8491 Reviewed by Alexey Proskuryakov. 8492 8493 * tests/mozilla/jsDriver.pl: Quote the path to the engine so that 8494 spaces will be interpreted correctly. 8495 8496 2008-05-28 Alexey Proskuryakov <ap (a] webkit.org> 8497 8498 Fixed a misguiding comment - my measurement for negative numbers only included cases 8499 where both operands were negative, which is not very interesting. 8500 8501 * VM/Machine.cpp: 8502 8503 2008-05-28 Alexey Proskuryakov <ap (a] webkit.org> 8504 8505 Reviewed by Maciej. 8506 8507 Based on a patch by Oliver Hunt. 8508 8509 https://bugs.webkit.org/show_bug.cgi?id=19180 8510 speed up SunSpider by optimizing immediate number cases 8511 8512 1.4% speedup on SunSpider. 8513 8514 * VM/Machine.cpp: 8515 (KJS::Machine::privateExecute): 8516 * kjs/JSImmediate.h: 8517 (KJS::JSImmediate::incImmediateNumber): 8518 (KJS::JSImmediate::decImmediateNumber): 8519 Added fast paths for ++ and --. 8520 8521 (KJS::JSImmediate::canDoFastAdditiveOperations): Corrected a comment. 8522 8523 2008-05-28 Alexey Proskuryakov <ap (a] webkit.org> 8524 8525 Reviewed by Darin. 8526 8527 https://bugs.webkit.org/show_bug.cgi?id=19180 8528 speed up SunSpider by optimizing immediate number cases 8529 8530 2% speedup overall, maximum 10% on controlflow-recursive and bitops-3bit-bits-in-byte, 8531 but a 4% regression on bitops-bits-in-byte and bitops-bitwise-and. 8532 8533 * kjs/JSImmediate.h: 8534 (KJS::JSImmediate::canDoFastAdditiveOperations): 8535 (KJS::JSImmediate::addImmediateNumbers): 8536 (KJS::JSImmediate::subImmediateNumbers): 8537 Added fast cases that work with positive values less than 2^30. 8538 8539 * VM/Machine.cpp: 8540 (KJS::Machine::privateExecute): Use the above operations. Also updated SunSpider frequencies 8541 with my results (looks like tag values have changed, not sure what caused the minor variation 8542 in actual frequencies). 8543 8544 2008-05-27 Adam Roben <aroben (a] apple.com> 8545 8546 Windows build fix 8547 8548 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: 8549 Remove code that appended Cygwin's /bin directory to PATH. 8550 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: 8551 Prepend Cygwin's /bin directory to PATH. We prepend instead of append 8552 so that Cygwin's utilities will win out over Win32 versions of the 8553 same utilities (particularly perl). We do the prepend here instead of 8554 in the Makefile because nmake doesn't seem to like prepending to PATH 8555 inside the Makefile. This also matches the way WebCoreGenerated works. 8556 8557 2008-05-27 Adam Roben <aroben (a] apple.com> 8558 8559 Roll out r34163 8560 8561 A better fix is on the way. 8562 8563 * DerivedSources.make: 8564 * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: 8565 8566 2008-05-27 Adam Roben <aroben (a] apple.com> 8567 8568 Windows build fix 8569 8570 * DerivedSources.make: Don't generate the bytecode docs if 8571 OMIT_BYTECODE_DOCS is set to 1. 8572 * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: Set 8573 OMIT_BYTECODE_DOCS for production builds. 8574 8575 2008-05-27 Anders Carlsson <andersca (a] apple.com> 8576 8577 Reviewed by Geoff and Maciej. 8578 8579 <rdar://problem/5806428> 8580 https://bugs.webkit.org/show_bug.cgi?id=17925 8581 Crash in KJS::JSObject::put after setting this.__proto__ 8582 8583 Set slotIsWriteable to false for __proto__, we want setting __proto__ to go through JSObject::put instead. 8584 8585 * kjs/object.h: 8586 (KJS::JSObject::getOwnPropertySlotForWrite): 8587 8588 2008-05-27 Kevin Ollivier <kevino (a] theolliviers.com> 8589 8590 wx build fixes to catch up with SquirrelFish, etc. 8591 8592 * JavaScriptCoreSources.bkl: 8593 * jscore.bkl: 8594 * wtf/Platform.h: 8595 8596 2008-05-27 Darin Adler <darin (a] apple.com> 8597 8598 Reviewed by Tim Hatcher. 8599 8600 - https://bugs.webkit.org/show_bug.cgi?id=19180 8601 speed up SunSpider by optimizing immediate number cases 8602 8603 Add immediate number cases for the &, |, and ^ operators. 8604 Makes standalone SunSpider 1.010x faster. 8605 8606 * VM/Machine.cpp: 8607 (KJS::Machine::privateExecute): Add areBothImmediateNumbers special cases 8608 for the &, |, and ^ operators. 8609 8610 * kjs/JSImmediate.h: 8611 (KJS::JSImmediate::xorImmediateNumbers): Added. 8612 (KJS::JSImmediate::orImmediateNumbers): Added. 8613 8614 2008-05-26 Stephanie Lewis <slewis (a] apple.com> 8615 8616 Windows build fix. 8617 8618 * kjs/testkjs.cpp: 8619 8620 2008-05-26 Maciej Stachowiak <mjs (a] apple.com> 8621 8622 Reviewed by Anders. 8623 8624 - make addStaticGlobals protected instead of private so subclasses can use it 8625 8626 * JavaScriptCore.exp: 8627 * kjs/JSGlobalObject.h: 8628 8629 2008-05-26 Geoffrey Garen <ggaren (a] apple.com> 8630 8631 Reviewed by Darin Adler. 8632 8633 Fixed <rdar://problem/5960859> After an eval of a non-string or a syntax 8634 error, all profile stack frames are incorrect 8635 8636 SunSpider reports a .3% speedup, possibly because eval of a string is a 8637 little more efficient now. 8638 8639 * VM/Machine.cpp: 8640 (KJS::callEval): Make sure to call didExecute when returning early. I 8641 simplified this function to remove one early return, making the job 8642 of adding special code to early returns easier. 8643 8644 (KJS::Machine::execute): Use the new function ExecState when notifying 8645 the profiler. (This doesn't change behavior now, but it might prevent 8646 subtle errors in the future.) 8647 8648 2008-05-23 Tor Arne Vestb <tavestbo (a] trolltech.com> 8649 8650 Reviewed by Simon. 8651 8652 Fixed toLower and toUpper implementations to allow being called 8653 with a null result pointer and resultLength, to determine the 8654 number of characters needed for the case conversion. 8655 8656 * wtf/unicode/qt4/UnicodeQt4.h: 8657 (WTF::Unicode::toLower): 8658 (WTF::Unicode::toUpper): 8659 8660 2008-05-25 Alexey Proskuryakov <ap (a] webkit.org> 8661 8662 Fixing a typo in the previous commit made as a last minute change. 8663 8664 * kjs/regexp_object.cpp: 8665 8666 2008-05-24 Alexey Proskuryakov <ap (a] webkit.org> 8667 8668 Reviewed by Darin. 8669 8670 Changed regular expression matching result array to be lazily filled, because many callers 8671 only care about it being non-null. 8672 8673 2% improvement on Acid3 test 26. 8674 8675 * kjs/array_instance.cpp: Added a void* member to ArrayStorage for ArrayInstance subclasses 8676 to use. 8677 * kjs/array_instance.h: 8678 (KJS::ArrayInstance::lazyCreationData): 8679 (KJS::ArrayInstance::setLazyCreationData): 8680 Added methods to access it from subclasses. 8681 8682 * kjs/regexp_object.cpp: 8683 (KJS::RegExpMatchesArray::RegExpMatchesArray): 8684 (KJS::RegExpMatchesArray::getOwnPropertySlot): 8685 (KJS::RegExpMatchesArray::put): 8686 (KJS::RegExpMatchesArray::deleteProperty): 8687 (KJS::RegExpMatchesArray::getPropertyNames): 8688 (KJS::RegExpMatchesArray::fillArrayInstanceIfNeeded): 8689 (KJS::RegExpMatchesArray::~RegExpMatchesArray): 8690 (KJS::RegExpObjectImp::arrayOfMatches): 8691 RegExpMatchesArray is a subclass of ArrayInstance that isn't filled until 8692 accessed for the first time. 8693 8694 2008-05-24 Alp Toker <alp (a] nuanti.com> 8695 8696 Win32/gcc build fix. Remove MSVC assumption. 8697 8698 * wtf/TCSpinLock.h: 8699 (TCMalloc_SlowLock): 8700 8701 2008-05-24 Oleg Finkelshteyn <olegfink (a] gmail.com> 8702 8703 Rubber-stamped, tweaked and landed by Alexey. 8704 8705 Build fix for gcc 4.3. 8706 8707 * JavaScriptCore/kjs/testkjs.cpp: 8708 * JavaScriptCore/VM/CodeBlock.cpp: 8709 Add missing standard includes. 8710 8711 2008-05-23 Anders Carlsson <andersca (a] apple.com> 8712 8713 Reviewed by Geoff. 8714 8715 <rdar://problem/5959886> REGRESSION: Assertion failure in JSImmediate::toString when loading GMail (19217) 8716 8717 Change List to store a JSValue*** pointer + an offset instead of a JSValue** pointer to protect against the case where 8718 a register file changes while a list object points to its buffer. 8719 8720 * VM/Machine.cpp: 8721 (KJS::Machine::privateExecute): 8722 * kjs/JSActivation.cpp: 8723 (KJS::JSActivation::createArgumentsObject): 8724 * kjs/list.cpp: 8725 (KJS::List::getSlice): 8726 * kjs/list.h: 8727 (KJS::List::List): 8728 (KJS::List::at): 8729 (KJS::List::append): 8730 (KJS::List::begin): 8731 (KJS::List::end): 8732 (KJS::List::buffer): 8733 8734 2008-05-23 Kevin McCullough <kmccullough (a] apple.com> 8735 8736 Reviewed by Sam. 8737 8738 <rdar://problem/5960012> JSProfiler: Stack overflow if recursion is 8739 too deep. 8740 -Use a simple depth limit to restrict too deep of recursion. 8741 8742 * profiler/Profile.cpp: 8743 (KJS::Profile::willExecute): 8744 (KJS::Profile::didExecute): 8745 * profiler/Profile.h: 8746 8747 2008-05-23 Geoffrey Garen <ggaren (a] apple.com> 8748 8749 Rolling back in r34085, with performance resolved. 8750 8751 Apparently, passing the eval function to callEval gave GCC a hernia. 8752 8753 Reviewed by Darin Adler, Kevin McCullough, and Oliver Hunt. 8754 8755 Fixed <rdar://problem/5959447> Crashes and incorrect reporting in the 8756 JavaScript profiler 8757 8758 * VM/Machine.cpp: 8759 (KJS::Machine::unwindCallFrame): Fixed incorrect reporting / a crash 8760 when unwinding from inside eval and/or program code: detect the 8761 difference, and do the right thing. Also, be sure to notify the profiler 8762 *before* deref'ing the scope chain, since the profiler uses the scope chain. 8763 8764 (KJS::Machine::execute): Fixed incorrect reporting / crash when calling 8765 a JS function re-entrently: Machine::execute(FunctionBodyNode*...) 8766 should not invoke the didExecute hook, because op_ret already does that. 8767 Also, use the new function's ExecState when calling out to the profiler. 8768 (Not important now, but could have become a subtle bug later.) 8769 8770 (KJS::Machine::privateExecute): Fixed a hard to reproduce crash when 8771 profiling JS functions: notify the profiler *before* deref'ing the scope 8772 chain, since the profiler uses the scope chain. 8773 8774 * kjs/object.cpp: 8775 (KJS::JSObject::call): Removed these hooks, because they are now unnecessary. 8776 8777 * profiler/Profile.cpp: Added a comment to explain a subtlety that only 8778 Kevin and I understood previously. (Now, the whole world can understand!) 8779 8780 * profiler/Profiler.cpp: 8781 (KJS::shouldExcludeFunction): Don't exclude .call and .apply. That was 8782 a hack to fix bugs that no longer exist. 8783 8784 Finally, sped things up a little bit by changing the "Is the profiler 8785 running?" check into an ASSERT, since we only call into the profiler 8786 when it's running: 8787 8788 (KJS::Profiler::willExecute): 8789 (KJS::Profiler::didExecute): 8790 8791 2008-05-23 Geoffrey Garen <ggaren (a] apple.com> 8792 8793 Reviewed by Oliver Hunt. 8794 8795 - fixed <rdar://problem/5957662> REGRESSION(r33943-r33980): Can't send email , attach file or save as draft from hotmail.com 8796 8797 SunSpider reports no change. 8798 8799 This is a reworking of r34073, which I rolled out because it caused 8800 lots of crashes. 8801 8802 * VM/CodeGenerator.cpp: 8803 (KJS::CodeGenerator::CodeGenerator): Use removeDirect to nix old 8804 properties whose names collide with new functions. (Don't use putWithAttributes 8805 because that tries to write to the register file, which hasn't grown to 8806 fit this program yet.) 8807 8808 2008-05-23 Darin Adler <darin (a] apple.com> 8809 8810 Reviewed by Mark Rowe. 8811 8812 As allocateNumber is used via jsNumberCell outside of JavaScriptCore, 8813 we need to provide a non-inlined version of it to avoid creating a 8814 weak external symbol. 8815 8816 * JavaScriptCore.exp: 8817 * kjs/AllInOneFile.cpp: 8818 * kjs/collector.cpp: 8819 (KJS::Collector::allocate): 8820 (KJS::Collector::allocateNumber): 8821 * kjs/collector.h: 8822 (KJS::Collector::allocate): 8823 (KJS::Collector::inlineAllocateNumber): 8824 * kjs/value.h: 8825 (KJS::NumberImp::operator new): 8826 8827 2008-05-23 Geoffrey Garen <ggaren (a] apple.com> 8828 8829 Rolled out r34073 because it caused lots of layout test crashes. 8830 8831 2008-05-23 Geoffrey Garen <ggaren (a] apple.com> 8832 8833 Rolled out r34085 because it measured as a 7.6% performance regression. 8834 8835 2008-05-23 Adam Roben <aroben (a] apple.com> 8836 8837 Windows build fix 8838 8839 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add the 8840 profiler directory to the include path. 8841 8842 2008-05-23 Oliver Hunt <oliver (a] apple.com> 8843 8844 Reviewed by Anders. 8845 8846 SQUIRRELFISH: JavaScript error messages are missing informative text 8847 8848 Partial fix. 8849 Tidy up error messages, makes a couple of them provide slightly more info. 8850 Inexplicably leads to a 1% SunSpider Progression. 8851 8852 * VM/ExceptionHelpers.cpp: 8853 (KJS::createError): 8854 (KJS::createInvalidParamError): 8855 (KJS::createNotAConstructorError): 8856 (KJS::createNotAFunctionError): 8857 * VM/ExceptionHelpers.h: 8858 * VM/Machine.cpp: 8859 (KJS::isNotObject): 8860 8861 2008-05-23 Oliver Hunt <oliver (a] apple.com> 8862 8863 Reviewed by Tim H. 8864 8865 Fix call stack reported by profiler when entering event handlers. 8866 8867 JSObject::call was arbitrarily notifying the profiler when it was 8868 called, even if it was JS code, which notifies the profile on entry 8869 in any case. 8870 8871 * kjs/object.cpp: 8872 (KJS::JSObject::call): 8873 8874 2008-05-16 Alp Toker <alp (a] nuanti.com> 8875 8876 Build fix for gcc 3. Default constructor required in ExecState, 8877 used by OldInterpreterExecState. 8878 8879 * kjs/ExecState.h: 8880 (KJS::ExecState::ExecState): 8881 8882 2008-05-23 Mark Rowe <mrowe (a] apple.com> 8883 8884 Reviewed by Oliver Hunt. 8885 8886 Fix <rdar://problem/5954997> global-recursion-on-full-stack.html crashes under guardmalloc. 8887 8888 Growing the register file with uncheckedGrow from within Machine::execute is not safe as the 8889 register file may be too close to its maximum size to grow successfully. By using grow, 8890 checking the result and throwing a stack overflow error we can avoid crashing. 8891 8892 * VM/Machine.cpp: 8893 (KJS::Machine::execute): 8894 * VM/RegisterFile.h: Remove the now-unused uncheckedGrow. 8895 8896 2008-05-23 Oliver Hunt <oliver (a] apple.com> 8897 8898 RS=Kevin McCullough 8899 8900 Remove JAVASCRIPT_PROFILER define 8901 8902 * VM/Machine.cpp: 8903 (KJS::callEval): 8904 (KJS::Machine::unwindCallFrame): 8905 (KJS::Machine::execute): 8906 (KJS::Machine::privateExecute): 8907 * kjs/config.h: 8908 * kjs/object.cpp: 8909 (KJS::JSObject::call): 8910 8911 2008-05-23 Oliver Hunt <oliver (a] apple.com> 8912 8913 <rdar://problem/5951561> Turn on JavaScript Profiler 8914 8915 Reviewed by Kevin McCullough. 8916 8917 Flipped the switch on the profiler, rearranged how we 8918 signal the the profiler is active so that calls aren't 8919 needed in the general case. 8920 8921 Also fixed the entry point for Machine::execute(FunctionBodyNode..) 8922 to correctly indicate function exit. 8923 8924 Results in a 0.7-1.0% regression in SunSpider :-( 8925 8926 * VM/Machine.cpp: 8927 (KJS::callEval): 8928 (KJS::Machine::unwindCallFrame): 8929 (KJS::Machine::execute): 8930 (KJS::Machine::privateExecute): 8931 * kjs/config.h: 8932 * profiler/Profiler.cpp: 8933 (KJS::Profiler::profiler): 8934 (KJS::Profiler::startProfiling): 8935 (KJS::Profiler::stopProfiling): 8936 * profiler/Profiler.h: 8937 (KJS::Profiler::enabledProfilerReference): 8938 8939 2008-05-23 Simon Hausmann <hausmann (a] webkit.org> 8940 8941 Fix the Qt build by adding profiler/ to the include search path. 8942 8943 * JavaScriptCore.pri: 8944 8945 2008-05-22 Kevin McCullough <kmccullough (a] apple.com> 8946 8947 Reviewed by Adam. 8948 8949 Fix a bug in the profiler where time in the current function is given to 8950 (idle). 8951 8952 * profiler/Profile.cpp: 8953 (KJS::Profile::didExecute): Set the start time and then call didExecute 8954 to calculate the time spent in this function. 8955 * profiler/ProfileNode.cpp: Remove confusing calculations that are no 8956 longer necessary. 8957 (KJS::ProfileNode::insertNode): 8958 * profiler/ProfileNode.h: Expose access to the start time to allow the 8959 simpler time calculations above. 8960 (KJS::ProfileNode::startTime): 8961 (KJS::ProfileNode::setStartTime): 8962 8963 2008-05-22 Adam Roben <aroben (a] apple.com> 8964 8965 Show "(Function object)" instead of "(JSInpectorCallbackWrapper 8966 object)" in profiles 8967 8968 Reviewed by Kevin McCullough. 8969 8970 * profiler/Profiler.cpp: 8971 (KJS::createCallIdentifier): Use JSObject::className instead of 8972 getting the class name from the ClassInfo directly. JSObject 8973 subclasses can override className to provide a custom class name, and 8974 it seems like we should honor that. 8975 8976 2008-05-22 Timothy Hatcher <timothy (a] apple.com> 8977 8978 Added Profile::restoreAll and added ProfileNode::restoreAll 8979 to the export file. 8980 8981 Reviewed by Adam Roben. 8982 8983 * JavaScriptCore.exp: 8984 * profiler/Profile.h: 8985 8986 2008-05-22 Alp Toker <alp (a] nuanti.com> 8987 8988 GTK+ build fix. Add JavaScriptCore/profiler to include path. 8989 8990 * GNUmakefile.am: 8991 8992 2008-05-22 Adam Roben <aroben (a] apple.com> 8993 8994 Implement sub-millisecond profiling on Windows 8995 8996 Reviewed by Kevin McCullough. 8997 8998 * profiler/ProfileNode.cpp: 8999 (KJS::getCount): Added. On Windows, we use QueryPerformanceCounter. On 9000 other platforms, we use getCurrentUTCTimeWithMicroseconds. 9001 (KJS::ProfileNode::endAndRecordCall): Use getCount instead of 9002 getCurrentUTCTimeWithMicroseconds. 9003 (KJS::ProfileNode::startTimer): Ditto. 9004 9005 2008-05-22 Adam Roben <aroben (a] apple.com> 9006 9007 Fix a profiler assertion when calling a NodeList as a function 9008 9009 Reviewed by Kevin McCullough. 9010 9011 * profiler/Profiler.cpp: 9012 (KJS::createCallIdentifier): Don't assert when a non-function object 9013 is called as a function. Instead, build up a CallIdentifier using the 9014 object's class name. 9015 9016 2008-05-22 Kevin McCullough <kmccullough (a] apple.com> 9017 9018 Reviewed by Darin. 9019 9020 <rdar://problem/5951529> JSProfiler: Allow the profiler to "Exclude" a 9021 profile node. 9022 -Implement 'exclude'; where the excluded node attributes its time to its 9023 parent's self time. 9024 9025 * JavaScriptCore.exp: Export the exclude function. 9026 * profiler/Profile.h: 9027 (KJS::Profile::exclude): 9028 * profiler/ProfileNode.cpp: 9029 (KJS::ProfileNode::setTreeVisible): New function that allows a change in 9030 visiblitiy to be propogated to all the children of a node. 9031 (KJS::ProfileNode::exclude): If the node matches the callIdentifier then 9032 set the visiblity of this node and all of its children to false and 9033 attribute it's total time to it's caller's self time. 9034 * profiler/ProfileNode.h: 9035 9036 2008-05-22 Mark Rowe <mrowe (a] apple.com> 9037 9038 Reviewed by Oliver Hunt. 9039 9040 Fix access to static global variables in Windows release builds. 9041 9042 * kjs/JSGlobalObject.h: Don't store a reference to an Identifier 9043 in GlobalPropertyInfo as the Identifier is likely to be a temporary 9044 and therefore may be destroyed before the GlobalPropertyInfo. 9045 9046 2008-05-22 Kevin McCullough <kmccullough (a] apple.com> 9047 9048 Build fix. 9049 9050 * VM/Machine.cpp: 9051 (KJS::callEval): 9052 9053 2008-05-22 Kevin McCullough <kmccullough (a] apple.com> 9054 9055 Reviewed by Sam. 9056 9057 <rdar://problem/5951561> Turn on JavaScript Profiler 9058 Get basic JS profiling working. 9059 Even with this patch the profiler will not be compiled in because we do 9060 not know the extend, if any, of the performance regression it would cause 9061 when it is not in use. However with these changes, if the profiler were 9062 on, it would not crash and show good profiling data. 9063 9064 * VM/Machine.cpp: Instrument the calls sites that are needed for profiling. 9065 (KJS::callEval): 9066 (KJS::Machine::unwindCallFrame): 9067 (KJS::Machine::execute): 9068 (KJS::Machine::privateExecute): 9069 * kjs/function.cpp: Ditto. 9070 (KJS::globalFuncEval): 9071 * kjs/interpreter.cpp: Ditto. 9072 (KJS::Interpreter::evaluate): 9073 * profiler/Profile.cpp: 9074 (KJS::Profile::willExecute): 9075 (KJS::Profile::didExecute): Because we do not get a good context when 9076 startProfiling is called it is possible that m_currentNode will be at the 9077 top of the known stack when a didExecute() is called. What we then do is 9078 create a new node that represents the function being exited and insert 9079 it between the head and the currently known children, since they should 9080 be children of this new node. 9081 * profiler/ProfileNode.cpp: 9082 (KJS::ProfileNode::ProfileNode): 9083 (KJS::ProfileNode::willExecute): Rename the add function for consistency. 9084 (KJS::ProfileNode::addChild): Appends the child to this node but also 9085 sets the parent pointer of the children to this node. 9086 (KJS::ProfileNode::insertNode): Insert a node between this node and its 9087 children. Also set the time for the new node since it is now exiting 9088 and we don't really know when it started. 9089 (KJS::ProfileNode::stopProfiling): 9090 (KJS::ProfileNode::startTimer): 9091 * profiler/ProfileNode.h: 9092 (KJS::CallIdentifier::toString): Added for debugging. 9093 (KJS::ProfileNode::setParent): 9094 (KJS::ProfileNode::setSelfTime): Fixed an old bug where we set the 9095 visibleTotalTime not the visibleSelfTime. 9096 (KJS::ProfileNode::children): 9097 (KJS::ProfileNode::toString): Added for debugging. 9098 * profiler/Profiler.cpp: remove unecessary calls. 9099 (KJS::Profiler::startProfiling): 9100 9101 2008-05-22 Sam Weinig <sam (a] webkit.org> 9102 9103 Reviewed by Oliver Hunt. 9104 9105 Rename register arguments for op_call, op_call_eval, op_end, and op_construct 9106 to document what they are for. 9107 9108 * VM/CodeGenerator.cpp: 9109 (KJS::CodeGenerator::emitCall): 9110 (KJS::CodeGenerator::emitCallEval): 9111 (KJS::CodeGenerator::emitEnd): 9112 (KJS::CodeGenerator::emitConstruct): 9113 * VM/CodeGenerator.h: 9114 * VM/Machine.cpp: 9115 (KJS::Machine::privateExecute): 9116 9117 2008-05-22 Oliver Hunt <oliver (a] apple.com> 9118 9119 Reviewed by Darin. 9120 9121 Bug 19116: SquirrelFish shouldn't regress on variable lookups 9122 <https://bugs.webkit.org/show_bug.cgi?id=19116> 9123 9124 Last of the multiscope look up optimisations. This is a wash overall on SunSpider 9125 but is a factor of 5-10 improvement in multiscope read/write/modify (eg. ++, --, +=, 9126 ... applied to any non-local var). 9127 9128 * kjs/nodes.cpp: 9129 (KJS::PostIncResolveNode::emitCode): 9130 (KJS::PostDecResolveNode::emitCode): 9131 (KJS::PreIncResolveNode::emitCode): 9132 (KJS::PreDecResolveNode::emitCode): 9133 (KJS::ReadModifyResolveNode::emitCode): 9134 9135 2008-05-22 David Kilzer <ddkilzer (a] apple.com> 9136 9137 <rdar://problem/5954233> Add method to release free memory from FastMalloc 9138 9139 Patch suggested by Mark Rowe. Rubber-stamped by Maciej. 9140 9141 * JavaScriptCore.exp: Export _releaseFastMallocFreeMemory. 9142 * wtf/FastMalloc.cpp: 9143 (WTF::TCMallocStats::): Added releaseFastMallocFreeMemory() for both 9144 system malloc and FastMalloc code paths. 9145 * wtf/FastMalloc.h: Define releaseFastMallocFreeMemory(). 9146 9147 2008-05-22 Oliver Hunt <oliver (a] apple.com> 9148 9149 RS=Maciej. 9150 9151 Roll out r34020 as it causes recursion tests to fail. 9152 9153 * kjs/object.cpp: 9154 (KJS::JSObject::call): 9155 9156 2008-05-22 Oliver Hunt <oliver (a] apple.com> 9157 9158 Reviewed by Mark. 9159 9160 Don't leak the SymbolTable when compiling eval code. 9161 9162 * kjs/nodes.cpp: 9163 (KJS::EvalNode::generateCode): 9164 9165 2008-05-22 Simon Hausmann <hausmann (a] webkit.org> 9166 9167 Reviewed by Oliver. 9168 9169 Qt build fix. 9170 9171 * JavaScriptCore.pri: Added DebuggerCallFrame to the build. 9172 * VM/LabelID.h: Include limits.h for UINT_MAX. 9173 * wtf/VectorTraits.h: Include memory for std::auto_ptr. 9174 9175 2008-05-22 Geoffrey Garen <ggaren (a] apple.com> 9176 9177 Reviewed by Adam Roben. 9178 9179 Removed the old recursion guard mechanism, since squirrelfish has its 9180 own mechanism. Also removed some old JS call tracing code, since we 9181 have other ways to do that, too. 9182 9183 SunSpider reports no change. 9184 9185 * kjs/object.cpp: 9186 (KJS::JSObject::call): 9187 9188 2008-05-22 Maciej Stachowiak <mjs (a] apple.com> 9189 9190 Reviewed by Oliver. 9191 9192 - fixed <rdar://problem/5954979> crash on celtic kane JS benchmark 9193 9194 * kjs/nodes.cpp: 9195 (KJS::WithNode::emitCode): 9196 (KJS::TryNode::emitCode): 9197 9198 2008-05-21 Kevin McCullough <kmccullough (a] apple.com> 9199 9200 Reviewed by Maciej and Geoff. 9201 9202 <rdar://problem/5951561> Turn on JavaScript Profiler 9203 -As part of the effort to turn on the profiler it would be helpful if it 9204 did not need ExecStates to represent the stack location of the currently 9205 executing statement. 9206 -We now create each node as necessary with a reference to the current 9207 node and each node knows its parent so that the tree can be made without 9208 the entire stack. 9209 9210 * profiler/Profile.cpp: 9211 (KJS::Profile::Profile): The current node starts at the head. 9212 (KJS::Profile::stopProfiling): The current node is cleared when profiling 9213 stops. 9214 (KJS::Profile::willExecute): The current node either adds a new child or 9215 starts and returns a reference to an already existing child if the call 9216 ID that is requested already exists. 9217 (KJS::Profile::didExecute): The current node finishes and returns its 9218 parent. 9219 * profiler/Profile.h: Use a single callIdentifier instead of a vector 9220 since we no longer use the whole stack. 9221 * profiler/ProfileNode.cpp: Now profile nodes keep a reference to their 9222 parent. 9223 (KJS::ProfileNode::ProfileNode): Initialize the parent. 9224 (KJS::ProfileNode::didExecute): Record the time and return the parent. 9225 (KJS::ProfileNode::addOrStartChild): If the given callIdentifier is 9226 already a child, start it and return it, otherwise create a new one and 9227 return that. 9228 (KJS::ProfileNode::stopProfiling): Same logic, just use the new function. 9229 * profiler/ProfileNode.h: Utilize the parent. 9230 (KJS::ProfileNode::create): 9231 (KJS::ProfileNode::parent): 9232 * profiler/Profiler.cpp: 9233 (KJS::Profiler::startProfiling): Here is the only place where the 9234 ExecState is used to figure out where in the stack the profiler is 9235 currently profiling. 9236 (KJS::dispatchFunctionToProfiles): Only send one CallIdentifier instead 9237 of a vector of them. 9238 (KJS::Profiler::willExecute): Ditto. 9239 (KJS::Profiler::didExecute): Ditto. 9240 (KJS::createCallIdentifier): Create only one CallIdentifier. 9241 (KJS::createCallIdentifierFromFunctionImp): Ditto. 9242 * profiler/Profiler.h: 9243 9244 2008-05-21 Darin Adler <darin (a] apple.com> 9245 9246 Reviewed by Maciej. 9247 9248 - https://bugs.webkit.org/show_bug.cgi?id=19180 9249 speed up the < operator for the case when both values are integers 9250 9251 Makes standalone SunSpider 1.022x faster. 9252 9253 * VM/Machine.cpp: 9254 (KJS::jsLess): Add a special case for when both are numbers that fit in a JSImmediate. 9255 9256 2008-05-21 Maciej Stachowiak <mjs (a] apple.com> 9257 9258 Reviewed by Oliver and Sam. 9259 9260 - fixed <rdar://problem/5815631> REGRESSION (r31239): Multiscope optimisation of function calls results in incorrect this value (breaks tvtv.de) 9261 9262 Track global this value in the scope chain so we can retrieve it 9263 efficiently but it follows lexical scope properly. 9264 9265 * kjs/ExecState.h: 9266 (KJS::ExecState::globalThisValue): 9267 * kjs/JSGlobalObject.h: 9268 (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): 9269 * kjs/function_object.cpp: 9270 (KJS::FunctionObjectImp::construct): 9271 * kjs/scope_chain.h: 9272 (KJS::ScopeChainNode::ScopeChainNode): 9273 (KJS::ScopeChainNode::globalThisObject): 9274 (KJS::ScopeChainNode::push): 9275 (KJS::ScopeChain::ScopeChain): 9276 9277 2008-05-21 Kevin McCullough <kmccullough (a] apple.com> 9278 9279 Sadness :( 9280 9281 * kjs/config.h: 9282 9283 2008-05-21 Kevin McCullough <kmccullough (a] apple.com> 9284 9285 Reviewed by Maciej. 9286 9287 <rdar://problem/5950867> JSProfiler: Allow the profiler to "Focus" a 9288 profile node. 9289 - This patch updatest the times of the visible nodes correctly, but to do 9290 so, some of the design of the ProfileNode changed. 9291 9292 * JavaScriptCore.exp: export focus' symbol. 9293 * profiler/Profile.cpp: ProfileNodes now take a reference to the head of 9294 the profile tree to get up-to-date accurate total profile time. 9295 (KJS::Profile::Profile): Pass 0 for the head node. 9296 (KJS::Profile::stopProfiling): stopProfiling no longer needs the time 9297 passed into it, since it can get it from the head and it does not need to 9298 be told it is the head because it can figure it out on it's own. 9299 (KJS::Profile::willExecute): Set the head node for each created node. 9300 * profiler/Profile.h: 9301 (KJS::Profile::focus): Instead of taking a CallIdentifier that the caller 9302 would have to create, now focus() takes a ProfileNode that they should 9303 already have a reference to and focus() can extract the CallIdentifier 9304 from it. 9305 * profiler/ProfileNode.cpp: Create actual and visible versions fo the 9306 total and self times for focus and exclude. Also add a head node 9307 reference so that nodes can get information from their head. 9308 (KJS::ProfileNode::ProfileNode): 9309 (KJS::ProfileNode::stopProfiling): Rename the total and self time 9310 variables and set the visual ones to the actual ones, so that without any 9311 changes to the visual versions of these variables, their times will match 9312 the actual times. 9313 (KJS::ProfileNode::focus): Now focus() has a bool to force it's children 9314 to be visible if this node is visible. If this node does not match the 9315 CallIdentifier being focused then the visibleTotalTime is only updated if 9316 one or more of it's children is the CallIdentifier being focused. 9317 (KJS::ProfileNode::restoreAll): Restores all variables with respect to 9318 the visible data in the ProfileNode. 9319 (KJS::ProfileNode::endAndRecordCall): Name change. 9320 (KJS::ProfileNode::debugPrintData): Dump the new variables. 9321 (KJS::ProfileNode::debugPrintDataSampleStyle): Name change. 9322 * profiler/ProfileNode.h: Use the new variables and reference to the head 9323 node. 9324 (KJS::ProfileNode::create): 9325 (KJS::ProfileNode::totalTime): 9326 (KJS::ProfileNode::setTotalTime): 9327 (KJS::ProfileNode::selfTime): 9328 (KJS::ProfileNode::setSelfTime): 9329 (KJS::ProfileNode::totalPercent): 9330 (KJS::ProfileNode::selfPercent): 9331 (KJS::ProfileNode::setVisible): 9332 9333 2008-05-21 Alp Toker <alp (a] nuanti.com> 9334 9335 GTK+/UNIX testkjs build fix. Include signal.h. 9336 9337 * kjs/testkjs.cpp: 9338 9339 2008-05-21 Oliver Hunt <oliver (a] apple.com> 9340 9341 Yet more windows build fixes 9342 9343 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 9344 9345 2008-05-21 Oliver Hunt <oliver (a] apple.com> 9346 9347 Yet more windows build fixes 9348 9349 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 9350 9351 2008-05-21 Alp Toker <alp (a] nuanti.com> 9352 9353 GTK+ build fix. Add DebuggerCallFrame.cpp and take AllInOneFile.cpp 9354 changes into account. 9355 9356 * GNUmakefile.am: 9357 9358 2008-05-21 Oliver Hunt <oliver (a] apple.com> 9359 9360 Add DebuggerCallFrame.{h,cpp} to the project file 9361 9362 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 9363 9364 2008-05-21 Alp Toker <alp (a] nuanti.com> 9365 9366 GTK+ port build fixes following squirrelfish merge r33979. 9367 9368 * GNUmakefile.am: 9369 9370 2008-05-21 Maciej Stachowiak <mjs (a] apple.com> 9371 9372 Reviewed by Darin. 9373 9374 - save a hash lookup wne writing to global properties 9375 0.3% speedup on SunSpider, 7% on bitops-bitwise-and 9376 9377 * VM/Machine.cpp: 9378 (KJS::resolveBase): Check for being a the end of the scope chain 9379 before hash lookup. 9380 9381 2008-05-21 Alp Toker <alp (a] nuanti.com> 9382 9383 Rubber-stamped by Maciej. 9384 9385 Replace non-standard #pragma marks with comments to avoid compiler 9386 warnings. 9387 9388 * profiler/ProfileNode.cpp: 9389 9390 2008-05-21 Geoffrey Garen <ggaren (a] apple.com> 9391 9392 Reviewed by Mark Rowe. 9393 9394 Fix layout test failure in fast/dom/getter-on-window-object2 introduced in r33961. 9395 9396 * JavaScriptCore.exp: 9397 * kjs/JSGlobalObject.cpp: 9398 (KJS::JSGlobalObject::defineGetter): 9399 (KJS::JSGlobalObject::defineSetter): 9400 * kjs/JSGlobalObject.h: 9401 9402 === End merge of squirrelfish === 9403 9404 2008-05-21 Geoffrey Garen <ggaren (a] apple.com> 9405 9406 Reviewed by Tim Hatcher. 9407 9408 Merged with trunk WebCore's new debugger. 9409 9410 * kjs/DebuggerCallFrame.cpp: 9411 (KJS::DebuggerCallFrame::evaluate): Changed this function to separate 9412 the exception value from the return value. The WebKit debugger treats 9413 them as one, but the WebCore debugger doesn't. 9414 9415 * kjs/DebuggerCallFrame.h: 9416 (KJS::DebuggerCallFrame::dynamicGlobalObject): Added a new accessor for 9417 the dynamic global object, since the debugger doesn't want the lexical 9418 global object. 9419 9420 2008-05-21 Oliver Hunt <oliver (a] apple.com> 9421 9422 Reviewed by Maciej. 9423 9424 Bug 19116: SquirrelFish shouldn't regress on variable lookups 9425 <https://bugs.webkit.org/show_bug.cgi?id=19116> 9426 9427 Optimise cross scope assignment, 0.4% progression in sunspider. 9428 9429 * VM/CodeBlock.cpp: 9430 (KJS::CodeBlock::dump): 9431 * VM/CodeGenerator.cpp: 9432 (KJS::CodeGenerator::emitPutScopedVar): 9433 * VM/CodeGenerator.h: 9434 * VM/Machine.cpp: 9435 (KJS::Machine::privateExecute): 9436 * VM/Opcode.h: 9437 * kjs/nodes.cpp: 9438 (KJS::AssignResolveNode::emitCode): 9439 9440 2008-05-21 Maciej Stachowiak <mjs (a] apple.com> 9441 9442 Reviewed by Oliver. 9443 9444 - check property map before symbol table in JSGlobalObject::getOwnPropertySlot 9445 0.5% speedup on SunSpider 9446 9447 * kjs/JSGlobalObject.h: 9448 (KJS::JSGlobalObject::getOwnPropertySlot): Check property map before symbol table 9449 because symbol table access is likely to have been optimized. 9450 9451 2008-05-21 Oliver Hunt <oliver (a] apple.com> 9452 9453 Reviewed by Maciej. 9454 9455 Bug 19116: SquirrelFish shouldn't regress on variable lookups 9456 <https://bugs.webkit.org/show_bug.cgi?id=19116> 9457 9458 Optimise multiscope lookup of statically resolvable function calls. 9459 SunSpider reports a 1.5% improvement, including 37% on 9460 controlflow-recursive for some reason :D 9461 9462 * VM/CodeBlock.cpp: 9463 (KJS::CodeBlock::dump): 9464 * VM/CodeGenerator.cpp: 9465 (KJS::CodeGenerator::emitResolve): 9466 * VM/CodeGenerator.h: 9467 * kjs/nodes.cpp: 9468 (KJS::FunctionCallResolveNode::emitCode): 9469 9470 2008-05-21 Maciej Stachowiak <mjs (a] apple.com> 9471 9472 Reviewed by Oliver. 9473 9474 - give JSGlobalObject a special version of getOwnPropertySlot that tells you if the slot is directly writable 9475 (WebCore change using this is a 2.6% speedup on in-browser SunSpider). 9476 9477 * JavaScriptCore.exp: 9478 * kjs/JSGlobalObject.h: 9479 (KJS::JSGlobalObject::getOwnPropertySlot): 9480 * kjs/JSVariableObject.h: 9481 (KJS::JSVariableObject::symbolTableGet): 9482 * kjs/object.h: 9483 (KJS::JSObject::getDirectLocation): 9484 (KJS::JSObject::getOwnPropertySlotForWrite): 9485 * kjs/property_map.cpp: 9486 (KJS::PropertyMap::getLocation): 9487 * kjs/property_map.h: 9488 * kjs/property_slot.h: 9489 (KJS::PropertySlot::putValue): 9490 9491 2008-05-20 Oliver Hunt <oliver (a] apple.com> 9492 9493 Reviewed by Maciej. 9494 9495 Bug 19116: SquirrelFish shouldn't regress on variable lookups 9496 <https://bugs.webkit.org/show_bug.cgi?id=19116> 9497 9498 This restores multiscope optimisation to simple resolve, producing 9499 a 2.6% progression in SunSpider. Have verified that none of the 9500 sites broken by the multiscope optimisation in trunk were effected 9501 by this change. 9502 9503 * VM/CodeBlock.cpp: 9504 (KJS::CodeBlock::dump): 9505 * VM/CodeBlock.h: 9506 (KJS::CodeBlock::CodeBlock): 9507 * VM/CodeGenerator.cpp: 9508 (KJS::CodeGenerator::findScopedProperty): 9509 (KJS::CodeGenerator::emitResolve): 9510 * VM/CodeGenerator.h: 9511 * VM/Machine.cpp: 9512 (KJS::resolve_n): 9513 (KJS::Machine::privateExecute): 9514 * VM/Opcode.h: 9515 * kjs/JSVariableObject.h: 9516 9517 2008-05-20 Oliver Hunt <oliver (a] apple.com> 9518 9519 Fixerate the windows build. 9520 9521 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 9522 * VM/CodeGenerator.cpp: 9523 * VM/RegisterFile.h: 9524 * kjs/JSGlobalObject.h: 9525 * kjs/Parser.cpp: 9526 * kjs/interpreter.h: 9527 9528 2008-05-20 Oliver Hunt <oliver (a] apple.com> 9529 9530 Reviewed by Geoff. 9531 9532 Bug 19110: SquirrelFish: Google Maps - no maps 9533 <https://bugs.webkit.org/show_bug.cgi?id=19110> 9534 9535 Correct a comedy of errors present in my original patch to "fix" 9536 exceptions occurring midway through pre and post increment. This 9537 solution is cleaner than the original, doesn't need the additional 9538 opcodes, and as an added benefit does not break Google Maps. 9539 9540 Sunspider reports a 0.4% progression. 9541 9542 * VM/CodeBlock.cpp: 9543 (KJS::CodeBlock::dump): 9544 * VM/CodeGenerator.cpp: 9545 * VM/CodeGenerator.h: 9546 * VM/Machine.cpp: 9547 (KJS::Machine::privateExecute): 9548 * VM/Opcode.h: 9549 * kjs/nodes.cpp: 9550 (KJS::PreIncResolveNode::emitCode): 9551 (KJS::PreDecResolveNode::emitCode): 9552 (KJS::PreIncBracketNode::emitCode): 9553 (KJS::PreDecBracketNode::emitCode): 9554 (KJS::PreIncDotNode::emitCode): 9555 (KJS::PreDecDotNode::emitCode): 9556 9557 2008-05-20 Maciej Stachowiak <mjs (a] apple.com> 9558 9559 Reviewed by Oliver. 9560 9561 - inline JSGlobalObject::getOwnPropertySlot 9562 1% improvement on in-browser SunSpider (a wash command-line) 9563 9564 * kjs/JSGlobalObject.cpp: 9565 * kjs/JSGlobalObject.h: 9566 (KJS::JSGlobalObject::getOwnPropertySlot): 9567 9568 2008-05-18 Oliver Hunt <oliver (a] apple.com> 9569 9570 Reviewed by Maciej. 9571 9572 Bug 18752: SQUIRRELFISH: exceptions are not always handled by the vm 9573 <https://bugs.webkit.org/show_bug.cgi?id=18752> 9574 9575 Handle exceptions thrown by toString conversion in subscript operators, 9576 this should basically complete exception handling in SquirrelFish. 9577 9578 Sunspider reports no regression. 9579 9580 * VM/Machine.cpp: 9581 (KJS::Machine::privateExecute): 9582 9583 2008-05-17 Geoffrey Garen <ggaren (a] apple.com> 9584 9585 Reviewed by Oliver Hunt. 9586 9587 [Reapplying patch with previously missing files from r33553 -- Oliver] 9588 9589 Behold: debugging. 9590 9591 SunSpider reports no change. 9592 9593 * JavaScriptCore.xcodeproj/project.pbxproj: Added DebuggerCallFrame.h/.cpp, 9594 and created a debugger folder. 9595 9596 * VM/CodeGenerator.cpp: 9597 (KJS::CodeGenerator::generate): If the debugger is attached, always 9598 generate full scope chains for its sake. 9599 9600 * VM/Machine.cpp: 9601 (KJS::Machine::unwindCallFrame): Notify the debugger when unwinding 9602 due to an exception, so it doesn't keep stale call frames around. 9603 9604 (KJS::Machine::execute): Set Callee to 0 in eval frames, so the 9605 debugger can distinguish them from function call frames. 9606 9607 (KJS::Machine::debug): Simplified this function, since the debugger 9608 doesn't actually need all the information we used to provide. 9609 9610 (KJS::Machine::privateExecute): Treat debugging hooks like other function 9611 calls, so the code we hook into (the debugger UI) can be optimized. 9612 9613 * kjs/debugger.cpp: Nixed these default callback implementations and 9614 made the callbacks pure virtual instead, so the compiler could tell me 9615 if I made a mistake in one of the subclasses. 9616 9617 * kjs/debugger.h: Removed a bunch of irrelevent data from the debugger 9618 callbacks. Changed from passing an ExecState* to passing a 9619 DebuggerCallFrame*, since an ExecState* doesn't contain sufficient 9620 information anymore. 9621 9622 * kjs/function.cpp: 9623 (KJS::globalFuncEval): Easiest bug fix evar! 9624 9625 [Previously missing files from r33553] 9626 * kjs/DebuggerCallFrame.cpp: Copied from JavaScriptCore/profiler/FunctionCallProfile.h. 9627 (KJS::DebuggerCallFrame::functionName): 9628 (KJS::DebuggerCallFrame::thisObject): 9629 (KJS::DebuggerCallFrame::evaluateScript): 9630 * kjs/DebuggerCallFrame.h: Copied from JavaScriptCore/VM/Register.h. 9631 (KJS::DebuggerCallFrame::DebuggerCallFrame): 9632 (KJS::DebuggerCallFrame::scopeChain): 9633 (KJS::DebuggerCallFrame::exception): 9634 9635 2008-05-17 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 9636 9637 Reviewed by Oliver. 9638 9639 Bug 18991: SquirrelFish: Major codegen issue in a.b=expr, a[b]=expr 9640 <https://bugs.webkit.org/show_bug.cgi?id=18991> 9641 9642 Fix the last remaining blocking cases of this bug. 9643 9644 * kjs/grammar.y: 9645 * kjs/nodes.cpp: 9646 (KJS::ReadModifyResolveNode::emitCode): 9647 9648 2008-05-17 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 9649 9650 Reviewed by Oliver. 9651 9652 Partial fix for: 9653 9654 Bug 18991: SquirrelFish: Major codegen issue in a.b=expr, a[b]=expr 9655 <https://bugs.webkit.org/show_bug.cgi?id=18991> 9656 9657 Ensure that the code generated for assignments uses temporaries whenever 9658 necessary. This patch covers the vast majority of situations, but there 9659 are still a few left. 9660 9661 This patch also adds some missing cases to CodeBlock::dump(). 9662 9663 * VM/CodeBlock.cpp: 9664 (KJS::CodeBlock::dump): 9665 * VM/CodeGenerator.h: 9666 (KJS::CodeGenerator::destinationForAssignResult): 9667 (KJS::CodeGenerator::leftHandSideNeedsCopy): 9668 (KJS::CodeGenerator::emitNodeForLeftHandSide): 9669 * kjs/NodeInfo.h: 9670 * kjs/grammar.y: 9671 * kjs/nodes.cpp: 9672 (KJS::AssignDotNode::emitCode): 9673 (KJS::ReadModifyDotNode::emitCode): 9674 (KJS::AssignBracketNode::emitCode): 9675 (KJS::ReadModifyBracketNode::emitCode): 9676 (KJS::ForInNode::ForInNode): 9677 * kjs/nodes.h: 9678 (KJS::ReadModifyResolveNode::): 9679 (KJS::AssignResolveNode::): 9680 (KJS::ReadModifyBracketNode::): 9681 (KJS::AssignBracketNode::): 9682 (KJS::AssignDotNode::): 9683 (KJS::ReadModifyDotNode::): 9684 9685 2008-05-17 Oliver Hunt <oliver (a] apple.com> 9686 9687 Reviewed by Maciej. 9688 9689 Bug 19106: SquirrelFish: Activation is not marked correctly 9690 <https://bugs.webkit.org/show_bug.cgi?id=19106> 9691 9692 We can't rely on the symbol table for a count of the number of globals 9693 we need to mark as that misses duplicate parameters and 'this'. Now we 9694 use the actual local register count from the codeBlock. 9695 9696 * kjs/JSActivation.cpp: 9697 (KJS::JSActivation::mark): 9698 9699 2008-05-16 Oliver Hunt <oliver (a] apple.com> 9700 9701 Reviewed by Geoff. 9702 9703 Bug 19076: SquirrelFish: RegisterFile can be corrupted if implictly reenter global scope with no declared vars 9704 <https://bugs.webkit.org/show_bug.cgi?id=19076> 9705 9706 Don't delay allocation of initial global RegisterFile, as we can't guarantee we will be able 9707 to allocate the global 'this' register safely at any point after initialisation of the Global 9708 Object. 9709 9710 Unfortunately this initial allocation caused a regression of 0.2-0.3%, however this patch adds 9711 support for the static slot optimisation for the global Math object which brings it to a 0.3% 9712 progression. 9713 9714 * VM/CodeGenerator.cpp: 9715 (KJS::CodeGenerator::programCodeThis): 9716 (KJS::CodeGenerator::CodeGenerator): 9717 (KJS::CodeGenerator::addParameter): 9718 * VM/CodeGenerator.h: 9719 * VM/Machine.cpp: 9720 (KJS::Machine::execute): 9721 * kjs/ExecState.h: 9722 * kjs/JSGlobalObject.cpp: 9723 (KJS::JSGlobalObject::reset): 9724 * kjs/JSGlobalObject.h: 9725 (KJS::JSGlobalObject::GlobalPropertyInfo::GlobalPropertyInfo): 9726 (KJS::JSGlobalObject::addStaticGlobals): 9727 * kjs/nodes.cpp: 9728 9729 2008-05-16 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 9730 9731 Reviewed by Oliver Hunt. 9732 9733 Bug 19098: SquirrelFish: Ref'd temporaries can be clobbered 9734 <https://bugs.webkit.org/show_bug.cgi?id=19098> 9735 9736 When doing code generation for a statement list, increase the reference 9737 count on a register that might eventually be returned, so that it doesn't 9738 get clobbered by a request for a new temporary. 9739 9740 * kjs/nodes.cpp: 9741 (KJS::statementListEmitCode): 9742 9743 2008-05-16 Maciej Stachowiak <mjs (a] apple.com> 9744 9745 Reviewed by Oliver. 9746 9747 - fixed Bug 19044: SquirrelFish: Bogus values enter evaluation when closing over scope with parameter and var with same name 9748 https://bugs.webkit.org/show_bug.cgi?id=19044 9749 9750 * kjs/JSActivation.cpp: 9751 (KJS::JSActivation::copyRegisters): Use numLocals from the code 9752 block rather than the size of the symbol table for the number of 9753 registers to copy, to account for duplicate parameters and vars 9754 with the same name as parameters (we still have potentially 9755 suboptimal codegen in that we allocate a local register for the 9756 var in the latter case but it is never used). 9757 9758 2008-05-15 Geoffrey Garen <ggaren (a] apple.com> 9759 9760 Not reviewed. 9761 9762 We regret to inform you that your program is crashing because you were 9763 stupid. 9764 9765 * VM/Machine.cpp: 9766 (KJS::Machine::privateExecute): Math is hard. 9767 9768 2008-05-14 Geoffrey Garen <ggaren (a] apple.com> 9769 9770 Reviewed by Oliver Hunt. 9771 9772 A little more debugger action: filled in op_debug. All debugger control 9773 flow works now, but variable inspection and backtraces still don't. 9774 9775 SunSpider reports no change. 9776 9777 * VM/CodeGenerator.cpp: Changed op_debug to accept line number parameters. 9778 9779 * VM/Machine.cpp: 9780 (KJS::Machine::getFunctionAndArguments): Moved op_debug into a 9781 NEVER_INLINE function to avoid a stunning 10% performance regression. 9782 Also factored out a common function for retrieving the function and 9783 arguments from a call frame. 9784 9785 * kjs/JSActivation.cpp: 9786 (KJS::JSActivation::createArgumentsObject): Use the new factored out 9787 function mentioned above. 9788 9789 * kjs/Parser.cpp: 9790 (KJS::Parser::parse): Increment m_sourceId before assigning it, so the 9791 sourceId we send to the debugger matches the sourceId recorded in the 9792 node. 9793 9794 * kjs/nodes.cpp: Emit debugging hooks. 9795 9796 2008-05-14 Oliver Hunt <oliver (a] apple.com> 9797 9798 Reviewed by Maciej. 9799 9800 Bug 19024: SQUIRRELFISH: ASSERTION FAILED: activation->isActivationObject() in Machine::unwindCallFrame 9801 <https://bugs.webkit.org/show_bug.cgi?id=19024> 9802 9803 This fixes a number of issues. The most important is that we now check every register 9804 file for tainting rather than just looking for function register files as that was 9805 insufficient. Additionally guarded against implicit re-entry into Eval code. 9806 9807 Also added a few additional assertions to reduce the amout of time between something 9808 going wrong and us seeing the error. 9809 9810 * VM/Machine.cpp: 9811 (KJS::Machine::execute): 9812 (KJS::Machine::privateExecute): 9813 * VM/RegisterFile.cpp: 9814 (KJS::RegisterFile::growBuffer): 9815 (KJS::RegisterFile::addGlobalSlots): 9816 * VM/RegisterFileStack.cpp: 9817 (KJS::RegisterFileStack::pushGlobalRegisterFile): 9818 (KJS::RegisterFileStack::pushFunctionRegisterFile): 9819 * VM/RegisterFileStack.h: 9820 (KJS::RegisterFileStack::inImplicitCall): 9821 9822 2008-05-14 Geoffrey Garen <ggaren (a] apple.com> 9823 9824 Reviewed by Oliver Hunt. 9825 9826 A little more debugger action: emit opcodes for debugger hooks. Right 9827 now, the opcode implementation is just a stub. 9828 9829 SunSpider reports no change. 9830 9831 Some example codegen for "function f() { 1; }": 9832 9833 [ 0] dbg DidEnterCallFrame 9834 [ 2] dbg WillExecuteStatement 9835 [ 4] load tr0, 1(@k0) 9836 [ 7] load tr0, undefined(@k1) 9837 [ 10] dbg WillLeaveCallFrame 9838 [ 12] ret tr0 9839 9840 2008-05-14 Oliver Hunt <oliver (a] apple.com> 9841 9842 Reviewed by Geoff. 9843 9844 Bug 19025: SQUIRRELFISH: malformed syntax in onload handler causes crash 9845 <https://bugs.webkit.org/show_bug.cgi?id=19025> 9846 9847 Simple fix -- move the use of functionBodyNode to after the null check. 9848 9849 * kjs/function_object.cpp: 9850 (KJS::FunctionObjectImp::construct): 9851 9852 2008-05-13 Geoffrey Garen <ggaren (a] apple.com> 9853 9854 Reviewed by Oliver Hunt. 9855 9856 Fixed a codegen crash with run-time parse errors. 9857 9858 SunSpider reports no change. 9859 9860 emitThrowError needs to return the temporary holding the error, not dst, 9861 since dst may be NULL. In fact, emitThrowError shouldn't take a dst 9862 parameter at all, since exceptions should not modify the destination 9863 register. 9864 9865 2008-05-13 Oliver Hunt <oliver (a] apple.com> 9866 9867 Reviewed by Geoff. 9868 9869 Bug 19027: SquirrelFish: Incorrect codegen for pre-increment 9870 <https://bugs.webkit.org/show_bug.cgi?id=19027> 9871 9872 This fixes the codegen issues for the pre-inc/decrement operators 9873 to prevent incorrectly clobbering the destination in the event of 9874 an exception. 9875 9876 * VM/CodeBlock.cpp: 9877 (KJS::CodeBlock::dump): 9878 * VM/CodeGenerator.cpp: 9879 (KJS::CodeGenerator::emitPreInc): 9880 (KJS::CodeGenerator::emitPreDec): 9881 * VM/CodeGenerator.h: 9882 * VM/Machine.cpp: 9883 (KJS::Machine::privateExecute): 9884 * VM/Opcode.h: 9885 * kjs/nodes.cpp: 9886 (KJS::PreIncResolveNode::emitCode): 9887 (KJS::PreDecResolveNode::emitCode): 9888 (KJS::PreIncBracketNode::emitCode): 9889 (KJS::PreDecBracketNode::emitCode): 9890 (KJS::PreIncDotNode::emitCode): 9891 (KJS::PreDecDotNode::emitCode): 9892 9893 2008-05-13 Geoffrey Garen <ggaren (a] apple.com> 9894 9895 Reviewed by Oliver Hunt. 9896 9897 A little more debugger action: supply a real line number, sourceId, 9898 and sourceURL in op_new_error. 9899 9900 SunSpider reports a .2% speedup. Not sure what that's about. 9901 9902 * VM/Machine.cpp: 9903 (KJS::Machine::privateExecute): Use the new good stuff in op_new_error. 9904 9905 * kjs/nodes.cpp: 9906 (KJS::RegExpNode::emitCode): Use the shared emitThrowError instead of 9907 rolling our own. 9908 9909 2008-05-13 Geoffrey Garen <ggaren (a] apple.com> 9910 9911 Reviewed by Oliver Hunt. 9912 9913 A little more debugger action: implemented the exception callback. 9914 9915 SunSpider reports a .2% speedup. Not sure what that's about. 9916 9917 * VM/CodeBlock.h: A little refactoring here. Store a pointer to our 9918 owner ScopeNode so we can retrieve data from it. This allows us to 9919 stop storing copies of the data ourselves. Also, store a "this" register 9920 instead of a code type, since we were only using the code type to 9921 calculate the "this" register. 9922 9923 * VM/CodeGenerator.cpp: 9924 (KJS::CodeGenerator::generate): Calculate the "this" register mentioned 9925 above. Also, take care of removing "this" from the symbol table after 9926 codegen is done, since relying on the timing of a destructor for correct 9927 behavior is not so good. 9928 9929 * VM/Machine.cpp: 9930 (KJS::Machine::throwException): Invoke the debugger's exception callback. 9931 (KJS::Machine::privateExecute): Use the "this" register mentioned above. 9932 9933 2008-05-13 Geoffrey Garen <ggaren (a] apple.com> 9934 9935 Reviewed by Oliver Hunt. 9936 9937 Removed some unused exception machinery. 9938 9939 SunSpider reports a .3% speedup. 9940 9941 * API/JSCallbackObject.h: 9942 * API/JSCallbackObjectFunctions.h: 9943 * JavaScriptCore.exp: 9944 * VM/Machine.cpp: 9945 (KJS::Machine::privateExecute): 9946 * kjs/internal.cpp: 9947 * kjs/object.cpp: 9948 * kjs/object.h: 9949 * kjs/value.h: 9950 9951 2008-05-13 Geoffrey Garen <ggaren (a] apple.com> 9952 9953 Reviewed by Oliver Hunt. 9954 9955 A little more debugger action. 9956 9957 * kjs/debugger.cpp: 9958 * kjs/debugger.h: Removed debuggersPresent because it was unused. 9959 Replaced AttachedGlobalObject linked list with a HashSet because HashSet 9960 is faster and simpler. Changed all functions to return void instead of 9961 bool, because no clients ever return false, and we don't want to support 9962 it. 9963 9964 * kjs/nodes.cpp: Did some up-keep to avoid build bustage. 9965 (KJS::Node::handleException): 9966 (KJS::BreakpointCheckStatement::execute): 9967 (KJS::FunctionBodyNodeWithDebuggerHooks::execute): 9968 9969 2008-05-13 Oliver Hunt <oliver (a] apple.com> 9970 9971 Reviewed by Darin. 9972 9973 Bug 18752: SQUIRRELFISH: exceptions are not always handled by the vm 9974 <https://bugs.webkit.org/show_bug.cgi?id=18752> 9975 9976 Replace old attempt at "branchless" exceptions as the extra information 9977 being passed made gcc an unhappy compiler, replacing these custom toNumber 9978 calls with ordinary toNumber logic (by relying on toNumber now preventing 9979 side effects after an exception has been thrown) provided sufficient leeway 9980 to add the additional checks for the remaining unchecked cases. 9981 9982 This leaves only toString conversions in certain contexts as possibly 9983 misbehaving. 9984 9985 * VM/Machine.cpp: 9986 (KJS::jsAdd): 9987 (KJS::resolve): 9988 (KJS::resolveBaseAndProperty): 9989 (KJS::resolveBaseAndFunc): 9990 (KJS::Machine::privateExecute): 9991 * VM/Opcode.h: 9992 * kjs/value.h: 9993 (KJS::JSValue::safeGetNumber): 9994 9995 2008-05-13 Geoffrey Garen <ggaren (a] apple.com> 9996 9997 Reviewed by Oliver Hunt. 9998 9999 First steps toward supporting the debugger API: support the sourceParsed 10000 callback; plus some minor fixups. 10001 10002 SunSpider reports no regression. 10003 10004 * VM/CodeGenerator.h: Removed a misleading comment. 10005 10006 * kjs/Parser.h: Changed the parser to take an ExecState*, so it can 10007 implement the sourceParsed callback -- that way, we only have to 10008 implement the callback in one place. 10009 10010 * kjs/debugger.cpp: Nixed DebuggerImp, because its sole purpose in life 10011 was to demonstrate the misapplication of design patterns. 10012 10013 * kjs/debugger.h: Changed sourceParsed to take a SourceProvider, to 10014 reduce copying, and not to return a value, because pausing execution 10015 after parsing is complicated, and no clients needed that ability, anyway. 10016 10017 * kjs/grammar.y: Make sure never to pass a NULL SourceElements* to 10018 didFinishParsing -- that simplifies some code down the road. 10019 10020 * kjs/nodes.cpp: Don't generate special AST nodes just because the 10021 debugger is attached -- that's a relic of the old AST execution model, 10022 and those nodes haven't been maintained. 10023 10024 2008-05-13 Oliver Hunt <oliver (a] apple.com> 10025 10026 Reviewed by Geoff. 10027 10028 Bug 18752: SQUIRRELFISH: exceptions are not always handled by the vm 10029 <https://bugs.webkit.org/show_bug.cgi?id=18752> 10030 10031 First step: prevent incorrect evaluation of valueOf/toString conversion 10032 in right hand side of expression after earlier conversion throws. 10033 10034 * API/JSCallbackObjectFunctions.h: 10035 (KJS::::toNumber): 10036 * kjs/object.cpp: 10037 (KJS::JSObject::defaultValue): 10038 10039 2008-05-12 Oliver Hunt <oliver (a] apple.com> 10040 10041 Reviewed by Geoff. 10042 10043 Bug 18934: SQUIRRELFISH: ASSERT @ nytimes.com due to RegisterFile being clobbered 10044 <https://bugs.webkit.org/show_bug.cgi?id=18934> 10045 10046 Unfortunately we cannot create new statically optimised globals if there are any 10047 tainted RegisterFiles on the RegisterFileStack. To handle this we re-introduce 10048 (in a slightly cleaner form) the inImplicitCall concept to the RegisterFileStack. 10049 10050 * VM/Machine.cpp: 10051 (KJS::Machine::execute): 10052 * VM/RegisterFileStack.cpp: 10053 (KJS::RegisterFileStack::pushFunctionRegisterFile): 10054 * VM/RegisterFileStack.h: 10055 10056 2008-05-12 Geoffrey Garen <ggaren (a] apple.com> 10057 10058 Reviewed by Maciej Stachowiak. 10059 10060 Introduced support for function.caller. 10061 10062 Improved support for walking interesting scopes for function introspection. 10063 10064 This fixes all remaining layout tests not blocked by rebasing to trunk. 10065 10066 SunSpider reports no change. 10067 10068 * VM/Machine.cpp: 10069 (KJS::Machine::dumpRegisters): Fixed a spacing issue. 10070 10071 2008-05-11 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 10072 10073 Reviewed by Oliver. 10074 10075 Bug 18961: SQUIRRELFISH: Gmail doesn't load 10076 <https://bugs.webkit.org/show_bug.cgi?id=18961> 10077 10078 Fix codegen for logical nodes so that they don't use their destination 10079 as a temporary. 10080 10081 * kjs/nodes.cpp: 10082 (KJS::LogicalAndNode::emitCode): 10083 (KJS::LogicalOrNode::emitCode): 10084 10085 2008-05-10 Maciej Stachowiak <mjs (a] apple.com> 10086 10087 Reviewed by Oliver. 10088 10089 - JavaScriptCore part of fix for: "SQUIRRELFISH: function toString broken after calling" 10090 https://bugs.webkit.org/show_bug.cgi?id=18869 10091 10092 Three layout tests are fixed: 10093 fast/js/toString-elision-trailing-comma.html 10094 fast/js/toString-prefix-postfix-preserve-parens.html 10095 fast/js/kde/lval-exceptions.html 10096 10097 Functions now save a shared subrange of the original source used 10098 to make them (so in the common case this adds no storage above the 10099 memory cache). 10100 10101 * kjs/SourceProvider.h: Added. 10102 (KJS::SourceProvider): New abstract base class for classes that provide on-demand access 10103 to the source for a JavaScript program. This allows function objects to have access to their 10104 original source without copying. 10105 (KJS::UStringSourceProvider): SourceProvider subclass backed by a KJS::UString. 10106 (KJS::UStringSourceProvider::create): 10107 (KJS::UStringSourceProvider::getRange): 10108 (KJS::UStringSourceProvider::data): 10109 (KJS::UStringSourceProvider::length): 10110 (KJS::UStringSourceProvider::UStringSourceProvider): 10111 * kjs/SourceRange.h: Added. 10112 (KJS::SourceRange::SourceRange): Class that holds a SourceProvider and a character range into 10113 the source, to encapsulate on-demand access to the source of a function. 10114 (KJS::SourceRange::toString): 10115 * VM/Machine.cpp: 10116 (KJS::eval): Pass a UStringSourceProvider to the parser. 10117 * kjs/Parser.cpp: 10118 (KJS::Parser::parse): Take a SourceProvider and pass it on to the lexer. 10119 * kjs/Parser.h: 10120 (KJS::Parser::parse): Take a SourceProvider. 10121 * kjs/lexer.cpp: 10122 (KJS::Lexer::setCode): Take a SourceProvider; keep it around, and 10123 use it to get the raw buffer and length. 10124 * kjs/lexer.h: 10125 (KJS::Lexer::sourceRange): Convenience function to get a source 10126 range based on the lexer's source provieder, and char offsets 10127 right before and after the desired range. 10128 * kjs/function.cpp: 10129 (KJS::globalFuncEval): Pass a UStringSourceProvider to the parser. 10130 * kjs/function_object.cpp: 10131 (KJS::functionProtoFuncToString): Use toSourceString to get the source. 10132 (KJS::FunctionObjectImp::construct): Give the parser a UStringSourceProvider. 10133 * kjs/grammar.y: When parsing a function declaration, function 10134 expression, or getter or setter, tell the function body about its 10135 SourceRange. 10136 * kjs/interpreter.cpp: 10137 (KJS::Interpreter::checkSyntax): Pass a SourceProvider to the parser. 10138 (KJS::Interpreter::evaluate): Pass a SourceProvider to the parser. 10139 * kjs/interpreter.h: 10140 * kjs/nodes.h: 10141 (KJS::FunctionBodyNode::setSource): Establish a SourceRange for this function. 10142 (KJS::FunctionBodyNode::toSourceString): Get the source string out 10143 of the SourceRange. 10144 (KJS::FuncExprNode::): Take a SourceRange and set it on the body. 10145 (KJS::FuncDeclNode::): ditto 10146 * kjs/testkjs.cpp: 10147 (prettyPrintScript): Use a SourceProvider appropriately. 10148 * JavaScriptCore.exp: Export new symbols. 10149 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add new files. 10150 * JavaScriptCore.xcodeproj/project.pbxproj: Add new files. 10151 10152 2008-05-09 Oliver Hunt <oliver (a] apple.com> 10153 10154 Reviewed by Maciej. 10155 10156 Bring back RegisterFile tainting in order to correctly handle 10157 natively implemented getters and setters that re-enter JavaScript 10158 10159 * VM/Machine.cpp: 10160 (KJS::Machine::privateExecute): 10161 * VM/RegisterFile.h: 10162 * kjs/function.cpp: 10163 (KJS::FunctionImp::callAsFunction): 10164 * kjs/object.cpp: 10165 (KJS::JSObject::put): 10166 (KJS::tryGetAndCallProperty): 10167 * kjs/property_slot.cpp: 10168 (KJS::PropertySlot::functionGetter): 10169 10170 2008-05-09 Maciej Stachowiak <mjs (a] apple.com> 10171 10172 Reviewed by Oliver. 10173 10174 - track character offsets of open and close braces, in preparation for saving function source 10175 10176 I verified that there is no performance regression from this change. 10177 10178 * kjs/grammar.y: 10179 * kjs/lexer.cpp: 10180 (KJS::Lexer::lex): 10181 (KJS::Lexer::matchPunctuator): 10182 * kjs/lexer.h: 10183 10184 2008-05-09 Oliver Hunt <oliver (a] apple.com> 10185 10186 Debug build fix 10187 10188 * kjs/JSGlobalObject.cpp: 10189 (KJS::JSGlobalObject::restoreLocalStorage): 10190 10191 2008-05-09 Oliver Hunt <oliver (a] apple.com> 10192 10193 Reviewed by Geoff. 10194 10195 Build fixes for SquirrelFish on windows. 10196 10197 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 10198 * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: 10199 * VM/Register.h: 10200 * kjs/JSGlobalObject.cpp: 10201 (KJS::JSGlobalObject::restoreLocalStorage): 10202 * kjs/collector.cpp: 10203 (KJS::Collector::allocate): 10204 (KJS::Collector::allocateNumber): 10205 * kjs/collector.h: 10206 (KJS::Collector::allocate): 10207 (KJS::Collector::allocateNumber): 10208 * kjs/property_slot.cpp: 10209 10210 2008-05-08 Maciej Stachowiak <mjs (a] apple.com> 10211 10212 Reviewed by Geoff. 10213 10214 - fix activation tearoff in the case where functions are called with too many arguments 10215 10216 Fixes: 10217 fast/canvas/patternfill-repeat.html 10218 fast/dom/SelectorAPI/bug-17313.html 10219 10220 * VM/Machine.cpp: 10221 (KJS::slideRegisterWindowForCall): 10222 (KJS::scopeChainForCall): 10223 (KJS::Machine::execute): 10224 (KJS::Machine::privateExecute): 10225 10226 2008-05-08 Geoffrey Garen <ggaren (a] apple.com> 10227 10228 Reviewed by Oliver Hunt. 10229 10230 Fixed failure in fast/canvas/canvas-pattern-behaviour.html. 10231 10232 SunSpider reports a small speedup. Not sure what that's about. 10233 10234 * VM/CodeBlock.cpp: 10235 (KJS::CodeBlock::dump): Fixed op_call_eval to dump as "op_call_eval". 10236 This helped me while debugging. 10237 10238 * VM/Machine.cpp: 10239 (KJS::Machine::unwindCallFrame): When looking for an activation to tear 10240 off, don't use the scope chain. Inside eval, the scope chain doesn't 10241 belong to us; it belongs to our calling function. 10242 10243 Also, don't use the needsFullScopeChain flag to decide whether to tear 10244 off the activation. "function.arguments" can create an activation 10245 for a function whose needsFullScopeChain flag is set to false. 10246 10247 2008-05-08 Maciej Stachowiak <mjs (a] apple.com> 10248 10249 Reviewed by Oliver. 10250 10251 - fix function.call for calls of more than 8 arguments 10252 10253 Fixes svg/carto.net/button.svg 10254 10255 * kjs/list.cpp: 10256 (KJS::List::getSlice): properly set up the m_buffer of the target list. 10257 10258 2008-05-08 Maciej Stachowiak <mjs (a] apple.com> 10259 10260 Reviewed by Oliver. 10261 10262 - don't return a null RegisterID from RegExpNode in the exception case, since the caller may need a real register 10263 10264 Fixes: 10265 - fast/regex/early-acid3-86.html 10266 - http/tests/misc/acid3.html 10267 10268 * kjs/nodes.cpp: 10269 (KJS::RegExpNode::emitCode): 10270 10271 2008-05-07 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 10272 10273 Reviewed by Oliver. 10274 10275 Fix a performance regression caused by the introduction of property 10276 attributes to SymbolTable in r32859 by encoding the attributes and the 10277 register index into a single field of SymbolTableEntry. 10278 10279 This leaves Node::optimizeVariableAccess() definitely broken, although 10280 it was probably not entirely correct in SquirrelFish before this change. 10281 10282 * VM/CodeBlock.h: 10283 (KJS::missingThisObjectMarker): 10284 * VM/CodeGenerator.cpp: 10285 (KJS::CodeGenerator::addVar): 10286 (KJS::CodeGenerator::CodeGenerator): 10287 (KJS::CodeGenerator::registerForLocal): 10288 (KJS::CodeGenerator::registerForLocalConstInit): 10289 (KJS::CodeGenerator::isLocalConstant): 10290 (KJS::CodeGenerator::addConstant): 10291 (KJS::CodeGenerator::emitCall): 10292 * VM/CodeGenerator.h: 10293 (KJS::CodeGenerator::IdentifierMapIndexHashTraits::emptyValue): 10294 * VM/Machine.cpp: 10295 (KJS::Machine::privateExecute): 10296 * kjs/JSGlobalObject.cpp: 10297 (KJS::JSGlobalObject::saveLocalStorage): 10298 * kjs/JSVariableObject.cpp: 10299 (KJS::JSVariableObject::getPropertyNames): 10300 (KJS::JSVariableObject::getPropertyAttributes): 10301 * kjs/JSVariableObject.h: 10302 (KJS::JSVariableObject::symbolTableGet): 10303 (KJS::JSVariableObject::symbolTablePut): 10304 (KJS::JSVariableObject::symbolTablePutWithAttributes): 10305 * kjs/SymbolTable.h: 10306 (KJS::SymbolTableEntry::SymbolTableEntry): 10307 (KJS::SymbolTableEntry::isEmpty): 10308 (KJS::SymbolTableEntry::getIndex): 10309 (KJS::SymbolTableEntry::getAttributes): 10310 (KJS::SymbolTableEntry::setAttributes): 10311 (KJS::SymbolTableEntry::isReadOnly): 10312 * kjs/nodes.cpp: 10313 (KJS::getSymbolTableEntry): 10314 (KJS::PostIncResolveNode::optimizeVariableAccess): 10315 (KJS::PostDecResolveNode::optimizeVariableAccess): 10316 (KJS::DeleteResolveNode::optimizeVariableAccess): 10317 (KJS::TypeOfResolveNode::optimizeVariableAccess): 10318 (KJS::PreIncResolveNode::optimizeVariableAccess): 10319 (KJS::PreDecResolveNode::optimizeVariableAccess): 10320 (KJS::ReadModifyResolveNode::optimizeVariableAccess): 10321 (KJS::AssignResolveNode::optimizeVariableAccess): 10322 (KJS::ProgramNode::initializeSymbolTable): 10323 10324 2008-05-06 Maciej Stachowiak <mjs (a] apple.com> 10325 10326 Rubber stamped by Oliver. 10327 10328 - add missing ! in an assert that I failed to reverse 10329 10330 * VM/CodeGenerator.cpp: 10331 (KJS::CodeGenerator::CodeGenerator): 10332 10333 2008-05-06 Maciej Stachowiak <mjs (a] apple.com> 10334 10335 Reviewed by Oliver. 10336 10337 - fixed "SQUIRRELFISH: window.this shows up as a property, but it shouldn't" 10338 https://bugs.webkit.org/show_bug.cgi?id=18868 10339 10340 The basic approach is to have "this" only be present in the symbol 10341 table at compile time, not runtime. 10342 10343 * VM/CodeGenerator.cpp: 10344 (KJS::CodeGenerator::~CodeGenerator): Remove "this" from symbol table. 10345 (KJS::CodeGenerator::CodeGenerator): Add "this" back when re-using 10346 a symbol table. 10347 * VM/CodeGenerator.h: 10348 * VM/Machine.cpp: 10349 (KJS::Machine::execute): Don't assert that "this" is in the symbol table. 10350 10351 2008-05-06 Geoffrey Garen <ggaren (a] apple.com> 10352 10353 Reviewed by Oliver Hunt. 10354 10355 Trivial support for function.arguments: Currently, we only support 10356 function.arguments from within the scope of function. 10357 10358 This fixes the remaining Mozilla JS test failures. 10359 10360 SunSpider reports no change. 10361 10362 * JavaScriptCore.exp: 10363 10364 * VM/Machine.cpp: 10365 (KJS::Machine::privateExecute): Separated scope chain deref from 10366 activation register copying: since it is now possible for client code 10367 to create an activation on behalf of a function that otherwise wouldn't 10368 need one, having an activation no longer necessarily means that you need 10369 to deref the scope chain. 10370 10371 (KJS::Machine::getCallFrame): For now, this function only examines the 10372 current scope. Walking parent scopes requires some refactoring in the 10373 way we track execution stacks. 10374 10375 * kjs/ExecState.cpp: 10376 (KJS::ExecState::ExecState): We use a negative call frame offset to 10377 indicate that a given scope is not a function call scope. 10378 10379 2008-05-05 Oliver Hunt <oliver (a] apple.com> 10380 10381 Reviewed by Geoff. 10382 10383 Fix call frame set up for native -> JS function calls. 10384 10385 * VM/Machine.cpp: 10386 (KJS::Machine::execute): 10387 10388 2008-05-05 Geoffrey Garen <ggaren (a] apple.com> 10389 10390 Reviewed by Maciej Stachowiak. 10391 10392 Fixed ecma_3/Object/8.6.2.6-001.js, and similar bugs. 10393 10394 SunSpider reports a .4% speedup. Not sure what that's about. 10395 10396 * VM/Machine.cpp: 10397 (KJS::Machine::privateExecute): Check for exception return from equal, 10398 since toPrimitive can throw. 10399 10400 * kjs/operations.cpp: 10401 (KJS::strictEqual): In response to an error I made in an earlier version 10402 of this patch, I changed strictEqual to make clear the fact that it 10403 performs no conversions and can't throw, making it slightly more efficient 10404 in the process. 10405 10406 2008-05-05 Maciej Stachowiak <mjs (a] apple.com> 10407 10408 Reviewed by Oliver. 10409 10410 - fix some dumb mistakes in my last patch 10411 10412 * VM/CodeGenerator.cpp: 10413 (KJS::CodeGenerator::emitPushScope): 10414 (KJS::CodeGenerator::emitGetPropertyNames): 10415 * VM/Machine.cpp: 10416 (KJS::Machine::privateExecute): 10417 10418 2008-05-05 Maciej Stachowiak <mjs (a] apple.com> 10419 10420 Reviewed by Oliver. 10421 10422 - document opcodes relating to jumps, scopes, and property name iteration 10423 10424 Documented jmp, jtrue, false, push_scope, pop_scope, get_pnames, 10425 next_pname and jmp_scopes. 10426 10427 * VM/CodeGenerator.cpp: 10428 (KJS::CodeGenerator::emitJump): 10429 (KJS::CodeGenerator::emitJumpIfTrue): 10430 (KJS::CodeGenerator::emitJumpIfFalse): 10431 (KJS::CodeGenerator::emitPushScope): 10432 (KJS::CodeGenerator::emitNextPropertyName): 10433 (KJS::CodeGenerator::emitGetPropertyNames): 10434 * VM/CodeGenerator.h: 10435 * VM/Machine.cpp: 10436 (KJS::Machine::privateExecute): 10437 * kjs/nodes.cpp: 10438 (KJS::LogicalAndNode::emitCode): 10439 (KJS::LogicalOrNode::emitCode): 10440 (KJS::ConditionalNode::emitCode): 10441 (KJS::IfNode::emitCode): 10442 (KJS::IfElseNode::emitCode): 10443 (KJS::DoWhileNode::emitCode): 10444 (KJS::WhileNode::emitCode): 10445 (KJS::ForNode::emitCode): 10446 (KJS::ForInNode::emitCode): 10447 (KJS::WithNode::emitCode): 10448 10449 2008-05-05 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 10450 10451 Reviewed by Oliver. 10452 10453 Bug 18749: SQUIRRELFISH: const support is broken 10454 <https://bugs.webkit.org/show_bug.cgi?id=18749> 10455 10456 Adds support for const during code generation. 10457 10458 Fixes 2 layout tests. 10459 10460 * ChangeLog: 10461 * VM/CodeGenerator.cpp: 10462 (KJS::CodeGenerator::addVar): 10463 (KJS::CodeGenerator::CodeGenerator): 10464 (KJS::CodeGenerator::isLocalConstant): 10465 * VM/CodeGenerator.h: 10466 (KJS::CodeGenerator::addVar): 10467 * kjs/nodes.cpp: 10468 (KJS::PostIncResolveNode::emitCode): 10469 (KJS::PostDecResolveNode::emitCode): 10470 (KJS::PreIncResolveNode::emitCode): 10471 (KJS::PreDecResolveNode::emitCode): 10472 (KJS::ReadModifyResolveNode::emitCode): 10473 (KJS::AssignResolveNode::emitCode): 10474 10475 2008-05-04 Maciej Stachowiak <mjs (a] apple.com> 10476 10477 Reviewed by Geoff. 10478 10479 - document some more opcodes (and fix argument names) 10480 10481 Added docs for eq, neq, stricteq, nstriceq, less and lesseq. 10482 10483 * VM/CodeGenerator.cpp: 10484 (KJS::CodeGenerator::emitEqual): 10485 (KJS::CodeGenerator::emitNotEqual): 10486 (KJS::CodeGenerator::emitStrictEqual): 10487 (KJS::CodeGenerator::emitNotStrictEqual): 10488 (KJS::CodeGenerator::emitLess): 10489 (KJS::CodeGenerator::emitLessEq): 10490 * VM/CodeGenerator.h: 10491 * VM/Machine.cpp: 10492 (KJS::Machine::privateExecute): 10493 * kjs/nodes.cpp: 10494 (KJS::LessNode::emitCode): 10495 (KJS::GreaterNode::emitCode): 10496 (KJS::LessEqNode::emitCode): 10497 (KJS::GreaterEqNode::emitCode): 10498 (KJS::EqualNode::emitCode): 10499 (KJS::NotEqualNode::emitCode): 10500 (KJS::StrictEqualNode::emitCode): 10501 (KJS::NotStrictEqualNode::emitCode): 10502 (KJS::CaseBlockNode::emitCodeForBlock): 10503 10504 2008-05-04 Geoffrey Garen <ggaren (a] apple.com> 10505 10506 Reviewed by Maciej Stachowiak. 10507 10508 More scaffolding for f.arguments. 10509 10510 Track the offset of the last call frame in the ExecState, so we can 10511 produce a backtrace at any time. 10512 10513 Also, record numLocals, the sum of numVars + numParameters, in each code 10514 block, to make updates to the ExecState a little cheaper than they 10515 would be otherwise. 10516 10517 We now use numLocals in a bunch of places where we used to calculate 10518 numVars + numParameters or -numVars - numParameters. 10519 10520 Reports are mixed, but all in all, this seems to be a wash on SunSpider. 10521 10522 2008-05-04 Oliver Hunt <oliver (a] apple.com> 10523 10524 Reviewed by Geoff. 10525 10526 Whoops, correctly handle properties that don't exist in the 10527 symbol table. 10528 10529 * kjs/JSVariableObject.h: 10530 (KJS::JSVariableObject::symbolTablePutWithAttributes): 10531 10532 2008-05-04 Oliver Hunt <oliver (a] apple.com> 10533 10534 Reviewed by Geoff. 10535 10536 Add attribute information to SymbolTable as ground work for 10537 various DontEnum and ReadOnly issues. 10538 10539 * VM/CodeGenerator.cpp: 10540 (KJS::CodeGenerator::addVar): 10541 (KJS::CodeGenerator::CodeGenerator): 10542 (KJS::CodeGenerator::registerForLocal): 10543 (KJS::CodeGenerator::registerForLocalConstInit): 10544 (KJS::CodeGenerator::addConstant): 10545 * VM/Machine.cpp: 10546 (KJS::Machine::execute): 10547 * kjs/JSGlobalObject.cpp: 10548 (KJS::JSGlobalObject::saveLocalStorage): 10549 * kjs/JSVariableObject.cpp: 10550 (KJS::JSVariableObject::getPropertyNames): 10551 (KJS::JSVariableObject::getPropertyAttributes): 10552 * kjs/JSVariableObject.h: 10553 (KJS::JSVariableObject::symbolTablePut): 10554 (KJS::JSVariableObject::symbolTablePutWithAttributes): 10555 * kjs/SymbolTable.h: 10556 (KJS::SymbolTableEntry::SymbolTableEntry): 10557 (KJS::SymbolTableIndexHashTraits::emptyValue): 10558 * kjs/nodes.cpp: 10559 (KJS::getSymbolTableEntry): 10560 (KJS::ReadModifyResolveNode::optimizeVariableAccess): 10561 (KJS::AssignResolveNode::optimizeVariableAccess): 10562 (KJS::ProgramNode::initializeSymbolTable): 10563 10564 2008-05-04 Geoffrey Garen <ggaren (a] apple.com> 10565 10566 Reviewed by Oliver Hunt. 10567 10568 More scaffolding for f.arguments. 10569 10570 Store the register file associated with an ExecState in the ExecState. 10571 10572 SunSpider reports no change. 10573 10574 * kjs/JSGlobalObject.h: 10575 (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Moved 10576 registerFileStack above globalExec, so it gets initialized first. 10577 Removed remnants of old activation scheme. 10578 10579 2008-05-04 Maciej Stachowiak <mjs (a] apple.com> 10580 10581 Rubber stamped by Oliver. 10582 10583 - renamed a few opcodes and fixed assembly formatting to accomodate the longest opcode 10584 10585 equal --> eq 10586 nequal --> neq 10587 resolve_base_and_property --> resolve_with_base 10588 resolve_base_and_func --> resolve_func 10589 get_prop_id --> get_by_id 10590 put_prop_id --> put_by_id 10591 delete_prop_id --> del_by_id 10592 get_prop_val --> get_by_val 10593 put_prop_val --> put_by_val 10594 delete_prop_val --> del_by_val 10595 put_prop_index --> put_by_index 10596 10597 * VM/CodeBlock.cpp: 10598 (KJS::printUnaryOp): 10599 (KJS::printBinaryOp): 10600 (KJS::printConditionalJump): 10601 (KJS::CodeBlock::dump): 10602 * VM/CodeGenerator.cpp: 10603 (KJS::CodeGenerator::emitEqual): 10604 (KJS::CodeGenerator::emitNotEqual): 10605 (KJS::CodeGenerator::emitResolveWithBase): 10606 (KJS::CodeGenerator::emitResolveFunction): 10607 (KJS::CodeGenerator::emitGetById): 10608 (KJS::CodeGenerator::emitPutById): 10609 (KJS::CodeGenerator::emitDeleteById): 10610 (KJS::CodeGenerator::emitGetByVal): 10611 (KJS::CodeGenerator::emitPutByVal): 10612 (KJS::CodeGenerator::emitDeleteByVal): 10613 (KJS::CodeGenerator::emitPutByIndex): 10614 * VM/CodeGenerator.h: 10615 * VM/Machine.cpp: 10616 (KJS::Machine::privateExecute): 10617 * VM/Opcode.h: 10618 * kjs/nodes.cpp: 10619 (KJS::ArrayNode::emitCode): 10620 (KJS::PropertyListNode::emitCode): 10621 (KJS::BracketAccessorNode::emitCode): 10622 (KJS::DotAccessorNode::emitCode): 10623 (KJS::EvalFunctionCallNode::emitCode): 10624 (KJS::FunctionCallResolveNode::emitCode): 10625 (KJS::FunctionCallBracketNode::emitCode): 10626 (KJS::FunctionCallDotNode::emitCode): 10627 (KJS::PostIncResolveNode::emitCode): 10628 (KJS::PostDecResolveNode::emitCode): 10629 (KJS::PostIncBracketNode::emitCode): 10630 (KJS::PostDecBracketNode::emitCode): 10631 (KJS::PostIncDotNode::emitCode): 10632 (KJS::PostDecDotNode::emitCode): 10633 (KJS::DeleteResolveNode::emitCode): 10634 (KJS::DeleteBracketNode::emitCode): 10635 (KJS::DeleteDotNode::emitCode): 10636 (KJS::TypeOfResolveNode::emitCode): 10637 (KJS::PreIncResolveNode::emitCode): 10638 (KJS::PreDecResolveNode::emitCode): 10639 (KJS::PreIncBracketNode::emitCode): 10640 (KJS::PreDecBracketNode::emitCode): 10641 (KJS::PreIncDotNode::emitCode): 10642 (KJS::PreDecDotNode::emitCode): 10643 (KJS::ReadModifyResolveNode::emitCode): 10644 (KJS::AssignResolveNode::emitCode): 10645 (KJS::AssignDotNode::emitCode): 10646 (KJS::ReadModifyDotNode::emitCode): 10647 (KJS::AssignBracketNode::emitCode): 10648 (KJS::ReadModifyBracketNode::emitCode): 10649 (KJS::ConstDeclNode::emitCodeSingle): 10650 (KJS::ForInNode::emitCode): 10651 (KJS::TryNode::emitCode): 10652 10653 2008-05-04 Oliver Hunt <oliver (a] apple.com> 10654 10655 Reviewed by Maciej. 10656 10657 Fix assertion when accessing arguments object with too many arguments provided 10658 10659 The arguments constructor was assuming that the register offset given for argv 10660 was an absolute offset into the registerfile, rather than the offset from the 10661 frame. This patches corrects that issue. 10662 10663 * kjs/JSActivation.cpp: 10664 (KJS::JSActivation::createArgumentsObject): 10665 10666 2008-05-04 Geoffrey Garen <ggaren (a] apple.com> 10667 10668 Rubber stamped by Sam Weinig. 10669 10670 Cleaned up Machine.cpp according to our style guidelines: moved static 10671 data to the top of the file; moved stand-alone functions below that; 10672 moved the Machine constructor above other Machine member functions. 10673 10674 2008-05-03 Maciej Stachowiak <mjs (a] apple.com> 10675 10676 Reviewed by Sam. 10677 10678 - fix accidental breakage from last patch 10679 10680 * VM/Machine.cpp: 10681 (KJS::Machine::privateExecute): 10682 10683 2008-05-03 Maciej Stachowiak <mjs (a] apple.com> 10684 10685 Reviewed by Geoff. 10686 10687 - a bunch more opcode documentation and corresponding parameter name fixes 10688 10689 I renamed a few opcodes: 10690 10691 type_of --> typeof (that's what the JS operator is named) 10692 instance_of --> instanceof (ditto) 10693 create_error --> new_error (for consistency with other new_* opcodes) 10694 10695 I documented the following opcodes: 10696 10697 - load 10698 - new_object 10699 - new_array 10700 - new_regexp 10701 - mov 10702 - pre_inc 10703 - pre_dec 10704 - post_inc 10705 - post_dec 10706 - to_jsnumber 10707 - negate 10708 - bitnot 10709 - not 10710 - instanceof 10711 - typeof 10712 - in 10713 - new_func 10714 - new_funcexp 10715 - new_error 10716 10717 I also fixed formatting on some existing opcode docs. 10718 10719 * VM/CodeBlock.cpp: 10720 (KJS::CodeBlock::dump): 10721 * VM/CodeGenerator.cpp: 10722 (KJS::CodeGenerator::emitMove): 10723 (KJS::CodeGenerator::emitNot): 10724 (KJS::CodeGenerator::emitPreInc): 10725 (KJS::CodeGenerator::emitPreDec): 10726 (KJS::CodeGenerator::emitPostInc): 10727 (KJS::CodeGenerator::emitPostDec): 10728 (KJS::CodeGenerator::emitToJSNumber): 10729 (KJS::CodeGenerator::emitNegate): 10730 (KJS::CodeGenerator::emitBitNot): 10731 (KJS::CodeGenerator::emitInstanceOf): 10732 (KJS::CodeGenerator::emitTypeOf): 10733 (KJS::CodeGenerator::emitIn): 10734 (KJS::CodeGenerator::emitLoad): 10735 (KJS::CodeGenerator::emitNewObject): 10736 (KJS::CodeGenerator::emitNewArray): 10737 (KJS::CodeGenerator::emitNewRegExp): 10738 (KJS::CodeGenerator::emitNewError): 10739 * VM/CodeGenerator.h: 10740 (KJS::CodeGenerator::scopeDepth): 10741 (KJS::CodeGenerator::addVar): 10742 * VM/Machine.cpp: 10743 (KJS::Machine::privateExecute): 10744 * VM/Opcode.h: 10745 * kjs/nodes.cpp: 10746 (KJS::Node::emitThrowError): 10747 (KJS::RegExpNode::emitCode): 10748 (KJS::TypeOfValueNode::emitCode): 10749 (KJS::UnaryPlusNode::emitCode): 10750 (KJS::NegateNode::emitCode): 10751 (KJS::BitwiseNotNode::emitCode): 10752 (KJS::LogicalNotNode::emitCode): 10753 (KJS::InstanceOfNode::emitCode): 10754 (KJS::InNode::emitCode): 10755 10756 2008-05-03 Maciej Stachowiak <mjs (a] apple.com> 10757 10758 Reviewed by Geoff and Sam. 10759 10760 - generate HTML bytecode docs at build time 10761 10762 * DerivedSources.make: 10763 * docs: Added. 10764 * docs/make-bytecode-docs.pl: Added. 10765 10766 2008-05-03 Geoffrey Garen <ggaren (a] apple.com> 10767 10768 Reviewed by Sam Weinig. 10769 10770 Update ExecState::m_scopeChain when switching scope chains inside the 10771 machine. 10772 10773 This fixes uses of lexicalGlobalObject, such as, in a subframe 10774 10775 alert(top.makeArray() instanceof Array ? "FAIL" : "PASS"); 10776 10777 and a bunch of the security failures listed in 10778 https://bugs.webkit.org/show_bug.cgi?id=18870. (Those tests still fail, 10779 seemingly because of regressions in exception messages). 10780 10781 SunSpider reports no change. 10782 10783 * VM/Machine.cpp: Factored out scope chain updating into a common 10784 function that takes care to update ExecState::m_scopeChain, too. 10785 10786 * kjs/ExecState.h: I made Machine a friend of ExecState so that Machine 10787 could update ExecState::m_scopeChain, even though that value is 10788 read-only for everyone else. 10789 10790 * kjs/JSGlobalObject.h: 10791 (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Changed 10792 this client to be a little friendlier to ExecState's internal 10793 storage type for scope chain data. 10794 10795 2008-05-03 Geoffrey Garen <ggaren (a] apple.com> 10796 10797 Reviewed by Sam Weinig. 10798 10799 Fixed https://bugs.webkit.org/show_bug.cgi?id=18876 10800 Squirrelfish: ScopeChainNode leak in op_jmp_scopes. 10801 10802 SunSpider reports no change. 10803 10804 * VM/Machine.cpp: 10805 (KJS::Machine::privateExecute): Don't construct a ScopeChain object, 10806 since the direct threaded interpreter will goto across its destructor. 10807 10808 2008-05-03 Geoffrey Garen <ggaren (a] apple.com> 10809 10810 Reviewed by Oliver Hunt. 10811 10812 A bit more efficient fix than r32832: Don't copy globals into function 10813 register files; instead, have the RegisterFileStack track only the base 10814 of the last *global* register file, so the global object's register 10815 references stay good. 10816 10817 SunSpider reports a .3% speedup. Not sure what that's about. 10818 10819 2008-05-03 Oliver Hunt <oliver (a] apple.com> 10820 10821 Reviewed by Maciej. 10822 10823 Bug 18864: SquirrelFish: Support getter and setter definition in object literals 10824 <https://bugs.webkit.org/show_bug.cgi?id=18864> 10825 10826 Add new opcodes to allow us to add getters and setters to an object. These are 10827 only used by the codegen for object literals. 10828 10829 * VM/CodeGenerator.cpp: 10830 (KJS::CodeGenerator::emitPutGetter): 10831 (KJS::CodeGenerator::emitPutSetter): 10832 * VM/CodeGenerator.h: 10833 * VM/Machine.cpp: 10834 (KJS::Machine::privateExecute): 10835 * VM/Opcode.h: 10836 * kjs/nodes.cpp: 10837 (KJS::PropertyListNode::emitCode): 10838 10839 2008-05-02 Maciej Stachowiak <mjs (a] apple.com> 10840 10841 Reviewed by Oliver. 10842 10843 - properly copy globals into and out of implicit call register 10844 files, otherwise they will fail at global lookup 10845 10846 Fixes fast/js/array-tostring-and-join.html layout test. 10847 10848 * VM/RegisterFileStack.cpp: 10849 (KJS::RegisterFileStack::pushGlobalRegisterFile): 10850 (KJS::RegisterFileStack::popGlobalRegisterFile): 10851 (KJS::RegisterFileStack::pushFunctionRegisterFile): 10852 (KJS::RegisterFileStack::popFunctionRegisterFile): 10853 10854 2008-05-02 Geoffrey Garen <ggaren (a] apple.com> 10855 10856 Reviewed by Oliver Hunt. 10857 10858 Fixed https://bugs.webkit.org/show_bug.cgi?id=18822 10859 SQUIRRELFISH: incorrect eval used in some cases 10860 10861 Changed all code inside the machine to fetch the lexical global object 10862 directly from the scope chain, instead of from the ExecState. 10863 10864 Clients who fetch the lexical global object through the ExecState 10865 still don't work. 10866 10867 SunSpider reports no change. 10868 10869 * VM/Machine.cpp: 10870 (KJS::Machine::privateExecute): Fetch the lexical global object from 10871 the scope chain. 10872 10873 * kjs/ExecState.h: 10874 (KJS::ExecState::ExecState::lexicalGlobalObject): Moved the logic for 10875 this function into ScopeChainNode, but kept this function around to 10876 support existing clients. 10877 10878 2008-05-02 Geoffrey Garen <ggaren (a] apple.com> 10879 10880 Rubber stamped by Oliver Hunt. 10881 10882 Removed ExecState.cpp from AllInOneFile.cpp, for a .2% speedup. 10883 10884 * JavaScriptCore.xcodeproj/project.pbxproj: 10885 * kjs/AllInOneFile.cpp: 10886 10887 2008-05-01 Oliver Hunt <oliver (a] apple.com> 10888 10889 Reviewed by Geoff and Maciej. 10890 10891 Bug 18827: SquirrelFish: Prevent getters and setters from destroying the current RegisterFile 10892 <https://bugs.webkit.org/show_bug.cgi?id=18827> 10893 10894 Remove safe/unsafe RegisterFile concept, and instead just add additional 10895 logic to ensure we always push/pop RegisterFiles when executing getters 10896 and setters, similar to the logic for valueOf and toString. 10897 10898 * VM/Machine.cpp: 10899 (KJS::Machine::privateExecute): 10900 * VM/RegisterFile.h: 10901 * kjs/function.cpp: 10902 (KJS::FunctionImp::callAsFunction): 10903 * kjs/object.cpp: 10904 (KJS::JSObject::put): 10905 * kjs/property_slot.cpp: 10906 (KJS::PropertySlot::functionGetter): 10907 10908 2008-05-01 Oliver Hunt <oliver (a] apple.com> 10909 10910 RS=Geoff 10911 10912 Rename unsafeForReentry to safeForReentry to avoid double negatives. 10913 10914 * VM/Machine.cpp: 10915 (KJS::Machine::privateExecute): 10916 * VM/RegisterFile.h: 10917 * kjs/function.cpp: 10918 (KJS::FunctionImp::callAsFunction): 10919 10920 2008-05-01 Oliver Hunt <oliver (a] apple.com> 10921 10922 Reviewed by Maciej. 10923 10924 Bug 18827: SquirrelFish: Prevent getters and setters from destroying the current RegisterFile 10925 <https://bugs.webkit.org/show_bug.cgi?id=18827> 10926 10927 This patch makes getters and setters work. It does this by 10928 tracking whether the RegisterFile is "safe", that is whether 10929 the interpreter is in a state that in which it can handle 10930 the RegisterFile being reallocated. 10931 10932 * VM/Machine.cpp: 10933 (KJS::resolve): 10934 (KJS::Machine::privateExecute): 10935 * VM/RegisterFile.h: 10936 * kjs/function.cpp: 10937 (KJS::FunctionImp::callAsFunction): 10938 10939 2008-04-30 Geoffrey Garen <ggaren (a] apple.com> 10940 10941 Release build fix: Always compile in "isGlobalObject", since it's 10942 listed in our .exp file. 10943 10944 * kjs/ExecState.cpp: 10945 (KJS::ExecState::isGlobalObject): 10946 * kjs/ExecState.h: 10947 10948 2008-04-30 Oliver Hunt <oliver (a] apple.com> 10949 10950 Reviewed by Maciej. 10951 10952 Minor code restructuring to prepare for getters and setters, 10953 also helps exception semantics a bit. 10954 10955 * VM/Machine.cpp: 10956 (KJS::Machine::privateExecute): 10957 10958 2008-04-30 Geoffrey Garen <ggaren (a] apple.com> 10959 10960 Fixed tyop. 10961 10962 * kjs/ExecState.h: 10963 10964 2008-04-30 Geoffrey Garen <ggaren (a] apple.com> 10965 10966 Debug build fix: export a missing symbol. 10967 10968 * JavaScriptCore.exp: 10969 10970 2008-04-30 Geoffrey Garen <ggaren (a] apple.com> 10971 10972 Reviewed by Oliver Hunt. 10973 10974 A little more ExecState refactoring: Now, only the global object creates 10975 an ExecState. 10976 10977 Also inlined ExecState::lexicalGlobalObject(). 10978 10979 SunSpider reports no change. 10980 10981 2008-04-30 Geoffrey Garen <ggaren (a] apple.com> 10982 10983 WebCore build fix: forward-declare ScopeChain. 10984 10985 * kjs/interpreter.h: 10986 10987 2008-04-30 Geoffrey Garen <ggaren (a] apple.com> 10988 10989 Build fix for JavaScriptGlue: export a missing symbol. 10990 10991 * JavaScriptCore.exp: 10992 10993 2008-04-30 Geoffrey Garen <ggaren (a] apple.com> 10994 10995 Reviewed by Oliver Hunt. 10996 10997 Removed a lot of unused bits from ExecState, moving them into 10998 OldInterpreterExecState, the fake scaffolding class. 10999 11000 The clutter was making it hard to see the forest from the trees. 11001 11002 .4% SunSpider speedup, probably because ExecState::lexicalGlobalObject() 11003 is faster now. 11004 11005 2008-04-29 Oliver Hunt <oliver (a] apple.com> 11006 11007 Reviewed by Maciej. 11008 11009 Bug 18643: SQUIRRELFISH: need to support implicit function calls (valueOf, toString, getters/setters) 11010 <https://bugs.webkit.org/show_bug.cgi?id=18643> 11011 11012 Prevent static slot optimisation for new variables and functions in 11013 globally re-entrant code called from an an implicit function call. 11014 11015 This is necessary to prevent us from needing to resize the global 11016 slot portion of the root RegisterFile during an implicit (and hence 11017 unguarded) function call. 11018 11019 * VM/CodeGenerator.cpp: 11020 (KJS::CodeGenerator::CodeGenerator): 11021 * VM/CodeGenerator.h: 11022 * VM/Machine.cpp: 11023 (KJS::Machine::execute): 11024 * VM/RegisterFile.h: 11025 * VM/RegisterFileStack.cpp: 11026 (KJS::RegisterFileStack::pushGlobalRegisterFile): 11027 (KJS::RegisterFileStack::popGlobalRegisterFile): 11028 (KJS::RegisterFileStack::pushFunctionRegisterFile): 11029 (KJS::RegisterFileStack::popFunctionRegisterFile): 11030 * VM/RegisterFileStack.h: 11031 (KJS::RegisterFileStack::inImplicitFunctionCall): 11032 (KJS::RegisterFileStack::lastGlobal): 11033 * kjs/nodes.cpp: 11034 (KJS::ProgramNode::generateCode): 11035 * kjs/nodes.h: 11036 (KJS::ProgramNode::): 11037 11038 2008-04-29 Geoffrey Garen <ggaren (a] apple.com> 11039 11040 Reviewed by Oliver Hunt. 11041 11042 In nested program code, don't propogate "this" back to the parent 11043 register file. ("this" should remain constant in the parent register 11044 file, regardless of the scripts it invokes.) 11045 11046 * VM/RegisterFile.cpp: 11047 (KJS::RegisterFile::copyGlobals): 11048 11049 2008-04-28 Oliver Hunt <oliver (a] apple.com> 11050 11051 Reviewed by Geoff. 11052 11053 Restore base pointer when popping a global RegisterFile 11054 11055 * VM/RegisterFileStack.cpp: 11056 (KJS::RegisterFileStack::popGlobalRegisterFile): 11057 11058 2008-04-28 Oliver Hunt <oliver (a] apple.com> 11059 11060 Reviewed by Geoff. 11061 11062 Bug 18643: SQUIRRELFISH: need to support implicit function calls (valueOf, toString, getters/setters) 11063 <https://bugs.webkit.org/show_bug.cgi?id=18643> 11064 11065 Partial fix. This results in all implicit calls to toString or valueOf 11066 executing in a separate RegisterFile, so ensuring that the the pointers 11067 in the triggering interpreter don't get trashed. This still leaves the 11068 task of preventing new global re-entry from toString and valueOf from 11069 clobbering the RegisterFile. 11070 11071 * VM/Machine.cpp: 11072 (KJS::Machine::execute): 11073 * VM/RegisterFileStack.cpp: 11074 (KJS::RegisterFileStack::pushFunctionRegisterFile): 11075 (KJS::RegisterFileStack::popFunctionRegisterFile): 11076 * VM/RegisterFileStack.h: 11077 * kjs/object.cpp: 11078 (KJS::tryGetAndCallProperty): 11079 11080 2008-04-28 Geoffrey Garen <ggaren (a] apple.com> 11081 11082 Reviewed by Maciej Stachowiak. 11083 11084 Simplified activation object a bit: No need to store the callee 11085 in the activation object -- we can pull it out of the call frame 11086 when needed, instead. 11087 11088 SunSpider reports no change. 11089 11090 2008-04-28 Geoffrey Garen <ggaren (a] apple.com> 11091 11092 Reviewed by Maciej Stachowiak. 11093 11094 RS by Oliver Hunt on moving JSArguments.cpp out of AllInOneFile.cpp. 11095 11096 Substantially more handling of "arguments": "arguments" works fully 11097 now, but "f.arguments" still doesn't work. 11098 11099 Fixes 10 regression tests. 11100 11101 SunSpider reports no regression. 11102 11103 * kjs/JSActivation.cpp: 11104 (KJS::JSActivation::createArgumentsObject): Reconstruct an arguments 11105 List to pass to the arguments object constructor. 11106 11107 * JavaScriptCore.xcodeproj/project.pbxproj: 11108 * kjs/AllInOneFile.cpp: Removed JSActivation.cpp from AllInOneFile.cpp 11109 because that seems to make GCC happy. (Previously, I had added 11110 JSActivation.cpp to AllInOneFile.cpp because *that* seemed to make GCC 11111 happy. So it goes.) 11112 11113 2008-04-28 Geoffrey Garen <ggaren (a] apple.com> 11114 11115 Reviewed by Maciej Stachowiak. 11116 11117 Groundwork for more handling of "arguments". I'm not checking in the 11118 actual handling of "arguments" yet, because it still needs a little 11119 fiddling to avoid a performance regression. 11120 11121 SunSpider reports no change. 11122 11123 * VM/Machine.cpp: 11124 (KJS::initializeCallFrame): Put argc in the register file, so the 11125 arguments object can find it later, to determine arguments.length. 11126 11127 * kjs/nodes.h: 11128 (KJS::FunctionBodyNode::): Added a special code accessor for when you 11129 know the code has already been generated, and you don't have a scopeChain 11130 to supply for potential code generation. (This is the case when the 11131 activation object creates the arguments object.) 11132 11133 2008-04-28 Oliver Hunt <oliver (a] apple.com> 11134 11135 Reviewed by Geoff. 11136 11137 Replace unsafe use of auto_ptr in Vector with manual memory 11138 management. 11139 11140 * VM/RegisterFileStack.cpp: 11141 (KJS::RegisterFileStack::~RegisterFileStack): 11142 (KJS::RegisterFileStack::popRegisterFile): 11143 * VM/RegisterFileStack.h: 11144 11145 2008-04-27 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 11146 11147 Reviewed by Maciej. 11148 11149 Bug 18746: SQUIRRELFISH: indirect eval used when direct eval should be used 11150 <https://bugs.webkit.org/show_bug.cgi?id=18746> 11151 11152 Change the base to the correct value of the 'this' object after the direct 11153 eval test instead of before. 11154 11155 Fixes 5 layout tests. 11156 11157 * VM/Machine.cpp: 11158 (KJS::Machine::privateExecute): 11159 * kjs/nodes.cpp: 11160 (KJS::EvalFunctionCallNode::emitCode): 11161 11162 2008-04-26 Maciej Stachowiak <mjs (a] apple.com> 11163 11164 Reviewed by Oliver. 11165 11166 - document all property getting, setting and deleting opcodes 11167 11168 (And fix function parameter names to match corresponding opcode parameter names.) 11169 11170 * VM/CodeGenerator.cpp: 11171 (KJS::CodeGenerator::emitResolve): 11172 (KJS::CodeGenerator::emitResolveBase): 11173 (KJS::CodeGenerator::emitResolveBaseAndProperty): 11174 (KJS::CodeGenerator::emitResolveBaseAndFunc): 11175 (KJS::CodeGenerator::emitGetPropId): 11176 (KJS::CodeGenerator::emitPutPropId): 11177 (KJS::CodeGenerator::emitDeletePropId): 11178 (KJS::CodeGenerator::emitPutPropVal): 11179 * VM/CodeGenerator.h: 11180 * VM/Machine.cpp: 11181 (KJS::resolve): 11182 (KJS::resolveBase): 11183 (KJS::resolveBaseAndProperty): 11184 (KJS::resolveBaseAndFunc): 11185 (KJS::Machine::privateExecute): 11186 * kjs/nodes.cpp: 11187 (KJS::ResolveNode::emitCode): 11188 (KJS::ArrayNode::emitCode): 11189 (KJS::PropertyListNode::emitCode): 11190 (KJS::BracketAccessorNode::emitCode): 11191 (KJS::EvalFunctionCallNode::emitCode): 11192 (KJS::FunctionCallResolveNode::emitCode): 11193 (KJS::FunctionCallBracketNode::emitCode): 11194 (KJS::PostIncResolveNode::emitCode): 11195 (KJS::PostDecResolveNode::emitCode): 11196 (KJS::PostIncBracketNode::emitCode): 11197 (KJS::PostDecBracketNode::emitCode): 11198 (KJS::PostIncDotNode::emitCode): 11199 (KJS::PostDecDotNode::emitCode): 11200 (KJS::DeleteResolveNode::emitCode): 11201 (KJS::TypeOfResolveNode::emitCode): 11202 (KJS::PreIncResolveNode::emitCode): 11203 (KJS::PreDecResolveNode::emitCode): 11204 (KJS::PreIncBracketNode::emitCode): 11205 (KJS::PreDecBracketNode::emitCode): 11206 (KJS::AssignResolveNode::emitCode): 11207 (KJS::AssignDotNode::emitCode): 11208 (KJS::ReadModifyDotNode::emitCode): 11209 (KJS::AssignBracketNode::emitCode): 11210 (KJS::ReadModifyBracketNode::emitCode): 11211 (KJS::ConstDeclNode::emitCodeSingle): 11212 11213 2008-04-26 Oliver Hunt <oliver (a] apple.com> 11214 11215 Reviewed by Maciej. 11216 11217 Bug 18628: SQUIRRELFISH: need to support recursion limit 11218 <https://bugs.webkit.org/show_bug.cgi?id=18628> 11219 11220 Basically completes recursion limiting. There is still some 11221 tuning we may want to do to make things better in the face of 11222 very bad code, but certainly nothing worse than anything already 11223 possible in trunk. 11224 11225 Also fixes a WebKit test by fixing the exception text :D 11226 11227 * JavaScriptCore.exp: 11228 * VM/ExceptionHelpers.cpp: 11229 * VM/Machine.cpp: 11230 (KJS::Machine::execute): 11231 * VM/RegisterFile.cpp: 11232 (KJS::RegisterFile::growBuffer): 11233 (KJS::RegisterFile::addGlobalSlots): 11234 * VM/RegisterFile.h: 11235 (KJS::RegisterFile::grow): 11236 (KJS::RegisterFile::uncheckedGrow): 11237 * VM/RegisterFileStack.cpp: 11238 (KJS::RegisterFileStack::pushRegisterFile): 11239 * VM/RegisterFileStack.h: 11240 11241 2008-04-25 Oliver Hunt <oliver (a] apple.com> 11242 11243 Reviewed by Geoff. 11244 11245 Bug 18628: SQUIRRELFISH: need to support recursion limit 11246 <https://bugs.webkit.org/show_bug.cgi?id=18628> 11247 11248 Put a limit on the level of reentry recursion. 128 levels of re-entrant recursion 11249 seems reasonable as it is greater than the old eval limit, and a long way short of 11250 the reentry depth needed to overflow the stack. 11251 11252 * VM/Machine.cpp: 11253 (KJS::Machine::execute): 11254 * VM/Machine.h: 11255 11256 2008-04-25 Geoffrey Garen <ggaren (a] apple.com> 11257 11258 Reviewed by Sam Weinig. 11259 11260 A tiny bit of cleanup to the regexp code. 11261 11262 Removed some static_cast. 11263 11264 Removed createRegExpImp because it's no longer used. 11265 11266 2008-04-25 Oliver Hunt <oliver (a] apple.com> 11267 11268 Reviewed by Maciej. 11269 11270 Bug 18736: SQUIRRELFISH: switch statements with no default have incorrect codegen 11271 <https://bugs.webkit.org/show_bug.cgi?id=18736> 11272 11273 Ensure the "default" target is correct in the absence of an explicit default handler. 11274 11275 * kjs/nodes.cpp: 11276 (KJS::CaseBlockNode::emitCodeForBlock): 11277 11278 2008-04-25 Oliver Hunt <oliver (a] apple.com> 11279 11280 Reviewed by Maciej. 11281 11282 Bug 18628: SQUIRRELFISH: need to support recursion limit 11283 <https://bugs.webkit.org/show_bug.cgi?id=18628> 11284 11285 More bounds checking. 11286 11287 * VM/Machine.cpp: 11288 (KJS::Machine::execute): 11289 * VM/RegisterFile.cpp: 11290 (KJS::RegisterFile::growBuffer): 11291 * VM/RegisterFile.h: 11292 11293 2008-04-25 Maciej Stachowiak <mjs (a] apple.com> 11294 11295 Reviewed by Oliver. 11296 11297 - fix signal catching magic 11298 11299 The signal handlers are restored to _exit but are only set when 11300 running under run-javascriptcore-tests. fprintf from a signal 11301 handler is not safe. 11302 11303 * kjs/testkjs.cpp: 11304 (main): 11305 (parseArguments): 11306 * tests/mozilla/jsDriver.pl: 11307 11308 2008-04-25 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 11309 11310 Reviewed by Maciej. 11311 11312 Bug 18732: SQUIRRELFISH: exceptions thrown by native constructors are ignored 11313 <https://bugs.webkit.org/show_bug.cgi?id=18732> 11314 11315 Fixes another regression test. 11316 11317 * VM/Machine.cpp: 11318 (KJS::Machine::privateExecute): 11319 11320 2008-04-25 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 11321 11322 Reviewed by Maciej. 11323 11324 Bug 18728: SQUIRRELFISH: invalid regular expression constants should throw exceptions 11325 <https://bugs.webkit.org/show_bug.cgi?id=18728> 11326 11327 Fixes another regression test. 11328 11329 * kjs/nodes.cpp: 11330 (KJS::RegExpNode::emitCode): 11331 11332 2008-04-24 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 11333 11334 Reviewed by Geoffrey Garen. 11335 11336 Bug 18735: SQUIRRELFISH: closures are sometimes given an incorrect 'this' value when called 11337 <https://bugs.webkit.org/show_bug.cgi?id=18735> 11338 11339 The overloaded toThisObject method was not copied over to JSActivation. 11340 11341 Fixes two regression tests. 11342 11343 * kjs/JSActivation.cpp: 11344 (KJS::JSActivation::toThisObject): 11345 * kjs/JSActivation.h: 11346 11347 2008-04-24 Geoffrey Garen <ggaren (a] apple.com> 11348 11349 Reviewed by Oliver Hunt. 11350 11351 Added support for arguments.callee. 11352 11353 2008-04-24 Oliver Hunt <oliver (a] apple.com> 11354 11355 Reviewed by Maciej. 11356 11357 Bug 18628: SQUIRRELFISH: need to support recursion limit 11358 <https://bugs.webkit.org/show_bug.cgi?id=18628> 11359 11360 Partial fix -- this gets us some of the required bounds checking, but not 11361 complete coverage. But it does manage to do them without regressing :D 11362 11363 * VM/ExceptionHelpers.cpp: 11364 (KJS::createError): 11365 (KJS::createStackOverflowError): 11366 * VM/ExceptionHelpers.h: 11367 * VM/Machine.cpp: 11368 (KJS::slideRegisterWindowForCall): 11369 (KJS::Machine::execute): 11370 (KJS::Machine::privateExecute): 11371 * VM/RegisterFile.cpp: 11372 * VM/RegisterFile.h: 11373 (KJS::RegisterFile::): 11374 (KJS::RegisterFile::RegisterFile): 11375 (KJS::RegisterFile::grow): 11376 11377 2008-04-24 Geoffrey Garen <ggaren (a] apple.com> 11378 11379 Reviewed by Oliver Hunt. 11380 11381 A tiny bit more handling of "arguments": create a real, but mostly 11382 hollow, arguments object. 11383 11384 Fixes 2 regression tests. 11385 11386 2008-04-24 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 11387 11388 Reviewed by Oliver. 11389 11390 Bug 18717: SQUIRRELFISH: eval returns the wrong value for a variable declaration statement 11391 <https://bugs.webkit.org/show_bug.cgi?id=18717> 11392 11393 Fixes a regression test, but exposes the failure of another due to the 11394 lack of getters and setters. 11395 11396 * kjs/nodes.cpp: 11397 (KJS::ConstDeclNode::emitCodeSingle): 11398 (KJS::ConstDeclNode::emitCode): 11399 (KJS::ConstStatementNode::emitCode): 11400 (KJS::VarStatementNode::emitCode): 11401 * kjs/nodes.h: 11402 11403 2008-04-24 Geoffrey Garen <ggaren (a] apple.com> 11404 11405 Reviewed by Sam Weinig. 11406 11407 Print a CRASH statement when crashing, so test failures are not a 11408 mystery. 11409 11410 * kjs/testkjs.cpp: 11411 (handleCrash): 11412 (main): 11413 11414 2008-04-24 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 11415 11416 Reviewed by Geoffrey Garen. 11417 11418 Bug 18716: SQUIRRELFISH: typeof should return undefined for an undefined variable reference 11419 <https://bugs.webkit.org/show_bug.cgi?id=18716> 11420 11421 This fixes 2 more regression tests. 11422 11423 * kjs/nodes.cpp: 11424 (KJS::TypeOfResolveNode::emitCode): 11425 11426 2008-04-24 Geoffrey Garen <ggaren (a] apple.com> 11427 11428 Reviewed by Sam Weinig. 11429 11430 Put the callee in the call frame. 11431 11432 Necessary in order to support "arguments" and "arguments.callee". 11433 11434 Also fixes a latent GC bug, where an executing function could be 11435 subject to GC if the register holding it were overwritten. Here's 11436 an example that would have caused problems: 11437 11438 function f() 11439 { 11440 // Flood the machine stack to eliminate any old pointers to f. 11441 g.call({}); 11442 11443 // Overwrite f in the register file. 11444 f = 1; 11445 11446 // Force a GC. 11447 for (var i = 0; i < 5000; ++i) { 11448 ({}); 11449 } 11450 11451 // Welcome to crash-ville. 11452 } 11453 11454 function g() 11455 { 11456 } 11457 11458 f(); 11459 11460 * VM/Machine.h: Changed the order of arguments to 11461 execute(FunctionBodyNode*...) to match the other execute functions. 11462 * kjs/function.cpp: Updated to match new argument requirements from 11463 execute(FunctionBodyNode*...). Renamed newObj to thisObj to match the 11464 rest of JavaScriptCore. 11465 11466 SunSpider reports no change. 11467 11468 2008-04-23 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 11469 11470 Reviewed by Maciej. 11471 11472 Bug 18707: SQUIRRELFISH: eval always performs toString() on its argument 11473 <https://bugs.webkit.org/show_bug.cgi?id=18707> 11474 11475 This fixes 4 more regression tests. 11476 11477 * VM/Machine.cpp: 11478 (KJS::eval): 11479 11480 2008-04-23 Maciej Stachowiak <mjs (a] apple.com> 11481 11482 Reviewed by Oliver. 11483 11484 - fix logic bug in SegmentedVector::grow which would sometimes fail to resize a segment when needed 11485 11486 Fixes 3 JSC tests. 11487 11488 * VM/SegmentedVector.h: 11489 (KJS::SegmentedVector::grow): 11490 11491 2008-04-23 Geoffrey Garen <ggaren (a] apple.com> 11492 11493 Reviewed by Maciej Stachowiak. 11494 11495 Degenerate handling of "arguments" as a property of the activation 11496 object. Currently, we just return a vanilla object. 11497 11498 SunSpider reports no change. 11499 11500 Fixes: 11501 11502 ecma_3/Function/regress-94506.js. 11503 11504 Reveals to have been secretly broken: 11505 11506 ecma_3/Function/15.3.4.3-1.js 11507 ecma_3/Function/15.3.4.4-1.js 11508 11509 These tests were passing incorrectly. testkjs creates a global array 11510 named "arguments" to hold command-line arguments. That array was 11511 tricking these tests into thinking that an arguments object with length 11512 0 had been created. Since our new vanilla object shadows the global 11513 property named arguments, that object no longer fools these tests into 11514 passing. 11515 11516 Net change: +1 failing test. 11517 11518 * kjs/AllInOneFile.cpp: Had to put JSActivation.cpp into AllInOneFile.cpp 11519 to solve a surprising 8.6% regression in bitops-3bit-bits-in-byte. 11520 11521 2008-04-23 Maciej Stachowiak <mjs (a] apple.com> 11522 11523 Reviewed by Oliver. 11524 11525 - save and restore callFrame 11526 11527 * VM/Machine.cpp: 11528 (KJS::slideRegisterWindowForCall): 11529 (KJS::Machine::execute): 11530 (KJS::Machine::privateExecute): 11531 * kjs/testkjs.cpp: 11532 (main): 11533 11534 2008-04-23 Geoffrey Garen <ggaren (a] apple.com> 11535 11536 Reviewed by Maciej Stachowiak. 11537 11538 Fixed scopes for named function expressions. 11539 11540 Fixes one regression test. 11541 11542 Two changes here: 11543 11544 (1) The function's name is supposed to have attributes DontDelete, 11545 ReadOnly, regardless of the type of code executing. 11546 11547 (2) Push the name object on the function's scope chain, rather than 11548 the ExecState's scope chain because, well, that's where it belongs. 11549 11550 2008-04-23 Geoffrey Garen <ggaren (a] apple.com> 11551 11552 Reviewed by Oliver Hunt. 11553 11554 Inlined JSObject::putDirect, for a .4% SunSpider speedup. 11555 11556 I did this as a first step toward removing nodes.cpp from 11557 AllInOneFile.cpp, but I'm putting that larger project aside for now. 11558 11559 2008-04-23 Maciej Stachowiak <mjs (a] apple.com> 11560 11561 Rubber stamped by Geoff. 11562 11563 - add OldInterpreterExecState class and use it in dead code 11564 11565 This will allow removing things from the real ExecState class 11566 without having to figure out how to remove all this code without 11567 getting a perf regression. 11568 11569 * kjs/nodes.cpp: 11570 (KJS::ExpressionNode::evaluateToNumber): 11571 (KJS::ExpressionNode::evaluateToBoolean): 11572 (KJS::ExpressionNode::evaluateToInt32): 11573 (KJS::ExpressionNode::evaluateToUInt32): 11574 (KJS::Node::setErrorCompletion): 11575 (KJS::Node::throwError): 11576 (KJS::Node::throwUndefinedVariableError): 11577 (KJS::Node::handleException): 11578 (KJS::Node::rethrowException): 11579 (KJS::BreakpointCheckStatement::execute): 11580 (KJS::BreakpointCheckStatement::optimizeVariableAccess): 11581 (KJS::NullNode::evaluate): 11582 (KJS::FalseNode::evaluate): 11583 (KJS::TrueNode::evaluate): 11584 (KJS::NumberNode::evaluate): 11585 (KJS::NumberNode::evaluateToNumber): 11586 (KJS::NumberNode::evaluateToBoolean): 11587 (KJS::NumberNode::evaluateToInt32): 11588 (KJS::NumberNode::evaluateToUInt32): 11589 (KJS::ImmediateNumberNode::evaluate): 11590 (KJS::ImmediateNumberNode::evaluateToInt32): 11591 (KJS::ImmediateNumberNode::evaluateToUInt32): 11592 (KJS::StringNode::evaluate): 11593 (KJS::StringNode::evaluateToNumber): 11594 (KJS::StringNode::evaluateToBoolean): 11595 (KJS::RegExpNode::evaluate): 11596 (KJS::ThisNode::evaluate): 11597 (KJS::ResolveNode::inlineEvaluate): 11598 (KJS::ResolveNode::evaluate): 11599 (KJS::ResolveNode::evaluateToNumber): 11600 (KJS::ResolveNode::evaluateToBoolean): 11601 (KJS::ResolveNode::evaluateToInt32): 11602 (KJS::ResolveNode::evaluateToUInt32): 11603 (KJS::getSymbolTableEntry): 11604 (KJS::ResolveNode::optimizeVariableAccess): 11605 (KJS::LocalVarAccessNode::inlineEvaluate): 11606 (KJS::LocalVarAccessNode::evaluate): 11607 (KJS::LocalVarAccessNode::evaluateToNumber): 11608 (KJS::LocalVarAccessNode::evaluateToBoolean): 11609 (KJS::LocalVarAccessNode::evaluateToInt32): 11610 (KJS::LocalVarAccessNode::evaluateToUInt32): 11611 (KJS::getNonLocalSymbol): 11612 (KJS::ScopedVarAccessNode::inlineEvaluate): 11613 (KJS::ScopedVarAccessNode::evaluate): 11614 (KJS::ScopedVarAccessNode::evaluateToNumber): 11615 (KJS::ScopedVarAccessNode::evaluateToBoolean): 11616 (KJS::ScopedVarAccessNode::evaluateToInt32): 11617 (KJS::ScopedVarAccessNode::evaluateToUInt32): 11618 (KJS::NonLocalVarAccessNode::inlineEvaluate): 11619 (KJS::NonLocalVarAccessNode::evaluate): 11620 (KJS::NonLocalVarAccessNode::evaluateToNumber): 11621 (KJS::NonLocalVarAccessNode::evaluateToBoolean): 11622 (KJS::NonLocalVarAccessNode::evaluateToInt32): 11623 (KJS::NonLocalVarAccessNode::evaluateToUInt32): 11624 (KJS::ElementNode::optimizeVariableAccess): 11625 (KJS::ElementNode::evaluate): 11626 (KJS::ArrayNode::optimizeVariableAccess): 11627 (KJS::ArrayNode::evaluate): 11628 (KJS::ObjectLiteralNode::optimizeVariableAccess): 11629 (KJS::ObjectLiteralNode::evaluate): 11630 (KJS::PropertyListNode::optimizeVariableAccess): 11631 (KJS::PropertyListNode::evaluate): 11632 (KJS::PropertyNode::optimizeVariableAccess): 11633 (KJS::PropertyNode::evaluate): 11634 (KJS::BracketAccessorNode::optimizeVariableAccess): 11635 (KJS::BracketAccessorNode::inlineEvaluate): 11636 (KJS::BracketAccessorNode::evaluate): 11637 (KJS::BracketAccessorNode::evaluateToNumber): 11638 (KJS::BracketAccessorNode::evaluateToBoolean): 11639 (KJS::BracketAccessorNode::evaluateToInt32): 11640 (KJS::BracketAccessorNode::evaluateToUInt32): 11641 (KJS::DotAccessorNode::optimizeVariableAccess): 11642 (KJS::DotAccessorNode::inlineEvaluate): 11643 (KJS::DotAccessorNode::evaluate): 11644 (KJS::DotAccessorNode::evaluateToNumber): 11645 (KJS::DotAccessorNode::evaluateToBoolean): 11646 (KJS::DotAccessorNode::evaluateToInt32): 11647 (KJS::DotAccessorNode::evaluateToUInt32): 11648 (KJS::ArgumentListNode::optimizeVariableAccess): 11649 (KJS::ArgumentListNode::evaluateList): 11650 (KJS::ArgumentsNode::optimizeVariableAccess): 11651 (KJS::NewExprNode::optimizeVariableAccess): 11652 (KJS::NewExprNode::inlineEvaluate): 11653 (KJS::NewExprNode::evaluate): 11654 (KJS::NewExprNode::evaluateToNumber): 11655 (KJS::NewExprNode::evaluateToBoolean): 11656 (KJS::NewExprNode::evaluateToInt32): 11657 (KJS::NewExprNode::evaluateToUInt32): 11658 (KJS::ExpressionNode::resolveAndCall): 11659 (KJS::EvalFunctionCallNode::optimizeVariableAccess): 11660 (KJS::EvalFunctionCallNode::evaluate): 11661 (KJS::FunctionCallValueNode::optimizeVariableAccess): 11662 (KJS::FunctionCallValueNode::evaluate): 11663 (KJS::FunctionCallResolveNode::optimizeVariableAccess): 11664 (KJS::FunctionCallResolveNode::inlineEvaluate): 11665 (KJS::FunctionCallResolveNode::evaluate): 11666 (KJS::FunctionCallResolveNode::evaluateToNumber): 11667 (KJS::FunctionCallResolveNode::evaluateToBoolean): 11668 (KJS::FunctionCallResolveNode::evaluateToInt32): 11669 (KJS::FunctionCallResolveNode::evaluateToUInt32): 11670 (KJS::LocalVarFunctionCallNode::inlineEvaluate): 11671 (KJS::LocalVarFunctionCallNode::evaluate): 11672 (KJS::LocalVarFunctionCallNode::evaluateToNumber): 11673 (KJS::LocalVarFunctionCallNode::evaluateToBoolean): 11674 (KJS::LocalVarFunctionCallNode::evaluateToInt32): 11675 (KJS::LocalVarFunctionCallNode::evaluateToUInt32): 11676 (KJS::ScopedVarFunctionCallNode::inlineEvaluate): 11677 (KJS::ScopedVarFunctionCallNode::evaluate): 11678 (KJS::ScopedVarFunctionCallNode::evaluateToNumber): 11679 (KJS::ScopedVarFunctionCallNode::evaluateToBoolean): 11680 (KJS::ScopedVarFunctionCallNode::evaluateToInt32): 11681 (KJS::ScopedVarFunctionCallNode::evaluateToUInt32): 11682 (KJS::NonLocalVarFunctionCallNode::inlineEvaluate): 11683 (KJS::NonLocalVarFunctionCallNode::evaluate): 11684 (KJS::NonLocalVarFunctionCallNode::evaluateToNumber): 11685 (KJS::NonLocalVarFunctionCallNode::evaluateToBoolean): 11686 (KJS::NonLocalVarFunctionCallNode::evaluateToInt32): 11687 (KJS::NonLocalVarFunctionCallNode::evaluateToUInt32): 11688 (KJS::FunctionCallBracketNode::optimizeVariableAccess): 11689 (KJS::FunctionCallBracketNode::evaluate): 11690 (KJS::FunctionCallDotNode::optimizeVariableAccess): 11691 (KJS::FunctionCallDotNode::inlineEvaluate): 11692 (KJS::FunctionCallDotNode::evaluate): 11693 (KJS::FunctionCallDotNode::evaluateToNumber): 11694 (KJS::FunctionCallDotNode::evaluateToBoolean): 11695 (KJS::FunctionCallDotNode::evaluateToInt32): 11696 (KJS::FunctionCallDotNode::evaluateToUInt32): 11697 (KJS::PostIncResolveNode::optimizeVariableAccess): 11698 (KJS::PostIncResolveNode::evaluate): 11699 (KJS::PostIncLocalVarNode::evaluate): 11700 (KJS::PostDecResolveNode::optimizeVariableAccess): 11701 (KJS::PostDecResolveNode::evaluate): 11702 (KJS::PostDecLocalVarNode::evaluate): 11703 (KJS::PostDecLocalVarNode::inlineEvaluateToNumber): 11704 (KJS::PostDecLocalVarNode::evaluateToNumber): 11705 (KJS::PostDecLocalVarNode::evaluateToBoolean): 11706 (KJS::PostDecLocalVarNode::evaluateToInt32): 11707 (KJS::PostDecLocalVarNode::evaluateToUInt32): 11708 (KJS::PostfixBracketNode::optimizeVariableAccess): 11709 (KJS::PostIncBracketNode::evaluate): 11710 (KJS::PostDecBracketNode::evaluate): 11711 (KJS::PostfixDotNode::optimizeVariableAccess): 11712 (KJS::PostIncDotNode::evaluate): 11713 (KJS::PostDecDotNode::evaluate): 11714 (KJS::PostfixErrorNode::evaluate): 11715 (KJS::DeleteResolveNode::optimizeVariableAccess): 11716 (KJS::DeleteResolveNode::evaluate): 11717 (KJS::LocalVarDeleteNode::evaluate): 11718 (KJS::DeleteBracketNode::optimizeVariableAccess): 11719 (KJS::DeleteBracketNode::evaluate): 11720 (KJS::DeleteDotNode::optimizeVariableAccess): 11721 (KJS::DeleteDotNode::evaluate): 11722 (KJS::DeleteValueNode::optimizeVariableAccess): 11723 (KJS::DeleteValueNode::evaluate): 11724 (KJS::VoidNode::optimizeVariableAccess): 11725 (KJS::VoidNode::evaluate): 11726 (KJS::TypeOfValueNode::optimizeVariableAccess): 11727 (KJS::TypeOfResolveNode::optimizeVariableAccess): 11728 (KJS::LocalVarTypeOfNode::evaluate): 11729 (KJS::TypeOfResolveNode::evaluate): 11730 (KJS::TypeOfValueNode::evaluate): 11731 (KJS::PreIncResolveNode::optimizeVariableAccess): 11732 (KJS::PreIncLocalVarNode::evaluate): 11733 (KJS::PreIncResolveNode::evaluate): 11734 (KJS::PreDecResolveNode::optimizeVariableAccess): 11735 (KJS::PreDecLocalVarNode::evaluate): 11736 (KJS::PreDecResolveNode::evaluate): 11737 (KJS::PreIncConstNode::evaluate): 11738 (KJS::PreDecConstNode::evaluate): 11739 (KJS::PostIncConstNode::evaluate): 11740 (KJS::PostDecConstNode::evaluate): 11741 (KJS::PrefixBracketNode::optimizeVariableAccess): 11742 (KJS::PreIncBracketNode::evaluate): 11743 (KJS::PreDecBracketNode::evaluate): 11744 (KJS::PrefixDotNode::optimizeVariableAccess): 11745 (KJS::PreIncDotNode::evaluate): 11746 (KJS::PreDecDotNode::evaluate): 11747 (KJS::PrefixErrorNode::evaluate): 11748 (KJS::UnaryPlusNode::optimizeVariableAccess): 11749 (KJS::UnaryPlusNode::evaluate): 11750 (KJS::UnaryPlusNode::evaluateToBoolean): 11751 (KJS::UnaryPlusNode::evaluateToNumber): 11752 (KJS::UnaryPlusNode::evaluateToInt32): 11753 (KJS::UnaryPlusNode::evaluateToUInt32): 11754 (KJS::NegateNode::optimizeVariableAccess): 11755 (KJS::NegateNode::evaluate): 11756 (KJS::NegateNode::evaluateToNumber): 11757 (KJS::BitwiseNotNode::optimizeVariableAccess): 11758 (KJS::BitwiseNotNode::inlineEvaluateToInt32): 11759 (KJS::BitwiseNotNode::evaluate): 11760 (KJS::BitwiseNotNode::evaluateToNumber): 11761 (KJS::BitwiseNotNode::evaluateToBoolean): 11762 (KJS::BitwiseNotNode::evaluateToInt32): 11763 (KJS::BitwiseNotNode::evaluateToUInt32): 11764 (KJS::LogicalNotNode::optimizeVariableAccess): 11765 (KJS::LogicalNotNode::evaluate): 11766 (KJS::LogicalNotNode::evaluateToBoolean): 11767 (KJS::MultNode::optimizeVariableAccess): 11768 (KJS::MultNode::inlineEvaluateToNumber): 11769 (KJS::MultNode::evaluate): 11770 (KJS::MultNode::evaluateToNumber): 11771 (KJS::MultNode::evaluateToBoolean): 11772 (KJS::MultNode::evaluateToInt32): 11773 (KJS::MultNode::evaluateToUInt32): 11774 (KJS::DivNode::optimizeVariableAccess): 11775 (KJS::DivNode::inlineEvaluateToNumber): 11776 (KJS::DivNode::evaluate): 11777 (KJS::DivNode::evaluateToNumber): 11778 (KJS::DivNode::evaluateToInt32): 11779 (KJS::DivNode::evaluateToUInt32): 11780 (KJS::ModNode::optimizeVariableAccess): 11781 (KJS::ModNode::inlineEvaluateToNumber): 11782 (KJS::ModNode::evaluate): 11783 (KJS::ModNode::evaluateToNumber): 11784 (KJS::ModNode::evaluateToBoolean): 11785 (KJS::ModNode::evaluateToInt32): 11786 (KJS::ModNode::evaluateToUInt32): 11787 (KJS::throwOutOfMemoryErrorToNumber): 11788 (KJS::addSlowCase): 11789 (KJS::addSlowCaseToNumber): 11790 (KJS::add): 11791 (KJS::addToNumber): 11792 (KJS::AddNode::optimizeVariableAccess): 11793 (KJS::AddNode::evaluate): 11794 (KJS::AddNode::inlineEvaluateToNumber): 11795 (KJS::AddNode::evaluateToNumber): 11796 (KJS::AddNode::evaluateToInt32): 11797 (KJS::AddNode::evaluateToUInt32): 11798 (KJS::AddNumbersNode::inlineEvaluateToNumber): 11799 (KJS::AddNumbersNode::evaluate): 11800 (KJS::AddNumbersNode::evaluateToNumber): 11801 (KJS::AddNumbersNode::evaluateToInt32): 11802 (KJS::AddNumbersNode::evaluateToUInt32): 11803 (KJS::AddStringsNode::evaluate): 11804 (KJS::AddStringLeftNode::evaluate): 11805 (KJS::AddStringRightNode::evaluate): 11806 (KJS::SubNode::optimizeVariableAccess): 11807 (KJS::SubNode::inlineEvaluateToNumber): 11808 (KJS::SubNode::evaluate): 11809 (KJS::SubNode::evaluateToNumber): 11810 (KJS::SubNode::evaluateToInt32): 11811 (KJS::SubNode::evaluateToUInt32): 11812 (KJS::LeftShiftNode::optimizeVariableAccess): 11813 (KJS::LeftShiftNode::inlineEvaluateToInt32): 11814 (KJS::LeftShiftNode::evaluate): 11815 (KJS::LeftShiftNode::evaluateToNumber): 11816 (KJS::LeftShiftNode::evaluateToInt32): 11817 (KJS::LeftShiftNode::evaluateToUInt32): 11818 (KJS::RightShiftNode::optimizeVariableAccess): 11819 (KJS::RightShiftNode::inlineEvaluateToInt32): 11820 (KJS::RightShiftNode::evaluate): 11821 (KJS::RightShiftNode::evaluateToNumber): 11822 (KJS::RightShiftNode::evaluateToInt32): 11823 (KJS::RightShiftNode::evaluateToUInt32): 11824 (KJS::UnsignedRightShiftNode::optimizeVariableAccess): 11825 (KJS::UnsignedRightShiftNode::inlineEvaluateToUInt32): 11826 (KJS::UnsignedRightShiftNode::evaluate): 11827 (KJS::UnsignedRightShiftNode::evaluateToNumber): 11828 (KJS::UnsignedRightShiftNode::evaluateToInt32): 11829 (KJS::UnsignedRightShiftNode::evaluateToUInt32): 11830 (KJS::lessThan): 11831 (KJS::lessThanEq): 11832 (KJS::LessNode::optimizeVariableAccess): 11833 (KJS::LessNode::inlineEvaluateToBoolean): 11834 (KJS::LessNode::evaluate): 11835 (KJS::LessNode::evaluateToBoolean): 11836 (KJS::LessNumbersNode::inlineEvaluateToBoolean): 11837 (KJS::LessNumbersNode::evaluate): 11838 (KJS::LessNumbersNode::evaluateToBoolean): 11839 (KJS::LessStringsNode::inlineEvaluateToBoolean): 11840 (KJS::LessStringsNode::evaluate): 11841 (KJS::LessStringsNode::evaluateToBoolean): 11842 (KJS::GreaterNode::optimizeVariableAccess): 11843 (KJS::GreaterNode::inlineEvaluateToBoolean): 11844 (KJS::GreaterNode::evaluate): 11845 (KJS::GreaterNode::evaluateToBoolean): 11846 (KJS::LessEqNode::optimizeVariableAccess): 11847 (KJS::LessEqNode::inlineEvaluateToBoolean): 11848 (KJS::LessEqNode::evaluate): 11849 (KJS::LessEqNode::evaluateToBoolean): 11850 (KJS::GreaterEqNode::optimizeVariableAccess): 11851 (KJS::GreaterEqNode::inlineEvaluateToBoolean): 11852 (KJS::GreaterEqNode::evaluate): 11853 (KJS::GreaterEqNode::evaluateToBoolean): 11854 (KJS::InstanceOfNode::optimizeVariableAccess): 11855 (KJS::InstanceOfNode::evaluate): 11856 (KJS::InstanceOfNode::evaluateToBoolean): 11857 (KJS::InNode::optimizeVariableAccess): 11858 (KJS::InNode::evaluate): 11859 (KJS::InNode::evaluateToBoolean): 11860 (KJS::EqualNode::optimizeVariableAccess): 11861 (KJS::EqualNode::inlineEvaluateToBoolean): 11862 (KJS::EqualNode::evaluate): 11863 (KJS::EqualNode::evaluateToBoolean): 11864 (KJS::NotEqualNode::optimizeVariableAccess): 11865 (KJS::NotEqualNode::inlineEvaluateToBoolean): 11866 (KJS::NotEqualNode::evaluate): 11867 (KJS::NotEqualNode::evaluateToBoolean): 11868 (KJS::StrictEqualNode::optimizeVariableAccess): 11869 (KJS::StrictEqualNode::inlineEvaluateToBoolean): 11870 (KJS::StrictEqualNode::evaluate): 11871 (KJS::StrictEqualNode::evaluateToBoolean): 11872 (KJS::NotStrictEqualNode::optimizeVariableAccess): 11873 (KJS::NotStrictEqualNode::inlineEvaluateToBoolean): 11874 (KJS::NotStrictEqualNode::evaluate): 11875 (KJS::NotStrictEqualNode::evaluateToBoolean): 11876 (KJS::BitAndNode::optimizeVariableAccess): 11877 (KJS::BitAndNode::evaluate): 11878 (KJS::BitAndNode::inlineEvaluateToInt32): 11879 (KJS::BitAndNode::evaluateToNumber): 11880 (KJS::BitAndNode::evaluateToBoolean): 11881 (KJS::BitAndNode::evaluateToInt32): 11882 (KJS::BitAndNode::evaluateToUInt32): 11883 (KJS::BitXOrNode::optimizeVariableAccess): 11884 (KJS::BitXOrNode::inlineEvaluateToInt32): 11885 (KJS::BitXOrNode::evaluate): 11886 (KJS::BitXOrNode::evaluateToNumber): 11887 (KJS::BitXOrNode::evaluateToBoolean): 11888 (KJS::BitXOrNode::evaluateToInt32): 11889 (KJS::BitXOrNode::evaluateToUInt32): 11890 (KJS::BitOrNode::optimizeVariableAccess): 11891 (KJS::BitOrNode::inlineEvaluateToInt32): 11892 (KJS::BitOrNode::evaluate): 11893 (KJS::BitOrNode::evaluateToNumber): 11894 (KJS::BitOrNode::evaluateToBoolean): 11895 (KJS::BitOrNode::evaluateToInt32): 11896 (KJS::BitOrNode::evaluateToUInt32): 11897 (KJS::LogicalAndNode::optimizeVariableAccess): 11898 (KJS::LogicalAndNode::evaluate): 11899 (KJS::LogicalAndNode::evaluateToBoolean): 11900 (KJS::LogicalOrNode::optimizeVariableAccess): 11901 (KJS::LogicalOrNode::evaluate): 11902 (KJS::LogicalOrNode::evaluateToBoolean): 11903 (KJS::ConditionalNode::optimizeVariableAccess): 11904 (KJS::ConditionalNode::evaluate): 11905 (KJS::ConditionalNode::evaluateToBoolean): 11906 (KJS::ConditionalNode::evaluateToNumber): 11907 (KJS::ConditionalNode::evaluateToInt32): 11908 (KJS::ConditionalNode::evaluateToUInt32): 11909 (KJS::valueForReadModifyAssignment): 11910 (KJS::ReadModifyResolveNode::optimizeVariableAccess): 11911 (KJS::AssignResolveNode::optimizeVariableAccess): 11912 (KJS::ReadModifyLocalVarNode::evaluate): 11913 (KJS::AssignLocalVarNode::evaluate): 11914 (KJS::ReadModifyConstNode::evaluate): 11915 (KJS::AssignConstNode::evaluate): 11916 (KJS::ReadModifyResolveNode::evaluate): 11917 (KJS::AssignResolveNode::evaluate): 11918 (KJS::AssignDotNode::optimizeVariableAccess): 11919 (KJS::AssignDotNode::evaluate): 11920 (KJS::ReadModifyDotNode::optimizeVariableAccess): 11921 (KJS::ReadModifyDotNode::evaluate): 11922 (KJS::AssignErrorNode::evaluate): 11923 (KJS::AssignBracketNode::optimizeVariableAccess): 11924 (KJS::AssignBracketNode::evaluate): 11925 (KJS::ReadModifyBracketNode::optimizeVariableAccess): 11926 (KJS::ReadModifyBracketNode::evaluate): 11927 (KJS::CommaNode::optimizeVariableAccess): 11928 (KJS::CommaNode::evaluate): 11929 (KJS::ConstDeclNode::optimizeVariableAccess): 11930 (KJS::ConstDeclNode::handleSlowCase): 11931 (KJS::ConstDeclNode::evaluateSingle): 11932 (KJS::ConstDeclNode::evaluate): 11933 (KJS::ConstStatementNode::optimizeVariableAccess): 11934 (KJS::ConstStatementNode::execute): 11935 (KJS::statementListExecute): 11936 (KJS::BlockNode::optimizeVariableAccess): 11937 (KJS::BlockNode::execute): 11938 (KJS::EmptyStatementNode::execute): 11939 (KJS::ExprStatementNode::optimizeVariableAccess): 11940 (KJS::ExprStatementNode::execute): 11941 (KJS::VarStatementNode::optimizeVariableAccess): 11942 (KJS::VarStatementNode::execute): 11943 (KJS::IfNode::optimizeVariableAccess): 11944 (KJS::IfNode::execute): 11945 (KJS::IfElseNode::optimizeVariableAccess): 11946 (KJS::IfElseNode::execute): 11947 (KJS::DoWhileNode::optimizeVariableAccess): 11948 (KJS::DoWhileNode::execute): 11949 (KJS::WhileNode::optimizeVariableAccess): 11950 (KJS::WhileNode::execute): 11951 (KJS::ForNode::optimizeVariableAccess): 11952 (KJS::ForNode::execute): 11953 (KJS::ForInNode::optimizeVariableAccess): 11954 (KJS::ForInNode::execute): 11955 (KJS::ContinueNode::execute): 11956 (KJS::BreakNode::execute): 11957 (KJS::ReturnNode::optimizeVariableAccess): 11958 (KJS::ReturnNode::execute): 11959 (KJS::WithNode::optimizeVariableAccess): 11960 (KJS::WithNode::execute): 11961 (KJS::CaseClauseNode::optimizeVariableAccess): 11962 (KJS::CaseClauseNode::evaluate): 11963 (KJS::CaseClauseNode::executeStatements): 11964 (KJS::ClauseListNode::optimizeVariableAccess): 11965 (KJS::CaseBlockNode::optimizeVariableAccess): 11966 (KJS::CaseBlockNode::executeBlock): 11967 (KJS::SwitchNode::optimizeVariableAccess): 11968 (KJS::SwitchNode::execute): 11969 (KJS::LabelNode::optimizeVariableAccess): 11970 (KJS::LabelNode::execute): 11971 (KJS::ThrowNode::optimizeVariableAccess): 11972 (KJS::ThrowNode::execute): 11973 (KJS::TryNode::optimizeVariableAccess): 11974 (KJS::TryNode::execute): 11975 (KJS::ProgramNode::initializeSymbolTable): 11976 (KJS::ScopeNode::optimizeVariableAccess): 11977 (KJS::ProgramNode::processDeclarations): 11978 (KJS::EvalNode::processDeclarations): 11979 (KJS::ProgramNode::execute): 11980 (KJS::EvalNode::execute): 11981 (KJS::FunctionBodyNodeWithDebuggerHooks::execute): 11982 (KJS::FuncDeclNode::execute): 11983 (KJS::FuncExprNode::evaluate): 11984 * kjs/nodes.h: 11985 (KJS::Node::): 11986 (KJS::FalseNode::): 11987 (KJS::TrueNode::): 11988 (KJS::ArgumentsNode::): 11989 11990 2008-04-23 Oliver Hunt <oliver (a] apple.com> 11991 11992 Reviewed by Geoff. 11993 11994 Bug 18672: SQUIRRELFISH: codegen fails with a large number of temporaries 11995 <https://bugs.webkit.org/show_bug.cgi?id=18672> 11996 11997 Add a SegmentedVector type, which provides a Vector<T> which maintains 11998 existing memory locations during resize. This allows dynamically sizing 11999 local, temporary and label "vectors" in CodeGenerator. 12000 12001 * JavaScriptCore.xcodeproj/project.pbxproj: 12002 * VM/CodeGenerator.cpp: 12003 (KJS::CodeGenerator::addVar): 12004 (KJS::CodeGenerator::CodeGenerator): 12005 (KJS::CodeGenerator::newTemporary): 12006 (KJS::CodeGenerator::newLabel): 12007 * VM/CodeGenerator.h: 12008 * VM/SegmentedVector.h: Added. 12009 (KJS::SegmentedVector::SegmentedVector): 12010 (KJS::SegmentedVector::~SegmentedVector): 12011 (KJS::SegmentedVector::last): 12012 (KJS::SegmentedVector::append): 12013 (KJS::SegmentedVector::removeLast): 12014 (KJS::SegmentedVector::size): 12015 (KJS::SegmentedVector::operator[]): 12016 (KJS::SegmentedVector::resize): 12017 (KJS::SegmentedVector::shrink): 12018 (KJS::SegmentedVector::grow): 12019 12020 2008-04-23 Geoffrey Garen <ggaren (a] apple.com> 12021 12022 Reviewed by Maciej Stachowiak. 12023 12024 A little refactoring in preparation for supporting 'arguments'. 12025 12026 Fixes 2 regression tests. 12027 12028 SunSpider reports no change. 12029 12030 We now check the activation register, instead of the codeBlock, to 12031 determine whether we need to tear off the activation. This is to support 12032 "f.arguments", which will create an activation/arguments pair for f, 12033 even though the needsFullScopeChain flag is false for f's codeBlock. 12034 12035 The test fixes resulted from calling initializeCallFrame for re-entrant 12036 function code, instead of initializing (not enough) parts of the call 12037 frame by hand. 12038 12039 2008-04-22 Maciej Stachowiak <mjs (a] apple.com> 12040 12041 Reviewed by Sam. 12042 12043 - propagate the "this" value properly to local eval 12044 12045 (fixes a measly one regression test) 12046 12047 * VM/CodeBlock.h: 12048 (KJS::CodeBlock::CodeBlock): 12049 (KJS::ProgramCodeBlock::ProgramCodeBlock): 12050 (KJS::EvalCodeBlock::EvalCodeBlock): 12051 * VM/Machine.cpp: 12052 (KJS::Machine::privateExecute): 12053 12054 2008-04-22 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 12055 12056 Reviewed by Maciej. 12057 12058 Add support for function declarations in eval code. 12059 12060 (this fixes 12 more regression tests) 12061 12062 * VM/CodeBlock.h: 12063 * VM/CodeGenerator.cpp: 12064 (KJS::CodeGenerator::CodeGenerator): 12065 * VM/CodeGenerator.h: 12066 * VM/Machine.cpp: 12067 (KJS::Machine::execute): 12068 * kjs/nodes.cpp: 12069 (KJS::EvalNode::generateCode): 12070 12071 2008-04-22 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 12072 12073 Reviewed by Oliver. 12074 12075 Implement LabelNode. 12076 12077 * VM/CodeGenerator.cpp: 12078 (KJS::CodeGenerator::pushJumpContext): 12079 (KJS::CodeGenerator::jumpContextForContinue): 12080 (KJS::CodeGenerator::jumpContextForBreak): 12081 * VM/CodeGenerator.h: 12082 * kjs/nodes.cpp: 12083 (KJS::DoWhileNode::emitCode): 12084 (KJS::WhileNode::emitCode): 12085 (KJS::ForNode::emitCode): 12086 (KJS::ForInNode::emitCode): 12087 (KJS::ContinueNode::emitCode): 12088 (KJS::BreakNode::emitCode): 12089 (KJS::SwitchNode::emitCode): 12090 (KJS::LabelNode::emitCode): 12091 12092 2008-04-22 Geoffrey Garen <ggaren (a] apple.com> 12093 12094 Reviewed by Oliver Hunt. 12095 12096 Fixed crash when unwinding from exceptions inside eval. 12097 12098 * VM/Machine.cpp: 12099 (KJS::Machine::unwindCallFrame): Don't assume that the top of the 12100 current call frame's scope chain is an activation: it can be the global 12101 object, instead. 12102 12103 2008-04-22 Maciej Stachowiak <mjs (a] apple.com> 12104 12105 Reviewed by Geoff. 12106 12107 * kjs/testkjs.cpp: 12108 (main): Convert signals to exit codes, so that crashing tests are 12109 detected as regression test failures. 12110 12111 2008-04-22 Geoffrey Garen <ggaren (a] apple.com> 12112 12113 Reviewed by Oliver Hunt and Maciej Stachowiak. 12114 12115 Renamed "needsActivation" to "needsFullScopeChain" because lying will 12116 make hair grow on the backs of your hands. 12117 12118 2008-04-21 Geoffrey Garen <ggaren (a] apple.com> 12119 12120 Reviewed by Maciej Stachowiak. 12121 12122 Fixed ScopeChainNode lifetime problems: 12123 12124 (1) In "with" and "catch" scopes, we would construct a ScopeChain 12125 object and then jump across its destructor, leaking the ScopeChainNode 12126 we had pushed. 12127 12128 (2) In global and eval scopes, we would fail to initially ref 12129 "scopeChain", causing us to overrelease it later. Now that we ref 12130 "scopeChain" properly, we also need to deref it when the script 12131 terminates. 12132 12133 SunSpider reports a .2% regression, but an earlier round of ScopeChain 12134 refactoring was a .4% speedup, so there. 12135 12136 2008-04-22 Maciej Stachowiak <mjs (a] apple.com> 12137 12138 Reviewed by Alexey. 12139 12140 - use global object instead of null for "this" on unqualified calls 12141 12142 This fixes 10 more JSC test regressions. 12143 12144 * VM/Machine.cpp: 12145 (KJS::Machine::privateExecute): 12146 12147 2008-04-22 Maciej Stachowiak <mjs (a] apple.com> 12148 12149 Reviewed by Oliver. 12150 12151 - throw proper exceptions for objects that don't implement call or construct 12152 12153 This fixes 21 more JSC test regressions. It is also seemingly an 12154 0.5% progression. 12155 12156 * VM/ExceptionHelpers.cpp: 12157 (KJS::createNotAnObjectError): 12158 (KJS::createNotAConstructorError): 12159 (KJS::createNotAFunctionError): 12160 * VM/ExceptionHelpers.h: 12161 * VM/Machine.cpp: 12162 (KJS::Machine::privateExecute): 12163 12164 2008-04-21 Oliver Hunt <oliver (a] apple.com> 12165 12166 Reviewed by Geoff. 12167 12168 Implement emitCode for ConstDeclNode. 12169 12170 This fixes the crash (assertion) in js1_5/Scope/scope-001.js 12171 12172 * VM/CodeGenerator.cpp: 12173 (KJS::CodeGenerator::registerForLocalConstInit): 12174 * VM/CodeGenerator.h: 12175 * kjs/nodes.cpp: 12176 (KJS::AssignResolveNode::emitCode): 12177 (KJS::ConstDeclNode::emitCodeSingle): 12178 (KJS::ConstDeclNode::emitCode): 12179 (KJS::ConstStatementNode::emitCode): 12180 * kjs/nodes.h: 12181 12182 2008-04-21 Maciej Stachowiak <mjs (a] apple.com> 12183 12184 Reviewed by Sam. 12185 12186 - add some support for the split window object 12187 12188 This fixes many layout tests. 12189 12190 * VM/Machine.cpp: 12191 (KJS::resolveBaseAndFunc): Use toThisObject() to ensure we get the 12192 wrapper global, if one exists, as the "this" object. 12193 * kjs/function.cpp: 12194 (KJS::globalFuncEval): Use toGlobalObject() to handle the wrapper 12195 case properly. 12196 12197 2008-04-21 Maciej Stachowiak <mjs (a] apple.com> 12198 12199 Reviewed by Oliver. 12200 12201 - restore ScopeChain::operator= to avoid crash on many layout tests 12202 12203 Otherwise, FunctionImp::setScope would cause a reference 12204 underflow. I implemented using the copy construct and swap idiom. 12205 12206 * kjs/scope_chain.h: 12207 (KJS::ScopeChain::swap): 12208 (KJS::ScopeChain::operator=): 12209 12210 2008-04-21 Oliver Hunt <oliver (a] apple.com> 12211 12212 Reviewed by Geoff. 12213 12214 Bug 18649: SQUIRRELFISH: correctly handle exceptions in eval code 12215 <https://bugs.webkit.org/show_bug.cgi?id=18649> 12216 12217 Allocate a callframe for eval() and initialise with a null codeBlock to 12218 indicate native code. This prevents the unwinder from clobbering the 12219 register stack. 12220 12221 * VM/Machine.cpp: 12222 (KJS::Machine::execute): 12223 12224 2008-04-21 Geoffrey Garen <ggaren (a] apple.com> 12225 12226 Reviewed by Sam Weinig. 12227 12228 Removed ScopeChain::push(ScopeChain&) because it was unused. Moved 12229 ScopeChain::print to ScopeChainNode. 12230 12231 ScopeChain is now nothing more than a resource-handling wrapper around 12232 ScopeChainNode. 12233 12234 2008-04-21 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 12235 12236 Reviewed by Maciej. 12237 12238 Bug 18671: SquirrelFish: continue inside switch fails 12239 <https://bugs.webkit.org/show_bug.cgi?id=18671> 12240 12241 * VM/CodeGenerator.cpp: 12242 (KJS::CodeGenerator::jumpContextForLabel): 12243 * VM/CodeGenerator.h: 12244 * kjs/nodes.cpp: 12245 (KJS::ContinueNode::emitCode): 12246 12247 2008-04-21 Geoffrey Garen <ggaren (a] apple.com> 12248 12249 Reviewed by Sam Weinig. 12250 12251 Moved push(JSObject*) and pop() from ScopeChain to ScopeChainNode, 12252 rearranging scope_chain.h a bit. 12253 12254 SunSpider reports no change. 12255 12256 2008-04-21 Geoffrey Garen <ggaren (a] apple.com> 12257 12258 Reviewed by Sam Weinig. 12259 12260 Moved bottom() from ScopeChain to ScopeChainNode, simplifying it based 12261 on the knowledge that the ScopeChain is never empty. 12262 12263 SunSpider reports no change. 12264 12265 2008-04-21 Geoffrey Garen <ggaren (a] apple.com> 12266 12267 Reviewed by Oliver Hunt. 12268 12269 Moved begin() and end() from ScopeChain to ScopeChainNode. 12270 12271 Also marked a few methods "const". 12272 12273 SunSpider reports no change. 12274 12275 2008-04-21 Geoffrey Garen <ggaren (a] apple.com> 12276 12277 Reviewed by Maciej Stachowiak. 12278 12279 Turned ScopeChain::depth into a stand-alone function, and simplified it 12280 a bit. 12281 12282 I also moved ScopeChain::depth to Machine.cpp because it doesn't report 12283 the true depth of the ScopeChain -- just the Machine's perspective of 12284 its depth within a given call frame. 12285 12286 SunSpider reports no change. 12287 12288 2008-04-21 Geoffrey Garen <ggaren (a] apple.com> 12289 12290 Reviewed by Maciej Stachowiak. 12291 12292 Removed indirection in ScopeChain::ref / ScopeChain::deref. 12293 12294 SunSpider reports no change. 12295 12296 * kjs/scope_chain.h: 12297 (KJS::ScopeChain::ScopeChain): 12298 (KJS::ScopeChain::~ScopeChain): 12299 (KJS::ScopeChain::clear): 12300 12301 2008-04-21 Oliver Hunt <oliver (a] apple.com> 12302 12303 Fix debug build 12304 12305 * kjs/nodes.cpp: 12306 (KJS::ConstDeclNode::evaluateSingle): 12307 12308 2008-04-21 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 12309 12310 Reviewed by Oliver. 12311 12312 Bug 18664: SQUIRRELFISH: correctly throw a SyntaxError when parsing of eval code fails 12313 <https://bugs.webkit.org/show_bug.cgi?id=18664> 12314 12315 Correctly throw a SyntaxError when parsing of eval code fails. 12316 12317 * VM/Machine.cpp: 12318 (KJS::eval): 12319 12320 2008-04-21 Oliver Hunt <oliver (a] apple.com> 12321 12322 Reviewed by Geoff. 12323 12324 Partial fix for Bug 18649: SQUIRRELFISH: correctly handle exceptions in eval code 12325 12326 Make sure we correct the register state before jumping to vm_throw. 12327 12328 * VM/Machine.cpp: 12329 (KJS::Machine::privateExecute): 12330 12331 2008-04-21 Geoffrey Garen <ggaren (a] apple.com> 12332 12333 Reviewed by Maciej Stachowiak. 12334 12335 Simplified ScopeChain ref/deref. 12336 12337 SunSpider reports a .4% speedup. 12338 12339 * kjs/scope_chain.h: 12340 (KJS::ScopeChainNode::ref): Removed this function because it was nonsense. 12341 ScopeChainNodes are initialized with a refCount of 1, so the loop was 12342 guaranteed to iterate exactly once. 12343 12344 2008-04-21 Geoffrey Garen <ggaren (a] apple.com> 12345 12346 Reviewed by Maciej Stachowiak. 12347 12348 Removed support for empty ScopeChains. 12349 12350 SunSpider reports no change. 12351 12352 2008-04-21 Geoffrey Garen <ggaren (a] apple.com> 12353 12354 Reviewed by Maciej Stachowiak. 12355 12356 Removed some completely unused ScopeChain member functions. 12357 12358 SunSpider reports no change. 12359 12360 2008-04-21 Geoffrey Garen <ggaren (a] apple.com> 12361 12362 Reviewed by Maciej Stachowiak. 12363 12364 Avoid creating unnecessary ScopeChain objects, to reduce refcount churn. 12365 12366 SunSpider reports no change. 12367 12368 2008-04-21 Maciej Stachowiak <mjs (a] apple.com> 12369 12370 Rubber stamped by Alexey. 12371 12372 Add some braces.x 12373 12374 * kjs/testkjs.cpp: 12375 (runWithScripts): 12376 12377 2008-04-21 Maciej Stachowiak <mjs (a] apple.com> 12378 12379 Reviewed by Oliver. 12380 12381 - only print "End:" output when -d flag is passed. 12382 12383 This fixes half of our failing JSC regression tests. 12384 12385 * kjs/testkjs.cpp: 12386 (runWithScripts): 12387 12388 2008-04-21 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 12389 12390 Reviewed by Maciej. 12391 12392 Add support for variable declarations in eval code. 12393 12394 * VM/CodeBlock.h: 12395 (KJS::EvalCodeBlock::EvalCodeBlock): 12396 * VM/CodeGenerator.cpp: 12397 (KJS::CodeGenerator::CodeGenerator): 12398 * VM/CodeGenerator.h: 12399 * VM/Machine.cpp: 12400 (KJS::Machine::execute): 12401 * VM/Machine.h: 12402 * kjs/function.cpp: 12403 (KJS::globalFuncEval): 12404 * kjs/nodes.cpp: 12405 (KJS::EvalNode::generateCode): 12406 * kjs/nodes.h: 12407 (KJS::EvalNode::): 12408 12409 2008-04-20 Oliver Hunt <oliver (a] apple.com> 12410 12411 Reviewed by Maciej. 12412 12413 Throw exceptions for invalid continue, break, and return statements. 12414 12415 Simple refactoring and extension of Cameron's AssignErrorNode, etc patch 12416 12417 * VM/CodeGenerator.cpp: 12418 (KJS::CodeGenerator::CodeGenerator): 12419 (KJS::CodeGenerator::pushJumpContext): 12420 (KJS::CodeGenerator::popJumpContext): 12421 (KJS::CodeGenerator::jumpContextForLabel): 12422 * VM/CodeGenerator.h: 12423 * kjs/nodes.cpp: 12424 (KJS::Node::emitThrowError): 12425 (KJS::ContinueNode::emitCode): 12426 (KJS::BreakNode::emitCode): 12427 (KJS::ReturnNode::emitCode): 12428 * kjs/nodes.h: 12429 12430 2008-04-20 Geoffrey Garen <ggaren (a] apple.com> 12431 12432 Reviewed by Oliver Hunt. 12433 12434 Removed Machine.cpp from AllInOneFile.cpp, and manually inlined a few 12435 things that used to be inlined automatically. 12436 12437 1.9% speedup on SunSpider. 12438 12439 My hope is that we'll face fewer surprises in Machine.cpp codegen, now 12440 that GCC is making fewer decisions. The speedup seems to confirm that. 12441 12442 2008-04-20 Oliver Hunt <oliver (a] apple.com> 12443 12444 Reviewed by Maciej. 12445 12446 Bug 18642: Iterator context may get placed into the return register, leading to much badness 12447 <https://bugs.webkit.org/show_bug.cgi?id=18642> 12448 12449 To prevent incorrectly reusing what will become the result register for 12450 eval and global code execution, we need to request and ref the destination 12451 in advance of codegen. Unfortunately this may lead to unnecessary copying, 12452 although in future we can probably limit this. Curiously SunSpider shows 12453 a progression in a number of tests, although it comes out as a wash overall. 12454 12455 * kjs/nodes.cpp: 12456 (KJS::EvalNode::emitCode): 12457 (KJS::ProgramNode::emitCode): 12458 12459 2008-04-20 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 12460 12461 Reviewed by Maciej. 12462 12463 Add support for AssignErrorNode, PrefixErrorNode, and PostfixErrorNode. 12464 12465 * VM/CodeBlock.cpp: 12466 (KJS::CodeBlock::dump): 12467 * VM/CodeGenerator.cpp: 12468 (KJS::CodeGenerator::emitCreateError): 12469 * VM/CodeGenerator.h: 12470 * VM/Machine.cpp: 12471 (KJS::Machine::privateExecute): 12472 * VM/Opcode.h: 12473 * kjs/nodes.cpp: 12474 (KJS::PostfixErrorNode::emitCode): 12475 (KJS::PrefixErrorNode::emitCode): 12476 (KJS::AssignErrorNode::emitCode): 12477 * kjs/nodes.h: 12478 12479 2008-04-20 Oliver Hunt <oliver (a] apple.com> 12480 12481 Reviewed by Geoff and Mark. 12482 12483 Provide line number information in exceptions 12484 12485 Simple patch, adds line number information metadata to CodeBlock 12486 and a simple method to get the line number responsible for a given 12487 Instruction*. 12488 12489 * VM/CodeBlock.cpp: 12490 (KJS::CodeBlock::lineNumberForVPC): 12491 * VM/CodeBlock.h: 12492 * VM/CodeGenerator.h: 12493 (KJS::CodeGenerator::emitNode): 12494 * VM/Machine.cpp: 12495 (KJS::Machine::throwException): 12496 12497 2008-04-20 Oliver Hunt <oliver (a] apple.com> 12498 12499 Reviewed by Maciej. 12500 12501 Provide "sourceURL" in exceptions 12502 12503 * VM/CodeBlock.h: 12504 * VM/Machine.cpp: 12505 (KJS::Machine::throwException): 12506 * kjs/nodes.cpp: 12507 (KJS::EvalNode::generateCode): 12508 (KJS::ProgramNode::generateCode): 12509 12510 2008-04-19 Oliver Hunt <oliver (a] apple.com> 12511 12512 Reviewed by Maciej. 12513 12514 Don't call emitCode directly on subnodes, instead use CodeGenerator::emitNode 12515 12516 This patch just a preparation for tracking line numbers. 12517 12518 * kjs/nodes.cpp: 12519 (KJS::ObjectLiteralNode::emitCode): 12520 (KJS::PropertyListNode::emitCode): 12521 (KJS::ArgumentListNode::emitCode): 12522 (KJS::TryNode::emitCode): 12523 12524 2008-04-19 Oliver Hunt <oliver (a] apple.com> 12525 12526 Reviewed by Maciej. 12527 12528 Bug 18619: Support continue, break, and return in try .. finally blocks 12529 <https://bugs.webkit.org/show_bug.cgi?id=18619> 12530 12531 This patch replaces the current partial finally support (which uses code 12532 duplication to achieve what it does) with a subroutine based approach. 12533 This has a number of advantages over code duplication: 12534 * Reduced code size 12535 * Simplified exception handling as the finaliser code only exists in 12536 one place, so no "magic" is needed to get the correct handler for a 12537 finaliser. 12538 * When we support instruction to line number mapping we won't need to 12539 worry about the dramatic code movement caused by duplication 12540 12541 On the downside it is necessary to add two new opcodes, op_jsr and op_sret 12542 to enter and exit the finaliser subroutines, happily SunSpider reports 12543 a performance progression (gcc amazes me) and ubench reports a wash. 12544 12545 While jsr and sret provide a mechanism that allows us to enter and exit 12546 any arbitrary finaliser we need to, it was still necessary to increase 12547 the amount of information tracked when entering and exiting both finaliser 12548 scopes and dynamic scopes ("with"). This means "scopeDepth" is now 12549 the combination of "finaliserDepth" and "dynamicScopeDepth". We also 12550 now use a scopeContextStack to ensure that we pop scopes and execute 12551 finalisers in the correct order. This increases the cost of "with" nodes 12552 during codegen, but it should not be significant enough to effect real 12553 world performance and greatly simplifies codegen for return, break and 12554 continue when interacting with finalisers. 12555 12556 * VM/CodeBlock.cpp: 12557 (KJS::CodeBlock::dump): 12558 Pretty printing of jsr/sret opcodes 12559 12560 * VM/CodeGenerator.cpp: 12561 (KJS::CodeGenerator::CodeGenerator): 12562 (KJS::CodeGenerator::emitPushScope): 12563 (KJS::CodeGenerator::emitPopScope): 12564 Dynamic scopes need to be tracked on the scopeContextStack now 12565 12566 (KJS::CodeGenerator::pushFinallyContext): 12567 (KJS::CodeGenerator::popFinallyContext): 12568 Handle entry and exit from code regions with finalisers. This is 12569 needed solely to support return, continue and break inside finaliser 12570 regions. 12571 12572 (KJS::CodeGenerator::emitComplexJumpScopes): 12573 Helper function for emitJumpScopes to handle the complex codegen 12574 needed to handle return, continue and break inside a finaliser region 12575 12576 (KJS::CodeGenerator::emitJumpScopes): 12577 Updated to be aware of finalisers, if a cross-scope jump occurs inside 12578 a finaliser we hand off codegen to emitComplexJumpScopes, otherwise 12579 we can handle the normal (trivial) case with a single instruction. 12580 12581 (KJS::CodeGenerator::emitJumpSubroutine): 12582 (KJS::CodeGenerator::emitSubroutineReturn): 12583 Trivial opcode emitter functions. 12584 12585 * VM/CodeGenerator.h: 12586 (KJS::CodeGenerator::scopeDepth): 12587 * VM/Machine.cpp: 12588 (KJS::Machine::privateExecute): 12589 Implement op_jsr and op_sret. 12590 12591 * VM/Opcode.h: 12592 Ad op_jsr and op_sret 12593 12594 * kjs/nodes.cpp: 12595 (KJS::TryNode::emitCode): 12596 Fix codegen for new finaliser model. 12597 12598 2008-04-17 Mark Rowe <mrowe (a] apple.com> 12599 12600 Rubber-stamped by Oliver Hunt. 12601 12602 Remove unnecessary files from testkjs, testapi and minidom targets. 12603 12604 * JavaScriptCore.xcodeproj/project.pbxproj: 12605 12606 2008-04-17 Geoffrey Garen <ggaren (a] apple.com> 12607 12608 Reviewed by Oliver Hunt. 12609 12610 Fixed ASSERT seen during run-sunspider of a debug build. 12611 12612 * VM/CodeGenerator.h: Made the default codegen buffers bigger. SunSpider 12613 runs all tests in one global environment, so you end up with more than 12614 128 locals. This is just a stop-gap until we code up a real 12615 solution to arbitrary symbol and label limits. 12616 12617 2008-04-17 Geoffrey Garen <ggaren (a] apple.com> 12618 12619 Reviewed by Oliver Hunt. 12620 12621 Fixed a bug in exception unwinding, where we wouldn't deref the scope 12622 chain in global scope, so we would leak ScopeChainNodes when exceptions 12623 were thrown inside "with" and "catch" scopes. 12624 12625 Also did some cleanup of the unwinding code along the way. 12626 12627 Scope chain reference counting is still wrong in a few ways. I thought 12628 I would fix this portion of it first. 12629 12630 run-sunspider shows no change. 12631 12632 * VM/Machine.cpp: 12633 (KJS::Machine::unwindCallFrame): 12634 (KJS::Machine::throwException): 12635 (KJS::Machine::privateExecute): 12636 * VM/Machine.h: 12637 12638 2008-04-17 Oliver Hunt <oliver (a] apple.com> 12639 12640 Reviewed by Maciej. 12641 12642 Add more exception checking to toNumber conversions 12643 12644 This corrects op_pre_dec, op_negate, op_mod and op_sub. 12645 12646 * VM/Machine.cpp: 12647 (KJS::Machine::privateExecute): 12648 12649 2008-04-17 Geoffrey Garen <ggaren (a] apple.com> and Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 12650 12651 Reviewed by Oliver Hunt. 12652 12653 Behold: eval. 12654 12655 Introduced a new opcode: op_call_eval. In the normal case, it performs 12656 an eval. In the case where eval has been overridden in some way, it 12657 performs a function call. 12658 12659 * VM/CodeGenerator.h: Added a feature so the code generator knows not 12660 to optimized locals in eval code. 12661 12662 2008-04-17 Geoffrey Garen <ggaren (a] apple.com> 12663 12664 Reviewed by Sam Weinig. 12665 12666 Added some ASSERTs to document codegen failures in 12667 run-javascriptcore-tests. 12668 12669 For all tests, program-level codegen now either succeeds, or fails with 12670 an ASSERT. 12671 12672 * VM/CodeGenerator.cpp: 12673 (KJS::CodeGenerator::addVar): 12674 (KJS::CodeGenerator::CodeGenerator): 12675 (KJS::CodeGenerator::newTemporary): 12676 (KJS::CodeGenerator::newLabel): 12677 12678 2008-04-17 Geoffrey Garen <ggaren (a] apple.com> 12679 12680 Reviewed by Maciej Stachowiak. 12681 12682 Fixed another case of a dst register being an unreferenced temporary 12683 (caused an ASSERT when running the full sunspider suite). 12684 12685 * kjs/nodes.cpp: 12686 (KJS::CaseBlockNode::emitCodeForBlock): 12687 12688 2008-04-16 Maciej Stachowiak <mjs (a] apple.com> 12689 12690 Reviewed by Geoff. 12691 12692 - add documentation (and meaningful parameter names) for arithmetic and bitwise binary ops 12693 12694 * VM/CodeBlock.cpp: 12695 (KJS::CodeBlock::dump): 12696 * VM/CodeGenerator.cpp: 12697 (KJS::CodeGenerator::emitMul): 12698 (KJS::CodeGenerator::emitDiv): 12699 (KJS::CodeGenerator::emitMod): 12700 (KJS::CodeGenerator::emitSub): 12701 (KJS::CodeGenerator::emitLeftShift): 12702 (KJS::CodeGenerator::emitRightShift): 12703 (KJS::CodeGenerator::emitUnsignedRightShift): 12704 (KJS::CodeGenerator::emitBitAnd): 12705 (KJS::CodeGenerator::emitBitXOr): 12706 (KJS::CodeGenerator::emitBitOr): 12707 * VM/CodeGenerator.h: 12708 * VM/Machine.cpp: 12709 (KJS::Machine::privateExecute): 12710 * VM/Opcode.h: 12711 * kjs/nodes.cpp: 12712 (KJS::MultNode::emitCode): 12713 (KJS::DivNode::emitCode): 12714 (KJS::ModNode::emitCode): 12715 (KJS::SubNode::emitCode): 12716 (KJS::LeftShiftNode::emitCode): 12717 (KJS::RightShiftNode::emitCode): 12718 (KJS::UnsignedRightShiftNode::emitCode): 12719 (KJS::BitAndNode::emitCode): 12720 (KJS::BitXOrNode::emitCode): 12721 (KJS::BitOrNode::emitCode): 12722 (KJS::emitReadModifyAssignment): 12723 (KJS::ReadModifyResolveNode::emitCode): 12724 12725 2008-04-16 Oliver Hunt <oliver (a] apple.com> 12726 12727 Reviewed by Geoff. 12728 12729 Exception checks for toNumber in op_pre_inc 12730 12731 This is somewhat more convoluted than the simple hadException checks 12732 we currently use. Instead we use special toNumber conversions that 12733 select between the exception and ordinary vPC. This allows us to 12734 remove any branches in the common case (incrementing a number). 12735 12736 * API/JSCallbackObject.h: 12737 * API/JSCallbackObjectFunctions.h: 12738 (KJS::::toNumber): 12739 * ChangeLog: 12740 * JavaScriptCore.exp: 12741 * JavaScriptCore.xcodeproj/project.pbxproj: 12742 * VM/JSPropertyNameIterator.cpp: 12743 (KJS::JSPropertyNameIterator::toNumber): 12744 * VM/JSPropertyNameIterator.h: 12745 * VM/Machine.cpp: 12746 (KJS::Machine::privateExecute): 12747 * VM/Opcode.h: 12748 * kjs/ExecState.cpp: 12749 (KJS::ExecState::ExecState): 12750 * kjs/ExecState.h: 12751 * kjs/JSNotAnObject.cpp: 12752 (KJS::JSNotAnObject::toNumber): 12753 * kjs/JSNotAnObject.h: 12754 * kjs/internal.cpp: 12755 (KJS::StringImp::toNumber): 12756 (KJS::NumberImp::toNumber): 12757 (KJS::GetterSetterImp::toNumber): 12758 * kjs/internal.h: 12759 * kjs/object.cpp: 12760 (KJS::JSObject::toNumber): 12761 * kjs/object.h: 12762 * kjs/value.h: 12763 (KJS::JSValue::toNumber): 12764 12765 2008-04-16 Maciej Stachowiak <mjs (a] apple.com> 12766 12767 Reviewed by Geoff. 12768 12769 - ensure that activations are kept in a register to protect them from GC 12770 12771 Also renamed OptionalCalleeScopeChain constant to OptionalCalleeActivation, since 12772 that is what is now kept there, and there is no more need to keep the scope chain in 12773 the register file. 12774 12775 * VM/Machine.cpp: 12776 (KJS::initializeCallFrame): 12777 (KJS::scopeChainForCall): 12778 * VM/Machine.h: 12779 (KJS::Machine::): 12780 12781 2008-04-16 Geoffrey Garen <ggaren (a] apple.com> 12782 12783 Reviewed by Oliver Hunt. 12784 12785 Made "this" work in program code / global scope. 12786 12787 The machine can initialize "this" prior to execution because it knows 12788 that, for program code, "this" is always stored in lr1. 12789 12790 * VM/Machine.cpp: 12791 (KJS::Machine::execute): 12792 * VM/Machine.h: 12793 (KJS::Machine::): 12794 * kjs/interpreter.cpp: 12795 (KJS::Interpreter::evaluate): 12796 12797 2008-04-16 Geoffrey Garen <ggaren (a] apple.com> 12798 12799 Reviewed by Oliver Hunt. 12800 12801 Fixed a codegen bug when returning from inside a dynamic scope (a with 12802 or catch block): we need to pop any dynamic scope(s) that have been 12803 added so op_ret can find the activation object at the top of the scope 12804 chain. 12805 12806 * kjs/nodes.cpp: 12807 (KJS::ReturnNode::emitCode): If we're returning from inside a dynamic 12808 scope, emit a jmp_scopes to take care of popping any dynamic scope(s) 12809 and then branching to the return instruction. 12810 12811 2008-04-16 Maciej Stachowiak <mjs (a] apple.com> 12812 12813 Reviewed by Geoff. 12814 12815 - document the add and get_prop_id opcodes 12816 12817 In addition to adding documentation in comments, I changed 12818 references to register IDs or indices relating to these opcodes to 12819 have meaningful names instead of r0 r1 r2. 12820 12821 * VM/CodeGenerator.cpp: 12822 (KJS::CodeGenerator::emitAdd): 12823 * VM/CodeGenerator.h: 12824 * VM/Machine.cpp: 12825 (KJS::Machine::privateExecute): 12826 * kjs/nodes.cpp: 12827 (KJS::DotAccessorNode::emitCode): 12828 (KJS::FunctionCallDotNode::emitCode): 12829 (KJS::PostIncDotNode::emitCode): 12830 (KJS::PostDecDotNode::emitCode): 12831 (KJS::PreIncDotNode::emitCode): 12832 (KJS::PreDecDotNode::emitCode): 12833 (KJS::AddNode::emitCode): 12834 (KJS::ReadModifyDotNode::emitCode): 12835 12836 2008-04-15 Geoffrey Garen <ggaren (a] apple.com> 12837 12838 Reviewed by Oliver Hunt and Maciej Stachowiak. 12839 12840 Fixed a codegen bug in with and switch, and added an ASSERT to 12841 make sure it doesn't happen again. 12842 12843 emitCode() assumes that dst, if non-zero, is either referenced or 12844 non-temporary (i.e., it assumes that newTemporary() will return a 12845 register not equal to dst). Certain callers to emitCode() weren't 12846 guaranteeing that to be so, so temporary register values were being 12847 overwritten. 12848 12849 * VM/CodeGenerator.h: 12850 (KJS::CodeGenerator::emitNode): ASSERT that dst is referenced or non-temporary. 12851 12852 * kjs/nodes.cpp: 12853 (KJS::CommaNode::emitCode): Reference the dst we pass. 12854 12855 (KJS::WithNode::emitCode): No need to pass an explicit dst register. 12856 12857 (KJS::CaseBlockNode::emitCodeForBlock): No need to pass an explicit dst register. 12858 (KJS::SwitchNode::emitCode): No need to pass an explicit dst register. 12859 12860 * kjs/nodes.h: Made dst the last parameter to emitCodeForBlock, to match 12861 emitCode. 12862 12863 2008-04-15 Oliver Hunt <oliver (a] apple.com> 12864 12865 Reviewed by Maciej. 12866 12867 Bug 18526: Throw exceptions when resolve fails for op_resolve_base_and_func. 12868 <https://bugs.webkit.org/show_bug.cgi?id=18526> 12869 12870 Very simple fix, sunspider shows a 0.7% progression, ubench shows a 0.4% regression. 12871 12872 * VM/Machine.cpp: 12873 (KJS::resolveBaseAndFunc): 12874 (KJS::Machine::privateExecute): 12875 12876 2008-04-15 Maciej Stachowiak <mjs (a] apple.com> 12877 12878 Reviewed by Oliver. 12879 12880 - fix incorrect result on 3d-raytrace test 12881 12882 Oliver found and tracked down this bug, I just typed in the fix. 12883 12884 * VM/Machine.cpp: 12885 (KJS::slideRegisterWindowForCall): When setting omitted parameters to undefined, 12886 account for the space for local variables. 12887 12888 2008-04-15 Maciej Stachowiak <mjs (a] apple.com> 12889 12890 Reviewed by Oliver. 12891 12892 - fix codegen handling of dst registers 12893 12894 1.006x speedup (not sure why). 12895 12896 Most emitCode functions take an optional "dst" parameter that says 12897 where the output of the instruction should be written. I made some 12898 functions for convenient handling of the dst register: 12899 12900 * VM/CodeGenerator.h: 12901 (KJS::CodeGenerator::tempDestination): Takes the dst register. Returns it if 12902 it is not null and is a temporary, otherwise allocates a new temporary. This is 12903 intended for cases where an intermediate value might be written into the dst 12904 12905 (KJS::CodeGenerator::finalDestination): Takes the dst register and an optional 12906 register that was used as a temp destination. Picks the right thing for the final 12907 output. Intended to be used as the output register for the instruction that generates 12908 the final value of a particular node. 12909 12910 (KJS::CodeGenerator::moveToDestinationIfNeeded): Takes dst and a 12911 RegisterID; moves from the register to dst if dst is defined and 12912 different from the register. This is intended for cases where the 12913 result of a node is already in a specific register (likely a 12914 local), and so no code needs to be generated unless a specific 12915 destination has been requested, in which case a move is needed. 12916 12917 I also applied these methods throughout emitCode functions. In 12918 some cases this was just cleanup, in other cases I fixed actual 12919 codegen bugs. Below I have given specific comments for the cases 12920 where I believe I fixed a codegen bug, or improved quality of codegen. 12921 12922 * kjs/nodes.cpp: 12923 (KJS::NullNode::emitCode): 12924 (KJS::FalseNode::emitCode): 12925 (KJS::TrueNode::emitCode): 12926 (KJS::NumberNode::emitCode): 12927 (KJS::StringNode::emitCode): 12928 (KJS::RegExpNode::emitCode): 12929 (KJS::ThisNode::emitCode): Now avoids emitting a mov when dst is 12930 the same as the this register (the unlikely case of "this = this"); 12931 (KJS::ResolveNode::emitCode): Now avoids emitting a mov when dst 12932 is the same as the local regiester, in the local var case (the 12933 unlikely case of "x = x"); 12934 (KJS::ArrayNode::emitCode): Fixed a codegen bug where array 12935 literal element expressions may have observed an intermediate 12936 value of constructing the array. 12937 (KJS::ObjectLiteralNode::emitCode): 12938 (KJS::PropertyListNode::emitCode): Fixed a codegen bug where object literal 12939 property definition expressions may have obesrved an intermediate value of 12940 constructing the object. 12941 (KJS::BracketAccessorNode::emitCode): 12942 (KJS::DotAccessorNode::emitCode): 12943 (KJS::NewExprNode::emitCode): 12944 (KJS::FunctionCallValueNode::emitCode): 12945 (KJS::FunctionCallBracketNode::emitCode): 12946 (KJS::FunctionCallDotNode::emitCode): 12947 (KJS::PostIncResolveNode::emitCode): 12948 (KJS::PostDecResolveNode::emitCode): 12949 (KJS::PostIncBracketNode::emitCode): 12950 (KJS::PostDecBracketNode::emitCode): 12951 (KJS::PostIncDotNode::emitCode): 12952 (KJS::PostDecDotNode::emitCode): 12953 (KJS::DeleteResolveNode::emitCode): 12954 (KJS::DeleteBracketNode::emitCode): 12955 (KJS::DeleteDotNode::emitCode): 12956 (KJS::DeleteValueNode::emitCode): 12957 (KJS::VoidNode::emitCode): 12958 (KJS::TypeOfResolveNode::emitCode): 12959 (KJS::TypeOfValueNode::emitCode): 12960 (KJS::PreIncResolveNode::emitCode): Fixed a codegen bug where the final 12961 value would not be output to the dst register in the local var case. 12962 (KJS::PreDecResolveNode::emitCode): Fixed a codegen bug where the final 12963 value would not be output to the dst register in the local var case. 12964 (KJS::PreIncBracketNode::emitCode): 12965 (KJS::PreDecBracketNode::emitCode): 12966 (KJS::PreIncDotNode::emitCode): 12967 (KJS::PreDecDotNode::emitCode): 12968 (KJS::UnaryPlusNode::emitCode): 12969 (KJS::NegateNode::emitCode): 12970 (KJS::BitwiseNotNode::emitCode): 12971 (KJS::LogicalNotNode::emitCode): 12972 (KJS::MultNode::emitCode): 12973 (KJS::DivNode::emitCode): 12974 (KJS::ModNode::emitCode): 12975 (KJS::AddNode::emitCode): 12976 (KJS::SubNode::emitCode): 12977 (KJS::LeftShiftNode::emitCode): 12978 (KJS::RightShiftNode::emitCode): 12979 (KJS::UnsignedRightShiftNode::emitCode): 12980 (KJS::LessNode::emitCode): 12981 (KJS::GreaterNode::emitCode): 12982 (KJS::LessEqNode::emitCode): 12983 (KJS::GreaterEqNode::emitCode): 12984 (KJS::InstanceOfNode::emitCode): 12985 (KJS::InNode::emitCode): 12986 (KJS::EqualNode::emitCode): 12987 (KJS::NotEqualNode::emitCode): 12988 (KJS::StrictEqualNode::emitCode): 12989 (KJS::NotStrictEqualNode::emitCode): 12990 (KJS::BitAndNode::emitCode): 12991 (KJS::BitXOrNode::emitCode): 12992 (KJS::BitOrNode::emitCode): 12993 (KJS::LogicalAndNode::emitCode): 12994 (KJS::LogicalOrNode::emitCode): 12995 (KJS::ConditionalNode::emitCode): 12996 (KJS::emitReadModifyAssignment): Allow an out argument separate from the operands, 12997 needed for fixes below. 12998 (KJS::ReadModifyResolveNode::emitCode): Fixed a codegen bug where the right side of 12999 the expression may observe an intermediate value. 13000 (KJS::AssignResolveNode::emitCode): Fixed a codegen bug where the right side of the 13001 expression may observe an intermediate value. 13002 (KJS::ReadModifyDotNode::emitCode): Fixed a codegen bug where the right side of the 13003 expression may observe an intermediate value. 13004 (KJS::ReadModifyBracketNode::emitCode): Fixed a codegen bug where the right side of the 13005 expression may observe an intermediate value. 13006 (KJS::CommaNode::emitCode): Avoid writing temporary value to dst register. 13007 (KJS::ReturnNode::emitCode): Void return should return undefined, not null. 13008 (KJS::FuncExprNode::emitCode): 13009 13010 2008-04-15 Maciej Stachowiak <mjs (a] apple.com> 13011 13012 Reviewed by Geoff. 13013 13014 - fix huge performance regression (from trunk) in string-unpack-code 13015 13016 This restores string-unpack-code performance to parity with 13017 trunk (2.27x speedup relative to previous SquirrelFish) 13018 13019 * VM/Machine.cpp: 13020 (KJS::Machine::execute): Shrink register file after call to avoid 13021 growing repeatedly. 13022 13023 2008-04-15 Geoffrey Garen <ggaren (a] apple.com> 13024 13025 Reviewed by Sam Weinig. 13026 13027 Fixed dumpCallFrame to match our new convention of passing around a 13028 ScopeChainNode* instead of a ScopeChain*. 13029 13030 * JavaScriptCore.exp: 13031 * VM/Machine.cpp: 13032 (KJS::Machine::dumpCallFrame): 13033 * VM/Machine.h: 13034 13035 2008-04-15 Oliver Hunt <oliver (a] apple.com> 13036 13037 Reviewed by Maciej. 13038 13039 Bug 18436: Need to throw exception on read/modify/write or similar resolve for nonexistent property 13040 <https://bugs.webkit.org/show_bug.cgi?id=18436> 13041 13042 Add op_resolve_base_and_property for read/modify/write operations, 13043 this adds a "superinstruction" to resolve the base and value of a 13044 property simultaneously. Just using resolveBase and resolve results 13045 in an 5% regression in ubench, 30% in loop-empty-resolve (which is 13046 expected). 1.3% progression in sunspider, 2.1% in ubench, with a 13047 21% gain in loop-empty-resolve. The only outlier is function-missing-args 13048 which gets a 3% regression that I could never resolve. 13049 13050 * VM/CodeBlock.cpp: 13051 (KJS::CodeBlock::dump): 13052 * VM/CodeGenerator.cpp: 13053 (KJS::CodeGenerator::emitResolveBaseAndProperty): 13054 * VM/CodeGenerator.h: 13055 * VM/Machine.cpp: 13056 (KJS::resolveBaseAndProperty): 13057 (KJS::Machine::privateExecute): 13058 * VM/Opcode.h: 13059 * kjs/nodes.cpp: 13060 (KJS::PostIncResolveNode::emitCode): 13061 (KJS::PostDecResolveNode::emitCode): 13062 (KJS::PreIncResolveNode::emitCode): 13063 (KJS::PreDecResolveNode::emitCode): 13064 (KJS::ReadModifyResolveNode::emitCode): 13065 13066 2008-04-15 Maciej Stachowiak <mjs (a] apple.com> 13067 13068 Reviewed by Oliver. 13069 13070 - fixed "SquirrelFish crashes due to bad scope chain on some SunSpider tests" 13071 https://bugs.webkit.org/show_bug.cgi?id=18508 13072 13073 3d-raytrace and string-unpack-code now run. 13074 13075 The basic approach is to pass around ScopeChainNode* instead of 13076 ScopeChain*, which in addition to not becoming suddenly an invalid 13077 pointer also saves an indirection. 13078 13079 This is an 0.4% speedup on SunSpider --squirrelfish (1.8% on --ubench) 13080 13081 * VM/Machine.cpp: 13082 (KJS::resolve): 13083 (KJS::resolveBase): 13084 (KJS::resolveBaseAndFunc): 13085 (KJS::initializeCallFrame): 13086 (KJS::scopeChainForCall): 13087 (KJS::Machine::unwindCallFrame): 13088 (KJS::Machine::throwException): 13089 (KJS::Machine::execute): 13090 (KJS::Machine::privateExecute): 13091 * VM/Machine.h: 13092 * VM/Register.h: 13093 (KJS::Register::): 13094 * kjs/nodes.cpp: 13095 (KJS::EvalNode::generateCode): 13096 (KJS::FunctionBodyNode::generateCode): 13097 (KJS::ProgramNode::generateCode): 13098 (KJS::ProgramNode::processDeclarations): 13099 (KJS::EvalNode::processDeclarations): 13100 (KJS::FuncDeclNode::makeFunction): 13101 (KJS::FuncExprNode::makeFunction): 13102 * kjs/nodes.h: 13103 (KJS::ProgramNode::): 13104 (KJS::EvalNode::): 13105 (KJS::FunctionBodyNode::): 13106 * kjs/object.h: 13107 * kjs/scope_chain.h: 13108 (KJS::ScopeChainNode::ScopeChainNode): 13109 (KJS::ScopeChainNode::deref): 13110 (KJS::ScopeChainIterator::ScopeChainIterator): 13111 (KJS::ScopeChainIterator::operator*): 13112 (KJS::ScopeChainIterator::operator->): 13113 (KJS::ScopeChain::ScopeChain): 13114 (KJS::ScopeChain::node): 13115 (KJS::ScopeChain::deref): 13116 (KJS::ScopeChain::ref): 13117 (KJS::ScopeChainNode::ref): 13118 (KJS::ScopeChainNode::release): 13119 (KJS::ScopeChainNode::begin): 13120 (KJS::ScopeChainNode::end): 13121 13122 2008-04-14 Geoffrey Garen <ggaren (a] apple.com> 13123 13124 Reviewed by Oliver Hunt. 13125 13126 Fixed crash when accessing registers in a torn-off activation object. 13127 13128 * kjs/JSActivation.cpp: 13129 (KJS::JSActivation::copyRegisters): Update our registerOffset after 13130 copying our registers, since our offset should now be relative to 13131 our private register array, not the shared register file. 13132 13133 2008-04-14 Maciej Stachowiak <mjs (a] apple.com> 13134 13135 Reviewed by Oliver. 13136 13137 - fix a codegen flaw that makes some tests run way too fast or way too slow 13138 13139 The basic problem was that FunctionCallResolveNode results in 13140 codegen which can incorrectly write an intermediate value into the 13141 dst register even when that is a local. I added convenience 13142 functions to CodeGenerator for getting this right, but for now I 13143 only fixed FunctionCallResolve. 13144 13145 * VM/CodeGenerator.h: 13146 (KJS::CodeGenerator::tempDestination): 13147 (KJS::CodeGenerator::): 13148 * kjs/nodes.cpp: 13149 (KJS::FunctionCallResolveNode::emitCode): 13150 13151 2008-04-14 Gabor Loki <loki (a] inf.u-szeged.hu> 13152 13153 Reviewed and slightly tweaked by Geoffrey Garen. 13154 13155 Bug 18489: Squirrelfish doesn't build on linux 13156 <https://bugs.webkit.org/show_bug.cgi?id=18489> 13157 13158 * JavaScriptCore.pri: Add VM into include path and its files into 13159 source set 13160 * VM/JSPropertyNameIterator.cpp: Fix include name 13161 * VM/Machine.cpp: Add UNLIKELY macro for GCC 13162 * VM/Machine.h: Add missing includes 13163 * VM/RegisterFile.cpp: Add missing include 13164 * kjs/testkjs.pro: Add VM into include path 13165 13166 2008-04-14 Geoffrey Garen <ggaren (a] apple.com> 13167 13168 Reviewed by Sam Weinig. 13169 13170 Restored OwnPtr in some places where I had removed it previously. We 13171 can have an OwnPtr to an undefined class in a header as long as the 13172 class's destructor isn't in the header. 13173 13174 2008-04-14 Geoffrey Garen <ggaren (a] apple.com> 13175 13176 Reviewed by Sam Weinig. 13177 13178 Fixed access to "this" inside dynamic scopes. 13179 13180 * VM/CodeGenerator.cpp: 13181 (KJS::CodeGenerator::registerForLocal): Always return a register for 13182 "this", even if we're not optimizing access to other locals. Because 13183 "this" is a keyword, it's always in a register and always accessible. 13184 13185 * VM/CodeGenerator.h: 13186 (KJS::CodeGenerator::shouldOptimizeLocals): Factored out a function 13187 for determining whether we should optimize access to locals, since 13188 eval will need to make this test a little more complicated. 13189 13190 2008-04-14 Maciej Stachowiak <mjs (a] apple.com> 13191 13192 Reviewed by Adam. 13193 13194 - fix crash when running SunSpider full harness 13195 13196 When growing the register file's buffer to make space for new globals, 13197 make sure to copy accounting for the fact that the new space is logically 13198 at the beginning of the buffer in this case, instead of at the end as when 13199 growing for a new call frame. 13200 13201 * VM/RegisterFile.cpp: 13202 (KJS::RegisterFile::newBuffer): 13203 (KJS::RegisterFile::growBuffer): 13204 (KJS::RegisterFile::addGlobalSlots): 13205 * VM/RegisterFile.h: 13206 13207 2008-04-11 Geoffrey Garen <ggaren (a] apple.com> 13208 13209 Reviewed by Sam Weinig. 13210 13211 Mark constant pools for global and eval code (collectively known as 13212 "program code"). (Constant pools for function code are already marked by 13213 their functions.) 13214 13215 The global object is responsible for marking program code constant 13216 pools. Code blocks add themselves to the mark set at creation time, and 13217 remove themselves from the mark set at destruction time. 13218 13219 sunspider --squirrelfish reports a 1% speedup, perhaps because 13220 generateCode() is now non-virtual. 13221 13222 * kjs/nodes.cpp: I had to use manual init and delete in this file 13223 because putting an OwnPtr into the header would have created a circular 13224 header dependency. 13225 13226 2008-04-10 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 13227 13228 Reviewed by Maciej. 13229 13230 Bug 18231: Improve support for function call nodes in SquirrelFish 13231 <https://bugs.webkit.org/show_bug.cgi?id=18231> 13232 13233 Use correct value of 'this' for function calls. 13234 13235 * VM/CodeBlock.cpp: 13236 (KJS::CodeBlock::dump): 13237 * VM/CodeGenerator.cpp: 13238 (KJS::CodeGenerator::emitResolveBaseAndFunc): 13239 * VM/CodeGenerator.h: 13240 * VM/Machine.cpp: 13241 (KJS::resolveBaseAndFunc): 13242 (KJS::Machine::privateExecute): 13243 * VM/Opcode.h: 13244 * kjs/nodes.cpp: 13245 (KJS::FunctionCallResolveNode::emitCode): 13246 13247 2008-04-10 Geoffrey Garen <ggaren (a] apple.com> 13248 13249 This time for sure. 13250 13251 * kjs/interpreter.cpp: 13252 (KJS::Interpreter::evaluate): 13253 13254 2008-04-10 Geoffrey Garen <ggaren (a] apple.com> 13255 13256 Reviewed by Sam Weinig. 13257 13258 Fixed Interpreter::execute to honor the new model for returning non-NULL 13259 values when an exception is thrown. 13260 13261 * kjs/interpreter.cpp: 13262 (KJS::Interpreter::evaluate): 13263 13264 2008-04-10 Oliver Hunt <oliver (a] apple.com> 13265 13266 Reviewed by Geoff. 13267 13268 Fix SquirrelFish interpreter to pass internal exceptions back to 13269 native code correctly. 13270 13271 * JavaScriptCore.xcodeproj/project.pbxproj: 13272 * VM/Machine.cpp: 13273 (KJS::Machine::privateExecute): 13274 13275 2008-04-10 Sam Weinig <sam (a] webkit.org> 13276 13277 Reviewed by Geoffrey Garen. 13278 13279 Replace the use of getCallData in op_construct with the new 13280 getConstructData function that replaces implementsConstruct. 13281 13282 * API/JSCallbackConstructor.cpp: 13283 (KJS::JSCallbackConstructor::getConstructData): 13284 * API/JSCallbackConstructor.h: 13285 * API/JSCallbackObject.h: 13286 * API/JSCallbackObjectFunctions.h: 13287 (KJS::::getConstructData): 13288 (KJS::::construct): 13289 * API/JSObjectRef.cpp: 13290 (JSObjectIsConstructor): 13291 * JavaScriptCore.exp: 13292 * JavaScriptCore.xcodeproj/project.pbxproj: 13293 * VM/Machine.cpp: 13294 (KJS::Machine::privateExecute): 13295 * kjs/CallData.h: 13296 * kjs/ConstructData.h: Copied from JavaScriptCore/kjs/CallData.h. 13297 * kjs/array_object.cpp: 13298 (KJS::ArrayObjectImp::getConstructData): 13299 * kjs/array_object.h: 13300 * kjs/bool_object.cpp: 13301 (KJS::BooleanObjectImp::getConstructData): 13302 * kjs/bool_object.h: 13303 * kjs/date_object.cpp: 13304 (KJS::DateObjectImp::getConstructData): 13305 * kjs/date_object.h: 13306 * kjs/error_object.cpp: 13307 (KJS::ErrorObjectImp::getConstructData): 13308 (KJS::NativeErrorImp::getConstructData): 13309 * kjs/error_object.h: 13310 * kjs/function.cpp: 13311 (KJS::FunctionImp::getCallData): 13312 (KJS::FunctionImp::getConstructData): 13313 (KJS::FunctionImp::construct): 13314 * kjs/function.h: 13315 * kjs/function_object.cpp: 13316 (KJS::FunctionObjectImp::getConstructData): 13317 * kjs/function_object.h: 13318 * kjs/nodes.cpp: 13319 (KJS::NewExprNode::inlineEvaluate): 13320 * kjs/number_object.cpp: 13321 (KJS::NumberObjectImp::getConstructData): 13322 * kjs/number_object.h: 13323 * kjs/object.cpp: 13324 * kjs/object.h: 13325 * kjs/object_object.cpp: 13326 (KJS::ObjectObjectImp::getConstructData): 13327 * kjs/object_object.h: 13328 * kjs/regexp_object.cpp: 13329 (KJS::RegExpObjectImp::getConstructData): 13330 * kjs/regexp_object.h: 13331 * kjs/string_object.cpp: 13332 (KJS::StringObjectImp::getConstructData): 13333 * kjs/string_object.h: 13334 * kjs/value.cpp: 13335 (KJS::JSCell::getConstructData): 13336 * kjs/value.h: 13337 (KJS::JSValue::getConstructData): 13338 13339 2008-04-10 Oliver Hunt <oliver (a] apple.com> 13340 13341 Reviewed by Geoff. 13342 13343 Bug 18420: SquirrelFish: need to throw Reference and Type errors 13344 when attempting invalid operations on JSValues 13345 13346 Add validation and exception checks to SquirrelFish so that the 13347 correct exceptions are thrown for undefined variables, type errors 13348 and toObject failure. Also handle exceptions thrown by native 13349 function calls. 13350 13351 * JavaScriptCore.xcodeproj/project.pbxproj: 13352 * VM/ExceptionHelpers.cpp: Added. 13353 (KJS::substitute): 13354 (KJS::createError): 13355 (KJS::createUndefinedVariableError): 13356 * VM/ExceptionHelpers.h: Added. 13357 Helper functions 13358 * VM/Machine.cpp: 13359 (KJS::resolve): 13360 Modified to signal failure 13361 (KJS::isNotObject): 13362 Wrapper for JSValue::isObject and exception creation (these need 13363 to be merged, lest GCC go off the deep end) 13364 (KJS::Machine::privateExecute): 13365 Adding the many exception and validity checks. 13366 13367 * kjs/JSNotAnObject.cpp: Added. 13368 Stub object used to reduce the need for multiple exception checks 13369 when toObject fails. 13370 (KJS::JSNotAnObject::toPrimitive): 13371 (KJS::JSNotAnObject::getPrimitiveNumber): 13372 (KJS::JSNotAnObject::toBoolean): 13373 (KJS::JSNotAnObject::toNumber): 13374 (KJS::JSNotAnObject::toString): 13375 (KJS::JSNotAnObject::toObject): 13376 (KJS::JSNotAnObject::mark): 13377 (KJS::JSNotAnObject::getOwnPropertySlot): 13378 (KJS::JSNotAnObject::put): 13379 (KJS::JSNotAnObject::deleteProperty): 13380 (KJS::JSNotAnObject::defaultValue): 13381 (KJS::JSNotAnObject::construct): 13382 (KJS::JSNotAnObject::callAsFunction): 13383 (KJS::JSNotAnObject::getPropertyNames): 13384 * kjs/JSNotAnObject.h: Added. 13385 (KJS::JSNotAnObject::JSNotAnObject): 13386 * kjs/JSImmediate.cpp: 13387 (KJS::JSImmediate::toObject): 13388 modified to create an JSNotAnObject rather than throwing an exception 13389 directly. 13390 13391 2008-04-10 Geoffrey Garen <ggaren (a] apple.com> 13392 13393 Reviewed by Oliver Hunt. 13394 13395 Pass a function body node its function's scope chain, rather than the 13396 current execution context's scope chain, when compiling it. 13397 13398 This doesn't matter yet, but it will once we start using the scope 13399 chain during compilation. 13400 13401 sunspider --squirrelfish notes a tiny speedup. 13402 13403 * VM/Machine.cpp: 13404 (KJS::Machine::privateExecute): 13405 13406 2008-04-10 Geoffrey Garen <ggaren (a] apple.com> 13407 13408 Reviewed by Oliver Hunt. 13409 13410 Fix two bugs when throwing exceptions from re-entrant JS calls: 13411 13412 (1) Don't shrink the register file to 0, since our caller may still 13413 be using it. 13414 13415 (2) In case of exception, return jsNull() instead of 0 because, 13416 surprisingly, some JavaScriptCore clients rely on a function's return 13417 value being safe to operate on even if the function threw an exception. 13418 13419 Also: 13420 13421 - Changed FunctionImp::callAsFunction to honor the new semantics of 13422 exceptions not returning 0. 13423 13424 - Renamed "handlerPC" to "handlerVPC" to match other uses of "VPC". 13425 13426 - Renamed "exceptionData" to "exceptionValue", because "data" seemed to 13427 imply something more than just a JSValue. 13428 13429 - Merged prepareException into throwException, since throwException was 13430 its only caller, and it seemed weird that throwException didn't take 13431 an exception as an argument. 13432 13433 sunspider --squirrelfish does not seem to complain on my machine, but it 13434 complains a little (.6%) on Oliver's. 13435 13436 2008-04-10 Geoffrey Garen <ggaren (a] apple.com> 13437 13438 Reviewed by Maciej Stachowiak. 13439 13440 Fixed op_construct for CallTypeNative to reacquire "r" before setting 13441 its return value, since registerBase can theoretically change during the 13442 execution of arbitrary code. (Not sure if any native constructors 13443 actually make this possible.) 13444 13445 sunspider --squirrelfish does not seem to complain. 13446 13447 * VM/Machine.cpp: 13448 (KJS::Machine::privateExecute): 13449 13450 2008-04-10 Geoffrey Garen <ggaren (a] apple.com> 13451 13452 Reviewed by Oliver Hunt and Sam Weinig. 13453 13454 Re-entrant execution of function code (global code -> built-in function 13455 -> JS function): 13456 13457 Miraculously, sunspider --squirrelfish does not seem to complain. 13458 13459 A re-entrant function call is the same as a normal function call with 13460 one exception: the re-entrant call leaves everything except for 13461 CallerCodeBlock in the call frame header uninitialized, since the call 13462 doesn't need to return to JS code. (It sets CallerCodeBlock to 0, to 13463 indicate that the call shouldn't return to JS code.) 13464 13465 Also fixed a few issues along the way: 13466 13467 - Fixed two bugs in the read-write List implementation that caused 13468 m_size and m_buffer to go stale. 13469 13470 - Changed native call code to update "r" *before* setting the return 13471 value, since the call may in turn call JS code, which changes the value 13472 of "r". 13473 13474 - Migrated initialization of "r" outside of Machine::privateExecute, 13475 because global code and function code initialize "r" differently. 13476 13477 - Migrated a codegen warning from Machine::privateExecute to the wiki. 13478 13479 - Removed unnecessary "r" parameter from slideRegisterWindowForCall 13480 13481 * VM/Machine.cpp: 13482 (KJS::slideRegisterWindowForCall): 13483 (KJS::scopeChainForCall): 13484 (KJS::Machine::execute): 13485 (KJS::Machine::privateExecute): 13486 * VM/Machine.h: 13487 * kjs/function.cpp: 13488 (KJS::FunctionImp::callAsFunction): 13489 * kjs/list.cpp: 13490 (KJS::List::getSlice): 13491 * kjs/list.h: 13492 (KJS::List::clear): 13493 13494 2008-04-10 Maciej Stachowiak <mjs (a] apple.com> 13495 13496 Reviewed by Oliver. 13497 13498 - fix problem with code generation for return with no argument 13499 13500 3d-cube now runs 13501 13502 * kjs/nodes.cpp: 13503 (KJS::ReturnNode::emitCode): 13504 13505 2008-04-10 Maciej Stachowiak <mjs (a] apple.com> 13506 13507 Reviewed by Oliver. 13508 13509 - Implement support for JS constructors 13510 13511 access-binary-trees and access-nbody now run. 13512 13513 Inexplicably a 1% speedup. 13514 13515 * VM/Machine.cpp: 13516 (KJS::initializeCallFrame): 13517 (KJS::Machine::privateExecute): 13518 * VM/Machine.h: 13519 (KJS::Machine::): 13520 13521 2008-04-10 Maciej Stachowiak <mjs (a] apple.com> 13522 13523 Reviewed by Oliver. 13524 13525 - More code cleanup in preparation for JS constructors 13526 13527 Factor the remaining interesting parts of JS function calls into 13528 slideRegisterWindowForCall and scopeChainForCall. 13529 13530 * VM/Machine.cpp: 13531 (KJS::slideRegisterWindowForCall): 13532 (KJS::scopeChainForCall): 13533 (KJS::Machine::privateExecute): 13534 13535 2008-04-10 Maciej Stachowiak <mjs (a] apple.com> 13536 13537 Reviewed by Geoff. 13538 13539 - Code cleanup in preparation for JS constructors 13540 13541 - Renamed returnInfo to callFrame. 13542 - Made an enum which defines what goes where in the call frame. 13543 - Factored out initializeCallFrame function from op_call 13544 13545 * VM/CodeGenerator.cpp: 13546 (KJS::CodeGenerator::emitCall): 13547 (KJS::CodeGenerator::emitConstruct): 13548 * VM/Machine.cpp: 13549 (KJS::Machine::dumpRegisters): 13550 (KJS::initializeCallFrame): 13551 (KJS::Machine::unwindCallFrame): 13552 (KJS::Machine::execute): 13553 (KJS::Machine::privateExecute): 13554 * VM/Machine.h: 13555 (KJS::Machine::): 13556 13557 2008-04-10 Geoffrey Garen <ggaren (a] apple.com> 13558 13559 Reviewed by Oliver Hunt. 13560 13561 Fixed two bugs in register allocation for function calls: 13562 13563 (1) op_call used to allocate codeBlock->numVars too many registers for 13564 each call frame, due to duplicated math. Fixing this revealed... 13565 13566 (2) By unconditionally calling resize(), op_call used to truncate the 13567 register file when calling a function whose registers fit wholly within 13568 the register file already allocated by its caller. 13569 13570 sunspider --squirrelfish reports no regression. 13571 13572 I also threw in a little extra formatting to dumpCallFrame, because it 13573 helped me debug these issues. 13574 13575 * VM/Machine.cpp: 13576 (KJS::Machine::dumpRegisters): 13577 (KJS::Machine::execute): 13578 (KJS::Machine::privateExecute): 13579 * VM/RegisterFile.h: 13580 (KJS::RegisterFile::shrink): 13581 (KJS::RegisterFile::grow): 13582 * VM/RegisterFileStack.cpp: 13583 (KJS::RegisterFileStack::popRegisterFile): 13584 13585 2008-04-09 Geoffrey Garen <ggaren (a] apple.com> 13586 13587 Reviewed by Oliver Hunt. 13588 13589 Next step toward re-entrant execution of function code (global code -> 13590 built-in function -> JS function): 13591 13592 Made op_ret return from Machine::privateExecute if its calling codeBlock 13593 is NULL. 13594 13595 I'm checking this in by itself to demonstrate that a more clever 13596 mechanism is not necessary for performance. 13597 13598 sunspider --squirrelfish reports no regression. 13599 13600 * ChangeLog: 13601 * VM/Machine.cpp: 13602 (KJS::Machine::execute): 13603 (KJS::Machine::privateExecute): 13604 13605 2008-04-09 Geoffrey Garen <ggaren (a] apple.com> 13606 13607 Reviewed by Maciej Stachowiak. 13608 13609 Next step toward re-entrant execution of function code (global code -> 13610 built-in function -> JS function): 13611 13612 Made Machine::execute return a value. 13613 13614 Sketched out some code for Machine::execute for functions -- still 13615 doesn't work yet, though. 13616 13617 sunspider --squirrelfish reports no regression. 13618 13619 * VM/Machine.cpp: 13620 (KJS::Machine::execute): 13621 (KJS::Machine::privateExecute): 13622 * VM/Machine.h: 13623 * kjs/interpreter.cpp: 13624 (KJS::Interpreter::evaluate): 13625 * kjs/testkjs.cpp: 13626 (runWithScripts): 13627 13628 2008-04-09 Geoffrey Garen <ggaren (a] apple.com> 13629 13630 Reviewed by Sam Weinig. 13631 13632 First step toward re-entrant execution of function code (global code -> 13633 built-in function -> JS function): 13634 13635 Tiny bit of refactoring in the Machine class. 13636 13637 sunspider --squirrelfish reports no regression. 13638 13639 * VM/Machine.cpp: 13640 (KJS::Machine::dumpRegisters): 13641 (KJS::Machine::unwindCallFrame): 13642 (KJS::Machine::execute): 13643 (KJS::Machine::privateExecute): 13644 * VM/Machine.h: 13645 (KJS::Machine::isGlobalCallFrame): 13646 * kjs/interpreter.cpp: 13647 (KJS::Interpreter::evaluate): 13648 13649 2008-04-08 Geoffrey Garen <ggaren (a] apple.com> 13650 13651 Reviewed by Oliver Hunt. 13652 13653 Support for re-entrant execution of global code (global code -> built-in 13654 function -> global code). 13655 13656 Keep a stack of register files instead of just one. Globals propogate 13657 between register files as the register files enter and exit the stack. 13658 13659 An activation still uses its own register file's base as its 13660 registerBase, but the global object uses the register file *stack*'s 13661 registerBase, which updates dynamically to match the register file at 13662 the top of the stack. 13663 13664 sunspider --squirrelfish reports no regression. 13665 13666 2008-04-08 Maciej Stachowiak <mjs (a] apple.com> 13667 13668 Reviewed by Geoff. 13669 13670 - initial preparatory work for JS constructors 13671 13672 1) Allocate registers for the returnInfo block and "this" value when generating code for 13673 op_construct. These are not used yet, but the JS branch of op_construct will use them. 13674 13675 2) Adjust argc and argv appropriately for native constructor calls. 13676 13677 3) Assign return value in a more straightforward way in op_ret since this is actually 13678 a bit faster (and makes up for the allocation of extra registers above). 13679 13680 * VM/CodeGenerator.cpp: 13681 (KJS::CodeGenerator::emitConstruct): 13682 * VM/Machine.cpp: 13683 (KJS::Machine::privateExecute): 13684 13685 2008-04-07 Geoffrey Garen <ggaren (a] apple.com> 13686 13687 Reviewed by Maciej Stachowiak. 13688 13689 Fixed crashing SunSpider tests. 13690 13691 Let's just pretend this never happened, bokay? 13692 13693 * VM/CodeGenerator.cpp: 13694 (KJS::CodeGenerator::CodeGenerator): 13695 * VM/CodeGenerator.h: 13696 * VM/RegisterFile.cpp: 13697 (KJS::RegisterFile::addGlobals): 13698 13699 2008-04-07 Geoffrey Garen <ggaren (a] apple.com> 13700 13701 Reviewed by Oliver Hunt. 13702 13703 Restored dumping of generated code as a command-line switch: 13704 run-testkjs -d will do it. 13705 13706 2008-04-07 Geoffrey Garen <ggaren (a] apple.com> 13707 13708 Reviewed by Oliver Hunt. 13709 13710 Next step toward supporting re-entrant evaluation: Moved register file 13711 maintenance code into a proper "RegisterFile" class. 13712 13713 There's a subtle change to the register file's internal layout: for 13714 global code / the global object, registerOffset is always 0 now. In 13715 other words, all register counting starts at 0, not 0 + (number of 13716 global variables). The helps simplify accounting when the number of 13717 global variables changes. 13718 13719 2008-04-07 Oliver Hunt <oliver (a] apple.com> 13720 13721 Reviewed by Geoff. 13722 13723 Bug 18338: Support exceptions in SquirrelFish <http://bugs.webkit.org/show_bug.cgi?id=18338> 13724 13725 Initial support for exceptions in SquirrelFish, only supports finalisers in the 13726 simple cases (eg. exceptions and non-goto/return across finaliser boundaries). 13727 This doesn't add the required exception checks to existing code, it merely adds 13728 support for throw, catch, and the required stack unwinding. 13729 13730 * VM/CodeBlock.cpp: 13731 (KJS::CodeBlock::dump): 13732 (KJS::CodeBlock::getHandlerForVPC): 13733 * VM/CodeBlock.h: 13734 * VM/CodeGenerator.cpp: 13735 (KJS::CodeGenerator::emitCatch): 13736 (KJS::CodeGenerator::emitThrow): 13737 * VM/CodeGenerator.h: 13738 * VM/JSPropertyNameIterator.cpp: 13739 (KJS::JSPropertyNameIterator::create): 13740 * VM/Machine.cpp: 13741 (KJS::prepareException): 13742 (KJS::Machine::unwindCallFrame): 13743 (KJS::Machine::throwException): 13744 (KJS::Machine::privateExecute): 13745 * VM/Machine.h: 13746 * VM/Opcode.h: 13747 * kjs/nodes.cpp: 13748 (KJS::ThrowNode::emitCode): 13749 (KJS::TryNode::emitCode): 13750 * kjs/nodes.h: 13751 * kjs/scope_chain.cpp: 13752 (KJS::ScopeChain::depth): 13753 * kjs/scope_chain.h: 13754 13755 2008-04-06 Geoffrey Garen <ggaren (a] apple.com> 13756 13757 Reviewed by Oliver Hunt. 13758 13759 First step toward supporting re-entrant evaluation: Switch register 13760 clients from using "registers", a pointer to a register vector, to 13761 "registerBase", an indirect pointer to the logical first entry in the 13762 register file. (The logical first entry is the first entry that is not 13763 a global variable). 13764 13765 With a vector, offsets into the register file remain good when the 13766 underlying buffer reallocates, but they go bad when the logical 13767 first entry moves. (The logical first entry moves when new global 13768 variables get added to the beginning of the register file.) With an 13769 indirect pointer to the logical first entry, offsets will remain good 13770 regardless. 13771 13772 1.4% speedup on sunspider --squirrelfish. I suspect this is due to 13773 reduced allocation when creating closures, and reduced indirection 13774 through the register vector. 13775 13776 * wtf/Vector.h: Added an accessor for an indirect pointer to the vector's 13777 buffer, which we currently use (incorrectly) for registerBase. This is 13778 temporary scaffolding to allow us to change client code without 13779 changing behavior. 13780 13781 2008-04-06 Sam Weinig <sam (a] webkit.org> 13782 13783 Reviewed by Oliver Hunt. 13784 13785 Implement codegen for ReadModifyDotNode. 13786 13787 * kjs/nodes.cpp: 13788 (KJS::ReadModifyDotNode::emitCode): 13789 * kjs/nodes.h: 13790 13791 2008-04-06 Sam Weinig <sam (a] webkit.org> 13792 13793 Reviewed by Oliver Hunt. 13794 13795 Fix codegen for PostIncDotNode and implement codegen for PostIncBracketNode, 13796 PostDecBracketNode and PostDecDotNode. 13797 13798 * kjs/nodes.cpp: 13799 (KJS::PostIncBracketNode::emitCode): 13800 (KJS::PostDecBracketNode::emitCode): 13801 (KJS::PostIncDotNode::emitCode): 13802 (KJS::PostDecDotNode::emitCode): 13803 * kjs/nodes.h: 13804 13805 2008-04-06 Sam Weinig <sam (a] webkit.org> 13806 13807 Reviewed by Geoffrey Garen. 13808 13809 Implement codegen for PreDecResolveNode, PreIncBracketNode, PreDecBracketNode, 13810 PreIncDotNode and PreDecDotNode. This required adding one new op code, op_pre_dec. 13811 13812 * VM/CodeBlock.cpp: 13813 (KJS::CodeBlock::dump): 13814 * VM/CodeGenerator.cpp: 13815 (KJS::CodeGenerator::emitPreDec): 13816 * VM/CodeGenerator.h: 13817 * VM/Machine.cpp: 13818 (KJS::Machine::privateExecute): 13819 * VM/Opcode.h: 13820 * kjs/nodes.cpp: 13821 (KJS::PreDecResolveNode::emitCode): 13822 (KJS::PreIncBracketNode::emitCode): 13823 (KJS::PreDecBracketNode::emitCode): 13824 (KJS::PreIncDotNode::emitCode): 13825 (KJS::PreDecDotNode::emitCode): 13826 * kjs/nodes.h: 13827 13828 2008-04-06 Geoffrey Garen <ggaren (a] apple.com> 13829 13830 Reviewed by Sam Weinig. 13831 13832 Improved register dumping, plus a liberal smattering of "const". Here's 13833 what the new format looks like: 13834 13835 (gdb) call (void)dumpCallFrame(codeBlock, scopeChain, registers->begin(), r) 13836 4 instructions; 48 bytes at 0x509210; 3 locals (2 parameters); 1 temporaries 13837 13838 [ 0] load lr1, undefined(@k0) 13839 [ 3] load lr1, 2(@k1) 13840 [ 6] add tr0, lr2, lr1 13841 [ 10] ret tr0 13842 13843 Constants: 13844 k0 = undefined 13845 k1 = 2 13846 13847 Register frame: 13848 13849 ---------------------------------------- 13850 use | address | value 13851 ---------------------------------------- 13852 [return info] | 0x80ac08 | 0x5081c0 13853 [return info] | 0x80ac0c | 0x508e90 13854 [return info] | 0x80ac10 | 0x504acc 13855 [return info] | 0x80ac14 | 0x2 13856 [return info] | 0x80ac18 | 0x0 13857 [return info] | 0x80ac1c | 0x7 13858 [return info] | 0x80ac20 | 0x0 13859 ---------------------------------------- 13860 [param] | 0x80ac24 | 0x1 13861 [param] | 0x80ac28 | 0x7 13862 [var] | 0x80ac2c | 0xb 13863 [temp] | 0x80ac30 | 0xf 13864 13865 2008-04-06 Geoffrey Garen <ggaren (a] apple.com> 13866 13867 Reviewed by Sam Weinig. 13868 13869 Support for evaluating multiple scripts in the same global environment. 13870 (Still don't support re-entrant evaluation yet.) 13871 13872 The main changes here are: 13873 13874 (1) Obey the ECMA 10.1.3 rules regarding how to resolve collisions when 13875 a given symbol is declared more than once. (This patch fixes the same 13876 issue for function code, too.) 13877 13878 (2) In the case of var and/or function collisions, reuse the existing 13879 storage slot. For global code, this is required for previously 13880 generated instructions to continue to work. For function code, it's 13881 more of a "nice to have": it makes register layout in the case of 13882 collisions easier to understand, and has the added benefit of saving 13883 memory. 13884 13885 (3) Allocate slots in the CodeGenerator's m_locals vector in parallel 13886 to register indexes in the symbol table. This ensures that, given an 13887 index in the symbol table, we can find the corresponding RegisterID 13888 without hashing, which speeds up codegen. 13889 13890 I moved responsibility for emitting var and function initialization 13891 instructions into the CodeGenerator, because bookkeeping in cases where 13892 var, function, and/or parameter names collide requires a lot of 13893 internal knowledge about the CodeGenerator. 13894 13895 * VM/CodeGenerator.cpp: 13896 (KJS::CodeGenerator::addVar): Removed responsibility for checking whether 13897 a var declaration overwrites "arguments", because the check is 13898 inappropriate for global code, which may not have a pre-existing 13899 "arguments" symbol in scope. Also changed this function to return a 13900 boolean indicating whether addVar actually created a new RegisterID, 13901 or just reused an old one. 13902 13903 (KJS::CodeGenerator::CodeGenerator): Split out the constructors for 13904 function code and global code, since they're quite different now. 13905 13906 (KJS::CodeGenerator::registerForLocal): This function does its job 13907 without any hashing now. 13908 13909 * VM/Machine.cpp: Move old globals and update "r" before executing a 13910 new script. That way, old globals stay at a constant offset from "r", 13911 and previously optimized code still works. 13912 13913 * VM/RegisterID.h: Added the ability to allocate a RegisterID before 13914 initializing its index field. We use this for parameters now. 13915 13916 * kjs/JSVariableObject.h: 13917 (KJS::JSVariableObject::symbolTableGet): Changed the ungettable getter 13918 ASSERT to account for the fact that symbol indexes are all negative. 13919 13920 2008-04-05 Sam Weinig <sam (a] webkit.org> 13921 13922 Reviewed by Geoffrey Garen. 13923 13924 Implement codegen for InNode. 13925 13926 * VM/CodeBlock.cpp: 13927 (KJS::CodeBlock::dump): 13928 * VM/CodeGenerator.cpp: 13929 (KJS::CodeGenerator::emitIn): 13930 * VM/CodeGenerator.h: 13931 * VM/Machine.cpp: 13932 (KJS::Machine::privateExecute): 13933 * VM/Opcode.h: 13934 * kjs/nodes.cpp: 13935 (KJS::InNode::emitCode): 13936 * kjs/nodes.h: 13937 13938 2008-04-05 Sam Weinig <sam (a] webkit.org> 13939 13940 Reviewed by Oliver Hunt. 13941 13942 - Implement codegen for DeleteResolveNode, DeleteBracketNode, DeleteDotNode and DeleteValueNode. 13943 13944 * VM/CodeBlock.cpp: 13945 (KJS::CodeBlock::dump): 13946 * VM/CodeGenerator.cpp: 13947 (KJS::CodeGenerator::emitGetPropId): 13948 (KJS::CodeGenerator::emitPutPropId): 13949 (KJS::CodeGenerator::emitDeletePropId): 13950 (KJS::CodeGenerator::emitDeletePropVal): 13951 (KJS::CodeGenerator::emitPutPropIndex): 13952 * VM/CodeGenerator.h: 13953 * VM/Machine.cpp: 13954 (KJS::Machine::privateExecute): 13955 * VM/Opcode.h: 13956 * kjs/nodes.cpp: 13957 (KJS::DeleteResolveNode::emitCode): 13958 (KJS::DeleteBracketNode::emitCode): 13959 (KJS::DeleteDotNode::emitCode): 13960 (KJS::DeleteValueNode::emitCode): 13961 * kjs/nodes.h: 13962 13963 2008-04-04 Sam Weinig <sam (a] webkit.org> 13964 13965 Reviewed by Oliver Hunt. 13966 13967 - Implement codegen for Switch statements. 13968 13969 * VM/CodeGenerator.cpp: 13970 (KJS::CodeGenerator::pushJumpContext): 13971 (KJS::CodeGenerator::popJumpContext): 13972 (KJS::CodeGenerator::jumpContextForLabel): 13973 * VM/CodeGenerator.h: 13974 Rename LoopContext to JumpContext now that it used of Switch statements in addition 13975 to loops. 13976 13977 * kjs/nodes.cpp: 13978 (KJS::DoWhileNode::emitCode): 13979 (KJS::WhileNode::emitCode): 13980 (KJS::ForNode::emitCode): 13981 (KJS::ForInNode::emitCode): 13982 (KJS::ContinueNode::emitCode): 13983 (KJS::BreakNode::emitCode): 13984 (KJS::CaseBlockNode::emitCodeForBlock): 13985 (KJS::SwitchNode::emitCode): 13986 * kjs/nodes.h: 13987 (KJS::CaseClauseNode::expr): 13988 (KJS::CaseClauseNode::children): 13989 (KJS::CaseBlockNode::): 13990 13991 2008-04-03 Maciej Stachowiak <mjs (a] apple.com> 13992 13993 Reviewed by Sam. 13994 13995 - fix crash in codegen from new nodes 13996 13997 * VM/CodeGenerator.cpp: 13998 (KJS::CodeGenerator::emitConstruct): 13999 * kjs/nodes.h: 14000 14001 2008-04-03 Maciej Stachowiak <mjs (a] apple.com> 14002 14003 Reviewed by Geoff. 14004 14005 * kjs/nodes.cpp: 14006 (KJS::ReadModifyResolveNode::emitCode): 14007 (KJS::ReadModifyBracketNode::emitCode): 14008 * kjs/nodes.h: 14009 14010 2008-04-02 Maciej Stachowiak <mjs (a] apple.com> 14011 14012 Reviewed by Geoff. 14013 14014 - take a shot at marking constant pools for global and eval code 14015 14016 Geoff says this won't really work in all cases but is an ok stopgap. 14017 14018 * kjs/JSGlobalObject.cpp: 14019 (KJS::JSGlobalObject::mark): 14020 14021 2008-04-02 Maciej Stachowiak <mjs (a] apple.com> 14022 14023 Reviewed by Geoff. 14024 14025 - fix 2x perf regression in 3d-morph 14026 14027 * VM/Machine.cpp: 14028 (KJS::Machine::privateExecute): If we subbed in null for the global object, 14029 don't toObject it, since that will throw an exception (very slowly). 14030 14031 2008-04-02 Maciej Stachowiak <mjs (a] apple.com> 14032 14033 Rubber stamped by Geoff 14034 14035 - fix Release build 14036 14037 * kjs/nodes.cpp: 14038 (KJS::getNonLocalSymbol): 14039 14040 2008-04-02 Geoffrey Garen <ggaren (a] apple.com> 14041 14042 Reviewed by Oliver Hunt. 14043 14044 Removed the last vestiges of LocalStorage from JSVariableObject and 14045 JSGlobalObject. 14046 14047 * kjs/JSGlobalObject.cpp: 14048 (KJS::JSGlobalObject::saveLocalStorage): Save and restore from/to 14049 registers. Use stub isReadOnly and isDontEnum methods for now, until 14050 we really implement attributes in the symbol table. 14051 (KJS::JSGlobalObject::restoreLocalStorage): 14052 (KJS::JSGlobalObject::reset): 14053 14054 * kjs/JSVariableObject.cpp: 14055 (KJS::JSVariableObject::getPropertyNames): Use stub isDontEnum method 14056 for now, as above. 14057 (KJS::JSVariableObject::getPropertyAttributes): ditto 14058 14059 * kjs/JSVariableObject.h: Removed LocalStorage from JSVariableObjectData. 14060 Removed mark method, because subclasses implement different strategies for 14061 marking registers. 14062 (KJS::JSVariableObject::isReadOnly): Stub method 14063 (KJS::JSVariableObject::isDontEnum): ditto 14064 14065 Changed the code below to ASSERT_NOT_REACHED() and return 0, since it 14066 can no longer retrieve LocalStorage from the ExecState. (Eventually, 14067 we'll just remove this code and all its friends, but that's a task for 14068 later.) 14069 14070 * kjs/ExecState.cpp: 14071 (KJS::ExecState::ExecState): 14072 * kjs/function.cpp: 14073 (KJS::ActivationImp::markChildren): 14074 * kjs/function.h: 14075 * kjs/nodes.cpp: 14076 (KJS::getNonLocalSymbol): 14077 (KJS::ScopeNode::optimizeVariableAccess): 14078 (KJS::ProgramNode::processDeclarations): 14079 14080 2008-04-01 Geoffrey Garen <ggaren (a] apple.com> 14081 14082 Reviewed by Maciej Stachowiak. 14083 14084 Got globals? 14085 14086 To get things working, I had to roll out 14087 http://trac.webkit.org/projects/webkit/changeset/31226 for the time 14088 being. 14089 14090 * VM/CodeBlock.h: Removed obsolete function. 14091 14092 * VM/Machine.cpp: 14093 (KJS::Machine::privateExecute): For the sake of re-entrancy, we track 14094 and restore the global object's old rOffset value. (No way to test this 14095 yet, but I think it will work.) 14096 14097 2008-04-01 Maciej Stachowiak <mjs (a] apple.com> 14098 14099 Reviewed by Geoff. 14100 14101 - mark the constant pool (at least for function code blocks) 14102 14103 * VM/CodeBlock.cpp: 14104 (KJS::CodeBlock::mark): 14105 * VM/CodeBlock.h: 14106 * kjs/function.cpp: 14107 (KJS::FunctionImp::mark): 14108 * kjs/nodes.cpp: 14109 (KJS::ScopeNode::mark): 14110 * kjs/nodes.h: 14111 (KJS::FuncExprNode::body): 14112 (KJS::FuncDeclNode::body): 14113 14114 2008-04-01 Geoffrey Garen <ggaren (a] apple.com> 14115 14116 Reviewed by Beth Dakin. 14117 14118 Cleaned up a few loose ends. 14119 14120 * JavaScriptCore.exp: Export dumpRegisters, so it's visible to gdb even 14121 if we don't explicitly call it in the source text. 14122 14123 * VM/Machine.cpp: 14124 (KJS::Machine::privateExecute): No need to call dumpRegisters anymore, 14125 since that was just a hack for gdb's sake. 14126 14127 * kjs/JSActivation.h: Removed obsolete comment. 14128 14129 * VM/CodeGenerator.cpp: Added ASSERTs to verify that the localCount 14130 we're given matches the number of locals actually allocated. 14131 14132 * VM/CodeGenerator.h: 14133 (KJS::CodeGenerator::CodeGenerator): Changed "localCount" to include 14134 the parameter count, since we're using the word "local" to mean 14135 parameter, var, function, or "this". Renamed "m_nextLocal" to 14136 "m_nextVar", since "m_nextLocal" doesn't contrast well with 14137 "m_nextParameter". 14138 14139 Also moved tracking of implicit "this" parameter from here... 14140 14141 * kjs/nodes.cpp: 14142 (KJS::FunctionBodyNode::generateCode): ... to here 14143 (KJS::ProgramNode::generateCode): ... and here 14144 14145 * VM/CodeBlock.cpp: 14146 (KJS::CodeBlock::dump): Added missing "\n". 14147 14148 2008-04-01 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 14149 14150 Reviewed by Oliver. 14151 14152 Bug 18274: ResolveNode::emitCode() doesn't make a new temporary when dst 14153 is 0, leading to incorrect codegen 14154 <http://bugs.webkit.org/show_bug.cgi?id=18274> 14155 14156 * kjs/nodes.cpp: 14157 (KJS::FunctionCallBracketNode::emitCode): 14158 (KJS::FunctionCallDotNode::emitCode): 14159 14160 2008-04-01 Maciej Stachowiak <mjs (a] apple.com> 14161 14162 Reviewed by Oliver. 14163 14164 - fix bug in for..in codegen (gotta use ident, not m_ident) 14165 14166 * kjs/nodes.cpp: 14167 (KJS::ForInNode::emitCode): 14168 14169 2008-04-01 Maciej Stachowiak <mjs (a] apple.com> 14170 14171 Reviewed by Oliver. 14172 14173 - Add suport for regexp literals 14174 14175 * VM/CodeBlock.cpp: 14176 (KJS::regexpToSourceString): 14177 (KJS::regexpName): 14178 (KJS::CodeBlock::dump): 14179 * VM/CodeBlock.h: 14180 * VM/CodeGenerator.cpp: 14181 (KJS::CodeGenerator::addRegExp): 14182 (KJS::CodeGenerator::emitNewRegExp): 14183 * VM/CodeGenerator.h: 14184 * VM/Machine.cpp: 14185 (KJS::Machine::privateExecute): 14186 * VM/Opcode.h: 14187 * kjs/nodes.cpp: 14188 (KJS::RegExpNode::emitCode): 14189 * kjs/nodes.h: 14190 14191 2008-04-01 Oliver Hunt <oliver (a] apple.com> 14192 14193 Reviewed by Geoff 14194 14195 Add support for for..in nodes 14196 14197 Added two new opcodes to get_pnames and next_pname to handle iterating 14198 over the set of properties on an object. This iterator is explicitly 14199 invalidated and the property name array is released on standard exit 14200 from the loop, otherwise we rely on GC to do the clean up for us. 14201 14202 * JavaScriptCore.xcodeproj/project.pbxproj: 14203 * VM/CodeBlock.cpp: 14204 (KJS::CodeBlock::dump): 14205 * VM/CodeGenerator.cpp: 14206 (KJS::CodeGenerator::emitNextPropertyName): 14207 (KJS::CodeGenerator::emitGetPropertyNames): 14208 * VM/CodeGenerator.h: 14209 * VM/JSPropertyNameIterator.cpp: Added. 14210 (KJS::JSPropertyNameIterator::JSPropertyNameIterator): 14211 (KJS::JSPropertyNameIterator::type): 14212 (KJS::JSPropertyNameIterator::toPrimitive): 14213 (KJS::JSPropertyNameIterator::getPrimitiveNumber): 14214 (KJS::JSPropertyNameIterator::toBoolean): 14215 (KJS::JSPropertyNameIterator::toNumber): 14216 (KJS::JSPropertyNameIterator::toString): 14217 (KJS::JSPropertyNameIterator::toObject): 14218 (KJS::JSPropertyNameIterator::mark): 14219 (KJS::JSPropertyNameIterator::next): 14220 (KJS::JSPropertyNameIterator::invalidate): 14221 (KJS::JSPropertyNameIterator::~JSPropertyNameIterator): 14222 (KJS::JSPropertyNameIterator::create): 14223 * VM/JSPropertyNameIterator.h: Added. 14224 * VM/Machine.cpp: 14225 (KJS::Machine::privateExecute): 14226 * VM/Opcode.h: 14227 * VM/Register.h: 14228 (KJS::Register::): 14229 * kjs/PropertyNameArray.h: 14230 * kjs/nodes.cpp: 14231 (KJS::ForInNode::emitCode): 14232 * kjs/nodes.h: 14233 * kjs/value.h: 14234 14235 2008-04-01 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 14236 14237 Reviewed by Maciej. 14238 14239 Change CodeGenerator::emitCall() so it increments the reference count of 14240 registers passed to it, and change its callers so they don't needlessly 14241 increment the reference count of the registers they are passing. 14242 14243 * VM/CodeGenerator.cpp: 14244 (KJS::CodeGenerator::emitCall): 14245 * kjs/nodes.cpp: 14246 (KJS::FunctionCallResolveNode::emitCode): 14247 (KJS::FunctionCallDotNode::emitCode): 14248 14249 2008-04-01 Maciej Stachowiak <mjs (a] apple.com> 14250 14251 Reviewed by Oliver. 14252 14253 - generate call for PostIncDotNode 14254 14255 * kjs/nodes.cpp: 14256 (KJS::PostIncDotNode::emitCode): 14257 * kjs/nodes.h: 14258 14259 2008-04-01 Maciej Stachowiak <mjs (a] apple.com> 14260 14261 Build fix. 14262 14263 - fix build (not sure how this ever worked?) 14264 14265 * kjs/nodes.cpp: 14266 (KJS::FunctionCallBracketNode::emitCode): 14267 14268 2008-04-01 Maciej Stachowiak <mjs (a] apple.com> 14269 14270 Reviewed by Geoff. 14271 14272 - generate code for FunctionCallBracketNode 14273 14274 * kjs/nodes.cpp: 14275 (KJS::FunctionCallBracketNode::emitCode): 14276 * kjs/nodes.h: 14277 14278 2008-04-01 Maciej Stachowiak <mjs (a] apple.com> 14279 14280 Reviewed by Geoff. 14281 14282 - Fix two crashing SunSpider tests 14283 14284 * VM/Machine.cpp: 14285 (KJS::Machine::privateExecute): set up 'this' properly for native calls. 14286 * kjs/list.h: 14287 (KJS::List::List): Fix intialization of buffer and size from 14288 vector, the initialization order was wrong. 14289 14290 2008-04-01 Geoffrey Garen <ggaren (a] apple.com> 14291 14292 Build fix: marked ASSERT-only variables as UNUSED_PARAMs. 14293 14294 * VM/Machine.cpp: 14295 (KJS::Machine::privateExecute): 14296 * kjs/JSVariableObject.h: 14297 (KJS::JSVariableObject::symbolTableInitializeVariable): 14298 14299 2008-04-01 Geoffrey Garen <ggaren (a] apple.com> 14300 14301 Reviewed by Oliver Hunt. 14302 14303 Next step toward global code: Moved get, put, and initializeVariable 14304 functionality up into JSVariableObject, and changed JSActivation to 14305 rely on it. 14306 14307 * kjs/JSActivation.cpp: 14308 (KJS::JSActivation::JSActivation): 14309 (KJS::JSActivation::getOwnPropertySlot): 14310 (KJS::JSActivation::put): 14311 (KJS::JSActivation::initializeVariable): 14312 * kjs/JSVariableObject.h: 14313 (KJS::JSVariableObject::valueAt): 14314 (KJS::JSVariableObject::isReadOnly): 14315 (KJS::JSVariableObject::symbolTableGet): 14316 (KJS::JSVariableObject::symbolTablePut): 14317 (KJS::JSVariableObject::symbolTableInitializeVariable): 14318 14319 2008-04-01 Maciej Stachowiak <mjs (a] apple.com> 14320 14321 Reviewed by Sam. 14322 14323 - fix HashTable assertion on some SunSpider tests 14324 14325 Don't use -1 as the deleted value for JSValue*-keyed hashtables, 14326 since it is a valid value (it's the immediate for -1). 14327 14328 * VM/CodeGenerator.h: 14329 (KJS::CodeGenerator::JSValueHashTraits::emptyValue): 14330 (KJS::CodeGenerator::JSValueHashTraits::deletedValue): 14331 * kjs/JSImmediate.h: 14332 (KJS::JSImmediate::impossibleValue): 14333 14334 2008-04-01 Sam Weinig <sam (a] webkit.org> 14335 14336 Reviewed by Maciej Stachowiak. 14337 14338 Add support for calling Native constructors like new Array(). 14339 14340 * VM/CodeBlock.cpp: 14341 (KJS::CodeBlock::dump): 14342 * VM/CodeGenerator.cpp: 14343 (KJS::CodeGenerator::emitConstruct): 14344 * VM/CodeGenerator.h: 14345 * VM/Machine.cpp: 14346 (KJS::Machine::privateExecute): 14347 * VM/Opcode.h: 14348 * kjs/nodes.cpp: 14349 (KJS::NewExprNode::emitCode): 14350 * kjs/nodes.h: 14351 14352 2008-04-01 Maciej Stachowiak <mjs (a] apple.com> 14353 14354 Reviewed by Sam. 14355 14356 - add some missing toOpbject calls to avoid crashing when calling methods on primitives 14357 14358 * VM/Machine.cpp: 14359 (KJS::Machine::privateExecute): 14360 14361 2008-04-01 Geoffrey Garen <ggaren (a] apple.com> 14362 14363 Reviewed by Oliver Hunt. 14364 14365 Changed Machine::dumpRegisters to take a pointer instead of a reference, 14366 so gdb understands how to call it. 14367 14368 * VM/Machine.cpp: 14369 (KJS::Machine::dumpRegisters): 14370 (KJS::Machine::privateExecute): 14371 * VM/Machine.h: 14372 14373 2008-03-31 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 14374 14375 Reviewed by Maciej. 14376 14377 Fix CodeGenerator::addConstant() so it uses the functionExpressions 14378 counter for function expressions, not the functions counter. 14379 14380 * VM/CodeGenerator.cpp: 14381 (KJS::CodeGenerator::addConstant): 14382 14383 2008-03-31 Sam Weinig <sam (a] webkit.org> 14384 14385 Reviewed by Geoffrey Garen. 14386 14387 Add emitCode support for TypeOfResolveNode and TypeOfValueNode. 14388 Added new opcode op_type_of to handle them. 14389 14390 * VM/CodeBlock.cpp: 14391 (KJS::CodeBlock::dump): 14392 * VM/CodeGenerator.cpp: 14393 (KJS::CodeGenerator::emitNot): 14394 (KJS::CodeGenerator::emitInstanceOf): 14395 (KJS::CodeGenerator::emitTypeOf): 14396 * VM/CodeGenerator.h: 14397 * VM/Machine.cpp: 14398 (KJS::jsTypeStringForValue): 14399 (KJS::Machine::privateExecute): 14400 * VM/Opcode.h: 14401 * kjs/nodes.cpp: 14402 (KJS::TypeOfResolveNode::emitCode): 14403 (KJS::TypeOfValueNode::emitCode): 14404 * kjs/nodes.h: 14405 14406 2008-03-31 Sam Weinig <sam (a] webkit.org> 14407 14408 Reviewed by Oliver Hunt. 14409 14410 Fix non-computed goto version of isOpcode. op_end is a valid opcode. 14411 14412 * VM/Machine.cpp: 14413 (KJS::Machine::isOpcode): 14414 14415 2008-03-31 Geoffrey Garen <ggaren (a] apple.com> 14416 14417 Reviewed by Maciej Stachowiak. 14418 14419 Added op_post_dec. 14420 14421 2008-03-31 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 14422 14423 Reviewed by Geoffrey Garen. 14424 14425 Add support for FunctionCallDotNode. 14426 14427 * kjs/nodes.cpp: 14428 (KJS::FunctionCallDotNode::emitCode): 14429 * kjs/nodes.h: 14430 14431 2008-03-31 Geoffrey Garen <ggaren (a] apple.com> 14432 14433 Reviewed by Beth Dakin. 14434 14435 Next step toward global code: Removed more obsolete API, moved 14436 saveLocalStorage and restoreLocalStorage to JSGlobalObject subclass, 14437 since it's only intended for use there. 14438 14439 * ChangeLog: 14440 * JavaScriptCore.exp: 14441 * kjs/Activation.h: 14442 * kjs/JSGlobalObject.cpp: 14443 (KJS::JSGlobalObject::saveLocalStorage): 14444 (KJS::JSGlobalObject::restoreLocalStorage): 14445 * kjs/JSGlobalObject.h: 14446 * kjs/JSVariableObject.cpp: 14447 * kjs/JSVariableObject.h: 14448 (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData): 14449 * kjs/function.cpp: 14450 (KJS::ActivationImp::ActivationImp): 14451 14452 2008-03-31 Geoffrey Garen <ggaren (a] apple.com> 14453 14454 Reviewed by Beth Dakin. 14455 14456 Next step toward global code: subclass JSActivation + JSActivationData 14457 from JSVariableObject + JSVariableObjectData. 14458 14459 JSActivation now relies on JSVariableObject for access to registers and 14460 symbol table, and for some delete functionality, but not for anything 14461 else yet. 14462 14463 (KJS::JSActivation::mark): Cleaned up the style here a little bit. 14464 14465 2008-03-31 Geoffrey Garen <ggaren (a] apple.com> 14466 14467 Reviewed by Beth Dakin. 14468 14469 Next step toward global code: store "rOffset" in JSVariableObjectData. 14470 14471 * kjs/JSGlobalObject.h: 14472 (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): 14473 * kjs/JSVariableObject.h: 14474 (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData): 14475 14476 2008-03-31 Geoffrey Garen <ggaren (a] apple.com> 14477 14478 Reviewed by Maciej Stachowiak. 14479 14480 Next steps toward global code: 14481 14482 * Moved access to the register file into JSVariableObject. 14483 14484 * Added more ASSERTs to indicate obsolete APIs there are just hanging 14485 around to stave off build failures. 14486 14487 * kjs/JSGlobalObject.h: 14488 (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): 14489 * kjs/JSVariableObject.h: 14490 (KJS::JSVariableObject::registers): 14491 (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData): 14492 (KJS::JSVariableObject::JSVariableObject): 14493 14494 2008-03-31 Sam Weinig <sam (a] webkit.org> 14495 14496 Reviewed by Oliver. Tweaked somewhat by Maciej. 14497 14498 - implement codegen for ReadModifyResolveNode 14499 14500 * kjs/nodes.cpp: 14501 (KJS::emitReadModifyAssignment): 14502 (KJS::ReadModifyResolveNode::emitCode): 14503 * kjs/nodes.h: 14504 14505 2008-03-31 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 14506 14507 Reviewed by Geoff. 14508 14509 Fix the build -- r31492 removed activation tear-off, but r31493 used it. 14510 14511 * kjs/nodes.cpp: 14512 (KJS::FuncExprNode::makeFunction): 14513 14514 2008-03-31 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 14515 14516 Reviewed by Maciej. 14517 14518 Add support for FuncExprNode to SquirrelFish. 14519 14520 * VM/CodeBlock.cpp: 14521 (KJS::CodeBlock::dump): 14522 * VM/CodeBlock.h: 14523 * VM/CodeGenerator.cpp: 14524 (KJS::CodeGenerator::addConstant): 14525 (KJS::CodeGenerator::emitNewFunctionExpression): 14526 * VM/CodeGenerator.h: 14527 * VM/Machine.cpp: 14528 (KJS::Machine::privateExecute): 14529 * VM/Opcode.h: 14530 * kjs/nodes.cpp: 14531 (KJS::FuncExprNode::emitCode): 14532 (KJS::FuncExprNode::makeFunction): 14533 * kjs/nodes.h: 14534 14535 2008-03-31 Geoffrey Garen <ggaren (a] apple.com> 14536 14537 Reviewed by Maciej Stachowiak. 14538 14539 First step toward global code: removed some obsolete JSGlobalObject 14540 APIs, changing clients to ASSERT_NOT_REACHED. 14541 14542 Activation tear-off and scope chain pushing is obsolete because we 14543 statically detect whether an activation + scope node is required. 14544 14545 The variableObject() and activationObject() accessors are obsolete 14546 because they haven't been maintained, and they're mostly used by 14547 node evaluation code, anyway. 14548 14549 The localStorage() accessor is obsolete because everything is in 14550 registers now, and it's mostly used by node evaluation code, anyway. 14551 14552 2008-03-31 Maciej Stachowiak <mjs (a] apple.com> 14553 14554 Reviewed by Darin. 14555 14556 - implement codegen for bracket accessor and bracket assign 14557 14558 * VM/CodeBlock.cpp: 14559 (KJS::CodeBlock::dump): 14560 * VM/CodeGenerator.cpp: 14561 (KJS::CodeGenerator::emitGetPropVal): 14562 (KJS::CodeGenerator::emitPutPropVal): 14563 * VM/CodeGenerator.h: 14564 * VM/Machine.cpp: 14565 (KJS::Machine::privateExecute): 14566 * VM/Opcode.h: 14567 * kjs/nodes.cpp: 14568 (KJS::BracketAccessorNode::emitCode): 14569 (KJS::AssignBracketNode::emitCode): 14570 * kjs/nodes.h: 14571 14572 2008-03-31 Geoffrey Garen <ggaren (a] apple.com> 14573 14574 Not reviewed. 14575 14576 Removed FIXME that I just fixed. 14577 14578 Added ASSERT to cover an error previously only covered by a FIXME. 14579 14580 * kjs/JSActivation.cpp: 14581 (KJS::JSActivation::getOwnPropertySlot): 14582 14583 2008-03-31 Geoffrey Garen <ggaren (a] apple.com> 14584 14585 Not reviewed. 14586 14587 Fixed indentation inside op_call. (I had left this code badly indented 14588 to make the behavior-changing diff clearer.) 14589 14590 * VM/Machine.cpp: 14591 (KJS::Machine::privateExecute): 14592 14593 2008-03-31 Geoffrey Garen <ggaren (a] apple.com> 14594 14595 Reviewed by Sam Weinig. 14596 14597 Fixed up logging of jump instructions to follow the following style: 14598 14599 jump offset(->absoluteTarget) 14600 14601 * VM/CodeBlock.cpp: 14602 (KJS::CodeBlock::dump): 14603 14604 2008-03-31 Geoffrey Garen <ggaren (a] apple.com> 14605 14606 Reviewed by Sam Weinig. 14607 14608 Changed the SymbolTable API to use int instead of size_t. It has been 14609 using int internally for a while now (since squirrelfish symbols can 14610 have negative indices). 14611 14612 2008-03-31 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 14613 14614 Reviewed by Maciej. 14615 14616 Add support for FunctionCallValueNode. 14617 14618 * kjs/nodes.cpp: 14619 (KJS::FunctionCallValueNode::emitCode): 14620 * kjs/nodes.h: 14621 14622 2008-03-31 Maciej Stachowiak <mjs (a] apple.com> 14623 14624 Reviewed by Oliver. 14625 14626 1) Implemented array literals 14627 14628 2) Renamed op_object_get and op_object_put to op_get_prop_id and 14629 op_put_prop_id in preparation for new variants. 14630 14631 * VM/CodeBlock.cpp: 14632 (KJS::CodeBlock::dump): 14633 * VM/CodeGenerator.cpp: 14634 (KJS::CodeGenerator::emitNewArray): 14635 (KJS::CodeGenerator::emitGetPropId): 14636 (KJS::CodeGenerator::emitPutPropId): 14637 (KJS::CodeGenerator::emitPutPropIndex): 14638 * VM/CodeGenerator.h: 14639 (KJS::CodeGenerator::CodeGenerator): 14640 (KJS::CodeGenerator::propertyNames): 14641 * VM/Machine.cpp: 14642 (KJS::Machine::privateExecute): 14643 * VM/Opcode.h: 14644 * kjs/nodes.cpp: 14645 (KJS::ArrayNode::emitCode): 14646 (KJS::PropertyListNode::emitCode): 14647 (KJS::DotAccessorNode::emitCode): 14648 (KJS::PostIncResolveNode::emitCode): 14649 (KJS::PreIncResolveNode::emitCode): 14650 (KJS::AssignResolveNode::emitCode): 14651 (KJS::AssignDotNode::emitCode): 14652 * kjs/nodes.h: 14653 14654 2008-03-30 Geoffrey Garen <ggaren (a] apple.com> 14655 14656 Reviewed by Oliver Hunt. 14657 14658 Implemented native function calls. (Re-entering from native code back 14659 to JS doesn't work yet, though.) 14660 14661 0.2% speedup overall, due to some inlining tweaks. 3.6% regression on 14662 function-empty.js, since we're making a new virtual call and taking a 14663 new branch inside every op_call. 14664 14665 I adjusted the JavaScriptCore calling convention to minimize overhead, 14666 like so: 14667 14668 The machine calls a single virtual function, "getCallData", to get all 14669 the data it needs for a function call. Native code still uses the old 14670 "isObject()" check followed by an "implementsCall()" check, which 14671 aliases to "getCallData". (We can optimize native code to use getCallData 14672 at our leisure.) 14673 14674 To supply a list of arguments, the machine calls a new List constructor 14675 that just takes a pointer and a length, without copying. Native code 14676 still appends to the list one argument at a time. (We can optimize 14677 native code to use the new List constructor at our leisure.) 14678 14679 * VM/Machine.cpp: 14680 (KJS::Machine::privateExecute): Changed resize() call to grow() call, 14681 to encourage the compiler to inline the Vector code. 14682 14683 * kjs/CallData.h: Added. 14684 (KJS::): CallData is a union because eventually native calls will stuff 14685 a function pointer into it, to eliminate the callAsFunction virtual call. 14686 14687 * kjs/function.cpp: 14688 (KJS::FunctionImp::callAsFunction): Changed this to an ASSERT since 14689 it's not implemented yet. 14690 14691 * kjs/list.h: Made the List class two-faced, to support the old way and 14692 the new way during this transition phase: lists can be made read-only 14693 with just a pointer and a legnth, or you can append to them one item 14694 at a time. 14695 14696 * kjs/value.h: 14697 (KJS::jsUndefined): Marked this function ALWAYS_INLINE for the benefit 14698 of a certain compiler that doesn't know what's best for it. 14699 14700 2008-03-30 Maciej Stachowiak <mjs (a] apple.com> 14701 14702 Reviewed by Oliver. 14703 14704 Dump code that codegen can't handle yet, so it's easier to prioritize missing nodes. 14705 14706 * kjs/nodes.h: 14707 (KJS::Node::emitCode): 14708 14709 2008-03-30 Maciej Stachowiak <mjs (a] apple.com> 14710 14711 Reviewed by Oliver. 14712 14713 Improve dumping of bytecode and fix coding style accordingly. 14714 14715 Registers are printed as lr1 for locals, tr1 for temp registers. Identifiers print as 14716 foobar(@id0) and constants print as "foo"(@k1) or 312.4(@k2) or the like. Constant and 14717 identifier tables are dumped for reference. 14718 14719 * VM/CodeBlock.cpp: 14720 (KJS::escapeQuotes): 14721 (KJS::valueToSourceString): 14722 (KJS::registerName): 14723 (KJS::constantName): 14724 (KJS::idName): 14725 (KJS::printUnaryOp): 14726 (KJS::printBinaryOp): 14727 (KJS::CodeBlock::dump): 14728 * VM/Machine.cpp: 14729 (KJS::resolve): 14730 (KJS::resolveBase): 14731 (KJS::Machine::privateExecute): 14732 14733 2008-03-30 Maciej Stachowiak <mjs (a] apple.com> 14734 14735 Reviewed by Oliver. 14736 14737 Implement StringNode and VoidNode (both pretty trivial). 14738 14739 * kjs/nodes.cpp: 14740 (KJS::StringNode::emitCode): 14741 (KJS::VoidNode::emitCode): 14742 * kjs/nodes.h: 14743 14744 2008-03-30 Maciej Stachowiak <mjs (a] apple.com> 14745 14746 Reviewed by Sam. 14747 14748 Implement CommaNode. 14749 14750 * kjs/nodes.cpp: 14751 (KJS::CommaNode::emitCode): 14752 * kjs/nodes.h: 14753 14754 2008-03-30 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 14755 14756 Reviewed by Maciej. 14757 14758 Adds support for dot notation and object literals. 14759 14760 * VM/CodeBlock.cpp: 14761 (KJS::CodeBlock::dump): 14762 * VM/CodeGenerator.cpp: 14763 (KJS::CodeGenerator::emitNewObject): 14764 * VM/CodeGenerator.h: 14765 * VM/Machine.cpp: 14766 (KJS::Machine::privateExecute): 14767 * VM/Opcode.h: 14768 * kjs/nodes.cpp: 14769 (KJS::ObjectLiteralNode::emitCode): 14770 (KJS::PropertyListNode::emitCode): 14771 (KJS::DotAccessorNode::emitCode): 14772 (KJS::AssignDotNode::emitCode): 14773 * kjs/nodes.h: 14774 14775 2008-03-29 Geoffrey Garen <ggaren (a] apple.com> 14776 14777 Reviewed by Maciej Stachowiak. 14778 14779 Mark the register file. 14780 14781 It's a conservative mark for now, but once registers are typed, we can 14782 do an exact mark. 14783 14784 1.4% regression regardless of whether we actually do the marking. 14785 GCC is is worth every penny. 14786 14787 * VM/Machine.cpp: 14788 (KJS::Machine::privateExecute): Most of the changes here are just for 14789 the fact that "registers" is a pointer now. 14790 14791 * kjs/JSGlobalObject.cpp: The global object owns the register file now. 14792 14793 2008-03-28 Oliver Hunt <oliver (a] apple.com> 14794 14795 Reviewed by Maciej. 14796 14797 Bug 18204: SquirrelFish: continue/break do not correctly handle scope popping 14798 <http://bugs.webkit.org/show_bug.cgi?id=18204> 14799 14800 We now track the scope depth as part of a loop context, and add an 14801 extra instruction op_jump_scopes that is used to perform a jump across 14802 dynamic scope boundaries. 14803 14804 * VM/CodeBlock.cpp: 14805 (KJS::CodeBlock::dump): 14806 * VM/CodeGenerator.cpp: 14807 (KJS::CodeGenerator::emitJumpScopes): 14808 * VM/CodeGenerator.h: 14809 * VM/Machine.cpp: 14810 (KJS::Machine::privateExecute): 14811 * VM/Opcode.h: 14812 * kjs/nodes.cpp: 14813 (KJS::ContinueNode::emitCode): 14814 (KJS::BreakNode::emitCode): 14815 14816 2008-03-28 Sam Weinig <sam (a] webkit.org> 14817 14818 Reviewed by Geoffrey Garen. 14819 14820 Add emitCode support for ConditionalNode. 14821 14822 * kjs/nodes.cpp: 14823 (KJS::ConditionalNode::emitCode): 14824 * kjs/nodes.h: 14825 14826 2008-03-28 Geoffrey Garen <ggaren (a] apple.com> 14827 14828 Reviewed by Oliver Hunt. 14829 14830 Responding to feedback, added some comments, fixed up a few names, and 14831 clarified that "locals" always means all local variables, functions, 14832 and parameters. 14833 14834 2008-03-28 Geoffrey Garen <ggaren (a] apple.com> 14835 14836 Reviewed by Oliver Hunt. 14837 14838 Added support for "this". 14839 14840 Supply an implicit "this" value as the first argument to every function. 14841 Alias the "this" keyword to that argument. 14842 14843 1% regression overall, 2.5% regression on empty function calls. Seems 14844 like a reasonable cost for now, since we're doing more work. 14845 (Eventually, we might decide to create a version of op_call specialized 14846 for a known null "this" value.) 14847 14848 * VM/CodeBlock.cpp: 14849 (KJS::CodeBlock::dump): 14850 * VM/CodeGenerator.cpp: 14851 (KJS::CodeGenerator::emitCall): 14852 * VM/CodeGenerator.h: 14853 (KJS::CodeGenerator::CodeGenerator): 14854 * VM/Machine.cpp: 14855 (KJS::Machine::privateExecute): 14856 * kjs/CommonIdentifiers.cpp: 14857 (KJS::CommonIdentifiers::CommonIdentifiers): 14858 * kjs/CommonIdentifiers.h: 14859 * kjs/nodes.cpp: 14860 (KJS::ThisNode::emitCode): 14861 (KJS::FunctionCallResolveNode::emitCode): 14862 * kjs/nodes.h: 14863 14864 2008-03-28 Oliver Hunt <oliver (a] apple.com> 14865 14866 Reviewed by Geoff. 14867 14868 Bug 18192: Squirrelfish needs support for break and continue 14869 <http://bugs.webkit.org/show_bug.cgi?id=18192> 14870 14871 Added a loop context stack to the code generator to provide the 14872 correct jump labels for continue and goto. Added logic to the 14873 currently implemented loop constructs to manage entry and exit 14874 from the loop contexts. Finally, implemented codegen for break 14875 and continue (and a pass through for LabelNode) 14876 14877 * VM/CodeGenerator.cpp: 14878 (KJS::CodeGenerator::pushLoopContext): 14879 (KJS::CodeGenerator::popLoopContext): 14880 (KJS::CodeGenerator::loopContextForIdentifier): 14881 (KJS::CodeGenerator::labelForContinue): 14882 (KJS::CodeGenerator::labelForBreak): 14883 * VM/CodeGenerator.h: 14884 * kjs/nodes.cpp: 14885 (KJS::DoWhileNode::emitCode): 14886 (KJS::WhileNode::emitCode): 14887 (KJS::ForNode::emitCode): 14888 (KJS::ContinueNode::emitCode): 14889 (KJS::BreakNode::emitCode): 14890 (KJS::LabelNode::emitCode): 14891 * kjs/nodes.h: 14892 14893 2008-03-27 Sam Weinig <sam (a] webkit.org> 14894 14895 Reviewed by Geoffrey Garen. 14896 14897 Add emitCode support for UnaryPlusNode, NegateNode, BitwiseNotNode and LogicalNotNode. 14898 14899 * VM/CodeBlock.cpp: 14900 (KJS::printUnaryOp): 14901 (KJS::CodeBlock::dump): 14902 * VM/CodeGenerator.cpp: 14903 (KJS::CodeGenerator::emitToJSNumber): 14904 (KJS::CodeGenerator::emitNegate): 14905 (KJS::CodeGenerator::emitBitNot): 14906 (KJS::CodeGenerator::emitNot): 14907 * VM/CodeGenerator.h: 14908 * VM/Machine.cpp: 14909 (KJS::Machine::privateExecute): 14910 * VM/Opcode.h: 14911 * kjs/nodes.cpp: 14912 (KJS::UnaryPlusNode::emitCode): 14913 (KJS::NegateNode::emitCode): 14914 (KJS::BitwiseNotNode::emitCode): 14915 (KJS::LogicalNotNode::emitCode): 14916 * kjs/nodes.h: 14917 14918 2008-03-27 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 14919 14920 Reviewed by Maciej Stachowiak. 14921 14922 Add support for LogicalAndNode and LogicalOrNode. 14923 14924 * kjs/nodes.cpp: 14925 (KJS::LogicalAndNode::emitCode): 14926 (KJS::LogicalOrNode::emitCode): 14927 * kjs/nodes.h: 14928 14929 2008-03-27 Sam Weinig <sam (a] webkit.org> 14930 14931 Clean up code and debug output. 14932 14933 * VM/CodeBlock.cpp: 14934 (KJS::CodeBlock::dump): 14935 * VM/Machine.cpp: 14936 (KJS::Machine::privateExecute): 14937 14938 2008-03-27 Geoffrey Garen <ggaren (a] apple.com> 14939 14940 Moved an ASSERT to a more logical place. 14941 14942 * VM/Machine.cpp: 14943 (KJS::Machine::privateExecute): 14944 14945 2008-03-27 Sam Weinig <sam (a] webkit.org> 14946 14947 Reviewed by Oliver Hunt. 14948 14949 Add emitCode support for InstanceOfNode. 14950 14951 * VM/CodeBlock.cpp: 14952 (KJS::CodeBlock::dump): 14953 * VM/CodeGenerator.cpp: 14954 (KJS::CodeGenerator::emitInstanceOf): 14955 * VM/CodeGenerator.h: 14956 * VM/Machine.cpp: 14957 (KJS::Machine::privateExecute): 14958 * VM/Opcode.h: 14959 * kjs/nodes.cpp: 14960 (KJS::InstanceOfNode::emitCode): 14961 * kjs/nodes.h: 14962 14963 2008-03-27 Oliver Hunt <oliver (a] apple.com> 14964 14965 Reviewed by Maciej. 14966 14967 Bug 18142: squirrelfish needs to support dynamic scoping/with 14968 <http://bugs.webkit.org/show_bug.cgi?id=18142> 14969 14970 Add support for dynamic scoping and add code to handle 'with' 14971 statements. 14972 14973 * VM/CodeBlock.cpp: 14974 (KJS::CodeBlock::dump): 14975 * VM/CodeBlock.h: 14976 (KJS::CodeBlock::CodeBlock): 14977 * VM/CodeGenerator.cpp: 14978 (KJS::CodeGenerator::getRegister): 14979 (KJS::CodeGenerator::emitPushScope): 14980 (KJS::CodeGenerator::emitPopScope): 14981 * VM/CodeGenerator.h: 14982 (KJS::CodeGenerator::CodeGenerator): 14983 * VM/Machine.cpp: 14984 (KJS::Machine::privateExecute): 14985 * VM/Opcode.h: 14986 * kjs/nodes.cpp: 14987 (KJS::WithNode::emitCode): 14988 * kjs/nodes.h: 14989 14990 2008-03-27 Sam Weinig <sam (a] webkit.org> 14991 14992 Reviewed by Geoffrey Garen. 14993 14994 Add emitCode support for NullNode, FalseNode, TrueNode, IfNode, IfElseNode, DoWhileNode and WhileNode 14995 14996 * VM/CodeBlock.cpp: 14997 (KJS::CodeBlock::dump): Dump op_jfalse opcode. 14998 * VM/CodeGenerator.cpp: 14999 (KJS::CodeGenerator::emitJumpIfFalse): Identical to emitJumpIfTrue except it emits the op_jfalse opcode. 15000 (KJS::CodeGenerator::emitLoad): Add and emitLoad override for booleans. 15001 * VM/CodeGenerator.h: 15002 * VM/Machine.cpp: 15003 (KJS::Machine::privateExecute): Adds execution of op_jfalse. It is identical to op_jtrue, except the 15004 the condition is reversed. 15005 * VM/Opcode.h: Add op_jfalse. 15006 * kjs/nodes.cpp: 15007 (KJS::NullNode::emitCode): Added. 15008 (KJS::FalseNode::emitCode): Added. 15009 (KJS::TrueNode::emitCode): Added. 15010 (KJS::IfNode::emitCode): Added. 15011 (KJS::IfElseNode::emitCode): Added. 15012 (KJS::DoWhileNode::emitCode): Added. 15013 (KJS::WhileNode::emitCode): Added. 15014 * kjs/nodes.h: 15015 15016 2008-03-26 Geoffrey Garen <ggaren (a] apple.com> 15017 15018 Nixed an unused List. 15019 15020 The calm before my stormy war against the List class. 15021 15022 * kjs/function_object.cpp: 15023 (KJS::FunctionObjectImp::construct): 15024 15025 2008-03-26 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 15026 15027 Reviewed by Geoffrey Garen. 15028 15029 Adds support for EqualNode, NotEqualNode, StrictEqualNode, NotStrictEqualNode, 15030 LessEqNode, GreaterNode, GreaterEqNode, MultNode, DivNode, ModNode, SubNode, 15031 LeftShiftNode, RightShiftNode, UnsignedRightShiftNode, BitAndNode, BitXOrNode, 15032 and BitOrNode. 15033 15034 * VM/CodeBlock.cpp: 15035 (KJS::CodeBlock::dump): 15036 * VM/CodeGenerator.cpp: 15037 (KJS::CodeGenerator::emitEqual): 15038 (KJS::CodeGenerator::emitNotEqual): 15039 (KJS::CodeGenerator::emitStrictEqual): 15040 (KJS::CodeGenerator::emitNotStrictEqual): 15041 (KJS::CodeGenerator::emitLessEq): 15042 (KJS::CodeGenerator::emitMult): 15043 (KJS::CodeGenerator::emitDiv): 15044 (KJS::CodeGenerator::emitMod): 15045 (KJS::CodeGenerator::emitSub): 15046 (KJS::CodeGenerator::emitLeftShift): 15047 (KJS::CodeGenerator::emitRightShift): 15048 (KJS::CodeGenerator::emitUnsignedRightShift): 15049 (KJS::CodeGenerator::emitBitAnd): 15050 (KJS::CodeGenerator::emitBitXOr): 15051 (KJS::CodeGenerator::emitBitOr): 15052 * VM/CodeGenerator.h: 15053 * VM/Machine.cpp: 15054 (KJS::jsLessEq): 15055 (KJS::Machine::privateExecute): 15056 * VM/Opcode.h: 15057 * kjs/nodes.cpp: 15058 (KJS::MultNode::emitCode): 15059 (KJS::DivNode::emitCode): 15060 (KJS::ModNode::emitCode): 15061 (KJS::SubNode::emitCode): 15062 (KJS::LeftShiftNode::emitCode): 15063 (KJS::RightShiftNode::emitCode): 15064 (KJS::UnsignedRightShiftNode::emitCode): 15065 (KJS::GreaterNode::emitCode): 15066 (KJS::LessEqNode::emitCode): 15067 (KJS::GreaterEqNode::emitCode): 15068 (KJS::EqualNode::emitCode): 15069 (KJS::NotEqualNode::emitCode): 15070 (KJS::StrictEqualNode::emitCode): 15071 (KJS::NotStrictEqualNode::emitCode): 15072 (KJS::BitAndNode::emitCode): 15073 (KJS::BitXOrNode::emitCode): 15074 (KJS::BitOrNode::emitCode): 15075 * kjs/nodes.h: 15076 15077 2008-03-26 Geoffrey Garen <ggaren (a] apple.com> 15078 15079 Reviewed by Oliver Hunt. 15080 15081 Only print debug dumps in debug builds. 15082 15083 * VM/CodeGenerator.cpp: 15084 (KJS::CodeGenerator::generate): 15085 * VM/Machine.cpp: 15086 (KJS::Machine::privateExecute): 15087 15088 2008-03-26 Geoffrey Garen <ggaren (a] apple.com> 15089 15090 Reviewed by Oliver Hunt. 15091 15092 Moved a few files around in the XCode project. 15093 15094 * JavaScriptCore.xcodeproj/project.pbxproj: 15095 15096 2008-03-26 Geoffrey Garen <ggaren (a] apple.com> 15097 15098 Reviewed by Oliver Hunt. 15099 15100 Made closures work. 15101 15102 An activation object aliases to the register file until its associated 15103 function returns, at which point it copies the registers for locals and 15104 parameters into an independent storage buffer. 15105 15106 2008-03-24 Geoffrey Garen <ggaren (a] apple.com> 15107 15108 Reviewed by Oliver Hunt. 15109 15110 Fixed recent 25% regression on simple for loop test. GCC seems to be 15111 very finicky about the code that gets inlined into 15112 Machine::privateExecute. 15113 15114 Everything in this patch is simply the result of experiment. 15115 15116 The resolve and resolve_base opcodes do not seem to have gotten slower 15117 from this change. 15118 15119 * VM/Machine.cpp: 15120 (KJS::resolve): 15121 (KJS::resolveBase): 15122 (KJS::Machine::privateExecute): 15123 * kjs/nodes.h: 15124 15125 2008-03-24 Oliver Hunt <oliver (a] apple.com> 15126 15127 Reviewed by Geoff Garen. 15128 15129 Bug 18059: squirrelfish needs to compile on platforms without computed goto 15130 <http://bugs.webkit.org/show_bug.cgi?id=18059> 15131 15132 "Standard" macro style support for conditionalising the use of computed goto. 15133 15134 * JavaScriptCore.xcodeproj/project.pbxproj: 15135 * VM/Machine.cpp: 15136 (KJS::Machine::isOpcode): 15137 (KJS::Machine::privateExecute): 15138 * VM/Machine.h: 15139 (KJS::Machine::getOpcode): 15140 (KJS::Machine::getOpcodeID): 15141 * VM/Opcode.h: 15142 * wtf/Platform.h: 15143 15144 2008-03-24 Geoffrey Garen <ggaren (a] apple.com> 15145 15146 Moved my notes from nodes.h to the wiki. 15147 15148 * kjs/nodes.h: 15149 15150 2008-03-24 Geoffrey Garen <ggaren (a] apple.com> 15151 15152 SquirrelFish lives. 15153 15154 Initial check-in of the code I've been carrying around. Lots of stuff 15155 doesn't work. Plus a bunch of empty files. 15156 15157 === Start merge of squirrelfish === 15158 15159 2008-05-21 Darin Adler <darin (a] apple.com> 15160 15161 - try to fix the Windows build 15162 15163 * profiler/Profiler.cpp: 15164 (KJS::Profiler::stopProfiling): Use ptrdiff_t instead of the less-common but incredibly 15165 similar ssize_t type. 15166 * wtf/AVLTree.h: 15167 (KJS::AVLTree::search): Added a typename for a dependent name that's a type. 15168 15169 2008-05-21 Darin Adler <darin (a] apple.com> 15170 15171 Reviewed by Anders. 15172 15173 - fix <rdar://problem/5952721> bug in JavaScript arguments object property lookup 15174 15175 Test: fast/js/arguments-bad-index.html 15176 15177 * kjs/function.cpp: 15178 (KJS::IndexToNameMap::IndexToNameMap): Use unsigned instead of int. 15179 (KJS::IndexToNameMap::isMapped): Use unsigned instead of int, and also use the 15180 strict version of the numeric conversion function, since we don't want to allow 15181 trailing junk. 15182 (KJS::IndexToNameMap::unMap): Ditto. 15183 (KJS::IndexToNameMap::operator[]): Ditto. 15184 * kjs/function.h: Changed IndexToNameMap::size type from int to unsigned. 15185 15186 2008-05-21 Timothy Hatcher <timothy (a] apple.com> 15187 15188 Change the Profiler to allow multiple profiles to be running at 15189 the same time. This can happen when you have nested console.profile() 15190 calls. This required two changes. First, the Profiler needed to keep a 15191 Vector of current profiles, instead of one. Second, a Profile needs 15192 to keep track of the global ExecState it started in and the page group 15193 identifier it is tracking. 15194 15195 The stopProfiling call now takes the same arguments as startProfiling. 15196 This makes sure the correct profile is stopped. Passing a null UString 15197 as the title will stop the last profile for the matching ExecState. 15198 15199 <rdar://problem/5951559> Multiple pages profiling can interfere with each other 15200 15201 Reviewed by Kevin McCullough. 15202 15203 * JavaScriptCore.exp: Added new exports. Removed old symbols. 15204 * profiler/Profile.cpp: 15205 (KJS::Profile::Profile): New constructor arguments for the 15206 originatingGlobalExec and pageGroupIdentifier. 15207 (KJS::Profile::stopProfiling): Set the m_originatingGlobalExec to null. 15208 * profiler/Profile.h: 15209 (KJS::Profile::create): Additional arguments. 15210 (KJS::Profile::originatingGlobalExec): Return m_originatingGlobalExec. 15211 (KJS::Profile::pageGroupIdentifier): Return m_pageGroupIdentifier. 15212 * profiler/Profiler.cpp: 15213 (KJS::Profiler::findProfile): Added. Finds a Profile that matches 15214 the ExecState and title. 15215 (KJS::Profiler::startProfiling): Return early if there is already 15216 a Profile with the ExecState and title. If not, create a new profile 15217 and append it to m_currentProfiles. 15218 (KJS::Profiler::stopProfiling): Loops through m_currentProfiles 15219 and find the one matching the ExecState and title. If one is found 15220 call stopProfiling and return the Profile after removing it 15221 from m_currentProfiles. 15222 (KJS::dispatchFunctionToProfiles): Helper inline function to loop through 15223 m_currentProfiles and call a Profile function. 15224 (KJS::Profiler::willExecute): Call dispatchFunctionToProfiles. 15225 (KJS::Profiler::didExecute): Ditto. 15226 * profiler/Profiler.h: 15227 15228 2008-05-21 Alexey Proskuryakov <ap (a] webkit.org> 15229 15230 Reviewed by Darin. 15231 15232 <rdar://problem/5908520> REGRESSION (3.1.1-r33033): Crash in WebKit when opening or 15233 refreshing page on people.com 15234 15235 The problem was that STL algorithms do not work with non-conformant comparators, and the 15236 site used sort(function() { return 0.5 - Math.random(); } to randomly shuffle an array. 15237 15238 https://bugs.webkit.org/show_bug.cgi?id=18687 15239 REGRESSION(r32220): ecma/Array/15.4.4.5-3.js test now fails in GMT(BST) 15240 15241 Besides relying on sort stability, this test was just broken, and kept failing with the 15242 new stable sort. 15243 15244 Tests: fast/js/sort-randomly.html 15245 fast/js/sort-stability.html 15246 fast/js/comparefn-sort-stability.html 15247 15248 * kjs/avl_tree.h: Added an AVL tree implementation. 15249 15250 * JavaScriptCore.xcodeproj/project.pbxproj: 15251 * wtf/AVLTree.h: Added. 15252 Added an AVL tree implementation. 15253 15254 * kjs/array_instance.cpp: 15255 (KJS::ArrayInstance::increaseVectorLength): 15256 (KJS::ArrayInstance::sort): 15257 (KJS::AVLTreeAbstractorForArrayCompare::get_less): 15258 (KJS::AVLTreeAbstractorForArrayCompare::set_less): 15259 (KJS::AVLTreeAbstractorForArrayCompare::get_greater): 15260 (KJS::AVLTreeAbstractorForArrayCompare::set_greater): 15261 (KJS::AVLTreeAbstractorForArrayCompare::get_balance_factor): 15262 (KJS::AVLTreeAbstractorForArrayCompare::set_balance_factor): 15263 (KJS::AVLTreeAbstractorForArrayCompare::compare_key_key): 15264 (KJS::AVLTreeAbstractorForArrayCompare::compare_key_node): 15265 (KJS::AVLTreeAbstractorForArrayCompare::compare_node_node): 15266 (KJS::AVLTreeAbstractorForArrayCompare::null): 15267 (KJS::ArrayInstance::compactForSorting): 15268 15269 * kjs/array_instance.h: increaseVectorLength() now returns a bool to indicate whether it was 15270 successful. 15271 15272 * wtf/Vector.h: 15273 (WTF::Vector::Vector): 15274 (WTF::::operator=): 15275 (WTF::::fill): 15276 Make these methods fail instead of crash when allocation fails, matching resize() and 15277 reserveCapacity(), which already had this behavior. Callers need to check for null buffer 15278 after making any Vector call that can try to allocate. 15279 15280 * tests/mozilla/ecma/Array/15.4.4.5-3.js: Fixed the test to use a consistent sort function, 15281 as suggested in comments to a Mozilla bug filed about it (I'll keep tracking the bug to see 15282 what the final resolution is). 15283 15284 2008-05-20 Kevin McCullough <kmccullough (a] apple.com> 15285 15286 Reviewed by Tim. 15287 15288 <rdar://problem/5950867> JSProfiler: Allow the profiler to "Focus" a 15289 profile node. 15290 - Implements focus by adding the idea of a profileNode being visible and 15291 adding the ability to reset all of the visible flags. 15292 15293 * profiler/Profile.h: 15294 (KJS::Profile::focus): 15295 * profiler/ProfileNode.cpp: 15296 (KJS::ProfileNode::ProfileNode): Initialize the visible flag. 15297 (KJS::ProfileNode::setTreeVisible): Set the visibility of this node and 15298 all of its descendents. 15299 (KJS::ProfileNode::focus): Determine if this node should be visible when 15300 focusing, if the functionName matches this node's function name or if any 15301 of this node's children are visible. 15302 (KJS::ProfileNode::restoreAll): Restore all nodes' visible flag. 15303 (KJS::ProfileNode::debugPrintData): 15304 * profiler/ProfileNode.h: 15305 (KJS::ProfileNode::visible): 15306 (KJS::ProfileNode::setVisible): 15307 15308 2008-05-20 Timothy Hatcher <timothy (a] apple.com> 15309 15310 Fixes a couple performance issues with the profiler. Also fixes 15311 a regression where some nodes wouldn't be added to the tree. 15312 15313 Reviewed by Kevin McCullough. 15314 15315 * profiler/ProfileNode.cpp: 15316 (KJS::ProfileNode::addChild): Compare callIdentifier instead 15317 of functionName. 15318 * profiler/ProfileNode.h: 15319 (CallIdentifier.operator==): Compare the CallIdentifiers in 15320 an order that fails sooner for non-matches. 15321 (CallIdentifier.callIdentifier): Return the CallIdentifier by 15322 reference to prevent making a new copy each time. 15323 15324 2008-05-20 Kevin McCullough <kmccullough (a] apple.com> 15325 15326 Reviewed by Darin. 15327 15328 <rdar://problem/5950796> JSProfiler: dump functions are in the code 15329 Removed dump and logging functions from the Release version of the code 15330 and renamed them to be obviously for debugging only. 15331 15332 * JavaScriptCore.exp: 15333 * profiler/Profile.cpp: 15334 (KJS::Profile::debugPrintData): 15335 (KJS::Profile::debugPrintDataSampleStyle): 15336 * profiler/Profile.h: 15337 * profiler/ProfileNode.cpp: 15338 (KJS::ProfileNode::debugPrintData): 15339 (KJS::ProfileNode::debugPrintDataSampleStyle): 15340 * profiler/ProfileNode.h: 15341 * profiler/Profiler.cpp: 15342 * profiler/Profiler.h: 15343 15344 2008-05-20 Kevin McCullough <kmccullough (a] apple.com> 15345 15346 Reviewed by Adam. 15347 15348 <rdar://problem/5950538> JSProfiler: Keep track of non-JS execution time 15349 We now have an extra node that represents the excess non-JS time. 15350 - Also changed "SCRIPT" and "anonymous function" to be more consistent 15351 with the debugger. 15352 15353 * profiler/ProfileNode.cpp: 15354 (KJS::ProfileNode::stopProfiling): If this ProfileNode is the head node 15355 create a new child that has the excess execution time. 15356 (KJS::ProfileNode::calculatePercentages): Moved calculation of the 15357 percentages into a function since it's called from multiple places. 15358 * profiler/ProfileNode.h: Add the newly needed functions used above. 15359 (KJS::ProfileNode::setTotalTime): 15360 (KJS::ProfileNode::setSelfTime): 15361 (KJS::ProfileNode::setNumberOfCalls): 15362 * profiler/Profiler.cpp: renamed "SCRIPT" and "anonymous function" to be 15363 consistent with the debugger and use constants that can be localized 15364 more easily. 15365 (KJS::getCallIdentifiers): 15366 (KJS::getCallIdentifierFromFunctionImp): 15367 15368 2008-05-20 Kevin McCullough <kmccullough (a] apple.com> 15369 15370 Reviewed by Tim. 15371 15372 <rdar://problem/5770054> JavaScript profiler (10928) 15373 Removed only profiler-internal use of currentProfile since that concept 15374 is changing. 15375 15376 * profiler/Profile.h: Now stopProfiling takes a time and bool as 15377 arguments. The time is used to calculate %s from and the bool tells 15378 if this node is the head node and should be the one calculating the time. 15379 (KJS::Profile::stopProfiling): 15380 * profiler/ProfileNode.cpp: Ditto. 15381 (KJS::ProfileNode::stopProfiling): 15382 * profiler/ProfileNode.h: Ditto. 15383 15384 2008-05-20 Kevin McCullough <kmccullough (a] apple.com> 15385 15386 Accidentally turned on the profiler. 15387 15388 * kjs/config.h: 15389 15390 15391 2008-05-20 Kevin McCullough <kmccullough (a] apple.com> 15392 15393 Reviewed by Tim. 15394 15395 <rdar://problem/5770054> JavaScript profiler (10928) 15396 Split function name into 3 parts so that the Web Inspector can link it to 15397 the resource location from whence it came. 15398 15399 * kjs/ustring.cpp: Implemented operator> for UStrings 15400 (KJS::operator>): 15401 * kjs/ustring.h: 15402 * profiler/Profile.cpp: 15403 (KJS::Profile::Profile): Initialize all 3 values. 15404 (KJS::Profile::willExecute): Use CallIdentifier struct. 15405 (KJS::Profile::didExecute): Ditto. 15406 * profiler/Profile.h: Ditto and remove unused function. 15407 * profiler/ProfileNode.cpp: 15408 (KJS::ProfileNode::ProfileNode): Use CallIdentifier struct. 15409 (KJS::ProfileNode::willExecute): Ditto and fix an issue where we 15410 restarted the m_startTime even though it was already started. 15411 (KJS::ProfileNode::didExecute): Ditto. 15412 (KJS::ProfileNode::findChild): Ditto. 15413 (KJS::functionNameDescendingComparator): Ditto and use new comparator. 15414 (KJS::functionNameAscendingComparator): Ditto. 15415 (KJS::ProfileNode::printDataInspectorStyle): Use CallIdentifier struct. 15416 (KJS::ProfileNode::printDataSampleStyle): Ditto. 15417 * profiler/ProfileNode.h: 15418 (KJS::CallIdentifier::CallIdentifier): Describe the CallIdentifier struct 15419 (KJS::CallIdentifier::operator== ): 15420 (KJS::ProfileNode::create): Use the CallIdentifier struct. 15421 (KJS::ProfileNode::callIdentifier): 15422 (KJS::ProfileNode::functionName): Now only return the function name, not 15423 the url and line number too. 15424 (KJS::ProfileNode::url): 15425 (KJS::ProfileNode::lineNumber): 15426 * profiler/Profiler.cpp: Use the CallIdentifier struct. 15427 (KJS::Profiler::startProfiling): 15428 (KJS::Profiler::willExecute): 15429 (KJS::Profiler::didExecute): 15430 (KJS::getCallIdentifiers): 15431 (KJS::getCallIdentifierFromFunctionImp): 15432 15433 2008-05-20 Timothy Hatcher <timothy (a] apple.com> 15434 15435 Rename sortFileName{Ascending,Descending} to 15436 sortFunctionName{Ascending,Descending}. 15437 15438 Reviewed by Kevin McCullough. 15439 15440 * JavaScriptCore.exp: 15441 * kjs/config.h: 15442 * profiler/Profile.h: 15443 * profiler/ProfileNode.cpp: 15444 (KJS::functionNameDescendingComparator): 15445 (KJS::ProfileNode::sortFunctionNameDescending): 15446 (KJS::functionNameAscendingComparator): 15447 (KJS::ProfileNode::sortFunctionNameAscending): 15448 * profiler/ProfileNode.h: 15449 15450 2008-05-19 Timothy Hatcher <timothy (a] apple.com> 15451 15452 Make the profiler use higher than millisecond resolution time-stamps. 15453 15454 Reviewed by Kevin McCullough. 15455 15456 * kjs/DateMath.cpp: 15457 (KJS::getCurrentUTCTime): Call getCurrentUTCTimeWithMicroseconds and 15458 floor the result. 15459 (KJS::getCurrentUTCTimeWithMicroseconds): Copied from the previous 15460 implementation of getCurrentUTCTime without the floor call. 15461 * kjs/DateMath.h: Addded getCurrentUTCTimeWithMicroseconds. 15462 * profiler/ProfileNode.cpp: 15463 (KJS::ProfileNode::ProfileNode): Use getCurrentUTCTimeWithMicroseconds. 15464 15465 2008-05-19 Timothy Hatcher <timothy (a] apple.com> 15466 15467 Fixes a bug in the profiler where call and apply would show up 15468 and double the time spent in a function. We don't want to show call 15469 and apply at all in the profiles. This change excludes them. 15470 15471 Reviewed by Kevin McCullough. 15472 15473 * profiler/ProfileNode.cpp: 15474 (KJS::ProfileNode::stopProfiling): Remove a second for loop and 15475 calculate self time in the existing loop. 15476 * profiler/Profiler.cpp: 15477 (KJS::shouldExcludeFunction): Helper inline function that returns 15478 true in the current function in an InternalFunctionImp and it is 15479 has the functionName call or apply. 15480 (KJS::Profiler::willExecute): Call shouldExcludeFunction and return 15481 early if if returns true. 15482 (KJS::Profiler::didExecute): Ditto. 15483 15484 2008-05-19 Kevin McCullough <kmccullough (a] apple.com> 15485 15486 Reviewed by Tim. 15487 15488 <rdar://problem/5770054> JavaScript profiler (10928) 15489 - Implement sorting by function name. 15490 15491 * JavaScriptCore.exp: 15492 * profiler/Profile.h: 15493 (KJS::Profile::sortFileNameDescending): 15494 (KJS::Profile::sortFileNameAscending): 15495 * profiler/ProfileNode.cpp: 15496 (KJS::fileNameDescendingComparator): 15497 (KJS::ProfileNode::sortFileNameDescending): 15498 (KJS::fileNameAscendingComparator): 15499 (KJS::ProfileNode::sortFileNameAscending): 15500 * profiler/ProfileNode.h: 15501 15502 2008-05-19 Kevin McCullough <kmccullough (a] apple.com> 15503 15504 Reviewed by Adam. 15505 15506 <rdar://problem/5770054> JavaScript profiler (10928) 15507 - Pass the exec state to profiler when calling startProfiling so that if 15508 profiling is started within an execution context that location is 15509 recorded correctly. 15510 15511 * JavaScriptCore.exp: 15512 * profiler/ProfileNode.cpp: 15513 (KJS::ProfileNode::printDataInspectorStyle): Dump more info for debugging 15514 purposes. 15515 * profiler/Profiler.cpp: 15516 (KJS::Profiler::startProfiling): 15517 * profiler/Profiler.h: 15518 15519 2008-05-19 Kevin McCullough <kmccullough (a] apple.com> 15520 15521 Rubberstamped by Geoff. 15522 15523 Turn off the profiler because it is a performance regression. 15524 15525 * kjs/config.h: 15526 15527 2008-05-19 Alp Toker <alp (a] nuanti.com> 15528 15529 Reviewed by Anders and Beth. 15530 15531 http://bugs.webkit.org/show_bug.cgi?id=16495 15532 [GTK] Accessibility support with ATK/AT-SPI 15533 15534 Initial ATK/AT-SPI accessibility support for the GTK+ port. 15535 15536 * wtf/Platform.h: 15537 15538 2008-05-19 Kevin McCullough <kmccullough (a] apple.com> 15539 15540 Reviewed by Tim. 15541 15542 <rdar://problem/5770054> JavaScript profiler (10928) 15543 -In an effort to make the profiler as efficient as possible instead of 15544 prepending to a vector we keep the vector in reverse order and operate 15545 over it backwards. 15546 15547 * profiler/Profile.cpp: 15548 (KJS::Profile::willExecute): 15549 (KJS::Profile::didExecute): 15550 * profiler/ProfileNode.cpp: 15551 (KJS::ProfileNode::didExecute): 15552 (KJS::ProfileNode::endAndRecordCall): 15553 * profiler/ProfileNode.h: 15554 * profiler/Profiler.cpp: 15555 (KJS::getStackNames): 15556 15557 2008-05-16 Kevin McCullough <kmccullough (a] apple.com> 15558 15559 Reviewed by Tim. 15560 15561 <rdar://problem/5770054> JavaScript profiler (10928) 15562 Implement sorting for the profiler. 15563 I chose to sort the profileNodes in place since there is no reason they 15564 need to retain their original order. 15565 15566 * JavaScriptCore.exp: Export the symbols. 15567 * profiler/Profile.h: Add the different ways a profile can be sorted. 15568 (KJS::Profile::sortTotalTimeDescending): 15569 (KJS::Profile::sortTotalTimeAscending): 15570 (KJS::Profile::sortSelfTimeDescending): 15571 (KJS::Profile::sortSelfTimeAscending): 15572 (KJS::Profile::sortCallsDescending): 15573 (KJS::Profile::sortCallsAscending): 15574 * profiler/ProfileNode.cpp: Implement those ways. 15575 (KJS::totalTimeDescendingComparator): 15576 (KJS::ProfileNode::sortTotalTimeDescending): 15577 (KJS::totalTimeAscendingComparator): 15578 (KJS::ProfileNode::sortTotalTimeAscending): 15579 (KJS::selfTimeDescendingComparator): 15580 (KJS::ProfileNode::sortSelfTimeDescending): 15581 (KJS::selfTimeAscendingComparator): 15582 (KJS::ProfileNode::sortSelfTimeAscending): 15583 (KJS::callsDescendingComparator): 15584 (KJS::ProfileNode::sortCallsDescending): 15585 (KJS::callsAscendingComparator): 15586 (KJS::ProfileNode::sortCallsAscending): 15587 * profiler/ProfileNode.h: No longer use a Deque since it cannot be 15588 sorted by std::sort and there was no reason not to use a Vector. I 15589 previously had though I would do prepending but am not. 15590 (KJS::ProfileNode::selfTime): 15591 (KJS::ProfileNode::totalPercent): 15592 (KJS::ProfileNode::selfPercent): 15593 (KJS::ProfileNode::children): 15594 * profiler/Profiler.cpp: Removed these functions as they can be called 15595 directoy on the Profile object after getting the Vector of them. 15596 (KJS::getStackNames): 15597 * profiler/Profiler.h: 15598 15599 2008-05-15 Ariya Hidayat <ariya.hidayat (a] trolltech.com> 15600 15601 Reviewed by Simon. 15602 15603 Since WebKitGtk is fully using autotools now, clean-up the .pro/.pri files 15604 from gtk-port. 15605 15606 * JavaScriptCore.pro: 15607 * kjs/testkjs.pro: 15608 15609 2008-05-15 Kevin McCullough <kmccullough (a] apple.com> 15610 15611 - Build fix. 15612 15613 * JavaScriptCore.exp: 15614 15615 2008-05-15 Kevin McCullough <kmccullough (a] apple.com> 15616 15617 Reviewed by Tim. 15618 15619 <rdar://problem/5770054> JavaScript profiler (10928) 15620 - Cache some values to save on computing them repetitively. This will be 15621 a big savings when we sort since we won't have to walk the tree for 15622 every comparison! 15623 - We cache these values when we end profiling because otherwise we won't 15624 know which profile to get the totalTime for the whole profile from without 15625 retaining a reference to the head profile or looking up the profile from 15626 the list of all profiles. 15627 - Also it's safe to assume we won't be asked for these values while we 15628 are still profiling since the WebInspector only get's profileNodes from 15629 profiles that are in the allProfiles() list and a profile is only added 15630 to that list after it has finished and these values will no longer 15631 change. 15632 15633 * JavaScriptCore.exp: 15634 * profiler/ProfileNode.cpp: 15635 (KJS::ProfileNode::ProfileNode): 15636 (KJS::ProfileNode::stopProfiling): 15637 (KJS::ProfileNode::printDataInspectorStyle): 15638 (KJS::ProfileNode::printDataSampleStyle): 15639 (KJS::ProfileNode::endAndRecordCall): 15640 * profiler/ProfileNode.h: 15641 (KJS::ProfileNode::totalTime): 15642 (KJS::ProfileNode::selfTime): 15643 (KJS::ProfileNode::totalPercent): 15644 (KJS::ProfileNode::selfPercent): 15645 * profiler/Profiler.cpp: 15646 (KJS::Profiler::stopProfiling): 15647 15648 2008-05-15 Simon Hausmann <shausman (a] trolltech.com> 15649 15650 Reviewed by Holger. 15651 15652 Fix compilation when compiling with MSVC and wchar_t support. 15653 15654 * wtf/unicode/qt4/UnicodeQt4.h: 15655 (WTF::Unicode::foldCase): 15656 (WTF::Unicode::umemcasecmp): 15657 15658 2008-05-14 Kevin McCullough <kmccullough (a] apple.com> 15659 15660 Reviewed by Tim. 15661 15662 <rdar://problem/5770054> JavaScript profiler (10928) 15663 - Turn on the profiler. 15664 15665 * kjs/config.h: 15666 15667 2008-05-14 Kevin McCullough <kmccullough (a] apple.com> 15668 15669 Reviewed by Tim. 15670 15671 <rdar://problem/5770054> JavaScript profiler (10928) 15672 - Expose the new profiler functions to the WebInspector. 15673 15674 * JavaScriptCore.exp: 15675 15676 2008-05-14 Kevin McCullough <kmccullough (a] apple.com> 15677 15678 Giving credit where credit is due. 15679 15680 * ChangeLog: 15681 15682 2008-05-14 Kevin McCullough <kmccullough (a] apple.com> 15683 15684 Reviewed by Geoff and Sam. 15685 15686 <rdar://problem/5770054> JavaScript profiler (10928) 15687 Add the ability to get percentages of total and self time for displaying 15688 in the WebInspector. 15689 15690 * profiler/Profile.h: 15691 (KJS::Profile::totalProfileTime): 15692 * profiler/ProfileNode.cpp: 15693 (KJS::ProfileNode::totalPercent): 15694 (KJS::ProfileNode::selfPercent): 15695 * profiler/ProfileNode.h: 15696 * profiler/Profiler.h: 15697 (KJS::Profiler::currentProfile): 15698 15699 2008-05-14 Kevin McCullough <kmccullough (a] apple.com> 15700 15701 Reviewed by Sam. 15702 15703 <rdar://problem/5770054> JavaScript profiler (10928) 15704 - Rename FunctionCallProfile to ProfileNode. 15705 15706 * GNUmakefile.am: 15707 * JavaScriptCore.exp: 15708 * JavaScriptCore.pri: 15709 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 15710 * JavaScriptCore.xcodeproj/project.pbxproj: 15711 * JavaScriptCoreSources.bkl: 15712 * profiler/FunctionCallProfile.cpp: Removed. 15713 * profiler/FunctionCallProfile.h: Removed. 15714 * profiler/Profile.cpp: 15715 (KJS::Profile::Profile): 15716 (KJS::Profile::willExecute): 15717 * profiler/Profile.h: 15718 (KJS::Profile::callTree): 15719 * profiler/ProfileNode.cpp: Copied from profiler/FunctionCallProfile.cpp. 15720 (KJS::ProfileNode::ProfileNode): 15721 (KJS::ProfileNode::willExecute): 15722 (KJS::ProfileNode::didExecute): 15723 (KJS::ProfileNode::addChild): 15724 (KJS::ProfileNode::findChild): 15725 (KJS::ProfileNode::stopProfiling): 15726 (KJS::ProfileNode::selfTime): 15727 (KJS::ProfileNode::printDataInspectorStyle): 15728 (KJS::ProfileNode::printDataSampleStyle): 15729 (KJS::ProfileNode::endAndRecordCall): 15730 * profiler/ProfileNode.h: Copied from profiler/FunctionCallProfile.h. 15731 (KJS::ProfileNode::create): 15732 (KJS::ProfileNode::children): 15733 * profiler/Profiler.cpp: 15734 15735 2008-05-14 Kevin McCullough <kmccullough (a] apple.com> 15736 15737 Reviewed by John. 15738 15739 <rdar://problem/5770054> JavaScript profiler (10928) 15740 - Have each FunctionCallProfile be able to return it's total and self time. 15741 15742 * JavaScriptCore.exp: 15743 * profiler/FunctionCallProfile.cpp: 15744 (KJS::FunctionCallProfile::selfTime): 15745 * profiler/FunctionCallProfile.h: 15746 (KJS::FunctionCallProfile::totalTime): 15747 15748 2008-05-14 Alexey Proskuryakov <ap (a] webkit.org> 15749 15750 Reviewed by Darin. 15751 15752 <rdar://problem/5934376> REGRESSION: A script fails because of a straw BOM character in it. 15753 15754 <https://bugs.webkit.org/show_bug.cgi?id=4931> 15755 Unicode format characters (Cf) should be removed from JavaScript source 15756 15757 Of all Cf characters, we are only removing BOM, because this is what Firefox trunk has 15758 settled upon, after extensive discussion and investigation. 15759 15760 Based on Darin's work on this bug. 15761 15762 Test: fast/js/removing-Cf-characters.html 15763 15764 * kjs/lexer.cpp: 15765 (KJS::Lexer::setCode): Tweak formatting. Use a call to shift(4) to read in the 15766 first characters, instead of having special case code here. 15767 (KJS::Lexer::shift): Add a loop when reading a character to skip BOM characters. 15768 15769 2008-05-13 Matt Lilek <webkit (a] mattlilek.com> 15770 15771 Not reviewed, build fix. 15772 15773 * kjs/date_object.cpp: 15774 (KJS::DateObjectFuncImp::callAsFunction): 15775 15776 2008-05-13 Anders Carlsson <andersca (a] apple.com> 15777 15778 Reviewed by Sam. 15779 15780 <rdar://problem/5933644> Implement Date.now 15781 15782 Implement Date.now which returns the number of milliseconds since the epoch. 15783 15784 * kjs/CommonIdentifiers.h: 15785 * kjs/date_object.cpp: 15786 (KJS::DateObjectFuncImp::): 15787 (KJS::DateObjectImp::DateObjectImp): 15788 (KJS::DateObjectFuncImp::callAsFunction): 15789 15790 2008-05-13 Kevin McCullough <kmccullough (a] apple.com> 15791 15792 Giving credit where credit is due. 15793 15794 * ChangeLog: 15795 15796 2008-05-13 Kevin McCullough <kmccullough (a] apple.com> 15797 15798 Reviewed by Adam and Geoff. 15799 15800 <rdar://problem/5770054> JavaScript profiler (10928) 15801 Use PassRefPtrs instead of RefPtrs when appropriate. 15802 15803 * profiler/FunctionCallProfile.cpp: 15804 (KJS::FunctionCallProfile::addChild): 15805 * profiler/FunctionCallProfile.h: 15806 * profiler/Profile.h: 15807 (KJS::Profile::callTree): 15808 15809 2008-05-13 Kevin McCullough <kmccullough (a] apple.com> 15810 15811 Reviewed by Sam. 15812 15813 <rdar://problem/5770054> JavaScript profiler (10928) 15814 - Made some functions static (as per Adam) and changed from using raw 15815 pointers to RefPtr for making these JavaScript Objects. 15816 15817 * profiler/FunctionCallProfile.cpp: 15818 (KJS::FunctionCallProfile::addChild): 15819 (KJS::FunctionCallProfile::findChild): 15820 * profiler/FunctionCallProfile.h: 15821 (KJS::FunctionCallProfile::create): 15822 * profiler/Profile.cpp: 15823 (KJS::Profile::Profile): 15824 (KJS::Profile::willExecute): 15825 (KJS::Profile::didExecute): 15826 (KJS::functionNameCountPairComparator): 15827 * profiler/Profile.h: 15828 (KJS::Profile::create): 15829 (KJS::Profile::title): 15830 (KJS::Profile::callTree): 15831 * profiler/Profiler.cpp: 15832 (KJS::Profiler::startProfiling): 15833 * profiler/Profiler.h: 15834 (KJS::Profiler::allProfiles): 15835 (KJS::Profiler::clearProfiles): 15836 15837 2008-05-13 Alexey Proskuryakov <ap (a] webkit.org> 15838 15839 Reviewed by Geoffrey Garen. 15840 15841 <rdar://problem/4949018> JavaScriptCore API claims to work with UTF8 strings, but only works 15842 with ASCII strings 15843 15844 * kjs/ustring.h: 15845 * kjs/ustring.cpp: 15846 (KJS::UString::Rep::createFromUTF8): 15847 Added. Implementation adapted from JSStringCreateWithUTF8CString(). 15848 15849 * API/JSStringRef.cpp: 15850 (JSStringCreateWithUTF8CString): 15851 * API/JSClassRef.cpp: 15852 (OpaqueJSClass::OpaqueJSClass): 15853 Use UString::Rep::createFromUTF8(). 15854 15855 2008-05-12 Mark Rowe <mrowe (a] apple.com> 15856 15857 Reviewed by Tim Hatcher. 15858 15859 <rdar://problem/4859666> WebKit needs availability macros in order to deprecate APIs 15860 15861 Create WebKit availability macros that key off the Mac OS X version being targeted to 15862 determine the WebKit version being targeted. Applications can define 15863 WEBKIT_VERSION_MIN_REQUIRED before including WebKit headers in order to target a specific 15864 version of WebKit. 15865 15866 The availability header is being added to JavaScriptCore rather than WebKit as JavaScriptCore 15867 is the lowest-level portion of the public WebKit API. 15868 15869 * API/WebKitAvailability.h: Added. 15870 * JavaScriptCore.xcodeproj/project.pbxproj: 15871 15872 2008-05-12 Alexey Proskuryakov <ap (a] webkit.org> 15873 15874 Reviewed by Maciej. 15875 15876 https://bugs.webkit.org/show_bug.cgi?id=18828 15877 Reproducible crash with PAC file 15878 15879 Naively moving JavaScriptCore into thread-specific data was inappropriate in the face of 15880 exiting JavaScriptCore API clients, which expect a different therading model. Temporarily 15881 disabling ThreadSpecific implementation until this can be sorted out. 15882 15883 * wtf/ThreadSpecific.h: 15884 (WTF::::ThreadSpecific): 15885 (WTF::::~ThreadSpecific): 15886 (WTF::::get): 15887 (WTF::::set): 15888 15889 2008-05-12 Alexey Proskuryakov <ap (a] webkit.org> 15890 15891 Roll out recent threading changes (r32807, r32810, r32819, r32822) to simplify 15892 SquirrelFish merging. 15893 15894 * API/JSBase.cpp: 15895 (JSGarbageCollect): 15896 * API/JSCallbackObjectFunctions.h: 15897 (KJS::::staticFunctionGetter): 15898 * API/JSClassRef.cpp: 15899 (OpaqueJSClass::prototype): 15900 * API/JSObjectRef.cpp: 15901 (JSObjectMake): 15902 (JSObjectMakeFunctionWithCallback): 15903 (JSObjectMakeConstructor): 15904 (JSObjectMakeFunction): 15905 * API/JSValueRef.cpp: 15906 (JSValueMakeNumber): 15907 (JSValueMakeString): 15908 * JavaScriptCore.exp: 15909 * kjs/ExecState.h: 15910 * kjs/InitializeThreading.cpp: 15911 (KJS::initializeThreadingOnce): 15912 * kjs/JSGlobalObject.cpp: 15913 (KJS::JSGlobalObject::~JSGlobalObject): 15914 (KJS::JSGlobalObject::init): 15915 (KJS::JSGlobalObject::put): 15916 (KJS::JSGlobalObject::reset): 15917 (KJS::JSGlobalObject::tearOffActivation): 15918 * kjs/JSGlobalObject.h: 15919 (KJS::JSGlobalObject::head): 15920 (KJS::JSGlobalObject::perThreadData): 15921 * kjs/JSLock.cpp: 15922 (KJS::JSLock::registerThread): 15923 * kjs/JSLock.h: 15924 (KJS::JSLock::JSLock): 15925 * kjs/array_instance.cpp: 15926 (KJS::ArrayInstance::ArrayInstance): 15927 (KJS::ArrayInstance::lengthGetter): 15928 * kjs/array_object.cpp: 15929 (KJS::arrayProtoFuncToString): 15930 (KJS::arrayProtoFuncToLocaleString): 15931 (KJS::arrayProtoFuncJoin): 15932 (KJS::arrayProtoFuncConcat): 15933 (KJS::arrayProtoFuncPop): 15934 (KJS::arrayProtoFuncPush): 15935 (KJS::arrayProtoFuncShift): 15936 (KJS::arrayProtoFuncSlice): 15937 (KJS::arrayProtoFuncSplice): 15938 (KJS::arrayProtoFuncUnShift): 15939 (KJS::arrayProtoFuncFilter): 15940 (KJS::arrayProtoFuncMap): 15941 (KJS::arrayProtoFuncEvery): 15942 (KJS::arrayProtoFuncForEach): 15943 (KJS::arrayProtoFuncSome): 15944 (KJS::arrayProtoFuncIndexOf): 15945 (KJS::arrayProtoFuncLastIndexOf): 15946 (KJS::ArrayObjectImp::ArrayObjectImp): 15947 (KJS::ArrayObjectImp::construct): 15948 * kjs/bool_object.cpp: 15949 (KJS::BooleanPrototype::BooleanPrototype): 15950 (KJS::booleanProtoFuncToString): 15951 (KJS::BooleanObjectImp::BooleanObjectImp): 15952 (KJS::BooleanObjectImp::construct): 15953 * kjs/collector.cpp: 15954 (KJS::allocateBlock): 15955 (KJS::Collector::recordExtraCost): 15956 (KJS::Collector::heapAllocate): 15957 (KJS::Collector::allocate): 15958 (KJS::Collector::allocateNumber): 15959 (KJS::Collector::registerAsMainThread): 15960 (KJS::onMainThread): 15961 (KJS::PlatformThread::PlatformThread): 15962 (KJS::getCurrentPlatformThread): 15963 (KJS::Collector::Thread::Thread): 15964 (KJS::destroyRegisteredThread): 15965 (KJS::initializeRegisteredThreadKey): 15966 (KJS::Collector::registerThread): 15967 (KJS::Collector::markStackObjectsConservatively): 15968 (KJS::Collector::markCurrentThreadConservativelyInternal): 15969 (KJS::Collector::markCurrentThreadConservatively): 15970 (KJS::suspendThread): 15971 (KJS::resumeThread): 15972 (KJS::getPlatformThreadRegisters): 15973 (KJS::otherThreadStackPointer): 15974 (KJS::Collector::markOtherThreadConservatively): 15975 (KJS::protectedValues): 15976 (KJS::Collector::protect): 15977 (KJS::Collector::unprotect): 15978 (KJS::Collector::collectOnMainThreadOnly): 15979 (KJS::Collector::markProtectedObjects): 15980 (KJS::Collector::markMainThreadOnlyObjects): 15981 (KJS::Collector::sweep): 15982 (KJS::Collector::collect): 15983 (KJS::Collector::size): 15984 (KJS::Collector::globalObjectCount): 15985 (KJS::Collector::protectedGlobalObjectCount): 15986 (KJS::Collector::protectedObjectCount): 15987 (KJS::Collector::protectedObjectTypeCounts): 15988 (KJS::Collector::isBusy): 15989 (KJS::Collector::reportOutOfMemoryToAllExecStates): 15990 * kjs/collector.h: 15991 (KJS::Collector::cellBlock): 15992 (KJS::Collector::cellOffset): 15993 (KJS::Collector::isCellMarked): 15994 (KJS::Collector::markCell): 15995 (KJS::Collector::reportExtraMemoryCost): 15996 * kjs/date_object.cpp: 15997 (KJS::formatLocaleDate): 15998 (KJS::DatePrototype::DatePrototype): 15999 (KJS::DateObjectImp::DateObjectImp): 16000 (KJS::DateObjectImp::construct): 16001 (KJS::DateObjectImp::callAsFunction): 16002 (KJS::DateObjectFuncImp::DateObjectFuncImp): 16003 (KJS::DateObjectFuncImp::callAsFunction): 16004 (KJS::dateProtoFuncToString): 16005 (KJS::dateProtoFuncToUTCString): 16006 (KJS::dateProtoFuncToDateString): 16007 (KJS::dateProtoFuncToTimeString): 16008 (KJS::dateProtoFuncToLocaleString): 16009 (KJS::dateProtoFuncToLocaleDateString): 16010 (KJS::dateProtoFuncToLocaleTimeString): 16011 (KJS::dateProtoFuncValueOf): 16012 (KJS::dateProtoFuncGetTime): 16013 (KJS::dateProtoFuncGetFullYear): 16014 (KJS::dateProtoFuncGetUTCFullYear): 16015 (KJS::dateProtoFuncToGMTString): 16016 (KJS::dateProtoFuncGetMonth): 16017 (KJS::dateProtoFuncGetUTCMonth): 16018 (KJS::dateProtoFuncGetDate): 16019 (KJS::dateProtoFuncGetUTCDate): 16020 (KJS::dateProtoFuncGetDay): 16021 (KJS::dateProtoFuncGetUTCDay): 16022 (KJS::dateProtoFuncGetHours): 16023 (KJS::dateProtoFuncGetUTCHours): 16024 (KJS::dateProtoFuncGetMinutes): 16025 (KJS::dateProtoFuncGetUTCMinutes): 16026 (KJS::dateProtoFuncGetSeconds): 16027 (KJS::dateProtoFuncGetUTCSeconds): 16028 (KJS::dateProtoFuncGetMilliSeconds): 16029 (KJS::dateProtoFuncGetUTCMilliseconds): 16030 (KJS::dateProtoFuncGetTimezoneOffset): 16031 (KJS::dateProtoFuncSetTime): 16032 (KJS::setNewValueFromTimeArgs): 16033 (KJS::setNewValueFromDateArgs): 16034 (KJS::dateProtoFuncSetYear): 16035 (KJS::dateProtoFuncGetYear): 16036 * kjs/error_object.cpp: 16037 (KJS::ErrorPrototype::ErrorPrototype): 16038 (KJS::errorProtoFuncToString): 16039 (KJS::ErrorObjectImp::ErrorObjectImp): 16040 (KJS::ErrorObjectImp::construct): 16041 (KJS::NativeErrorPrototype::NativeErrorPrototype): 16042 (KJS::NativeErrorImp::NativeErrorImp): 16043 (KJS::NativeErrorImp::construct): 16044 * kjs/function.cpp: 16045 (KJS::FunctionImp::lengthGetter): 16046 (KJS::FunctionImp::construct): 16047 (KJS::Arguments::Arguments): 16048 (KJS::ActivationImp::createArgumentsObject): 16049 (KJS::encode): 16050 (KJS::decode): 16051 (KJS::globalFuncParseInt): 16052 (KJS::globalFuncParseFloat): 16053 (KJS::globalFuncEscape): 16054 (KJS::globalFuncUnescape): 16055 (KJS::PrototypeFunction::PrototypeFunction): 16056 (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction): 16057 * kjs/function_object.cpp: 16058 (KJS::FunctionPrototype::FunctionPrototype): 16059 (KJS::functionProtoFuncToString): 16060 (KJS::FunctionObjectImp::FunctionObjectImp): 16061 (KJS::FunctionObjectImp::construct): 16062 * kjs/internal.cpp: 16063 (KJS::StringImp::toObject): 16064 * kjs/internal.h: 16065 (KJS::StringImp::StringImp): 16066 (KJS::NumberImp::operator new): 16067 * kjs/list.cpp: 16068 (KJS::List::markSet): 16069 (KJS::List::markProtectedListsSlowCase): 16070 (KJS::List::expandAndAppend): 16071 * kjs/list.h: 16072 (KJS::List::List): 16073 (KJS::List::~List): 16074 (KJS::List::markProtectedLists): 16075 * kjs/lookup.h: 16076 (KJS::staticFunctionGetter): 16077 (KJS::cacheGlobalObject): 16078 * kjs/math_object.cpp: 16079 (KJS::MathObjectImp::getValueProperty): 16080 (KJS::mathProtoFuncAbs): 16081 (KJS::mathProtoFuncACos): 16082 (KJS::mathProtoFuncASin): 16083 (KJS::mathProtoFuncATan): 16084 (KJS::mathProtoFuncATan2): 16085 (KJS::mathProtoFuncCeil): 16086 (KJS::mathProtoFuncCos): 16087 (KJS::mathProtoFuncExp): 16088 (KJS::mathProtoFuncFloor): 16089 (KJS::mathProtoFuncLog): 16090 (KJS::mathProtoFuncMax): 16091 (KJS::mathProtoFuncMin): 16092 (KJS::mathProtoFuncPow): 16093 (KJS::mathProtoFuncRandom): 16094 (KJS::mathProtoFuncRound): 16095 (KJS::mathProtoFuncSin): 16096 (KJS::mathProtoFuncSqrt): 16097 (KJS::mathProtoFuncTan): 16098 * kjs/nodes.cpp: 16099 (KJS::ParserRefCounted::ParserRefCounted): 16100 (KJS::ParserRefCounted::ref): 16101 (KJS::ParserRefCounted::deref): 16102 (KJS::ParserRefCounted::refcount): 16103 (KJS::ParserRefCounted::deleteNewObjects): 16104 (KJS::Node::handleException): 16105 (KJS::NumberNode::evaluate): 16106 (KJS::StringNode::evaluate): 16107 (KJS::ArrayNode::evaluate): 16108 (KJS::PostIncResolveNode::evaluate): 16109 (KJS::PostIncLocalVarNode::evaluate): 16110 (KJS::PostDecResolveNode::evaluate): 16111 (KJS::PostDecLocalVarNode::evaluate): 16112 (KJS::PostDecLocalVarNode::inlineEvaluateToNumber): 16113 (KJS::PostIncBracketNode::evaluate): 16114 (KJS::PostDecBracketNode::evaluate): 16115 (KJS::PostIncDotNode::evaluate): 16116 (KJS::PostDecDotNode::evaluate): 16117 (KJS::typeStringForValue): 16118 (KJS::LocalVarTypeOfNode::evaluate): 16119 (KJS::TypeOfResolveNode::evaluate): 16120 (KJS::TypeOfValueNode::evaluate): 16121 (KJS::PreIncLocalVarNode::evaluate): 16122 (KJS::PreIncResolveNode::evaluate): 16123 (KJS::PreDecLocalVarNode::evaluate): 16124 (KJS::PreDecResolveNode::evaluate): 16125 (KJS::PreIncConstNode::evaluate): 16126 (KJS::PreDecConstNode::evaluate): 16127 (KJS::PostIncConstNode::evaluate): 16128 (KJS::PostDecConstNode::evaluate): 16129 (KJS::PreIncBracketNode::evaluate): 16130 (KJS::PreDecBracketNode::evaluate): 16131 (KJS::PreIncDotNode::evaluate): 16132 (KJS::PreDecDotNode::evaluate): 16133 (KJS::NegateNode::evaluate): 16134 (KJS::BitwiseNotNode::evaluate): 16135 (KJS::MultNode::evaluate): 16136 (KJS::DivNode::evaluate): 16137 (KJS::ModNode::evaluate): 16138 (KJS::addSlowCase): 16139 (KJS::add): 16140 (KJS::AddNumbersNode::evaluate): 16141 (KJS::AddStringsNode::evaluate): 16142 (KJS::AddStringLeftNode::evaluate): 16143 (KJS::AddStringRightNode::evaluate): 16144 (KJS::SubNode::evaluate): 16145 (KJS::LeftShiftNode::evaluate): 16146 (KJS::RightShiftNode::evaluate): 16147 (KJS::UnsignedRightShiftNode::evaluate): 16148 (KJS::BitXOrNode::evaluate): 16149 (KJS::BitOrNode::evaluate): 16150 (KJS::valueForReadModifyAssignment): 16151 (KJS::ForInNode::execute): 16152 (KJS::TryNode::execute): 16153 (KJS::FuncDeclNode::makeFunction): 16154 (KJS::FuncExprNode::evaluate): 16155 * kjs/nodes.h: 16156 * kjs/number_object.cpp: 16157 (KJS::NumberPrototype::NumberPrototype): 16158 (KJS::numberProtoFuncToString): 16159 (KJS::numberProtoFuncToLocaleString): 16160 (KJS::numberProtoFuncToFixed): 16161 (KJS::numberProtoFuncToExponential): 16162 (KJS::numberProtoFuncToPrecision): 16163 (KJS::NumberObjectImp::NumberObjectImp): 16164 (KJS::NumberObjectImp::getValueProperty): 16165 (KJS::NumberObjectImp::construct): 16166 (KJS::NumberObjectImp::callAsFunction): 16167 * kjs/object.cpp: 16168 (KJS::JSObject::call): 16169 (KJS::JSObject::get): 16170 (KJS::JSObject::put): 16171 (KJS::JSObject::defineGetter): 16172 (KJS::JSObject::defineSetter): 16173 (KJS::JSObject::putDirect): 16174 (KJS::Error::create): 16175 * kjs/object.h: 16176 * kjs/object_object.cpp: 16177 (KJS::ObjectPrototype::ObjectPrototype): 16178 (KJS::objectProtoFuncToLocaleString): 16179 (KJS::objectProtoFuncToString): 16180 (KJS::ObjectObjectImp::ObjectObjectImp): 16181 (KJS::ObjectObjectImp::construct): 16182 * kjs/property_map.h: 16183 (KJS::SavedProperty::SavedProperty): 16184 (KJS::SavedProperty::init): 16185 (KJS::SavedProperty::~SavedProperty): 16186 (KJS::SavedProperty::name): 16187 (KJS::SavedProperty::value): 16188 (KJS::SavedProperty::attributes): 16189 * kjs/protect.h: 16190 (KJS::gcProtect): 16191 (KJS::gcUnprotect): 16192 * kjs/regexp_object.cpp: 16193 (KJS::RegExpPrototype::RegExpPrototype): 16194 (KJS::regExpProtoFuncToString): 16195 (KJS::RegExpImp::getValueProperty): 16196 (KJS::RegExpObjectImp::RegExpObjectImp): 16197 (KJS::RegExpObjectImp::arrayOfMatches): 16198 (KJS::RegExpObjectImp::getBackref): 16199 (KJS::RegExpObjectImp::getLastParen): 16200 (KJS::RegExpObjectImp::getLeftContext): 16201 (KJS::RegExpObjectImp::getRightContext): 16202 (KJS::RegExpObjectImp::getValueProperty): 16203 (KJS::RegExpObjectImp::createRegExpImp): 16204 * kjs/regexp_object.h: 16205 * kjs/string_object.cpp: 16206 (KJS::StringInstance::StringInstance): 16207 (KJS::StringInstance::lengthGetter): 16208 (KJS::StringInstance::indexGetter): 16209 (KJS::stringInstanceNumericPropertyGetter): 16210 (KJS::StringPrototype::StringPrototype): 16211 (KJS::replace): 16212 (KJS::stringProtoFuncCharAt): 16213 (KJS::stringProtoFuncCharCodeAt): 16214 (KJS::stringProtoFuncConcat): 16215 (KJS::stringProtoFuncIndexOf): 16216 (KJS::stringProtoFuncLastIndexOf): 16217 (KJS::stringProtoFuncMatch): 16218 (KJS::stringProtoFuncSearch): 16219 (KJS::stringProtoFuncReplace): 16220 (KJS::stringProtoFuncSlice): 16221 (KJS::stringProtoFuncSplit): 16222 (KJS::stringProtoFuncSubstr): 16223 (KJS::stringProtoFuncSubstring): 16224 (KJS::stringProtoFuncToLowerCase): 16225 (KJS::stringProtoFuncToUpperCase): 16226 (KJS::stringProtoFuncToLocaleLowerCase): 16227 (KJS::stringProtoFuncToLocaleUpperCase): 16228 (KJS::stringProtoFuncLocaleCompare): 16229 (KJS::stringProtoFuncBig): 16230 (KJS::stringProtoFuncSmall): 16231 (KJS::stringProtoFuncBlink): 16232 (KJS::stringProtoFuncBold): 16233 (KJS::stringProtoFuncFixed): 16234 (KJS::stringProtoFuncItalics): 16235 (KJS::stringProtoFuncStrike): 16236 (KJS::stringProtoFuncSub): 16237 (KJS::stringProtoFuncSup): 16238 (KJS::stringProtoFuncFontcolor): 16239 (KJS::stringProtoFuncFontsize): 16240 (KJS::stringProtoFuncAnchor): 16241 (KJS::stringProtoFuncLink): 16242 (KJS::StringObjectImp::StringObjectImp): 16243 (KJS::StringObjectImp::construct): 16244 (KJS::StringObjectImp::callAsFunction): 16245 (KJS::StringObjectFuncImp::StringObjectFuncImp): 16246 (KJS::StringObjectFuncImp::callAsFunction): 16247 * kjs/string_object.h: 16248 (KJS::StringInstanceThatMasqueradesAsUndefined::StringInstanceThatMasqueradesAsUndefined): 16249 * kjs/testkjs.cpp: 16250 (GlobalObject::GlobalObject): 16251 (functionGC): 16252 (functionRun): 16253 (functionReadline): 16254 (kjsmain): 16255 * kjs/ustring.h: 16256 * kjs/value.cpp: 16257 (KJS::JSCell::operator new): 16258 (KJS::jsString): 16259 (KJS::jsOwnedString): 16260 (KJS::jsNumberCell): 16261 * kjs/value.h: 16262 (KJS::jsNaN): 16263 (KJS::jsNumber): 16264 (KJS::jsNumberFromAnd): 16265 (KJS::JSCell::marked): 16266 (KJS::JSCell::mark): 16267 (KJS::JSValue::toJSNumber): 16268 * wtf/ThreadSpecific.h: 16269 (WTF::T): 16270 16271 2008-05-10 Julien Chaffraix <jchaffraix (a] webkit.org> 16272 16273 Qt & wx build fix. 16274 16275 * JavaScriptCore.pri: Add profiler/Profile.cpp. 16276 * JavaScriptCoreSources.bkl: Ditto. 16277 16278 2008-05-10 Jan Michael Alonzo <jmalonzo (a] unpluggable.com> 16279 16280 Reviewed by Maciej. 16281 16282 Gtk+ build fix 16283 16284 * GNUmakefile.am: Add Profile.cpp in _sources 16285 16286 2008-05-09 Brady Eidson <beidson (a] apple.com> 16287 16288 Build Fix. Kevin is an idiot. 16289 ("My name is Kevin McCullough and I approve this message.") 16290 16291 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 16292 16293 2008-05-09 Kevin McCullough <kmccullough (a] apple.com> 16294 16295 Reviewed by Tim. 16296 16297 -<rdar://problem/5770054> JavaScript profiler (10928) 16298 -Add Profile class so that all profiles can be stored and retrieved by 16299 the WebInspector when that time comes. 16300 16301 * JavaScriptCore.exp: Export the new function signatures. 16302 * JavaScriptCore.xcodeproj/project.pbxproj: Add the new files to the 16303 project 16304 * profiler/Profile.cpp: Added. This class represents a single run of the 16305 profiler. 16306 (KJS::Profile::Profile): 16307 (KJS::Profile::willExecute): 16308 (KJS::Profile::didExecute): 16309 (KJS::Profile::printDataInspectorStyle): 16310 (KJS::functionNameCountPairComparator): 16311 (KJS::Profile::printDataSampleStyle): 16312 * profiler/Profile.h: Added. Ditto 16313 (KJS::Profile::stopProfiling): 16314 * profiler/Profiler.cpp: Now the profiler keeps track of many profiles 16315 but only runs one at a time. 16316 (KJS::Profiler::startProfiling): 16317 (KJS::Profiler::stopProfiling): 16318 (KJS::Profiler::willExecute): 16319 (KJS::Profiler::didExecute): 16320 (KJS::Profiler::printDataInspectorStyle): 16321 (KJS::Profiler::printDataSampleStyle): 16322 * profiler/Profiler.h: Ditto. 16323 (KJS::Profiler::~Profiler): 16324 (KJS::Profiler::allProfiles): 16325 (KJS::Profiler::clearProfiles): 16326 16327 2008-05-08 Anders Carlsson <andersca (a] apple.com> 16328 16329 Reviewed by Mark. 16330 16331 Enable NPAPI plug-ins on 64-bit. 16332 16333 * wtf/Platform.h: 16334 16335 2008-05-07 Julien Chaffraix <jchaffraix (a] webkit.org> 16336 16337 Reviewed by Adam Roben. 16338 16339 wx & Gtk build fix. 16340 16341 Add SIZE_MAX definition for the wx port. 16342 16343 * os-win32/stdint.h: 16344 16345 2008-05-07 Ariya Hidayat <ariya.hidayat (a] trolltech.com> 16346 16347 Reviewed by Simon. 16348 16349 Support for isMainThread in the Qt port. 16350 16351 * wtf/ThreadingQt.cpp: 16352 (WTF::initializeThreading): Adjusted. 16353 (WTF::isMainThread): Added. 16354 16355 2008-05-05 Darin Adler <darin (a] apple.com> 16356 16357 Reviewed by John Sullivan. 16358 16359 - fix debug-only leak seen on buildbot 16360 16361 * wtf/HashTable.h: 16362 (WTF::HashTable::checkKey): After writing an empty value in, but before constructing a 16363 deleted value on top of it, call the destructor so the empty value doesn't leak. 16364 16365 2008-05-02 Alexey Proskuryakov <ap (a] webkit.org> 16366 16367 Reviewed by Geoffrey Garen. 16368 16369 Get rid of static data in nodes.cpp (well, at least of non-debug one). 16370 16371 No measurable change on SunSpider. 16372 16373 * kjs/InitializeThreading.cpp: 16374 (KJS::initializeThreadingOnce): 16375 * kjs/nodes.cpp: 16376 (KJS::newTrackedObjects): 16377 (KJS::trackedObjectExtraRefCounts): 16378 (KJS::initializeNodesThreading): 16379 (KJS::ParserRefCounted::ParserRefCounted): 16380 (KJS::ParserRefCounted::ref): 16381 (KJS::ParserRefCounted::deref): 16382 (KJS::ParserRefCounted::refcount): 16383 (KJS::ParserRefCounted::deleteNewObjects): 16384 * kjs/nodes.h: 16385 Made newTrackedObjects and trackedObjectExtraRefCounts per-thread. 16386 16387 2008-05-02 Alexey Proskuryakov <ap (a] webkit.org> 16388 16389 Reviewed by Darin. 16390 16391 Move call stack depth counter to global object. 16392 16393 * kjs/ExecState.h: (KJS::ExecState::functionCallDepth): Added a recursion depth counter to 16394 per-thread data. 16395 * kjs/JSGlobalObject.cpp: (KJS::JSGlobalObject::init): Initialize PerThreadData.functionCallDepth. 16396 * kjs/JSGlobalObject.h: (KJS::JSGlobalObject::perThreadData): Made the result non-const. 16397 16398 * kjs/object.cpp: 16399 (KJS::throwStackSizeExceededError): Moved throwError to a separate function, since it is now 16400 the only thing in JSObject::call that needs a PIC branch. 16401 (KJS::JSObject::call): Use a per-thread variable instead of local static for recursion depth 16402 tracking. 16403 16404 2008-05-02 Alexey Proskuryakov <ap (a] webkit.org> 16405 16406 Reviewed by Darin. 16407 16408 Make JavaScriptGlue and JavaScriptCore API functions implicitly call initializeThreading 16409 for the sake of non-WebKit clients. 16410 16411 * API/JSBase.cpp: 16412 (JSGarbageCollect): 16413 * API/JSContextRef.cpp: 16414 (JSGlobalContextCreate): 16415 These are the JavaScriptCore API bottlenecks. There are a few other JSStringRef 16416 and JSClassRef functions that can be called earlier, but they do not do anything that 16417 requires initializeThreading. 16418 16419 * kjs/InitializeThreading.cpp: 16420 (KJS::doInitializeThreading): 16421 (KJS::initializeThreading): 16422 On Darwin, make the initialization happen under pthread_once, since there is no guarantee 16423 that non-WebKit clients won't try to call this function re-entrantly. 16424 16425 * kjs/InitializeThreading.h: 16426 * wtf/Threading.h: 16427 Spell out initializeThreading contract. 16428 16429 * wtf/ThreadingPthreads.cpp: (WTF::isMainThread): Make sure that results are correct on 16430 Darwin, even if threading was initialized from a secondary thread. 16431 16432 2008-05-02 Alexey Proskuryakov <ap (a] webkit.org> 16433 16434 Reviewed by Geoffrey Garen. 16435 16436 https://bugs.webkit.org/show_bug.cgi?id=18826 16437 Make JavaScript heap per-thread 16438 16439 * wtf/ThreadSpecific.h: Make sure to initialize POD thread-specific varaibles, too 16440 (replaced "new T" with "new T()"). 16441 16442 * kjs/collector.h: Renamed Collector to Heap, made the heap per-thread. Removed support for 16443 multithreaded access to a heap. 16444 (KJS::CollectorBlock): Removed collectOnMainThreadOnly bitmap, added a reference to owner heap. 16445 (KJS::SmallCellCollectorBlock): Ditto. 16446 (KJS::Heap::markListSet): Moved from a static variable in List.cpp to a per-thread one here. 16447 (KJS::Heap::heap): Added a method to find which heap a JSValue is allocated in. 16448 16449 * kjs/collector.cpp: Changed "const size_t" constants to #defines, to avoid a PIC branch 16450 (gcc was using one to access a constant used in std::max(), because it takes a reference, 16451 even though std::max() itself was inlined). 16452 (KJS::Heap::threadHeap): JS heap is now per-thread. 16453 (KJS::Heap::Heap): Zero-initialize the heap. 16454 (KJS::allocateBlock): Added NEVER_INLINE, because this function uses a PIC branch, so 16455 inlining it in Heap::heapAllocate() is bad for performance, now that the latter doesn't 16456 use any global data. 16457 (KJS::Heap::heapAllocate): Initialize Block::heap. 16458 (KJS::Heap::markCurrentThreadConservatively): Moved into markStackObjectsConservatively(), 16459 as GC only works with a current thread's heap now. 16460 (KJS::Heap::sweep): Removed collectOnMainThreadOnly checks. 16461 (KJS::Heap::collect): Ditto. 16462 16463 * kjs/JSLock.cpp: 16464 * kjs/JSLock.h: 16465 (KJS::JSLock::JSLock): 16466 Removed registerThread(), as the heap no longer cares. 16467 16468 * kjs/InitializeThreading.cpp: (KJS::initializeThreading): Initialize new per-thread 16469 variables in Heap and JSGlobalObject. 16470 16471 * kjs/ExecState.h: (KJS::ExecState::heap): Added a heap pointer for faster access to 16472 per-thread heap, and an accessor for it. 16473 16474 * kjs/JSGlobalObject.h: Made JSGlobalObject linked list per-thread. 16475 * kjs/JSGlobalObject.cpp: 16476 (KJS::JSGlobalObject::~JSGlobalObject): Fixed a bug in linked list handling. It only worked 16477 right if the removed object was the head one! 16478 (KJS::JSGlobalObject::head): Return a per-thread list head. 16479 (KJS::JSGlobalObject::init): Store a reference to per-thread heap. 16480 (KJS::JSGlobalObject::reset): Pass ExecState to functions that need it. 16481 (KJS::JSGlobalObject::tearOffActivation): Ditto. 16482 (KJS::JSGlobalObject::operator new): JSGlobalObject allocation cannot use an ExecState, 16483 so it needs a custom operator new that directly accesses per-thread heap. 16484 16485 * kjs/list.h: 16486 (KJS::List::List): Replaced m_isInMarkSet boolean with an actual pointer to the set, since it 16487 is no longer a single static object. 16488 (KJS::List::~List): Ditto. 16489 * kjs/list.cpp: 16490 (KJS::List::markSet): Removed, this is now stored in Heap. 16491 (KJS::List::markProtectedLists): Take a reference to the list. 16492 (KJS::List::expandAndAppend): Ask the current thread heap for a mark set reference. 16493 16494 * kjs/protect.h: 16495 (KJS::gcProtect): 16496 (KJS::gcUnprotect): 16497 Use the newly added Heap::heap() method to find out which heap the value to be (un)protected 16498 belongs to. 16499 16500 * kjs/property_map.h: Removed unused SavedProperty class. 16501 16502 * JavaScriptCore.exp: 16503 * API/JSBase.cpp: 16504 (JSGarbageCollect): 16505 * API/JSCallbackObjectFunctions.h: 16506 (KJS::::staticFunctionGetter): 16507 * API/JSClassRef.cpp: 16508 (OpaqueJSClass::prototype): 16509 * API/JSObjectRef.cpp: 16510 (JSObjectMake): 16511 (JSObjectMakeFunctionWithCallback): 16512 (JSObjectMakeConstructor): 16513 (JSObjectMakeFunction): 16514 * API/JSValueRef.cpp: 16515 (JSValueMakeNumber): 16516 (JSValueMakeString): 16517 * kjs/array_instance.cpp: 16518 (KJS::ArrayInstance::ArrayInstance): 16519 (KJS::ArrayInstance::lengthGetter): 16520 * kjs/array_object.cpp: 16521 (KJS::arrayProtoFuncToString): 16522 (KJS::arrayProtoFuncToLocaleString): 16523 (KJS::arrayProtoFuncJoin): 16524 (KJS::arrayProtoFuncConcat): 16525 (KJS::arrayProtoFuncPop): 16526 (KJS::arrayProtoFuncPush): 16527 (KJS::arrayProtoFuncShift): 16528 (KJS::arrayProtoFuncSlice): 16529 (KJS::arrayProtoFuncSplice): 16530 (KJS::arrayProtoFuncUnShift): 16531 (KJS::arrayProtoFuncFilter): 16532 (KJS::arrayProtoFuncMap): 16533 (KJS::arrayProtoFuncEvery): 16534 (KJS::arrayProtoFuncForEach): 16535 (KJS::arrayProtoFuncSome): 16536 (KJS::arrayProtoFuncIndexOf): 16537 (KJS::arrayProtoFuncLastIndexOf): 16538 (KJS::ArrayObjectImp::ArrayObjectImp): 16539 (KJS::ArrayObjectImp::construct): 16540 * kjs/bool_object.cpp: 16541 (KJS::BooleanPrototype::BooleanPrototype): 16542 (KJS::booleanProtoFuncToString): 16543 (KJS::BooleanObjectImp::BooleanObjectImp): 16544 (KJS::BooleanObjectImp::construct): 16545 * kjs/date_object.cpp: 16546 (KJS::formatLocaleDate): 16547 (KJS::DatePrototype::DatePrototype): 16548 (KJS::DateObjectImp::DateObjectImp): 16549 (KJS::DateObjectImp::construct): 16550 (KJS::DateObjectImp::callAsFunction): 16551 (KJS::DateObjectFuncImp::DateObjectFuncImp): 16552 (KJS::DateObjectFuncImp::callAsFunction): 16553 (KJS::dateProtoFuncToString): 16554 (KJS::dateProtoFuncToUTCString): 16555 (KJS::dateProtoFuncToDateString): 16556 (KJS::dateProtoFuncToTimeString): 16557 (KJS::dateProtoFuncToLocaleString): 16558 (KJS::dateProtoFuncToLocaleDateString): 16559 (KJS::dateProtoFuncToLocaleTimeString): 16560 (KJS::dateProtoFuncValueOf): 16561 (KJS::dateProtoFuncGetTime): 16562 (KJS::dateProtoFuncGetFullYear): 16563 (KJS::dateProtoFuncGetUTCFullYear): 16564 (KJS::dateProtoFuncToGMTString): 16565 (KJS::dateProtoFuncGetMonth): 16566 (KJS::dateProtoFuncGetUTCMonth): 16567 (KJS::dateProtoFuncGetDate): 16568 (KJS::dateProtoFuncGetUTCDate): 16569 (KJS::dateProtoFuncGetDay): 16570 (KJS::dateProtoFuncGetUTCDay): 16571 (KJS::dateProtoFuncGetHours): 16572 (KJS::dateProtoFuncGetUTCHours): 16573 (KJS::dateProtoFuncGetMinutes): 16574 (KJS::dateProtoFuncGetUTCMinutes): 16575 (KJS::dateProtoFuncGetSeconds): 16576 (KJS::dateProtoFuncGetUTCSeconds): 16577 (KJS::dateProtoFuncGetMilliSeconds): 16578 (KJS::dateProtoFuncGetUTCMilliseconds): 16579 (KJS::dateProtoFuncGetTimezoneOffset): 16580 (KJS::dateProtoFuncSetTime): 16581 (KJS::setNewValueFromTimeArgs): 16582 (KJS::setNewValueFromDateArgs): 16583 (KJS::dateProtoFuncSetYear): 16584 (KJS::dateProtoFuncGetYear): 16585 * kjs/error_object.cpp: 16586 (KJS::ErrorPrototype::ErrorPrototype): 16587 (KJS::errorProtoFuncToString): 16588 (KJS::ErrorObjectImp::ErrorObjectImp): 16589 (KJS::ErrorObjectImp::construct): 16590 (KJS::NativeErrorPrototype::NativeErrorPrototype): 16591 (KJS::NativeErrorImp::NativeErrorImp): 16592 (KJS::NativeErrorImp::construct): 16593 * kjs/function.cpp: 16594 (KJS::FunctionImp::lengthGetter): 16595 (KJS::FunctionImp::construct): 16596 (KJS::Arguments::Arguments): 16597 (KJS::ActivationImp::createArgumentsObject): 16598 (KJS::encode): 16599 (KJS::decode): 16600 (KJS::globalFuncParseInt): 16601 (KJS::globalFuncParseFloat): 16602 (KJS::globalFuncEscape): 16603 (KJS::globalFuncUnescape): 16604 (KJS::PrototypeFunction::PrototypeFunction): 16605 (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction): 16606 * kjs/function_object.cpp: 16607 (KJS::FunctionPrototype::FunctionPrototype): 16608 (KJS::functionProtoFuncToString): 16609 (KJS::FunctionObjectImp::FunctionObjectImp): 16610 (KJS::FunctionObjectImp::construct): 16611 * kjs/internal.cpp: 16612 (KJS::StringImp::toObject): 16613 * kjs/internal.h: 16614 (KJS::StringImp::StringImp): 16615 (KJS::NumberImp::operator new): 16616 * kjs/lookup.h: 16617 (KJS::staticFunctionGetter): 16618 (KJS::cacheGlobalObject): 16619 * kjs/math_object.cpp: 16620 (KJS::MathObjectImp::getValueProperty): 16621 (KJS::mathProtoFuncAbs): 16622 (KJS::mathProtoFuncACos): 16623 (KJS::mathProtoFuncASin): 16624 (KJS::mathProtoFuncATan): 16625 (KJS::mathProtoFuncATan2): 16626 (KJS::mathProtoFuncCeil): 16627 (KJS::mathProtoFuncCos): 16628 (KJS::mathProtoFuncExp): 16629 (KJS::mathProtoFuncFloor): 16630 (KJS::mathProtoFuncLog): 16631 (KJS::mathProtoFuncMax): 16632 (KJS::mathProtoFuncMin): 16633 (KJS::mathProtoFuncPow): 16634 (KJS::mathProtoFuncRandom): 16635 (KJS::mathProtoFuncRound): 16636 (KJS::mathProtoFuncSin): 16637 (KJS::mathProtoFuncSqrt): 16638 (KJS::mathProtoFuncTan): 16639 * kjs/nodes.cpp: 16640 (KJS::Node::handleException): 16641 (KJS::NumberNode::evaluate): 16642 (KJS::StringNode::evaluate): 16643 (KJS::ArrayNode::evaluate): 16644 (KJS::PostIncResolveNode::evaluate): 16645 (KJS::PostIncLocalVarNode::evaluate): 16646 (KJS::PostDecResolveNode::evaluate): 16647 (KJS::PostDecLocalVarNode::evaluate): 16648 (KJS::PostDecLocalVarNode::inlineEvaluateToNumber): 16649 (KJS::PostIncBracketNode::evaluate): 16650 (KJS::PostDecBracketNode::evaluate): 16651 (KJS::PostIncDotNode::evaluate): 16652 (KJS::PostDecDotNode::evaluate): 16653 (KJS::typeStringForValue): 16654 (KJS::LocalVarTypeOfNode::evaluate): 16655 (KJS::TypeOfResolveNode::evaluate): 16656 (KJS::TypeOfValueNode::evaluate): 16657 (KJS::PreIncLocalVarNode::evaluate): 16658 (KJS::PreIncResolveNode::evaluate): 16659 (KJS::PreDecLocalVarNode::evaluate): 16660 (KJS::PreDecResolveNode::evaluate): 16661 (KJS::PreIncConstNode::evaluate): 16662 (KJS::PreDecConstNode::evaluate): 16663 (KJS::PostIncConstNode::evaluate): 16664 (KJS::PostDecConstNode::evaluate): 16665 (KJS::PreIncBracketNode::evaluate): 16666 (KJS::PreDecBracketNode::evaluate): 16667 (KJS::PreIncDotNode::evaluate): 16668 (KJS::PreDecDotNode::evaluate): 16669 (KJS::NegateNode::evaluate): 16670 (KJS::BitwiseNotNode::evaluate): 16671 (KJS::MultNode::evaluate): 16672 (KJS::DivNode::evaluate): 16673 (KJS::ModNode::evaluate): 16674 (KJS::addSlowCase): 16675 (KJS::add): 16676 (KJS::AddNumbersNode::evaluate): 16677 (KJS::AddStringsNode::evaluate): 16678 (KJS::AddStringLeftNode::evaluate): 16679 (KJS::AddStringRightNode::evaluate): 16680 (KJS::SubNode::evaluate): 16681 (KJS::LeftShiftNode::evaluate): 16682 (KJS::RightShiftNode::evaluate): 16683 (KJS::UnsignedRightShiftNode::evaluate): 16684 (KJS::BitXOrNode::evaluate): 16685 (KJS::BitOrNode::evaluate): 16686 (KJS::valueForReadModifyAssignment): 16687 (KJS::ForInNode::execute): 16688 (KJS::TryNode::execute): 16689 (KJS::FuncDeclNode::makeFunction): 16690 (KJS::FuncExprNode::evaluate): 16691 * kjs/number_object.cpp: 16692 (KJS::NumberPrototype::NumberPrototype): 16693 (KJS::numberProtoFuncToString): 16694 (KJS::numberProtoFuncToLocaleString): 16695 (KJS::numberProtoFuncToFixed): 16696 (KJS::numberProtoFuncToExponential): 16697 (KJS::numberProtoFuncToPrecision): 16698 (KJS::NumberObjectImp::NumberObjectImp): 16699 (KJS::NumberObjectImp::getValueProperty): 16700 (KJS::NumberObjectImp::construct): 16701 (KJS::NumberObjectImp::callAsFunction): 16702 * kjs/object.cpp: 16703 (KJS::JSObject::defineGetter): 16704 (KJS::JSObject::defineSetter): 16705 (KJS::JSObject::putDirect): 16706 (KJS::Error::create): 16707 * kjs/object.h: 16708 * kjs/object_object.cpp: 16709 (KJS::ObjectPrototype::ObjectPrototype): 16710 (KJS::objectProtoFuncToLocaleString): 16711 (KJS::objectProtoFuncToString): 16712 (KJS::ObjectObjectImp::ObjectObjectImp): 16713 (KJS::ObjectObjectImp::construct): 16714 * kjs/regexp_object.cpp: 16715 (KJS::RegExpPrototype::RegExpPrototype): 16716 (KJS::regExpProtoFuncToString): 16717 (KJS::RegExpImp::getValueProperty): 16718 (KJS::RegExpObjectImp::RegExpObjectImp): 16719 (KJS::RegExpObjectImp::arrayOfMatches): 16720 (KJS::RegExpObjectImp::getBackref): 16721 (KJS::RegExpObjectImp::getLastParen): 16722 (KJS::RegExpObjectImp::getLeftContext): 16723 (KJS::RegExpObjectImp::getRightContext): 16724 (KJS::RegExpObjectImp::getValueProperty): 16725 (KJS::RegExpObjectImp::createRegExpImp): 16726 * kjs/regexp_object.h: 16727 * kjs/string_object.cpp: 16728 (KJS::StringInstance::StringInstance): 16729 (KJS::StringInstance::lengthGetter): 16730 (KJS::StringInstance::indexGetter): 16731 (KJS::stringInstanceNumericPropertyGetter): 16732 (KJS::StringPrototype::StringPrototype): 16733 (KJS::replace): 16734 (KJS::stringProtoFuncCharAt): 16735 (KJS::stringProtoFuncCharCodeAt): 16736 (KJS::stringProtoFuncConcat): 16737 (KJS::stringProtoFuncIndexOf): 16738 (KJS::stringProtoFuncLastIndexOf): 16739 (KJS::stringProtoFuncMatch): 16740 (KJS::stringProtoFuncSearch): 16741 (KJS::stringProtoFuncReplace): 16742 (KJS::stringProtoFuncSlice): 16743 (KJS::stringProtoFuncSplit): 16744 (KJS::stringProtoFuncSubstr): 16745 (KJS::stringProtoFuncSubstring): 16746 (KJS::stringProtoFuncToLowerCase): 16747 (KJS::stringProtoFuncToUpperCase): 16748 (KJS::stringProtoFuncToLocaleLowerCase): 16749 (KJS::stringProtoFuncToLocaleUpperCase): 16750 (KJS::stringProtoFuncLocaleCompare): 16751 (KJS::stringProtoFuncBig): 16752 (KJS::stringProtoFuncSmall): 16753 (KJS::stringProtoFuncBlink): 16754 (KJS::stringProtoFuncBold): 16755 (KJS::stringProtoFuncFixed): 16756 (KJS::stringProtoFuncItalics): 16757 (KJS::stringProtoFuncStrike): 16758 (KJS::stringProtoFuncSub): 16759 (KJS::stringProtoFuncSup): 16760 (KJS::stringProtoFuncFontcolor): 16761 (KJS::stringProtoFuncFontsize): 16762 (KJS::stringProtoFuncAnchor): 16763 (KJS::stringProtoFuncLink): 16764 (KJS::StringObjectImp::StringObjectImp): 16765 (KJS::StringObjectImp::construct): 16766 (KJS::StringObjectImp::callAsFunction): 16767 (KJS::StringObjectFuncImp::StringObjectFuncImp): 16768 (KJS::StringObjectFuncImp::callAsFunction): 16769 * kjs/string_object.h: 16770 (KJS::StringInstanceThatMasqueradesAsUndefined::StringInstanceThatMasqueradesAsUndefined): 16771 * kjs/testkjs.cpp: 16772 (GlobalObject::GlobalObject): 16773 (functionGC): 16774 (functionRun): 16775 (functionReadline): 16776 (kjsmain): 16777 * kjs/ustring.h: 16778 * kjs/value.cpp: 16779 (KJS::JSCell::operator new): 16780 (KJS::jsString): 16781 (KJS::jsOwnedString): 16782 (KJS::jsNumberCell): 16783 * kjs/value.h: 16784 (KJS::jsNaN): 16785 (KJS::jsNumber): 16786 (KJS::jsNumberFromAnd): 16787 (KJS::JSCell::marked): 16788 (KJS::JSCell::mark): 16789 (KJS::JSValue::toJSNumber): 16790 Removed collectOnMainThreadOnly, as this is the only way to collect now. Replaced calls to 16791 static Collector methods with calls to per-thread Heap ones. 16792 16793 2008-05-02 Dan Bernstein <mitz (a] apple.com> 16794 16795 Reviewed by Maciej Stachowiak. 16796 16797 - Mac build fix 16798 16799 * wtf/StrHash.h: Added header guards and removed #include "config.h". 16800 16801 2008-05-01 Ada Chan <adachan (a] apple.com> 16802 16803 #include <wtf/StrHash.h> in identifier.cpp. 16804 16805 Reviewed by Maciej. 16806 16807 * kjs/identifier.cpp: 16808 16809 2008-05-01 Steve Falkenburg <sfalken (a] apple.com> 16810 16811 Build fix. 16812 16813 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 16814 16815 2008-05-01 Sam Weinig <sam (a] webkit.org> 16816 16817 Fix build. 16818 16819 * JavaScriptCore.xcodeproj/project.pbxproj: 16820 16821 2008-05-01 Kevin McCullough <kmccullough (a] apple.com> 16822 16823 Reviewed by Darin. 16824 16825 <rdar://problem/5770054> JavaScript profiler (10928) 16826 - Fix "sample" output so that it can be imported into Instruments 16827 - Also keep track of number of times a function is profiled. 16828 16829 * JavaScriptCore.xcodeproj/project.pbxproj: Add StrHash.h which needed 16830 to be pulled out of identifier.cpp so that it could be used by the 16831 profiler and identifiers. 16832 * kjs/identifier.cpp: Ditto. 16833 * profiler/FunctionCallProfile.cpp: 16834 (KJS::FunctionCallProfile::printDataInspectorStyle): Inspector style 16835 printing should show microseconds. 16836 (KJS::FunctionCallProfile::printDataSampleStyle): Sample style printing 16837 now counts the number of times a function is in the stack tree and does 16838 not print microseconds since that does not make sense for a sampler. 16839 * profiler/FunctionCallProfile.h: Keep track of number of times a 16840 function is profiled. 16841 (KJS::FunctionCallProfile::numberOfCalls): 16842 * profiler/Profiler.cpp: 16843 (KJS::functionNameCountPairComparator): Comparator for sort function in 16844 printDataSampleStyle. 16845 (KJS::Profiler::printDataSampleStyle): Print the number of times that a 16846 function is listed in the stack tree in order of most times listed. 16847 * wtf/HashCountedSet.h: Added copyToVector since it didn't exist and is 16848 a more standard way to copy a HashSet to a Vector. I added on variant 16849 that takes a pair as the Vector's type and so the HashCountedSet simply 16850 fills in that pair with its internal pair, and another variant that 16851 takes a Vector of the type of the HashCountedSet and only fills in the 16852 Vector with the first element of the pair. 16853 (WTF::copyToVector): 16854 * wtf/StrHash.h: Added. 16855 (WTF::): 16856 16857 2008-04-29 David Kilzer <ddkilzer (a] apple.com> 16858 16859 BUILD FIX for ENABLE(DASHBOARD_SUPPORT) 16860 16861 * wtf/Platform.h: Defined ENABLE(DASHBOARD_SUPPORT) to 1 only for 16862 PLATFORM(MAC) and PLATFORM(WIN). Changed default to 0 for other 16863 ports. 16864 16865 2008-04-29 Greg Bolsinga <bolsinga (a] apple.com> 16866 16867 Reviewed by Darin. 16868 16869 Wrapped Dashboard code with ENABLE(DASHBOARD_SUPPORT) 16870 16871 * wtf/Platform.h: 16872 16873 2008-04-29 Kevin McCullough <kmccullough (a] apple.com> 16874 16875 Reviewed by Geoff. 16876 16877 -<rdar://problem/5770054> JavaScript profiler (10928) 16878 -Keep call count. 16879 16880 * profiler/FunctionCallProfile.cpp: 16881 (KJS::FunctionCallProfile::FunctionCallProfile): 16882 (KJS::FunctionCallProfile::didExecute): Implements call count and fixed a bug where a stackIndex 16883 of 0 was causing the assert to be hit. 16884 (KJS::FunctionCallProfile::stopProfiling): 16885 (KJS::FunctionCallProfile::endAndRecordCall): 16886 * profiler/FunctionCallProfile.h: 16887 16888 2008-04-29 Simon Hausmann <hausmann (a] webkit.org> 16889 16890 Qt/Windows build fix. The externally declared hash tables are actually 16891 declared const and the const is mangled in the symbol name, so when 16892 importing they also need to be marked const. 16893 16894 When compiling without MULTIPLE_THREADS use a const HashTable& 16895 instead of a HashTable& in ThreadClassInfoHashTables to avoid 16896 initializing the latter with a const reference. 16897 16898 * kjs/JSGlobalObject.cpp: 16899 16900 2008-04-28 Alexey Proskuryakov <ap (a] webkit.org> 16901 16902 Windows build fix. 16903 16904 * kjs/ExecState.h: For whatever reason, MSVC couldn't generate a default constructor for 16905 a struct that had a "const List" member. Removing the const qulifier makes the problem go away. 16906 16907 2008-04-28 Alexey Proskuryakov <ap (a] webkit.org> 16908 16909 Reviewed by Darin. 16910 16911 Fix run-webkit-tests --threading 16912 and provisionally fix <https://bugs.webkit.org/show_bug.cgi?id=18661> 16913 Proxy server issue in Sunday's Nightly 16914 16915 Changed ClassInfo objects for built-in objects to hold a getter function returning 16916 a per-thread instance. This makes it safe to share these ClassInfo objects between threads - 16917 and these are the only ones that need to be shared. 16918 16919 * kjs/lexer.cpp: 16920 (KJS::Lexer::Lexer): 16921 (KJS::Lexer::~Lexer): 16922 * kjs/lexer.h: 16923 Made mainTable a member of Lexer, so that it no longer needs to be shared between threads. 16924 16925 * kjs/object.cpp: 16926 (KJS::JSObject::deleteProperty): 16927 (KJS::JSObject::findPropertyHashEntry): 16928 (KJS::JSObject::propertyIsEnumerable): 16929 (KJS::JSObject::getPropertyAttributes): 16930 (KJS::JSObject::getPropertyNames): 16931 * kjs/object.h: 16932 (KJS::ClassInfo::propHashTable): 16933 Added a new classPropHashTableGetterFunction field to ClassInfo. If it is non-zero, the 16934 static table is not used. 16935 16936 * kjs/JSGlobalObject.cpp: 16937 (KJS::ThreadClassInfoHashTables::ThreadClassInfoHashTables): This new class holds per-thread 16938 HashTables for built-in classes. The old static structs are copied to create per-thread 16939 instances. 16940 (KJS::JSGlobalObject::threadClassInfoHashTables): An accessor/initializer for the above. 16941 (KJS::JSGlobalObject::init): Copy per-thread data into a single structure for faster access. 16942 Also, construct globalExec. 16943 (KJS::JSGlobalObject::reset): Adapted for globalExec now being an OwnPtr. 16944 (KJS::JSGlobalObject::mark): Ditto. 16945 (KJS::JSGlobalObject::globalExec): Ditto. 16946 * kjs/JSGlobalObject.h: 16947 (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Made JSGlobalObject::JSGlobalObjectData::globalExec an OwnPtr, so that it can 16948 be initialized from JSGlobalObject::init() after them. Otherwise, ExecState constructor was 16949 trying to access half-initialized JSGlobalObject to make its own copy of these table 16950 references, and failed. 16951 (KJS::JSGlobalObject::JSGlobalObject): Pass "this" value to init() to create globalExec. 16952 (KJS::JSGlobalObject::perThreadData): An accessor for per-thread data. 16953 16954 * kjs/ExecState.cpp: 16955 (KJS::ExecState::ExecState): 16956 * kjs/ExecState.h: 16957 (KJS::ExecState::propertyNames): 16958 (KJS::ExecState::emptyList): 16959 (KJS::ExecState::arrayTable): 16960 (KJS::ExecState::dateTable): 16961 (KJS::ExecState::mathTable): 16962 (KJS::ExecState::numberTable): 16963 (KJS::ExecState::RegExpImpTable): 16964 (KJS::ExecState::RegExpObjectImpTable): 16965 (KJS::ExecState::stringTable): 16966 * kjs/ExecStateInlines.h: 16967 (KJS::ExecState::ExecState): 16968 Each ExecState holds its own reference to per-thread data, for even faster access. Moved 16969 m_emptyList and m_propertyNames to the same structure, making ExecState faster to construct 16970 and take less space on the stack. 16971 16972 * kjs/InitializeThreading.cpp: (KJS::initializeThreading): Initialize thread-static data 16973 added to JSGlobalObject. 16974 16975 * API/JSCallbackConstructor.cpp: 16976 * API/JSCallbackFunction.cpp: 16977 * API/JSCallbackObject.cpp: 16978 * JavaScriptCore.exp: 16979 * kjs/JSVariableObject.cpp: 16980 (KJS::JSVariableObject::getPropertyAttributes): 16981 * kjs/JSVariableObject.h: 16982 * kjs/array_instance.cpp: 16983 * kjs/array_object.cpp: 16984 (KJS::ArrayPrototype::getOwnPropertySlot): 16985 * kjs/bool_object.cpp: 16986 * kjs/create_hash_table: 16987 * kjs/date_object.cpp: 16988 (KJS::DatePrototype::getOwnPropertySlot): 16989 (KJS::DateObjectImp::DateObjectImp): 16990 * kjs/error_object.cpp: 16991 * kjs/function.cpp: 16992 * kjs/function_object.cpp: 16993 (KJS::FunctionPrototype::FunctionPrototype): 16994 * kjs/internal.cpp: 16995 * kjs/lookup.h: 16996 * kjs/math_object.cpp: 16997 (KJS::MathObjectImp::getOwnPropertySlot): 16998 * kjs/number_object.cpp: 16999 (KJS::NumberObjectImp::getOwnPropertySlot): 17000 * kjs/object_object.cpp: 17001 (KJS::ObjectPrototype::ObjectPrototype): 17002 * kjs/regexp_object.cpp: 17003 (KJS::RegExpPrototype::RegExpPrototype): 17004 (KJS::RegExpImp::getOwnPropertySlot): 17005 (KJS::RegExpImp::put): 17006 (KJS::RegExpObjectImp::getOwnPropertySlot): 17007 (KJS::RegExpObjectImp::put): 17008 * kjs/string_object.cpp: 17009 (KJS::StringPrototype::getOwnPropertySlot): 17010 Adjust for the above changes. 17011 17012 2008-04-28 Darin Adler <darin (a] apple.com> 17013 17014 Reviewed by Adam. 17015 17016 - make sure RefPtr's default hash doesn't ref/deref when computing the hash 17017 - remove remnants of the hash table storage type optimization 17018 17019 * wtf/HashFunctions.h: Used "using" to get the hash and equal functions 17020 from PtrHash<P*> into PtrHash<RefPtr<P>>. 17021 17022 * wtf/HashMap.h: Replaced uses of PairBaseHashTraits with PairHashTraits. 17023 Eliminated storage-related typedefs. Removed constructor, destructor, 17024 copy constructor, and destructor since the compiler-generated ones are 17025 fine. Removed refAll and derefAll. Took out unnnecessary typecasts. 17026 Removed use of RefCounter. 17027 17028 * wtf/HashSet.h: Eliminated storage-related typedefs. Removed constructor, 17029 destructor, copy constructor, and destructor since the compiler-generated 17030 ones are fine. Removed refAll and derefAll. Removed unneeded template 17031 arguents from HashSetTranslatorAdapter. Eliminated unneeded HashSetTranslator 17032 template. 17033 17034 * wtf/HashTable.h: Tweaked formatting. Removed NeedsRef, RefCounterBase, 17035 RefCounter, HashTableRefCounterBase, HashTableRefCounter, and Assigner 17036 class templates. 17037 17038 * wtf/HashTraits.h: Removed StorageTraits, needsRef, PairBaseHashTraits, 17039 and HashKeyStorageTraits. 17040 17041 * wtf/RefPtrHashMap.h: Made all the same fixes as in HashMap. Also made 17042 the corresponding changes to RefPtrHashMapRawKeyTranslator. 17043 17044 2008-04-28 Darin Adler <darin (a] apple.com> 17045 17046 Reviewed by Mitz. 17047 17048 - fix assertion hit every time you view www.apple.com 17049 17050 * kjs/PropertyNameArray.cpp: 17051 (KJS::PropertyNameArray::add): Changed assertion to allow null and empty strings. 17052 Now to find out why we have a property named "" and if that's a bug! 17053 17054 2008-04-27 Mark Rowe <mrowe (a] apple.com> 17055 17056 Reviewed by Maciej Stachowiak. 17057 17058 Fix crash inside PtrHash::hash when loading a page. 17059 17060 * wtf/HashFunctions.h: Explicitly use the superclass implementation of hash to avoid infinite recursion. 17061 17062 2008-04-27 Darin Adler <darin (a] apple.com> 17063 17064 Reviewed by Maciej. 17065 17066 - fix <rdar://problem/5657459> REGRESSION: JavaScriptCore no longer builds with 17067 GCC 4.2 due to pointer aliasing warnings 17068 17069 Fix this by removing the HashTable optimizations that allowed us to share a back end 17070 implementation between hash tables with integers, pointers, RefPtr, and String objects 17071 as keys. The way it worked was incompatible with strict aliasing. 17072 17073 This increases code size. On Mac OS X we'll have to regenerate .order files to avoid 17074 slowing down Safari startup times. 17075 17076 This creates a slight slowdown in SunSpider, mitigated by the following four speedups: 17077 17078 - speed up array put slightly by moving a branch (was already done for get) 17079 17080 - speed up symbol table access by adding a function named inlineGet to HashMap 17081 and using that in symbolTableGet/Put 17082 17083 - speed up PropertyNameArray creation by reducing the amount of reference count 17084 churn and uniqueness checking when adding names and not doing any allocation at 17085 all when building small arrays 17086 17087 - speed up conversion of strings to floating point numbers by eliminating the 17088 malloc/free of the buffer for the ASCII copy of the string; a way to make 17089 things even faster would be to change strtod to take a UTF-16 string 17090 17091 Note that there is considerable unused complexity now in HashSet/Map/Table to support 17092 "storage types", which is no longer used. Will do in a separate patch. 17093 17094 * API/JSCallbackObjectFunctions.h: 17095 (KJS::JSCallbackObject<Base>::getPropertyNames): Removed explicit cast to Identifier to 17096 take advantage of the new PropertyNameArray::add overload and avoid reference count churn. 17097 * API/JSObjectRef.cpp: 17098 (JSPropertyNameAccumulatorAddName): Ditto. 17099 * JavaScriptCore.exp: Updated PropertyNameArray::add entry point name. 17100 17101 * kjs/JSVariableObject.cpp: Removed now-unneeded IdentifierRepHashTraits::nullRepPtr 17102 definition (see below). 17103 (KJS::JSVariableObject::getPropertyNames): Removed explicit cast to Identifier. 17104 17105 * kjs/JSVariableObject.h: 17106 (KJS::JSVariableObject::symbolTableGet): Use inlineGet for speed. Also changed to do 17107 early exit instead of nesting the body inside an if. 17108 (KJS::JSVariableObject::symbolTablePut): Ditto. 17109 17110 * kjs/PropertyNameArray.cpp: 17111 (KJS::PropertyNameArray::add): Changed implementation to take a raw pointer instead of 17112 a reference to an identifier. Do uniqueness checking by searching the vector when the 17113 vector is short, only building the set once the vector is large enough. 17114 17115 * kjs/PropertyNameArray.h: Added an overload of add for a raw pointer, and made the old 17116 add function call that one. Added an addKnownUnique function for use when the new 17117 name is known to be different from any other in the array. Changed the vector to have 17118 an inline capacity of 20. 17119 17120 * kjs/SymbolTable.h: Changed IdentifierRepHash to inherit from the default hash for 17121 a RefPtr so we don't have to define so much. Added an overload of the hash function for 17122 a raw pointer as required by the new RefPtrHashMap. Got rid of the now-unneeded 17123 IdentifierRepHashTraits -- the default traits now work fine. Added a definition of 17124 empthValueIsZero to SymbolTableIndexHashTraits; not having it was incorrect, but harmless. 17125 17126 * kjs/array_instance.cpp: 17127 (KJS::ArrayInstance::put): Move the maxArrayIndex check inside the branch that checks 17128 the index against the length, as done in the get function. 17129 17130 * kjs/function.cpp: 17131 (KJS::globalFuncKJSPrint): Changed to use the new getCString instead of cstring. 17132 17133 * kjs/internal.cpp: Removed printInfo debugging function, a client of cstring. 17134 If we need a debugging function we can easily make a better one and we haven't 17135 used this one in a long time. 17136 * kjs/internal.h: Ditto. 17137 17138 * kjs/object.cpp: 17139 (KJS::JSObject::getPropertyNames): Removed explicit cast to Identifier. 17140 * kjs/property_map.cpp: 17141 (KJS::PropertyMap::getEnumerablePropertyNames): Ditto. Also added a special case for 17142 the case where the propertyNames array is empty -- in that case we know we're adding 17143 a set of names that are non-overlapping so we can use addKnownUnique. 17144 * kjs/ustring.cpp: 17145 (KJS::UString::getCString): Replaces cstring. Puts the C string into a CStringBuffer, 17146 which is a char Vector with an inline capacity. Also returns a boolean to indicate if 17147 the converion was lossy, which eliminates the need for a separate is8Bit call. 17148 (KJS::UString::toDouble): Changed to call getCString instead of cstring. 17149 * kjs/ustring.h: Ditto. 17150 17151 * wtf/HashFunctions.h: Overload the hash and equal functions for RefPtr's default 17152 hash to take raw pointers. This works with the changes to RefPtrHashMap to avoid 17153 introducing refcount churn. 17154 17155 * wtf/HashMap.h: Removed special code to convert the deleted value to the empty value 17156 when writing a new value into the map. This is now handled elsewhere. 17157 (WTF::HashMap::get): Removed code that checks for an empty hash table before calling 17158 HashTable::lookup; it's slightly more efficient to do this check inside lookup. 17159 17160 * wtf/HashTable.h: 17161 (WTF::HashTable::isDeletedBucket): Changed to use isDeletedValue instead of using 17162 deletedValue and the equality operator. 17163 (WTF::HashTable::deleteBucket): Changed to use constructDeletedValue instead of 17164 using deletedValue and the assignment operator. 17165 (WTF::HashTable::checkKey): Added. Factors out the check for values that are empty 17166 or deleted keys that's used in various functions below. 17167 (WTF::HashTable::lookup): Changed to use checkKey, check for a 0 table, and also 17168 made public for use by RefPtrHashMap. 17169 (WTF::HashTable::lookupForWriting): Changed to use checkKey. 17170 (WTF::HashTable::fullLookupForWriting): Changed to use checkKey. 17171 (WTF::HashTable::add): Changed to use checkKey, and call initializeBucket on a 17172 deleted bucket before putting a new entry into it. 17173 (WTF::HashTable::addPassingHashCode): Ditto. 17174 (WTF::HashTable::deallocateTable): Check isDeletedBucket before calling ~ValueType. 17175 17176 * wtf/HashTraits.h: Got ridd of all the HashTraits specialization for the integer 17177 types, since GeneicHashTraitsBase already deals with integers separately. Put the 17178 deleted value support into GenericHashTraitsBase. Changed FloatHashTraits to 17179 inherit from GenericHashTraits, and define construct/isDeletedValue rather than 17180 deletedValue. Removed the ref and deref functions from RefPtr's HashTraits, and 17181 defined construct/isDeletedValue. Eliminated DeletedValueAssigner. Changed 17182 PairHashTraits to define construct/isDeletedValue, and also merged 17183 PairBaseHashTraits in with PairHashTraits. Got rid of all specialization of 17184 HashKeyStorageTraits. We'll remove that, and the needsRef data member, later. 17185 17186 * wtf/RefPtr.h: Added HashTableDeletedValueType, an enum type with a single value, 17187 HashTableDeletedValue. Used that type to make a new constructor to construct 17188 deleted values and also added an isHashTableDeletedValue function. 17189 17190 * wtf/RefPtrHashMap.h: Added RefPtrHashMapRawKeyTranslator and used it to implement 17191 the raw pointer functions. This is a way to continue to avoid refcount thrash. We 17192 can't use the old way because it depended on the underlying map using a non-RefPtr 17193 type. 17194 (WTF::HashMap::find): Use find with RefPtrHashMapRawKeyTranslator. 17195 (WTF::HashMap::contains): Use contains with RefPtrHashMapRawKeyTranslator. 17196 (WTF::HashMap::inlineAdd): Use add with RefPtrHashMapRawKeyTranslator. 17197 (WTF::HashMap::get): Removed code that checks for an empty hash table before calling 17198 HashTable::lookup; it's slightly more efficient to do this check inside lookup. 17199 (WTF::HashMap::inlineGet): Added. Just like get, but marked inline for use in the 17200 symbol table code. 17201 17202 2008-04-25 Sam Weinig <sam (a] webkit.org> 17203 17204 Rubber-stamped by Mark Rowe. 17205 17206 Remove SavedBuiltins and SavedProperties classes and the methods used to 17207 save data to them. The CachedPage now stores a the JSGlobalObject in full. 17208 17209 * JavaScriptCore.exp: 17210 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 17211 * JavaScriptCore.xcodeproj/project.pbxproj: 17212 * kjs/JSGlobalObject.cpp: 17213 * kjs/JSGlobalObject.h: 17214 * kjs/JSVariableObject.cpp: 17215 * kjs/JSVariableObject.h: 17216 (KJS::JSVariableObject::localStorage): 17217 * kjs/SavedBuiltins.h: Removed. 17218 * kjs/object.h: 17219 * kjs/property_map.cpp: 17220 * kjs/property_map.h: 17221 17222 2008-04-25 Mark Rowe <mrowe (a] apple.com> 17223 17224 Rubber-stamped by Sam Weinig. 17225 17226 Add some content to an empty ICU header file to prevent verification errors. 17227 17228 * icu/unicode/utf_old.h: 17229 17230 2008-04-25 David Kilzer <ddkilzer (a] apple.com> 17231 17232 <rdar://problem/5819422> REGRESSION: Wrong line number passed to -willLeaveCallFrame 17233 17234 Patch by George Dicker and Michael Kahl. Reviewed by Darin. 17235 17236 When -[NSObject(WebScriptDebugDelegate) webView:willLeaveCallFrame:sourceId:line:forWebFrame:] 17237 is invoked, the first line number of the function is returned instead of the last 17238 line number. This regressed in r28458. 17239 17240 * kjs/nodes.cpp: 17241 (KJS::FunctionBodyNodeWithDebuggerHooks::execute): Pass lastLine() instead of lineNo() 17242 when calling Debugger::returnEvent(). 17243 17244 2008-04-25 Darin Adler <darin (a] apple.com> 17245 17246 Done with Stephanie Lewis. 17247 17248 * JavaScriptCore.xcodeproj/project.pbxproj: Prepare for compilation with gcc 4.2 by 17249 adding -fno-strict-aliasing to CollatorICU.cpp. 17250 17251 2008-04-24 Sam Weinig <sam (a] webkit.org> 17252 17253 Reviewed by Geoffrey Garen. 17254 17255 Add a #define to easily enable collecting on every allocation to aid 17256 debugging GC bugs. 17257 17258 * kjs/collector.cpp: 17259 (KJS::Collector::heapAllocate): 17260 17261 2008-04-24 Kevin McCullough <kmccullough (a] apple.com> 17262 17263 Reviewed by Adam and Sam. 17264 17265 -<rdar://problem/5770054> JavaScript profiler (10928) 17266 -Only profile the page group that starts profiling to avoid profiling 17267 tools that shouldn't be profiled unless explicitly requested to. 17268 17269 * JavaScriptCore.exp: Export new signature. 17270 * kjs/JSGlobalObject.cpp: Add unique identifiers to the JSGlobalObject. 17271 (KJS::JSGlobalObject::init): 17272 * kjs/JSGlobalObject.h: Ditto. 17273 (KJS::JSGlobalObject::setPageGroupIdentifier): 17274 (KJS::JSGlobalObject::pageGroupIdentifier): 17275 * profiler/Profiler.cpp: Check the identifier of the page group of the 17276 lexical global exec state and only profile if it matches the given page 17277 group identifier. 17278 (KJS::Profiler::startProfiling): 17279 (KJS::Profiler::willExecute): 17280 (KJS::Profiler::didExecute): 17281 * profiler/Profiler.h: Ditto. 17282 (KJS::Profiler::Profiler): 17283 17284 2008-04-24 Julien Chaffraix <jchaffraix (a] webkit.org> 17285 17286 Reviewed by Simon. 17287 17288 Bug 15940: Implement threading API for Qt 17289 https://bugs.webkit.org/show_bug.cgi?id=15940 17290 17291 Original patch by Justin Haygood, tweaked by me. 17292 17293 * JavaScriptCore.pri: 17294 * wtf/ThreadingQt.cpp: Added. 17295 (WTF::threadMapMutex): 17296 (WTF::threadMap): 17297 (WTF::establishIdentifierForThread): 17298 (WTF::clearThreadForIdentifier): 17299 (WTF::threadForIdentifier): 17300 (WTF::initializeThreading): 17301 (WTF::ThreadPrivate::getReturnValue): 17302 (WTF::ThreadPrivate::ThreadPrivate): 17303 (WTF::ThreadPrivate::run): 17304 (WTF::createThread): 17305 (WTF::waitForThreadCompletion): return !res to return 17306 0 on success (to match the pthreads implementation). 17307 (WTF::detachThread): 17308 (WTF::identifierByQthreadHandle): 17309 (WTF::currentThread): 17310 (WTF::Mutex::Mutex): 17311 (WTF::Mutex::~Mutex): 17312 (WTF::Mutex::lock): 17313 (WTF::Mutex::tryLock): 17314 (WTF::Mutex::unlock): 17315 (WTF::ThreadCondition::ThreadCondition): 17316 (WTF::ThreadCondition::~ThreadCondition): 17317 (WTF::ThreadCondition::wait): 17318 (WTF::ThreadCondition::timedWait): 17319 (WTF::ThreadCondition::signal): 17320 17321 2008-04-22 Darin Adler <darin (a] apple.com> 17322 17323 Reviewed by Anders. 17324 17325 - simplify use of HashTraits to prepare for some upcoming hash table changes 17326 17327 * kjs/SymbolTable.h: Made SymbolTableIndexHashTraits derive from HashTraits<size_t> 17328 and specialize only the empty value. 17329 17330 2008-04-23 Holger Hans Peter Freyther <zecke (a] selfish.org> 17331 17332 Reviewed by Simon. 17333 17334 Removed the #define for USE_SYSTEM_MALLOC that we set in WebKit.pri 17335 already. 17336 17337 * wtf/Platform.h: 17338 17339 2008-04-21 Kevin McCullough <kmccullough (a] apple.com> 17340 17341 Reviewed by Adam. 17342 17343 <rdar://problem/5770054> JavaScript profiler (10928) 17344 - When stop profiling is called we need to stop the timers on all the 17345 functions that are still running. 17346 17347 * profiler/FunctionCallProfile.cpp: 17348 (KJS::FunctionCallProfile::didExecute): 17349 (KJS::FunctionCallProfile::stopProfiling): 17350 * profiler/FunctionCallProfile.h: 17351 * profiler/Profiler.cpp: 17352 (KJS::Profiler::stopProfiling): 17353 17354 2008-04-21 Alexey Proskuryakov <ap (a] webkit.org> 17355 17356 Reviewed by Darin. 17357 17358 Move collector main thread initialization from WebKit/win to KJS::initializeThreading. 17359 17360 * kjs/InitializeThreading.cpp: 17361 (KJS::initializeThreading): 17362 17363 2008-04-21 Adam Roben <aroben (a] apple.com> 17364 17365 MSVC build fix 17366 17367 Reviewed by Alexey Proskuryakov. 17368 17369 * kjs/ustring.h: 17370 (KJS::UString::cost): Disable a warning about assigning a 32-bit 17371 size_t into a 31-bit size_t. 17372 17373 2008-04-21 Simon Hausmann <hausmann (a] webkit.org> 17374 17375 Reviewed by Lars. 17376 17377 Made convertValueToQVariant accessible from within WebKit/qt/Api 17378 17379 * bindings/qt/qt_runtime.h: 17380 17381 2008-04-21 Holger Hans Peter Freyther <holger.freyther (a] trolltech.com> 17382 17383 Reviewed by Simon. 17384 17385 Build fix for Qt 4.3 17386 17387 * When building WebCore/internal make sure the QT_[BEGIN,END]_NAMESPACE is 17388 always defined. Do this by adding defines to the compiler line 17389 * For users of our API this is not feasible. Every public header file should 17390 include qwebkitglobal.h. Define the QT_BEGIN_NAMESPACE and QT_END_NAMESPACE 17391 when we are building everything < 4.4.0 and don't have them defined. 17392 17393 * kjs/testkjs.pro: 17394 17395 2008-04-19 Matt Lilek <webkit (a] mattlilek.com> 17396 17397 Not reviewed, Windows build fix - copy the profiler headers in all 17398 configurations, not just Debug_Internal. 17399 17400 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 17401 17402 2008-04-19 Mike Hommey <glandium (a] debian.org> 17403 17404 Reviewed by Alp Toker. 17405 17406 Don't build testkjs with rpath. 17407 17408 * GNUmakefile.am: 17409 17410 2008-04-18 Kevin Ollivier <kevino (a] theolliviers.com> 17411 17412 wx build fixes. Rename LocalStorage.h to LocalStorageEntry.h 17413 to avoid header detection issues between WebCore/storage/LocalStorage.h 17414 and it, and add $(PROFILER_SOURCES) to the wx JSCore build. 17415 17416 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 17417 * JavaScriptCore.xcodeproj/project.pbxproj: 17418 * jscore.bkl: 17419 * kjs/ExecState.h: 17420 * kjs/JSVariableObject.h: 17421 * kjs/LocalStorage.h: Removed. 17422 * kjs/LocalStorageEntry.h: Copied from JavaScriptCore/kjs/LocalStorage.h. 17423 * kjs/function.h: 17424 17425 2008-04-18 Jan Michael Alonzo <jmalonzo (a] unpluggable.com> 17426 17427 Reviewed by Alp Toker. 17428 17429 http://bugs.webkit.org/show_bug.cgi?id=16620 17430 [GTK] Autotools make dist and make check support 17431 17432 Cleanups. 17433 17434 * GNUmakefile.am: 17435 17436 2008-04-18 Jon Honeycutt <jhoneycutt (a] apple.com> 17437 17438 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Windows 17439 build fix. 17440 17441 2008-04-11 Mark Rowe <mrowe (a] apple.com> 17442 17443 Rubber-stamped by Antti Koivisto. 17444 17445 Silence GCC 4.3 warnings by removing extraneous consts. 17446 17447 * kjs/ustring.cpp: 17448 * kjs/ustring.h: 17449 17450 2008-04-18 Kevin McCullough <kmccullough (a] apple.com> 17451 17452 Reviewed by Sam. 17453 17454 -<rdar://problem/5770054> JavaScript profiler (10928) 17455 - Use Deque instead of Vector since the profiler uses prepend a lot 17456 and deque is faster at that. 17457 17458 * profiler/FunctionCallProfile.h: 17459 (KJS::FunctionCallProfile::milliSecs): Corrected the name to match 17460 its output. 17461 * wtf/Deque.h: 17462 (WTF::deleteAllValues): 17463 17464 2008-04-18 Kevin McCullough <kmccullough (a] apple.com> 17465 17466 Reviewed by Sam and Adam. 17467 17468 -<rdar://problem/5770054> JavaScript profiler (10928) 17469 - Cleaned up the header file and made some functions static, added 17470 a new, sane, printing function, and fixed a few minor bugs. 17471 17472 * JavaScriptCore.exp: 17473 * JavaScriptCore.xcodeproj/project.pbxproj: 17474 * profiler/FunctionCallProfile.cpp: 17475 (KJS::FunctionCallProfile::didExecute): Removed assertion that time is 17476 > 0 because at ms resolution that may not be true and only cross- 17477 platform way to get time differences is in ms. 17478 (KJS::FunctionCallProfile::printDataInspectorStyle): Added a new 17479 printing function for dumping data in a sane style. 17480 (KJS::FunctionCallProfile::printDataSampleStyle): Fixed a bug where we 17481 displayed too much precision when printing our floats. Also added logic 17482 to make sure we don't display 0 because that doesn't make sense for a 17483 sampling profile. 17484 * profiler/FunctionCallProfile.h: 17485 * profiler/Profiler.cpp: Moved functions that could be static into the 17486 implementation, and chaned the ASSERTs to early returns. I did this 17487 because console.profile() is a JS function and so was being profiled 17488 but asserting because the profiler had not been started! In the future 17489 I would like to put the ASSERTs back and not profile the calls to 17490 console.profile() and console.profileEnd(). 17491 (KJS::Profiler::willExecute): 17492 (KJS::Profiler::didExecute): 17493 (KJS::getStackNames): Fixed a bug where the wrong ExecState was being 17494 used. 17495 (KJS::getFunctionName): 17496 (KJS::Profiler::printDataInspectorStyle): 17497 * profiler/Profiler.h: 17498 17499 2008-04-18 Alexey Proskuryakov <ap (a] webkit.org> 17500 17501 Reviewed by Darin. 17502 17503 Fix leaks during plugin tests (which actually excercise background JS), and potential 17504 PAC brokenness that was not reported, but very likely. 17505 17506 The leaks shadowed a bigger problem with Identifier destruction. Identifier::remove involves 17507 an IdentifierTable lookup, which is now a per-thread instance. Since garbage collection can 17508 currently happen on a different thread than allocation, a wrong table was used. 17509 17510 No measurable change on SunSpider total, ~1% variation on individual tests. 17511 17512 * kjs/ustring.cpp: 17513 (KJS::UString::Rep::create): 17514 (KJS::UString::Rep::destroy): 17515 * kjs/ustring.h: 17516 Replaced isIdentifier with a pointer to IdentifierTable, so that destruction can be done 17517 correctly. Took one bit from reportedCost, to avoid making UString::Rep larger (performance 17518 effect was measurable on SunSpider). 17519 17520 * kjs/identifier.cpp: 17521 (KJS::IdentifierTable::IdentifierTable): 17522 (KJS::IdentifierTable::~IdentifierTable): 17523 (KJS::IdentifierTable::add): 17524 (KJS::IdentifierTable::remove): 17525 Make IdentifierTable a real class. Its destructor needs to zero out outstanding references, 17526 because some identifiers may briefly outlive it during thread destruction, and we don't want 17527 them to use their stale pointers. 17528 17529 (KJS::LiteralIdentifierTable): 17530 (KJS::Identifier::add): 17531 Now that LiteralIdentifierTable is per-thread and can be destroyed not just during application 17532 shutdown, it is not appropriate to simply bump refcount for strings that get there; changed 17533 the table to hold RefPtrs. 17534 17535 (KJS::CStringTranslator::translate): 17536 (KJS::UCharBufferTranslator::translate): 17537 (KJS::Identifier::addSlowCase): 17538 (KJS::Identifier::remove): 17539 * kjs/identifier.h: 17540 (KJS::Identifier::add): 17541 Use and update UString::Rep::identifierTable as appropriate. Updating it is now done in 17542 IdentifierTable::add, not in translators. 17543 17544 2008-04-18 Alexey Proskuryakov <ap (a] webkit.org> 17545 17546 Reviewed by Darin. 17547 17548 Get rid of static compareWithCompareFunctionArguments in array_instance.cpp. 17549 17550 No change on SunSpider, CelticKane or iBench JavaScript. It is probable that in some cases, 17551 merge sort is still faster, but more investigation is needed to determine a new cutoff. 17552 Or possibly, it would be better to do what FIXME says (change to tree sort). 17553 17554 Also, made arguments a local variable - not sure why it was a member of 17555 CompareWithCompareFunctionArguments. 17556 17557 * kjs/array_instance.cpp: 17558 (KJS::CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments): 17559 (KJS::CompareWithCompareFunctionArguments::operator()): 17560 (KJS::ArrayInstance::sort): 17561 17562 2008-04-18 Simon Hausmann <hausmann (a] webkit.org> 17563 17564 Build fix for gcc 4.3. Include stdio.h for printf. 17565 17566 * profiler/FunctionCallProfile.cpp: 17567 * profiler/Profiler.cpp: 17568 17569 2008-04-17 Jon Honeycutt <jhoneycutt (a] apple.com> 17570 17571 Reviewed by mrowe. 17572 17573 * wtf/Platform.h: Add HAVE_ACCESSIBILITY to Platform.h. 17574 17575 2008-04-17 Alexey Proskuryakov <ap (a] webkit.org> 17576 17577 Reviewed by Maciej. 17578 17579 Thread static data destructors are not guaranteed to be called in any particular order; 17580 turn ThreadSpecific into a phoenix-style singleton to avoid accessing freed memory when 17581 deleted objects are interdependent (e.g. CommonIdentifiers and internal identifier tables). 17582 17583 No change on SunSpider. 17584 17585 * wtf/ThreadSpecific.h: 17586 (WTF::ThreadSpecific::Data::Data): 17587 (WTF::::get): 17588 (WTF::::set): 17589 (WTF::::destroy): 17590 17591 2008-04-15 Srinivas Rao. M Hamse <msrinirao (a] gmail.com> 17592 17593 Reviewed by Maciej Stachowiak. 17594 17595 - gcc 3.x build fix 17596 17597 * kjs/nodes.h: CallerType definition made public for gcc 3.x compilation 17598 17599 2008-04-16 Brady Eidson <beidson (a] apple.com> 17600 17601 Reviewed by Sam Weinig 17602 17603 Change ThreadSafeShared to act like RefCounted by starting out with a single ref by default 17604 17605 * wtf/Threading.h: 17606 (WTF::ThreadSafeShared::ThreadSafeShared): 17607 17608 2008-04-16 Sam Weinig <sam (a] webkit.org> 17609 17610 Reviewed by Geoffrey Garen. 17611 17612 - To keep the behavior of the WebKit and JavaScriptCore API's the same, 17613 we need to hide the fact that the global object and the window object 17614 are no longer the same thing, and the the global object now changes on 17615 navigations. To do this, only the wrapper should ever be exposed. This 17616 fixes the two remaining spots where the internal global object is exposed, 17617 the windowScriptObject returned from [WebFrame windowObject] and the object 17618 return by calling JSContextGetGlobalObject on [WebFrame globalContext]. 17619 17620 * API/JSContextRef.cpp: 17621 (JSContextGetGlobalObject): 17622 This is a bit of a hack, this returns the "this" representation of the globalObject 17623 which will be the WrapperWindow for WebCore and the globalObject for non-WebCore. 17624 17625 * API/JSObjectRef.cpp: 17626 (JSObjectSetProperty): 17627 Call the new putWithAttributes method instead of relying on lower-level calls. 17628 This is needed so that the window wrapper can forward the calls. 17629 17630 * JavaScriptCore.exp: 17631 * kjs/Activation.h: 17632 * kjs/JSGlobalObject.cpp: 17633 (KJS::JSGlobalObject::putWithAttributes): 17634 * kjs/JSGlobalObject.h: 17635 * kjs/JSVariableObject.h: 17636 (KJS::JSVariableObject::symbolTablePutWithAttributes): 17637 * kjs/function.cpp: 17638 (KJS::ActivationImp::putWithAttributes): 17639 * kjs/nodes.cpp: 17640 (KJS::ConstDeclNode::handleSlowCase): 17641 (KJS::ConstDeclNode::evaluateSingle): 17642 (KJS::EvalNode::processDeclarations): 17643 * kjs/object.cpp: 17644 (KJS::JSObject::putWithAttributes): 17645 * kjs/object.h: 17646 Rename initializeVariable to putWithAttributes and move it down to JSObject so it 17647 can be used for JSObjectSetProperty. 17648 17649 2008-04-16 Kevin McCullough <kmccullough (a] apple.com> 17650 17651 Reviewed by Sam and Geoff. 17652 17653 -<rdar://problem/5770054> JavaScript profiler (10928) 17654 Inital profiler prototype 17655 17656 * GNUmakefile.am: Added new files to project 17657 * JavaScriptCore.pri: Ditto 17658 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto 17659 * JavaScriptCore.xcodeproj/project.pbxproj: Ditto 17660 * JavaScriptCoreSources.bkl: Ditto 17661 * kjs/config.h: Put compiling flag in here. 17662 * kjs/function.cpp: Instrument calling the function eval(). 17663 (KJS::eval): 17664 * kjs/interpreter.cpp: Instrument evaluating global scopes. 17665 (KJS::Interpreter::evaluate): 17666 * kjs/object.cpp: Instrument JS function calls. 17667 (KJS::JSObject::call): 17668 * profiler: Added. 17669 * profiler/FunctionCallProfile.cpp: Added. 17670 (KJS::FunctionCallProfile::FunctionCallProfile): 17671 (KJS::FunctionCallProfile::~FunctionCallProfile): 17672 (KJS::FunctionCallProfile::willExecute): Call right before the JS function or executing context is executed to start the profiler's timer. 17673 (KJS::FunctionCallProfile::didExecute): Call right after the JS function or executing context is executed to stop the profiler's timer. 17674 (KJS::FunctionCallProfile::addChild): Add a child to the current FunctionCallProfile if it isn't already a child of the current FunctionalCallProfile. 17675 (KJS::FunctionCallProfile::findChild): Return the child that matches the given name if there is one. 17676 (KJS::FunctionCallProfile::printDataSampleStyle): Print the current profiled information in a format that matches sample's output. 17677 * profiler/FunctionCallProfile.h: Added. 17678 (KJS::FunctionCallProfile::FunctionCallProfile): 17679 (KJS::FunctionCallProfile::~FunctionCallProfile): 17680 (KJS::FunctionCallProfile::functionName): 17681 (KJS::FunctionCallProfile::microSecs): 17682 * profiler/Profiler.cpp: Added. 17683 (KJS::Profiler::profiler): 17684 (KJS::Profiler::sharedProfiler): Return global singleton (may change due to multi-threading concerns) 17685 (KJS::Profiler::startProfiling): Don't start collecting profiling information until the user starts the profiler. Also don't clear old prfiled data until the profiler is restarted. 17686 (KJS::Profiler::stopProfiling): Stop collecting profile information. 17687 (KJS::Profiler::willExecute): Same as above. 17688 (KJS::Profiler::didExecute): Same as above. 17689 (KJS::Profiler::insertStackNamesInTree): Follow the stack of the given names and if a sub-stack is not in the current tree, add it. 17690 (KJS::Profiler::getStackNames): Get the names from the different passed in parameters and order them as a stack. 17691 (KJS::Profiler::getFunctionName): Get the function name from the given parameter. 17692 (KJS::Profiler::printDataSampleStyle): Print the current profiled information in a format that matches sample's output. 17693 (KJS::Profiler::debugLog): 17694 * profiler/Profiler.h: Added. 17695 (KJS::Profiler::Profiler): 17696 17697 2008-04-16 Sam Weinig <sam (a] webkit.org> 17698 17699 Reviewed by Darin Adler. 17700 17701 - Remove kjs_ prefix from strtod, dtoa, and freedtoa and put it 17702 in the KJS namespace. 17703 - Make strtod, dtoa, and freedtoa c++ functions instead of extern "C". 17704 - Remove mode switching from dtoa. ~2% improvement on test 26. 17705 - Removes all unnecessary #defines from dtoa code. 17706 17707 * JavaScriptCore.exp: 17708 * kjs/dtoa.cpp: 17709 (KJS::ulp): 17710 (KJS::b2d): 17711 (KJS::d2b): 17712 (KJS::ratio): 17713 (KJS::strtod): 17714 (KJS::freedtoa): 17715 (KJS::dtoa): 17716 * kjs/dtoa.h: 17717 * kjs/function.cpp: 17718 (KJS::parseInt): 17719 * kjs/lexer.cpp: 17720 (KJS::Lexer::lex): 17721 * kjs/number_object.cpp: 17722 (KJS::integer_part_noexp): 17723 (KJS::numberProtoFuncToExponential): 17724 * kjs/ustring.cpp: 17725 (KJS::UString::from): 17726 (KJS::UString::toDouble): 17727 17728 2008-04-16 Alexey Proskuryakov <ap (a] webkit.org> 17729 17730 Reviewed by Darin. 17731 17732 Get rid of static execForCompareByStringForQSort in array_instance.cpp. 17733 17734 No change on SunSpider, CelticKane or iBench JavaScript. 17735 17736 * kjs/array_instance.cpp: 17737 (KJS::ArraySortComparator::ArraySortComparator): 17738 (KJS::ArraySortComparator::operator()): 17739 (KJS::ArrayInstance::sort): 17740 Switch slow case to std::sort, so that ExecState can be passed in a comparator. 17741 17742 2008-04-16 Alexey Proskuryakov <ap (a] webkit.org> 17743 17744 Reviewed by Adam Roben. 17745 17746 MSVC build fix. 17747 17748 * kjs/CommonIdentifiers.cpp: 17749 * kjs/CommonIdentifiers.h: 17750 * kjs/Parser.cpp: 17751 * kjs/Parser.h: 17752 * kjs/identifier.cpp: 17753 * kjs/lexer.h: 17754 * wtf/ThreadSpecific.h: 17755 17756 2008-04-16 Alexey Proskuryakov <ap (a] webkit.org> 17757 17758 Build fix. 17759 17760 * kjs/date_object.cpp: 17761 * kjs/date_object.h: 17762 Don't include DateMath.h from date_object.h, as the latter is used from WebCore, while 17763 where the former is not available. 17764 17765 2008-04-16 Holger Hans Peter Freyther <zecke (a] selfish.org> 17766 17767 Unreviewed build fix for MSVC. It does not want to have 17768 WTF in the KJS namespace. 17769 17770 * kjs/CommonIdentifiers.h: 17771 17772 2008-04-16 Holger Hans Peter Freyther <zecke (a] selfish.org> 17773 17774 Unreviewed build fix for gcc. 17775 17776 ::msToGregorianDateTime is not known to it. 17777 17778 * kjs/date_object.cpp: 17779 (KJS::DateInstance::msToGregorianDateTime): 17780 17781 2008-04-16 Alexey Proskuryakov <ap (a] webkit.org> 17782 17783 Reviewed by Oliver Hunt. 17784 17785 Initialize threadMapMutex safely (as already done in ThreadingWin). 17786 17787 * wtf/ThreadingGtk.cpp: 17788 (WTF::threadMapMutex): 17789 (WTF::initializeThreading): 17790 * wtf/ThreadingPthreads.cpp: 17791 (WTF::threadMapMutex): 17792 (WTF::initializeThreading): 17793 17794 2008-04-16 Alexey Proskuryakov <ap (a] webkit.org> 17795 17796 Reviewed by Adam Roben. 17797 17798 Cache Gregorian date/time structure on DateInstance objects for 1.027x SunSpider speedup 17799 (1.65x on date-format-xparb, 1.13x on date-format-tofte). 17800 17801 * kjs/DateMath.h: 17802 (KJS::GregorianDateTime::copyFrom): Added. It presumably makes sense to keep GregorianDateTime 17803 Noncopyable, so it's not just operator=. 17804 17805 * kjs/date_object.h: Added a per-object cache. 17806 17807 * kjs/date_object.cpp: 17808 (KJS::DateInstance::DateInstance): 17809 (KJS::DateInstance::msToGregorianDateTime): 17810 (KJS::dateProtoFuncToString): 17811 (KJS::dateProtoFuncToUTCString): 17812 (KJS::dateProtoFuncToDateString): 17813 (KJS::dateProtoFuncToTimeString): 17814 (KJS::dateProtoFuncToLocaleString): 17815 (KJS::dateProtoFuncToLocaleDateString): 17816 (KJS::dateProtoFuncToLocaleTimeString): 17817 (KJS::dateProtoFuncGetFullYear): 17818 (KJS::dateProtoFuncGetUTCFullYear): 17819 (KJS::dateProtoFuncToGMTString): 17820 (KJS::dateProtoFuncGetMonth): 17821 (KJS::dateProtoFuncGetUTCMonth): 17822 (KJS::dateProtoFuncGetDate): 17823 (KJS::dateProtoFuncGetUTCDate): 17824 (KJS::dateProtoFuncGetDay): 17825 (KJS::dateProtoFuncGetUTCDay): 17826 (KJS::dateProtoFuncGetHours): 17827 (KJS::dateProtoFuncGetUTCHours): 17828 (KJS::dateProtoFuncGetMinutes): 17829 (KJS::dateProtoFuncGetUTCMinutes): 17830 (KJS::dateProtoFuncGetSeconds): 17831 (KJS::dateProtoFuncGetUTCSeconds): 17832 (KJS::dateProtoFuncGetTimezoneOffset): 17833 (KJS::setNewValueFromTimeArgs): 17834 (KJS::setNewValueFromDateArgs): 17835 (KJS::dateProtoFuncSetYear): 17836 (KJS::dateProtoFuncGetYear): 17837 Use the cache when converting. 17838 17839 2008-04-16 Alexey Proskuryakov <ap (a] webkit.org> 17840 17841 Reviewed by Darin. 17842 17843 Implement an abstraction for thread-specific storage, use it to get rid of some static objects. 17844 17845 SunSpider results were not conclusive, possibly up to 0.2% slowdown. 17846 17847 * JavaScriptCore.xcodeproj/project.pbxproj: 17848 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 17849 Added ThreadSpecific.h 17850 17851 * wtf/ThreadSpecific.h: Added. 17852 (WTF::::ThreadSpecific): 17853 (WTF::::~ThreadSpecific): 17854 (WTF::::get): 17855 (WTF::::set): 17856 (WTF::::destroy): 17857 (WTF::T): 17858 (WTF::::operator): 17859 Only implemented for platforms that use pthreads. 17860 17861 * kjs/CommonIdentifiers.cpp: 17862 (KJS::CommonIdentifiers::shared): 17863 * kjs/CommonIdentifiers.h: 17864 * kjs/InitializeThreading.cpp: 17865 (KJS::initializeThreading): 17866 * kjs/Parser.cpp: 17867 (KJS::parser): 17868 * kjs/Parser.h: 17869 * kjs/identifier.cpp: 17870 (KJS::identifierTable): 17871 (KJS::literalIdentifierTable): 17872 (KJS::Identifier::initializeIdentifierThreading): 17873 * kjs/identifier.h: 17874 * kjs/lexer.cpp: 17875 (KJS::lexer): 17876 * kjs/lexer.h: 17877 Make static instances per-thread. 17878 17879 2008-04-15 Anders Carlsson <andersca (a] apple.com> 17880 17881 Reviewed by Adam. 17882 17883 Add ENABLE_OFFLINE_WEB_APPLICATIONS to FEATURE_DEFINES. 17884 17885 * Configurations/JavaScriptCore.xcconfig: 17886 17887 2008-04-15 Andre Poenitz <andre.poenitz (a] trolltech.com> 17888 17889 Reviewed by Simon. 17890 17891 Fix compilation with Qt namespaces 17892 17893 Qt can be configured to have all of its classes inside a specified namespaces. 17894 This is for example used in plugin/component environments like Eclipse. 17895 17896 This change makes it possible to let the Qt port compile against a namespaced 17897 Qt by the use of macros Qt provides to properly forward declare Qt classes in 17898 the namespace. 17899 17900 * wtf/unicode/qt4/UnicodeQt4.h: 17901 17902 2008-04-14 Anders Carlsson <andersca (a] apple.com> 17903 17904 Reviewed by Adam. 17905 17906 Don't leak the prototype class. 17907 17908 * API/JSClassRef.cpp: 17909 (OpaqueJSClass::create): 17910 17911 2008-04-14 Steve Falkenburg <sfalken (a] apple.com> 17912 17913 Fix build. 17914 17915 * wtf/ThreadingWin.cpp: 17916 17917 2008-04-14 Alexey Proskuryakov <ap (a] webkit.org> 17918 17919 Reviewed by Adam Roben. 17920 17921 https://bugs.webkit.org/show_bug.cgi?id=18488 17922 FastMalloc doesn't release thread-specific data on Windows 17923 17924 * wtf/ThreadingWin.cpp: 17925 (WTF::threadMapMutex): (WTF::initializeThreading): Call threadMapMutex once to initialize the static safely. 17926 (WTF::ThreadFunctionInvocation::ThreadFunctionInvocation): Added a structure to wrap thread entry point and arguments. 17927 (WTF::wtfThreadEntryPoint): Make sure to end all WTF threads with pthread_exit(), to give pthreads-win32 a chance to call 17928 destructors of thread-specific data. 17929 (WTF::createThread): Use _beginthreadex instead of CreateThread, because MSDN says so. Also removed a call to CreateEvent, 17930 for which I could see no reason at all. 17931 17932 2008-04-14 Alexey Proskuryakov <ap (a] webkit.org> 17933 17934 Touched a file to make JavaScriptCore.vcproj rebuild. 17935 17936 * wtf/MathExtras.h: 17937 17938 2008-04-14 Adam Roben <aroben (a] apple.com> 17939 17940 Windows build fix 17941 17942 Rubberstamped by Alexey Proskuryakov. 17943 17944 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable 17945 the "potentially uninitialized variable" warning for grammar.cpp, as 17946 it seems to be incorrect. yylval gets initialized by the lexer, but 17947 MSVC doesn't seem to understand this. 17948 17949 2008-04-11 Antti Koivisto <antti (a] apple.com> 17950 17951 Reviewed by Maciej. 17952 17953 Add default hash for pairs of hashable types. 17954 17955 * wtf/HashFunctions.h: 17956 (WTF::PairHash::hash): 17957 (WTF::PairHash::equal): 17958 (WTF::): 17959 17960 2008-04-11 Alexey Proskuryakov <ap (a] webkit.org> 17961 17962 Reviewed by Geoff. 17963 17964 Make DateMath.cpp thread safe. 17965 17966 No measurable change on SunSpider (should be a very small speedup). 17967 17968 * kjs/DateMath.cpp: 17969 (KJS::mimimumYearForDST): (KJS::equivalentYearForDST): Got rid of double caching of the 17970 same precomputed value. 17971 (KJS::calculateUTCOffset): (KJS::getUTCOffset): Factored actual UTC offset calculation code 17972 out of getUTCOffset(), and notification setup into initDateMath(). 17973 17974 (KJS::initDateMath): Added. 17975 17976 * kjs/DateMath.h: 17977 * kjs/InitializeThreading.cpp: 17978 (KJS::initializeThreading): 17979 Added initDateMath(). 17980 17981 2008-04-11 Alexey Proskuryakov <ap (a] webkit.org> 17982 17983 Windows build fix. 17984 17985 * kjs/grammar.y: 17986 17987 2008-04-11 Alexey Proskuryakov <ap (a] webkit.org> 17988 17989 Tiger build fix. Forward declaring a union didn't work for whatever reason, make the 17990 parameters void*. 17991 17992 * kjs/grammar.y: 17993 * kjs/lexer.cpp: 17994 (kjsyylex): 17995 (KJS::Lexer::lex): 17996 * kjs/lexer.h: 17997 17998 2008-04-11 Alexey Proskuryakov <ap (a] webkit.org> 17999 18000 Reviewed by Geoff. 18001 18002 Generate a pure (re-entrant) parser with Bison. 18003 18004 No change on SunSpider. 18005 18006 * kjs/Parser.cpp: 18007 (KJS::Parser::parse): 18008 * kjs/grammar.y: 18009 * kjs/lexer.cpp: 18010 (kjsyylex): 18011 (KJS::Lexer::lex): 18012 * kjs/lexer.h: 18013 Pass state as function arguments, instead of global data. Don't call lexer() as often as 18014 before, as this function is about to become slower due to thread-specific storage. 18015 18016 * kjs/function.cpp: 18017 (KJS::isStrWhiteSpace): Don't call isSeparatorSpace() for 8-bit characters, as these are 18018 already taken care of. This is a small speedup, compensating for a small slowdown caused 18019 by switching Bison mode. 18020 18021 2008-04-10 Alexey Proskuryakov <ap (a] webkit.org> 18022 18023 Reviewed by Geoff. 18024 18025 https://bugs.webkit.org/show_bug.cgi?id=18402 18026 REGRESSION: visited element handling is incorrect in nested join/toString calls 18027 18028 No change on SunSpider total, possibly a tiny improvement (about 0.1%). 18029 18030 Test: fast/js/array-tostring-and-join.html 18031 18032 * kjs/JSGlobalObject.h: 18033 (KJS::JSGlobalObject::visitedElements): Store visited elements HashSet here, making it 18034 common to toString/toLocalizedString/join again. 18035 18036 * kjs/array_object.cpp: 18037 (KJS::arrayProtoFuncToString): 18038 (KJS::arrayProtoFuncToLocaleString): 18039 (KJS::arrayProtoFuncJoin): 18040 Got rid of static variables. Replaced UString with Vector to avoid O(n^2) behavior and 18041 regain performance. 18042 18043 * wtf/Vector.h: 18044 (WTF::::resize): 18045 (WTF::::grow): 18046 (WTF::::reserveCapacity): 18047 (WTF::::append): 18048 (WTF::::insert): 18049 Added null checks, so that Vector methods don't crash when out of memory. The caller should 18050 check that data pointer is not null before proceeding. 18051 18052 2008-04-10 Mark Rowe <mrowe (a] apple.com> 18053 18054 Reviewed by Maciej Stachowiak. 18055 18056 Fix https://bugs.webkit.org/show_bug.cgi?id=18367 and the many dupes. 18057 Bug 18367: Crash during celtic kane js speed 2007 test 18058 18059 GCC 4.2 on x86_64 Linux decided to reorder the local variables in markCurrentThreadConservatively's 18060 stack frame. This lead to the range of addresses the collector treated as stack to exclude the 18061 contents of volatile registers that markCurrentThreadConservatively forces onto the stack. This was 18062 leading to objects being prematurely collected if the only reference to them was via a register at 18063 the time a collection occurred. 18064 18065 The fix for this is to move the calculation of the top of the stack into a NEVER_INLINE function 18066 that is called from markCurrentThreadConservatively. This forces the dummy variable we use for 18067 determining the top of stack to be in a different stack frame which prevents the compiler from 18068 reordering it relative to the registers that markCurrentThreadConservatively forces onto the stack. 18069 18070 * kjs/collector.cpp: 18071 (KJS::Collector::markCurrentThreadConservativelyInternal): 18072 (KJS::Collector::markCurrentThreadConservatively): 18073 * kjs/collector.h: 18074 18075 2008-04-10 Adam Roben <aroben (a] apple.com> 18076 18077 VC++ Express build fix 18078 18079 * JavaScriptCore.vcproj/WTF/WTF.vcproj: Link against user32.lib so 18080 that anyone who links against WTF.lib will get user32.lib 18081 automatically. 18082 18083 2008-04-09 Adam Roben <aroben (a] apple.com> 18084 18085 VC++ Express build fix 18086 18087 * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Link against 18088 user32.lib. 18089 18090 2008-04-09 Adam Roben <aroben (a] apple.com> 18091 18092 Build fix 18093 18094 * JavaScriptCore.exp: Export isMainThread. 18095 18096 2008-04-09 Adam Roben <aroben (a] apple.com> 18097 18098 Build fix 18099 18100 * wtf/AlwaysInline.h: Make sure to #include Platform.h before using 18101 the macros it defines. 18102 18103 2008-04-08 Mark Rowe <mrowe (a] apple.com> 18104 18105 Export WTF::initializeThreading() from JavaScriptCore. 18106 18107 * JavaScriptCore.exp: 18108 18109 2008-04-04 Sam Weinig <sam (a] webkit.org> 18110 18111 Reviewed by Geoffrey Garen. 18112 18113 First step in implementing the "split window" 18114 18115 - Add a GlobalThisValue to ExecState which should be used 18116 in places that used to implement the "use the global object 18117 as this if null" rule. 18118 - Factor out lookupGetter/lookupSetter into virtual methods 18119 on JSObject so that they can be forwarded. 18120 - Make defineGetter/defineSetter virtual methods for the same 18121 reason. 18122 - Have PrototypeReflexiveFunction store the globalObject used 18123 to create it so that it can be used to get the correct thisObject 18124 for eval. 18125 18126 * API/JSObjectRef.cpp: 18127 (JSObjectCallAsFunction): 18128 * JavaScriptCore.exp: 18129 * kjs/Activation.h: 18130 * kjs/ExecState.cpp: 18131 (KJS::ExecState::ExecState): 18132 (KJS::GlobalExecState::GlobalExecState): 18133 * kjs/ExecState.h: 18134 (KJS::ExecState::globalThisValue): 18135 * kjs/ExecStateInlines.h: 18136 (KJS::ExecState::ExecState): 18137 (KJS::FunctionExecState::FunctionExecState): 18138 * kjs/JSGlobalObject.cpp: 18139 (KJS::JSGlobalObject::reset): 18140 (KJS::JSGlobalObject::toGlobalObject): 18141 * kjs/JSGlobalObject.h: 18142 (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): 18143 (KJS::JSGlobalObject::JSGlobalObject): 18144 * kjs/array_instance.cpp: 18145 (KJS::CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments): 18146 (KJS::compareWithCompareFunctionForQSort): 18147 * kjs/array_object.cpp: 18148 (KJS::arrayProtoFuncSort): 18149 (KJS::arrayProtoFuncFilter): 18150 (KJS::arrayProtoFuncMap): 18151 (KJS::arrayProtoFuncEvery): 18152 (KJS::arrayProtoFuncForEach): 18153 (KJS::arrayProtoFuncSome): 18154 * kjs/function.cpp: 18155 (KJS::FunctionImp::callAsFunction): 18156 (KJS::ActivationImp::toThisObject): 18157 (KJS::globalFuncEval): 18158 (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction): 18159 (KJS::PrototypeReflexiveFunction::mark): 18160 * kjs/function.h: 18161 (KJS::PrototypeReflexiveFunction::cachedGlobalObject): 18162 * kjs/function_object.cpp: 18163 (KJS::functionProtoFuncApply): 18164 (KJS::functionProtoFuncCall): 18165 * kjs/nodes.cpp: 18166 (KJS::ExpressionNode::resolveAndCall): 18167 (KJS::FunctionCallValueNode::evaluate): 18168 (KJS::LocalVarFunctionCallNode::inlineEvaluate): 18169 (KJS::ScopedVarFunctionCallNode::inlineEvaluate): 18170 (KJS::FunctionCallBracketNode::evaluate): 18171 (KJS::FunctionCallDotNode::inlineEvaluate): 18172 * kjs/object.cpp: 18173 (KJS::JSObject::call): 18174 (KJS::JSObject::put): 18175 (KJS::tryGetAndCallProperty): 18176 (KJS::JSObject::lookupGetter): 18177 (KJS::JSObject::lookupSetter): 18178 (KJS::JSObject::toThisObject): 18179 (KJS::JSObject::toGlobalObject): 18180 (KJS::JSObject::fillGetterPropertySlot): 18181 * kjs/object.h: 18182 * kjs/object_object.cpp: 18183 (KJS::objectProtoFuncLookupGetter): 18184 (KJS::objectProtoFuncLookupSetter): 18185 * kjs/string_object.cpp: 18186 (KJS::replace): 18187 18188 2008-04-08 Brady Eidson <beidson (a] apple.com> 18189 18190 Encourage Windows to rebuild - AGAIN... 18191 18192 * kjs/DateMath.cpp: 18193 18194 2008-04-08 Adam Roben <aroben (a] apple.com> 18195 18196 Mac build fix 18197 18198 * JavaScriptCore.exp: Add callOnMainThread, and sorted the list. 18199 18200 2008-04-08 Brady Eidson <beidson (a] apple.com> 18201 18202 Rubberstamped by Adam Roben 18203 18204 Touch some files to *strongly* encourage Windows to rebuilt with DOM_STORAGE enabled 18205 18206 * kjs/DateMath.cpp: 18207 18208 2008-04-08 Adam Roben <aroben (a] apple.com> 18209 18210 Move callOnMainThread to WTF 18211 18212 Reviewed by Alexey Proskuryakov. 18213 18214 * GNUmakefile.am: 18215 * JavaScriptCore.pri: 18216 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 18217 * JavaScriptCore.xcodeproj/project.pbxproj: 18218 * JavaScriptCoreSources.bkl: 18219 Added new files. 18220 18221 * wtf/MainThread.cpp: 18222 * wtf/MainThread.h: 18223 * wtf/gtk/MainThreadGtk.cpp: 18224 * wtf/mac/MainThreadMac.mm: 18225 * wtf/qt/MainThreadQt.cpp: 18226 * wtf/win/MainThreadWin.cpp: 18227 * wtf/wx/MainThreadWx.cpp: 18228 Moved here from WebCore/platform. Replaced all instances of "WebCore" 18229 with "WTF". 18230 18231 * kjs/bool_object.cpp: Touched to force JavaScriptCore.vcproj to 18232 build. 18233 to the WTF namespace. 18234 * wtf/ThreadingWin.cpp: 18235 (WTF::initializeThreading): Call initializeMainThread. 18236 18237 2008-04-07 Brady Eidson <beidson (a] apple.com> 18238 18239 Add "ENABLE_DOM_STORAGE" to keep in sync with the rest of the project 18240 18241 * Configurations/JavaScriptCore.xcconfig: 18242 18243 2008-04-07 Adam Roben <aroben (a] apple.com> 18244 18245 Windows build fix 18246 18247 * wtf/ThreadingWin.cpp: Back out some changes I didn't mean to land. 18248 18249 2008-04-07 Adam Roben <aroben (a] apple.com> 18250 18251 Add WTF::isMainThread 18252 18253 Reviewed by Alexey Proskuryakov. 18254 18255 * wtf/Threading.h: Declare the new function. 18256 * wtf/ThreadingGtk.cpp: 18257 (WTF::initializeThreading): Initialize the main thread identifier. 18258 (WTF::isMainThread): Added. 18259 * wtf/ThreadingNone.cpp: Ditto ThreadingGtk.cpp. 18260 (WTF::initializeThreading): 18261 (WTF::isMainThread): 18262 * wtf/ThreadingPthreads.cpp: Ditto. 18263 (WTF::initializeThreading): 18264 (WTF::isMainThread): 18265 * wtf/ThreadingWin.cpp: Ditto. 18266 (WTF::initializeThreading): 18267 (WTF::isMainThread): 18268 18269 2008-04-06 Alexey Proskuryakov <ap (a] webkit.org> 18270 18271 Reviewed by Darin. 18272 18273 Make UString thread-safe. 18274 18275 No change on SunSpider total, although individual tests have changed a lot, up to 3%. 18276 18277 * kjs/InitializeThreading.cpp: (KJS::initializeThreading): Call UString::null() to initialize 18278 a static. 18279 18280 * kjs/identifier.cpp: 18281 (KJS::CStringTranslator::translate): 18282 (KJS::UCharBufferTranslator::translate): 18283 Use "true" for a boolean value instead of 1, because it's C++. 18284 18285 * kjs/ustring.h: 18286 (KJS::CString::adopt): Added a method to create from a char* buffer without copying. 18287 (KJS::UString::Rep::ref): Removed an assertion for JSLock::lockCount, as it's no longer 18288 necessary to hold JSLock when working with strings. 18289 (KJS::UString::Rep::deref): Ditto. 18290 (KJS::UString::Rep::isStatic): Added a field to quickly determine that this is an empty 18291 or null static string. 18292 18293 * kjs/ustring.cpp: 18294 (KJS::): Removed normalStatBufferSize and statBufferSize, as there is no reason to have such 18295 an advanced implementation of a debug-only ascii() method. Removed a long-obsolete comment 18296 about UChar. 18297 (KJS::UString::Rep::createCopying): Removed an assertion for JSLock::lockCount. 18298 (KJS::UString::Rep::create): Ditto. 18299 (KJS::UString::Rep::destroy): Ditto. Do not do anything for static null and empty strings, 18300 as refcounting is not reliable for those. Reordered branches for a noticeable speed gain - 18301 apparently this functiton is hot enough for SunSpider to see an effect from this! 18302 (KJS::UString::null): Moved a star, added a comment. 18303 (KJS::UString::cstring): Reimplemented to not call ascii(), which is not thread-safe. 18304 (KJS::UString::ascii): Simplified statBuffer handling logic. 18305 (KJS::UString::toDouble): Use cstring() instead of ascii(). 18306 18307 2008-04-02 Mark Rowe <mrowe (a] apple.com> 18308 18309 Reviewed by Oliver Hunt. 18310 18311 Ensure that debug symbols are generated for x86_64 and ppc64 builds. 18312 18313 * Configurations/Base.xcconfig: 18314 18315 2008-04-01 Christian Dywan <christian (a] imendio.com> 18316 18317 Build fix for GCC 4.3. 18318 18319 * wtf/unicode/icu/CollatorICU.cpp: include string.h 18320 18321 2008-04-01 Alexey Proskuryakov <ap (a] webkit.org> 18322 18323 Rubber-stamped by Darin. 18324 18325 Turn off using 64-bit arithmetic on 32-bit hardware, as dtoa own code is faster than 18326 compiler-provided emulation. 18327 18328 1% speedup on Acid3 test 26. 18329 18330 * kjs/dtoa.cpp: 18331 18332 2008-04-01 Alexey Proskuryakov <ap (a] webkit.org> 18333 18334 Reviewed by Darin. 18335 18336 Make MathExtras.h thread safe. 18337 18338 * kjs/math_object.cpp: 18339 (KJS::mathProtoFuncRandom): If threading is enabled, rely on initializeThreading to call 18340 wtf_random_init(). 18341 18342 * wtf/Threading.h: 18343 * wtf/ThreadingGtk.cpp: 18344 (WTF::initializeThreading): 18345 * wtf/ThreadingNone.cpp: 18346 (WTF::initializeThreading): 18347 * wtf/ThreadingPthreads.cpp: 18348 (WTF::initializeThreading): 18349 * wtf/ThreadingWin.cpp: 18350 (WTF::initializeThreading): 18351 Call wtf_random_init(); made the function non-inline to avoid having to include too many 18352 headers in Threading.h. 18353 18354 2008-03-31 Eric Seidel <eric (a] webkit.org> 18355 18356 Reviewed by darin. 18357 18358 Make matching of regexps using ^ much faster 18359 http://bugs.webkit.org/show_bug.cgi?id=18086 18360 18361 * pcre/pcre_compile.cpp: 18362 (compileBranch): 18363 (branchNeedsLineStart): 18364 * pcre/pcre_exec.cpp: 18365 (match): 18366 (jsRegExpExecute): 18367 * pcre/pcre_internal.h: 18368 18369 2008-03-29 Alexey Proskuryakov <ap (a] webkit.org> 18370 18371 Reviewed by Oliver Hunt. 18372 18373 <rdar://problem/5829556> REGRESSION: Leak in KJS::initializeThreading() 18374 18375 * kjs/InitializeThreading.cpp: (KJS::initializeThreading): There is no guarantee that 18376 initializeThreading() is called only once; check that the mutex hasn't been already allocated. 18377 18378 2008-03-29 Oliver Hunt <oliver (a] apple.com> 18379 18380 Reviewed by Geoff. 18381 18382 Bug 17924: Crash in KJS::ConstDeclNode::evaluate with |with| and |const| 18383 <http://bugs.webkit.org/show_bug.cgi?id=17924> 18384 <rdar://problem/5806933> 18385 18386 It turns out this is trivially avoidable if we just match firefox's 18387 semantics and ensure that an assignment in a const declaration always 18388 writes to the variable object. 18389 18390 * kjs/nodes.cpp: 18391 (KJS::ConstDeclNode::handleSlowCase): 18392 18393 2008-03-28 Alexey Proskuryakov <ap (a] webkit.org> 18394 18395 Reviewed by Sam Weinig. 18396 18397 Fix a dtoa thread safety issue. 18398 18399 WebCore can call kjs_strtod without holding JS lock, but we didn't have thread safety 18400 compiled in for dtoa. 18401 18402 This is a 0.5% regression on SunSpider, which Sam Weinig has volunteered to cover with 18403 his recent improvement. 18404 18405 * kjs/dtoa.cpp: 18406 (Bigint::Balloc): 18407 (Bigint::Bfree): 18408 Changed to use fastMalloc/fastDelete - they are much faster than the dtoa custom version was 18409 in the presence of locking (but somewhat slower in single-threaded case). 18410 (Bigint::pow5mult): Got rid of the dreaded double-checked locking anti-pattern (had to 18411 restructure the code to avoid significant performance implications). 18412 (Bigint::lshift): Rewrote to avoid an allocation, if possible. 18413 18414 (Bigint::rv_alloc): 18415 (Bigint::kjs_freedtoa): 18416 (Bigint::kjs_dtoa): 18417 Check for USE(MULTIPLE_THREADS), not dtoa legacy MULTIPLE_THREADS. 18418 18419 * kjs/InitializeThreading.cpp: Added. 18420 (KJS::initializeThreading): 18421 * kjs/InitializeThreading.h: Added. 18422 Initialize threading at KJS level, if enabled. 18423 18424 * kjs/dtoa.h: Expose dtoa mutex for KJS::initializeThreading. 18425 18426 * kjs/testkjs.cpp: (kjsmain): Call initializeThreading. 18427 18428 * JavaScriptCore.exp: Export KJS::initializeThreading. 18429 18430 * GNUmakefile.am: 18431 * JavaScriptCore.exp: 18432 * JavaScriptCore.pri: 18433 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 18434 * JavaScriptCoreSources.bkl: 18435 * JavaScriptCore.xcodeproj/project.pbxproj: 18436 Added InitializeThreading.{h,cpp}. 18437 18438 * wtf/Threading.h: Removed a using directive for WTF::initializeThreading - it is only 18439 to be called from KJS::initializeThreading, and having it in the global namespace is useless. 18440 18441 2008-03-28 Brady Eidson <beidson (a] apple.com> 18442 18443 Reviewed by Darin 18444 18445 Export Unicode/UTF8.h and convertUTF16ToUTF8() for more flexible conversion in WebCore 18446 18447 * JavaScriptCore.exp: 18448 * JavaScriptCore.xcodeproj/project.pbxproj: 18449 18450 2008-03-27 Darin Adler <darin (a] apple.com> 18451 18452 Reviewed by Mark Rowe. 18453 18454 <rdar://problem/5826236> Regular expressions with large nested repetition counts can have their 18455 compiled length calculated incorrectly. 18456 18457 * pcre/pcre_compile.cpp: 18458 (multiplyWithOverflowCheck): 18459 (calculateCompiledPatternLength): Check for overflow when dealing with nested repetition counts 18460 and bail with an error rather than returning incorrect results. 18461 18462 2008-03-26 Mark Rowe <mrowe (a] apple.com> 18463 18464 Rubber-stamped by Brady Eidson. 18465 18466 Update FEATURE_DEFINES to be consistent with the other locations in which it is defined. 18467 18468 * Configurations/JavaScriptCore.xcconfig: 18469 18470 2008-03-26 Adam Roben <aroben (a] apple.com> 18471 18472 Fix Bug 18060: Assertion failure (JSLock not held) beneath 18473 JSCallbackObject<Base>::toString 18474 18475 <http://bugs.webkit.org/show_bug.cgi?id=18060> 18476 18477 Reviewed by Geoff Garen. 18478 18479 Bug fix: 18480 18481 * API/JSCallbackObjectFunctions.h: 18482 (KJS::JSCallbackObject<Base>::toString): Make the DropAllLocks 18483 instance only be in scope while calling convertToType. 18484 18485 Test: 18486 18487 * API/testapi.c: 18488 (MyObject_convertToType): Implement type conversion to string. 18489 * API/testapi.js: Add a test for type conversion to string. 18490 18491 2008-03-26 Adam Roben <aroben (a] apple.com> 18492 18493 Windows build fix 18494 18495 * kjs/array_instance.cpp: Touched this. 18496 * wtf/HashFunctions.h: 18497 (WTF::intHash): Added 8- and 16-bit versions of intHash. 18498 18499 2008-03-26 Adam Roben <aroben (a] apple.com> 18500 18501 Force JSC headers to be copied by touching a file 18502 18503 * kjs/array_instance.cpp: 18504 (KJS::ArrayInstance::getPropertyNames): 18505 18506 2008-03-26 Adam Roben <aroben (a] apple.com> 18507 18508 Windows build fix after r31324 18509 18510 Written with Darin. 18511 18512 Added HashTable plumbing to support using wchar_t as a key type. 18513 18514 * wtf/HashFunctions.h: 18515 * wtf/HashTraits.h: 18516 (WTF::): 18517 18518 2008-03-26 Maciej Stachowiak <mjs (a] apple.com> 18519 18520 Reviewed by Darin. 18521 18522 - JSC part of fix for "SVG multichar glyph matching matches longest instead of first (affects Acid3 test 79)" 18523 http://bugs.webkit.org/show_bug.cgi?id=18118 18524 18525 * wtf/HashFunctions.h: 18526 (WTF::): 18527 * wtf/HashTraits.h: 18528 (WTF::): 18529 18530 2008-03-26 Alexey Proskuryakov <ap (a] webkit.org> 18531 18532 Reviewed by Darin. 18533 18534 Cache C string identifiers by address, not value, assuming that C strings can only 18535 be literals. 18536 18537 1% speedup on Acid3 test 26. 18538 18539 * kjs/identifier.cpp: 18540 (KJS::literalIdentifierTable): 18541 (KJS::Identifier::add): 18542 Added a new table to cache UString::Reps created from C strings by address. Elements are 18543 never removed from this cache, as only predefined identifiers can get there. 18544 18545 * kjs/identifier.h: 18546 (KJS::Identifier::Identifier): Added a warning. 18547 18548 2008-03-26 Alexey Proskuryakov <ap (a] webkit.org> 18549 18550 Rubber-stamped by Maciej. 18551 18552 An assertion was failing in function-toString-object-literals.html when parsing 1e-500. 18553 The condition existed before, and got uncovered by turning compiled-out dtoa checks into 18554 ASSERTs. 18555 18556 The assertion was verifying that the caller wasn't constructing a Bigint from 0. 18557 This might have had some reason behind it originally, but I couldn't find any, 18558 and this doesn't look like a reasonable requirement. 18559 18560 * kjs/dtoa.cpp: (d2b): Removed the assertion (two copies in different code paths). 18561 18562 2008-03-25 Adam Roben <aroben (a] apple.com> 18563 18564 Fix Bug 18077: Integrate testapi.c into the Windows build 18565 18566 <http://bugs.webkit.org/show_bug.cgi?id=18077> 18567 18568 Reviewed by Steve Falkenburg. 18569 18570 * JavaScriptCore.vcproj/testapi/testapi.vcproj: Added. 18571 18572 2008-03-25 Adam Roben <aroben (a] apple.com> 18573 18574 Make testapi.c compile under MSVC 18575 18576 Currently you must compile testapi.c as C++ code since MSVC does not 18577 support many C features that GCC does. 18578 18579 Reviewed by Steve Falkenburg. 18580 18581 * API/testapi.c: 18582 (nan): Added an implementation of this for MSVC. 18583 (assertEqualsAsUTF8String): Use malloc instead of dynamically-sized 18584 stack arrays. 18585 (assertEqualsAsCharactersPtr): Ditto. 18586 (print_callAsFunction): Ditto. 18587 (main): Ditto, and explicitly cast from UniChar* to JSChar*. 18588 18589 2008-03-25 Adam Roben <aroben (a] apple.com> 18590 18591 Stop using JavaScriptCore's custom stdbool.h and stdint.h on Windows 18592 18593 We can't remove the os-win32 directory yet because other ports (at 18594 least wx) are still relying on it. 18595 18596 Reviewed by Steve Falkenburg. 18597 18598 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 18599 - Made all the include paths match the one for the Debug 18600 configuration (these got out of sync in r30797) 18601 - Removed os-win32 from the include path 18602 - Removed os-win32 from the directories we copy to $WebKitOutputDir. 18603 - Removed stdint.h from the project 18604 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: 18605 Delete the files that we may have previously copied from the os-win32 18606 directory. 18607 18608 2008-03-25 Alexey Proskuryakov <ap (a] webkit.org> 18609 18610 Windows build fix. 18611 18612 * kjs/dtoa.cpp: Include stdint.h. 18613 18614 2008-03-25 Alexey Proskuryakov <ap (a] webkit.org> 18615 18616 Rubber-stamped by Darin. 18617 18618 Cleanup dtoa.cpp style. 18619 18620 * kjs/dtoa.cpp: 18621 (Bigint::Balloc): 18622 (Bigint::Bfree): 18623 (Bigint::multadd): 18624 (Bigint::s2b): 18625 (Bigint::hi0bits): 18626 (Bigint::lo0bits): 18627 (Bigint::i2b): 18628 (Bigint::mult): 18629 (Bigint::pow5mult): 18630 (Bigint::lshift): 18631 (Bigint::cmp): 18632 (Bigint::diff): 18633 (Bigint::ulp): 18634 (Bigint::b2d): 18635 (Bigint::d2b): 18636 (Bigint::ratio): 18637 (Bigint::): 18638 (Bigint::match): 18639 (Bigint::hexnan): 18640 (Bigint::kjs_strtod): 18641 (Bigint::quorem): 18642 (Bigint::rv_alloc): 18643 (Bigint::nrv_alloc): 18644 (Bigint::kjs_freedtoa): 18645 (Bigint::kjs_dtoa): 18646 * kjs/dtoa.h: 18647 18648 2008-03-24 Darin Adler <darin (a] apple.com> 18649 18650 Reviewed by Sam. 18651 18652 - convert a JavaScript immediate number to a string more efficiently 18653 18654 2% speedup of Acid3 test 26 18655 18656 * kjs/JSImmediate.cpp: 18657 (KJS::JSImmediate::toString): Take advantage of the fact that all immediate 18658 numbers are integers, and use the faster UString function for formatting integers 18659 instead of the slower one that works for floating point. I think this is a leftover 18660 from when immediate numbers were floating point. 18661 18662 2008-03-23 Sam Weinig <sam (a] webkit.org> 18663 18664 Reviewed by Darin Adler. 18665 18666 Fix http://bugs.webkit.org/show_bug.cgi?id=18048 18667 The "thisObject" parameter to JSEvaluateScript is not used properly 18668 18669 Making passing a thisObject to JSEvaluateScript actually set the thisObject of the created 18670 ExecState. 18671 18672 * API/testapi.c: 18673 (main): Add tests for setting the thisObject when calling JSEvaluateScript. 18674 18675 * kjs/ExecState.cpp: 18676 (KJS::ExecState::ExecState): Assign the thisObject to m_thisValue and remove the comment. 18677 18678 2008-03-22 Jesse Ruderman <jruderman (a] gmail.com> 18679 18680 Reviewed by Sam Weinig. Landed by eseidel. 18681 18682 Make testkjs flush stdout after printing. 18683 18684 * JavaScriptCore.xcodeproj/project.pbxproj: 18685 * kjs/testkjs.cpp: 18686 (functionPrint): 18687 18688 2008-03-21 Oliver Hunt <oliver (a] apple.com> 18689 18690 Reviewed by Maciej. 18691 18692 Optimise lookup of Math, undefined, NaN and Infinity 18693 18694 Added a method to JSVariableObject to allow us to inject DontDelete properties 18695 into the symbol table and localStorage. This results in a 0.4% progression in 18696 SunSpider, with a 8% gain in math-partial-sums. 18697 18698 * kjs/JSGlobalObject.cpp: 18699 (KJS::JSGlobalObject::reset): 18700 * kjs/JSVariableObject.h: 18701 (KJS::JSVariableObject::symbolTableInsert): 18702 18703 2008-03-21 Oliver Hunt <oliver (a] apple.com> 18704 18705 Reviewed by Geoff Garen. 18706 18707 Global properties that use LocalStorage are not correctly listed as enumerable. 18708 18709 The problem was caused by JSObject::getPropertyAttributes not being aware 18710 of the JSVariableObject SymbolTable. The fix is to make getPropertyAttributes 18711 virtual and override in JSVariableObject. This does not produce any performance 18712 regression. 18713 18714 * JavaScriptCore.exp: 18715 * kjs/JSVariableObject.cpp: 18716 (KJS::JSVariableObject::getPropertyNames): 18717 (KJS::JSVariableObject::getPropertyAttributes): 18718 * kjs/JSVariableObject.h: 18719 * kjs/object.h: 18720 18721 2008-03-21 Arkadiusz Miskiewicz <arekm (a] maven.pl> 18722 18723 Webkit does not build on linux powerpc 18724 18725 <http://bugs.webkit.org/show_bug.cgi?id=17019> 18726 18727 Reviewed by David Kilzer. 18728 18729 * wtf/TCSpinLock.h: 18730 (TCMalloc_SpinLock::Unlock): 18731 18732 2008-03-21 Rodney Dawes <dobey (a] wayofthemonkey.com> 18733 18734 Reviewed by Holger. 18735 18736 http://bugs.webkit.org/show_bug.cgi?id=17981 18737 18738 Add javascriptcore_cppflags to Programs_minidom_CPPFLAGS. 18739 18740 * GNUmakefile.am: 18741 18742 2008-03-21 Alexey Proskuryakov <ap (a] webkit.org> 18743 18744 Reviewed by Oliver Hunt. 18745 18746 Consolidate static identifier initializers within CommonIdentifiers. 18747 18748 No reliably measurable change on SunSpider; maybe a tiny improvement (within 0.2%). 18749 18750 * kjs/CommonIdentifiers.h: Added static identifiers that were lazily initialized 18751 throughout the code. 18752 18753 * kjs/date_object.cpp: 18754 (KJS::DateObjectImp::DateObjectImp): 18755 * kjs/function_object.cpp: 18756 (KJS::FunctionPrototype::FunctionPrototype): 18757 * kjs/object_object.cpp: 18758 (KJS::ObjectPrototype::ObjectPrototype): 18759 * kjs/regexp_object.cpp: 18760 (KJS::RegExpPrototype::RegExpPrototype): 18761 Use the values from CommonIdentifiers. 18762 18763 * kjs/lookup.h: Caching the identifier in a static wasn't a win on SunSpider, removed it. 18764 18765 * kjs/value.h: 18766 (KJS::jsNaN): We already have a shared NaN value, no need for a duplicate here. 18767 18768 * wtf/MathExtras.h: 18769 (wtf_atan2): Having local variables for numeric_limits constants is good for readability, 18770 but there is no reason to keep them static. 18771 18772 * JavaScriptCore.exp: Don't needlessly export JSGlobalObject::s_head. 18773 18774 2008-03-20 Oliver Hunt <oliver (a] apple.com> 18775 18776 Reviewed by Maciej. 18777 18778 Fix for leak introduced by inline ScopeChainNode use 18779 18780 To avoid any extra branches when managing an inline ScopeChainNode 18781 in the ScopeChain the inline node gets inserted with a refcount of 18782 2. This meant than when the ScopeChain was destroyed the ScopeChainNodes 18783 above the inline node would be leaked. 18784 18785 We resolve this by manually popping the inline node in the 18786 FunctionExecState destructor. 18787 18788 * JavaScriptCore.xcodeproj/project.pbxproj: 18789 * kjs/ExecStateInlines.h: 18790 (KJS::FunctionExecState::~FunctionExecState): 18791 * kjs/scope_chain.h: 18792 (KJS::ScopeChain::popInlineScopeNode): 18793 18794 2008-03-20 Mark Rowe <mrowe (a] apple.com> 18795 18796 Reviewed by Sam Weinig. 18797 18798 Ensure that the defines in FEATURE_DEFINES are sorted so that they will match the default settings of build-webkit. 18799 This will prevent the world from being rebuilt if you happen to switch between building in Xcode and with build-webkit on the 18800 command-line. 18801 18802 * Configurations/JavaScriptCore.xcconfig: 18803 18804 2008-03-20 David Krause <david.krause (a] gmail.com> 18805 18806 Reviewed by David Kilzer. 18807 18808 Fix http://bugs.webkit.org/show_bug.cgi?id=17923 18809 Bug 17923: ARM platform endian defines inaccurate 18810 18811 * wtf/Platform.h: 18812 Replaced !defined(__ARMEL__) check with !defined(__VFP_FP__) 18813 for PLATFORM(MIDDLE_ENDIAN) 18814 18815 2008-03-20 Maciej Stachowiak <mjs (a] apple.com> 18816 18817 - fix build 18818 18819 * JavaScriptCore.xcodeproj/project.pbxproj: install Activation.h as private 18820 18821 2008-03-20 Maciej Stachowiak <mjs (a] apple.com> 18822 18823 Reviewed by Oliver. 18824 18825 - reduce function call overhead for 1.014x speedup on SunSpider 18826 18827 I moved some functions from ExecState.cpp to ExecStateInline.h and 18828 from JSGlobalObject.cpp to JSGlobalObject.h, and declared them 18829 inline; machine function call overhead for these was hurting JS 18830 funcion call overhead. 18831 18832 * kjs/ExecState.cpp: 18833 * kjs/ExecStateInlines.h: Added. 18834 (KJS::ExecState::ExecState): 18835 (KJS::ExecState::~ExecState): 18836 (KJS::FunctionExecState::FunctionExecState): 18837 (KJS::FunctionExecState::~FunctionExecState): 18838 * kjs/JSGlobalObject.cpp: 18839 * kjs/JSGlobalObject.h: 18840 (KJS::JSGlobalObject::pushActivation): 18841 (KJS::JSGlobalObject::checkActivationCount): 18842 (KJS::JSGlobalObject::popActivation): 18843 * kjs/function.cpp: 18844 18845 2008-03-19 Oliver Hunt <oliver (a] apple.com> 18846 18847 Reviewed by Maciej. 18848 18849 Avoid heap allocating the root scope chain node for eval and closure free functions 18850 18851 Maciej suggested using an inline ScopeChainNode for functions that don't use eval 18852 or closures as they are unable to ever capture the scope chain. This gives us a 2.4% 18853 win in sunspider, a 15% win in controlflow-recursive, and big (>5%) wins in a number 18854 of other tests. 18855 18856 * kjs/ExecState.cpp: 18857 (KJS::ExecState::ExecState): 18858 * kjs/ExecState.h: 18859 * kjs/scope_chain.h: 18860 (KJS::ScopeChain::push): 18861 18862 2008-03-19 Mark Rowe <mrowe (a] apple.com> 18863 18864 Reviewed by Sam Weinig. 18865 18866 Fix release build. 18867 18868 * kjs/JSGlobalObject.cpp: Add missing #include. 18869 18870 2008-03-19 Sam Weinig <sam (a] webkit.org> 18871 18872 Reviewed by Anders Carlsson. 18873 18874 Fix for <rdar://problem/5785694> 18875 Crash occurs at KJS::Collector::collect() when loading web clip widgets with a PAC file 18876 18877 Make the activeExecStates stack per JSGlobalObject instead of static to ensure 18878 thread safety. 18879 18880 * JavaScriptCore.exp: 18881 * kjs/ExecState.cpp: 18882 (KJS::InterpreterExecState::InterpreterExecState): 18883 (KJS::InterpreterExecState::~InterpreterExecState): 18884 (KJS::EvalExecState::EvalExecState): 18885 (KJS::EvalExecState::~EvalExecState): 18886 (KJS::FunctionExecState::FunctionExecState): 18887 (KJS::FunctionExecState::~FunctionExecState): 18888 * kjs/ExecState.h: 18889 * kjs/JSGlobalObject.cpp: 18890 (KJS::JSGlobalObject::mark): 18891 * kjs/JSGlobalObject.h: 18892 (KJS::JSGlobalObject::activeExecStates): 18893 * kjs/collector.cpp: 18894 (KJS::Collector::collect): 18895 (KJS::Collector::reportOutOfMemoryToAllExecStates): Iterate all JSGlobalObjects and report 18896 the OutOfMemory condition to all the ExecStates in each. 18897 18898 2008-03-19 Jasper Bryant-Greene <jasper (a] unix.geek.nz> 18899 18900 Reviewed by Maciej Stachowiak. 18901 18902 Fix http://bugs.webkit.org/show_bug.cgi?id=17941 18903 Bug 17941: C++-style comments in JavaScriptCore API 18904 18905 * API/JSBase.h: 18906 Remove C++-style comments from public JavaScriptCore API, replacing 18907 with standard C90 block comments. 18908 18909 2008-03-19 Mark Rowe <mrowe (a] apple.com> 18910 18911 Reviewed by Oliver Hunt. 18912 18913 Fix http://bugs.webkit.org/show_bug.cgi?id=17939 18914 Bug 17939: Crash decompiling "const a = 1, b;" 18915 18916 * kjs/nodes2string.cpp: 18917 (KJS::ConstDeclNode::streamTo): Null-check the correct variable. 18918 18919 2008-03-18 Oliver Hunt <oliver (a] apple.com> 18920 18921 Reviewed by Mark Rowe. 18922 18923 Bug 17929: Incorrect decompilation with |const|, comma 18924 http://bugs.webkit.org/show_bug.cgi?id=17929 18925 18926 There were actually two bugs here. First we weren't correctly handling const 18927 nodes with multiple declarations. The second issue was caused by us not 18928 giving the correct precedence to the initialisers. 18929 18930 * kjs/nodes2string.cpp: 18931 (KJS::ConstDeclNode::streamTo): 18932 18933 2008-03-18 Darin Adler <darin (a] apple.com> 18934 18935 Reviewed by Maciej. 18936 18937 - Speed up JavaScript built-in properties by changing the 18938 hash table to take advantage of the identifier objects 18939 18940 5% speedup for Acid3 test 26 18941 18942 * JavaScriptCore.exp: Updated. 18943 * kjs/create_hash_table: Compute size of hash table large enough so that there 18944 are no collisions, but don't generate the hash table. 18945 * kjs/identifier.h: Made the add function that returns a PassRefPtr public. 18946 * kjs/lexer.cpp: 18947 (KJS::Lexer::lex): Updated for change to HashTable interface. 18948 * kjs/lookup.cpp: 18949 (KJS::HashTable::changeKeysToIdentifiers): Added. Finds the identifier for 18950 each property so the equality comparision can be done with pointer comparision. 18951 * kjs/lookup.h: Made the key be a union of char* with UString::Rep* so it can 18952 hold identifiers. Added a keysAreIdentifiers flag to the HashTable. Changed 18953 the Lookup functions to be member functions of HashTable instead. 18954 * kjs/object.cpp: 18955 (KJS::JSObject::deleteProperty): Update for change to HashTable. 18956 (KJS::JSObject::findPropertyHashEntry): Ditto. 18957 (KJS::JSObject::getPropertyAttributes): Ditto. 18958 (KJS::JSObject::getPropertyNames): Ditto. 18959 18960 2008-03-18 Mark Rowe <mrowe (a] apple.com> 18961 18962 Reviewed by Oliver Hunt. 18963 18964 Fix http://bugs.webkit.org/show_bug.cgi?id=17925 and http://bugs.webkit.org/show_bug.cgi?id=17927. 18965 - Bug 17925: Crash in KJS::JSObject::put after setting this.__proto__ 18966 - Bug 17927: Hang after attempting to create circular __proto__ 18967 18968 * kjs/object.cpp: 18969 (KJS::JSObject::put): Silently ignore attempts to set __proto__ to a non-object, non-null value. 18970 Return after setting the exception when an attempt to set a cyclic __proto__ is detected so that 18971 the cyclic value is not set. 18972 18973 2008-03-18 Maciej Stachowiak <mjs (a] apple.com> 18974 18975 Reviewed by Oliver. 18976 18977 - inline ActivationImp::init for 0.8% SunSpider speedup 18978 18979 * kjs/Activation.h: 18980 (KJS::ActivationImp::init): Moved here from function.cpp 18981 * kjs/function.cpp: 18982 18983 2008-03-18 Simon Hausmann <hausmann (a] webkit.org> 18984 18985 Fix the Qt build. 18986 18987 Including config.h like in the other .cpp files gets the #ifdeffery 18988 correct for rand_s. 18989 18990 * kjs/JSWrapperObject.cpp: 18991 18992 2008-03-17 Darin Adler <darin (a] apple.com> 18993 18994 Reviewed by Maciej. 18995 18996 JavaScriptCore changes to support a WebCore speedup. 18997 18998 * JavaScriptCore.exp: Export the UString::Rep::computeHash function. 18999 * wtf/HashSet.h: Added a find and contains function that take a translator, 19000 like the add function. 19001 19002 2008-03-18 Maciej Stachowiak <mjs (a] apple.com> 19003 19004 Reviewed by Oliver. 19005 19006 - a few micro-optimizations for 1.2% SunSpider speedup 19007 19008 * kjs/function.cpp: 19009 (KJS::FunctionImp::callAsFunction): check for Return completion before Throw, 19010 it is more likely. 19011 * kjs/object.cpp: 19012 (KJS::JSObject::put): When walking prototype chain, instead of 19013 checking isObject (a virtual call), compare to jsNull (compare to 19014 a constant) since null is the only non-object that can be in a 19015 prototype chain. 19016 19017 2008-03-17 Oliver Hunt <oliver (a] apple.com> 19018 19019 Reviewed by Geoff. 19020 19021 Optimise multi-scope function call resolution 19022 19023 Refactor multiscope variable resolution and use to add 19024 optimised FunctionCallResolveNode subclasses. 19025 19026 2.6% gain in sunspider performance, *25%* gain in controlflow-recursive 19027 19028 * kjs/nodes.cpp: 19029 (KJS::getSymbolTableEntry): 19030 (KJS::ResolveNode::optimizeVariableAccess): 19031 (KJS::getNonLocalSymbol): 19032 (KJS::ExpressionNode::resolveAndCall): 19033 (KJS::FunctionCallResolveNode::optimizeVariableAccess): 19034 (KJS::FunctionCallResolveNode::inlineEvaluate): 19035 (KJS::ScopedVarFunctionCallNode::inlineEvaluate): 19036 (KJS::ScopedVarFunctionCallNode::evaluate): 19037 (KJS::ScopedVarFunctionCallNode::evaluateToNumber): 19038 (KJS::ScopedVarFunctionCallNode::evaluateToBoolean): 19039 (KJS::ScopedVarFunctionCallNode::evaluateToInt32): 19040 (KJS::ScopedVarFunctionCallNode::evaluateToUInt32): 19041 (KJS::NonLocalVarFunctionCallNode::inlineEvaluate): 19042 (KJS::NonLocalVarFunctionCallNode::evaluate): 19043 (KJS::NonLocalVarFunctionCallNode::evaluateToNumber): 19044 (KJS::NonLocalVarFunctionCallNode::evaluateToBoolean): 19045 (KJS::NonLocalVarFunctionCallNode::evaluateToInt32): 19046 (KJS::NonLocalVarFunctionCallNode::evaluateToUInt32): 19047 * kjs/nodes.h: 19048 (KJS::ScopedVarFunctionCallNode::): 19049 (KJS::NonLocalVarFunctionCallNode::): 19050 19051 2008-03-17 David Kilzer <ddkilzer (a] apple.com> 19052 19053 Don't define PLATFORM(MIDDLE_ENDIAN) on little endian ARM. 19054 19055 Reviewed by Darin. 19056 19057 See <http://bugs.webkit.org/show_bug.cgi?id=15416#c13>. 19058 19059 * wtf/Platform.h: Added check for !defined(__ARMEL__) when defining 19060 PLATFORM(MIDDLE_ENDIAN). 19061 19062 2008-03-17 Oliver Hunt <oliver (a] apple.com> 19063 19064 Reviewed by Geoff, Darin and Weinig. 19065 19066 Add fast multi-level scope lookup 19067 19068 Add logic and AST nodes to provide rapid variable resolution across 19069 static scope boundaries. This also adds logic that allows us to skip 19070 any static scopes that do not contain the variable to be resolved. 19071 19072 This results in a ~2.5% speedup in SunSpider, and gives a 25-30% speedup 19073 in some simple and ad hoc closure and global variable access tests. 19074 19075 * JavaScriptCore.exp: 19076 * kjs/Activation.h: 19077 * kjs/JSGlobalObject.cpp: 19078 * kjs/JSGlobalObject.h: 19079 * kjs/JSVariableObject.cpp: 19080 * kjs/JSVariableObject.h: 19081 * kjs/function.cpp: 19082 (KJS::ActivationImp::isDynamicScope): 19083 * kjs/nodes.cpp: 19084 (KJS::ResolveNode::optimizeVariableAccess): 19085 (KJS::ScopedVarAccessNode::inlineEvaluate): 19086 (KJS::ScopedVarAccessNode::evaluate): 19087 (KJS::ScopedVarAccessNode::evaluateToNumber): 19088 (KJS::ScopedVarAccessNode::evaluateToBoolean): 19089 (KJS::ScopedVarAccessNode::evaluateToInt32): 19090 (KJS::ScopedVarAccessNode::evaluateToUInt32): 19091 (KJS::NonLocalVarAccessNode::inlineEvaluate): 19092 (KJS::NonLocalVarAccessNode::evaluate): 19093 (KJS::NonLocalVarAccessNode::evaluateToNumber): 19094 (KJS::NonLocalVarAccessNode::evaluateToBoolean): 19095 (KJS::NonLocalVarAccessNode::evaluateToInt32): 19096 (KJS::NonLocalVarAccessNode::evaluateToUInt32): 19097 (KJS::IfElseNode::optimizeVariableAccess): 19098 (KJS::ScopeNode::optimizeVariableAccess): 19099 * kjs/nodes.h: 19100 (KJS::ScopedVarAccessNode::): 19101 (KJS::NonLocalVarAccessNode::): 19102 * kjs/object.h: 19103 19104 2008-03-16 weihongzeng <weihong.zeng (a] hotmail.com> 19105 19106 Reviewed by Darin Adler. 19107 19108 http://bugs.webkit.org/show_bug.cgi?id=15416 19109 Add support for mixed-endian processors 19110 19111 * kjs/dtoa.cpp: Add IEEE_ARM, triggered by PLATFORM(MIDDLE_ENDIAN). 19112 19113 2008-03-16 Kevin Ollivier <kevino (a] theolliviers.com> 19114 19115 Rubber stamped by Darin. 19116 19117 Add set-webkit-configuration support for wx port, and centralize 19118 build dir location setting. 19119 19120 http://bugs.webkit.org/show_bug.cgi?id=17790 19121 19122 * jscore.bkl: 19123 19124 2008-03-14 Steve Falkenburg <sfalken (a] apple.com> 19125 19126 PGO build fixes. 19127 19128 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 19129 19130 2008-03-14 Oliver Hunt <oliver (a] apple.com> 19131 19132 Reviewed by Maciej. 19133 19134 Add logic to track whether a function uses a locally scoped eval or requires a closure 19135 19136 Now that we limit eval we can track those uses of eval that operate 19137 in the local scope and functions that require a closure. We track 19138 this information during initial parsing to avoid yet another tree 19139 walk. 19140 19141 * JavaScriptCore.exp: 19142 * kjs/NodeInfo.h: 19143 * kjs/Parser.cpp: 19144 (KJS::Parser::didFinishParsing): 19145 * kjs/Parser.h: 19146 (KJS::Parser::parse): 19147 * kjs/grammar.y: 19148 * kjs/nodes.cpp: 19149 (KJS::ScopeNode::ScopeNode): 19150 (KJS::ProgramNode::ProgramNode): 19151 (KJS::ProgramNode::create): 19152 (KJS::EvalNode::EvalNode): 19153 (KJS::EvalNode::create): 19154 (KJS::FunctionBodyNode::FunctionBodyNode): 19155 (KJS::FunctionBodyNode::create): 19156 * kjs/nodes.h: 19157 (KJS::ScopeNode::): 19158 (KJS::ScopeNode::usesEval): 19159 (KJS::ScopeNode::needsClosure): 19160 19161 2008-03-14 Geoffrey Garen <ggaren (a] apple.com> 19162 19163 Reviewed by Beth Dakin. 19164 19165 Fixed another problem with Vector::shrinkCapacity. 19166 19167 moveOverlapping isn't good enough for the case where the buffer hasn't 19168 changed, because it still destroys the contents of the buffer. 19169 19170 * wtf/Vector.h: 19171 (WTF::::shrinkCapacity): Changed to explicitly check whether the call 19172 to allocateBuffer produced a new buffer. If it didn't, there's no need 19173 to move. 19174 19175 2008-03-14 Geoffrey Garen <ggaren (a] apple.com> 19176 19177 Reviewed by Beth Dakin. 19178 19179 Fixed a few problems with Vector::shrinkCapacity that I noticed in testing. 19180 19181 * wtf/Vector.h: 19182 (WTF::VectorBufferBase::deallocateBuffer): Clear our m_buffer pointer 19183 when we deallocate m_buffer, in case we're not asked to reallocate a new 19184 buffer. (Otherwise, we would use a stale m_buffer if we were asked to 19185 perform any operations after shrinkCapacity was called.) 19186 19187 (WTF::VectorBuffer::allocateBuffer): Made VectorBuffer with inline 19188 capacity aware that calls to allocateBuffer might be shrinks, rather 19189 than grows, so we shouldn't allocate a new buffer on the heap unless 19190 our inline buffer is too small. 19191 19192 (WTF::::shrinkCapacity): Call resize() instead of just setting m_size, 19193 so destructors run. Call resize before reallocating the buffer to make 19194 sure that we still have access to the objects we need to destroy. Call 19195 moveOverlapping instead of move, since a call to allocateBuffer on an 19196 inline buffer may produce identical storage. 19197 19198 2008-03-14 Alexey Proskuryakov <ap (a] webkit.org> 19199 19200 Reviewed by Darin. 19201 19202 Get rid of a localime() call on platforms that have better alternatives. 19203 19204 * kjs/DateMath.h: Added getLocalTime(); 19205 19206 * kjs/DateMath.cpp: 19207 (KJS::getLocalTime): 19208 (KJS::getDSTOffsetSimple): 19209 Implementation moved from getDSTOffsetSimple(). 19210 19211 * kjs/date_object.cpp: 19212 (KJS::DateObjectImp::callAsFunction): Switched to getLocalTime(). 19213 19214 2008-03-14 David D. Kilzer <ddkilzer (a] apple.com> 19215 19216 Unify concept of enabling the Mac Java bridge. 19217 19218 Reviewed by Darin and Anders. 19219 19220 * wtf/Platform.h: Define ENABLE_MAC_JAVA_BRIDGE here. 19221 19222 2008-03-13 Mark Mentovai <mark (a] moxienet.com> 19223 19224 Reviewed by eseidel. Landed by eseidel. 19225 19226 * wtf/FastMalloc.cpp: #include <wtf/HashSet.h> outside of any 19227 namespaces. 19228 19229 2008-03-13 Mark Mentovai <mark (a] moxienet.com> 19230 19231 Reviewed by eseidel. Landed by eseidel. 19232 19233 * pcre/pcre_exec.cpp: Fix misnamed variable, allowing -DDEBUG build 19234 to succeed. 19235 * wtf/ThreadingPthreads.cpp: #include <sys/time.h> for gettimeofday 19236 in non-pch build. 19237 19238 2008-03-13 Steve Falkenburg <sfalken (a] apple.com> 19239 19240 PGO build fixes. 19241 19242 Disable PGO for normal release builds. 19243 Added work-in-progress Release_PGOInstrument/Release_PGOOptimize targets. 19244 19245 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 19246 19247 2008-03-13 Beth Dakin <bdakin (a] apple.com> 19248 19249 Reviewed by Geoff. 19250 19251 Adding new functionality to Vector. Currently all of the shrink and 19252 resize functions on Vector only shrink the size of the Vector, not 19253 the capacity. For the Vector to take up as little memory as 19254 possible, though, it is necessary to be able to shrink the capacity 19255 as well. So this patch adds that functionality. 19256 19257 I need this for a speed up I am working on, and Geoff wants to use 19258 it in a speed up he is working on also, so he asked me to commit it 19259 now. 19260 19261 * wtf/Vector.h: 19262 (WTF::VectorBufferBase::allocateBuffer): 19263 (WTF::::shrinkCapacity): 19264 19265 2008-03-13 Simon Hausmann <hausmann (a] webkit.org> 19266 19267 Reviewed by Adam Roben. 19268 19269 Attempt at fixing the Qt/Windows build bot. Quote using double-quotes 19270 instead of single quotes. 19271 19272 * pcre/dftables: 19273 19274 2008-03-12 Steve Falkenburg <sfalken (a] apple.com> 19275 19276 Build fix. 19277 19278 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 19279 19280 2008-03-12 Alp Toker <alp (a] atoker.com> 19281 19282 Another autotools testkjs build fix attempt. 19283 19284 * GNUmakefile.am: 19285 19286 2008-03-12 Alp Toker <alp (a] atoker.com> 19287 19288 Attempt to fix the autotools testkjs build on systems with 19289 non-standard include paths. 19290 19291 * GNUmakefile.am: 19292 19293 2008-03-11 Alexey Proskuryakov <ap (a] webkit.org> 19294 19295 Reviewed by Darin. 19296 19297 <rdar://problem/5787743> REGRESSION: Crash at WTF::Collator::CreateCollator() running fast/js/kde/StringObject.html on Windows 19298 19299 * wtf/unicode/icu/CollatorICU.cpp: 19300 (WTF::Collator::createCollator): Check for null (== user default) m_locale before calling strcmp. 19301 19302 2008-03-11 Steve Falkenburg <sfalken (a] apple.com> 19303 19304 Disable LTCG/PGO for grammar.cpp and nodes.cpp. 19305 PGO on these files causes us to hang. 19306 19307 Copy newer vsprops files from relative WebKitLibraries path to environment variable based path. 19308 19309 Reviewed by Oliver. 19310 19311 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 19312 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: 19313 19314 2008-03-10 Darin Adler <darin (a] apple.com> 19315 19316 - Windows build fix 19317 19318 * kjs/function.cpp: (KJS::decode): Initialize variable. 19319 19320 2008-03-10 Brent Fulgham <bfulgham (a] gmail.com> 19321 19322 Windows build fix 19323 19324 Reviewed by Adam. 19325 19326 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: 19327 Set the PATH to include Cygwin before running touch. 19328 19329 2008-03-10 Eric Seidel <eric (a] webkit.org> 19330 19331 Build fix for JSC on windows. 19332 19333 * API/JSStringRefCF.cpp: 19334 (JSStringCreateWithCFString): 19335 * kjs/function.cpp: 19336 (KJS::decode): 19337 * kjs/nodes2string.cpp: 19338 (KJS::escapeStringForPrettyPrinting): 19339 19340 2008-03-10 Eric Seidel <eric (a] webkit.org> 19341 19342 No review, build fix only. 19343 19344 Attempt to fix the windows build? 19345 19346 * kjs/ustring.h: change unsigned short to UChar 19347 19348 2008-03-10 Eric Seidel <eric (a] webkit.org> 19349 19350 Reviewed by Darin. 19351 19352 Remove KJS::UChar, use ::UChar instead 19353 http://bugs.webkit.org/show_bug.cgi?id=17017 19354 19355 * API/JSStringRef.cpp: 19356 (JSStringCreateWithCharacters): 19357 (JSStringCreateWithUTF8CString): 19358 * API/JSStringRefCF.cpp: 19359 (JSStringCreateWithCFString): 19360 * JavaScriptCore.exp: 19361 * kjs/Parser.h: 19362 * kjs/function.cpp: 19363 (KJS::decode): 19364 (KJS::parseInt): 19365 (KJS::parseFloat): 19366 (KJS::globalFuncEscape): 19367 (KJS::globalFuncUnescape): 19368 * kjs/function_object.cpp: 19369 (KJS::FunctionObjectImp::construct): 19370 * kjs/identifier.cpp: 19371 (KJS::Identifier::equal): 19372 (KJS::CStringTranslator::translate): 19373 * kjs/interpreter.h: 19374 * kjs/lexer.cpp: 19375 (KJS::Lexer::setCode): 19376 (KJS::Lexer::shift): 19377 (KJS::Lexer::lex): 19378 (KJS::Lexer::convertUnicode): 19379 (KJS::Lexer::makeIdentifier): 19380 * kjs/lookup.cpp: 19381 (KJS::keysMatch): 19382 * kjs/nodes2string.cpp: 19383 (KJS::escapeStringForPrettyPrinting): 19384 (KJS::SourceStream::operator<<): 19385 * kjs/regexp.cpp: 19386 (KJS::RegExp::RegExp): 19387 (KJS::RegExp::match): 19388 * kjs/string_object.cpp: 19389 (KJS::substituteBackreferences): 19390 (KJS::stringProtoFuncCharCodeAt): 19391 (KJS::stringProtoFuncToLowerCase): 19392 (KJS::stringProtoFuncToUpperCase): 19393 (KJS::stringProtoFuncToLocaleLowerCase): 19394 (KJS::stringProtoFuncToLocaleUpperCase): 19395 * kjs/ustring.cpp: 19396 (KJS::UString::Rep::computeHash): 19397 (KJS::UString::UString): 19398 (KJS::UString::append): 19399 (KJS::UString::ascii): 19400 (KJS::UString::operator=): 19401 (KJS::UString::is8Bit): 19402 (KJS::UString::toStrictUInt32): 19403 (KJS::UString::find): 19404 (KJS::operator==): 19405 (KJS::operator<): 19406 (KJS::compare): 19407 (KJS::UString::UTF8String): 19408 * kjs/ustring.h: 19409 * pcre/pcre.h: 19410 19411 2008-03-09 Steve Falkenburg <sfalken (a] apple.com> 19412 19413 Stop Windows build if an error occurs in a prior project. 19414 19415 Rubber stamped by Darin. 19416 19417 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 19418 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: 19419 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 19420 * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: 19421 19422 2008-03-09 Jrg Billeter <j (a] bitron.ch> 19423 19424 Reviewed by Alp Toker. 19425 19426 Conditionalise ICU for Unicode in the GTK+ port. 19427 19428 * wtf/Platform.h: 19429 19430 2008-03-07 David D. Kilzer <ddkilzer (a] apple.com> 19431 19432 Unify concept of enabling Netscape Plug-in API (NPAPI). 19433 19434 Reviewed by Darin. 19435 19436 * wtf/Platform.h: Define ENABLE_NETSCAPE_PLUGIN_API here. 19437 19438 2008-03-07 Geoffrey Garen <ggaren (a] apple.com> 19439 19440 Reviewed by Darin Adler. 19441 19442 Fixed <rdar://problem/5689093> Stricter (ES4) eval semantics 19443 19444 The basic rule is: 19445 19446 - "eval(s)" is treated as an operator that gives the ES3 eval behavior. 19447 ... but only if there is no overriding declaration of "eval" in scope. 19448 - All other invocations treat eval as a function that evaluates a 19449 script in the context of its "this" object. 19450 ... but if its "this" object is not the global object it was 19451 originally associated with, eval throws an exception. 19452 19453 Because only expressions of the form "eval(s)" have access to local 19454 scope, the compiler can now statically determine whether a function 19455 needs local scope to be dynamic. 19456 19457 * kjs/nodes.h: Added FunctionCallEvalNode. It works just like 19458 FuncationCallResolveNode, except it statically indicates that the node 19459 may execute eval in the ES3 way. 19460 * kjs/nodes.cpp: 19461 * kjs/nodes2string.cpp: 19462 19463 * tests/mozilla/expected.html: This patch happens to fix a Mozilla JS 19464 test, but it's a bit of a pyrrhic victory. The test intends to test 19465 Mozilla's generic API for calling eval on any object, but, in reality, 19466 we only support calling eval on the global object. 19467 19468 2008-03-06 Steve Falkenburg <sfalken (a] apple.com> 19469 19470 Build fix. 19471 19472 * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: 19473 19474 2008-03-06 Steve Falkenburg <sfalken (a] apple.com> 19475 19476 Build fix. 19477 19478 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 19479 19480 2008-03-06 Alp Toker <alp (a] atoker.com> 19481 19482 Fix the build fix in r30845 to support out-of-tree builds. 19483 19484 * GNUmakefile.am: 19485 19486 2008-03-06 Steve Falkenburg <sfalken (a] apple.com> 19487 19488 Build fix. 19489 19490 * wtf/ThreadingWin.cpp: 19491 (WTF::ThreadCondition::timedWait): 19492 19493 2008-03-06 Darin Adler <darin (a] apple.com> 19494 19495 - another small step towards fixing the Qt build 19496 19497 * JavaScriptCore.pri: Remove more references to the now-obsolete bindings directory. 19498 19499 2008-03-06 Darin Adler <darin (a] apple.com> 19500 19501 - a small step towards fixing the Qt build 19502 19503 * JavaScriptCore.pri: Remove references to files no longer present in JavaScriptCore/bindings. 19504 19505 2008-03-06 Brady Eidson <beidson (a] apple.com> 19506 19507 Gtk Build fix 19508 19509 * wtf/ThreadingGtk.cpp: 19510 (WTF::ThreadCondition::timedWait): 19511 19512 2008-03-06 Alexey Proskuryakov <ap (a] webkit.org> 19513 19514 Wx build fix. 19515 19516 * wtf/unicode/icu/CollatorICU.cpp: 19517 (WTF::Collator::userDefault): Put ICU workaround under both PLATFORM(DARWIN) and 19518 PLATFORM(CF) checks, so that each port can decide if it wants to use CF on Mac for it. 19519 19520 2008-03-06 Brady Eidson <beidson (a] apple.com> 19521 19522 Reviewed by Darin 19523 19524 Add a timedWait() method to ThreadCondition 19525 19526 * JavaScriptCore.exp: 19527 19528 * wtf/Threading.h: 19529 19530 * wtf/ThreadingGtk.cpp: 19531 (WTF::ThreadCondition::timedWait): 19532 19533 * wtf/ThreadingNone.cpp: 19534 (WTF::ThreadCondition::timedWait): 19535 19536 * wtf/ThreadingPthreads.cpp: 19537 (WTF::ThreadCondition::timedWait): 19538 19539 * wtf/ThreadingWin.cpp: 19540 (WTF::ThreadCondition::timedWait): Needs implementation 19541 19542 2008-03-06 Alexey Proskuryakov <ap (a] webkit.org> 19543 19544 More build fixes. 19545 19546 * jscore.bkl: Add the wtf/unicode directory. 19547 * wtf/unicode/CollatorDefault.cpp: 19548 (WTF::Collator::userDefault): Use a constructor that does exist. 19549 * wtf/unicode/icu/CollatorICU.cpp: Mac build fix for case-sensitive file systems. 19550 19551 2008-03-06 Darin Adler <darin (a] apple.com> 19552 19553 - try to fix the Qt build 19554 19555 * JavaScriptCore.pri: Add the wtf/unicode directory. 19556 19557 2008-03-06 Darin Adler <darin (a] apple.com> 19558 19559 - try to fix the GTK build 19560 19561 * GNUmakefile.am: Add a -I for the wtf/unicode directory. 19562 19563 2008-03-06 Darin Adler <darin (a] apple.com> 19564 19565 - try to fix the Mac build 19566 19567 * icu/unicode/parseerr.h: Copied from ../WebCore/icu/unicode/parseerr.h. 19568 * icu/unicode/ucol.h: Copied from ../WebCore/icu/unicode/ucol.h. 19569 * icu/unicode/uloc.h: Copied from ../WebCore/icu/unicode/uloc.h. 19570 * icu/unicode/unorm.h: Copied from ../WebCore/icu/unicode/unorm.h. 19571 * icu/unicode/uset.h: Copied from ../WebCore/icu/unicode/uset.h. 19572 19573 2008-03-06 Alexey Proskuryakov <ap (a] webkit.org> 19574 19575 Reviewed by Darin. 19576 19577 <rdar://problem/5687269> Need to create a Collator abstraction for WebCore and JavaScriptCore 19578 19579 * wtf/Threading.h: 19580 (WTF::initializeThreading): 19581 * wtf/ThreadingGtk.cpp: 19582 (WTF::initializeThreading): 19583 * wtf/ThreadingNone.cpp: 19584 * wtf/ThreadingPthreads.cpp: 19585 * wtf/ThreadingWin.cpp: 19586 Added AtomicallyInitializedStatic. 19587 19588 * kjs/string_object.cpp: (KJS::localeCompare): Changed to use Collator. 19589 19590 * GNUmakefile.am: 19591 * JavaScriptCore.exp: 19592 * JavaScriptCore.pri: 19593 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 19594 * JavaScriptCore.xcodeproj/project.pbxproj: 19595 * JavaScriptCoreSources.bkl: 19596 Added new fiiles to projects. 19597 19598 * wtf/unicode/Collator.h: Added. 19599 (WTF::Collator::): 19600 * wtf/unicode/CollatorDefault.cpp: Added. 19601 (WTF::Collator::Collator): 19602 (WTF::Collator::~Collator): 19603 (WTF::Collator::setOrderLowerFirst): 19604 (WTF::Collator::collate): 19605 * wtf/unicode/icu/CollatorICU.cpp: Added. 19606 (WTF::cachedCollatorMutex): 19607 (WTF::Collator::Collator): 19608 (WTF::Collator::~Collator): 19609 (WTF::Collator::setOrderLowerFirst): 19610 (WTF::Collator::collate): 19611 (WTF::Collator::createCollator): 19612 (WTF::Collator::releaseCollator): 19613 19614 2008-03-05 Kevin Ollivier <kevino (a] theolliviers.com> 19615 19616 Fix the wx build after the bindings move. 19617 19618 * JavaScriptCoreSources.bkl: 19619 * jscore.bkl: 19620 19621 2008-03-05 Alp Toker <alp (a] atoker.com> 19622 19623 GTK+ build fix for breakage introduced in r30800. 19624 19625 Track moved bridge sources from JavaScriptCore to WebCore. 19626 19627 * GNUmakefile.am: 19628 19629 2008-03-05 Brent Fulgham <bfulgham (a] gmail.com> 19630 19631 Reviewed by Adam Roben. 19632 19633 Remove definition of WTF_USE_SAFARI_THEME from wtf/Platform.h 19634 because the PLATFORM(CG) flag is not set until config.h has 19635 already included this file. 19636 19637 * wtf/Platform.h: Remove useless definition of WTF_USE_SAFARI_THEME 19638 19639 2008-03-05 Brady Eidson <beidson (a] apple.com> 19640 19641 Reviewed by Alexey and Mark Rowe 19642 19643 Fix for <rdar://problem/5778247> - Reproducible crash on storage/execute-sql-args.html 19644 19645 DatabaseThread::unscheduleDatabaseTasks() manually filters through a MessageQueue, 19646 removing particular items for Databases that were shutting down. 19647 19648 This filtering operation is not atomic, and therefore causes a race condition with the 19649 MessageQueue waking up and reading from the message queue. 19650 19651 The end result was an attempt to dereference a null DatabaseTask. Timing-wise, this never 19652 seemed to happen in a debug build, otherwise an assertion would've caught it. Replacing that 19653 assertion with a crash in a release build is what revealed this bug. 19654 19655 * wtf/MessageQueue.h: 19656 (WTF::::waitForMessage): Tweak the waiting logic to check the queue's empty state then go back 19657 to sleep if the queue was empty - checking m_killed each time it wakes up. 19658 19659 2008-03-05 David D. Kilzer <ddkilzer (a] apple.com> 19660 19661 Remove unused header includes from interpreter.cpp. 19662 19663 Reviewed by Darin. 19664 19665 * kjs/interpreter.cpp: Remove unused header includes. 19666 19667 2008-03-05 Anders Carlsson <andersca (a] apple.com> 19668 19669 Reviewed by Sam. 19670 19671 Remove bindings/. 19672 19673 * bindings: Removed. 19674 19675 2008-03-05 Anders Carlsson <andersca (a] apple.com> 19676 19677 Don't build bindings/ anymore. 19678 19679 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 19680 19681 2008-03-05 Anders Carlsson <andersca (a] apple.com> 19682 19683 Reviewed by Geoff. 19684 19685 Don't build JavaScriptCore/bindings. 19686 19687 * JavaScriptCore.exp: 19688 Export a couple of new functions. 19689 19690 * JavaScriptCore.xcodeproj/project.pbxproj: 19691 Remove bindings/ 19692 19693 * kjs/config.h: 19694 No need to define HAVE_JNI anymore. 19695 19696 * kjs/interpreter.cpp: 19697 Remove unnecessary include. 19698 19699 2008-03-05 David D. Kilzer <ddkilzer (a] apple.com> 19700 19701 Allow override of default script file name using command-line argument. 19702 19703 Reviewed by Adele. 19704 19705 * API/minidom.c: 19706 (main): Allow first command-line argument to override the default script 19707 file name of "minidom.js". 19708 * API/testapi.c: 19709 (main): Allow first command-line argument to override the default script 19710 file name of "testapi.js". 19711 19712 2008-03-04 Mark Rowe <mrowe (a] apple.com> 19713 19714 Mac build fix. 19715 19716 * JavaScriptCore.exp: Add new symbol to exports file. 19717 19718 2008-03-03 Oliver Hunt <oliver (a] apple.com> 19719 19720 Reviewed by Anders. 19721 19722 Make ForInNode check for the timeout interrupt 19723 19724 * kjs/nodes.cpp: 19725 (KJS::ForInNode::execute): 19726 19727 2008-03-02 Brent Fulgham <bfulgham (a] gmail.com> 19728 19729 Reviewed by Alp Toker. 19730 19731 http://bugs.webkit.org/show_bug.cgi?id=17415 19732 GTK Build (using autotools) on Mac OS (DarwinPorts) Fails 19733 19734 Add -lstdc++ to link flags for minidom program. This corrects 19735 a build error for the GTK+ on Mac OS. 19736 19737 * GNUmakefile.am: 19738 19739 2008-03-01 Mark Rowe <mrowe (a] apple.com> 19740 19741 Reviewed by Tim Hatcher. 19742 19743 Update Xcode configuration to support building debug and release from the mysterious future. 19744 19745 * Configurations/Base.xcconfig: 19746 * Configurations/DebugRelease.xcconfig: 19747 19748 2008-02-29 Brent Fulgham <bfulgham (a] gmail.com> 19749 19750 http://bugs.webkit.org/show_bug.cgi?id=17483 19751 Implement scrollbars on Windows (Cairo) 19752 19753 Reviewed by Adam Roben. 19754 19755 * wtf/Platform.h: 19756 19757 2008-02-29 Adam Roben <aroben (a] apple.com> 19758 19759 Remove unused DebuggerImp::abort and DebuggerImp::aborted 19760 19761 Reviewed by Tim and Sam. 19762 19763 * kjs/function_object.cpp: 19764 (KJS::FunctionObjectImp::construct): 19765 * kjs/internal.h: 19766 (KJS::DebuggerImp::DebuggerImp): 19767 * kjs/nodes.cpp: 19768 (KJS::Node::handleException): 19769 (KJS::FunctionBodyNodeWithDebuggerHooks::execute): 19770 19771 2008-02-28 Eric Christopher <echristo (a] apple.com> 19772 19773 Reviewed by Geoffrey Garen. 19774 19775 ** TOTAL **: 1.005x as fast 2867.6ms +/- 0.4% 2853.2ms +/- 0.3% significant 19776 19777 * kjs/nodes.cpp: Tell the compiler that exceptions are unexpected (for 19778 the sake of branch prediction and code organization). 19779 19780 2008-02-27 Alexey Proskuryakov <ap (a] webkit.org> 19781 19782 Reviewed by Sam Weinig. 19783 19784 http://bugs.webkit.org/show_bug.cgi?id=17030 19785 Small buffer overflow within initialization 19786 19787 * kjs/date_object.cpp: 19788 (KJS::DateObjectFuncImp::callAsFunction): 19789 (KJS::parseDate): 19790 Remove unnecessary and incorrect memset() calls - GregorianDateTime can initialize itself. 19791 19792 2008-02-25 Sam Weinig <sam (a] webkit.org> 19793 19794 Reviewed by Dan Bernstein. 19795 19796 - Add a variant of remove that takes a position and a length. 19797 19798 * wtf/Vector.h: 19799 (WTF::Vector::remove): 19800 19801 2008-02-25 Mark Mentovai <mark (a] moxienet.com> 19802 19803 Reviewed by Mark Rowe. 19804 19805 Enable CollectorHeapIntrospector to build by itself, as well as in an AllInOneFile build. 19806 http://bugs.webkit.org/show_bug.cgi?id=17538 19807 19808 * kjs/CollectorHeapIntrospector.cpp: Provide "using" declaration for 19809 WTF::RemoteMemoryReader. 19810 * kjs/collector.h: Move CollectorHeap declaration here... 19811 * kjs/collector.cpp: ... from here. 19812 19813 2008-02-25 Darin Adler <darin (a] apple.com> 19814 19815 Reviewed by Adam. 19816 19817 * JavaScriptCore.exp: Sort the contents of this file. 19818 19819 2008-02-25 Adam Roben <aroben (a] apple.com> 19820 19821 MSVC build fix 19822 19823 * kjs/testkjs.cpp: 19824 (functionQuit): Don't add a return statement after exit(0) for MSVC. 19825 19826 2008-02-24 Sam Weinig <sam (a] webkit.org> 19827 19828 Reviewed by Mark Rowe. 19829 19830 http://bugs.webkit.org/show_bug.cgi?id=17529 19831 Add support for reading from stdin from testkjs 19832 19833 * kjs/testkjs.cpp: 19834 (GlobalObject::GlobalObject): Add readline function to global object. 19835 (functionReadline): Added. Reads characters from stdin until a '\n' or 19836 EOF is encountered. The input is returned as a String to the caller. 19837 19838 2008-02-24 Sam Weinig <sam (a] webkit.org> 19839 19840 Reviewed by Mark Rowe. 19841 19842 http://bugs.webkit.org/show_bug.cgi?id=17528 19843 Give testkjs a bath 19844 19845 * JavaScriptCore.exp: 19846 * JavaScriptCore.xcodeproj/project.pbxproj: Make the testkjs.cpp use 4 space indentation. 19847 * kjs/testkjs.cpp: 19848 (StopWatch::getElapsedMS): 19849 (GlobalObject::className): 19850 (GlobalObject::GlobalObject): 19851 Rename GlobalImp to GlobalObject and setup the global functions 19852 in the GlobalObject's constructor. Also, use static functions for 19853 the implementation so we can use the standard PrototypeFunction 19854 class and remove TestFunctionImp. 19855 (functionPrint): Move print() functionality here. 19856 (functionDebug): Move debug() functionality here. 19857 (functionGC): Move gc() functionality here. 19858 (functionVersion): Move version() functionality here. 19859 (functionRun): Move run() functionality here. 19860 (functionLoad): Move load() functionality here. 19861 (functionQuit): Move quit() functionality here. 19862 (prettyPrintScript): Fix indentation. 19863 (runWithScripts): Since all the functionality of createGlobalObject is 19864 now in the GlobalObject constructor, just call new here. 19865 (parseArguments): Fix indentation. 19866 (kjsmain): Ditto 19867 (fillBufferWithContentsOfFile): Ditto. 19868 19869 2008-02-24 Sam Weinig <sam (a] webkit.org> 19870 19871 Reviewed by Oliver Hunt and Mark Rowe. 19872 19873 http://bugs.webkit.org/show_bug.cgi?id=17505 19874 Add support for getting command line arguments in testkjs 19875 19876 - This slightly changes the behavior of parsing arguments by requiring 19877 a '-f' before all files. 19878 19879 * kjs/testkjs.cpp: 19880 (createGlobalObject): Add a global property called 'arguments' which 19881 contains an array with the parsed arguments as strings. 19882 (runWithScripts): Pass in the arguments vector so that it can be passed 19883 to the global object. 19884 (parseArguments): Change parsing rules to require a '-f' before any script 19885 file. After all '-f' and '-p' arguments have been parsed, the remaining 19886 are added to the arguments vector and exposed to the script. If there is a 19887 chance of ambiguity (the user wants to pass the string '-f' to the script), 19888 the string '--' can be used separate the options from the pass through 19889 arguments. 19890 (kjsmain): 19891 19892 2008-02-24 Dan Bernstein <mitz (a] apple.com> 19893 19894 Reviewed by Darin Adler. 19895 19896 - fix http://bugs.webkit.org/show_bug.cgi?id=17511 19897 REGRESSION: Reproducible crash in SegmentedSubstring::SegmentedSubstring(SegmentedSubstring const&) 19898 19899 * wtf/Deque.h: 19900 (WTF::::expandCapacityIfNeeded): Fixed the case where m_start and m_end 19901 are both zero but the buffer capacity is non-zero. 19902 (WTF::::prepend): Added validity checks. 19903 19904 2008-02-23 Jan Michael Alonzo <jmalonzo (a] unpluggable.com> 19905 19906 Rubber stamped by Darin. 19907 19908 Add separator '\' after libJavaScriptCore_la_LIBADD and cleanup 19909 whitespaces introduced in the previous commit. 19910 19911 * GNUmakefile.am: 19912 19913 2008-02-23 Jan Michael Alonzo <jmalonzo (a] unpluggable.com> 19914 19915 * GNUmakefile.am: Add GLOBALDEPS for testkjs and minidom. 19916 19917 2008-02-23 Darin Adler <darin (a] apple.com> 19918 19919 Reviewed by Anders. 19920 19921 - http://bugs.webkit.org/show_bug.cgi?id=17496 19922 make Deque use a circular array; add iterators 19923 19924 * wtf/Deque.h: Wrote an all-new version of this class that uses a circular 19925 buffer. Growth policy is identical to vector. Added iterators. 19926 19927 * wtf/Vector.h: Made two small refinements while using this to implement 19928 Deque: Made VectorBufferBase derive from Noncopyable, which would have 19929 saved me some debugging time if it had been there. Renamed Impl and 19930 m_impl to Buffer and m_buffer. 19931 19932 2008-02-23 Darin Adler <darin (a] apple.com> 19933 19934 Reviewed by Anders. 19935 19936 - http://bugs.webkit.org/show_bug.cgi?id=17067 19937 eliminate attributes parameter from JSObject::put for speed/clarity 19938 19939 * API/JSCallbackObject.h: Removed attribute arguments. 19940 * API/JSCallbackObjectFunctions.h: 19941 (KJS::JSCallbackObject<Base>::put): Ditto. 19942 * API/JSObjectRef.cpp: 19943 (JSObjectSetProperty): Use initializeVariable or putDirect when necessary 19944 to set attribute values. 19945 * JavaScriptCore.exp: Updated. 19946 * bindings/objc/objc_runtime.h: Removed attribute arguments. 19947 * bindings/objc/objc_runtime.mm: 19948 (ObjcFallbackObjectImp::put): Ditto. 19949 * bindings/runtime_array.cpp: 19950 (RuntimeArray::put): Ditto. 19951 * bindings/runtime_array.h: Ditto. 19952 * bindings/runtime_object.cpp: 19953 (RuntimeObjectImp::put): Ditto. 19954 * bindings/runtime_object.h: Ditto. Also removed canPut which was only 19955 called from one place in WebCore that can use hasProperty instead. 19956 19957 * kjs/Activation.h: Removed attribute argument from put and added the new 19958 initializeVariable function that's used to put variables in variable objects. 19959 Also made isActivationObject a const member. 19960 19961 * kjs/JSGlobalObject.cpp: 19962 (KJS::JSGlobalObject::put): Removed attribute argument. 19963 (KJS::JSGlobalObject::initializeVariable): Added. Used to give variables 19964 their initial values, which can include the read-only property. 19965 (KJS::JSGlobalObject::reset): Removed obsolete comments about flags. 19966 Removed Internal flag, which is no longer needed. 19967 * kjs/JSGlobalObject.h: More of the same. 19968 19969 * kjs/JSVariableObject.h: Added pure virtual initializeVariable function. 19970 (KJS::JSVariableObject::symbolTablePut): Removed checkReadOnly flag; we always 19971 check read-only. 19972 (KJS::JSVariableObject::symbolTableInitializeVariable): Added. 19973 19974 * kjs/array_instance.cpp: 19975 (KJS::ArrayInstance::put): Removed attribute argument. 19976 * kjs/array_instance.h: Ditto. 19977 19978 * kjs/function.cpp: 19979 (KJS::FunctionImp::put): Ditto. 19980 (KJS::Arguments::put): Ditto. 19981 (KJS::ActivationImp::put): Ditto. 19982 (KJS::ActivationImp::initializeVariable): Added. 19983 * kjs/function.h: Removed attribute arguments. 19984 19985 * kjs/function_object.cpp: 19986 (KJS::FunctionObjectImp::construct): Removed Internal flag. 19987 19988 * kjs/lookup.h: 19989 (KJS::lookupPut): Removed attributes argument. Also changed to use putDirect 19990 instead of calling JSObject::put. 19991 (KJS::cacheGlobalObject): Ditto. 19992 19993 * kjs/nodes.cpp: 19994 (KJS::ConstDeclNode::handleSlowCase): Call initializeVariable to initialize 19995 the constant. 19996 (KJS::ConstDeclNode::evaluateSingle): Ditto. 19997 (KJS::TryNode::execute): Use putDirect to set up the new object. 19998 (KJS::FunctionBodyNode::processDeclarations): Removed Internal. 19999 (KJS::ProgramNode::processDeclarations): Ditto. 20000 (KJS::EvalNode::processDeclarations): Call initializeVariable to initialize 20001 the variables and functions. 20002 (KJS::FuncDeclNode::makeFunction): Removed Internal. 20003 (KJS::FuncExprNode::evaluate): Ditto. 20004 20005 * kjs/object.cpp: Removed canPut, which was only being used in one code path, 20006 not the normal high speed one. 20007 (KJS::JSObject::put): Removed attribute argument. Moved the logic from 20008 canPut here, in the one code ath that was still using it. 20009 * kjs/object.h: Removed Internal attribute, ad canPut function. Removed the 20010 attributes argument to the put function. Made isActivationObject const. 20011 20012 * kjs/regexp_object.cpp: 20013 (KJS::RegExpImp::put): Removed attributes argument. 20014 (KJS::RegExpImp::putValueProperty): Ditto. 20015 (KJS::RegExpObjectImp::put): Ditto. 20016 (KJS::RegExpObjectImp::putValueProperty): Ditto. 20017 * kjs/regexp_object.h: Ditto. 20018 20019 * kjs/string_object.cpp: 20020 (KJS::StringInstance::put): Removed attributes argument. 20021 * kjs/string_object.h: Ditto. 20022 20023 2008-02-23 Jan Michael Alonzo <jmalonzo (a] unpluggable.com> 20024 20025 Not reviewed, Gtk build fix. 20026 20027 * kjs/testkjs.pro: 20028 20029 2008-02-23 Alexey Proskuryakov <ap (a] webkit.org> 20030 20031 Windows build fix - move ThreadCondition implementation from WebCore to WTF. 20032 20033 * wtf/ThreadingWin.cpp: 20034 (WTF::ThreadCondition::ThreadCondition): 20035 (WTF::ThreadCondition::~ThreadCondition): 20036 (WTF::ThreadCondition::wait): 20037 (WTF::ThreadCondition::signal): 20038 (WTF::ThreadCondition::broadcast): 20039 20040 2008-02-23 Alexey Proskuryakov <ap (a] webkit.org> 20041 20042 Touch some files, hoping that Windows build bot will create JSC headers. 20043 20044 * kjs/AllInOneFile.cpp: 20045 * kjs/array_instance.cpp: 20046 * wtf/HashTable.cpp: 20047 20048 2008-02-23 Alexey Proskuryakov <ap (a] webkit.org> 20049 20050 Qt/Wx build fix - this file was still in a wrong namespace, too. 20051 20052 * wtf/ThreadingNone.cpp: 20053 20054 2008-02-23 Alexey Proskuryakov <ap (a] webkit.org> 20055 20056 More build fixing - fix mismatched braces. 20057 20058 * JavaScriptCore.pri: 20059 20060 2008-02-23 Alexey Proskuryakov <ap (a] webkit.org> 20061 20062 Wx and Gtk build fixes. 20063 20064 * JavaScriptCore.pri: Don't try to compile ThreadingPthreads. 20065 * wtf/ThreadingGtk.cpp: Use a correct namespace. 20066 20067 2008-02-23 Alexey Proskuryakov <ap (a] webkit.org> 20068 20069 Reviewed by Darin. 20070 20071 Move basic threading support from WebCore to WTF. 20072 20073 Added mutex protection to MessageQueue::killed() for paranoia sake. 20074 20075 * GNUmakefile.am: 20076 * JavaScriptCore.exp: 20077 * JavaScriptCore.pri: 20078 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 20079 * JavaScriptCore.xcodeproj/project.pbxproj: 20080 * JavaScriptCoreSources.bkl: 20081 * wtf/Locker.h: Copied from WebCore/platform/Locker.h. 20082 * wtf/MessageQueue.h: Copied from WebCore/platform/MessageQueue.h. 20083 (WTF::::killed): 20084 * wtf/Threading.h: Copied from WebCore/platform/Threading.h. 20085 * wtf/ThreadingGtk.cpp: Copied from WebCore/platform/gtk/ThreadingGtk.cpp. 20086 (WebCore::createThread): 20087 * wtf/ThreadingNone.cpp: Copied from WebCore/platform/ThreadingNone.cpp. 20088 * wtf/ThreadingPthreads.cpp: Copied from WebCore/platform/pthreads/ThreadingPthreads.cpp. 20089 (WTF::createThread): 20090 * wtf/ThreadingWin.cpp: Copied from WebCore/platform/win/ThreadingWin.cpp. 20091 (WTF::createThread): 20092 (WTF::Mutex::Mutex): 20093 (WTF::Mutex::~Mutex): 20094 (WTF::Mutex::lock): 20095 (WTF::Mutex::tryLock): 20096 (WTF::Mutex::unlock): 20097 20098 2008-02-22 Geoffrey Garen <ggaren (a] apple.com> 20099 20100 Reviewed by Sam Weinig. 20101 20102 Partial fix for <rdar://problem/5744037> Gmail out of memory (17455) 20103 20104 I'm removing KJS_MEM_LIMIT for the following reasons: 20105 20106 - We have a few reports of KJS_MEM_LIMIT breaking important web 20107 applications, like GMail and Google Reader. (For example, if you 20108 simply open 12 GMail tabs, tab #12 will hit the limit.) 20109 20110 - Firefox has no discernable JS object count limit, so any limit, even 20111 a large one, is a potential compatibility problem. 20112 20113 - KJS_MEM_LIMIT does not protect against malicious memory allocation, 20114 since there are many ways to maliciously allocate memory without 20115 increasing the JS object count. 20116 20117 - KJS_MEM_LIMIT is already mostly broken, since it only aborts the 20118 script that breaches the limit, not any subsequent scripts. 20119 20120 - We've never gotten bug reports about websites that would have 20121 benefited from an unbroken KJS_MEM_LIMIT. The initial check-in of 20122 KJS_MEM_LIMIT (KJS revision 80061) doesn't mention a website that 20123 needed it. 20124 20125 - Any website that brings you anywhere close to crashing due to the 20126 number of live JS objects will almost certainly put up the "slow 20127 script" dialog at least 20 times beforehand. 20128 20129 * kjs/collector.cpp: 20130 (KJS::Collector::collect): 20131 * kjs/collector.h: 20132 * kjs/nodes.cpp: 20133 (KJS::TryNode::execute): 20134 20135 2008-02-22 Oliver Hunt <oliver (a] apple.com> 20136 20137 Reviewed by Alexey P. 20138 20139 <rdar://problem/5759327> REGRESSION: while(NaN) acts like while(true) 20140 20141 Fix yet another case where we incorrectly relied on implicit double 20142 to bool coercion. 20143 20144 * kjs/nodes.cpp: 20145 (KJS::PostDecLocalVarNode::evaluateToBoolean): 20146 20147 2008-02-20 Michael Knaup <michael.knaup (a] mac.com> 20148 20149 Reviewed by Darin. 20150 20151 Fix for Bug 16753: date set methods with no args should result in NaN (Acid3 bug) 20152 The set values result in NaN now when called with no args, NaN or +/- inf values. 20153 The setYear, setFullYear and setUTCFullYear methods used on NaN dates work as 20154 descripted in the standard. 20155 20156 * kjs/date_object.cpp: 20157 (KJS::fillStructuresUsingTimeArgs): 20158 (KJS::fillStructuresUsingDateArgs): 20159 (KJS::setNewValueFromTimeArgs): 20160 (KJS::setNewValueFromDateArgs): 20161 (KJS::dateProtoFuncSetYear): 20162 20163 2008-02-19 Anders Carlsson <andersca (a] apple.com> 20164 20165 Reviewed by Darin. 20166 20167 Change OpaqueJSClass and RootObject to start with a ref count of 1. 20168 20169 * API/JSClassRef.cpp: 20170 (OpaqueJSClass::OpaqueJSClass): 20171 (OpaqueJSClass::createNoAutomaticPrototype): 20172 (OpaqueJSClass::create): 20173 * API/JSClassRef.h: 20174 * API/JSObjectRef.cpp: 20175 (JSClassCreate): 20176 * bindings/runtime_root.cpp: 20177 (KJS::Bindings::RootObject::create): 20178 (KJS::Bindings::RootObject::RootObject): 20179 20180 2008-02-19 Darin Adler <darin (a] apple.com> 20181 20182 Rubber stamped by Anders. 20183 20184 - removed explicit initialization to 1 for RefCounted; that's now the default 20185 20186 * kjs/regexp.cpp: 20187 (KJS::RegExp::RegExp): Removed RefCounted initializer. 20188 20189 2008-02-19 Darin Adler <darin (a] apple.com> 20190 20191 Reviewed by Anders. 20192 20193 - next step for http://bugs.webkit.org/show_bug.cgi?id=17257 20194 start ref counts at 1 instead of 0 for speed 20195 20196 * wtf/RefCounted.h: 20197 (WTF::RefCounted::RefCounted): Have refcounts default to 1. This allows us to start 20198 removing the explicit initialization of RefCounted from classes and eventually we 20199 can remove the ability to have the initial count of 0 entirely. 20200 20201 2008-02-18 Samuel Weinig <sam (a] webkit.org> 20202 20203 Reviewed by Geoff Garen. 20204 20205 Fix for http://bugs.webkit.org/show_bug.cgi?id=17419 20206 Remove CompatMode from JavaScriptCore as it is never set to anything other than NativeMode 20207 20208 * kjs/JSGlobalObject.cpp: 20209 (KJS::JSGlobalObject::init): 20210 * kjs/JSGlobalObject.h: 20211 (KJS::JSGlobalObject::setDebugger): 20212 * kjs/date_object.cpp: 20213 (KJS::dateProtoFuncGetYear): 20214 20215 2008-02-18 Darin Adler <darin (a] apple.com> 20216 20217 Reviewed by Sam. 20218 20219 * wtf/ASCIICType.h: 20220 (WTF::toASCIIHexValue): Added. 20221 20222 2008-02-17 Darin Adler <darin (a] apple.com> 20223 20224 * wtf/ListHashSet.h: (WTF::swap): Removed stray return statement. 20225 20226 2008-02-15 Adam Roben <aroben (a] apple.com> 20227 20228 Make JavaScriptCore's FEATURE_DEFINES match WebCore's 20229 20230 Reviewed by Mark. 20231 20232 * Configurations/JavaScriptCore.xcconfig: 20233 20234 2008-02-14 Stephanie Lewis <slewis (a] apple.com> 20235 20236 Reviewed by Geoff. 20237 20238 Update order files. 20239 20240 * JavaScriptCore.order: 20241 20242 2008-02-14 Geoffrey Garen <ggaren (a] apple.com> 20243 20244 Reviewed by Sam Weinig. 20245 20246 Fixed <rdar://problem/5737835> nee http://bugs.webkit.org/show_bug.cgi?id=17329 20247 Crash in JSGlobalObject::popActivation when inserting hyperlink in Wordpress (17329) 20248 20249 Don't reset the "activations" stack in JSGlobalObject::reset, since we 20250 might be executing a script during the call to reset, and the script 20251 needs to safely run to completion. 20252 20253 Instead, initialize the "activations" stack when the global object is 20254 created, and subsequently rely on pushing and popping during normal 20255 execution to maintain the stack's state. 20256 20257 * kjs/JSGlobalObject.cpp: 20258 (KJS::JSGlobalObject::init): 20259 (KJS::JSGlobalObject::reset): 20260 20261 2008-02-13 Bernhard Rosenkraenzer <bero (a] arklinux.org> 20262 20263 Reviewed by Darin. 20264 20265 - http://bugs.webkit.org/show_bug.cgi?id=17339 20266 JavaScriptCore does not build with gcc 4.3 20267 20268 * kjs/interpreter.cpp: Add include of <unistd.h>, since that's where 20269 getpid() comes from. 20270 20271 2008-02-13 Oliver Hunt <oliver (a] apple.com> 20272 20273 Reviewed by Alexey P. 20274 20275 <rdar://problem/5737003> REGRESSION (r27747): can't browse pictures on fastcupid.com 20276 20277 When converting numeric values to booleans we need to account for NaN 20278 20279 * kjs/nodes.cpp: 20280 (KJS::MultNode::evaluateToBoolean): 20281 (KJS::ModNode::evaluateToBoolean): 20282 20283 2008-02-08 Samuel Weinig <sam (a] webkit.org> 20284 20285 Reviewed by Brady Eidson. 20286 20287 <rdar://problem/5659216> REGRESSION: PLT 0.3% slower due to r28868 (caching ClassNodeList and NamedNodeList) 20288 20289 - Tweak the statements in isASCIISpace to account for the statistical distribution of 20290 usage in the PLT. 20291 20292 .4% speedup on my machine. Stephanie's machine shows this as .3% speedup. 20293 20294 * wtf/ASCIICType.h: 20295 (WTF::isASCIISpace): 20296 20297 2008-02-11 Sam Weinig <sam (a] webkit.org> 20298 20299 Reviewed by Anders Carlsson. 20300 20301 Fixes for: 20302 <rdar://problem/5735497> Match Firefox's cross-domain model more accurately by return the built-in version of functions even if they have been overridden 20303 <rdar://problem/5735443> Crash when setting the Window objects prototype to a custom Object and then calling a method on it 20304 20305 - Expose the native Object.prototype.toString implementation so that it can be used for cross-domain 20306 toString calling. 20307 20308 * JavaScriptCore.exp: 20309 * kjs/object_object.cpp: 20310 * kjs/object_object.h: 20311 20312 2008-02-10 Darin Adler <darin (a] apple.com> 20313 20314 Rubber stamped by Eric. 20315 20316 * kjs/ExecState.h: 20317 (KJS::ExecState::takeException): Added. 20318 20319 2008-02-10 Darin Adler <darin (a] apple.com> 20320 20321 Reviewed by Eric. 20322 20323 - http://bugs.webkit.org/show_bug.cgi?id=17256 20324 eliminate default ref. count of 0 in RefCounted class 20325 20326 * wtf/RefCounted.h: 20327 (WTF::RefCounted::RefCounted): Remove default of 0. 20328 20329 2008-02-10 Darin Adler <darin (a] apple.com> 20330 20331 Reviewed by Eric. 20332 20333 - http://bugs.webkit.org/show_bug.cgi?id=17256 20334 Make clients of RefCounted explicitly set the count to 0. 20335 20336 * API/JSClassRef.cpp: 20337 (OpaqueJSClass::OpaqueJSClass): 20338 * bindings/runtime_root.cpp: 20339 (KJS::Bindings::RootObject::RootObject): 20340 20341 2008-02-09 Darin Adler <darin (a] apple.com> 20342 20343 Reviewed by Mitz. 20344 20345 - http://bugs.webkit.org/show_bug.cgi?id=17256 20346 Change RegExp to start its ref count at 1, not 0 20347 20348 We'll want to do this to every RefCounted class, one at a time. 20349 20350 * kjs/nodes.h: 20351 (KJS::RegExpNode::RegExpNode): Use RegExp::create instead of new RegExp. 20352 * kjs/regexp.cpp: 20353 (KJS::RegExp::RegExp): Marked inline, set initial ref count to 1. 20354 (KJS::RegExp::create): Added. Calls new RegExp then adopts the initial ref. 20355 * kjs/regexp.h: Reformatted. Made the constructors private. Added static 20356 create functions that return objects already wrapped in PassRefPtr. 20357 * kjs/regexp_object.cpp: 20358 (KJS::regExpProtoFuncCompile): Use RegExp::create instead of new RegExp. 20359 (KJS::RegExpObjectImp::construct): Ditto. 20360 * kjs/string_object.cpp: 20361 (KJS::stringProtoFuncMatch): Ditto. 20362 (KJS::stringProtoFuncSearch): Ditto. 20363 20364 2008-02-08 Oliver Hunt <oliver (a] apple.com> 20365 20366 Reviewed by Maciej. 20367 20368 <rdar://problem/5731773> REGRESSION (r28973): Extraneous parentheses in function.toString() 20369 https://bugs.webkit.org/show_bug.cgi?id=17214 20370 20371 Make a subclass of CommaNode to provide the correct precedence for each expression in 20372 a variable declaration list. 20373 20374 * kjs/grammar.y: 20375 * kjs/nodes.h: 20376 (KJS::VarDeclCommaNode::): 20377 20378 2008-02-08 Darin Adler <darin (a] apple.com> 20379 20380 Reviewed by Oliver. 20381 20382 - fix http://bugs.webkit.org/show_bug.cgi?id=17247 20383 Labelled continue/break can fail in some cases 20384 20385 Test: fast/js/continue-break-multiple-labels.html 20386 20387 * kjs/nodes.h: 20388 (KJS::StatementNode::pushLabel): Made this virtual. 20389 (KJS::LabelNode::pushLabel): Forward pushLabel calls to the statement inside. 20390 20391 2008-02-08 Darin Adler <darin (a] apple.com> 20392 20393 Reviewed by Eric. 20394 20395 - fix http://bugs.webkit.org/show_bug.cgi?id=15003 20396 Function.prototype.constructor should not be DontDelete/ReadOnly (Acid3 bug) 20397 20398 Test: fast/js/constructor-attributes.html 20399 20400 * kjs/JSGlobalObject.cpp: 20401 (KJS::JSGlobalObject::reset): Remove unwanted attributes from "constructor". 20402 * kjs/function_object.cpp: 20403 (KJS::FunctionObjectImp::construct): Ditto. 20404 * kjs/nodes.cpp: 20405 (KJS::FuncDeclNode::makeFunction): Ditto. 20406 (KJS::FuncExprNode::evaluate): Ditto. 20407 20408 2008-02-06 Geoffrey Garen <ggaren (a] apple.com> 20409 20410 Reviewed by Oliver Hunt. 20411 20412 Added an ASSERT to catch refCount underflow, since it caused a leak in 20413 my last check-in. 20414 20415 * wtf/RefCounted.h: 20416 (WTF::RefCounted::deref): 20417 20418 2008-02-06 Geoffrey Garen <ggaren (a] apple.com> 20419 20420 Reviewed by Darin Adler. 20421 20422 PLT speedup related to <rdar://problem/5659272> REGRESSION: PLT .4% 20423 slower due to r28884 (global variable symbol table optimization) 20424 20425 Tweaked RefCounted::deref() to be a little more efficient. 20426 20427 1% - 1.5% speedup on my machine. .7% speedup on Stephanie's machine. 20428 20429 * wtf/RefCounted.h: 20430 (WTF::RefCounted::deref): Don't modify m_refCount if we're just going 20431 to delete the object anyway. Also, use a simple == test, which might be 20432 faster than <= on some hardware. 20433 20434 2008-02-06 Darin Adler <darin (a] apple.com> 20435 20436 Reviewed by Sam. 20437 20438 - fix http://bugs.webkit.org/show_bug.cgi?id=17094 20439 Array.prototype functions create length properties with DontEnum/DontDelete 20440 20441 Test results match Gecko with very few obscure exceptions that seem to be 20442 bugs in Gecko. 20443 20444 Test: fast/js/array-functions-non-arrays.html 20445 20446 * kjs/array_object.cpp: 20447 (KJS::arrayProtoFuncConcat): Removed DontEnum and DontDelete from the call 20448 to set length. 20449 (KJS::arrayProtoFuncPop): Ditto. Also added missing call to deleteProperty, 20450 which is not needed for real arrays, but is needed for non-arrays. 20451 (KJS::arrayProtoFuncPush): Ditto. 20452 (KJS::arrayProtoFuncShift): Ditto. 20453 (KJS::arrayProtoFuncSlice): Ditto. 20454 (KJS::arrayProtoFuncSort): Removed incorrect call to set length when 20455 the array has no elements. 20456 (KJS::arrayProtoFuncSplice): Removed DontEnum and DontDelete from the call 20457 to set length. 20458 (KJS::arrayProtoFuncUnShift): Ditto. Also added a check for 0 arguments to 20459 make behavior match the specification in that case. 20460 * kjs/nodes.cpp: 20461 (KJS::ArrayNode::evaluate): Removed DontEnum and DontDelete from the call 20462 to set length. 20463 20464 2008-02-06 Darin Adler <darin (a] apple.com> 20465 20466 Reviewed by Sam. 20467 20468 - replace calls to put to set up properties with calls to putDirect, to 20469 prepare for a future change where put won't take attributes any more, 20470 and for a slight performance boost 20471 20472 * API/JSObjectRef.cpp: 20473 (JSObjectMakeConstructor): Use putDirect instead of put. 20474 * kjs/CommonIdentifiers.h: Removed lastIndex. 20475 * kjs/JSGlobalObject.cpp: 20476 (KJS::JSGlobalObject::reset): Use putDirect instead of put. 20477 * kjs/array_object.cpp: 20478 (KJS::arrayProtoFuncConcat): Took out extra call to get length (unused). 20479 (KJS::ArrayObjectImp::ArrayObjectImp): Use putDirect instead of put. 20480 * kjs/error_object.cpp: 20481 (KJS::ErrorPrototype::ErrorPrototype): Use putDirect instead of put. 20482 * kjs/function.cpp: 20483 (KJS::Arguments::Arguments): Use putDirect instead of put. 20484 (KJS::PrototypeFunction::PrototypeFunction): Use putDirect instead of put. 20485 * kjs/function_object.cpp: 20486 (KJS::FunctionObjectImp::construct): Use putDirect instead of put. 20487 * kjs/nodes.cpp: 20488 (KJS::FuncDeclNode::makeFunction): Use putDirect instead of put. 20489 (KJS::FuncExprNode::evaluate): Use putDirect instead of put. 20490 * kjs/regexp_object.cpp: 20491 (KJS::regExpProtoFuncCompile): Use setLastIndex instead of put(lastIndex). 20492 (KJS::RegExpImp::match): Get and set lastIndex by using m_lastIndex instead of 20493 calling get and put. 20494 * kjs/regexp_object.h: 20495 (KJS::RegExpImp::setLastIndex): Added. 20496 * kjs/string_object.cpp: 20497 (KJS::stringProtoFuncMatch): Use setLastIndex instead of put(lastIndex). 20498 20499 2008-02-05 Sam Weinig <sam (a] webkit.org> 20500 20501 Reviewed by Anders Carlsson. 20502 20503 Fix for http://bugs.webkit.org/show_bug.cgi?id=8080 20504 NodeList (and other DOM lists) items are not enumeratable using for..in 20505 20506 * JavaScriptCore.exp: 20507 20508 2008-02-05 Mark Rowe <mrowe (a] apple.com> 20509 20510 Reviewed by Oliver Hunt. 20511 20512 Update versioning to support the mysterious future. 20513 20514 * Configurations/Version.xcconfig: Add SYSTEM_VERSION_PREFIX_1060. 20515 20516 2008-02-04 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 20517 20518 Reviewed by Oliver Hunt. 20519 20520 Fixes Bug 16889: REGRESSION (r29425): Canvas-based graphing calculator fails to run 20521 Bug 17015: REGRESSION (r29414-29428): www.fox.com "shows" menu fails to render 20522 Bug 17164: REGRESSION: JavaScript pop-up menu appears at wrong location when hovering image at http://news.chinatimes.com/ 20523 20524 <http://bugs.webkit.org/show_bug.cgi?id=16889> 20525 <rdar://problem/5696255> 20526 20527 <http://bugs.webkit.org/show_bug.cgi?id=17015> 20528 20529 <http://bugs.webkit.org/show_bug.cgi?id=17164> 20530 <rdar://problem/5720947> 20531 20532 The ActivationImp tear-off (r29425) introduced a problem with ReadModify 20533 nodes that first resolve a slot, call valueForReadModifyNode(), and then 20534 store a value in the previously resolved slot. Since valueForReadModifyNode() 20535 may cause a tear-off, the slot needs to be resolved again, but this was 20536 not happening with the existing code. 20537 20538 * kjs/nodes.cpp: 20539 (KJS::ReadModifyLocalVarNode::evaluate): 20540 (KJS::ReadModifyResolveNode::evaluate): 20541 20542 2008-02-04 Cameron McCormack <cam (a] mcc.id.au> 20543 20544 Reviewed by Geoff Garen. 20545 20546 Remove some unneccesary UNUSED_PARAMs. Clarify ownership rule of return value of JSObjectCopyPropertyNames. 20547 20548 * API/JSNode.c: 20549 (JSNode_appendChild): 20550 (JSNode_removeChild): 20551 (JSNode_replaceChild): 20552 (JSNode_getNodeType): 20553 (JSNode_getFirstChild): 20554 * API/JSNodeList.c: 20555 (JSNodeList_length): 20556 * API/JSObjectRef.h: 20557 20558 2008-02-04 Rodney Dawes <dobey (a] wayofthemonkey.com> 20559 20560 Reviewed by Alp Toker and Mark Rowe. 20561 20562 Fix http://bugs.webkit.org/show_bug.cgi?id=17175. 20563 Bug 17175: Use of C++ compiler flags in CFLAGS 20564 20565 * GNUmakefile.am: Use global_cxxflags as well as global_cflags in CXXFLAGS. 20566 20567 2008-02-04 Alp Toker <alp (a] atoker.com> 20568 20569 Rubber-stamped by Mark Rowe. 20570 20571 Remove all trailing whitespace in the GTK+ port and related 20572 components. 20573 20574 * GNUmakefile.am: 20575 20576 2008-02-02 Darin Adler <darin (a] apple.com> 20577 20578 Reviewed by Geoff Garen. 20579 20580 PLT speedup related to <rdar://problem/5659272> REGRESSION: PLT .4% 20581 slower due to r28884 (global variable symbol table optimization) 20582 20583 Geoff's theory is that the slowdown was due to copying hash tables when 20584 putting things into the back/forward cache. If that's true, then this 20585 should fix the problem. 20586 20587 (According to Geoff's measurements, in a PLT that exaggerates the 20588 importance of symbol table saving during cached page creation, this 20589 patch is a ~3X speedup in cached page creation, and a 9% speedup overall.) 20590 20591 * JavaScriptCore.exp: Updated. 20592 20593 * kjs/JSVariableObject.cpp: 20594 (KJS::JSVariableObject::saveLocalStorage): Updated for changes to SavedProperty, 20595 which has been revised to avoid initializing each SavedProperty twice when building 20596 the array. Store the property names too, so we don't have to store the symbol table 20597 separately. Do this by iterating the symbol table instead of the local storage vector. 20598 (KJS::JSVariableObject::restoreLocalStorage): Ditto. Restore the symbol table as 20599 well as the local storage vector. 20600 20601 * kjs/JSVariableObject.h: Removed save/restoreSymbolTable and do that work inside 20602 save/restoreLocalStorage instead. Made restoreLocalStorage a non-const member function 20603 that takes a const reference to a SavedProperties object. 20604 20605 * kjs/LocalStorage.h: Changed attributes to be unsigned instead of int to match 20606 other declarations of attributes elsewhere. 20607 20608 * kjs/property_map.cpp: 20609 (KJS::SavedProperties::SavedProperties): Updated for data member name change. 20610 (KJS::PropertyMap::save): Updated for data member name change and to use the new 20611 inline init function instead of setting the fields directly. This allows us to 20612 skip initializing the SavedProperty objects when first allocating the array, and 20613 just do it when we're actually setting up the individual elements. 20614 (KJS::PropertyMap::restore): Updated for SavedProperty changes. 20615 20616 * kjs/property_map.h: Changed SavedProperty from a struct to a class. Set it up so 20617 it does not get initialized at construction time to avoid initializing twice when 20618 creating an array of SavedProperty. Removed the m_ prefixes from the members of 20619 the SavedProperties struct. Generally we use m_ for class members and not struct. 20620 20621 2008-02-02 Tony Chang <idealisms (a] gmail.com> 20622 20623 Reviewed by darin. Landed by eseidel. 20624 20625 Add #define guards for WIN32_LEAN_AND_MEAN and _CRT_RAND_S. 20626 20627 * kjs/config.h: 20628 * wtf/FastMalloc.cpp: 20629 * wtf/TCSpinLock.h: 20630 20631 2008-01-28 Sam Weinig <sam (a] webkit.org> 20632 20633 Rubber-stamped by Darin Adler. 20634 20635 - Fix whitespace in nodes.h/cpp and nodes2string.cpp. 20636 20637 (NOTE: Specific changed functions elided for space and clarity) 20638 * kjs/nodes.cpp: 20639 * kjs/nodes.h: 20640 * kjs/nodes2string.cpp: 20641 20642 2008-01-27 Sam Weinig <sam (a] webkit.org> 20643 20644 Reviewed by Oliver Hunt. 20645 20646 Patch for http://bugs.webkit.org/show_bug.cgi?id=17025 20647 nodes.h/cpp has been rolling around in the mud - lets hose it down 20648 20649 - Rename member variables to use the m_ prefix. 20650 20651 (NOTE: Specific changed functions elided for space and clarity) 20652 * kjs/grammar.y: 20653 * kjs/nodes.cpp: 20654 * kjs/nodes.h: 20655 * kjs/nodes2string.cpp: 20656 20657 2008-01-27 Darin Adler <darin (a] apple.com> 20658 20659 Reviewed by Oliver. 20660 20661 - fix <rdar://problem/5657450> REGRESSION: const is broken 20662 20663 Test: fast/js/const.html 20664 20665 SunSpider said this was 0.3% slower. And I saw some Shark samples in 20666 JSGlobalObject::put -- not a lot but a few. We may be able to regain the 20667 speed, but for now we will take that small hit for correctness sake. 20668 20669 * kjs/JSGlobalObject.cpp: 20670 (KJS::JSGlobalObject::put): Pass the checkReadOnly flag in to symbolTablePut 20671 instead of passing attributes. 20672 20673 * kjs/JSVariableObject.h: 20674 (KJS::JSVariableObject::symbolTablePut): Removed the code to set attributes 20675 here, since we only set attributes when creating a property. Added the code 20676 to check read-only here, since we need that to implement const! 20677 20678 * kjs/function.cpp: 20679 (KJS::ActivationImp::put): Pass the checkReadOnly flag in to symbolTablePut 20680 instead of passing attributes. 20681 20682 * kjs/nodes.cpp: 20683 (KJS::isConstant): Added. 20684 (KJS::PostIncResolveNode::optimizeVariableAccess): Create a PostIncConstNode 20685 if optimizing for a local variable and the variable is constant. 20686 (KJS::PostDecResolveNode::optimizeVariableAccess): Ditto. But PostDecConstNode. 20687 (KJS::PreIncResolveNode::optimizeVariableAccess): Ditto. But PreIncConstNode. 20688 (KJS::PreDecResolveNode::optimizeVariableAccess): Ditto. But PreDecConstNode. 20689 (KJS::PreIncConstNode::evaluate): Return the value + 1. 20690 (KJS::PreDecConstNode::evaluate): Return the value - 1. 20691 (KJS::PostIncConstNode::evaluate): Return the value converted to a number. 20692 (KJS::PostDecConstNode::evaluate): Ditto. 20693 (KJS::ReadModifyResolveNode::optimizeVariableAccess): Create a ReadModifyConstNode 20694 if optimizing for a local variable and the variable is constant. 20695 (KJS::AssignResolveNode::optimizeVariableAccess): Ditto. But AssignConstNode. 20696 (KJS::ScopeNode::optimizeVariableAccess): Pass the local storage to the 20697 node optimizeVariableAccess functions, since that's where we need to look to 20698 figure out if a variable is constant. 20699 (KJS::FunctionBodyNode::processDeclarations): Moved the call to 20700 optimizeVariableAccess until after localStorage is set up. 20701 (KJS::ProgramNode::processDeclarations): Ditto. 20702 20703 * kjs/nodes.h: Fixed the IsConstant and HasInitializer values. They are used 20704 as flag masks, so a value of 0 will not work for IsConstant. Changed the 20705 first parameter to optimizeVariableAccess to be a const reference to a symbol 20706 table and added a const reference to local storage. Added classes for const 20707 versions of local variable access: PostIncConstNode, PostDecConstNode, 20708 PreIncConstNode, PreDecConstNode, ReadModifyConstNode, and AssignConstNode. 20709 20710 * kjs/object.cpp: 20711 (KJS::JSObject::put): Tweaked comments a bit, and changed the checkReadOnly 20712 expression to match the form used at the two other call sites. 20713 20714 2008-01-27 Darin Adler <darin (a] apple.com> 20715 20716 Reviewed by Oliver. 20717 20718 - fix http://bugs.webkit.org/show_bug.cgi?id=16498 20719 ''.constructor.toString() gives [function] 20720 20721 Test: fast/js/function-names.html 20722 20723 * kjs/array_object.cpp: 20724 (KJS::ArrayObjectImp::ArrayObjectImp): Use the class name as the constructor's function name. 20725 * kjs/bool_object.cpp: 20726 (KJS::BooleanObjectImp::BooleanObjectImp): Ditto. 20727 * kjs/date_object.cpp: 20728 (KJS::DateObjectImp::DateObjectImp): Ditto. 20729 * kjs/error_object.cpp: 20730 (KJS::ErrorPrototype::ErrorPrototype): Make the error object be an Error. 20731 (KJS::ErrorObjectImp::ErrorObjectImp): Use the class name as the constructor's function name. 20732 (KJS::NativeErrorPrototype::NativeErrorPrototype): Take const UString&. 20733 (KJS::NativeErrorImp::NativeErrorImp): Use the prototype's name as the constructor's function 20734 name. 20735 * kjs/error_object.h: Change ErrorPrototype to inherit from ErrorInstance. Change the 20736 NativeErrorImp constructor to take a NativeErrorPrototype pointer for its prototype. 20737 * kjs/function.h: Removed unneeded constructor for internal functions without names. 20738 We want to avoid those! 20739 * kjs/function_object.cpp: 20740 (KJS::functionProtoFuncToString): Removed code that writes out just [function] for functions 20741 that have no names. There's no reason to do that. 20742 (KJS::FunctionObjectImp::FunctionObjectImp): Use the class name as the constructor's 20743 function name. 20744 * kjs/internal.cpp: Removed the unused constructor. 20745 * kjs/number_object.cpp: 20746 (KJS::fractionalPartToString): Marked static for internal linkage. 20747 (KJS::exponentialPartToString): Ditto. 20748 (KJS::numberProtoFuncToPrecision): Removed an unneeded else. 20749 (KJS::NumberObjectImp::NumberObjectImp): Use the class name as the constructor's 20750 function name. 20751 (KJS::NumberObjectImp::getValueProperty): Tweaked formatting. 20752 * kjs/object_object.cpp: 20753 (KJS::ObjectObjectImp::ObjectObjectImp): Use "Object" for the function name. 20754 * kjs/regexp_object.cpp: 20755 (KJS::RegExpObjectImp::RegExpObjectImp): Use "RegExp" for the function name. 20756 * kjs/string_object.cpp: 20757 (KJS::StringObjectImp::StringObjectImp): Use the class name as the constructor's 20758 function name. 20759 20760 2008-01-26 Darin Adler <darin (a] apple.com> 20761 20762 Reviewed by Oliver. 20763 20764 - fix http://bugs.webkit.org/show_bug.cgi?id=17027 20765 Incorrect Function.toString behaviour with read/modify/write operators performed on negative numbers 20766 20767 Test: fast/js/function-toString-parentheses.html 20768 20769 The problem here was that a NumberNode with a negative number in it had the wrong 20770 precedence. It's not a primary expression, it's a unary operator with a primary 20771 expression after it. 20772 20773 Once the precedence of NumberNode was fixed, the cases from bug 17020 were also 20774 fixed without trying to treat bracket nodes like dot nodes. That wasn't needed. 20775 The reason we handle numbers before dot nodes specially is that the dot is a 20776 legal character in a number. The same is not true of a bracket. Eventually we 20777 could get smarter, and only add the parentheses when there is actual ambiguity. 20778 There is none if the string form of the number already has a dot in it, or if 20779 it's a number with a alphabetic name like infinity or NAN. 20780 20781 * kjs/nodes.h: Renamed back from ObjectAccess to DotExpr. 20782 (KJS::NumberNode::precedence): Return PrecUnary for negative numbers, since 20783 they serialize as a unary operator, not a primary expression. 20784 * kjs/nodes2string.cpp: 20785 (KJS::SourceStream::operator<<): Clear m_numberNeedsParens if this adds 20786 parens; one set is enough. 20787 (KJS::bracketNodeStreamTo): Remove unneeded special flag here. Normal 20788 operator precedence suffices. 20789 (KJS::NewExprNode::streamTo): Ditto. 20790 20791 2008-01-26 Oliver Hunt <oliver (a] apple.com> 20792 20793 Reviewed by Maciej and Darin. 20794 20795 Fix for http://bugs.webkit.org/show_bug.cgi?id=17020 20796 Function.toString does not parenthesise numbers for the bracket accessor 20797 20798 It turns out that logic was there for all of the dot accessor nodes to make numbers be 20799 parenthesised properly, so it was a trivial extension to extend that to the bracket nodes. 20800 I renamed the enum type to reflect the fact that it is now used for both dot and bracket 20801 accessors. 20802 20803 * kjs/nodes2string.cpp: 20804 (KJS::bracketNodeStreamTo): 20805 (KJS::BracketAccessorNode::streamTo): 20806 20807 2008-01-26 Oliver Hunt <oliver (a] apple.com> 20808 20809 Reviewed by Darin. 20810 20811 Fix Bug 17018: Incorrect code generated from Function.toString for get/setters in object literals 20812 20813 Don't quote getter and setter names during output, as that is simply wrong. 20814 20815 * kjs/nodes2string.cpp: 20816 (KJS::PropertyNode::streamTo): 20817 20818 2008-01-26 Darin Adler <darin (a] apple.com> 20819 20820 Reviewed by Eric Seidel. 20821 20822 - http://bugs.webkit.org/show_bug.cgi?id=16860 20823 a bit of cleanup after the Activation optimization 20824 20825 * JavaScriptCore.exp: Export the GlobalExecState constructor instead of 20826 the global flavor of the ExecState constructor. It'd probably be cleaner 20827 to not export either one, but JSGlobalObject inlines the code that 20828 constructs the ExecState. If we changed that, we could remove this export. 20829 20830 * JavaScriptCore.xcodeproj/project.pbxproj: Re-sorted a few things and 20831 put the new source files into the kjs group rather than at the top level. 20832 20833 * kjs/ExecState.cpp: 20834 (KJS::ExecState::ExecState): Marked inline and updated for data member 20835 name changes. This is now only for use for the derived classes. Also removed 20836 code that sets the unused m_savedExec data member for the global case. That 20837 data member is only used for the other two types. 20838 (KJS::ExecState::~ExecState): Marked inline and removed all the code. 20839 The derived class destructors now inclde the appropriate code. 20840 (KJS::ExecState::lexicalGlobalObject): Removed unneeded special case for 20841 an empty scope chain. The bottom function already returns 0 for that case, 20842 so the general case code handles it fine. Also changed to use data members 20843 directly rather than calling functions. 20844 (KJS::GlobalExecState::GlobalExecState): Added. Calls through to the base 20845 class constructor. 20846 (KJS::GlobalExecState::~GlobalExecState): Added. 20847 (KJS::InterpreterExecState::InterpreterExecState): Added. Moved code to 20848 manipulate activeExecStates here since we don't want to have to check for the 20849 special case of globalExec. 20850 (KJS::InterpreterExecState::~InterpreterExecState): Added. 20851 (KJS::EvalExecState::EvalExecState): Added. 20852 (KJS::EvalExecState::~EvalExecState): Added. 20853 (KJS::FunctionExecState::FunctionExecState): Added. 20854 (KJS::FunctionExecState::~FunctionExecState): Added. 20855 20856 * kjs/ExecState.h: Tweaked the header, includes, and declarations a bit. 20857 Made ExecState inherit from Noncopyable. Reformatted some comments and 20858 made them a bit more brief. Rearranged declarations a little bit and removed 20859 unused savedExec function. Changed seenLabels function to return a reference 20860 rather than a pointer. Made constructors and destructor protected, and also 20861 did the same with all data members. Renamed m_thisVal to m_thisValue and 20862 ls to m_labelStack. Added three new derived classes for each of the 20863 types of ExecState. The primary goal here was to remove a branch from the 20864 code in the destructor, but it's also clearer than overloading the arguments 20865 to the ExecState constructor. 20866 20867 * kjs/JSGlobalObject.cpp: 20868 (KJS::getCurrentTime): Fixed formatting. 20869 (KJS::JSGlobalObject::pushActivation): Removed parentheses that don't make 20870 the expression clearer -- other similar sites didn't have these parentheses, 20871 even the one a couple lines earlier that sets stackEntry. 20872 (KJS::JSGlobalObject::tearOffActivation): Got rid of unneeded static_cast 20873 (I think I mentioned this during patch review) and used an early exit so that 20874 the entire contents of the function aren't nested inside an if statement. 20875 Also removed the check of codeType, instead checking Activation for 0. 20876 For now, I kept the codeType check, but inside an assertion. 20877 20878 * kjs/JSGlobalObject.h: Changed type of globalExec to GlobalExecState. 20879 * kjs/function.cpp: 20880 (KJS::FunctionImp::callAsFunction): Changed type to FunctionExecState. 20881 (KJS::GlobalFuncImp::callAsFunction): Changed type to EvalExecState. 20882 * kjs/interpreter.cpp: 20883 (KJS::Interpreter::evaluate): Changed type to GlobalExecState. 20884 20885 * kjs/nodes.cpp: 20886 (KJS::ContinueNode::execute): Changed code since seenLabels() returns a 20887 reference now instead of a pointer. 20888 (KJS::BreakNode::execute): Ditto. 20889 (KJS::LabelNode::execute): Ditto. 20890 20891 2008-01-26 Sam Weinig <sam (a] webkit.org> 20892 20893 Reviewed by Mark Rowe. 20894 20895 Cleanup node2string a little. 20896 - Remove some unnecessary branching. 20897 - Factor out bracket and dot streaming into static inline functions. 20898 20899 * kjs/nodes.h: 20900 * kjs/nodes2string.cpp: 20901 (KJS::bracketNodeStreamTo): 20902 (KJS::dotNodeStreamTo): 20903 (KJS::FunctionCallBracketNode::streamTo): 20904 (KJS::FunctionCallDotNode::streamTo): 20905 (KJS::PostIncBracketNode::streamTo): 20906 (KJS::PostDecBracketNode::streamTo): 20907 (KJS::PostIncDotNode::streamTo): 20908 (KJS::PostDecDotNode::streamTo): 20909 (KJS::DeleteBracketNode::streamTo): 20910 (KJS::DeleteDotNode::streamTo): 20911 (KJS::PreIncBracketNode::streamTo): 20912 (KJS::PreDecBracketNode::streamTo): 20913 (KJS::PreIncDotNode::streamTo): 20914 (KJS::PreDecDotNode::streamTo): 20915 (KJS::ReadModifyBracketNode::streamTo): 20916 (KJS::AssignBracketNode::streamTo): 20917 (KJS::ReadModifyDotNode::streamTo): 20918 (KJS::AssignDotNode::streamTo): 20919 (KJS::WhileNode::streamTo): 20920 20921 2008-01-26 Mark Rowe <mrowe (a] apple.com> 20922 20923 Reviewed by Darin Adler. 20924 20925 Fix http://bugs.webkit.org/show_bug.cgi?id=17001 20926 Bug 17001: Build error with Gtk port on Mac OS X 20927 20928 If both XP_MACOSX and XP_UNIX are defined then X11.h and Carbon.h will both be included. 20929 These provide conflicting definitions for a type named 'Cursor'. As XP_UNIX is set by 20930 the build system when targeting X11, it doesn't make sense for XP_MACOSX to also be set 20931 in this instance. 20932 20933 * bindings/npapi.h: Don't define XP_MACOSX if XP_UNIX is defined. 20934 20935 2008-01-26 Darin Adler <darin (a] apple.com> 20936 20937 Reviewed by Oliver. 20938 20939 - fix http://bugs.webkit.org/show_bug.cgi?id=17013 20940 JSC can't round trip certain for-loops 20941 20942 Test: fast/js/toString-for-var-decl.html 20943 20944 * kjs/nodes.h: Added PlaceholderTrueNode so we can put nodes into 20945 for loops without injecting the word "true" into them (nice, but not 20946 the bug fix). Fixed ForNode constructor so expr1WasVarDecl is set 20947 only when there is an expression, since it's common for the actual 20948 variable declaration to be moved by the parser. 20949 20950 * kjs/nodes2string.cpp: 20951 (KJS::PlaceholderTrueNode::streamTo): Added. Empty. 20952 20953 2008-01-25 Oliver Hunt <oliver (a] apple.com> 20954 20955 Reviewed by Maciej. 20956 20957 Fix for bug 17012: REGRESSION: JSC can't round trip an object literal 20958 20959 Add logic to ensure that object literals and function expressions get 20960 parentheses when necessary. 20961 20962 * kjs/nodes.h: 20963 * kjs/nodes2string.cpp: 20964 (KJS::SourceStream::operator<<): 20965 20966 2008-01-24 Steve Falkenburg <sfalken (a] apple.com> 20967 20968 Build fix. 20969 20970 * JavaScriptCore.vcproj/JavaScriptCore.sln: 20971 20972 2008-01-24 Steve Falkenburg <sfalken (a] apple.com> 20973 20974 Build fix. 20975 20976 * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: 20977 20978 2008-01-24 Michael Goddard <michael.goddard (a] trolltech.com> 20979 20980 Reviewed by Simon. 20981 20982 Fix QDateTime to JS Date conversion. 20983 Several conversion errors (some UTC related, some month 20984 offset related) and the conversion distance for Date 20985 to DateTime conversion weights were fixed (it should never 20986 be better to convert a JS Number into a Date rather than 20987 an int). 20988 20989 * bindings/qt/qt_runtime.cpp: 20990 (KJS::Bindings::convertValueToQVariant): 20991 (KJS::Bindings::convertQVariantToValue): 20992 20993 2008-01-24 Michael Goddard <michael.goddard (a] trolltech.com> 20994 20995 Reviewed by Simon. 20996 20997 Add support for calling QObjects. 20998 Add support for invokeDefaultMethod (via a call to 20999 a specific slot), and also allow using it as a 21000 constructor, like QtScript. 21001 21002 21003 * bindings/qt/qt_class.cpp: 21004 (KJS::Bindings::QtClass::fallbackObject): 21005 * bindings/qt/qt_instance.cpp: 21006 (KJS::Bindings::QtRuntimeObjectImp::construct): 21007 (KJS::Bindings::QtInstance::QtInstance): 21008 (KJS::Bindings::QtInstance::~QtInstance): 21009 (KJS::Bindings::QtInstance::implementsCall): 21010 (KJS::Bindings::QtInstance::invokeDefaultMethod): 21011 * bindings/qt/qt_instance.h: 21012 * bindings/qt/qt_runtime.cpp: 21013 (KJS::Bindings::findMethodIndex): 21014 (KJS::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod): 21015 (KJS::Bindings::QtRuntimeMetaMethod::callAsFunction): 21016 * bindings/qt/qt_runtime.h: 21017 21018 2008-01-24 Michael Goddard <michael.goddard (a] trolltech.com> 21019 21020 Reviewed by Simon. 21021 21022 Code style cleanups. 21023 Add spaces before/after braces in inline function. 21024 21025 * bindings/qt/qt_instance.h: 21026 21027 2008-01-24 Michael Goddard <michael.goddard (a] trolltech.com> 21028 21029 Reviewed by Simon. 21030 21031 Code style cleanups. 21032 Remove spaces and unneeded declared parameter names. 21033 21034 * bindings/qt/qt_instance.cpp: 21035 (KJS::Bindings::QtRuntimeObjectImp::removeFromCache): 21036 21037 2008-01-24 Michael Goddard <michael.goddard (a] trolltech.com> 21038 21039 Reviewed by Simon. 21040 21041 Clear stale RuntimeObjectImps. 21042 Since other objects can have refs to the QtInstance, 21043 we can't rely on the QtInstance being deleted when the 21044 RuntimeObjectImp is invalidate or deleted. This 21045 could result in a stale JSObject being returned for 21046 a valid Instance. 21047 21048 * bindings/qt/qt_instance.cpp: 21049 (KJS::Bindings::QtRuntimeObjectImp::QtRuntimeObjectImp): 21050 (KJS::Bindings::QtRuntimeObjectImp::~QtRuntimeObjectImp): 21051 (KJS::Bindings::QtRuntimeObjectImp::invalidate): 21052 (KJS::Bindings::QtRuntimeObjectImp::removeFromCache): 21053 (KJS::Bindings::QtInstance::getRuntimeObject): 21054 * bindings/runtime.cpp: 21055 (KJS::Bindings::Instance::createRuntimeObject): 21056 * bindings/runtime.h: 21057 21058 2008-01-23 Alp Toker <alp (a] atoker.com> 21059 21060 Rubber-stamped by Mark Rowe. 21061 21062 Remove whitespace after -I in automake include lists. 21063 21064 * GNUmakefile.am: 21065 21066 2008-01-23 Michael Goddard <michael.goddard (a] trolltech.com> 21067 21068 Reviewed by Lars Knoll <lars (a] trolltech.com>. 21069 21070 Reworked the JavaScriptCore Qt bindings: 21071 21072 * Add initial support for string and variant arrays, as well 21073 as sub QObjects in the JS bindings. 21074 21075 * Don't expose fields marked as not scriptable by moc. 21076 21077 * Add support for dynamic properties and accessing named 21078 QObject children of an object (like QtScript and older 21079 IE DOM style JS). 21080 * Add support for custom toString methods. 21081 21082 * Fine tune some bindings to be closer to QtScript. 21083 Make void functions return undefined, and empty/ 21084 null QStrings return a zero length string. 21085 21086 * Create framework for allowing more direct method calls. 21087 Since RuntimeMethod doesn't allow us to add additional 21088 methods/properties to a function, add these classes. 21089 Start prototyping object.signal.connect(...). 21090 21091 * Add signal support to the Qt bindings. 21092 Allow connecting to signals (object.signal.connect(slot)), 21093 disconnecting, and emitting signals. Currently chooses 21094 the first signal that matches the name, so this will need 21095 improvement. 21096 21097 * Add property names, and resolve signals closer to use. 21098 Enumerating properties now returns some of the Qt properties 21099 and signals. Slots and methods aren't quite present. Also, 21100 resolve signal connections etc. closer to the time of use, so 21101 we can do more dynamic resolution based on argument type etc. 21102 Still picks the first one with the same name, at the moment. 21103 21104 * Make signature comparison code consistent. 21105 Use the same code for checking meta signatures in 21106 the method and fallback getters, and avoid a 21107 QByteArray construction when we can. 21108 21109 * Fix minor memory leak, and handle pointers better. 21110 Delete the private object in the dtors, and use RefPtrs 21111 for holding Instances etc. 21112 21113 * Handle method lookup better. 21114 Allow invocation time method lookup based on the arguments, 21115 which is closer to QtScript behaviour. Also, cache the 21116 method lists and delete them in the QtClass dtor (stops 21117 a memory leak). 21118 21119 * Improve JS to Qt data type conversions. 21120 Add some support for Date & RegExp JS objects, 21121 and provide some metrics on the quality of the 21122 conversion. 21123 21124 * A couple of fixes for autotest failures. 21125 Better support for converting lists, read/write only 21126 QMetaProperty support, modified slot search order...) 21127 21128 * bindings/qt/qt_class.cpp: 21129 (KJS::Bindings::QtClass::QtClass): 21130 (KJS::Bindings::QtClass::~QtClass): 21131 (KJS::Bindings::QtClass::name): 21132 (KJS::Bindings::QtClass::fallbackObject): 21133 (KJS::Bindings::QtClass::methodsNamed): 21134 (KJS::Bindings::QtClass::fieldNamed): 21135 * bindings/qt/qt_class.h: 21136 * bindings/qt/qt_instance.cpp: 21137 (KJS::Bindings::QtInstance::QtInstance): 21138 (KJS::Bindings::QtInstance::~QtInstance): 21139 (KJS::Bindings::QtInstance::getRuntimeObject): 21140 (KJS::Bindings::QtInstance::getClass): 21141 (KJS::Bindings::QtInstance::implementsCall): 21142 (KJS::Bindings::QtInstance::getPropertyNames): 21143 (KJS::Bindings::QtInstance::invokeMethod): 21144 (KJS::Bindings::QtInstance::invokeDefaultMethod): 21145 (KJS::Bindings::QtInstance::stringValue): 21146 (KJS::Bindings::QtInstance::booleanValue): 21147 (KJS::Bindings::QtInstance::valueOf): 21148 (KJS::Bindings::QtField::name): 21149 (KJS::Bindings::QtField::valueFromInstance): 21150 (KJS::Bindings::QtField::setValueToInstance): 21151 * bindings/qt/qt_instance.h: 21152 (KJS::Bindings::QtInstance::getBindingLanguage): 21153 (KJS::Bindings::QtInstance::getObject): 21154 * bindings/qt/qt_runtime.cpp: 21155 (KJS::Bindings::QWKNoDebug::QWKNoDebug): 21156 (KJS::Bindings::QWKNoDebug::~QWKNoDebug): 21157 (KJS::Bindings::QWKNoDebug::operator<<): 21158 (KJS::Bindings::): 21159 (KJS::Bindings::valueRealType): 21160 (KJS::Bindings::convertValueToQVariant): 21161 (KJS::Bindings::convertQVariantToValue): 21162 (KJS::Bindings::QtRuntimeMethod::QtRuntimeMethod): 21163 (KJS::Bindings::QtRuntimeMethod::~QtRuntimeMethod): 21164 (KJS::Bindings::QtRuntimeMethod::codeType): 21165 (KJS::Bindings::QtRuntimeMethod::execute): 21166 (KJS::Bindings::QtRuntimeMethodData::~QtRuntimeMethodData): 21167 (KJS::Bindings::QtRuntimeMetaMethodData::~QtRuntimeMetaMethodData): 21168 (KJS::Bindings::QtRuntimeConnectionMethodData::~QtRuntimeConnectionMethodData): 21169 (KJS::Bindings::QtMethodMatchType::): 21170 (KJS::Bindings::QtMethodMatchType::QtMethodMatchType): 21171 (KJS::Bindings::QtMethodMatchType::kind): 21172 (KJS::Bindings::QtMethodMatchType::isValid): 21173 (KJS::Bindings::QtMethodMatchType::isVariant): 21174 (KJS::Bindings::QtMethodMatchType::isMetaType): 21175 (KJS::Bindings::QtMethodMatchType::isUnresolved): 21176 (KJS::Bindings::QtMethodMatchType::isMetaEnum): 21177 (KJS::Bindings::QtMethodMatchType::enumeratorIndex): 21178 (KJS::Bindings::QtMethodMatchType::variant): 21179 (KJS::Bindings::QtMethodMatchType::metaType): 21180 (KJS::Bindings::QtMethodMatchType::metaEnum): 21181 (KJS::Bindings::QtMethodMatchType::unresolved): 21182 (KJS::Bindings::QtMethodMatchType::typeId): 21183 (KJS::Bindings::QtMethodMatchType::name): 21184 (KJS::Bindings::QtMethodMatchData::QtMethodMatchData): 21185 (KJS::Bindings::QtMethodMatchData::isValid): 21186 (KJS::Bindings::QtMethodMatchData::firstUnresolvedIndex): 21187 (KJS::Bindings::indexOfMetaEnum): 21188 (KJS::Bindings::findMethodIndex): 21189 (KJS::Bindings::findSignalIndex): 21190 (KJS::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod): 21191 (KJS::Bindings::QtRuntimeMetaMethod::mark): 21192 (KJS::Bindings::QtRuntimeMetaMethod::callAsFunction): 21193 (KJS::Bindings::QtRuntimeMetaMethod::getOwnPropertySlot): 21194 (KJS::Bindings::QtRuntimeMetaMethod::lengthGetter): 21195 (KJS::Bindings::QtRuntimeMetaMethod::connectGetter): 21196 (KJS::Bindings::QtRuntimeMetaMethod::disconnectGetter): 21197 (KJS::Bindings::QtRuntimeConnectionMethod::QtRuntimeConnectionMethod): 21198 (KJS::Bindings::QtRuntimeConnectionMethod::callAsFunction): 21199 (KJS::Bindings::QtRuntimeConnectionMethod::getOwnPropertySlot): 21200 (KJS::Bindings::QtRuntimeConnectionMethod::lengthGetter): 21201 (KJS::Bindings::QtConnectionObject::QtConnectionObject): 21202 (KJS::Bindings::QtConnectionObject::~QtConnectionObject): 21203 (KJS::Bindings::QtConnectionObject::metaObject): 21204 (KJS::Bindings::QtConnectionObject::qt_metacast): 21205 (KJS::Bindings::QtConnectionObject::qt_metacall): 21206 (KJS::Bindings::QtConnectionObject::execute): 21207 (KJS::Bindings::QtConnectionObject::match): 21208 (KJS::Bindings::::QtArray): 21209 (KJS::Bindings::::~QtArray): 21210 (KJS::Bindings::::rootObject): 21211 (KJS::Bindings::::setValueAt): 21212 (KJS::Bindings::::valueAt): 21213 * bindings/qt/qt_runtime.h: 21214 (KJS::Bindings::QtField::): 21215 (KJS::Bindings::QtField::QtField): 21216 (KJS::Bindings::QtField::fieldType): 21217 (KJS::Bindings::QtMethod::QtMethod): 21218 (KJS::Bindings::QtMethod::name): 21219 (KJS::Bindings::QtMethod::numParameters): 21220 (KJS::Bindings::QtArray::getLength): 21221 (KJS::Bindings::QtRuntimeMethod::d_func): 21222 (KJS::Bindings::QtRuntimeMetaMethod::d_func): 21223 (KJS::Bindings::QtRuntimeConnectionMethod::d_func): 21224 (KJS::Bindings::): 21225 * bindings/runtime.cpp: 21226 (KJS::Bindings::Instance::createBindingForLanguageInstance): 21227 (KJS::Bindings::Instance::createRuntimeObject): 21228 (KJS::Bindings::Instance::reallyCreateRuntimeObject): 21229 * bindings/runtime.h: 21230 21231 2008-01-22 Anders Carlsson <andersca (a] apple.com> 21232 21233 Reviewed by Darin and Adam. 21234 21235 <rdar://problem/5688975> 21236 div element on microsoft site has wrong left offset. 21237 21238 Return true even if NPN_GetProperty returns null or undefined. This matches Firefox 21239 (and is what the Silverlight plug-in expects). 21240 21241 * bindings/NP_jsobject.cpp: 21242 (_NPN_GetProperty): 21243 21244 2008-01-21 Geoffrey Garen <ggaren (a] apple.com> 21245 21246 Reviewed by Maciej Stachowiak. 21247 21248 Fixed http://bugs.webkit.org/show_bug.cgi?id=16909 21249 REGRESSION: Amazon.com crash (ActivationImp) 21250 21251 (and a bunch of other crashes) 21252 21253 Plus, a .7% SunSpider speedup to boot. 21254 21255 Replaced the buggy currentExec and savedExec mechanisms with an 21256 explicit ExecState stack. 21257 21258 * kjs/collector.cpp: 21259 (KJS::Collector::collect): Explicitly mark the ExecState stack. 21260 21261 (KJS::Collector::reportOutOfMemoryToAllExecStates): Slight change in 21262 behavior: We no longer throw an exception in any global ExecStates, 21263 since global ExecStates are more like pseudo-ExecStates, and aren't 21264 used for script execution. (It's unclear what would happen if you left 21265 an exception waiting around in a global ExecState, but it probably 21266 wouldn't be good.) 21267 21268 2008-01-21 Jan Michael Alonzo <jmalonzo (a] unpluggable.com> 21269 21270 Reviewed by Alp Toker. 21271 21272 http://bugs.webkit.org/show_bug.cgi?id=16955 21273 Get errors when cross-compile webkit-gtk 21274 21275 * GNUmakefile.am: removed ICU_CFLAGS 21276 21277 2008-01-18 Kevin McCullough <kmccullough (a] apple.com> 21278 21279 - Build fix. 21280 21281 * kjs/ustring.h: 21282 21283 2008-01-18 Kevin McCullough <kmccullough (a] apple.com> 21284 21285 - Build fix. 21286 21287 * kjs/ustring.cpp: 21288 * kjs/ustring.h: 21289 (KJS::UString::cost): 21290 21291 2008-01-18 Kevin McCullough <kmccullough (a] apple.com> 21292 21293 Reviewed by Geoff. 21294 21295 - Correctly report cost of appended strings to trigger GC. 21296 21297 * kjs/ustring.cpp: 21298 (KJS::UString::Rep::create): 21299 (KJS::UString::UString): Don't create unnecssary objects. 21300 (KJS::UString::cost): Report cost if necessary but also keep track of 21301 reported cost. 21302 * kjs/ustring.h: 21303 21304 2008-01-18 Simon Hausmann <hausmann (a] webkit.org> 21305 21306 Reviewed by Holger. 21307 21308 Fix return type conversions from Qt slots to JS values. 21309 21310 This also fixes fast/dom/open-and-close-by-DOM.html, which called 21311 layoutTestController.windowCount(). 21312 21313 When constructing the QVariant that holds the return type we cannot 21314 use the QVarian(Type) constuctor as that will create a null variant. 21315 We have to use the QVariant(Type, void *) constructor instead, just 21316 like in QMetaObject::read() for example. 21317 21318 21319 * bindings/qt/qt_instance.cpp: 21320 (KJS::Bindings::QtInstance::getRuntimeObject): 21321 21322 2008-01-18 Prasanth Ullattil <prasanth.ullattil (a] trolltech.com> 21323 21324 Reviewed by Simon Hausmann <hausmann (a] webkit.org>. 21325 21326 Fix compilation on Win64(2): Implemented currentThreadStackBase on X86-64 on Windows 21327 21328 21329 * kjs/collector.cpp: 21330 (KJS::Collector::heapAllocate): 21331 21332 2008-01-18 Prasanth Ullattil <prasanth.ullattil (a] trolltech.com> 21333 21334 Reviewed by Simon Hausmann <hausmann (a] webkit.org>. 21335 21336 Fix compilation on Win64(1): Define WTF_PLATFORM_X86_64 correctly on Win64. 21337 21338 21339 * wtf/Platform.h: 21340 21341 2008-01-17 Antti Koivisto <antti (a] apple.com> 21342 21343 Fix Windows build. 21344 21345 * kjs/regexp_object.cpp: 21346 (KJS::regExpProtoFuncToString): 21347 21348 2008-01-16 Sam Weinig <sam (a] webkit.org> 21349 21350 Reviewed by Darin. 21351 21352 Fix for http://bugs.webkit.org/show_bug.cgi?id=16901 21353 Convert remaining JS function objects to use the new PrototypeFunction class 21354 21355 - Moves Boolean, Function, RegExp, Number, Object and Global functions to their 21356 own static function implementations so that they can be used with the 21357 PrototypeFunction class. SunSpider says this is 1.003x as fast. 21358 21359 * kjs/JSGlobalObject.cpp: 21360 (KJS::JSGlobalObject::reset): 21361 * kjs/array_object.h: 21362 * kjs/bool_object.cpp: 21363 (KJS::BooleanInstance::BooleanInstance): 21364 (KJS::BooleanPrototype::BooleanPrototype): 21365 (KJS::booleanProtoFuncToString): 21366 (KJS::booleanProtoFuncValueOf): 21367 (KJS::BooleanObjectImp::BooleanObjectImp): 21368 (KJS::BooleanObjectImp::implementsConstruct): 21369 (KJS::BooleanObjectImp::construct): 21370 (KJS::BooleanObjectImp::callAsFunction): 21371 * kjs/bool_object.h: 21372 (KJS::BooleanInstance::classInfo): 21373 * kjs/error_object.cpp: 21374 (KJS::ErrorPrototype::ErrorPrototype): 21375 (KJS::errorProtoFuncToString): 21376 * kjs/error_object.h: 21377 * kjs/function.cpp: 21378 (KJS::globalFuncEval): 21379 (KJS::globalFuncParseInt): 21380 (KJS::globalFuncParseFloat): 21381 (KJS::globalFuncIsNaN): 21382 (KJS::globalFuncIsFinite): 21383 (KJS::globalFuncDecodeURI): 21384 (KJS::globalFuncDecodeURIComponent): 21385 (KJS::globalFuncEncodeURI): 21386 (KJS::globalFuncEncodeURIComponent): 21387 (KJS::globalFuncEscape): 21388 (KJS::globalFuncUnEscape): 21389 (KJS::globalFuncKJSPrint): 21390 (KJS::PrototypeFunction::PrototypeFunction): 21391 * kjs/function.h: 21392 * kjs/function_object.cpp: 21393 (KJS::FunctionPrototype::FunctionPrototype): 21394 (KJS::functionProtoFuncToString): 21395 (KJS::functionProtoFuncApply): 21396 (KJS::functionProtoFuncCall): 21397 * kjs/function_object.h: 21398 * kjs/number_object.cpp: 21399 (KJS::NumberPrototype::NumberPrototype): 21400 (KJS::numberProtoFuncToString): 21401 (KJS::numberProtoFuncToLocaleString): 21402 (KJS::numberProtoFuncValueOf): 21403 (KJS::numberProtoFuncToFixed): 21404 (KJS::numberProtoFuncToExponential): 21405 (KJS::numberProtoFuncToPrecision): 21406 * kjs/number_object.h: 21407 (KJS::NumberInstance::classInfo): 21408 (KJS::NumberObjectImp::classInfo): 21409 (KJS::NumberObjectImp::): 21410 * kjs/object_object.cpp: 21411 (KJS::ObjectPrototype::ObjectPrototype): 21412 (KJS::objectProtoFuncValueOf): 21413 (KJS::objectProtoFuncHasOwnProperty): 21414 (KJS::objectProtoFuncIsPrototypeOf): 21415 (KJS::objectProtoFuncDefineGetter): 21416 (KJS::objectProtoFuncDefineSetter): 21417 (KJS::objectProtoFuncLookupGetter): 21418 (KJS::objectProtoFuncLookupSetter): 21419 (KJS::objectProtoFuncPropertyIsEnumerable): 21420 (KJS::objectProtoFuncToLocaleString): 21421 (KJS::objectProtoFuncToString): 21422 * kjs/object_object.h: 21423 * kjs/regexp_object.cpp: 21424 (KJS::RegExpPrototype::RegExpPrototype): 21425 (KJS::regExpProtoFuncTest): 21426 (KJS::regExpProtoFuncExec): 21427 (KJS::regExpProtoFuncCompile): 21428 (KJS::regExpProtoFuncToString): 21429 * kjs/regexp_object.h: 21430 21431 2008-01-16 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 21432 21433 Reviewed by Maciej & Darin. 21434 21435 Fixes Bug 16868: Gmail crash 21436 and Bug 16871: Crash when loading apple.com/startpage 21437 21438 <http://bugs.webkit.org/show_bug.cgi?id=16868> 21439 <rdar://problem/5686108> 21440 21441 <http://bugs.webkit.org/show_bug.cgi?id=16871> 21442 <rdar://problem/5686670> 21443 21444 Adds ActivationImp tear-off for cross-window eval() and fixes an 21445 existing garbage collection issue exposed by the ActivationImp tear-off 21446 patch (r29425) that can occur when an ExecState's m_callingExec is 21447 different than its m_savedExec. 21448 21449 * kjs/ExecState.cpp: 21450 (KJS::ExecState::mark): 21451 * kjs/function.cpp: 21452 (KJS::GlobalFuncImp::callAsFunction): 21453 21454 2008-01-16 Sam Weinig <sam (a] webkit.org> 21455 21456 Reviewed by Oliver. 21457 21458 Clean up MathObjectImp, it needed a little scrubbing. 21459 21460 * kjs/math_object.cpp: 21461 (KJS::MathObjectImp::MathObjectImp): 21462 (KJS::MathObjectImp::getOwnPropertySlot): 21463 (KJS::MathObjectImp::getValueProperty): 21464 (KJS::mathProtoFuncACos): 21465 (KJS::mathProtoFuncASin): 21466 (KJS::mathProtoFuncATan): 21467 (KJS::mathProtoFuncATan2): 21468 (KJS::mathProtoFuncCos): 21469 (KJS::mathProtoFuncExp): 21470 (KJS::mathProtoFuncLog): 21471 (KJS::mathProtoFuncSin): 21472 (KJS::mathProtoFuncSqrt): 21473 (KJS::mathProtoFuncTan): 21474 * kjs/math_object.h: 21475 (KJS::MathObjectImp::classInfo): 21476 (KJS::MathObjectImp::): 21477 21478 2008-01-16 Sam Weinig <sam (a] webkit.org> 21479 21480 Reviewed by Geoffrey Garen. 21481 21482 Rename Lexer variable bol to atLineStart. 21483 21484 * kjs/lexer.cpp: 21485 (KJS::Lexer::Lexer): 21486 (KJS::Lexer::setCode): 21487 (KJS::Lexer::nextLine): 21488 (KJS::Lexer::lex): 21489 * kjs/lexer.h: 21490 21491 2008-01-16 Sam Weinig <sam (a] webkit.org> 21492 21493 Reviewed by Geoffrey Garen and Anders Carlsson. 21494 21495 Remove uses of KJS_PURE_ECMA as we don't ever build with it defined, 21496 and we have many features that are not included in the ECMA spec. 21497 21498 * kjs/lexer.cpp: 21499 (KJS::Lexer::Lexer): 21500 (KJS::Lexer::setCode): 21501 (KJS::Lexer::nextLine): 21502 (KJS::Lexer::lex): 21503 * kjs/lexer.h: 21504 * kjs/string_object.cpp: 21505 * kjs/string_object.h: 21506 21507 2008-01-15 Sam Weinig <sam (a] webkit.org> 21508 21509 Reviewed by Geoffrey Garen. 21510 21511 Fix <rdar://problem/5595552> r27608 introduced a 20% increase in JS binary size, 4% increase in WebCore binary size 21512 21513 - This changes the way JS functions that use Lookup tables are handled. Instead of using 21514 one class per function, which allowed specialization of the virtual callAsFunction 21515 method, we now use one class, PrototypeFunction, which takes a pointer to a static 21516 function to use as the implementation. This significantly decreases the binary size 21517 of JavaScriptCore (about 145k on an Intel only build) while still keeping some of the 21518 speedup r27608 garnered (SunSpider says this is 1.005x as slow, which should leave some 21519 wiggle room from the original 1% speedup) and keeps the functions implementations in separate 21520 functions to help with optimizations. 21521 21522 * JavaScriptCore.exp: 21523 * JavaScriptCore.xcodeproj/project.pbxproj: 21524 * kjs/array_object.cpp: 21525 (KJS::arrayProtoFuncToString): 21526 (KJS::arrayProtoFuncToLocaleString): 21527 (KJS::arrayProtoFuncJoin): 21528 (KJS::arrayProtoFuncConcat): 21529 (KJS::arrayProtoFuncPop): 21530 (KJS::arrayProtoFuncPush): 21531 (KJS::arrayProtoFuncReverse): 21532 (KJS::arrayProtoFuncShift): 21533 (KJS::arrayProtoFuncSlice): 21534 (KJS::arrayProtoFuncSort): 21535 (KJS::arrayProtoFuncSplice): 21536 (KJS::arrayProtoFuncUnShift): 21537 (KJS::arrayProtoFuncFilter): 21538 (KJS::arrayProtoFuncMap): 21539 (KJS::arrayProtoFuncEvery): 21540 (KJS::arrayProtoFuncForEach): 21541 (KJS::arrayProtoFuncSome): 21542 (KJS::arrayProtoFuncIndexOf): 21543 (KJS::arrayProtoFuncLastIndexOf): 21544 * kjs/array_object.h: 21545 * kjs/date_object.cpp: 21546 (KJS::DatePrototype::getOwnPropertySlot): 21547 (KJS::dateProtoFuncToString): 21548 (KJS::dateProtoFuncToUTCString): 21549 (KJS::dateProtoFuncToDateString): 21550 (KJS::dateProtoFuncToTimeString): 21551 (KJS::dateProtoFuncToLocaleString): 21552 (KJS::dateProtoFuncToLocaleDateString): 21553 (KJS::dateProtoFuncToLocaleTimeString): 21554 (KJS::dateProtoFuncValueOf): 21555 (KJS::dateProtoFuncGetTime): 21556 (KJS::dateProtoFuncGetFullYear): 21557 (KJS::dateProtoFuncGetUTCFullYear): 21558 (KJS::dateProtoFuncToGMTString): 21559 (KJS::dateProtoFuncGetMonth): 21560 (KJS::dateProtoFuncGetUTCMonth): 21561 (KJS::dateProtoFuncGetDate): 21562 (KJS::dateProtoFuncGetUTCDate): 21563 (KJS::dateProtoFuncGetDay): 21564 (KJS::dateProtoFuncGetUTCDay): 21565 (KJS::dateProtoFuncGetHours): 21566 (KJS::dateProtoFuncGetUTCHours): 21567 (KJS::dateProtoFuncGetMinutes): 21568 (KJS::dateProtoFuncGetUTCMinutes): 21569 (KJS::dateProtoFuncGetSeconds): 21570 (KJS::dateProtoFuncGetUTCSeconds): 21571 (KJS::dateProtoFuncGetMilliSeconds): 21572 (KJS::dateProtoFuncGetUTCMilliseconds): 21573 (KJS::dateProtoFuncGetTimezoneOffset): 21574 (KJS::dateProtoFuncSetTime): 21575 (KJS::dateProtoFuncSetMilliSeconds): 21576 (KJS::dateProtoFuncSetUTCMilliseconds): 21577 (KJS::dateProtoFuncSetSeconds): 21578 (KJS::dateProtoFuncSetUTCSeconds): 21579 (KJS::dateProtoFuncSetMinutes): 21580 (KJS::dateProtoFuncSetUTCMinutes): 21581 (KJS::dateProtoFuncSetHours): 21582 (KJS::dateProtoFuncSetUTCHours): 21583 (KJS::dateProtoFuncSetDate): 21584 (KJS::dateProtoFuncSetUTCDate): 21585 (KJS::dateProtoFuncSetMonth): 21586 (KJS::dateProtoFuncSetUTCMonth): 21587 (KJS::dateProtoFuncSetFullYear): 21588 (KJS::dateProtoFuncSetUTCFullYear): 21589 (KJS::dateProtoFuncSetYear): 21590 (KJS::dateProtoFuncGetYear): 21591 * kjs/date_object.h: 21592 * kjs/function.cpp: 21593 (KJS::PrototypeFunction::PrototypeFunction): 21594 (KJS::PrototypeFunction::callAsFunction): 21595 * kjs/function.h: 21596 * kjs/lookup.h: 21597 (KJS::HashEntry::): 21598 (KJS::staticFunctionGetter): 21599 * kjs/math_object.cpp: 21600 (KJS::mathProtoFuncAbs): 21601 (KJS::mathProtoFuncACos): 21602 (KJS::mathProtoFuncASin): 21603 (KJS::mathProtoFuncATan): 21604 (KJS::mathProtoFuncATan2): 21605 (KJS::mathProtoFuncCeil): 21606 (KJS::mathProtoFuncCos): 21607 (KJS::mathProtoFuncExp): 21608 (KJS::mathProtoFuncFloor): 21609 (KJS::mathProtoFuncLog): 21610 (KJS::mathProtoFuncMax): 21611 (KJS::mathProtoFuncMin): 21612 (KJS::mathProtoFuncPow): 21613 (KJS::mathProtoFuncRandom): 21614 (KJS::mathProtoFuncRound): 21615 (KJS::mathProtoFuncSin): 21616 (KJS::mathProtoFuncSqrt): 21617 (KJS::mathProtoFuncTan): 21618 * kjs/math_object.h: 21619 * kjs/string_object.cpp: 21620 (KJS::stringProtoFuncToString): 21621 (KJS::stringProtoFuncValueOf): 21622 (KJS::stringProtoFuncCharAt): 21623 (KJS::stringProtoFuncCharCodeAt): 21624 (KJS::stringProtoFuncConcat): 21625 (KJS::stringProtoFuncIndexOf): 21626 (KJS::stringProtoFuncLastIndexOf): 21627 (KJS::stringProtoFuncMatch): 21628 (KJS::stringProtoFuncSearch): 21629 (KJS::stringProtoFuncReplace): 21630 (KJS::stringProtoFuncSlice): 21631 (KJS::stringProtoFuncSplit): 21632 (KJS::stringProtoFuncSubstr): 21633 (KJS::stringProtoFuncSubstring): 21634 (KJS::stringProtoFuncToLowerCase): 21635 (KJS::stringProtoFuncToUpperCase): 21636 (KJS::stringProtoFuncToLocaleLowerCase): 21637 (KJS::stringProtoFuncToLocaleUpperCase): 21638 (KJS::stringProtoFuncLocaleCompare): 21639 (KJS::stringProtoFuncBig): 21640 (KJS::stringProtoFuncSmall): 21641 (KJS::stringProtoFuncBlink): 21642 (KJS::stringProtoFuncBold): 21643 (KJS::stringProtoFuncFixed): 21644 (KJS::stringProtoFuncItalics): 21645 (KJS::stringProtoFuncStrike): 21646 (KJS::stringProtoFuncSub): 21647 (KJS::stringProtoFuncSup): 21648 (KJS::stringProtoFuncFontcolor): 21649 (KJS::stringProtoFuncFontsize): 21650 (KJS::stringProtoFuncAnchor): 21651 (KJS::stringProtoFuncLink): 21652 * kjs/string_object.h: 21653 21654 2008-01-15 Geoffrey Garen <ggaren (a] apple.com> 21655 21656 Reviewed by Adam Roben. 21657 21658 Some tweaks to our headerdoc, suggested by David Gatwood on the docs 21659 team. 21660 21661 * API/JSBase.h: 21662 * API/JSObjectRef.h: 21663 * API/JSStringRef.h: 21664 * API/JSValueRef.h: 21665 21666 2008-01-15 Alp Toker <alp (a] atoker.com> 21667 21668 Rubber-stamped by Anders. 21669 21670 Make the HTTP backend configurable in the GTK+ port. curl is currently 21671 the only option. 21672 21673 * wtf/Platform.h: Don't hard-code WTF_USE_CURL for GTK 21674 21675 2008-01-15 Sam Weinig <sam (a] webkit.org> 21676 21677 Reviewed by Beth Dakin. 21678 21679 Remove unneeded variable. 21680 21681 * kjs/string_object.cpp: 21682 (KJS::StringProtoFuncSubstr::callAsFunction): 21683 21684 2008-01-14 Steve Falkenburg <sfalken (a] apple.com> 21685 21686 Use shared vsprops for most vcproj properties. 21687 21688 Reviewed by Darin. 21689 21690 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add missing Debug_Internal config. 21691 * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add missing Debug_Internal config. 21692 * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: 21693 21694 2008-01-14 Adam Roben <aroben (a] apple.com> 21695 21696 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added 21697 some headers that were missing from the vcproj so their contents will 21698 be included in Find in Files. 21699 21700 2008-01-14 Adam Roben <aroben (a] apple.com> 21701 21702 Fix Bug 16871: Crash when loading apple.com/startpage 21703 21704 <http://bugs.webkit.org/show_bug.cgi?id=16871> 21705 <rdar://problem/5686670> 21706 21707 Patch written by Darin, reviewed by me. 21708 21709 * kjs/ExecState.cpp: 21710 (KJS::ExecState::mark): Call ActivationImp::markChildren if our 21711 m_activation is on the stack. This is what ScopeChain::mark also does, 21712 but apparently in some cases it's possible for an ExecState's 21713 ActivationImp to not be in any ScopeChain. 21714 21715 2008-01-14 Kevin McCullough <kmccullough (a] apple.com> 21716 21717 Reviewed by Oliver. 21718 21719 -<rdar://problem/5622667> REGRESSION (Leopard-ToT): Endless loading loop 21720 trying to view techreport.com comments 21721 - We need to set values in the map, because if they are already in the 21722 map they will not be reset when we use add(). 21723 21724 * kjs/array_instance.cpp: 21725 (KJS::ArrayInstance::put): 21726 21727 2008-01-14 Darin Adler <darin (a] apple.com> 21728 21729 Reviewed by Adam. 21730 21731 - re-speed-up the page load test (my StringImpl change slowed it down) 21732 21733 * wtf/RefCounted.h: 21734 (WTF::RefCounted::RefCounted): Allow derived classes to start with a reference 21735 count other than 0. Eventually everyone will want to start with a 1. This is a 21736 staged change. For now, there's a default of 0, and you can specify 1. Later, 21737 there will be no default and everyone will have to specify. And then later, there 21738 will be a default of 1. Eventually, we can take away even the option of starting 21739 with 0! 21740 21741 * wtf/Vector.h: 21742 (WTF::Vector::Vector): Sped up creation of non-empty vectors by removing the 21743 overhead of first constructing something empty and then calling resize. 21744 (WTF::Vector::clear): Sped up the common case of calling clear on an empty 21745 vector by adding a check for that case. 21746 (WTF::Vector::releaseBuffer): Marked this function inline and removed a branch 21747 in the case of vectors with no inline capacity (normal vectors) by leaving out 21748 the code to copy the inline buffer in that case. 21749 21750 2008-01-14 Alexey Proskuryakov <ap (a] webkit.org> 21751 21752 Reviewed by David Kilzer. 21753 21754 http://bugs.webkit.org/show_bug.cgi?id=16787 21755 array.splice() with 1 element not working 21756 21757 Test: fast/js/array-splice.html 21758 21759 * kjs/array_object.cpp: 21760 (KJS::ArrayProtoFuncSplice::callAsFunction): Implement this Mozilla extension, and fix 21761 some other edge cases. 21762 21763 2008-01-13 Steve Falkenburg <sfalken (a] apple.com> 21764 21765 Share common files across projects. 21766 21767 Unify vsprops files 21768 Debug: common.vsprops, debug.vsprops 21769 Debug_Internal: common.vsprops, debug.vsprops, debug_internal.vsprops 21770 Release: common.vsprops, release.vsprops 21771 21772 Shared properties can go into common.vsprops, shared debug settings can go into debug.vsprops. 21773 debug_internal.vsprops will be mostly empty except for file path prefix modifiers. 21774 21775 Reviewed by Adam Roben. 21776 21777 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 21778 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 21779 * JavaScriptCore.vcproj/debug.vsprops: Removed. 21780 * JavaScriptCore.vcproj/debug_internal.vsprops: Removed. 21781 * JavaScriptCore.vcproj/release.vsprops: Removed. 21782 * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: 21783 21784 2008-01-13 Marius Bugge Monsen <mbm (a] trolltech.com> 21785 21786 Contributions and review by Adriaan de Groot, 21787 Simon Hausmann, Eric Seidel, and Darin Adler. 21788 21789 - http://bugs.webkit.org/show_bug.cgi?id=16590 21790 Compilation fixes for Solaris. 21791 21792 * kjs/DateMath.h: 21793 (KJS::GregorianDateTime::GregorianDateTime): Use the WIN_OS code path 21794 for SOLARIS too, presumably because Solaris also lacks the tm_gtoff and tm_zone 21795 fields. 21796 (KJS::GregorianDateTime::operator tm): Ditto. 21797 21798 * kjs/collector.cpp: 21799 (KJS::currentThreadStackBase): Use thr_stksegment on Solaris. 21800 21801 * wtf/MathExtras.h: 21802 (isfinite): Implement for Solaris. 21803 (isinf): Ditto. 21804 (signbit): Ditto. But this one is wrong, so I added a FIXME. 21805 21806 * wtf/Platform.h: Define PLATFORM(SOLARIS) when "sun" or "__sun" is defined. 21807 21808 2008-01-13 Michael Goddard <michael.goddard (a] trolltech.com> 21809 21810 Reviewed by Anders Carlsson. 21811 21812 Add binding language type to Instance. 21813 Allows runtime determination of the type of an 21814 Instance, to allow safe casting. Doesn't actually 21815 add any safe casting yet, though. 21816 21817 Add a helper function to get an Instance from a JSObject*. 21818 Given an object and the expected binding language, see if 21819 the JSObject actually wraps an Instance of the given type 21820 and return it. Otherwise return 0. 21821 21822 Move RuntimeObjectImp creations into Instance. 21823 Make the ctor protected, and Instance a friend class, so 21824 that all creation of RuntimeObjectImps goes through 21825 one place. 21826 21827 Remove copy ctor/assignment operator for QtInstance. 21828 Instance itself is Noncopyable, so QtInstance doesn't 21829 need to have these. 21830 21831 Add caching for QtInstance and associated RuntimeObjectImps. 21832 Push any dealings with QtLanguage bindings into QtInstance, 21833 and cache them there, rather than in the Instance layer. Add 21834 a QtRuntimeObjectImp to help with caching. 21835 21836 * JavaScriptCore.exp: 21837 * bindings/c/c_instance.h: 21838 * bindings/jni/jni_instance.h: 21839 * bindings/objc/objc_instance.h: 21840 * bindings/qt/qt_instance.cpp: 21841 (KJS::Bindings::QtRuntimeObjectImp::QtRuntimeObjectImp): 21842 (KJS::Bindings::QtRuntimeObjectImp::~QtRuntimeObjectImp): 21843 (KJS::Bindings::QtRuntimeObjectImp::invalidate): 21844 (KJS::Bindings::QtRuntimeObjectImp::removeFromCache): 21845 (KJS::Bindings::QtInstance::QtInstance): 21846 (KJS::Bindings::QtInstance::~QtInstance): 21847 (KJS::Bindings::QtInstance::getQtInstance): 21848 (KJS::Bindings::QtInstance::getRuntimeObject): 21849 * bindings/qt/qt_instance.h: 21850 (KJS::Bindings::QtInstance::getBindingLanguage): 21851 * bindings/runtime.cpp: 21852 (KJS::Bindings::Instance::createBindingForLanguageInstance): 21853 (KJS::Bindings::Instance::createRuntimeObject): 21854 (KJS::Bindings::Instance::getInstance): 21855 * bindings/runtime.h: 21856 * bindings/runtime_object.h: 21857 (KJS::RuntimeObjectImp::getInternalInstance): 21858 21859 2008-01-12 Alp Toker <alp (a] atoker.com> 21860 21861 Reviewed by Mark Rowe. 21862 21863 Hide non-public symbols in GTK+/autotools release builds. 21864 21865 * GNUmakefile.am: 21866 21867 2008-01-12 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 21868 21869 Reviewed by Mark Rowe. 21870 21871 Fix http://bugs.webkit.org/show_bug.cgi?id=16852 21872 Fixes leaking of ActivationStackNode objects. 21873 21874 * kjs/JSGlobalObject.cpp: 21875 (KJS::JSGlobalObject::deleteActivationStack): 21876 (KJS::JSGlobalObject::~JSGlobalObject): 21877 (KJS::JSGlobalObject::init): 21878 (KJS::JSGlobalObject::reset): 21879 * kjs/JSGlobalObject.h: 21880 21881 2008-01-12 Darin Adler <darin (a] apple.com> 21882 21883 - try to fix Qt Windows build 21884 21885 * pcre/dftables: Remove reliance on the list form of Perl pipes. 21886 21887 2008-01-12 Darin Adler <darin (a] apple.com> 21888 21889 - try to fix Qt build 21890 21891 * kjs/function.cpp: Added include of scope_chain_mark.h. 21892 * kjs/scope_chain_mark.h: Added multiple-include guards. 21893 21894 2008-01-12 Mark Rowe <mrowe (a] apple.com> 21895 21896 Another Windows build fix. 21897 21898 * kjs/Activation.h: 21899 21900 2008-01-12 Mark Rowe <mrowe (a] apple.com> 21901 21902 Attempted Windows build fix. Use struct consistently when forward-declaring 21903 ActivationStackNode and StackActivation. 21904 21905 * kjs/Activation.h: 21906 * kjs/JSGlobalObject.h: 21907 21908 2008-01-12 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 21909 21910 Reviewed by Maciej. 21911 21912 Fixes a problem with the ActivationImp tear-off patch (r29425) where 21913 some of the calls to JSGlobalObject::tearOffActivation() were using 21914 the wrong test to determine whether it should leave a relic behind. 21915 21916 * kjs/function.cpp: 21917 (KJS::FunctionImp::argumentsGetter): 21918 (KJS::ActivationImp::getOwnPropertySlot): 21919 21920 2008-01-11 Geoffrey Garen <ggaren (a] apple.com> 21921 21922 Reviewed by Oliver Hunt. 21923 21924 Fixed <rdar://problem/5665251> REGRESSION (r28880-r28886): Global 21925 variable access (16644) 21926 21927 This bug was caused by var declarations shadowing built-in properties of 21928 the global object. 21929 21930 To match Firefox, we've decided that var declarations will never shadow 21931 built-in properties of the global object or its prototypes. We used to 21932 behave more like IE, which allows shadowing, but walking that line got 21933 us into trouble with websites that sent us down the Firefox codepath. 21934 21935 * kjs/JSVariableObject.h: 21936 (KJS::JSVariableObject::symbolTableGet): New code to support calling 21937 hasProperty before the variable object is fully initialized (so you 21938 can call it during initialization). 21939 21940 * kjs/nodes.cpp:. 21941 (KJS::ProgramNode::initializeSymbolTable): Always do a full hasProperty 21942 check when looking for duplicates, not getDirect, since it only checks 21943 the property map, and not hasOwnProperty, since it doesn't check 21944 prototypes. 21945 (KJS::EvalNode::processDeclarations): ditto 21946 21947 * kjs/property_slot.h: 21948 (KJS::PropertySlot::ungettableGetter): Best function name evar. 21949 21950 2008-01-11 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 21951 21952 Reviewed by Maciej. 21953 21954 Optimized ActivationImp allocation, so that activation records are now 21955 first allocated on an explicitly managed stack and only heap allocated 21956 when necessary. Roughly a 5% improvement on SunSpider, and a larger 21957 improvement on benchmarks that use more function calls. 21958 21959 * JavaScriptCore.xcodeproj/project.pbxproj: 21960 * kjs/Activation.h: Added. 21961 (KJS::ActivationImp::ActivationData::ActivationData): 21962 (KJS::ActivationImp::ActivationImp): 21963 (KJS::ActivationImp::classInfo): 21964 (KJS::ActivationImp::isActivationObject): 21965 (KJS::ActivationImp::isOnStack): 21966 (KJS::ActivationImp::d): 21967 (KJS::StackActivation::StackActivation): 21968 * kjs/ExecState.cpp: 21969 (KJS::ExecState::ExecState): 21970 (KJS::ExecState::~ExecState): 21971 * kjs/ExecState.h: 21972 (KJS::ExecState::replaceScopeChainTop): 21973 (KJS::ExecState::setActivationObject): 21974 (KJS::ExecState::setLocalStorage): 21975 * kjs/JSGlobalObject.cpp: 21976 (KJS::JSGlobalObject::reset): 21977 (KJS::JSGlobalObject::pushActivation): 21978 (KJS::JSGlobalObject::checkActivationCount): 21979 (KJS::JSGlobalObject::popActivationHelper): 21980 (KJS::JSGlobalObject::popActivation): 21981 (KJS::JSGlobalObject::tearOffActivation): 21982 * kjs/JSGlobalObject.h: 21983 * kjs/JSVariableObject.h: 21984 (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData): 21985 (KJS::JSVariableObject::JSVariableObject): 21986 * kjs/function.cpp: 21987 (KJS::FunctionImp::argumentsGetter): 21988 (KJS::ActivationImp::ActivationImp): 21989 (KJS::ActivationImp::~ActivationImp): 21990 (KJS::ActivationImp::init): 21991 (KJS::ActivationImp::getOwnPropertySlot): 21992 (KJS::ActivationImp::markHelper): 21993 (KJS::ActivationImp::mark): 21994 (KJS::ActivationImp::ActivationData::ActivationData): 21995 (KJS::GlobalFuncImp::callAsFunction): 21996 * kjs/function.h: 21997 * kjs/nodes.cpp: 21998 (KJS::PostIncResolveNode::evaluate): 21999 (KJS::PostDecResolveNode::evaluate): 22000 (KJS::PreIncResolveNode::evaluate): 22001 (KJS::PreDecResolveNode::evaluate): 22002 (KJS::ReadModifyResolveNode::evaluate): 22003 (KJS::AssignResolveNode::evaluate): 22004 (KJS::WithNode::execute): 22005 (KJS::TryNode::execute): 22006 (KJS::FunctionBodyNode::processDeclarations): 22007 (KJS::FuncExprNode::evaluate): 22008 * kjs/object.h: 22009 * kjs/scope_chain.h: 22010 (KJS::ScopeChain::replace): 22011 * kjs/scope_chain_mark.h: Added. 22012 (KJS::ScopeChain::mark): 22013 22014 2008-01-11 Simon Hausmann <hausmann (a] webkit.org> 22015 22016 Reviewed by Mark Rowe. 22017 22018 Fix the (clean) qmake build. For generating chartables.c we don't 22019 depend on a separate input source file anymore, the dftables perl 22020 script is enough. So use that instead as value for the .input 22021 variable, to ensure that qmake also generates a rule to call dftables. 22022 22023 * pcre/pcre.pri: 22024 22025 2008-01-10 Geoffrey Garen <ggaren (a] apple.com> 22026 22027 Reviewed by John Sullivan. 22028 22029 Fixed some world leak reports: 22030 * <rdar://problem/5669436> PLT complains about world leak of 1 JavaScript 22031 Interpreter after running cvs-base suite 22032 22033 * <rdar://problem/5669423> PLT complains about world leak if browser 22034 window is open when PLT starts 22035 22036 * kjs/collector.h: Added the ability to distinguish between global 22037 objects and GC-protected global objects, since we only consider the 22038 latter to be world leaks. 22039 * kjs/collector.cpp: 22040 22041 2008-01-11 Mark Rowe <mrowe (a] apple.com> 22042 22043 Silence qmake warning about ctgen lacking input. 22044 22045 Rubber-stamped by Alp Toker. 22046 22047 * pcre/pcre.pri: 22048 22049 2008-01-10 David Kilzer <ddkilzer (a] apple.com> 22050 22051 dftables should be rewritten as a script 22052 22053 <http://bugs.webkit.org/show_bug.cgi?id=16818> 22054 <rdar://problem/5681463> 22055 22056 Reviewed by Darin. 22057 22058 Rewrote the dftables utility in Perl. Attempted to switch all 22059 build systems to call the script directly instead of building 22060 a binary first. Only the Xcode build was able to be tested. 22061 22062 * DerivedSources.make: Added pcre directory to VPATH and changed 22063 to invoke dftables directly. 22064 * GNUmakefile.am: Removed build information and changed to invoke 22065 dftables directly. 22066 * JavaScriptCore.vcproj/JavaScriptCore.sln: Removed reference to 22067 dftables project. 22068 * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Ditto. 22069 * JavaScriptCore.vcproj/dftables: Removed. 22070 * JavaScriptCore.vcproj/dftables/dftables.vcproj: Removed. 22071 * JavaScriptCore.xcodeproj/project.pbxproj: Removed dftables target. 22072 * jscore.bkl: Removed dftables executable definition. 22073 * pcre/dftables: Copied from JavaScriptCore/pcre/dftables.cpp. 22074 * pcre/dftables.cpp: Removed. 22075 * pcre/dftables.pro: Removed. 22076 * pcre/pcre.pri: Removed references to dftables.cpp and changed to 22077 invoke dftables directly. 22078 22079 2008-01-10 Dan Bernstein <mitz (a] apple.com> 22080 22081 Reviewed by Darin Adler. 22082 22083 - fix http://bugs.webkit.org/show_bug.cgi?id=16782 22084 <rdar://problem/5675331> REGRESSION(r29266): Reproducible crash in fast/replaced/image-map.html 22085 22086 The crash resulted from a native object (DumpRenderTree's 22087 EventSender) causing its wrapper to be invalidated (by clicking a 22088 link that replaced the document in the window) and consequently 22089 deallocated. The fix is to use RefPtrs to protect the native object 22090 from deletion by self-invalidation. 22091 22092 * bindings/runtime_method.cpp: 22093 (RuntimeMethod::callAsFunction): 22094 * bindings/runtime_object.cpp: 22095 (RuntimeObjectImp::fallbackObjectGetter): 22096 (RuntimeObjectImp::fieldGetter): 22097 (RuntimeObjectImp::methodGetter): 22098 (RuntimeObjectImp::put): 22099 (RuntimeObjectImp::defaultValue): 22100 (RuntimeObjectImp::callAsFunction): 22101 22102 2008-01-07 Mark Rowe <mrowe (a] apple.com> 22103 22104 Reviewed by Maciej Stachowiak. 22105 22106 Turn testIsInteger assertions into compile-time asserts and move them into HashTraits.h 22107 where possible. 22108 22109 * kjs/testkjs.cpp: 22110 * wtf/HashTraits.h: 22111 22112 2008-01-07 Nikolas Zimmermann <zimmermann (a] kde.org> 22113 22114 Reviewed by Mark. 22115 22116 Enable SVG_FONTS by default. 22117 22118 * Configurations/JavaScriptCore.xcconfig: 22119 22120 2008-01-07 Darin Adler <darin (a] apple.com> 22121 22122 Rubber stamped by David Kilzer. 22123 22124 - get rid of empty fpconst.cpp 22125 22126 * GNUmakefile.am: Remove fpconst.cpp. 22127 * JavaScriptCore.pri: Ditto. 22128 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto. 22129 * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. 22130 * JavaScriptCoreSources.bkl: Ditto. 22131 22132 * kjs/fpconst.cpp: Removed. 22133 22134 2008-01-07 Darin Adler <darin (a] apple.com> 22135 22136 Reviewed by David Kilzer. 22137 22138 - fix alignment problem with NaN and Inf globals 22139 22140 * kjs/fpconst.cpp: Move the contents of this file from here back to 22141 value.cpp. The reason this was in a separate file is that the DARWIN 22142 version of this used a declaration of the globals with a different 22143 type to avoid creating "init routines". That's no longer necessary for 22144 DARWIN and was never necessary for the non-DARWIN code path. 22145 To make this patch easy to merge, I didn't actually delete this file 22146 yet. We'll do that in a separate changeset. 22147 22148 * kjs/value.cpp: If C99's NAN and INFINITY are present, then use them, 22149 othrewise use the union trick from fpconst.cpp. I think it would be 22150 better to eliminate KJS::NaN and KJS::Inf and just use NAN and INFINITY 22151 directly or std::numeric_limits<double>::quiet_nan() and 22152 std::numeric_limits<double>::infinity(). But when I tried that, it 22153 slowed down SunSpider. Someone else could do that cleanup if they 22154 could do it without slowing down the engine. 22155 22156 2008-01-07 Adam Roben <aroben (a] apple.com> 22157 22158 Windows build fix 22159 22160 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added 22161 JavaScript.h to the project. 22162 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: 22163 Copy JavaScript.h to WEBKITOUTPUTDIR. 22164 22165 2008-01-07 Timothy Hatcher <timothy (a] apple.com> 22166 22167 Reviewed by Darin. 22168 22169 Fix Mac build. 22170 22171 * API/JSNode.c: 22172 * API/JSNode.h: 22173 * API/JSNodeList.c: 22174 * API/JSNodeList.h: 22175 * API/JavaScript.h: 22176 * API/JavaScriptCore.h: 22177 * API/minidom.c: 22178 * JavaScriptCore.xcodeproj/project.pbxproj: 22179 22180 2008-01-07 Alp Toker <alp (a] atoker.com> 22181 22182 Reviewed by Darin. 22183 22184 http://bugs.webkit.org/show_bug.cgi?id=16029 22185 JavaScriptCore.h is not suitable for platforms other than Mac OS X 22186 22187 Introduce a new JavaScriptCore/JavaScript.h public API header. This 22188 should be used by all new portable code using the JavaScriptCore API. 22189 22190 JavaScriptCore/JavaScriptCore.h will remain for compatibility with 22191 existing applications that depend on it including JSStringRefCF.h 22192 which isn't portable. 22193 22194 Also add minidom to the GTK+/autotools build since we can now support 22195 it on all platforms. 22196 22197 * API/JSNode.h: 22198 * API/JSNodeList.h: 22199 * API/JavaScript.h: Added. 22200 * API/JavaScriptCore.h: 22201 * ForwardingHeaders/JavaScriptCore/JavaScript.h: Added. 22202 * GNUmakefile.am: 22203 * JavaScriptCore.xcodeproj/project.pbxproj: 22204 22205 2008-01-06 Eric Seidel <eric (a] webkit.org> 22206 22207 Reviewed by Sam. 22208 22209 Abstract all DateObject.set* functions in preparation for fixing: 22210 http://bugs.webkit.org/show_bug.cgi?id=16753 22211 22212 SunSpider had random changes here and there but was overall a wash. 22213 22214 * kjs/date_object.cpp: 22215 (KJS::fillStructuresUsingTimeArgs): 22216 (KJS::setNewValueFromTimeArgs): 22217 (KJS::setNewValueFromDateArgs): 22218 (KJS::DateProtoFuncSetMilliSeconds::callAsFunction): 22219 (KJS::DateProtoFuncSetUTCMilliseconds::callAsFunction): 22220 (KJS::DateProtoFuncSetSeconds::callAsFunction): 22221 (KJS::DateProtoFuncSetUTCSeconds::callAsFunction): 22222 (KJS::DateProtoFuncSetMinutes::callAsFunction): 22223 (KJS::DateProtoFuncSetUTCMinutes::callAsFunction): 22224 (KJS::DateProtoFuncSetHours::callAsFunction): 22225 (KJS::DateProtoFuncSetUTCHours::callAsFunction): 22226 (KJS::DateProtoFuncSetDate::callAsFunction): 22227 (KJS::DateProtoFuncSetUTCDate::callAsFunction): 22228 (KJS::DateProtoFuncSetMonth::callAsFunction): 22229 (KJS::DateProtoFuncSetUTCMonth::callAsFunction): 22230 (KJS::DateProtoFuncSetFullYear::callAsFunction): 22231 (KJS::DateProtoFuncSetUTCFullYear::callAsFunction): 22232 22233 2008-01-06 Nikolas Zimmermann <zimmermann (a] kde.org> 22234 22235 Reviewed by Dan. 22236 22237 Add new helper function isArabicChar - SVG Fonts support needs it. 22238 22239 * wtf/unicode/icu/UnicodeIcu.h: 22240 (WTF::Unicode::isArabicChar): 22241 * wtf/unicode/qt4/UnicodeQt4.h: 22242 (WTF::Unicode::isArabicChar): 22243 22244 2008-01-06 Alp Toker <alp (a] atoker.com> 22245 22246 Reviewed by Mark Rowe. 22247 22248 Use $(EXEEXT) to account for the .exe extension in the GTK+ Windows 22249 build. (This is already done correctly in DerivedSources.make.) Issue 22250 noticed by Mikkel when building in Cygwin. 22251 22252 Add a missing slash. This was a hack from the qmake build system that 22253 isn't necessary with autotools. 22254 22255 * GNUmakefile.am: 22256 22257 2008-01-05 Darin Adler <darin (a] apple.com> 22258 22259 * API/JSRetainPtr.h: One more file that needed the change below. 22260 22261 2008-01-05 Darin Adler <darin (a] apple.com> 22262 22263 * wtf/OwnPtr.h: OwnPtr needs the same fix as RefPtr below. 22264 22265 2008-01-05 Adam Roben <aroben (a] apple.com> 22266 22267 Build fix. 22268 22269 Reviewed by Maciej. 22270 22271 * wtf/RetainPtr.h: Use PtrType instead of T* because of the 22272 RemovePointer magic. 22273 22274 2008-01-05 Darin Adler <darin (a] apple.com> 22275 22276 Rubber stamped by Maciej Stachowiak. 22277 22278 - cut down own PIC branches by using a pointer-to-member-data instead of a 22279 pointer-to-member-function in WTF smart pointers 22280 22281 * wtf/OwnArrayPtr.h: 22282 * wtf/OwnPtr.h: 22283 * wtf/PassRefPtr.h: 22284 * wtf/RefPtr.h: 22285 * wtf/RetainPtr.h: 22286 Use a pointer to the m_ptr member instead of the get member. 22287 The GCC compiler generates better code for this idiom. 22288 22289 2008-01-05 Henry Mason <hmason (a] mac.com> 22290 22291 Reviewed by Maciej Stachowiak. 22292 22293 http://bugs.webkit.org/show_bug.cgi?id=16738 22294 Bug 16738: Collector block offset could be stored as an cell offset instead of a byte offset 22295 22296 Gives a 0.4% SunSpider boost and prettier code. 22297 22298 * kjs/collector.cpp: Switched to cell offsets from byte offsets 22299 (KJS::Collector::heapAllocate): 22300 (KJS::Collector::sweep): 22301 22302 2008-01-04 Mark Rowe <mrowe (a] apple.com> 22303 22304 Reviewed by Maciej Stachowiak. 22305 22306 Have the two malloc zones print useful diagnostics if their free method are unexpectedly invoked. 22307 Due to <rdar://problem/5671357> this can happen if an application attempts to free a pointer that 22308 was not allocated by any registered malloc zone on the system. 22309 22310 * kjs/CollectorHeapIntrospector.h: 22311 * wtf/FastMalloc.cpp: 22312 22313 2008-01-04 Alp Toker <alp (a] atoker.com> 22314 22315 GTK+ autotools build fix. Terminate empty rules. 22316 22317 * GNUmakefile.am: 22318 22319 2008-01-03 Simon Hausmann <hausmann (a] webkit.org> 22320 22321 Reviewed by Mark Rowe. 22322 22323 Fix compilation with gcc 4.3: limits.h is needed for INT_MAX. 22324 22325 * pcre/pcre_exec.cpp: 22326 22327 2008-01-03 Darin Adler <darin (a] apple.com> 22328 22329 * tests/mozilla/expected.html: The fix for bug 16696 also fixed a test 22330 case, ecma_3/RegExp/perlstress-002.js, so updated results to expect 22331 that test to succeed. 22332 22333 2008-01-02 Darin Adler <darin (a] apple.com> 22334 22335 Reviewed by Geoff. 22336 22337 - fix http://bugs.webkit.org/show_bug.cgi?id=16696 22338 JSCRE fails fails to match Acid3 regexp 22339 22340 Test: fast/regex/early-acid3-86.html 22341 22342 The problem was with the cutoff point between backreferences and octal 22343 escape sequences. We need to determine the cutoff point by counting the 22344 total number of capturing brackets, which requires an extra pass through 22345 the expression when compiling it. 22346 22347 * pcre/pcre_compile.cpp: 22348 (CompileData::CompileData): Added numCapturingBrackets. Removed some 22349 unused fields. 22350 (compileBranch): Use numCapturingBrackets when calling checkEscape. 22351 (calculateCompiledPatternLength): Use numCapturingBrackets when calling 22352 checkEscape, and also store the bracket count at the end of the compile. 22353 (jsRegExpCompile): Call calculateCompiledPatternLength twice -- once to 22354 count the number of brackets and then a second time to calculate the length. 22355 22356 2008-01-02 Darin Adler <darin (a] apple.com> 22357 22358 Reviewed by Geoff. 22359 22360 - fix http://bugs.webkit.org/show_bug.cgi?id=16696 22361 JSCRE fails fails to match Acid3 regexp 22362 22363 Test: fast/regex/early-acid3-86.html 22364 22365 The problem was with the cutoff point between backreferences and octal 22366 escape sequences. We need to determine the cutoff point by counting the 22367 total number of capturing brackets, which requires an extra pass through 22368 the expression when compiling it. 22369 22370 * pcre/pcre_compile.cpp: 22371 (CompileData::CompileData): Added numCapturingBrackets. Removed some 22372 unused fields. 22373 (compileBranch): Use numCapturingBrackets when calling checkEscape. 22374 (calculateCompiledPatternLength): Use numCapturingBrackets when calling 22375 checkEscape, and also store the bracket count at the end of the compile. 22376 (jsRegExpCompile): Call calculateCompiledPatternLength twice -- once to 22377 count the number of brackets and then a second time to calculate the length. 22378 22379 2008-01-02 David Kilzer <ddkilzer (a] webkit.org> 22380 22381 Reviewed and landed by Darin. 22382 22383 * kjs/nodes.cpp: 22384 (KJS::DoWhileNode::execute): Added a missing return. 22385 22386 2008-01-02 Darin Adler <darin (a] apple.com> 22387 22388 - try to fix Qt build 22389 22390 * wtf/unicode/qt4/UnicodeQt4.h: 22391 (WTF::Unicode::foldCase): Add some missing const. 22392 22393 2008-01-02 Alice Liu <alice.liu (a] apple.com> 22394 22395 Reviewed by Sam Weinig. 22396 22397 need to export ASCIICType.h for use in DRT 22398 22399 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 22400 * wtf/ASCIICType.h: 22401 (WTF::isASCIIUpper): 22402 22403 2008-01-02 Sam Weinig <sam (a] webkit.org> 22404 22405 Reviewed by Beth Dakin. 22406 22407 Cleanup error_object.h/cpp. 22408 22409 * kjs/JSGlobalObject.cpp: 22410 (KJS::JSGlobalObject::reset): 22411 * kjs/error_object.cpp: 22412 (KJS::ErrorInstance::ErrorInstance): 22413 (KJS::ErrorPrototype::ErrorPrototype): 22414 (KJS::ErrorProtoFuncToString::ErrorProtoFuncToString): 22415 (KJS::ErrorProtoFuncToString::callAsFunction): 22416 (KJS::ErrorObjectImp::ErrorObjectImp): 22417 (KJS::ErrorObjectImp::implementsConstruct): 22418 (KJS::ErrorObjectImp::construct): 22419 (KJS::ErrorObjectImp::callAsFunction): 22420 (KJS::NativeErrorPrototype::NativeErrorPrototype): 22421 (KJS::NativeErrorImp::NativeErrorImp): 22422 (KJS::NativeErrorImp::implementsConstruct): 22423 (KJS::NativeErrorImp::construct): 22424 (KJS::NativeErrorImp::callAsFunction): 22425 (KJS::NativeErrorImp::mark): 22426 * kjs/error_object.h: 22427 (KJS::ErrorInstance::classInfo): 22428 (KJS::NativeErrorImp::classInfo): 22429 22430 2008-01-02 Mark Rowe <mrowe (a] apple.com> 22431 22432 Rubber-stamped by Alp Toker. 22433 22434 * GNUmakefile.am: Add missing dependency on grammar.y. 22435 22436 2008-01-01 Darin Adler <darin (a] apple.com> 22437 22438 Reviewed by Eric. 22439 22440 - fix for http://bugs.webkit.org/show_bug.cgi?id=16695 22441 JSC allows non-identifier codepoints in identifiers (affects Acid3) 22442 22443 Test: fast/js/kde/parse.html 22444 22445 * kjs/lexer.cpp: 22446 (KJS::Lexer::lex): Added additional states to distinguish Unicode escapes at the 22447 start of identifiers from ones inside identifiers. Rejected characters that don't pass 22448 the isIdentStart and isIdentPart tests. 22449 (KJS::Lexer::convertUnicode): Removed incorrect FIXME comment. 22450 22451 * kjs/lexer.h: Added new states to distinguish \u escapes at the start of identifiers 22452 from \u escapes inside identifiers. 22453 22454 2008-01-01 Darin Adler <darin (a] apple.com> 22455 22456 - rolled scope chain optimization out; it was breaking the world 22457 22458 2008-01-01 Darin Adler <darin (a] apple.com> 22459 22460 Reviewed by Geoff. 22461 22462 - http://bugs.webkit.org/show_bug.cgi?id=16685 22463 eliminate List::empty() to cut down on PIC branches 22464 22465 Also included one other speed-up -- remove the call to reserveCapacity from 22466 FunctionBodyNode::processDeclarations in all but the most unusual cases. 22467 22468 Together these make SunSpider 1.016x as fast. 22469 22470 * JavaScriptCore.exp: Updated. 22471 * kjs/ExecState.cpp: 22472 (KJS::globalEmptyList): Added. Called only when creating global ExecState 22473 instances. 22474 (KJS::ExecState::ExecState): Broke constructor up into three separate functions, 22475 for the three separate node types. Also went through each of the three and 22476 streamlined as much as possible, removing dead code. This prevents us from having 22477 to access the global in the function body version of the constructor. 22478 22479 * kjs/ExecState.h: Added emptyList(). Replaced the constructor with a set of 22480 three that are specific to the different node types that can create new execution 22481 state objects. 22482 22483 * kjs/array_object.cpp: 22484 (KJS::ArrayProtoFuncToLocaleString::callAsFunction): Use exec->emptyList() instead 22485 of List::empty(). 22486 (KJS::ArrayProtoFuncConcat::callAsFunction): Ditto. 22487 (KJS::ArrayProtoFuncSlice::callAsFunction): Ditto. 22488 (KJS::ArrayProtoFuncSplice::callAsFunction): Ditto. 22489 (KJS::ArrayProtoFuncFilter::callAsFunction): Ditto. 22490 * kjs/function.cpp: 22491 (KJS::FunctionImp::callAsFunction): Updated to call new ExecState constructor. 22492 (KJS::GlobalFuncImp::callAsFunction): Ditto (for eval). 22493 * kjs/function_object.cpp: 22494 (FunctionObjectImp::construct): Use exec->emptyList() instead of List::empty(). 22495 22496 * kjs/list.cpp: Removed List::empty. 22497 * kjs/list.h: Ditto. 22498 22499 * kjs/nodes.cpp: 22500 (KJS::ElementNode::evaluate): Use exec->emptyList() instead of List::empty(). 22501 (KJS::ArrayNode::evaluate): Ditto. 22502 (KJS::ObjectLiteralNode::evaluate): Ditto. 22503 (KJS::PropertyListNode::evaluate): Ditto. 22504 (KJS::FunctionBodyNode::processDeclarations): Another speed-up. Check the capacity 22505 before calling reserveCapacity, because it doesn't get inlined the local storage 22506 vector is almost always big enough -- saving the function call overhead is a big 22507 deal. 22508 (KJS::FuncDeclNode::makeFunction): Use exec->emptyList() instead of List::empty(). 22509 (KJS::FuncExprNode::evaluate): Ditto. 22510 * kjs/object.cpp: 22511 (KJS::tryGetAndCallProperty): Ditto. 22512 * kjs/property_slot.cpp: 22513 (KJS::PropertySlot::functionGetter): Ditto. 22514 * kjs/string_object.cpp: 22515 (KJS::StringProtoFuncSplit::callAsFunction): Ditto. 22516 22517 2008-01-01 Darin Adler <darin (a] apple.com> 22518 22519 Reviewed by Geoff. 22520 22521 - fix http://bugs.webkit.org/show_bug.cgi?id=16648 22522 REGRESSION (r28165): Yuku.com navigation prints "jsRegExpExecute failed with result -2" 22523 <rdar://problem/5646486> REGRESSION (r28165): Layout test fast/regex/test1 fails intermittently 22524 22525 Fixes 34 failing test cases in the fast/regex/test1.html test. 22526 22527 Restored the stack which prevents infinite loops for brackets that match the empty 22528 string; it had been removed as an optimization. 22529 22530 Unfortunately, restoring this stack causes the regular expression test in SunSpider 22531 to be 1.095x as slow and the overall test to be 1.004x as slow. Maybe we can find 22532 a correct optimization to restore the speed! 22533 22534 It's possible the original change was on the right track but just off by one. 22535 22536 * pcre/pcre_exec.cpp: Add back eptrblock, but name it BracketChainNode. 22537 (MatchStack::pushNewFrame): Add back the logic needed here. 22538 (startNewGroup): Ditto. 22539 (match): Ditto. 22540 22541 2008-01-01 Darin Adler <darin (a] apple.com> 22542 22543 Reviewed by Geoff. 22544 22545 - http://bugs.webkit.org/show_bug.cgi?id=16683 22546 speed up function calls by making ScopeChain::push cheaper 22547 22548 This gives a 1.019x speedup on SunSpider. 22549 22550 After doing this, I realized this probably will be obsolete when the optimization 22551 to avoid creating an activation object is done. When we do that one we should check 22552 if rolling this out will speed things up, since this does add overhead at the time 22553 you copy the scope chain. 22554 22555 * kjs/object.h: Removed the ScopeChain::release function. It was 22556 marked inline, and called in exactly one place, so moved it there. 22557 No idea why it was in this header file! 22558 22559 * kjs/scope_chain.cpp: Removed the overload of the ScopeChain::push 22560 function that takes another ScopeChain. It was unused. I think we used 22561 it over in WebCore at one point, but not any more. 22562 22563 * kjs/scope_chain.h: Changed ScopeChainNode into a struct rather than 22564 a class, got rid of its constructor so we can have one that's uninitialized, 22565 and moved the refCount into a derived struct, ScopeChainHeapNode. Made _node 22566 mutable so it can be changed in the moveToHeap function. Changed the copy 22567 constructor and assignment operator to call moveToHeap, since the top node 22568 can't be shared when it's embedded in another ScopeChain object. Updated 22569 functions as needed to handle the case where the first object isn't on the 22570 heap or to add casts for cases where it's guaranteed to be. Changed the push 22571 function to always put the new node into the ScopeChain object; it will get 22572 put onto the heap when needed later. 22573 22574 2008-01-01 Geoffrey Garen <ggaren (a] apple.com> 22575 22576 Reviewed by Darin Adler. 22577 22578 Fixed slight logic error in reserveCapacity, where we would reallocate 22579 the storage buffer unnecessarily. 22580 22581 * wtf/Vector.h: 22582 (WTF::::reserveCapacity): No need to grow the buffer if newCapacity is 22583 equal to capacity(). 22584 22585 2008-01-01 Darin Adler <darin (a] apple.com> 22586 22587 Reviewed by Oliver. 22588 22589 - http://bugs.webkit.org/show_bug.cgi?id=16684 22590 eliminate debugger overhead from function body execution 22591 22592 Speeds SunSpider up 1.003x. That's a small amount, but measurable. 22593 22594 * JavaScriptCore.exp: Updated. 22595 * kjs/Parser.h: 22596 (KJS::Parser::parse): Create the node with a static member function named create() instead 22597 of using new explicitly. 22598 22599 * kjs/grammar.y: Changed calls to new FunctionBodyNode to use FunctionBodyNode::create(). 22600 22601 * kjs/nodes.cpp: 22602 (KJS::ProgramNode::create): Added. Calls new. 22603 (KJS::EvalNode::create): Ditto. 22604 (KJS::FunctionBodyNode::create): Ditto, but creates FunctionBodyNodeWithDebuggerHooks 22605 when a debugger is present. 22606 (KJS::FunctionBodyNode::execute): Removed debugger hooks. 22607 (KJS::FunctionBodyNodeWithDebuggerHooks::FunctionBodyNodeWithDebuggerHooks): Added. 22608 (KJS::FunctionBodyNodeWithDebuggerHooks::execute): Calls the debugger, then the code, 22609 then the debugger again. 22610 22611 * kjs/nodes.h: Added create functions, made the constructors private and protected. 22612 22613 2007-12-30 Eric Seidel <eric (a] webkit.org> 22614 22615 Reviewed by Sam. 22616 22617 More small cleanup to array_object.cpp 22618 22619 * kjs/array_object.cpp: 22620 (KJS::ArrayProtoFuncToString::callAsFunction): 22621 (KJS::ArrayProtoFuncToLocaleString::callAsFunction): 22622 (KJS::ArrayProtoFuncJoin::callAsFunction): 22623 (KJS::ArrayProtoFuncConcat::callAsFunction): 22624 (KJS::ArrayProtoFuncReverse::callAsFunction): 22625 (KJS::ArrayProtoFuncShift::callAsFunction): 22626 (KJS::ArrayProtoFuncSlice::callAsFunction): 22627 (KJS::ArrayProtoFuncSort::callAsFunction): 22628 (KJS::ArrayProtoFuncSplice::callAsFunction): 22629 (KJS::ArrayProtoFuncUnShift::callAsFunction): 22630 (KJS::ArrayProtoFuncFilter::callAsFunction): 22631 (KJS::ArrayProtoFuncMap::callAsFunction): 22632 (KJS::ArrayProtoFuncEvery::callAsFunction): 22633 22634 2007-12-30 Eric Seidel <eric (a] webkit.org> 22635 22636 Reviewed by Sam. 22637 22638 Apply wkstyle to array_object.cpp 22639 22640 * kjs/array_object.cpp: 22641 (KJS::ArrayPrototype::ArrayPrototype): 22642 (KJS::ArrayPrototype::getOwnPropertySlot): 22643 (KJS::ArrayProtoFuncConcat::callAsFunction): 22644 (KJS::ArrayProtoFuncPop::callAsFunction): 22645 (KJS::ArrayProtoFuncReverse::callAsFunction): 22646 (KJS::ArrayProtoFuncShift::callAsFunction): 22647 (KJS::ArrayProtoFuncSlice::callAsFunction): 22648 (KJS::ArrayProtoFuncSort::callAsFunction): 22649 (KJS::ArrayProtoFuncSplice::callAsFunction): 22650 (KJS::ArrayProtoFuncUnShift::callAsFunction): 22651 (KJS::ArrayProtoFuncFilter::callAsFunction): 22652 (KJS::ArrayProtoFuncMap::callAsFunction): 22653 (KJS::ArrayProtoFuncEvery::callAsFunction): 22654 (KJS::ArrayProtoFuncLastIndexOf::callAsFunction): 22655 (KJS::ArrayObjectImp::ArrayObjectImp): 22656 (KJS::ArrayObjectImp::implementsConstruct): 22657 (KJS::ArrayObjectImp::construct): 22658 (KJS::ArrayObjectImp::callAsFunction): 22659 22660 2007-12-30 Eric Seidel <eric (a] webkit.org> 22661 22662 Reviewed by Sam. 22663 22664 Remove maxInt/minInt, replacing with std:max/min<int>() 22665 22666 * kjs/array_object.cpp: 22667 (KJS::ArrayProtoFuncSplice::callAsFunction): 22668 * kjs/operations.cpp: 22669 * kjs/operations.h: 22670 22671 2007-12-30 Eric Seidel <eric (a] webkit.org> 22672 22673 Reviewed by Sam. 22674 22675 Update Number.toString to properly throw exceptions. 22676 Cleanup code in Number.toString implementation. 22677 22678 * kjs/number_object.cpp: 22679 (KJS::numberToString): 22680 * kjs/object.cpp: 22681 (KJS::Error::create): Remove bogus debug lines. 22682 22683 2007-12-28 Eric Seidel <eric (a] webkit.org> 22684 22685 Reviewed by Oliver. 22686 22687 ASSERT when debugging via Drosera due to missed var lookup optimization. 22688 http://bugs.webkit.org/show_bug.cgi?id=16634 22689 22690 No test case possible. 22691 22692 * kjs/nodes.cpp: 22693 (KJS::BreakpointCheckStatement::optimizeVariableAccess): 22694 * kjs/nodes.h: 22695 22696 2007-12-28 Eric Seidel <eric (a] webkit.org> 22697 22698 Reviewed by Oliver. 22699 22700 Fix (-0).toFixed() and re-factor a little 22701 Fix (-0).toExponential() and printing of trailing 0s in toExponential 22702 Fix toPrecision(nan) handling 22703 http://bugs.webkit.org/show_bug.cgi?id=16640 22704 22705 * kjs/number_object.cpp: 22706 (KJS::numberToFixed): 22707 (KJS::fractionalPartToString): 22708 (KJS::numberToExponential): 22709 (KJS::numberToPrecision): 22710 22711 2007-12-28 Eric Seidel <eric (a] webkit.org> 22712 22713 Reviewed by Sam. 22714 22715 More changes to make number code readable 22716 22717 * kjs/number_object.cpp: 22718 (KJS::integer_part_noexp): 22719 (KJS::numberToFixed): 22720 (KJS::numberToExponential): 22721 22722 2007-12-28 Eric Seidel <eric (a] webkit.org> 22723 22724 Reviewed by Sam. 22725 22726 More small cleanups to toPrecision 22727 22728 * kjs/number_object.cpp: 22729 (KJS::numberToPrecision): 22730 22731 2007-12-28 Eric Seidel <eric (a] webkit.org> 22732 22733 Reviewed by Sam. 22734 22735 More small attempts to make number code readable 22736 22737 * kjs/number_object.cpp: 22738 (KJS::exponentialPartToString): 22739 (KJS::numberToExponential): 22740 (KJS::numberToPrecision): 22741 22742 2007-12-28 Eric Seidel <eric (a] webkit.org> 22743 22744 Reviewed by Sam. 22745 22746 Break out callAsFunction implementations into static functions 22747 22748 * kjs/number_object.cpp: 22749 (KJS::numberToString): 22750 (KJS::numberToFixed): 22751 (KJS::numberToExponential): 22752 (KJS::numberToPrecision): 22753 (KJS::NumberProtoFunc::callAsFunction): 22754 22755 2007-12-28 Eric Seidel <eric (a] webkit.org> 22756 22757 Reviewed by Sam. 22758 22759 Apply wkstyle/astyle and fix placement of * 22760 22761 * kjs/number_object.cpp: 22762 (KJS::NumberInstance::NumberInstance): 22763 (KJS::NumberPrototype::NumberPrototype): 22764 (KJS::NumberProtoFunc::NumberProtoFunc): 22765 (KJS::integer_part_noexp): 22766 (KJS::intPow10): 22767 (KJS::NumberProtoFunc::callAsFunction): 22768 (KJS::NumberObjectImp::NumberObjectImp): 22769 (KJS::NumberObjectImp::getOwnPropertySlot): 22770 (KJS::NumberObjectImp::getValueProperty): 22771 (KJS::NumberObjectImp::implementsConstruct): 22772 (KJS::NumberObjectImp::construct): 22773 (KJS::NumberObjectImp::callAsFunction): 22774 * kjs/object.cpp: 22775 (KJS::JSObject::put): 22776 22777 2007-12-27 Eric Seidel <eric (a] webkit.org> 22778 22779 Reviewed by Sam. 22780 22781 ASSERT in JavaScriptCore while viewing WICD test case 22782 http://bugs.webkit.org/show_bug.cgi?id=16626 22783 22784 * kjs/nodes.cpp: 22785 (KJS::ForInNode::execute): move KJS_CHECK_EXCEPTION to proper place 22786 22787 2007-12-26 Jan Michael Alonzo <jmalonzo (a] unpluggable.com> 22788 22789 Reviewed by Alp Toker. 22790 22791 http://bugs.webkit.org/show_bug.cgi?id=16390 22792 Use autotools or GNU make as the build system for the GTK port 22793 22794 * GNUmakefile.am: Added. 22795 22796 2007-12-25 Maciej Stachowiak <mjs (a] apple.com> 22797 22798 Reviewed by Oliver. 22799 22800 - Remove unnecessary redundant check from property setting 22801 http://bugs.webkit.org/show_bug.cgi?id=16602 22802 22803 1.3% speedup on SunSpider. 22804 22805 * kjs/object.cpp: 22806 (KJS::JSObject::put): Don't do canPut check when not needed; let 22807 the PropertyMap handle it. 22808 (KJS::JSObject::canPut): Don't check the static property 22809 table. lookupPut does that already. 22810 22811 2007-12-24 Alp Toker <alp (a] atoker.com> 22812 22813 Fix builds that don't use AllInOneFile.cpp following breakage 22814 introduced in r28973. 22815 22816 * kjs/grammar.y: 22817 22818 2007-12-24 Maciej Stachowiak <mjs (a] apple.com> 22819 22820 Reviewed by Eric. 22821 22822 - Optimize variable declarations 22823 http://bugs.webkit.org/show_bug.cgi?id=16585 22824 22825 3.5% speedup on SunSpider. 22826 22827 var statements now result in either assignments or empty statements. 22828 22829 This allows a couple of optimization opportunities: 22830 - No need to branch at runtime to check if there is an initializer 22831 - EmptyStatementNodes can be removed entirely (also done in this patch) 22832 - Assignment expressions get properly optimized for local variables 22833 22834 This patch also includes some code cleanup: 22835 - Most of the old VarStatement/VarDecl logic is now only used for const declarations, 22836 thus it is renamed appropriately 22837 - AssignExprNode is gone 22838 22839 * JavaScriptCore.exp: 22840 * kjs/NodeInfo.h: 22841 * kjs/grammar.y: 22842 * kjs/nodes.cpp: 22843 (KJS::SourceElements::append): 22844 (KJS::ConstDeclNode::ConstDeclNode): 22845 (KJS::ConstDeclNode::optimizeVariableAccess): 22846 (KJS::ConstDeclNode::handleSlowCase): 22847 (KJS::ConstDeclNode::evaluateSingle): 22848 (KJS::ConstDeclNode::evaluate): 22849 (KJS::ConstStatementNode::optimizeVariableAccess): 22850 (KJS::ConstStatementNode::execute): 22851 (KJS::VarStatementNode::optimizeVariableAccess): 22852 (KJS::VarStatementNode::execute): 22853 (KJS::ForInNode::ForInNode): 22854 (KJS::ForInNode::optimizeVariableAccess): 22855 (KJS::ForInNode::execute): 22856 (KJS::FunctionBodyNode::initializeSymbolTable): 22857 (KJS::ProgramNode::initializeSymbolTable): 22858 (KJS::FunctionBodyNode::processDeclarations): 22859 (KJS::ProgramNode::processDeclarations): 22860 (KJS::EvalNode::processDeclarations): 22861 * kjs/nodes.h: 22862 (KJS::DeclarationStacks::): 22863 (KJS::StatementNode::): 22864 (KJS::ConstDeclNode::): 22865 (KJS::ConstStatementNode::): 22866 (KJS::EmptyStatementNode::): 22867 (KJS::VarStatementNode::): 22868 (KJS::ForNode::): 22869 * kjs/nodes2string.cpp: 22870 (KJS::ConstDeclNode::streamTo): 22871 (KJS::ConstStatementNode::streamTo): 22872 (KJS::ScopeNode::streamTo): 22873 (KJS::VarStatementNode::streamTo): 22874 (KJS::ForNode::streamTo): 22875 (KJS::ForInNode::streamTo): 22876 22877 2007-12-21 Mark Rowe <mrowe (a] apple.com> 22878 22879 Reviewed by Oliver Hunt. 22880 22881 * JavaScriptCore.exp: Remove unused symbol to prevent a weak external symbol 22882 being generated in JavaScriptCore.framework. 22883 22884 2007-12-21 Darin Adler <darin (a] apple.com> 22885 22886 Requested by Maciej. 22887 22888 * kjs/nodes.h: Use the new NEVER_INLINE here and eliminate the old 22889 KJS_NO_INLINE. We don't want to have two, and we figured it was better 22890 to keep the one that's in WTF. 22891 22892 2007-12-21 Darin Adler <darin (a] apple.com> 22893 22894 Reviewed by Eric. 22895 22896 - http://bugs.webkit.org/show_bug.cgi?id=16561 22897 remove debugger overhead from non-debugged JavaScript execution 22898 22899 1.022x as fast on SunSpider. 22900 22901 * JavaScriptCore.exp: Updated. 22902 22903 * kjs/NodeInfo.h: Renamed SourceElementsStub to SourceElements, 22904 since that more accurately describes the role of this object, which 22905 is a reference-counted wrapper for a Vector. 22906 22907 * kjs/Parser.cpp: 22908 (KJS::Parser::didFinishParsing): Changed parameter type to SourceElements, 22909 and use plain assignment instead of set. 22910 * kjs/Parser.h: Changed parameter type of didFinishParsing to a 22911 SourceElements. Also changed m_sourceElements; we now use a RefPtr instead 22912 of an OwnPtr as well. 22913 22914 * kjs/grammar.y: Got rid of all the calls to release() on SourceElements. 22915 That's now handed inside the constructors for various node types, since we now 22916 use vector swapping instead. 22917 22918 * kjs/nodes.cpp: 22919 (KJS::Node::rethrowException): Added NEVER_INLINE, because this was getting inlined 22920 and we want exception handling out of the normal code flow. 22921 (KJS::SourceElements::append): Moved here from the header. This now handles 22922 creating a BreakpointCheckStatement for each statement in the debugger case. 22923 That way we can get breakpoint handling without having it in every execute function. 22924 (KJS::BreakpointCheckStatement::BreakpointCheckStatement): Added. 22925 (KJS::BreakpointCheckStatement::execute): Added. Contains the code that was formerly 22926 in the StatementNode::hitStatement function and the KJS_BREAKPOINT macro. 22927 (KJS::BreakpointCheckStatement::streamTo): Added. 22928 (KJS::ArgumentListNode::evaluateList): Use KJS_CHECKEXCEPTIONVOID since the return 22929 type is void. 22930 (KJS::VarStatementNode::execute): Removed KJS_BREAKPOINT. 22931 (KJS::BlockNode::BlockNode): Changed parameter type to SourceElements. 22932 Changed code to use release since the class now contains a vector rather than 22933 a vector point. 22934 (KJS::BlockNode::optimizeVariableAccess): Updated since member is now a vector 22935 rather than a vector pointer. 22936 (KJS::BlockNode::execute): Ditto. 22937 (KJS::ExprStatementNode::execute): Removed KJS_BREAKPOINT. 22938 (KJS::IfNode::execute): Ditto. 22939 (KJS::IfElseNode::execute): Ditto. 22940 (KJS::DoWhileNode::execute): Ditto. 22941 (KJS::WhileNode::execute): Ditto. 22942 (KJS::ContinueNode::execute): Ditto. 22943 (KJS::BreakNode::execute): Ditto. 22944 (KJS::ReturnNode::execute): Ditto. 22945 (KJS::WithNode::execute): Ditto. 22946 (KJS::CaseClauseNode::optimizeVariableAccess): Updated since member is now a vector 22947 rather than a vector pointer. 22948 (KJS::CaseClauseNode::executeStatements): Ditto. 22949 (KJS::SwitchNode::execute): Removed KJS_BREAKPOINT. 22950 (KJS::ThrowNode::execute): Ditto. 22951 (KJS::TryNode::execute): Ditto. 22952 (KJS::ScopeNode::ScopeNode): Changed parameter type to SourceElements. 22953 (KJS::ProgramNode::ProgramNode): Ditto. 22954 (KJS::EvalNode::EvalNode): Ditto. 22955 (KJS::FunctionBodyNode::FunctionBodyNode): Ditto. 22956 (KJS::ScopeNode::optimizeVariableAccess): Updated since member is now a vector 22957 rather than a vector pointer. 22958 22959 * kjs/nodes.h: Removed hitStatement. Renamed SourceElements to StatementVector. 22960 Renamed SourceElementsStub to SourceElements and made it derive from 22961 ParserRefCounted rather than from Node, hold a vector rather than a pointer to 22962 a vector, and changed the release function to swap with another vector rather 22963 than the pointer idiom. Updated BlockNode and CaseClauseNode to hold actual 22964 vectors instead of pointers to vectors. Added BreakpointCheckStatement. 22965 22966 * kjs/nodes2string.cpp: 22967 (KJS::statementListStreamTo): Changed to work on a vector instead of a pointer 22968 to a vector. 22969 (KJS::BlockNode::streamTo): Ditto. 22970 (KJS::CaseClauseNode::streamTo): Ditto. 22971 22972 * wtf/AlwaysInline.h: Added NEVER_INLINE. 22973 * wtf/PassRefPtr.h: Tweaked formatting. Added clear() function that matches the 22974 ones in OwnPtr and auto_ptr. 22975 * wtf/RefPtr.h: Ditto. 22976 22977 2007-12-21 Darin Adler <darin (a] apple.com> 22978 22979 - fix broken regression tests 22980 22981 The broken tests were fast/js/do-while-expression-value.html and 22982 fast/js/while-expression-value.html. 22983 22984 * kjs/nodes.cpp: Check in the correct version of this file. I had accidentally landed 22985 an old version of my patch for bug 16471. 22986 (KJS::statementListExecute): The logic here was backwards. Have to set the value 22987 even for non-normal execution results. 22988 22989 2007-12-20 Alexey Proskuryakov <ap (a] webkit.org> 22990 22991 Windows build fix 22992 22993 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Copy npruntime_internal.h 22994 to WebKitBuild. 22995 22996 2007-12-20 Eric Seidel <eric (a] webkit.org> 22997 22998 Reviewed by mjs. 22999 23000 Split IfNode into IfNode and IfElseNode for speedup. 23001 http://bugs.webkit.org/show_bug.cgi?id=16470 23002 23003 SunSpider claims this is 1.003x as fast as before. 23004 (This required running with --runs 15 to get consistent enough results to tell!) 23005 23006 * kjs/grammar.y: 23007 * kjs/nodes.cpp: 23008 (KJS::IfNode::optimizeVariableAccess): 23009 (KJS::IfNode::execute): 23010 (KJS::IfNode::getDeclarations): 23011 (KJS::IfElseNode::optimizeVariableAccess): 23012 (KJS::IfElseNode::execute): 23013 (KJS::IfElseNode::getDeclarations): 23014 * kjs/nodes.h: 23015 (KJS::IfNode::): 23016 (KJS::IfElseNode::): 23017 * kjs/nodes2string.cpp: 23018 (KJS::IfNode::streamTo): 23019 (KJS::IfElseNode::streamTo): 23020 23021 2007-12-20 Darin Adler <darin (a] apple.com> 23022 23023 Reviewed by Sam. 23024 23025 * wtf/OwnPtr.h: 23026 (WTF::operator==): Added. 23027 (WTF::operator!=): Added. 23028 23029 2007-12-20 Geoffrey Garen <ggaren (a] apple.com> 23030 23031 Reviewed by Oliver Hunt. 23032 23033 AST optimization: Avoid NULL-checking ForNode's child nodes. 23034 23035 0.6% speedup on SunSpider. 23036 23037 This is a proof of concept patch that demonstrates how to optimize 23038 grammar productions with optional components, like 23039 23040 for (optional; optional; optional) { 23041 ... 23042 } 23043 23044 The parser emits NULL for an optional component that is not present. 23045 23046 Instead of checking for a NULL child at execution time, a node that 23047 expects an optional component to be present more often than not checks 23048 for a NULL child at construction time, and substitutes a viable 23049 alternative node in its place. 23050 23051 (We'd like the parser to start emitting NULL a lot more once we teach 23052 it to emit NULL for certain no-op productions like EmptyStatement and 23053 VariableStatement, so, as a foundation, it's important for nodes with 23054 NULL optional components to be fast.) 23055 23056 * kjs/Parser.cpp: 23057 (KJS::Parser::didFinishParsing): Check for NULL SourceElements. Also, 23058 moved didFinishParsing into the .cpp file because adding a branch while 23059 it was in the header file caused a substantial and inexplicable 23060 performance regression. (Did I mention that GCC is crazy?) 23061 23062 * kjs/grammar.y: 23063 23064 * kjs/nodes.cpp: 23065 (KJS::BlockNode::BlockNode): Check for NULL SourceElements. 23066 (KJS::ForNode::optimizeVariableAccess): No need to check for NULL here. 23067 (KJS::ForNode::execute): No need to check for NULL here. 23068 * kjs/nodes.h: 23069 (KJS::ForNode::): Check for NULL SourceElements. Substitute a TrueNode 23070 because it's semantically harmless, and it evaluates to boolean in an 23071 efficient manner. 23072 23073 2007-12-20 Oliver Hunt <oliver (a] apple.com> 23074 23075 Reviewed by Geoff. 23076 23077 Slight logic reordering in JSImmediate::from(double) 23078 23079 This gives a 0.6% improvement in SunSpider. 23080 23081 * kjs/JSImmediate.h: 23082 (KJS::JSImmediate::from): 23083 23084 2007-12-20 Eric Seidel <eric (a] webkit.org> 23085 23086 Reviewed by mjs. 23087 23088 Fix major Array regression introduced by 28899. 23089 23090 SunSpider claims this is at least 1.37x as fast as pre-regression. :) 23091 23092 * kjs/array_instance.cpp: make Arrays fast again! 23093 23094 2007-12-20 Eric Seidel <eric (a] webkit.org> 23095 23096 Reviewed by Geoff, then re-rubber-stamped by Geoff after final search/replace and testing. 23097 23098 Small reworking of Date code for 4% speedup on Date tests (0.2% overall) 23099 http://bugs.webkit.org/show_bug.cgi?id=16537 23100 23101 Make msToYear human-readable 23102 Make msToDayInMonth slightly more readable and avoid recalculating msToYear 23103 Remove use of isInLeapYear to avoid calling msToYear 23104 Remove dayInYear call by changing msToDayInMonth to dayInMonthFromDayInYear 23105 Remove more duplicate calls to dayInYear and getUTCOffset for further speedup 23106 23107 * kjs/DateMath.cpp: 23108 (KJS::daysFrom1970ToYear): 23109 (KJS::msToYear): 23110 (KJS::monthFromDayInYear): 23111 (KJS::checkMonth): 23112 (KJS::dayInMonthFromDayInYear): 23113 (KJS::dateToDayInYear): 23114 (KJS::getDSTOffsetSimple): 23115 (KJS::getDSTOffset): 23116 (KJS::gregorianDateTimeToMS): 23117 (KJS::msToGregorianDateTime): 23118 23119 2007-12-20 Rodney Dawes <dobey (a] wayofthemonkey.com> 23120 23121 Reviewed by Darin Adler. 23122 23123 Proxy includes of npruntime.h or npapi.h through npruntime_internal.h 23124 Include stdio.h in npapi.h for the use of FILE with XP_UNIX defined 23125 This is for building with X11, as some type and enum names conflict 23126 with #define names in X11 headers. 23127 http://bugs.webkit.org/show_bug.cgi?id=15669 23128 23129 * JavaScriptCore.xcodeproj/project.pbxproj: 23130 * bindings/NP_jsobject.h: 23131 * bindings/npapi.h: 23132 * bindings/npruntime.cpp: 23133 * bindings/npruntime_impl.h: 23134 * bindings/npruntime_priv.h: 23135 * bindings/npruntime_internal.h: 23136 * bindings/testbindings.cpp: 23137 * bindings/c/c_class.h: 23138 * bindings/c/c_runtime.h: 23139 * bindings/c/c_utility.h: 23140 23141 2007-12-20 Darin Adler <darin (a] apple.com> 23142 23143 - re-fix http://bugs.webkit.org/show_bug.cgi?id=16471 23144 Completions need to be smaller (or not exist at all) 23145 23146 Same patch as last time with the test failures problem fixed. 23147 23148 * kjs/function.cpp: 23149 (KJS::GlobalFuncImp::callAsFunction): Make sure to check the completion 23150 type from newExec to see if the execute raised an exception. 23151 23152 2007-12-20 Darin Adler <darin (a] apple.com> 23153 23154 - roll out that last change -- it was causing test failures; 23155 I'll check it back in after fixing them 23156 23157 2007-12-20 Darin Adler <darin (a] apple.com> 23158 23159 Reviewed by Eric. 23160 23161 - http://bugs.webkit.org/show_bug.cgi?id=16471 23162 Completions need to be smaller (or not exist at all) 23163 23164 SuSpider shows 2.4% speedup. 23165 23166 Stop using completions in the execution engine. 23167 Instead, the completion type and label target are both 23168 stored in the ExecState. 23169 23170 * API/JSContextRef.cpp: Removed unneeded include of "completion.h". 23171 * bindings/runtime_method.cpp: Removed unused execute function. 23172 * bindings/runtime_method.h: Ditto. 23173 23174 * kjs/ExecState.h: Added completionType, breakOrContinueTarget, 23175 setCompletionType, setNormalCompletion, setBreakCompletion, 23176 setContinueCompletion, setReturnValueCompletion, setThrowCompletion, 23177 setInterruptedCompletion, m_completionType, and m_breakOrContinueTarget. 23178 23179 * kjs/completion.h: Removed constructor and getter for target 23180 for break and continue from Completion. This class is now only 23181 used for the public API to Interpreter and such. 23182 23183 * kjs/date_object.h: Removed unused execute function. 23184 23185 * kjs/function.cpp: 23186 (KJS::FunctionImp::callAsFunction): Removed some unneeded 23187 exception processing. Updated to call the new execute function 23188 and to get the completion type from the ExecState. Merged in 23189 the execute function, which repeated some of the same logic and 23190 was called only from here. 23191 (KJS::GlobalFuncImp::callAsFunction): More of the same for eval. 23192 * kjs/function.h: Removed execute. 23193 23194 * kjs/interpreter.cpp: 23195 (KJS::Interpreter::evaluate): Added code to convert the result of 23196 execut into a Completion. 23197 23198 * kjs/nodes.cpp: 23199 (KJS::Node::setErrorCompletion): Renamed from createErrorCompletion. 23200 Now sets the completion type in the ExecState. 23201 (KJS::Node::rethrowException): Now sets the completion type in the 23202 ExecState. 23203 (KJS::StatementNode::hitStatement): Now sets the completion type in 23204 the ExecState. 23205 (KJS::VarStatementNode::execute): Updated to put completion type in 23206 the ExecState instead of a Completion object. 23207 (KJS::statementListExecute): Ditto. Also changed the for loop to use 23208 indices instead of iterators. 23209 (KJS::BlockNode::execute): Updated return type. 23210 (KJS::EmptyStatementNode::execute): Updated to put completion type in 23211 the ExecState instead of a Completion object. 23212 (KJS::ExprStatementNode::execute): Ditto. 23213 (KJS::IfNode::execute): Ditto. 23214 (KJS::DoWhileNode::execute): Ditto. Also streamlined the logic a little 23215 to make the normal case a little faster and moved the end outside the 23216 loop so that "break" can do a break. 23217 (KJS::WhileNode::execute): Ditto. 23218 (KJS::ForNode::execute): Ditto. 23219 (KJS::ForInNode::execute): Ditto. 23220 (KJS::ContinueNode::execute): Updated to put completion type in 23221 the ExecState instead of a Completion object. 23222 (KJS::BreakNode::execute): Ditto. 23223 (KJS::ReturnNode::execute): Ditto. 23224 (KJS::WithNode::execute): Ditto. 23225 (KJS::CaseClauseNode::executeStatements): Ditto. Also renamed to have 23226 execute in its name to reflect the fact that it's a member of the same 23227 family of functions. 23228 (KJS::CaseBlockNode::executeBlock): Ditto. 23229 (KJS::SwitchNode::execute): Ditto. 23230 (KJS::LabelNode::execute): Ditto. 23231 (KJS::ThrowNode::execute): Ditto. 23232 (KJS::TryNode::execute): Ditto. 23233 (KJS::ProgramNode::execute): Ditto. 23234 (KJS::EvalNode::execute): Ditto. 23235 (KJS::FunctionBodyNode::execute): Ditto. 23236 (KJS::FuncDeclNode::execute): Ditto. 23237 23238 * kjs/nodes.h: Renamed setErrorCompletion to createErrorCompletion, made 23239 hitStatement protected, changed return value of execute to a JSValue, 23240 renamed evalStatements to executeStatements, and evalBlock to executeBlock. 23241 23242 * kjs/number_object.h: Removed unused execute function. 23243 23244 2007-12-20 Geoffrey Garen <ggaren (a] apple.com> 23245 23246 Added Radar number. 23247 23248 * kjs/nodes.cpp: 23249 (KJS::ProgramNode::processDeclarations): 23250 23251 2007-12-20 Geoffrey Garen <ggaren (a] apple.com> 23252 23253 Linux build fix: config.h has to come first. 23254 23255 * kjs/error_object.cpp: 23256 23257 2007-12-19 Geoffrey Garen <ggaren (a] apple.com> 23258 23259 Reviewed by Oliver Hunt. 23260 23261 Optimized global access to global variables, using a symbol table. 23262 23263 SunSpider reports a 1.5% overall speedup, a 6.2% speedup on 3d-morph, 23264 and a whopping 33.1% speedup on bitops-bitwise-and. 23265 23266 * API/JSCallbackObjectFunctions.h: Replaced calls to JSObject:: with 23267 calls to Base::, since JSObject is not always our base class. This 23268 was always a bug, but the bug is even more apparent after some of my 23269 changes. 23270 23271 (KJS::::staticFunctionGetter): Replaced use of getDirect with call to 23272 getOwnPropertySlot. Global declarations are no longer stored in the 23273 property map, so a call to getDirect is insufficient for finding 23274 override properties. 23275 23276 * API/testapi.c: 23277 * API/testapi.js: Added test for the getDirect change mentioned above. 23278 23279 * kjs/ExecState.cpp: 23280 * kjs/ExecState.h: Dialed back the optimization to store a direct 23281 pointer to the localStorage buffer. One ExecState can grow the global 23282 object's localStorage without another ExecState's knowledge, so 23283 ExecState can't store a direct pointer to the localStorage buffer 23284 unless/until we invent a way to update all the relevant ExecStates. 23285 23286 * kjs/JSGlobalObject.cpp: Inserted the symbol table into get and put 23287 operations. 23288 (KJS::JSGlobalObject::reset): Reset the symbol table and local storage, 23289 too. Also, clear the property map here, removing the need for a 23290 separate call. 23291 23292 * kjs/JSVariableObject.cpp: 23293 * kjs/JSVariableObject.h: Added support for saving localStorage and the 23294 symbol table to the back/forward cache, and restoring them. 23295 23296 * kjs/function.cpp: 23297 (KJS::GlobalFuncImp::callAsFunction): Renamed progNode to evalNode 23298 because it's an EvalNode, not a ProgramNode. 23299 23300 * kjs/lookup.h: 23301 (KJS::cacheGlobalObject): Replaced put with faster putDirect, since 23302 that's how the rest of lookup.h works. putDirect is safe here because 23303 cacheGlobalObject is only used for objects whose names are not valid 23304 identifiers. 23305 23306 * kjs/nodes.cpp: The good stuff! 23307 23308 (KJS::EvalNode::processDeclarations): Replaced hasProperty with 23309 the new hasOwnProperty, which is slightly faster. 23310 23311 * kjs/object.h: Nixed clearProperties because clear() does this job now. 23312 23313 * kjs/property_map.cpp: 23314 * kjs/property_map.h: More back/forward cache support. 23315 23316 * wtf/Vector.h: 23317 (WTF::::grow): Added fast non-branching grow function. I used it in 23318 an earlier version of this patch, even though it's not used anymore. 23319 23320 2007-12-09 Mark Rowe <mrowe (a] apple.com> 23321 23322 Reviewed by Oliver Hunt. 23323 23324 Build fix for non-Mac platforms. Move NodeInfo into its own header so that the YYTYPE 23325 declaration in grammar.h is able to declare members of that type. 23326 23327 * kjs/NodeInfo.h: Added. 23328 (KJS::createNodeInfo): 23329 (KJS::mergeDeclarationLists): 23330 (KJS::appendToVarDeclarationList): 23331 * kjs/grammar.y: 23332 * kjs/lexer.cpp: 23333 23334 2007-12-19 Oliver Hunt <oliver (a] apple.com> 23335 23336 Make appendToVarDeclarationList static 23337 23338 RS=Weinig. 23339 23340 * kjs/grammar.y: 23341 23342 2007-12-18 Oliver Hunt <oliver (a] apple.com> 23343 23344 Remove dead code due to removal of post-parse declaration discovery. 23345 23346 RS=Geoff. 23347 23348 Due to the removal of the declaration discovery pass after parsing we 23349 no longer need any of the logic used for that discovery. 23350 23351 * kjs/nodes.cpp: 23352 (KJS::Node::Node): 23353 (KJS::VarDeclNode::VarDeclNode): 23354 (KJS::BlockNode::BlockNode): 23355 (KJS::ForInNode::ForInNode): 23356 (KJS::CaseBlockNode::CaseBlockNode): 23357 * kjs/nodes.h: 23358 (KJS::VarStatementNode::): 23359 (KJS::IfNode::): 23360 (KJS::DoWhileNode::): 23361 (KJS::WhileNode::): 23362 (KJS::WithNode::): 23363 (KJS::LabelNode::): 23364 (KJS::TryNode::): 23365 (KJS::FuncDeclNode::): 23366 (KJS::CaseClauseNode::): 23367 (KJS::ClauseListNode::): 23368 (KJS::SwitchNode::): 23369 23370 2007-12-18 Oliver Hunt <oliver (a] apple.com> 23371 23372 Replace post-parse pass to find declarations with logic in the parser itself 23373 23374 Reviewed by Geoff. 23375 23376 Instead of finding declarations in a pass following the initial parsing of 23377 a program, we incorporate the logic directly into the parser. This lays 23378 the groundwork for further optimisations (such as improving performance in 23379 declaration expressions -- var x = y; -- to match that of standard assignment) 23380 in addition to providing a 0.4% performance improvement in SunSpider. 23381 23382 * JavaScriptCore.exp: 23383 * kjs/Parser.cpp: 23384 (KJS::Parser::parse): 23385 * kjs/Parser.h: 23386 (KJS::Parser::didFinishParsing): 23387 (KJS::Parser::parse): 23388 * kjs/grammar.y: 23389 * kjs/nodes.cpp: 23390 (KJS::ParserTracked::ParserTracked): 23391 (KJS::ParserTracked::~ParserTracked): 23392 (KJS::ParserTracked::ref): 23393 (KJS::ParserTracked::deref): 23394 (KJS::ParserTracked::refcount): 23395 (KJS::ParserTracked::clearNewTrackedObjects): 23396 (KJS::Node::Node): 23397 (KJS::ScopeNode::ScopeNode): 23398 (KJS::ProgramNode::ProgramNode): 23399 (KJS::EvalNode::EvalNode): 23400 (KJS::FunctionBodyNode::FunctionBodyNode): 23401 (KJS::FunctionBodyNode::initializeSymbolTable): 23402 (KJS::FunctionBodyNode::processDeclarations): 23403 * kjs/nodes.h: 23404 (KJS::ParserTracked::): 23405 (KJS::Node::): 23406 (KJS::ScopeNode::): 23407 23408 2007-12-18 Xan Lopez <xan (a] gnome.org> 23409 23410 Reviewed by Geoff. 23411 23412 Fix http://bugs.webkit.org/show_bug.cgi?id=14521 23413 Bug 14521: JavaScriptCore fails to build on Linux/PPC gcc 4.1.2 23414 23415 * wtf/TCSpinLock.h: 23416 (TCMalloc_SpinLock::Unlock): 23417 23418 Use less strict memory operand constraint on inline asm generation. 23419 PLATFORM(DARWIN) left unpatched due to Apple's GCC bug. 23420 23421 Patch by David Kilzer <ddkilzer (a] webkit.org> 23422 23423 2007-12-18 Mark Rowe <mrowe (a] apple.com> 23424 23425 Rubber-stamped by Maciej Stachowiak. 23426 23427 Remove outdated and non-functioning project files for the Apollo port. 23428 23429 * JavaScriptCore.apolloproj: Removed. 23430 23431 2007-12-18 Darin Adler <darin (a] apple.com> 23432 23433 - fix Windows build 23434 23435 * pcre/pcre_exec.cpp: 23436 (jsRegExpExecute): Change back from false/true to 0/1 -- I probably should not have 23437 deleted MATCH_MATCH and MATCH_NOMATCH, but I'm going to leave them out. 23438 23439 2007-12-18 Darin Adler <darin (a] apple.com> 23440 23441 Reviewed by Geoff. 23442 23443 - fix http://bugs.webkit.org/show_bug.cgi?id=16458 23444 REGRESSION (r28164): regular expressions can now hang due to lack of a match limit 23445 <rdar://problem/5636067> 23446 23447 Test: fast/regex/slow.html 23448 23449 Slows down SunSpider a bit (about 1.01x); filed a bug to follow up on that: 23450 http://bugs.webkit.org/show_bug.cgi?id=16503 23451 23452 * pcre/pcre.h: Changed name of error code to not specifically mention "recursion". 23453 * pcre/pcre_exec.cpp: 23454 (match): Replaced the depth limit, MATCH_RECURSION_LIMIT, with a total match looping 23455 limit, matchLimit. Also eliminated the constants for MATCH_MATCH and MATCH_NOMATCH, 23456 since they are just true and false (1 and 0). 23457 (jsRegExpExecute): More of the MATCH_MATCH change. 23458 23459 2007-12-17 Darin Adler <darin (a] apple.com> 23460 23461 - speculative build fix for non-gcc platforms 23462 23463 * pcre/pcre_exec.cpp: (match): Remove unused cases from return switch. 23464 23465 2007-12-16 Mark Rowe <mrowe (a] apple.com> 23466 23467 Speculative build fix for non-Mac platforms. 23468 23469 * pcre/pcre_compile.cpp: Include string.h for memset, memmove, etc. 23470 23471 2007-12-16 Darin Adler <darin (a] apple.com> 23472 23473 Reviewed by Maciej. 23474 23475 - http://bugs.webkit.org/show_bug.cgi?id=16438 23476 - removed some more unused code 23477 - changed quite a few more names to WebKit-style 23478 - moved more things out of pcre_internal.h 23479 - changed some indentation to WebKit-style 23480 - improved design of the functions for reading and writing 23481 2-byte values from the opcode stream (in pcre_internal.h) 23482 23483 * pcre/dftables.cpp: 23484 (main): Added the kjs prefix a normal way in lieu of using macros. 23485 23486 * pcre/pcre_compile.cpp: Moved some definitions here from pcre_internal.h. 23487 (errorText): Name changes, fewer typedefs. 23488 (checkEscape): Ditto. Changed uppercase conversion to use toASCIIUpper. 23489 (isCountedRepeat): Name change. 23490 (readRepeatCounts): Name change. 23491 (firstSignificantOpcode): Got rid of the use of OP_lengths, which is 23492 very lightly used here. Hard-coded the length of OP_BRANUMBER. 23493 (firstSignificantOpcodeSkippingAssertions): Ditto. Also changed to 23494 use the advanceToEndOfBracket function. 23495 (getOthercaseRange): Name changes. 23496 (encodeUTF8): Ditto. 23497 (compileBranch): Name changes. Removed unused after_manual_callout and 23498 the code to handle it. Removed code to handle OP_ONCE since we never 23499 emit this opcode. Changed to use advanceToEndOfBracket in more places. 23500 (compileBracket): Name changes. 23501 (branchIsAnchored): Removed code to handle OP_ONCE since we never emit 23502 this opcode. 23503 (bracketIsAnchored): Name changes. 23504 (branchNeedsLineStart): More fo the same. 23505 (bracketNeedsLineStart): Ditto. 23506 (branchFindFirstAssertedCharacter): Removed OP_ONCE code. 23507 (bracketFindFirstAssertedCharacter): More of the same. 23508 (calculateCompiledPatternLengthAndFlags): Ditto. 23509 (returnError): Name changes. 23510 (jsRegExpCompile): Ditto. 23511 23512 * pcre/pcre_exec.cpp: Moved some definitions here from pcre_internal.h. 23513 (matchRef): Updated names. 23514 Improved macros to use the do { } while(0) idiom so they expand to single 23515 statements rather than to blocks or multiple statements. And refeactored 23516 the recursive match macros. 23517 (MatchStack::pushNewFrame): Name changes. 23518 (getUTF8CharAndIncrementLength): Name changes. 23519 (match): Name changes. Removed the ONCE opcode. 23520 (jsRegExpExecute): Name changes. 23521 23522 * pcre/pcre_internal.h: Removed quite a few unneeded includes. Rewrote 23523 quite a few comments. Removed the macros that add kjs prefixes to the 23524 functions with external linkage; instead renamed the functions. Removed 23525 the unneeded typedefs pcre_uint16, pcre_uint32, and uschar. Removed the 23526 dead and not-all-working code for LINK_SIZE values other than 2, although 23527 we aim to keep the abstraction working. Removed the OP_LENGTHS macro. 23528 (put2ByteValue): Replaces put2ByteOpcodeValueAtOffset. 23529 (get2ByteValue): Replaces get2ByteOpcodeValueAtOffset. 23530 (put2ByteValueAndAdvance): Replaces put2ByteOpcodeValueAtOffsetAndAdvance. 23531 (putLinkValueAllowZero): Replaces putOpcodeValueAtOffset; doesn't do the 23532 addition, since a comma is really no better than a plus sign. Added an 23533 assertion to catch out of range values and changed the parameter type to 23534 int rather than unsigned. 23535 (getLinkValueAllowZero): Replaces getOpcodeValueAtOffset. 23536 (putLinkValue): New function that most former callers of the 23537 putOpcodeValueAtOffset function can use; asserts the value that is 23538 being stored is non-zero and then calls putLinkValueAllowZero. 23539 (getLinkValue): Ditto. 23540 (putLinkValueAndAdvance): Replaces putOpcodeValueAtOffsetAndAdvance. No 23541 caller was using an offset, which makes sense given the advancing behavior. 23542 (putLinkValueAllowZeroAndAdvance): Ditto. 23543 (isBracketOpcode): Added. For use in an assertion. 23544 (advanceToEndOfBracket): Renamed from moveOpcodePtrPastAnyAlternateBranches, 23545 and removed comments about how it's not well designed. This function takes 23546 a pointer to the beginning of a bracket and advances to the end of the 23547 bracket. 23548 23549 * pcre/pcre_tables.cpp: Updated names. 23550 * pcre/pcre_ucp_searchfuncs.cpp: 23551 (kjs_pcre_ucp_othercase): Ditto. 23552 * pcre/pcre_xclass.cpp: 23553 (getUTF8CharAndAdvancePointer): Ditto. 23554 (kjs_pcre_xclass): Ditto. 23555 * pcre/ucpinternal.h: Ditto. 23556 23557 * wtf/ASCIICType.h: 23558 (WTF::isASCIIAlpha): Added an int overload, like the one we already have for 23559 isASCIIDigit. 23560 (WTF::isASCIIAlphanumeric): Ditto. 23561 (WTF::isASCIIHexDigit): Ditto. 23562 (WTF::isASCIILower): Ditto. 23563 (WTF::isASCIISpace): Ditto. 23564 (WTF::toASCIILower): Ditto. 23565 (WTF::toASCIIUpper): Ditto. 23566 23567 2007-12-16 Darin Adler <darin (a] apple.com> 23568 23569 Reviewed by Maciej. 23570 23571 - fix http://bugs.webkit.org/show_bug.cgi?id=16459 23572 REGRESSION: assertion failure with regexp with \B in a case-ignoring character range 23573 <rdar://problem/5646361> 23574 23575 The problem was that \B was not handled properly in character classes. 23576 23577 Test: fast/js/regexp-overflow.html 23578 23579 * pcre/pcre_compile.cpp: 23580 (check_escape): Added handling of ESC_b and ESC_B in character classes here. 23581 Allows us to get rid of the handling of \b in character classes from all the 23582 call sites that handle it separately and to handle \B properly as well. 23583 (compileBranch): Remove the ESC_b handling, since it's not needed any more. 23584 (calculateCompiledPatternLengthAndFlags): Ditto. 23585 23586 2007-12-16 Mark Rowe <mrowe (a] apple.com> 23587 23588 Reviewed by Maciej Stachowiak. 23589 23590 Fix http://bugs.webkit.org/show_bug.cgi?id=16448 23591 Bug 16448: [GTK] Celtic Kane JavaScript performance on Array test is slow relative to Mac 23592 23593 * kjs/array_instance.cpp: 23594 (KJS::compareByStringPairForQSort): 23595 (KJS::ArrayInstance::sort): Convert JSValue's to strings once up front and then sort the 23596 results. This avoids calling toString twice per comparison, but requires a temporary buffer 23597 so we only use this approach in cases where the array being sorted is not too large. 23598 23599 2007-12-16 Geoffrey Garen <ggaren (a] apple.com> 23600 23601 Reviewed by Darin Adler and Maciej Stachowiak. 23602 23603 More refactoring to support global variable optimization. 23604 23605 Changed SymbolTable to use RefPtr<UString::Rep> as its key instead of 23606 UString::Rep*. With globals, the symbol table can outlast the 23607 declaration node for any given symbol, so the symbol table needs to ref 23608 its symbol names. 23609 23610 In support, specialized HashMaps with RefPtr keys to allow lookup 23611 via raw pointer, avoiding refcount churn. 23612 23613 SunSpider reports a .6% speedup (prolly just noise). 23614 23615 * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added new file: wtf/RefPtrHashMap.h 23616 * JavaScriptCore.xcodeproj/project.pbxproj: ditto 23617 23618 * kjs/JSVariableObject.cpp: 23619 (KJS::JSVariableObject::getPropertyNames): Symbol table keys are RefPtrs now. 23620 23621 * kjs/SymbolTable.h: Modified key traits to match RefPtr. Added a 23622 static Rep* for null, which helps compute the deletedValue() trait. 23623 23624 * wtf/HashMap.h: #include the RefPtr specialization so everyone can use it. 23625 23626 * wtf/RefPtrHashMap.h: Copied from wtf/HashMap.h. Added overloaded versions 23627 of find(), contains(), get(), set(), add(), remove(), and take() that take 23628 raw pointers as keys. 23629 23630 2007-12-16 Alexey Proskuryakov <ap (a] webkit.org> 23631 23632 Reviewed by Darin. 23633 23634 http://bugs.webkit.org/show_bug.cgi?id=16162 23635 Problems with float parsing on Linux (locale-dependent parsing was used). 23636 23637 * kjs/dtoa.cpp: Removed USE_LOCALE to reduce future confusion. 23638 * kjs/lexer.cpp: (KJS::Lexer::lex): Parse with kjs_strtod, not the system one. 23639 23640 2007-12-14 Alp Toker <alp (a] atoker.com> 23641 23642 Reviewed by Mark Rowe. 23643 23644 Enable the AllInOneFile.cpp optimization for the GTK+ port. 23645 23646 * JavaScriptCore.pri: 23647 23648 2007-12-14 Mark Rowe <mrowe (a] apple.com> 23649 23650 Unreviewed. Remove commented out fprintf's that were for debugging purposes only. 23651 23652 * wtf/FastMalloc.cpp: 23653 (WTF::TCMalloc_PageHeap::IncrementalScavenge): 23654 23655 2007-12-14 Mark Rowe <mrowe (a] apple.com> 23656 23657 Reviewed by Maciej Stachowiak. 23658 23659 Don't use the MADV_DONTNEED code path for now as it has no effect on Mac OS X and is 23660 currently untested on other platforms. 23661 23662 * wtf/TCSystemAlloc.cpp: 23663 (TCMalloc_SystemRelease): Return after releasing memory rather than potentially falling 23664 through into another mechanism if multiple are supported. 23665 23666 2007-12-14 Alp Toker <alp (a] atoker.com> 23667 23668 Build fix for GTK+/Qt and ports that don't use AllInOneFile.cpp. 23669 23670 Include UnusedParam.h. 23671 23672 * wtf/TCSystemAlloc.cpp: 23673 23674 2007-12-14 Oliver Hunt <oliver (a] apple.com> 23675 23676 Reviewed by Stephanie. 23677 23678 Fix build on windows 23679 23680 * wtf/FastMalloc.cpp: 23681 (WTF::TCMalloc_PageHeap::IncrementalScavenge): 23682 23683 2007-12-14 Dan Bernstein <mitz (a] apple.com> 23684 23685 - try again to fix the Windows build 23686 23687 * wtf/TCSystemAlloc.cpp: 23688 (TCMalloc_SystemRelease): 23689 23690 2007-12-14 Dan Bernstein <mitz (a] apple.com> 23691 23692 - try to fix the Windows build 23693 23694 * wtf/TCSystemAlloc.cpp: 23695 (TCMalloc_SystemRelease): 23696 23697 2007-12-14 Mark Rowe <mrowe (a] apple.com> 23698 23699 Reviewed by Maciej and Oliver. 23700 23701 Add final changes to make TCMalloc release memory to the system. 23702 This results in a 0.4% regression against ToT, but this is offset 23703 against the gains made by the original TCMalloc r38 merge - in fact 23704 we retain around 0.3-0.4% progression overall. 23705 23706 * wtf/FastMalloc.cpp: 23707 (WTF::InitSizeClasses): 23708 (WTF::TCMalloc_PageHeap::IncrementalScavenge): 23709 * wtf/TCSystemAlloc.cpp: 23710 (TCMalloc_SystemRelease): 23711 23712 2007-12-14 Darin Adler <darin (a] apple.com> 23713 23714 Reviewed by Sam. 23715 23716 - removed unnecessary includes of "Vector.h" 23717 23718 * wtf/HashMap.h: 23719 (WTF::copyKeysToVector): Make the type of the vector be a template parameter. 23720 This allows copying keys into a vector of a base class or one with an inline capacity. 23721 (WTF::copyValuesToVector): Ditto. 23722 * wtf/HashSet.h: 23723 (WTF::copyToVector): Ditto. 23724 23725 2007-12-14 Anders Carlsson <andersca (a] apple.com> 23726 23727 Reviewed by Darin and Geoff. 23728 23729 <rdar://problem/5619295> 23730 REGRESSION: 303-304: Embedded YouTube video fails to render- JS errors (16150) (Flash 9) 23731 23732 Get rid of unnecessary and incorrect security checks for plug-ins accessing JavaScript objects. 23733 23734 The way this used to work was that each NPObject that wrapped a JSObject would have a root object 23735 corresponding to the frame object (used for managing the lifecycle) and an origin root object (used for 23736 doing security checks). 23737 23738 This would prevent a plug-in from accessing a frame's window object if it's security origin was different 23739 (some parts of the window, such as the location object, can be accessed from frames with different security 23740 origins, and those checks are being done in WebCore). 23741 23742 Also, if a plug-in were to access a window object of a frame that later went away, it could lead to that 23743 Window JSObject being garbage collected and the NPObject pointing to freed memory. 23744 23745 How this works now is that there is no origin root object anymore, and all NPObject wrappers that are created 23746 for a plug-in will have the root object of the containing frame of that plug-in. 23747 23748 * bindings/NP_jsobject.cpp: 23749 (jsDeallocate): 23750 Don't free the origin root object. 23751 23752 (_NPN_CreateScriptObject): 23753 Remove the origin root object parameter. 23754 23755 (_NPN_InvokeDefault): 23756 (_NPN_Invoke): 23757 (_NPN_Evaluate): 23758 (_NPN_GetProperty): 23759 (_NPN_SetProperty): 23760 (_NPN_RemoveProperty): 23761 (_NPN_HasProperty): 23762 (_NPN_HasMethod): 23763 (_NPN_Enumerate): 23764 Get rid of all security checks. 23765 23766 * bindings/NP_jsobject.h: 23767 Remove originRootObject from the JavaScriptObject struct. 23768 23769 * bindings/c/c_utility.cpp: 23770 (KJS::Bindings::convertValueToNPVariant): 23771 Always use the root object from the ExecState. 23772 23773 2007-12-13 Steve Falkenburg <sfalken (a] apple.com> 23774 23775 Move source file generation into its own vcproj to fix build dependencies. 23776 23777 Reviewed by Adam. 23778 23779 * JavaScriptCore.vcproj/JavaScriptCore.sln: 23780 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 23781 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Added. 23782 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Added. 23783 * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: 23784 23785 2007-12-13 Alp Toker <alp (a] atoker.com> 23786 23787 http://bugs.webkit.org/show_bug.cgi?id=16406 23788 [Gtk] JavaScriptCore needs -lpthread 23789 23790 Build fix for Debian and any other platforms that don't implicitly 23791 link to pthread. 23792 23793 Link to pthread on non-Windows platforms until this dependency is 23794 removed from JSC. 23795 23796 2007-12-11 Geoffrey Garen <ggaren (a] apple.com> 23797 23798 Reviewed by Sam Weinig. 23799 23800 Build fix: Note some variables that are used only for ASSERTs. 23801 23802 * API/testapi.c: 23803 (Base_finalize): 23804 (globalObject_initialize): 23805 (testInitializeFinalize): 23806 23807 2007-12-11 Geoffrey Garen <ggaren (a] apple.com> 23808 23809 Reviewed by Darin Adler. 23810 23811 Fixed: All JS tests crash on Windows. 23812 23813 NDEBUG wasn't defined when compiling testkjs in release builds, so the 23814 HashTable definition in HashTable.h included an extra data member. 23815 23816 The solution was to add NDEBUG to the release testkjs configuration on 23817 Windows and Mac. 23818 23819 For giggles, I also added other missing #defines to testkjs on Windows. 23820 23821 * Configurations/Base.xcconfig: 23822 * Configurations/JavaScriptCore.xcconfig: 23823 * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: 23824 * JavaScriptCore.xcodeproj/project.pbxproj: 23825 * kjs/testkjs.cpp: 23826 (main): 23827 23828 2007-12-11 Geoffrey Garen <ggaren (a] apple.com> 23829 23830 Reviewed by Darin Adler. 23831 23832 Removed bogus ASSERT. 23833 23834 ASSERT should only be used when we know that a code path will not be 23835 taken. This code path is taken often during the jsFunFuzz test. 23836 23837 * pcre/pcre_exec.cpp: 23838 (jsRegExpExecute): 23839 23840 2007-12-11 Darin Adler <darin (a] apple.com> 23841 23842 * wtf/unicode/qt4/UnicodeQt4.h: Try to fix Qt build by adding U16_IS_SINGLE. 23843 23844 2007-12-10 Darin Adler <darin (a] apple.com> 23845 23846 Reviewed by Sam Weinig. 23847 23848 - fix http://bugs.webkit.org/show_bug.cgi?id=16379 23849 REGRESSION(r28525): Failures in http/tests/xmlhttprequest/response-encoding.html and 23850 fast/dom/xmlhttprequest-html-response-encoding.html 23851 and <rdar://problem/5640230> REGRESSION (306A4-ToT): Access violation in PCRE function 23852 find_firstassertedchar 23853 23854 Test: fast/js/regexp-find-first-asserted.html 23855 23856 * pcre/pcre_compile.cpp: 23857 (compileBracket): Take out unnecessary initialization of out parameters. 23858 (branchFindFirstAssertedCharacter): Added. Broke out the half of the function that handles 23859 a branch. 23860 (bracketFindFirstAssertedCharacter): Renamed from find_firstassertedchar. Also removed the 23861 options parameter -- the caller can handle the options. 23862 (jsRegExpCompile): Changed call site to call the appropriate bracket or branch version of 23863 the find_firstassertedchar function. Also put the REQ_IGNORE_CASE code here instead of 23864 passing in the options. 23865 23866 2007-12-10 Geoffrey Garen <ggaren (a] apple.com> 23867 23868 Reviewed by Sam Weinig. 23869 23870 Split this: 23871 23872 FunctionBodyNode 23873 ^ 23874 | 23875 ProgramNode 23876 23877 into this: 23878 23879 ScopeNode 23880 ^ ^ ^ 23881 | | | 23882 FunctionBodyNode ProgramNode EvalNode 23883 23884 in preparation for specializing each class more while optimizing global 23885 variable access. 23886 23887 Also removed some cruft from the FunctionBodyNode interface to simplify 23888 things. 23889 23890 SunSpider says this patch is a .8% speedup, which seems reasonable, 23891 since it eliminates a few branches and adds KJS_FAST_CALL in a few 23892 places. 23893 23894 Layout tests and JS tests pass. Also, this baby builds on Windows! (Qt 23895 mileage may vary...) 23896 23897 2007-12-10 Geoffrey Garen <ggaren (a] apple.com> 23898 23899 RS by Mark Rowe. 23900 23901 Mac build fix: added some exported symbols, now that Parser::parse is 23902 defined in the header. 23903 23904 * JavaScriptCore.exp: 23905 23906 2007-12-10 Sam Weinig <sam (a] webkit.org> 23907 23908 Build fix. 23909 23910 Template methods need to be in the header. 23911 23912 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 23913 * kjs/Parser.cpp: 23914 * kjs/Parser.h: 23915 (KJS::Parser::parse): 23916 23917 2007-12-10 Geoffrey Garen <ggaren (a] apple.com> 23918 23919 Reviewed by Sam Weinig. 23920 23921 Merged different implementations of Parser::parse into a single, 23922 templatized implementation, in preparation for adding yet another 23923 implementation for "eval" code. 23924 23925 JS and layout tests pass. 23926 23927 2007-12-10 Timothy Hatcher <timothy (a] apple.com> 23928 23929 Reviewed by Mark Rowe 23930 23931 <rdar://problem/5639463> Bundle versions on Tiger should be 4523.x not 523.x 23932 23933 * Configurations/Version.xcconfig: Some Tiger versions of Xcode don't set MAC_OS_X_VERSION_MAJOR, 23934 so assume Tiger and use a 4 for the SYSTEM_VERSION_PREFIX. 23935 23936 2007-12-10 Mark Rowe <mrowe (a] apple.com> 23937 23938 Tiger build fix. 23939 23940 * kjs/grammar.y: Use @1 and @0 in place of @$ where Tiger's bison chokes. 23941 23942 2007-12-10 Darin Adler <darin (a] apple.com> 23943 23944 Reviewed by Mark Rowe. 23945 23946 - fix http://bugs.webkit.org/show_bug.cgi?id=16375 23947 REGRESSION: Safari crashes on quit 23948 23949 Probably a debug-only issue. 23950 23951 * kjs/Parser.cpp: 23952 (KJS::parser): Create the parser and never destroy it by using a pointer instead 23953 of a global object. 23954 23955 2007-12-09 Darin Adler <darin (a] apple.com> 23956 23957 Reviewed by Sam Weinig. 23958 23959 - fix http://bugs.webkit.org/show_bug.cgi?id=16369 23960 REGRESSION (r28525): regular expression tests failing due to bad firstByte optimization 23961 23962 * pcre/pcre_compile.cpp: Changed some names to use interCaps intead of under_scores. 23963 (branchIsAnchored): Broke is_anchored into two separate functions; this one works on a 23964 branch and the other on an anchor. The old function would only work on a bracket. 23965 Also removed unneeded parameters; the anchored check does not require the bracket 23966 map or the options any more because we have a reduced set of features. 23967 (bracketIsAnchored): Ditto. 23968 (branchNeedsLineStart): Broke canApplyFirstCharOptimization into two functions and gave 23969 both a better name. This is the function that was returning the wrong value. The failure 23970 was beacuse the old function would only work on a bracket. 23971 (bracketNeedsLineStart): Ditto. 23972 (jsRegExpCompile): Changed to call the appropriate branch or bracket flavor of the 23973 functions based on whether we compiled an outer bracket. Also removed inaccurate comments 23974 and unneeded parameters. 23975 23976 - other small changes 23977 23978 * pcre/pcre.h: Renumbered error codes, in a logical order. First, normal failure, then 23979 the recursion limit, then running out of memory, and finally an unexpected internal error. 23980 23981 * pcre/pcre_exec.cpp: Fixed indentation. 23982 (jsRegExpExecute): Corrected an inaccurate comment. 23983 23984 2007-12-09 Darin Adler <darin (a] apple.com> 23985 23986 Reviewed by Maciej. 23987 23988 - fix http://bugs.webkit.org/show_bug.cgi?id=16370 23989 REGRESSION (r28540): source URL and line number no longer set for outer function/programs 23990 23991 Test: fast/js/exception-linenums-in-html-1.html 23992 Test: fast/js/exception-linenums-in-html-2.html 23993 Test: fast/js/exception-linenums.html 23994 23995 By the time the ProgramNode was constructed, the source URL was empty. 23996 23997 * kjs/Parser.cpp: 23998 (KJS::Parser::parseProgram): Added code to set and clear m_sourceURL, which is now 23999 handled here instead of in the lexer; it needs to still be set when we create the 24000 program node. Call setLoc to set the first and last line number. 24001 (KJS::Parser::parseFunctionBody): Ditto, but for the body. 24002 (KJS::Parser::parse): Removed the sourceURL argument. 24003 24004 * kjs/Parser.h: Added sourceURL(), m_sourceURL, and m_lastLine. Added a lastLine 24005 parameter to didFinishParsing, since the bison grammar knows the last line number 24006 and we otherwise do not know it. Removed the sourceURL parameter from parse, since 24007 that's now handled at a higher level. 24008 24009 * kjs/grammar.y: Pass the last line number to didFinishParsing. 24010 24011 * kjs/lexer.cpp: 24012 (KJS::Lexer::setCode): Removed the sourceURL argument and the code to set m_sourceURL. 24013 (KJS::Lexer::clear): Ditto. 24014 * kjs/lexer.h: More of the same. 24015 24016 * kjs/nodes.cpp: 24017 (KJS::FunctionBodyNode::FunctionBodyNode): Get the source URL from the parser rather 24018 than from the lexer. Removed unneeded call to setLoc, since the line numbers already 24019 both default to -1. 24020 24021 2007-12-08 Oliver Hunt <oliver (a] apple.com> 24022 24023 Reviewed by Sam W. 24024 24025 Split the ENABLE_SVG_EXPERIMENTAL_FEATURES flag into separate flags. 24026 24027 Fixes <rdar://problem/5620249> Must disable SVG animation 24028 <rdar://problem/5612772> Disable SVG filters on Mac to match Windows behavior 24029 24030 Minor config changes. 24031 24032 * Configurations/JavaScriptCore.xcconfig: 24033 * JavaScriptCore.xcodeproj/project.pbxproj: 24034 24035 2007-12-07 Sam Weinig <sam (a] webkit.org> 24036 24037 Reviewed by Darin. 24038 24039 - Rename isSafeScript to allowsAccessFrom. 24040 24041 * bindings/NP_jsobject.cpp: 24042 (_isSafeScript): 24043 * kjs/JSGlobalObject.h: 24044 (KJS::JSGlobalObject::allowsAccessFrom): Reverse caller/argument of allowsAccessFrom to match 24045 the new call. 24046 24047 2007-12-07 Geoffrey Garen <ggaren (a] apple.com> 24048 24049 Reviewed by Sam Weinig. 24050 24051 Refactored variable access optimization: Removed the assumption that 24052 the FunctionBodyNode holds the symbol table. 24053 24054 2007-12-07 Geoffrey Garen <ggaren (a] apple.com> 24055 24056 Build fix: added #include. 24057 24058 * kjs/nodes.cpp: 24059 24060 2007-12-07 Geoffrey Garen <ggaren (a] apple.com> 24061 24062 Build fix: added #include. 24063 24064 * kjs/interpreter.cpp: 24065 24066 2007-12-07 Geoffrey Garen <ggaren (a] apple.com> 24067 24068 Build fix: added #include. 24069 24070 * kjs/grammar.y: 24071 24072 2007-12-07 Geoffrey Garen <ggaren (a] apple.com> 24073 24074 Build fix: added #include. 24075 24076 * kjs/function_object.cpp: 24077 24078 2007-12-07 Geoffrey Garen <ggaren (a] apple.com> 24079 24080 Reviewed by Sam Weinig. 24081 24082 Fixed crash seen running layout tests. 24083 24084 Reverted a change I made earlier today. Added a comment to try to 24085 discourage myself from making this mistake a third time. 24086 24087 * kjs/function.cpp: 24088 (KJS::ActivationImp::mark): 24089 * kjs/function.h: 24090 (KJS::ActivationImp::ActivationImpData::ActivationImpData): 24091 24092 2007-12-07 Geoffrey Garen <ggaren (a] apple.com> 24093 24094 Reviewed by Sam Weinig. 24095 24096 Refactored parsing of global code: Removed the assumption that 24097 ProgramNode inherits from FunctionBodyNode from the parser. 24098 24099 * kjs/Parser.cpp: 24100 (KJS::Parser::parseProgram): 24101 (KJS::Parser::parseFunctionBody): 24102 (KJS::Parser::parse): 24103 * kjs/Parser.h: 24104 (KJS::Parser::didFinishParsing): 24105 * kjs/function.cpp: 24106 * kjs/grammar.y: 24107 * kjs/nodes.h: 24108 24109 2007-12-07 Geoffrey Garen <ggaren (a] apple.com> 24110 24111 Build fix: added JSVariableObject.cpp to the .pri file. 24112 24113 * JavaScriptCore.pri: 24114 24115 2007-12-07 Geoffrey Garen <ggaren (a] apple.com> 24116 24117 Build fix: added #include. 24118 24119 * kjs/function.cpp: 24120 24121 2007-12-07 Steve Falkenburg <sfalken (a] apple.com> 24122 24123 Re-named our B&I flag from BUILDBOT to PRODUCTION. 24124 24125 Reviewed by Sam Weinig. 24126 24127 * JavaScriptCore.vcproj/JavaScriptCore.make: 24128 * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: 24129 24130 2007-12-07 Geoffrey Garen <ggaren (a] apple.com> 24131 24132 Build fix: removed stray name qualification. 24133 24134 * kjs/function.h: 24135 (KJS::ActivationImp::ActivationImp): 24136 24137 2007-12-07 Geoffrey Garen <ggaren (a] apple.com> 24138 24139 Build fix: moved functions with qualified names outside of class 24140 declaration. 24141 24142 * kjs/JSVariableObject.h: 24143 (KJS::JSVariableObject::symbolTableGet): 24144 (KJS::JSVariableObject::symbolTablePut): 24145 24146 2007-12-07 Geoffrey Garen <ggaren (a] apple.com> 24147 24148 Reviewed by Sam Weinig. 24149 24150 Next step in refactoring JSGlobalObject: Added JSVariableObject class, 24151 and factored symbol-table-related code into it. (JSGlobalObject doesn't 24152 use the symbol table code yet, though.) 24153 24154 Layout and JS tests, and testapi, pass. SunSpider reports no regression. 24155 24156 2007-12-07 Darin Adler <darin (a] apple.com> 24157 24158 Reviewed by Geoff. 24159 24160 - fix http://bugs.webkit.org/show_bug.cgi?id=16185 24161 jsRegExpCompile should not add implicit non-capturing bracket 24162 24163 While this does not make SunSpider faster, it will make many regular 24164 expressions a bit faster. 24165 24166 * pcre/pcre_compile.cpp: Moved CompileData struct in here from the 24167 header since it's private to this file. 24168 (compile_branch): Updated for function name change. 24169 (compile_bracket): Renamed from compile_regex, since, for one thing, 24170 this does not compile an entire regular expression. 24171 (calculateCompiledPatternLengthAndFlags): Removed unused item_count 24172 local variable. Renamed CompileData to cd instead of compile_block 24173 to be consistent with other functions. Added code to set the 24174 needOuterBracket flag if there's at least one "|" at the outer level. 24175 (jsRegExpCompile): Renamed CompileData to cd instead of compile_block 24176 to be consistent with other functions. Removed unneeded "size" field 24177 from the compiled regular expression. If no outer bracket is needed, 24178 then use compile_branch to compile the regular expression. 24179 24180 * pcre/pcre_internal.h: Removed the CompileData struct, which is now 24181 private to pcre_compile.cpp. Removed the size member from JSRegExp. 24182 24183 2007-12-06 Kevin Ollivier <kevino (a] theolliviers.com> 24184 24185 MSVC7 build fix due to a compiler bug with placement new and/or 24186 templates and casting. 24187 24188 Reviewed by Darin Adler. 24189 24190 * wtf/Vector.h: 24191 (WTF::::append): 24192 24193 2007-12-06 Darin Adler <darin (a] apple.com> 24194 24195 Reviewed by Eric Seidel. 24196 24197 - fix http://bugs.webkit.org/show_bug.cgi?id=16321 24198 new RegExp("[\u0097]{4,6}", "gmy") crashes in DEBUG builds 24199 <rdar://problem/5632992> 24200 24201 Test: fast/js/regexp-oveflow.html 24202 24203 * pcre/pcre_compile.cpp: 24204 (calculateCompiledPatternLengthAndFlags): In the case where a single character 24205 character class is optimized to not use a character class at all, the preflight 24206 code was not setting the lastitemlength variable. 24207 24208 2007-12-05 Mark Rowe <mrowe (a] apple.com> 24209 24210 Qt Windows build fix. Include the time-related headers in the correct place. 24211 24212 * kjs/JSGlobalObject.cpp: 24213 * kjs/interpreter.cpp: 24214 24215 2007-12-05 Darin Adler <darin (a] apple.com> 24216 24217 Not reviewed; just undoing a previous commit. 24218 24219 - remove earlier incorrect fix for http://bugs.webkit.org/show_bug.cgi?id=16220 24220 <rdar://problem/5625221> Crash opening www.news.com (CNet) 24221 24222 The real bug was the backwards ?: in the compile function, which Geoff just 24223 fixed. Rolling out the incorrect earlier fix. 24224 24225 * pcre/pcre_compile.cpp: (calculateCompiledPatternLengthAndFlags): Take out 24226 the unneeded preflight change. The regression test proves this is still working 24227 fine, so the bug remains fixed. 24228 24229 2007-12-01 Mark Rowe <mrowe (a] apple.com> 24230 24231 Build fix. Include headers before trying to use the things that they declare. 24232 24233 * kjs/JSImmediate.cpp: 24234 * kjs/nodes.cpp: 24235 * kjs/object.cpp: 24236 * kjs/object_object.cpp: 24237 * kjs/regexp_object.cpp: 24238 * kjs/string_object.cpp: 24239 24240 2007-12-05 Geoffrey Garen <ggaren (a] apple.com> 24241 24242 Build fix: added some #includes. 24243 24244 * kjs/JSImmediate.cpp: 24245 24246 2007-12-05 Geoffrey Garen <ggaren (a] apple.com> 24247 24248 Build fix: added some #includes. 24249 24250 * kjs/JSGlobalObject.cpp: 24251 * kjs/JSImmediate.cpp: 24252 24253 2007-12-05 Geoffrey Garen <ggaren (a] apple.com> 24254 24255 Build fix: Fixed #include spelling. 24256 24257 * kjs/debugger.cpp: 24258 24259 2007-12-05 Geoffrey Garen <ggaren (a] apple.com> 24260 24261 Build fix: added #include. 24262 24263 * kjs/debugger.cpp: 24264 24265 2007-12-05 Geoffrey Garen <ggaren (a] apple.com> 24266 24267 Build fix: added a forward declaration. 24268 24269 * kjs/debugger.h: 24270 24271 2007-12-05 Geoffrey Garen <ggaren (a] apple.com> 24272 24273 Build fix: added an #include. 24274 24275 * kjs/error_object.cpp: 24276 24277 2007-12-05 Geoffrey Garen <ggaren (a] apple.com> 24278 24279 Build fix: added an #include. 24280 24281 * kjs/bool_object.cpp: 24282 24283 2007-12-05 Geoffrey Garen <ggaren (a] apple.com> 24284 24285 Reviewed by Darin Adler. 24286 24287 Third step in refactoring JSGlobalObject: Moved data members and 24288 functions accessing data members from Interpreter to JSGlobalObject. 24289 Changed Interpreter member functions to static functions. 24290 24291 This resolves a bug in global object bootstrapping, where the global 24292 ExecState could be used when uninitialized. 24293 24294 This is a big change, but it's mostly code motion and renaming. 24295 24296 Layout and JS tests, and testjsglue and testapi, pass. SunSpider reports 24297 a .7% regression, but Shark sees no difference related to this patch, 24298 and SunSpider reported a .7% speedup from an earlier step in this 24299 refactoring, so I think it's fair to call that a wash. 24300 24301 2007-12-05 Geoffrey Garen <ggaren (a] apple.com> 24302 24303 Reviewed by Darin Adler. (Or vice versa.) 24304 24305 Fixed ASSERT during run-javascriptcore-tests. (Darin just added the 24306 ASSERT, but the bug wasn't new.) 24307 24308 * pcre/pcre_compile.cpp: 24309 (compile_branch): The ?: operator here was backwards, causing us to 24310 execute the loop too many times, adding stray KET opcodes to the 24311 compiled regular expression. 24312 24313 2007-12-05 Kevin McCullough <kmccullough (a] apple.com> 24314 24315 Reviewed by Geoff. 24316 24317 - Wait until local variable data is fully constructed before notifying the debugger of entering 24318 or leaving a call frame. 24319 24320 * kjs/function.cpp: 24321 (KJS::FunctionImp::callAsFunction): 24322 * kjs/nodes.cpp: 24323 (KJS::FunctionBodyNode::execute): 24324 24325 2007-12-05 Mark Rowe <mrowe (a] apple.com> 24326 24327 Reviewed by Oliver. 24328 24329 Build fix for GCC 4.2. Cast via a union to avoid strict-aliasing issues. 24330 24331 * wtf/FastMalloc.cpp: 24332 (WTF::): 24333 (WTF::getPageHeap): 24334 24335 2007-12-05 Mark Rowe <mrowe (a] apple.com> 24336 24337 Reviewed by Darin. 24338 24339 Fix testkjs in 64-bit. 24340 24341 When built for 64-bit the TCMalloc spin lock uses pthread mutexes rather than a custom spin lock 24342 implemented in assembly. If we fail to initialize the pthread mutex, attempts to lock or unlock 24343 it will fail and trigger a call to abort. 24344 24345 * wtf/FastMalloc.cpp: Initialize the spin lock so that we can later lock and unlock it. 24346 * wtf/TCSpinLock.h: Add an Init method to the optimised spin lock. 24347 24348 2007-12-04 Oliver Hunt <oliver (a] apple.com> 24349 24350 Fix gtk build. 24351 24352 * wtf/TCSystemAlloc.cpp: 24353 24354 2007-12-03 Oliver Hunt <oliver (a] apple.com> 24355 24356 Reviewed by Mark Rowe and Geoff Garen. 24357 24358 Merge TCMalloc r38 24359 24360 It also result in a performance progression between 0.5% and 24361 0.9% depending on the test, however most if not all of this 24362 gain will be consumed by the overhead involved in the later 24363 change to release memory to the system. 24364 24365 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 24366 * JavaScriptCore.xcodeproj/project.pbxproj: 24367 * wtf/FastMalloc.cpp: 24368 (WTF::KernelSupportsTLS): 24369 (WTF::CheckIfKernelSupportsTLS): 24370 (WTF::): 24371 (WTF::ClassIndex): 24372 (WTF::SLL_Next): 24373 (WTF::SLL_SetNext): 24374 (WTF::SLL_Push): 24375 (WTF::SLL_Pop): 24376 (WTF::SLL_PopRange): 24377 (WTF::SLL_PushRange): 24378 (WTF::SLL_Size): 24379 (WTF::SizeClass): 24380 (WTF::ByteSizeForClass): 24381 (WTF::NumMoveSize): 24382 (WTF::InitSizeClasses): 24383 (WTF::AllocationSize): 24384 (WTF::TCMalloc_PageHeap::GetSizeClassIfCached): 24385 (WTF::TCMalloc_PageHeap::CacheSizeClass): 24386 (WTF::TCMalloc_PageHeap::init): 24387 (WTF::TCMalloc_PageHeap::New): 24388 (WTF::TCMalloc_PageHeap::AllocLarge): 24389 (WTF::TCMalloc_PageHeap::Carve): 24390 (WTF::TCMalloc_PageHeap::Delete): 24391 (WTF::TCMalloc_PageHeap::IncrementalScavenge): 24392 (WTF::PagesToMB): 24393 (WTF::TCMalloc_PageHeap::Dump): 24394 (WTF::TCMalloc_PageHeap::GrowHeap): 24395 (WTF::TCMalloc_PageHeap::Check): 24396 (WTF::ReleaseFreeList): 24397 (WTF::TCMalloc_PageHeap::ReleaseFreePages): 24398 (WTF::TCMalloc_ThreadCache_FreeList::Push): 24399 (WTF::TCMalloc_ThreadCache_FreeList::PushRange): 24400 (WTF::TCMalloc_ThreadCache_FreeList::PopRange): 24401 (WTF::TCMalloc_ThreadCache_FreeList::Pop): 24402 (WTF::TCMalloc_Central_FreeList::length): 24403 (WTF::TCMalloc_Central_FreeList::tc_length): 24404 (WTF::TCMalloc_Central_FreeList::Init): 24405 (WTF::TCMalloc_Central_FreeList::ReleaseListToSpans): 24406 (WTF::TCMalloc_Central_FreeList::EvictRandomSizeClass): 24407 (WTF::TCMalloc_Central_FreeList::MakeCacheSpace): 24408 (WTF::TCMalloc_Central_FreeList::ShrinkCache): 24409 (WTF::TCMalloc_Central_FreeList::InsertRange): 24410 (WTF::TCMalloc_Central_FreeList::RemoveRange): 24411 (WTF::TCMalloc_Central_FreeList::FetchFromSpansSafe): 24412 (WTF::TCMalloc_Central_FreeList::Populate): 24413 (WTF::TCMalloc_ThreadCache::Init): 24414 (WTF::TCMalloc_ThreadCache::Cleanup): 24415 (WTF::TCMalloc_ThreadCache::Allocate): 24416 (WTF::TCMalloc_ThreadCache::Deallocate): 24417 (WTF::TCMalloc_ThreadCache::FetchFromCentralCache): 24418 (WTF::TCMalloc_ThreadCache::ReleaseToCentralCache): 24419 (WTF::TCMalloc_ThreadCache::Scavenge): 24420 (WTF::TCMalloc_ThreadCache::PickNextSample): 24421 (WTF::TCMalloc_ThreadCache::NewHeap): 24422 (WTF::TCMalloc_ThreadCache::GetThreadHeap): 24423 (WTF::TCMalloc_ThreadCache::GetCache): 24424 (WTF::TCMalloc_ThreadCache::GetCacheIfPresent): 24425 (WTF::TCMalloc_ThreadCache::InitTSD): 24426 (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary): 24427 (WTF::TCMallocStats::ExtractStats): 24428 (WTF::TCMallocStats::DumpStats): 24429 (WTF::TCMallocStats::DumpStackTraces): 24430 (WTF::TCMallocStats::TCMallocImplementation::MarkThreadIdle): 24431 (WTF::TCMallocStats::TCMallocImplementation::ReleaseFreeMemory): 24432 (WTF::TCMallocStats::TCMallocGuard::TCMallocGuard): 24433 (WTF::TCMallocStats::TCMallocGuard::~TCMallocGuard): 24434 (WTF::TCMallocStats::DoSampledAllocation): 24435 (WTF::TCMallocStats::CheckCachedSizeClass): 24436 (WTF::TCMallocStats::CheckedMallocResult): 24437 (WTF::TCMallocStats::SpanToMallocResult): 24438 (WTF::TCMallocStats::do_malloc): 24439 (WTF::TCMallocStats::do_free): 24440 (WTF::TCMallocStats::do_memalign): 24441 (WTF::TCMallocStats::do_malloc_stats): 24442 (WTF::TCMallocStats::do_mallopt): 24443 (WTF::TCMallocStats::do_mallinfo): 24444 (WTF::TCMallocStats::realloc): 24445 (WTF::TCMallocStats::cpp_alloc): 24446 (WTF::TCMallocStats::operator new): 24447 (WTF::TCMallocStats::): 24448 (WTF::TCMallocStats::operator new[]): 24449 (WTF::TCMallocStats::malloc_stats): 24450 (WTF::TCMallocStats::mallopt): 24451 (WTF::TCMallocStats::mallinfo): 24452 * wtf/TCPackedCache.h: Added. 24453 (PackedCache::PackedCache): 24454 (PackedCache::Put): 24455 (PackedCache::Has): 24456 (PackedCache::GetOrDefault): 24457 (PackedCache::Clear): 24458 (PackedCache::EntryToValue): 24459 (PackedCache::EntryToUpper): 24460 (PackedCache::KeyToUpper): 24461 (PackedCache::UpperToPartialKey): 24462 (PackedCache::Hash): 24463 (PackedCache::KeyMatch): 24464 * wtf/TCPageMap.h: 24465 (TCMalloc_PageMap2::PreallocateMoreMemory): 24466 * wtf/TCSystemAlloc.cpp: 24467 (TCMalloc_SystemRelease): 24468 * wtf/TCSystemAlloc.h: 24469 24470 2007-12-04 Anders Carlsson <andersca (a] apple.com> 24471 24472 Reviewed by Sam. 24473 24474 Make isSafeScript const. 24475 24476 * kjs/JSGlobalObject.h: 24477 (KJS::JSGlobalObject::isSafeScript): 24478 24479 2007-12-04 Darin Adler <darin (a] apple.com> 24480 24481 Reviewed by Geoff. 24482 24483 - fix first part of http://bugs.webkit.org/show_bug.cgi?id=16220 24484 <rdar://problem/5625221> Crash opening www.news.com (CNet) 24485 24486 Test: fast/js/regexp-overflow.html 24487 24488 * pcre/pcre_compile.cpp: 24489 (calculateCompiledPatternLengthAndFlags): Add room for the additional BRA/KET that 24490 was generated in the compile code but not taken into account here. 24491 24492 2007-12-03 Darin Adler <darin (a] apple.com> 24493 24494 Reviewed by Geoff. 24495 24496 - fix http://bugs.webkit.org/show_bug.cgi?id=15618 24497 <rdar://problem/5619353> REGRESSION: Stack overflow/crash in KJS::equal (15618) 24498 24499 Test: fast/js/recursion-limit-equal.html 24500 24501 * kjs/operations.cpp: (KJS::equal): Check the exception from toPrimitive. 24502 24503 2007-12-03 Dan Bernstein <mitz (a] apple.com> 24504 24505 - fix a copy-and-paste-o 24506 24507 * bindings/npruntime.cpp: 24508 (_NPN_GetIntIdentifier): 24509 24510 2007-12-03 Dan Bernstein <mitz (a] apple.com> 24511 24512 Reviewed by Darin Adler. 24513 24514 - fix an ASSERT when getIntIdentifier is called with 0 or -1 24515 24516 * bindings/npruntime.cpp: 24517 (_NPN_GetIntIdentifier): We cannot use the hashmap for 0 and -1 since 24518 they are the empty value and the deleted value. Instead, keep the 24519 identifiers for those two integers in a static array. 24520 24521 2007-12-02 Darin Adler <darin (a] apple.com> 24522 24523 Reviewed by Mitz. 24524 24525 - fix http://bugs.webkit.org/show_bug.cgi?id=15848 24526 <rdar://problem/5619330> REGRESSION: Assertion failure viewing comments page on digg.com 24527 24528 Test: fast/js/sparse-array.html 24529 24530 * kjs/array_instance.cpp: 24531 (KJS::ArrayInstance::inlineGetOwnPropertySlot): Check sparse array cutoff before looking 24532 in hash map. Can't avoid the branch because we can't look for 0 in the hash. 24533 (KJS::ArrayInstance::deleteProperty): Ditto. 24534 24535 2007-12-02 Geoffrey Garen <ggaren (a] apple.com> 24536 24537 Build fix: added an #include. 24538 24539 * kjs/collector.cpp: 24540 24541 2007-12-02 Geoffrey Garen <ggaren (a] apple.com> 24542 24543 Reviewed by Eric Seidel. 24544 24545 Second step in refactoring JSGlobalObject: moved virtual functions from 24546 Interpreter to JSGlobalObject. 24547 24548 Layout and JS tests pass. SunSpider reports a .7% speedup -- don't 24549 believe his lies. 24550 24551 2007-12-01 Alp Toker <alp (a] atoker.com> 24552 24553 Reviewed by Adam Roben. 24554 24555 http://bugs.webkit.org/show_bug.cgi?id=16228 24556 kJSClassDefinitionEmpty is not exported with JS_EXPORT 24557 24558 Add JS_EXPORT to kJSClassDefinitionEmpty. 24559 24560 Make the gcc compiler check take precedence over the WIN32||_WIN32 24561 check to ensure that symbols are exported on Windows when using gcc. 24562 24563 Add a TODO referencing the bug about JS_EXPORT in the Win build 24564 (http://bugs.webkit.org/show_bug.cgi?id=16227) 24565 24566 Don't define JS_EXPORT as 'extern' when the compiler is unknown since 24567 it would result in the incorrect expansion: 24568 24569 extern extern const JSClassDefinition kJSClassDefinitionEmpty; 24570 24571 (This was something we inherited from CFBase.h that doesn't make sense 24572 for JSBase.h) 24573 24574 * API/JSBase.h: 24575 * API/JSObjectRef.h: 24576 24577 2007-11-30 Geoffrey Garen <ggaren (a] apple.com> 24578 24579 Reviewed by Beth Dakin. 24580 24581 Reversed the ownership relationship between Interpreter and JSGlobalObject. 24582 Now, the JSGlobalObject owns the Interpreter, and top-level objects 24583 that need the two to persist just protect the JSGlobalObject from GC. 24584 24585 Global object bootstrapping looks a little odd right now, but it will 24586 make much more sense soon, after further rounds of refactoring. 24587 24588 * bindings/runtime_root.h: Made this class inherit from RefCounted, 24589 to avoid code duplication. 24590 24591 * kjs/collector.cpp: 24592 (KJS::Collector::collect): No need to give special GC treatment to 24593 Interpreters, since we mark their global objects, which mark them. 24594 24595 * kjs/interpreter.cpp: 24596 (KJS::Interpreter::mark): No need to mark our global object, since it 24597 marks us. 24598 * kjs/interpreter.h: Don't inherit from RefCounted -- JSGlobalObject 24599 owns us directly. 24600 24601 * kjs/testkjs.cpp: Modified to follow the new rules. 24602 (createGlobalObject): 24603 (runWithScripts): 24604 24605 2007-11-30 Brent Fulgham <bfulgham (a] gmail.com> 24606 24607 Reviewed by Eric. 24608 24609 * ChangeLog: 24610 * pcre/pcre_compile.cpp: 24611 (compile_branch): 24612 24613 2007-11-30 Eric Seidel <eric (a] webkit.org> 24614 24615 No review, build fix only. 24616 24617 Fix uninitialized var warnings in release build. 24618 24619 * JavaScriptCore.xcodeproj/project.pbxproj: 24620 * pcre/pcre_compile.cpp: 24621 (compile_regex): 24622 24623 2007-11-30 Darin Adler <darin (a] apple.com> 24624 24625 Reviewed by Adam Roben. 24626 24627 - fix http://bugs.webkit.org/show_bug.cgi?id=16207 24628 JavaScript regular expressions should match UTF-16 code units rather than characters 24629 24630 SunSpider says this is 5.5% faster on the regexp test, 0.4% faste overall. 24631 24632 Test: fast/js/regexp-non-bmp.html 24633 24634 Renamed ANY_CHAR to NOT_NEWLINE to more-accurately reflect its meaning. 24635 24636 * pcre/pcre_compile.cpp: 24637 (compile_branch): Removed calls to the UTF-16 character accessor functions, replacing 24638 them with simple pointer dereferences in some cases, and no code at all in others. 24639 (calculateCompiledPatternLengthAndFlags): Ditto. 24640 24641 * pcre/pcre_exec.cpp: 24642 (match): Fixed indentation of some case labels (including all the BEGIN_OPCODE). 24643 Removed calls to the UTF-16 character accessor functions, replacing them with simple 24644 pointer dereferences in some cases, and no code at all in others. Also removed some 24645 explicit UTF-16 support code in a few cases. Removed the unneeded "UTF-8" code path 24646 in the ANY_CHAR repeat code, and in another case, eliminated the code to check against 24647 end_subject in because it is already done outside the loop. 24648 (jsRegExpExecute): 24649 24650 * pcre/pcre_internal.h: Removed all the UTF-16 helper functions. 24651 24652 2007-11-30 Eric Seidel <eric (a] webkit.org> 24653 24654 Reviewed by darin. 24655 24656 PCRE crashes under GuardMalloc 24657 http://bugs.webkit.org/show_bug.cgi?id=16127 24658 check against patternEnd to make sure we don't walk off the end of the string 24659 24660 * pcre/pcre_compile.cpp: 24661 (compile_branch): 24662 (calculateCompiledPatternLengthAndFlags): 24663 24664 2007-11-30 Eric Seidel <eric (a] webkit.org> 24665 24666 Reviewed by Maciej. 24667 24668 Fix layout test regressions caused by r28186 24669 http://bugs.webkit.org/show_bug.cgi?id=16195 24670 change first_byte and req_byte back to shorts instead of chars 24671 (I think PCRE stuffs information in the high bits) 24672 24673 * pcre/pcre_internal.h: 24674 24675 2007-11-29 Oliver Hunt <oliver (a] apple.com> 24676 24677 Reviewed by Maciej and Darin. 24678 24679 Make the JS collector work with multiple threads 24680 24681 Under heavy contention it was possible the GC to suspend other 24682 threads inside the pthread spinlock, which could lead to the GC 24683 thread blocking on the pthread spinlock itself. 24684 24685 We now determine and store each thread's stack base when it is 24686 registered, thus removing the need for any calls to pthread_get_stackaddr_np 24687 that needed the pthread spinlock. 24688 24689 * kjs/collector.cpp: 24690 (KJS::Collector::Thread::Thread): 24691 (KJS::Collector::registerThread): 24692 (KJS::Collector::markOtherThreadConservatively): 24693 24694 2007-11-29 Adam Roben <aroben (a] apple.com> 24695 24696 Windows build fix 24697 24698 Removed some unreachable code (ironically, the code was some 24699 ASSERT_NOT_REACHED()s). 24700 24701 * pcre/pcre_compile.cpp: 24702 (compile_branch): 24703 * pcre/pcre_exec.cpp: 24704 (match): 24705 24706 2007-11-29 Eric Seidel <eric (a] webkit.org> 24707 24708 Reviewed by Mark Rowe. 24709 24710 Fix for --guard crash of fast/js/regexp-charclass-crash introduced by r28151. 24711 24712 * pcre/pcre_compile.cpp: 24713 (is_anchored): 24714 24715 2007-11-28 Mark Rowe <mrowe (a] apple.com> 24716 24717 Gtk build fix. Rubber-stamped by Eric. 24718 24719 * pcre/pcre_exec.cpp: 24720 (match): Add braces around the body of the case statement to prevent 24721 wanings about jumps across the initialization of a variable. 24722 24723 2007-11-29 Eric Seidel <eric (a] webkit.org> 24724 24725 Reviewed by Mark Rowe. 24726 24727 Attempt to fix non-mac builds after PCRE cleanup. 24728 24729 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 24730 * JavaScriptCoreSources.bkl: 24731 * pcre/pcre.pri: 24732 24733 2007-11-28 Eric Seidel <eric (a] webkit.org> 24734 24735 Reviewed by Maciej. 24736 24737 Centralize code for subjectPtr adjustments using inlines, only ever check for a single 24738 trailing surrogate (as UTF16 only allows one), possibly fix PCRE bugs involving char 24739 classes and garbled UTF16 strings. 24740 24741 * pcre/pcre_exec.cpp: 24742 (match): 24743 (jsRegExpExecute): 24744 * pcre/pcre_internal.h: 24745 (getPreviousChar): 24746 (movePtrToPreviousChar): 24747 (movePtrToNextChar): 24748 (movePtrToStartOfCurrentChar): 24749 24750 2007-11-28 Eric Seidel <eric (a] webkit.org> 24751 24752 Reviewed by Maciej. 24753 24754 change getChar* functions to return result and push 'c' into local scopes for clarity 24755 24756 * pcre/pcre_compile.cpp: 24757 (compile_branch): 24758 (calculateCompiledPatternLengthAndFlags): 24759 * pcre/pcre_exec.cpp: 24760 (match): 24761 * pcre/pcre_internal.h: 24762 (getChar): 24763 (getCharAndAdvance): 24764 (getCharAndLength): 24765 (getCharAndAdvanceIfSurrogate): 24766 24767 2007-11-28 Eric Seidel <eric (a] webkit.org> 24768 24769 Reviewed by Sam. 24770 24771 Comment cleanup 24772 24773 * pcre/pcre_exec.cpp: 24774 (match): 24775 24776 2007-11-26 Eric Seidel <eric (a] webkit.org> 24777 24778 Reviewed by Sam. 24779 24780 Further cleanups to calculateCompiledPatternLengthAndFlags 24781 24782 * pcre/pcre_compile.cpp: 24783 (calculateCompiledPatternLengthAndFlags): 24784 * pcre/pcre_internal.h: 24785 24786 2007-11-26 Eric Seidel <eric (a] webkit.org> 24787 24788 Reviewed by Sam. 24789 24790 Give consistent naming to the RegExp options/compile flags 24791 24792 * pcre/pcre_compile.cpp: 24793 (compile_branch): 24794 (is_anchored): 24795 (find_firstassertedchar): 24796 (printCompiledRegExp): 24797 (jsRegExpCompile): 24798 * pcre/pcre_exec.cpp: 24799 (jsRegExpExecute): 24800 * pcre/pcre_internal.h: 24801 24802 2007-11-26 Eric Seidel <eric (a] webkit.org> 24803 24804 Reviewed by Sam. 24805 24806 Pull first_byte and req_byte optimizations out into separate static funtions, SunSpider reported this as a win. 24807 24808 * pcre/pcre_exec.cpp: 24809 (tryFirstByteOptimization): 24810 (tryRequiredByteOptimization): 24811 (jsRegExpExecute): 24812 * pcre/pcre_internal.h: 24813 24814 2007-11-26 Eric Seidel <eric (a] webkit.org> 24815 24816 Reviewed by Maciej. 24817 24818 give PCRE_MULTILINE a better name: OptionMatchAcrossMultipleLines 24819 24820 * pcre/pcre_compile.cpp: 24821 (compile_branch): 24822 (is_anchored): 24823 (printCompiledRegExp): 24824 (jsRegExpCompile): 24825 * pcre/pcre_exec.cpp: 24826 (jsRegExpExecute): 24827 * pcre/pcre_internal.h: 24828 24829 2007-11-26 Eric Seidel <eric (a] webkit.org> 24830 24831 Reviewed by Oliver. 24832 24833 Deprecate jsRegExpExecute's offset-vector fallback code 24834 24835 * pcre/pcre_exec.cpp: 24836 (jsRegExpExecute): 24837 24838 2007-11-26 Eric Seidel <eric (a] webkit.org> 24839 24840 Reviewed by Maciej. 24841 24842 Make cur_is_word and prev_is_word locals, and change OP_ANY to OP_ANY_CHAR for clarity 24843 24844 * pcre/pcre_compile.cpp: 24845 (find_fixedlength): 24846 (compile_branch): 24847 (canApplyFirstCharOptimization): 24848 * pcre/pcre_exec.cpp: 24849 (match): 24850 * pcre/pcre_internal.h: 24851 24852 2007-11-26 Eric Seidel <eric (a] webkit.org> 24853 24854 Reviewed by Mitz & Maciej. 24855 24856 Change _NC operators to use _IGNORING_CASE for clarity 24857 24858 * pcre/pcre_compile.cpp: 24859 (find_fixedlength): 24860 (compile_branch): 24861 (find_firstassertedchar): 24862 * pcre/pcre_exec.cpp: 24863 (match): 24864 * pcre/pcre_internal.h: 24865 24866 2007-11-26 Eric Seidel <eric (a] webkit.org> 24867 24868 Reviewed by Mitz. 24869 24870 Remove branch from return 24871 24872 * pcre/pcre_compile.cpp: 24873 (compile_branch): 24874 * pcre/pcre_exec.cpp: 24875 (match): 24876 24877 2007-11-26 Eric Seidel <eric (a] webkit.org> 24878 24879 Reviewed by Maciej. 24880 24881 Add repeatInformationFromInstructionOffset inline 24882 24883 * pcre/pcre_exec.cpp: 24884 (repeatInformationFromInstructionOffset): 24885 (match): 24886 24887 2007-11-26 Eric Seidel <eric (a] webkit.org> 24888 24889 Reviewed by Maciej. 24890 24891 Remove no longer used error code JSRegExpErrorMatchLimit 24892 24893 * kjs/regexp.cpp: 24894 (KJS::RegExp::match): 24895 * pcre/pcre.h: 24896 * pcre/pcre_internal.h: 24897 24898 2007-11-26 Eric Seidel <eric (a] webkit.org> 24899 24900 Reviewed by Sam. 24901 24902 Make i locally scoped for better code clarity 24903 24904 * pcre/pcre_exec.cpp: 24905 (match): 24906 24907 2007-11-26 Eric Seidel <eric (a] webkit.org> 24908 24909 Reviewed by Maciej. 24910 24911 Give subjectPtr and instructionPtr sane names, reduce size of MatchFrame for a 0.2% speedup. 24912 24913 * pcre/pcre_compile.cpp: 24914 (compile_branch): 24915 (calculateCompiledPatternLengthAndFlags): 24916 * pcre/pcre_exec.cpp: 24917 (match_ref): 24918 (MatchStack::pushNewFrame): 24919 (getUTF8CharAndIncrementLength): 24920 (match): 24921 * pcre/pcre_internal.h: 24922 (getChar): 24923 (getCharAndAdvance): 24924 (getCharAndLength): 24925 (getCharAndAdvanceIfSurrogate): 24926 * pcre/pcre_xclass.cpp: 24927 (getUTF8CharAndAdvancePointer): 24928 24929 2007-11-26 Eric Seidel <eric (a] webkit.org> 24930 24931 Reviewed by Sam. 24932 24933 Small speedup (0.7%) by simplifying canUseStackBufferForNextFrame() check 24934 24935 * pcre/pcre_exec.cpp: 24936 (MatchStack::MatchStack): 24937 (MatchStack::popCurrentFrame): 24938 24939 2007-11-25 Eric Seidel <eric (a] webkit.org> 24940 24941 Reviewed by Sam. 24942 24943 Lower MATCH_LIMIT_RECURSION to more sane levels to prevent hangs on run-javascriptcore-tests 24944 24945 * pcre/pcre_internal.h: 24946 24947 2007-11-25 Eric Seidel <eric (a] webkit.org> 24948 24949 Reviewed by Maciej. 24950 24951 Remove match_is_group variable for another 5% speedup 24952 24953 * pcre/pcre_compile.cpp: 24954 * pcre/pcre_exec.cpp: 24955 (startNewGroup): 24956 (match): 24957 24958 2007-11-28 Eric Seidel <eric (a] webkit.org> 24959 24960 Reviewed by Sam. 24961 24962 Abstract frame variables into locals and args 24963 24964 * pcre/pcre_compile.cpp: 24965 (compile_branch): 24966 * pcre/pcre_exec.cpp: 24967 (match): 24968 * pcre/pcre_internal.h: 24969 24970 2007-11-28 Eric Seidel <eric (a] webkit.org> 24971 24972 Reviewed by Sam. 24973 24974 Section off MatchData arguments into args struct 24975 24976 * pcre/pcre_exec.cpp: 24977 (MatchStack::pushNewFrame): 24978 (match): 24979 24980 2007-11-24 Eric Seidel <eric (a] webkit.org> 24981 24982 Reviewed by Sam. 24983 24984 Remove redundant eptrblock struct 24985 24986 * pcre/pcre_exec.cpp: 24987 (MatchStack::pushNewFrame): 24988 (match): 24989 24990 2007-11-24 Eric Seidel <eric (a] webkit.org> 24991 24992 Reviewed by Maciej. 24993 24994 Remove redundant match_call_count and move recursion check out of super-hot code path 24995 SunSpider says this is at least an 8% speedup for regexp. 24996 24997 * pcre/pcre_exec.cpp: 24998 (MatchStack::MatchStack): 24999 (MatchStack::pushNewFrame): 25000 (MatchStack::popCurrentFrame): 25001 (MatchStack::popAllFrames): 25002 (match): 25003 (jsRegExpExecute): 25004 * pcre/pcre_internal.h: 25005 25006 2007-11-24 Eric Seidel <eric (a] webkit.org> 25007 25008 Reviewed by Sam. 25009 25010 Get rid of GETCHAR* macros, replacing them with better named inlines 25011 25012 * pcre/pcre_compile.cpp: 25013 (compile_branch): 25014 (calculateCompiledPatternLengthAndFlags): 25015 * pcre/pcre_exec.cpp: 25016 (match): 25017 * pcre/pcre_internal.h: 25018 (getCharAndAdvance): 25019 (getCharAndLength): 25020 (getCharAndAdvanceIfSurrogate): 25021 25022 2007-11-24 Eric Seidel <eric (a] webkit.org> 25023 25024 Reviewed by Sam. 25025 25026 Further cleanup GET/PUT inlines 25027 25028 * pcre/pcre_internal.h: 25029 (putOpcodeValueAtOffset): 25030 (getOpcodeValueAtOffset): 25031 (putOpcodeValueAtOffsetAndAdvance): 25032 (put2ByteOpcodeValueAtOffset): 25033 (get2ByteOpcodeValueAtOffset): 25034 (put2ByteOpcodeValueAtOffsetAndAdvance): 25035 25036 2007-11-24 Eric Seidel <eric (a] webkit.org> 25037 25038 Reviewed by Sam. 25039 25040 Give GET, PUT better names, and add (poor) moveOpcodePtrPastAnyAlternateBranches 25041 25042 * pcre/pcre_compile.cpp: 25043 (firstSignificantOpCodeSkippingAssertions): 25044 (find_fixedlength): 25045 (complete_callout): 25046 (compile_branch): 25047 (compile_regex): 25048 (is_anchored): 25049 (canApplyFirstCharOptimization): 25050 (find_firstassertedchar): 25051 * pcre/pcre_exec.cpp: 25052 (match): 25053 * pcre/pcre_internal.h: 25054 (putOpcodeValueAtOffset): 25055 (getOpcodeValueAtOffset): 25056 (putOpcodeValueAtOffsetAndAdvance): 25057 (put2ByteOpcodeValueAtOffset): 25058 (get2ByteOpcodeValueAtOffset): 25059 (moveOpcodePtrPastAnyAlternateBranches): 25060 * pcre/pcre_ucp_searchfuncs.cpp: 25061 (_pcre_ucp_othercase): 25062 25063 2007-11-24 Eric Seidel <eric (a] webkit.org> 25064 25065 Reviewed by Sam. 25066 25067 Add inlines for toLowerCase, isWordChar, isSpaceChar for further regexp speedup 25068 25069 * pcre/pcre_compile.cpp: 25070 (compile_branch): 25071 (jsRegExpCompile): 25072 * pcre/pcre_exec.cpp: 25073 (match): 25074 (jsRegExpExecute): 25075 * pcre/pcre_internal.h: 25076 (toLowerCase): 25077 (flipCase): 25078 (classBitmapForChar): 25079 (charTypeForChar): 25080 (isWordChar): 25081 (isSpaceChar): 25082 (CompileData::CompileData): 25083 * pcre/pcre_xclass.cpp: 25084 (_pcre_xclass): 25085 25086 2007-11-24 Eric Seidel <eric (a] webkit.org> 25087 25088 Reviewed by Sam. 25089 25090 cleanup _pcre_ucp_othercase 25091 25092 * pcre/pcre_ucp_searchfuncs.cpp: 25093 (_pcre_ucp_othercase): 25094 25095 2007-11-24 Eric Seidel <eric (a] webkit.org> 25096 25097 Reviewed by Maciej. 25098 25099 Use better variable names for case ignoring options 25100 25101 * pcre/pcre_compile.cpp: 25102 (compile_branch): 25103 (find_firstassertedchar): 25104 (printCompiledRegExp): 25105 (jsRegExpCompile): 25106 * pcre/pcre_exec.cpp: 25107 (match_ref): 25108 (match): 25109 (jsRegExpExecute): 25110 * pcre/pcre_internal.h: 25111 25112 2007-11-24 Eric Seidel <eric (a] webkit.org> 25113 25114 Reviewed by Sam. 25115 25116 split first_significant_code into two simpler functions 25117 25118 * pcre/pcre_compile.cpp: 25119 (firstSignificantOpCode): 25120 (firstSignificantOpCodeSkippingAssertions): 25121 (is_anchored): 25122 (canApplyFirstCharOptimization): 25123 (find_firstassertedchar): 25124 25125 2007-11-24 Eric Seidel <eric (a] webkit.org> 25126 25127 Reviewed by Sam. 25128 25129 clean up is_counted_repeat 25130 25131 * pcre/pcre_compile.cpp: 25132 (is_counted_repeat): 25133 25134 2007-11-24 Eric Seidel <eric (a] webkit.org> 25135 25136 Reviewed by Sam. 25137 25138 clean up check_escape 25139 25140 * pcre/pcre_compile.cpp: 25141 (check_escape): 25142 25143 2007-11-24 Eric Seidel <eric (a] webkit.org> 25144 25145 Reviewed by Sam. 25146 25147 Reformat find_fixedlength 25148 25149 * pcre/pcre_compile.cpp: 25150 (find_fixedlength): 25151 25152 2007-11-24 Eric Seidel <eric (a] webkit.org> 25153 25154 Reviewed by Sam. 25155 25156 reformat is_anchored 25157 25158 * pcre/pcre_compile.cpp: 25159 (is_anchored): 25160 25161 2007-11-24 Eric Seidel <eric (a] webkit.org> 25162 25163 Reviewed by Maciej. 25164 25165 Remove unused function could_be_empty_branch 25166 25167 * pcre/pcre_compile.cpp: 25168 (first_significant_code): 25169 (find_fixedlength): 25170 (compile_branch): 25171 (canApplyFirstCharOptimization): 25172 25173 2007-11-24 Eric Seidel <eric (a] webkit.org> 25174 25175 Reviewed by Sam. 25176 25177 Pass around MatchData objects by reference 25178 25179 * pcre/pcre_exec.cpp: 25180 (pchars): 25181 (match_ref): 25182 (match): 25183 (jsRegExpExecute): 25184 25185 2007-11-24 Eric Seidel <eric (a] webkit.org> 25186 25187 Reviewed by Sam. 25188 25189 give PCRE_STARTLINE a better name and rename match_data to MatchData 25190 25191 * pcre/pcre_compile.cpp: 25192 (compile_branch): 25193 (canApplyFirstCharOptimization): 25194 (find_firstassertedchar): 25195 (printCompiledRegExp): 25196 (jsRegExpCompile): 25197 * pcre/pcre_exec.cpp: 25198 (pchars): 25199 (jsRegExpExecute): 25200 * pcre/pcre_internal.h: 25201 25202 2007-11-24 Eric Seidel <eric (a] webkit.org> 25203 25204 Reviewed by Sam. 25205 25206 Clean up find_firstassertedchar 25207 25208 * pcre/pcre_compile.cpp: 25209 (get_othercase_range): 25210 (find_firstassertedchar): 25211 (calculateCompiledPatternLengthAndFlags): 25212 25213 2007-11-24 Eric Seidel <eric (a] webkit.org> 25214 25215 Reviewed by Tim Hatcher. 25216 25217 Pass around CompileData& instead of CompileData* 25218 25219 * pcre/pcre_compile.cpp: 25220 (compile_branch): 25221 (jsRegExpCompile): 25222 25223 2007-11-24 Eric Seidel <eric (a] webkit.org> 25224 25225 Reviewed by Sam. 25226 25227 Clean up compile_branch, move _pcre_ord2utf8, and rename CompileData 25228 25229 * JavaScriptCore.xcodeproj/project.pbxproj: 25230 * pcre/pcre_compile.cpp: 25231 (_pcre_ord2utf8): 25232 (calculateCompiledPatternLengthAndFlags): 25233 (jsRegExpCompile): 25234 * pcre/pcre_internal.h: 25235 * pcre/pcre_ord2utf8.cpp: Removed. 25236 25237 2007-11-24 Eric Seidel <eric (a] webkit.org> 25238 25239 Reviewed by Sam. 25240 25241 removing more macros 25242 25243 * pcre/pcre_compile.cpp: 25244 (could_be_empty_branch): 25245 (compile_branch): 25246 (calculateCompiledPatternLengthAndFlags): 25247 * pcre/pcre_exec.cpp: 25248 (match): 25249 (jsRegExpExecute): 25250 * pcre/pcre_internal.h: 25251 * pcre/pcre_xclass.cpp: 25252 25253 2007-11-24 Eric Seidel <eric (a] webkit.org> 25254 25255 Reviewed by Maciej. 25256 25257 clean up formating in compile_branch 25258 25259 * pcre/pcre_compile.cpp: 25260 (compile_branch): 25261 25262 2007-11-24 Eric Seidel <eric (a] webkit.org> 25263 25264 Reviewed by Sam. 25265 25266 Fix spacing for read_repeat_counts 25267 25268 * pcre/pcre_compile.cpp: 25269 (read_repeat_counts): 25270 25271 2007-11-24 Eric Seidel <eric (a] webkit.org> 25272 25273 Reviewed by Sam. 25274 25275 Get rid of PCRE custom char types 25276 25277 * pcre/pcre_compile.cpp: 25278 (check_escape): 25279 (complete_callout): 25280 (compile_branch): 25281 (compile_regex): 25282 (calculateCompiledPatternLengthAndFlags): 25283 (jsRegExpCompile): 25284 * pcre/pcre_exec.cpp: 25285 (match_ref): 25286 (match): 25287 (jsRegExpExecute): 25288 * pcre/pcre_internal.h: 25289 25290 2007-11-24 Eric Seidel <eric (a] webkit.org> 25291 25292 Reviewed by Sam. 25293 25294 reformat get_othercase_range 25295 25296 * pcre/pcre_compile.cpp: 25297 (get_othercase_range): 25298 25299 2007-11-24 Eric Seidel <eric (a] webkit.org> 25300 25301 Reviewed by Maciej. 25302 25303 Remove register keyword and more cleanup 25304 25305 * pcre/pcre_compile.cpp: 25306 (find_fixedlength): 25307 (compile_branch): 25308 (is_anchored): 25309 (is_startline): 25310 (find_firstassertedchar): 25311 (calculateCompiledPatternLengthAndFlags): 25312 (jsRegExpCompile): 25313 * pcre/pcre_exec.cpp: 25314 (MatchStack::canUseStackBufferForNextFrame): 25315 (MatchStack::allocateNextFrame): 25316 (MatchStack::pushNewFrame): 25317 (MatchStack::frameIsStackAllocated): 25318 (MatchStack::popCurrentFrame): 25319 (MatchStack::unrollAnyHeapAllocatedFrames): 25320 (getUTF8CharAndIncrementLength): 25321 (match): 25322 (jsRegExpExecute): 25323 * pcre/pcre_internal.h: 25324 (PUT2INC): 25325 (isLeadingSurrogate): 25326 (isTrailingSurrogate): 25327 (decodeSurrogatePair): 25328 (getChar): 25329 * pcre/pcre_ord2utf8.cpp: 25330 (_pcre_ord2utf8): 25331 * pcre/pcre_xclass.cpp: 25332 (getUTF8CharAndAdvancePointer): 25333 (_pcre_xclass): 25334 25335 2007-11-24 Eric Seidel <eric (a] webkit.org> 25336 25337 Reviewed by Maciej. 25338 25339 Clean up jsRegExpExecute 25340 25341 * pcre/pcre_compile.cpp: 25342 (returnError): 25343 (jsRegExpCompile): 25344 * pcre/pcre_exec.cpp: 25345 (jsRegExpExecute): 25346 * pcre/pcre_internal.h: 25347 25348 2007-11-29 Oliver Hunt <oliver (a] apple.com> 25349 25350 Reviewed by Geoff. 25351 25352 Merging updated system alloc and spinlock code from r38 of TCMalloc. 25353 25354 This is needed as a precursor to the merge of TCMalloc proper. 25355 25356 * wtf/FastMalloc.cpp: 25357 (WTF::TCMalloc_PageHeap::GrowHeap): 25358 * wtf/TCSpinLock.h: 25359 (TCMalloc_SpinLock::TCMalloc_SpinLock): 25360 (TCMalloc_SpinLock::): 25361 (TCMalloc_SpinLock::Lock): 25362 (TCMalloc_SpinLock::Unlock): 25363 (TCMalloc_SpinLock::IsHeld): 25364 * wtf/TCSystemAlloc.cpp: 25365 (TrySbrk): 25366 (TryMmap): 25367 (TryVirtualAlloc): 25368 (TryDevMem): 25369 (TCMalloc_SystemAlloc): 25370 * wtf/TCSystemAlloc.h: 25371 25372 2007-11-28 Brady Eidson <beidson (a] apple.com> 25373 25374 Reviewed by Geoff 25375 25376 Add copyKeysToVector utility, mirroring copyValuesToVector 25377 Also change the copyValuesToVector implementation to be a little more attractive 25378 25379 * wtf/HashMap.h: 25380 (WTF::copyKeysToVector): 25381 (WTF::copyValuesToVector): 25382 25383 2007-11-27 Alp Toker <alp (a] atoker.com> 25384 25385 Reviewed by Mark Rowe. 25386 25387 Add a list of public JavaScriptCore headers for installation. 25388 25389 This follows the convention used for the Qt and GTK+ header lists. 25390 25391 * headers.pri: Added. 25392 25393 2007-11-27 Alp Toker <alp (a] atoker.com> 25394 25395 Prospective MSVC build fix. 25396 25397 Roll back dllexport/dllimport support for now. 25398 25399 * API/JSBase.h: 25400 25401 2007-11-27 Alp Toker <alp (a] atoker.com> 25402 25403 Reviewed by Maciej. 25404 25405 http://bugs.webkit.org/show_bug.cgi?id=15569 25406 [gtk] GTK JavaScriptCore needs to export symbols for JSC API and WTF 25407 25408 Introduce JS_EXPORT to mark symbols to be exported as public API. 25409 25410 Export all public symbols in the JavaScriptCore C API. 25411 25412 This matches conventions for exporting symbols set by the CF and CG 25413 frameworks. 25414 25415 * API/JSBase.h: 25416 * API/JSContextRef.h: 25417 * API/JSObjectRef.h: 25418 * API/JSStringRef.h: 25419 * API/JSStringRefBSTR.h: 25420 * API/JSStringRefCF.h: 25421 * API/JSValueRef.h: 25422 25423 2007-11-27 Anders Carlsson <andersca (a] apple.com> 25424 25425 Reviewed by Adam. 25426 25427 Make PropertyNameArray and ScopeChain COMEnumVariant friendly. 25428 25429 * kjs/PropertyNameArray.cpp: 25430 (KJS::PropertyNameArray::swap): 25431 Implement PropertyNameArray::swap. 25432 25433 * kjs/PropertyNameArray.h: 25434 Add ValueType typedef. Replace PropertyNameArrayIterator with 25435 PropertyNameArray::const_iterator. 25436 25437 * kjs/nodes.cpp: 25438 (KJS::ForInNode::execute): 25439 * kjs/scope_chain.cpp: 25440 (KJS::ScopeChain::print): 25441 Update for changes to PropertyNameArray. 25442 25443 * kjs/scope_chain.h: 25444 Add const_iterator and ValueType typedef. 25445 25446 2007-11-27 Anders Carlsson <andersca (a] apple.com> 25447 25448 Reviewed by Darin. 25449 25450 Add a ValueType typedef. 25451 25452 * wtf/Vector.h: 25453 25454 2007-11-26 Darin Adler <darin (a] apple.com> 25455 25456 Reviewed by Mitz. 25457 25458 - fix http://bugs.webkit.org/show_bug.cgi?id=16096 25459 REGRESSION (r26653-r26699): Plaxo.com addressbook does not load in webkit nightlies 25460 25461 Test: fast/js/regexp-overflow.html 25462 25463 * pcre/pcre_compile.cpp: (calculateCompiledPatternLengthAndFlags): 25464 Removed a stray "ptr++" that I added by accident when merging the 25465 changes between PCRE 6.4 and 6.5. 25466 25467 2007-11-26 Geoffrey Garen <ggaren (a] apple.com> 25468 25469 Reviewed by Kevin McCullough. 25470 25471 Fixed <rdar://problem/5597937> REGRESSION (r27126): Drosera does not 25472 show variables (can't enumerate ActivationImp properties) 25473 25474 Implemented a custom ActivationImp::getPropertyNames, since 25475 ActivationImp now uses a custom property storage mechanism for local 25476 variables. 25477 25478 * kjs/function.cpp: 25479 (KJS::ActivationImp::getPropertyNames): 25480 * kjs/function.h: 25481 25482 2007-11-26 Alp Toker <alp (a] atoker.com> 25483 25484 GTK+/Qt/Wx build fix for breakage introduced in r28039. 25485 25486 * ForwardingHeaders/JavaScriptCore/JSRetainPtr.h: Added. 25487 25488 2007-11-24 Laszlo Gombos <laszlo.gombos (a] gmail.com> 25489 25490 Reviewed by Maciej Stachowiak. 25491 25492 Fix minor compiler warning (GCC 4.1.3) 25493 25494 * pcre/pcre_internal.h: 25495 * pcre/pcre_ucp_searchfuncs.cpp: 25496 (_pcre_ucp_othercase): 25497 25498 2007-11-25 Mark Rowe <mrowe (a] apple.com> 25499 25500 Reviewed by Dan Bernstein. 25501 25502 Fix http://bugs.webkit.org/show_bug.cgi?id=16129 25503 Bug 16129: REGRESSION (r27761-r27811): malloc error while visiting http://mysit.es (crashes release build) 25504 25505 * pcre/pcre_compile.cpp: Change errorcode to be passed by reference so that any error code is propagated 25506 to our caller like they expect. 25507 25508 2007-11-23 Kevin Ollivier <kevino (a] theolliviers.com> 25509 25510 MSVC7 build fix. (rand_s doesn't exist there) 25511 25512 Reviewed by Adam Roben. 25513 25514 * kjs/config.h: 25515 * wtf/MathExtras.h: 25516 25517 2007-11-23 Kevin Ollivier <kevino (a] theolliviers.com> 25518 25519 wx build fix. Move WX_PYTHON logic into project build settings, 25520 add WebKitLibraries dirs on Win, and explicitly include JSCore 25521 headers in testkjs rather than getting them from a template. 25522 (Include dir order of JSCore/WTF and ICU headers is important due 25523 to wtf/unicode/utf8.h.) 25524 25525 * jscore.bkl: 25526 25527 2007-11-23 Simon Hausmann <hausmann (a] webkit.org> 25528 25529 Reviewed by George Staikos <staikos (a] kde.org>. 25530 25531 Fix make (dist)clean on Windows. 25532 25533 OBJECTS_DIR_WTR does not exist anymore, use GENERATED_SOURCES_DIR. 25534 25535 25536 * JavaScriptCore.pri: 25537 * pcre/pcre.pri: 25538 25539 2007-11-22 Simon Hausmann <hausmann (a] kde.org> 25540 25541 Reviewed by George. 25542 25543 Make the directory of where to put the generated sources configurable through the GENERATED_SOURCE_DIR variable 25544 25545 * JavaScriptCore.pri: 25546 * pcre/pcre.pri: 25547 25548 2007-11-22 Simon Hausmann <hausmann (a] kde.org> 25549 25550 Reviewed by George. 25551 25552 Centralize the setup for all the extra compilers in a addExtraCompiler function. 25553 25554 This allows adding a "generated_files" target that builds all generated files using "make generated_files". 25555 For the build inside Qt we do not generate actual rules for the extra compilers but instead 25556 do the variable substitution of compiler.output manually and add the generated sources to SOURCES. 25557 25558 * JavaScriptCore.pri: 25559 * pcre/pcre.pri: 25560 25561 2007-11-20 Mark Rowe <mrowe (a] apple.com> 25562 25563 Reviewed by Tim Hatcher. 25564 25565 <rdar://problem/5602936> Need to resolve new GCC 4.2 warnings 25566 25567 Fix all warnings emitted by GCC 4.2 when building JavaScriptCore. This allows builds with 25568 -Werror to succeed. At present they will crash when executed due to code that is not safe 25569 under strict aliasing (<rdar://problem/5536806>). 25570 25571 * Configurations/Base.xcconfig: Remove the -Wno-long-double flag. 25572 * kjs/date_object.cpp: 25573 (KJS::formatTime): Test whether the stack-allocated string is empty rather than at a non-null address. 25574 * kjs/dtoa.cpp: 25575 (Bigint::): Tweak formatting to silence warnings. 25576 * pcre/pcre_exec.cpp: 25577 (match): Tweak formatting to silence warnings 25578 * wtf/Assertions.cpp: Add printf format attribute to functions that warrant it. 25579 * wtf/Assertions.h: Ditto. 25580 25581 2007-11-19 Kevin Ollivier <kevino (a] theolliviers.com> 25582 25583 wx port build fix (wx headers include ctype functions). 25584 25585 * kjs/config.h: 25586 25587 2007-11-19 Kevin Ollivier <kevino (a] theolliviers.com> 25588 25589 Remove outdated and unused Windows port files. 25590 25591 Reviewed by Adam Roben. 25592 25593 * Makefile.vc: Removed. 25594 * README-Win32.txt: Removed. 25595 25596 2007-11-18 Eric Seidel <eric (a] webkit.org> 25597 25598 Reviewed by Oliver. 25599 25600 * tests/mozilla/jsDriver.pl: exit non-0 when user aborts test run 25601 25602 2007-11-17 Mark Rowe <mrowe (a] apple.com> 25603 25604 Reviewed by Darin Adler. 25605 25606 Fix: <rdar://problem/5607032> REGRESSION: testapi exits with assertion failure in debug build 25607 <rdar://problem/5440659> JSGlobalContextCreate throws away globalObjectClass's prototype 25608 http://bugs.webkit.org/show_bug.cgi?id=16033 25609 25610 Split Interpreter's initialization into two distinct steps: the creation of the global prototypes 25611 and constructors, and storing them on the global object. This allows JSClassRef's passed to 25612 JSGlobalContextCreate to be instantiated with the correct prototype. 25613 25614 * API/JSCallbackObject.cpp: Assert at compile-time that the custom global object will fit in a collector cell. 25615 * API/JSCallbackObject.h: 25616 * API/JSCallbackObjectFunctions.h: 25617 (KJS::::JSCallbackObject): 25618 (KJS::::init): 25619 * API/JSContextRef.cpp: 25620 (JSGlobalContextCreate): Construct and set the interpreter's global object separately. When globalObjectClass 25621 is passed we need to set the interpreter's global object before doing the JSCallbackObject's initialization to 25622 prevent any JSObjectInitializeCallback's being invoked before a global object is set. 25623 * API/testapi.c: 25624 (globalObject_initialize): Test the object passed in is correct and that it has the expected global properties. 25625 (globalObject_get): 25626 (globalObject_set): 25627 (main): 25628 * API/testapi.js: Test that any static properties exposed by the global object's custom class are found. 25629 * JavaScriptCore.exp: 25630 * bindings/testbindings.cpp: 25631 (main): Update for changes in Interpreter method signatures. 25632 * bindings/testbindings.mm: 25633 (main): Ditto. 25634 * kjs/ExecState.cpp: 25635 (KJS::ExecState::ExecState): 25636 (KJS::ExecState::mark): 25637 (KJS::ExecState::setGlobalObject): 25638 * kjs/ExecState.h: Rename scope to m_scopeChain. 25639 * kjs/interpreter.cpp: 25640 (KJS::Interpreter::Interpreter): 25641 (KJS::Interpreter::init): 25642 (KJS::Interpreter::globalObject): 25643 (KJS::Interpreter::setGlobalObject): 25644 (KJS::Interpreter::resetGlobalObjectProperties): 25645 (KJS::Interpreter::createObjectsForGlobalObjectProperties): 25646 (KJS::Interpreter::setGlobalObjectProperties): Switch to using putDirect to ensure that the global object's put method 25647 cannot interfere with setting of the global properties. This prevents a user-written JSClassRef from attempting to 25648 call back into JavaScript from the initialization of the global object's members. 25649 * kjs/interpreter.h: 25650 * kjs/testkjs.cpp: 25651 (setupInterpreter): Update for changes in Interpreter method signatures. 25652 25653 2007-11-17 Mark Rowe <mrowe (a] apple.com> 25654 25655 Reviewed by Sam Weinig. 25656 25657 Prevent testapi from reporting false leaks. Clear out local variables pointing at 25658 JSObjectRefs to allow their values to be collected. 25659 25660 * API/testapi.c: 25661 (main): 25662 25663 2007-11-17 Mark Rowe <mrowe (a] apple.com> 25664 25665 Reviewed by Sam Weinig. 25666 25667 Prevent testapi from crashing if testapi.js can not be found by nil-checking the result of createStringWithContentsOfFile. 25668 25669 * API/testapi.c: 25670 (main): 25671 25672 2007-11-17 Alp Toker <alp (a] atoker.com> 25673 25674 Reviewed by Eric. 25675 25676 http://bugs.webkit.org/show_bug.cgi?id=16032 25677 JS minidom is not portable 25678 25679 Use a plain UTF-8 string instead of a CFString. 25680 25681 Print to stdout, not stderr like CFShow() would have done, since that 25682 behaviour seems unintentional. 25683 25684 * API/minidom.c: 25685 (main): 25686 25687 2007-11-17 Steve Falkenburg <sfalken (a] apple.com> 25688 25689 Windows build fix. 25690 25691 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 25692 25693 2007-11-16 Mark Rowe <mrowe (a] apple.com> 25694 25695 Windows build fix. 25696 25697 * kjs/lexer.cpp: 25698 (KJS::Lexer::record8): 25699 25700 2007-11-16 Mark Rowe <mrowe (a] apple.com> 25701 25702 Reviewed by Eric. 25703 25704 Replace strings, identifier, buffer8 and buffer16 members of Lexer with vectors. 25705 SunSpider claims this is a 0.7% speedup. 25706 25707 * kjs/lexer.cpp: 25708 (KJS::Lexer::Lexer): 25709 (KJS::Lexer::lex): 25710 (KJS::Lexer::record8): 25711 (KJS::Lexer::record16): 25712 (KJS::Lexer::scanRegExp): 25713 (KJS::Lexer::clear): 25714 (KJS::Lexer::makeIdentifier): 25715 (KJS::Lexer::makeUString): 25716 * kjs/lexer.h: 25717 * kjs/ustring.cpp: 25718 (KJS::UString::UString): Add a convenience constructor that takes a const Vector<UChar>&. 25719 * kjs/ustring.h: 25720 25721 2007-11-16 Adam Roben <aroben (a] apple.com> 25722 25723 Windows build fix 25724 25725 * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Add a new include path 25726 and ignore the int -> bool conversion warning. 25727 25728 2007-11-16 Alexey Proskuryakov <ap (a] webkit.org> 25729 25730 Fix Windows debug build. 25731 Rubber-stamped by Eric 25732 25733 * pcre/pcre_exec.cpp: (match): Removed ASSERT_NOT_REACHED assertions that were making MSVC 25734 complain about unreachable code. 25735 25736 2007-11-15 Mark Rowe <mrowe (a] apple.com> 25737 25738 Gtk build fix. 25739 25740 * kjs/Parser.cpp: 25741 25742 2007-11-15 Mark Rowe <mrowe (a] apple.com> 25743 25744 Mac build and header search path sanity fix. 25745 25746 Reviewed by Sam Weinig and Tim Hatcher. 25747 25748 Move base setting for HEADER_SEARCH_PATHS into Base.xcconfig, and extend 25749 it in JavaScriptCore.xcconfig. This removes the need to override it on a 25750 per-target basis inside the .xcodeproj file. 25751 25752 * Configurations/Base.xcconfig: 25753 * Configurations/JavaScriptCore.xcconfig: 25754 * JavaScriptCore.xcodeproj/project.pbxproj: 25755 25756 2007-11-15 Mark Rowe <mrowe (a] apple.com> 25757 25758 Qt build fix. 25759 25760 * kjs/Parser.h: 25761 25762 2007-11-15 Geoffrey Garen <ggaren (a] apple.com> 25763 25764 Reviewed by Eric Seidel. 25765 25766 Another round of grammar / parsing cleanup. 25767 25768 1. Created distinct parser calls for parsing function bodies vs 25769 programs. This will help later with optimizing global variable access. 25770 25771 2. Turned Parser into a singleton. Cleaned up Lexer's singleton 25772 interface. 25773 25774 3. Modified Lexer to free a little more memory when done lexing. (Added 25775 FIXMEs for similar issues that I didn't fix.) 25776 25777 4. Changed Lexer::makeIdentifier and Lexer::makeUString to start 25778 respecting the arguments passed to them. (No behavior change, but this 25779 problem could have caused serious problems for an unsuspecting user of 25780 these functions.) 25781 25782 5. Removed KJS_DEBUG_MEM because it was bit-rotted. 25783 25784 6. Removed Parser::prettyPrint because the same work was simpler to do 25785 at the call site. 25786 25787 7. Some renames: 25788 25789 "Parser::accept" => "Parser::didFinishParsing" 25790 "Parser::sid" => "Parser::m_sourceID" 25791 "Lexer::doneParsing" => "Lexer::clear" 25792 "sid" => "sourceId" 25793 "lineno" => "lineNo" 25794 25795 * JavaScriptCore.exp: 25796 * kjs/Parser.cpp: 25797 (KJS::Parser::Parser): 25798 (KJS::Parser::parseProgram): 25799 (KJS::Parser::parseFunctionBody): 25800 (KJS::Parser::parse): 25801 (KJS::Parser::didFinishParsing): 25802 (KJS::parser): 25803 * kjs/Parser.h: 25804 (KJS::Parser::sourceId): 25805 * kjs/function.cpp: 25806 (KJS::GlobalFuncImp::callAsFunction): 25807 * kjs/function_object.cpp: 25808 (FunctionObjectImp::construct): 25809 * kjs/grammar.y: 25810 * kjs/interpreter.cpp: 25811 (KJS::Interpreter::checkSyntax): 25812 (KJS::Interpreter::evaluate): 25813 * kjs/interpreter.h: 25814 * kjs/lexer.cpp: 25815 (kjsyylex): 25816 (KJS::lexer): 25817 (KJS::Lexer::Lexer): 25818 (KJS::Lexer::~Lexer): 25819 (KJS::Lexer::scanRegExp): 25820 (KJS::Lexer::doneParsing): 25821 (KJS::Lexer::makeIdentifier): 25822 (KJS::Lexer::makeUString): 25823 * kjs/lexer.h: 25824 (KJS::Lexer::pattern): 25825 (KJS::Lexer::flags): 25826 (KJS::Lexer::sawError): 25827 * kjs/nodes.cpp: 25828 (KJS::Node::Node): 25829 (KJS::FunctionBodyNode::FunctionBodyNode): 25830 * kjs/nodes.h: 25831 * kjs/testkjs.cpp: 25832 (prettyPrintScript): 25833 (kjsmain): 25834 * kjs/ustring.cpp: 25835 * kjs/ustring.h: 25836 25837 2007-11-15 Oliver Hunt <oliver (a] apple.com> 25838 25839 Reviewed by Darin. 25840 25841 <rdar://problem/5601548> REGRESSION: All SourceElements and their children leak after a syntax error 25842 25843 Add a stub node to maintain the Vector of SourceElements until assignment. 25844 25845 * kjs/grammar.y: 25846 * kjs/nodes.h: 25847 (KJS::SourceElementsStub::SourceElementsStub): 25848 (KJS::SourceElementsStub::append): 25849 (KJS::SourceElementsStub::release): 25850 (KJS::SourceElementsStub::): 25851 (KJS::SourceElementsStub::precedence): 25852 25853 2007-11-15 Eric Seidel <eric (a] webkit.org> 25854 25855 Reviewed by Sam. 25856 25857 Abstract most of RMATCH into MatchStack functions. 25858 25859 SunSpider claims this, combined with the last 2 patches was a 1% speedup, 10% for dna-regexp. 25860 25861 * pcre/pcre_exec.cpp: 25862 (MatchStack::canUseStackBufferForNextFrame): 25863 (MatchStack::allocateNextFrame): 25864 (MatchStack::pushNewFrame): 25865 (MatchStack::frameIsStackAllocated): 25866 (MatchStack::popCurrentFrame): 25867 (MatchStack::unrollAnyHeapAllocatedFrames): 25868 (match): 25869 25870 2007-11-15 Eric Seidel <eric (a] webkit.org> 25871 25872 Reviewed by Sam. 25873 25874 Remove RETURN_ERROR, add MatchStack 25875 25876 * pcre/pcre_exec.cpp: 25877 (MatchStack::MatchStack): 25878 (MatchStack::unrollAnyHeapAllocatedFrames): 25879 (matchError): 25880 (match): 25881 25882 2007-11-15 Eric Seidel <eric (a] webkit.org> 25883 25884 Reviewed by Sam. 25885 25886 Clean up match function to match WebKit style 25887 25888 * JavaScriptCore.xcodeproj/project.pbxproj: 25889 * pcre/pcre_exec.cpp: 25890 (match): 25891 25892 2007-11-15 Steve Falkenburg <sfalken (a] apple.com> 25893 25894 Windows build fix. 25895 25896 * JavaScriptCore.vcproj/JavaScriptCore.make: 25897 25898 2007-11-14 Alexey Proskuryakov <ap (a] webkit.org> 25899 25900 Reviewed by Darin. 25901 25902 http://bugs.webkit.org/show_bug.cgi?id=15982 25903 Improve JSString UTF-8 decoding 25904 25905 * API/JSStringRef.cpp: 25906 (JSStringCreateWithUTF8CString): Use strict decoding, return 0 on error. 25907 25908 * wtf/unicode/UTF8.cpp: 25909 (WTF::Unicode::convertUTF16ToUTF8): 25910 (WTF::Unicode::convertUTF8ToUTF16): 25911 * wtf/unicode/UTF8.h: 25912 Made these function names start with a lower case letter. 25913 25914 * kjs/ustring.cpp: (KJS::UString::UTF8String): Updated for the above renaming. 25915 25916 * bindings/c/c_utility.cpp: 25917 (KJS::Bindings::convertUTF8ToUTF16WithLatin1Fallback): Renamed to highlight the difference 25918 from convertUTF8ToUTF16 in wtf/unicode. 25919 (KJS::Bindings::convertNPStringToUTF16): Updated for the above renaming. 25920 (KJS::Bindings::identifierFromNPIdentifier): Ditto. 25921 * bindings/c/c_utility.h: Made convertUTF8ToUTF16WithLatin1Fallback() a file static. 25922 25923 2007-11-14 Sam Weinig <sam (a] webkit.org> 25924 25925 Rubber-stamped by Anders. 25926 25927 Fix the Xcode project file after it was messed up in r27402. 25928 25929 * JavaScriptCore.xcodeproj/project.pbxproj: 25930 25931 2007-11-14 Eric Seidel <eric (a] webkit.org> 25932 25933 Reviewed by Oliver. 25934 25935 More PCRE style cleanup. 25936 25937 * pcre/pcre_compile.cpp: 25938 (compile_regex): 25939 25940 2007-11-14 Adam Roben <aroben (a] apple.com> 25941 25942 Clean up the bison conflict checking script 25943 25944 Reviewed by Geoff. 25945 25946 * DerivedSources.make: 25947 25948 2007-11-14 Eric Seidel <eric (a] webkit.org> 25949 25950 Reviewed by Geoff. 25951 25952 Another round of PCRE cleanups: inlines 25953 25954 SunSpider claims that this, combined with my previous PCRE cleanup were a 0.7% speedup, go figure. 25955 25956 * pcre/pcre_compile.cpp: 25957 (jsRegExpCompile): 25958 * pcre/pcre_exec.cpp: 25959 (match): 25960 (jsRegExpExecute): 25961 * pcre/pcre_internal.h: 25962 (PUT): 25963 (GET): 25964 (PUT2): 25965 (GET2): 25966 (isNewline): 25967 25968 2007-11-14 Eric Seidel <eric (a] webkit.org> 25969 25970 Reviewed by Sam. 25971 25972 Give PCRE a (small) bath. 25973 Fix some formating and break things off into separate functions 25974 http://bugs.webkit.org/show_bug.cgi?id=15993 25975 25976 * pcre/pcre_compile.cpp: 25977 (calculateCompiledPatternLengthAndFlags): 25978 (printCompiledRegExp): 25979 (returnError): 25980 (jsRegExpCompile): 25981 * pcre/pcre_internal.h: 25982 (compile_data::compile_data): 25983 25984 2007-11-14 Geoffrey Garen <ggaren (a] apple.com> 25985 25986 Reviewed by Eric Seidel. 25987 25988 Cleaned up the JavaScript grammar a bit. 25989 25990 1. Changed BlockNode to always hold a child vector (which may be empty), 25991 eliminating a few NULL-check branches in the common execution case. 25992 25993 2. Changed the Block production to correctly report its starting and 25994 ending line numbers to the debugger. (It used to report its ending line 25995 as its starting line.) Also, removed duplicate line-reporting code 25996 inside the BlockNode constructor. 25997 25998 3. Moved curly braces up from FunctionBody production into parent 25999 productions. (I had to move the line number reporting code, too, since 26000 it depends on the location of the curly braces.) This matches the ECMA 26001 spec more closely, and makes some future changes I plan easier. 26002 26003 4. Fixed statementList* convenience functions to deal appropriately with 26004 empty Vectors. 26005 26006 SunSpider reports a small and statistically insignificant speedup. 26007 26008 * kjs/grammar.y: 26009 * kjs/nodes.cpp: 26010 (KJS::statementListPushFIFO): 26011 (KJS::statementListGetDeclarations): 26012 (KJS::statementListInitializeDeclarationStack): 26013 (KJS::statementListInitializeVariableAccessStack): 26014 (KJS::BlockNode::BlockNode): 26015 (KJS::BlockNode::optimizeVariableAccess): 26016 (KJS::BlockNode::getDeclarations): 26017 (KJS::BlockNode::execute): 26018 (KJS::FunctionBodyNode::initializeDeclarationStacks): 26019 (KJS::FunctionBodyNode::optimizeVariableAccess): 26020 26021 2007-11-13 Anders Carlsson <andersca (a] apple.com> 26022 26023 Add RefCounted.h (And remove Shared.h) 26024 26025 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 26026 26027 2007-11-13 Geoffrey Garen <ggaren (a] apple.com> 26028 26029 Build fix. 26030 26031 * kjs/regexp.h: 26032 26033 2007-11-13 Geoffrey Garen <ggaren (a] apple.com> 26034 26035 Reviewed by Anders Carlsson. 26036 26037 Renamed Shared to RefCounted. 26038 26039 * API/JSClassRef.h: 26040 * JavaScriptCore.xcodeproj/project.pbxproj: 26041 * kjs/interpreter.h: 26042 * kjs/regexp.h: 26043 * wtf/RefCounted.h: Copied from JavaScriptCore/wtf/Shared.h. 26044 (WTF::RefCounted::RefCounted): 26045 * wtf/Shared.h: Removed. 26046 26047 2007-11-13 Adam Roben <aroben (a] apple.com> 26048 26049 Build fix 26050 26051 Reviewed by Geoff. 26052 26053 * kjs/regexp.h: Added a missing #include. 26054 26055 2007-11-13 Geoffrey Garen <ggaren (a] apple.com> 26056 26057 Reviewed by Sam Weinig. 26058 26059 Moved Shared.h into wtf so it could be used in more places. Deployed 26060 Shared in places where JSCore previously had hand-rolled ref-counting 26061 classes. 26062 26063 * API/JSClassRef.cpp: 26064 (OpaqueJSClass::OpaqueJSClass): 26065 * API/JSClassRef.h: 26066 * API/JSObjectRef.cpp: 26067 (JSClassRetain): 26068 (JSClassRelease): 26069 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 26070 * JavaScriptCore.xcodeproj/project.pbxproj: 26071 * kjs/interpreter.cpp: 26072 (KJS::Interpreter::init): 26073 * kjs/interpreter.h: 26074 * kjs/regexp.cpp: 26075 (KJS::RegExp::RegExp): 26076 * kjs/regexp.h: 26077 * wtf/Shared.h: Copied from WebCore/platform/Shared.h. 26078 26079 2007-11-13 Eric Seidel <eric (a] webkit.org> 26080 26081 Reviewed by Maciej. 26082 26083 Add an ASSERT to getTruncatedInt32 to enforce proper usage. 26084 Best part about this patch? It doesn't break the web! 26085 26086 * kjs/JSImmediate.h: 26087 (KJS::JSImmediate::getTruncatedInt32): 26088 (KJS::JSImmediate::toDouble): 26089 (KJS::JSImmediate::getUInt32): 26090 26091 2007-11-13 Alexey Proskuryakov <ap (a] webkit.org> 26092 26093 Windows build fix. 26094 26095 * bindings/c/c_utility.cpp: 26096 (KJS::Bindings::convertUTF8ToUTF16): 26097 * kjs/ustring.cpp: 26098 (KJS::UString::UTF8String): 26099 * wtf/unicode/UTF8.cpp: 26100 (WTF::Unicode::ConvertUTF8ToUTF16): 26101 26102 2007-11-13 Darin Adler <darin (a] apple.com> 26103 26104 Reviewed by Geoff. 26105 26106 - fix http://bugs.webkit.org/show_bug.cgi?id=11231 26107 RegExp bug when handling newline characters 26108 and a number of other differences between PCRE behvior 26109 and JavaScript regular expressions: 26110 26111 + single-digit sequences like \4 should be treated as octal 26112 character constants, unless there is a sufficient number 26113 of brackets for them to be treated as backreferences 26114 26115 + \8 turns into the character "8", not a binary zero character 26116 followed by "8" (same for 9) 26117 26118 + only the first 3 digits should be considered part of an 26119 octal character constant (the old behavior was to decode 26120 an arbitrarily long sequence and then mask with 0xFF) 26121 26122 + if \x is followed by anything other than two valid hex digits, 26123 then it should simply be treated a the letter "x"; that includes 26124 not supporting the \x{41} syntax 26125 26126 + if \u is followed by anything less than four valid hex digits, 26127 then it should simply be treated a the letter "u" 26128 26129 + an extra "+" should be a syntax error, rather than being treated 26130 as the "possessive quantifier" 26131 26132 + if a "]" character appears immediately after a "[" character that 26133 starts a character class, then that's an empty character class, 26134 rather than being the start of a character class that includes a 26135 "]" character 26136 26137 + a "$" should not match a terminating newline; we could have gotten 26138 PCRE to handle this the way we wanted by passing an appropriate option 26139 26140 Test: fast/js/regexp-no-extensions.html 26141 26142 * pcre/pcre_compile.cpp: 26143 (check_escape): Check backreferences against bracount to catch both 26144 overflows and things that should be treated as octal. Rewrite octal 26145 loop to not go on indefinitely. Rewrite both hex loops to match and 26146 remove \x{} support. 26147 (compile_branch): Restructure loops so that we don't special-case a "]" 26148 at the beginning of a character class. Remove code that treated "+" as 26149 the possessive quantifier. 26150 (jsRegExpCompile): Change the "]" handling here too. 26151 26152 * pcre/pcre_exec.cpp: (match): Changed CIRC to match the DOLL implementation. 26153 Changed DOLL to remove handling of "terminating newline", a Perl concept 26154 which we don't need. 26155 26156 * tests/mozilla/expected.html: Two tests are fixed now: 26157 ecma_3/RegExp/regress-100199.js and ecma_3/RegExp/regress-188206.js. 26158 One test fails now: ecma_3/RegExp/perlstress-002.js -- our success before 26159 was due to a bug (we treated all 1-character numeric escapes as backreferences). 26160 The date tests also now both expect success -- whatever was making them fail 26161 before was probably due to the time being close to a DST shift; maybe we need 26162 to get rid of those tests. 26163 26164 2007-11-13 Darin Adler <darin (a] apple.com> 26165 26166 * kjs/JSImmediate.h: (KJS::JSImmediate::getTruncatedInt32): 26167 Remove too-strong assert that was firing constantly and preventing even basic 26168 web browsing from working in a debug build. This function is used in many 26169 cases where the immediate value is not a number; the assertion could perhaps 26170 be added back later with a bit of reorganization. 26171 26172 2007-11-13 Alp Toker <alp (a] atoker.com> 26173 26174 Build fix for breakage to non-Mac builds introduced in r27746. 26175 26176 * kjs/ustring.cpp: 26177 26178 2007-11-13 Eric Seidel <eric (a] webkit.org> 26179 26180 Reviewed by Maciej. 26181 26182 Clean up evaluateToBoolean functions to use inlines instead of copy/paste code 26183 26184 * kjs/JSImmediate.h: 26185 * kjs/nodes.cpp: 26186 (KJS::GreaterNode::inlineEvaluateToBoolean): 26187 (KJS::GreaterNode::evaluate): 26188 (KJS::LessEqNode::inlineEvaluateToBoolean): 26189 (KJS::LessEqNode::evaluate): 26190 (KJS::GreaterEqNode::inlineEvaluateToBoolean): 26191 (KJS::GreaterEqNode::evaluate): 26192 (KJS::InNode::evaluateToBoolean): 26193 (KJS::EqualNode::inlineEvaluateToBoolean): 26194 (KJS::EqualNode::evaluate): 26195 (KJS::NotEqualNode::inlineEvaluateToBoolean): 26196 (KJS::NotEqualNode::evaluate): 26197 (KJS::StrictEqualNode::inlineEvaluateToBoolean): 26198 (KJS::StrictEqualNode::evaluate): 26199 (KJS::NotStrictEqualNode::inlineEvaluateToBoolean): 26200 (KJS::NotStrictEqualNode::evaluate): 26201 * kjs/nodes.h: 26202 26203 2007-11-12 Geoffrey Garen <ggaren (a] apple.com> 26204 26205 Reviewed by Sam Weinig. 26206 26207 Fixed http://bugs.webkit.org/show_bug.cgi?id=15958 26208 base64 spends 1.1% of total time checking for special Infinity case 26209 26210 Use a fast character test instead of calling strncmp. 26211 26212 1.1% speedup on string-base64. SunSpider reports a .4% speedup overall; 26213 Sharks reports only .1%. Who are you going to believe? Huh? 26214 26215 * kjs/ustring.cpp: 26216 (KJS::UString::toDouble): 26217 26218 2007-11-12 Eric Seidel <eric (a] webkit.org> 26219 26220 Reviewed by Oliver. 26221 26222 Add evaluateToInt32 and evaluateUInt32 methods and deploy them. 26223 Fix a few missing evaluateToBoolean methods 26224 Deploy all evaluateTo* functions to more nodes to avoid slowdowns 26225 http://bugs.webkit.org/show_bug.cgi?id=15950 26226 26227 SunSpider claims this is at least a 1.4% speedup. 26228 26229 * kjs/JSImmediate.h: 26230 (KJS::JSImmediate::getTruncatedInt32): 26231 (KJS::JSImmediate::toDouble): 26232 (KJS::JSImmediate::getUInt32): 26233 * kjs/nodes.cpp: 26234 (KJS::ExpressionNode::evaluateToNumber): 26235 (KJS::ExpressionNode::evaluateToInt32): 26236 (KJS::ExpressionNode::evaluateToUInt32): 26237 (KJS::NumberNode::evaluateToInt32): 26238 (KJS::NumberNode::evaluateToUInt32): 26239 (KJS::ImmediateNumberNode::evaluateToInt32): 26240 (KJS::ImmediateNumberNode::evaluateToUInt32): 26241 (KJS::ResolveNode::evaluate): 26242 (KJS::ResolveNode::evaluateToNumber): 26243 (KJS::ResolveNode::evaluateToBoolean): 26244 (KJS::ResolveNode::evaluateToInt32): 26245 (KJS::ResolveNode::evaluateToUInt32): 26246 (KJS::LocalVarAccessNode::evaluateToInt32): 26247 (KJS::LocalVarAccessNode::evaluateToUInt32): 26248 (KJS::BracketAccessorNode::evaluateToNumber): 26249 (KJS::BracketAccessorNode::evaluateToBoolean): 26250 (KJS::BracketAccessorNode::evaluateToInt32): 26251 (KJS::BracketAccessorNode::evaluateToUInt32): 26252 (KJS::DotAccessorNode::inlineEvaluate): 26253 (KJS::DotAccessorNode::evaluate): 26254 (KJS::DotAccessorNode::evaluateToNumber): 26255 (KJS::DotAccessorNode::evaluateToBoolean): 26256 (KJS::DotAccessorNode::evaluateToInt32): 26257 (KJS::DotAccessorNode::evaluateToUInt32): 26258 (KJS::NewExprNode::inlineEvaluate): 26259 (KJS::NewExprNode::evaluate): 26260 (KJS::NewExprNode::evaluateToNumber): 26261 (KJS::NewExprNode::evaluateToBoolean): 26262 (KJS::NewExprNode::evaluateToInt32): 26263 (KJS::NewExprNode::evaluateToUInt32): 26264 (KJS::FunctionCallResolveNode::inlineEvaluate): 26265 (KJS::FunctionCallResolveNode::evaluate): 26266 (KJS::FunctionCallResolveNode::evaluateToNumber): 26267 (KJS::FunctionCallResolveNode::evaluateToBoolean): 26268 (KJS::FunctionCallResolveNode::evaluateToInt32): 26269 (KJS::FunctionCallResolveNode::evaluateToUInt32): 26270 (KJS::LocalVarFunctionCallNode::evaluate): 26271 (KJS::LocalVarFunctionCallNode::evaluateToNumber): 26272 (KJS::LocalVarFunctionCallNode::evaluateToBoolean): 26273 (KJS::LocalVarFunctionCallNode::evaluateToInt32): 26274 (KJS::LocalVarFunctionCallNode::evaluateToUInt32): 26275 (KJS::FunctionCallDotNode::evaluate): 26276 (KJS::FunctionCallDotNode::evaluateToNumber): 26277 (KJS::FunctionCallDotNode::evaluateToBoolean): 26278 (KJS::FunctionCallDotNode::evaluateToInt32): 26279 (KJS::FunctionCallDotNode::evaluateToUInt32): 26280 (KJS::PostDecLocalVarNode::inlineEvaluateToNumber): 26281 (KJS::PostDecLocalVarNode::evaluateToNumber): 26282 (KJS::PostDecLocalVarNode::evaluateToBoolean): 26283 (KJS::PostDecLocalVarNode::evaluateToInt32): 26284 (KJS::PostDecLocalVarNode::evaluateToUInt32): 26285 (KJS::typeStringForValue): 26286 (KJS::UnaryPlusNode::evaluate): 26287 (KJS::UnaryPlusNode::evaluateToBoolean): 26288 (KJS::UnaryPlusNode::evaluateToNumber): 26289 (KJS::UnaryPlusNode::evaluateToInt32): 26290 (KJS::BitwiseNotNode::inlineEvaluateToInt32): 26291 (KJS::BitwiseNotNode::evaluate): 26292 (KJS::BitwiseNotNode::evaluateToNumber): 26293 (KJS::BitwiseNotNode::evaluateToBoolean): 26294 (KJS::BitwiseNotNode::evaluateToInt32): 26295 (KJS::MultNode::evaluateToBoolean): 26296 (KJS::MultNode::evaluateToInt32): 26297 (KJS::MultNode::evaluateToUInt32): 26298 (KJS::DivNode::evaluateToInt32): 26299 (KJS::DivNode::evaluateToUInt32): 26300 (KJS::ModNode::evaluateToBoolean): 26301 (KJS::ModNode::evaluateToInt32): 26302 (KJS::ModNode::evaluateToUInt32): 26303 (KJS::AddNode::evaluateToNumber): 26304 (KJS::AddNode::evaluateToInt32): 26305 (KJS::AddNode::evaluateToUInt32): 26306 (KJS::AddNumbersNode::evaluateToInt32): 26307 (KJS::AddNumbersNode::evaluateToUInt32): 26308 (KJS::SubNode::evaluateToInt32): 26309 (KJS::SubNode::evaluateToUInt32): 26310 (KJS::LeftShiftNode::inlineEvaluateToInt32): 26311 (KJS::LeftShiftNode::evaluate): 26312 (KJS::LeftShiftNode::evaluateToNumber): 26313 (KJS::LeftShiftNode::evaluateToInt32): 26314 (KJS::RightShiftNode::inlineEvaluateToInt32): 26315 (KJS::RightShiftNode::evaluate): 26316 (KJS::RightShiftNode::evaluateToNumber): 26317 (KJS::RightShiftNode::evaluateToInt32): 26318 (KJS::UnsignedRightShiftNode::inlineEvaluateToUInt32): 26319 (KJS::UnsignedRightShiftNode::evaluate): 26320 (KJS::UnsignedRightShiftNode::evaluateToNumber): 26321 (KJS::UnsignedRightShiftNode::evaluateToInt32): 26322 (KJS::LessNode::inlineEvaluateToBoolean): 26323 (KJS::LessNode::evaluate): 26324 (KJS::LessNode::evaluateToBoolean): 26325 (KJS::LessNumbersNode::inlineEvaluateToBoolean): 26326 (KJS::LessNumbersNode::evaluate): 26327 (KJS::LessNumbersNode::evaluateToBoolean): 26328 (KJS::LessStringsNode::inlineEvaluateToBoolean): 26329 (KJS::LessStringsNode::evaluate): 26330 (KJS::BitAndNode::evaluate): 26331 (KJS::BitAndNode::inlineEvaluateToInt32): 26332 (KJS::BitAndNode::evaluateToNumber): 26333 (KJS::BitAndNode::evaluateToBoolean): 26334 (KJS::BitAndNode::evaluateToInt32): 26335 (KJS::BitXOrNode::inlineEvaluateToInt32): 26336 (KJS::BitXOrNode::evaluate): 26337 (KJS::BitXOrNode::evaluateToNumber): 26338 (KJS::BitXOrNode::evaluateToBoolean): 26339 (KJS::BitXOrNode::evaluateToInt32): 26340 (KJS::BitOrNode::inlineEvaluateToInt32): 26341 (KJS::BitOrNode::evaluate): 26342 (KJS::BitOrNode::evaluateToNumber): 26343 (KJS::BitOrNode::evaluateToBoolean): 26344 (KJS::BitOrNode::evaluateToInt32): 26345 (KJS::ConditionalNode::evaluateToNumber): 26346 (KJS::ConditionalNode::evaluateToInt32): 26347 (KJS::ConditionalNode::evaluateToUInt32): 26348 (KJS::valueForReadModifyAssignment): 26349 (KJS::AssignExprNode::evaluate): 26350 (KJS::AssignExprNode::evaluateToBoolean): 26351 (KJS::AssignExprNode::evaluateToNumber): 26352 (KJS::AssignExprNode::evaluateToInt32): 26353 (KJS::VarDeclNode::handleSlowCase): 26354 * kjs/nodes.h: 26355 (KJS::FunctionCallResolveNode::precedence): 26356 (KJS::AddNode::precedence): 26357 (KJS::AddNode::): 26358 (KJS::LessNumbersNode::): 26359 (KJS::LessStringsNode::): 26360 * kjs/value.cpp: 26361 (KJS::JSValue::toInt32SlowCase): 26362 (KJS::JSValue::toUInt32SlowCase): 26363 * kjs/value.h: 26364 (KJS::JSValue::asCell): 26365 (KJS::JSValue::toInt32): 26366 (KJS::JSValue::toUInt32): 26367 26368 2007-11-12 Alexey Proskuryakov <ap (a] webkit.org> 26369 26370 Reviewed by Darin. 26371 26372 http://bugs.webkit.org/show_bug.cgi?id=15953 26373 Add UTF-8 encoding/decoding to WTF 26374 26375 * kjs/ustring.h: Moved UTF8SequenceLength() and decodeUTF8Sequence() to wtf/unicode. 26376 * kjs/ustring.cpp: (KJS::UString::UTF8String): Changed this function to take a strict/lenient 26377 parameter. Callers are not interested in getting decoding results in strict mode, so 26378 this allows for bailing out as soon as an error is seen. 26379 26380 * kjs/function.cpp: 26381 (KJS::encode): Updated for new UString::UTF8String() signature. 26382 26383 * API/JSStringRef.cpp: 26384 (JSStringCreateWithCharacters): Disambiguate UChar. 26385 (JSStringCreateWithUTF8CString): Actually use UTF-8 when creating the string! 26386 * bindings/c/c_utility.cpp: (KJS::Bindings::convertUTF8ToUTF16): Use ConvertUTF8ToUTF16(). 26387 26388 * wtf/unicode/UTF8.cpp: Added. 26389 (WTF::Unicode::inlineUTF8SequenceLengthNonASCII): 26390 (WTF::Unicode::inlineUTF8SequenceLength): 26391 (WTF::Unicode::UTF8SequenceLength): 26392 (WTF::Unicode::decodeUTF8Sequence): 26393 (WTF::Unicode::): 26394 (WTF::Unicode::ConvertUTF16ToUTF8): 26395 (WTF::Unicode::isLegalUTF8): 26396 (WTF::Unicode::ConvertUTF8ToUTF16): 26397 * wtf/unicode/UTF8.h: Added. 26398 (WTF::Unicode::): 26399 Some code moved from ustring.h, some adapted from unicode.org sources. 26400 26401 * JavaScriptCore.exp: 26402 * JavaScriptCore.pri: 26403 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 26404 * JavaScriptCore.xcodeproj/project.pbxproj: 26405 * JavaScriptCoreSources.bkl: 26406 Added UTF8.{h,cpp} 26407 26408 2007-11-12 Josh Aas <joshmoz (a] gmail.com> 26409 26410 Reviewed by Darin. 26411 26412 - http://bugs.webkit.org/show_bug.cgi?id=15946 26413 add NPPValue NPPVpluginDrawingModel (Mozilla bug 403418 compat) 26414 26415 * bindings/npapi.h: 26416 26417 2007-11-12 Darin Adler <darin (a] apple.com> 26418 26419 Reviewed by Sam. 26420 26421 - http://bugs.webkit.org/show_bug.cgi?id=15951 26422 REGRESSION: assertion failure in regexp match() when running JS tests 26423 26424 Test: fast/js/regexp-many-brackets.html 26425 26426 * pcre/pcre_exec.cpp: (match): Added back accidentally-removed case for 26427 the BRANUMBER opcode. 26428 26429 2007-11-12 Darin Adler <darin (a] apple.com> 26430 26431 Reviewed by Geoff. 26432 26433 - fix use of prefix and config.h, got rid of a few unneeded things in 26434 the PCRE code; no behavior changes 26435 26436 * API/JSBase.cpp: Added include of config.h. 26437 * API/JSCallbackConstructor.cpp: Ditto. 26438 * API/JSCallbackFunction.cpp: Ditto. 26439 * API/JSCallbackObject.cpp: Ditto. 26440 * API/JSClassRef.cpp: Ditto. 26441 * API/JSContextRef.cpp: Ditto. 26442 * API/JSObjectRef.cpp: Ditto. 26443 * API/JSStringRef.cpp: Ditto. 26444 * API/JSValueRef.cpp: Ditto. 26445 26446 * JavaScriptCorePrefix.h: Removed obsolete <ctype.h> workaround. 26447 Moved new/delete macros after includes, as they are in WebCore's prefix. 26448 Removed "config.h". 26449 26450 * pcre/dftables.cpp: (main): Changed back to not use a separate maketables 26451 function. This is needed for PCRE, but not helpful for our use. Also changed 26452 the tables to all be 128 entries long instead of 256, since only the first 26453 128 are ever used. 26454 26455 * pcre/pcre_compile.cpp: Added include of config.h. Eliminated digitab, 26456 which was only being used to check hex digits. Changed all uses of TRUE and 26457 FALSE to use the C++ true and false instead. 26458 (check_escape): Just the TRUE/FALSE thing. 26459 (is_counted_repeat): Ditto. 26460 (could_be_empty_branch): Ditto. 26461 (get_othercase_range): Ditto. 26462 (compile_branch): Ditto. 26463 (compile_regex): Ditto. 26464 (is_anchored): Ditto. 26465 (is_startline): Ditto. 26466 (find_firstassertedchar): Ditto. 26467 (jsRegExpCompile): Ditto. 26468 26469 * pcre/pcre_exec.cpp: Added include of config.h. Changed all uses of TRUE and 26470 FALSE to use the C++ true and false instead. 26471 (match_ref): Just the TRUE/FALSE thing. 26472 (match): Ditto. Removed some unneeded braces. 26473 (jsRegExpExecute): Just the TRUE/FALSE thing. 26474 26475 * pcre/pcre_internal.h: Moved the constants needed by dftables.cpp to the top 26476 of the file instead of the bottom, so they can be used. Also changed the table 26477 sizes to 128 instead of 256. Removed macro definitions of FALSE and TRUE. 26478 Set array sizes for all the const arrays. Changed _pcre_utf8_table1_size to 26479 be a macro instead of a extern int. 26480 26481 * pcre/pcre_maketables.cpp: Removed. It's all in dftables.cpp now. 26482 26483 * pcre/pcre_tables.cpp: Made table sizes explicit. 26484 26485 * pcre/pcre_xclass.cpp: Just the TRUE/FALSE thing. 26486 26487 2007-11-12 Adam Roben <aroben (a] apple.com> 26488 26489 Build fix 26490 26491 * wtf/FastMalloc.h: Add missing using statement. 26492 26493 2007-11-11 Oliver Hunt <oliver (a] apple.com> 26494 26495 Reviewed by Darin. 26496 26497 Add special fastZeroedMalloc function to replace a 26498 number of fastCalloc calls where one argument was 1. 26499 26500 This results in a 0.4% progression in SunSpider, more 26501 than making up for the earlier regression caused by 26502 additional overflow checks. 26503 26504 * JavaScriptCore.exp: 26505 * kjs/array_instance.cpp: 26506 * kjs/property_map.cpp: 26507 * wtf/FastMalloc.cpp: 26508 * wtf/FastMalloc.h: 26509 * wtf/HashTable.h: 26510 26511 2007-11-11 Adam Roben <aroben (a] apple.com> 26512 26513 Fix <rdar://5578982> ASSERT in HashTable::checkTableConsistencyExceptSize beneath WebNotificationCenter 26514 26515 The bug was due to a mismatch between HashMap::remove and 26516 HashTable::checkTableConsistency. HashMap::remove can delete the value 26517 stored in the HashTable (by derefing it), which is not normally 26518 allowed by HashTable. It's OK in this case because the value is about 26519 to be removed from the table, but HashTable wasn't aware of this. 26520 26521 HashMap::remove now performs the consistency check itself before 26522 derefing the value. 26523 26524 Darin noticed that the same bug would occur in HashSet, so I've fixed 26525 it there as well. 26526 26527 Reviewed by Darin. 26528 26529 * wtf/HashMap.h: 26530 (WTF::HashMap::remove): Perform the HashTable consistency check 26531 manually before calling deref. 26532 * wtf/HashSet.h: 26533 (WTF::HashSet::remove): Ditto. 26534 * wtf/HashTable.h: Made checkTableConsistency public so that HashMap 26535 and HashSet can call it. 26536 (WTF::HashTable::removeAndInvalidateWithoutEntryConsistencyCheck): 26537 Added. 26538 (WTF::HashTable::removeAndInvalidate): Added. 26539 (WTF::HashTable::remove): 26540 (WTF::HashTable::removeWithoutEntryConsistencyCheck): Added. 26541 26542 2007-11-11 Mark Rowe <mrowe (a] apple.com> 26543 26544 Build fix. Use the correct filename case. 26545 26546 * kjs/nodes.h: 26547 26548 2007-11-11 Geoffrey Garen <ggaren (a] apple.com> 26549 26550 Reviewed by Sam Weinig. 26551 26552 Fixed http://bugs.webkit.org/show_bug.cgi?id=15902 26553 15% of string-validate-input.js is spent compiling the same regular expression 26554 26555 Store a compiled representation of the regular expression in the AST. 26556 26557 Only a .2% SunSpider speedup overall, but a 10.6% speedup on 26558 string-validate-input.js. 26559 26560 * kjs/nodes.cpp: 26561 (KJS::RegExpNode::evaluate): 26562 * kjs/nodes.h: 26563 (KJS::RegExpNode::): 26564 * kjs/nodes2string.cpp: 26565 (KJS::RegExpNode::streamTo): 26566 * kjs/regexp.cpp: 26567 (KJS::RegExp::flags): 26568 * kjs/regexp.h: 26569 (KJS::RegExp::pattern): 26570 * kjs/regexp_object.cpp: 26571 (KJS::RegExpObjectImp::construct): 26572 (KJS::RegExpObjectImp::createRegExpImp): 26573 * kjs/regexp_object.h: 26574 26575 2007-11-11 Oliver Hunt <oliver (a] apple.com> 26576 26577 Reviewed by Eric. 26578 26579 Partial fix for <rdar://problem/5585334> numfuzz: integer overflows opening malformed SVG file in WebCore::ImageBuffer::create 26580 26581 Unfortunately this is a very slight regression, but is unavoidable. 26582 26583 * wtf/FastMalloc.cpp: 26584 26585 2007-11-10 Eric Seidel <eric (a] webkit.org> 26586 26587 Reviewed by darin. 26588 26589 Add simple type inferencing to the parser, and create custom 26590 AddNode and LessNode subclasses based on inferred types. 26591 http://bugs.webkit.org/show_bug.cgi?id=15884 26592 26593 SunSpider claims this is at least a 0.5% speedup. 26594 26595 * JavaScriptCore.exp: 26596 * kjs/grammar.y: 26597 * kjs/internal.cpp: 26598 (KJS::NumberImp::getPrimitiveNumber): 26599 (KJS::GetterSetterImp::getPrimitiveNumber): 26600 * kjs/internal.h: 26601 * kjs/lexer.cpp: 26602 (KJS::Lexer::lex): 26603 * kjs/nodes.cpp: 26604 (KJS::Node::Node): 26605 (KJS::StringNode::evaluate): 26606 (KJS::StringNode::evaluateToNumber): 26607 (KJS::StringNode::evaluateToBoolean): 26608 (KJS::RegExpNode::evaluate): 26609 (KJS::UnaryPlusNode::optimizeVariableAccess): 26610 (KJS::AddNode::evaluate): 26611 (KJS::AddNode::evaluateToNumber): 26612 (KJS::AddNumbersNode::inlineEvaluateToNumber): 26613 (KJS::AddNumbersNode::evaluate): 26614 (KJS::AddNumbersNode::evaluateToNumber): 26615 (KJS::AddStringsNode::evaluate): 26616 (KJS::AddStringLeftNode::evaluate): 26617 (KJS::AddStringRightNode::evaluate): 26618 (KJS::lessThan): 26619 (KJS::lessThanEq): 26620 (KJS::LessNumbersNode::evaluate): 26621 (KJS::LessStringsNode::evaluate): 26622 * kjs/nodes.h: 26623 (KJS::ExpressionNode::): 26624 (KJS::RegExpNode::): 26625 (KJS::RegExpNode::precedence): 26626 (KJS::TypeOfResolveNode::): 26627 (KJS::LocalVarTypeOfNode::): 26628 (KJS::UnaryPlusNode::): 26629 (KJS::UnaryPlusNode::precedence): 26630 (KJS::AddNode::): 26631 (KJS::AddNode::precedence): 26632 (KJS::AddNumbersNode::): 26633 (KJS::AddStringLeftNode::): 26634 (KJS::AddStringRightNode::): 26635 (KJS::AddStringsNode::): 26636 (KJS::LessNode::): 26637 (KJS::LessNode::precedence): 26638 (KJS::LessNumbersNode::): 26639 (KJS::LessStringsNode::): 26640 * kjs/nodes2string.cpp: 26641 (KJS::StringNode::streamTo): 26642 * kjs/object.cpp: 26643 * kjs/object.h: 26644 * kjs/value.h: 26645 (KJS::JSValue::getPrimitiveNumber): 26646 26647 2007-11-11 Darin Adler <darin (a] apple.com> 26648 26649 - try another way of fixing dftables builds -- refactor pcre_internal.h a bit 26650 26651 * pcre/pcre_internal.h: Make most of this header do nothing when DFTABLES is set. 26652 Later we can break it into two files. 26653 26654 * JavaScriptCore.vcproj/dftables/dftables.vcproj: Take out now-unneeded include paths. 26655 * pcre/dftables.cpp: Set DFTABLES. Use delete instead of free. 26656 * pcre/dftables.pro: Take out now-unneeded include paths. 26657 * pcre/pcre_maketables.cpp: Use new instead of malloc. 26658 26659 2007-11-11 Darin Adler <darin (a] apple.com> 26660 26661 * pcre/dftables.pro: Try fixing Qt builds (I looked at qt-win) by adding 26662 another include path. 26663 26664 2007-11-11 Darin Adler <darin (a] apple.com> 26665 26666 * JavaScriptCore.xcodeproj/project.pbxproj: Try fixing Mac Tiger builds 26667 by adding another include path. 26668 26669 2007-11-11 Darin Adler <darin (a] apple.com> 26670 26671 Reviewed by Sam. 26672 26673 - http://bugs.webkit.org/show_bug.cgi?id=15924 26674 next round of changes to JSRegExp (formerly PCRE) 26675 26676 This is a combination of converting to C++, tweaking the API, and adding 26677 some additional optimizations. 26678 26679 Future steps will involve getting rid of the use of UTF-8 completely 26680 (we'll use UTF-16 exclusively instead), eliminating more source files, 26681 and some more speed-ups. 26682 26683 SunSpider says the current round is an 0.9% speed-up overall, and a 26684 5.3% speed-up for regexp. 26685 26686 * JavaScriptCore.exp: Updated for new entry points. 26687 26688 * JavaScriptCore.pri: 26689 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 26690 * JavaScriptCore.vcproj/dftables/dftables.vcproj: 26691 * JavaScriptCore.xcodeproj/project.pbxproj: 26692 * JavaScriptCoreSources.bkl: 26693 * jscore.bkl: 26694 Updated for new source file names and ForwardingHeaders. 26695 26696 * kjs/regexp.cpp: 26697 (KJS::RegExp::RegExp): Changed to use the error message without calling 26698 strdup on it and to pass the new types and options. 26699 (KJS::RegExp::~RegExp): Removed the now-unneeded free of the error message. 26700 (KJS::RegExp::match): Pass the new types and options. 26701 * kjs/regexp.h: Update type of m_constructionError. 26702 26703 * pcre/AUTHORS: Update to reflect the status of the project -- we don't include 26704 the Google parts, and this isn't the PCRE library, per se. 26705 * pcre/COPYING: Ditto. 26706 26707 * pcre/dftables.cpp: Copied from JavaScriptCore/pcre/dftables.c. 26708 (main): Removed unneeded ctype_digit. 26709 26710 * pcre/pcre.h: Convert to C++, tweak API a bit. Use UChar instead of JSRegExpChar. 26711 26712 * pcre/pcre_compile.cpp: Copied from JavaScriptCore/pcre/pcre_compile.c. 26713 Moved a lot of private stuff used only within this file here from pcre_internal.h. 26714 Renumbered the error codes. 26715 (error_text): Use a single string with embedded nulls for the error text (I got 26716 this idea from newer versions of PCRE). 26717 (check_escape): Changed return type to be enum instead of int. Replaced ctype_digit 26718 uses with isASCIIDigit. 26719 (is_counted_repeat): Ditto. 26720 (read_repeat_counts): Ditto. 26721 (first_significant_code): Ditto. 26722 (find_fixedlength): Ditto. 26723 (could_be_empty_branch): Ditto. 26724 (compile_branch): Ditto. Also removed some code that handles changing options. 26725 JavaScript doesn't have any of the features that allow options to change. 26726 (compile_regex): Updated for change to options parameter. 26727 (is_anchored): Ditto. 26728 (find_firstassertedchar): Ditto. 26729 (jsRegExpCompile): Changed to take separate flags instead of an options int. 26730 Also changed to call new/delete instead of pcre_malloc/free. 26731 (jsRegExpFree): Ditto. 26732 26733 * pcre/pcre_exec.cpp: Copied from JavaScriptCore/pcre/pcre_exec.c. 26734 Added a case that uses computed goto for the opcode loop, but did not turn it on. 26735 Changed the RMATCH macro to handle returns more efficiently by putting the where 26736 pointer in the new frame instead of the old one, allowing us to branch to the 26737 return with a single statement. Switched to new/delete from pcre_malloc/free. 26738 Changed many RRETURN callers to not set the return value since it's already 26739 set correctly. Replaced the rrc variable with an is_match variable. Values other 26740 than "match" and "no match" are now handled differently. This allows us to remove 26741 the code to check for those cases in various rules. 26742 (match): All the case statements use a macro BEGIN_OPCODE instead. And all the 26743 continue statements, or break statements that break out of the outer case use 26744 a macro NEXT_OPCODE instead. Replaced a few if statements with assertions. 26745 (jsRegExpExecute): Use new/delete instead of pcre_malloc/free. Removed unused 26746 start_match field from the match block. 26747 26748 * pcre/pcre_internal.h: Moved the last few configuration macros from pcre-config.h 26749 in here. Removed various unused types. Converted from JSRegExpChar to UChar. 26750 Eliminated pcre_malloc/free. Replaced the opcode enum with a macro that can be 26751 used in multiple places. Unfortunately we lose the comments for each opcode; we 26752 should find a place to put those back. Removed ctype_digit. 26753 26754 * pcre/pcre_maketables.cpp: Copied from JavaScriptCore/pcre/pcre_maketables.c. 26755 (pcre_maketables): Got rid of the conditional code that allows this to be compiled 26756 in -- it's only used for dftables now (and soon may be obsolete entirely). 26757 Changed code for cbit_digit to not use isdigit, and took the "_" case out of the 26758 loop. Removed ctype_digit. 26759 26760 * pcre/pcre_ord2utf8.cpp: Copied from JavaScriptCore/pcre/pcre_ord2utf8.c. 26761 26762 * pcre/pcre_tables.cpp: Copied from JavaScriptCore/pcre/pcre_tables.c. 26763 Moved _pcre_OP_lengths out of here into pcre_exec.cpp. 26764 26765 * pcre/pcre_ucp_searchfuncs.cpp: Copied from JavaScriptCore/pcre/pcre_ucp_searchfuncs.c. 26766 Updated for other file name changes. 26767 26768 * pcre/pcre_xclass.cpp: Copied from JavaScriptCore/pcre/pcre_xclass.c. 26769 26770 * pcre/ucpinternal.h: Updated header. 26771 26772 * pcre/ucptable.cpp: Copied from JavaScriptCore/pcre/ucptable.c. 26773 26774 * wtf/ASCIICType.h: (WTF::isASCIIDigit): Removed a branch by changing from && to 26775 & for this operation. Also added an overload that takes an int because that's 26776 useful for PCRE. Later we could optimize for int and overload other functions in 26777 this file; stuck to this simple one for now. 26778 26779 * wtf/unicode/icu/UnicodeIcu.h: Removed unused isUpper. 26780 * wtf/unicode/qt4/UnicodeQt4.h: Ditto. 26781 26782 * pcre/LICENCE: Removed. 26783 * pcre/pcre-config.h: Removed. 26784 * wtf/FastMallocPCRE.cpp: Removed. 26785 26786 * pcre/dftables.c: Renamed to cpp. 26787 * pcre/pcre_compile.c: Ditto. 26788 * pcre/pcre_exec.c: Ditto. 26789 * pcre/pcre_maketables.c: Ditto. 26790 * pcre/pcre_ord2utf8.c: Ditto. 26791 * pcre/pcre_tables.c: Ditto. 26792 * pcre/pcre_ucp_searchfuncs.c: Ditto. 26793 * pcre/pcre_xclass.c: Ditto. 26794 * pcre/ucptable.c: Ditto. 26795 26796 2007-11-11 Eric Seidel <eric (a] webkit.org> 26797 26798 Reviewed by Oliver. 26799 26800 Add KJS_CHECKEXCEPTIONBOOLEAN to match rest of nodes.cpp 26801 26802 * kjs/nodes.cpp: 26803 (KJS::ExpressionNode::evaluateToBoolean): 26804 (KJS::LessNode::evaluateToBoolean): 26805 (KJS::GreaterNode::evaluateToBoolean): 26806 (KJS::LessEqNode::evaluateToBoolean): 26807 (KJS::GreaterEqNode::evaluateToBoolean): 26808 (KJS::InstanceOfNode::evaluateToBoolean): 26809 (KJS::InNode::evaluateToBoolean): 26810 (KJS::EqualNode::evaluateToBoolean): 26811 (KJS::NotEqualNode::evaluateToBoolean): 26812 (KJS::StrictEqualNode::evaluateToBoolean): 26813 (KJS::NotStrictEqualNode::evaluateToBoolean): 26814 (KJS::LogicalAndNode::evaluateToBoolean): 26815 (KJS::LogicalOrNode::evaluateToBoolean): 26816 (KJS::ConditionalNode::evaluateToBoolean): 26817 26818 2007-11-10 Darin Adler <darin (a] apple.com> 26819 26820 Reviewed by Sam. 26821 26822 - fix http://bugs.webkit.org/show_bug.cgi?id=15927 26823 REGRESSION(r27487): delete a.c followed by __defineGetter__("c", ...) incorrectly deletes another property 26824 and <rdar://problem/5586384> REGRESSION (r27487): Can't switch out of Edit HTML Source mode on Leopard Wiki 26825 26826 Test: fast/js/delete-then-put.html 26827 26828 * kjs/property_map.cpp: 26829 (KJS::PropertyMap::put): Added a missing "- 1"; code to find an empty slot was not working. 26830 (KJS::PropertyMap::checkConsistency): Added a missing range check that would have caught this 26831 problem before. 26832 26833 - roll out a last-minute change to my evaluateToBoolean patch that was incorrect. 26834 26835 * kjs/nodes.h: (KJS::ExprStatementNode::ExprStatementNode): Take out call to 26836 optimizeForUnnecessaryResult, since the result is used in some cases. 26837 26838 2007-11-10 Adam Roben <aroben (a] apple.com> 26839 26840 Windows build fix 26841 26842 Roll out some changes that were (seemingly accidentally) checked in 26843 with r27664. 26844 26845 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 26846 26847 2007-11-10 Darin Adler <darin (a] apple.com> 26848 26849 Reviewed by Sam. 26850 26851 - http://bugs.webkit.org/show_bug.cgi?id=15915 26852 add an evaluation path for booleans like the one we have for numbers 26853 26854 Gives 1.1% on SunSpider. 26855 26856 * kjs/grammar.y: Create TrueNode and FalseNode instead of BooleanNode. 26857 26858 * kjs/nodes.h: Changed to use Noncopyable. Moved optimizeForUnnecessaryResult 26859 down from Node to ExpressionNode. Changed some classes to not inherit from 26860 ExpressionNode where not necessary, and removed unnneeded evaluate functions 26861 as well as evaluate functions that need not be virtual. Call the 26862 optimizeForUnnecessaryResult function on the start of a for loop too. 26863 * kjs/nodes.cpp: 26864 (KJS::ExpressionNode::evaluateToBoolean): Added. 26865 (KJS::FalseNode::evaluate): Added. 26866 (KJS::TrueNode::evaluate): Added. 26867 (KJS::NumberNode::evaluateToBoolean): Added. 26868 (KJS::StringNode::evaluateToBoolean): Added. 26869 (KJS::LocalVarAccessNode::evaluateToBoolean): Added. 26870 (KJS::BracketAccessorNode::evaluateToBoolean): Added. 26871 (KJS::LogicalNotNode::evaluate): Changed to call evaluateToBoolean. 26872 (KJS::LogicalNotNode::evaluateToBoolean): Added. 26873 (KJS::lessThan): Changed to return bool. 26874 (KJS::lessThanEq): Ditto. 26875 (KJS::LessNode::evaluate): Changed since lessThan returns bool. 26876 (KJS::LessNode::evaluateToBoolean): Added. 26877 (KJS::GreaterNode::evaluate): Changed since lessThanEq returns bool. 26878 (KJS::GreaterNode::evaluateToBoolean): Added. 26879 (KJS::LessEqNode::evaluate): Changed since lessThanEq returns bool. 26880 (KJS::LessEqNode::evaluateToBoolean): Added. 26881 (KJS::GreaterEqNode::evaluate): Changed since lessThan returns bool. 26882 (KJS::GreaterEqNode::evaluateToBoolean): Added. 26883 (KJS::InstanceOfNode::evaluateToBoolean): Added. 26884 (KJS::InNode::evaluateToBoolean): Added. 26885 (KJS::EqualNode::evaluateToBoolean): Added. 26886 (KJS::NotEqualNode::evaluateToBoolean): Added. 26887 (KJS::StrictEqualNode::evaluateToBoolean): Added. 26888 (KJS::NotStrictEqualNode::evaluateToBoolean): Added. 26889 (KJS::ConditionalNode::evaluate): Changed to call evaluateToBoolean. 26890 (KJS::IfNode::execute): Ditto. 26891 (KJS::DoWhileNode::execute): Ditto. 26892 (KJS::WhileNode::execute): Ditto. 26893 (KJS::ForNode::execute): Ditto. 26894 26895 * kjs/nodes2string.cpp: 26896 (KJS::FalseNode::streamTo): Added. 26897 (KJS::TrueNode::streamTo): Added. 26898 26899 2007-11-09 Adam Roben <aroben (a] apple.com> 26900 26901 Windows build fix 26902 26903 Reviewed by Darin. 26904 26905 * kjs/value.h: 26906 (KJS::jsNumber): Add some explicit casts. 26907 26908 2007-11-08 Darin Adler <darin (a] apple.com> 26909 26910 - fix build 26911 26912 * kjs/grammar.y: 26913 * kjs/nodes.h: 26914 * kjs/property_map.cpp: 26915 26916 2007-11-08 Darin Adler <darin (a] apple.com> 26917 26918 - roll out accidentally-checked in changes 26919 26920 * kjs/nodes.cpp: Back to previous version. 26921 * kjs/nodes.h: Ditto. 26922 * kjs/grammar.y: Ditto. 26923 26924 2007-11-08 Darin Adler <darin (a] apple.com> 26925 26926 Reviewed by Maciej. 26927 26928 - http://bugs.webkit.org/show_bug.cgi?id=15912 26929 fasta spends a lot of time in qsort 26930 26931 * kjs/property_map.cpp: 26932 (KJS::PropertyMap::getEnumerablePropertyNames): 26933 Use insertion sort instead of qsort for small sets of property names. 26934 We can probably do some even-better speedups of for/in, but this nets 26935 0.6% overall and 6.7% on fasta. 26936 26937 2007-11-08 Darin Adler <darin (a] apple.com> 26938 26939 Reviewed by Maciej. 26940 26941 - http://bugs.webkit.org/show_bug.cgi?id=15906 26942 getting characters by indexing into a string is very slow 26943 26944 This fixes one source of the slowness -- the conversion to an unused 26945 Identifier as we call the get function from the slot -- but doesn't 26946 fix others, such as the fact that we have to allocate a new UString::Rep 26947 for every single character. 26948 26949 Speeds up string-base64 30%, and at least 0.5% overall. 26950 But does slow down access-fannkuch quite a bit. Might be worth 26951 revisiting in the future to see what we can do about that (although 26952 I did look at a profile for a while). 26953 26954 * kjs/property_slot.h: Add a new marker for "numeric" property slots; 26955 slots where we don't need to pass the identifier to the get function. 26956 (KJS::PropertySlot::getValue): Added code to call the numeric get function. 26957 (KJS::PropertySlot::setCustomNumeric): Added. 26958 * kjs/string_object.cpp: 26959 (KJS::StringInstance::indexGetter): Changed to use substr() instead 26960 of constructing a wholly new UString each time. 26961 (KJS::stringInstanceNumericPropertyGetter): Added. Like indexGetter, but 26962 takes advantage of setCustomNumeric to avoid creating an Identifier. 26963 (KJS::StringInstance::getOwnPropertySlot): Changed to use setCustomNumeric. 26964 26965 2007-11-08 Darin Adler <darin (a] apple.com> 26966 26967 Reviewed by Oliver. 26968 26969 - http://bugs.webkit.org/show_bug.cgi?id=15904 26970 more speed-ups possible by tightening up int version of JSImmediate 26971 26972 1% improvement of SunSpider 26973 26974 * kjs/JSImmediate.h: Eliminate the now-unneeded FPBitValues struct template. 26975 (KJS::JSImmediate::from): Overload for most numeric types; many types can 26976 do fewer branches and checks. 26977 (KJS::JSImmediate::getUInt32): Removed unneeded check for undefined. 26978 (KJS::JSImmediate::getTruncatedInt32): Ditto. 26979 (KJS::JSImmediate::getTruncatedUInt32): Ditto. There's no difference any more 26980 between getUInt32 and getTruncatedUInt32, so that's worth a rename and merge later. 26981 26982 * kjs/grammar.y: Update since fromDouble is now just from. 26983 * kjs/nodes.h: Ditto. 26984 26985 * kjs/value.h: (KJS::jsNumber): Overload for most numeric types. 26986 26987 2007-11-08 Kevin Ollivier <kevino (a] theolliviers.com> 26988 26989 Bakefiles for building JavaScriptCore, needed by wx port. 26990 26991 Reviewed by Mark Rowe. 26992 26993 * JavaScriptCoreSources.bkl: Added. 26994 * jscore.bkl: Added. 26995 26996 2007-11-08 Oliver Hunt <oliver (a] apple.com> 26997 26998 Reviewed by Maciej. 26999 27000 Fix regression caused by earlier bitwise and optimisation. 1 & undefined != 1. 27001 27002 The implementation of JSImmediate::areBothImmediateNumbers relies on 27003 (JSImmediate::getTag(immediate1) & JSImmediate::getTag(immediate2)) having 27004 a unique result when both immediate values are numbers. 27005 27006 The regression was due to UndefinedType & NumberType returning NumberType (3 & 1). 27007 By swapping the value of NumberType and UndefinedType this ceases to be a problem. 27008 27009 * kjs/JSType.h: 27010 27011 2007-11-08 Darin Adler <darin (a] apple.com> 27012 27013 - fix build 27014 27015 * kjs/nodes.h: Add missing parameter name. 27016 27017 2007-11-08 Eric Seidel <eric (a] webkit.org> 27018 27019 Reviewed by darin. 27020 27021 Add ExpressionNode subclass of Node, use it. 27022 27023 * kjs/grammar.y: 27024 * kjs/nodes.cpp: 27025 (KJS::ForInNode::ForInNode): 27026 * kjs/nodes.h: 27027 (KJS::ExpressionNode::): 27028 (KJS::NullNode::): 27029 (KJS::NullNode::precedence): 27030 (KJS::BooleanNode::): 27031 (KJS::BooleanNode::precedence): 27032 (KJS::RegExpNode::): 27033 (KJS::RegExpNode::precedence): 27034 (KJS::ThisNode::): 27035 (KJS::ThisNode::precedence): 27036 (KJS::ResolveNode::): 27037 (KJS::ElementNode::): 27038 (KJS::ArrayNode::): 27039 (KJS::PropertyNode::): 27040 (KJS::PropertyNode::precedence): 27041 (KJS::PropertyNode::name): 27042 (KJS::PropertyListNode::): 27043 (KJS::ObjectLiteralNode::): 27044 (KJS::ObjectLiteralNode::precedence): 27045 (KJS::BracketAccessorNode::): 27046 (KJS::DotAccessorNode::): 27047 (KJS::DotAccessorNode::precedence): 27048 (KJS::ArgumentListNode::): 27049 (KJS::ArgumentsNode::): 27050 (KJS::NewExprNode::): 27051 (KJS::NewExprNode::precedence): 27052 (KJS::FunctionCallValueNode::): 27053 (KJS::FunctionCallValueNode::precedence): 27054 (KJS::FunctionCallResolveNode::): 27055 (KJS::FunctionCallBracketNode::): 27056 (KJS::FunctionCallBracketNode::precedence): 27057 (KJS::FunctionCallDotNode::): 27058 (KJS::FunctionCallDotNode::precedence): 27059 (KJS::PrePostResolveNode::): 27060 (KJS::PostfixBracketNode::): 27061 (KJS::PostfixBracketNode::precedence): 27062 (KJS::PostIncBracketNode::): 27063 (KJS::PostIncBracketNode::isIncrement): 27064 (KJS::PostDecBracketNode::): 27065 (KJS::PostDecBracketNode::isIncrement): 27066 (KJS::PostfixDotNode::): 27067 (KJS::PostfixDotNode::precedence): 27068 (KJS::PostIncDotNode::): 27069 (KJS::PostIncDotNode::isIncrement): 27070 (KJS::PostDecDotNode::): 27071 (KJS::PostDecDotNode::isIncrement): 27072 (KJS::PostfixErrorNode::): 27073 (KJS::PostfixErrorNode::precedence): 27074 (KJS::DeleteResolveNode::): 27075 (KJS::DeleteBracketNode::): 27076 (KJS::DeleteBracketNode::precedence): 27077 (KJS::DeleteDotNode::): 27078 (KJS::DeleteDotNode::precedence): 27079 (KJS::DeleteValueNode::): 27080 (KJS::DeleteValueNode::precedence): 27081 (KJS::VoidNode::): 27082 (KJS::VoidNode::precedence): 27083 (KJS::TypeOfResolveNode::): 27084 (KJS::TypeOfValueNode::): 27085 (KJS::PrefixBracketNode::): 27086 (KJS::PrefixBracketNode::precedence): 27087 (KJS::PreIncBracketNode::): 27088 (KJS::PreIncBracketNode::isIncrement): 27089 (KJS::PreDecBracketNode::): 27090 (KJS::PreDecBracketNode::isIncrement): 27091 (KJS::PrefixDotNode::): 27092 (KJS::PrefixDotNode::precedence): 27093 (KJS::PreIncDotNode::): 27094 (KJS::PreIncDotNode::isIncrement): 27095 (KJS::PreDecDotNode::): 27096 (KJS::PreDecDotNode::isIncrement): 27097 (KJS::PrefixErrorNode::): 27098 (KJS::PrefixErrorNode::precedence): 27099 (KJS::UnaryPlusNode::): 27100 (KJS::UnaryPlusNode::precedence): 27101 (KJS::NegateNode::): 27102 (KJS::NegateNode::precedence): 27103 (KJS::BitwiseNotNode::): 27104 (KJS::BitwiseNotNode::precedence): 27105 (KJS::LogicalNotNode::): 27106 (KJS::LogicalNotNode::precedence): 27107 (KJS::AddNode::): 27108 (KJS::AddNode::precedence): 27109 (KJS::LeftShiftNode::): 27110 (KJS::LeftShiftNode::precedence): 27111 (KJS::RightShiftNode::): 27112 (KJS::RightShiftNode::precedence): 27113 (KJS::UnsignedRightShiftNode::): 27114 (KJS::UnsignedRightShiftNode::precedence): 27115 (KJS::LessNode::): 27116 (KJS::LessNode::precedence): 27117 (KJS::GreaterNode::): 27118 (KJS::GreaterNode::precedence): 27119 (KJS::LessEqNode::): 27120 (KJS::LessEqNode::precedence): 27121 (KJS::GreaterEqNode::): 27122 (KJS::GreaterEqNode::precedence): 27123 (KJS::InstanceOfNode::): 27124 (KJS::InstanceOfNode::precedence): 27125 (KJS::InNode::): 27126 (KJS::InNode::precedence): 27127 (KJS::EqualNode::): 27128 (KJS::EqualNode::precedence): 27129 (KJS::NotEqualNode::): 27130 (KJS::NotEqualNode::precedence): 27131 (KJS::StrictEqualNode::): 27132 (KJS::StrictEqualNode::precedence): 27133 (KJS::NotStrictEqualNode::): 27134 (KJS::NotStrictEqualNode::precedence): 27135 (KJS::BitAndNode::): 27136 (KJS::BitAndNode::precedence): 27137 (KJS::BitOrNode::): 27138 (KJS::BitOrNode::precedence): 27139 (KJS::BitXOrNode::): 27140 (KJS::BitXOrNode::precedence): 27141 (KJS::LogicalAndNode::): 27142 (KJS::LogicalAndNode::precedence): 27143 (KJS::LogicalOrNode::): 27144 (KJS::LogicalOrNode::precedence): 27145 (KJS::ConditionalNode::): 27146 (KJS::ConditionalNode::precedence): 27147 (KJS::ReadModifyResolveNode::): 27148 (KJS::ReadModifyResolveNode::precedence): 27149 (KJS::AssignResolveNode::): 27150 (KJS::AssignResolveNode::precedence): 27151 (KJS::ReadModifyBracketNode::): 27152 (KJS::ReadModifyBracketNode::precedence): 27153 (KJS::AssignBracketNode::): 27154 (KJS::AssignBracketNode::precedence): 27155 (KJS::AssignDotNode::): 27156 (KJS::AssignDotNode::precedence): 27157 (KJS::ReadModifyDotNode::): 27158 (KJS::ReadModifyDotNode::precedence): 27159 (KJS::AssignErrorNode::): 27160 (KJS::AssignErrorNode::precedence): 27161 (KJS::CommaNode::): 27162 (KJS::CommaNode::precedence): 27163 (KJS::AssignExprNode::): 27164 (KJS::AssignExprNode::precedence): 27165 (KJS::ExprStatementNode::): 27166 (KJS::IfNode::): 27167 (KJS::DoWhileNode::): 27168 (KJS::WhileNode::): 27169 (KJS::ReturnNode::): 27170 (KJS::WithNode::): 27171 (KJS::ThrowNode::): 27172 (KJS::ParameterNode::): 27173 (KJS::CaseClauseNode::): 27174 (KJS::CaseClauseNode::precedence): 27175 (KJS::ClauseListNode::): 27176 (KJS::SwitchNode::): 27177 27178 2007-11-08 Oliver Hunt <oliver (a] apple.com> 27179 27180 Reviewed by Sam. 27181 27182 Add a fast path for bitwise-and of two immediate numbers for a 0.7% improvement in SunSpider (4% bitop improvement). 27183 27184 This only improves bitwise-and performance, as the additional logic required 27185 for similar code paths on or, xor, and shifting requires additional operations 27186 and branches that negate (and in certain cases, regress) any advantage we might 27187 otherwise receive. 27188 27189 This improves performance on all bitop tests, the cryptography tests, as well as 27190 the string-base64 and string-unpack-code tests. No significant degradation on 27191 any other tests. 27192 27193 * kjs/JSImmediate.h: 27194 (KJS::JSImmediate::areBothImmediateNumbers): 27195 (KJS::JSImmediate::andImmediateNumbers): 27196 * kjs/nodes.cpp: 27197 (KJS::BitAndNode::evaluate): 27198 * kjs/value.h: 27199 (KJS::jsNumberFromAnd): 27200 27201 2007-11-08 Adam Roben <aroben (a] apple.com> 27202 27203 Stop using KJS inside of MathExtras.h 27204 27205 Reviewed by Darin. 27206 27207 * wtf/MathExtras.h: Removed an unused header, and a now-unused 27208 forward-declaration. 27209 (wtf_atan2): Use std::numeric_limits intead of KJS. 27210 27211 2007-11-08 Sam Weinig <sam (a] webkit.org> 27212 27213 Windows build fix. 27214 27215 * kjs/date_object.cpp: 27216 (KJS::DateProtoFuncToLocaleString::callAsFunction): Fix unused arg warning. 27217 (KJS::DateProtoFuncToLocaleDateString::callAsFunction): ditto 27218 (KJS::DateProtoFuncToLocaleTimeString::callAsFunction): ditto 27219 27220 2007-11-08 Mark Rowe <mrowe (a] apple.com> 27221 27222 Gtk build fix. 27223 27224 * kjs/lookup.h: Add missing include. 27225 27226 2007-11-08 Sam Weinig <sam (a] webkit.org> 27227 27228 Reviewed by Darin. 27229 27230 Convert JavaScript internal function objects to use one class per 27231 function. This avoids a switch statement inside what used to be 27232 the shared function classes and will allow Shark to better analyze 27233 the code. 27234 27235 To make this switch, the value property of the HashEntry was changed 27236 to a union of an intptr_t (which is used to continue handle valueGetters) 27237 and function pointer which points to a static constructor for the 27238 individual new function objects. 27239 27240 SunSpider claims this is a 1.0% speedup. 27241 27242 * kjs/array_object.cpp: 27243 (KJS::ArrayPrototype::getOwnPropertySlot): 27244 (KJS::getProperty): 27245 (KJS::ArrayProtoFuncToString::callAsFunction): 27246 (KJS::ArrayProtoFuncToLocaleString::callAsFunction): 27247 (KJS::ArrayProtoFuncJoin::callAsFunction): 27248 (KJS::ArrayProtoFuncConcat::callAsFunction): 27249 (KJS::ArrayProtoFuncPop::callAsFunction): 27250 (KJS::ArrayProtoFuncPush::callAsFunction): 27251 (KJS::ArrayProtoFuncReverse::callAsFunction): 27252 (KJS::ArrayProtoFuncShift::callAsFunction): 27253 (KJS::ArrayProtoFuncSlice::callAsFunction): 27254 (KJS::ArrayProtoFuncSort::callAsFunction): 27255 (KJS::ArrayProtoFuncSplice::callAsFunction): 27256 (KJS::ArrayProtoFuncUnShift::callAsFunction): 27257 (KJS::ArrayProtoFuncFilter::callAsFunction): 27258 (KJS::ArrayProtoFuncMap::callAsFunction): 27259 (KJS::ArrayProtoFuncEvery::callAsFunction): 27260 (KJS::ArrayProtoFuncForEach::callAsFunction): 27261 (KJS::ArrayProtoFuncSome::callAsFunction): 27262 (KJS::ArrayProtoFuncIndexOf::callAsFunction): 27263 (KJS::ArrayProtoFuncLastIndexOf::callAsFunction): 27264 * kjs/array_object.h: 27265 (KJS::ArrayPrototype::classInfo): 27266 * kjs/create_hash_table: 27267 * kjs/date_object.cpp: 27268 (KJS::DatePrototype::getOwnPropertySlot): 27269 (KJS::DateProtoFuncToString::callAsFunction): 27270 (KJS::DateProtoFuncToUTCString::callAsFunction): 27271 (KJS::DateProtoFuncToDateString::callAsFunction): 27272 (KJS::DateProtoFuncToTimeString::callAsFunction): 27273 (KJS::DateProtoFuncToLocaleString::callAsFunction): 27274 (KJS::DateProtoFuncToLocaleDateString::callAsFunction): 27275 (KJS::DateProtoFuncToLocaleTimeString::callAsFunction): 27276 (KJS::DateProtoFuncValueOf::callAsFunction): 27277 (KJS::DateProtoFuncGetTime::callAsFunction): 27278 (KJS::DateProtoFuncGetFullYear::callAsFunction): 27279 (KJS::DateProtoFuncGetUTCFullYear::callAsFunction): 27280 (KJS::DateProtoFuncToGMTString::callAsFunction): 27281 (KJS::DateProtoFuncGetMonth::callAsFunction): 27282 (KJS::DateProtoFuncGetUTCMonth::callAsFunction): 27283 (KJS::DateProtoFuncGetDate::callAsFunction): 27284 (KJS::DateProtoFuncGetUTCDate::callAsFunction): 27285 (KJS::DateProtoFuncGetDay::callAsFunction): 27286 (KJS::DateProtoFuncGetUTCDay::callAsFunction): 27287 (KJS::DateProtoFuncGetHours::callAsFunction): 27288 (KJS::DateProtoFuncGetUTCHours::callAsFunction): 27289 (KJS::DateProtoFuncGetMinutes::callAsFunction): 27290 (KJS::DateProtoFuncGetUTCMinutes::callAsFunction): 27291 (KJS::DateProtoFuncGetSeconds::callAsFunction): 27292 (KJS::DateProtoFuncGetUTCSeconds::callAsFunction): 27293 (KJS::DateProtoFuncGetMilliSeconds::callAsFunction): 27294 (KJS::DateProtoFuncGetUTCMilliseconds::callAsFunction): 27295 (KJS::DateProtoFuncGetTimezoneOffset::callAsFunction): 27296 (KJS::DateProtoFuncSetTime::callAsFunction): 27297 (KJS::DateProtoFuncSetMilliSeconds::callAsFunction): 27298 (KJS::DateProtoFuncSetUTCMilliseconds::callAsFunction): 27299 (KJS::DateProtoFuncSetSeconds::callAsFunction): 27300 (KJS::DateProtoFuncSetUTCSeconds::callAsFunction): 27301 (KJS::DateProtoFuncSetMinutes::callAsFunction): 27302 (KJS::DateProtoFuncSetUTCMinutes::callAsFunction): 27303 (KJS::DateProtoFuncSetHours::callAsFunction): 27304 (KJS::DateProtoFuncSetUTCHours::callAsFunction): 27305 (KJS::DateProtoFuncSetDate::callAsFunction): 27306 (KJS::DateProtoFuncSetUTCDate::callAsFunction): 27307 (KJS::DateProtoFuncSetMonth::callAsFunction): 27308 (KJS::DateProtoFuncSetUTCMonth::callAsFunction): 27309 (KJS::DateProtoFuncSetFullYear::callAsFunction): 27310 (KJS::DateProtoFuncSetUTCFullYear::callAsFunction): 27311 (KJS::DateProtoFuncSetYear::callAsFunction): 27312 (KJS::DateProtoFuncGetYear::callAsFunction): 27313 * kjs/date_object.h: 27314 * kjs/lookup.cpp: 27315 (KJS::Lookup::find): 27316 * kjs/lookup.h: 27317 (KJS::HashEntry::): 27318 (KJS::staticFunctionGetter): 27319 (KJS::staticValueGetter): 27320 (KJS::getStaticPropertySlot): 27321 (KJS::getStaticFunctionSlot): 27322 (KJS::lookupPut): 27323 * kjs/math_object.cpp: 27324 (KJS::MathObjectImp::getOwnPropertySlot): 27325 (KJS::MathProtoFuncAbs::callAsFunction): 27326 (KJS::MathProtoFuncACos::callAsFunction): 27327 (KJS::MathProtoFuncASin::callAsFunction): 27328 (KJS::MathProtoFuncATan::callAsFunction): 27329 (KJS::MathProtoFuncATan2::callAsFunction): 27330 (KJS::MathProtoFuncCeil::callAsFunction): 27331 (KJS::MathProtoFuncCos::callAsFunction): 27332 (KJS::MathProtoFuncExp::callAsFunction): 27333 (KJS::MathProtoFuncFloor::callAsFunction): 27334 (KJS::MathProtoFuncLog::callAsFunction): 27335 (KJS::MathProtoFuncMax::callAsFunction): 27336 (KJS::MathProtoFuncMin::callAsFunction): 27337 (KJS::MathProtoFuncPow::callAsFunction): 27338 (KJS::MathProtoFuncRandom::callAsFunction): 27339 (KJS::MathProtoFuncRound::callAsFunction): 27340 (KJS::MathProtoFuncSin::callAsFunction): 27341 (KJS::MathProtoFuncSqrt::callAsFunction): 27342 (KJS::MathProtoFuncTan::callAsFunction): 27343 * kjs/math_object.h: 27344 (KJS::MathObjectImp::classInfo): 27345 (KJS::MathObjectImp::): 27346 * kjs/string_object.cpp: 27347 (KJS::StringPrototype::getOwnPropertySlot): 27348 (KJS::StringProtoFuncToString::callAsFunction): 27349 (KJS::StringProtoFuncValueOf::callAsFunction): 27350 (KJS::StringProtoFuncCharAt::callAsFunction): 27351 (KJS::StringProtoFuncCharCodeAt::callAsFunction): 27352 (KJS::StringProtoFuncConcat::callAsFunction): 27353 (KJS::StringProtoFuncIndexOf::callAsFunction): 27354 (KJS::StringProtoFuncLastIndexOf::callAsFunction): 27355 (KJS::StringProtoFuncMatch::callAsFunction): 27356 (KJS::StringProtoFuncSearch::callAsFunction): 27357 (KJS::StringProtoFuncReplace::callAsFunction): 27358 (KJS::StringProtoFuncSlice::callAsFunction): 27359 (KJS::StringProtoFuncSplit::callAsFunction): 27360 (KJS::StringProtoFuncSubstr::callAsFunction): 27361 (KJS::StringProtoFuncSubstring::callAsFunction): 27362 (KJS::StringProtoFuncToLowerCase::callAsFunction): 27363 (KJS::StringProtoFuncToUpperCase::callAsFunction): 27364 (KJS::StringProtoFuncToLocaleLowerCase::callAsFunction): 27365 (KJS::StringProtoFuncToLocaleUpperCase::callAsFunction): 27366 (KJS::StringProtoFuncLocaleCompare::callAsFunction): 27367 (KJS::StringProtoFuncBig::callAsFunction): 27368 (KJS::StringProtoFuncSmall::callAsFunction): 27369 (KJS::StringProtoFuncBlink::callAsFunction): 27370 (KJS::StringProtoFuncBold::callAsFunction): 27371 (KJS::StringProtoFuncFixed::callAsFunction): 27372 (KJS::StringProtoFuncItalics::callAsFunction): 27373 (KJS::StringProtoFuncStrike::callAsFunction): 27374 (KJS::StringProtoFuncSub::callAsFunction): 27375 (KJS::StringProtoFuncSup::callAsFunction): 27376 (KJS::StringProtoFuncFontcolor::callAsFunction): 27377 (KJS::StringProtoFuncFontsize::callAsFunction): 27378 (KJS::StringProtoFuncAnchor::callAsFunction): 27379 (KJS::StringProtoFuncLink::callAsFunction): 27380 * kjs/string_object.h: 27381 27382 2007-11-08 Adam Roben <aroben (a] apple.com> 27383 27384 Windows build fix 27385 27386 Reviewed by Sam and Ada. 27387 27388 * wtf/MathExtras.h: Get rid of a circular #include dependency to fix 27389 the build. 27390 27391 2007-11-08 Adam Roben <aroben (a] apple.com> 27392 27393 Fix a precedence warning on Windows 27394 27395 * kjs/JSImmediate.h: 27396 (KJS::JSImmediate::toBoolean): 27397 27398 2007-11-08 Mark Rowe <mrowe (a] apple.com> 27399 27400 Build fix for JavaScriptGlue. 27401 27402 * wtf/MathExtras.h: Include stdlib.h for srand and RAND_MAX. 27403 27404 2007-11-08 Darin Adler <darin (a] apple.com> 27405 27406 - Windows build fix 27407 27408 * kjs/JSImmediate.h: Include MathExtras.h rather than math.h since this file uses "signbit". 27409 27410 2007-11-08 Oliver Hunt <oliver (a] apple.com> 27411 27412 Reviewed by Darin. 27413 27414 Replace the use of floats for immediate values with the use of integers for a 4.5% improvement in SunSpider. 27415 27416 Unfortunately this change results in NaN, +Inf, -Inf, and -0 being heap allocated now, but 27417 we should now have faster array access, faster immediate to double conversion, and the 27418 potential to further improve bitwise operators in future. 27419 27420 This also removes the need for unions to avoid strict aliasing problems when extracting 27421 a value from immediates. 27422 27423 * kjs/JSImmediate.h: 27424 (KJS::JSImmediate::trueImmediate): 27425 (KJS::JSImmediate::falseImmediate): 27426 (KJS::JSImmediate::undefinedImmediate): 27427 (KJS::JSImmediate::nullImmediate): 27428 (KJS::JSImmediate::toBoolean): 27429 * kjs/value.h: 27430 (KJS::jsNaN): 27431 27432 2007-11-07 Eric Seidel <eric (a] webkit.org> 27433 27434 Reviewed by Darin and Oliver. 27435 27436 Add evaluateToNumber parallel evaluation tree to speed up number operations. 27437 Make ImmediateNumberNode a subclass of NumberNode. 27438 Share evaluate logic between evaluate and evaluateToNumber using inline functions 27439 There is still a lot of improvement to be made here. 27440 27441 SunSpider claims this is a 1.0% speedup overall (nbody 7.9%), base64 slowing 2.0% 27442 Given the huge win that this prepares us for with simple type inferencing I see the small 27443 regression in base64 being worth the substantial overall improvement. 27444 27445 * kjs/grammar.y: 27446 * kjs/nodes.cpp: 27447 (KJS::Node::evaluateToNumber): 27448 (KJS::NumberNode::evaluate): 27449 (KJS::NumberNode::evaluateToNumber): 27450 (KJS::StringNode::evaluateToNumber): 27451 (KJS::LocalVarAccessNode::inlineEvaluate): 27452 (KJS::LocalVarAccessNode::evaluate): 27453 (KJS::LocalVarAccessNode::evaluateToNumber): 27454 (KJS::BracketAccessorNode::inlineEvaluate): 27455 (KJS::BracketAccessorNode::evaluate): 27456 (KJS::BracketAccessorNode::evaluateToNumber): 27457 (KJS::NegateNode::evaluate): 27458 (KJS::NegateNode::evaluateToNumber): 27459 (KJS::MultNode::inlineEvaluateToNumber): 27460 (KJS::MultNode::evaluate): 27461 (KJS::MultNode::evaluateToNumber): 27462 (KJS::DivNode::inlineEvaluateToNumber): 27463 (KJS::DivNode::evaluate): 27464 (KJS::DivNode::evaluateToNumber): 27465 (KJS::ModNode::inlineEvaluateToNumber): 27466 (KJS::ModNode::evaluate): 27467 (KJS::ModNode::evaluateToNumber): 27468 (KJS::throwOutOfMemoryErrorToNumber): 27469 (KJS::addSlowCaseToNumber): 27470 (KJS::add): 27471 (KJS::addToNumber): 27472 (KJS::AddNode::evaluateToNumber): 27473 (KJS::SubNode::inlineEvaluateToNumber): 27474 (KJS::SubNode::evaluate): 27475 (KJS::SubNode::evaluateToNumber): 27476 (KJS::valueForReadModifyAssignment): 27477 (KJS::ReadModifyLocalVarNode::evaluate): 27478 (KJS::ReadModifyResolveNode::evaluate): 27479 (KJS::ReadModifyDotNode::evaluate): 27480 (KJS::ReadModifyBracketNode::evaluate): 27481 * kjs/nodes.h: 27482 (KJS::Node::): 27483 (KJS::NumberNode::): 27484 (KJS::ImmediateNumberNode::): 27485 (KJS::AddNode::precedence): 27486 * kjs/nodes2string.cpp: 27487 (KJS::NumberNode::streamTo): 27488 27489 2007-11-07 Mark Rowe <mrowe (a] apple.com> 27490 27491 Reviewed by Eric. 27492 27493 Fix up initialization after being mangled in r27572, and remove the 27494 ternary expression as extraCost will always be zero for the numeric 27495 heap. 27496 27497 * kjs/collector.cpp: 27498 (KJS::Collector::heapAllocate): 27499 27500 2007-11-07 Mark Rowe <mrowe (a] apple.com> 27501 27502 Gtk build fix. 27503 27504 * kjs/regexp_object.cpp: 27505 27506 2007-11-07 Geoffrey Garen <ggaren (a] apple.com> 27507 27508 Reviewed by Beth Dakin. 27509 27510 Eliminated a bogus (though compiled-out) branch in the collector. 27511 27512 * kjs/collector.cpp: 27513 (KJS::Collector::heapAllocate): 27514 27515 2007-11-06 Geoffrey Garen <ggaren (a] apple.com> 27516 27517 Reviewed by Darin Adler. 27518 27519 Fixed part of http://bugs.webkit.org/show_bug.cgi?id=15861 27520 5.8% of string-validate-input.js is spent creating RegExpImps 27521 27522 Put RegExpImp properties into a static hashtable to avoid a slew of 27523 PropertyMap churn when creating a RegExpImp. 27524 27525 Factored important bits of regular expression implementation out of 27526 RegExpImp (the JS object) and into RegExp (the PCRE wrapper class), 27527 making RegExp a ref-counted class. (This will help later.) 27528 27529 Removed PCRE_POSIX support because I didn't quite know how to test it 27530 and keep it working with these changes. 27531 27532 1.1% SunSpider speedup. 5.8% speedup on string-validate-input.js. 27533 27534 * kjs/regexp.h: A few interface changes: 27535 1. Renamed "subpatterns()" => "numSubpatterns()" 27536 2. Made flag enumeration private and replaced it with public getters for 27537 specific flags. 27538 3. Made RegExp ref-counted so RegExps can be shared by RegExpImps. 27539 4. Made RegExp take a string of flags instead of an int, eliminating 27540 duplicated flag parsing code elsewhere. 27541 27542 * kjs/regexp_object.cpp: 27543 (KJS::RegExpProtoFunc::callAsFunction): For RegExp.compile: 27544 - Fixed a bug where compile(undefined) would throw an exception. 27545 - Removed some now-redundant code. 27546 - Used RegExp sharing to eliminate an allocation and a bunch of 27547 PropertyMap thrash. (Not a big win since compile is a deprecated 27548 function. I mainly did this to test the plubming.) 27549 27550 2007-11-07 Simon Hausmann <hausmann (a] kde.org> 27551 27552 Reviewed by nobody, Qt/Windows build fix. 27553 27554 JavaScriptCore.pri expects OBJECTS_DIR to be set, so set it in 27555 testkjs.pro, too, where it's included from. 27556 27557 * kjs/testkjs.pro: 27558 27559 2007-11-07 Simon Hausmann <shausman (a] trolltech.com> 27560 27561 Reviewed by Lars. 27562 27563 Fix "nmake clean" for the Qt/Windows build by replacing tmp/ with a variable that ends with the correct type of slash/backslash depending on the choice of compiler/make tool. 27564 27565 * JavaScriptCore.pri: 27566 * pcre/pcre.pri: 27567 27568 2007-11-07 Lars Knoll <lars (a] trolltech.com> 27569 27570 Reviewed by Simon. 27571 27572 fix umemcasecmp 27573 27574 Pretty embarrassing bug. Has the potential to fix quite a few test failures. 27575 27576 * wtf/unicode/qt4/UnicodeQt4.h: 27577 (WTF::Unicode::umemcasecmp): 27578 27579 2007-11-06 Maciej Stachowiak <mjs (a] apple.com> 27580 27581 Reviewed by Eric. 27582 27583 - only collect when the heap is full, unless we have lots of extra cost garbage 27584 27585 1.1% SunSpider speedup. 27586 27587 This shouldn't hit memory use much since the extra space in those 27588 blocks hangs around either way. 27589 27590 * kjs/collector.cpp: 27591 (KJS::Collector::heapAllocate): 27592 (KJS::Collector::collect): Fix logic error that reversed the sense of collect's 27593 return value. 27594 27595 2007-11-06 Oliver Hunt <oliver (a] apple.com> 27596 27597 Reviewed by Maciej. 27598 27599 Avoid unnecessarily boxing the result from post inc/decrement for 0.3% gain in sunspider 27600 27601 We now convert the common 'for (...; ...; <var>++) ...' to the semantically identical 27602 'for (...; ...; ++<var>) ...'. 27603 27604 * kjs/nodes.cpp: 27605 (KJS::PostIncResolveNode::optimizeForUnnecessaryResult): 27606 (KJS::PostIncLocalVarNode::evaluate): 27607 (KJS::PostIncLocalVarNode::optimizeForUnnecessaryResult): 27608 (KJS::PostDecResolveNode::optimizeForUnnecessaryResult): 27609 (KJS::PostDecLocalVarNode::evaluate): 27610 (KJS::PostDecLocalVarNode::optimizeForUnnecessaryResult): 27611 * kjs/nodes.h: 27612 (KJS::PrePostResolveNode::): 27613 (KJS::PostIncResolveNode::): 27614 (KJS::PostIncLocalVarNode::): 27615 (KJS::PostDecResolveNode::): 27616 (KJS::PostDecLocalVarNode::): 27617 (KJS::PreIncResolveNode::): 27618 (KJS::PreDecResolveNode::): 27619 (KJS::ForNode::ForNode): 27620 27621 2007-11-06 Eric Seidel <eric (a] webkit.org> 27622 27623 Reviewed by darin. 27624 27625 This fixes a regressed layout test for string + object 27626 27627 SunSpider claims this was an overall 0.3% speedup, although some individual tests were slower. 27628 27629 * kjs/nodes.cpp: 27630 (KJS::add): remove erroneous "fast path" for string + * 27631 27632 2007-11-06 Geoffrey Garen <ggaren (a] apple.com> 27633 27634 Reviewed by Eric Seidel. 27635 27636 Added toJSNumber, a fast path for converting a JSValue to a JS number, 27637 and deployed it in postfix expressions. In the fast case this 27638 eliminates a call to jsNumber. 27639 27640 0.4% speedup on SunSpider. 27641 27642 * ChangeLog: 27643 * kjs/nodes.cpp: 27644 (KJS::PostIncResolveNode::evaluate): 27645 (KJS::PostIncLocalVarNode::evaluate): 27646 (KJS::PostDecResolveNode::evaluate): 27647 (KJS::PostDecLocalVarNode::evaluate): 27648 (KJS::PostIncBracketNode::evaluate): 27649 (KJS::PostDecBracketNode::evaluate): 27650 (KJS::PostIncDotNode::evaluate): 27651 (KJS::PostDecDotNode::evaluate): 27652 (KJS::UnaryPlusNode::evaluate): 27653 * kjs/value.h: 27654 (KJS::JSValue::toJSNumber): 27655 27656 2007-11-06 Darin Adler <darin (a] apple.com> 27657 27658 Reviewed by Maciej. 27659 27660 - http://bugs.webkit.org/show_bug.cgi?id=15846 27661 REGRESSION (r27387): Memory corruption when running fast/js/kde/delete.html 27662 27663 There was a mistake in the algorithm used to find an empty slot in the property 27664 map entries vector; when we were putting in a new property value and not overwriting 27665 an existing deleted sentinel, we would enlarge the entries vector, but would not 27666 overwrite the stale data that's in the new part. It was easy to pin this down by 27667 turning on property map consistency checks -- I never would have landed with this 27668 bug if I had run the regression tests once with consistency checks on! 27669 27670 * kjs/property_map.cpp: (KJS::PropertyMap::put): Changed logic for the case where 27671 foundDeletedElement is false to always use the item at the end of the entries vector. 27672 Also allowed me to merge with the logic for the "no deleted sentinels at all" case. 27673 27674 2007-11-06 Oliver Hunt <oliver (a] apple.com> 27675 27676 RS=Darin. 27677 27678 Fix previous patch to use a 3 bit shift, a 16 bit shift causes a regression in sunspider. 27679 27680 * kjs/nodes.cpp: 27681 (KJS::add): 27682 27683 2007-11-06 Oliver Hunt <oliver (a] apple.com> 27684 27685 Reviewed by Darin. 27686 27687 Replace boolean comparisons in AddNode with mask 27688 comparisons for a 0.2% improvement in sunspider. 27689 27690 * JavaScriptCore.xcodeproj/project.pbxproj: 27691 * kjs/nodes.cpp: 27692 (KJS::add): 27693 27694 2007-11-06 Eric Seidel <eric (a] webkit.org> 27695 27696 Reviewed by darin. 27697 27698 SunSpider claims this is a 1.1% speedup. 27699 27700 * kjs/nodes.cpp: 27701 (KJS::throwOutOfMemoryError): Added, non inline. 27702 (KJS::addSlowCase): renamed from add(), non inline. 27703 (KJS::add): add fast path for String + String, Number + Number and String + * 27704 27705 2007-11-06 Eric Seidel <eric (a] webkit.org> 27706 27707 Reviewed by mjs. 27708 27709 Avoid more UString creation. 27710 27711 SunSpider claims this is a 0.4% speedup. 27712 27713 * kjs/regexp_object.cpp: 27714 (KJS::RegExpObjectImp::construct): use UString::find(UChar) 27715 27716 2007-11-05 Mark Rowe <mrowe (a] apple.com> 27717 27718 Mac build fix. 27719 27720 * kjs/array_object.cpp: 27721 (KJS::ArrayProtoFunc::callAsFunction): 27722 27723 2007-11-05 Adam Roben <aroben (a] apple.com> 27724 27725 Windows build fix 27726 27727 * kjs/list.h: 27728 27729 2007-11-05 Mark Rowe <mrowe (a] apple.com> 27730 27731 Build fix. Add missing #include. 27732 27733 * kjs/operations.cpp: 27734 27735 2007-11-05 Eric Seidel <eric (a] webkit.org> 27736 27737 Reviewed by mjs. 27738 27739 Remove another call to toString(exec) 27740 27741 SunSpider claims this is a 0.5% speedup. 27742 27743 * kjs/operations.cpp: 27744 (KJS::equal): remove another toString 27745 27746 2007-11-05 Eric Seidel <eric (a] webkit.org> 27747 27748 * kjs/operations.cpp: 27749 (KJS::equal): correct broken change. 27750 27751 2007-11-05 Eric Seidel <eric (a] webkit.org> 27752 27753 Reviewed by mjs. 27754 27755 Remove one more call to toString(exec). 27756 27757 SunSpider claims this is a 0.7% speedup. 27758 27759 * kjs/operations.cpp: 27760 (KJS::equal): remove a call to toString() 27761 27762 2007-11-05 Mark Rowe <mrowe (a] apple.com> 27763 27764 Gtk build fix. 27765 27766 * pcre/pcre.pri: 27767 27768 2007-11-05 Mark Rowe <mrowe (a] apple.com> 27769 27770 Gtk build fix. 27771 27772 * kjs/list.cpp: 27773 27774 2007-11-05 Geoffrey Garen <ggaren (a] apple.com> 27775 27776 Touched a file to test my new HTTP access. 27777 27778 * kjs/scope_chain.cpp: 27779 27780 2007-11-05 Alp Toker <alp (a] atoker.com> 27781 27782 Unreviewed build fix for qmake-based ports. 27783 27784 Someone with a better understanding of qmake still needs to sort out 27785 the INCLUDEPATH/DEPENDPATH mess. 27786 27787 * JavaScriptCore.pri: 27788 27789 2007-11-05 Geoffrey Garen <ggaren (a] apple.com> 27790 27791 Reviewed by Darin Adler. 27792 27793 http://bugs.webkit.org/show_bug.cgi?id=15835 27794 27795 Switched List implementation from a custom heap allocator to an inline 27796 Vector, for a disappointing .5% SunSpider speedup. 27797 27798 Also renamed List::slice to List::getSlice because "get" is the 27799 conventional prefix for functions returning a value through an out 27800 parameter. 27801 27802 * kjs/array_object.cpp: 27803 (KJS::ArrayProtoFunc::callAsFunction): Removed some redundant function 27804 calls and memory accesses. 27805 27806 * kjs/bool_object.cpp: 27807 (BooleanObjectImp::construct): Removed questionable use of iterator. 27808 27809 * kjs/list.cpp: 27810 * kjs/list.h: New List class, implemented in terms of Vector. Two 27811 interesting differences: 27812 1. The inline capacity is 8, not 5. Many of the Lists constructed 27813 during a SunSpider run are larger than 5; almost none are larger 27814 than 8. 27815 27816 2. The growth factor is 4, not 2. Since we can guarantee that Lists 27817 aren't long-lived, we can grow them more aggressively, to avoid 27818 excessive copying. 27819 27820 * kjs/regexp_object.cpp: 27821 (RegExpObjectImp::construct): Removed redundant function calls. 27822 27823 * kjs/string_object.cpp: 27824 (KJS::StringObjectImp::construct): Removed questionable use of iterator. 27825 27826 * wtf/Vector.h: 27827 (WTF::::uncheckedAppend): Added a fast, unchecked version of append. 27828 27829 2007-11-05 Mark Rowe <mrowe (a] apple.com> 27830 27831 Reviewed by Alp Toker. 27832 27833 Add DEPENDPATH to JavaScriptCore and pcre to help qmake with dependencies. 27834 27835 * JavaScriptCore.pri: 27836 * pcre/pcre.pri: 27837 27838 2007-11-04 Darin Adler <darin (a] apple.com> 27839 27840 Reviewed by Maciej. 27841 27842 - http://bugs.webkit.org/show_bug.cgi?id=15826 27843 optimize opcode loop and case insensitive ASCII compares for a 30% speedup 27844 27845 SunSpider says it's 2.6% faster overall, 32.5% in the regular expression tests. 27846 27847 * pcre/pcre_internal.h: Added OP_ASCII_CHAR and OP_ASCII_LETTER_NC. 27848 27849 * pcre/pcre_compile.c: 27850 (find_fixedlength): Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC. Also 27851 added OP_NOT since there was no reason it should not be in here. 27852 (could_be_empty_branch): Ditto. 27853 (compile_branch): Streamlined all the single-character cases; there was a bit of 27854 duplicate code. Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC as needed. 27855 But in particular, compile to those opcodes when the single character match is 27856 ASCII. 27857 (find_firstassertedchar): Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC. 27858 27859 * pcre/pcre_exec.c: (match): Removed the "min", "minimize", and "op" fields from 27860 the matchframe, after I discovered that none of them needed to be saved and restored 27861 across recursive match calls. Also eliminated the ignored result field from the 27862 matchframe, since I discovered that rrc ("recursive result code") was already the 27863 exact same thing. Moved the handling of opcodes higher than OP_BRA into the default 27864 statement of the switch instead of doing them before the switch. This removes a 27865 branch from each iteration of the opcode interpreter, just as removal of "op" 27866 removed at least one store from each iteration. Last, but not least, add the 27867 OP_ASCII_CHAR and OP_ASCII_LETTER_NC functions. Neither can ever match a 27868 surrogate pair and the letter case can be handled efficiently. 27869 27870 2007-11-04 Darin Adler <darin (a] apple.com> 27871 27872 * pcre/pcre_exec.c: (match): Try to fix the Windows build by removing unreachable code. 27873 27874 2007-11-03 Darin Adler <darin (a] apple.com> 27875 27876 - fix non-Mac builds; remove some more unused PCRE stuff 27877 27878 * pcre/pcre_compile.c: 27879 (compile_branch): Removed branch chain and some unused ESC values. 27880 (compile_regex): Ditto. 27881 (jsRegExpCompile): Ditto. 27882 * pcre/pcre_exec.c: 27883 (match): Removed unused branch targets. Don't use macros any more. 27884 (jsRegExpExecute): More of the same. 27885 27886 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update for removed files. 27887 * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. 27888 * pcre/pcre.pri: Ditto. 27889 27890 * pcre/MERGING: Removed. 27891 * pcre/pcre_fullinfo.c: Removed. 27892 * pcre/pcre_get.c: Removed. 27893 * pcre/pcre_internal.h: 27894 * pcre/ucp.h: Removed. 27895 27896 2007-11-03 Darin Adler <darin (a] apple.com> 27897 27898 Reviewed by Maciej. 27899 27900 - http://bugs.webkit.org/show_bug.cgi?id=15821 27901 remove unused PCRE features for speed 27902 27903 A first step toward removing the PCRE features we don't use. 27904 This gives a 0.8% speedup on SunSpider, and a 6.5% speedup on 27905 the SunSpider regular expression test. 27906 27907 Replaced the public interface with one that doesn't use the 27908 name PCRE. Removed code we don't need for JavaScript and various 27909 configurations we don't use. This is in preparation for still 27910 more changes in the future. We'll probably switch to C++ and 27911 make some even more significant changes to the regexp engine 27912 to get some additional speed. 27913 27914 There's probably additional unused stuff that I haven't 27915 deleted yet. 27916 27917 This does mean that our PCRE is now a fork, but I think that's 27918 not really a big deal. 27919 27920 * JavaScriptCore.exp: Remove the 5 old entry points and add 27921 the 3 new entry points for WebCore's direct use of the regular 27922 expression engine. 27923 27924 * kjs/config.h: Remove the USE(PCRE16) define. I decided to flip 27925 its sense and now there's a USE(POSIX_REGEX) instead, which should 27926 probably not be set by anyone. Maybe later we'll just get rid of it 27927 altogether. 27928 27929 * kjs/regexp.h: 27930 * kjs/regexp.cpp: 27931 (KJS::RegExp::RegExp): Switch to new jsRegExp function names and 27932 defines. Cut down on the number of functions used. 27933 (KJS::RegExp::~RegExp): Ditto. 27934 (KJS::RegExp::match): Ditto. 27935 27936 * pcre/dftables.c: (main): Get rid of ctype_letter and ctype_meta, 27937 which are unused. 27938 27939 * pcre/pcre-config.h: Get rid of EBCIDIC, PCRE_DATA_SCOPE, const, 27940 size_t, HAVE_STRERROR, HAVE_MEMMOVE, HAVE_BCOPY, NEWLINE, 27941 POSIX_MALLOC_THRESHOLD, NO_RECURSE, SUPPORT_UCP, SUPPORT_UTF8, 27942 and JAVASCRIPT. These are all no longer configurable in our copy 27943 of the library. 27944 27945 * pcre/pcre.h: Remove the macro-based kjs prefix hack, the PCRE 27946 version macros, PCRE_UTF16, the code to set up PCRE_DATA_SCOPE, 27947 the include of <stdlib.h>, and most of the constants and 27948 functions defined in this header. Changed the naming scheme to 27949 use a JSRegExp prefix rather than a pcre prefix. In the future, 27950 we'll probably change this to be a C++ header. 27951 27952 * pcre/pcre_compile.c: Removed all unused code branches, 27953 including many whole functions and various byte codes. 27954 Kept changes outside of removal to a minimum. 27955 (check_escape): 27956 (first_significant_code): 27957 (find_fixedlength): 27958 (find_recurse): 27959 (could_be_empty_branch): 27960 (compile_branch): 27961 (compile_regex): 27962 (is_anchored): 27963 (is_startline): 27964 (find_firstassertedchar): 27965 (jsRegExpCompile): Renamed from pcre_compile2 and changed the 27966 parameters around a bit. 27967 (jsRegExpFree): Added. 27968 27969 * pcre/pcre_exec.c: Removed many unused opcodes and variables. 27970 Also started tearing down the NO_RECURSE mechanism since it's 27971 now the default. In some cases there were things in the explicit 27972 frame that could be turned into plain old local variables and 27973 other small like optimizations. 27974 (pchars): 27975 (match_ref): 27976 (match): Changed parameters quite a bit since it's now not used 27977 recursively. 27978 (jsRegExpExecute): Renamed from pcre_exec. 27979 27980 * pcre/pcre_internal.h: Get rid of PCRE_DEFINITION, PCRE_SPTR, 27981 PCRE_IMS, PCRE_ICHANGED, PCRE_NOPARTIAL, PCRE_STUDY_MAPPED, 27982 PUBLIC_OPTIONS, PUBLIC_EXEC_OPTIONS, PUBLIC_DFA_EXEC_OPTIONS, 27983 PUBLIC_STUDY_OPTIONS, MAGIC_NUMBER, 16 of the opcodes, 27984 _pcre_utt, _pcre_utt_size, _pcre_try_flipped, _pcre_ucp_findprop, 27985 and _pcre_valid_utf8. Also moved pcre_malloc and pcre_free here. 27986 27987 * pcre/pcre_maketables.c: Changed to only compile in dftables. 27988 Also got rid of many of the tables that we don't use. 27989 27990 * pcre/pcre_tables.c: Removed the unused Unicode property tables. 27991 27992 * pcre/pcre_ucp_searchfuncs.c: Removed everything except for 27993 _pcre_ucp_othercase. 27994 27995 * pcre/pcre_xclass.c: (_pcre_xclass): Removed uneeded support 27996 for classes based on Unicode properties. 27997 27998 * wtf/FastMallocPCRE.cpp: Removed unused bits. It would be good 27999 to eliminate this completely, but we need the regular expression 28000 code to be C++ first. 28001 28002 * pcre/pcre_fullinfo.c: 28003 * pcre/pcre_get.c: 28004 * pcre/ucp.h: 28005 Files that are no longer needed. I didn't remove them with this 28006 check-in, because I didn't want to modify all the project files. 28007 28008 2007-11-03 Maciej Stachowiak <mjs (a] apple.com> 28009 28010 Reviewed by Sam. 28011 28012 - remove NaN check from JSImmediate::fromDouble for 0.5% SunSpider speedup 28013 28014 It turns out that doing this check costs more than it saves. 28015 28016 * kjs/JSImmediate.h: 28017 (KJS::JSImmediate::fromDouble): 28018 28019 2007-11-03 Sam Weinig <sam (a] webkit.org> 28020 28021 Reviewed by Oliver. 28022 28023 Remove dummy variable from ClassInfo reducing the size of the struct by 1 word. 28024 The variable had been kept around for binary compatibility, but since nothing 28025 else is there is no point in continuing to keep it around. 28026 28027 * API/JSCallbackConstructor.cpp: 28028 * API/JSCallbackFunction.cpp: 28029 * API/JSCallbackObject.cpp: 28030 * bindings/objc/objc_runtime.mm: 28031 * bindings/runtime_array.cpp: 28032 * bindings/runtime_object.cpp: 28033 * kjs/array_instance.cpp: 28034 * kjs/array_object.cpp: 28035 * kjs/bool_object.cpp: 28036 * kjs/date_object.cpp: 28037 * kjs/error_object.cpp: 28038 * kjs/function.cpp: 28039 * kjs/internal.cpp: 28040 * kjs/lookup.h: 28041 * kjs/math_object.cpp: 28042 * kjs/number_object.cpp: 28043 * kjs/object.h: 28044 * kjs/regexp_object.cpp: 28045 * kjs/string_object.cpp: 28046 28047 2007-11-03 Kevin McCullough <kmccullough (a] apple.com> 28048 28049 - Updated testkjs results to make the build bots green until we 28050 can fix the tests that are failing. The new failures are in DST. 28051 28052 * tests/mozilla/expected.html: 28053 28054 2007-11-03 Maciej Stachowiak <mjs (a] apple.com> 28055 28056 Reviewed by Adam. 28057 28058 - don't print the var twice for ForInNodes with a var declaration 28059 28060 * kjs/nodes2string.cpp: 28061 (KJS::ForInNode::streamTo): 28062 28063 2007-11-03 Darin Adler <darin (a] apple.com> 28064 28065 * pcre/pcre_compile.c: (check_escape): Windows build fix. Get rid of 28066 C-incompatible declaration. 28067 28068 2007-11-03 Mark Rowe <mrowe (a] apple.com> 28069 28070 Gtk build fix. 28071 28072 * kjs/nodes.cpp: Add missing include. 28073 28074 2007-11-03 Darin Adler <darin (a] apple.com> 28075 28076 Reviewed by Maciej. 28077 28078 - fix http://bugs.webkit.org/show_bug.cgi?id=15814 28079 <rdar://problem/5536644> fast/js/kde/encode_decode_uri.html fails 28080 28081 These changes cause us to match the JavaScript specification and pass the 28082 fast/js/kde/encode_decode_uri.html test. 28083 28084 * kjs/function.cpp: (KJS::encode): Call the UTF-8 string conversion in its 28085 new strict mode, throwing an exception if there are malformed UTF-16 surrogate 28086 pairs in the text. 28087 28088 * kjs/ustring.h: Added a strict version of the UTF-8 string conversion. 28089 * kjs/ustring.cpp: 28090 (KJS::decodeUTF8Sequence): Removed code to disallow U+FFFE and U+FFFF; while 28091 those might be illegal in some sense, they aren't supposed to get any special 28092 handling in the place where this function is currently used. 28093 (KJS::UString::UTF8String): Added the strictness. 28094 28095 2007-11-03 Darin Adler <darin (a] apple.com> 28096 28097 Reviewed by Maciej. 28098 28099 - http://bugs.webkit.org/show_bug.cgi?id=15812 28100 some JavaScript tests (from the Mozilla test suite) are failing 28101 28102 Two or three fixes get 7 more of the Mozilla tests passing. 28103 This gets us down from 61 failing tests to 54. 28104 28105 * kjs/interpreter.h: (KJS::Interpreter::builtinRegExp): 28106 Made this inline and gave it a more specific type. Some day we should 28107 probably do that for all of these -- might even get a bit of a speed 28108 boost from it. 28109 * kjs/interpreter.cpp: Removed Interpreter::builtinRegExp now that it's 28110 inline in the header. 28111 28112 * kjs/regexp_object.h: 28113 * kjs/regexp_object.cpp: 28114 (KJS::RegExpProtoFunc::callAsFunction): Moved test and exec out of the 28115 switch statement into the RegExpImp object, so they can be shared with 28116 RegExpImp::callAsFunction. 28117 (KJS::RegExpImp::match): Added. Common code used by both test and exec. 28118 (KJS::RegExpImp::test): Added. 28119 (KJS::RegExpImp::exec): Added. 28120 (KJS::RegExpImp::implementsCall): Added. 28121 (KJS::RegExpImp::callAsFunction): Added. 28122 (KJS::RegExpObjectImpPrivate::RegExpObjectImpPrivate): Initialize 28123 lastInput to null rather than empty string -- we take advantage of the 28124 difference in RegExpImp::match. 28125 (KJS::RegExpObjectImp::input): Added. No reason to go through hash tables 28126 just to get at a field like this. 28127 28128 * pcre/pcre_compile.c: (check_escape): Changed the \u handling to match 28129 the JavaScript specification. If there are not 4 hex digits after the \u, 28130 then it's processed as if it wasn't an escape sequence at all. 28131 28132 * pcre/pcre_internal.h: Added IS_NEWLINE, with the appropriate definition 28133 for JavaScript (4 specific Unicode values). 28134 * pcre/pcre_exec.c: 28135 (match): Changed all call sites to use IS_NEWLINE. 28136 (pcre_exec): Ditto. 28137 28138 * tests/mozilla/expected.html: Updated to expect 7 more successful tests. 28139 28140 2007-11-03 David D. Kilzer <ddkilzer (a] webkit.org> 28141 28142 Sort files(...); sections of Xcode project files. 28143 28144 Rubber-stamped by Darin. 28145 28146 * JavaScriptCore.xcodeproj/project.pbxproj: 28147 28148 2007-11-03 Maciej Stachowiak <mjs (a] apple.com> 28149 28150 Reviewed by Oliver. 28151 28152 - remove VarDeclListNode and simplify VarDeclNode evaluation for 0.4% SunSpider speedup 28153 28154 * kjs/grammar.y: 28155 * kjs/nodes.cpp: 28156 (KJS::VarDeclNode::optimizeVariableAccess): 28157 (KJS::VarDeclNode::getDeclarations): 28158 (KJS::VarDeclNode::handleSlowCase): 28159 (KJS::VarDeclNode::evaluateSingle): 28160 (KJS::VarDeclNode::evaluate): 28161 (KJS::VarStatementNode::execute): 28162 * kjs/nodes.h: 28163 (KJS::VarDeclNode::): 28164 (KJS::VarStatementNode::): 28165 * kjs/nodes2string.cpp: 28166 (KJS::VarDeclNode::streamTo): 28167 28168 2007-11-03 Alexey Proskuryakov <ap (a] webkit.org> 28169 28170 Reviewed by Darin. 28171 28172 http://bugs.webkit.org/show_bug.cgi?id=15800 28173 REGRESSION (r27303): RegExp leaks 28174 28175 * kjs/regexp_object.h: 28176 (KJS::RegExpImp::setRegExp): 28177 (KJS::RegExpImp::regExp): 28178 (KJS::RegExpImp::classInfo): 28179 * kjs/regexp_object.cpp: 28180 (RegExpImp::RegExpImp): 28181 (RegExpImp::~RegExpImp): 28182 Renamed reg member variable to m_regExp, changed it to use OwnPtr. 28183 28184 2007-11-02 Maciej Stachowiak <mjs (a] apple.com> 28185 28186 Reviewed by Oliver. 28187 28188 - add SourceElements as a typedef for Vector<RefPtr<StatementNode> >. 28189 28190 * kjs/grammar.y: 28191 * kjs/nodes.cpp: 28192 (KJS::statementListPushFIFO): 28193 (KJS::statementListGetDeclarations): 28194 (KJS::statementListInitializeDeclarationStacks): 28195 (KJS::statementListInitializeVariableAccessStack): 28196 (KJS::statementListExecute): 28197 (KJS::BlockNode::BlockNode): 28198 (KJS::FunctionBodyNode::FunctionBodyNode): 28199 (KJS::ProgramNode::ProgramNode): 28200 * kjs/nodes.h: 28201 (KJS::CaseClauseNode::): 28202 28203 2007-11-02 Darin Adler <darin (a] apple.com> 28204 28205 Reviewed by Maciej. 28206 28207 - http://bugs.webkit.org/show_bug.cgi?id=15791 28208 change property map data structure for less memory use, better speed 28209 28210 The property map now has an array of indices and a separate array of 28211 property map entries. This slightly slows down lookup because of a second 28212 memory acess, but makes property maps smaller and faster to iterate in 28213 functions like mark(). 28214 28215 SunSpider says this is 1.2% faster, although it makes the bitwise-end test 28216 more than 10% slower. To fix that we'll need to optimize global variable lookup. 28217 28218 * kjs/property_map.cpp: 28219 (KJS::PropertyMapEntry::PropertyMapEntry): 28220 (KJS::PropertyMapHashTable::entries): 28221 (KJS::PropertyMapHashTable::allocationSize): 28222 (KJS::SavedProperties::SavedProperties): 28223 (KJS::SavedProperties::~SavedProperties): 28224 (KJS::PropertyMap::checkConsistency): 28225 (KJS::PropertyMap::~PropertyMap): 28226 (KJS::PropertyMap::clear): 28227 (KJS::PropertyMap::get): 28228 (KJS::PropertyMap::getLocation): 28229 (KJS::PropertyMap::put): 28230 (KJS::PropertyMap::insert): 28231 (KJS::PropertyMap::createTable): 28232 (KJS::PropertyMap::rehash): 28233 (KJS::PropertyMap::remove): 28234 (KJS::PropertyMap::mark): 28235 (KJS::comparePropertyMapEntryIndices): 28236 (KJS::PropertyMap::containsGettersOrSetters): 28237 (KJS::PropertyMap::getEnumerablePropertyNames): 28238 (KJS::PropertyMap::save): 28239 (KJS::PropertyMap::restore): 28240 * kjs/property_map.h: 28241 28242 2007-11-02 Darin Adler <darin (a] apple.com> 28243 28244 Reviewed by Maciej. 28245 28246 - http://bugs.webkit.org/show_bug.cgi?id=15807 28247 HashMap needs a take() function that combines get and remove 28248 28249 * wtf/HashMap.h: Added take function. Simplistic implementation for now, 28250 but still does only one hash table lookup. 28251 28252 * kjs/array_instance.cpp: (KJS::ArrayInstance::put): Use take rather than 28253 a find followed by a remove. 28254 28255 2007-11-02 David Carson <dacarson (a] gmail.com> 28256 28257 Reviewed by Darin. 28258 28259 Fix compiler warning "warning: suggest parentheses around && within ||" 28260 http://bugs.webkit.org/show_bug.cgi?id=15764 28261 28262 * kjs/value.h: (KJS::JSValue::isNumber): Add parentheses. 28263 28264 2007-11-01 Geoffrey Garen <ggaren (a] apple.com> 28265 28266 Reviewed by Maciej Stachowiak. 28267 28268 In preparation for making List a simple stack-allocated Vector: 28269 28270 Removed all instances of List copying and/or assignment, and made List 28271 inherit from Noncopyable. 28272 28273 Functions that used to return a List by copy now take List& out 28274 parameters. 28275 28276 Layout tests and JS tests pass. 28277 28278 * kjs/list.cpp: 28279 (KJS::List::slice): Replaced copyTail with a more generic slice 28280 alternative. (JavaScriptCore only calls slice(1), but WebCore calls 28281 slice(2)). 28282 28283 2007-11-01 Geoffrey Garen <ggaren (a] apple.com> 28284 28285 Reviewed by Maciej Stachowiak. 28286 28287 Fixed http://bugs.webkit.org/show_bug.cgi?id=15785 28288 REGRESSION(r27344): Crash on load at finance.yahoo.com 28289 28290 Reverted a small portion of my last check-in. (The speedup and the List 28291 removal are still there, though.) 28292 28293 ActivationImp needs to hold a pointer to its function, and mark that 28294 pointer (rather than accessing its function through its ExecState, and 28295 counting on the active scope to mark its function) because a closure 28296 can cause an ActivationImp to outlive its ExecState along with any 28297 active scope. 28298 28299 * kjs/ExecState.cpp: 28300 (KJS::ExecState::ExecState): 28301 * kjs/function.cpp: 28302 (KJS::FunctionImp::~FunctionImp): 28303 (KJS::ActivationImp::ActivationImp): 28304 * kjs/function.h: 28305 (KJS::ActivationImp::ActivationImpPrivate::ActivationImpPrivate): 28306 28307 Also made HashTable a little more crash-happy in debug builds, so 28308 problems like this will show up earlier: 28309 28310 * wtf/HashTable.h: 28311 (WTF::HashTable::~HashTable): 28312 28313 2007-11-01 Geoffrey Garen <ggaren (a] apple.com> 28314 28315 Reviewed by Adam Roben. 28316 28317 Addressed some of Darin's review comments. 28318 28319 Used perl -p, which is the shorthand while(<>) {}. 28320 28321 Made sure not to suppress bison's output. 28322 28323 Added line to removed bison_out.txt, since this script removes other 28324 intermediate files, too. 28325 28326 * DerivedSources.make: 28327 28328 2007-11-01 Geoffrey Garen <ggaren (a] apple.com> 28329 28330 Reviewed by Oliver Hunt. 28331 28332 Removed List from ActivationImp, in preparation for making all lists 28333 stack-allocated. 28334 28335 Tests pass. 28336 28337 1.0% speedup on SunSpider, presumably due to reduced List refcount thrash. 28338 28339 * kjs/ExecState.cpp: 28340 (KJS::ExecState::ExecState): 28341 (KJS::ExecState::~ExecState): 28342 * kjs/function.cpp: 28343 (KJS::ActivationImp::ActivationImp): 28344 (KJS::ActivationImp::createArgumentsObject): 28345 * kjs/function.h: 28346 (KJS::ActivationImp::ActivationImpPrivate::ActivationImpPrivate): 28347 28348 2007-11-01 Adam Roben <aroben (a] apple.com> 28349 28350 Use jsNumberCell instead of jsNumber when converting double constants to JSValues 28351 28352 This fixes fast/js/math.html, ecma/Date/15.9.5.10-1.js, and 28353 ecma/Date/15.9.5.12-1.js, which were suffering from a bug in MSVC. 28354 28355 It also gets rid of an MSVC warning that we previously had to silence. 28356 28357 Reviewed by Geoff. 28358 28359 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Turn 28360 back on the "overflow in constant arithmetic" warning. 28361 * kjs/number_object.cpp: 28362 (NumberObjectImp::getValueProperty): Use jsNumberCell instead of 28363 jsNumber. 28364 28365 2007-10-31 Adam Roben <aroben (a] apple.com> 28366 28367 Windows build fix 28368 28369 * kjs/ExecState.h: 28370 28371 2007-10-31 Maciej Stachowiak <mjs (a] apple.com> 28372 28373 Reviewed by Oliver. 28374 28375 - shave some cycles off of local storage access for a 1% SunSpider speedup 28376 28377 Keep the LocalStorage pointer in the ExecState, instead of getting 28378 it from the ActivationImp all the time. 28379 28380 * kjs/ExecState.cpp: 28381 (KJS::ExecState::updateLocalStorage): 28382 * kjs/ExecState.h: 28383 (KJS::ExecState::localStorage): 28384 * kjs/nodes.cpp: 28385 (KJS::LocalVarAccessNode::evaluate): 28386 (KJS::LocalVarFunctionCallNode::evaluate): 28387 (KJS::PostIncLocalVarNode::evaluate): 28388 (KJS::PostDecLocalVarNode::evaluate): 28389 (KJS::LocalVarTypeOfNode::evaluate): 28390 (KJS::PreIncLocalVarNode::evaluate): 28391 (KJS::PreDecLocalVarNode::evaluate): 28392 (KJS::ReadModifyLocalVarNode::evaluate): 28393 (KJS::AssignLocalVarNode::evaluate): 28394 (KJS::FunctionBodyNode::processDeclarationsForFunctionCode): 28395 28396 2007-10-31 Adam Roben <aroben (a] apple.com> 28397 28398 Fix a crash on launch due to a static initializer race 28399 28400 We now use fast inline assembler spinlocks which can be statically 28401 initialized at compile time. 28402 28403 As a side benefit, this speeds up SunSpider by 0.4%. 28404 28405 Reviewed by Oliver. 28406 28407 * wtf/FastMalloc.cpp: 28408 * wtf/TCSpinLock.h: 28409 (TCMalloc_SpinLock::Lock): 28410 (TCMalloc_SpinLock::Unlock): 28411 (TCMalloc_SlowLock): 28412 * wtf/TCSystemAlloc.cpp: 28413 28414 2007-10-31 Kevin McCullough <kmccullough (a] apple.com> 28415 28416 Reviewed by Sam. 28417 28418 - Corrected spelling. 28419 28420 * wtf/HashTraits.h: 28421 28422 2007-10-31 Mark Rowe <mrowe (a] apple.com> 28423 28424 Further Gtk build fixage. 28425 28426 * kjs/regexp_object.cpp: 28427 28428 2007-10-31 Mark Rowe <mrowe (a] apple.com> 28429 28430 Gtk build fix. 28431 28432 * kjs/regexp.h: 28433 28434 2007-10-31 Darin Adler <darin (a] apple.com> 28435 28436 Reviewed by Maciej. 28437 28438 - fix http://bugs.webkit.org/show_bug.cgi?id=15749 28439 RegExp/RegExpObjectImp cause needless UString creation 28440 28441 Speeds things up 0.4% according to SunSpider. 28442 28443 * kjs/config.h: Define USE(PCRE16) instead of HAVE(PCREPOSIX), 28444 because this library doesn't use the real PCRE -- it uses its 28445 own PCRE that works on UTF-16. 28446 28447 * kjs/regexp.h: Removed a few unused functions. Changed the ifdef. 28448 Use Noncopyable. Change the return value of match. 28449 * kjs/regexp.cpp: 28450 (KJS::RegExp::RegExp): Call pcre_compile2, for a slight speed boost. 28451 (KJS::RegExp::~RegExp): PCRE16 rather than PCREPOSIX. 28452 (KJS::RegExp::match): Change to return the position as an int and the 28453 ovector as a OwnArrayPtr<int> for efficiency and clearer storage management. 28454 28455 * kjs/regexp_object.h: Change performMatch and arrayOfMatches to no longer 28456 require a result string. 28457 * kjs/regexp_object.cpp: 28458 (RegExpProtoFunc::callAsFunction): Update for new signature of performMatch. 28459 (RegExpObjectImp::performMatch): Change so it doesn't return a string. 28460 (RegExpObjectImp::arrayOfMatches): Simplify by unifying the handling of 28461 the main result with the backreferences; now it doesn't need to take 28462 a result parameter. 28463 (RegExpObjectImp::getBackref): Minor tweaks. 28464 (RegExpObjectImp::getLastParen): Ditto. 28465 (RegExpObjectImp::getLeftContext): Ditto. 28466 (RegExpObjectImp::getRightContext): Ditto. 28467 (RegExpObjectImp::getValueProperty): Change LastMatch case to call 28468 getBackref(0) so we don't need a separate getLastMatch function. 28469 28470 * kjs/string_object.cpp: 28471 (KJS::replace): Update to use new performMatch, including merging the 28472 matched string section with the other substrings. 28473 (KJS::StringProtoFunc::callAsFunction): Update functions to use the 28474 new performMatch and match. Also change to use OwnArrayPtr. 28475 28476 2007-10-31 Oliver Hunt <oliver (a] apple.com> 28477 28478 * kjs/nodes.h: include OwnPtr.h 28479 28480 2007-10-31 Oliver Hunt <oliver (a] apple.com> 28481 28482 Reviewed by Maciej. 28483 28484 Remove SourceCodeElement class and replaced with a Vector for a 0.8% gain on sunspider 28485 28486 * kjs/grammar.y: 28487 * kjs/nodes.cpp: 28488 (KJS::statementListPushFIFO): 28489 (KJS::statementListGetDeclarations): 28490 (KJS::statementListInitializeDeclarationStacks): 28491 (KJS::statementListInitializeVariableAccessStack): 28492 (KJS::statementListExecute): 28493 (KJS::BlockNode::optimizeVariableAccess): 28494 (KJS::BlockNode::BlockNode): 28495 (KJS::BlockNode::getDeclarations): 28496 (KJS::BlockNode::execute): 28497 (KJS::CaseClauseNode::optimizeVariableAccess): 28498 (KJS::CaseClauseNode::getDeclarations): 28499 (KJS::CaseClauseNode::evalStatements): 28500 (KJS::FunctionBodyNode::initializeDeclarationStacks): 28501 (KJS::FunctionBodyNode::optimizeVariableAccess): 28502 * kjs/nodes.h: 28503 * kjs/nodes2string.cpp: 28504 (KJS::statementListStreamTo): 28505 (KJS::BlockNode::streamTo): 28506 (KJS::CaseClauseNode::streamTo): 28507 28508 2007-10-30 Mark Rowe <mrowe (a] apple.com> 28509 28510 * kjs/property_map.cpp: Added a missing using directive to fix the build 28511 for non-Mac ports. Mac worked only because it does the AllInOneFile compile. 28512 28513 2007-10-31 Maciej Stachowiak <mjs (a] apple.com> 28514 28515 * kjs/property_map.cpp: Include HashTable.h the right way to fix the build 28516 for non-Mac ports. 28517 28518 2007-10-31 Alexey Proskuryakov <ap (a] webkit.org> 28519 28520 Reviewed by Darin. 28521 28522 http://bugs.webkit.org/show_bug.cgi?id=11001 28523 WebKit doesn't support RegExp.compile method 28524 28525 Test: fast/js/regexp-compile.html 28526 28527 * kjs/regexp_object.cpp: 28528 (RegExpPrototype::RegExpPrototype): 28529 (RegExpProtoFunc::callAsFunction): 28530 * kjs/regexp_object.h: 28531 (KJS::RegExpProtoFunc::): 28532 Added RegExp.compile. 28533 28534 * tests/mozilla/expected.html: js1_2/regexp/compile.js now passes. 28535 28536 2007-10-31 Maciej Stachowiak <mjs (a] apple.com> 28537 28538 Reviewed by Oliver. 28539 28540 - get rid of integer divide in PropertyMap and HashTable for 1% SunSpider speedup 28541 28542 Integer divide sucks. Fortunately, a bunch of shifts and XORs 28543 biased towards the high bits is sufficient to provide a good 28544 double hash. Besides the SunSpider win, I used the dump statistics 28545 mode for both to verify that collisions did not increase and that 28546 the longest collision chain is not any longer. 28547 28548 * kjs/property_map.cpp: 28549 (KJS::doubleHash): 28550 (KJS::PropertyMap::get): 28551 (KJS::PropertyMap::getLocation): 28552 (KJS::PropertyMap::put): 28553 (KJS::PropertyMap::insert): 28554 (KJS::PropertyMap::remove): 28555 (KJS::PropertyMap::checkConsistency): 28556 * wtf/HashTable.h: 28557 (WTF::doubleHash): 28558 (WTF::::lookup): 28559 (WTF::::lookupForWriting): 28560 (WTF::::fullLookupForWriting): 28561 (WTF::::add): 28562 28563 2007-10-30 Adam Roben <aroben (a] apple.com> 28564 28565 * kjs/collector.h: Make HeapType public so it can be used for non-member 28566 things like the HeapConstants struct template. Fixes the build on Windows. 28567 28568 2007-10-30 Adam Roben <aroben (a] apple.com> 28569 28570 Change ALWAYS_INLINE and WTF_PRIVATE_INLINE to use __forceinline on Windows 28571 28572 Speeds up SunSpider by 0.4%. 28573 28574 Reviewed by Steve and Maciej. 28575 28576 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable 28577 a warning during LTCG in release builds about double -> float 28578 conversion. 28579 * wtf/AlwaysInline.h: 28580 * wtf/FastMalloc.h: 28581 28582 2007-10-30 Adam Roben <aroben (a] apple.com> 28583 28584 Use GetCurrentThreadId instead of pthread_self in FastMalloc 28585 28586 Speeds up SunSpider by 0.3%. 28587 28588 Reviewed by Steve. 28589 28590 * wtf/FastMalloc.cpp: 28591 (WTF::TCMalloc_ThreadCache::InitTSD): 28592 (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary): 28593 28594 2007-10-30 Adam Roben <aroben (a] apple.com> 28595 28596 Switch to a Win32 critical section implementation of spinlocks 28597 28598 Speeds up SunSpider by 0.4%. 28599 28600 Reviewed by Steve. 28601 28602 * wtf/FastMalloc.cpp: 28603 * wtf/TCSpinLock.h: 28604 (TCMalloc_SpinLock::TCMalloc_SpinLock): 28605 (TCMalloc_SpinLock::Init): 28606 (TCMalloc_SpinLock::Finalize): 28607 (TCMalloc_SpinLock::Lock): 28608 (TCMalloc_SpinLock::Unlock): 28609 * wtf/TCSystemAlloc.cpp: 28610 28611 2007-10-30 Adam Roben <aroben (a] apple.com> 28612 28613 Fix Bug 15586: REGRESSION (r26759-r26785): Windows nightly builds crash with Safari 3 Public Beta 28614 28615 http://bugs.webkit.org/show_bug.cgi?id=15586 28616 28617 Also fixes: <rdar://5565303> Cannot use regsvr32.exe to register WebKit.dll 28618 28619 Use Win32 TLS functions instead of __declspec(thread), which breaks 28620 delay-loading. 28621 28622 Reviewed by Steve. 28623 28624 * wtf/FastMalloc.cpp: 28625 (WTF::getThreadHeap): 28626 (WTF::TCMalloc_ThreadCache::InitModule): 28627 28628 2007-10-30 Maciej Stachowiak <mjs (a] apple.com> 28629 28630 Reviewed by Oliver. 28631 28632 - allocate numbers in half-size cells, for an 0.5% SunSpider speedup 28633 http://bugs.webkit.org/show_bug.cgi?id=15772 28634 28635 We do this by using a single mark bit per two number cells, and 28636 tweaking marking. 28637 28638 Besides being an 0.5% win overall, this is a 7.1% win on morph. 28639 28640 * kjs/collector.cpp: 28641 (KJS::Collector::heapAllocate): 28642 (KJS::Collector::markStackObjectsConservatively): 28643 (KJS::Collector::sweep): 28644 * kjs/collector.h: 28645 (KJS::SmallCollectorCell::): 28646 28647 2007-10-30 Geoffrey Garen <ggaren (a] apple.com> 28648 28649 Reviewed by Adam Roben, Sam Weinig. 28650 28651 Made conflicts in grammar.y a persistent build failure. 28652 28653 * DerivedSources.make: 28654 28655 2007-10-30 Kevin McCullough <kmccullough (a] apple.com> 28656 28657 Reviewed by Adam and Geoff. 28658 28659 - Added a new cast so all the casts are in the same place. 28660 28661 * API/APICast.h: 28662 (toGlobalRef): 28663 28664 2007-10-30 Geoffrey Garen <ggaren (a] apple.com> 28665 28666 Reviewed by Darin Adler. 28667 28668 Fixed <rdar://problem/5567504> shift/reduce conflict introduced in r24457 28669 28670 JS tests, including 28671 28672 ecma_2/Statements/dowhile-001.js 28673 ecma_2/Statements/dowhile-002.js 28674 ecma_2/Statements/dowhile-003.js 28675 ecma_2/Statements/dowhile-004.js 28676 ecma_2/Statements/dowhile-005.js 28677 ecma_2/Statements/dowhile-006.js 28678 ecma_2/Statements/dowhile-007.js 28679 js1_2/statements/do_while.js 28680 28681 and layout tests, including 28682 28683 do-while-expression-value.html 28684 do-while-semicolon.html 28685 do-while-without-semicolon.html 28686 28687 pass. 28688 28689 * kjs/grammar.y: Use the explicit "error" production, as we do with other 28690 automatic semicolon insertions, to disambiguate "do { } while();" from 28691 "do { } while()" followed by ";" (the empty statement). 28692 28693 2007-10-29 Oliver Hunt <oliver (a] apple.com> 28694 28695 Reviewed by Maciej. 28696 28697 Debranching remaining assignment nodes, and miscellaneous cleanup 28698 28699 Split read-modify code paths out of AssignBracketNode and AssignDotNode 28700 Removed now unnecessary check for write-only assignment in ReadModifyLocalVarNode 28701 and ReadModifyResolveNode evaluate methods 28702 28703 Leads to a 1% gain in SunSpider. 28704 28705 * kjs/grammar.y: 28706 * kjs/nodes.cpp: 28707 (KJS::ReadModifyLocalVarNode::evaluate): 28708 (KJS::ReadModifyResolveNode::evaluate): 28709 (KJS::AssignDotNode::evaluate): 28710 (KJS::ReadModifyDotNode::optimizeVariableAccess): 28711 (KJS::ReadModifyDotNode::evaluate): 28712 (KJS::AssignBracketNode::evaluate): 28713 (KJS::ReadModifyBracketNode::optimizeVariableAccess): 28714 (KJS::ReadModifyBracketNode::evaluate): 28715 * kjs/nodes.h: 28716 (KJS::AssignBracketNode::): 28717 (KJS::AssignBracketNode::precedence): 28718 (KJS::AssignDotNode::): 28719 (KJS::AssignDotNode::precedence): 28720 * kjs/nodes2string.cpp: 28721 (KJS::ReadModifyBracketNode::streamTo): 28722 (KJS::AssignBracketNode::streamTo): 28723 (KJS::ReadModifyDotNode::streamTo): 28724 (KJS::AssignDotNode::streamTo): 28725 28726 2007-10-29 Oliver Hunt <oliver (a] apple.com> 28727 28728 Debranching various Node::evaluate implementations 28729 28730 Reviewed by Maciej. 28731 28732 Split the read-modify-write assignment cases out of AssignResolveNode and into ReadModifyResolveNode 28733 Split the increment and decrement cases for Prefix- and Postfix- ResolveNode, BracketNode, and DotNode 28734 28735 Gains 1.6% on SunSpider 28736 28737 * JavaScriptCore.xcodeproj/project.pbxproj: 28738 * kjs/grammar.y: 28739 * kjs/nodes.cpp: 28740 (KJS::PostIncResolveNode::optimizeVariableAccess): 28741 (KJS::PostIncResolveNode::evaluate): 28742 (KJS::PostIncLocalVarNode::evaluate): 28743 (KJS::PostDecResolveNode::optimizeVariableAccess): 28744 (KJS::PostDecResolveNode::evaluate): 28745 (KJS::PostDecLocalVarNode::evaluate): 28746 (KJS::PostIncBracketNode::evaluate): 28747 (KJS::PostDecBracketNode::evaluate): 28748 (KJS::PostIncDotNode::evaluate): 28749 (KJS::PostDecDotNode::evaluate): 28750 (KJS::PreIncResolveNode::optimizeVariableAccess): 28751 (KJS::PreIncLocalVarNode::evaluate): 28752 (KJS::PreIncResolveNode::evaluate): 28753 (KJS::PreDecResolveNode::optimizeVariableAccess): 28754 (KJS::PreDecLocalVarNode::evaluate): 28755 (KJS::PreDecResolveNode::evaluate): 28756 (KJS::PreIncBracketNode::evaluate): 28757 (KJS::PreDecBracketNode::evaluate): 28758 (KJS::PreIncDotNode::evaluate): 28759 (KJS::PreDecDotNode::evaluate): 28760 (KJS::ReadModifyResolveNode::optimizeVariableAccess): 28761 (KJS::AssignResolveNode::optimizeVariableAccess): 28762 (KJS::AssignLocalVarNode::evaluate): 28763 (KJS::AssignResolveNode::evaluate): 28764 * kjs/nodes.h: 28765 (KJS::PostDecResolveNode::): 28766 (KJS::PostDecResolveNode::precedence): 28767 (KJS::PostDecLocalVarNode::): 28768 (KJS::PostfixBracketNode::): 28769 (KJS::PostfixBracketNode::precedence): 28770 (KJS::PostIncBracketNode::): 28771 (KJS::PostIncBracketNode::isIncrement): 28772 (KJS::PostDecBracketNode::): 28773 (KJS::PostDecBracketNode::isIncrement): 28774 (KJS::PostfixDotNode::): 28775 (KJS::PostfixDotNode::precedence): 28776 (KJS::PostIncDotNode::): 28777 (KJS::PostIncDotNode::isIncrement): 28778 (KJS::PostDecDotNode::): 28779 (KJS::PreIncResolveNode::): 28780 (KJS::PreDecResolveNode::): 28781 (KJS::PreDecResolveNode::precedence): 28782 (KJS::PreDecLocalVarNode::): 28783 (KJS::PrefixBracketNode::): 28784 (KJS::PrefixBracketNode::precedence): 28785 (KJS::PreIncBracketNode::): 28786 (KJS::PreIncBracketNode::isIncrement): 28787 (KJS::PreDecBracketNode::): 28788 (KJS::PreDecBracketNode::isIncrement): 28789 (KJS::PrefixDotNode::): 28790 (KJS::PrefixDotNode::precedence): 28791 (KJS::PreIncDotNode::): 28792 (KJS::PreIncDotNode::isIncrement): 28793 (KJS::PreDecDotNode::): 28794 (KJS::ReadModifyResolveNode::): 28795 (KJS::ReadModifyLocalVarNode::): 28796 (KJS::AssignResolveNode::): 28797 (KJS::AssignResolveNode::precedence): 28798 * kjs/nodes2string.cpp: 28799 (KJS::PostIncResolveNode::streamTo): 28800 (KJS::PostDecResolveNode::streamTo): 28801 (KJS::PostfixBracketNode::streamTo): 28802 (KJS::PostfixDotNode::streamTo): 28803 (KJS::PreIncResolveNode::streamTo): 28804 (KJS::PreDecResolveNode::streamTo): 28805 (KJS::ReadModifyResolveNode::streamTo): 28806 (KJS::AssignResolveNode::streamTo): 28807 28808 2007-10-29 Maciej Stachowiak <mjs (a] apple.com> 28809 28810 Not reviewed, build fix. 28811 28812 - Include Vector.h in a way that actually works. 28813 28814 * kjs/LocalStorage.h: 28815 28816 2007-10-29 Maciej Stachowiak <mjs (a] apple.com> 28817 28818 Not reviewed, build fix. 28819 28820 - Install LocalStorage.h as a private header. 28821 28822 * JavaScriptCore.xcodeproj/project.pbxproj: 28823 28824 2007-10-29 Maciej Stachowiak <mjs (a] apple.com> 28825 28826 Reviewed by Darin. 28827 28828 - Define good VectorTraits for LocalStorage entry for 0.5% speed improvement on SunSpider. 28829 28830 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 28831 * JavaScriptCore.xcodeproj/project.pbxproj: 28832 * kjs/LocalStorage.h: Added. 28833 (KJS::LocalStorageEntry::LocalStorageEntry): 28834 (WTF::): 28835 * kjs/function.h: 28836 * kjs/nodes.cpp: 28837 (KJS::FunctionBodyNode::processDeclarationsForFunctionCode): 28838 28839 2007-10-29 Geoffrey Garen <ggaren (a] apple.com> 28840 28841 Reviewed by Oliver Hunt. 28842 28843 Some small tweaks that I notice while reviewing Oliver's last patch. 28844 28845 Includes removal of an unnecessary KJS_CHECKEXCEPTIONVALUE. 28846 28847 No change in SunSpider because SunSpider doesn't take the code path that 28848 would execute the unnecessary KJS_CHECKEXCEPTIONVALUE much. 28849 28850 * kjs/nodes.cpp: 28851 (KJS::LocalVarPostfixNode::evaluate): 28852 (KJS::TypeOfResolveNode::optimizeVariableAccess): 28853 (KJS::LocalVarTypeOfNode::evaluate): 28854 (KJS::PrefixResolveNode::optimizeVariableAccess): 28855 (KJS::LocalVarPrefixNode::evaluate): 28856 (KJS::AssignResolveNode::optimizeVariableAccess): 28857 (KJS::LocalVarAssignNode::evaluate): 28858 * kjs/nodes.h: 28859 (KJS::LocalVarTypeOfNode::): 28860 (KJS::PrefixResolveNode::): 28861 (KJS::LocalVarPrefixNode::): 28862 (KJS::AssignResolveNode::): 28863 (KJS::LocalVarAssignNode::): 28864 28865 2007-10-29 Eric Seidel <eric (a] webkit.org> 28866 28867 Reviewed by Maciej. 28868 28869 SunSpider claims this was a 0.7% speedup. 28870 28871 * kjs/string_object.cpp: 28872 (KJS::StringProtoFunc::callAsFunction): avoid mallocing a jsString in the common case 28873 28874 2007-10-29 Maciej Stachowiak <mjs (a] apple.com> 28875 28876 Reviewed by Mark. 28877 28878 - re-enable asserts for access to empty or deleted keys 28879 28880 * wtf/HashTable.h: 28881 (WTF::::lookup): 28882 (WTF::::lookupForWriting): 28883 (WTF::::fullLookupForWriting): 28884 (WTF::::add): 28885 28886 2007-10-29 Eric Seidel <eric (a] webkit.org> 28887 28888 Build fix only, no review. 28889 28890 * JavaScriptCore.exp: Export symbol for new StringInstance::getOwnPropertySlot 28891 28892 2007-10-29 Mark Rowe <mrowe (a] apple.com> 28893 28894 Gtk build fix. Move struct declarations into nodes.h. 28895 28896 * kjs/grammar.y: 28897 * kjs/nodes.h: 28898 28899 2007-10-29 Eric Seidel <eric (a] webkit.org> 28900 28901 Reviewed by darin. 28902 28903 Give StringInstance a getOwnPropertySlot(ExecState, unsigned, PropertySlot) fastpath, just like Arrays. 28904 Make it a compile time error to use toString(ExecState) on a StringInstance 28905 28906 SunSpider claims this was a 6.6% speedup overall (22% on string-base64) 28907 28908 * kjs/internal.h: 28909 (KJS::StringImp::getLength): 28910 * kjs/string_object.cpp: 28911 (KJS::StringInstance::lengthGetter): 28912 (KJS::StringInstance::inlineGetOwnPropertySlot): 28913 (KJS::StringInstance::getOwnPropertySlot): 28914 * kjs/string_object.h: 28915 28916 2007-10-28 Oliver Hunt <oliver (a] apple.com> 28917 28918 Reviewed by Darin. 28919 28920 Add nodes to allow Assignment, TypeOf, and prefix operators to 28921 make use of the new optimised local variable look up. 28922 28923 5% gain on sunspider 28924 28925 * kjs/nodes.cpp: 28926 (KJS::TypeOfResolveNode::optimizeVariableAccess): 28927 (KJS::LocalTypeOfAccessNode::evaluate): 28928 (KJS::PrefixResolveNode::optimizeVariableAccess): 28929 (KJS::PrefixLocalAccessNode::evaluate): 28930 (KJS::AssignResolveNode::optimizeVariableAccess): 28931 (KJS::AssignLocalAccessNode::evaluate): 28932 * kjs/nodes.h: 28933 (KJS::TypeOfResolveNode::): 28934 (KJS::TypeOfResolveNode::precedence): 28935 (KJS::LocalTypeOfAccessNode::): 28936 (KJS::PrefixResolveNode::): 28937 (KJS::PrefixResolveNode::precedence): 28938 (KJS::PrefixLocalAccessNode::): 28939 (KJS::AssignResolveNode::): 28940 (KJS::AssignLocalAccessNode::): 28941 28942 2007-10-28 Maciej Stachowiak <mjs (a] apple.com> 28943 28944 Reviewed by Darin. 28945 28946 - avoid creating and then breaking circular lists in the parser, instead track head and tail pointers at parse time 28947 http://bugs.webkit.org/show_bug.cgi?id=15748 28948 28949 Not a significant speedup or slowdown on SunSpider. 28950 28951 * kjs/Parser.cpp: 28952 (KJS::clearNewNodes): 28953 * kjs/Parser.h: 28954 * kjs/grammar.y: 28955 * kjs/nodes.cpp: 28956 (KJS::BlockNode::BlockNode): 28957 (KJS::CaseBlockNode::CaseBlockNode): 28958 (KJS::FunctionBodyNode::FunctionBodyNode): 28959 (KJS::SourceElementsNode::SourceElementsNode): 28960 (KJS::ProgramNode::ProgramNode): 28961 * kjs/nodes.h: 28962 (KJS::ElementNode::): 28963 (KJS::ArrayNode::): 28964 (KJS::PropertyListNode::): 28965 (KJS::ObjectLiteralNode::): 28966 (KJS::ArgumentListNode::): 28967 (KJS::ArgumentsNode::): 28968 (KJS::VarDeclListNode::): 28969 (KJS::VarStatementNode::): 28970 (KJS::ForNode::): 28971 (KJS::ParameterNode::): 28972 (KJS::FuncExprNode::): 28973 (KJS::FuncDeclNode::): 28974 (KJS::SourceElementsNode::): 28975 (KJS::CaseClauseNode::): 28976 (KJS::ClauseListNode::): 28977 28978 2007-10-28 Mark Rowe <mrowe (a] apple.com> 28979 28980 Disable assertions in a manner that doesn't break the Qt Windows build. 28981 28982 * wtf/HashTable.h: 28983 (WTF::::lookup): 28984 (WTF::::lookupForWriting): 28985 (WTF::::fullLookupForWriting): 28986 28987 2007-10-28 Geoffrey Garen <ggaren (a] apple.com> 28988 28989 Temporarily disabling some ASSERTs I introduced in my last check-in 28990 because of http://bugs.webkit.org/show_bug.cgi?id=15747 28991 Lots of layout tests fail the !HashTranslator::equal(KeyTraits::emptyValue() ASSERT 28992 28993 * wtf/HashTable.h: 28994 (WTF::::lookup): 28995 (WTF::::lookupForWriting): 28996 (WTF::::fullLookupForWriting): 28997 (WTF::::add): 28998 28999 2007-10-28 Geoffrey Garen <ggaren (a] apple.com> 29000 29001 Reviewed by Darin Adler. 29002 29003 Fixed http://bugs.webkit.org/show_bug.cgi?id=15746 29004 #ifndef ASSERT_DISABLED is no good! 29005 29006 Replaced with #if !ASSERT_DISABLED. 29007 29008 * wtf/HashTable.h: 29009 (WTF::::lookup): 29010 (WTF::::lookupForWriting): 29011 (WTF::::fullLookupForWriting): 29012 (WTF::::add): 29013 29014 2007-10-28 Geoffrey Garen <ggaren (a] apple.com> 29015 29016 Reviewed by Darin Adler. 29017 29018 Added FunctionCallResolveNode, PostfixResolveNode, and DeleteResolveNode 29019 to the AST transfom that replaces slow resolve nodes with fast local 29020 variable alternatives. 29021 29022 2.5% speedup on SunSpider. 29023 29024 Also added some missing copyright notices. 29025 29026 * kjs/nodes.cpp: 29027 (KJS::FunctionCallResolveNode::optimizeVariableAccess): 29028 (KJS::FunctionCallResolveNode::evaluate): 29029 (KJS::LocalVarFunctionCallNode::evaluate): 29030 (KJS::PostfixResolveNode::optimizeVariableAccess): 29031 (KJS::PostfixResolveNode::evaluate): 29032 (KJS::LocalVarPostfixNode::evaluate): 29033 (KJS::DeleteResolveNode::optimizeVariableAccess): 29034 (KJS::DeleteResolveNode::evaluate): 29035 (KJS::LocalVarDeleteNode::evaluate): 29036 * kjs/nodes.h: 29037 (KJS::FunctionCallResolveNode::): 29038 (KJS::LocalVarFunctionCallNode::LocalVarFunctionCallNode): 29039 (KJS::PostfixResolveNode::): 29040 (KJS::LocalVarPostfixNode::LocalVarPostfixNode): 29041 (KJS::DeleteResolveNode::): 29042 (KJS::LocalVarDeleteNode::LocalVarDeleteNode): 29043 29044 2007-10-28 Eric Seidel <eric (a] webkit.org> 29045 29046 Reviewed by darin. 29047 29048 Inline UString::Rep::deref() for a 0.8% improvement in SunSpider 29049 Add virtual keyword to a few virtual functions previously unmarked. 29050 29051 * kjs/internal.h: 29052 (KJS::StringImp::type): 29053 (KJS::NumberImp::type): 29054 * kjs/ustring.h: 29055 (KJS::UString::Rep::deref): 29056 29057 2007-10-28 Darin Adler <darin (a] apple.com> 29058 29059 - fix "broken everything" from the storage leak fix 29060 29061 * wtf/RefPtr.h: (WTF::RefPtr::RefPtr): Added a PlacementNewAdopt constructor. 29062 * kjs/ustring.h: (KJS::UString::UString): Pass PlacementNewAdopt along to RefPtr. 29063 29064 2007-10-28 Darin Adler <darin (a] apple.com> 29065 29066 Reviewed by Adam. 29067 29068 - turn on unused parameter waring on Mac OS X because it's already on elsewhere 29069 29070 * Configurations/Base.xcconfig: Took out -wno-unused-parameter. 29071 29072 * API/JSNode.c: 29073 * API/JSNodeList.c: 29074 * API/minidom.c: 29075 * API/testapi.c: 29076 Fixed unused variables by using them or marked them with UNUSED_PARAM. 29077 29078 * kjs/CollectorHeapIntrospector.h: (KJS::CollectorHeapIntrospector::zoneCalloc): 29079 Removed parameter names to indicate they are unused. 29080 29081 2007-10-28 Darin Adler <darin (a] apple.com> 29082 29083 Reviewed by Maciej. 29084 29085 - fix a storage leak where we ref the UString every time we replace 29086 a ResolveNode with a LocalVarAccessNode 29087 29088 * kjs/identifier.h: (KJS::Identifier::Identifier): Added a constructor 29089 that takes PlacementNewAdopt. 29090 29091 * kjs/nodes.h: (KJS::ResolveNode::ResolveNode): Initialize the ident 29092 with PlacementNewAdopt instead of the old value of ident. 29093 29094 * kjs/ustring.h: (KJS::UString::UString): Added a constructor that 29095 takes PlacementNewAdopt. 29096 29097 2007-10-28 Darin Adler <darin (a] apple.com> 29098 29099 - Windows build fix; get rid of unused parameter 29100 29101 * kjs/nodes.cpp: (KJS::ResolveNode::optimizeVariableAccess): Don't pass it. 29102 * kjs/nodes.h: (KJS::LocalVarAccessNode::LocalVarAccessNode): Remove it. 29103 The assertions weren't all that helpful. 29104 29105 2007-10-28 Mark Rowe <mrowe (a] apple.com> 29106 29107 Gtk build fix. Add include of MathExtras.h. 29108 29109 * kjs/string_object.cpp: 29110 29111 2007-10-28 Mark Rowe <mrowe (a] apple.com> 29112 29113 Reviewed by Maciej and Tim. 29114 29115 Replace uses of isNaN and isInf with isnan and isinf, and 29116 remove isNaN and isInf. 29117 29118 * kjs/config.h: Remove unused HAVE_'s. 29119 * kjs/date_object.cpp: 29120 (KJS::DateInstance::getTime): 29121 (KJS::DateInstance::getUTCTime): 29122 (KJS::DateProtoFunc::callAsFunction): 29123 (KJS::DateObjectImp::construct): 29124 (KJS::DateObjectFuncImp::callAsFunction): 29125 * kjs/function.cpp: 29126 (KJS::GlobalFuncImp::callAsFunction): 29127 * kjs/math_object.cpp: 29128 (MathFuncImp::callAsFunction): 29129 * kjs/nodes2string.cpp: 29130 (KJS::isParserRoundTripNumber): 29131 * kjs/number_object.cpp: 29132 (NumberProtoFunc::callAsFunction): 29133 * kjs/operations.cpp: 29134 * kjs/operations.h: 29135 * kjs/string_object.cpp: 29136 (KJS::StringProtoFunc::callAsFunction): 29137 * kjs/ustring.cpp: 29138 (KJS::UString::from): 29139 * kjs/value.cpp: 29140 (KJS::JSValue::toInteger): 29141 (KJS::JSValue::toInt32SlowCase): 29142 (KJS::JSValue::toUInt32SlowCase): 29143 29144 2007-10-28 Geoffrey Garen <ggaren (a] apple.com> 29145 29146 Build fix: use the new-fangled missingSymbolMarker(). 29147 29148 * kjs/nodes.cpp: 29149 (KJS::ResolveNode::optimizeVariableAccess): 29150 * kjs/nodes.h: 29151 (KJS::LocalVarAccessNode::LocalVarAccessNode): 29152 29153 2007-10-28 Geoffrey Garen <ggaren (a] apple.com> 29154 29155 Reviewed by Maciej Stachowiak, Darin Adler. 29156 29157 Much supporting work done by Maciej Stachowiak, Maks Orlovich, and 29158 Cameron Zwarich. 29159 29160 AST transfom to replace slow resolve nodes with fast local variable 29161 alternatives that do direct memory access. Currently, only ResolveNode 29162 provides a fast local variable alternative. 6 others are soon to come. 29163 29164 16.7% speedup on SunSpider. 29165 29166 Most of this patch is just scaffolding to support iterating all the 29167 resolve nodes in the AST through optimizeResolveNodes(). In 29168 optimizeResolveNodes(), most classes just push their child nodes onto 29169 the processing stack, while ResolveNodes actually replace themselves in 29170 the tree with more optimized alternatives, if possible. 29171 29172 Here are the interesting bits: 29173 29174 * kjs/nodes.h: Added PlacementNewAdoptTag, along with implementations 29175 in Node and ResolveNode. This tag allows you to use placement new to 29176 swap out a base class Node in favor of a subclass copy that holds the 29177 same data. (Without this tag, default initialization would NULL out 29178 RefPtrs, change line numbers, etc.) 29179 29180 * kjs/nodes.cpp: 29181 (KJS::ResolveNode::evaluate): Since we're taking the slow path, ASSERT 29182 that the fast path is impossible, to make sure we didn't leave anything 29183 on the table. 29184 29185 (KJS::FunctionBodyNode::optimizeResolveNodes): Here's where the AST 29186 transformation happens. 29187 29188 (KJS::ResolveNode::optimizeResolveNodes): Here's where the ResolveNode 29189 optimization happens. 29190 29191 * kjs/function.h: Added symbolTable() accessor for, for the sake of 29192 an ASSERT. 29193 29194 2007-10-28 Mark Rowe <mrowe (a] apple.com> 29195 29196 Reviewed by Maciej. 29197 29198 Fix "AllInOneFile.o has a global initializer in it". 29199 29200 Some versions of gcc generate a global initializer for std::numeric_limits<size_t>::max(). 29201 We can avoid this by moving it inside an inline function. 29202 29203 * kjs/SymbolTable.h: 29204 (KJS::missingSymbolMarker): 29205 * kjs/function.cpp: 29206 (KJS::ActivationImp::getOwnPropertySlot): 29207 (KJS::ActivationImp::put): 29208 29209 2007-10-28 Maciej Stachowiak <mjs (a] apple.com> 29210 29211 Reviewed by Mark. 29212 29213 - Added assertions to protect against adding empty or deleted keys to a HashTable 29214 29215 * wtf/HashTable.h: 29216 (WTF::HashTable::lookup): 29217 (WTF::HashTable::lookupForWriting): 29218 (WTF::HashTable::fullLookupForWriting): 29219 (WTF::HashTable::add): 29220 29221 2007-10-28 Darin Adler <darin (a] apple.com> 29222 29223 - fix GTK build 29224 29225 * kjs/nodes2string.cpp: (KJS::isParserRoundTripNumber): 29226 Use isNaN and isInf instead of isnan and isinf. 29227 29228 2007-10-28 Darin Adler <darin (a] apple.com> 29229 29230 Reviewed by Maciej. 29231 29232 - http://bugs.webkit.org/show_bug.cgi?id=15735 29233 remove GroupNode to simplify AST and possibly get a modest speedup 29234 29235 This patch removes 4 node types: GroupNode, PropertyNameNode, 29236 FunctionCallParenBracketNode, and FunctionCallParenDotNode. 29237 29238 To remove GroupNode, we add knowledge of precedence to the tree nodes, 29239 and use that when serializing to determine where parentheses are needed. 29240 This means we no longer have to represent parentheses in the tree. 29241 29242 The precedence values are named after productions in the grammar from the 29243 JavaScript standard. 29244 29245 SunSpider says this is an 0.4% speedup. 29246 29247 * kjs/function.h: 29248 * kjs/function.cpp: Removed escapeStringForPrettyPrinting -- it's part of 29249 serialization, so I moved it to the file that takes care of that. 29250 29251 * kjs/grammar.y: Changed makeGetterOrSetterPropertyNode to use 0 to 29252 indicate failure instead of a separate boolean. Got rid of PropertyNameNode 29253 by merging the PropertyName rule into the Property rule (which was easier 29254 than figuring out how to pass the Identifier from one node to another). 29255 Got rid of GroupNode, nodeInsideAllParens(), FunctionCallParenBracketNode, 29256 and FunctionCallParenDotNode. 29257 29258 * kjs/nodes.h: Removed unused forward declarations and Operator values. 29259 Added Precedence enum, and precedence function to all nodes. Removed 29260 nodeInsideAllParens. Added streamBinaryOperator function for serialization. 29261 Removed GroupNode and PropertyNameNode. Made PropertyNode store an Identifier. 29262 Removed FunctionCallParenBracketNode and FunctionCallParenDotNode. 29263 29264 * kjs/nodes.cpp: Removed Node::nodinsideAllParens, GroupNode, and PropertyNameNode. 29265 (KJS::PropertyListNode::evaluate): Changed code to get name directly instead 29266 of converting it from an Identifier to a jsString then back to a UString 29267 then into an Identifier again! 29268 29269 * kjs/nodes2string.cpp: Changed special-token implementation to use a separate 29270 function for each of Endl, Indent, Unindent, and DotExpr instead of using a 29271 single function with a switch. Added a precedence that you can stream in, to 29272 cause the next node serialized to add parentheses based on that precedence value. 29273 (KJS::operatorString): Moved to the top of the file. 29274 (KJS::escapeStringForPrettyPrinting): Moved here from function.cpp. Removed old 29275 workaround for snprintf, since StringExtras.h takes care of that. 29276 (KJS::operator<<): Made the char and char* versions faster by using UString's 29277 character append functions instead of constructing a UString. Added the logic 29278 to the Node* version to add parentheses if needed. 29279 (KJS::Node::streamLeftAssociativeBinaryOperator): Added helper function. 29280 (KJS::ElementNode::streamTo): Use PrecAssignment for the elements. 29281 (KJS::BracketAccessorNode::streamTo): Use PrecCall for the expression before 29282 the bracket. 29283 (KJS::DotAccessorNode::streamTo): Use PrecCall for the expression before the dot. 29284 (KJS::ArgumentListNode::streamTo): Use PrecAssignment for the arguments. 29285 (KJS::NewExprNode::streamTo): Use PrecMember for the expression. 29286 (KJS::FunctionCallValueNode::streamTo): Use PrecCall. 29287 (KJS::FunctionCallBracketNode::streamTo): Ditto. 29288 (KJS::FunctionCallDotNode::streamTo): Ditto. 29289 (KJS::PostfixBracketNode::streamTo): Ditto. 29290 (KJS::PostfixDotNode::streamTo): Ditto. 29291 (KJS::PostfixErrorNode::streamTo): Use PrecLeftHandSide. 29292 (KJS::DeleteBracketNode::streamTo): Use PrecCall. 29293 (KJS::DeleteDotNode::streamTo): Ditto. 29294 (KJS::DeleteValueNode::streamTo): Use PrecUnary. 29295 (KJS::VoidNode::streamTo): Ditto. 29296 (KJS::TypeOfValueNode::streamTo): Ditto. 29297 (KJS::PrefixBracketNode::streamTo): Use PrecCall. 29298 (KJS::PrefixDotNode::streamTo): Ditto. 29299 (KJS::PrefixErrorNode::streamTo): Use PrecUnary. 29300 (KJS::UnaryPlusNode::streamTo): Ditto. 29301 (KJS::NegateNode::streamTo): Ditto. 29302 (KJS::BitwiseNotNode::streamTo): Ditto. 29303 (KJS::LogicalNotNode::streamTo): Ditto. 29304 (KJS::MultNode::streamTo): Use streamLeftAssociativeBinaryOperator. 29305 (KJS::DivNode::streamTo): Ditto. 29306 (KJS::ModNode::streamTo): Ditto. 29307 (KJS::AddNode::streamTo): Ditto. 29308 (KJS::SubNode::streamTo): Ditto. 29309 (KJS::LeftShiftNode::streamTo): Ditto. 29310 (KJS::RightShiftNode::streamTo): Ditto. 29311 (KJS::UnsignedRightShiftNode::streamTo): Ditto. 29312 (KJS::LessNode::streamTo): Ditto. 29313 (KJS::GreaterNode::streamTo): Ditto. 29314 (KJS::LessEqNode::streamTo): Ditto. 29315 (KJS::GreaterEqNode::streamTo): Ditto. 29316 (KJS::InstanceOfNode::streamTo): Ditto. 29317 (KJS::InNode::streamTo): Ditto. 29318 (KJS::EqualNode::streamTo): Ditto. 29319 (KJS::NotEqualNode::streamTo): Ditto. 29320 (KJS::StrictEqualNode::streamTo): Ditto. 29321 (KJS::NotStrictEqualNode::streamTo): Ditto. 29322 (KJS::BitAndNode::streamTo): Ditto. 29323 (KJS::BitXOrNode::streamTo): Ditto. 29324 (KJS::BitOrNode::streamTo): Ditto. 29325 (KJS::LogicalAndNode::streamTo): Ditto. 29326 (KJS::LogicalOrNode::streamTo): Ditto. 29327 (KJS::ConditionalNode::streamTo): Ditto. 29328 (KJS::AssignResolveNode::streamTo): Use PrecAssignment for the right side. 29329 (KJS::AssignBracketNode::streamTo): Use PrecCall for the expression before 29330 the bracket and PrecAssignment for the right side. 29331 (KJS::AssignDotNode::streamTo): Ditto. 29332 (KJS::AssignErrorNode::streamTo): Use PrecLeftHandSide for the left side 29333 and PrecAssignment for the right side. 29334 (KJS::CommaNode::streamTo): Use PrecAssignment for both expressions. 29335 (KJS::AssignExprNode::streamTo): Use PrecAssignment. 29336 29337 2007-10-28 Kevin Ollivier <kevino (a] theolliviers.com> 29338 29339 Define wx port and set wx port USE options. 29340 29341 Reviewed by Adam Roben. 29342 29343 * wtf/Platform.h: 29344 29345 2007-10-28 Mark Rowe <mrowe (a] apple.com> 29346 29347 We don't include "config.h" in headers. 29348 29349 * bindings/jni/jni_instance.h: 29350 * kjs/regexp.h: 29351 * wtf/TCPageMap.h: 29352 * wtf/TCSpinLock.h: 29353 29354 2007-10-28 Maciej Stachowiak <mjs (a] apple.com> 29355 29356 Rubber stamped by Mark. 29357 29358 - avoid using non-portable SIZE_T_MAX in favor of std::numeric_limits 29359 29360 * kjs/SymbolTable.h: 29361 (KJS::SymbolTableIndexHashTraits::emptyValue): 29362 * kjs/function.cpp: 29363 (KJS::ActivationImp::getOwnPropertySlot): 29364 (KJS::ActivationImp::put): 29365 29366 2007-10-28 Maciej Stachowiak <mjs (a] apple.com> 29367 29368 Reviewed by Eric. 29369 29370 - switch SymbolTable to be a HashMap instead of a PropertyMap for 3% SunSpider speedup 29371 29372 * kjs/SymbolTable.h: 29373 (KJS::IdentifierRepHash::hash): Special hash function for identifier reps. 29374 (KJS::IdentifierRepHash::equal): ditto 29375 (KJS::SymbolTableIndexHashTraits::emptyValue): Special HashTraits for the index value. 29376 (KJS::SymbolTable): change to a typedef for a HashMap. 29377 * kjs/function.cpp: 29378 (KJS::ActivationImp::getOwnPropertySlot): Adjusted for new SymbolTable API. 29379 (KJS::ActivationImp::deleteProperty): ditto 29380 (KJS::ActivationImp::put): ditto 29381 29382 * kjs/nodes.cpp: 29383 (KJS::FunctionBodyNode::initializesymbolTable): Adjusted, since 29384 you now have to store a UString::rep, not an identifier. 29385 29386 2007-10-27 Maciej Stachowiak <mjs (a] apple.com> 29387 29388 Reviewed by Oliver. 29389 29390 - numerous HashTable performance improvements 29391 29392 This does not quite add up to a measurable win on SunSpider, but it allows a 29393 follow-on > 3% improvement and probably helps WebCore too. 29394 29395 I made the following improvements, among others: 29396 29397 - Made HashFunctions note whether it is ok to compare a real value with the equal() function 29398 to the empty or deleted value, and used this to optimize the comparisons done in hash lookup. 29399 29400 - Specialized lookup so it doesn't have to do so many extra branches and build so many extra 29401 std::pairs for cases that don't need them. There are now four versions, one for read-only access, 29402 two for writing, and one folded directly into add() (these all were improvments). 29403 29404 - Made HashMap::get() use lookup() directly instead of find() to avoid having to build iterators. 29405 29406 - Made a special constructor for iterators that knows it points to 29407 a valid filled cell and so skips updating itself. 29408 29409 - Reordered memory accesses in the various lookup functions for better code generation 29410 29411 - Made simple translators avoid passing a hash code around 29412 29413 - Other minor tweaks 29414 29415 * wtf/HashTable.h: 29416 (WTF::): 29417 (WTF::HashTableConstIterator::HashTableConstIterator): 29418 (WTF::HashTableIterator::HashTableIterator): 29419 (WTF::IdentityHashTranslator::translate): 29420 (WTF::HashTable::end): 29421 (WTF::HashTable::lookup): 29422 (WTF::HashTable::lookupForWriting): 29423 (WTF::HashTable::makeKnownGoodIterator): 29424 (WTF::HashTable::makeKnownGoodConstIterator): 29425 (WTF::::lookup): 29426 (WTF::::lookupForWriting): 29427 (WTF::::fullLookupForWriting): 29428 (WTF::::add): 29429 (WTF::::addPassingHashCode): 29430 (WTF::::reinsert): 29431 (WTF::::find): 29432 (WTF::::contains): 29433 * kjs/identifier.cpp: 29434 (WTF::): 29435 * wtf/HashFunctions.h: 29436 (WTF::): 29437 * wtf/HashMap.h: 29438 (WTF::): 29439 (WTF::::get): 29440 * wtf/HashSet.h: 29441 (WTF::): 29442 (WTF::::add): 29443 * wtf/ListHashSet.h: 29444 (WTF::ListHashSetTranslator::translate): 29445 29446 2007-10-27 Darin Adler <darin (a] apple.com> 29447 29448 Reviewed by Eric. 29449 29450 - fix ASCIICType.h for some Windows compiles 29451 29452 * wtf/ASCIICType.h: Check the compiler, not the OS, since it's the 29453 compiler/library that has the wchar_t that is just a typedef. 29454 29455 2007-10-27 Kevin McCullough <kmccullough (a] apple.com> 29456 29457 - BuildFix 29458 - Forgot to change the build step when I changed the filename. 29459 29460 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 29461 29462 2007-10-27 Geoffrey Garen <ggaren (a] apple.com> 29463 29464 Reviewed by Darin Adler. 29465 29466 Fixed the rest of "ASSERTION FAILED: _hash in KJS::UString::Rep:: 29467 computedHash()" 29468 http://bugs.webkit.org/show_bug.cgi?id=15718 29469 29470 * kjs/identifier.cpp: Fixed more cases where an Identifier didn't get a 29471 hash value. Also changed O(n) strlen to O(1) check for empty string. 29472 (KJS::Identifier::add): 29473 29474 * kjs/ustring.cpp: Changed O(n) strlens to O(1) checks for empty string. 29475 (KJS::UString::UString): 29476 (KJS::UString::operator=): 29477 29478 2007-10-27 Darin Adler <darin (a] apple.com> 29479 29480 Reviewed by Eric. 29481 29482 - fix pow on Windows 29483 29484 * wtf/MathExtras.h: (wtf_pow): Add a special case for MSVC, which has 29485 a "pow" function that does not properly handle the case where arg1 is 29486 NaN and arg2 is 0. 29487 29488 * kjs/math_object.cpp: (MathFuncImp::callAsFunction): Don't explicity 29489 specify "::pow" -- just "pow" is fine. 29490 29491 2007-10-27 Darin Adler <darin (a] apple.com> 29492 29493 Reviewed by Maciej. 29494 29495 - http://bugs.webkit.org/show_bug.cgi?id=15711 29496 force JSImmediate to be inlined for roughly 1.2% SunSpider speedup 29497 29498 * kjs/JSImmediate.h: Put ALWAYS_INLINE on everything. 29499 29500 * kjs/object.h: Removed redundant includes. 29501 * kjs/value.h: Ditto. 29502 29503 2007-10-27 Maciej Stachowiak <mjs (a] apple.com> 29504 29505 Reviewed by Mark. 29506 29507 - fixed "ASSERTION FAILED: _hash in KJS::UString::Rep::computedHash()" 29508 http://bugs.webkit.org/show_bug.cgi?id=15718 29509 29510 * kjs/identifier.cpp: 29511 (KJS::Identifier::addSlowCase): Ensure that empty Identifiers have a hash computed, 29512 now that we count on all Identifiers already having one. 29513 29514 2007-10-27 Mark Rowe <mrowe (a] apple.com> 29515 29516 Silence a warning. 29517 29518 * kjs/SymbolTable.h: 29519 29520 2007-10-27 Mark Rowe <mrowe (a] apple.com> 29521 29522 Gtk build fix. 29523 29524 * kjs/function.h: 29525 29526 2007-10-26 Kevin McCullough <kmccullough (a] apple.com> 29527 29528 Rubber stamp by Adam. 29529 29530 - Renamed JSStringRefCOM to JSStringRefBSTR since it he only thing the 29531 files contain are functions that operate on BSTRs. 29532 29533 * API/JSStringRefBSTR.cpp: Copied from API/JSStringRefCOM.cpp. 29534 * API/JSStringRefBSTR.h: Copied from API/JSStringRefCOM.h. 29535 * API/JSStringRefCOM.cpp: Removed. 29536 * API/JSStringRefCOM.h: Removed. 29537 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 29538 29539 2007-10-26 Kevin McCullough <kmccullough (a] apple.com> 29540 29541 Reviewed by Adam. 29542 29543 - Made JSStringCreateWithBSTR capable of handling null BSTRs. 29544 29545 * API/JSStringRefCOM.cpp: 29546 (JSStringCreateWithBSTR): 29547 29548 2007-10-26 Sam Weinig <sam (a] webkit.org> 29549 29550 Windows build fix. 29551 29552 * kjs/SymbolTable.h: Add header gaurd. 29553 * kjs/nodes.h: #include "SymbolTable.h" 29554 29555 2007-10-26 Geoffrey Garen <ggaren (a] apple.com> 29556 29557 Suggested by Anders Carlsson. 29558 29559 Fixed tyop. 29560 29561 * kjs/function.cpp: 29562 (KJS::ActivationImp::getOwnPropertySlot): 29563 29564 2007-10-26 Geoffrey Garen <ggaren (a] apple.com> 29565 29566 Suggested by Darin Adler. 29567 29568 Use computedHash(), which is safer than just directly accessing _hash. 29569 29570 * kjs/lookup.cpp: 29571 (KJS::Lookup::findEntry): 29572 (KJS::Lookup::find): 29573 29574 2007-10-26 Geoffrey Garen <ggaren (a] apple.com> 29575 29576 Build fix: svn add SymbolTable.h 29577 29578 * kjs/SymbolTable.h: Added. 29579 (KJS::SymbolTable::set): 29580 (KJS::SymbolTable::get): 29581 29582 2007-10-26 Geoffrey Garen <ggaren (a] apple.com> 29583 29584 Build fix: export SymbolTable.h to WebCore. 29585 29586 * JavaScriptCore.xcodeproj/project.pbxproj: 29587 29588 2007-10-26 Geoffrey Garen <ggaren (a] apple.com> 29589 29590 Comment tweak suggested by Maciej. 29591 29592 * kjs/function.cpp: 29593 (KJS::ActivationImp::getOwnPropertySlot): 29594 29595 2007-10-26 Geoffrey Garen <ggaren (a] apple.com> 29596 29597 Reviewed by Maciej Stachowiak. 29598 29599 Tweaked property maps to remove 2 branches. 2.5% speedup on SunSpider. 29600 29601 * kjs/property_map.cpp: Use a special no branch accessor to the UString's 29602 hash value. Also, return immediately instead of branching to the end 29603 of the loop if the value is not found. 29604 (KJS::PropertyMap::get): 29605 (KJS::PropertyMap::getLocation): 29606 (KJS::PropertyMap::put): 29607 (KJS::PropertyMap::insert): 29608 (KJS::PropertyMap::remove): 29609 (KJS::PropertyMap::checkConsistency): 29610 29611 * kjs/ustring.h: 29612 (KJS::UString::Rep::computedHash): Special no branch accessor to the 29613 UString's hash value. Used when the caller knows that the hash value 29614 has already been computed. (For example, if the caller got the UString 29615 from an Identifier.) 29616 29617 2007-10-26 Geoffrey Garen <ggaren (a] apple.com> 29618 29619 Reviewed by Maciej Stachowiak. 29620 29621 Switched ActivationImp to using a symbol table. For now, though, all 29622 clients take the slow path. 29623 29624 Net .6% speedup on SunSpider. 29625 29626 Slowdowns: 29627 - ActivationImp now mallocs in its constructor 29628 - Local variable hits use an extra level of indirection to retrieve 29629 data 29630 - Local variable misses do two lookups 29631 29632 Speedups: 29633 - Fast initialization of local variables upon function entry 29634 29635 * JavaScriptCore.xcodeproj/project.pbxproj: Added SymbolTable.h 29636 29637 * kjs/function.cpp: 29638 (KJS::ActivationImp::ActivationImp): Malloc a private structure to hold 29639 data that won't fit in a JSCell. 29640 (KJS::ActivationImp::argumentsGetter): Use slow symbol table path for 29641 lookup. 29642 (KJS::ActivationImp::getOwnPropertySlot): ditto 29643 (KJS::ActivationImp::deleteProperty): ditto 29644 (KJS::ActivationImp::put): ditto 29645 (KJS::ActivationImp::createArgumentsObject): ditto 29646 29647 (KJS::ActivationImp::mark): Call JSObject::mark first so that one of 29648 our properties doesn't try to recursively mark us. (This caused a crash 29649 in earlier testing. Not sure why we haven't run into it before.) 29650 29651 * kjs/nodes.cpp: Functions now build a symbol table the first time 29652 they're called. 29653 (KJS::VarDeclNode::evaluate): 29654 (KJS::FunctionBodyNode::FunctionBodyNode): 29655 (KJS::FunctionBodyNode::initializeSymbolTable): 29656 (KJS::FunctionBodyNode::processDeclarations): 29657 (KJS::FunctionBodyNode::processDeclarationsForFunctionCode): 29658 (KJS::FunctionBodyNode::processDeclarationsForProgramCode): 29659 29660 * kjs/nodes.h: 29661 (KJS::FunctionBodyNode::symbolTable): 29662 29663 * wtf/Forward.h: Added Vector. 29664 29665 2007-10-26 Kevin McCullough <kmccullough (a] apple.com> 29666 29667 - Corrected function name mistake in this changelog. 29668 29669 2007-10-26 Kevin McCullough <kmccullough (a] apple.com> 29670 Reviewed by Sam and Steve. 29671 29672 - Added convenience methods for converting between BSTR and JSStringRefs 29673 29674 * API/JSStringRefCOM.cpp: Added. 29675 (JSStringCreateWithBSTR): 29676 (JSStringCopyBSTR): 29677 * API/JSStringRefCOM.h: Added. 29678 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 29679 29680 2007-10-26 Mark Rowe <mrowe (a] apple.com> 29681 29682 Windows build fix. 29683 29684 * kjs/collector.cpp: 29685 (KJS::Collector::collect): 29686 29687 2007-10-26 Oliver Hunt <oliver (a] apple.com> 29688 29689 Reviewed by Maciej. 29690 29691 Make the JSC GC use a separate heap for JSNumbers to get a 0.7-1.4% progression in SunSpider. 29692 29693 * kjs/CollectorHeapIntrospector.cpp: 29694 (KJS::CollectorHeapIntrospector::init): 29695 (KJS::CollectorHeapIntrospector::enumerate): 29696 * kjs/CollectorHeapIntrospector.h: 29697 * kjs/collector.cpp: 29698 (KJS::Collector::recordExtraCost): 29699 (KJS::Collector::heapAllocate): 29700 (KJS::Collector::allocate): 29701 (KJS::Collector::allocateNumber): 29702 (KJS::Collector::registerThread): 29703 (KJS::Collector::markStackObjectsConservatively): 29704 (KJS::Collector::markMainThreadOnlyObjects): 29705 (KJS::Collector::sweep): 29706 (KJS::Collector::collect): 29707 * kjs/collector.h: 29708 * kjs/internal.h: 29709 (KJS::NumberImp::operator new): 29710 Force numbers to be allocated in the secondary heap. 29711 29712 2007-10-26 Maciej Stachowiak <mjs (a] apple.com> 29713 29714 Reviewed by Oliver. 29715 29716 - encourage GCC a little harder to inline a few hot functions for 1.5% improvement on SunSpider. 29717 29718 * kjs/value.h: 29719 (KJS::JSValue::getUInt32): 29720 (KJS::JSValue::getTruncatedInt32): 29721 (KJS::JSValue::toNumber): 29722 * wtf/PassRefPtr.h: 29723 (WTF::PassRefPtr::~PassRefPtr): 29724 * wtf/RefPtr.h: 29725 (WTF::RefPtr::operator->): 29726 29727 2007-10-26 Mark Rowe <mrowe (a] apple.com> 29728 29729 Gtk build fix. 29730 29731 * kjs/ExecState.h: 29732 29733 2007-10-26 Maciej Stachowiak <mjs (a] apple.com> 29734 29735 Reviewed by Mark. 29736 29737 - Merge Context class fully into ExecState, since they are always created and used together. 29738 29739 No measurable performance impact but this is a useful cleanup. 29740 29741 * JavaScriptCore.pri: 29742 * kjs/ExecState.cpp: 29743 (KJS::ExecState::ExecState): 29744 (KJS::ExecState::~ExecState): 29745 (KJS::ExecState::mark): 29746 (KJS::ExecState::lexicalInterpreter): 29747 * kjs/ExecState.h: 29748 (KJS::ExecState::dynamicInterpreter): 29749 (KJS::ExecState::setException): 29750 (KJS::ExecState::clearException): 29751 (KJS::ExecState::exception): 29752 (KJS::ExecState::exceptionSlot): 29753 (KJS::ExecState::hadException): 29754 (KJS::ExecState::scopeChain): 29755 (KJS::ExecState::callingExecState): 29756 (KJS::ExecState::propertyNames): 29757 * kjs/collector.cpp: 29758 (KJS::Collector::reportOutOfMemoryToAllInterpreters): 29759 * kjs/function.cpp: 29760 (KJS::FunctionImp::callAsFunction): 29761 (KJS::FunctionImp::argumentsGetter): 29762 (KJS::FunctionImp::callerGetter): 29763 (KJS::GlobalFuncImp::callAsFunction): 29764 * kjs/interpreter.cpp: 29765 (KJS::Interpreter::Interpreter): 29766 (KJS::Interpreter::init): 29767 (KJS::Interpreter::evaluate): 29768 (KJS::Interpreter::mark): 29769 * kjs/interpreter.h: 29770 (KJS::Interpreter::setCurrentExec): 29771 (KJS::Interpreter::currentExec): 29772 * kjs/nodes.cpp: 29773 (KJS::currentSourceId): 29774 (KJS::currentSourceURL): 29775 (KJS::ThisNode::evaluate): 29776 (KJS::ResolveNode::evaluate): 29777 (KJS::FunctionCallResolveNode::evaluate): 29778 (KJS::PostfixResolveNode::evaluate): 29779 (KJS::DeleteResolveNode::evaluate): 29780 (KJS::TypeOfResolveNode::evaluate): 29781 (KJS::PrefixResolveNode::evaluate): 29782 (KJS::AssignResolveNode::evaluate): 29783 (KJS::VarDeclNode::evaluate): 29784 (KJS::DoWhileNode::execute): 29785 (KJS::WhileNode::execute): 29786 (KJS::ForNode::execute): 29787 (KJS::ForInNode::execute): 29788 (KJS::ContinueNode::execute): 29789 (KJS::BreakNode::execute): 29790 (KJS::ReturnNode::execute): 29791 (KJS::WithNode::execute): 29792 (KJS::SwitchNode::execute): 29793 (KJS::LabelNode::execute): 29794 (KJS::TryNode::execute): 29795 (KJS::FunctionBodyNode::processDeclarationsFunctionCode): 29796 (KJS::FunctionBodyNode::processDeclarationsProgramCode): 29797 (KJS::FunctionBodyNode::processDeclarations): 29798 (KJS::FuncDeclNode::makeFunction): 29799 (KJS::FuncExprNode::evaluate): 29800 29801 2007-10-26 Mark Rowe <mrowe (a] apple.com> 29802 29803 Windows build fix. 29804 29805 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 29806 29807 2007-10-26 Mark Rowe <mrowe (a] apple.com> 29808 29809 Gtk build fix. 29810 29811 * JavaScriptCore.pri: 29812 * kjs/ExecState.cpp: 29813 29814 2007-10-26 Maciej Stachowiak <mjs (a] apple.com> 29815 29816 Reviewed by Oliver. 29817 29818 - moved Context class into ExecState.{h,cpp} in preparation for merging 29819 ExecState and Context classes. 29820 29821 * kjs/ExecState.h: Moved CodeType enum and Context class here in 29822 preparation for merging ExecState and Context. 29823 * kjs/ExecState.cpp: Moved Context class here from Context.cpp. 29824 (KJS::Context::Context): 29825 (KJS::Context::~Context): 29826 (KJS::Context::mark): 29827 * kjs/context.h: Removed. 29828 * kjs/Context.cpp: Removed. 29829 * kjs/function.h: Removed CodeType enum. 29830 * kjs/LabelStack.h: Added. Pulled LabelStack class out of internal.h. 29831 * kjs/internal.h: Removed LabelStack. 29832 * JavaScriptCore.xcodeproj/project.pbxproj: Added new file, removed ones that are gone. 29833 * kjs/collector.cpp: Fixed includes. 29834 * kjs/function.cpp: ditto 29835 * kjs/internal.cpp: ditto 29836 * kjs/interpreter.cpp: ditto 29837 * kjs/lookup.h: ditto 29838 * kjs/nodes.cpp: ditto 29839 29840 2007-10-26 Mark Rowe <mrowe (a] apple.com> 29841 29842 Windows build fix. 29843 29844 * kjs/string_object.cpp: 29845 (KJS::StringObjectFuncImp::callAsFunction): 29846 29847 2007-10-25 Darin Adler <darin (a] apple.com> 29848 29849 Reviewed by Maciej. 29850 29851 - http://bugs.webkit.org/show_bug.cgi?id=15703 29852 fix numeric functions -- improve correctness and speed 29853 29854 Gives about 1% gain on SunSpider. 29855 29856 * kjs/value.h: Added toIntegerPreserveNan, removed toUInt16. 29857 (KJS::JSValue::toInt32): Changed to call getTruncatedInt32 in a way that works 29858 with both immediate and number values. 29859 (KJS::JSValue::toUInt32): Ditto. 29860 * kjs/value.cpp: 29861 (KJS::JSValue::toInteger): Moved the logic from roundValue here, with a couple 29862 differences. One is that it now correctly returns 0 for NaN, and another is that 29863 there's no special case for 0 or infinity, since the general case already handles 29864 those correctly. 29865 (KJS::JSValue::toIntegerPreserveNaN): Added. Like toInteger, but without the 29866 check for NaN. 29867 (KJS::JSValue::toInt32SlowCase): Call toNumber instead of roundValue. The 29868 truncation done by the typecast already does the necessary truncation that 29869 roundValue was doing. 29870 (KJS::JSValue::toUInt32SlowCase): Ditto. 29871 (KJS::JSValue::toUInt16): Removed. 29872 29873 * kjs/internal.h: Removed roundValue. 29874 * kjs/internal.cpp: Ditto. 29875 29876 * kjs/array_object.cpp: (KJS::ArrayProtoFunc::callAsFunction): Remove unneeded 29877 code to handle NaN in Array.slice; toInteger now never returns NaN as specified. 29878 29879 * kjs/date_object.cpp: 29880 (KJS::fillStructuresUsingTimeArgs): Replaced call to roundValue with a call to 29881 toNumber as specified. 29882 (KJS::DateProtoFunc::callAsFunction): In SetTime case, replaced call to roundValue 29883 with a call to toNumber and timeClip as specified. 29884 (KJS::DateObjectImp::construct): Removed unnecessary checks of numArgs in cases 29885 where the default behavior of toInt32 (returning 0) was already correct. Replaced 29886 call to roundValue with a call to toNumber as specified. 29887 (KJS::DateObjectFuncImp::callAsFunction): Ditto. 29888 29889 * kjs/math_object.cpp: (MathFuncImp::callAsFunction): Removed unnecessary special 29890 cases for the pow function that the library already handles correctly. 29891 29892 * kjs/number_object.cpp: (NumberProtoFunc::callAsFunction): Changed ToString to 29893 call toIntegerPreserveNaN, so we can continue to handle the NaN case differently. 29894 The real toInteger now returns 0 for NaN. Took out unneeded special case in 29895 ToFixed for undefined; was only needed because our toInteger was wrong. Same 29896 thing in ToExponential. Changed ToPrecision to call toIntegerPreserveNaN. 29897 29898 * kjs/string_object.cpp: 29899 (KJS::StringProtoFunc::callAsFunction): Took out CharAt and CharCodeAt special 29900 cases for undefined that were only needed because toInteger was wrong. Same in 29901 IndexOf, and was able to remove some special cases. In LastIndexOf, used 29902 toIntegerPreserveNaN, but was able to remove some special cases there too. 29903 Changed Substr implementation to preserve correct behavior with the change 29904 to toInteger and match the specification. Also made sure we weren't converting 29905 an out of range double to an int. 29906 (KJS::StringObjectFuncImp::callAsFunction): Changed constructor to just use 29907 toUInt32, because truncating toUInt32 to 16 bits is the same thing and there's 29908 no reason to have toUInt16 as a second, less-optimized function that's only 29909 called at this one call site. 29910 29911 * wtf/MathExtras.h: Added trunc function for Windows. 29912 29913 2007-10-25 Geoffrey Garen <ggaren (a] apple.com> 29914 29915 Reviewed by Maciej Stachowiak. 29916 29917 Tweaked the inner hashtable lookup loop to remove a branch in the "not 29918 found" case. .5% speedup on SunSpider. 29919 29920 * JavaScriptCore.xcodeproj/project.pbxproj: 29921 * wtf/HashTable.h: 29922 (WTF::::lookup): 29923 29924 2007-10-25 Maciej Stachowiak <mjs (a] apple.com> 29925 29926 Reviewed by Oliver. 29927 29928 - fold together toPrimitive() and toNumber() conversions for 0.5% gain on SunSpider 29929 29930 * kjs/nodes.cpp: 29931 (KJS::SubNode::evaluate): Subtract directly, since toPrimitive() is not 29932 adding any value over toNumber() here. 29933 (KJS::valueForReadModifyAssignment): Ditto. 29934 (KJS::lessThan): Use new getPrimitiveNumber() method to avoid some virtual calls 29935 and branches. 29936 (KJS::lessThanEq): Ditto. 29937 * JavaScriptCore.exp: Export new functions as needed. 29938 * kjs/value.h: 29939 (KJS::JSValue::toPrimitive): Fixed formatting. 29940 (KJS::JSValue::getPrimitiveNumber): New method - this simultaneously converts 29941 to number and tells you whether a toPrimitive() conversion with a Number hint 29942 would have given a string. 29943 * kjs/internal.cpp: 29944 (KJS::StringImp::getPrimitiveNumber): Implemented. 29945 (KJS::NumberImp::getPrimitiveNumber): ditto 29946 (KJS::GetterSetterImp::getPrimitiveNumber): ditto 29947 (KJS::StringImp::toPrimitive): Fixed formatting. 29948 (KJS::NumberImp::toPrimitive): ditto 29949 (KJS::GetterSetterImp::toPrimitive): ditto 29950 * kjs/internal.h: 29951 * kjs/object.cpp: 29952 (KJS::JSObject::getPrimitiveNumber): Implemented. 29953 * kjs/object.h: 29954 29955 2007-10-25 Sam Weinig <sam (a] webkit.org> 29956 29957 Reviewed by Adam Roben. 29958 29959 Remove JSStringRefCFHack from windows as it is no longer needed. 29960 29961 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 29962 29963 2007-10-25 Geoffrey Garen <ggaren (a] apple.com> 29964 29965 Reviewed by Oliver Hunt. 29966 29967 Rolled out my last patch. It turns out that I needed 2 words, not 1, 29968 so it didn't help. 29969 29970 2007-10-25 Geoffrey Garen <ggaren (a] apple.com> 29971 29972 Reviewed by Oliver Hunt. 29973 29974 Fixed http://bugs.webkit.org/show_bug.cgi?id=15694 29975 Shrink the size of an activation object by 1 word 29976 29977 This is in preparation for adding a symbol table to the activation 29978 object. 29979 29980 The basic strategy here is to rely on the mutual exclusion between 29981 the arguments object pointer and the function pointer (you only need 29982 the latter in order to create the former), and store them in the same 29983 place. The LazyArgumentsObject class encapsulates this strategy. 29984 29985 Also inlined the ArgumentsImp constructor, for good measure. 29986 29987 SunSpider reports no regression. Regression tests pass. 29988 29989 * JavaScriptCore.xcodeproj/project.pbxproj: 29990 * kjs/Context.cpp: 29991 (KJS::Context::~Context): 29992 * kjs/function.cpp: 29993 (KJS::ActivationImp::LazyArgumentsObject::createArgumentsObject): 29994 (KJS::ActivationImp::LazyArgumentsObject::mark): 29995 (KJS::ActivationImp::argumentsGetter): 29996 (KJS::ActivationImp::mark): 29997 * kjs/function.h: 29998 (KJS::ActivationImp::LazyArgumentsObject::LazyArgumentsObject): 29999 (KJS::ActivationImp::LazyArgumentsObject::getOrCreate): 30000 (KJS::ActivationImp::LazyArgumentsObject::resetArguments): 30001 (KJS::ActivationImp::LazyArgumentsObject::setArgumentsObject): 30002 (KJS::ActivationImp::LazyArgumentsObject::argumentsObject): 30003 (KJS::ActivationImp::LazyArgumentsObject::setFunction): 30004 (KJS::ActivationImp::LazyArgumentsObject::function): 30005 (KJS::ActivationImp::LazyArgumentsObject::createdArgumentsObject): 30006 (KJS::ActivationImp::LazyArgumentsObject::): 30007 (KJS::ActivationImp::ActivationImp::ActivationImp): 30008 (KJS::ActivationImp::resetArguments): 30009 30010 2007-10-25 Adam Roben <aroben (a] apple.com> 30011 30012 Change JavaScriptCore.vcproj to use DerivedSources.make 30013 30014 We were trying to emulate the logic of make in 30015 build-generated-files.sh, but we got it wrong. We now use a 30016 build-generated-files very much like the one that WebCore uses to 30017 invoke make. 30018 30019 We also now only have a Debug configuration of dftables which we build 30020 even when doing a Release build of JavaScriptCore. dftables also no 30021 longer has the "_debug" name suffix. 30022 30023 Changes mostly made by Darin, reviewed by me. 30024 30025 * DerivedSources.make: Add a variable to set the extension used for 30026 the dftables executable. 30027 * JavaScriptCore.vcproj/JavaScriptCore.sln: Updated to use Debug 30028 dftables in Release configurations. 30029 * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Ditto. 30030 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 30031 - Updated include path to point to the new location of the derived 30032 sources. 30033 - Modified pre-build event to pass the right arguments to 30034 build-generated-files.sh and not call dftables directly. 30035 - Added the derived source files to the project. 30036 - Removed grammarWrapper.cpp, which isn't needed now that we're 30037 compiling grammar.cpp directly. 30038 * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: 30039 Slightly modified from the WebCore version. 30040 * JavaScriptCore.vcproj/JavaScriptCore/grammarWrapper.cpp: Removed. 30041 * JavaScriptCore.vcproj/dftables/dftables.vcproj: 30042 - Changed the output location to match Mac. 30043 - Removed the Release configuration. 30044 - Removed the _debug suffix. 30045 30046 2007-10-25 Geoffrey Garen <ggaren (a] apple.com> 30047 30048 Reviewed by Eric Seidel. 30049 30050 Slightly elaborated the differences between declaration procesing in 30051 Function Code and Program Code. 30052 30053 .3% speedup on SunSpider. 30054 30055 * kjs/nodes.cpp: 30056 (KJS::FunctionBodyNode::processDeclarationsFunctionCode): 30057 (KJS::FunctionBodyNode::processDeclarationsProgramCode): Store a 30058 minimum set of attributes instead of recomputing all the time. Also, 30059 ignore m_parameters, since programs don't have arguments. 30060 30061 2007-10-25 Eric Seidel <eric (a] webkit.org> 30062 30063 Reviewed by Maciej. 30064 30065 More preparation work before adding long-running mode to testkjs. 30066 30067 * kjs/testkjs.cpp: 30068 (TestFunctionImp::callAsFunction): 30069 (prettyPrintScript): 30070 (runWithScripts): 30071 (parseArguments): 30072 (kjsmain): 30073 (fillBufferWithContentsOfFile): 30074 30075 2007-10-25 Eric Seidel <eric (a] webkit.org> 30076 30077 Reviewed by Maciej. 30078 30079 Bring testkjs code out of the dark ages in preparation for more 30080 radical improvements (like long-running testing support!) 30081 30082 * kjs/testkjs.cpp: 30083 (TestFunctionImp::callAsFunction): 30084 (setupInterpreter): 30085 (doIt): 30086 (fillBufferWithContentsOfFile): 30087 30088 2007-10-25 Geoffrey Garen <ggaren (a] apple.com> 30089 30090 Reviewed by Maciej Stachowiak. 30091 30092 Make a fast path for declaration processing inside Function Code. 30093 30094 Lifted declaration processing code up from individual declaration nodes 30095 and into processDeclarations. 30096 30097 Broke out processDeclarations into two cases, depending on the type of 30098 code. This eliminates 2 branches, and facilitates more radical 30099 divergeance in the future. 30100 30101 2.5% SunSpider speedup. 30102 30103 * JavaScriptCore.xcodeproj/project.pbxproj: 30104 * kjs/nodes.cpp: 30105 (KJS::FunctionBodyNode::initializeDeclarationStacks): 30106 (KJS::FunctionBodyNode::processDeclarationsFunctionCode): 30107 (KJS::FunctionBodyNode::processDeclarationsProgramCode): 30108 (KJS::FunctionBodyNode::execute): 30109 (KJS::FuncDeclNode::makeFunction): 30110 * kjs/nodes.h: 30111 30112 2007-10-25 Maciej Stachowiak <mjs (a] apple.com> 30113 30114 Reviewed by Adam. 30115 30116 - add header includes needed on platforms that don't use AllInOneFile.cpp 30117 30118 * API/JSCallbackObject.cpp: 30119 * kjs/Context.cpp: 30120 * kjs/ExecState.cpp: 30121 * kjs/array_instance.cpp: 30122 * kjs/function_object.cpp: 30123 * kjs/interpreter.cpp: 30124 * kjs/nodes.cpp: 30125 30126 2007-10-25 Eric Seidel <eric (a] webkit.org> 30127 30128 Reviewed by Geoff. 30129 30130 * JavaScriptCore.xcodeproj/project.pbxproj: re-mark JSGlobalObject.h as private 30131 30132 2007-10-25 Geoffrey Garen <ggaren (a] apple.com> 30133 30134 Reviewed by Maciej Stachowiak. 30135 30136 Fixed http://bugs.webkit.org/show_bug.cgi?id=15683 30137 Re-order declaration initialization to avoid calling hasProperty inside 30138 VarDeclNode::processDeclaration 30139 30140 .7% speedup on SunSpider. 30141 30142 * kjs/function.h: 30143 * kjs/function.cpp: Merged parameter processing into FunctionBodyNode's 30144 other processing of declared symbols, so the order of execution could 30145 change. 30146 30147 * kjs/nodes.cpp: 30148 (KJS::VarDeclNode::getDeclarations): Added special case for the 30149 "arguments" property name, explained in the comment. 30150 30151 (KJS::VarDeclNode::processDeclaration): Removed call to hasProperty 30152 in the case of function code, since we know the declared symbol 30153 management will resolve conflicts between symbols. Yay! 30154 30155 (KJS::VarDeclListNode::getDeclarations): Now that VarDeclNode's 30156 implementation of getDeclarations is non-trivial, we can't take a 30157 short-cut here any longer -- we need to put the VarDecl node on the 30158 stack so it gets processed normally. 30159 30160 (KJS::FunctionBodyNode::processDeclarations): Changed the order of 30161 processing to enforce mutual exclusion rules. 30162 30163 * kjs/nodes.h: 30164 (KJS::DeclarationStacks::DeclarationStacks): Structure includes an 30165 ExecState now, for fast access to the "arguments" property name. 30166 30167 2007-10-24 Eric Seidel <eric (a] webkit.org> 30168 30169 Reviewed by Maciej. 30170 30171 Add a JSGlobalObject class and remove the InterpreterMap 30172 http://bugs.webkit.org/show_bug.cgi?id=15681 30173 30174 This required making JSCallbackObject a template class to allow for 30175 JSGlobalObjects with JSCallbackObject functionality. 30176 30177 SunSpider claims this was a 0.5% speedup. 30178 30179 * API/JSCallbackObject.cpp: 30180 * API/JSCallbackObject.h: 30181 * API/JSCallbackObjectFunctions.h: Copied from API/JSCallbackObject.cpp. 30182 (KJS::::JSCallbackObject): 30183 (KJS::::init): 30184 (KJS::::~JSCallbackObject): 30185 (KJS::::initializeIfNeeded): 30186 (KJS::::className): 30187 (KJS::::getOwnPropertySlot): 30188 (KJS::::put): 30189 (KJS::::deleteProperty): 30190 (KJS::::implementsConstruct): 30191 (KJS::::construct): 30192 (KJS::::implementsHasInstance): 30193 (KJS::::hasInstance): 30194 (KJS::::implementsCall): 30195 (KJS::::callAsFunction): 30196 (KJS::::getPropertyNames): 30197 (KJS::::toNumber): 30198 (KJS::::toString): 30199 (KJS::::setPrivate): 30200 (KJS::::getPrivate): 30201 (KJS::::inherits): 30202 (KJS::::cachedValueGetter): 30203 (KJS::::staticValueGetter): 30204 (KJS::::staticFunctionGetter): 30205 (KJS::::callbackGetter): 30206 * API/JSClassRef.cpp: 30207 (OpaqueJSClass::prototype): 30208 * API/JSContextRef.cpp: 30209 (JSGlobalContextCreate): 30210 * API/JSObjectRef.cpp: 30211 (JSObjectMake): 30212 (JSObjectGetPrivate): 30213 (JSObjectSetPrivate): 30214 * API/JSValueRef.cpp: 30215 (JSValueIsObjectOfClass): 30216 * JavaScriptCore.exp: 30217 * JavaScriptCore.xcodeproj/project.pbxproj: 30218 * bindings/c/c_utility.cpp: 30219 (KJS::Bindings::convertValueToNPVariant): 30220 * bindings/jni/jni_jsobject.cpp: 30221 * bindings/objc/objc_utility.mm: 30222 (KJS::Bindings::convertValueToObjcValue): 30223 * kjs/Context.cpp: 30224 (KJS::Context::Context): 30225 * kjs/ExecState.cpp: 30226 (KJS::ExecState::lexicalInterpreter): 30227 * kjs/JSGlobalObject.h: Added. 30228 (KJS::JSGlobalObject::JSGlobalObject): 30229 (KJS::JSGlobalObject::isGlobalObject): 30230 (KJS::JSGlobalObject::interpreter): 30231 (KJS::JSGlobalObject::setInterpreter): 30232 * kjs/array_instance.cpp: 30233 * kjs/context.h: 30234 * kjs/function.cpp: 30235 (KJS::FunctionImp::callAsFunction): 30236 (KJS::GlobalFuncImp::callAsFunction): 30237 * kjs/interpreter.cpp: 30238 (KJS::Interpreter::Interpreter): 30239 (KJS::Interpreter::init): 30240 (KJS::Interpreter::~Interpreter): 30241 (KJS::Interpreter::globalObject): 30242 (KJS::Interpreter::initGlobalObject): 30243 (KJS::Interpreter::evaluate): 30244 * kjs/interpreter.h: 30245 * kjs/lookup.h: 30246 (KJS::cacheGlobalObject): 30247 * kjs/object.h: 30248 (KJS::JSObject::isGlobalObject): 30249 * kjs/testkjs.cpp: 30250 30251 2007-10-24 Eric Seidel <eric (a] webkit.org> 30252 30253 Build fix for Gtk, no review. 30254 30255 * kjs/collector.cpp: #include "context.h" 30256 30257 2007-10-24 Eric Seidel <eric (a] webkit.org> 30258 30259 Reviewed by Maciej. 30260 30261 Stop checking isOutOfMemory after every allocation, instead let the collector 30262 notify all ExecStates if we ever hit this rare condition. 30263 30264 SunSpider claims this was a 2.2% speedup. 30265 30266 * kjs/collector.cpp: 30267 (KJS::Collector::collect): 30268 (KJS::Collector::reportOutOfMemoryToAllInterpreters): 30269 * kjs/collector.h: 30270 * kjs/nodes.cpp: 30271 (KJS::TryNode::execute): 30272 30273 2007-10-24 Mark Rowe <mrowe (a] apple.com> 30274 30275 Gtk build fix. 30276 30277 * kjs/identifier.h: Remove extra qualification. 30278 30279 2007-10-24 Geoffrey Garen <ggaren (a] apple.com> 30280 30281 Reviewed by Sam Weinig. 30282 30283 Disable ALWAYS_INLINE in debug builds, since it drives the debugger 30284 crazy. 30285 30286 * wtf/AlwaysInline.h: 30287 30288 2007-10-24 Geoffrey Garen <ggaren (a] apple.com> 30289 30290 Reviewed by Sam Weinig. 30291 30292 Inlined the fast path for creating an Identifier from an Identifier. 30293 30294 This is a .4% speedup on SunSpider overall, but as big as a 2.5% 30295 speedup on certain individual tests. 65% of the Identifiers creating 30296 by SunSpider are already Identifiers. 30297 30298 (The main reason I'm making this change is that it resolves a large 30299 regression in a patch I haven't checked in yet.) 30300 30301 * JavaScriptCore.exp: 30302 * kjs/identifier.cpp: 30303 (KJS::Identifier::addSlowCase): 30304 * kjs/identifier.h: 30305 (KJS::Identifier::Identifier::add): 30306 30307 2007-10-24 Lars Knoll <lars (a] trolltech.com> 30308 30309 Reviewed by Simon. 30310 30311 some changes to the way JS values are converted to Qt values in the script bindings. Added support for converting JS arrays into QStringList's. 30312 30313 * bindings/qt/qt_instance.cpp: 30314 (KJS::Bindings::QtInstance::invokeMethod): 30315 * bindings/qt/qt_runtime.cpp: 30316 (KJS::Bindings::convertValueToQVariant): 30317 (KJS::Bindings::QtField::setValueToInstance): 30318 30319 2007-10-24 Oliver Hunt <oliver (a] apple.com> 30320 30321 Reviewed by Darin. 30322 30323 Remove old relation method, replace with specialised LessThan and lessThenEq functions for a 0.5-0.6% improvement in SunSpider 30324 30325 * kjs/nodes.cpp: 30326 (KJS::lessThan): 30327 (KJS::lessThanEq): 30328 (KJS::LessNode::evaluate): 30329 (KJS::GreaterNode::evaluate): 30330 (KJS::LessEqNode::evaluate): 30331 (KJS::GreaterEqNode::evaluate): 30332 * kjs/operations.cpp: 30333 * kjs/operations.h: 30334 30335 2007-10-24 Eric Seidel <eric (a] webkit.org> 30336 30337 Reviewed by darin. 30338 30339 * kjs/nodes.h: 30340 (KJS::ImmediateNumberNode::): Fix ASSERT correctness (and debug build!) 30341 30342 2007-10-24 Darin Adler <darin (a] apple.com> 30343 30344 Reviewed by Eric. 30345 30346 * kjs/object.cpp: (KJS::JSObject::defaultValue): Get rid of a little 30347 Identifier ref/deref for what SunSpider claims is a 0.4% speedup. 30348 30349 2007-10-24 Darin Adler <darin (a] apple.com> 30350 30351 Reviewed by Maciej. 30352 30353 - separate out the code to create a hash table the first time from the code 30354 to rehash 30355 30356 SunSpider claims this was a 0.7% speedup. 30357 30358 * kjs/property_map.cpp: 30359 (KJS::PropertyMap::expand): Changed to call either createTable or rehash. 30360 (KJS::PropertyMap::createTable): Added. For the case where we had no table. 30361 (KJS::PropertyMap::rehash): Removed code needed only in the case where we 30362 had no table. 30363 * kjs/property_map.h: Added createTable. 30364 30365 2007-10-24 Eric Seidel <eric (a] webkit.org> 30366 30367 Reviewed by darin. 30368 30369 Add ImmediateNumberNode to hold a JSValue* instead of a double for numbers 30370 which can be represented by JSImmediate. 30371 30372 SunSpider claims this was a 0.6% speedup. 30373 30374 * kjs/grammar.y: 30375 * kjs/nodes.cpp: 30376 (KJS::NumberNode::evaluate): 30377 (KJS::ImmediateNumberNode::evaluate): 30378 * kjs/nodes.h: 30379 (KJS::Node::): 30380 (KJS::ImmediateNumberNode::): 30381 * kjs/nodes2string.cpp: 30382 (ImmediateNumberNode::streamTo): 30383 30384 2007-10-24 Darin Adler <darin (a] apple.com> 30385 30386 Reviewed by Maciej. 30387 30388 - http://bugs.webkit.org/show_bug.cgi?id=15657 30389 change static hash tables to use powers of two for speed 30390 30391 Seems to give 0.7% SunSpider speedup. 30392 30393 * kjs/create_hash_table: Updated to generate new format. 30394 * kjs/lookup.cpp: 30395 (KJS::keysMatch): Took out unneeded typecast. 30396 (KJS::findEntry): Updated to expect table type 3 -- changed the printf to a plain old assert. 30397 Replaced the modulus with a bit mask. 30398 (KJS::Lookup::findEntry): Get the hash directly, since we know identifiers already have computed 30399 their hash -- saves a branch. 30400 (KJS::Lookup::find): Ditto. 30401 * kjs/lookup.h: Changed attr from 2-byte value to one-byte value. Replaced hashSize with hashSizeMask. 30402 30403 2007-10-24 Maciej Stachowiak <mjs (a] apple.com> 30404 30405 Reviewed by Darin. 30406 30407 - remove KJS_CHECKEXCEPTIONs in places where exceptions can't happen for 0.6% SunSpider speedup 30408 30409 * kjs/nodes.cpp: 30410 (KJS::DoWhileNode::execute): 30411 (KJS::WhileNode::execute): 30412 (KJS::ForNode::execute): 30413 (KJS::ForInNode::execute): 30414 (KJS::SourceElementsNode::execute): 30415 30416 2007-10-23 Darin Adler <darin (a] apple.com> 30417 30418 Reviewed by Maciej. 30419 30420 * kjs/JSImmediate.h: (KJS::JSImmediate::getUInt32): 30421 Changed an && to an & for a 1% gain in SunSpider. 30422 30423 2007-10-23 Oliver Hunt <oliver (a] apple.com> 30424 30425 Reviewed by Maciej. 30426 30427 Reduce branching in implementations of some operator implementations, yielding 1.3% boost to SunSpider. 30428 30429 * kjs/nodes.cpp: 30430 (KJS::MultNode::evaluate): 30431 (KJS::DivNode::evaluate): 30432 (KJS::ModNode::evaluate): 30433 (KJS::add): 30434 (KJS::sub): 30435 (KJS::AddNode::evaluate): 30436 (KJS::SubNode::evaluate): 30437 (KJS::valueForReadModifyAssignment): 30438 * kjs/operations.cpp: 30439 * kjs/operations.h: 30440 30441 2007-10-23 Oliver Hunt <oliver (a] apple.com> 30442 30443 Reviewed by Maciej. 30444 30445 Separating all of the simple (eg. non-read-modify-write) binary operators 30446 into separate classes in preparation for further JS optimisations. 30447 30448 Happily this produces a 0.8% to 1.0% performance increase in SunSpider with 30449 no further work. 30450 30451 * JavaScriptCore.xcodeproj/project.pbxproj: 30452 * kjs/grammar.y: 30453 * kjs/nodes.cpp: 30454 (KJS::MultNode::evaluate): 30455 (KJS::DivNode::evaluate): 30456 (KJS::ModNode::evaluate): 30457 (KJS::AddNode::evaluate): 30458 (KJS::SubNode::evaluate): 30459 (KJS::LeftShiftNode::evaluate): 30460 (KJS::RightShiftNode::evaluate): 30461 (KJS::UnsignedRightShiftNode::evaluate): 30462 (KJS::LessNode::evaluate): 30463 (KJS::GreaterNode::evaluate): 30464 (KJS::LessEqNode::evaluate): 30465 (KJS::GreaterEqNode::evaluate): 30466 (KJS::InstanceOfNode::evaluate): 30467 (KJS::InNode::evaluate): 30468 (KJS::EqualNode::evaluate): 30469 (KJS::NotEqualNode::evaluate): 30470 (KJS::StrictEqualNode::evaluate): 30471 (KJS::NotStrictEqualNode::evaluate): 30472 (KJS::BitAndNode::evaluate): 30473 (KJS::BitXOrNode::evaluate): 30474 (KJS::BitOrNode::evaluate): 30475 (KJS::LogicalAndNode::evaluate): 30476 (KJS::LogicalOrNode::evaluate): 30477 * kjs/nodes.h: 30478 (KJS::MultNode::): 30479 (KJS::DivNode::): 30480 (KJS::ModNode::): 30481 (KJS::AddNode::): 30482 (KJS::SubNode::): 30483 (KJS::LeftShiftNode::): 30484 (KJS::RightShiftNode::): 30485 (KJS::UnsignedRightShiftNode::): 30486 (KJS::LessNode::): 30487 (KJS::GreaterNode::): 30488 (KJS::LessEqNode::): 30489 (KJS::GreaterEqNode::): 30490 (KJS::InstanceOfNode::): 30491 (KJS::InNode::): 30492 (KJS::EqualNode::): 30493 (KJS::NotEqualNode::): 30494 (KJS::StrictEqualNode::): 30495 (KJS::NotStrictEqualNode::): 30496 (KJS::BitAndNode::): 30497 (KJS::BitOrNode::): 30498 (KJS::BitXOrNode::): 30499 (KJS::LogicalAndNode::): 30500 (KJS::LogicalOrNode::): 30501 * kjs/nodes2string.cpp: 30502 (MultNode::streamTo): 30503 (DivNode::streamTo): 30504 (ModNode::streamTo): 30505 (AddNode::streamTo): 30506 (SubNode::streamTo): 30507 (LeftShiftNode::streamTo): 30508 (RightShiftNode::streamTo): 30509 (UnsignedRightShiftNode::streamTo): 30510 (LessNode::streamTo): 30511 (GreaterNode::streamTo): 30512 (LessEqNode::streamTo): 30513 (GreaterEqNode::streamTo): 30514 (InstanceOfNode::streamTo): 30515 (InNode::streamTo): 30516 (EqualNode::streamTo): 30517 (NotEqualNode::streamTo): 30518 (StrictEqualNode::streamTo): 30519 (NotStrictEqualNode::streamTo): 30520 (BitAndNode::streamTo): 30521 (BitXOrNode::streamTo): 30522 (BitOrNode::streamTo): 30523 (LogicalAndNode::streamTo): 30524 30525 2007-10-23 Darin Adler <darin (a] apple.com> 30526 30527 Reviewed by Maciej. 30528 30529 - fix http://bugs.webkit.org/show_bug.cgi?id=15639 30530 fix Math.abs(0), Math.ceil(-0), and Math.floor(-0) 30531 30532 Test: fast/js/math.html 30533 30534 * kjs/math_object.cpp: (MathFuncImp::callAsFunction): 30535 Fix abs to look at the sign bit. Add a special case for values in the range 30536 between -0 and -1 and a special case for ceil and for -0 for floor. 30537 30538 2007-10-23 Darin Adler <darin (a] apple.com> 30539 30540 Reviewed by Eric. 30541 30542 - streamline exception handling code for a >1% speed-up of SunSpider 30543 30544 * kjs/nodes.cpp: Changed macros to use functions for everything that's not 30545 part of normal execution. We'll take function call overhead when propagating 30546 an exception or out of memory. 30547 (KJS::createOutOfMemoryCompletion): Added. 30548 (KJS::substitute): Use append instead of the relatively inefficient + operator. 30549 (KJS::Node::rethrowException): Added. 30550 * kjs/nodes.h: Added rethrowException. 30551 30552 2007-10-22 Darin Adler <darin (a] apple.com> 30553 30554 Reviewed by Maciej. 30555 30556 - fix http://bugs.webkit.org/show_bug.cgi?id=15636 30557 some JavaScriptCore regression tests are failing due to numeric conversion 30558 30559 This should restore correctness and make speed better too, restoring some 30560 of the optimization we lost in my last check-in. 30561 30562 * kjs/JSImmediate.h: 30563 (KJS::JSImmediate::getTruncatedInt32): Added. Uses the range checking idiom 30564 I used in my patch yesterday. 30565 (KJS::JSImmediate::getTruncatedUInt32): Ditto. 30566 30567 * kjs/internal.h: Removed getInt32 and added getTruncatedInt/UInt32. 30568 * kjs/internal.cpp: 30569 (KJS::NumberImp::getUInt32): Changed to always use double, since I can't find 30570 a way to write this more efficiently for float. 30571 (KJS::NumberImp::getTruncatedInt32): Added. 30572 (KJS::NumberImp::getTruncatedUInt32): Added. 30573 30574 * kjs/value.h: Removed getInt32 and added getTruncatedInt/UInt32. 30575 (KJS::JSValue::getUInt32): 30576 (KJS::JSValue::getTruncatedInt32): Added. 30577 (KJS::JSValue::getTruncatedUInt32): Added. 30578 (KJS::JSValue::toInt32): Changed getInt32 call to getTruncatedInt32. 30579 (KJS::JSValue::toUInt32): Changed getUInt32 call to getTruncatedUInt32. 30580 * kjs/value.cpp: 30581 (KJS::JSCell::getTruncatedInt32): Added. 30582 (KJS::JSCell::getTruncatedUInt32): Added. 30583 (KJS::JSValue::toInteger): Changed getUInt32 call to getTruncatedInt32. 30584 (KJS::JSValue::toInt32SlowCase): Removed extra getInt32 call I accidentally 30585 had left in here. 30586 (KJS::JSValue::toUInt32SlowCase): Ditto. 30587 (KJS::JSValue::toUInt16): Changed getUInt32 call to getTruncatedUInt32. 30588 30589 * JavaScriptCore.exp: Updated. 30590 30591 2007-10-22 Darin Adler <darin (a] apple.com> 30592 30593 Reviewed by Geoff. 30594 30595 - fix http://bugs.webkit.org/show_bug.cgi?id=15632 30596 js1_5/Array/array-001.js test failing 30597 30598 One of the JavaScriptCore tests was failing; it failed because of 30599 my change to NumberImp::getUInt32. The incorrect code I copied was 30600 from JSImmediate::getUInt32, and was a pre-existing bug. 30601 30602 This patch fixes correctness, but will surely slow down SunSpider. 30603 We may be able to code this tighter and get the speed back. 30604 30605 * kjs/JSImmediate.h: 30606 (KJS::JSImmediate::getInt32): Renamed from toInt32 to more accurately 30607 reflect the fact that this function only returns true if the value is 30608 accurate (no fractional part, etc.). Changed code so that it returns 30609 false when the value has a fraction. 30610 (KJS::JSImmediate::getUInt32): Ditto. 30611 30612 * kjs/internal.cpp: 30613 (KJS::NumberImp::getInt32): Changed code so that it returns false when 30614 the value has a fraction. Restores the old behavior. 30615 (KJS::NumberImp::getUInt32): Ditto. 30616 30617 * kjs/value.h: 30618 (KJS::JSValue::getInt32): Updated for name change. 30619 (KJS::JSValue::getUInt32): Ditto. 30620 (KJS::JSValue::toInt32): Ditto. 30621 (KJS::JSValue::toUInt32): Ditto. 30622 30623 2007-10-22 Darin Adler <darin (a] apple.com> 30624 30625 Reviewed by Brady. 30626 30627 - fix crash seen when running JavaScriptCore tests 30628 30629 * kjs/array_instance.cpp: (KJS::ArrayInstance::mark): 30630 Copy and paste error: I accidentally had code here that was 30631 making a copy of the HashMap -- that's illegal inside a mark 30632 function and was unnecessary. The other callsite was modifying 30633 the map as it iterated it, but this function is not. 30634 30635 2007-10-22 Maciej Stachowiak <mjs (a] apple.com> 30636 30637 Reviewed by Oliver. 30638 30639 - Avoid moving floats into integer registers in jsNumber() for 3% speedup on SunSpider 30640 http://bugs.webkit.org/show_bug.cgi?id=15627 30641 30642 * kjs/JSImmediate.h: 30643 (KJS::JSImmediate::fromDouble): Avoid moving floats to integer 30644 registers since this is very slow. 30645 30646 2007-10-22 Darin Adler <darin (a] apple.com> 30647 30648 Reviewed by Eric Seidel. 30649 30650 - http://bugs.webkit.org/show_bug.cgi?id=15617 30651 improve speed of integer conversions 30652 30653 Makes SunSpider 6% faster. 30654 30655 * kjs/JSImmediate.h: Added toInt32 and toUInt32, with separate versions for 30656 32-bit and 64-bit. 30657 * kjs/value.h: 30658 (KJS::JSValue::getUInt32): Call JSImmediate::toUInt32. 30659 30660 * kjs/internal.h: Added getInt32. 30661 * kjs/internal.cpp: 30662 (KJS::NumberImp::getInt32): Added. 30663 (KJS::NumberImp::getUInt32): Replaced with more-optimal implementation 30664 stolen from JSValue. 30665 30666 * kjs/value.h: 30667 (KJS::jsNumber): Marked ALWAYS_INLINE, because this wasn't getting 30668 inlined. 30669 (KJS::JSValue::getInt32): Added. 30670 (KJS::JSValue::getUInt32): Changed to call the new JSImmediate::toUInt32 30671 to avoid converting from float to double. 30672 (KJS::JSValue::toInt32): Made inline, separated out the slow case. 30673 (KJS::JSValue::toUInt32): Ditto. 30674 * kjs/value.cpp: 30675 (KJS::JSCell::getInt32): Added. 30676 (KJS::JSValue::toInt32SlowCase): Renamed from toInt32. Changed to use the 30677 new getInt32. Added a faster case for in-range numbers. 30678 (KJS::JSValue::toUInt32SlowCase): Ditto. 30679 (KJS::JSValue::toUInt16): Added a faster case for in-range numbers. 30680 30681 * JavaScriptCore.exp: Updated for changes. 30682 30683 2007-10-22 Adam Roben <aroben (a] apple.com> 30684 30685 Windows build fix 30686 30687 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Turn off 30688 warning about implicit conversion to bool. 30689 30690 2007-10-22 Mark Rowe <mrowe (a] apple.com> 30691 30692 Gtk build fix. 30693 30694 * kjs/array_instance.cpp: 30695 30696 2007-10-22 Darin Adler <darin (a] apple.com> 30697 30698 Reviewed by Maciej. 30699 30700 - http://bugs.webkit.org/show_bug.cgi?id=15606 30701 make cut-off for sparse vs. dense arrays smarter for speed with large arrays 30702 30703 Makes the morph test in SunSpider 26% faster, and the overall 30704 benchmark 3% faster. 30705 30706 This also fixes some small problems we had with the distinction 30707 between nonexistent and undefined values in arrays. 30708 30709 * kjs/array_instance.h: Tweaked formatting and naming. 30710 * kjs/array_instance.cpp: Copied from kjs/array_object.cpp. 30711 (KJS::storageSize): Added. Computes the size of the storage given a vector length. 30712 (KJS::increasedVectorLength): Added. Implements the rule for resizing the vector. 30713 (KJS::isDenseEnoughForVector): Added. 30714 (KJS::ArrayInstance::ArrayInstance): Initialize the new fields. 30715 (KJS::ArrayInstance::~ArrayInstance): Since m_storage is now never 0, delete it. 30716 (KJS::ArrayInstance::getItem): Updated for name changes. 30717 (KJS::ArrayInstance::lengthGetter): Ditto. 30718 (KJS::ArrayInstance::inlineGetOwnPropertySlot): Added. Allows both versions of 30719 getOwnPropertySlot to share more code. 30720 (KJS::ArrayInstance::getOwnPropertySlot): Just refactored, no code change. 30721 (KJS::ArrayInstance::put): Added logic for extending the vector as long as the 30722 array is dense enough. Also keep m_numValuesInVector up to date. 30723 (KJS::ArrayInstance::deleteProperty): Added code to keep m_numValuesInVector 30724 up to date. 30725 (KJS::ArrayInstance::getPropertyNames): Fixed bug where this would omit names 30726 for array indices with undefined values. 30727 (KJS::ArrayInstance::increaseVectorLength): Renamed from resizeStorage. Also 30728 simplified to only handle getting larger. 30729 (KJS::ArrayInstance::setLength): Added code to update m_numValuesInVector, to 30730 zero out the unused part of the vector and to delete the map if it's no longer 30731 needed. 30732 (KJS::ArrayInstance::mark): Tweaked formatting. 30733 (KJS::compareByStringForQSort): Ditto. 30734 (KJS::ArrayInstance::sort): Ditto. 30735 (KJS::CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments): 30736 Ditto. 30737 (KJS::compareWithCompareFunctionForQSort): Ditto. 30738 (KJS::ArrayInstance::compactForSorting): Fixed bug where this would turn 30739 undefined values into nonexistent values in some cases. 30740 30741 * kjs/array_object.h: Removed MAX_ARRAY_INDEX. 30742 * kjs/array_object.cpp: Removed ArrayInstance. Moved to a separate file. 30743 30744 * JavaScriptCore.pri: Added array_instance.cpp. 30745 * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. 30746 * kjs/AllInOneFile.cpp: Ditto. 30747 30748 2007-10-22 Andrew Wellington <proton (a] wiretapped.net> 30749 30750 Reviewed by Mark Rowe. 30751 30752 Fix for local database support after r26879 30753 Ensure that ENABLE_DATABASE and ENABLE_ICONDATABASE are correctly set 30754 30755 * Configurations/JavaScriptCore.xcconfig: 30756 30757 2007-10-22 Simon Hausmann <hausmann (a] kde.org> 30758 30759 Reviewed by Alp. 30760 30761 Build fix for the non-qmake builds. 30762 30763 * wtf/Platform.h: Default to enabling the database features unless 30764 otherwise specified. (similar to ENABLE_ICONDATABASE) 30765 30766 2007-10-22 Holger Freyther <zecke (a] selfish.org> 30767 30768 Reviewed by Simon Hausmann <hausmann (a] kde.org>. 30769 30770 * Do not build testkjs as an application bundle. This is 30771 needed for run-javascriptcore-tests on OSX. 30772 * Also, based on r26633, allow to test the WebKit/Qt port on OSX. 30773 * Set DYLD_LIBRARY_PATH if it was set in the environment. It must be set 30774 as we do not have -rpath on OSX. 30775 30776 * kjs/testkjs.pro: 30777 30778 2007-10-21 Mark Rowe <mrowe (a] apple.com> 30779 30780 Reviewed by Alp. 30781 30782 http://bugs.webkit.org/show_bug.cgi?id=15575 30783 Bug 15575: [GTK] Implement threading using GThread 30784 30785 * wtf/Platform.h: Do not enable pthreads for Gtk. 30786 30787 2007-10-21 Mark Rowe <mrowe (a] apple.com> 30788 30789 Reviewed by Mitz. 30790 30791 Fix http://bugs.webkit.org/show_bug.cgi?id=15603 30792 Bug 15603: Regression(r26847): Crash when sorting an empty array from JavaScript 30793 30794 * kjs/array_object.cpp: 30795 (KJS::freeStorage): Reinstate null-check that was removed in r26847. 30796 30797 2007-10-21 Darin Adler <darin (a] apple.com> 30798 30799 - fix Windows build 30800 30801 * kjs/array_instance.h: Removed unused ExecState parameter. 30802 * kjs/array_object.cpp: 30803 (KJS::ArrayInstance::put): Ditto. 30804 (KJS::ArrayInstance::setLength): Ditto. 30805 30806 2007-10-21 Darin Adler <darin (a] apple.com> 30807 30808 * kjs/array_object.cpp: (KJS::ArrayInstance::put): 30809 Add missing assignment that was causing regression test crash. 30810 30811 2007-10-21 Darin Adler <darin (a] apple.com> 30812 30813 Reviewed by Maciej. 30814 30815 - http://bugs.webkit.org/show_bug.cgi?id=15585 30816 speed up sparse arrays by using a custom map 30817 30818 Speeds up SunSpider by 10%. 30819 30820 * kjs/array_object.cpp: 30821 (allocateStorage): Leave room for an additional pointer. 30822 (reallocateStorage): Ditto. 30823 (freeStorage): Ditto. 30824 (ArrayInstance::~ArrayInstance): Delete the overflow map if present. 30825 (ArrayInstance::getItem): Read values from the overflow map if present. 30826 Removed the check of length, since it slows down the common case. 30827 (ArrayInstance::getOwnPropertySlot): Ditto. Also removed the fallback 30828 to the property map. 30829 (ArrayInstance::put): Write values into the overflow map as needed. 30830 Also create overflow map when needed. 30831 (ArrayInstance::deleteProperty): Remove values from the overflow map 30832 as appropriate. 30833 (ArrayInstance::getPropertyNames): Add a name for each identifier in 30834 the property map. This is extremely inefficient. 30835 (ArrayInstance::setLength): Remove any values in the overflow map 30836 that are past the new length, as we formerly did with the property map. 30837 (ArrayInstance::mark): Mark any values in the overflow map. 30838 (compareByStringForQSort): Removed unneeded undefined case, since 30839 compactForSorting guarantees we will have no undefined values. 30840 (compareWithCompareFunctionForQSort): Ditto. 30841 (ArrayInstance::compactForSorting): Copy all the values out of the 30842 overflow map and destroy it. 30843 30844 * kjs/property_map.h: Removed now-unused getSparseArrayPropertyNames. 30845 * kjs/property_map.cpp: Ditto. 30846 30847 2007-10-20 Darin Adler <darin (a] apple.com> 30848 30849 Reviewed by Maciej. 30850 30851 - http://bugs.webkit.org/show_bug.cgi?id=15579 30852 stop churning identifier reference counts copying Completion objects 30853 30854 * kjs/completion.h: Replace the Identifier with an Identifier*. 30855 * kjs/nodes.cpp: 30856 (ForInNode::execute): Update for change to Completion constructor. 30857 (ContinueNode::execute): Ditto. 30858 (BreakNode::execute): Ditto. 30859 30860 2007-10-20 Mark Rowe <mrowe (a] apple.com> 30861 30862 Reviewed by Alp. 30863 30864 Gtk changes needed to enable HTML 5 client-side database storage. 30865 30866 * wtf/Platform.h: Have Gtk use pthreads for now. 30867 30868 2007-10-20 Geoffrey Garen <ggaren (a] apple.com> 30869 30870 Reviewed by Maciej Stachowiak. 30871 30872 Fixed http://bugs.webkit.org/show_bug.cgi?id=15570 30873 Store gathered declaration nodes in the function body node. 30874 30875 This means that you only have to gather the declaration nodes the first 30876 time the function executes. Performance gain of 2.10% on SunSpider, 30877 0.90% on command-line JS iBench. 30878 30879 * kjs/nodes.cpp: Split declaration stack initialization code off into 30880 initializeDeclarationStacks(). 30881 (FunctionBodyNode::FunctionBodyNode): 30882 (FunctionBodyNode::initializeDeclarationStacks): 30883 (FunctionBodyNode::processDeclarations): 30884 30885 * kjs/nodes.h: Changed DeclarationStacks structure to hold references, 30886 since the actual Vectors are now stored either on the stack or in the 30887 function body node. 30888 30889 2007-10-19 Geoffrey Garen <ggaren (a] apple.com> 30890 30891 Reviewed by Darin Adler. 30892 30893 http://bugs.webkit.org/show_bug.cgi?id=15559 30894 Moved processDeclarations call into FunctionBodyNode::execute 30895 30896 To improve encapsulation, moved processDeclarations call into 30897 FunctionBodyNode::execute. Also marked processDeclarations 30898 ALWAYS_INLINE, since it has only 1 caller now. This is a .71% speedup 30899 on command-line JS iBench. 30900 30901 * kjs/function.cpp: 30902 (KJS::FunctionImp::callAsFunction): 30903 (KJS::GlobalFuncImp::callAsFunction): 30904 * kjs/function.h: 30905 * kjs/interpreter.cpp: 30906 (KJS::Interpreter::evaluate): 30907 * kjs/nodes.cpp: 30908 (FunctionBodyNode::execute): 30909 * kjs/nodes.h: 30910 30911 2007-10-19 Brady Eidson <beidson (a] apple.com> 30912 30913 Reviewed by Sam 30914 30915 Queue -> Deque! and small style tweaks 30916 30917 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 30918 * JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj 30919 * wtf/Deque.h: Added. 30920 (WTF::DequeNode::DequeNode): 30921 (WTF::Deque::Deque): 30922 (WTF::Deque::~Deque): 30923 (WTF::Deque::size): 30924 (WTF::Deque::isEmpty): 30925 (WTF::Deque::append): 30926 (WTF::Deque::prepend): 30927 (WTF::Deque::first): 30928 (WTF::Deque::last): 30929 (WTF::Deque::removeFirst): 30930 (WTF::Deque::clear): 30931 * wtf/Queue.h: Removed. 30932 30933 30934 2007-10-19 Brady Eidson <beidson (a] apple.com> 30935 30936 Reviewed by Oliver 30937 30938 Added a simple LinkedList based Queue to wtf 30939 We can make a better, more sophisticated an efficient one later, but have 30940 needed one for some time, now! 30941 30942 * JavaScriptCore.xcodeproj/project.pbxproj: 30943 * wtf/Queue.h: Added. 30944 (WTF::QueueNode::QueueNode): 30945 (WTF::Queue::Queue): 30946 (WTF::Queue::~Queue): 30947 (WTF::Queue::size): 30948 (WTF::Queue::isEmpty): 30949 (WTF::Queue::append): 30950 (WTF::Queue::prepend): 30951 (WTF::Queue::first): 30952 (WTF::Queue::last): 30953 (WTF::Queue::removeFirst): 30954 (WTF::Queue::clear): 30955 30956 2007-10-19 Nikolas Zimmermann <zimmermann (a] kde.org> 30957 30958 Reviewed by Anders. 30959 30960 Try to fix Qt/Win build slave, by including windows.h also on Qt/Win. 30961 30962 * kjs/testkjs.cpp: Change PLATFORM(WIN) to PLATFORM(WIN_OS) 30963 30964 2007-10-19 Simon Hausmann <hausmann (a] kde.org> 30965 30966 Reviewed by Lars. 30967 30968 Fix compilation on Windows when wchar_t is a typedef instead of a native type (triggered by -Zc:wchar_t-). 30969 Don't provide the wchar_t overloads then as they conflict with the unsigned short ones. 30970 30971 * wtf/ASCIICType.h: 30972 (WTF::isASCIIAlpha): 30973 (WTF::isASCIIAlphanumeric): 30974 (WTF::isASCIIDigit): 30975 (WTF::isASCIIHexDigit): 30976 (WTF::isASCIILower): 30977 (WTF::isASCIISpace): 30978 (WTF::toASCIILower): 30979 (WTF::toASCIIUpper): 30980 30981 2007-10-19 Simon Hausmann <hausmann (a] kde.org> 30982 30983 Reviewed by Lars. 30984 30985 Another build fix for the windows/qt build: Apply the same fix as in revision 26686 also to kjs/config.h to disable the disallowctype feature. 30986 30987 * kjs/config.h: 30988 30989 2007-10-18 Maciej Stachowiak <mjs (a] apple.com> 30990 30991 Reviewed by Adam. 30992 30993 - use __declspec(thread) for fast thread-local storage on Windows 30994 30995 - 2.2% speedup on sunspider (on Windows) 30996 - 7% speedup on the string section 30997 - 6% speedup on JS iBench 30998 30999 - fixed <rdar://problem/5473084> PLT on Windows got 2.5% slower between r25406 and r25422 31000 - fixed at least some of <rdar://5527965? i-Bench JS was 14% slower in 310A11 than 310A10 31001 31002 31003 * wtf/FastMalloc.cpp: 31004 (WTF::getThreadHeap): 31005 (WTF::setThreadHeap): 31006 (WTF::TCMalloc_ThreadCache::GetCache): 31007 (WTF::TCMalloc_ThreadCache::GetCacheIfPresent): 31008 (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary): 31009 31010 2007-10-17 Darin Adler <darin (a] apple.com> 31011 31012 Reviewed by Mark Rowe. 31013 31014 - fix http://bugs.webkit.org/show_bug.cgi?id=15543 31015 <rdar://problem/5545639> REGRESSION (r26697): 31016 GoogleDocs: Can't create new documents or open existing ones 31017 31018 Test: fast/js/regexp-non-character.html 31019 31020 * pcre/pcre_compile.c: (check_escape): Take out the checks for valid characters 31021 in the \u sequences -- not needed and actively harmful. 31022 31023 2007-10-17 Anders Carlsson <andersca (a] apple.com> 31024 31025 Reviewed by Oliver. 31026 31027 * wtf/Platform.h: 31028 #define USE_PTHREADS on Mac. 31029 31030 2007-10-17 Geoffrey Garen <ggaren (a] apple.com> 31031 31032 Reviewed by Darin Adler. 31033 31034 Merged DeclaredFunctionImp into FunctionImp (the base class) because 31035 the distinction between the two was unused. 31036 31037 Removed codeType() from FunctionImp because FunctionImp and its 31038 subclasses all returned FunctionCode, so it was unused, practically 31039 speaking. 31040 31041 Removed a different codeType() from GlobalFuncImp because it was unused. 31042 (Perhaps it was vestigial from a time when GlobalFuncImp used to 31043 inherit from FunctionImp.) 31044 31045 * bindings/runtime_method.cpp: 31046 * bindings/runtime_method.h: 31047 * kjs/function.cpp: 31048 (KJS::FunctionImp::FunctionImp): 31049 (KJS::FunctionImp::callAsFunction): 31050 (KJS::FunctionImp::construct): 31051 (KJS::FunctionImp::execute): 31052 (KJS::FunctionImp::processVarDecls): 31053 * kjs/function.h: 31054 (KJS::FunctionImp::implementsConstruct): 31055 (KJS::FunctionImp::scope): 31056 * kjs/function_object.cpp: 31057 (FunctionProtoFunc::callAsFunction): 31058 (FunctionObjectImp::construct): 31059 * kjs/nodes.cpp: 31060 (FuncDeclNode::processFuncDecl): 31061 (FuncExprNode::evaluate): 31062 31063 2007-10-17 Adam Roben <aroben (a] apple.com> 31064 31065 Windows build fix part 2. 31066 31067 Fix was by Darin, reviewed by Anders and Adam. 31068 31069 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add 31070 FastMallocPCRE.cpp to the project, and let Visual Studio have its way 31071 with the post-build step. 31072 * pcre/pcre.h: Don't DLL export the entry points just because this 31073 is Win32 -- this is an internal copy of PCRE and should be private. 31074 * pcre/pcre_compile.c: Fix an uninitialized variable warning -- 31075 there's no real problem but it's better to quiet the compiler by 31076 tweaking the code slightly than turn off the warning entirely. 31077 31078 2007-10-17 Adam Roben <aroben (a] apple.com> 31079 31080 Windows build fix. 31081 31082 Reviewed by Anders. 31083 31084 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable 31085 some mismatched signed/unsigned comparison warnings. 31086 * pcre/pcre_exec.c: 31087 (match): #if-out some labels that don't seem to exist. 31088 31089 2007-10-17 Mark Rowe <mrowe (a] apple.com> 31090 31091 Gtk build fix. 31092 31093 * JavaScriptCore.pri: Add FastMallocPCRE.cpp. 31094 * pcre/pcre_get. #if out two functions that depend on pcre_get_stringnumber, which 31095 is currently unavailable for UTF-16. 31096 31097 2007-10-16 Darin Adler <darin (a] apple.com> 31098 31099 Reviewed by Geoff. 31100 31101 - merged PCRE changes between 6.4 and 6.5 31102 31103 * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: 31104 * JavaScriptCore.xcodeproj/project.pbxproj: 31105 Removed pcre_config.c, pcre_globals.c, pcre_info.c, pcre_maketables.c, 31106 pcre_printint.src, pcre_refcount.c, pcre_study.c, pcre_try_flipped.c, 31107 pcre_ucp_findchar.c, pcre_version.c, and ucptable.c. Added pcre_ucp_searchfuncs.c. 31108 31109 * pcre/AUTHORS: 31110 * pcre/LICENCE: 31111 * pcre/MERGING: 31112 * pcre/dftables.c: 31113 * pcre/pcre-config.h: 31114 * pcre/pcre.h: 31115 * pcre/pcre.pri: 31116 * pcre/pcre_compile.c: 31117 * pcre/pcre_exec.c: 31118 * pcre/pcre_fullinfo.c: 31119 * pcre/pcre_get.c: 31120 * pcre/pcre_internal.h: 31121 * pcre/pcre_maketables.c: 31122 * pcre/pcre_ord2utf8.c: 31123 * pcre/pcre_tables.c: 31124 * pcre/pcre_ucp_searchfuncs.c: Copied from pcre/pcre_ucp_findchar.c. 31125 * pcre/pcre_xclass.c: 31126 * pcre/ucp.h: 31127 * pcre/ucpinternal.h: 31128 * pcre/ucptable.c: 31129 Updated with new versions from the PCRE 6.5 release, merged with changes. 31130 31131 * pcre/pcre_config.c: Removed. 31132 * pcre/pcre_globals.c: Removed. 31133 * pcre/pcre_info.c: Removed. 31134 * pcre/pcre_printint.src: Removed. 31135 * pcre/pcre_refcount.c: Removed. 31136 * pcre/pcre_study.c: Removed. 31137 * pcre/pcre_try_flipped.c: Removed. 31138 * pcre/pcre_ucp_findchar.c: Removed. 31139 * pcre/pcre_version.c: Removed. 31140 31141 2007-10-16 Geoffrey Garen <ggaren (a] apple.com> 31142 31143 Reviewed by Darin Adler. 31144 31145 Removed KJS_VERBOSE because it was getting in the way of readability, 31146 and the messages didn't seem very helpful. 31147 31148 * kjs/function.cpp: 31149 (KJS::FunctionImp::callAsFunction): 31150 (KJS::FunctionImp::passInParameters): 31151 * kjs/lookup.h: 31152 (KJS::lookupPut): 31153 * kjs/object.cpp: 31154 (KJS::JSObject::put): 31155 * kjs/value.h: 31156 31157 2007-10-16 Geoffrey Garen <ggaren (a] apple.com> 31158 31159 Reviewed by Darin Adler. 31160 31161 Removed the Parameter class because it was a redundant wrapper around 31162 Identifier. 31163 31164 * kjs/function.cpp: 31165 (KJS::FunctionImp::passInParameters): 31166 (KJS::FunctionImp::getParameterName): 31167 * kjs/nodes.cpp: 31168 (FunctionBodyNode::addParam): 31169 * kjs/nodes.h: 31170 (KJS::FunctionBodyNode::): 31171 31172 2007-10-16 Geoffrey Garen <ggaren (a] apple.com> 31173 31174 Reviewed by Darin Adler. 31175 31176 Global replace of assert with ASSERT. 31177 31178 2007-10-16 Adam Roben <aroben (a] apple.com> 31179 31180 Make testkjs not delay-load WebKit 31181 31182 Soon, delay-loading WebKit will be impossible (because we will be 31183 using __declspec(thread) for thread-local storage). This change 31184 prepares testkjs for the future. 31185 31186 Reviewed by Sam. 31187 31188 * JavaScriptCore.vcproj/JavaScriptCore.sln: Removed WebKitInitializer, 31189 added FindSafari. 31190 * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Don't link against 31191 WebKitInitializer, don't delay-load WebKit. 31192 * kjs/testkjs.cpp: Don't use WebKitInitializer. 31193 31194 2007-10-16 Adam Roben <aroben (a] apple.com> 31195 31196 Updated testkjs for the rename of WebKit_debug.dll to WebKit.dll for the Debug configuration 31197 31198 Reviewed by Kevin McCullough. 31199 31200 * JavaScriptCore.vcproj/debug.vsprops: Added WebKitDLLConfigSuffix. 31201 * JavaScriptCore.vcproj/debug_internal.vsprops: Ditto. 31202 * JavaScriptCore.vcproj/release.vsprops: Ditto. 31203 * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Use 31204 WebKitDLLConfigSuffix when referring to WebKit.dll, and fixed a typo 31205 in the name of icuuc36[_debug].dll. 31206 31207 2007-10-16 Geoffrey Garen <ggaren (a] apple.com> 31208 31209 Reviewed by Maciej Stachowiak. 31210 31211 Re-structured variable and function declaration code. 31212 31213 Command-line JS iBench shows no regression. 31214 31215 Here are the changes: 31216 31217 1. Function declarations are now processed at the same time as var 31218 declarations -- namely, immediately upon entry to an execution context. 31219 This does not match Firefox, which waits to process a function 31220 declaration until the declaration's containing block executes, but it 31221 does match IE and the ECMA spec. (10.1.3 states that var and function 31222 declarations should be processed at the same time -- namely, "On 31223 entering an execution context." 12.2 states that "A Block does not 31224 define a new execution scope.") 31225 31226 2. Declaration processing proceeds iteratively now, rather than 31227 recursively, storing the nodes is finds in stacks. This will later 31228 facilitate an optimization to hold on to the gathered declaration nodes, 31229 rather than re-fetching them in every function call. 31230 [ http://bugs.webkit.org/show_bug.cgi?id=14868 ] 31231 31232 Modified these tests because they expected the incorrect Mozilla 31233 behavior described above: 31234 31235 * tests/mozilla/ecma_3/Function/scope-001.js: 31236 * tests/mozilla/js1_5/Scope/regress-184107.js: 31237 31238 2007-10-16 Darin Adler <darin (a] apple.com> 31239 31240 - try to fix the GTK build 31241 31242 * kjs/ustring.cpp: Include ASCIICType.h, not ASCIICtype.h. 31243 31244 2007-10-16 Darin Adler <darin (a] apple.com> 31245 31246 - try to fix the Windows build 31247 31248 * kjs/date_object.cpp: (KJS::parseDate): A couple instances of isspace were 31249 in here. Not sure why it wasn't failing elsewhere. Changed to isASCIISpace. 31250 31251 2007-10-16 Darin Adler <darin (a] apple.com> 31252 31253 - try to fix the GTK build 31254 31255 * kjs/ustring.cpp: Include ASCIICType.h. 31256 31257 2007-10-16 Darin Adler <darin (a] apple.com> 31258 31259 Reviewed by Maciej and Geoff (and looked over by Eric). 31260 31261 - http://bugs.webkit.org/show_bug.cgi?id=15519 31262 eliminate use of <ctype.h> for processing ASCII 31263 31264 * wtf/ASCIICType.h: Added. 31265 * wtf/DisallowCType.h: Added. 31266 31267 * kjs/config.h: Include DisallowCType.h. 31268 31269 * kjs/date_object.cpp: 31270 (KJS::skipSpacesAndComments): 31271 (KJS::findMonth): 31272 (KJS::parseDate): 31273 * kjs/function.cpp: 31274 (KJS::decode): 31275 * kjs/ustring.cpp: 31276 (KJS::UString::toDouble): 31277 Use ASCIICType.h functions instead of ctype.h ones. 31278 31279 2007-10-14 Maciej Stachowiak <mjs (a] apple.com> 31280 31281 Reviewed by Darin. 31282 31283 - fixes for "New JavaScript benchmark" 31284 http://bugs.webkit.org/show_bug.cgi?id=15515 31285 31286 * kjs/testkjs.cpp: 31287 (TestFunctionImp::callAsFunction): Implement "load" for compatibility 31288 with SpiderMonkey. 31289 (TestFunctionImp::): ditto 31290 (doIt): ditto 31291 (kjsmain): Drop useless --> from output. 31292 31293 2007-10-15 Geoffrey Garen <ggaren (a] apple.com> 31294 31295 Removed unnecessary #include. 31296 31297 * API/JSObjectRef.cpp: 31298 31299 2007-10-15 Geoffrey Garen <ggaren (a] apple.com> 31300 31301 Double-reverse build fix. My tree was out of date. 31302 31303 * kjs/nodes.cpp: 31304 (NumberNode::evaluate): 31305 31306 2007-10-15 Geoffrey Garen <ggaren (a] apple.com> 31307 31308 Build fix. 31309 31310 * kjs/nodes.cpp: 31311 (NumberNode::evaluate): 31312 31313 2007-10-15 Geoffrey Garen <ggaren (a] apple.com> 31314 31315 Reviewed by Darin Adler. 31316 31317 Removed surprising self-named "hack" that made nested functions 31318 available as named properties of their containing functions, and placed 31319 containing function objects in the scope chains of nested functions. 31320 31321 There were a few reasons to remove this "hack:" 31322 31323 1. It contradicted FF, IE, and the ECMA spec. 31324 31325 2. It incurred a performance penalty, since merely parsing a function 31326 required parsing its body for nested functions (and so on). 31327 31328 3. SVN history contains no explanation for why it was added. It was just 31329 legacy code in a large merge a long, long time ago. 31330 31331 [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ] 31332 31333 * kjs/nodes.cpp: 31334 (FuncDeclNode::processFuncDecl): 31335 31336 2007-10-15 Geoffrey Garen <ggaren (a] apple.com> 31337 31338 Reviewed by Darin Adler. 31339 31340 Removed the concept of AnonymousCode. It was unused, and it doesn't 31341 exist in the ECMA spec. 31342 31343 [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ] 31344 31345 * kjs/Context.cpp: 31346 (KJS::Context::Context): 31347 * kjs/function.h: 31348 * kjs/nodes.cpp: 31349 (ReturnNode::execute): 31350 31351 2007-10-15 Geoffrey Garen <ggaren (a] apple.com> 31352 31353 Reviewed by Darin Adler. 31354 31355 Made function parameters DontDelete. This matches FF and the vague 31356 description in ECMA 10.1.3. It's also required in order to make 31357 symbol table based lookup of function parameters valid. (If the 31358 parameters aren't DontDelete, you can't guarantee that you'll find 31359 them later in the symbol table.) 31360 31361 [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ] 31362 31363 * kjs/function.cpp: 31364 (KJS::FunctionImp::passInParameters): 31365 31366 2007-10-15 Geoffrey Garen <ggaren (a] apple.com> 31367 31368 Reviewed by Maciej Stachowiak. 31369 31370 Some Vector optimizations. These are especially important when using 31371 Vector as a stack for implementing recursive algorithms iteratively. 31372 31373 [ Broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ] 31374 31375 1. Added shrink(), which is a version of resize() that you can call 31376 to save a branch / improve code generation and inlining when you know 31377 that the vector is not getting bigger. 31378 31379 2. Changed subclassing relationship in VectorBuffer to remove a call to 31380 fastFree() in the destructor for the inlineCapacity != 0 template 31381 specialization. This brings inline Vectors one step closer to true 31382 stack-allocated arrays. 31383 31384 Also changed abort() to CRASH(), since the latter works better. 31385 31386 * wtf/Vector.h: 31387 (WTF::VectorBufferBase::allocateBuffer): 31388 (WTF::VectorBufferBase::deallocateBuffer): 31389 (WTF::VectorBufferBase::VectorBufferBase): 31390 (WTF::VectorBufferBase::~VectorBufferBase): 31391 (WTF::): 31392 (WTF::VectorBuffer::VectorBuffer): 31393 (WTF::VectorBuffer::~VectorBuffer): 31394 (WTF::VectorBuffer::deallocateBuffer): 31395 (WTF::VectorBuffer::releaseBuffer): 31396 (WTF::Vector::clear): 31397 (WTF::Vector::removeLast): 31398 (WTF::::operator): 31399 (WTF::::fill): 31400 (WTF::::shrink): 31401 31402 2007-10-12 Geoffrey Garen <ggaren (a] apple.com> 31403 31404 Reviewed by Maciej Stachowiak. 31405 31406 Fixed http://bugs.webkit.org/show_bug.cgi?id=15490 31407 Iteration statements sometimes incorrectly evaluate to the empty value 31408 (KDE r670547). 31409 31410 [ Broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ] 31411 31412 This patch is a merge of KDE r670547, with substantial modification 31413 for performance. 31414 31415 It fixes do-while statements to evaluate to a value. (They used 31416 to evaluate to the empty value in all cases.) 31417 31418 It also fixes SourceElementsNode to maintain the value of abnormal 31419 completions like "break" and "continue." 31420 31421 It also re-works the main execution loop in SourceElementsNode so that 31422 it (1) makes a little more sense and (2) avoids unnecessary work. This 31423 is a .28% speedup on command-line JS iBench. 31424 31425 * kjs/nodes.cpp: 31426 (DoWhileNode::execute): 31427 (SourceElementsNode::execute): 31428 31429 2007-10-15 Simon Hausmann <hausmann (a] kde.org> 31430 31431 Reviewed by Lars. 31432 31433 Fix compilation with gcc 4.3 by including 'limits' due to the use of std::numeric_limits. 31434 31435 * wtf/HashTraits.h: 31436 31437 2007-10-5 Kevin Ollivier <kevino (a] theolliviers.com> 31438 31439 Reviewed by Adam. 31440 31441 Add support for MSVC7, and fix cases where PLATFORM(WIN) should 31442 be PLATFORM(WIN_OS) for other ports building on Windows. 31443 31444 * kjs/DateMath.cpp: 31445 (KJS::getDSTOffsetSimple): 31446 * kjs/JSImmediate.h: 31447 * wtf/Assertions.cpp: 31448 * wtf/Assertions.h: 31449 * wtf/Platform.h: 31450 * wtf/StringExtras.h: 31451 (snprintf): 31452 (vsnprintf): 31453 31454 2007-10-14 Cameron Zwarich <cwzwarich (a] uwaterloo.ca> 31455 31456 Reviewed by Darin. 31457 31458 Adds NegateNode optimization from KJS. The relevant revision in KDE 31459 is 666736. 31460 31461 * kjs/grammar.y: 31462 * kjs/nodes.cpp: 31463 (NumberNode::evaluate): 31464 * kjs/nodes.h: 31465 (KJS::Node::): 31466 (KJS::NumberNode::): 31467 * kjs/nodes2string.cpp: 31468 (NumberNode::streamTo): 31469 31470 2007-10-14 Jason Foreman <jason (a] threeve.org> 31471 31472 Reviewed by Maciej. 31473 31474 Fix http://bugs.webkit.org/show_bug.cgi?id=15145 31475 31476 Ensure that if adjusting n to minimize the difference of n*intPow10(e-p+1) to x, 31477 that the property n < intPow10(p) is maintained. 31478 31479 * kjs/number_object.cpp: 31480 (NumberProtoFunc::callAsFunction): 31481 31482 == Rolled over to ChangeLog-2007-10-14 == 31483