@@ -13,19 +13,17 @@ const ObjectAssign = Object.assign;
13
13
const ObjectCreate = Object . create ;
14
14
const ObjectDefineProperty = Object . defineProperty ;
15
15
const ObjectIs = Object . is ;
16
+ const ReflectApply = Reflect . apply ;
16
17
17
18
import { DEBUG } from './debug' ;
18
19
import bigInt from 'big-integer' ;
19
- import Call from 'es-abstract/2020/Call.js' ;
20
- import GetMethod from 'es-abstract/2020/GetMethod.js' ;
21
20
import IsInteger from 'es-abstract/2020/IsInteger.js' ;
22
21
import ToInteger from 'es-abstract/2020/ToInteger.js' ;
23
22
import ToLength from 'es-abstract/2020/ToLength.js' ;
24
23
import ToNumber from 'es-abstract/2020/ToNumber.js' ;
25
24
import ToPrimitive from 'es-abstract/2020/ToPrimitive.js' ;
26
25
import ToString from 'es-abstract/2020/ToString.js' ;
27
26
import Type from 'es-abstract/2020/Type.js' ;
28
- import HasOwnProperty from 'es-abstract/2020/HasOwnProperty.js' ;
29
27
30
28
import { GetIntrinsic } from './intrinsicclass' ;
31
29
import {
@@ -154,9 +152,6 @@ const SINGULAR_PLURAL_UNITS = [
154
152
import * as PARSE from './regex' ;
155
153
156
154
const ES2020 = {
157
- Call,
158
- GetMethod,
159
- HasOwnProperty,
160
155
IsInteger,
161
156
ToInteger,
162
157
ToLength,
@@ -1522,8 +1517,9 @@ export const ES = ObjectAssign({}, ES2020, {
1522
1517
return new TemporalCalendar ( 'iso8601' ) ;
1523
1518
} ,
1524
1519
CalendarFields : ( calendar , fieldNames ) => {
1525
- const fields = ES . GetMethod ( calendar , 'fields' ) ;
1526
- if ( fields !== undefined ) fieldNames = ES . Call ( fields , calendar , [ fieldNames ] ) ;
1520
+ if ( calendar . fields ) {
1521
+ fieldNames = calendar . fields ( fieldNames ) ;
1522
+ }
1527
1523
const result = [ ] ;
1528
1524
for ( const name of fieldNames ) {
1529
1525
if ( ES . Type ( name ) !== 'String' ) throw new TypeError ( 'bad return from calendar.fields()' ) ;
@@ -1532,107 +1528,95 @@ export const ES = ObjectAssign({}, ES2020, {
1532
1528
return result ;
1533
1529
} ,
1534
1530
CalendarMergeFields : ( calendar , fields , additionalFields ) => {
1535
- const mergeFields = ES . GetMethod ( calendar , 'mergeFields' ) ;
1536
- if ( mergeFields === undefined ) return { ...fields , ...additionalFields } ;
1537
- const result = ES . Call ( mergeFields , calendar , [ fields , additionalFields ] ) ;
1531
+ const calMergeFields = calendar . mergeFields ;
1532
+ if ( ! calMergeFields ) {
1533
+ return { ...fields , ...additionalFields } ;
1534
+ }
1535
+ const result = Reflect . apply ( calMergeFields , calendar , [ fields , additionalFields ] ) ;
1538
1536
if ( ES . Type ( result ) !== 'Object' ) throw new TypeError ( 'bad return from calendar.mergeFields()' ) ;
1539
1537
return result ;
1540
1538
} ,
1541
1539
CalendarDateAdd : ( calendar , date , duration , options , dateAdd ) => {
1542
1540
if ( dateAdd === undefined ) {
1543
- dateAdd = ES . GetMethod ( calendar , ' dateAdd' ) ;
1541
+ dateAdd = calendar . dateAdd ;
1544
1542
}
1545
- const result = ES . Call ( dateAdd , calendar , [ date , duration , options ] ) ;
1543
+ const result = ReflectApply ( dateAdd , calendar , [ date , duration , options ] ) ;
1546
1544
if ( ! ES . IsTemporalDate ( result ) ) throw new TypeError ( 'invalid result' ) ;
1547
1545
return result ;
1548
1546
} ,
1549
1547
CalendarDateUntil : ( calendar , date , otherDate , options , dateUntil ) => {
1550
1548
if ( dateUntil === undefined ) {
1551
- dateUntil = ES . GetMethod ( calendar , ' dateUntil' ) ;
1549
+ dateUntil = calendar . dateUntil ;
1552
1550
}
1553
- const result = ES . Call ( dateUntil , calendar , [ date , otherDate , options ] ) ;
1551
+ const result = ReflectApply ( dateUntil , calendar , [ date , otherDate , options ] ) ;
1554
1552
if ( ! ES . IsTemporalDuration ( result ) ) throw new TypeError ( 'invalid result' ) ;
1555
1553
return result ;
1556
1554
} ,
1557
1555
CalendarYear : ( calendar , dateLike ) => {
1558
- const year = ES . GetMethod ( calendar , 'year' ) ;
1559
- const result = ES . Call ( year , calendar , [ dateLike ] ) ;
1556
+ const result = calendar . year ( dateLike ) ;
1560
1557
if ( result === undefined ) {
1561
1558
throw new RangeError ( 'calendar year result must be an integer' ) ;
1562
1559
}
1563
1560
return ES . ToIntegerThrowOnInfinity ( result ) ;
1564
1561
} ,
1565
1562
CalendarMonth : ( calendar , dateLike ) => {
1566
- const month = ES . GetMethod ( calendar , 'month' ) ;
1567
- const result = ES . Call ( month , calendar , [ dateLike ] ) ;
1563
+ const result = calendar . month ( dateLike ) ;
1568
1564
if ( result === undefined ) {
1569
1565
throw new RangeError ( 'calendar month result must be a positive integer' ) ;
1570
1566
}
1571
1567
return ES . ToPositiveInteger ( result ) ;
1572
1568
} ,
1573
1569
CalendarMonthCode : ( calendar , dateLike ) => {
1574
- const monthCode = ES . GetMethod ( calendar , 'monthCode' ) ;
1575
- const result = ES . Call ( monthCode , calendar , [ dateLike ] ) ;
1570
+ const result = calendar . monthCode ( dateLike ) ;
1576
1571
if ( result === undefined ) {
1577
1572
throw new RangeError ( 'calendar monthCode result must be a string' ) ;
1578
1573
}
1579
1574
return ES . ToString ( result ) ;
1580
1575
} ,
1581
1576
CalendarDay : ( calendar , dateLike ) => {
1582
- const day = ES . GetMethod ( calendar , 'day' ) ;
1583
- const result = ES . Call ( day , calendar , [ dateLike ] ) ;
1577
+ const result = calendar . day ( dateLike ) ;
1584
1578
if ( result === undefined ) {
1585
1579
throw new RangeError ( 'calendar day result must be a positive integer' ) ;
1586
1580
}
1587
1581
return ES . ToPositiveInteger ( result ) ;
1588
1582
} ,
1589
1583
CalendarEra : ( calendar , dateLike ) => {
1590
- const era = ES . GetMethod ( calendar , 'era' ) ;
1591
- let result = ES . Call ( era , calendar , [ dateLike ] ) ;
1584
+ let result = calendar . era ( dateLike ) ;
1592
1585
if ( result !== undefined ) {
1593
1586
result = ES . ToString ( result ) ;
1594
1587
}
1595
1588
return result ;
1596
1589
} ,
1597
1590
CalendarEraYear : ( calendar , dateLike ) => {
1598
- const eraYear = ES . GetMethod ( calendar , 'eraYear' ) ;
1599
- let result = ES . Call ( eraYear , calendar , [ dateLike ] ) ;
1591
+ let result = calendar . eraYear ( dateLike ) ;
1600
1592
if ( result !== undefined ) {
1601
1593
result = ES . ToIntegerThrowOnInfinity ( result ) ;
1602
1594
}
1603
1595
return result ;
1604
1596
} ,
1605
1597
CalendarDayOfWeek : ( calendar , dateLike ) => {
1606
- const dayOfWeek = ES . GetMethod ( calendar , 'dayOfWeek' ) ;
1607
- return ES . Call ( dayOfWeek , calendar , [ dateLike ] ) ;
1598
+ return calendar . dayOfWeek ( dateLike ) ;
1608
1599
} ,
1609
1600
CalendarDayOfYear : ( calendar , dateLike ) => {
1610
- const dayOfYear = ES . GetMethod ( calendar , 'dayOfYear' ) ;
1611
- return ES . Call ( dayOfYear , calendar , [ dateLike ] ) ;
1601
+ return calendar . dayOfYear ( dateLike ) ;
1612
1602
} ,
1613
1603
CalendarWeekOfYear : ( calendar , dateLike ) => {
1614
- const weekOfYear = ES . GetMethod ( calendar , 'weekOfYear' ) ;
1615
- return ES . Call ( weekOfYear , calendar , [ dateLike ] ) ;
1604
+ return calendar . weekOfYear ( dateLike ) ;
1616
1605
} ,
1617
1606
CalendarDaysInWeek : ( calendar , dateLike ) => {
1618
- const daysInWeek = ES . GetMethod ( calendar , 'daysInWeek' ) ;
1619
- return ES . Call ( daysInWeek , calendar , [ dateLike ] ) ;
1607
+ return calendar . daysInWeek ( dateLike ) ;
1620
1608
} ,
1621
1609
CalendarDaysInMonth : ( calendar , dateLike ) => {
1622
- const daysInMonth = ES . GetMethod ( calendar , 'daysInMonth' ) ;
1623
- return ES . Call ( daysInMonth , calendar , [ dateLike ] ) ;
1610
+ return calendar . daysInMonth ( dateLike ) ;
1624
1611
} ,
1625
1612
CalendarDaysInYear : ( calendar , dateLike ) => {
1626
- const daysInYear = ES . GetMethod ( calendar , 'daysInYear' ) ;
1627
- return ES . Call ( daysInYear , calendar , [ dateLike ] ) ;
1613
+ return calendar . daysInYear ( dateLike ) ;
1628
1614
} ,
1629
1615
CalendarMonthsInYear : ( calendar , dateLike ) => {
1630
- const monthsInYear = ES . GetMethod ( calendar , 'monthsInYear' ) ;
1631
- return ES . Call ( monthsInYear , calendar , [ dateLike ] ) ;
1616
+ return calendar . monthsInYear ( dateLike ) ;
1632
1617
} ,
1633
1618
CalendarInLeapYear : ( calendar , dateLike ) => {
1634
- const inLeapYear = ES . GetMethod ( calendar , 'inLeapYear' ) ;
1635
- return ES . Call ( inLeapYear , calendar , [ dateLike ] ) ;
1619
+ return calendar . inLeapYear ( dateLike ) ;
1636
1620
} ,
1637
1621
1638
1622
ToTemporalCalendar : ( calendarLike ) => {
@@ -1684,20 +1668,17 @@ export const ES = ObjectAssign({}, ES2020, {
1684
1668
}
1685
1669
} ,
1686
1670
DateFromFields : ( calendar , fields , options ) => {
1687
- const dateFromFields = ES . GetMethod ( calendar , 'dateFromFields' ) ;
1688
- const result = ES . Call ( dateFromFields , calendar , [ fields , options ] ) ;
1671
+ const result = calendar . dateFromFields ( fields , options ) ;
1689
1672
if ( ! ES . IsTemporalDate ( result ) ) throw new TypeError ( 'invalid result' ) ;
1690
1673
return result ;
1691
1674
} ,
1692
1675
YearMonthFromFields : ( calendar , fields , options ) => {
1693
- const yearMonthFromFields = ES . GetMethod ( calendar , 'yearMonthFromFields' ) ;
1694
- const result = ES . Call ( yearMonthFromFields , calendar , [ fields , options ] ) ;
1676
+ const result = calendar . yearMonthFromFields ( fields , options ) ;
1695
1677
if ( ! ES . IsTemporalYearMonth ( result ) ) throw new TypeError ( 'invalid result' ) ;
1696
1678
return result ;
1697
1679
} ,
1698
1680
MonthDayFromFields : ( calendar , fields , options ) => {
1699
- const monthDayFromFields = ES . GetMethod ( calendar , 'monthDayFromFields' ) ;
1700
- const result = ES . Call ( monthDayFromFields , calendar , [ fields , options ] ) ;
1681
+ const result = calendar . monthDayFromFields ( fields , options ) ;
1701
1682
if ( ! ES . IsTemporalMonthDay ( result ) ) throw new TypeError ( 'invalid result' ) ;
1702
1683
return result ;
1703
1684
} ,
@@ -1742,11 +1723,11 @@ export const ES = ObjectAssign({}, ES2020, {
1742
1723
) ;
1743
1724
} ,
1744
1725
GetOffsetNanosecondsFor : ( timeZone , instant ) => {
1745
- let getOffsetNanosecondsFor = ES . GetMethod ( timeZone , ' getOffsetNanosecondsFor' ) ;
1726
+ let getOffsetNanosecondsFor = timeZone . getOffsetNanosecondsFor ;
1746
1727
if ( getOffsetNanosecondsFor === undefined ) {
1747
1728
getOffsetNanosecondsFor = GetIntrinsic ( '%Temporal.TimeZone.prototype.getOffsetNanosecondsFor%' ) ;
1748
1729
}
1749
- const offsetNs = ES . Call ( getOffsetNanosecondsFor , timeZone , [ instant ] ) ;
1730
+ const offsetNs = Reflect . apply ( getOffsetNanosecondsFor , timeZone , [ instant ] ) ;
1750
1731
if ( typeof offsetNs !== 'number' ) {
1751
1732
throw new TypeError ( 'bad return from getOffsetNanosecondsFor' ) ;
1752
1733
}
@@ -1916,8 +1897,7 @@ export const ES = ObjectAssign({}, ES2020, {
1916
1897
}
1917
1898
} ,
1918
1899
GetPossibleInstantsFor : ( timeZone , dateTime ) => {
1919
- const getPossibleInstantsFor = ES . GetMethod ( timeZone , 'getPossibleInstantsFor' ) ;
1920
- const possibleInstants = ES . Call ( getPossibleInstantsFor , timeZone , [ dateTime ] ) ;
1900
+ const possibleInstants = timeZone . getPossibleInstantsFor ( dateTime ) ;
1921
1901
const result = [ ] ;
1922
1902
for ( const instant of possibleInstants ) {
1923
1903
if ( ! ES . IsTemporalInstant ( instant ) ) {
@@ -2698,8 +2678,8 @@ export const ES = ObjectAssign({}, ES2020, {
2698
2678
{
2699
2679
if ( ! calendar ) throw new RangeError ( 'a starting point is required for months balancing' ) ;
2700
2680
// balance years down to months
2701
- const dateAdd = ES . GetMethod ( calendar , ' dateAdd' ) ;
2702
- const dateUntil = ES . GetMethod ( calendar , ' dateUntil' ) ;
2681
+ const dateAdd = calendar . dateAdd ;
2682
+ const dateUntil = calendar . dateUntil ;
2703
2683
while ( MathAbs ( years ) > 0 ) {
2704
2684
const addOptions = ObjectCreate ( null ) ;
2705
2685
const newRelativeTo = ES . CalendarDateAdd ( calendar , relativeTo , oneYear , addOptions , dateAdd ) ;
@@ -2802,10 +2782,10 @@ export const ES = ObjectAssign({}, ES2020, {
2802
2782
}
2803
2783
2804
2784
// balance months up to years
2805
- const dateAdd = ES . GetMethod ( calendar , ' dateAdd' ) ;
2785
+ const dateAdd = calendar . dateAdd ;
2806
2786
const addOptions = ObjectCreate ( null ) ;
2807
2787
newRelativeTo = ES . CalendarDateAdd ( calendar , relativeTo , oneYear , addOptions , dateAdd ) ;
2808
- const dateUntil = ES . GetMethod ( calendar , ' dateUntil' ) ;
2788
+ const dateUntil = calendar . dateUntil ;
2809
2789
const untilOptions = ObjectCreate ( null ) ;
2810
2790
untilOptions . largestUnit = 'month' ;
2811
2791
let untilResult = ES . CalendarDateUntil ( calendar , relativeTo , newRelativeTo , untilOptions , dateUntil ) ;
@@ -3387,7 +3367,7 @@ export const ES = ObjectAssign({}, ES2020, {
3387
3367
) ;
3388
3368
const dateDuration1 = new TemporalDuration ( y1 , mon1 , w1 , d1 , 0 , 0 , 0 , 0 , 0 , 0 ) ;
3389
3369
const dateDuration2 = new TemporalDuration ( y2 , mon2 , w2 , d2 , 0 , 0 , 0 , 0 , 0 , 0 ) ;
3390
- const dateAdd = ES . GetMethod ( calendar , ' dateAdd' ) ;
3370
+ const dateAdd = calendar . dateAdd ;
3391
3371
const firstAddOptions = ObjectCreate ( null ) ;
3392
3372
const intermediate = ES . CalendarDateAdd ( calendar , datePart , dateDuration1 , firstAddOptions , dateAdd ) ;
3393
3373
const secondAddOptions = ObjectCreate ( null ) ;
@@ -3928,7 +3908,7 @@ export const ES = ObjectAssign({}, ES2020, {
3928
3908
// convert months and weeks to days by calculating difference(
3929
3909
// relativeTo + years, relativeTo + { years, months, weeks })
3930
3910
const yearsDuration = new TemporalDuration ( years ) ;
3931
- const dateAdd = ES . GetMethod ( calendar , ' dateAdd' ) ;
3911
+ const dateAdd = calendar . dateAdd ;
3932
3912
const firstAddOptions = ObjectCreate ( null ) ;
3933
3913
const yearsLater = ES . CalendarDateAdd ( calendar , relativeTo , yearsDuration , firstAddOptions , dateAdd ) ;
3934
3914
const yearsMonthsWeeks = new TemporalDuration ( years , months , weeks ) ;
@@ -3979,7 +3959,7 @@ export const ES = ObjectAssign({}, ES2020, {
3979
3959
// convert weeks to days by calculating difference(relativeTo +
3980
3960
// { years, months }, relativeTo + { years, months, weeks })
3981
3961
const yearsMonths = new TemporalDuration ( years , months ) ;
3982
- const dateAdd = ES . GetMethod ( calendar , ' dateAdd' ) ;
3962
+ const dateAdd = calendar . dateAdd ;
3983
3963
const firstAddOptions = ObjectCreate ( null ) ;
3984
3964
const yearsMonthsLater = ES . CalendarDateAdd ( calendar , relativeTo , yearsMonths , firstAddOptions , dateAdd ) ;
3985
3965
const yearsMonthsWeeks = new TemporalDuration ( years , months , weeks ) ;
0 commit comments