From 43f988908662a42e6d830603f54abc34160a39d1 Mon Sep 17 00:00:00 2001 From: "Liao.Peng" Date: Sat, 13 Feb 2021 20:34:03 +0800 Subject: [PATCH] feature: add date implementation Signed-off-by: Liao.Peng --- std/assembly/bindings/Date.ts | 4 + std/assembly/date.ts | 222 +- std/assembly/index.d.ts | 70 +- std/assembly/util/date.ts | 383 ++ tests/compiler.js | 6 + tests/compiler/std/date.optimized.wat | 3828 ++++++++++++++++++-- tests/compiler/std/date.ts | 111 + tests/compiler/std/date.untouched.wat | 4620 +++++++++++++++++++++++-- 8 files changed, 8646 insertions(+), 598 deletions(-) create mode 100644 std/assembly/util/date.ts diff --git a/std/assembly/bindings/Date.ts b/std/assembly/bindings/Date.ts index c02c9a6d4e..07456e3010 100644 --- a/std/assembly/bindings/Date.ts +++ b/std/assembly/bindings/Date.ts @@ -1,6 +1,7 @@ export declare function UTC( // NOTE: Using i32 below saves us a f64.convert_s instruction and moves the responsibility for // converting the value to the WASM/JS boundary. + // It returns the number of milliseconds since January 1, 1970, 00:00:00 UTC. year: i32, month: i32, day: i32, @@ -9,4 +10,7 @@ export declare function UTC( second: i32, millisecond: f64 ): f64; + export declare function now(): f64; + +export declare function getTimezoneOffset(): i32; diff --git a/std/assembly/date.ts b/std/assembly/date.ts index b2e7eff65e..f412e2bece 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -1,8 +1,21 @@ import { UTC as Date_UTC, - now as Date_now + now as Date_now, + getTimezoneOffset as Date_getTimezoneOffset } from "./bindings/Date"; +import { + getCalendarDate, + TimeZone, + CalendarDate, + setFullYear, + setMonth, + setDate, + setHours, + setMinutes, + setSeconds, + setMilliseconds +} from "./util/date"; export class Date { @inline static UTC( @@ -22,9 +35,13 @@ export class Date { } private value: i64; + private timeZone: TimeZone; // The local time zone + private localDate: CalendarDate | null; + private utcDate: CalendarDate | null; constructor(value: i64) { this.value = value; + this.timeZone = new TimeZone("GMT", Date_getTimezoneOffset()); } getTime(): i64 { @@ -35,4 +52,207 @@ export class Date { this.value = value; return value; } + + private getLocalCalendarDate(): CalendarDate { + if (this.isNormalizeLocalDate()) { + return this.localDate!; + } else if (this.localDate != null && !this.localDate!.isNormalized) { + return getCalendarDate(this.localDate!, this.value); + } else { + let cdate = new CalendarDate(this.value, this.timeZone); + this.localDate = getCalendarDate(cdate, this.value); + return this.localDate!; + } + } + + private getUTCCalendarDate(): CalendarDate { + if (this.isNormalizeUTCDate()) { + return this.utcDate!; + } else if (this.utcDate != null) { + return getCalendarDate(this.utcDate!, this.value); + } else { + let cdate = new CalendarDate(this.value, TimeZone.UTC_TIME_ZONE); + this.utcDate = getCalendarDate(cdate, this.value); + return this.utcDate!; + } + } + + private isNormalizeLocalDate(): bool { + return this.localDate != null + && this.localDate!.millis == this.value + && this.localDate!.isNormalized; + } + + private isNormalizeUTCDate(): bool { + return this.utcDate != null + && this.utcDate!.millis == this.value + && this.utcDate!.isNormalized; + } + + getFullYear(): i32 { + return this.getLocalCalendarDate().year; + } + + /** + * The method sets the full year for a specified date according to local time. + * @param year the full year to set + * @returns Returns new timestamp. + */ + setFullYear(year: i32): i64 { + var cdate = this.getLocalCalendarDate(); + setFullYear(cdate, year); + return this.setTime(cdate.millis); + } + + getUTCFullYear(): i32 { + return this.getUTCCalendarDate().year; + } + + /** + * The setUTCFullYear() method sets the full year for a specified date according to universal time. + * @param year the full year to set. + */ + setUTCFullYear(year: i32): i64 { + var cdate = this.getUTCCalendarDate(); + setFullYear(cdate, year); + return this.setTime(cdate.millis); + } + + getMonth(): i32 { + return this.getLocalCalendarDate().month - 1; // Adjust 1-based to 0-based + } + + setMonth(month: i32): i64 { + var cdate = this.getLocalCalendarDate(); + setMonth(cdate, month + 1); + return this.setTime(cdate.millis); + } + + getUTCMonth(): i32 { + return this.getUTCCalendarDate().month - 1; // adjust 1-based to 0-based; + } + + setUTCMonth(month: i32): i64 { + var cdate = this.getUTCCalendarDate(); + setMonth(cdate, month + 1); + return this.setTime(cdate.millis); + } + + getDate(): i32 { + return this.getLocalCalendarDate().dayOfMonth; + } + + setDate(date: i32): i64 { + var cdate = this.getLocalCalendarDate(); + setDate(cdate, date); + return this.setTime(cdate.millis); + } + + getUTCDate(): i32 { + return this.getUTCCalendarDate().dayOfMonth; + } + + setUTCDate(date: i32): i64 { + var cdate = this.getUTCCalendarDate(); + setDate(cdate, date); + return this.setTime(cdate.millis); + } + + /** + * Returns the day of the week represented by this date. The + * returned value ({@code 0} = Sunday, {@code 1} = Monday, + * {@code 2} = Tuesday, {@code 3} = Wednesday, {@code 4} = + * Thursday, {@code 5} = Friday, {@code 6} = Saturday) + */ + getDay(): i32 { + return this.getLocalCalendarDate().dayOfWeek - 1 ; + } + + getUTCDay(): i32 { + return this.getUTCCalendarDate().dayOfWeek - 1 ; + } + + getHours(): i32 { + return this.getLocalCalendarDate().hours; + } + + setHours(hours: i32): i64 { + var cdate = this.getLocalCalendarDate(); + setHours(cdate, hours); + return this.setTime(cdate.millis); + } + + getUTCHours(): i32 { + return this.getUTCCalendarDate().hours; + } + + setUTCHours(hours: i32): i64 { + var cdate = this.getUTCCalendarDate(); + setHours(cdate, hours); + return this.setTime(cdate.millis); + } + + getMinutes(): i32 { + return this.getLocalCalendarDate().minutes; + } + + setMinutes(minutes: i32): i64 { + var cdate = this.getLocalCalendarDate(); + setMinutes(cdate, minutes); + return this.setTime(cdate.millis); + } + + getUTCMinutes(): i32 { + return this.getUTCCalendarDate().minutes; + } + + setUTCMinutes(minutes: i32): i64 { + var cdate = this.getUTCCalendarDate(); + setMinutes(cdate, minutes); + return this.setTime(cdate.millis); + } + + getSeconds(): i32 { + return this.getLocalCalendarDate().seconds; + } + + setSeconds(seconds: i32): i64 { + var cdate = this.getLocalCalendarDate(); + setSeconds(cdate, seconds); + return this.setTime(cdate.millis); + } + + getUTCSeconds(): i32 { + return this.getUTCCalendarDate().seconds; + } + + setUTCSeconds(seconds: i32): i64 { + var cdate = this.getUTCCalendarDate(); + setSeconds(cdate, seconds); + return this.setTime(cdate.millis); + } + + getMilliseconds(): i32 { + return this.getLocalCalendarDate().milliseconds; + } + + setMilliseconds(milliseconds: i32): i64 { + var cdate = this.getLocalCalendarDate(); + setMilliseconds(cdate, milliseconds); + return this.setTime(cdate.millis); + } + + getUTCMilliseconds(): i32 { + return this.getUTCCalendarDate().milliseconds; + } + + setUTCMilliseconds(milliseconds: i32): i64 { + var cdate = this.getUTCCalendarDate(); + setMilliseconds(cdate, milliseconds); + return this.setTime(cdate.millis); + } + + getTimezoneOffset(): i32 { + return Date_getTimezoneOffset(); + } } diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index 618fbc59c0..81de0bdbe4 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1700,15 +1700,77 @@ declare class Date { minute: i32, second: i32, millisecond: i32 - ): i64; + ): number; /** Returns the current UTC timestamp in milliseconds. */ - static now(): i64; + static now(): number; /** Constructs a new date object from an UTC timestamp in milliseconds. */ - constructor(value: i64); + constructor(value: number); + /** Returns the time zone difference, in minutes, from current locale(host system settings) to UTC. */ + getTimezoneOffset(): i32; /** Returns the UTC timestamp of this date in milliseconds. */ - getTime(): i64; + getTime(): number; /** Sets the UTC timestamp of this date in milliseconds. */ setTime(value: i64): i64; + /** Returns the year of the specified date according to local time. */ + getFullYear(): i32; + /** Sets the full year for a specified date according to local time. Returns new timestamp. */ + setFullYear(year: i32): i64; + /** Returns the month in the specified date according to local time. As a zero-based value (where zero indicates the first month of the year) */ + getMonth(): i32; + /** Sets the month for a specified date according to the currently set year. Return UTC milliseconds timestamp. */ + setMonth(month: i32): i32; + /** Return the day of the month of this date in milliseconds, 1-based. */ + getDate(): i32; + /** Sets the day of the Date object relative to the beginning of the currently set month. */ + setDate(date: i32): i64; + /** Returns the day of the week for the specified date according to local time, where 0 represents Sunday */ + getDay(): i32; + /** Returns the hours of the specified date according to local time. */ + getHours(): i32; + /** sets the hours for a specified date according to local time, and returns the UTC milliseconds timestamps. */ + setHours(hours: i32): i64; + /** Returns the minutes of the specified date according to local time. */ + getMinutes(): i32; + /** Sets the minutes for a specified date according to local time. */ + setMinutes(minutes: i32): i64; + /** Returns the seconds of the specified date according to local time. */ + getSeconds(): i32; + /** Sets the seconds for a specified date according to local time. */ + setSeconds(seconds: i32): i64; + /** Returns the milliseconds in the specified date according to local time. */ + getMilliseconds(): i32; + /** Sets the milliseconds for a specified date according to local time. */ + setMilliseconds(milliseconds: i32): i64; + /** Returns the year of the specified date according to UTC timestamp. */ + getUTCFullYear(): i32; + /** Sets the full year for a specified date according to UTC timestamp. Returns new timestamp. */ + setUTCFullYear(year: i32): i64; + /** Returns the month in the specified date according to UTC timestamp. As a zero-based value (where zero indicates the first month of the year) */ + getUTCMonth(): i32; + /** Sets the month for a specified date according to the currently set year. Return UTC milliseconds timestamp. */ + setUTCMonth(month: i32): i32; + /** Return the day of the month of this date in milliseconds, 1-based. */ + getUTCDate(): i32; + /** Sets the day of the Date object relative to the beginning of the currently set month. */ + setUTCDate(date: i32): i64; + /** Returns the day of the week for the specified date according to UTC timestamp, where 0 represents Sunday */ + getUTCDay(): i32; + /** Returns the hours of the specified date according to UTC timestamp. */ + getUTCHours(): i32; + /** sets the hours for a specified date according to UTC time, and returns the UTC milliseconds timestamps. */ + setUTCHours(hours: i32): i64; + /** Returns the minutes of the specified date according to UTC timestamp. */ + getUTCMinutes(): i32; + /** Sets the minutes for a specified date according to UTC time. */ + setUTCMinutes(minutes: i32): i64; + /** Returns the seconds of the specified date according to UTC timestamp. */ + getUTCSeconds(): i32; + /** Sets the seconds for a specified date according to UTC time. */ + setUTCSeconds(seconds: i32): i64; + /** Returns the milliseconds in the specified date according to the UTC timestamp. */ + getUTCMilliseconds(): i32; + /** Sets the milliseconds for a specified date according to UTC time. */ + setUTCMilliseconds(milliseconds: i32): i64; } /** Class for representing a runtime error. Base class of all errors. */ diff --git a/std/assembly/util/date.ts b/std/assembly/util/date.ts new file mode 100644 index 0000000000..0599338506 --- /dev/null +++ b/std/assembly/util/date.ts @@ -0,0 +1,383 @@ +export class CalendarDate { + year: i32; + month: i32; // 1 ~ 12 + dayOfMonth: i32; // 1 ~ 31 + dayOfWeek: i32; // 1 ~ 7 + hours: i32; + minutes: i32; + seconds: i32; + milliseconds: i32; + isNormalized: bool; + + millis: i64; // The date milliseconds + timeOfDay: i32; // the time of day + fixedDate: i32; // the time of days; + timeZone: TimeZone; // the local time zone + + constructor(millis: i64, timeZone: TimeZone) { + this.millis = millis; + this.isNormalized = false; + this.timeZone = timeZone; + } +} + +/** + * Represents a time zone for use with a Gregorian calendar. + * The class holds an offset from GMT, called raw offset, and start + * and end rules for a daylight saving time schedule + */ +export class TimeZone { + + ID: string; + /** + * The raw GMT offset in milliseconds between this zone and GMT. + * Negative offsets are to the west of Greenwich. + * To obtain local standard time, add the offset to GMT time. + */ + rawOffset: i32; + + constructor(ID: string, rawOffset: i32) { + this.ID = ID; + this.rawOffset = rawOffset; + } + + static UTC_TIME_ZONE: TimeZone = new TimeZone("UTC", 0); +} + +class CalendarUtils { + static SECOND_IN_MILLIS: i32 = 1000; + static MINUTE_IN_MILLIS: i32 = 60000; // 1000 * 60 + static HOUR_IN_MILLIS: i32 = 3600000; // 1000 * 60 * 60 + static DAY_IN_MILLIS: i32 = 86400000; // 1000 * 60 * 60 * 24 + static DAY_IN_HOURS: i32 = 24; + static YEAR_IN_MONTHS: i32 = 12; + + static JANUARY: i32 = 1; + static FEBRUARY: i32 = 2; + static MARCH: i32 = 3; + static APRIL: i32 = 4; + static MAY: i32 = 5; + static JUNE: i32 = 6; + static JULY: i32 = 7; + static AUGUST: i32 = 8; + static SEPTEMBER: i32 = 9; + static OCTOBER: i32 = 10; + static NOVEMBER: i32 = 11; + static DECEMBER: i32 = 12; + + static BASE_YEAR: i32 = 1970; + // day of week constants + static SUNDAY: i32 = 1; + static MONDAY: i32 = 2; + static TUESDAY: i32 = 3; + static WEDNESDAY: i32 = 4; + static THURSDAY: i32 = 5; + static FRIDAY: i32 = 6; + static SATURDAY: i32 = 7; + // ACCUMULATED_DAYS_IN_MONTH 12/1 1/1 2/1 3/1 4/1 5/1 6/1 7/1 8/1 9/1 10/1 11/1 12/1 + static ACCUMULATED_DAYS_IN_MONTH: i32[ ] = [-30, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; + static FIXED_DATES: i32[] = [ + 719163, // 1970 + 719528, // 1971 + 719893, // 1972 + 720259, // 1973 + 720624, // 1974 + 720989, // 1975 + 721354, // 1976 + 721720, // 1977 + 722085, // 1978 + 722450, // 1979 + 722815, // 1980 + 723181, // 1981 + 723546, // 1982 + 723911, // 1983 + 724276, // 1984 + 724642, // 1985 + 725007, // 1986 + 725372, // 1987 + 725737, // 1988 + 726103, // 1989 + 726468, // 1990 + 726833, // 1991 + 727198, // 1992 + 727564, // 1993 + 727929, // 1994 + 728294, // 1995 + 728659, // 1996 + 729025, // 1997 + 729390, // 1998 + 729755, // 1999 + 730120, // 2000 + 730486, // 2001 + 730851, // 2002 + 731216, // 2003 + 731581, // 2004 + 731947, // 2005 + 732312, // 2006 + 732677, // 2007 + 733042, // 2008 + 733408, // 2009 + 733773, // 2010 + 734138, // 2011 + 734503, // 2012 + 734869, // 2013 + 735234, // 2014 + 735599, // 2015 + 735964, // 2016 + 736330, // 2017 + 736695, // 2018 + 737060, // 2019 + 737425, // 2020 + 737791, // 2021 + 738156, // 2022 + 738521, // 2023 + 738886, // 2024 + 739252, // 2025 + 739617, // 2026 + 739982, // 2027 + 740347, // 2028 + 740713, // 2029 + 741078, // 2030 + 741443, // 2031 + 741808, // 2032 + 742174, // 2033 + 742539, // 2034 + 742904, // 2035 + 743269, // 2036 + 743635, // 2037 + 744000, // 2038 + 744365 // 2039 + ]; + + // The number of days between January 1, 1 and January 1, 1970 (Gregorian) + static EPOCH_OFFSET: i32 = 719163; + + static floorDivide(n: i32, d: i32): i32 { + return ((n >= 0) ? (n / d) : (((n + 1) / d) - 1)); + } + + static mod(x: i32, y: i32): i32 { + return (x - y * CalendarUtils.floorDivide(x, y)); + } + + @inline + static isLeapYear(year: i32): bool { + return (year & 3) == 0 && ((year % 25) != 0 || (year & 15) == 0); + } + + @inline + static countLeaps(year: i32): i32 { + if (year >= 0) { + return year / 4 - year / 100 + year / 400; + } else { + return CalendarUtils.floorDivide(year, 4) + - CalendarUtils.floorDivide(year, 100) + + CalendarUtils.floorDivide(year, 400); + } + } + + /** + * Returns the Geogorian year number of the given fixed date. + */ + static getYearFromFixedDate(fixedDate: i32): i32 { + var d0: i32; + var d1: i32, d2: i32, d3: i32; + var n400: i32, n100: i32, n4: i32, n1: i32; + var year: i32; + if ( fixedDate > 0) { + d0 = fixedDate - 1; + n400 = d0 / 146097; + d1 = d0 % 146097; + n100 = d1 / 36524; + d2 = d1 % 36524; + n4 = d2 / 1461; + d3 = d2 % 1461; + n1 = d3 / 365; + // d4 = (d3 % 365) + 1; + } else { + d0 = fixedDate - 1; + n400 = CalendarUtils.floorDivide(d0, 146097); + d1 = CalendarUtils.mod(d0, 146097); + n100 = CalendarUtils.floorDivide(d1, 36524); + d2 = CalendarUtils.mod(d1, 36524); + n4 = CalendarUtils.floorDivide(d2, 1461); + d3 = CalendarUtils.mod(d2, 1461); + n1 = CalendarUtils.floorDivide(d3, 365); + // d4 = CalendarUtils.mod(d3, 365) + 1; + } + year = 400 * n400 + 100 * n100 + 4 * n4 + n1; + if (!(n100 == 4 || n1 == 4)) { + ++year; + } + return year; + } + + static getDayOfWeekFromFixedDate(fixedDate: i32): i32 { + if (fixedDate >= 0) { + return (fixedDate % 7) + CalendarUtils.SUNDAY; + } + return CalendarUtils.mod(fixedDate, 7) + CalendarUtils.SUNDAY; + } + + private static hitFixedDateYear(year: i32): bool { + return year >= 1970 && year <= 2039; + } + + /** + * Returns the days of the specified date. + * @param year the year of the date + * @param month the month of the date, 1-based + * @param dayOfMonth the day of the month, 1-based + */ + static getFixedDate(year: i32, month: i32, dayOfMonth: i32): i32 { + var isJan1: bool = month == CalendarUtils.JANUARY && dayOfMonth == 1; + if (isJan1 && CalendarUtils.hitFixedDateYear(year)) { + return CalendarUtils.FIXED_DATES[year - CalendarUtils.BASE_YEAR]; + } + var prevyear = year - 1; + var days = dayOfMonth; + days += (365 * prevyear) + CalendarUtils.countLeaps(prevyear) + ((367 * month - 362) / 12); + if (month > CalendarUtils.FEBRUARY) { + days -= CalendarUtils.isLeapYear(year) ? 1 : 2; + } + return days; + } +} + +function setTimeOfDay(cdate: CalendarDate, fraction: i32): void { + var time = fraction; + var hours = time / CalendarUtils.HOUR_IN_MILLIS; + time %= CalendarUtils.HOUR_IN_MILLIS; + var minutes = time / CalendarUtils.MINUTE_IN_MILLIS; + time %= CalendarUtils.MINUTE_IN_MILLIS; + var seconds = time / CalendarUtils.SECOND_IN_MILLIS; + time %= CalendarUtils.SECOND_IN_MILLIS; + cdate.hours = hours; + cdate.minutes = minutes; + cdate.seconds = seconds; + cdate.milliseconds = time; + cdate.timeOfDay = fraction; +} + +export function getCalendarDate(cdate: CalendarDate, millis: i64): CalendarDate { + var ms: i32 = 0; // time of day + var days: i32 = 0; // fixed date + var timezone = cdate.timeZone; + // adjust to local time if 'date' has time zone. + if (timezone != null && timezone.rawOffset != 0) { + let zoneOffset = timezone.rawOffset; + days += ((millis + zoneOffset) / CalendarUtils.DAY_IN_MILLIS); + ms += ((millis + zoneOffset) % CalendarUtils.DAY_IN_MILLIS); + } else { + days = (millis / CalendarUtils.DAY_IN_MILLIS); + ms = (millis % CalendarUtils.DAY_IN_MILLIS); + } + days += CalendarUtils.EPOCH_OFFSET; + cdate.millis = millis; + setCalendarDateFromFixedDate(cdate, days); + setTimeOfDay(cdate, ms); + cdate.isNormalized = true; + return cdate; +} + +/** + * Get calendar date, the millis timestamp is UTC timestamp + * @param cdate the date to set + * @param mills the UTC timestamp + */ +function setCalendarDateFromFixedDate(date: CalendarDate, fixedDate: i32): void { + var year: i32 = CalendarUtils.getYearFromFixedDate(fixedDate); + var jan1: i32 = CalendarUtils.getFixedDate(year, CalendarUtils.JANUARY, 1); + var isLeap: bool = CalendarUtils.isLeapYear(year); + var priorDays: i32 = fixedDate - jan1; + var mar1: i32 = jan1 + 31 + 28; + if (isLeap) { + ++ mar1; + } + if (fixedDate >= mar1) { + priorDays += isLeap ? 1 : 2; + } + var month: i32 = 12 * priorDays + 373; + if (month > 0) { + month /= 367; + } else { + month = CalendarUtils.floorDivide(month, 367); + } + var accumulated = CalendarUtils.ACCUMULATED_DAYS_IN_MONTH[month]; + var month1 = jan1 + accumulated; + if (isLeap && month >= CalendarUtils.MARCH) { + ++ month1; + } + var dayOfMonth = (fixedDate - month1) + 1; + var dayOfWeek = CalendarUtils.getDayOfWeekFromFixedDate(fixedDate); + + date.year = year; + date.month = month; + date.dayOfMonth = dayOfMonth; + date.dayOfWeek = dayOfWeek; + date.fixedDate = fixedDate; +} + +export function setHours(cdate: CalendarDate, hours: i32): void { + if (cdate.hours != hours) { + let oldHours = cdate.hours; + cdate.millis += (hours - oldHours) * CalendarUtils.HOUR_IN_MILLIS; + cdate.isNormalized = false; + } +} + +export function setMinutes(cdate: CalendarDate, minutes: i32): void { + if (cdate.minutes != minutes) { + let oldMinutes = cdate.minutes; + cdate.millis += (minutes - oldMinutes) * CalendarUtils.MINUTE_IN_MILLIS; + cdate.isNormalized = false; + } +} + +export function setSeconds(cdate: CalendarDate, seconds: i32): void { + if (cdate.seconds != seconds) { + let oldSeconds = cdate.seconds; + cdate.millis += (seconds - oldSeconds) * CalendarUtils.SECOND_IN_MILLIS; + cdate.isNormalized = false; + } +} + +export function setMilliseconds(cdate: CalendarDate, milliseconds: i32): void { + if (cdate.milliseconds != milliseconds) { + let oldMilliseconds = cdate.milliseconds; + cdate.millis += (milliseconds - oldMilliseconds); + cdate.isNormalized = false; + } +} + +export function setFullYear(cdate: CalendarDate, year: i32): void { + if (cdate.year != year) { + let oldyearJan1 = CalendarUtils.getFixedDate(cdate.year, CalendarUtils.JANUARY, 1); + let newYearJan1 = CalendarUtils.getFixedDate(year, CalendarUtils.JANUARY, 1); + let newFixedDate: i32 = newYearJan1 + (cdate.fixedDate - oldyearJan1); + setCalendarDateFromFixedDate(cdate, newFixedDate); + cdate.millis += (newYearJan1 - oldyearJan1) * CalendarUtils.DAY_IN_MILLIS; + } +} + +export function setMonth(cdate: CalendarDate, month: i32): void { + if (cdate.month != month) { + let addyear = CalendarUtils.floorDivide(month, CalendarUtils.YEAR_IN_MONTHS); + let newMonth = CalendarUtils.mod(month, CalendarUtils.YEAR_IN_MONTHS); + let oldDays = cdate.dayOfMonth; + let newMonthDays = CalendarUtils.getFixedDate(cdate.year + addyear, newMonth, 1); + let newFixedDate = newMonthDays + oldDays - 1; + let oldFixedDate = cdate.fixedDate; + setCalendarDateFromFixedDate(cdate, newFixedDate); + cdate.millis += (newFixedDate - oldFixedDate) * CalendarUtils.DAY_IN_MILLIS; + } +} + +export function setDate(cdate: CalendarDate, date: i32): void { + if (cdate.dayOfMonth != date) { + let oldDayOfMonth = cdate.dayOfMonth; + let newFixedDate = cdate.fixedDate + date - oldDayOfMonth; + setCalendarDateFromFixedDate(cdate, newFixedDate); + cdate.millis += (date - oldDayOfMonth) * CalendarUtils.DAY_IN_MILLIS; + } +} diff --git a/tests/compiler.js b/tests/compiler.js index b641f3954c..bca937b43c 100644 --- a/tests/compiler.js +++ b/tests/compiler.js @@ -392,6 +392,12 @@ function testInstantiate(basename, binaryBuffer, glue, stderr, wasiOptions) { } }); + function getTimezoneOffset() { + return 0; + } + + Date.getTimezoneOffset = getTimezoneOffset; + var imports = rtrace.install({ env: { memory, diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index fb415c9904..4ac8532384 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -1,125 +1,94 @@ (module - (type $none_=>_none (func)) (type $i32_i32_=>_none (func (param i32 i32))) + (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_=>_none (func (param i32))) + (type $none_=>_none (func)) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $none_=>_i32 (func (result i32))) + (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_i32_i32_i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32))) + (type $i64_i32_i32_i32_i32_i32_i32_i32_i32_=>_none (func (param i64 i32 i32 i32 i32 i32 i32 i32 i32))) + (type $i64_=>_i32 (func (param i64) (result i32))) + (type $i32_i64_=>_i32 (func (param i32 i64) (result i32))) + (type $i64_i32_=>_i32 (func (param i64 i32) (result i32))) (type $none_=>_f64 (func (result f64))) (type $i32_i32_i32_i32_i32_i32_f64_=>_f64 (func (param i32 i32 i32 i32 i32 i32 f64) (result f64))) - (import "Date" "UTC" (func $~lib/bindings/Date/UTC (param i32 i32 i32 i32 i32 i32 f64) (result f64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "Date" "UTC" (func $~lib/bindings/Date/UTC (param i32 i32 i32 i32 i32 i32 f64) (result f64))) (import "Date" "now" (func $~lib/bindings/Date/now (result f64))) + (import "Date" "getTimezoneOffset" (func $~lib/bindings/Date/getTimezoneOffset (result i32))) (memory $0 1) - (data (i32.const 1036) ",") - (data (i32.const 1048) "\01\00\00\00\16\00\00\00s\00t\00d\00/\00d\00a\00t\00e\00.\00t\00s") - (data (i32.const 1084) "<") - (data (i32.const 1096) "\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") - (data (i32.const 1148) "<") - (data (i32.const 1160) "\01\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") - (data (i32.const 1276) "<") - (data (i32.const 1288) "\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") - (data (i32.const 1340) ",") - (data (i32.const 1352) "\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") - (data (i32.const 1420) "<") - (data (i32.const 1432) "\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") - (data (i32.const 1488) "\04\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 1516) " ") - (global $std/date/creationTime (mut i64) (i64.const 0)) + (data (i32.const 1036) "<") + (data (i32.const 1048) "\01\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s") + (data (i32.const 1132) "<") + (data (i32.const 1144) "\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data (i32.const 1196) ",") + (data (i32.const 1208) "\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 1244) "<") + (data (i32.const 1256) "\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") + (data (i32.const 1372) "<") + (data (i32.const 1384) "\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") + (data (i32.const 1436) "\1c") + (data (i32.const 1448) "\01\00\00\00\06\00\00\00U\00T\00C") + (data (i32.const 1468) "L") + (data (i32.const 1484) "4\00\00\00\e2\ff\ff\ff\00\00\00\00\1f\00\00\00;\00\00\00Z\00\00\00x\00\00\00\97\00\00\00\b5\00\00\00\d4\00\00\00\f3\00\00\00\11\01\00\000\01\00\00N\01") + (data (i32.const 1548) ",") + (data (i32.const 1560) "\04\00\00\00\10\00\00\00\d0\05\00\00\d0\05\00\004\00\00\00\0d") + (data (i32.const 1596) ",\01") + (data (i32.const 1612) "\18\01\00\00;\f9\n\00\a8\fa\n\00\15\fc\n\00\83\fd\n\00\f0\fe\n\00]\00\0b\00\ca\01\0b\008\03\0b\00\a5\04\0b\00\12\06\0b\00\7f\07\0b\00\ed\08\0b\00Z\n\0b\00\c7\0b\0b\004\0d\0b\00\a2\0e\0b\00\0f\10\0b\00|\11\0b\00\e9\12\0b\00W\14\0b\00\c4\15\0b\001\17\0b\00\9e\18\0b\00\0c\1a\0b\00y\1b\0b\00\e6\1c\0b\00S\1e\0b\00\c1\1f\0b\00.!\0b\00\9b\"\0b\00\08$\0b\00v%\0b\00\e3&\0b\00P(\0b\00\bd)\0b\00++\0b\00\98,\0b\00\05.\0b\00r/\0b\00\e00\0b\00M2\0b\00\ba3\0b\00\'5\0b\00\956\0b\00\028\0b\00o9\0b\00\dc:\0b\00J<\0b\00\b7=\0b\00$?\0b\00\91@\0b\00\ffA\0b\00lC\0b\00\d9D\0b\00FF\0b\00\b4G\0b\00!I\0b\00\8eJ\0b\00\fbK\0b\00iM\0b\00\d6N\0b\00CP\0b\00\b0Q\0b\00\1eS\0b\00\8bT\0b\00\f8U\0b\00eW\0b\00\d3X\0b\00@Z\0b\00\ad[\0b") + (data (i32.const 1900) ",") + (data (i32.const 1912) "\04\00\00\00\10\00\00\00P\06\00\00P\06\00\00\18\01\00\00F") + (data (i32.const 1948) ",") + (data (i32.const 1960) "\01\00\00\00\16\00\00\00s\00t\00d\00/\00d\00a\00t\00e\00.\00t\00s") + (data (i32.const 1996) "\1c") + (data (i32.const 2008) "\01\00\00\00\06\00\00\00G\00M\00T") + (data (i32.const 2028) "<") + (data (i32.const 2040) "\01\00\00\00\1e\00\00\00u\00n\00e\00x\00p\00e\00c\00t\00e\00d\00 \00n\00u\00l\00l") + (data (i32.const 2092) ",") + (data (i32.const 2104) "\01\00\00\00\18\00\00\00~\00l\00i\00b\00/\00d\00a\00t\00e\00.\00t\00s") + (data (i32.const 2140) ",") + (data (i32.const 2152) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 2192) "\07\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 2228) "\02\t") + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 1024)) - (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) - (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) - (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) - (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) + (global $~lib/util/date/TimeZone.UTC_TIME_ZONE (mut i32) (i32.const 0)) + (global $std/date/creationTime (mut i64) (i64.const 0)) (global $std/date/date (mut i32) (i32.const 0)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 17908)) + (global $std/date/millis (mut i64) (i64.const 0)) + (global $std/date/date1 (mut i32) (i32.const 0)) + (global $std/date/date2 (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 18636)) (export "memory" (memory $0)) (start $~start) - (func $~lib/rt/itcms/initLazy (param $0 i32) (result i32) - local.get $0 - local.get $0 - i32.store offset=4 - local.get $0 - local.get $0 - i32.store offset=8 - local.get $0 - ) - (func $~lib/rt/itcms/visitRoots - (local $0 i32) - (local $1 i32) - global.get $std/date/date - local.tee $0 - if - local.get $0 - call $~lib/rt/itcms/__visit - end - i32.const 1296 - call $~lib/rt/itcms/__visit - i32.const 1104 - call $~lib/rt/itcms/__visit - global.get $~lib/rt/itcms/pinSpace - local.tee $1 - i32.load offset=4 - i32.const -4 - i32.and - local.set $0 - loop $while-continue|0 - local.get $0 - local.get $1 - i32.ne - if - local.get $0 - i32.load offset=4 - i32.const 3 - i32.and - i32.const 3 - i32.ne - if - i32.const 0 - i32.const 1168 - i32.const 159 - i32.const 16 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 20 - i32.add - call $~lib/rt/__visit_members - local.get $0 - i32.load offset=4 - i32.const -4 - i32.and - local.set $0 - br $while-continue|0 - end - end - ) - (func $~lib/rt/itcms/Object#set:color (param $0 i32) (param $1 i32) + (func $~lib/rt/itcms/Object#set:next (param $0 i32) (param $1 i32) local.get $0 local.get $1 local.get $0 i32.load offset=4 - i32.const -4 + i32.const 3 i32.and i32.or i32.store offset=4 ) - (func $~lib/rt/itcms/Object#set:next (param $0 i32) (param $1 i32) + (func $~lib/rt/itcms/initLazy (param $0 i32) (result i32) local.get $0 - local.get $1 local.get $0 - i32.load offset=4 - i32.const 3 - i32.and - i32.or i32.store offset=4 + local.get $0 + local.get $0 + i32.store offset=8 + local.get $0 ) (func $~lib/rt/itcms/Object#linkTo (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) @@ -154,7 +123,7 @@ i32.eqz if i32.const 0 - i32.const 1168 + i32.const 1056 i32.const 147 i32.const 30 call $~lib/builtins/abort @@ -173,7 +142,7 @@ if i32.const 0 local.get $0 - i32.const 17908 + i32.const 18636 i32.lt_u local.get $0 i32.load offset=8 @@ -181,7 +150,7 @@ i32.eqz if i32.const 0 - i32.const 1168 + i32.const 1056 i32.const 127 i32.const 18 call $~lib/builtins/abort @@ -195,7 +164,7 @@ i32.eqz if i32.const 0 - i32.const 1168 + i32.const 1056 i32.const 131 i32.const 16 call $~lib/builtins/abort @@ -219,12 +188,12 @@ i32.const 1 else local.get $1 - i32.const 1488 + i32.const 2192 i32.load i32.gt_u if - i32.const 1296 - i32.const 1360 + i32.const 1152 + i32.const 1216 i32.const 22 i32.const 28 call $~lib/builtins/abort @@ -233,7 +202,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 1492 + i32.const 2196 i32.add i32.load i32.const 32 @@ -247,6 +216,155 @@ end call $~lib/rt/itcms/Object#linkTo ) + (func $~lib/rt/itcms/__link (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $1 + i32.eqz + if + return + end + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 1056 + i32.const 294 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/white + local.get $1 + i32.const 20 + i32.sub + local.tee $1 + i32.load offset=4 + i32.const 3 + i32.and + i32.eq + if + local.get $0 + i32.const 20 + i32.sub + i32.load offset=4 + i32.const 3 + i32.and + local.tee $0 + local.set $2 + local.get $0 + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + else + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + i32.const 0 + local.get $2 + i32.const 3 + i32.eq + select + if + local.get $1 + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $~lib/util/date/TimeZone#set:ID (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + local.get $0 + local.get $1 + call $~lib/rt/itcms/__link + ) + (func $~lib/rt/itcms/visitRoots + (local $0 i32) + (local $1 i32) + global.get $std/date/date + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/date/date1 + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/date/date2 + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 1152 + call $~lib/rt/itcms/__visit + i32.const 1264 + call $~lib/rt/itcms/__visit + global.get $~lib/util/date/TimeZone.UTC_TIME_ZONE + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 1568 + call $~lib/rt/itcms/__visit + i32.const 1920 + call $~lib/rt/itcms/__visit + global.get $~lib/rt/itcms/pinSpace + local.tee $1 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + loop $while-continue|0 + local.get $0 + local.get $1 + i32.ne + if + local.get $0 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 159 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 20 + i32.add + call $~lib/rt/__visit_members + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + local.set $0 + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#set:color (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + local.get $0 + i32.load offset=4 + i32.const -4 + i32.and + i32.or + i32.store offset=4 + ) (func $~lib/rt/itcms/__visit (param $0 i32) local.get $0 i32.eqz @@ -284,7 +402,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1392 i32.const 273 i32.const 14 call $~lib/builtins/abort @@ -304,7 +422,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1392 i32.const 275 i32.const 14 call $~lib/builtins/abort @@ -347,7 +465,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1392 i32.const 288 i32.const 14 call $~lib/builtins/abort @@ -439,7 +557,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1392 i32.const 201 i32.const 14 call $~lib/builtins/abort @@ -453,7 +571,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1392 i32.const 203 i32.const 14 call $~lib/builtins/abort @@ -526,7 +644,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1392 i32.const 224 i32.const 16 call $~lib/builtins/abort @@ -581,7 +699,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1392 i32.const 239 i32.const 14 call $~lib/builtins/abort @@ -596,7 +714,7 @@ i32.ne if i32.const 0 - i32.const 1440 + i32.const 1392 i32.const 240 i32.const 14 call $~lib/builtins/abort @@ -644,7 +762,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1392 i32.const 256 i32.const 14 call $~lib/builtins/abort @@ -714,7 +832,7 @@ i32.gt_u if i32.const 0 - i32.const 1440 + i32.const 1392 i32.const 381 i32.const 14 call $~lib/builtins/abort @@ -742,7 +860,7 @@ i32.lt_u if i32.const 0 - i32.const 1440 + i32.const 1392 i32.const 388 i32.const 16 call $~lib/builtins/abort @@ -770,7 +888,7 @@ i32.lt_u if i32.const 0 - i32.const 1440 + i32.const 1392 i32.const 401 i32.const 5 call $~lib/builtins/abort @@ -838,10 +956,10 @@ if unreachable end - i32.const 17920 + i32.const 18640 i32.const 0 i32.store - i32.const 19488 + i32.const 20208 i32.const 0 i32.store loop $for-loop|0 @@ -852,7 +970,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 17920 + i32.const 18640 i32.add i32.const 0 i32.store offset=4 @@ -870,7 +988,7 @@ i32.add i32.const 2 i32.shl - i32.const 17920 + i32.const 18640 i32.add i32.const 0 i32.store offset=96 @@ -888,13 +1006,13 @@ br $for-loop|0 end end - i32.const 17920 - i32.const 19492 + i32.const 18640 + i32.const 20212 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 17920 + i32.const 18640 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -973,7 +1091,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 17908 + i32.const 18636 i32.lt_u if local.get $0 @@ -1056,14 +1174,14 @@ i32.ne if i32.const 0 - i32.const 1168 + i32.const 1056 i32.const 228 i32.const 20 call $~lib/builtins/abort unreachable end local.get $0 - i32.const 17908 + i32.const 18636 i32.lt_u if local.get $0 @@ -1086,7 +1204,7 @@ i32.const 4 i32.add local.tee $1 - i32.const 17908 + i32.const 18636 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -1118,7 +1236,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1392 i32.const 565 i32.const 3 call $~lib/builtins/abort @@ -1151,30 +1269,102 @@ end global.get $~lib/rt/itcms/visitCount ) - (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32) (local $2 i32) - local.get $0 - i32.load offset=4 - i32.const -2 - i32.and - local.tee $2 - if (result i32) - local.get $0 - local.get $2 - i32.ctz - i32.const 2 + local.get $1 + i32.const 256 + i32.lt_u + if + local.get $1 + i32.const 4 + i32.shr_u + local.set $1 + else + i32.const 31 + local.get $1 + i32.const 1 + i32.const 27 + local.get $1 + i32.clz + i32.sub i32.shl i32.add - i32.load offset=96 - else - local.get $0 - i32.load - i32.const -2 - i32.and + i32.const 1 + i32.sub + local.get $1 + local.get $1 + i32.const 536870910 + i32.lt_u + select local.tee $1 - if (result i32) - local.get $0 + i32.clz + i32.sub + local.set $2 + local.get $1 + local.get $2 + i32.const 4 + i32.sub + i32.shr_u + i32.const 16 + i32.xor + local.set $1 + local.get $2 + i32.const 7 + i32.sub + local.set $2 + end + local.get $1 + i32.const 16 + i32.lt_u + i32.const 0 + local.get $2 + i32.const 23 + i32.lt_u + select + i32.eqz + if + i32.const 0 + i32.const 1392 + i32.const 334 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.get $2 + i32.const 2 + i32.shl + i32.add + i32.load offset=4 + i32.const -1 + local.get $1 + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 + local.get $1 + i32.ctz + local.get $2 + i32.const 4 + i32.shl + i32.add + i32.const 2 + i32.shl + i32.add + i32.load offset=96 + else + local.get $0 + i32.load + i32.const -1 + local.get $2 + i32.const 1 + i32.add + i32.shl + i32.and + local.tee $1 + if (result i32) + local.get $0 local.get $1 i32.ctz local.tee $1 @@ -1186,7 +1376,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1392 i32.const 347 i32.const 18 call $~lib/builtins/abort @@ -1208,18 +1398,42 @@ end end ) - (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (result i32) - (local $1 i32) + (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) + (local $4 i32) + local.get $1 + i32.const 1073741820 + i32.ge_u + if + i32.const 1264 + i32.const 1392 + i32.const 462 + i32.const 30 + call $~lib/builtins/abort + unreachable + end local.get $0 + i32.const 12 + local.get $1 + i32.const 19 + i32.add + i32.const -16 + i32.and + i32.const 4 + i32.sub + local.get $1 + i32.const 12 + i32.le_u + select + local.tee $2 call $~lib/rt/tlsf/searchBlock local.tee $1 i32.eqz if i32.const 4 memory.size - local.tee $2 + local.tee $1 i32.const 16 i32.shl i32.const 4 @@ -1228,24 +1442,40 @@ i32.load offset=1568 i32.ne i32.shl - i32.const 65563 + local.get $2 + i32.const 1 + i32.const 27 + local.get $2 + i32.clz + i32.sub + i32.shl + i32.const 1 + i32.sub + i32.add + local.get $2 + local.get $2 + i32.const 536870910 + i32.lt_u + select + i32.add + i32.const 65535 i32.add i32.const -65536 i32.and i32.const 16 i32.shr_u - local.set $1 - local.get $2 + local.set $3 local.get $1 + local.get $3 local.get $1 - local.get $2 - i32.lt_s + local.get $3 + i32.gt_s select memory.grow i32.const 0 i32.lt_s if - local.get $1 + local.get $3 memory.grow i32.const 0 i32.lt_s @@ -1254,7 +1484,7 @@ end end local.get $0 - local.get $2 + local.get $1 i32.const 16 i32.shl memory.size @@ -1262,27 +1492,28 @@ i32.shl call $~lib/rt/tlsf/addMemory local.get $0 + local.get $2 call $~lib/rt/tlsf/searchBlock local.tee $1 i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1392 i32.const 500 i32.const 16 call $~lib/builtins/abort unreachable end end + local.get $2 local.get $1 i32.load i32.const -4 i32.and - i32.const 28 - i32.lt_u + i32.gt_u if i32.const 0 - i32.const 1440 + i32.const 1392 i32.const 502 i32.const 14 call $~lib/builtins/abort @@ -1293,27 +1524,43 @@ call $~lib/rt/tlsf/removeBlock local.get $1 i32.load - local.tee $2 + local.set $3 + local.get $2 + i32.const 4 + i32.add + i32.const 15 + i32.and + if + i32.const 0 + i32.const 1392 + i32.const 361 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $3 i32.const -4 i32.and - i32.const 28 + local.get $2 i32.sub - local.tee $3 + local.tee $4 i32.const 16 i32.ge_u if local.get $1 local.get $2 + local.get $3 i32.const 2 i32.and - i32.const 28 i32.or i32.store + local.get $2 local.get $1 - i32.const 32 + i32.const 4 + i32.add i32.add local.tee $2 - local.get $3 + local.get $4 i32.const 4 i32.sub i32.const 1 @@ -1324,7 +1571,7 @@ call $~lib/rt/tlsf/insertBlock else local.get $1 - local.get $2 + local.get $3 i32.const -2 i32.and i32.store @@ -1350,23 +1597,192 @@ end local.get $1 ) - (func $~lib/rt/itcms/__new (result i32) - (local $0 i32) - global.get $~lib/rt/itcms/total - global.get $~lib/rt/itcms/threshold - i32.ge_u - if - block $__inlined_func$~lib/rt/itcms/interrupt - i32.const 2048 - local.set $0 - loop $do-continue|0 + (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) + (local $2 i32) + block $~lib/util/memory/memset|inlined.0 + local.get $1 + i32.eqz + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 0 + i32.store8 + local.get $0 + local.get $1 + i32.add + i32.const 4 + i32.sub + local.tee $2 + i32.const 0 + i32.store8 offset=3 + local.get $1 + i32.const 2 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 0 + i32.store8 offset=1 + local.get $0 + i32.const 0 + i32.store8 offset=2 + local.get $2 + i32.const 0 + i32.store8 offset=2 + local.get $2 + i32.const 0 + i32.store8 offset=1 + local.get $1 + i32.const 6 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 0 + i32.store8 offset=3 + local.get $2 + i32.const 0 + i32.store8 + local.get $1 + i32.const 8 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 0 + local.get $0 + i32.sub + i32.const 3 + i32.and + local.tee $2 + i32.add + local.tee $0 + i32.const 0 + i32.store + local.get $0 + local.get $1 + local.get $2 + i32.sub + i32.const -4 + i32.and + local.tee $2 + i32.add + i32.const 28 + i32.sub + local.tee $1 + i32.const 0 + i32.store offset=24 + local.get $2 + i32.const 8 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 0 + i32.store offset=4 + local.get $0 + i32.const 0 + i32.store offset=8 + local.get $1 + i32.const 0 + i32.store offset=16 + local.get $1 + i32.const 0 + i32.store offset=20 + local.get $2 + i32.const 24 + i32.le_u + br_if $~lib/util/memory/memset|inlined.0 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.const 0 + i32.store offset=16 + local.get $0 + i32.const 0 + i32.store offset=20 + local.get $0 + i32.const 0 + i32.store offset=24 + local.get $1 + i32.const 0 + i32.store + local.get $1 + i32.const 0 + i32.store offset=4 + local.get $1 + i32.const 0 + i32.store offset=8 + local.get $1 + i32.const 0 + i32.store offset=12 + local.get $0 + local.get $0 + i32.const 4 + i32.and + i32.const 24 + i32.add + local.tee $1 + i32.add + local.set $0 + local.get $2 + local.get $1 + i32.sub + local.set $1 + loop $while-continue|0 + local.get $1 + i32.const 32 + i32.ge_u + if local.get $0 - call $~lib/rt/itcms/step + i64.const 0 + i64.store + local.get $0 + i64.const 0 + i64.store offset=8 + local.get $0 + i64.const 0 + i64.store offset=16 + local.get $0 + i64.const 0 + i64.store offset=24 + local.get $1 + i32.const 32 i32.sub + local.set $1 + local.get $0 + i32.const 32 + i32.add local.set $0 - global.get $~lib/rt/itcms/state - i32.eqz - if + br $while-continue|0 + end + end + end + ) + (func $~lib/rt/itcms/__new (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $0 + i32.const 1073741804 + i32.ge_u + if + i32.const 1264 + i32.const 1056 + i32.const 260 + i32.const 31 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/rt/itcms/total + global.get $~lib/rt/itcms/threshold + i32.ge_u + if + block $__inlined_func$~lib/rt/itcms/interrupt + i32.const 2048 + local.set $2 + loop $do-continue|0 + local.get $2 + call $~lib/rt/itcms/step + i32.sub + local.set $2 + global.get $~lib/rt/itcms/state + i32.eqz + if global.get $~lib/rt/itcms/total i64.extend_i32_u i64.const 200 @@ -1379,7 +1795,7 @@ global.set $~lib/rt/itcms/threshold br $__inlined_func$~lib/rt/itcms/interrupt end - local.get $0 + local.get $2 i32.const 0 i32.gt_s br_if $do-continue|0 @@ -1396,25 +1812,30 @@ global.set $~lib/rt/itcms/threshold end end + local.get $0 + i32.const 16 + i32.add + local.set $2 global.get $~lib/rt/tlsf/ROOT i32.eqz if call $~lib/rt/tlsf/initialize end global.get $~lib/rt/tlsf/ROOT + local.get $2 call $~lib/rt/tlsf/allocateBlock - local.tee $0 - i32.const 3 + local.tee $2 + local.get $1 i32.store offset=12 + local.get $2 local.get $0 - i32.const 8 i32.store offset=16 - local.get $0 + local.get $2 global.get $~lib/rt/itcms/fromSpace global.get $~lib/rt/itcms/white call $~lib/rt/itcms/Object#linkTo global.get $~lib/rt/itcms/total - local.get $0 + local.get $2 i32.load i32.const -4 i32.and @@ -1422,55 +1843,322 @@ i32.add i32.add global.set $~lib/rt/itcms/total - local.get $0 + local.get $2 i32.const 20 i32.add - local.tee $0 - i32.const 0 - i32.store8 + local.tee $1 local.get $0 - i32.const 4 - i32.add - i32.const 0 - i32.store8 offset=3 + call $~lib/memory/memory.fill + local.get $1 + ) + (func $~lib/date/Date#set:timeZone (param $0 i32) (param $1 i32) local.get $0 - i32.const 0 - i32.store8 offset=1 + local.get $1 + i32.store offset=8 local.get $0 - i32.const 0 - i32.store8 offset=2 + local.get $1 + call $~lib/rt/itcms/__link + ) + (func $~lib/date/Date#set:localDate (param $0 i32) (param $1 i32) local.get $0 - i32.const 0 - i32.store8 offset=6 + local.get $1 + i32.store offset=12 local.get $0 - i32.const 0 - i32.store8 offset=5 + local.get $1 + call $~lib/rt/itcms/__link + ) + (func $~lib/date/Date#set:utcDate (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=16 + local.get $0 + local.get $1 + call $~lib/rt/itcms/__link + ) + (func $~lib/util/date/CalendarUtils.floorDivide (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.const 0 - i32.store8 offset=3 + i32.ge_s + if (result i32) + local.get $0 + local.get $1 + i32.div_s + else + local.get $0 + i32.const 1 + i32.add + local.get $1 + i32.div_s + i32.const 1 + i32.sub + end + ) + (func $~lib/util/date/CalendarUtils.mod (param $0 i32) (param $1 i32) (result i32) + local.get $0 + local.get $0 + local.get $1 + call $~lib/util/date/CalendarUtils.floorDivide + local.get $1 + i32.mul + i32.sub + ) + (func $~lib/util/date/CalendarUtils.getYearFromFixedDate (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) local.get $0 i32.const 0 - i32.store8 offset=4 + i32.gt_s + if (result i32) + local.get $0 + i32.const 1 + i32.sub + local.tee $0 + i32.const 146097 + i32.div_s + local.set $2 + local.get $0 + i32.const 146097 + i32.rem_s + local.tee $1 + i32.const 36524 + i32.div_s + local.set $0 + local.get $1 + i32.const 36524 + i32.rem_s + local.tee $1 + i32.const 1461 + i32.div_s + local.set $3 + local.get $1 + i32.const 1461 + i32.rem_s + i32.const 365 + i32.div_s + else + local.get $0 + i32.const 1 + i32.sub + local.tee $0 + i32.const 146097 + call $~lib/util/date/CalendarUtils.floorDivide + local.set $2 + local.get $0 + i32.const 146097 + call $~lib/util/date/CalendarUtils.mod + local.tee $1 + i32.const 36524 + call $~lib/util/date/CalendarUtils.floorDivide + local.set $0 + local.get $1 + i32.const 36524 + call $~lib/util/date/CalendarUtils.mod + local.tee $1 + i32.const 1461 + call $~lib/util/date/CalendarUtils.floorDivide + local.set $3 + local.get $1 + i32.const 1461 + call $~lib/util/date/CalendarUtils.mod + i32.const 365 + call $~lib/util/date/CalendarUtils.floorDivide + end + local.tee $1 + local.get $2 + i32.const 400 + i32.mul + local.get $0 + i32.const 100 + i32.mul + i32.add + local.get $3 + i32.const 2 + i32.shl + i32.add + i32.add + local.tee $2 + local.get $2 + i32.const 1 + i32.add + i32.const 1 + local.get $1 + i32.const 4 + i32.eq + local.get $0 + i32.const 4 + i32.eq + select + select + ) + (func $~lib/array/Array#__get (param $0 i32) (param $1 i32) (result i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u + if + i32.const 1152 + i32.const 2160 + i32.const 92 + i32.const 42 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + ) + (func $~lib/util/date/CalendarDate#set:timeZone (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=56 + local.get $0 + local.get $1 + call $~lib/rt/itcms/__link + ) + (func $~lib/util/date/setHours (param $0 i32) + local.get $0 + i32.load offset=16 + i32.const 24 + i32.ne + if + local.get $0 + local.get $0 + i64.load offset=40 + i32.const 24 + local.get $0 + i32.load offset=16 + i32.sub + i64.extend_i32_s + i64.const 3600000 + i64.mul + i64.add + i64.store offset=40 + local.get $0 + i32.const 0 + i32.store8 offset=32 + end + ) + (func $~lib/util/date/setMinutes (param $0 i32) + local.get $0 + i32.load offset=20 + i32.const 1495 + i32.ne + if + local.get $0 + local.get $0 + i64.load offset=40 + i32.const 1495 + local.get $0 + i32.load offset=20 + i32.sub + i64.extend_i32_s + i64.const 60000 + i64.mul + i64.add + i64.store offset=40 + local.get $0 + i32.const 0 + i32.store8 offset=32 + end + ) + (func $~lib/util/date/setSeconds (param $0 i32) + local.get $0 + i32.load offset=24 + i32.const 360 + i32.ne + if + local.get $0 + local.get $0 + i64.load offset=40 + i32.const 360 + local.get $0 + i32.load offset=24 + i32.sub + i64.extend_i32_s + i64.const 1000 + i64.mul + i64.add + i64.store offset=40 + local.get $0 + i32.const 0 + i32.store8 offset=32 + end + ) + (func $~lib/util/date/setMilliseconds (param $0 i32) local.get $0 + i32.load offset=28 + i32.const 1001 + i32.ne + if + local.get $0 + local.get $0 + i64.load offset=40 + i32.const 1001 + local.get $0 + i32.load offset=28 + i32.sub + i64.extend_i32_s + i64.add + i64.store offset=40 + local.get $0 + i32.const 0 + i32.store8 offset=32 + end ) (func $~lib/rt/__visit_members (param $0 i32) - block $invalid - block $~lib/date/Date - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/date/Date $invalid + (local $1 i32) + block $folding-inner0 + block $invalid + block $~lib/util/date/CalendarDate + block $~lib/date/Date + block $~lib/array/Array + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $folding-inner0 $folding-inner0 $~lib/array/Array $~lib/date/Date $~lib/util/date/CalendarDate $invalid + end + return + end + return end + local.get $0 + i32.load + call $~lib/rt/itcms/__visit return end + local.get $0 + i32.load offset=8 + local.tee $1 + if + local.get $1 + call $~lib/rt/itcms/__visit + end + local.get $0 + i32.load offset=12 + local.tee $1 + if + local.get $1 + call $~lib/rt/itcms/__visit + end + local.get $0 + i32.load offset=16 + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end return end local.get $0 - i32.load + i32.load offset=56 local.tee $0 if local.get $0 @@ -1478,155 +2166,2512 @@ end return end - return + unreachable + end + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit end - unreachable ) (func $~start call $start:std/date ) (func $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 1524 + i32.const 2252 i32.lt_s if - i32.const 17936 - i32.const 17984 + i32.const 18656 + i32.const 18704 i32.const 1 i32.const 1 call $~lib/builtins/abort unreachable end ) - (func $start:std/date - (local $0 i32) - (local $1 i64) + (func $~lib/date/Date#constructor (param $0 i64) (result i32) + (local $1 i32) global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 0 + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $1 i32.store - i32.const 1970 - i32.const 0 - i32.const 1 + local.get $1 + i64.const 0 + i64.store + local.get $1 i32.const 0 + call $~lib/date/Date#set:timeZone + local.get $1 i32.const 0 + call $~lib/date/Date#set:localDate + local.get $1 i32.const 0 - f64.const 0 - call $~lib/bindings/Date/UTC + call $~lib/date/Date#set:utcDate + local.get $1 + local.get $0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 2016 + i32.store offset=4 + local.get $1 + i32.const 2016 + call $~lib/bindings/Date/getTimezoneOffset + call $~lib/util/date/TimeZone#constructor + call $~lib/date/Date#set:timeZone + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/util/date/CalendarUtils.getFixedDate (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.const 2039 + i32.le_s + i32.const 0 + local.get $0 + i32.const 1970 + i32.ge_s + select + i32.const 0 + local.get $1 + i32.const 1 + i32.eq + select + if + global.get $~lib/memory/__stack_pointer + i32.const 1920 + i32.store + i32.const 1920 + local.get $0 + i32.const 1970 + i32.sub + call $~lib/array/Array#__get + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + local.get $0 + i32.const 1 + i32.sub + local.tee $2 + i32.const 0 + i32.ge_s + if (result i32) + local.get $2 + i32.const 4 + i32.div_s + local.get $2 + i32.const 100 + i32.div_s + i32.sub + local.get $2 + i32.const 400 + i32.div_s + i32.add + else + local.get $2 + i32.const 4 + call $~lib/util/date/CalendarUtils.floorDivide + local.get $2 + i32.const 100 + call $~lib/util/date/CalendarUtils.floorDivide + i32.sub + local.get $2 + i32.const 400 + call $~lib/util/date/CalendarUtils.floorDivide + i32.add + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + i32.const 365 + i32.mul + i32.add + local.get $1 + i32.const 367 + i32.mul + i32.const 362 + i32.sub + i32.const 12 + i32.div_s + i32.add + i32.const 1 + i32.add + local.tee $2 + i32.const 1 + i32.const 2 + i32.const 0 + i32.const 1 + local.get $0 + i32.const 15 + i32.and + i32.eqz + local.get $0 + i32.const 25 + i32.rem_s + select + local.get $0 + i32.const 3 + i32.and + select + select + i32.sub + local.get $2 + local.get $1 + i32.const 2 + i32.gt_s + select + ) + (func $~lib/util/date/setCalendarDateFromFixedDate (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $1 + local.get $1 + call $~lib/util/date/CalendarUtils.getYearFromFixedDate + local.tee $4 + i32.const 1 + call $~lib/util/date/CalendarUtils.getFixedDate + local.tee $3 + i32.sub + local.set $5 + local.get $1 + local.get $3 + i32.const 59 + i32.add + local.tee $2 + i32.const 1 + i32.add + local.get $2 + i32.const 0 + i32.const 1 + local.get $4 + i32.const 15 + i32.and + i32.eqz + local.get $4 + i32.const 25 + i32.rem_s + select + local.get $4 + i32.const 3 + i32.and + select + local.tee $6 + select + i32.ge_s + if (result i32) + local.get $5 + i32.const 1 + i32.const 2 + local.get $6 + select + i32.add + else + local.get $5 + end + i32.const 12 + i32.mul + i32.const 373 + i32.add + local.tee $2 + i32.const 0 + i32.gt_s + if (result i32) + local.get $2 + i32.const 367 + i32.div_s + else + local.get $2 + i32.const 367 + call $~lib/util/date/CalendarUtils.floorDivide + end + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 1568 + i32.store + i32.const 1568 + local.get $2 + call $~lib/array/Array#__get + local.get $3 + i32.add + local.set $3 + local.get $1 + i32.const 0 + i32.ge_s + if (result i32) + local.get $1 + i32.const 7 + i32.rem_s + i32.const 1 + i32.add + else + local.get $1 + i32.const 7 + call $~lib/util/date/CalendarUtils.mod + i32.const 1 + i32.add + end + local.set $5 + local.get $0 + local.get $4 + i32.store + local.get $0 + local.get $2 + i32.store offset=4 + local.get $0 + local.get $1 + local.get $3 + i32.const 1 + i32.add + local.get $3 + local.get $2 + i32.const 3 + i32.ge_s + i32.const 0 + local.get $6 + select + select + i32.sub + i32.const 1 + i32.add + i32.store offset=8 + local.get $0 + local.get $5 + i32.store offset=12 + local.get $0 + local.get $1 + i32.store offset=52 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/util/date/getCalendarDate (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=56 + local.tee $2 + i32.store + local.get $2 + if (result i32) + local.get $2 + i32.load offset=4 + else + i32.const 0 + end + if (result i32) + local.get $1 + local.get $2 + i32.load offset=4 + i64.extend_i32_s + local.tee $4 + i64.add + i64.const 86400000 + i64.div_s + i32.wrap_i64 + local.set $3 + local.get $1 + local.get $4 + i64.add + i64.const 86400000 + i64.rem_s + i32.wrap_i64 + else + local.get $1 + i64.const 86400000 + i64.div_s + i32.wrap_i64 + local.set $3 + local.get $1 + i64.const 86400000 + i64.rem_s + i32.wrap_i64 + end + local.set $2 + local.get $0 + local.get $1 + i64.store offset=40 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $3 + i32.const 719163 + i32.add + call $~lib/util/date/setCalendarDateFromFixedDate + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + local.get $2 + i32.const 3600000 + i32.div_s + i32.store offset=16 + local.get $0 + local.get $2 + i32.const 3600000 + i32.rem_s + local.tee $3 + i32.const 60000 + i32.div_s + i32.store offset=20 + local.get $0 + local.get $3 + i32.const 60000 + i32.rem_s + local.tee $3 + i32.const 1000 + i32.div_s + i32.store offset=24 + local.get $0 + local.get $3 + i32.const 1000 + i32.rem_s + i32.store offset=28 + local.get $0 + local.get $2 + i32.store offset=48 + local.get $0 + i32.const 1 + i32.store8 offset=32 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $~lib/date/Date#getUTCCalendarDate (param $0 i32) (result i32) + (local $1 i32) + (local $2 i64) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.load offset=16 + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=16 + local.tee $1 + i32.store + local.get $1 + i32.eqz + if + i32.const 2048 + i32.const 2112 + i32.const 88 + i32.const 8 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i64.load offset=40 + local.get $0 + i64.load + i64.eq + else + i32.const 0 + end + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=16 + local.tee $1 + i32.store + local.get $1 + i32.eqz + if + i32.const 2048 + i32.const 2112 + i32.const 89 + i32.const 8 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load8_u offset=32 + else + i32.const 0 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=16 + local.tee $0 + i32.store offset=4 + local.get $0 + i32.eqz + if + i32.const 2048 + i32.const 2112 + i32.const 70 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + else + local.get $0 + i32.load offset=16 + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=16 + local.tee $1 + i32.store offset=4 + local.get $1 + i32.eqz + if + i32.const 2048 + i32.const 2112 + i32.const 72 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $0 + i64.load + call $~lib/util/date/getCalendarDate + local.set $0 + else + local.get $0 + i64.load + local.set $2 + global.get $~lib/memory/__stack_pointer + global.get $~lib/util/date/TimeZone.UTC_TIME_ZONE + local.tee $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $2 + local.get $1 + call $~lib/util/date/CalendarDate#constructor + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $0 + local.get $1 + local.get $0 + i64.load + call $~lib/util/date/getCalendarDate + call $~lib/date/Date#set:utcDate + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=16 + local.tee $0 + i32.store offset=12 + local.get $0 + i32.eqz + if + i32.const 2048 + i32.const 2112 + i32.const 76 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + end + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $std/date/test_utc_date (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/date/Date#getUTCCalendarDate + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.ne + if + i32.const 0 + i32.const 1968 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/date/Date#getUTCCalendarDate + i32.load offset=4 + i32.const 1 + i32.sub + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + i32.ne + if + i32.const 0 + i32.const 1968 + i32.const 8 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/date/Date#getUTCCalendarDate + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + i32.ne + if + i32.const 0 + i32.const 1968 + i32.const 9 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/date/Date#getUTCCalendarDate + i32.load offset=12 + i32.const 1 + i32.sub + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + i32.ne + if + i32.const 0 + i32.const 1968 + i32.const 10 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/date/Date#getUTCCalendarDate + i32.load offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $5 + i32.ne + if + i32.const 0 + i32.const 1968 + i32.const 11 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/date/Date#getUTCCalendarDate + i32.load offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + i32.ne + if + i32.const 0 + i32.const 1968 + i32.const 12 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/date/Date#getUTCCalendarDate + i32.load offset=24 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + i32.ne + if + i32.const 0 + i32.const 1968 + i32.const 13 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/date/Date#getUTCCalendarDate + i32.load offset=28 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $8 + i32.ne + if + i32.const 0 + i32.const 1968 + i32.const 14 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/date/test_utc_millis (param $0 i64) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/date/Date#constructor + local.tee $9 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=4 + local.get $9 + local.get $1 + local.get $2 + local.get $3 + local.get $4 + local.get $5 + local.get $6 + local.get $7 + local.get $8 + call $std/date/test_utc_date + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/util/date/setFullYear (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $1 + local.get $0 + i32.load + i32.ne + if + local.get $0 + i32.load + i32.const 1 + call $~lib/util/date/CalendarUtils.getFixedDate + local.set $2 + local.get $1 + i32.const 1 + call $~lib/util/date/CalendarUtils.getFixedDate + local.tee $1 + local.get $0 + i32.load offset=52 + local.get $2 + i32.sub + i32.add + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $3 + call $~lib/util/date/setCalendarDateFromFixedDate + local.get $0 + local.get $0 + i64.load offset=40 + local.get $1 + local.get $2 + i32.sub + i64.extend_i32_s + i64.const 86400000 + i64.mul + i64.add + i64.store offset=40 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/date/Date#setUTCFullYear (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (local $3 i64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/date/Date#getUTCCalendarDate + local.tee $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $1 + call $~lib/util/date/setFullYear + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $2 + i64.load offset=40 + local.tee $3 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + ) + (func $~lib/util/date/setMonth (param $0 i32) (param $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $1 + local.get $0 + i32.load offset=4 + i32.ne + if + local.get $1 + i32.const 12 + call $~lib/util/date/CalendarUtils.floorDivide + local.set $2 + local.get $1 + i32.const 12 + call $~lib/util/date/CalendarUtils.mod + local.set $1 + local.get $0 + i32.load offset=8 + local.get $2 + local.get $0 + i32.load + i32.add + local.get $1 + call $~lib/util/date/CalendarUtils.getFixedDate + i32.add + i32.const 1 + i32.sub + local.set $1 + local.get $0 + i32.load offset=52 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + call $~lib/util/date/setCalendarDateFromFixedDate + local.get $0 + local.get $0 + i64.load offset=40 + local.get $1 + local.get $2 + i32.sub + i64.extend_i32_s + i64.const 86400000 + i64.mul + i64.add + i64.store offset=40 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/date/Date#setUTCMonth (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (local $3 i64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/date/Date#getUTCCalendarDate + local.tee $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $1 + i32.const 1 + i32.add + call $~lib/util/date/setMonth + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $2 + i64.load offset=40 + local.tee $3 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + ) + (func $~lib/util/date/setDate (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $1 + local.get $0 + i32.load offset=8 + i32.ne + if + local.get $1 + local.get $0 + i32.load offset=52 + i32.add + local.get $0 + i32.load offset=8 + local.tee $2 + i32.sub + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $3 + call $~lib/util/date/setCalendarDateFromFixedDate + local.get $0 + local.get $0 + i64.load offset=40 + local.get $1 + local.get $2 + i32.sub + i64.extend_i32_s + i64.const 86400000 + i64.mul + i64.add + i64.store offset=40 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/date/Date#getLocalCalendarDate (param $0 i32) (result i32) + (local $1 i32) + (local $2 i64) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.load offset=12 + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.tee $1 + i32.store + local.get $1 + i32.eqz + if + i32.const 2048 + i32.const 2112 + i32.const 82 + i32.const 8 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i64.load offset=40 + local.get $0 + i64.load + i64.eq + else + i32.const 0 + end + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.tee $1 + i32.store + local.get $1 + i32.eqz + if + i32.const 2048 + i32.const 2112 + i32.const 83 + i32.const 8 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load8_u offset=32 + else + i32.const 0 + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.tee $0 + i32.store offset=4 + local.get $0 + i32.eqz + if + i32.const 2048 + i32.const 2112 + i32.const 58 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + else + local.get $0 + i32.load offset=12 + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.tee $1 + i32.store offset=4 + local.get $1 + i32.eqz + if + i32.const 2048 + i32.const 2112 + i32.const 59 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load8_u offset=32 + i32.eqz + else + i32.const 0 + end + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.tee $1 + i32.store offset=4 + local.get $1 + i32.eqz + if + i32.const 2048 + i32.const 2112 + i32.const 60 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + local.get $0 + i64.load + call $~lib/util/date/getCalendarDate + local.set $0 + else + local.get $0 + i64.load + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + local.tee $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + local.get $2 + local.get $1 + call $~lib/util/date/CalendarDate#constructor + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $0 + local.get $1 + local.get $0 + i64.load + call $~lib/util/date/getCalendarDate + call $~lib/date/Date#set:localDate + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.tee $0 + i32.store offset=12 + local.get $0 + i32.eqz + if + i32.const 2048 + i32.const 2112 + i32.const 64 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + end + end + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + ) + (func $start:std/date + (local $0 i32) + (local $1 i32) + (local $2 i64) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 1104 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 1312 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 1344 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + global.get $~lib/memory/__stack_pointer + i32.const 1456 + i32.store + i32.const 1456 + i32.const 0 + call $~lib/util/date/TimeZone#constructor + global.set $~lib/util/date/TimeZone.UTC_TIME_ZONE + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1970 + i32.const 0 + i32.const 1 + i32.const 0 + i32.const 0 + i32.const 0 + f64.const 0 + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + i64.eqz + i32.eqz + if + i32.const 0 + i32.const 1968 + i32.const 17 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1970 + i32.const 0 + i32.const 1 + i32.const 0 + i32.const 0 + i32.const 0 + f64.const 0 + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + i64.eqz + i32.eqz + if + i32.const 0 + i32.const 1968 + i32.const 18 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 2018 + i32.const 10 + i32.const 10 + i32.const 11 + i32.const 0 + i32.const 0 + f64.const 1 + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + global.set $std/date/creationTime + global.get $std/date/creationTime + i64.const 1541847600001 + i64.ne + if + i32.const 0 + i32.const 1968 + i32.const 21 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $~lib/bindings/Date/now + i64.trunc_f64_s + global.get $std/date/creationTime + i64.le_s + if + i32.const 0 + i32.const 1968 + i32.const 23 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/date/creationTime + call $~lib/date/Date#constructor + global.set $std/date/date + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + global.get $std/date/creationTime + local.get $0 + i64.load + i64.ne + if + i32.const 0 + i32.const 1968 + i32.const 26 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + local.get $0 + global.get $std/date/creationTime + i64.const 1 + i64.add + i64.store + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + local.get $0 + i64.load + global.get $std/date/creationTime + i64.const 1 + i64.add + i64.ne + if + i32.const 0 + i32.const 1968 + i32.const 28 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 2018 + i32.const 10 + i32.const 10 + i32.const 11 + i32.const 0 + i32.const 0 + f64.const 1 + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + global.set $std/date/creationTime + global.get $std/date/creationTime + i32.const 2018 + i32.const 10 + i32.const 10 + i32.const 6 + i32.const 11 + i32.const 0 + i32.const 0 + i32.const 1 + call $std/date/test_utc_millis + i32.const 1970 + i32.const 0 + i32.const 1 + i32.const 0 + i32.const 0 + i32.const 0 + f64.const 0 + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + global.set $std/date/creationTime + global.get $std/date/creationTime + i32.const 1970 + i32.const 0 + i32.const 1 + i32.const 4 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $std/date/test_utc_millis + i32.const 70 + i32.const 0 + i32.const 1 + i32.const 11 + i32.const 11 + i32.const 22 + f64.const 22 + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + global.set $std/date/creationTime + global.get $std/date/creationTime + i32.const 1970 + i32.const 0 + i32.const 1 + i32.const 4 + i32.const 11 + i32.const 11 + i32.const 22 + i32.const 22 + call $std/date/test_utc_millis + i32.const 0 + i32.const 0 + i32.const 1 + i32.const 0 + i32.const 0 + i32.const 0 + f64.const 0 + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + global.set $std/date/creationTime + global.get $std/date/creationTime + i32.const 1900 + i32.const 0 + i32.const 1 + i32.const 1 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $std/date/test_utc_millis + i32.const 2018 + i32.const 12 + i32.const 12 + i32.const 12 + i32.const 12 + i32.const 61 + f64.const 61 + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + global.set $std/date/creationTime + global.get $std/date/creationTime + i32.const 2019 + i32.const 0 + i32.const 12 + i32.const 6 + i32.const 12 + i32.const 13 + i32.const 1 + i32.const 61 + call $std/date/test_utc_millis + i32.const 2000 + i32.const 1 + i32.const 29 + i32.const 0 + i32.const 0 + i32.const 0 + f64.const 0 + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + global.set $std/date/creationTime + global.get $std/date/creationTime + call $~lib/date/Date#constructor + global.set $std/date/date + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + local.get $0 + i32.const 2000 + call $~lib/date/Date#setUTCFullYear + global.set $std/date/millis + global.get $std/date/millis + i64.const 951782400000 + i64.ne + if + i32.const 0 + i32.const 1968 + i32.const 50 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + local.get $0 + i32.const 2000 + i32.const 1 + i32.const 29 + i32.const 2 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $std/date/test_utc_date + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + local.get $0 + i32.const 1999 + call $~lib/date/Date#setUTCFullYear + global.set $std/date/millis + global.get $std/date/millis + i64.const 920246400000 + i64.ne + if + i32.const 0 + i32.const 1968 + i32.const 53 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + local.get $0 + i32.const 1999 + i32.const 2 + i32.const 1 + i32.const 1 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $std/date/test_utc_date + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + local.get $0 + i32.const 1996 + call $~lib/date/Date#setUTCFullYear + global.set $std/date/millis + global.get $std/date/millis + i64.const 825552000000 + i64.ne + if + i32.const 0 + i32.const 1968 + i32.const 56 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + local.get $0 + i32.const 1996 + i32.const 1 + i32.const 29 + i32.const 4 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $std/date/test_utc_date + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + local.get $0 + i32.const 13 + call $~lib/date/Date#setUTCMonth + drop + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + local.get $0 + i32.const 1997 + i32.const 2 + i32.const 1 + i32.const 6 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $std/date/test_utc_date + i64.const 825552000000 + call $~lib/date/Date#constructor + global.set $std/date/date + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + local.get $0 + i32.const -11 + call $~lib/date/Date#setUTCMonth + i64.const 794016000000 + i64.ne + if + i32.const 0 + i32.const 1968 + i32.const 64 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + local.get $0 + i32.const 1995 + i32.const 2 + i32.const 1 + i32.const 3 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $std/date/test_utc_date + i32.const 1996 + i32.const 1 + i32.const 29 + i32.const 0 + i32.const 0 + i32.const 0 + f64.const 0 + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + call $~lib/date/Date#constructor + global.set $std/date/date + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/date/Date#getUTCCalendarDate + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 30 + call $~lib/util/date/setDate + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i64.load offset=40 + local.tee $2 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + i64.const 825638400000 + i64.ne + if + i32.const 0 + i32.const 1968 + i32.const 69 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + local.get $0 + i32.const 1996 + i32.const 2 + i32.const 1 + i32.const 5 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $std/date/test_utc_date + i32.const 1996 + i32.const 1 + i32.const 29 + i32.const 0 + i32.const 0 + i32.const 0 + f64.const 0 + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + call $~lib/date/Date#constructor + global.set $std/date/date + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/date/Date#getUTCCalendarDate + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/util/date/setHours + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i64.load offset=40 + local.tee $2 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + i64.const 825638400000 + i64.ne + if + i32.const 0 + i32.const 1968 + i32.const 74 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + local.get $0 + i32.const 1996 + i32.const 2 + i32.const 1 + i32.const 5 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $std/date/test_utc_date + i32.const 1996 + i32.const 1 + i32.const 29 + i32.const 0 + i32.const 0 + i32.const 0 + f64.const 0 + call $~lib/bindings/Date/UTC i64.trunc_f64_s - i64.eqz - i32.eqz + call $~lib/date/Date#constructor + global.set $std/date/date + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/date/Date#getUTCCalendarDate + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/util/date/setMinutes + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i64.load offset=40 + local.tee $2 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + i64.const 825641700000 + i64.ne + if + i32.const 0 + i32.const 1968 + i32.const 79 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + local.get $0 + i32.const 1996 + i32.const 2 + i32.const 1 + i32.const 5 + i32.const 0 + i32.const 55 + i32.const 0 + i32.const 0 + call $std/date/test_utc_date + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/date/Date#getUTCCalendarDate + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/util/date/setSeconds + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i64.load offset=40 + local.tee $2 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + i64.const 825642060000 + i64.ne + if + i32.const 0 + i32.const 1968 + i32.const 83 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + local.get $0 + i32.const 1996 + i32.const 2 + i32.const 1 + i32.const 5 + i32.const 1 + i32.const 1 + i32.const 0 + i32.const 0 + call $std/date/test_utc_date + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/date/Date#getUTCCalendarDate + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/util/date/setMilliseconds + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i64.load offset=40 + local.tee $2 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + i64.const 825642061001 + i64.ne + if + i32.const 0 + i32.const 1968 + i32.const 87 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + local.get $0 + i32.const 1996 + i32.const 2 + i32.const 1 + i32.const 5 + i32.const 1 + i32.const 1 + i32.const 1 + i32.const 1 + call $std/date/test_utc_date + i32.const 2000 + i32.const 1 + i32.const 29 + i32.const 0 + i32.const 0 + i32.const 0 + f64.const 0 + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + global.set $std/date/creationTime + global.get $std/date/creationTime + call $~lib/date/Date#constructor + global.set $std/date/date + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/date/Date#getLocalCalendarDate + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 2000 + call $~lib/util/date/setFullYear + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i64.load offset=40 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/date/Date#getLocalCalendarDate + i32.load + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 2000 + i32.ne if i32.const 0 - i32.const 1056 - i32.const 1 + i32.const 1968 + i32.const 94 i32.const 1 call $~lib/builtins/abort unreachable end - i32.const 1970 + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/date/Date#getLocalCalendarDate + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 2 + call $~lib/util/date/setMonth + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i64.load offset=40 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/date/Date#getLocalCalendarDate + i32.load offset=4 i32.const 1 + i32.sub + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1968 + i32.const 98 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/date/Date#getLocalCalendarDate + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + i32.const 8 + call $~lib/util/date/setDate + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i64.load offset=40 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 0 - i32.const 0 - f64.const 0 - call $~lib/bindings/Date/UTC - i64.trunc_f64_s - i64.eqz - i32.eqz + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/date/Date#getLocalCalendarDate + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 8 + i32.ne if i32.const 0 - i32.const 1056 - i32.const 2 + i32.const 1968 + i32.const 102 i32.const 1 call $~lib/builtins/abort unreachable end - i32.const 2018 - i32.const 10 - i32.const 10 - i32.const 11 + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/date/Date#getLocalCalendarDate + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/util/date/setHours + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i64.load offset=40 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/date/Date#getLocalCalendarDate + i32.load offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + if + i32.const 0 + i32.const 1968 + i32.const 106 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + call $~lib/date/Date#getLocalCalendarDate + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/util/date/setMinutes + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i64.load offset=40 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + global.get $std/date/date + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer i32.const 0 - f64.const 1 - call $~lib/bindings/Date/UTC - i64.trunc_f64_s - global.set $std/date/creationTime - global.get $std/date/creationTime - i64.const 1541847600001 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 5 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - call $~lib/bindings/Date/now - i64.trunc_f64_s - global.get $std/date/creationTime - i64.le_s + i32.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/date/Date#getLocalCalendarDate + i32.load offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 55 + i32.ne if i32.const 0 - i32.const 1056 - i32.const 7 + i32.const 1968 + i32.const 110 i32.const 1 call $~lib/builtins/abort unreachable end - i32.const 1216 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/pinSpace - i32.const 1248 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/toSpace - i32.const 1392 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/fromSpace - global.get $std/date/creationTime - local.set $1 global.get $~lib/memory/__stack_pointer - i32.const 4 + global.get $std/date/date + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 0 + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 i32.store global.get $~lib/memory/__stack_pointer - call $~lib/rt/itcms/__new - local.tee $0 + local.get $0 + call $~lib/date/Date#getLocalCalendarDate + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 i32.store + local.get $1 + call $~lib/util/date/setSeconds + global.get $~lib/memory/__stack_pointer local.get $0 - i64.const 0 - i64.store + i32.store local.get $0 local.get $1 + i64.load offset=40 i64.store global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 8 i32.add global.set $~lib/memory/__stack_pointer - local.get $0 - global.set $std/date/date global.get $~lib/memory/__stack_pointer global.get $std/date/date local.tee $0 i32.store - global.get $std/date/creationTime + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer local.get $0 - i64.load - i64.ne + i32.store + local.get $0 + call $~lib/date/Date#getLocalCalendarDate + i32.load offset=24 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer if i32.const 0 - i32.const 1056 - i32.const 10 + i32.const 1968 + i32.const 114 i32.const 1 call $~lib/builtins/abort unreachable @@ -1635,25 +4680,100 @@ global.get $std/date/date local.tee $0 i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer local.get $0 - global.get $std/date/creationTime - i64.const 1 - i64.add + call $~lib/date/Date#getLocalCalendarDate + local.tee $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/util/date/setMilliseconds + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + local.get $1 + i64.load offset=40 i64.store global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer global.get $std/date/date local.tee $0 i32.store + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer local.get $0 - i64.load - global.get $std/date/creationTime - i64.const 1 - i64.add - i64.ne + i32.store + local.get $0 + call $~lib/date/Date#getLocalCalendarDate + i32.load offset=28 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1 + i32.ne if i32.const 0 - i32.const 1056 - i32.const 12 + i32.const 1968 + i32.const 118 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1970 + i32.const 0 + i32.const 1 + i32.const 0 + i32.const 0 + i32.const 0 + f64.const 0 + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + call $~lib/date/Date#constructor + global.set $std/date/date1 + call $~lib/bindings/Date/now + i64.trunc_f64_s + call $~lib/date/Date#constructor + global.set $std/date/date2 + global.get $~lib/memory/__stack_pointer + global.get $std/date/date1 + i32.store + call $~lib/bindings/Date/getTimezoneOffset + local.set $0 + global.get $~lib/memory/__stack_pointer + global.get $std/date/date2 + i32.store + call $~lib/bindings/Date/getTimezoneOffset + local.get $0 + i32.ne + if + i32.const 0 + i32.const 1968 + i32.const 123 i32.const 1 call $~lib/builtins/abort unreachable @@ -1663,4 +4783,108 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/util/date/TimeZone#constructor (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 3 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store + local.get $2 + i32.const 0 + call $~lib/util/date/TimeZone#set:ID + local.get $2 + i32.const 0 + i32.store offset=4 + local.get $2 + local.get $0 + call $~lib/util/date/TimeZone#set:ID + local.get $2 + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $~lib/util/date/CalendarDate#constructor (param $0 i64) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 60 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $2 + i32.store + local.get $2 + i32.const 0 + i32.store + local.get $2 + i32.const 0 + i32.store offset=4 + local.get $2 + i32.const 0 + i32.store offset=8 + local.get $2 + i32.const 0 + i32.store offset=12 + local.get $2 + i32.const 0 + i32.store offset=16 + local.get $2 + i32.const 0 + i32.store offset=20 + local.get $2 + i32.const 0 + i32.store offset=24 + local.get $2 + i32.const 0 + i32.store offset=28 + local.get $2 + i32.const 0 + i32.store8 offset=32 + local.get $2 + i64.const 0 + i64.store offset=40 + local.get $2 + i32.const 0 + i32.store offset=48 + local.get $2 + i32.const 0 + i32.store offset=52 + local.get $2 + i32.const 0 + call $~lib/util/date/CalendarDate#set:timeZone + local.get $2 + local.get $0 + i64.store offset=40 + local.get $2 + i32.const 0 + i32.store8 offset=32 + local.get $2 + local.get $1 + call $~lib/util/date/CalendarDate#set:timeZone + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) ) diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index 87ba3a474d..72251a3d8c 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -1,3 +1,19 @@ +function test_utc_millis(millis: i64, year: i32, month: i32, dayOfMonth: i32, dayOfWeek: i32, hours: i32, minutes: i32, seconds: i32, milliseconds: i32) : void { + var date = new Date(millis); + test_utc_date(date, year, month, dayOfMonth, dayOfWeek, hours, minutes, seconds, milliseconds); +} + +function test_utc_date(date: Date, year: i32, month: i32, dayOfMonth: i32, dayOfWeek: i32, hours: i32, minutes: i32, seconds: i32, milliseconds: i32) : void { + assert(date.getUTCFullYear() == year); + assert(date.getUTCMonth() == month); + assert(date.getUTCDate() == dayOfMonth); + assert(date.getUTCDay() == dayOfWeek); + assert(date.getUTCHours() == hours); + assert(date.getUTCMinutes() == minutes); + assert(date.getUTCSeconds() == seconds); + assert(date.getUTCMilliseconds() == milliseconds); +} + assert(Date.UTC(1970, 0, 1) == 0); assert(Date.UTC(1970, 0, 1, 0, 0, 0, 0) == 0); @@ -10,3 +26,98 @@ var date = new Date(creationTime); assert(date.getTime() == creationTime); date.setTime(creationTime + 1); assert(date.getTime() == creationTime + 1); + +// Test date get methods //////////////////////////////////////////////////////////// +creationTime = Date.UTC(2018, 10, 10, 11, 0, 0, 1); // Sat, 10 Nov 2018 11:00:00 GMT +test_utc_millis(creationTime, 2018, 10, 10, 6, 11, 0, 0, 1); +creationTime = Date.UTC(1970, 0, 1, 0, 0, 0, 0); // Thu, 01 Jan 1970 00:00:00 GMT +test_utc_millis(creationTime, 1970, 0, 1, 4, 0 , 0, 0, 0); +creationTime = Date.UTC(70, 0, 1, 11, 11, 22, 22); // Thu, 01 Jan 1970 11:11:22 GMT +test_utc_millis(creationTime, 1970, 0, 1, 4, 11, 11, 22, 22); +creationTime = Date.UTC(0, 0, 1, 0, 0, 0, 0); // Mon, 01 Jan 1900 00:00:00 GMT +test_utc_millis(creationTime, 1900, 0, 1, 1, 0, 0, 0, 0); +creationTime = Date.UTC(2018, 12, 12, 12, 12, 61, 61); // Sat, 12 Jan 2019 12:13:01 GMT +test_utc_millis(creationTime, 2019, 0, 12, 6, 12, 13, 1, 61); + +// Tset date set methods, setFullYear ////////////////////////////////////////////////////////// +var millis: i64 = 0; +creationTime = Date.UTC(2000, 1, 29, 0, 0, 0, 0); // Tue, 29 Feb 2000 00:00:00 GMT, 951782400000 +date = new Date(creationTime); + + +// Tset date set methods, setUTCFullYear ////////////////////////////////////////////////////////// +millis = date.setUTCFullYear(2000); +assert(millis == 951782400000); +test_utc_date(date, 2000, 1, 29, 2, 0, 0, 0, 0); // mills, 951782400000 +millis = date.setUTCFullYear(1999); // Mon, 01 Mar 1999 00:00:00 GMT, millis 920246400000 +assert(millis == 920246400000); +test_utc_date(date, 1999, 2, 1, 1, 0, 0, 0, 0); +millis = date.setUTCFullYear(1996); // Thu, 29 Feb 1996 00:00:00 GMT, millis 825552000000 +assert(millis == 825552000000); +test_utc_date(date, 1996, 1, 29, 4, 0, 0, 0, 0); + +// Tset date set methods, setUTCMonth ////////////////////////////////////////////////////////// +date.setUTCMonth(13); // Sat, 01 Mar 1997 00:00:00 GMT, millis 857174400000 +test_utc_date(date, 1997, 2, 1, 6, 0, 0, 0, 0); + +date = new Date(825552000000); +assert(date.setUTCMonth(-11) == 794016000000); // Wed, 01 Mar 1995 00:00:00 GMT, millis 794016000000 +test_utc_date(date, 1995, 2, 1, 3, 0, 0, 0, 0); + +// Tset date set methods, setUTCDate ////////////////////////////////////////////////////////// +date =new Date(Date.UTC(1996, 1, 29, 0, 0, 0, 0)); // Thu, 29 Feb 1996 00:00:00 GMT, 825552000000 +assert(date.setUTCDate(30) == 825638400000); // Fri, 01 Mar 1996 00:00:00 GMT, 825638400000 +test_utc_date(date, 1996, 2, 1, 5, 0, 0, 0, 0); + +// Tset date set methods, setUTCHours ////////////////////////////////////////////////////////// +date =new Date(Date.UTC(1996, 1, 29, 0, 0, 0, 0)); // Thu, 29 Feb 1996 00:00:00 GMT, 825552000000 +assert(date.setUTCHours(24) == 825638400000); // Fri, 01 Mar 1996 00:00:00 GMT, 825638400000 +test_utc_date(date, 1996, 2, 1, 5, 0, 0, 0, 0); + +// Tset date set methods, setUTCMinutes ////////////////////////////////////////////////////////// +date =new Date(Date.UTC(1996, 1, 29, 0, 0, 0, 0)); // Thu, 29 Feb 1996 00:00:00 GMT, 825552000000 +assert(date.setUTCMinutes(24 * 60 + 55) == 825641700000); // Fri, 01 Mar 1996 00:55:00 GMT, 825641700000 +test_utc_date(date, 1996, 2, 1, 5, 0, 55, 0, 0); + +// Tset date set methods, setUTCSeconds ////////////////////////////////////////////////////////// +assert(date.setUTCSeconds(6 * 60) == 825642060000); // Fri, 01 Mar 1996 01:01:00 GMT, 825642060000 +test_utc_date(date, 1996, 2, 1, 5, 1, 1, 0, 0); + +// Tset date set methods, setUTCMilliseconds ////////////////////////////////////////////////////////// +assert(date.setUTCMilliseconds(1001) == 825642061001); // Fri, 01 Mar 1996 01:01:01 GMT, 825642061001 +test_utc_date(date, 1996, 2, 1, 5, 1, 1, 1, 1); + +// Tset date set methods, setFullYear ////////////////////////////////////////////////////////// +creationTime = Date.UTC(2000, 1, 29, 0, 0, 0, 0); // Tue, 29 Feb 2000 00:00:00 GMT, 951782400000 +date = new Date(creationTime); +date.setFullYear(2000); +assert(date.getFullYear() == 2000); + +// Tset date set methods, setMonth ////////////////////////////////////////////////////////// +date.setMonth(1); +assert(date.getMonth() == 1); + +// Tset date set methods, setDate ////////////////////////////////////////////////////////// +date.setDate(8); +assert(date.getDate() == 8); + +// Tset date set methods, setHours ////////////////////////////////////////////////////////// +date.setHours(24); +assert(date.getHours() == 0); + +// Tset date set methods, setMinutes ////////////////////////////////////////////////////////// +date.setMinutes(24 * 60 + 55); +assert(date.getMinutes() == 55); + +// Tset date set methods, setSeconds ////////////////////////////////////////////////////////// +date.setSeconds(6 * 60); +assert(date.getSeconds() == 0); + +// Tset date set methods, setMilliseconds ////////////////////////////////////////////////////////// +date.setMilliseconds(1001); +assert(date.getMilliseconds() == 1); + +// Test date getTimezoneOffset method +var date1 = new Date(Date.UTC(1970, 0, 1, 0, 0, 0, 0)); +var date2 = new Date(Date.now()); +assert(date1.getTimezoneOffset() == date2.getTimezoneOffset()); \ No newline at end of file diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 0a002819d3..851ee8234f 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -1,148 +1,124 @@ (module (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) - (type $i32_=>_none (func (param i32))) + (type $i32_i32_=>_i64 (func (param i32 i32) (result i64))) (type $none_=>_none (func)) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_=>_none (func (param i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i64_=>_none (func (param i32 i64))) (type $none_=>_i32 (func (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i64_=>_i32 (func (param i32 i64) (result i32))) + (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_i32_i32_i32_i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32 i32 i32 i32 i32 i32))) + (type $i64_i32_i32_i32_i32_i32_i32_i32_i32_=>_none (func (param i64 i32 i32 i32 i32 i32 i32 i32 i32))) + (type $i32_i64_i32_=>_i32 (func (param i32 i64 i32) (result i32))) (type $i32_=>_i64 (func (param i32) (result i64))) (type $i32_i64_=>_i64 (func (param i32 i64) (result i64))) (type $none_=>_f64 (func (result f64))) (type $i32_i32_i32_i32_i32_i32_f64_=>_f64 (func (param i32 i32 i32 i32 i32 i32 f64) (result f64))) - (import "Date" "UTC" (func $~lib/bindings/Date/UTC (param i32 i32 i32 i32 i32 i32 f64) (result f64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "Date" "UTC" (func $~lib/bindings/Date/UTC (param i32 i32 i32 i32 i32 i32 f64) (result f64))) (import "Date" "now" (func $~lib/bindings/Date/now (result f64))) + (import "Date" "getTimezoneOffset" (func $~lib/bindings/Date/getTimezoneOffset (result i32))) (memory $0 1) - (data (i32.const 12) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\16\00\00\00s\00t\00d\00/\00d\00a\00t\00e\00.\00t\00s\00\00\00\00\00\00\00") - (data (i32.const 60) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") - (data (i32.const 124) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 192) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 224) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 252) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") - (data (i32.const 316) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") - (data (i32.const 368) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 396) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 464) "\04\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00") + (data (i32.const 12) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 80) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 108) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") + (data (i32.const 172) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") + (data (i32.const 220) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") + (data (i32.const 288) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 320) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 348) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 412) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\00U\00T\00C\00\00\00\00\00\00\00") + (data (i32.const 444) "L\00\00\00\00\00\00\00\00\00\00\00\00\00\00\004\00\00\00\e2\ff\ff\ff\00\00\00\00\1f\00\00\00;\00\00\00Z\00\00\00x\00\00\00\97\00\00\00\b5\00\00\00\d4\00\00\00\f3\00\00\00\11\01\00\000\01\00\00N\01\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 524) ",\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\10\00\00\00\d0\01\00\00\d0\01\00\004\00\00\00\0d\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 572) ",\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\18\01\00\00;\f9\n\00\a8\fa\n\00\15\fc\n\00\83\fd\n\00\f0\fe\n\00]\00\0b\00\ca\01\0b\008\03\0b\00\a5\04\0b\00\12\06\0b\00\7f\07\0b\00\ed\08\0b\00Z\n\0b\00\c7\0b\0b\004\0d\0b\00\a2\0e\0b\00\0f\10\0b\00|\11\0b\00\e9\12\0b\00W\14\0b\00\c4\15\0b\001\17\0b\00\9e\18\0b\00\0c\1a\0b\00y\1b\0b\00\e6\1c\0b\00S\1e\0b\00\c1\1f\0b\00.!\0b\00\9b\"\0b\00\08$\0b\00v%\0b\00\e3&\0b\00P(\0b\00\bd)\0b\00++\0b\00\98,\0b\00\05.\0b\00r/\0b\00\e00\0b\00M2\0b\00\ba3\0b\00\'5\0b\00\956\0b\00\028\0b\00o9\0b\00\dc:\0b\00J<\0b\00\b7=\0b\00$?\0b\00\91@\0b\00\ffA\0b\00lC\0b\00\d9D\0b\00FF\0b\00\b4G\0b\00!I\0b\00\8eJ\0b\00\fbK\0b\00iM\0b\00\d6N\0b\00CP\0b\00\b0Q\0b\00\1eS\0b\00\8bT\0b\00\f8U\0b\00eW\0b\00\d3X\0b\00@Z\0b\00\ad[\0b\00\00\00\00\00") + (data (i32.const 876) ",\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\10\00\00\00P\02\00\00P\02\00\00\18\01\00\00F\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 924) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\16\00\00\00s\00t\00d\00/\00d\00a\00t\00e\00.\00t\00s\00\00\00\00\00\00\00") + (data (i32.const 972) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\00G\00M\00T\00\00\00\00\00\00\00") + (data (i32.const 1004) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1e\00\00\00u\00n\00e\00x\00p\00e\00c\00t\00e\00d\00 \00n\00u\00l\00l\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 1068) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\18\00\00\00~\00l\00i\00b\00/\00d\00a\00t\00e\00.\00t\00s\00\00\00\00\00") + (data (i32.const 1116) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") + (data (i32.const 1168) "\07\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\02\t\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (table $0 1 funcref) - (global $std/date/creationTime (mut i64) (i64.const 0)) + (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) + (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 1024)) - (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) (global $~lib/rt/itcms/visitCount (mut i32) (i32.const 0)) (global $~lib/rt/itcms/pinSpace (mut i32) (i32.const 0)) - (global $~lib/rt/itcms/iter (mut i32) (i32.const 0)) - (global $~lib/rt/itcms/toSpace (mut i32) (i32.const 0)) - (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) + (global $~lib/util/date/TimeZone.UTC_TIME_ZONE (mut i32) (i32.const 0)) + (global $~lib/util/date/CalendarUtils.SECOND_IN_MILLIS (mut i32) (i32.const 1000)) + (global $~lib/util/date/CalendarUtils.MINUTE_IN_MILLIS (mut i32) (i32.const 60000)) + (global $~lib/util/date/CalendarUtils.HOUR_IN_MILLIS (mut i32) (i32.const 3600000)) + (global $~lib/util/date/CalendarUtils.DAY_IN_MILLIS (mut i32) (i32.const 86400000)) + (global $~lib/util/date/CalendarUtils.DAY_IN_HOURS (mut i32) (i32.const 24)) + (global $~lib/util/date/CalendarUtils.YEAR_IN_MONTHS (mut i32) (i32.const 12)) + (global $~lib/util/date/CalendarUtils.JANUARY (mut i32) (i32.const 1)) + (global $~lib/util/date/CalendarUtils.FEBRUARY (mut i32) (i32.const 2)) + (global $~lib/util/date/CalendarUtils.MARCH (mut i32) (i32.const 3)) + (global $~lib/util/date/CalendarUtils.APRIL (mut i32) (i32.const 4)) + (global $~lib/util/date/CalendarUtils.MAY (mut i32) (i32.const 5)) + (global $~lib/util/date/CalendarUtils.JUNE (mut i32) (i32.const 6)) + (global $~lib/util/date/CalendarUtils.JULY (mut i32) (i32.const 7)) + (global $~lib/util/date/CalendarUtils.AUGUST (mut i32) (i32.const 8)) + (global $~lib/util/date/CalendarUtils.SEPTEMBER (mut i32) (i32.const 9)) + (global $~lib/util/date/CalendarUtils.OCTOBER (mut i32) (i32.const 10)) + (global $~lib/util/date/CalendarUtils.NOVEMBER (mut i32) (i32.const 11)) + (global $~lib/util/date/CalendarUtils.DECEMBER (mut i32) (i32.const 12)) + (global $~lib/util/date/CalendarUtils.BASE_YEAR (mut i32) (i32.const 1970)) + (global $~lib/util/date/CalendarUtils.SUNDAY (mut i32) (i32.const 1)) + (global $~lib/util/date/CalendarUtils.MONDAY (mut i32) (i32.const 2)) + (global $~lib/util/date/CalendarUtils.TUESDAY (mut i32) (i32.const 3)) + (global $~lib/util/date/CalendarUtils.WEDNESDAY (mut i32) (i32.const 4)) + (global $~lib/util/date/CalendarUtils.THURSDAY (mut i32) (i32.const 5)) + (global $~lib/util/date/CalendarUtils.FRIDAY (mut i32) (i32.const 6)) + (global $~lib/util/date/CalendarUtils.SATURDAY (mut i32) (i32.const 7)) + (global $~lib/util/date/CalendarUtils.ACCUMULATED_DAYS_IN_MONTH (mut i32) (i32.const 544)) + (global $~lib/util/date/CalendarUtils.FIXED_DATES (mut i32) (i32.const 896)) + (global $~lib/util/date/CalendarUtils.EPOCH_OFFSET (mut i32) (i32.const 719163)) + (global $std/date/creationTime (mut i64) (i64.const 0)) (global $std/date/date (mut i32) (i32.const 0)) - (global $~lib/rt/__rtti_base i32 (i32.const 464)) - (global $~lib/memory/__data_end i32 (i32.const 500)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 16884)) - (global $~lib/memory/__heap_base i32 (i32.const 16884)) + (global $std/date/millis (mut i64) (i64.const 0)) + (global $std/date/date1 (mut i32) (i32.const 0)) + (global $std/date/date2 (mut i32) (i32.const 0)) + (global $~lib/rt/__rtti_base i32 (i32.const 1168)) + (global $~lib/memory/__data_end i32 (i32.const 1228)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 17612)) + (global $~lib/memory/__heap_base i32 (i32.const 17612)) (export "memory" (memory $0)) (start $~start) - (func $~lib/date/Date#set:value (param $0 i32) (param $1 i64) - local.get $0 - local.get $1 - i64.store - ) - (func $~lib/rt/itcms/Object#set:nextWithColor (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - i32.store offset=4 - ) - (func $~lib/rt/itcms/Object#set:prev (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - i32.store offset=8 - ) - (func $~lib/rt/itcms/initLazy (param $0 i32) (result i32) - local.get $0 - local.get $0 - call $~lib/rt/itcms/Object#set:nextWithColor - local.get $0 - local.get $0 - call $~lib/rt/itcms/Object#set:prev - local.get $0 - ) - (func $~lib/rt/itcms/Object#get:next (param $0 i32) (result i32) + (func $~lib/rt/itcms/Object#get:color (param $0 i32) (result i32) local.get $0 i32.load offset=4 i32.const 3 - i32.const -1 - i32.xor i32.and ) - (func $~lib/rt/itcms/Object#get:color (param $0 i32) (result i32) + (func $~lib/rt/itcms/Object#get:next (param $0 i32) (result i32) local.get $0 i32.load offset=4 i32.const 3 + i32.const -1 + i32.xor i32.and ) - (func $~lib/rt/itcms/visitRoots (param $0 i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) + (func $~lib/rt/itcms/Object#set:prev (param $0 i32) (param $1 i32) local.get $0 - call $~lib/rt/__visit_globals - global.get $~lib/rt/itcms/pinSpace - local.set $1 local.get $1 - call $~lib/rt/itcms/Object#get:next - local.set $2 - loop $while-continue|0 - local.get $2 - local.get $1 - i32.ne - local.set $3 - local.get $3 - if - i32.const 1 - drop - local.get $2 - call $~lib/rt/itcms/Object#get:color - i32.const 3 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 144 - i32.const 159 - i32.const 16 - call $~lib/builtins/abort - unreachable - end - local.get $2 - i32.const 20 - i32.add - local.get $0 - call $~lib/rt/__visit_members - local.get $2 - call $~lib/rt/itcms/Object#get:next - local.set $2 - br $while-continue|0 - end - end + i32.store offset=8 ) - (func $~lib/rt/itcms/Object#set:color (param $0 i32) (param $1 i32) - local.get $0 + (func $~lib/rt/itcms/Object#set:nextWithColor (param $0 i32) (param $1 i32) local.get $0 - i32.load offset=4 - i32.const 3 - i32.const -1 - i32.xor - i32.and local.get $1 - i32.or - call $~lib/rt/itcms/Object#set:nextWithColor + i32.store offset=4 ) (func $~lib/rt/itcms/Object#set:next (param $0 i32) (param $1 i32) local.get $0 @@ -180,7 +156,7 @@ i32.eqz if i32.const 0 - i32.const 144 + i32.const 32 i32.const 127 i32.const 18 call $~lib/builtins/abort @@ -197,7 +173,7 @@ i32.eqz if i32.const 0 - i32.const 144 + i32.const 32 i32.const 131 i32.const 16 call $~lib/builtins/abort @@ -210,6 +186,15 @@ local.get $1 call $~lib/rt/itcms/Object#set:next ) + (func $~lib/rt/itcms/initLazy (param $0 i32) (result i32) + local.get $0 + local.get $0 + call $~lib/rt/itcms/Object#set:nextWithColor + local.get $0 + local.get $0 + call $~lib/rt/itcms/Object#set:prev + local.get $0 + ) (func $~lib/rt/__typeinfo (param $0 i32) (result i32) (local $1 i32) global.get $~lib/rt/__rtti_base @@ -219,8 +204,8 @@ i32.load i32.gt_u if - i32.const 272 - i32.const 336 + i32.const 128 + i32.const 192 i32.const 22 i32.const 28 call $~lib/builtins/abort @@ -286,7 +271,7 @@ i32.eqz if (result i32) i32.const 0 - i32.const 144 + i32.const 32 i32.const 147 i32.const 30 call $~lib/builtins/abort @@ -310,6 +295,145 @@ end call $~lib/rt/itcms/Object#linkTo ) + (func $~lib/rt/itcms/__link (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.eqz + if + return + end + i32.const 1 + drop + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 294 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 20 + i32.sub + local.set $3 + local.get $3 + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $0 + i32.const 20 + i32.sub + local.set $4 + local.get $4 + call $~lib/rt/itcms/Object#get:color + local.set $5 + local.get $5 + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $2 + if + local.get $4 + call $~lib/rt/itcms/Object#makeGray + else + local.get $3 + call $~lib/rt/itcms/Object#makeGray + end + else + local.get $5 + i32.const 3 + i32.eq + if (result i32) + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + else + i32.const 0 + end + if + local.get $3 + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $~lib/util/date/TimeZone#set:ID (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/util/date/TimeZone#set:rawOffset (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=4 + ) + (func $~lib/rt/itcms/visitRoots (param $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + call $~lib/rt/__visit_globals + global.get $~lib/rt/itcms/pinSpace + local.set $1 + local.get $1 + call $~lib/rt/itcms/Object#get:next + local.set $2 + loop $while-continue|0 + local.get $2 + local.get $1 + i32.ne + local.set $3 + local.get $3 + if + i32.const 1 + drop + local.get $2 + call $~lib/rt/itcms/Object#get:color + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 159 + i32.const 16 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.const 20 + i32.add + local.get $0 + call $~lib/rt/__visit_members + local.get $2 + call $~lib/rt/itcms/Object#get:next + local.set $2 + br $while-continue|0 + end + end + ) + (func $~lib/rt/itcms/Object#set:color (param $0 i32) (param $1 i32) + local.get $0 + local.get $0 + i32.load offset=4 + i32.const 3 + i32.const -1 + i32.xor + i32.and + local.get $1 + i32.or + call $~lib/rt/itcms/Object#set:nextWithColor + ) (func $~lib/rt/itcms/__visit (param $0 i32) (param $1 i32) (local $2 i32) local.get $0 @@ -412,7 +536,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 368 i32.const 273 i32.const 14 call $~lib/builtins/abort @@ -439,7 +563,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 368 i32.const 275 i32.const 14 call $~lib/builtins/abort @@ -493,7 +617,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 368 i32.const 288 i32.const 14 call $~lib/builtins/abort @@ -625,7 +749,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 368 i32.const 201 i32.const 14 call $~lib/builtins/abort @@ -642,7 +766,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 368 i32.const 203 i32.const 14 call $~lib/builtins/abort @@ -737,7 +861,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 368 i32.const 224 i32.const 16 call $~lib/builtins/abort @@ -802,7 +926,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 368 i32.const 239 i32.const 14 call $~lib/builtins/abort @@ -820,7 +944,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 368 i32.const 240 i32.const 14 call $~lib/builtins/abort @@ -879,7 +1003,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 368 i32.const 256 i32.const 14 call $~lib/builtins/abort @@ -984,7 +1108,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 368 i32.const 381 i32.const 14 call $~lib/builtins/abort @@ -1027,7 +1151,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 368 i32.const 388 i32.const 16 call $~lib/builtins/abort @@ -1060,7 +1184,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 368 i32.const 401 i32.const 5 call $~lib/builtins/abort @@ -1303,7 +1427,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 368 i32.const 565 i32.const 3 call $~lib/builtins/abort @@ -1525,7 +1649,7 @@ i32.eqz if i32.const 0 - i32.const 144 + i32.const 32 i32.const 228 i32.const 20 call $~lib/builtins/abort @@ -1633,8 +1757,8 @@ i32.const 1073741820 i32.ge_u if - i32.const 80 - i32.const 416 + i32.const 240 + i32.const 368 i32.const 462 i32.const 30 call $~lib/builtins/abort @@ -1718,7 +1842,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 368 i32.const 334 i32.const 14 call $~lib/builtins/abort @@ -1783,7 +1907,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 368 i32.const 347 i32.const 18 call $~lib/builtins/abort @@ -1934,7 +2058,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 368 i32.const 361 i32.const 14 call $~lib/builtins/abort @@ -2043,7 +2167,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 368 i32.const 500 i32.const 16 call $~lib/builtins/abort @@ -2063,7 +2187,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 368 i32.const 502 i32.const 14 call $~lib/builtins/abort @@ -2322,8 +2446,8 @@ i32.const 1073741804 i32.ge_u if - i32.const 80 - i32.const 144 + i32.const 240 + i32.const 32 i32.const 260 i32.const 31 call $~lib/builtins/abort @@ -2367,141 +2491,3706 @@ call $~lib/memory/memory.fill local.get $3 ) - (func $~lib/date/Date#getTime (param $0 i32) (result i64) + (func $start:~lib/date + call $start:~lib/util/date + ) + (func $~lib/date/Date#set:value (param $0 i32) (param $1 i64) local.get $0 - i64.load + local.get $1 + i64.store ) - (func $~lib/date/Date#setTime (param $0 i32) (param $1 i64) (result i64) + (func $~lib/date/Date#set:timeZone (param $0 i32) (param $1 i32) local.get $0 local.get $1 - call $~lib/date/Date#set:value + i32.store offset=8 + local.get $0 local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link ) - (func $~lib/rt/__visit_globals (param $0 i32) - (local $1 i32) - global.get $std/date/date - local.tee $1 - if + (func $~lib/date/Date#set:localDate (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=12 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/date/Date#set:utcDate (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=16 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/date/Date#getTime (param $0 i32) (result i64) + local.get $0 + i64.load + ) + (func $~lib/date/Date#setTime (param $0 i32) (param $1 i64) (result i64) + local.get $0 + local.get $1 + call $~lib/date/Date#set:value + local.get $1 + ) + (func $~lib/util/date/CalendarDate#set:millis (param $0 i32) (param $1 i64) + local.get $0 + local.get $1 + i64.store offset=40 + ) + (func $~lib/util/date/CalendarUtils.floorDivide (param $0 i32) (param $1 i32) (result i32) + local.get $0 + i32.const 0 + i32.ge_s + if (result i32) + local.get $0 local.get $1 + i32.div_s + else local.get $0 - call $~lib/rt/itcms/__visit + i32.const 1 + i32.add + local.get $1 + i32.div_s + i32.const 1 + i32.sub end - i32.const 272 + ) + (func $~lib/util/date/CalendarUtils.mod (param $0 i32) (param $1 i32) (result i32) local.get $0 - call $~lib/rt/itcms/__visit - i32.const 80 + local.get $1 local.get $0 - call $~lib/rt/itcms/__visit + local.get $1 + call $~lib/util/date/CalendarUtils.floorDivide + i32.mul + i32.sub ) - (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (func $~lib/util/date/CalendarUtils.getYearFromFixedDate (param $0 i32) (result i32) + (local $1 i32) (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) local.get $0 - i32.load - local.tee $2 + i32.const 0 + i32.gt_s if + local.get $0 + i32.const 1 + i32.sub + local.set $1 + local.get $1 + i32.const 146097 + i32.div_s + local.set $5 + local.get $1 + i32.const 146097 + i32.rem_s + local.set $2 + local.get $2 + i32.const 36524 + i32.div_s + local.set $6 local.get $2 + i32.const 36524 + i32.rem_s + local.set $3 + local.get $3 + i32.const 1461 + i32.div_s + local.set $7 + local.get $3 + i32.const 1461 + i32.rem_s + local.set $4 + local.get $4 + i32.const 365 + i32.div_s + local.set $8 + else + local.get $0 + i32.const 1 + i32.sub + local.set $1 local.get $1 - call $~lib/rt/itcms/__visit + i32.const 146097 + call $~lib/util/date/CalendarUtils.floorDivide + local.set $5 + local.get $1 + i32.const 146097 + call $~lib/util/date/CalendarUtils.mod + local.set $2 + local.get $2 + i32.const 36524 + call $~lib/util/date/CalendarUtils.floorDivide + local.set $6 + local.get $2 + i32.const 36524 + call $~lib/util/date/CalendarUtils.mod + local.set $3 + local.get $3 + i32.const 1461 + call $~lib/util/date/CalendarUtils.floorDivide + local.set $7 + local.get $3 + i32.const 1461 + call $~lib/util/date/CalendarUtils.mod + local.set $4 + local.get $4 + i32.const 365 + call $~lib/util/date/CalendarUtils.floorDivide + local.set $8 end - ) - (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) - block $invalid - block $~lib/date/Date - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/date/Date $invalid - end - return - end - return - end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit - return - end - return + i32.const 400 + local.get $5 + i32.mul + i32.const 100 + local.get $6 + i32.mul + i32.add + i32.const 4 + local.get $7 + i32.mul + i32.add + local.get $8 + i32.add + local.set $9 + local.get $6 + i32.const 4 + i32.eq + if (result i32) + i32.const 1 + else + local.get $8 + i32.const 4 + i32.eq end - unreachable + i32.eqz + if + local.get $9 + i32.const 1 + i32.add + local.set $9 + end + local.get $9 ) - (func $~start - call $start:std/date + (func $~lib/util/date/CalendarUtils.hitFixedDateYear (param $0 i32) (result i32) + local.get $0 + i32.const 1970 + i32.ge_s + if (result i32) + local.get $0 + i32.const 2039 + i32.le_s + else + i32.const 0 + end ) - (func $~stack_check - global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__data_end - i32.lt_s + (func $~lib/array/Array#__get (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + local.get $0 + i32.load offset=12 + i32.ge_u if - i32.const 16912 - i32.const 16960 - i32.const 1 - i32.const 1 + i32.const 128 + i32.const 1136 + i32.const 92 + i32.const 42 call $~lib/builtins/abort unreachable end + local.get $0 + i32.load offset=4 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + local.set $2 + i32.const 0 + drop + local.get $2 + ) + (func $~lib/util/date/CalendarUtils.getDayOfWeekFromFixedDate (param $0 i32) (result i32) + local.get $0 + i32.const 0 + i32.ge_s + if + local.get $0 + i32.const 7 + i32.rem_s + global.get $~lib/util/date/CalendarUtils.SUNDAY + i32.add + return + end + local.get $0 + i32.const 7 + call $~lib/util/date/CalendarUtils.mod + global.get $~lib/util/date/CalendarUtils.SUNDAY + i32.add ) - (func $start:std/date - (local $0 i32) - (local $1 i32) + (func $~lib/util/date/CalendarDate#set:year (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + ) + (func $~lib/util/date/CalendarDate#set:month (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=4 + ) + (func $~lib/util/date/CalendarDate#set:dayOfMonth (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=8 + ) + (func $~lib/util/date/CalendarDate#set:dayOfWeek (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=12 + ) + (func $~lib/util/date/CalendarDate#set:fixedDate (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=52 + ) + (func $~lib/util/date/CalendarDate#set:hours (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=16 + ) + (func $~lib/util/date/CalendarDate#set:minutes (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=20 + ) + (func $~lib/util/date/CalendarDate#set:seconds (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=24 + ) + (func $~lib/util/date/CalendarDate#set:milliseconds (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=28 + ) + (func $~lib/util/date/CalendarDate#set:timeOfDay (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=48 + ) + (func $~lib/util/date/setTimeOfDay (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i64) - (local $7 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - call $~stack_check - global.get $~lib/memory/__stack_pointer + local.get $1 + local.set $2 + local.get $2 + global.get $~lib/util/date/CalendarUtils.HOUR_IN_MILLIS + i32.div_s + local.set $3 + local.get $2 + global.get $~lib/util/date/CalendarUtils.HOUR_IN_MILLIS + i32.rem_s + local.set $2 + local.get $2 + global.get $~lib/util/date/CalendarUtils.MINUTE_IN_MILLIS + i32.div_s + local.set $4 + local.get $2 + global.get $~lib/util/date/CalendarUtils.MINUTE_IN_MILLIS + i32.rem_s + local.set $2 + local.get $2 + global.get $~lib/util/date/CalendarUtils.SECOND_IN_MILLIS + i32.div_s + local.set $5 + local.get $2 + global.get $~lib/util/date/CalendarUtils.SECOND_IN_MILLIS + i32.rem_s + local.set $2 + local.get $0 + local.get $3 + call $~lib/util/date/CalendarDate#set:hours + local.get $0 + local.get $4 + call $~lib/util/date/CalendarDate#set:minutes + local.get $0 + local.get $5 + call $~lib/util/date/CalendarDate#set:seconds + local.get $0 + local.get $2 + call $~lib/util/date/CalendarDate#set:milliseconds + local.get $0 + local.get $1 + call $~lib/util/date/CalendarDate#set:timeOfDay + ) + (func $~lib/util/date/CalendarDate#set:isNormalized (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store8 offset=32 + ) + (func $~lib/util/date/CalendarDate#set:timeZone (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=56 + local.get $0 + local.get $1 + i32.const 0 + call $~lib/rt/itcms/__link + ) + (func $~lib/util/date/setHours (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=16 + local.get $1 + i32.ne + if + local.get $0 + i32.load offset=16 + local.set $2 + local.get $0 + local.get $0 + i64.load offset=40 + local.get $1 + local.get $2 + i32.sub + i64.extend_i32_s + global.get $~lib/util/date/CalendarUtils.HOUR_IN_MILLIS + i64.extend_i32_s + i64.mul + i64.add + call $~lib/util/date/CalendarDate#set:millis + local.get $0 + i32.const 0 + call $~lib/util/date/CalendarDate#set:isNormalized + end + ) + (func $~lib/util/date/setMinutes (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=20 + local.get $1 + i32.ne + if + local.get $0 + i32.load offset=20 + local.set $2 + local.get $0 + local.get $0 + i64.load offset=40 + local.get $1 + local.get $2 + i32.sub + i64.extend_i32_s + global.get $~lib/util/date/CalendarUtils.MINUTE_IN_MILLIS + i64.extend_i32_s + i64.mul + i64.add + call $~lib/util/date/CalendarDate#set:millis + local.get $0 + i32.const 0 + call $~lib/util/date/CalendarDate#set:isNormalized + end + ) + (func $~lib/util/date/setSeconds (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=24 + local.get $1 + i32.ne + if + local.get $0 + i32.load offset=24 + local.set $2 + local.get $0 + local.get $0 + i64.load offset=40 + local.get $1 + local.get $2 + i32.sub + i64.extend_i32_s + global.get $~lib/util/date/CalendarUtils.SECOND_IN_MILLIS + i64.extend_i32_s + i64.mul + i64.add + call $~lib/util/date/CalendarDate#set:millis + local.get $0 + i32.const 0 + call $~lib/util/date/CalendarDate#set:isNormalized + end + ) + (func $~lib/util/date/setMilliseconds (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=28 + local.get $1 + i32.ne + if + local.get $0 + i32.load offset=28 + local.set $2 + local.get $0 + local.get $0 + i64.load offset=40 + local.get $1 + local.get $2 + i32.sub + i64.extend_i32_s + i64.add + call $~lib/util/date/CalendarDate#set:millis + local.get $0 + i32.const 0 + call $~lib/util/date/CalendarDate#set:isNormalized + end + ) + (func $~lib/date/Date#getTimezoneOffset (param $0 i32) (result i32) + call $~lib/bindings/Date/getTimezoneOffset + ) + (func $~lib/rt/__visit_globals (param $0 i32) + (local $1 i32) + global.get $std/date/date + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/date/date1 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $std/date/date2 + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + i32.const 128 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 240 + local.get $0 + call $~lib/rt/itcms/__visit + global.get $~lib/util/date/TimeZone.UTC_TIME_ZONE + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $~lib/util/date/CalendarUtils.ACCUMULATED_DAYS_IN_MONTH + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + global.get $~lib/util/date/CalendarUtils.FIXED_DATES + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end + ) + (func $~lib/arraybuffer/ArrayBufferView~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + end + ) + (func $~lib/util/date/TimeZone~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + end + ) + (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) + i32.const 0 + drop + local.get $0 + i32.load + local.get $1 + call $~lib/rt/itcms/__visit + ) + (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array#__visit + ) + (func $~lib/date/Date~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=8 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + end + local.get $0 + i32.load offset=12 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + end + local.get $0 + i32.load offset=16 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + end + ) + (func $~lib/util/date/CalendarDate~visit (param $0 i32) (param $1 i32) + (local $2 i32) + local.get $0 + i32.load offset=56 + local.tee $2 + if + local.get $2 + local.get $1 + call $~lib/rt/itcms/__visit + end + ) + (func $~lib/rt/__visit_members (param $0 i32) (param $1 i32) + block $invalid + block $~lib/util/date/CalendarDate + block $~lib/date/Date + block $~lib/array/Array + block $~lib/util/date/TimeZone + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/util/date/TimeZone $~lib/array/Array $~lib/date/Date $~lib/util/date/CalendarDate $invalid + end + return + end + return + end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit + return + end + local.get $0 + local.get $1 + call $~lib/util/date/TimeZone~visit + return + end + local.get $0 + local.get $1 + call $~lib/array/Array~visit + return + end + local.get $0 + local.get $1 + call $~lib/date/Date~visit + return + end + local.get $0 + local.get $1 + call $~lib/util/date/CalendarDate~visit + return + end + unreachable + ) + (func $~start + call $start:std/date + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 17632 + i32.const 17680 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $start:~lib/util/date + (local $0 i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + i32.const 80 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/toSpace + i32.const 288 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/pinSpace + i32.const 320 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + i32.const 0 + i32.const 432 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + i32.const 0 + call $~lib/util/date/TimeZone#constructor + global.set $~lib/util/date/TimeZone.UTC_TIME_ZONE + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/date/Date#constructor (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 20 + i32.const 5 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + end + local.get $0 + i64.const 0 + call $~lib/date/Date#set:value + local.get $0 + i32.const 0 + call $~lib/date/Date#set:timeZone + local.get $0 + i32.const 0 + call $~lib/date/Date#set:localDate + local.get $0 + i32.const 0 + call $~lib/date/Date#set:utcDate + local.get $0 + local.get $1 + call $~lib/date/Date#set:value + local.get $0 + i32.const 0 + i32.const 992 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/bindings/Date/getTimezoneOffset + call $~lib/util/date/TimeZone#constructor + call $~lib/date/Date#set:timeZone + local.get $0 + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $~lib/util/date/CalendarUtils.getFixedDate (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $1 + global.get $~lib/util/date/CalendarUtils.JANUARY + i32.eq + if (result i32) + local.get $2 + i32.const 1 + i32.eq + else + i32.const 0 + end + local.set $3 + local.get $3 + if (result i32) + local.get $0 + call $~lib/util/date/CalendarUtils.hitFixedDateYear + else + i32.const 0 + end + if + global.get $~lib/util/date/CalendarUtils.FIXED_DATES + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + local.get $0 + global.get $~lib/util/date/CalendarUtils.BASE_YEAR + i32.sub + call $~lib/array/Array#__get + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + return + end + local.get $0 + i32.const 1 + i32.sub + local.set $4 + local.get $2 + local.set $5 + local.get $5 + i32.const 365 + local.get $4 + i32.mul + block $~lib/util/date/CalendarUtils.countLeaps|inlined.0 (result i32) + local.get $4 + local.set $6 + local.get $6 + i32.const 0 + i32.ge_s + if + local.get $6 + i32.const 4 + i32.div_s + local.get $6 + i32.const 100 + i32.div_s + i32.sub + local.get $6 + i32.const 400 + i32.div_s + i32.add + br $~lib/util/date/CalendarUtils.countLeaps|inlined.0 + else + local.get $6 + i32.const 4 + call $~lib/util/date/CalendarUtils.floorDivide + local.get $6 + i32.const 100 + call $~lib/util/date/CalendarUtils.floorDivide + i32.sub + local.get $6 + i32.const 400 + call $~lib/util/date/CalendarUtils.floorDivide + i32.add + br $~lib/util/date/CalendarUtils.countLeaps|inlined.0 + end + unreachable + end + i32.add + i32.const 367 + local.get $1 + i32.mul + i32.const 362 + i32.sub + i32.const 12 + i32.div_s + i32.add + i32.add + local.set $5 + local.get $1 + global.get $~lib/util/date/CalendarUtils.FEBRUARY + i32.gt_s + if + local.get $5 + local.get $0 + local.set $6 + local.get $6 + i32.const 3 + i32.and + i32.const 0 + i32.eq + if (result i32) + local.get $6 + i32.const 25 + i32.rem_s + i32.const 0 + i32.ne + if (result i32) + i32.const 1 + else + local.get $6 + i32.const 15 + i32.and + i32.const 0 + i32.eq + end + else + i32.const 0 + end + if (result i32) + i32.const 1 + else + i32.const 2 + end + i32.sub + local.set $5 + end + local.get $5 + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $7 + ) + (func $~lib/util/date/setCalendarDateFromFixedDate (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $1 + call $~lib/util/date/CalendarUtils.getYearFromFixedDate + local.set $2 + local.get $2 + global.get $~lib/util/date/CalendarUtils.JANUARY + i32.const 1 + call $~lib/util/date/CalendarUtils.getFixedDate + local.set $3 + local.get $2 + local.set $4 + local.get $4 + i32.const 3 + i32.and + i32.const 0 + i32.eq + if (result i32) + local.get $4 + i32.const 25 + i32.rem_s + i32.const 0 + i32.ne + if (result i32) + i32.const 1 + else + local.get $4 + i32.const 15 + i32.and + i32.const 0 + i32.eq + end + else + i32.const 0 + end + local.set $5 + local.get $1 + local.get $3 + i32.sub + local.set $6 + local.get $3 + i32.const 31 + i32.add + i32.const 28 + i32.add + local.set $7 + local.get $5 + if + local.get $7 + i32.const 1 + i32.add + local.set $7 + end + local.get $1 + local.get $7 + i32.ge_s + if + local.get $6 + local.get $5 + if (result i32) + i32.const 1 + else + i32.const 2 + end + i32.add + local.set $6 + end + i32.const 12 + local.get $6 + i32.mul + i32.const 373 + i32.add + local.set $8 + local.get $8 + i32.const 0 + i32.gt_s + if + local.get $8 + i32.const 367 + i32.div_s + local.set $8 + else + local.get $8 + i32.const 367 + call $~lib/util/date/CalendarUtils.floorDivide + local.set $8 + end + global.get $~lib/util/date/CalendarUtils.ACCUMULATED_DAYS_IN_MONTH + local.set $13 + global.get $~lib/memory/__stack_pointer + local.get $13 + i32.store + local.get $13 + local.get $8 + call $~lib/array/Array#__get + local.set $9 + local.get $3 + local.get $9 + i32.add + local.set $10 + local.get $5 + if (result i32) + local.get $8 + global.get $~lib/util/date/CalendarUtils.MARCH + i32.ge_s + else + i32.const 0 + end + if + local.get $10 + i32.const 1 + i32.add + local.set $10 + end + local.get $1 + local.get $10 + i32.sub + i32.const 1 + i32.add + local.set $11 + local.get $1 + call $~lib/util/date/CalendarUtils.getDayOfWeekFromFixedDate + local.set $12 + local.get $0 + local.get $2 + call $~lib/util/date/CalendarDate#set:year + local.get $0 + local.get $8 + call $~lib/util/date/CalendarDate#set:month + local.get $0 + local.get $11 + call $~lib/util/date/CalendarDate#set:dayOfMonth + local.get $0 + local.get $12 + call $~lib/util/date/CalendarDate#set:dayOfWeek + local.get $0 + local.get $1 + call $~lib/util/date/CalendarDate#set:fixedDate + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/util/date/getCalendarDate (param $0 i32) (param $1 i64) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i64) + (local $6 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + i32.const 0 + local.set $2 + i32.const 0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=56 + local.tee $4 + i32.store + local.get $4 + i32.const 0 + i32.ne + if (result i32) + local.get $4 + i32.load offset=4 + i32.const 0 + i32.ne + else + i32.const 0 + end + if + local.get $4 + i32.load offset=4 + i64.extend_i32_s + local.set $5 + local.get $3 + local.get $1 + local.get $5 + i64.add + global.get $~lib/util/date/CalendarUtils.DAY_IN_MILLIS + i64.extend_i32_s + i64.div_s + i32.wrap_i64 + i32.add + local.set $3 + local.get $2 + local.get $1 + local.get $5 + i64.add + global.get $~lib/util/date/CalendarUtils.DAY_IN_MILLIS + i64.extend_i32_s + i64.rem_s + i32.wrap_i64 + i32.add + local.set $2 + else + local.get $1 + global.get $~lib/util/date/CalendarUtils.DAY_IN_MILLIS + i64.extend_i32_s + i64.div_s + i32.wrap_i64 + local.set $3 + local.get $1 + global.get $~lib/util/date/CalendarUtils.DAY_IN_MILLIS + i64.extend_i32_s + i64.rem_s + i32.wrap_i64 + local.set $2 + end + local.get $3 + global.get $~lib/util/date/CalendarUtils.EPOCH_OFFSET + i32.add + local.set $3 + local.get $0 + local.get $1 + call $~lib/util/date/CalendarDate#set:millis + local.get $0 + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $3 + call $~lib/util/date/setCalendarDateFromFixedDate + local.get $0 + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=4 + local.get $6 + local.get $2 + call $~lib/util/date/setTimeOfDay + local.get $0 + i32.const 1 + call $~lib/util/date/CalendarDate#set:isNormalized + local.get $0 + local.set $6 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + ) + (func $~lib/date/Date#getUTCCalendarDate (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/date/Date#isNormalizeUTCDate + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=16 + local.tee $1 + i32.store offset=4 + local.get $1 + if (result i32) + local.get $1 + else + i32.const 1024 + i32.const 1088 + i32.const 70 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + else + local.get $0 + i32.load offset=16 + i32.const 0 + i32.ne + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=16 + local.tee $1 + i32.store offset=4 + local.get $1 + if (result i32) + local.get $1 + else + i32.const 1024 + i32.const 1088 + i32.const 72 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $0 + i64.load + call $~lib/util/date/getCalendarDate + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + else + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $0 + i64.load + global.get $~lib/util/date/TimeZone.UTC_TIME_ZONE + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + call $~lib/util/date/CalendarDate#constructor + local.tee $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $0 + i64.load + call $~lib/util/date/getCalendarDate + call $~lib/date/Date#set:utcDate + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=16 + local.tee $2 + i32.store offset=12 + local.get $2 + if (result i32) + local.get $2 + else + i32.const 1024 + i32.const 1088 + i32.const 76 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + unreachable + end + unreachable + ) + (func $~lib/date/Date#getUTCFullYear (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/date/Date#getUTCCalendarDate + i32.load + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/date/Date#getUTCMonth (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/date/Date#getUTCCalendarDate + i32.load offset=4 + i32.const 1 + i32.sub + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/date/Date#getUTCDate (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/date/Date#getUTCCalendarDate + i32.load offset=8 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/date/Date#getUTCDay (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/date/Date#getUTCCalendarDate + i32.load offset=12 + i32.const 1 + i32.sub + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/date/Date#getUTCHours (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/date/Date#getUTCCalendarDate + i32.load offset=16 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/date/Date#getUTCMinutes (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/date/Date#getUTCCalendarDate + i32.load offset=20 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/date/Date#getUTCSeconds (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/date/Date#getUTCCalendarDate + i32.load offset=24 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/date/Date#getUTCMilliseconds (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/date/Date#getUTCCalendarDate + i32.load offset=28 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $std/date/test_utc_date (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/date/Date#getUTCFullYear + local.get $1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/date/Date#getUTCMonth + local.get $2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 8 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/date/Date#getUTCDate + local.get $3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 9 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/date/Date#getUTCDay + local.get $4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 10 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/date/Date#getUTCHours + local.get $5 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 11 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/date/Date#getUTCMinutes + local.get $6 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 12 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/date/Date#getUTCSeconds + local.get $7 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 13 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store + local.get $9 + call $~lib/date/Date#getUTCMilliseconds + local.get $8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 14 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $std/date/test_utc_millis (param $0 i64) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (param $7 i32) (param $8 i32) + (local $9 i32) + (local $10 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $0 + call $~lib/date/Date#constructor + local.tee $9 + i32.store + local.get $9 + local.set $10 + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.store offset=4 + local.get $10 + local.get $1 + local.get $2 + local.get $3 + local.get $4 + local.get $5 + local.get $6 + local.get $7 + local.get $8 + call $std/date/test_utc_date + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/util/date/setFullYear (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.load + local.get $1 + i32.ne + if + local.get $0 + i32.load + global.get $~lib/util/date/CalendarUtils.JANUARY + i32.const 1 + call $~lib/util/date/CalendarUtils.getFixedDate + local.set $2 + local.get $1 + global.get $~lib/util/date/CalendarUtils.JANUARY + i32.const 1 + call $~lib/util/date/CalendarUtils.getFixedDate + local.set $3 + local.get $3 + local.get $0 + i32.load offset=52 + local.get $2 + i32.sub + i32.add + local.set $4 + local.get $0 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store + local.get $5 + local.get $4 + call $~lib/util/date/setCalendarDateFromFixedDate + local.get $0 + local.get $0 + i64.load offset=40 + local.get $3 + local.get $2 + i32.sub + i64.extend_i32_s + global.get $~lib/util/date/CalendarUtils.DAY_IN_MILLIS + i64.extend_i32_s + i64.mul + i64.add + call $~lib/util/date/CalendarDate#set:millis + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/date/Date#setUTCFullYear (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (local $3 i32) + (local $4 i64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/date/Date#getUTCCalendarDate + local.tee $2 + i32.store offset=4 + local.get $2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $1 + call $~lib/util/date/setFullYear + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $2 + i64.load offset=40 + call $~lib/date/Date#setTime + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/util/date/setMonth (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.load offset=4 + local.get $1 + i32.ne + if + local.get $1 + global.get $~lib/util/date/CalendarUtils.YEAR_IN_MONTHS + call $~lib/util/date/CalendarUtils.floorDivide + local.set $2 + local.get $1 + global.get $~lib/util/date/CalendarUtils.YEAR_IN_MONTHS + call $~lib/util/date/CalendarUtils.mod + local.set $3 + local.get $0 + i32.load offset=8 + local.set $4 + local.get $0 + i32.load + local.get $2 + i32.add + local.get $3 + i32.const 1 + call $~lib/util/date/CalendarUtils.getFixedDate + local.set $5 + local.get $5 + local.get $4 + i32.add + i32.const 1 + i32.sub + local.set $6 + local.get $0 + i32.load offset=52 + local.set $7 + local.get $0 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store + local.get $8 + local.get $6 + call $~lib/util/date/setCalendarDateFromFixedDate + local.get $0 + local.get $0 + i64.load offset=40 + local.get $6 + local.get $7 + i32.sub + i64.extend_i32_s + global.get $~lib/util/date/CalendarUtils.DAY_IN_MILLIS + i64.extend_i32_s + i64.mul + i64.add + call $~lib/util/date/CalendarDate#set:millis + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/date/Date#setUTCMonth (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (local $3 i32) + (local $4 i64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/date/Date#getUTCCalendarDate + local.tee $2 + i32.store offset=4 + local.get $2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $1 + i32.const 1 + i32.add + call $~lib/util/date/setMonth + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $2 + i64.load offset=40 + call $~lib/date/Date#setTime + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/util/date/setDate (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.load offset=8 + local.get $1 + i32.ne + if + local.get $0 + i32.load offset=8 + local.set $2 + local.get $0 + i32.load offset=52 + local.get $1 + i32.add + local.get $2 + i32.sub + local.set $3 + local.get $0 + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + local.get $4 + local.get $3 + call $~lib/util/date/setCalendarDateFromFixedDate + local.get $0 + local.get $0 + i64.load offset=40 + local.get $1 + local.get $2 + i32.sub + i64.extend_i32_s + global.get $~lib/util/date/CalendarUtils.DAY_IN_MILLIS + i64.extend_i32_s + i64.mul + i64.add + call $~lib/util/date/CalendarDate#set:millis + end + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $~lib/date/Date#setUTCDate (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (local $3 i32) + (local $4 i64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/date/Date#getUTCCalendarDate + local.tee $2 + i32.store offset=4 + local.get $2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $1 + call $~lib/util/date/setDate + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $2 + i64.load offset=40 + call $~lib/date/Date#setTime + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/date/Date#setUTCHours (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (local $3 i32) + (local $4 i64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/date/Date#getUTCCalendarDate + local.tee $2 + i32.store offset=4 + local.get $2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $1 + call $~lib/util/date/setHours + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $2 + i64.load offset=40 + call $~lib/date/Date#setTime + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/date/Date#setUTCMinutes (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (local $3 i32) + (local $4 i64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/date/Date#getUTCCalendarDate + local.tee $2 + i32.store offset=4 + local.get $2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $1 + call $~lib/util/date/setMinutes + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $2 + i64.load offset=40 + call $~lib/date/Date#setTime + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/date/Date#setUTCSeconds (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (local $3 i32) + (local $4 i64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/date/Date#getUTCCalendarDate + local.tee $2 + i32.store offset=4 + local.get $2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $1 + call $~lib/util/date/setSeconds + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $2 + i64.load offset=40 + call $~lib/date/Date#setTime + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/date/Date#setUTCMilliseconds (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (local $3 i32) + (local $4 i64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/date/Date#getUTCCalendarDate + local.tee $2 + i32.store offset=4 + local.get $2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $1 + call $~lib/util/date/setMilliseconds + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $2 + i64.load offset=40 + call $~lib/date/Date#setTime + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/date/Date#getLocalCalendarDate (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/date/Date#isNormalizeLocalDate + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.tee $1 + i32.store offset=4 + local.get $1 + if (result i32) + local.get $1 + else + i32.const 1024 + i32.const 1088 + i32.const 58 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + else + local.get $0 + i32.load offset=12 + i32.const 0 + i32.ne + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.tee $1 + i32.store offset=4 + local.get $1 + if (result i32) + local.get $1 + else + i32.const 1024 + i32.const 1088 + i32.const 59 + i32.const 43 + call $~lib/builtins/abort + unreachable + end + i32.load8_u offset=32 + i32.eqz + else + i32.const 0 + end + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.tee $1 + i32.store offset=4 + local.get $1 + if (result i32) + local.get $1 + else + i32.const 1024 + i32.const 1088 + i32.const 60 + i32.const 30 + call $~lib/builtins/abort + unreachable + end + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $0 + i64.load + call $~lib/util/date/getCalendarDate + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + else + global.get $~lib/memory/__stack_pointer + i32.const 0 + local.get $0 + i64.load + local.get $0 + i32.load offset=8 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=8 + local.get $3 + call $~lib/util/date/CalendarDate#constructor + local.tee $1 + i32.store offset=4 + local.get $0 + local.get $1 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $0 + i64.load + call $~lib/util/date/getCalendarDate + call $~lib/date/Date#set:localDate + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.tee $2 + i32.store offset=12 + local.get $2 + if (result i32) + local.get $2 + else + i32.const 1024 + i32.const 1088 + i32.const 64 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 16 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + return + end + unreachable + end + unreachable + ) + (func $~lib/date/Date#setFullYear (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (local $3 i32) + (local $4 i64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/date/Date#getLocalCalendarDate + local.tee $2 + i32.store offset=4 + local.get $2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $1 + call $~lib/util/date/setFullYear + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $2 + i64.load offset=40 + call $~lib/date/Date#setTime + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/date/Date#getFullYear (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/date/Date#getLocalCalendarDate + i32.load + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/date/Date#setMonth (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (local $3 i32) + (local $4 i64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/date/Date#getLocalCalendarDate + local.tee $2 + i32.store offset=4 + local.get $2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $1 + i32.const 1 + i32.add + call $~lib/util/date/setMonth + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $2 + i64.load offset=40 + call $~lib/date/Date#setTime + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/date/Date#getMonth (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/date/Date#getLocalCalendarDate + i32.load offset=4 + i32.const 1 + i32.sub + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/date/Date#setDate (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (local $3 i32) + (local $4 i64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/date/Date#getLocalCalendarDate + local.tee $2 + i32.store offset=4 + local.get $2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $1 + call $~lib/util/date/setDate + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $2 + i64.load offset=40 + call $~lib/date/Date#setTime + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/date/Date#getDate (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/date/Date#getLocalCalendarDate + i32.load offset=8 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/date/Date#setHours (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (local $3 i32) + (local $4 i64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/date/Date#getLocalCalendarDate + local.tee $2 + i32.store offset=4 + local.get $2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $1 + call $~lib/util/date/setHours + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $2 + i64.load offset=40 + call $~lib/date/Date#setTime + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/date/Date#getHours (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/date/Date#getLocalCalendarDate + i32.load offset=16 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/date/Date#setMinutes (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (local $3 i32) + (local $4 i64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/date/Date#getLocalCalendarDate + local.tee $2 + i32.store offset=4 + local.get $2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $1 + call $~lib/util/date/setMinutes + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $2 + i64.load offset=40 + call $~lib/date/Date#setTime + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/date/Date#getMinutes (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/date/Date#getLocalCalendarDate + i32.load offset=20 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/date/Date#setSeconds (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (local $3 i32) + (local $4 i64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/date/Date#getLocalCalendarDate + local.tee $2 + i32.store offset=4 + local.get $2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $1 + call $~lib/util/date/setSeconds + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $2 + i64.load offset=40 + call $~lib/date/Date#setTime + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/date/Date#getSeconds (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/date/Date#getLocalCalendarDate + i32.load offset=24 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $~lib/date/Date#setMilliseconds (param $0 i32) (param $1 i32) (result i64) + (local $2 i32) + (local $3 i32) + (local $4 i64) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + call $~lib/date/Date#getLocalCalendarDate + local.tee $2 + i32.store offset=4 + local.get $2 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $1 + call $~lib/util/date/setMilliseconds + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store + local.get $3 + local.get $2 + i64.load offset=40 + call $~lib/date/Date#setTime + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) + (func $~lib/date/Date#getMilliseconds (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $1 + call $~lib/date/Date#getLocalCalendarDate + i32.load offset=28 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) + (func $start:std/date + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i64) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + call $start:~lib/date + i32.const 1970 + local.set $2 + i32.const 0 + local.set $1 + i32.const 1 + local.set $0 + i32.const 0 + local.set $3 + i32.const 0 + local.set $4 + i32.const 0 + local.set $5 + i64.const 0 + local.set $6 + local.get $2 + local.get $1 + local.get $0 + local.get $3 + local.get $4 + local.get $5 + local.get $6 + f64.convert_i64_s + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + i64.const 0 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 17 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 1970 + local.set $5 + i32.const 0 + local.set $4 + i32.const 1 + local.set $3 + i32.const 0 + local.set $2 + i32.const 0 + local.set $1 + i32.const 0 + local.set $0 + i64.const 0 + local.set $6 + local.get $5 + local.get $4 + local.get $3 + local.get $2 + local.get $1 + local.get $0 + local.get $6 + f64.convert_i64_s + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + i64.const 0 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 18 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 2018 + local.set $5 + i32.const 10 + local.set $4 + i32.const 10 + local.set $3 + i32.const 11 + local.set $2 + i32.const 0 + local.set $1 + i32.const 0 + local.set $0 + i64.const 1 + local.set $6 + local.get $5 + local.get $4 + local.get $3 + local.get $2 + local.get $1 + local.get $0 + local.get $6 + f64.convert_i64_s + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + global.set $std/date/creationTime + global.get $std/date/creationTime + i64.const 1541847600001 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 21 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + call $~lib/bindings/Date/now + i64.trunc_f64_s + global.get $std/date/creationTime + i64.gt_s + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 23 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + global.get $std/date/creationTime + call $~lib/date/Date#constructor + global.set $std/date/date + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/date/Date#getTime + global.get $std/date/creationTime + i64.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 26 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + global.get $std/date/creationTime + i64.const 1 + i64.add + call $~lib/date/Date#setTime + drop + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/date/Date#getTime + global.get $std/date/creationTime + i64.const 1 + i64.add + i64.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 28 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + i32.const 2018 + local.set $5 + i32.const 10 + local.set $4 + i32.const 10 + local.set $3 + i32.const 11 + local.set $2 + i32.const 0 + local.set $1 + i32.const 0 + local.set $0 + i64.const 1 + local.set $6 + local.get $5 + local.get $4 + local.get $3 + local.get $2 + local.get $1 + local.get $0 + local.get $6 + f64.convert_i64_s + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + global.set $std/date/creationTime + global.get $std/date/creationTime + i32.const 2018 + i32.const 10 + i32.const 10 + i32.const 6 + i32.const 11 + i32.const 0 + i32.const 0 + i32.const 1 + call $std/date/test_utc_millis + i32.const 1970 + local.set $5 + i32.const 0 + local.set $4 + i32.const 1 + local.set $3 + i32.const 0 + local.set $2 + i32.const 0 + local.set $1 + i32.const 0 + local.set $0 + i64.const 0 + local.set $6 + local.get $5 + local.get $4 + local.get $3 + local.get $2 + local.get $1 + local.get $0 + local.get $6 + f64.convert_i64_s + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + global.set $std/date/creationTime + global.get $std/date/creationTime + i32.const 1970 + i32.const 0 + i32.const 1 + i32.const 4 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $std/date/test_utc_millis + i32.const 70 + local.set $5 + i32.const 0 + local.set $4 + i32.const 1 + local.set $3 + i32.const 11 + local.set $2 + i32.const 11 + local.set $1 + i32.const 22 + local.set $0 + i64.const 22 + local.set $6 + local.get $5 + local.get $4 + local.get $3 + local.get $2 + local.get $1 + local.get $0 + local.get $6 + f64.convert_i64_s + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + global.set $std/date/creationTime + global.get $std/date/creationTime + i32.const 1970 + i32.const 0 + i32.const 1 + i32.const 4 + i32.const 11 + i32.const 11 + i32.const 22 + i32.const 22 + call $std/date/test_utc_millis + i32.const 0 + local.set $5 + i32.const 0 + local.set $4 + i32.const 1 + local.set $3 + i32.const 0 + local.set $2 + i32.const 0 + local.set $1 + i32.const 0 + local.set $0 + i64.const 0 + local.set $6 + local.get $5 + local.get $4 + local.get $3 + local.get $2 + local.get $1 + local.get $0 + local.get $6 + f64.convert_i64_s + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + global.set $std/date/creationTime + global.get $std/date/creationTime + i32.const 1900 + i32.const 0 + i32.const 1 + i32.const 1 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $std/date/test_utc_millis + i32.const 2018 + local.set $5 + i32.const 12 + local.set $4 + i32.const 12 + local.set $3 + i32.const 12 + local.set $2 + i32.const 12 + local.set $1 + i32.const 61 + local.set $0 + i64.const 61 + local.set $6 + local.get $5 + local.get $4 + local.get $3 + local.get $2 + local.get $1 + local.get $0 + local.get $6 + f64.convert_i64_s + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + global.set $std/date/creationTime + global.get $std/date/creationTime + i32.const 2019 + i32.const 0 + i32.const 12 + i32.const 6 + i32.const 12 + i32.const 13 + i32.const 1 + i32.const 61 + call $std/date/test_utc_millis + i32.const 2000 + local.set $5 + i32.const 1 + local.set $4 + i32.const 29 + local.set $3 + i32.const 0 + local.set $2 + i32.const 0 + local.set $1 + i32.const 0 + local.set $0 + i64.const 0 + local.set $6 + local.get $5 + local.get $4 + local.get $3 + local.get $2 + local.get $1 + local.get $0 + local.get $6 + f64.convert_i64_s + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + global.set $std/date/creationTime + i32.const 0 + global.get $std/date/creationTime + call $~lib/date/Date#constructor + global.set $std/date/date + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 2000 + call $~lib/date/Date#setUTCFullYear + global.set $std/date/millis + global.get $std/date/millis + i64.const 951782400000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 50 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 2000 + i32.const 1 + i32.const 29 + i32.const 2 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $std/date/test_utc_date + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 1999 + call $~lib/date/Date#setUTCFullYear + global.set $std/date/millis + global.get $std/date/millis + i64.const 920246400000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 53 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 1999 + i32.const 2 + i32.const 1 + i32.const 1 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $std/date/test_utc_date + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 1996 + call $~lib/date/Date#setUTCFullYear + global.set $std/date/millis + global.get $std/date/millis + i64.const 825552000000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 56 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 1996 + i32.const 1 + i32.const 29 + i32.const 4 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $std/date/test_utc_date + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 13 + call $~lib/date/Date#setUTCMonth + drop + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 1997 + i32.const 2 + i32.const 1 + i32.const 6 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $std/date/test_utc_date + i32.const 0 + i64.const 825552000000 + call $~lib/date/Date#constructor + global.set $std/date/date + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const -11 + call $~lib/date/Date#setUTCMonth + i64.const 794016000000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 64 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 1995 + i32.const 2 + i32.const 1 + i32.const 3 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $std/date/test_utc_date + i32.const 0 + i32.const 1996 + local.set $5 + i32.const 1 + local.set $4 + i32.const 29 + local.set $3 + i32.const 0 + local.set $2 + i32.const 0 + local.set $1 + i32.const 0 + local.set $0 + i64.const 0 + local.set $6 + local.get $5 + local.get $4 + local.get $3 + local.get $2 + local.get $1 + local.get $0 + local.get $6 + f64.convert_i64_s + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + call $~lib/date/Date#constructor + global.set $std/date/date + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 30 + call $~lib/date/Date#setUTCDate + i64.const 825638400000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 69 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 1996 + i32.const 2 + i32.const 1 + i32.const 5 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $std/date/test_utc_date + i32.const 0 + i32.const 1996 + local.set $5 + i32.const 1 + local.set $4 + i32.const 29 + local.set $3 + i32.const 0 + local.set $2 + i32.const 0 + local.set $1 + i32.const 0 + local.set $0 + i64.const 0 + local.set $6 + local.get $5 + local.get $4 + local.get $3 + local.get $2 + local.get $1 + local.get $0 + local.get $6 + f64.convert_i64_s + call $~lib/bindings/Date/UTC + i64.trunc_f64_s + call $~lib/date/Date#constructor + global.set $std/date/date + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 24 + call $~lib/date/Date#setUTCHours + i64.const 825638400000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 74 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 1996 + i32.const 2 + i32.const 1 + i32.const 5 + i32.const 0 + i32.const 0 i32.const 0 - i32.store - i32.const 1970 - local.set $2 i32.const 0 - local.set $1 - i32.const 1 - local.set $0 + call $std/date/test_utc_date i32.const 0 + i32.const 1996 + local.set $5 + i32.const 1 + local.set $4 + i32.const 29 local.set $3 i32.const 0 - local.set $4 + local.set $2 i32.const 0 - local.set $5 + local.set $1 + i32.const 0 + local.set $0 i64.const 0 local.set $6 + local.get $5 + local.get $4 + local.get $3 local.get $2 local.get $1 local.get $0 - local.get $3 - local.get $4 - local.get $5 local.get $6 f64.convert_i64_s call $~lib/bindings/Date/UTC i64.trunc_f64_s - i64.const 0 + call $~lib/date/Date#constructor + global.set $std/date/date + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 24 + i32.const 60 + i32.mul + i32.const 55 + i32.add + call $~lib/date/Date#setUTCMinutes + i64.const 825641700000 i64.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 944 + i32.const 79 i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 1996 + i32.const 2 + i32.const 1 + i32.const 5 + i32.const 0 + i32.const 55 + i32.const 0 + i32.const 0 + call $std/date/test_utc_date + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 6 + i32.const 60 + i32.mul + call $~lib/date/Date#setUTCSeconds + i64.const 825642060000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 83 i32.const 1 call $~lib/builtins/abort unreachable end - i32.const 1970 - local.set $5 + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 1996 + i32.const 2 + i32.const 1 + i32.const 5 + i32.const 1 + i32.const 1 i32.const 0 - local.set $4 + i32.const 0 + call $std/date/test_utc_date + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 1001 + call $~lib/date/Date#setUTCMilliseconds + i64.const 825642061001 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 87 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 1996 + i32.const 2 + i32.const 1 + i32.const 5 + i32.const 1 + i32.const 1 i32.const 1 + i32.const 1 + call $std/date/test_utc_date + i32.const 2000 + local.set $5 + i32.const 1 + local.set $4 + i32.const 29 local.set $3 i32.const 0 local.set $2 @@ -2521,30 +6210,220 @@ f64.convert_i64_s call $~lib/bindings/Date/UTC i64.trunc_f64_s - i64.const 0 - i64.eq + global.set $std/date/creationTime + i32.const 0 + global.get $std/date/creationTime + call $~lib/date/Date#constructor + global.set $std/date/date + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 2000 + call $~lib/date/Date#setFullYear + drop + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/date/Date#getFullYear + i32.const 2000 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 94 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 1 + call $~lib/date/Date#setMonth + drop + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/date/Date#getMonth + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 98 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 8 + call $~lib/date/Date#setDate + drop + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/date/Date#getDate + i32.const 8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 102 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 24 + call $~lib/date/Date#setHours + drop + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/date/Date#getHours + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 106 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 24 + i32.const 60 + i32.mul + i32.const 55 + i32.add + call $~lib/date/Date#setMinutes + drop + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/date/Date#getMinutes + i32.const 55 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 110 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 6 + i32.const 60 + i32.mul + call $~lib/date/Date#setSeconds + drop + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/date/Date#getSeconds + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 944 + i32.const 114 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 1001 + call $~lib/date/Date#setMilliseconds + drop + global.get $std/date/date + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + call $~lib/date/Date#getMilliseconds + i32.const 1 + i32.eq i32.eqz if i32.const 0 - i32.const 32 - i32.const 2 + i32.const 944 + i32.const 118 i32.const 1 call $~lib/builtins/abort unreachable end - i32.const 2018 + i32.const 0 + i32.const 1970 local.set $5 - i32.const 10 + i32.const 0 local.set $4 - i32.const 10 + i32.const 1 local.set $3 - i32.const 11 + i32.const 0 local.set $2 i32.const 0 local.set $1 i32.const 0 local.set $0 - i64.const 1 + i64.const 0 local.set $6 local.get $5 local.get $4 @@ -2556,90 +6435,33 @@ f64.convert_i64_s call $~lib/bindings/Date/UTC i64.trunc_f64_s - global.set $std/date/creationTime - global.get $std/date/creationTime - i64.const 1541847600001 - i64.eq - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 5 - i32.const 1 - call $~lib/builtins/abort - unreachable - end + call $~lib/date/Date#constructor + global.set $std/date/date1 + i32.const 0 call $~lib/bindings/Date/now i64.trunc_f64_s - global.get $std/date/creationTime - i64.gt_s - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 7 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - i32.const 192 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/pinSpace - i32.const 224 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/toSpace - i32.const 368 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/fromSpace - i32.const 0 - global.get $std/date/creationTime call $~lib/date/Date#constructor - global.set $std/date/date - global.get $std/date/date - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store - local.get $7 - call $~lib/date/Date#getTime - global.get $std/date/creationTime - i64.eq - i32.eqz - if - i32.const 0 - i32.const 32 - i32.const 10 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - global.get $std/date/date + global.set $std/date/date2 + global.get $std/date/date1 local.set $7 global.get $~lib/memory/__stack_pointer local.get $7 i32.store local.get $7 - global.get $std/date/creationTime - i64.const 1 - i64.add - call $~lib/date/Date#setTime - drop - global.get $std/date/date + call $~lib/date/Date#getTimezoneOffset + global.get $std/date/date2 local.set $7 global.get $~lib/memory/__stack_pointer local.get $7 i32.store local.get $7 - call $~lib/date/Date#getTime - global.get $std/date/creationTime - i64.const 1 - i64.add - i64.eq + call $~lib/date/Date#getTimezoneOffset + i32.eq i32.eqz if i32.const 0 - i32.const 32 - i32.const 12 + i32.const 944 + i32.const 123 i32.const 1 call $~lib/builtins/abort unreachable @@ -2649,8 +6471,8 @@ i32.add global.set $~lib/memory/__stack_pointer ) - (func $~lib/date/Date#constructor (param $0 i32) (param $1 i64) (result i32) - (local $2 i32) + (func $~lib/util/date/TimeZone#constructor (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -2670,12 +6492,228 @@ i32.store end local.get $0 + i32.const 0 + call $~lib/util/date/TimeZone#set:ID + local.get $0 + i32.const 0 + call $~lib/util/date/TimeZone#set:rawOffset + local.get $0 + local.get $1 + call $~lib/util/date/TimeZone#set:ID + local.get $0 + local.get $2 + call $~lib/util/date/TimeZone#set:rawOffset + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + ) + (func $~lib/date/Date#isNormalizeUTCDate (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.load offset=16 + i32.const 0 + i32.ne + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=16 + local.tee $1 + i32.store + local.get $1 + if (result i32) + local.get $1 + else + i32.const 1024 + i32.const 1088 + i32.const 88 + i32.const 8 + call $~lib/builtins/abort + unreachable + end + i64.load offset=40 + local.get $0 + i64.load + i64.eq + else + i32.const 0 + end + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=16 + local.tee $1 + i32.store + local.get $1 + if (result i32) + local.get $1 + else + i32.const 1024 + i32.const 1088 + i32.const 89 + i32.const 8 + call $~lib/builtins/abort + unreachable + end + i32.load8_u offset=32 + else + i32.const 0 + end + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) + (func $~lib/util/date/CalendarDate#constructor (param $0 i32) (param $1 i64) (param $2 i32) (result i32) + (local $3 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 60 + i32.const 6 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store + end + local.get $0 + i32.const 0 + call $~lib/util/date/CalendarDate#set:year + local.get $0 + i32.const 0 + call $~lib/util/date/CalendarDate#set:month + local.get $0 + i32.const 0 + call $~lib/util/date/CalendarDate#set:dayOfMonth + local.get $0 + i32.const 0 + call $~lib/util/date/CalendarDate#set:dayOfWeek + local.get $0 + i32.const 0 + call $~lib/util/date/CalendarDate#set:hours + local.get $0 + i32.const 0 + call $~lib/util/date/CalendarDate#set:minutes + local.get $0 + i32.const 0 + call $~lib/util/date/CalendarDate#set:seconds + local.get $0 + i32.const 0 + call $~lib/util/date/CalendarDate#set:milliseconds + local.get $0 + i32.const 0 + call $~lib/util/date/CalendarDate#set:isNormalized + local.get $0 i64.const 0 - call $~lib/date/Date#set:value + call $~lib/util/date/CalendarDate#set:millis + local.get $0 + i32.const 0 + call $~lib/util/date/CalendarDate#set:timeOfDay + local.get $0 + i32.const 0 + call $~lib/util/date/CalendarDate#set:fixedDate + local.get $0 + i32.const 0 + call $~lib/util/date/CalendarDate#set:timeZone local.get $0 local.get $1 - call $~lib/date/Date#set:value + call $~lib/util/date/CalendarDate#set:millis + local.get $0 + i32.const 0 + call $~lib/util/date/CalendarDate#set:isNormalized + local.get $0 + local.get $2 + call $~lib/util/date/CalendarDate#set:timeZone + local.get $0 + local.set $3 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $3 + ) + (func $~lib/date/Date#isNormalizeLocalDate (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store local.get $0 + i32.load offset=12 + i32.const 0 + i32.ne + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.tee $1 + i32.store + local.get $1 + if (result i32) + local.get $1 + else + i32.const 1024 + i32.const 1088 + i32.const 82 + i32.const 8 + call $~lib/builtins/abort + unreachable + end + i64.load offset=40 + local.get $0 + i64.load + i64.eq + else + i32.const 0 + end + if (result i32) + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=12 + local.tee $1 + i32.store + local.get $1 + if (result i32) + local.get $1 + else + i32.const 1024 + i32.const 1088 + i32.const 83 + i32.const 8 + call $~lib/builtins/abort + unreachable + end + i32.load8_u offset=32 + else + i32.const 0 + end local.set $2 global.get $~lib/memory/__stack_pointer i32.const 4