Changeset 50708 in webkit for trunk/JavaScriptCore
- Timestamp:
- Nov 9, 2009, 7:39:19 PM (16 years ago)
- Location:
- trunk/JavaScriptCore
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/ChangeLog
r50706 r50708 1 2009-11-09 Geoffrey Garen <[email protected]> 2 3 Reviewed by Sam Weinig. 4 5 Some manual inlining and constant propogation in Date code. 6 7 SunSpider reports a 0.4% speedup on date-*, no overall speedup. Shark 8 says some previously evident stalls are now gone. 9 10 * runtime/DateConstructor.cpp: 11 (JSC::callDate): 12 * runtime/DateConversion.cpp: 13 (JSC::formatTime): 14 (JSC::formatTimeUTC): Split formatTime into UTC and non-UTC variants. 15 16 * runtime/DateConversion.h: 17 * runtime/DateInstance.cpp: 18 (JSC::DateInstance::calculateGregorianDateTime): 19 (JSC::DateInstance::calculateGregorianDateTimeUTC): 20 * runtime/DateInstance.h: 21 (JSC::DateInstance::gregorianDateTime): 22 (JSC::DateInstance::gregorianDateTimeUTC): Split gregorianDateTime into 23 a UTC and non-UTC variant, and split each variant into a fast inline 24 case and a slow out-of-line case. 25 26 * runtime/DatePrototype.cpp: 27 (JSC::formatLocaleDate): 28 (JSC::dateProtoFuncToString): 29 (JSC::dateProtoFuncToUTCString): 30 (JSC::dateProtoFuncToISOString): 31 (JSC::dateProtoFuncToDateString): 32 (JSC::dateProtoFuncToTimeString): 33 (JSC::dateProtoFuncGetFullYear): 34 (JSC::dateProtoFuncGetUTCFullYear): 35 (JSC::dateProtoFuncToGMTString): 36 (JSC::dateProtoFuncGetMonth): 37 (JSC::dateProtoFuncGetUTCMonth): 38 (JSC::dateProtoFuncGetDate): 39 (JSC::dateProtoFuncGetUTCDate): 40 (JSC::dateProtoFuncGetDay): 41 (JSC::dateProtoFuncGetUTCDay): 42 (JSC::dateProtoFuncGetHours): 43 (JSC::dateProtoFuncGetUTCHours): 44 (JSC::dateProtoFuncGetMinutes): 45 (JSC::dateProtoFuncGetUTCMinutes): 46 (JSC::dateProtoFuncGetSeconds): 47 (JSC::dateProtoFuncGetUTCSeconds): 48 (JSC::dateProtoFuncGetTimezoneOffset): 49 (JSC::setNewValueFromTimeArgs): 50 (JSC::setNewValueFromDateArgs): 51 (JSC::dateProtoFuncSetYear): 52 (JSC::dateProtoFuncGetYear): Updated for the gregorianDateTime change above. 53 1 54 2009-11-09 Geoffrey Garen <[email protected]> 2 55 -
trunk/JavaScriptCore/runtime/DateConstructor.cpp
r50608 r50708 134 134 getLocalTime(&localTime, &localTM); 135 135 GregorianDateTime ts(exec, localTM); 136 return jsNontrivialString(exec, formatDate(ts) + " " + formatTime(ts , false));136 return jsNontrivialString(exec, formatDate(ts) + " " + formatTime(ts)); 137 137 } 138 138 -
trunk/JavaScriptCore/runtime/DateConversion.cpp
r50705 r50708 81 81 } 82 82 83 UString formatTime(const GregorianDateTime &t , bool utc)83 UString formatTime(const GregorianDateTime &t) 84 84 { 85 85 char buffer[100]; 86 if (utc) { 87 snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d GMT", t.hour, t.minute, t.second); 86 int offset = abs(gmtoffset(t)); 87 char timeZoneName[70]; 88 struct tm gtm = t; 89 strftime(timeZoneName, sizeof(timeZoneName), "%Z", >m); 90 91 if (timeZoneName[0]) { 92 snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d GMT%c%02d%02d (%s)", 93 t.hour, t.minute, t.second, 94 gmtoffset(t) < 0 ? '-' : '+', offset / (60*60), (offset / 60) % 60, timeZoneName); 88 95 } else { 89 int offset = abs(gmtoffset(t)); 90 char timeZoneName[70]; 91 struct tm gtm = t; 92 strftime(timeZoneName, sizeof(timeZoneName), "%Z", >m); 93 94 if (timeZoneName[0]) { 95 snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d GMT%c%02d%02d (%s)", 96 t.hour, t.minute, t.second, 97 gmtoffset(t) < 0 ? '-' : '+', offset / (60*60), (offset / 60) % 60, timeZoneName); 98 } else { 99 snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d GMT%c%02d%02d", 100 t.hour, t.minute, t.second, 101 gmtoffset(t) < 0 ? '-' : '+', offset / (60*60), (offset / 60) % 60); 102 } 96 snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d GMT%c%02d%02d", 97 t.hour, t.minute, t.second, 98 gmtoffset(t) < 0 ? '-' : '+', offset / (60*60), (offset / 60) % 60); 103 99 } 104 100 return UString(buffer); 105 101 } 106 102 103 UString formatTimeUTC(const GregorianDateTime &t) 104 { 105 char buffer[100]; 106 snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d GMT", t.hour, t.minute, t.second); 107 return UString(buffer); 108 } 109 107 110 } // namespace JSC -
trunk/JavaScriptCore/runtime/DateConversion.h
r50608 r50708 52 52 UString formatDate(const GregorianDateTime&); 53 53 UString formatDateUTCVariant(const GregorianDateTime&); 54 UString formatTime(const GregorianDateTime&, bool inputIsUTC); 54 UString formatTime(const GregorianDateTime&); 55 UString formatTimeUTC(const GregorianDateTime&); 55 56 56 57 } // namespace JSC -
trunk/JavaScriptCore/runtime/DateInstance.cpp
r50608 r50708 47 47 } 48 48 49 const GregorianDateTime* DateInstance:: gregorianDateTime(ExecState* exec, bool outputIsUTC) const49 const GregorianDateTime* DateInstance::calculateGregorianDateTime(ExecState* exec) const 50 50 { 51 51 double milli = internalNumber(); … … 56 56 m_data = exec->globalData().dateInstanceCache.add(milli); 57 57 58 if (outputIsUTC) {59 if (m_data->m_gregorianDateTimeUTCCachedForMS != milli) {60 msToGregorianDateTime(exec, internalNumber(), true, m_data->m_cachedGregorianDateTimeUTC);61 m_data->m_gregorianDateTimeUTCCachedForMS = milli;62 }63 return &m_data->m_cachedGregorianDateTimeUTC;64 }65 66 58 if (m_data->m_gregorianDateTimeCachedForMS != milli) { 67 msToGregorianDateTime(exec, internalNumber(), false, m_data->m_cachedGregorianDateTime);59 msToGregorianDateTime(exec, milli, false, m_data->m_cachedGregorianDateTime); 68 60 m_data->m_gregorianDateTimeCachedForMS = milli; 69 61 } … … 71 63 } 72 64 65 const GregorianDateTime* DateInstance::calculateGregorianDateTimeUTC(ExecState* exec) const 66 { 67 double milli = internalNumber(); 68 if (isnan(milli)) 69 return 0; 70 71 if (!m_data) 72 m_data = exec->globalData().dateInstanceCache.add(milli); 73 74 if (m_data->m_gregorianDateTimeUTCCachedForMS != milli) { 75 msToGregorianDateTime(exec, milli, true, m_data->m_cachedGregorianDateTimeUTC); 76 m_data->m_gregorianDateTimeUTCCachedForMS = milli; 77 } 78 return &m_data->m_cachedGregorianDateTimeUTC; 79 } 80 73 81 } // namespace JSC -
trunk/JavaScriptCore/runtime/DateInstance.h
r50608 r50708 39 39 static JS_EXPORTDATA const ClassInfo info; 40 40 41 const GregorianDateTime* gregorianDateTime(ExecState*, bool outputIsUTC) const; 41 const GregorianDateTime* gregorianDateTime(ExecState* exec) const 42 { 43 if (m_data && m_data->m_gregorianDateTimeCachedForMS == internalNumber()) 44 return &m_data->m_cachedGregorianDateTime; 45 return calculateGregorianDateTime(exec); 46 } 47 48 const GregorianDateTime* gregorianDateTimeUTC(ExecState* exec) const 49 { 50 if (m_data && m_data->m_gregorianDateTimeUTCCachedForMS == internalNumber()) 51 return &m_data->m_cachedGregorianDateTimeUTC; 52 return calculateGregorianDateTimeUTC(exec); 53 } 42 54 43 55 static PassRefPtr<Structure> createStructure(JSValue prototype) … … 50 62 51 63 private: 64 const GregorianDateTime* calculateGregorianDateTime(ExecState*) const; 65 const GregorianDateTime* calculateGregorianDateTimeUTC(ExecState*) const; 52 66 virtual const ClassInfo* classInfo() const { return &info; } 53 67 -
trunk/JavaScriptCore/runtime/DatePrototype.cpp
r50608 r50708 254 254 static JSCell* formatLocaleDate(ExecState* exec, DateInstance* dateObject, double, LocaleDateTimeFormat format, const ArgList&) 255 255 { 256 const bool outputIsUTC = false; 257 const GregorianDateTime* gregorianDateTime = dateObject->gregorianDateTime(exec, outputIsUTC); 256 const GregorianDateTime* gregorianDateTime = dateObject->gregorianDateTime(exec); 258 257 if (!gregorianDateTime) 259 258 return jsNontrivialString(exec, "Invalid Date"); … … 421 420 return throwError(exec, TypeError); 422 421 423 const bool outputIsUTC = false; 424 425 DateInstance* thisDateObj = asDateInstance(thisValue); 426 427 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 422 DateInstance* thisDateObj = asDateInstance(thisValue); 423 424 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec); 428 425 if (!gregorianDateTime) 429 426 return jsNontrivialString(exec, "Invalid Date"); 430 return jsNontrivialString(exec, formatDate(*gregorianDateTime) + " " + formatTime(*gregorianDateTime , outputIsUTC));427 return jsNontrivialString(exec, formatDate(*gregorianDateTime) + " " + formatTime(*gregorianDateTime)); 431 428 } 432 429 … … 436 433 return throwError(exec, TypeError); 437 434 438 const bool outputIsUTC = true; 439 440 DateInstance* thisDateObj = asDateInstance(thisValue); 441 442 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 435 DateInstance* thisDateObj = asDateInstance(thisValue); 436 437 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTimeUTC(exec); 443 438 if (!gregorianDateTime) 444 439 return jsNontrivialString(exec, "Invalid Date"); 445 return jsNontrivialString(exec, formatDateUTCVariant(*gregorianDateTime) + " " + formatTime (*gregorianDateTime, outputIsUTC));440 return jsNontrivialString(exec, formatDateUTCVariant(*gregorianDateTime) + " " + formatTimeUTC(*gregorianDateTime)); 446 441 } 447 442 … … 451 446 return throwError(exec, TypeError); 452 447 453 const bool outputIsUTC = true; 454 455 DateInstance* thisDateObj = asDateInstance(thisValue); 456 457 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 448 DateInstance* thisDateObj = asDateInstance(thisValue); 449 450 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTimeUTC(exec); 458 451 if (!gregorianDateTime) 459 452 return jsNontrivialString(exec, "Invalid Date"); … … 471 464 return throwError(exec, TypeError); 472 465 473 const bool outputIsUTC = false; 474 475 DateInstance* thisDateObj = asDateInstance(thisValue); 476 477 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 466 DateInstance* thisDateObj = asDateInstance(thisValue); 467 468 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec); 478 469 if (!gregorianDateTime) 479 470 return jsNontrivialString(exec, "Invalid Date"); … … 486 477 return throwError(exec, TypeError); 487 478 488 const bool outputIsUTC = false; 489 490 DateInstance* thisDateObj = asDateInstance(thisValue); 491 492 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 479 DateInstance* thisDateObj = asDateInstance(thisValue); 480 481 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec); 493 482 if (!gregorianDateTime) 494 483 return jsNontrivialString(exec, "Invalid Date"); 495 return jsNontrivialString(exec, formatTime(*gregorianDateTime , outputIsUTC));484 return jsNontrivialString(exec, formatTime(*gregorianDateTime)); 496 485 } 497 486 … … 536 525 return throwError(exec, TypeError); 537 526 538 const bool outputIsUTC = false; 539 540 DateInstance* thisDateObj = asDateInstance(thisValue); 541 542 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 527 DateInstance* thisDateObj = asDateInstance(thisValue); 528 529 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec); 543 530 if (!gregorianDateTime) 544 531 return jsNaN(exec); … … 551 538 return throwError(exec, TypeError); 552 539 553 const bool outputIsUTC = true; 554 555 DateInstance* thisDateObj = asDateInstance(thisValue); 556 557 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 540 DateInstance* thisDateObj = asDateInstance(thisValue); 541 542 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTimeUTC(exec); 558 543 if (!gregorianDateTime) 559 544 return jsNaN(exec); … … 566 551 return throwError(exec, TypeError); 567 552 568 const bool outputIsUTC = true; 569 570 DateInstance* thisDateObj = asDateInstance(thisValue); 571 572 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 553 DateInstance* thisDateObj = asDateInstance(thisValue); 554 555 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTimeUTC(exec); 573 556 if (!gregorianDateTime) 574 557 return jsNontrivialString(exec, "Invalid Date"); 575 return jsNontrivialString(exec, formatDateUTCVariant(*gregorianDateTime) + " " + formatTime (*gregorianDateTime, outputIsUTC));558 return jsNontrivialString(exec, formatDateUTCVariant(*gregorianDateTime) + " " + formatTimeUTC(*gregorianDateTime)); 576 559 } 577 560 … … 581 564 return throwError(exec, TypeError); 582 565 583 const bool outputIsUTC = false; 584 585 DateInstance* thisDateObj = asDateInstance(thisValue); 586 587 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 566 DateInstance* thisDateObj = asDateInstance(thisValue); 567 568 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec); 588 569 if (!gregorianDateTime) 589 570 return jsNaN(exec); … … 596 577 return throwError(exec, TypeError); 597 578 598 const bool outputIsUTC = true; 599 600 DateInstance* thisDateObj = asDateInstance(thisValue); 601 602 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 579 DateInstance* thisDateObj = asDateInstance(thisValue); 580 581 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTimeUTC(exec); 603 582 if (!gregorianDateTime) 604 583 return jsNaN(exec); … … 611 590 return throwError(exec, TypeError); 612 591 613 const bool outputIsUTC = false; 614 615 DateInstance* thisDateObj = asDateInstance(thisValue); 616 617 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 592 DateInstance* thisDateObj = asDateInstance(thisValue); 593 594 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec); 618 595 if (!gregorianDateTime) 619 596 return jsNaN(exec); … … 626 603 return throwError(exec, TypeError); 627 604 628 const bool outputIsUTC = true; 629 630 DateInstance* thisDateObj = asDateInstance(thisValue); 631 632 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 605 DateInstance* thisDateObj = asDateInstance(thisValue); 606 607 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTimeUTC(exec); 633 608 if (!gregorianDateTime) 634 609 return jsNaN(exec); … … 641 616 return throwError(exec, TypeError); 642 617 643 const bool outputIsUTC = false; 644 645 DateInstance* thisDateObj = asDateInstance(thisValue); 646 647 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 618 DateInstance* thisDateObj = asDateInstance(thisValue); 619 620 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec); 648 621 if (!gregorianDateTime) 649 622 return jsNaN(exec); … … 656 629 return throwError(exec, TypeError); 657 630 658 const bool outputIsUTC = true; 659 660 DateInstance* thisDateObj = asDateInstance(thisValue); 661 662 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 631 DateInstance* thisDateObj = asDateInstance(thisValue); 632 633 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTimeUTC(exec); 663 634 if (!gregorianDateTime) 664 635 return jsNaN(exec); … … 671 642 return throwError(exec, TypeError); 672 643 673 const bool outputIsUTC = false; 674 675 DateInstance* thisDateObj = asDateInstance(thisValue); 676 677 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 644 DateInstance* thisDateObj = asDateInstance(thisValue); 645 646 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec); 678 647 if (!gregorianDateTime) 679 648 return jsNaN(exec); … … 686 655 return throwError(exec, TypeError); 687 656 688 const bool outputIsUTC = true; 689 690 DateInstance* thisDateObj = asDateInstance(thisValue); 691 692 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 657 DateInstance* thisDateObj = asDateInstance(thisValue); 658 659 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTimeUTC(exec); 693 660 if (!gregorianDateTime) 694 661 return jsNaN(exec); … … 701 668 return throwError(exec, TypeError); 702 669 703 const bool outputIsUTC = false; 704 705 DateInstance* thisDateObj = asDateInstance(thisValue); 706 707 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 670 DateInstance* thisDateObj = asDateInstance(thisValue); 671 672 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec); 708 673 if (!gregorianDateTime) 709 674 return jsNaN(exec); … … 716 681 return throwError(exec, TypeError); 717 682 718 const bool outputIsUTC = true; 719 720 DateInstance* thisDateObj = asDateInstance(thisValue); 721 722 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 683 DateInstance* thisDateObj = asDateInstance(thisValue); 684 685 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTimeUTC(exec); 723 686 if (!gregorianDateTime) 724 687 return jsNaN(exec); … … 731 694 return throwError(exec, TypeError); 732 695 733 const bool outputIsUTC = false; 734 735 DateInstance* thisDateObj = asDateInstance(thisValue); 736 737 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 696 DateInstance* thisDateObj = asDateInstance(thisValue); 697 698 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec); 738 699 if (!gregorianDateTime) 739 700 return jsNaN(exec); … … 746 707 return throwError(exec, TypeError); 747 708 748 const bool outputIsUTC = true; 749 750 DateInstance* thisDateObj = asDateInstance(thisValue); 751 752 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 709 DateInstance* thisDateObj = asDateInstance(thisValue); 710 711 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTimeUTC(exec); 753 712 if (!gregorianDateTime) 754 713 return jsNaN(exec); … … 791 750 return throwError(exec, TypeError); 792 751 793 const bool outputIsUTC = false; 794 795 DateInstance* thisDateObj = asDateInstance(thisValue); 796 797 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 752 DateInstance* thisDateObj = asDateInstance(thisValue); 753 754 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec); 798 755 if (!gregorianDateTime) 799 756 return jsNaN(exec); … … 831 788 double ms = milli - secs * msPerSecond; 832 789 833 const GregorianDateTime* other = thisDateObj->gregorianDateTime(exec, inputIsUTC); 790 const GregorianDateTime* other = inputIsUTC 791 ? thisDateObj->gregorianDateTimeUTC(exec) 792 : thisDateObj->gregorianDateTime(exec); 834 793 if (!other) 835 794 return jsNaN(exec); … … 868 827 else { 869 828 ms = milli - floor(milli / msPerSecond) * msPerSecond; 870 const GregorianDateTime* other = thisDateObj->gregorianDateTime(exec, inputIsUTC); 829 const GregorianDateTime* other = inputIsUTC 830 ? thisDateObj->gregorianDateTimeUTC(exec) 831 : thisDateObj->gregorianDateTime(exec); 871 832 if (!other) 872 833 return jsNaN(exec); … … 974 935 return throwError(exec, TypeError); 975 936 976 const bool outputIsUTC = false;977 978 937 DateInstance* thisDateObj = asDateInstance(thisValue); 979 938 if (args.isEmpty()) { … … 994 953 double secs = floor(milli / msPerSecond); 995 954 ms = milli - secs * msPerSecond; 996 if (const GregorianDateTime* other = thisDateObj->gregorianDateTime(exec , outputIsUTC))955 if (const GregorianDateTime* other = thisDateObj->gregorianDateTime(exec)) 997 956 gregorianDateTime.copyFrom(*other); 998 957 } … … 1007 966 1008 967 gregorianDateTime.year = (year > 99 || year < 0) ? year - 1900 : year; 1009 JSValue result = jsNumber(exec, gregorianDateTimeToMS(exec, gregorianDateTime, ms, outputIsUTC));968 JSValue result = jsNumber(exec, gregorianDateTimeToMS(exec, gregorianDateTime, ms, false)); 1010 969 thisDateObj->setInternalValue(result); 1011 970 return result; … … 1017 976 return throwError(exec, TypeError); 1018 977 1019 const bool outputIsUTC = false; 1020 1021 DateInstance* thisDateObj = asDateInstance(thisValue); 1022 1023 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec, outputIsUTC); 978 DateInstance* thisDateObj = asDateInstance(thisValue); 979 980 const GregorianDateTime* gregorianDateTime = thisDateObj->gregorianDateTime(exec); 1024 981 if (!gregorianDateTime) 1025 982 return jsNaN(exec);
Note:
See TracChangeset
for help on using the changeset viewer.