From 1db5851fac3d5ddf9395eeaaec45575e712c0ca7 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Wed, 14 Apr 2021 10:55:03 +0300 Subject: [PATCH 01/47] init --- std/assembly/date.ts | 135 ++--- tests/compiler/std/date.optimized.wat | 399 +++++++++------ tests/compiler/std/date.untouched.wat | 693 +++++++++++++++----------- 3 files changed, 737 insertions(+), 490 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 7d5c228dbb..36f0090112 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -1,6 +1,20 @@ import { E_VALUEOUTOFRANGE } from "util/error"; import { now as Date_now } from "./bindings/Date"; +// @ts-ignore: decorator +@inline const + MILLIS_PER_DAY = 1000 * 60 * 60 * 24, + MILLIS_PER_HOUR = 1000 * 60 * 60, + MILLIS_PER_MINUTE = 1000 * 60, + MILLIS_PER_SECOND = 1000; + +// ymdFromEpochDays returns values via globals to avoid allocations +// @ts-ignore: decorator +@lazy let + year: i32, + month: i32, + day: i32; + export class Date { @inline static UTC( year: i32, @@ -19,50 +33,44 @@ export class Date { } static fromString(dateTimeString: string): Date { - let hour: i32 = 0, - minute: i32 = 0, - second: i32 = 0, - millisecond: i32 = 0; - let dateString: string; - - if (dateTimeString.includes("T")) { + var + hour: i32 = 0, + min: i32 = 0, + sec: i32 = 0, + ms: i32 = 0; + + var dateString = dateTimeString; + var posT = dateTimeString.indexOf("T"); + if (~posT) { // includes a time component - const parts = dateTimeString.split("T"); - const timeString = parts[1]; + let timeString: string; + dateString = dateTimeString.substring(0, posT); + timeString = dateTimeString.substring(posT + 1); // parse the HH-MM-SS component - const timeParts = timeString.split(":"); + let timeParts = timeString.split(":"); hour = I32.parseInt(timeParts[0]); - minute = I32.parseInt(timeParts[1]); - if (timeParts[2].includes(".")) { + min = I32.parseInt(timeParts[1]); + let secAndMs = timeParts[2]; + let posDot = secAndMs.indexOf("."); + if (~posDot) { // includes milliseconds - const secondParts = timeParts[2].split("."); - second = I32.parseInt(secondParts[0]); - millisecond = I32.parseInt(secondParts[1]); + sec = I32.parseInt(secAndMs.substring(0, posDot)); + ms = I32.parseInt(secAndMs.substring(posDot + 1)); } else { - second = I32.parseInt(timeParts[2]); + sec = I32.parseInt(secAndMs); } - dateString = parts[0]; - } else { - dateString = dateTimeString; } // parse the YYYY-MM-DD component - const parts = dateString.split("-"); - const year = I32.parseInt( - parts[0].length == 2 ? "19" + parts[0] : parts[0] - ); - const month = I32.parseInt(parts[1]); - const day = I32.parseInt(parts[2]); + var parts = dateString.split("-"); + var y = parts[0]; + var year = I32.parseInt(y.length == 2 ? "19" + y : y); + var month = I32.parseInt(parts[1]); + var day = I32.parseInt(parts[2]); - return new Date( - epochMillis(year, month, day, hour, minute, second, millisecond) - ); + return new Date(epochMillis(year, month, day, hour, min, sec, ms)); } - private epochMillis: i64; - - constructor(epochMillis: i64) { - this.epochMillis = epochMillis; - } + constructor(private epochMillis: i64) {} getTime(): i64 { return this.epochMillis; @@ -109,47 +117,47 @@ export class Date { } setUTCSeconds(value: i32): void { - throwIfNotInRange(value, 0, 59); + if (value < 0 || value > 59) throw new RangeError(E_VALUEOUTOFRANGE); this.epochMillis += (value - this.getUTCSeconds()) * MILLIS_PER_SECOND; } setUTCMinutes(value: i32): void { - throwIfNotInRange(value, 0, 59); + if (value < 0 || value > 59) throw new RangeError(E_VALUEOUTOFRANGE); this.epochMillis += (value - this.getUTCMinutes()) * MILLIS_PER_MINUTE; } setUTCHours(value: i32): void { - throwIfNotInRange(value, 0, 23); + if (value < 0 || value > 23) throw new RangeError(E_VALUEOUTOFRANGE); this.epochMillis += (value - this.getUTCHours()) * MILLIS_PER_HOUR; } setUTCDate(value: i32): void { ymdFromEpochDays(i32(this.epochMillis / MILLIS_PER_DAY)); - throwIfNotInRange(value, 1, daysInMonth(year, month)); - const mills = this.epochMillis % MILLIS_PER_DAY; + if (value < 1 || value > daysInMonth(year, month)) throw new RangeError(E_VALUEOUTOFRANGE); + var ms = this.epochMillis % MILLIS_PER_DAY; this.epochMillis = - i64(daysSinceEpoch(year, month, value)) * MILLIS_PER_DAY + mills; + i64(daysSinceEpoch(year, month, value)) * MILLIS_PER_DAY + ms; } setUTCMonth(value: i32): void { - throwIfNotInRange(value, 1, 12); + if (value < 1 || value > 12) throw new RangeError(E_VALUEOUTOFRANGE); ymdFromEpochDays(i32(this.epochMillis / MILLIS_PER_DAY)); - const mills = this.epochMillis % MILLIS_PER_DAY; + var ms = this.epochMillis % MILLIS_PER_DAY; this.epochMillis = - i64(daysSinceEpoch(year, value + 1, day)) * MILLIS_PER_DAY + mills; + i64(daysSinceEpoch(year, value + 1, day)) * MILLIS_PER_DAY + ms; } setUTCFullYear(value: i32): void { ymdFromEpochDays(i32(this.epochMillis / MILLIS_PER_DAY)); - const mills = this.epochMillis % MILLIS_PER_DAY; + var ms = this.epochMillis % MILLIS_PER_DAY; this.epochMillis = - i64(daysSinceEpoch(value, month, day)) * MILLIS_PER_DAY + mills; + i64(daysSinceEpoch(value, month, day)) * MILLIS_PER_DAY + ms; } toISOString(): string { ymdFromEpochDays(i32(this.epochMillis / MILLIS_PER_DAY)); - let yearStr = year.toString(); + var yearStr = year.toString(); if (yearStr.length > 4) { yearStr = "+" + yearStr.padStart(6, "0"); } @@ -191,17 +199,14 @@ function epochMillis( ); } -function throwIfNotInRange(value: i32, lower: i32, upper: i32): void { - if (value < lower || value > upper) throw new RangeError(E_VALUEOUTOFRANGE); +// @ts-ignore: decorator +@inline function floorDiv(a: i32, b: i32): i32 { + return (a >= 0 ? a : a - b + 1) / b; } -const MILLIS_PER_DAY = 1_000 * 60 * 60 * 24; -const MILLIS_PER_HOUR = 1_000 * 60 * 60; -const MILLIS_PER_MINUTE = 1_000 * 60; -const MILLIS_PER_SECOND = 1_000; - // http://howardhinnant.github.io/date_algorithms.html#is_leap -function isLeap(y: i32): bool { +// @ts-ignore: decorator +@inline function isLeap(y: i32): bool { return y % 4 == 0 && (y % 100 != 0 || y % 400 == 0); } @@ -211,28 +216,26 @@ function daysInMonth(year: i32, month: i32): i32 { : 30 + ((month + i32(month >= 8)) & 1); } -// ymdFromEpochDays returns values via globals to avoid allocations -let year: i32, month: i32, day: i32; // see: http://howardhinnant.github.io/date_algorithms.html#civil_from_days function ymdFromEpochDays(z: i32): void { z += 719468; - const era = (z >= 0 ? z : z - 146096) / 146097; - const doe = z - era * 146097; // [0, 146096] - const yoe = (doe - doe / 1460 + doe / 36524 - doe / 146096) / 365; // [0, 399] + var era = floorDiv(z, 146097); + var doe = z - era * 146097; // [0, 146096] + var yoe = (doe - doe / 1460 + doe / 36524 - doe / 146096) / 365; // [0, 399] year = yoe + era * 400; - const doy = doe - (365 * yoe + yoe / 4 - yoe / 100); // [0, 365] - const mp = (5 * doy + 2) / 153; // [0, 11] + var doy = doe - (365 * yoe + yoe / 4 - yoe / 100); // [0, 365] + var mp = (5 * doy + 2) / 153; // [0, 11] day = doy - (153 * mp + 2) / 5 + 1; // [1, 31] month = mp + (mp < 10 ? 3 : -9); // [1, 12] - year += (month <= 2 ? 1 : 0); + year += i32(month <= 2); } // http://howardhinnant.github.io/date_algorithms.html#days_from_civil function daysSinceEpoch(y: i32, m: i32, d: i32): i32 { - y -= m <= 2 ? 1 : 0; - const era = (y >= 0 ? y : y - 399) / 400; - const yoe = y - era * 400; // [0, 399] - const doy = (153 * (m + (m > 2 ? -3 : 9)) + 2) / 5 + d - 1; // [0, 365] - const doe = yoe * 365 + yoe / 4 - yoe / 100 + doy; // [0, 146096] + y -= i32(m <= 2); + var era = floorDiv(y, 400); + var yoe = y - era * 400; // [0, 399] + var doy = (153 * (m + (m > 2 ? -3 : 9)) + 2) / 5 + d - 1; // [0, 365] + var doe = yoe * 365 + yoe / 4 - yoe / 100 + doy; // [0, 146096] return era * 146097 + doe - 719468; } diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index d411dcade9..e95a3d3c40 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -3,8 +3,8 @@ (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_=>_none (func (param 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_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $none_=>_i32 (func (result i32))) @@ -83,9 +83,6 @@ (data (i32.const 3032) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") (data (i32.const 3104) "\06\00\00\00 \00\00\00\00\00\00\00 ") (data (i32.const 3132) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") - (global $~lib/date/year (mut i32) (i32.const 0)) - (global $~lib/date/month (mut i32) (i32.const 0)) - (global $~lib/date/day (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -96,6 +93,9 @@ (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/date/year (mut i32) (i32.const 0)) + (global $~lib/date/day (mut i32) (i32.const 0)) + (global $~lib/date/month (mut i32) (i32.const 0)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 19540)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) @@ -2028,29 +2028,23 @@ i64.add i64.store ) - (func $~lib/date/throwIfNotInRange (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/date/Date#setUTCSeconds (param $0 i32) (param $1 i32) i32.const 1 - local.get $0 - local.get $2 + local.get $1 + i32.const 59 i32.gt_s - local.get $0 local.get $1 + i32.const 0 i32.lt_s select if i32.const 1504 i32.const 1568 - i32.const 195 - i32.const 39 + i32.const 120 + i32.const 34 call $~lib/builtins/abort unreachable end - ) - (func $~lib/date/Date#setUTCSeconds (param $0 i32) (param $1 i32) - local.get $1 - i32.const 0 - i32.const 59 - call $~lib/date/throwIfNotInRange local.get $0 local.get $0 i64.load @@ -2065,10 +2059,22 @@ i64.store ) (func $~lib/date/Date#setUTCMinutes (param $0 i32) (param $1 i32) + i32.const 1 local.get $1 - i32.const 0 i32.const 59 - call $~lib/date/throwIfNotInRange + i32.gt_s + local.get $1 + i32.const 0 + i32.lt_s + select + if + i32.const 1504 + i32.const 1568 + i32.const 125 + i32.const 34 + call $~lib/builtins/abort + unreachable + end local.get $0 local.get $0 i64.load @@ -2083,10 +2089,22 @@ i64.store ) (func $~lib/date/Date#setUTCHours (param $0 i32) (param $1 i32) + i32.const 1 local.get $1 - i32.const 0 i32.const 23 - call $~lib/date/throwIfNotInRange + i32.gt_s + local.get $1 + i32.const 0 + i32.lt_s + select + if + i32.const 1504 + i32.const 1568 + i32.const 130 + i32.const 34 + call $~lib/builtins/abort + unreachable + end local.get $0 local.get $0 i64.load @@ -2110,38 +2128,54 @@ call $~lib/date/ymdFromEpochDays local.get $1 i32.const 1 - i32.const 0 - i32.const 1 - global.get $~lib/date/year - local.tee $2 - i32.const 400 - i32.rem_s - i32.eqz - local.get $2 - i32.const 100 - i32.rem_s - select - local.get $2 - i32.const 3 - i32.and - select - i32.const 28 - i32.add - global.get $~lib/date/month - local.tee $2 - local.get $2 - i32.const 8 - i32.ge_s - i32.add - i32.const 1 - i32.and - i32.const 30 - i32.add - local.get $2 - i32.const 2 - i32.eq - select - call $~lib/date/throwIfNotInRange + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 0 + i32.const 1 + global.get $~lib/date/year + local.tee $2 + i32.const 400 + i32.rem_s + i32.eqz + local.get $2 + i32.const 100 + i32.rem_s + select + local.get $2 + i32.const 3 + i32.and + select + i32.const 0 + i32.ne + i32.const 28 + i32.add + global.get $~lib/date/month + local.tee $2 + local.get $2 + i32.const 8 + i32.ge_s + i32.add + i32.const 1 + i32.and + i32.const 30 + i32.add + local.get $2 + i32.const 2 + i32.eq + select + i32.gt_s + end + if + i32.const 1504 + i32.const 1568 + i32.const 136 + i32.const 56 + call $~lib/builtins/abort + unreachable + end local.get $0 local.get $0 i64.load @@ -2158,10 +2192,22 @@ i64.store ) (func $~lib/date/Date#setUTCMonth (param $0 i32) (param $1 i32) - local.get $1 i32.const 1 + local.get $1 i32.const 12 - call $~lib/date/throwIfNotInRange + i32.gt_s + local.get $1 + i32.const 1 + i32.lt_s + select + if + i32.const 1504 + i32.const 1568 + i32.const 143 + i32.const 34 + call $~lib/builtins/abort + unreachable + end local.get $0 i64.load i64.const 86400000 @@ -3892,6 +3938,7 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) global.get $~lib/memory/__stack_pointer i32.const 32 i32.sub @@ -3909,6 +3956,8 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store offset=24 + local.get $0 + local.set $1 global.get $~lib/memory/__stack_pointer i32.const 2032 i32.store @@ -3916,22 +3965,24 @@ i32.const 2032 i32.const 0 call $~lib/string/String#indexOf + local.tee $2 i32.const -1 - i32.ne + i32.xor if - global.get $~lib/memory/__stack_pointer - i32.const 2032 - i32.store global.get $~lib/memory/__stack_pointer local.get $0 - i32.const 2032 - call $~lib/string/String#split + i32.const 0 + local.get $2 + call $~lib/string/String#substring local.tee $1 i32.store offset=4 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $0 + local.get $2 i32.const 1 - call $~lib/array/Array<~lib/string/String>#__get + i32.add + i32.const 2147483647 + call $~lib/string/String#substring local.tee $0 i32.store offset=8 global.get $~lib/memory/__stack_pointer @@ -3952,7 +4003,7 @@ i32.store offset=16 local.get $2 call $~lib/util/string/strtol - local.set $3 + local.set $4 local.get $0 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get @@ -3962,96 +4013,70 @@ i32.store offset=16 local.get $2 call $~lib/util/string/strtol - local.set $4 + local.set $5 + global.get $~lib/memory/__stack_pointer local.get $0 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=16 + local.tee $0 + i32.store offset=20 global.get $~lib/memory/__stack_pointer i32.const 2096 i32.store - local.get $2 + local.get $0 i32.const 2096 i32.const 0 call $~lib/string/String#indexOf + local.tee $2 i32.const -1 - i32.ne + i32.xor if - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.const 2 - call $~lib/array/Array<~lib/string/String>#__get - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=16 - global.get $~lib/memory/__stack_pointer - i32.const 2096 - i32.store - local.get $0 - i32.const 2096 - call $~lib/string/String#split - local.tee $0 - i32.store offset=20 local.get $0 i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - local.set $2 - global.get $~lib/memory/__stack_pointer local.get $2 + call $~lib/string/String#substring + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 i32.store offset=16 - local.get $2 + local.get $3 call $~lib/util/string/strtol - local.set $2 + local.set $3 local.get $0 + local.get $2 i32.const 1 - call $~lib/array/Array<~lib/string/String>#__get + i32.add + i32.const 2147483647 + call $~lib/string/String#substring local.set $0 global.get $~lib/memory/__stack_pointer local.get $0 i32.store offset=16 local.get $0 call $~lib/util/string/strtol - local.set $5 + local.set $6 else - local.get $0 - i32.const 2 - call $~lib/array/Array<~lib/string/String>#__get - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=16 local.get $0 call $~lib/util/string/strtol - local.set $2 + local.set $3 end - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - local.tee $0 - i32.store offset=24 end global.get $~lib/memory/__stack_pointer i32.const 2000 i32.store global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.const 2000 call $~lib/string/String#split - local.tee $0 - i32.store offset=12 - local.get $0 - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - local.set $1 + local.tee $1 + i32.store offset=24 global.get $~lib/memory/__stack_pointer local.get $1 - i32.store - local.get $1 + i32.const 0 + call $~lib/array/Array<~lib/string/String>#__get + local.tee $0 + i32.store offset=28 + local.get $0 i32.const 20 i32.sub i32.load offset=16 @@ -4059,41 +4084,30 @@ i32.shr_u i32.const 2 i32.eq - if (result i32) + if global.get $~lib/memory/__stack_pointer i32.const 2672 i32.store - local.get $0 - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=28 i32.const 2672 - local.get $1 - call $~lib/string/String.__concat - else local.get $0 - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get + call $~lib/string/String.__concat + local.set $0 end - local.set $1 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $0 i32.store offset=16 - local.get $1 - call $~lib/util/string/strtol local.get $0 + call $~lib/util/string/strtol + local.get $1 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.set $1 + local.set $0 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $0 i32.store offset=16 - local.get $1 - call $~lib/util/string/strtol local.get $0 + call $~lib/util/string/strtol + local.get $1 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get local.set $0 @@ -4102,10 +4116,10 @@ i32.store offset=16 local.get $0 call $~lib/util/string/strtol - local.get $3 local.get $4 - local.get $2 local.get $5 + local.get $3 + local.get $6 call $~lib/date/epochMillis call $~lib/date/Date#constructor global.get $~lib/memory/__stack_pointer @@ -5072,9 +5086,6 @@ local.tee $1 i32.store local.get $1 - i64.const 0 - i64.store - local.get $1 local.get $0 i64.store global.get $~lib/memory/__stack_pointer @@ -5196,6 +5207,110 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (param $2 i32) (result 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 $1 + i32.const 0 + local.get $1 + i32.const 0 + i32.gt_s + select + local.tee $3 + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + local.tee $1 + local.get $1 + local.get $3 + i32.gt_s + select + local.tee $3 + local.get $2 + i32.const 0 + local.get $2 + i32.const 0 + i32.gt_s + select + local.tee $2 + local.get $1 + local.get $1 + local.get $2 + i32.gt_s + select + local.tee $2 + local.get $2 + local.get $3 + i32.lt_s + select + i32.const 1 + i32.shl + local.tee $4 + local.get $3 + local.get $2 + local.get $2 + local.get $3 + i32.gt_s + select + i32.const 1 + i32.shl + local.tee $2 + i32.sub + local.tee $3 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 1968 + return + end + i32.const 0 + local.get $4 + local.get $1 + i32.const 1 + i32.shl + i32.eq + local.get $2 + select + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + return + end + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + local.get $1 + local.get $0 + local.get $2 + i32.add + local.get $3 + call $~lib/memory/memory.copy + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) (func $~lib/rt/__newArray (param $0 i32) (result i32) (local $1 i32) (local $2 i32) diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 8203e8cbc4..ccf6866166 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -61,13 +61,6 @@ (data (i32.const 3452) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 3536) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") (table $0 1 funcref) - (global $~lib/date/MILLIS_PER_DAY i32 (i32.const 86400000)) - (global $~lib/date/MILLIS_PER_HOUR i32 (i32.const 3600000)) - (global $~lib/date/MILLIS_PER_MINUTE i32 (i32.const 60000)) - (global $~lib/date/MILLIS_PER_SECOND i32 (i32.const 1000)) - (global $~lib/date/year (mut i32) (i32.const 0)) - (global $~lib/date/month (mut i32) (i32.const 0)) - (global $~lib/date/day (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -80,6 +73,9 @@ (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/date/year (mut i32) (i32.const 0)) + (global $~lib/date/day (mut i32) (i32.const 0)) + (global $~lib/date/month (mut i32) (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) (global $~lib/rt/__rtti_base i32 (i32.const 3536)) (global $~lib/memory/__data_end i32 (i32.const 3588)) @@ -93,36 +89,39 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) + (local $8 i32) local.get $0 local.get $1 i32.const 2 i32.le_s - if (result i32) - i32.const 1 - else - i32.const 0 - end i32.sub local.set $0 local.get $0 + local.set $4 + i32.const 400 + local.set $3 + local.get $4 i32.const 0 i32.ge_s if (result i32) - local.get $0 + local.get $4 else - local.get $0 - i32.const 399 + local.get $4 + local.get $3 i32.sub + i32.const 1 + i32.add end - i32.const 400 + local.get $3 i32.div_s - local.set $3 + local.set $5 local.get $0 - local.get $3 + local.get $5 i32.const 400 i32.mul i32.sub - local.set $4 + local.set $6 i32.const 153 local.get $1 local.get $1 @@ -143,25 +142,25 @@ i32.add i32.const 1 i32.sub - local.set $5 - local.get $4 + local.set $7 + local.get $6 i32.const 365 i32.mul - local.get $4 + local.get $6 i32.const 4 i32.div_s i32.add - local.get $4 + local.get $6 i32.const 100 i32.div_s i32.sub - local.get $5 + local.get $7 i32.add - local.set $6 - local.get $3 + local.set $8 + local.get $5 i32.const 146097 i32.mul - local.get $6 + local.get $8 i32.add i32.const 719468 i32.sub @@ -172,21 +171,20 @@ local.get $2 call $~lib/date/daysSinceEpoch i64.extend_i32_s - global.get $~lib/date/MILLIS_PER_DAY - i64.extend_i32_s + i64.const 86400000 i64.mul local.get $3 - global.get $~lib/date/MILLIS_PER_HOUR + i32.const 3600000 i32.mul i64.extend_i32_s i64.add local.get $4 - global.get $~lib/date/MILLIS_PER_MINUTE + i32.const 60000 i32.mul i64.extend_i32_s i64.add local.get $5 - global.get $~lib/date/MILLIS_PER_SECOND + i32.const 1000 i32.mul i64.extend_i32_s i64.add @@ -194,11 +192,6 @@ i64.extend_i32_s i64.add ) - (func $~lib/date/Date#set:epochMillis (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 @@ -2504,6 +2497,11 @@ call $~lib/memory/memory.fill local.get $3 ) + (func $~lib/date/Date#set:epochMillis (param $0 i32) (param $1 i64) + local.get $0 + local.get $1 + i64.store + ) (func $~lib/date/Date#getTime (param $0 i32) (result i64) local.get $0 i64.load @@ -2520,76 +2518,84 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) + (local $7 i32) local.get $0 i32.const 719468 i32.add local.set $0 local.get $0 + local.set $2 + i32.const 146097 + local.set $1 + local.get $2 i32.const 0 i32.ge_s if (result i32) - local.get $0 + local.get $2 else - local.get $0 - i32.const 146096 + local.get $2 + local.get $1 i32.sub + i32.const 1 + i32.add end - i32.const 146097 + local.get $1 i32.div_s - local.set $1 + local.set $3 local.get $0 - local.get $1 + local.get $3 i32.const 146097 i32.mul i32.sub - local.set $2 - local.get $2 - local.get $2 + local.set $4 + local.get $4 + local.get $4 i32.const 1460 i32.div_s i32.sub - local.get $2 + local.get $4 i32.const 36524 i32.div_s i32.add - local.get $2 + local.get $4 i32.const 146096 i32.div_s i32.sub i32.const 365 i32.div_s - local.set $3 + local.set $5 + local.get $5 local.get $3 - local.get $1 i32.const 400 i32.mul i32.add global.set $~lib/date/year - local.get $2 + local.get $4 i32.const 365 - local.get $3 + local.get $5 i32.mul - local.get $3 + local.get $5 i32.const 4 i32.div_s i32.add - local.get $3 + local.get $5 i32.const 100 i32.div_s i32.sub i32.sub - local.set $4 + local.set $6 i32.const 5 - local.get $4 + local.get $6 i32.mul i32.const 2 i32.add i32.const 153 i32.div_s - local.set $5 - local.get $4 + local.set $7 + local.get $6 i32.const 153 - local.get $5 + local.get $7 i32.mul i32.const 2 i32.add @@ -2599,8 +2605,8 @@ i32.const 1 i32.add global.set $~lib/date/day - local.get $5 - local.get $5 + local.get $7 + local.get $7 i32.const 10 i32.lt_s if (result i32) @@ -2614,19 +2620,13 @@ global.get $~lib/date/month i32.const 2 i32.le_s - if (result i32) - i32.const 1 - else - i32.const 0 - end i32.add global.set $~lib/date/year ) (func $~lib/date/Date#getUTCFullYear (param $0 i32) (result i32) local.get $0 i64.load - global.get $~lib/date/MILLIS_PER_DAY - i64.extend_i32_s + i64.const 86400000 i64.div_s i32.wrap_i64 call $~lib/date/ymdFromEpochDays @@ -2635,8 +2635,7 @@ (func $~lib/date/Date#getUTCMonth (param $0 i32) (result i32) local.get $0 i64.load - global.get $~lib/date/MILLIS_PER_DAY - i64.extend_i32_s + i64.const 86400000 i64.div_s i32.wrap_i64 call $~lib/date/ymdFromEpochDays @@ -2647,8 +2646,7 @@ (func $~lib/date/Date#getUTCDate (param $0 i32) (result i32) local.get $0 i64.load - global.get $~lib/date/MILLIS_PER_DAY - i64.extend_i32_s + i64.const 86400000 i64.div_s i32.wrap_i64 call $~lib/date/ymdFromEpochDays @@ -2657,38 +2655,34 @@ (func $~lib/date/Date#getUTCHours (param $0 i32) (result i32) local.get $0 i64.load - global.get $~lib/date/MILLIS_PER_DAY - i64.extend_i32_s + i64.const 86400000 i64.rem_s i32.wrap_i64 - global.get $~lib/date/MILLIS_PER_HOUR + i32.const 3600000 i32.div_s ) (func $~lib/date/Date#getUTCMinutes (param $0 i32) (result i32) local.get $0 i64.load - global.get $~lib/date/MILLIS_PER_HOUR - i64.extend_i32_s + i64.const 3600000 i64.rem_s i32.wrap_i64 - global.get $~lib/date/MILLIS_PER_MINUTE + i32.const 60000 i32.div_s ) (func $~lib/date/Date#getUTCSeconds (param $0 i32) (result i32) local.get $0 i64.load - global.get $~lib/date/MILLIS_PER_MINUTE - i64.extend_i32_s + i64.const 60000 i64.rem_s i32.wrap_i64 - global.get $~lib/date/MILLIS_PER_SECOND + i32.const 1000 i32.div_s ) (func $~lib/date/Date#getUTCMilliseconds (param $0 i32) (result i32) local.get $0 i64.load - global.get $~lib/date/MILLIS_PER_SECOND - i64.extend_i32_s + i64.const 1000 i64.rem_s i32.wrap_i64 ) @@ -2704,31 +2698,25 @@ i64.add call $~lib/date/Date#set:epochMillis ) - (func $~lib/date/throwIfNotInRange (param $0 i32) (param $1 i32) (param $2 i32) - local.get $0 + (func $~lib/date/Date#setUTCSeconds (param $0 i32) (param $1 i32) local.get $1 + i32.const 0 i32.lt_s if (result i32) i32.const 1 else - local.get $0 - local.get $2 + local.get $1 + i32.const 59 i32.gt_s end if i32.const 480 i32.const 544 - i32.const 195 - i32.const 39 + i32.const 120 + i32.const 34 call $~lib/builtins/abort unreachable end - ) - (func $~lib/date/Date#setUTCSeconds (param $0 i32) (param $1 i32) - local.get $1 - i32.const 0 - i32.const 59 - call $~lib/date/throwIfNotInRange local.get $0 local.get $0 i64.load @@ -2736,7 +2724,7 @@ local.get $0 call $~lib/date/Date#getUTCSeconds i32.sub - global.get $~lib/date/MILLIS_PER_SECOND + i32.const 1000 i32.mul i64.extend_i32_s i64.add @@ -2745,8 +2733,22 @@ (func $~lib/date/Date#setUTCMinutes (param $0 i32) (param $1 i32) local.get $1 i32.const 0 - i32.const 59 - call $~lib/date/throwIfNotInRange + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 59 + i32.gt_s + end + if + i32.const 480 + i32.const 544 + i32.const 125 + i32.const 34 + call $~lib/builtins/abort + unreachable + end local.get $0 local.get $0 i64.load @@ -2754,7 +2756,7 @@ local.get $0 call $~lib/date/Date#getUTCMinutes i32.sub - global.get $~lib/date/MILLIS_PER_MINUTE + i32.const 60000 i32.mul i64.extend_i32_s i64.add @@ -2763,8 +2765,22 @@ (func $~lib/date/Date#setUTCHours (param $0 i32) (param $1 i32) local.get $1 i32.const 0 - i32.const 23 - call $~lib/date/throwIfNotInRange + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 23 + i32.gt_s + end + if + i32.const 480 + i32.const 544 + i32.const 130 + i32.const 34 + call $~lib/builtins/abort + unreachable + end local.get $0 local.get $0 i64.load @@ -2772,45 +2788,46 @@ local.get $0 call $~lib/date/Date#getUTCHours i32.sub - global.get $~lib/date/MILLIS_PER_HOUR + i32.const 3600000 i32.mul i64.extend_i32_s i64.add call $~lib/date/Date#set:epochMillis ) - (func $~lib/date/isLeap (param $0 i32) (result i32) - local.get $0 - i32.const 4 - i32.rem_s - i32.const 0 + (func $~lib/date/daysInMonth (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + local.get $1 + i32.const 2 i32.eq if (result i32) + i32.const 28 local.get $0 - i32.const 100 + local.set $2 + local.get $2 + i32.const 4 i32.rem_s i32.const 0 - i32.ne + i32.eq if (result i32) - i32.const 1 - else - local.get $0 - i32.const 400 + local.get $2 + i32.const 100 i32.rem_s i32.const 0 - i32.eq + i32.ne + if (result i32) + i32.const 1 + else + local.get $2 + i32.const 400 + i32.rem_s + i32.const 0 + i32.eq + end + else + i32.const 0 end - else i32.const 0 - end - ) - (func $~lib/date/daysInMonth (param $0 i32) (param $1 i32) (result i32) - local.get $1 - i32.const 2 - i32.eq - if (result i32) - i32.const 28 - local.get $0 - call $~lib/date/isLeap + i32.ne i32.add else i32.const 30 @@ -2828,21 +2845,33 @@ (local $2 i64) local.get $0 i64.load - global.get $~lib/date/MILLIS_PER_DAY - i64.extend_i32_s + i64.const 86400000 i64.div_s i32.wrap_i64 call $~lib/date/ymdFromEpochDays local.get $1 i32.const 1 - global.get $~lib/date/year - global.get $~lib/date/month - call $~lib/date/daysInMonth - call $~lib/date/throwIfNotInRange + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $1 + global.get $~lib/date/year + global.get $~lib/date/month + call $~lib/date/daysInMonth + i32.gt_s + end + if + i32.const 480 + i32.const 544 + i32.const 136 + i32.const 56 + call $~lib/builtins/abort + unreachable + end local.get $0 i64.load - global.get $~lib/date/MILLIS_PER_DAY - i64.extend_i32_s + i64.const 86400000 i64.rem_s local.set $2 local.get $0 @@ -2851,8 +2880,7 @@ local.get $1 call $~lib/date/daysSinceEpoch i64.extend_i32_s - global.get $~lib/date/MILLIS_PER_DAY - i64.extend_i32_s + i64.const 86400000 i64.mul local.get $2 i64.add @@ -2862,19 +2890,31 @@ (local $2 i64) local.get $1 i32.const 1 - i32.const 12 - call $~lib/date/throwIfNotInRange + i32.lt_s + if (result i32) + i32.const 1 + else + local.get $1 + i32.const 12 + i32.gt_s + end + if + i32.const 480 + i32.const 544 + i32.const 143 + i32.const 34 + call $~lib/builtins/abort + unreachable + end local.get $0 i64.load - global.get $~lib/date/MILLIS_PER_DAY - i64.extend_i32_s + i64.const 86400000 i64.div_s i32.wrap_i64 call $~lib/date/ymdFromEpochDays local.get $0 i64.load - global.get $~lib/date/MILLIS_PER_DAY - i64.extend_i32_s + i64.const 86400000 i64.rem_s local.set $2 local.get $0 @@ -2885,8 +2925,7 @@ global.get $~lib/date/day call $~lib/date/daysSinceEpoch i64.extend_i32_s - global.get $~lib/date/MILLIS_PER_DAY - i64.extend_i32_s + i64.const 86400000 i64.mul local.get $2 i64.add @@ -2896,15 +2935,13 @@ (local $2 i64) local.get $0 i64.load - global.get $~lib/date/MILLIS_PER_DAY - i64.extend_i32_s + i64.const 86400000 i64.div_s i32.wrap_i64 call $~lib/date/ymdFromEpochDays local.get $0 i64.load - global.get $~lib/date/MILLIS_PER_DAY - i64.extend_i32_s + i64.const 86400000 i64.rem_s local.set $2 local.get $0 @@ -2913,8 +2950,7 @@ global.get $~lib/date/day call $~lib/date/daysSinceEpoch i64.extend_i32_s - global.get $~lib/date/MILLIS_PER_DAY - i64.extend_i32_s + i64.const 86400000 i64.mul local.get $2 i64.add @@ -4859,14 +4895,6 @@ end i32.const -1 ) - (func $~lib/string/String#includes (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - local.get $0 - local.get $1 - local.get $2 - call $~lib/string/String#indexOf - i32.const -1 - i32.ne - ) (func $~lib/rt/__newBuffer (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $0 @@ -5715,8 +5743,7 @@ i64.store offset=104 local.get $0 i64.load - global.get $~lib/date/MILLIS_PER_DAY - i64.extend_i32_s + i64.const 86400000 i64.div_s i32.wrap_i64 call $~lib/date/ymdFromEpochDays @@ -6375,6 +6402,12 @@ (local $8 i32) (local $9 i32) (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) global.get $~lib/memory/__stack_pointer i32.const 32 i32.sub @@ -6401,41 +6434,45 @@ i32.const 0 local.set $4 local.get $0 + local.set $5 + local.get $0 i32.const 2464 - local.set $10 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $10 + local.get $16 i32.store - local.get $10 + local.get $16 i32.const 0 - call $~lib/string/String#includes + call $~lib/string/String#indexOf + local.set $6 + local.get $6 + i32.const -1 + i32.xor if global.get $~lib/memory/__stack_pointer local.get $0 - i32.const 2464 - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store - local.get $10 - global.get $~lib/builtins/i32.MAX_VALUE - call $~lib/string/String#split - local.tee $6 + i32.const 0 + local.get $6 + call $~lib/string/String#substring + local.tee $5 i32.store offset=4 global.get $~lib/memory/__stack_pointer + local.get $0 local.get $6 i32.const 1 - call $~lib/array/Array<~lib/string/String>#__get + i32.add + global.get $~lib/builtins/i32.MAX_VALUE + call $~lib/string/String#substring local.tee $7 i32.store offset=8 global.get $~lib/memory/__stack_pointer local.get $7 i32.const 2496 - local.set $10 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $10 + local.get $16 i32.store - local.get $10 + local.get $16 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#split local.tee $8 @@ -6443,196 +6480,158 @@ local.get $8 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.set $10 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $10 + local.get $16 i32.store offset=16 - local.get $10 + local.get $16 i32.const 0 call $~lib/number/I32.parseInt local.set $1 local.get $8 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.set $10 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $10 + local.get $16 i32.store offset=16 - local.get $10 + local.get $16 i32.const 0 call $~lib/number/I32.parseInt local.set $2 + global.get $~lib/memory/__stack_pointer local.get $8 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=16 - local.get $10 + local.tee $9 + i32.store offset=20 + local.get $9 i32.const 2528 - local.set $10 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $10 + local.get $16 i32.store - local.get $10 + local.get $16 i32.const 0 - call $~lib/string/String#includes + call $~lib/string/String#indexOf + local.set $10 + local.get $10 + i32.const -1 + i32.xor if - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.const 2 - call $~lib/array/Array<~lib/string/String>#__get - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=16 - local.get $10 - i32.const 2528 - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store - local.get $10 - global.get $~lib/builtins/i32.MAX_VALUE - call $~lib/string/String#split - local.tee $9 - i32.store offset=20 local.get $9 i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - local.set $10 - global.get $~lib/memory/__stack_pointer local.get $10 + call $~lib/string/String#substring + local.set $16 + global.get $~lib/memory/__stack_pointer + local.get $16 i32.store offset=16 - local.get $10 + local.get $16 i32.const 0 call $~lib/number/I32.parseInt local.set $3 local.get $9 + local.get $10 i32.const 1 - call $~lib/array/Array<~lib/string/String>#__get - local.set $10 + i32.add + global.get $~lib/builtins/i32.MAX_VALUE + call $~lib/string/String#substring + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $10 + local.get $16 i32.store offset=16 - local.get $10 + local.get $16 i32.const 0 call $~lib/number/I32.parseInt local.set $4 else - local.get $8 - i32.const 2 - call $~lib/array/Array<~lib/string/String>#__get - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=16 - local.get $10 + local.get $9 i32.const 0 call $~lib/number/I32.parseInt local.set $3 end - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - local.tee $5 - i32.store offset=24 - else - local.get $0 - local.set $5 end global.get $~lib/memory/__stack_pointer local.get $5 i32.const 2432 - local.set $10 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $10 + local.get $16 i32.store - local.get $10 + local.get $16 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#split - local.tee $8 - i32.store offset=12 - local.get $8 + local.tee $11 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + local.get $11 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store - local.get $10 + local.tee $12 + i32.store offset=28 + local.get $12 call $~lib/string/String#get:length i32.const 2 i32.eq if (result i32) i32.const 3104 - local.set $10 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $10 + local.get $16 i32.store - local.get $10 - local.get $8 - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=28 - local.get $10 + local.get $16 + local.get $12 call $~lib/string/String.__concat else - local.get $8 - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get + local.get $12 end - local.set $10 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $10 + local.get $16 i32.store offset=16 - local.get $10 + local.get $16 i32.const 0 call $~lib/number/I32.parseInt - local.set $7 - local.get $8 + local.set $13 + local.get $11 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.set $10 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $10 + local.get $16 i32.store offset=16 - local.get $10 + local.get $16 i32.const 0 call $~lib/number/I32.parseInt - local.set $6 - local.get $8 + local.set $14 + local.get $11 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get - local.set $10 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $10 + local.get $16 i32.store offset=16 - local.get $10 + local.get $16 i32.const 0 call $~lib/number/I32.parseInt - local.set $9 + local.set $15 i32.const 0 - local.get $7 - local.get $6 - local.get $9 + local.get $13 + local.get $14 + local.get $15 local.get $1 local.get $2 local.get $3 local.get $4 call $~lib/date/epochMillis call $~lib/date/Date#constructor - local.set $10 + local.set $16 global.get $~lib/memory/__stack_pointer i32.const 32 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 + local.get $16 ) (func $start:std/date (local $0 i32) @@ -7729,9 +7728,6 @@ i32.store end local.get $0 - i64.const 0 - call $~lib/date/Date#set:epochMillis - local.get $0 local.get $1 call $~lib/date/Date#set:epochMillis local.get $0 @@ -8084,6 +8080,139 @@ global.set $~lib/memory/__stack_pointer local.get $6 ) + (func $~lib/string/String#substring (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) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 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 + call $~lib/string/String#get:length + local.set $3 + local.get $1 + local.tee $4 + i32.const 0 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.tee $5 + local.get $3 + local.tee $4 + local.get $5 + local.get $4 + i32.lt_s + select + local.set $6 + local.get $2 + local.tee $4 + i32.const 0 + local.tee $5 + local.get $4 + local.get $5 + i32.gt_s + select + local.tee $5 + local.get $3 + local.tee $4 + local.get $5 + local.get $4 + i32.lt_s + select + local.set $7 + local.get $6 + local.tee $4 + local.get $7 + local.tee $5 + local.get $4 + local.get $5 + i32.lt_s + select + i32.const 1 + i32.shl + local.set $8 + local.get $6 + local.tee $5 + local.get $7 + local.tee $4 + local.get $5 + local.get $4 + i32.gt_s + select + i32.const 1 + i32.shl + local.set $9 + local.get $9 + local.get $8 + i32.sub + local.set $10 + local.get $10 + i32.eqz + if + i32.const 2400 + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + end + local.get $8 + i32.eqz + if (result i32) + local.get $9 + local.get $3 + i32.const 1 + i32.shl + i32.eq + else + i32.const 0 + end + if + local.get $0 + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + end + global.get $~lib/memory/__stack_pointer + local.get $10 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $11 + i32.store + local.get $11 + local.get $0 + local.get $8 + i32.add + local.get $10 + call $~lib/memory/memory.copy + local.get $11 + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + ) (func $~lib/rt/__newArray (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) (local $5 i32) From 657437d1984a8dc95d86b3ae33e3c9b264d0fa89 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Wed, 14 Apr 2021 11:11:57 +0300 Subject: [PATCH 02/47] simplify --- std/assembly/date.ts | 7 +- tests/compiler/std/date.optimized.wat | 172 ++++++++++++------------- tests/compiler/std/date.untouched.wat | 174 ++++++++++++-------------- 3 files changed, 167 insertions(+), 186 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 36f0090112..aa5740cefb 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -62,10 +62,11 @@ export class Date { } // parse the YYYY-MM-DD component var parts = dateString.split("-"); - var y = parts[0]; - var year = I32.parseInt(y.length == 2 ? "19" + y : y); - var month = I32.parseInt(parts[1]); + var day = I32.parseInt(parts[2]); + var month = I32.parseInt(parts[1]); + var year = I32.parseInt(parts[0]); + if (year < 100) year += 1900; return new Date(epochMillis(year, month, day, hour, min, sec, ms)); } diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index e95a3d3c40..a7cf11cacc 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -65,24 +65,22 @@ (data (i32.const 2488) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") (data (i32.const 2524) "|") (data (i32.const 2536) "\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") - (data (i32.const 2652) "\1c") - (data (i32.const 2664) "\01\00\00\00\04\00\00\001\009") - (data (i32.const 2684) ",") - (data (i32.const 2696) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") - (data (i32.const 2732) ",") - (data (i32.const 2744) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") - (data (i32.const 2780) ",") - (data (i32.const 2792) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002") - (data (i32.const 2828) ",") - (data (i32.const 2840) "\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002") - (data (i32.const 2876) "<") - (data (i32.const 2888) "\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006") - (data (i32.const 2940) "L") - (data (i32.const 2952) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") - (data (i32.const 3020) "L") - (data (i32.const 3032) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") - (data (i32.const 3104) "\06\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 3132) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") + (data (i32.const 2652) ",") + (data (i32.const 2664) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") + (data (i32.const 2700) ",") + (data (i32.const 2712) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") + (data (i32.const 2748) ",") + (data (i32.const 2760) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002") + (data (i32.const 2796) ",") + (data (i32.const 2808) "\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002") + (data (i32.const 2844) "<") + (data (i32.const 2856) "\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006") + (data (i32.const 2908) "L") + (data (i32.const 2920) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") + (data (i32.const 2988) "L") + (data (i32.const 3000) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") + (data (i32.const 3072) "\06\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 3100) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -96,7 +94,7 @@ (global $~lib/date/year (mut i32) (i32.const 0)) (global $~lib/date/day (mut i32) (i32.const 0)) (global $~lib/date/month (mut i32) (i32.const 0)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 19540)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 19508)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -318,7 +316,7 @@ if i32.const 0 local.get $0 - i32.const 19540 + i32.const 19508 i32.lt_u local.get $0 i32.load offset=8 @@ -364,7 +362,7 @@ i32.const 1 else local.get $1 - i32.const 3104 + i32.const 3072 i32.load i32.gt_u if @@ -378,7 +376,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 3108 + i32.const 3076 i32.add i32.load i32.const 32 @@ -952,10 +950,10 @@ if unreachable end - i32.const 19552 + i32.const 19520 i32.const 0 i32.store - i32.const 21120 + i32.const 21088 i32.const 0 i32.store loop $for-loop|0 @@ -966,7 +964,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 19552 + i32.const 19520 i32.add i32.const 0 i32.store offset=4 @@ -984,7 +982,7 @@ i32.add i32.const 2 i32.shl - i32.const 19552 + i32.const 19520 i32.add i32.const 0 i32.store offset=96 @@ -1002,13 +1000,13 @@ br $for-loop|0 end end - i32.const 19552 - i32.const 21124 + i32.const 19520 + i32.const 21092 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 19552 + i32.const 19520 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -1087,7 +1085,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 19540 + i32.const 19508 i32.lt_u if local.get $0 @@ -1177,7 +1175,7 @@ unreachable end local.get $0 - i32.const 19540 + i32.const 19508 i32.lt_u if local.get $0 @@ -1200,7 +1198,7 @@ i32.const 4 i32.add local.tee $1 - i32.const 19540 + i32.const 19508 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -2040,7 +2038,7 @@ if i32.const 1504 i32.const 1568 - i32.const 120 + i32.const 121 i32.const 34 call $~lib/builtins/abort unreachable @@ -2070,7 +2068,7 @@ if i32.const 1504 i32.const 1568 - i32.const 125 + i32.const 126 i32.const 34 call $~lib/builtins/abort unreachable @@ -2100,7 +2098,7 @@ if i32.const 1504 i32.const 1568 - i32.const 130 + i32.const 131 i32.const 34 call $~lib/builtins/abort unreachable @@ -2171,7 +2169,7 @@ if i32.const 1504 i32.const 1568 - i32.const 136 + i32.const 137 i32.const 56 call $~lib/builtins/abort unreachable @@ -2203,7 +2201,7 @@ if i32.const 1504 i32.const 1568 - i32.const 143 + i32.const 144 i32.const 34 call $~lib/builtins/abort unreachable @@ -3341,11 +3339,11 @@ ) (func $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 3156 + i32.const 3124 i32.lt_s if - i32.const 19568 - i32.const 19616 + i32.const 19536 + i32.const 19584 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3938,9 +3936,8 @@ (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) global.get $~lib/memory/__stack_pointer - i32.const 32 + i32.const 28 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check @@ -3954,8 +3951,8 @@ i64.const 0 i64.store offset=16 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=24 + i32.const 0 + i32.store offset=24 local.get $0 local.set $1 global.get $~lib/memory/__stack_pointer @@ -4068,47 +4065,30 @@ local.get $1 i32.const 2000 call $~lib/string/String#split - local.tee $1 - i32.store offset=24 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get local.tee $0 - i32.store offset=28 + i32.store offset=24 local.get $0 - i32.const 20 - i32.sub - i32.load offset=16 - i32.const 1 - i32.shr_u i32.const 2 - i32.eq - if - global.get $~lib/memory/__stack_pointer - i32.const 2672 - i32.store - i32.const 2672 - local.get $0 - call $~lib/string/String.__concat - local.set $0 - end + call $~lib/array/Array<~lib/string/String>#__get + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=16 - local.get $0 - call $~lib/util/string/strtol local.get $1 + call $~lib/util/string/strtol + local.set $2 + local.get $0 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=16 - local.get $0 - call $~lib/util/string/strtol local.get $1 - i32.const 2 + call $~lib/util/string/strtol + local.set $1 + local.get $0 + i32.const 0 call $~lib/array/Array<~lib/string/String>#__get local.set $0 global.get $~lib/memory/__stack_pointer @@ -4116,6 +4096,18 @@ i32.store offset=16 local.get $0 call $~lib/util/string/strtol + local.tee $0 + i32.const 100 + i32.lt_s + if (result i32) + local.get $0 + i32.const 1900 + i32.add + else + local.get $0 + end + local.get $1 + local.get $2 local.get $4 local.get $5 local.get $3 @@ -4123,7 +4115,7 @@ call $~lib/date/epochMillis call $~lib/date/Date#constructor global.get $~lib/memory/__stack_pointer - i32.const 32 + i32.const 28 i32.add global.set $~lib/memory/__stack_pointer ) @@ -4198,7 +4190,7 @@ memory.size i32.const 16 i32.shl - i32.const 19540 + i32.const 19508 i32.sub i32.const 1 i32.shr_u @@ -4934,10 +4926,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2704 + i32.const 2672 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2704 + i32.const 2672 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -4954,10 +4946,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2752 + i32.const 2720 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2752 + i32.const 2720 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -4974,9 +4966,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2800 + i32.const 2768 i32.store offset=8 - i32.const 2800 + i32.const 2768 call $~lib/date/Date.fromString local.set $0 global.get $~lib/memory/__stack_pointer @@ -4985,9 +4977,9 @@ local.get $0 i64.load global.get $~lib/memory/__stack_pointer - i32.const 2848 + i32.const 2816 i32.store offset=8 - i32.const 2848 + i32.const 2816 call $~lib/date/Date.fromString local.set $0 global.get $~lib/memory/__stack_pointer @@ -5005,10 +4997,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2896 + i32.const 2864 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2896 + i32.const 2864 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5025,10 +5017,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2960 + i32.const 2928 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2960 + i32.const 2928 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5045,10 +5037,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3040 + i32.const 3008 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3040 + i32.const 3008 call $~lib/date/Date.fromString local.tee $0 i32.store diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index ccf6866166..92facd85d2 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -51,15 +51,14 @@ (data (i32.const 2860) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") (data (i32.const 2908) ",\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 2956) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3084) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\04\00\00\001\009\00\00\00\00\00\00\00\00\00") - (data (i32.const 3116) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3164) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004\00\00\00\00\00\00\00\00\00") - (data (i32.const 3212) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00") - (data (i32.const 3260) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3308) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00\00\00\00\00\00\00") - (data (i32.const 3372) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3452) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3536) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") + (data (i32.const 3084) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3132) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004\00\00\00\00\00\00\00\00\00") + (data (i32.const 3180) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00") + (data (i32.const 3228) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3276) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00\00\00\00\00\00\00") + (data (i32.const 3340) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3420) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3504) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") (table $0 1 funcref) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) @@ -77,10 +76,10 @@ (global $~lib/date/day (mut i32) (i32.const 0)) (global $~lib/date/month (mut i32) (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) - (global $~lib/rt/__rtti_base i32 (i32.const 3536)) - (global $~lib/memory/__data_end i32 (i32.const 3588)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 19972)) - (global $~lib/memory/__heap_base i32 (i32.const 19972)) + (global $~lib/rt/__rtti_base i32 (i32.const 3504)) + (global $~lib/memory/__data_end i32 (i32.const 3556)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 19940)) + (global $~lib/memory/__heap_base i32 (i32.const 19940)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -2712,7 +2711,7 @@ if i32.const 480 i32.const 544 - i32.const 120 + i32.const 121 i32.const 34 call $~lib/builtins/abort unreachable @@ -2744,7 +2743,7 @@ if i32.const 480 i32.const 544 - i32.const 125 + i32.const 126 i32.const 34 call $~lib/builtins/abort unreachable @@ -2776,7 +2775,7 @@ if i32.const 480 i32.const 544 - i32.const 130 + i32.const 131 i32.const 34 call $~lib/builtins/abort unreachable @@ -2864,7 +2863,7 @@ if i32.const 480 i32.const 544 - i32.const 136 + i32.const 137 i32.const 56 call $~lib/builtins/abort unreachable @@ -2901,7 +2900,7 @@ if i32.const 480 i32.const 544 - i32.const 143 + i32.const 144 i32.const 34 call $~lib/builtins/abort unreachable @@ -5683,8 +5682,8 @@ global.get $~lib/memory/__data_end i32.lt_s if - i32.const 20000 - i32.const 20048 + i32.const 19968 + i32.const 20016 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -6407,9 +6406,8 @@ (local $13 i32) (local $14 i32) (local $15 i32) - (local $16 i32) global.get $~lib/memory/__stack_pointer - i32.const 32 + i32.const 28 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check @@ -6423,8 +6421,8 @@ i64.const 0 i64.store offset=16 global.get $~lib/memory/__stack_pointer - i64.const 0 - i64.store offset=24 + i32.const 0 + i32.store offset=24 i32.const 0 local.set $1 i32.const 0 @@ -6437,11 +6435,11 @@ local.set $5 local.get $0 i32.const 2464 - local.set $16 + local.set $15 global.get $~lib/memory/__stack_pointer - local.get $16 + local.get $15 i32.store - local.get $16 + local.get $15 i32.const 0 call $~lib/string/String#indexOf local.set $6 @@ -6468,11 +6466,11 @@ global.get $~lib/memory/__stack_pointer local.get $7 i32.const 2496 - local.set $16 + local.set $15 global.get $~lib/memory/__stack_pointer - local.get $16 + local.get $15 i32.store - local.get $16 + local.get $15 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#split local.tee $8 @@ -6480,22 +6478,22 @@ local.get $8 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.set $16 + local.set $15 global.get $~lib/memory/__stack_pointer - local.get $16 + local.get $15 i32.store offset=16 - local.get $16 + local.get $15 i32.const 0 call $~lib/number/I32.parseInt local.set $1 local.get $8 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.set $16 + local.set $15 global.get $~lib/memory/__stack_pointer - local.get $16 + local.get $15 i32.store offset=16 - local.get $16 + local.get $15 i32.const 0 call $~lib/number/I32.parseInt local.set $2 @@ -6507,11 +6505,11 @@ i32.store offset=20 local.get $9 i32.const 2528 - local.set $16 + local.set $15 global.get $~lib/memory/__stack_pointer - local.get $16 + local.get $15 i32.store - local.get $16 + local.get $15 i32.const 0 call $~lib/string/String#indexOf local.set $10 @@ -6523,11 +6521,11 @@ i32.const 0 local.get $10 call $~lib/string/String#substring - local.set $16 + local.set $15 global.get $~lib/memory/__stack_pointer - local.get $16 + local.get $15 i32.store offset=16 - local.get $16 + local.get $15 i32.const 0 call $~lib/number/I32.parseInt local.set $3 @@ -6537,11 +6535,11 @@ i32.add global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#substring - local.set $16 + local.set $15 global.get $~lib/memory/__stack_pointer - local.get $16 + local.get $15 i32.store offset=16 - local.get $16 + local.get $15 i32.const 0 call $~lib/number/I32.parseInt local.set $4 @@ -6555,83 +6553,73 @@ global.get $~lib/memory/__stack_pointer local.get $5 i32.const 2432 - local.set $16 + local.set $15 global.get $~lib/memory/__stack_pointer - local.get $16 + local.get $15 i32.store - local.get $16 + local.get $15 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#split local.tee $11 i32.store offset=24 - global.get $~lib/memory/__stack_pointer local.get $11 - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - local.tee $12 - i32.store offset=28 - local.get $12 - call $~lib/string/String#get:length i32.const 2 - i32.eq - if (result i32) - i32.const 3104 - local.set $16 - global.get $~lib/memory/__stack_pointer - local.get $16 - i32.store - local.get $16 - local.get $12 - call $~lib/string/String.__concat - else - local.get $12 - end - local.set $16 + call $~lib/array/Array<~lib/string/String>#__get + local.set $15 global.get $~lib/memory/__stack_pointer - local.get $16 + local.get $15 i32.store offset=16 - local.get $16 + local.get $15 i32.const 0 call $~lib/number/I32.parseInt - local.set $13 + local.set $12 local.get $11 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.set $16 + local.set $15 global.get $~lib/memory/__stack_pointer - local.get $16 + local.get $15 i32.store offset=16 - local.get $16 + local.get $15 i32.const 0 call $~lib/number/I32.parseInt - local.set $14 + local.set $13 local.get $11 - i32.const 2 + i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.set $16 + local.set $15 global.get $~lib/memory/__stack_pointer - local.get $16 + local.get $15 i32.store offset=16 - local.get $16 + local.get $15 i32.const 0 call $~lib/number/I32.parseInt - local.set $15 + local.set $14 + local.get $14 + i32.const 100 + i32.lt_s + if + local.get $14 + i32.const 1900 + i32.add + local.set $14 + end i32.const 0 - local.get $13 local.get $14 - local.get $15 + local.get $13 + local.get $12 local.get $1 local.get $2 local.get $3 local.get $4 call $~lib/date/epochMillis call $~lib/date/Date#constructor - local.set $16 + local.set $15 global.get $~lib/memory/__stack_pointer - i32.const 32 + i32.const 28 i32.add global.set $~lib/memory/__stack_pointer - local.get $16 + local.get $15 ) (func $start:std/date (local $0 i32) @@ -7552,7 +7540,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3136 + i32.const 3104 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7575,7 +7563,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3184 + i32.const 3152 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7597,7 +7585,7 @@ call $~lib/builtins/abort unreachable end - i32.const 3232 + i32.const 3200 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7610,7 +7598,7 @@ i32.store offset=4 local.get $8 call $~lib/date/Date#getTime - i32.const 3280 + i32.const 3248 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7634,7 +7622,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3328 + i32.const 3296 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7657,7 +7645,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3392 + i32.const 3360 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7680,7 +7668,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3472 + i32.const 3440 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 From 1dfbe7f369da3228cbd6fc474647557c83d0270c Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Wed, 14 Apr 2021 13:08:23 +0300 Subject: [PATCH 03/47] refactor more --- std/assembly/date.ts | 28 +- tests/compiler/std/date.optimized.wat | 102 +++++--- tests/compiler/std/date.untouched.wat | 353 +++++++++++++------------- 3 files changed, 248 insertions(+), 235 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index aa5740cefb..8e3f2ae332 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -10,10 +10,7 @@ import { now as Date_now } from "./bindings/Date"; // ymdFromEpochDays returns values via globals to avoid allocations // @ts-ignore: decorator -@lazy let - year: i32, - month: i32, - day: i32; +@lazy let month: i32, day: i32; export class Date { @inline static UTC( @@ -83,17 +80,16 @@ export class Date { } getUTCFullYear(): i32 { - ymdFromEpochDays(i32(this.epochMillis / MILLIS_PER_DAY)); - return year; + return this.computeUTCDate(); } getUTCMonth(): i32 { - ymdFromEpochDays(i32(this.epochMillis / MILLIS_PER_DAY)); + this.computeUTCDate(); return month - 1; } getUTCDate(): i32 { - ymdFromEpochDays(i32(this.epochMillis / MILLIS_PER_DAY)); + this.computeUTCDate(); return day; } @@ -133,7 +129,7 @@ export class Date { } setUTCDate(value: i32): void { - ymdFromEpochDays(i32(this.epochMillis / MILLIS_PER_DAY)); + var year = this.computeUTCDate(); if (value < 1 || value > daysInMonth(year, month)) throw new RangeError(E_VALUEOUTOFRANGE); var ms = this.epochMillis % MILLIS_PER_DAY; this.epochMillis = @@ -142,7 +138,7 @@ export class Date { setUTCMonth(value: i32): void { if (value < 1 || value > 12) throw new RangeError(E_VALUEOUTOFRANGE); - ymdFromEpochDays(i32(this.epochMillis / MILLIS_PER_DAY)); + var year = this.computeUTCDate(); var ms = this.epochMillis % MILLIS_PER_DAY; this.epochMillis = i64(daysSinceEpoch(year, value + 1, day)) * MILLIS_PER_DAY + ms; @@ -156,8 +152,7 @@ export class Date { } toISOString(): string { - ymdFromEpochDays(i32(this.epochMillis / MILLIS_PER_DAY)); - + var year = this.computeUTCDate(); var yearStr = year.toString(); if (yearStr.length > 4) { yearStr = "+" + yearStr.padStart(6, "0"); @@ -180,6 +175,10 @@ export class Date { "Z" ); } + + private computeUTCDate(): i32 { + return ymdFromEpochDays(i32(this.epochMillis / MILLIS_PER_DAY)); + } } function epochMillis( @@ -218,17 +217,18 @@ function daysInMonth(year: i32, month: i32): i32 { } // see: http://howardhinnant.github.io/date_algorithms.html#civil_from_days -function ymdFromEpochDays(z: i32): void { +function ymdFromEpochDays(z: i32): i32 { z += 719468; var era = floorDiv(z, 146097); var doe = z - era * 146097; // [0, 146096] var yoe = (doe - doe / 1460 + doe / 36524 - doe / 146096) / 365; // [0, 399] - year = yoe + era * 400; + var year = yoe + era * 400; var doy = doe - (365 * yoe + yoe / 4 - yoe / 100); // [0, 365] var mp = (5 * doy + 2) / 153; // [0, 11] day = doy - (153 * mp + 2) / 5 + 1; // [1, 31] month = mp + (mp < 10 ? 3 : -9); // [1, 12] year += i32(month <= 2); + return year; } // http://howardhinnant.github.io/date_algorithms.html#days_from_civil diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index a7cf11cacc..ebb1feed44 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -3,8 +3,8 @@ (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) - (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $none_=>_i32 (func (result i32))) @@ -91,7 +91,6 @@ (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/date/year (mut i32) (i32.const 0)) (global $~lib/date/day (mut i32) (i32.const 0)) (global $~lib/date/month (mut i32) (i32.const 0)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 19508)) @@ -1863,9 +1862,10 @@ call $~lib/memory/memory.fill local.get $1 ) - (func $~lib/date/ymdFromEpochDays (param $0 i32) + (func $~lib/date/ymdFromEpochDays (param $0 i32) (result i32) (local $1 i32) (local $2 i32) + (local $3 i32) local.get $0 i32.const 719468 i32.add @@ -1900,12 +1900,7 @@ i32.sub i32.const 365 i32.div_s - local.tee $1 - local.get $2 - i32.const 400 - i32.mul - i32.add - global.set $~lib/date/year + local.set $1 local.get $0 local.get $1 i32.const 365 @@ -1919,7 +1914,7 @@ i32.div_s i32.sub i32.sub - local.tee $1 + local.tee $3 i32.const 5 i32.mul i32.const 2 @@ -1927,7 +1922,7 @@ i32.const 153 i32.div_s local.set $0 - local.get $1 + local.get $3 local.get $0 i32.const 153 i32.mul @@ -1948,21 +1943,15 @@ select i32.add global.set $~lib/date/month - global.get $~lib/date/year + local.get $1 + local.get $2 + i32.const 400 + i32.mul + i32.add global.get $~lib/date/month i32.const 2 i32.le_s i32.add - global.set $~lib/date/year - ) - (func $~lib/date/Date#getUTCFullYear (param $0 i32) (result i32) - local.get $0 - i64.load - i64.const 86400000 - i64.div_s - i32.wrap_i64 - call $~lib/date/ymdFromEpochDays - global.get $~lib/date/year ) (func $~lib/date/Date#getUTCMonth (param $0 i32) (result i32) local.get $0 @@ -1971,6 +1960,7 @@ i64.div_s i32.wrap_i64 call $~lib/date/ymdFromEpochDays + drop global.get $~lib/date/month i32.const 1 i32.sub @@ -1982,6 +1972,7 @@ i64.div_s i32.wrap_i64 call $~lib/date/ymdFromEpochDays + drop global.get $~lib/date/day ) (func $~lib/date/Date#getUTCHours (param $0 i32) (result i32) @@ -2038,7 +2029,7 @@ if i32.const 1504 i32.const 1568 - i32.const 121 + i32.const 117 i32.const 34 call $~lib/builtins/abort unreachable @@ -2068,7 +2059,7 @@ if i32.const 1504 i32.const 1568 - i32.const 126 + i32.const 122 i32.const 34 call $~lib/builtins/abort unreachable @@ -2098,7 +2089,7 @@ if i32.const 1504 i32.const 1568 - i32.const 131 + i32.const 127 i32.const 34 call $~lib/builtins/abort unreachable @@ -2118,12 +2109,14 @@ ) (func $~lib/date/Date#setUTCDate (param $0 i32) (param $1 i32) (local $2 i32) + (local $3 i32) local.get $0 i64.load i64.const 86400000 i64.div_s i32.wrap_i64 call $~lib/date/ymdFromEpochDays + local.set $2 local.get $1 i32.const 1 i32.lt_s @@ -2133,8 +2126,7 @@ local.get $1 i32.const 0 i32.const 1 - global.get $~lib/date/year - local.tee $2 + local.get $2 i32.const 400 i32.rem_s i32.eqz @@ -2151,8 +2143,8 @@ i32.const 28 i32.add global.get $~lib/date/month - local.tee $2 - local.get $2 + local.tee $3 + local.get $3 i32.const 8 i32.ge_s i32.add @@ -2160,7 +2152,7 @@ i32.and i32.const 30 i32.add - local.get $2 + local.get $3 i32.const 2 i32.eq select @@ -2169,7 +2161,7 @@ if i32.const 1504 i32.const 1568 - i32.const 137 + i32.const 133 i32.const 56 call $~lib/builtins/abort unreachable @@ -2179,7 +2171,7 @@ i64.load i64.const 86400000 i64.rem_s - global.get $~lib/date/year + local.get $2 global.get $~lib/date/month local.get $1 call $~lib/date/daysSinceEpoch @@ -2190,6 +2182,7 @@ i64.store ) (func $~lib/date/Date#setUTCMonth (param $0 i32) (param $1 i32) + (local $2 i32) i32.const 1 local.get $1 i32.const 12 @@ -2201,7 +2194,7 @@ if i32.const 1504 i32.const 1568 - i32.const 144 + i32.const 140 i32.const 34 call $~lib/builtins/abort unreachable @@ -2212,12 +2205,13 @@ i64.div_s i32.wrap_i64 call $~lib/date/ymdFromEpochDays + local.set $2 local.get $0 local.get $0 i64.load i64.const 86400000 i64.rem_s - global.get $~lib/date/year + local.get $2 local.get $1 i32.const 1 i32.add @@ -2236,6 +2230,7 @@ i64.div_s i32.wrap_i64 call $~lib/date/ymdFromEpochDays + drop local.get $0 local.get $0 i64.load @@ -3406,8 +3401,9 @@ i64.div_s i32.wrap_i64 call $~lib/date/ymdFromEpochDays + local.set $1 global.get $~lib/memory/__stack_pointer - global.get $~lib/date/year + local.get $1 call $~lib/number/I32#toString local.tee $1 i32.store @@ -4242,7 +4238,11 @@ local.tee $0 i32.store local.get $0 - call $~lib/date/Date#getUTCFullYear + i64.load + i64.const 86400000 + i64.div_s + i32.wrap_i64 + call $~lib/date/ymdFromEpochDays i32.const 189512 i32.ne if @@ -4334,7 +4334,11 @@ local.tee $0 i32.store local.get $0 - call $~lib/date/Date#getUTCFullYear + i64.load + i64.const 86400000 + i64.div_s + i32.wrap_i64 + call $~lib/date/ymdFromEpochDays i32.const 1973 i32.ne if @@ -4647,7 +4651,11 @@ local.tee $0 i32.store local.get $0 - call $~lib/date/Date#getUTCFullYear + i64.load + i64.const 86400000 + i64.div_s + i32.wrap_i64 + call $~lib/date/ymdFromEpochDays i32.const 1973 i32.ne if @@ -4786,7 +4794,11 @@ local.tee $0 i32.store local.get $0 - call $~lib/date/Date#getUTCFullYear + i64.load + i64.const 86400000 + i64.div_s + i32.wrap_i64 + call $~lib/date/ymdFromEpochDays i32.const 253616 i32.ne if @@ -4801,7 +4813,11 @@ i32.const 1976 call $~lib/date/Date#setUTCFullYear local.get $0 - call $~lib/date/Date#getUTCFullYear + i64.load + i64.const 86400000 + i64.div_s + i32.wrap_i64 + call $~lib/date/ymdFromEpochDays i32.const 1976 i32.ne if @@ -4816,7 +4832,11 @@ i32.const 20212 call $~lib/date/Date#setUTCFullYear local.get $0 - call $~lib/date/Date#getUTCFullYear + i64.load + i64.const 86400000 + i64.div_s + i32.wrap_i64 + call $~lib/date/ymdFromEpochDays i32.const 20212 i32.ne if diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 92facd85d2..97ea070145 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -72,7 +72,6 @@ (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/date/year (mut i32) (i32.const 0)) (global $~lib/date/day (mut i32) (i32.const 0)) (global $~lib/date/month (mut i32) (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) @@ -2511,7 +2510,7 @@ call $~lib/date/Date#set:epochMillis local.get $1 ) - (func $~lib/date/ymdFromEpochDays (param $0 i32) + (func $~lib/date/ymdFromEpochDays (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -2519,6 +2518,7 @@ (local $5 i32) (local $6 i32) (local $7 i32) + (local $8 i32) local.get $0 i32.const 719468 i32.add @@ -2569,7 +2569,7 @@ i32.const 400 i32.mul i32.add - global.set $~lib/date/year + local.set $6 local.get $4 i32.const 365 local.get $5 @@ -2583,18 +2583,18 @@ i32.div_s i32.sub i32.sub - local.set $6 + local.set $7 i32.const 5 - local.get $6 + local.get $7 i32.mul i32.const 2 i32.add i32.const 153 i32.div_s - local.set $7 - local.get $6 - i32.const 153 + local.set $8 local.get $7 + i32.const 153 + local.get $8 i32.mul i32.const 2 i32.add @@ -2604,8 +2604,8 @@ i32.const 1 i32.add global.set $~lib/date/day - local.get $7 - local.get $7 + local.get $8 + local.get $8 i32.const 10 i32.lt_s if (result i32) @@ -2615,40 +2615,38 @@ end i32.add global.set $~lib/date/month - global.get $~lib/date/year + local.get $6 global.get $~lib/date/month i32.const 2 i32.le_s i32.add - global.set $~lib/date/year + local.set $6 + local.get $6 ) - (func $~lib/date/Date#getUTCFullYear (param $0 i32) (result i32) + (func $~lib/date/Date#computeUTCDate (param $0 i32) (result i32) local.get $0 i64.load i64.const 86400000 i64.div_s i32.wrap_i64 call $~lib/date/ymdFromEpochDays - global.get $~lib/date/year + ) + (func $~lib/date/Date#getUTCFullYear (param $0 i32) (result i32) + local.get $0 + call $~lib/date/Date#computeUTCDate ) (func $~lib/date/Date#getUTCMonth (param $0 i32) (result i32) local.get $0 - i64.load - i64.const 86400000 - i64.div_s - i32.wrap_i64 - call $~lib/date/ymdFromEpochDays + call $~lib/date/Date#computeUTCDate + drop global.get $~lib/date/month i32.const 1 i32.sub ) (func $~lib/date/Date#getUTCDate (param $0 i32) (result i32) local.get $0 - i64.load - i64.const 86400000 - i64.div_s - i32.wrap_i64 - call $~lib/date/ymdFromEpochDays + call $~lib/date/Date#computeUTCDate + drop global.get $~lib/date/day ) (func $~lib/date/Date#getUTCHours (param $0 i32) (result i32) @@ -2711,7 +2709,7 @@ if i32.const 480 i32.const 544 - i32.const 121 + i32.const 117 i32.const 34 call $~lib/builtins/abort unreachable @@ -2743,7 +2741,7 @@ if i32.const 480 i32.const 544 - i32.const 126 + i32.const 122 i32.const 34 call $~lib/builtins/abort unreachable @@ -2775,7 +2773,7 @@ if i32.const 480 i32.const 544 - i32.const 131 + i32.const 127 i32.const 34 call $~lib/builtins/abort unreachable @@ -2841,13 +2839,11 @@ end ) (func $~lib/date/Date#setUTCDate (param $0 i32) (param $1 i32) - (local $2 i64) + (local $2 i32) + (local $3 i64) local.get $0 - i64.load - i64.const 86400000 - i64.div_s - i32.wrap_i64 - call $~lib/date/ymdFromEpochDays + call $~lib/date/Date#computeUTCDate + local.set $2 local.get $1 i32.const 1 i32.lt_s @@ -2855,7 +2851,7 @@ i32.const 1 else local.get $1 - global.get $~lib/date/year + local.get $2 global.get $~lib/date/month call $~lib/date/daysInMonth i32.gt_s @@ -2863,7 +2859,7 @@ if i32.const 480 i32.const 544 - i32.const 137 + i32.const 133 i32.const 56 call $~lib/builtins/abort unreachable @@ -2872,21 +2868,22 @@ i64.load i64.const 86400000 i64.rem_s - local.set $2 + local.set $3 local.get $0 - global.get $~lib/date/year + local.get $2 global.get $~lib/date/month local.get $1 call $~lib/date/daysSinceEpoch i64.extend_i32_s i64.const 86400000 i64.mul - local.get $2 + local.get $3 i64.add call $~lib/date/Date#set:epochMillis ) (func $~lib/date/Date#setUTCMonth (param $0 i32) (param $1 i32) - (local $2 i64) + (local $2 i32) + (local $3 i64) local.get $1 i32.const 1 i32.lt_s @@ -2900,24 +2897,21 @@ if i32.const 480 i32.const 544 - i32.const 144 + i32.const 140 i32.const 34 call $~lib/builtins/abort unreachable end local.get $0 - i64.load - i64.const 86400000 - i64.div_s - i32.wrap_i64 - call $~lib/date/ymdFromEpochDays + call $~lib/date/Date#computeUTCDate + local.set $2 local.get $0 i64.load i64.const 86400000 i64.rem_s - local.set $2 + local.set $3 local.get $0 - global.get $~lib/date/year + local.get $2 local.get $1 i32.const 1 i32.add @@ -2926,7 +2920,7 @@ i64.extend_i32_s i64.const 86400000 i64.mul - local.get $2 + local.get $3 i64.add call $~lib/date/Date#set:epochMillis ) @@ -2938,6 +2932,7 @@ i64.div_s i32.wrap_i64 call $~lib/date/ymdFromEpochDays + drop local.get $0 i64.load i64.const 86400000 @@ -5693,6 +5688,7 @@ (func $~lib/date/Date#toISOString (param $0 i32) (result i32) (local $1 i32) (local $2 i32) + (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 112 i32.sub @@ -5741,299 +5737,296 @@ i64.const 0 i64.store offset=104 local.get $0 - i64.load - i64.const 86400000 - i64.div_s - i32.wrap_i64 - call $~lib/date/ymdFromEpochDays + call $~lib/date/Date#computeUTCDate + local.set $1 global.get $~lib/memory/__stack_pointer - global.get $~lib/date/year + local.get $1 i32.const 10 call $~lib/number/I32#toString - local.tee $1 + local.tee $2 i32.store - local.get $1 + local.get $2 call $~lib/string/String#get:length i32.const 4 i32.gt_s if global.get $~lib/memory/__stack_pointer i32.const 2368 - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=4 + local.get $3 local.get $2 - local.get $1 i32.const 6 i32.const 784 - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=12 - local.get $2 + local.get $3 call $~lib/string/String#padStart - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=8 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.tee $1 + local.tee $2 i32.store end - local.get $1 + local.get $2 i32.const 2432 - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=100 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=92 - local.get $2 + local.get $3 global.get $~lib/date/month i32.const 10 call $~lib/number/I32#toString - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=104 - local.get $2 + local.get $3 i32.const 2 i32.const 784 - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=108 - local.get $2 + local.get $3 call $~lib/string/String#padStart - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=96 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=84 - local.get $2 + local.get $3 i32.const 2432 - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=88 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=76 - local.get $2 + local.get $3 global.get $~lib/date/day i32.const 10 call $~lib/number/I32#toString - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=84 - local.get $2 + local.get $3 i32.const 2 i32.const 784 - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=92 - local.get $2 + local.get $3 call $~lib/string/String#padStart - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=80 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=68 - local.get $2 + local.get $3 i32.const 2464 - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=72 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=60 - local.get $2 + local.get $3 local.get $0 call $~lib/date/Date#getUTCHours i32.const 10 call $~lib/number/I32#toString - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=68 - local.get $2 + local.get $3 i32.const 2 i32.const 784 - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=76 - local.get $2 + local.get $3 call $~lib/string/String#padStart - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=64 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=52 - local.get $2 + local.get $3 i32.const 2496 - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=56 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=44 - local.get $2 + local.get $3 local.get $0 call $~lib/date/Date#getUTCMinutes i32.const 10 call $~lib/number/I32#toString - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=52 - local.get $2 + local.get $3 i32.const 2 i32.const 784 - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=60 - local.get $2 + local.get $3 call $~lib/string/String#padStart - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=48 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=36 - local.get $2 + local.get $3 i32.const 2496 - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=40 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=28 - local.get $2 + local.get $3 local.get $0 call $~lib/date/Date#getUTCSeconds i32.const 10 call $~lib/number/I32#toString - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=36 - local.get $2 + local.get $3 i32.const 2 i32.const 784 - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=44 - local.get $2 + local.get $3 call $~lib/string/String#padStart - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=32 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=12 - local.get $2 + local.get $3 i32.const 2528 - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=24 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=16 - local.get $2 + local.get $3 local.get $0 call $~lib/date/Date#getUTCMilliseconds i32.const 10 call $~lib/number/I32#toString - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=12 - local.get $2 + local.get $3 i32.const 3 i32.const 784 - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=28 - local.get $2 + local.get $3 call $~lib/string/String#padStart - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=20 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=4 - local.get $2 + local.get $3 i32.const 2560 - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $3 i32.store offset=8 - local.get $2 + local.get $3 call $~lib/string/String.__concat - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer i32.const 112 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $3 ) (func $~lib/string/String#split (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) From 916f674614607cac84e0c418bdc2856c0d4105a6 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Wed, 14 Apr 2021 13:22:14 +0300 Subject: [PATCH 04/47] precalc and cache UTC date's values --- std/assembly/date.ts | 62 +-- tests/compiler/std/date.optimized.wat | 513 ++++++++++---------- tests/compiler/std/date.untouched.wat | 665 ++++++++++++++------------ 3 files changed, 630 insertions(+), 610 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 8e3f2ae332..840f119aa4 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -10,9 +10,13 @@ import { now as Date_now } from "./bindings/Date"; // ymdFromEpochDays returns values via globals to avoid allocations // @ts-ignore: decorator -@lazy let month: i32, day: i32; +@lazy let _month: i32, _day: i32; export class Date { + private year: i32 = 0; + private month: i32 = 0; + private day: i32 = 0; + @inline static UTC( year: i32, month: i32 = 0, @@ -68,7 +72,11 @@ export class Date { return new Date(epochMillis(year, month, day, hour, min, sec, ms)); } - constructor(private epochMillis: i64) {} + constructor(private epochMillis: i64) { + this.year = ymdFromEpochDays(i32(epochMillis / MILLIS_PER_DAY)); + this.month = _month; + this.day = _day; + } getTime(): i64 { return this.epochMillis; @@ -76,21 +84,22 @@ export class Date { setTime(value: i64): i64 { this.epochMillis = value; + this.year = ymdFromEpochDays(i32(value / MILLIS_PER_DAY)); + this.month = _month; + this.day = _day; return value; } getUTCFullYear(): i32 { - return this.computeUTCDate(); + return this.year; } getUTCMonth(): i32 { - this.computeUTCDate(); - return month - 1; + return this.month - 1; } getUTCDate(): i32 { - this.computeUTCDate(); - return day; + return this.day; } getUTCHours(): i32 { @@ -110,50 +119,45 @@ export class Date { } setUTCMilliseconds(value: i32): void { - this.epochMillis += value - this.getUTCMilliseconds(); + this.setTime(this.epochMillis + value - this.getUTCMilliseconds()); } setUTCSeconds(value: i32): void { if (value < 0 || value > 59) throw new RangeError(E_VALUEOUTOFRANGE); - this.epochMillis += (value - this.getUTCSeconds()) * MILLIS_PER_SECOND; + this.setTime(this.epochMillis + (value - this.getUTCSeconds()) * MILLIS_PER_SECOND); } setUTCMinutes(value: i32): void { if (value < 0 || value > 59) throw new RangeError(E_VALUEOUTOFRANGE); - this.epochMillis += (value - this.getUTCMinutes()) * MILLIS_PER_MINUTE; + this.setTime(this.epochMillis + (value - this.getUTCMinutes()) * MILLIS_PER_MINUTE); } setUTCHours(value: i32): void { if (value < 0 || value > 23) throw new RangeError(E_VALUEOUTOFRANGE); - this.epochMillis += (value - this.getUTCHours()) * MILLIS_PER_HOUR; + this.setTime(this.epochMillis + (value - this.getUTCHours()) * MILLIS_PER_HOUR); } setUTCDate(value: i32): void { - var year = this.computeUTCDate(); + var year = this.year; + var month = this.month; if (value < 1 || value > daysInMonth(year, month)) throw new RangeError(E_VALUEOUTOFRANGE); var ms = this.epochMillis % MILLIS_PER_DAY; - this.epochMillis = - i64(daysSinceEpoch(year, month, value)) * MILLIS_PER_DAY + ms; + this.setTime(i64(daysSinceEpoch(year, month, value)) * MILLIS_PER_DAY + ms); } setUTCMonth(value: i32): void { if (value < 1 || value > 12) throw new RangeError(E_VALUEOUTOFRANGE); - var year = this.computeUTCDate(); var ms = this.epochMillis % MILLIS_PER_DAY; - this.epochMillis = - i64(daysSinceEpoch(year, value + 1, day)) * MILLIS_PER_DAY + ms; + this.setTime(i64(daysSinceEpoch(this.year, value + 1, this.day)) * MILLIS_PER_DAY + ms); } setUTCFullYear(value: i32): void { - ymdFromEpochDays(i32(this.epochMillis / MILLIS_PER_DAY)); var ms = this.epochMillis % MILLIS_PER_DAY; - this.epochMillis = - i64(daysSinceEpoch(value, month, day)) * MILLIS_PER_DAY + ms; + this.setTime(i64(daysSinceEpoch(value, this.month, this.day)) * MILLIS_PER_DAY + ms); } toISOString(): string { - var year = this.computeUTCDate(); - var yearStr = year.toString(); + var yearStr = this.year.toString(); if (yearStr.length > 4) { yearStr = "+" + yearStr.padStart(6, "0"); } @@ -161,9 +165,9 @@ export class Date { return ( yearStr + "-" + - month.toString().padStart(2, "0") + + this.month.toString().padStart(2, "0") + "-" + - day.toString().padStart(2, "0") + + this.day.toString().padStart(2, "0") + "T" + this.getUTCHours().toString().padStart(2, "0") + ":" + @@ -175,10 +179,6 @@ export class Date { "Z" ); } - - private computeUTCDate(): i32 { - return ymdFromEpochDays(i32(this.epochMillis / MILLIS_PER_DAY)); - } } function epochMillis( @@ -225,9 +225,9 @@ function ymdFromEpochDays(z: i32): i32 { var year = yoe + era * 400; var doy = doe - (365 * yoe + yoe / 4 - yoe / 100); // [0, 365] var mp = (5 * doy + 2) / 153; // [0, 11] - day = doy - (153 * mp + 2) / 5 + 1; // [1, 31] - month = mp + (mp < 10 ? 3 : -9); // [1, 12] - year += i32(month <= 2); + _day = doy - (153 * mp + 2) / 5 + 1; // [1, 31] + var mo = _month = mp + (mp < 10 ? 3 : -9); // [1, 12] + year += i32(mo <= 2); return year; } diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index ebb1feed44..e6a0d7379f 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -7,6 +7,7 @@ (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i64_=>_none (func (param i32 i64))) (type $none_=>_i32 (func (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) @@ -81,6 +82,8 @@ (data (i32.const 3000) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") (data (i32.const 3072) "\06\00\00\00 \00\00\00\00\00\00\00 ") (data (i32.const 3100) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") + (global $~lib/date/_day (mut i32) (i32.const 0)) + (global $~lib/date/_month (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -91,8 +94,6 @@ (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/date/day (mut i32) (i32.const 0)) - (global $~lib/date/month (mut i32) (i32.const 0)) (global $~lib/memory/__stack_pointer (mut i32) (i32.const 19508)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) @@ -181,6 +182,97 @@ i64.add i64.add ) + (func $~lib/date/ymdFromEpochDays (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + local.get $0 + i32.const 719468 + i32.add + local.tee $0 + local.get $0 + i32.const 146096 + i32.sub + local.get $0 + i32.const 0 + i32.ge_s + select + i32.const 146097 + i32.div_s + local.set $2 + local.get $0 + local.get $2 + i32.const 146097 + i32.mul + i32.sub + local.tee $0 + local.get $0 + i32.const 1460 + i32.div_s + i32.sub + local.get $0 + i32.const 36524 + i32.div_s + i32.add + local.get $0 + i32.const 146096 + i32.div_s + i32.sub + i32.const 365 + i32.div_s + local.set $1 + local.get $0 + local.get $1 + i32.const 365 + i32.mul + local.get $1 + i32.const 4 + i32.div_s + i32.add + local.get $1 + i32.const 100 + i32.div_s + i32.sub + i32.sub + local.tee $3 + i32.const 5 + i32.mul + i32.const 2 + i32.add + i32.const 153 + i32.div_s + local.set $0 + local.get $3 + local.get $0 + i32.const 153 + i32.mul + i32.const 2 + i32.add + i32.const 5 + i32.div_s + i32.sub + i32.const 1 + i32.add + global.set $~lib/date/_day + local.get $0 + i32.const 3 + i32.const -9 + local.get $0 + i32.const 10 + i32.lt_s + select + i32.add + global.set $~lib/date/_month + local.get $1 + local.get $2 + i32.const 400 + i32.mul + i32.add + global.get $~lib/date/_month + i32.const 2 + i32.le_s + i32.add + ) (func $~lib/rt/itcms/initLazy (param $0 i32) (result i32) local.get $0 local.get $0 @@ -1862,122 +1954,27 @@ call $~lib/memory/memory.fill local.get $1 ) - (func $~lib/date/ymdFromEpochDays (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) - (local $3 i32) - local.get $0 - i32.const 719468 - i32.add - local.tee $0 + (func $~lib/date/Date#setTime (param $0 i32) (param $1 i64) local.get $0 - i32.const 146096 - i32.sub - local.get $0 - i32.const 0 - i32.ge_s - select - i32.const 146097 - i32.div_s - local.set $2 - local.get $0 - local.get $2 - i32.const 146097 - i32.mul - i32.sub - local.tee $0 - local.get $0 - i32.const 1460 - i32.div_s - i32.sub - local.get $0 - i32.const 36524 - i32.div_s - i32.add - local.get $0 - i32.const 146096 - i32.div_s - i32.sub - i32.const 365 - i32.div_s - local.set $1 - local.get $0 - local.get $1 - i32.const 365 - i32.mul - local.get $1 - i32.const 4 - i32.div_s - i32.add local.get $1 - i32.const 100 - i32.div_s - i32.sub - i32.sub - local.tee $3 - i32.const 5 - i32.mul - i32.const 2 - i32.add - i32.const 153 - i32.div_s - local.set $0 - local.get $3 - local.get $0 - i32.const 153 - i32.mul - i32.const 2 - i32.add - i32.const 5 - i32.div_s - i32.sub - i32.const 1 - i32.add - global.set $~lib/date/day - local.get $0 - i32.const 3 - i32.const -9 + i64.store offset=16 local.get $0 - i32.const 10 - i32.lt_s - select - i32.add - global.set $~lib/date/month local.get $1 - local.get $2 - i32.const 400 - i32.mul - i32.add - global.get $~lib/date/month - i32.const 2 - i32.le_s - i32.add - ) - (func $~lib/date/Date#getUTCMonth (param $0 i32) (result i32) - local.get $0 - i64.load i64.const 86400000 i64.div_s i32.wrap_i64 call $~lib/date/ymdFromEpochDays - drop - global.get $~lib/date/month - i32.const 1 - i32.sub - ) - (func $~lib/date/Date#getUTCDate (param $0 i32) (result i32) + i32.store local.get $0 - i64.load - i64.const 86400000 - i64.div_s - i32.wrap_i64 - call $~lib/date/ymdFromEpochDays - drop - global.get $~lib/date/day + global.get $~lib/date/_month + i32.store offset=4 + local.get $0 + global.get $~lib/date/_day + i32.store offset=8 ) (func $~lib/date/Date#getUTCHours (param $0 i32) (result i32) local.get $0 - i64.load + i64.load offset=16 i64.const 86400000 i64.rem_s i32.wrap_i64 @@ -1986,7 +1983,7 @@ ) (func $~lib/date/Date#getUTCMinutes (param $0 i32) (result i32) local.get $0 - i64.load + i64.load offset=16 i64.const 3600000 i64.rem_s i32.wrap_i64 @@ -1995,7 +1992,7 @@ ) (func $~lib/date/Date#getUTCSeconds (param $0 i32) (result i32) local.get $0 - i64.load + i64.load offset=16 i64.const 60000 i64.rem_s i32.wrap_i64 @@ -2005,17 +2002,18 @@ (func $~lib/date/Date#setUTCMilliseconds (param $0 i32) (param $1 i32) local.get $0 local.get $0 - i64.load + i64.load offset=16 local.get $1 + i64.extend_i32_s + i64.add local.get $0 - i64.load + i64.load offset=16 i64.const 1000 i64.rem_s i32.wrap_i64 - i32.sub i64.extend_i32_s - i64.add - i64.store + i64.sub + call $~lib/date/Date#setTime ) (func $~lib/date/Date#setUTCSeconds (param $0 i32) (param $1 i32) i32.const 1 @@ -2029,14 +2027,14 @@ if i32.const 1504 i32.const 1568 - i32.const 117 + i32.const 126 i32.const 34 call $~lib/builtins/abort unreachable end local.get $0 local.get $0 - i64.load + i64.load offset=16 local.get $1 local.get $0 call $~lib/date/Date#getUTCSeconds @@ -2045,7 +2043,7 @@ i32.mul i64.extend_i32_s i64.add - i64.store + call $~lib/date/Date#setTime ) (func $~lib/date/Date#setUTCMinutes (param $0 i32) (param $1 i32) i32.const 1 @@ -2059,14 +2057,14 @@ if i32.const 1504 i32.const 1568 - i32.const 122 + i32.const 131 i32.const 34 call $~lib/builtins/abort unreachable end local.get $0 local.get $0 - i64.load + i64.load offset=16 local.get $1 local.get $0 call $~lib/date/Date#getUTCMinutes @@ -2075,7 +2073,7 @@ i32.mul i64.extend_i32_s i64.add - i64.store + call $~lib/date/Date#setTime ) (func $~lib/date/Date#setUTCHours (param $0 i32) (param $1 i32) i32.const 1 @@ -2089,14 +2087,14 @@ if i32.const 1504 i32.const 1568 - i32.const 127 + i32.const 136 i32.const 34 call $~lib/builtins/abort unreachable end local.get $0 local.get $0 - i64.load + i64.load offset=16 local.get $1 local.get $0 call $~lib/date/Date#getUTCHours @@ -2105,84 +2103,77 @@ i32.mul i64.extend_i32_s i64.add - i64.store + call $~lib/date/Date#setTime ) (func $~lib/date/Date#setUTCDate (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) + i32.const 1 + local.get $1 + i32.const 0 + i32.const 1 local.get $0 - i64.load - i64.const 86400000 - i64.div_s - i32.wrap_i64 - call $~lib/date/ymdFromEpochDays - local.set $2 + i32.load + local.tee $2 + i32.const 400 + i32.rem_s + i32.eqz + local.get $2 + i32.const 100 + i32.rem_s + select + local.get $2 + i32.const 3 + i32.and + select + i32.const 0 + i32.ne + i32.const 28 + i32.add + local.get $0 + i32.load offset=4 + local.tee $3 + i32.const 8 + i32.ge_s + local.get $3 + i32.add + i32.const 1 + i32.and + i32.const 30 + i32.add + local.get $3 + i32.const 2 + i32.eq + select + i32.gt_s local.get $1 i32.const 1 i32.lt_s - if (result i32) - i32.const 1 - else - local.get $1 - i32.const 0 - i32.const 1 - local.get $2 - i32.const 400 - i32.rem_s - i32.eqz - local.get $2 - i32.const 100 - i32.rem_s - select - local.get $2 - i32.const 3 - i32.and - select - i32.const 0 - i32.ne - i32.const 28 - i32.add - global.get $~lib/date/month - local.tee $3 - local.get $3 - i32.const 8 - i32.ge_s - i32.add - i32.const 1 - i32.and - i32.const 30 - i32.add - local.get $3 - i32.const 2 - i32.eq - select - i32.gt_s - end + select if i32.const 1504 i32.const 1568 - i32.const 133 + i32.const 143 i32.const 56 call $~lib/builtins/abort unreachable end local.get $0 local.get $0 - i64.load + i64.load offset=16 i64.const 86400000 i64.rem_s local.get $2 - global.get $~lib/date/month + local.get $3 local.get $1 call $~lib/date/daysSinceEpoch i64.extend_i32_s i64.const 86400000 i64.mul i64.add - i64.store + call $~lib/date/Date#setTime ) (func $~lib/date/Date#setUTCMonth (param $0 i32) (param $1 i32) - (local $2 i32) i32.const 1 local.get $1 i32.const 12 @@ -2194,57 +2185,47 @@ if i32.const 1504 i32.const 1568 - i32.const 140 + i32.const 149 i32.const 34 call $~lib/builtins/abort unreachable end local.get $0 - i64.load - i64.const 86400000 - i64.div_s - i32.wrap_i64 - call $~lib/date/ymdFromEpochDays - local.set $2 - local.get $0 local.get $0 - i64.load + i64.load offset=16 i64.const 86400000 i64.rem_s - local.get $2 + local.get $0 + i32.load local.get $1 i32.const 1 i32.add - global.get $~lib/date/day + local.get $0 + i32.load offset=8 call $~lib/date/daysSinceEpoch i64.extend_i32_s i64.const 86400000 i64.mul i64.add - i64.store + call $~lib/date/Date#setTime ) (func $~lib/date/Date#setUTCFullYear (param $0 i32) (param $1 i32) - local.get $0 - i64.load - i64.const 86400000 - i64.div_s - i32.wrap_i64 - call $~lib/date/ymdFromEpochDays - drop local.get $0 local.get $0 - i64.load + i64.load offset=16 i64.const 86400000 i64.rem_s local.get $1 - global.get $~lib/date/month - global.get $~lib/date/day + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 call $~lib/date/daysSinceEpoch i64.extend_i32_s i64.const 86400000 i64.mul i64.add - i64.store + call $~lib/date/Date#setTime ) (func $~lib/number/I32#toString (param $0 i32) (result i32) (local $1 i32) @@ -3395,15 +3376,9 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store offset=104 - local.get $0 - i64.load - i64.const 86400000 - i64.div_s - i32.wrap_i64 - call $~lib/date/ymdFromEpochDays - local.set $1 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $0 + i32.load call $~lib/number/I32#toString local.tee $1 i32.store @@ -3446,7 +3421,8 @@ global.get $~lib/memory/__stack_pointer local.get $1 i32.store offset=92 - global.get $~lib/date/month + local.get $0 + i32.load offset=4 call $~lib/number/I32#toString local.set $2 global.get $~lib/memory/__stack_pointer @@ -3479,7 +3455,8 @@ global.get $~lib/memory/__stack_pointer local.get $1 i32.store offset=76 - global.get $~lib/date/day + local.get $0 + i32.load offset=8 call $~lib/number/I32#toString local.set $2 global.get $~lib/memory/__stack_pointer @@ -3615,7 +3592,7 @@ local.get $1 i32.store offset=16 local.get $0 - i64.load + i64.load offset=16 i64.const 1000 i64.rem_s i32.wrap_i64 @@ -4206,7 +4183,7 @@ local.tee $0 i32.store local.get $0 - i64.load + i64.load offset=16 i64.const 1541847600001 i64.ne if @@ -4219,9 +4196,9 @@ end local.get $0 i64.const 1541847600002 - i64.store + call $~lib/date/Date#setTime local.get $0 - i64.load + i64.load offset=16 i64.const 1541847600002 i64.ne if @@ -4238,11 +4215,7 @@ local.tee $0 i32.store local.get $0 - i64.load - i64.const 86400000 - i64.div_s - i32.wrap_i64 - call $~lib/date/ymdFromEpochDays + i32.load i32.const 189512 i32.ne if @@ -4254,8 +4227,8 @@ unreachable end local.get $0 - call $~lib/date/Date#getUTCMonth - i32.const 11 + i32.load offset=4 + i32.const 12 i32.ne if i32.const 0 @@ -4266,7 +4239,7 @@ unreachable end local.get $0 - call $~lib/date/Date#getUTCDate + i32.load offset=8 i32.const 14 i32.ne if @@ -4314,7 +4287,7 @@ unreachable end local.get $0 - i64.load + i64.load offset=16 i64.const 1000 i64.rem_s i32.wrap_i64 @@ -4334,11 +4307,7 @@ local.tee $0 i32.store local.get $0 - i64.load - i64.const 86400000 - i64.div_s - i32.wrap_i64 - call $~lib/date/ymdFromEpochDays + i32.load i32.const 1973 i32.ne if @@ -4350,8 +4319,8 @@ unreachable end local.get $0 - call $~lib/date/Date#getUTCMonth - i32.const 11 + i32.load offset=4 + i32.const 12 i32.ne if i32.const 0 @@ -4362,7 +4331,7 @@ unreachable end local.get $0 - call $~lib/date/Date#getUTCDate + i32.load offset=8 i32.const 4 i32.ne if @@ -4410,7 +4379,7 @@ unreachable end local.get $0 - i64.load + i64.load offset=16 i64.const 1000 i64.rem_s i32.wrap_i64 @@ -4430,7 +4399,7 @@ local.tee $0 i32.store local.get $0 - i64.load + i64.load offset=16 i64.const 1000 i64.rem_s i32.wrap_i64 @@ -4448,7 +4417,7 @@ i32.const 12 call $~lib/date/Date#setUTCMilliseconds local.get $0 - i64.load + i64.load offset=16 i64.const 1000 i64.rem_s i32.wrap_i64 @@ -4466,7 +4435,7 @@ i32.const 568 call $~lib/date/Date#setUTCMilliseconds local.get $0 - i64.load + i64.load offset=16 i64.const 1000 i64.rem_s i32.wrap_i64 @@ -4651,11 +4620,7 @@ local.tee $0 i32.store local.get $0 - i64.load - i64.const 86400000 - i64.div_s - i32.wrap_i64 - call $~lib/date/ymdFromEpochDays + i32.load i32.const 1973 i32.ne if @@ -4667,8 +4632,8 @@ unreachable end local.get $0 - call $~lib/date/Date#getUTCMonth - i32.const 11 + i32.load offset=4 + i32.const 12 i32.ne if i32.const 0 @@ -4682,7 +4647,7 @@ i32.const 12 call $~lib/date/Date#setUTCDate local.get $0 - call $~lib/date/Date#getUTCDate + i32.load offset=8 i32.const 12 i32.ne if @@ -4697,7 +4662,7 @@ i32.const 2 call $~lib/date/Date#setUTCDate local.get $0 - call $~lib/date/Date#getUTCDate + i32.load offset=8 i32.const 2 i32.ne if @@ -4741,8 +4706,8 @@ local.tee $0 i32.store local.get $0 - call $~lib/date/Date#getUTCMonth - i32.const 3 + i32.load offset=4 + i32.const 4 i32.ne if i32.const 0 @@ -4756,8 +4721,8 @@ i32.const 10 call $~lib/date/Date#setUTCMonth local.get $0 - call $~lib/date/Date#getUTCMonth - i32.const 10 + i32.load offset=4 + i32.const 11 i32.ne if i32.const 0 @@ -4771,8 +4736,8 @@ i32.const 2 call $~lib/date/Date#setUTCMonth local.get $0 - call $~lib/date/Date#getUTCMonth - i32.const 2 + i32.load offset=4 + i32.const 3 i32.ne if i32.const 0 @@ -4794,11 +4759,7 @@ local.tee $0 i32.store local.get $0 - i64.load - i64.const 86400000 - i64.div_s - i32.wrap_i64 - call $~lib/date/ymdFromEpochDays + i32.load i32.const 253616 i32.ne if @@ -4813,11 +4774,7 @@ i32.const 1976 call $~lib/date/Date#setUTCFullYear local.get $0 - i64.load - i64.const 86400000 - i64.div_s - i32.wrap_i64 - call $~lib/date/ymdFromEpochDays + i32.load i32.const 1976 i32.ne if @@ -4832,11 +4789,7 @@ i32.const 20212 call $~lib/date/Date#setUTCFullYear local.get $0 - i64.load - i64.const 86400000 - i64.div_s - i32.wrap_i64 - call $~lib/date/ymdFromEpochDays + i32.load i32.const 20212 i32.ne if @@ -4934,7 +4887,7 @@ local.tee $0 i32.store local.get $0 - i64.load + i64.load offset=16 i64.const 192067200000 i64.ne if @@ -4954,7 +4907,7 @@ local.tee $0 i32.store local.get $0 - i64.load + i64.load offset=16 i64.const 192067200000 i64.ne if @@ -4974,7 +4927,7 @@ local.tee $0 i32.store local.get $0 - i64.load + i64.load offset=16 i64.const 11860387200000 i64.ne if @@ -4995,7 +4948,7 @@ local.get $0 i32.store offset=4 local.get $0 - i64.load + i64.load offset=16 global.get $~lib/memory/__stack_pointer i32.const 2816 i32.store offset=8 @@ -5006,7 +4959,7 @@ local.get $0 i32.store offset=4 local.get $0 - i64.load + i64.load offset=16 i64.ne if i32.const 0 @@ -5025,7 +4978,7 @@ local.tee $0 i32.store local.get $0 - i64.load + i64.load offset=16 i64.const 192112496000 i64.ne if @@ -5045,7 +4998,7 @@ local.tee $0 i32.store local.get $0 - i64.load + i64.load offset=16 i64.const 192112496456 i64.ne if @@ -5065,7 +5018,7 @@ local.tee $0 i32.store local.get $0 - i64.load + i64.load offset=16 i64.const 192112496456 i64.ne if @@ -5092,14 +5045,36 @@ i32.const 0 i32.store global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 24 i32.const 3 call $~lib/rt/itcms/__new local.tee $1 i32.store 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 local.get $0 - i64.store + i64.store offset=16 + local.get $1 + local.get $0 + i64.const 86400000 + i64.div_s + i32.wrap_i64 + call $~lib/date/ymdFromEpochDays + i32.store + local.get $1 + global.get $~lib/date/_month + i32.store offset=4 + local.get $1 + global.get $~lib/date/_day + i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 97ea070145..2949e581b7 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -60,6 +60,8 @@ (data (i32.const 3420) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 3504) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") (table $0 1 funcref) + (global $~lib/date/_day (mut i32) (i32.const 0)) + (global $~lib/date/_month (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -72,8 +74,6 @@ (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/date/day (mut i32) (i32.const 0)) - (global $~lib/date/month (mut i32) (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) (global $~lib/rt/__rtti_base i32 (i32.const 3504)) (global $~lib/memory/__data_end i32 (i32.const 3556)) @@ -190,6 +190,137 @@ i64.extend_i32_s i64.add ) + (func $~lib/date/ymdFromEpochDays (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.const 719468 + i32.add + local.set $0 + local.get $0 + local.set $2 + i32.const 146097 + local.set $1 + local.get $2 + i32.const 0 + i32.ge_s + if (result i32) + local.get $2 + else + local.get $2 + local.get $1 + i32.sub + i32.const 1 + i32.add + end + local.get $1 + i32.div_s + local.set $3 + local.get $0 + local.get $3 + i32.const 146097 + i32.mul + i32.sub + local.set $4 + local.get $4 + local.get $4 + i32.const 1460 + i32.div_s + i32.sub + local.get $4 + i32.const 36524 + i32.div_s + i32.add + local.get $4 + i32.const 146096 + i32.div_s + i32.sub + i32.const 365 + i32.div_s + local.set $5 + local.get $5 + local.get $3 + i32.const 400 + i32.mul + i32.add + local.set $6 + local.get $4 + i32.const 365 + local.get $5 + i32.mul + local.get $5 + i32.const 4 + i32.div_s + i32.add + local.get $5 + i32.const 100 + i32.div_s + i32.sub + i32.sub + local.set $7 + i32.const 5 + local.get $7 + i32.mul + i32.const 2 + i32.add + i32.const 153 + i32.div_s + local.set $8 + local.get $7 + i32.const 153 + local.get $8 + i32.mul + i32.const 2 + i32.add + i32.const 5 + i32.div_s + i32.sub + i32.const 1 + i32.add + global.set $~lib/date/_day + local.get $8 + local.get $8 + i32.const 10 + i32.lt_s + if (result i32) + i32.const 3 + else + i32.const -9 + end + i32.add + global.set $~lib/date/_month + global.get $~lib/date/_month + local.set $9 + local.get $6 + local.get $9 + i32.const 2 + i32.le_s + i32.add + local.set $6 + local.get $6 + ) + (func $~lib/date/Date#set:year (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store + ) + (func $~lib/date/Date#set:month (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=4 + ) + (func $~lib/date/Date#set:day (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store offset=8 + ) (func $~lib/rt/itcms/Object#set:nextWithColor (param $0 i32) (param $1 i32) local.get $0 local.get $1 @@ -2498,160 +2629,48 @@ (func $~lib/date/Date#set:epochMillis (param $0 i32) (param $1 i64) local.get $0 local.get $1 - i64.store + i64.store offset=16 ) (func $~lib/date/Date#getTime (param $0 i32) (result i64) local.get $0 - i64.load + i64.load offset=16 ) (func $~lib/date/Date#setTime (param $0 i32) (param $1 i64) (result i64) local.get $0 local.get $1 call $~lib/date/Date#set:epochMillis - local.get $1 - ) - (func $~lib/date/ymdFromEpochDays (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.get $0 - i32.const 719468 - i32.add - local.set $0 local.get $0 - local.set $2 - i32.const 146097 - local.set $1 - local.get $2 - i32.const 0 - i32.ge_s - if (result i32) - local.get $2 - else - local.get $2 - local.get $1 - i32.sub - i32.const 1 - i32.add - end local.get $1 - i32.div_s - local.set $3 - local.get $0 - local.get $3 - i32.const 146097 - i32.mul - i32.sub - local.set $4 - local.get $4 - local.get $4 - i32.const 1460 - i32.div_s - i32.sub - local.get $4 - i32.const 36524 - i32.div_s - i32.add - local.get $4 - i32.const 146096 - i32.div_s - i32.sub - i32.const 365 - i32.div_s - local.set $5 - local.get $5 - local.get $3 - i32.const 400 - i32.mul - i32.add - local.set $6 - local.get $4 - i32.const 365 - local.get $5 - i32.mul - local.get $5 - i32.const 4 - i32.div_s - i32.add - local.get $5 - i32.const 100 - i32.div_s - i32.sub - i32.sub - local.set $7 - i32.const 5 - local.get $7 - i32.mul - i32.const 2 - i32.add - i32.const 153 - i32.div_s - local.set $8 - local.get $7 - i32.const 153 - local.get $8 - i32.mul - i32.const 2 - i32.add - i32.const 5 - i32.div_s - i32.sub - i32.const 1 - i32.add - global.set $~lib/date/day - local.get $8 - local.get $8 - i32.const 10 - i32.lt_s - if (result i32) - i32.const 3 - else - i32.const -9 - end - i32.add - global.set $~lib/date/month - local.get $6 - global.get $~lib/date/month - i32.const 2 - i32.le_s - i32.add - local.set $6 - local.get $6 - ) - (func $~lib/date/Date#computeUTCDate (param $0 i32) (result i32) - local.get $0 - i64.load i64.const 86400000 i64.div_s i32.wrap_i64 call $~lib/date/ymdFromEpochDays + call $~lib/date/Date#set:year + local.get $0 + global.get $~lib/date/_month + call $~lib/date/Date#set:month + local.get $0 + global.get $~lib/date/_day + call $~lib/date/Date#set:day + local.get $1 ) (func $~lib/date/Date#getUTCFullYear (param $0 i32) (result i32) local.get $0 - call $~lib/date/Date#computeUTCDate + i32.load ) (func $~lib/date/Date#getUTCMonth (param $0 i32) (result i32) local.get $0 - call $~lib/date/Date#computeUTCDate - drop - global.get $~lib/date/month + i32.load offset=4 i32.const 1 i32.sub ) (func $~lib/date/Date#getUTCDate (param $0 i32) (result i32) local.get $0 - call $~lib/date/Date#computeUTCDate - drop - global.get $~lib/date/day + i32.load offset=8 ) (func $~lib/date/Date#getUTCHours (param $0 i32) (result i32) local.get $0 - i64.load + i64.load offset=16 i64.const 86400000 i64.rem_s i32.wrap_i64 @@ -2660,7 +2679,7 @@ ) (func $~lib/date/Date#getUTCMinutes (param $0 i32) (result i32) local.get $0 - i64.load + i64.load offset=16 i64.const 3600000 i64.rem_s i32.wrap_i64 @@ -2669,7 +2688,7 @@ ) (func $~lib/date/Date#getUTCSeconds (param $0 i32) (result i32) local.get $0 - i64.load + i64.load offset=16 i64.const 60000 i64.rem_s i32.wrap_i64 @@ -2678,7 +2697,7 @@ ) (func $~lib/date/Date#getUTCMilliseconds (param $0 i32) (result i32) local.get $0 - i64.load + i64.load offset=16 i64.const 1000 i64.rem_s i32.wrap_i64 @@ -2686,14 +2705,16 @@ (func $~lib/date/Date#setUTCMilliseconds (param $0 i32) (param $1 i32) local.get $0 local.get $0 - i64.load + i64.load offset=16 local.get $1 + i64.extend_i32_s + i64.add local.get $0 call $~lib/date/Date#getUTCMilliseconds - i32.sub i64.extend_i32_s - i64.add - call $~lib/date/Date#set:epochMillis + i64.sub + call $~lib/date/Date#setTime + drop ) (func $~lib/date/Date#setUTCSeconds (param $0 i32) (param $1 i32) local.get $1 @@ -2709,14 +2730,14 @@ if i32.const 480 i32.const 544 - i32.const 117 + i32.const 126 i32.const 34 call $~lib/builtins/abort unreachable end local.get $0 local.get $0 - i64.load + i64.load offset=16 local.get $1 local.get $0 call $~lib/date/Date#getUTCSeconds @@ -2725,7 +2746,8 @@ i32.mul i64.extend_i32_s i64.add - call $~lib/date/Date#set:epochMillis + call $~lib/date/Date#setTime + drop ) (func $~lib/date/Date#setUTCMinutes (param $0 i32) (param $1 i32) local.get $1 @@ -2741,14 +2763,14 @@ if i32.const 480 i32.const 544 - i32.const 122 + i32.const 131 i32.const 34 call $~lib/builtins/abort unreachable end local.get $0 local.get $0 - i64.load + i64.load offset=16 local.get $1 local.get $0 call $~lib/date/Date#getUTCMinutes @@ -2757,7 +2779,8 @@ i32.mul i64.extend_i32_s i64.add - call $~lib/date/Date#set:epochMillis + call $~lib/date/Date#setTime + drop ) (func $~lib/date/Date#setUTCHours (param $0 i32) (param $1 i32) local.get $1 @@ -2773,14 +2796,14 @@ if i32.const 480 i32.const 544 - i32.const 127 + i32.const 136 i32.const 34 call $~lib/builtins/abort unreachable end local.get $0 local.get $0 - i64.load + i64.load offset=16 local.get $1 local.get $0 call $~lib/date/Date#getUTCHours @@ -2789,7 +2812,8 @@ i32.mul i64.extend_i32_s i64.add - call $~lib/date/Date#set:epochMillis + call $~lib/date/Date#setTime + drop ) (func $~lib/date/daysInMonth (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -2840,10 +2864,14 @@ ) (func $~lib/date/Date#setUTCDate (param $0 i32) (param $1 i32) (local $2 i32) - (local $3 i64) + (local $3 i32) + (local $4 i64) local.get $0 - call $~lib/date/Date#computeUTCDate + i32.load local.set $2 + local.get $0 + i32.load offset=4 + local.set $3 local.get $1 i32.const 1 i32.lt_s @@ -2852,38 +2880,38 @@ else local.get $1 local.get $2 - global.get $~lib/date/month + local.get $3 call $~lib/date/daysInMonth i32.gt_s end if i32.const 480 i32.const 544 - i32.const 133 + i32.const 143 i32.const 56 call $~lib/builtins/abort unreachable end local.get $0 - i64.load + i64.load offset=16 i64.const 86400000 i64.rem_s - local.set $3 + local.set $4 local.get $0 local.get $2 - global.get $~lib/date/month + local.get $3 local.get $1 call $~lib/date/daysSinceEpoch i64.extend_i32_s i64.const 86400000 i64.mul - local.get $3 + local.get $4 i64.add - call $~lib/date/Date#set:epochMillis + call $~lib/date/Date#setTime + drop ) (func $~lib/date/Date#setUTCMonth (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i64) + (local $2 i64) local.get $1 i32.const 1 i32.lt_s @@ -2897,58 +2925,54 @@ if i32.const 480 i32.const 544 - i32.const 140 + i32.const 149 i32.const 34 call $~lib/builtins/abort unreachable end local.get $0 - call $~lib/date/Date#computeUTCDate - local.set $2 - local.get $0 - i64.load + i64.load offset=16 i64.const 86400000 i64.rem_s - local.set $3 + local.set $2 local.get $0 - local.get $2 + local.get $0 + i32.load local.get $1 i32.const 1 i32.add - global.get $~lib/date/day + local.get $0 + i32.load offset=8 call $~lib/date/daysSinceEpoch i64.extend_i32_s i64.const 86400000 i64.mul - local.get $3 + local.get $2 i64.add - call $~lib/date/Date#set:epochMillis + call $~lib/date/Date#setTime + drop ) (func $~lib/date/Date#setUTCFullYear (param $0 i32) (param $1 i32) (local $2 i64) local.get $0 - i64.load - i64.const 86400000 - i64.div_s - i32.wrap_i64 - call $~lib/date/ymdFromEpochDays - drop - local.get $0 - i64.load + i64.load offset=16 i64.const 86400000 i64.rem_s local.set $2 local.get $0 local.get $1 - global.get $~lib/date/month - global.get $~lib/date/day + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 call $~lib/date/daysSinceEpoch i64.extend_i32_s i64.const 86400000 i64.mul local.get $2 i64.add - call $~lib/date/Date#set:epochMillis + call $~lib/date/Date#setTime + drop ) (func $~lib/util/number/decimalCount32 (param $0 i32) (result i32) local.get $0 @@ -5688,7 +5712,6 @@ (func $~lib/date/Date#toISOString (param $0 i32) (result i32) (local $1 i32) (local $2 i32) - (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 112 i32.sub @@ -5736,297 +5759,297 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store offset=104 - local.get $0 - call $~lib/date/Date#computeUTCDate - local.set $1 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $0 + i32.load i32.const 10 call $~lib/number/I32#toString - local.tee $2 + local.tee $1 i32.store - local.get $2 + local.get $1 call $~lib/string/String#get:length i32.const 4 i32.gt_s if global.get $~lib/memory/__stack_pointer i32.const 2368 - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=4 - local.get $3 local.get $2 + local.get $1 i32.const 6 i32.const 784 - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=12 - local.get $3 + local.get $2 call $~lib/string/String#padStart - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=8 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.tee $2 + local.tee $1 i32.store end - local.get $2 + local.get $1 i32.const 2432 - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=100 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=92 - local.get $3 - global.get $~lib/date/month + local.get $2 + local.get $0 + i32.load offset=4 i32.const 10 call $~lib/number/I32#toString - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=104 - local.get $3 + local.get $2 i32.const 2 i32.const 784 - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=108 - local.get $3 + local.get $2 call $~lib/string/String#padStart - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=96 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=84 - local.get $3 + local.get $2 i32.const 2432 - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=88 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=76 - local.get $3 - global.get $~lib/date/day + local.get $2 + local.get $0 + i32.load offset=8 i32.const 10 call $~lib/number/I32#toString - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=84 - local.get $3 + local.get $2 i32.const 2 i32.const 784 - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=92 - local.get $3 + local.get $2 call $~lib/string/String#padStart - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=80 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=68 - local.get $3 + local.get $2 i32.const 2464 - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=72 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=60 - local.get $3 + local.get $2 local.get $0 call $~lib/date/Date#getUTCHours i32.const 10 call $~lib/number/I32#toString - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=68 - local.get $3 + local.get $2 i32.const 2 i32.const 784 - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=76 - local.get $3 + local.get $2 call $~lib/string/String#padStart - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=64 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=52 - local.get $3 + local.get $2 i32.const 2496 - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=56 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=44 - local.get $3 + local.get $2 local.get $0 call $~lib/date/Date#getUTCMinutes i32.const 10 call $~lib/number/I32#toString - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=52 - local.get $3 + local.get $2 i32.const 2 i32.const 784 - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=60 - local.get $3 + local.get $2 call $~lib/string/String#padStart - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=48 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=36 - local.get $3 + local.get $2 i32.const 2496 - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=40 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=28 - local.get $3 + local.get $2 local.get $0 call $~lib/date/Date#getUTCSeconds i32.const 10 call $~lib/number/I32#toString - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=36 - local.get $3 + local.get $2 i32.const 2 i32.const 784 - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=44 - local.get $3 + local.get $2 call $~lib/string/String#padStart - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=32 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=12 - local.get $3 + local.get $2 i32.const 2528 - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=24 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=16 - local.get $3 + local.get $2 local.get $0 call $~lib/date/Date#getUTCMilliseconds i32.const 10 call $~lib/number/I32#toString - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=12 - local.get $3 + local.get $2 i32.const 3 i32.const 784 - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=28 - local.get $3 + local.get $2 call $~lib/string/String#padStart - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=20 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=4 - local.get $3 + local.get $2 i32.const 2560 - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 i32.store offset=8 - local.get $3 + local.get $2 call $~lib/string/String.__concat - local.set $3 + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 112 i32.add global.set $~lib/memory/__stack_pointer - local.get $3 + local.get $2 ) (func $~lib/string/String#split (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -7702,16 +7725,38 @@ i32.eqz if global.get $~lib/memory/__stack_pointer - i32.const 8 + i32.const 24 i32.const 3 call $~lib/rt/itcms/__new local.tee $0 i32.store end local.get $0 + i32.const 0 + call $~lib/date/Date#set:year + local.get $0 + i32.const 0 + call $~lib/date/Date#set:month + local.get $0 + i32.const 0 + call $~lib/date/Date#set:day + local.get $0 local.get $1 call $~lib/date/Date#set:epochMillis local.get $0 + local.get $1 + i64.const 86400000 + i64.div_s + i32.wrap_i64 + call $~lib/date/ymdFromEpochDays + call $~lib/date/Date#set:year + local.get $0 + global.get $~lib/date/_month + call $~lib/date/Date#set:month + local.get $0 + global.get $~lib/date/_day + call $~lib/date/Date#set:day + local.get $0 local.set $2 global.get $~lib/memory/__stack_pointer i32.const 4 From e6fc2a6193da333c5f728b8cc9069152cb0a6872 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Wed, 14 Apr 2021 13:53:10 +0300 Subject: [PATCH 05/47] refactor + more tests --- std/assembly/date.ts | 38 +++++------ tests/compiler/std/date.optimized.wat | 93 +++++++++++++++++++------ tests/compiler/std/date.ts | 9 +++ tests/compiler/std/date.untouched.wat | 97 +++++++++++++++++++++------ 4 files changed, 174 insertions(+), 63 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 840f119aa4..6e80ab761a 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -118,42 +118,42 @@ export class Date { return i32(this.epochMillis % MILLIS_PER_SECOND); } - setUTCMilliseconds(value: i32): void { - this.setTime(this.epochMillis + value - this.getUTCMilliseconds()); + setUTCMilliseconds(millis: i32): void { + this.setTime(this.epochMillis + (millis - this.getUTCMilliseconds())); } - setUTCSeconds(value: i32): void { - if (value < 0 || value > 59) throw new RangeError(E_VALUEOUTOFRANGE); - this.setTime(this.epochMillis + (value - this.getUTCSeconds()) * MILLIS_PER_SECOND); + setUTCSeconds(seconds: i32): void { + if (seconds < 0 || seconds > 59) throw new RangeError(E_VALUEOUTOFRANGE); + this.setTime(this.epochMillis + (seconds - this.getUTCSeconds()) * MILLIS_PER_SECOND); } - setUTCMinutes(value: i32): void { - if (value < 0 || value > 59) throw new RangeError(E_VALUEOUTOFRANGE); - this.setTime(this.epochMillis + (value - this.getUTCMinutes()) * MILLIS_PER_MINUTE); + setUTCMinutes(minutes: i32): void { + if (minutes < 0 || minutes > 59) throw new RangeError(E_VALUEOUTOFRANGE); + this.setTime(this.epochMillis + (minutes - this.getUTCMinutes()) * MILLIS_PER_MINUTE); } - setUTCHours(value: i32): void { - if (value < 0 || value > 23) throw new RangeError(E_VALUEOUTOFRANGE); - this.setTime(this.epochMillis + (value - this.getUTCHours()) * MILLIS_PER_HOUR); + setUTCHours(hours: i32): void { + if (hours < 0 || hours > 23) throw new RangeError(E_VALUEOUTOFRANGE); + this.setTime(this.epochMillis + (hours - this.getUTCHours()) * MILLIS_PER_HOUR); } - setUTCDate(value: i32): void { + setUTCDate(day: i32): void { var year = this.year; var month = this.month; - if (value < 1 || value > daysInMonth(year, month)) throw new RangeError(E_VALUEOUTOFRANGE); + if (day < 1 || day > daysInMonth(year, month)) throw new RangeError(E_VALUEOUTOFRANGE); var ms = this.epochMillis % MILLIS_PER_DAY; - this.setTime(i64(daysSinceEpoch(year, month, value)) * MILLIS_PER_DAY + ms); + this.setTime(i64(daysSinceEpoch(year, month, day)) * MILLIS_PER_DAY + ms); } - setUTCMonth(value: i32): void { - if (value < 1 || value > 12) throw new RangeError(E_VALUEOUTOFRANGE); + setUTCMonth(month: i32): void { + if (month < 1 || month > 12) throw new RangeError(E_VALUEOUTOFRANGE); var ms = this.epochMillis % MILLIS_PER_DAY; - this.setTime(i64(daysSinceEpoch(this.year, value + 1, this.day)) * MILLIS_PER_DAY + ms); + this.setTime(i64(daysSinceEpoch(this.year, month + 1, this.day)) * MILLIS_PER_DAY + ms); } - setUTCFullYear(value: i32): void { + setUTCFullYear(year: i32): void { var ms = this.epochMillis % MILLIS_PER_DAY; - this.setTime(i64(daysSinceEpoch(value, this.month, this.day)) * MILLIS_PER_DAY + ms); + this.setTime(i64(daysSinceEpoch(year, this.month, this.day)) * MILLIS_PER_DAY + ms); } toISOString(): string { diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index e6a0d7379f..3a86c86b92 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -2004,15 +2004,14 @@ local.get $0 i64.load offset=16 local.get $1 - i64.extend_i32_s - i64.add local.get $0 i64.load offset=16 i64.const 1000 i64.rem_s i32.wrap_i64 + i32.sub i64.extend_i32_s - i64.sub + i64.add call $~lib/date/Date#setTime ) (func $~lib/date/Date#setUTCSeconds (param $0 i32) (param $1 i32) @@ -2028,7 +2027,7 @@ i32.const 1504 i32.const 1568 i32.const 126 - i32.const 34 + i32.const 38 call $~lib/builtins/abort unreachable end @@ -2058,7 +2057,7 @@ i32.const 1504 i32.const 1568 i32.const 131 - i32.const 34 + i32.const 38 call $~lib/builtins/abort unreachable end @@ -2154,7 +2153,7 @@ i32.const 1504 i32.const 1568 i32.const 143 - i32.const 56 + i32.const 52 call $~lib/builtins/abort unreachable end @@ -4701,6 +4700,56 @@ i32.const 29 call $~lib/date/Date#setUTCDate global.get $~lib/memory/__stack_pointer + i64.const 1362106799999 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + i32.const 20 + call $~lib/date/Date#setUTCDate + local.get $0 + i64.load offset=16 + i64.const 1363748399999 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 128 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + call $~lib/date/Date#setUTCDate + local.get $0 + i64.load offset=16 + i64.const 1362106799999 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 130 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1000 + call $~lib/date/Date#setUTCMilliseconds + local.get $0 + i64.load offset=16 + i64.const 1362106800000 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 133 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer i64.const 7899943856218720 call $~lib/date/Date#constructor local.tee $0 @@ -4712,7 +4761,7 @@ if i32.const 0 i32.const 1056 - i32.const 130 + i32.const 139 i32.const 3 call $~lib/builtins/abort unreachable @@ -4727,7 +4776,7 @@ if i32.const 0 i32.const 1056 - i32.const 132 + i32.const 141 i32.const 3 call $~lib/builtins/abort unreachable @@ -4742,7 +4791,7 @@ if i32.const 0 i32.const 1056 - i32.const 134 + i32.const 143 i32.const 3 call $~lib/builtins/abort unreachable @@ -4765,7 +4814,7 @@ if i32.const 0 i32.const 1056 - i32.const 143 + i32.const 152 i32.const 3 call $~lib/builtins/abort unreachable @@ -4780,7 +4829,7 @@ if i32.const 0 i32.const 1056 - i32.const 145 + i32.const 154 i32.const 3 call $~lib/builtins/abort unreachable @@ -4795,7 +4844,7 @@ if i32.const 0 i32.const 1056 - i32.const 147 + i32.const 156 i32.const 3 call $~lib/builtins/abort unreachable @@ -4821,7 +4870,7 @@ if i32.const 0 i32.const 1056 - i32.const 153 + i32.const 162 i32.const 3 call $~lib/builtins/abort unreachable @@ -4847,7 +4896,7 @@ if i32.const 0 i32.const 1056 - i32.const 155 + i32.const 164 i32.const 3 call $~lib/builtins/abort unreachable @@ -4873,7 +4922,7 @@ if i32.const 0 i32.const 1056 - i32.const 157 + i32.const 166 i32.const 3 call $~lib/builtins/abort unreachable @@ -4893,7 +4942,7 @@ if i32.const 0 i32.const 1056 - i32.const 164 + i32.const 173 i32.const 3 call $~lib/builtins/abort unreachable @@ -4913,7 +4962,7 @@ if i32.const 0 i32.const 1056 - i32.const 166 + i32.const 175 i32.const 3 call $~lib/builtins/abort unreachable @@ -4933,7 +4982,7 @@ if i32.const 0 i32.const 1056 - i32.const 168 + i32.const 177 i32.const 3 call $~lib/builtins/abort unreachable @@ -4964,7 +5013,7 @@ if i32.const 0 i32.const 1056 - i32.const 171 + i32.const 180 i32.const 3 call $~lib/builtins/abort unreachable @@ -4984,7 +5033,7 @@ if i32.const 0 i32.const 1056 - i32.const 178 + i32.const 187 i32.const 3 call $~lib/builtins/abort unreachable @@ -5004,7 +5053,7 @@ if i32.const 0 i32.const 1056 - i32.const 182 + i32.const 191 i32.const 3 call $~lib/builtins/abort unreachable @@ -5024,7 +5073,7 @@ if i32.const 0 i32.const 1056 - i32.const 186 + i32.const 195 i32.const 3 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index 798cb9cb52..7fccfce0a4 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -122,6 +122,15 @@ date.setUTCMonth(2); date.setUTCDate(1); date.setUTCDate(29); + + date = new Date(1362106799999); + date.setUTCDate(20); + assert(date.getTime() == 1363748399999); + date.setUTCDate(1); + assert(date.getTime() == 1362106799999); + + date.setUTCMilliseconds(1000); + assert(date.getTime() == 1362106800000); } // Date#setUTCMonth ///////////////////////////////////////////////////////////////////////////////// diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 2949e581b7..d187b0f407 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -2707,12 +2707,11 @@ local.get $0 i64.load offset=16 local.get $1 - i64.extend_i32_s - i64.add local.get $0 call $~lib/date/Date#getUTCMilliseconds + i32.sub i64.extend_i32_s - i64.sub + i64.add call $~lib/date/Date#setTime drop ) @@ -2731,7 +2730,7 @@ i32.const 480 i32.const 544 i32.const 126 - i32.const 34 + i32.const 38 call $~lib/builtins/abort unreachable end @@ -2764,7 +2763,7 @@ i32.const 480 i32.const 544 i32.const 131 - i32.const 34 + i32.const 38 call $~lib/builtins/abort unreachable end @@ -2888,7 +2887,7 @@ i32.const 480 i32.const 544 i32.const 143 - i32.const 56 + i32.const 52 call $~lib/builtins/abort unreachable end @@ -7339,6 +7338,60 @@ call $~lib/date/Date#setUTCDate global.get $~lib/memory/__stack_pointer i32.const 0 + i64.const 1362106799999 + call $~lib/date/Date#constructor + local.tee $6 + i32.store + local.get $6 + i32.const 20 + call $~lib/date/Date#setUTCDate + local.get $6 + call $~lib/date/Date#getTime + i64.const 1363748399999 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 128 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $6 + i32.const 1 + call $~lib/date/Date#setUTCDate + local.get $6 + call $~lib/date/Date#getTime + i64.const 1362106799999 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 130 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $6 + i32.const 1000 + call $~lib/date/Date#setUTCMilliseconds + local.get $6 + call $~lib/date/Date#getTime + i64.const 1362106800000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 133 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 i64.const 7899943856218720 call $~lib/date/Date#constructor local.tee $6 @@ -7351,7 +7404,7 @@ if i32.const 0 i32.const 32 - i32.const 130 + i32.const 139 i32.const 3 call $~lib/builtins/abort unreachable @@ -7367,7 +7420,7 @@ if i32.const 0 i32.const 32 - i32.const 132 + i32.const 141 i32.const 3 call $~lib/builtins/abort unreachable @@ -7383,7 +7436,7 @@ if i32.const 0 i32.const 32 - i32.const 134 + i32.const 143 i32.const 3 call $~lib/builtins/abort unreachable @@ -7408,7 +7461,7 @@ if i32.const 0 i32.const 32 - i32.const 143 + i32.const 152 i32.const 3 call $~lib/builtins/abort unreachable @@ -7424,7 +7477,7 @@ if i32.const 0 i32.const 32 - i32.const 145 + i32.const 154 i32.const 3 call $~lib/builtins/abort unreachable @@ -7440,7 +7493,7 @@ if i32.const 0 i32.const 32 - i32.const 147 + i32.const 156 i32.const 3 call $~lib/builtins/abort unreachable @@ -7469,7 +7522,7 @@ if i32.const 0 i32.const 32 - i32.const 153 + i32.const 162 i32.const 3 call $~lib/builtins/abort unreachable @@ -7498,7 +7551,7 @@ if i32.const 0 i32.const 32 - i32.const 155 + i32.const 164 i32.const 3 call $~lib/builtins/abort unreachable @@ -7527,7 +7580,7 @@ if i32.const 0 i32.const 32 - i32.const 157 + i32.const 166 i32.const 3 call $~lib/builtins/abort unreachable @@ -7550,7 +7603,7 @@ if i32.const 0 i32.const 32 - i32.const 164 + i32.const 173 i32.const 3 call $~lib/builtins/abort unreachable @@ -7573,7 +7626,7 @@ if i32.const 0 i32.const 32 - i32.const 166 + i32.const 175 i32.const 3 call $~lib/builtins/abort unreachable @@ -7596,7 +7649,7 @@ if i32.const 0 i32.const 32 - i32.const 168 + i32.const 177 i32.const 3 call $~lib/builtins/abort unreachable @@ -7632,7 +7685,7 @@ if i32.const 0 i32.const 32 - i32.const 171 + i32.const 180 i32.const 3 call $~lib/builtins/abort unreachable @@ -7655,7 +7708,7 @@ if i32.const 0 i32.const 32 - i32.const 178 + i32.const 187 i32.const 3 call $~lib/builtins/abort unreachable @@ -7678,7 +7731,7 @@ if i32.const 0 i32.const 32 - i32.const 182 + i32.const 191 i32.const 3 call $~lib/builtins/abort unreachable @@ -7701,7 +7754,7 @@ if i32.const 0 i32.const 32 - i32.const 186 + i32.const 195 i32.const 3 call $~lib/builtins/abort unreachable From 795d014f595748c03a554bab03ad7a86ef186a25 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Wed, 14 Apr 2021 14:18:27 +0300 Subject: [PATCH 06/47] more tests --- tests/compiler/std/date.optimized.wat | 77 ++++++++++++++++----- tests/compiler/std/date.ts | 9 +++ tests/compiler/std/date.untouched.wat | 96 ++++++++++++++++++++++----- 3 files changed, 150 insertions(+), 32 deletions(-) diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index 3a86c86b92..c6d6b622c1 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -4749,6 +4749,51 @@ call $~lib/builtins/abort unreachable end + local.get $0 + i32.const 3600000 + call $~lib/date/Date#setUTCMilliseconds + local.get $0 + i64.load offset=16 + i64.const 1362110400000 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 136 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 3600001 + call $~lib/date/Date#setUTCMilliseconds + local.get $0 + i64.load offset=16 + i64.const 1362114000001 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 139 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 3600001 + call $~lib/date/Date#setUTCMilliseconds + local.get $0 + i64.load offset=16 + i64.const 1362117600001 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 142 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i64.const 7899943856218720 call $~lib/date/Date#constructor @@ -4761,7 +4806,7 @@ if i32.const 0 i32.const 1056 - i32.const 139 + i32.const 148 i32.const 3 call $~lib/builtins/abort unreachable @@ -4776,7 +4821,7 @@ if i32.const 0 i32.const 1056 - i32.const 141 + i32.const 150 i32.const 3 call $~lib/builtins/abort unreachable @@ -4791,7 +4836,7 @@ if i32.const 0 i32.const 1056 - i32.const 143 + i32.const 152 i32.const 3 call $~lib/builtins/abort unreachable @@ -4814,7 +4859,7 @@ if i32.const 0 i32.const 1056 - i32.const 152 + i32.const 161 i32.const 3 call $~lib/builtins/abort unreachable @@ -4829,7 +4874,7 @@ if i32.const 0 i32.const 1056 - i32.const 154 + i32.const 163 i32.const 3 call $~lib/builtins/abort unreachable @@ -4844,7 +4889,7 @@ if i32.const 0 i32.const 1056 - i32.const 156 + i32.const 165 i32.const 3 call $~lib/builtins/abort unreachable @@ -4870,7 +4915,7 @@ if i32.const 0 i32.const 1056 - i32.const 162 + i32.const 171 i32.const 3 call $~lib/builtins/abort unreachable @@ -4896,7 +4941,7 @@ if i32.const 0 i32.const 1056 - i32.const 164 + i32.const 173 i32.const 3 call $~lib/builtins/abort unreachable @@ -4922,7 +4967,7 @@ if i32.const 0 i32.const 1056 - i32.const 166 + i32.const 175 i32.const 3 call $~lib/builtins/abort unreachable @@ -4942,7 +4987,7 @@ if i32.const 0 i32.const 1056 - i32.const 173 + i32.const 182 i32.const 3 call $~lib/builtins/abort unreachable @@ -4962,7 +5007,7 @@ if i32.const 0 i32.const 1056 - i32.const 175 + i32.const 184 i32.const 3 call $~lib/builtins/abort unreachable @@ -4982,7 +5027,7 @@ if i32.const 0 i32.const 1056 - i32.const 177 + i32.const 186 i32.const 3 call $~lib/builtins/abort unreachable @@ -5013,7 +5058,7 @@ if i32.const 0 i32.const 1056 - i32.const 180 + i32.const 189 i32.const 3 call $~lib/builtins/abort unreachable @@ -5033,7 +5078,7 @@ if i32.const 0 i32.const 1056 - i32.const 187 + i32.const 196 i32.const 3 call $~lib/builtins/abort unreachable @@ -5053,7 +5098,7 @@ if i32.const 0 i32.const 1056 - i32.const 191 + i32.const 200 i32.const 3 call $~lib/builtins/abort unreachable @@ -5073,7 +5118,7 @@ if i32.const 0 i32.const 1056 - i32.const 195 + i32.const 204 i32.const 3 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index 7fccfce0a4..05108017b5 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -131,6 +131,15 @@ date.setUTCMilliseconds(1000); assert(date.getTime() == 1362106800000); + + date.setUTCMilliseconds(60 * 60 * 1000); + assert(date.getTime() == 1362110400000); + + date.setUTCMilliseconds(60 * 60 * 1000 + 1); + assert(date.getTime() == 1362114000001); + + date.setUTCMilliseconds(60 * 60 * 1000 + 1); + assert(date.getTime() == 1362117600001); } // Date#setUTCMonth ///////////////////////////////////////////////////////////////////////////////// diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index d187b0f407..19255c162a 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -7390,6 +7390,70 @@ call $~lib/builtins/abort unreachable end + local.get $6 + i32.const 60 + i32.const 60 + i32.mul + i32.const 1000 + i32.mul + call $~lib/date/Date#setUTCMilliseconds + local.get $6 + call $~lib/date/Date#getTime + i64.const 1362110400000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 136 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $6 + i32.const 60 + i32.const 60 + i32.mul + i32.const 1000 + i32.mul + i32.const 1 + i32.add + call $~lib/date/Date#setUTCMilliseconds + local.get $6 + call $~lib/date/Date#getTime + i64.const 1362114000001 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 139 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $6 + i32.const 60 + i32.const 60 + i32.mul + i32.const 1000 + i32.mul + i32.const 1 + i32.add + call $~lib/date/Date#setUTCMilliseconds + local.get $6 + call $~lib/date/Date#getTime + i64.const 1362117600001 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 142 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i32.const 0 i64.const 7899943856218720 @@ -7404,7 +7468,7 @@ if i32.const 0 i32.const 32 - i32.const 139 + i32.const 148 i32.const 3 call $~lib/builtins/abort unreachable @@ -7420,7 +7484,7 @@ if i32.const 0 i32.const 32 - i32.const 141 + i32.const 150 i32.const 3 call $~lib/builtins/abort unreachable @@ -7436,7 +7500,7 @@ if i32.const 0 i32.const 32 - i32.const 143 + i32.const 152 i32.const 3 call $~lib/builtins/abort unreachable @@ -7461,7 +7525,7 @@ if i32.const 0 i32.const 32 - i32.const 152 + i32.const 161 i32.const 3 call $~lib/builtins/abort unreachable @@ -7477,7 +7541,7 @@ if i32.const 0 i32.const 32 - i32.const 154 + i32.const 163 i32.const 3 call $~lib/builtins/abort unreachable @@ -7493,7 +7557,7 @@ if i32.const 0 i32.const 32 - i32.const 156 + i32.const 165 i32.const 3 call $~lib/builtins/abort unreachable @@ -7522,7 +7586,7 @@ if i32.const 0 i32.const 32 - i32.const 162 + i32.const 171 i32.const 3 call $~lib/builtins/abort unreachable @@ -7551,7 +7615,7 @@ if i32.const 0 i32.const 32 - i32.const 164 + i32.const 173 i32.const 3 call $~lib/builtins/abort unreachable @@ -7580,7 +7644,7 @@ if i32.const 0 i32.const 32 - i32.const 166 + i32.const 175 i32.const 3 call $~lib/builtins/abort unreachable @@ -7603,7 +7667,7 @@ if i32.const 0 i32.const 32 - i32.const 173 + i32.const 182 i32.const 3 call $~lib/builtins/abort unreachable @@ -7626,7 +7690,7 @@ if i32.const 0 i32.const 32 - i32.const 175 + i32.const 184 i32.const 3 call $~lib/builtins/abort unreachable @@ -7649,7 +7713,7 @@ if i32.const 0 i32.const 32 - i32.const 177 + i32.const 186 i32.const 3 call $~lib/builtins/abort unreachable @@ -7685,7 +7749,7 @@ if i32.const 0 i32.const 32 - i32.const 180 + i32.const 189 i32.const 3 call $~lib/builtins/abort unreachable @@ -7708,7 +7772,7 @@ if i32.const 0 i32.const 32 - i32.const 187 + i32.const 196 i32.const 3 call $~lib/builtins/abort unreachable @@ -7731,7 +7795,7 @@ if i32.const 0 i32.const 32 - i32.const 191 + i32.const 200 i32.const 3 call $~lib/builtins/abort unreachable @@ -7754,7 +7818,7 @@ if i32.const 0 i32.const 32 - i32.const 195 + i32.const 204 i32.const 3 call $~lib/builtins/abort unreachable From cfa431b4989cf6e5ba574c970ea0282b9280bd2a Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Wed, 14 Apr 2021 15:08:01 +0300 Subject: [PATCH 07/47] more checks --- tests/compiler/std/date.optimized.wat | 107 +++++++++++++++++++------ tests/compiler/std/date.ts | 6 ++ tests/compiler/std/date.untouched.wat | 109 ++++++++++++++++++++------ 3 files changed, 178 insertions(+), 44 deletions(-) diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index c6d6b622c1..6e21cfba28 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -4699,6 +4699,69 @@ local.get $0 i32.const 29 call $~lib/date/Date#setUTCDate + local.get $0 + i64.load offset=16 + i64.const 1711674191274 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 126 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + i32.const 29 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 127 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCMinutes + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 128 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCSeconds + i32.const 11 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 129 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i64.load offset=16 + i64.const 1000 + i64.rem_s + i32.wrap_i64 + i32.const 274 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 130 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i64.const 1362106799999 call $~lib/date/Date#constructor @@ -4714,7 +4777,7 @@ if i32.const 0 i32.const 1056 - i32.const 128 + i32.const 134 i32.const 3 call $~lib/builtins/abort unreachable @@ -4729,7 +4792,7 @@ if i32.const 0 i32.const 1056 - i32.const 130 + i32.const 136 i32.const 3 call $~lib/builtins/abort unreachable @@ -4744,7 +4807,7 @@ if i32.const 0 i32.const 1056 - i32.const 133 + i32.const 139 i32.const 3 call $~lib/builtins/abort unreachable @@ -4759,7 +4822,7 @@ if i32.const 0 i32.const 1056 - i32.const 136 + i32.const 142 i32.const 3 call $~lib/builtins/abort unreachable @@ -4774,7 +4837,7 @@ if i32.const 0 i32.const 1056 - i32.const 139 + i32.const 145 i32.const 3 call $~lib/builtins/abort unreachable @@ -4789,7 +4852,7 @@ if i32.const 0 i32.const 1056 - i32.const 142 + i32.const 148 i32.const 3 call $~lib/builtins/abort unreachable @@ -4806,7 +4869,7 @@ if i32.const 0 i32.const 1056 - i32.const 148 + i32.const 154 i32.const 3 call $~lib/builtins/abort unreachable @@ -4821,7 +4884,7 @@ if i32.const 0 i32.const 1056 - i32.const 150 + i32.const 156 i32.const 3 call $~lib/builtins/abort unreachable @@ -4836,7 +4899,7 @@ if i32.const 0 i32.const 1056 - i32.const 152 + i32.const 158 i32.const 3 call $~lib/builtins/abort unreachable @@ -4859,7 +4922,7 @@ if i32.const 0 i32.const 1056 - i32.const 161 + i32.const 167 i32.const 3 call $~lib/builtins/abort unreachable @@ -4874,7 +4937,7 @@ if i32.const 0 i32.const 1056 - i32.const 163 + i32.const 169 i32.const 3 call $~lib/builtins/abort unreachable @@ -4889,7 +4952,7 @@ if i32.const 0 i32.const 1056 - i32.const 165 + i32.const 171 i32.const 3 call $~lib/builtins/abort unreachable @@ -4915,7 +4978,7 @@ if i32.const 0 i32.const 1056 - i32.const 171 + i32.const 177 i32.const 3 call $~lib/builtins/abort unreachable @@ -4941,7 +5004,7 @@ if i32.const 0 i32.const 1056 - i32.const 173 + i32.const 179 i32.const 3 call $~lib/builtins/abort unreachable @@ -4967,7 +5030,7 @@ if i32.const 0 i32.const 1056 - i32.const 175 + i32.const 181 i32.const 3 call $~lib/builtins/abort unreachable @@ -4987,7 +5050,7 @@ if i32.const 0 i32.const 1056 - i32.const 182 + i32.const 188 i32.const 3 call $~lib/builtins/abort unreachable @@ -5007,7 +5070,7 @@ if i32.const 0 i32.const 1056 - i32.const 184 + i32.const 190 i32.const 3 call $~lib/builtins/abort unreachable @@ -5027,7 +5090,7 @@ if i32.const 0 i32.const 1056 - i32.const 186 + i32.const 192 i32.const 3 call $~lib/builtins/abort unreachable @@ -5058,7 +5121,7 @@ if i32.const 0 i32.const 1056 - i32.const 189 + i32.const 195 i32.const 3 call $~lib/builtins/abort unreachable @@ -5078,7 +5141,7 @@ if i32.const 0 i32.const 1056 - i32.const 196 + i32.const 202 i32.const 3 call $~lib/builtins/abort unreachable @@ -5098,7 +5161,7 @@ if i32.const 0 i32.const 1056 - i32.const 200 + i32.const 206 i32.const 3 call $~lib/builtins/abort unreachable @@ -5118,7 +5181,7 @@ if i32.const 0 i32.const 1056 - i32.const 204 + i32.const 210 i32.const 3 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index 05108017b5..3448ec89d3 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -123,6 +123,12 @@ date.setUTCDate(1); date.setUTCDate(29); + assert(date.getTime() == 1711674191274); + assert(date.getUTCDate() == 29); + assert(date.getUTCMinutes() == 3); + assert(date.getUTCSeconds() == 11); + assert(date.getUTCMilliseconds() == 274); + date = new Date(1362106799999); date.setUTCDate(20); assert(date.getTime() == 1363748399999); diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 19255c162a..c0b13c9c1d 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -7336,6 +7336,71 @@ local.get $6 i32.const 29 call $~lib/date/Date#setUTCDate + local.get $6 + call $~lib/date/Date#getTime + i64.const 1711674191274 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 126 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $6 + call $~lib/date/Date#getUTCDate + i32.const 29 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 127 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $6 + call $~lib/date/Date#getUTCMinutes + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 128 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $6 + call $~lib/date/Date#getUTCSeconds + i32.const 11 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 129 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $6 + call $~lib/date/Date#getUTCMilliseconds + i32.const 274 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 130 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i32.const 0 i64.const 1362106799999 @@ -7353,7 +7418,7 @@ if i32.const 0 i32.const 32 - i32.const 128 + i32.const 134 i32.const 3 call $~lib/builtins/abort unreachable @@ -7369,7 +7434,7 @@ if i32.const 0 i32.const 32 - i32.const 130 + i32.const 136 i32.const 3 call $~lib/builtins/abort unreachable @@ -7385,7 +7450,7 @@ if i32.const 0 i32.const 32 - i32.const 133 + i32.const 139 i32.const 3 call $~lib/builtins/abort unreachable @@ -7405,7 +7470,7 @@ if i32.const 0 i32.const 32 - i32.const 136 + i32.const 142 i32.const 3 call $~lib/builtins/abort unreachable @@ -7427,7 +7492,7 @@ if i32.const 0 i32.const 32 - i32.const 139 + i32.const 145 i32.const 3 call $~lib/builtins/abort unreachable @@ -7449,7 +7514,7 @@ if i32.const 0 i32.const 32 - i32.const 142 + i32.const 148 i32.const 3 call $~lib/builtins/abort unreachable @@ -7468,7 +7533,7 @@ if i32.const 0 i32.const 32 - i32.const 148 + i32.const 154 i32.const 3 call $~lib/builtins/abort unreachable @@ -7484,7 +7549,7 @@ if i32.const 0 i32.const 32 - i32.const 150 + i32.const 156 i32.const 3 call $~lib/builtins/abort unreachable @@ -7500,7 +7565,7 @@ if i32.const 0 i32.const 32 - i32.const 152 + i32.const 158 i32.const 3 call $~lib/builtins/abort unreachable @@ -7525,7 +7590,7 @@ if i32.const 0 i32.const 32 - i32.const 161 + i32.const 167 i32.const 3 call $~lib/builtins/abort unreachable @@ -7541,7 +7606,7 @@ if i32.const 0 i32.const 32 - i32.const 163 + i32.const 169 i32.const 3 call $~lib/builtins/abort unreachable @@ -7557,7 +7622,7 @@ if i32.const 0 i32.const 32 - i32.const 165 + i32.const 171 i32.const 3 call $~lib/builtins/abort unreachable @@ -7586,7 +7651,7 @@ if i32.const 0 i32.const 32 - i32.const 171 + i32.const 177 i32.const 3 call $~lib/builtins/abort unreachable @@ -7615,7 +7680,7 @@ if i32.const 0 i32.const 32 - i32.const 173 + i32.const 179 i32.const 3 call $~lib/builtins/abort unreachable @@ -7644,7 +7709,7 @@ if i32.const 0 i32.const 32 - i32.const 175 + i32.const 181 i32.const 3 call $~lib/builtins/abort unreachable @@ -7667,7 +7732,7 @@ if i32.const 0 i32.const 32 - i32.const 182 + i32.const 188 i32.const 3 call $~lib/builtins/abort unreachable @@ -7690,7 +7755,7 @@ if i32.const 0 i32.const 32 - i32.const 184 + i32.const 190 i32.const 3 call $~lib/builtins/abort unreachable @@ -7713,7 +7778,7 @@ if i32.const 0 i32.const 32 - i32.const 186 + i32.const 192 i32.const 3 call $~lib/builtins/abort unreachable @@ -7749,7 +7814,7 @@ if i32.const 0 i32.const 32 - i32.const 189 + i32.const 195 i32.const 3 call $~lib/builtins/abort unreachable @@ -7772,7 +7837,7 @@ if i32.const 0 i32.const 32 - i32.const 196 + i32.const 202 i32.const 3 call $~lib/builtins/abort unreachable @@ -7795,7 +7860,7 @@ if i32.const 0 i32.const 32 - i32.const 200 + i32.const 206 i32.const 3 call $~lib/builtins/abort unreachable @@ -7818,7 +7883,7 @@ if i32.const 0 i32.const 32 - i32.const 204 + i32.const 210 i32.const 3 call $~lib/builtins/abort unreachable From 264e666f3f40f50c6bbfa569eece0f649acf5b69 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Wed, 14 Apr 2021 15:44:25 +0300 Subject: [PATCH 08/47] fixes (WIP) --- std/assembly/date.ts | 9 +- tests/compiler/std/date.optimized.wat | 267 ++++++++++++++++++++++---- tests/compiler/std/date.ts | 37 ++++ tests/compiler/std/date.untouched.wat | 262 +++++++++++++++++++++++-- 4 files changed, 518 insertions(+), 57 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 6e80ab761a..51e25e293b 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -158,7 +158,7 @@ export class Date { toISOString(): string { var yearStr = this.year.toString(); - if (yearStr.length > 4) { + if (this.epochMillis > 0 && yearStr.length > 4) { yearStr = "+" + yearStr.padStart(6, "0"); } @@ -224,9 +224,10 @@ function ymdFromEpochDays(z: i32): i32 { var yoe = (doe - doe / 1460 + doe / 36524 - doe / 146096) / 365; // [0, 399] var year = yoe + era * 400; var doy = doe - (365 * yoe + yoe / 4 - yoe / 100); // [0, 365] - var mp = (5 * doy + 2) / 153; // [0, 11] - _day = doy - (153 * mp + 2) / 5 + 1; // [1, 31] - var mo = _month = mp + (mp < 10 ? 3 : -9); // [1, 12] + var mo = (5 * doy + 2) / 153; // [0, 11] + _day = doy - (153 * mo + 2) / 5 + 1; // [1, 31] + mo += mo < 10 ? 3 : -9; // [1, 12] + _month = mo; year += i32(mo <= 2); return year; } diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index 6e21cfba28..21224422a5 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -7,12 +7,14 @@ (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $none_=>_i32 (func (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_i32_i32_i32_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) (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") @@ -80,8 +82,12 @@ (data (i32.const 2920) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") (data (i32.const 2988) "L") (data (i32.const 3000) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") - (data (i32.const 3072) "\06\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 3100) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") + (data (i32.const 3068) "L") + (data (i32.const 3080) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3148) "L") + (data (i32.const 3160) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3232) "\06\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 3260) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) @@ -94,7 +100,7 @@ (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/memory/__stack_pointer (mut i32) (i32.const 19508)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 19668)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -239,6 +245,14 @@ i32.mul i32.const 2 i32.add + local.tee $0 + local.get $0 + i32.const 152 + i32.sub + local.get $0 + i32.const 0 + i32.ge_s + select i32.const 153 i32.div_s local.set $0 @@ -262,13 +276,14 @@ i32.lt_s select i32.add + local.tee $0 global.set $~lib/date/_month local.get $1 local.get $2 i32.const 400 i32.mul i32.add - global.get $~lib/date/_month + local.get $0 i32.const 2 i32.le_s i32.add @@ -407,7 +422,7 @@ if i32.const 0 local.get $0 - i32.const 19508 + i32.const 19668 i32.lt_u local.get $0 i32.load offset=8 @@ -453,7 +468,7 @@ i32.const 1 else local.get $1 - i32.const 3072 + i32.const 3232 i32.load i32.gt_u if @@ -467,7 +482,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 3076 + i32.const 3236 i32.add i32.load i32.const 32 @@ -1041,10 +1056,10 @@ if unreachable end - i32.const 19520 + i32.const 19680 i32.const 0 i32.store - i32.const 21088 + i32.const 21248 i32.const 0 i32.store loop $for-loop|0 @@ -1055,7 +1070,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 19520 + i32.const 19680 i32.add i32.const 0 i32.store offset=4 @@ -1073,7 +1088,7 @@ i32.add i32.const 2 i32.shl - i32.const 19520 + i32.const 19680 i32.add i32.const 0 i32.store offset=96 @@ -1091,13 +1106,13 @@ br $for-loop|0 end end - i32.const 19520 - i32.const 21092 + i32.const 19680 + i32.const 21252 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 19520 + i32.const 19680 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -1176,7 +1191,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 19508 + i32.const 19668 i32.lt_u if local.get $0 @@ -1266,7 +1281,7 @@ unreachable end local.get $0 - i32.const 19508 + i32.const 19668 i32.lt_u if local.get $0 @@ -1289,7 +1304,7 @@ i32.const 4 i32.add local.tee $1 - i32.const 19508 + i32.const 19668 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -3314,11 +3329,11 @@ ) (func $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 3124 + i32.const 3284 i32.lt_s if - i32.const 19536 - i32.const 19584 + i32.const 19696 + i32.const 19744 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3381,14 +3396,22 @@ call $~lib/number/I32#toString local.tee $1 i32.store - local.get $1 - i32.const 20 - i32.sub - i32.load offset=16 - i32.const 1 - i32.shr_u - i32.const 4 - i32.gt_u + local.get $0 + i64.load offset=16 + i64.const 0 + i64.gt_s + if (result i32) + local.get $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + i32.const 4 + i32.gt_u + else + i32.const 0 + end if global.get $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer @@ -4093,9 +4116,10 @@ ) (func $start:std/date (local $0 i32) - (local $1 i64) + (local $1 i32) + (local $2 i64) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 24 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check @@ -4103,8 +4127,11 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=16 i32.const 1970 i32.const 1 i32.const 1 @@ -4162,7 +4189,7 @@ memory.size i32.const 16 i32.shl - i32.const 19508 + i32.const 19668 i32.sub i32.const 1 i32.shr_u @@ -5187,7 +5214,179 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 12 + i64.const -8640000000000000 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i64.const 8640000000000000 + call $~lib/date/Date#constructor + local.tee $1 + i32.store offset=12 + local.get $0 + i64.load offset=16 + i64.const -8640000000000000 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 218 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i64.load offset=16 + i64.const 8640000000000000 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 219 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load + i32.const -271821 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 221 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load + i32.const 275760 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 222 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=4 + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 224 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=4 + i32.const 9 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 225 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 227 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.load offset=8 + i32.const 13 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 228 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3088 + i32.store offset=8 + local.get $0 + i32.const 3088 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1056 + i32.const 230 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3168 + i32.store offset=8 + local.get $0 + i32.const 3168 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1056 + i32.const 231 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 8639999999999999 + call $~lib/date/Date#constructor + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i64.const -8639999999999999 + call $~lib/date/Date#constructor + local.tee $0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 1968 + i32.store offset=4 + i32.const 1968 + i32.const 2 + local.get $0 + i32.load offset=8 + f64.convert_i32_s + local.get $0 + call $~lib/date/Date#getUTCMinutes + f64.convert_i32_s + f64.const 0 + f64.const 0 + f64.const 0 + call $~lib/builtins/trace + global.get $~lib/memory/__stack_pointer + i32.const 24 i32.add global.set $~lib/memory/__stack_pointer ) diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index 3448ec89d3..3d496ff6ef 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -209,3 +209,40 @@ date = Date.fromString("1976-02-02T12:34:56.456Z"); assert(date.getTime() == 192112496456); } + +// Minimum / Maximum dates ///////////////////////////////////////////////////////////////////////// +{ + let minDate = new Date(-8640000000000000); + let maxDate = new Date(8640000000000000); + + assert(minDate.getTime() == -8640000000000000); + assert(maxDate.getTime() == 8640000000000000); + + assert(minDate.getUTCFullYear() == -271821); + assert(maxDate.getUTCFullYear() == 275760); + + assert(minDate.getUTCMonth() == 3); + assert(maxDate.getUTCMonth() == 8); + + assert(minDate.getUTCDate() == 20); + assert(maxDate.getUTCDate() == 13); + + assert(minDate.toISOString() == "-271821-04-20T00:00:00.000Z"); + assert(maxDate.toISOString() == "+275760-09-13T00:00:00.000Z"); + + let maxDateDec = new Date( 8640000000000000 - 1); + let minDateInc = new Date(-8640000000000000 + 1); + + trace("", 2, minDateInc.getUTCDate(), minDateInc.getUTCMinutes()); + + // assert(minDateInc.getUTCDate() == 20); + + // assert(maxDateDec.toISOString() == "+275760-09-12T23:59:59.999Z"); + // trace(minDateInc.toISOString()); + + + // assert(new Date(-8640000000000000 + 1).toISOString() == "-271821-04-20T00:00:00.001Z"); + + // console.log(new Date(maxDate.getTime() + 1).toString()); // Invalid Date + // console.log(new Date(minDate.getTime() - 1).toString()); // Invalid Date +} diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index c0b13c9c1d..8f579274af 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -7,6 +7,7 @@ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) (type $i32_i64_i32_i32_=>_none (func (param i32 i64 i32 i32))) @@ -19,6 +20,7 @@ (type $i32_i32_i32_i32_i32_i32_i32_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) (type $i32_i64_=>_i64 (func (param i32 i64) (result i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) (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") @@ -58,7 +60,9 @@ (data (i32.const 3276) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00\00\00\00\00\00\00") (data (i32.const 3340) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 3420) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3504) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") + (data (i32.const 3500) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 3580) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 3664) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") (table $0 1 funcref) (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) @@ -75,10 +79,10 @@ (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) - (global $~lib/rt/__rtti_base i32 (i32.const 3504)) - (global $~lib/memory/__data_end i32 (i32.const 3556)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 19940)) - (global $~lib/memory/__heap_base i32 (i32.const 19940)) + (global $~lib/rt/__rtti_base i32 (i32.const 3664)) + (global $~lib/memory/__data_end i32 (i32.const 3716)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20100)) + (global $~lib/memory/__heap_base i32 (i32.const 20100)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -199,7 +203,6 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) local.get $0 i32.const 719468 i32.add @@ -270,7 +273,22 @@ i32.mul i32.const 2 i32.add + local.set $2 i32.const 153 + local.set $1 + local.get $2 + i32.const 0 + i32.ge_s + if (result i32) + local.get $2 + else + local.get $2 + local.get $1 + i32.sub + i32.const 1 + i32.add + end + local.get $1 i32.div_s local.set $8 local.get $7 @@ -295,11 +313,11 @@ i32.const -9 end i32.add + local.set $8 + local.get $8 global.set $~lib/date/_month - global.get $~lib/date/_month - local.set $9 local.get $6 - local.get $9 + local.get $8 i32.const 2 i32.le_s i32.add @@ -5700,8 +5718,8 @@ global.get $~lib/memory/__data_end i32.lt_s if - i32.const 19968 - i32.const 20016 + i32.const 20128 + i32.const 20176 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -5765,10 +5783,18 @@ call $~lib/number/I32#toString local.tee $1 i32.store - local.get $1 - call $~lib/string/String#get:length - i32.const 4 - i32.gt_s + local.get $0 + i64.load offset=16 + i64.const 0 + i64.gt_s + if (result i32) + local.get $1 + call $~lib/string/String#get:length + i32.const 4 + i32.gt_s + else + i32.const 0 + end if global.get $~lib/memory/__stack_pointer i32.const 2368 @@ -6647,7 +6673,7 @@ (local $7 i64) (local $8 i32) global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 24 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check @@ -6655,8 +6681,11 @@ i64.const 0 i64.store global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store offset=8 + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=16 i32.const 1970 local.set $2 i32.const 0 @@ -7889,7 +7918,202 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 12 + i32.const 0 + i64.const -8640000000000000 + call $~lib/date/Date#constructor + local.tee $6 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i64.const 8640000000000000 + call $~lib/date/Date#constructor + local.tee $5 + i32.store offset=12 + local.get $6 + call $~lib/date/Date#getTime + i64.const -8640000000000000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 218 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $5 + call $~lib/date/Date#getTime + i64.const 8640000000000000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 219 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $6 + call $~lib/date/Date#getUTCFullYear + i32.const -271821 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 221 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $5 + call $~lib/date/Date#getUTCFullYear + i32.const 275760 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 222 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $6 + call $~lib/date/Date#getUTCMonth + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 224 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $5 + call $~lib/date/Date#getUTCMonth + i32.const 8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 225 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $6 + call $~lib/date/Date#getUTCDate + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 227 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $5 + call $~lib/date/Date#getUTCDate + i32.const 13 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 228 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $6 + call $~lib/date/Date#toISOString + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 3520 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=8 + local.get $8 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 230 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $5 + call $~lib/date/Date#toISOString + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 3600 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=8 + local.get $8 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 231 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i64.const 8640000000000000 + i64.const 1 + i64.sub + call $~lib/date/Date#constructor + local.tee $4 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i64.const -8640000000000000 + i64.const 1 + i64.add + call $~lib/date/Date#constructor + local.tee $3 + i32.store offset=20 + i32.const 2400 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 2 + local.get $3 + call $~lib/date/Date#getUTCDate + f64.convert_i32_s + local.get $3 + call $~lib/date/Date#getUTCMinutes + f64.convert_i32_s + f64.const 0 + f64.const 0 + f64.const 0 + call $~lib/builtins/trace + global.get $~lib/memory/__stack_pointer + i32.const 24 i32.add global.set $~lib/memory/__stack_pointer ) From 4715bc7111083ca60b1126246a5df8c5215c8b71 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Wed, 14 Apr 2021 18:06:58 +0300 Subject: [PATCH 09/47] skip add guards --- std/assembly/date.ts | 18 +- std/assembly/util/error.ts | 4 + tests/compiler/std/date.optimized.wat | 488 ++++++++++++++------------ tests/compiler/std/date.untouched.wat | 393 ++++++++++++--------- 4 files changed, 514 insertions(+), 389 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 51e25e293b..54a7e7b06b 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -1,4 +1,4 @@ -import { E_VALUEOUTOFRANGE } from "util/error"; +import { E_VALUEOUTOFRANGE, E_INVALIDDATE } from "util/error"; import { now as Date_now } from "./bindings/Date"; // @ts-ignore: decorator @@ -73,6 +73,11 @@ export class Date { } constructor(private epochMillis: i64) { + // this differs from JavaScript which prefer return NaN or "Invalid Date" string + // insted throw exceprion + if (invalidDate(epochMillis)) { + throw new RangeError(E_INVALIDDATE); + } this.year = ymdFromEpochDays(i32(epochMillis / MILLIS_PER_DAY)); this.month = _month; this.day = _day; @@ -83,6 +88,9 @@ export class Date { } setTime(value: i64): i64 { + if (invalidDate(this.epochMillis)) { + throw new RangeError(E_INVALIDDATE); + } this.epochMillis = value; this.year = ymdFromEpochDays(i32(value / MILLIS_PER_DAY)); this.month = _month; @@ -138,6 +146,7 @@ export class Date { } setUTCDate(day: i32): void { + if (this.day == day) return; var year = this.year; var month = this.month; if (day < 1 || day > daysInMonth(year, month)) throw new RangeError(E_VALUEOUTOFRANGE); @@ -146,12 +155,14 @@ export class Date { } setUTCMonth(month: i32): void { + if (this.month == month) return; if (month < 1 || month > 12) throw new RangeError(E_VALUEOUTOFRANGE); var ms = this.epochMillis % MILLIS_PER_DAY; this.setTime(i64(daysSinceEpoch(this.year, month + 1, this.day)) * MILLIS_PER_DAY + ms); } setUTCFullYear(year: i32): void { + if (this.year == year) return; var ms = this.epochMillis % MILLIS_PER_DAY; this.setTime(i64(daysSinceEpoch(year, this.month, this.day)) * MILLIS_PER_DAY + ms); } @@ -216,6 +227,11 @@ function daysInMonth(year: i32, month: i32): i32 { : 30 + ((month + i32(month >= 8)) & 1); } +// @ts-ignore: decorator +@inline function invalidDate(millis: i64): bool { + return millis < -8640000000000000 || millis > 8640000000000000; +} + // see: http://howardhinnant.github.io/date_algorithms.html#civil_from_days function ymdFromEpochDays(z: i32): i32 { z += 719468; diff --git a/std/assembly/util/error.ts b/std/assembly/util/error.ts index 922864ad20..4678d002aa 100644 --- a/std/assembly/util/error.ts +++ b/std/assembly/util/error.ts @@ -44,3 +44,7 @@ export const E_ALREADY_PINNED: string = "Object already pinned"; // @ts-ignore: decorator @lazy @inline export const E_NOT_PINNED: string = "Object is not pinned"; + +// @ts-ignore: decorator +@lazy @inline +export const E_INVALIDDATE: string = "Invalid Date"; diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index 21224422a5..c86dbe5455 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -18,76 +18,78 @@ (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 1484) "<") - (data (i32.const 1496) "\01\00\00\00$\00\00\00V\00a\00l\00u\00e\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") - (data (i32.const 1548) ",") - (data (i32.const 1560) "\01\00\00\00\18\00\00\00~\00l\00i\00b\00/\00d\00a\00t\00e\00.\00t\00s") - (data (i32.const 1596) "|") - (data (i32.const 1608) "\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006") - (data (i32.const 1724) "<") - (data (i32.const 1736) "\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s") - (data (i32.const 1788) "\1c") - (data (i32.const 1800) "\01\00\00\00\02\00\00\000") - (data (i32.const 1820) "\\") - (data (i32.const 1832) "\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") - (data (i32.const 1916) "\1c") - (data (i32.const 1928) "\01\00\00\00\02\00\00\00+") - (data (i32.const 1948) "\1c") - (data (i32.const 1960) "\01") - (data (i32.const 1980) "\1c") - (data (i32.const 1992) "\01\00\00\00\02\00\00\00-") - (data (i32.const 2012) "\1c") - (data (i32.const 2024) "\01\00\00\00\02\00\00\00T") - (data (i32.const 2044) "\1c") - (data (i32.const 2056) "\01\00\00\00\02\00\00\00:") - (data (i32.const 2076) "\1c") - (data (i32.const 2088) "\01\00\00\00\02\00\00\00.") - (data (i32.const 2108) "\1c") - (data (i32.const 2120) "\01\00\00\00\02\00\00\00Z") - (data (i32.const 2140) "L") - (data (i32.const 2152) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\000\002\000\00Z") - (data (i32.const 2220) "L") - (data (i32.const 2232) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z") - (data (i32.const 2300) "L") - (data (i32.const 2312) "\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z") - (data (i32.const 2380) ",") - (data (i32.const 2392) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") + (data (i32.const 1084) ",") + (data (i32.const 1096) "\01\00\00\00\18\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00D\00a\00t\00e") + (data (i32.const 1132) ",") + (data (i32.const 1144) "\01\00\00\00\18\00\00\00~\00l\00i\00b\00/\00d\00a\00t\00e\00.\00t\00s") + (data (i32.const 1180) "<") + (data (i32.const 1192) "\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 1244) "<") + (data (i32.const 1256) "\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 1372) "<") + (data (i32.const 1384) "\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 1436) ",") + (data (i32.const 1448) "\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 1516) "<") + (data (i32.const 1528) "\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 1580) "<") + (data (i32.const 1592) "\01\00\00\00$\00\00\00V\00a\00l\00u\00e\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") + (data (i32.const 1644) "|") + (data (i32.const 1656) "\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006") + (data (i32.const 1772) "<") + (data (i32.const 1784) "\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s") + (data (i32.const 1836) "\1c") + (data (i32.const 1848) "\01\00\00\00\02\00\00\000") + (data (i32.const 1868) "\\") + (data (i32.const 1880) "\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") + (data (i32.const 1964) "\1c") + (data (i32.const 1976) "\01\00\00\00\02\00\00\00+") + (data (i32.const 1996) "\1c") + (data (i32.const 2008) "\01") + (data (i32.const 2028) "\1c") + (data (i32.const 2040) "\01\00\00\00\02\00\00\00-") + (data (i32.const 2060) "\1c") + (data (i32.const 2072) "\01\00\00\00\02\00\00\00T") + (data (i32.const 2092) "\1c") + (data (i32.const 2104) "\01\00\00\00\02\00\00\00:") + (data (i32.const 2124) "\1c") + (data (i32.const 2136) "\01\00\00\00\02\00\00\00.") + (data (i32.const 2156) "\1c") + (data (i32.const 2168) "\01\00\00\00\02\00\00\00Z") + (data (i32.const 2188) "L") + (data (i32.const 2200) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\000\002\000\00Z") + (data (i32.const 2268) "L") + (data (i32.const 2280) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z") + (data (i32.const 2348) "L") + (data (i32.const 2360) "\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z") (data (i32.const 2428) ",") - (data (i32.const 2440) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 2440) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") (data (i32.const 2476) ",") - (data (i32.const 2488) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 2524) "|") - (data (i32.const 2536) "\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") - (data (i32.const 2652) ",") - (data (i32.const 2664) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") + (data (i32.const 2488) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 2524) ",") + (data (i32.const 2536) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 2572) "|") + (data (i32.const 2584) "\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") (data (i32.const 2700) ",") - (data (i32.const 2712) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") + (data (i32.const 2712) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") (data (i32.const 2748) ",") - (data (i32.const 2760) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002") + (data (i32.const 2760) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") (data (i32.const 2796) ",") - (data (i32.const 2808) "\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002") - (data (i32.const 2844) "<") - (data (i32.const 2856) "\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006") - (data (i32.const 2908) "L") - (data (i32.const 2920) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") - (data (i32.const 2988) "L") - (data (i32.const 3000) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") - (data (i32.const 3068) "L") - (data (i32.const 3080) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") - (data (i32.const 3148) "L") - (data (i32.const 3160) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") - (data (i32.const 3232) "\06\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 3260) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") + (data (i32.const 2808) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002") + (data (i32.const 2844) ",") + (data (i32.const 2856) "\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002") + (data (i32.const 2892) "<") + (data (i32.const 2904) "\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006") + (data (i32.const 2956) "L") + (data (i32.const 2968) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") + (data (i32.const 3036) "L") + (data (i32.const 3048) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") + (data (i32.const 3116) "L") + (data (i32.const 3128) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3196) "L") + (data (i32.const 3208) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3280) "\06\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 3308) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) @@ -100,7 +102,7 @@ (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/memory/__stack_pointer (mut i32) (i32.const 19668)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 19716)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -245,14 +247,6 @@ i32.mul i32.const 2 i32.add - local.tee $0 - local.get $0 - i32.const 152 - i32.sub - local.get $0 - i32.const 0 - i32.ge_s - select i32.const 153 i32.div_s local.set $0 @@ -300,17 +294,19 @@ (func $~lib/rt/itcms/visitRoots (local $0 i32) (local $1 i32) - i32.const 1296 + i32.const 1392 call $~lib/rt/itcms/__visit - i32.const 1504 + i32.const 1600 call $~lib/rt/itcms/__visit - i32.const 2448 + i32.const 2496 call $~lib/rt/itcms/__visit - i32.const 2544 + i32.const 2592 + call $~lib/rt/itcms/__visit + i32.const 1200 call $~lib/rt/itcms/__visit i32.const 1104 call $~lib/rt/itcms/__visit - i32.const 1840 + i32.const 1888 call $~lib/rt/itcms/__visit global.get $~lib/rt/itcms/pinSpace local.tee $1 @@ -331,7 +327,7 @@ i32.ne if i32.const 0 - i32.const 1168 + i32.const 1264 i32.const 159 i32.const 16 call $~lib/builtins/abort @@ -403,7 +399,7 @@ i32.eqz if i32.const 0 - i32.const 1168 + i32.const 1264 i32.const 147 i32.const 30 call $~lib/builtins/abort @@ -422,7 +418,7 @@ if i32.const 0 local.get $0 - i32.const 19668 + i32.const 19716 i32.lt_u local.get $0 i32.load offset=8 @@ -430,7 +426,7 @@ i32.eqz if i32.const 0 - i32.const 1168 + i32.const 1264 i32.const 127 i32.const 18 call $~lib/builtins/abort @@ -444,7 +440,7 @@ i32.eqz if i32.const 0 - i32.const 1168 + i32.const 1264 i32.const 131 i32.const 16 call $~lib/builtins/abort @@ -468,12 +464,12 @@ i32.const 1 else local.get $1 - i32.const 3232 + i32.const 3280 i32.load i32.gt_u if - i32.const 1296 - i32.const 1360 + i32.const 1392 + i32.const 1456 i32.const 22 i32.const 28 call $~lib/builtins/abort @@ -482,7 +478,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 3236 + i32.const 3284 i32.add i32.load i32.const 32 @@ -533,7 +529,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1536 i32.const 268 i32.const 14 call $~lib/builtins/abort @@ -547,7 +543,7 @@ i32.lt_u if i32.const 0 - i32.const 1440 + i32.const 1536 i32.const 270 i32.const 14 call $~lib/builtins/abort @@ -597,7 +593,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1536 i32.const 284 i32.const 14 call $~lib/builtins/abort @@ -687,7 +683,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1536 i32.const 201 i32.const 14 call $~lib/builtins/abort @@ -701,7 +697,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1536 i32.const 203 i32.const 14 call $~lib/builtins/abort @@ -762,7 +758,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1536 i32.const 221 i32.const 16 call $~lib/builtins/abort @@ -795,7 +791,7 @@ i32.lt_u if i32.const 0 - i32.const 1440 + i32.const 1536 i32.const 233 i32.const 14 call $~lib/builtins/abort @@ -810,7 +806,7 @@ i32.ne if i32.const 0 - i32.const 1440 + i32.const 1536 i32.const 234 i32.const 14 call $~lib/builtins/abort @@ -862,7 +858,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1536 i32.const 251 i32.const 14 call $~lib/builtins/abort @@ -932,7 +928,7 @@ i32.gt_u if i32.const 0 - i32.const 1440 + i32.const 1536 i32.const 377 i32.const 14 call $~lib/builtins/abort @@ -960,7 +956,7 @@ i32.lt_u if i32.const 0 - i32.const 1440 + i32.const 1536 i32.const 384 i32.const 16 call $~lib/builtins/abort @@ -988,7 +984,7 @@ i32.lt_u if i32.const 0 - i32.const 1440 + i32.const 1536 i32.const 397 i32.const 5 call $~lib/builtins/abort @@ -1056,10 +1052,10 @@ if unreachable end - i32.const 19680 + i32.const 19728 i32.const 0 i32.store - i32.const 21248 + i32.const 21296 i32.const 0 i32.store loop $for-loop|0 @@ -1070,7 +1066,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 19680 + i32.const 19728 i32.add i32.const 0 i32.store offset=4 @@ -1088,7 +1084,7 @@ i32.add i32.const 2 i32.shl - i32.const 19680 + i32.const 19728 i32.add i32.const 0 i32.store offset=96 @@ -1106,13 +1102,13 @@ br $for-loop|0 end end - i32.const 19680 - i32.const 21252 + i32.const 19728 + i32.const 21300 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 19680 + i32.const 19728 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -1191,7 +1187,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 19668 + i32.const 19716 i32.lt_u if local.get $0 @@ -1274,14 +1270,14 @@ i32.ne if i32.const 0 - i32.const 1168 + i32.const 1264 i32.const 228 i32.const 20 call $~lib/builtins/abort unreachable end local.get $0 - i32.const 19668 + i32.const 19716 i32.lt_u if local.get $0 @@ -1304,7 +1300,7 @@ i32.const 4 i32.add local.tee $1 - i32.const 19668 + i32.const 19716 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -1336,7 +1332,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1536 i32.const 559 i32.const 3 call $~lib/builtins/abort @@ -1424,7 +1420,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1536 i32.const 330 i32.const 14 call $~lib/builtins/abort @@ -1476,7 +1472,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1536 i32.const 343 i32.const 18 call $~lib/builtins/abort @@ -1506,8 +1502,8 @@ i32.const 1073741820 i32.ge_u if - i32.const 1104 - i32.const 1440 + i32.const 1200 + i32.const 1536 i32.const 458 i32.const 30 call $~lib/builtins/abort @@ -1598,7 +1594,7 @@ i32.eqz if i32.const 0 - i32.const 1440 + i32.const 1536 i32.const 496 i32.const 16 call $~lib/builtins/abort @@ -1613,7 +1609,7 @@ i32.gt_u if i32.const 0 - i32.const 1440 + i32.const 1536 i32.const 498 i32.const 14 call $~lib/builtins/abort @@ -1632,7 +1628,7 @@ i32.and if i32.const 0 - i32.const 1440 + i32.const 1536 i32.const 357 i32.const 14 call $~lib/builtins/abort @@ -1879,8 +1875,8 @@ i32.const 1073741804 i32.ge_u if - i32.const 1104 - i32.const 1168 + i32.const 1200 + i32.const 1264 i32.const 260 i32.const 31 call $~lib/builtins/abort @@ -1970,6 +1966,25 @@ local.get $1 ) (func $~lib/date/Date#setTime (param $0 i32) (param $1 i64) + (local $2 i64) + i32.const 1 + local.get $0 + i64.load offset=16 + local.tee $2 + i64.const 8640000000000000 + i64.gt_s + local.get $2 + i64.const -8640000000000000 + i64.lt_s + select + if + i32.const 1104 + i32.const 1152 + i32.const 92 + i32.const 7 + call $~lib/builtins/abort + unreachable + end local.get $0 local.get $1 i64.store offset=16 @@ -2039,9 +2054,9 @@ i32.lt_s select if - i32.const 1504 - i32.const 1568 - i32.const 126 + i32.const 1600 + i32.const 1152 + i32.const 134 i32.const 38 call $~lib/builtins/abort unreachable @@ -2069,9 +2084,9 @@ i32.lt_s select if - i32.const 1504 - i32.const 1568 - i32.const 131 + i32.const 1600 + i32.const 1152 + i32.const 139 i32.const 38 call $~lib/builtins/abort unreachable @@ -2099,9 +2114,9 @@ i32.lt_s select if - i32.const 1504 - i32.const 1568 - i32.const 136 + i32.const 1600 + i32.const 1152 + i32.const 144 i32.const 34 call $~lib/builtins/abort unreachable @@ -2122,6 +2137,13 @@ (func $~lib/date/Date#setUTCDate (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) + local.get $1 + local.get $0 + i32.load offset=8 + i32.eq + if + return + end i32.const 1 local.get $1 i32.const 0 @@ -2165,9 +2187,9 @@ i32.lt_s select if - i32.const 1504 - i32.const 1568 - i32.const 143 + i32.const 1600 + i32.const 1152 + i32.const 152 i32.const 52 call $~lib/builtins/abort unreachable @@ -2188,6 +2210,13 @@ call $~lib/date/Date#setTime ) (func $~lib/date/Date#setUTCMonth (param $0 i32) (param $1 i32) + local.get $1 + local.get $0 + i32.load offset=4 + i32.eq + if + return + end i32.const 1 local.get $1 i32.const 12 @@ -2197,9 +2226,9 @@ i32.lt_s select if - i32.const 1504 - i32.const 1568 - i32.const 149 + i32.const 1600 + i32.const 1152 + i32.const 159 i32.const 34 call $~lib/builtins/abort unreachable @@ -2224,6 +2253,13 @@ call $~lib/date/Date#setTime ) (func $~lib/date/Date#setUTCFullYear (param $0 i32) (param $1 i32) + local.get $1 + local.get $0 + i32.load + i32.eq + if + return + end local.get $0 local.get $0 i64.load offset=16 @@ -2261,7 +2297,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - i32.const 1808 + i32.const 1856 local.set $0 br $__inlined_func$~lib/util/number/itoa32 end @@ -2571,7 +2607,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - i32.const 1968 + i32.const 2016 local.set $0 br $__inlined_func$~lib/string/String#concat end @@ -2801,7 +2837,7 @@ i32.eqz if i32.const 0 - i32.const 1168 + i32.const 1264 i32.const 294 i32.const 14 call $~lib/builtins/abort @@ -2884,8 +2920,8 @@ i32.const 268435455 i32.gt_u if - i32.const 2448 i32.const 2496 + i32.const 2544 i32.const 14 i32.const 48 call $~lib/builtins/abort @@ -3329,11 +3365,11 @@ ) (func $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 3284 + i32.const 3332 i32.lt_s if - i32.const 19696 i32.const 19744 + i32.const 19792 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3415,10 +3451,10 @@ if global.get $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 1936 + i32.const 1984 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 1808 + i32.const 1856 i32.store offset=12 local.get $1 i32.const 6 @@ -3427,17 +3463,17 @@ global.get $~lib/memory/__stack_pointer local.get $1 i32.store offset=8 - i32.const 1936 + i32.const 1984 local.get $1 call $~lib/string/String.__concat local.tee $1 i32.store end global.get $~lib/memory/__stack_pointer - i32.const 2000 + i32.const 2048 i32.store offset=100 local.get $1 - i32.const 2000 + i32.const 2048 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3451,7 +3487,7 @@ local.get $2 i32.store offset=104 global.get $~lib/memory/__stack_pointer - i32.const 1808 + i32.const 1856 i32.store offset=108 local.get $2 i32.const 2 @@ -3468,10 +3504,10 @@ local.get $1 i32.store offset=84 global.get $~lib/memory/__stack_pointer - i32.const 2000 + i32.const 2048 i32.store offset=88 local.get $1 - i32.const 2000 + i32.const 2048 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3485,7 +3521,7 @@ local.get $2 i32.store offset=84 global.get $~lib/memory/__stack_pointer - i32.const 1808 + i32.const 1856 i32.store offset=92 local.get $2 i32.const 2 @@ -3502,10 +3538,10 @@ local.get $1 i32.store offset=68 global.get $~lib/memory/__stack_pointer - i32.const 2032 + i32.const 2080 i32.store offset=72 local.get $1 - i32.const 2032 + i32.const 2080 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3519,7 +3555,7 @@ local.get $2 i32.store offset=68 global.get $~lib/memory/__stack_pointer - i32.const 1808 + i32.const 1856 i32.store offset=76 local.get $2 i32.const 2 @@ -3536,10 +3572,10 @@ local.get $1 i32.store offset=52 global.get $~lib/memory/__stack_pointer - i32.const 2064 + i32.const 2112 i32.store offset=56 local.get $1 - i32.const 2064 + i32.const 2112 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3553,7 +3589,7 @@ local.get $2 i32.store offset=52 global.get $~lib/memory/__stack_pointer - i32.const 1808 + i32.const 1856 i32.store offset=60 local.get $2 i32.const 2 @@ -3570,10 +3606,10 @@ local.get $1 i32.store offset=36 global.get $~lib/memory/__stack_pointer - i32.const 2064 + i32.const 2112 i32.store offset=40 local.get $1 - i32.const 2064 + i32.const 2112 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3587,7 +3623,7 @@ local.get $2 i32.store offset=36 global.get $~lib/memory/__stack_pointer - i32.const 1808 + i32.const 1856 i32.store offset=44 local.get $2 i32.const 2 @@ -3604,10 +3640,10 @@ local.get $1 i32.store offset=12 global.get $~lib/memory/__stack_pointer - i32.const 2096 + i32.const 2144 i32.store offset=24 local.get $1 - i32.const 2096 + i32.const 2144 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3624,7 +3660,7 @@ local.get $0 i32.store offset=12 global.get $~lib/memory/__stack_pointer - i32.const 1808 + i32.const 1856 i32.store offset=28 local.get $0 i32.const 3 @@ -3641,10 +3677,10 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2128 + i32.const 2176 i32.store offset=8 local.get $0 - i32.const 2128 + i32.const 2176 call $~lib/string/String.__concat global.get $~lib/memory/__stack_pointer i32.const 112 @@ -3728,7 +3764,7 @@ i32.store offset=4 local.get $0 i32.load offset=4 - i32.const 1968 + i32.const 2016 i32.store br $folding-inner1 end @@ -3837,10 +3873,10 @@ call $~lib/array/Array<~lib/string/String>#push else global.get $~lib/memory/__stack_pointer - i32.const 1968 + i32.const 2016 i32.store offset=20 local.get $2 - i32.const 1968 + i32.const 2016 call $~lib/array/Array<~lib/string/String>#push end local.get $9 @@ -3894,10 +3930,10 @@ call $~lib/array/Array<~lib/string/String>#push else global.get $~lib/memory/__stack_pointer - i32.const 1968 + i32.const 2016 i32.store offset=20 local.get $2 - i32.const 1968 + i32.const 2016 call $~lib/array/Array<~lib/string/String>#push end global.get $~lib/memory/__stack_pointer @@ -3951,10 +3987,10 @@ local.get $0 local.set $1 global.get $~lib/memory/__stack_pointer - i32.const 2032 + i32.const 2080 i32.store local.get $0 - i32.const 2032 + i32.const 2080 i32.const 0 call $~lib/string/String#indexOf local.tee $2 @@ -3978,11 +4014,11 @@ local.tee $0 i32.store offset=8 global.get $~lib/memory/__stack_pointer - i32.const 2064 + i32.const 2112 i32.store global.get $~lib/memory/__stack_pointer local.get $0 - i32.const 2064 + i32.const 2112 call $~lib/string/String#split local.tee $0 i32.store offset=12 @@ -4013,10 +4049,10 @@ local.tee $0 i32.store offset=20 global.get $~lib/memory/__stack_pointer - i32.const 2096 + i32.const 2144 i32.store local.get $0 - i32.const 2096 + i32.const 2144 i32.const 0 call $~lib/string/String#indexOf local.tee $2 @@ -4054,11 +4090,11 @@ end end global.get $~lib/memory/__stack_pointer - i32.const 2000 + i32.const 2048 i32.store global.get $~lib/memory/__stack_pointer local.get $1 - i32.const 2000 + i32.const 2048 call $~lib/string/String#split local.tee $0 i32.store offset=24 @@ -4189,18 +4225,18 @@ memory.size i32.const 16 i32.shl - i32.const 19668 + i32.const 19716 i32.sub i32.const 1 i32.shr_u global.set $~lib/rt/itcms/threshold - i32.const 1216 + i32.const 1312 call $~lib/rt/itcms/initLazy global.set $~lib/rt/itcms/pinSpace - i32.const 1248 + i32.const 1344 call $~lib/rt/itcms/initLazy global.set $~lib/rt/itcms/toSpace - i32.const 1392 + i32.const 1488 call $~lib/rt/itcms/initLazy global.set $~lib/rt/itcms/fromSpace global.get $~lib/memory/__stack_pointer @@ -4996,10 +5032,10 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2160 + i32.const 2208 i32.store offset=8 local.get $0 - i32.const 2160 + i32.const 2208 call $~lib/string/String.__eq i32.eqz if @@ -5022,10 +5058,10 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2240 + i32.const 2288 i32.store offset=8 local.get $0 - i32.const 2240 + i32.const 2288 call $~lib/string/String.__eq i32.eqz if @@ -5048,10 +5084,10 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2320 + i32.const 2368 i32.store offset=8 local.get $0 - i32.const 2320 + i32.const 2368 call $~lib/string/String.__eq i32.eqz if @@ -5063,10 +5099,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2400 + i32.const 2448 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2400 + i32.const 2448 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5083,10 +5119,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2672 + i32.const 2720 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2672 + i32.const 2720 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5103,10 +5139,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2720 + i32.const 2768 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2720 + i32.const 2768 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5123,9 +5159,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2768 + i32.const 2816 i32.store offset=8 - i32.const 2768 + i32.const 2816 call $~lib/date/Date.fromString local.set $0 global.get $~lib/memory/__stack_pointer @@ -5134,9 +5170,9 @@ local.get $0 i64.load offset=16 global.get $~lib/memory/__stack_pointer - i32.const 2816 + i32.const 2864 i32.store offset=8 - i32.const 2816 + i32.const 2864 call $~lib/date/Date.fromString local.set $0 global.get $~lib/memory/__stack_pointer @@ -5154,10 +5190,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2864 + i32.const 2912 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2864 + i32.const 2912 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5174,10 +5210,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2928 + i32.const 2976 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2928 + i32.const 2976 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5194,10 +5230,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3008 + i32.const 3056 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3008 + i32.const 3056 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5326,10 +5362,10 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3088 + i32.const 3136 i32.store offset=8 local.get $0 - i32.const 3088 + i32.const 3136 call $~lib/string/String.__eq i32.eqz if @@ -5347,10 +5383,10 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3168 + i32.const 3216 i32.store offset=8 local.get $0 - i32.const 3168 + i32.const 3216 call $~lib/string/String.__eq i32.eqz if @@ -5371,9 +5407,9 @@ local.tee $0 i32.store offset=20 global.get $~lib/memory/__stack_pointer - i32.const 1968 + i32.const 2016 i32.store offset=4 - i32.const 1968 + i32.const 2016 i32.const 2 local.get $0 i32.load offset=8 @@ -5418,6 +5454,22 @@ local.get $1 local.get $0 i64.store offset=16 + i32.const 1 + local.get $0 + i64.const 8640000000000000 + i64.gt_s + local.get $0 + i64.const -8640000000000000 + i64.lt_s + select + if + i32.const 1104 + i32.const 1152 + i32.const 79 + i32.const 7 + call $~lib/builtins/abort + unreachable + end local.get $1 local.get $0 i64.const 86400000 @@ -5453,7 +5505,7 @@ i32.const 0 i32.store i32.const 1 - i32.const 1804 + i32.const 1852 i32.load i32.const 1 i32.shr_u @@ -5514,7 +5566,7 @@ local.get $1 local.get $4 i32.add - i32.const 1808 + i32.const 1856 local.get $3 call $~lib/memory/memory.copy local.get $3 @@ -5527,14 +5579,14 @@ local.get $1 local.get $6 i32.add - i32.const 1808 + i32.const 1856 local.get $2 local.get $6 i32.sub call $~lib/memory/memory.copy else local.get $1 - i32.const 1808 + i32.const 1856 local.get $2 call $~lib/memory/memory.copy end @@ -5617,7 +5669,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - i32.const 1968 + i32.const 2016 return end i32.const 0 @@ -5714,8 +5766,8 @@ i32.load offset=12 i32.ge_u if - i32.const 1296 - i32.const 2496 + i32.const 1392 + i32.const 2544 i32.const 92 i32.const 42 call $~lib/builtins/abort @@ -5734,8 +5786,8 @@ local.get $0 i32.eqz if + i32.const 2592 i32.const 2544 - i32.const 2496 i32.const 96 i32.const 40 call $~lib/builtins/abort diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 8f579274af..526bc3413c 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -23,46 +23,47 @@ (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) (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 460) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00$\00\00\00V\00a\00l\00u\00e\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 524) ",\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 572) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006\00\00\00\00\00\00\00\00\00") - (data (i32.const 700) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") - (data (i32.const 764) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\000\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 796) "0\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") - (data (i32.const 1196) "\1c\04\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\04\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\000\00a\000\00b\000\00c\000\00d\000\00e\000\00f\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\001\00a\001\00b\001\00c\001\00d\001\00e\001\00f\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\002\00a\002\00b\002\00c\002\00d\002\00e\002\00f\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\003\00a\003\00b\003\00c\003\00d\003\00e\003\00f\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\004\00a\004\00b\004\00c\004\00d\004\00e\004\00f\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\005\00a\005\00b\005\00c\005\00d\005\00e\005\00f\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\006\00a\006\00b\006\00c\006\00d\006\00e\006\00f\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\007\00a\007\00b\007\00c\007\00d\007\00e\007\00f\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\008\00a\008\00b\008\00c\008\00d\008\00e\008\00f\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\009\00a\009\00b\009\00c\009\00d\009\00e\009\00f\00a\000\00a\001\00a\002\00a\003\00a\004\00a\005\00a\006\00a\007\00a\008\00a\009\00a\00a\00a\00b\00a\00c\00a\00d\00a\00e\00a\00f\00b\000\00b\001\00b\002\00b\003\00b\004\00b\005\00b\006\00b\007\00b\008\00b\009\00b\00a\00b\00b\00b\00c\00b\00d\00b\00e\00b\00f\00c\000\00c\001\00c\002\00c\003\00c\004\00c\005\00c\006\00c\007\00c\008\00c\009\00c\00a\00c\00b\00c\00c\00c\00d\00c\00e\00c\00f\00d\000\00d\001\00d\002\00d\003\00d\004\00d\005\00d\006\00d\007\00d\008\00d\009\00d\00a\00d\00b\00d\00c\00d\00d\00d\00e\00d\00f\00e\000\00e\001\00e\002\00e\003\00e\004\00e\005\00e\006\00e\007\00e\008\00e\009\00e\00a\00e\00b\00e\00c\00e\00d\00e\00e\00e\00f\00f\000\00f\001\00f\002\00f\003\00f\004\00f\005\00f\006\00f\007\00f\008\00f\009\00f\00a\00f\00b\00f\00c\00f\00d\00f\00e\00f\00f\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2252) "\\\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\00\00\00\00\00") - (data (i32.const 2348) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00+\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2380) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2412) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00-\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2444) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00T\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2476) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00:\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2508) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00.\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2540) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00Z\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2572) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\000\002\000\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2652) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2732) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 2812) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002\00\00\00\00\00\00\00\00\00") - (data (i32.const 2860) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") - (data (i32.const 2908) ",\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 2956) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3084) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3132) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004\00\00\00\00\00\00\00\00\00") - (data (i32.const 3180) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00") - (data (i32.const 3228) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3276) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00\00\00\00\00\00\00") - (data (i32.const 3340) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3420) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3500) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 3580) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 3664) "\06\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\02A\00\00\00\00\00\00\02\t\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\18\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00D\00a\00t\00e\00\00\00\00\00") + (data (i32.const 108) ",\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 156) "<\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 220) "<\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 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$\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 412) ",\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 464) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 492) "<\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 556) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00$\00\00\00V\00a\00l\00u\00e\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 620) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006\00\00\00\00\00\00\00\00\00") + (data (i32.const 748) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") + (data (i32.const 812) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\000\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 844) "0\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") + (data (i32.const 1244) "\1c\04\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\04\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\000\00a\000\00b\000\00c\000\00d\000\00e\000\00f\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\001\00a\001\00b\001\00c\001\00d\001\00e\001\00f\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\002\00a\002\00b\002\00c\002\00d\002\00e\002\00f\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\003\00a\003\00b\003\00c\003\00d\003\00e\003\00f\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\004\00a\004\00b\004\00c\004\00d\004\00e\004\00f\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\005\00a\005\00b\005\00c\005\00d\005\00e\005\00f\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\006\00a\006\00b\006\00c\006\00d\006\00e\006\00f\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\007\00a\007\00b\007\00c\007\00d\007\00e\007\00f\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\008\00a\008\00b\008\00c\008\00d\008\00e\008\00f\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\009\00a\009\00b\009\00c\009\00d\009\00e\009\00f\00a\000\00a\001\00a\002\00a\003\00a\004\00a\005\00a\006\00a\007\00a\008\00a\009\00a\00a\00a\00b\00a\00c\00a\00d\00a\00e\00a\00f\00b\000\00b\001\00b\002\00b\003\00b\004\00b\005\00b\006\00b\007\00b\008\00b\009\00b\00a\00b\00b\00b\00c\00b\00d\00b\00e\00b\00f\00c\000\00c\001\00c\002\00c\003\00c\004\00c\005\00c\006\00c\007\00c\008\00c\009\00c\00a\00c\00b\00c\00c\00c\00d\00c\00e\00c\00f\00d\000\00d\001\00d\002\00d\003\00d\004\00d\005\00d\006\00d\007\00d\008\00d\009\00d\00a\00d\00b\00d\00c\00d\00d\00d\00e\00d\00f\00e\000\00e\001\00e\002\00e\003\00e\004\00e\005\00e\006\00e\007\00e\008\00e\009\00e\00a\00e\00b\00e\00c\00e\00d\00e\00e\00e\00f\00f\000\00f\001\00f\002\00f\003\00f\004\00f\005\00f\006\00f\007\00f\008\00f\009\00f\00a\00f\00b\00f\00c\00f\00d\00f\00e\00f\00f\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2300) "\\\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\00\00\00\00\00") + (data (i32.const 2396) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00+\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2428) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2460) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00-\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2492) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00T\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2524) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00:\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2556) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00.\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2588) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00Z\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2620) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\000\002\000\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2700) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2780) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 2860) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002\00\00\00\00\00\00\00\00\00") + (data (i32.const 2908) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data (i32.const 2956) ",\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 3004) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3132) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3180) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004\00\00\00\00\00\00\00\00\00") + (data (i32.const 3228) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00") + (data (i32.const 3276) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3324) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00\00\00\00\00\00\00") + (data (i32.const 3388) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3468) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3548) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 3628) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 3712) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") (table $0 1 funcref) (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) @@ -79,10 +80,10 @@ (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) - (global $~lib/rt/__rtti_base i32 (i32.const 3664)) - (global $~lib/memory/__data_end i32 (i32.const 3716)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20100)) - (global $~lib/memory/__heap_base i32 (i32.const 20100)) + (global $~lib/rt/__rtti_base i32 (i32.const 3712)) + (global $~lib/memory/__data_end i32 (i32.const 3764)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20148)) + (global $~lib/memory/__heap_base i32 (i32.const 20148)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -273,22 +274,7 @@ i32.mul i32.const 2 i32.add - local.set $2 i32.const 153 - local.set $1 - local.get $2 - i32.const 0 - i32.ge_s - if (result i32) - local.get $2 - else - local.get $2 - local.get $1 - i32.sub - i32.const 1 - i32.add - end - local.get $1 i32.div_s local.set $8 local.get $7 @@ -399,7 +385,7 @@ i32.eqz if i32.const 0 - i32.const 144 + i32.const 240 i32.const 159 i32.const 16 call $~lib/builtins/abort @@ -465,7 +451,7 @@ i32.eqz if i32.const 0 - i32.const 144 + i32.const 240 i32.const 127 i32.const 18 call $~lib/builtins/abort @@ -482,7 +468,7 @@ i32.eqz if i32.const 0 - i32.const 144 + i32.const 240 i32.const 131 i32.const 16 call $~lib/builtins/abort @@ -504,8 +490,8 @@ i32.load i32.gt_u if - i32.const 272 - i32.const 336 + i32.const 368 + i32.const 432 i32.const 22 i32.const 28 call $~lib/builtins/abort @@ -571,7 +557,7 @@ i32.eqz if (result i32) i32.const 0 - i32.const 144 + i32.const 240 i32.const 147 i32.const 30 call $~lib/builtins/abort @@ -697,7 +683,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 512 i32.const 268 i32.const 14 call $~lib/builtins/abort @@ -717,7 +703,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 512 i32.const 270 i32.const 14 call $~lib/builtins/abort @@ -780,7 +766,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 512 i32.const 284 i32.const 14 call $~lib/builtins/abort @@ -912,7 +898,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 512 i32.const 201 i32.const 14 call $~lib/builtins/abort @@ -929,7 +915,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 512 i32.const 203 i32.const 14 call $~lib/builtins/abort @@ -1009,7 +995,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 512 i32.const 221 i32.const 16 call $~lib/builtins/abort @@ -1052,7 +1038,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 512 i32.const 233 i32.const 14 call $~lib/builtins/abort @@ -1070,7 +1056,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 512 i32.const 234 i32.const 14 call $~lib/builtins/abort @@ -1138,7 +1124,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 512 i32.const 251 i32.const 14 call $~lib/builtins/abort @@ -1243,7 +1229,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 512 i32.const 377 i32.const 14 call $~lib/builtins/abort @@ -1286,7 +1272,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 512 i32.const 384 i32.const 16 call $~lib/builtins/abort @@ -1319,7 +1305,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 512 i32.const 397 i32.const 5 call $~lib/builtins/abort @@ -1562,7 +1548,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 512 i32.const 559 i32.const 3 call $~lib/builtins/abort @@ -1784,7 +1770,7 @@ i32.eqz if i32.const 0 - i32.const 144 + i32.const 240 i32.const 228 i32.const 20 call $~lib/builtins/abort @@ -1892,8 +1878,8 @@ i32.const 1073741820 i32.ge_u if - i32.const 80 - i32.const 416 + i32.const 176 + i32.const 512 i32.const 458 i32.const 30 call $~lib/builtins/abort @@ -1977,7 +1963,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 512 i32.const 330 i32.const 14 call $~lib/builtins/abort @@ -2042,7 +2028,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 512 i32.const 343 i32.const 18 call $~lib/builtins/abort @@ -2193,7 +2179,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 512 i32.const 357 i32.const 14 call $~lib/builtins/abort @@ -2302,7 +2288,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 512 i32.const 496 i32.const 16 call $~lib/builtins/abort @@ -2322,7 +2308,7 @@ i32.eqz if i32.const 0 - i32.const 416 + i32.const 512 i32.const 498 i32.const 14 call $~lib/builtins/abort @@ -2599,8 +2585,8 @@ i32.const 1073741804 i32.ge_u if - i32.const 80 - i32.const 144 + i32.const 176 + i32.const 240 i32.const 260 i32.const 31 call $~lib/builtins/abort @@ -2654,6 +2640,28 @@ i64.load offset=16 ) (func $~lib/date/Date#setTime (param $0 i32) (param $1 i64) (result i64) + (local $2 i64) + local.get $0 + i64.load offset=16 + local.set $2 + local.get $2 + i64.const -8640000000000000 + i64.lt_s + if (result i32) + i32.const 1 + else + local.get $2 + i64.const 8640000000000000 + i64.gt_s + end + if + i32.const 80 + i32.const 128 + i32.const 92 + i32.const 7 + call $~lib/builtins/abort + unreachable + end local.get $0 local.get $1 call $~lib/date/Date#set:epochMillis @@ -2745,9 +2753,9 @@ i32.gt_s end if - i32.const 480 - i32.const 544 - i32.const 126 + i32.const 576 + i32.const 128 + i32.const 134 i32.const 38 call $~lib/builtins/abort unreachable @@ -2778,9 +2786,9 @@ i32.gt_s end if - i32.const 480 - i32.const 544 - i32.const 131 + i32.const 576 + i32.const 128 + i32.const 139 i32.const 38 call $~lib/builtins/abort unreachable @@ -2811,9 +2819,9 @@ i32.gt_s end if - i32.const 480 - i32.const 544 - i32.const 136 + i32.const 576 + i32.const 128 + i32.const 144 i32.const 34 call $~lib/builtins/abort unreachable @@ -2884,6 +2892,13 @@ (local $3 i32) (local $4 i64) local.get $0 + i32.load offset=8 + local.get $1 + i32.eq + if + return + end + local.get $0 i32.load local.set $2 local.get $0 @@ -2902,9 +2917,9 @@ i32.gt_s end if - i32.const 480 - i32.const 544 - i32.const 143 + i32.const 576 + i32.const 128 + i32.const 152 i32.const 52 call $~lib/builtins/abort unreachable @@ -2929,6 +2944,13 @@ ) (func $~lib/date/Date#setUTCMonth (param $0 i32) (param $1 i32) (local $2 i64) + local.get $0 + i32.load offset=4 + local.get $1 + i32.eq + if + return + end local.get $1 i32.const 1 i32.lt_s @@ -2940,9 +2962,9 @@ i32.gt_s end if - i32.const 480 - i32.const 544 - i32.const 149 + i32.const 576 + i32.const 128 + i32.const 159 i32.const 34 call $~lib/builtins/abort unreachable @@ -2972,6 +2994,13 @@ (func $~lib/date/Date#setUTCFullYear (param $0 i32) (param $1 i32) (local $2 i64) local.get $0 + i32.load + local.get $1 + i32.eq + if + return + end + local.get $0 i64.load offset=16 i64.const 86400000 i64.rem_s @@ -3081,14 +3110,14 @@ i32.const 100 i32.rem_u local.set $7 - i32.const 796 + i32.const 844 local.get $6 i32.const 2 i32.shl i32.add i64.load32_u local.set $8 - i32.const 796 + i32.const 844 local.get $7 i32.const 2 i32.shl @@ -3131,7 +3160,7 @@ i32.const 2 i32.sub local.set $2 - i32.const 796 + i32.const 844 local.get $10 i32.const 2 i32.shl @@ -3154,7 +3183,7 @@ i32.const 2 i32.sub local.set $2 - i32.const 796 + i32.const 844 local.get $1 i32.const 2 i32.shl @@ -3204,7 +3233,7 @@ i32.const 1 i32.shl i32.add - i32.const 1216 + i32.const 1264 local.get $1 i32.wrap_i64 i32.const 255 @@ -3226,7 +3255,7 @@ i32.and if local.get $0 - i32.const 1216 + i32.const 1264 local.get $1 i32.wrap_i64 i32.const 6 @@ -3349,7 +3378,7 @@ i32.const 1 i32.shl i32.add - i32.const 2272 + i32.const 2320 local.get $1 local.get $6 i64.and @@ -3385,7 +3414,7 @@ i32.const 1 i32.shl i32.add - i32.const 2272 + i32.const 2320 local.get $1 local.get $6 local.get $4 @@ -4960,7 +4989,7 @@ i32.eqz if i32.const 0 - i32.const 144 + i32.const 240 i32.const 294 i32.const 14 call $~lib/builtins/abort @@ -5094,8 +5123,8 @@ i32.shr_u i32.gt_u if - i32.const 2880 i32.const 2928 + i32.const 2976 i32.const 14 i32.const 48 call $~lib/builtins/abort @@ -5571,25 +5600,28 @@ ) (func $~lib/rt/__visit_globals (param $0 i32) (local $1 i32) - i32.const 272 + i32.const 368 local.get $0 call $~lib/rt/itcms/__visit - i32.const 480 + i32.const 576 local.get $0 call $~lib/rt/itcms/__visit - i32.const 2880 + i32.const 2928 local.get $0 call $~lib/rt/itcms/__visit - i32.const 2976 + i32.const 3024 + local.get $0 + call $~lib/rt/itcms/__visit + i32.const 176 local.get $0 call $~lib/rt/itcms/__visit i32.const 80 local.get $0 call $~lib/rt/itcms/__visit - i32.const 1216 + i32.const 1264 local.get $0 call $~lib/rt/itcms/__visit - i32.const 2272 + i32.const 2320 local.get $0 call $~lib/rt/itcms/__visit ) @@ -5718,8 +5750,8 @@ global.get $~lib/memory/__data_end i32.lt_s if - i32.const 20128 i32.const 20176 + i32.const 20224 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -5797,7 +5829,7 @@ end if global.get $~lib/memory/__stack_pointer - i32.const 2368 + i32.const 2416 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 @@ -5805,7 +5837,7 @@ local.get $2 local.get $1 i32.const 6 - i32.const 784 + i32.const 832 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 @@ -5822,7 +5854,7 @@ i32.store end local.get $1 - i32.const 2432 + i32.const 2480 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 @@ -5844,7 +5876,7 @@ i32.store offset=104 local.get $2 i32.const 2 - i32.const 784 + i32.const 832 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 @@ -5862,7 +5894,7 @@ local.get $2 i32.store offset=84 local.get $2 - i32.const 2432 + i32.const 2480 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 @@ -5884,7 +5916,7 @@ i32.store offset=84 local.get $2 i32.const 2 - i32.const 784 + i32.const 832 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 @@ -5902,7 +5934,7 @@ local.get $2 i32.store offset=68 local.get $2 - i32.const 2464 + i32.const 2512 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 @@ -5924,7 +5956,7 @@ i32.store offset=68 local.get $2 i32.const 2 - i32.const 784 + i32.const 832 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 @@ -5942,7 +5974,7 @@ local.get $2 i32.store offset=52 local.get $2 - i32.const 2496 + i32.const 2544 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 @@ -5964,7 +5996,7 @@ i32.store offset=52 local.get $2 i32.const 2 - i32.const 784 + i32.const 832 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 @@ -5982,7 +6014,7 @@ local.get $2 i32.store offset=36 local.get $2 - i32.const 2496 + i32.const 2544 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 @@ -6004,7 +6036,7 @@ i32.store offset=36 local.get $2 i32.const 2 - i32.const 784 + i32.const 832 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 @@ -6022,7 +6054,7 @@ local.get $2 i32.store offset=12 local.get $2 - i32.const 2528 + i32.const 2576 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 @@ -6044,7 +6076,7 @@ i32.store offset=12 local.get $2 i32.const 3 - i32.const 784 + i32.const 832 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 @@ -6062,7 +6094,7 @@ local.get $2 i32.store offset=4 local.get $2 - i32.const 2560 + i32.const 2608 local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 @@ -6265,7 +6297,7 @@ i32.store offset=4 local.get $4 i32.load offset=4 - i32.const 2400 + i32.const 2448 i32.store local.get $4 local.set $15 @@ -6334,7 +6366,7 @@ drop else local.get $10 - i32.const 2400 + i32.const 2448 local.set $15 global.get $~lib/memory/__stack_pointer local.get $15 @@ -6414,7 +6446,7 @@ drop else local.get $10 - i32.const 2400 + i32.const 2448 local.set $15 global.get $~lib/memory/__stack_pointer local.get $15 @@ -6475,7 +6507,7 @@ local.get $0 local.set $5 local.get $0 - i32.const 2464 + i32.const 2512 local.set $15 global.get $~lib/memory/__stack_pointer local.get $15 @@ -6506,7 +6538,7 @@ i32.store offset=8 global.get $~lib/memory/__stack_pointer local.get $7 - i32.const 2496 + i32.const 2544 local.set $15 global.get $~lib/memory/__stack_pointer local.get $15 @@ -6545,7 +6577,7 @@ local.tee $9 i32.store offset=20 local.get $9 - i32.const 2528 + i32.const 2576 local.set $15 global.get $~lib/memory/__stack_pointer local.get $15 @@ -6593,7 +6625,7 @@ end global.get $~lib/memory/__stack_pointer local.get $5 - i32.const 2432 + i32.const 2480 local.set $15 global.get $~lib/memory/__stack_pointer local.get $15 @@ -6801,13 +6833,13 @@ i32.const 1 i32.shr_u global.set $~lib/rt/itcms/threshold - i32.const 192 + i32.const 288 call $~lib/rt/itcms/initLazy global.set $~lib/rt/itcms/pinSpace - i32.const 224 + i32.const 320 call $~lib/rt/itcms/initLazy global.set $~lib/rt/itcms/toSpace - i32.const 368 + i32.const 464 call $~lib/rt/itcms/initLazy global.set $~lib/rt/itcms/fromSpace i64.const 1541847600001 @@ -7669,7 +7701,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 2592 + i32.const 2640 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7698,7 +7730,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 2672 + i32.const 2720 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7727,7 +7759,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 2752 + i32.const 2800 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7744,7 +7776,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2832 + i32.const 2880 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7767,7 +7799,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3104 + i32.const 3152 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7790,7 +7822,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3152 + i32.const 3200 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7812,7 +7844,7 @@ call $~lib/builtins/abort unreachable end - i32.const 3200 + i32.const 3248 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7825,7 +7857,7 @@ i32.store offset=4 local.get $8 call $~lib/date/Date#getTime - i32.const 3248 + i32.const 3296 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7849,7 +7881,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3296 + i32.const 3344 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7872,7 +7904,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3360 + i32.const 3408 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7895,7 +7927,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3440 + i32.const 3488 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8040,7 +8072,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 3520 + i32.const 3568 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8063,7 +8095,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 3600 + i32.const 3648 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8095,7 +8127,7 @@ call $~lib/date/Date#constructor local.tee $3 i32.store offset=20 - i32.const 2400 + i32.const 2448 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8118,7 +8150,8 @@ global.set $~lib/memory/__stack_pointer ) (func $~lib/date/Date#constructor (param $0 i32) (param $1 i64) (result i32) - (local $2 i32) + (local $2 i64) + (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -8149,6 +8182,26 @@ local.get $0 local.get $1 call $~lib/date/Date#set:epochMillis + local.get $1 + local.set $2 + local.get $2 + i64.const -8640000000000000 + i64.lt_s + if (result i32) + i32.const 1 + else + local.get $2 + i64.const 8640000000000000 + i64.gt_s + end + if + i32.const 80 + i32.const 128 + i32.const 79 + i32.const 7 + call $~lib/builtins/abort + unreachable + end local.get $0 local.get $1 i64.const 86400000 @@ -8163,12 +8216,12 @@ global.get $~lib/date/_day call $~lib/date/Date#set:day local.get $0 - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $3 ) (func $~lib/util/number/itoa32 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -8197,8 +8250,8 @@ i32.gt_s end if - i32.const 592 - i32.const 720 + i32.const 640 + i32.const 768 i32.const 373 i32.const 5 call $~lib/builtins/abort @@ -8207,7 +8260,7 @@ local.get $0 i32.eqz if - i32.const 784 + i32.const 832 local.set $8 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -8479,7 +8532,7 @@ i32.const 0 i32.eq if - i32.const 2400 + i32.const 2448 local.set $6 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -8595,7 +8648,7 @@ local.get $10 i32.eqz if - i32.const 2400 + i32.const 2448 local.set $12 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -8713,8 +8766,8 @@ i32.load offset=12 i32.ge_u if - i32.const 272 - i32.const 2928 + i32.const 368 + i32.const 2976 i32.const 92 i32.const 42 call $~lib/builtins/abort @@ -8738,8 +8791,8 @@ local.get $2 i32.eqz if + i32.const 3024 i32.const 2976 - i32.const 2928 i32.const 96 i32.const 40 call $~lib/builtins/abort From 0cdc38879477d09afd2ae3267bb9495f9e2047a8 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Wed, 14 Apr 2021 18:08:00 +0300 Subject: [PATCH 10/47] typo --- std/assembly/date.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 54a7e7b06b..d77f46da70 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -74,7 +74,7 @@ export class Date { constructor(private epochMillis: i64) { // this differs from JavaScript which prefer return NaN or "Invalid Date" string - // insted throw exceprion + // instead throwing exception. if (invalidDate(epochMillis)) { throw new RangeError(E_INVALIDDATE); } From b6a4ed64e93827da96a7d13bebdaa8f996d71ad3 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Wed, 14 Apr 2021 19:44:59 +0300 Subject: [PATCH 11/47] more fixes and tests --- std/assembly/date.ts | 2 +- tests/compiler/std/date.optimized.wat | 230 +++++++---- tests/compiler/std/date.ts | 7 +- tests/compiler/std/date.untouched.wat | 564 +++++++++++++++----------- 4 files changed, 485 insertions(+), 318 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index d77f46da70..e05abfe38b 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -67,7 +67,6 @@ export class Date { var day = I32.parseInt(parts[2]); var month = I32.parseInt(parts[1]); var year = I32.parseInt(parts[0]); - if (year < 100) year += 1900; return new Date(epochMillis(year, month, day, hour, min, sec, ms)); } @@ -201,6 +200,7 @@ function epochMillis( second: i32, milliseconds: i32 ): i64 { + if (year >= 0 && year <= 99) year += 1900; return ( i64(daysSinceEpoch(year, month, day)) * MILLIS_PER_DAY + hour * MILLIS_PER_HOUR + diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index c86dbe5455..9ccadddb10 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -179,6 +179,18 @@ i32.mul i64.extend_i32_s local.get $0 + i32.const 1900 + i32.add + local.get $0 + local.get $0 + i32.const 99 + i32.le_s + i32.const 0 + local.get $0 + i32.const 0 + i32.ge_s + select + select local.get $1 local.get $2 call $~lib/date/daysSinceEpoch @@ -1980,7 +1992,7 @@ if i32.const 1104 i32.const 1152 - i32.const 92 + i32.const 91 i32.const 7 call $~lib/builtins/abort unreachable @@ -2056,7 +2068,7 @@ if i32.const 1600 i32.const 1152 - i32.const 134 + i32.const 133 i32.const 38 call $~lib/builtins/abort unreachable @@ -2086,7 +2098,7 @@ if i32.const 1600 i32.const 1152 - i32.const 139 + i32.const 138 i32.const 38 call $~lib/builtins/abort unreachable @@ -2116,7 +2128,7 @@ if i32.const 1600 i32.const 1152 - i32.const 144 + i32.const 143 i32.const 34 call $~lib/builtins/abort unreachable @@ -2189,7 +2201,7 @@ if i32.const 1600 i32.const 1152 - i32.const 152 + i32.const 151 i32.const 52 call $~lib/builtins/abort unreachable @@ -2228,7 +2240,7 @@ if i32.const 1600 i32.const 1152 - i32.const 159 + i32.const 158 i32.const 34 call $~lib/builtins/abort unreachable @@ -4127,16 +4139,6 @@ i32.store offset=16 local.get $0 call $~lib/util/string/strtol - local.tee $0 - i32.const 100 - i32.lt_s - if (result i32) - local.get $0 - i32.const 1900 - i32.add - else - local.get $0 - end local.get $1 local.get $2 local.get $4 @@ -4204,6 +4206,60 @@ call $~lib/builtins/abort unreachable end + i32.const 70 + i32.const 1 + i32.const 1 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $~lib/date/epochMillis + i64.eqz + i32.eqz + if + i32.const 0 + i32.const 1056 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 90 + i32.const 1 + i32.const 1 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $~lib/date/epochMillis + i64.const 631152000000 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const -90 + i32.const 1 + i32.const 1 + i32.const 0 + i32.const 0 + i32.const 0 + i32.const 0 + call $~lib/date/epochMillis + i64.const -65007360000000 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end i32.const 2018 i32.const 11 i32.const 10 @@ -4217,7 +4273,7 @@ if i32.const 0 i32.const 1056 - i32.const 7 + i32.const 8 i32.const 3 call $~lib/builtins/abort unreachable @@ -4251,7 +4307,7 @@ if i32.const 0 i32.const 1056 - i32.const 15 + i32.const 16 i32.const 3 call $~lib/builtins/abort unreachable @@ -4266,7 +4322,7 @@ if i32.const 0 i32.const 1056 - i32.const 17 + i32.const 18 i32.const 3 call $~lib/builtins/abort unreachable @@ -4283,7 +4339,7 @@ if i32.const 0 i32.const 1056 - i32.const 25 + i32.const 26 i32.const 3 call $~lib/builtins/abort unreachable @@ -4295,7 +4351,7 @@ if i32.const 0 i32.const 1056 - i32.const 26 + i32.const 27 i32.const 3 call $~lib/builtins/abort unreachable @@ -4307,7 +4363,7 @@ if i32.const 0 i32.const 1056 - i32.const 27 + i32.const 28 i32.const 3 call $~lib/builtins/abort unreachable @@ -4319,7 +4375,7 @@ if i32.const 0 i32.const 1056 - i32.const 28 + i32.const 29 i32.const 3 call $~lib/builtins/abort unreachable @@ -4331,7 +4387,7 @@ if i32.const 0 i32.const 1056 - i32.const 29 + i32.const 30 i32.const 3 call $~lib/builtins/abort unreachable @@ -4343,7 +4399,7 @@ if i32.const 0 i32.const 1056 - i32.const 30 + i32.const 31 i32.const 3 call $~lib/builtins/abort unreachable @@ -4358,7 +4414,7 @@ if i32.const 0 i32.const 1056 - i32.const 31 + i32.const 32 i32.const 3 call $~lib/builtins/abort unreachable @@ -4375,7 +4431,7 @@ if i32.const 0 i32.const 1056 - i32.const 37 + i32.const 38 i32.const 3 call $~lib/builtins/abort unreachable @@ -4387,7 +4443,7 @@ if i32.const 0 i32.const 1056 - i32.const 38 + i32.const 39 i32.const 3 call $~lib/builtins/abort unreachable @@ -4399,7 +4455,7 @@ if i32.const 0 i32.const 1056 - i32.const 39 + i32.const 40 i32.const 3 call $~lib/builtins/abort unreachable @@ -4411,7 +4467,7 @@ if i32.const 0 i32.const 1056 - i32.const 40 + i32.const 41 i32.const 3 call $~lib/builtins/abort unreachable @@ -4423,7 +4479,7 @@ if i32.const 0 i32.const 1056 - i32.const 41 + i32.const 42 i32.const 3 call $~lib/builtins/abort unreachable @@ -4435,7 +4491,7 @@ if i32.const 0 i32.const 1056 - i32.const 42 + i32.const 43 i32.const 3 call $~lib/builtins/abort unreachable @@ -4450,7 +4506,7 @@ if i32.const 0 i32.const 1056 - i32.const 43 + i32.const 44 i32.const 3 call $~lib/builtins/abort unreachable @@ -4470,7 +4526,7 @@ if i32.const 0 i32.const 1056 - i32.const 49 + i32.const 50 i32.const 3 call $~lib/builtins/abort unreachable @@ -4488,7 +4544,7 @@ if i32.const 0 i32.const 1056 - i32.const 51 + i32.const 52 i32.const 3 call $~lib/builtins/abort unreachable @@ -4506,7 +4562,7 @@ if i32.const 0 i32.const 1056 - i32.const 53 + i32.const 54 i32.const 3 call $~lib/builtins/abort unreachable @@ -4529,7 +4585,7 @@ if i32.const 0 i32.const 1056 - i32.const 62 + i32.const 63 i32.const 3 call $~lib/builtins/abort unreachable @@ -4544,7 +4600,7 @@ if i32.const 0 i32.const 1056 - i32.const 64 + i32.const 65 i32.const 3 call $~lib/builtins/abort unreachable @@ -4559,7 +4615,7 @@ if i32.const 0 i32.const 1056 - i32.const 66 + i32.const 67 i32.const 3 call $~lib/builtins/abort unreachable @@ -4582,7 +4638,7 @@ if i32.const 0 i32.const 1056 - i32.const 75 + i32.const 76 i32.const 3 call $~lib/builtins/abort unreachable @@ -4597,7 +4653,7 @@ if i32.const 0 i32.const 1056 - i32.const 77 + i32.const 78 i32.const 3 call $~lib/builtins/abort unreachable @@ -4612,7 +4668,7 @@ if i32.const 0 i32.const 1056 - i32.const 79 + i32.const 80 i32.const 3 call $~lib/builtins/abort unreachable @@ -4635,7 +4691,7 @@ if i32.const 0 i32.const 1056 - i32.const 88 + i32.const 89 i32.const 3 call $~lib/builtins/abort unreachable @@ -4650,7 +4706,7 @@ if i32.const 0 i32.const 1056 - i32.const 90 + i32.const 91 i32.const 3 call $~lib/builtins/abort unreachable @@ -4665,7 +4721,7 @@ if i32.const 0 i32.const 1056 - i32.const 92 + i32.const 93 i32.const 3 call $~lib/builtins/abort unreachable @@ -4688,7 +4744,7 @@ if i32.const 0 i32.const 1056 - i32.const 101 + i32.const 102 i32.const 3 call $~lib/builtins/abort unreachable @@ -4700,7 +4756,7 @@ if i32.const 0 i32.const 1056 - i32.const 102 + i32.const 103 i32.const 3 call $~lib/builtins/abort unreachable @@ -4715,7 +4771,7 @@ if i32.const 0 i32.const 1056 - i32.const 106 + i32.const 107 i32.const 3 call $~lib/builtins/abort unreachable @@ -4730,7 +4786,7 @@ if i32.const 0 i32.const 1056 - i32.const 108 + i32.const 109 i32.const 3 call $~lib/builtins/abort unreachable @@ -4769,7 +4825,7 @@ if i32.const 0 i32.const 1056 - i32.const 126 + i32.const 127 i32.const 3 call $~lib/builtins/abort unreachable @@ -4781,7 +4837,7 @@ if i32.const 0 i32.const 1056 - i32.const 127 + i32.const 128 i32.const 3 call $~lib/builtins/abort unreachable @@ -4793,7 +4849,7 @@ if i32.const 0 i32.const 1056 - i32.const 128 + i32.const 129 i32.const 3 call $~lib/builtins/abort unreachable @@ -4805,7 +4861,7 @@ if i32.const 0 i32.const 1056 - i32.const 129 + i32.const 130 i32.const 3 call $~lib/builtins/abort unreachable @@ -4820,7 +4876,7 @@ if i32.const 0 i32.const 1056 - i32.const 130 + i32.const 131 i32.const 3 call $~lib/builtins/abort unreachable @@ -4840,7 +4896,7 @@ if i32.const 0 i32.const 1056 - i32.const 134 + i32.const 135 i32.const 3 call $~lib/builtins/abort unreachable @@ -4855,7 +4911,7 @@ if i32.const 0 i32.const 1056 - i32.const 136 + i32.const 137 i32.const 3 call $~lib/builtins/abort unreachable @@ -4870,7 +4926,7 @@ if i32.const 0 i32.const 1056 - i32.const 139 + i32.const 140 i32.const 3 call $~lib/builtins/abort unreachable @@ -4885,7 +4941,7 @@ if i32.const 0 i32.const 1056 - i32.const 142 + i32.const 143 i32.const 3 call $~lib/builtins/abort unreachable @@ -4900,7 +4956,7 @@ if i32.const 0 i32.const 1056 - i32.const 145 + i32.const 146 i32.const 3 call $~lib/builtins/abort unreachable @@ -4915,7 +4971,7 @@ if i32.const 0 i32.const 1056 - i32.const 148 + i32.const 149 i32.const 3 call $~lib/builtins/abort unreachable @@ -4932,7 +4988,7 @@ if i32.const 0 i32.const 1056 - i32.const 154 + i32.const 155 i32.const 3 call $~lib/builtins/abort unreachable @@ -4947,7 +5003,7 @@ if i32.const 0 i32.const 1056 - i32.const 156 + i32.const 157 i32.const 3 call $~lib/builtins/abort unreachable @@ -4962,7 +5018,7 @@ if i32.const 0 i32.const 1056 - i32.const 158 + i32.const 159 i32.const 3 call $~lib/builtins/abort unreachable @@ -4985,7 +5041,7 @@ if i32.const 0 i32.const 1056 - i32.const 167 + i32.const 168 i32.const 3 call $~lib/builtins/abort unreachable @@ -5000,7 +5056,7 @@ if i32.const 0 i32.const 1056 - i32.const 169 + i32.const 170 i32.const 3 call $~lib/builtins/abort unreachable @@ -5015,7 +5071,7 @@ if i32.const 0 i32.const 1056 - i32.const 171 + i32.const 172 i32.const 3 call $~lib/builtins/abort unreachable @@ -5041,7 +5097,7 @@ if i32.const 0 i32.const 1056 - i32.const 177 + i32.const 178 i32.const 3 call $~lib/builtins/abort unreachable @@ -5067,7 +5123,7 @@ if i32.const 0 i32.const 1056 - i32.const 179 + i32.const 180 i32.const 3 call $~lib/builtins/abort unreachable @@ -5093,7 +5149,7 @@ if i32.const 0 i32.const 1056 - i32.const 181 + i32.const 182 i32.const 3 call $~lib/builtins/abort unreachable @@ -5113,7 +5169,7 @@ if i32.const 0 i32.const 1056 - i32.const 188 + i32.const 189 i32.const 3 call $~lib/builtins/abort unreachable @@ -5133,7 +5189,7 @@ if i32.const 0 i32.const 1056 - i32.const 190 + i32.const 191 i32.const 3 call $~lib/builtins/abort unreachable @@ -5153,7 +5209,7 @@ if i32.const 0 i32.const 1056 - i32.const 192 + i32.const 193 i32.const 3 call $~lib/builtins/abort unreachable @@ -5184,7 +5240,7 @@ if i32.const 0 i32.const 1056 - i32.const 195 + i32.const 196 i32.const 3 call $~lib/builtins/abort unreachable @@ -5204,7 +5260,7 @@ if i32.const 0 i32.const 1056 - i32.const 202 + i32.const 203 i32.const 3 call $~lib/builtins/abort unreachable @@ -5224,7 +5280,7 @@ if i32.const 0 i32.const 1056 - i32.const 206 + i32.const 207 i32.const 3 call $~lib/builtins/abort unreachable @@ -5244,7 +5300,7 @@ if i32.const 0 i32.const 1056 - i32.const 210 + i32.const 211 i32.const 3 call $~lib/builtins/abort unreachable @@ -5266,7 +5322,7 @@ if i32.const 0 i32.const 1056 - i32.const 218 + i32.const 219 i32.const 3 call $~lib/builtins/abort unreachable @@ -5278,7 +5334,7 @@ if i32.const 0 i32.const 1056 - i32.const 219 + i32.const 220 i32.const 3 call $~lib/builtins/abort unreachable @@ -5290,7 +5346,7 @@ if i32.const 0 i32.const 1056 - i32.const 221 + i32.const 222 i32.const 3 call $~lib/builtins/abort unreachable @@ -5302,7 +5358,7 @@ if i32.const 0 i32.const 1056 - i32.const 222 + i32.const 223 i32.const 3 call $~lib/builtins/abort unreachable @@ -5314,7 +5370,7 @@ if i32.const 0 i32.const 1056 - i32.const 224 + i32.const 225 i32.const 3 call $~lib/builtins/abort unreachable @@ -5326,7 +5382,7 @@ if i32.const 0 i32.const 1056 - i32.const 225 + i32.const 226 i32.const 3 call $~lib/builtins/abort unreachable @@ -5338,7 +5394,7 @@ if i32.const 0 i32.const 1056 - i32.const 227 + i32.const 228 i32.const 3 call $~lib/builtins/abort unreachable @@ -5350,7 +5406,7 @@ if i32.const 0 i32.const 1056 - i32.const 228 + i32.const 229 i32.const 3 call $~lib/builtins/abort unreachable @@ -5371,7 +5427,7 @@ if i32.const 0 i32.const 1056 - i32.const 230 + i32.const 231 i32.const 3 call $~lib/builtins/abort unreachable @@ -5392,7 +5448,7 @@ if i32.const 0 i32.const 1056 - i32.const 231 + i32.const 232 i32.const 3 call $~lib/builtins/abort unreachable @@ -5465,7 +5521,7 @@ if i32.const 1104 i32.const 1152 - i32.const 79 + i32.const 78 i32.const 7 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index 3d496ff6ef..589491f2fc 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -2,9 +2,10 @@ { assert(Date.UTC(1970, 0, 1) == 0); assert(Date.UTC(1970, 0, 1, 0, 0, 0, 0) == 0); - - let creationTime = Date.UTC(2018, 10, 10, 11, 0, 0, 1); - assert(creationTime == 1541847600001); + assert(Date.UTC(70) == 0); + assert(Date.UTC(90) == 631152000000); + assert(Date.UTC(-90) == -65007360000000); + assert(Date.UTC(2018, 10, 10, 11, 0, 0, 1) == 1541847600001); } // Date get / set Time ///////////////////////////////////////////////////////////////////////////////// diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 526bc3413c..773d860272 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -169,6 +169,22 @@ i32.sub ) (func $~lib/date/epochMillis (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (result i64) + local.get $0 + i32.const 0 + i32.ge_s + if (result i32) + local.get $0 + i32.const 99 + i32.le_s + else + i32.const 0 + end + if + local.get $0 + i32.const 1900 + i32.add + local.set $0 + end local.get $0 local.get $1 local.get $2 @@ -2657,7 +2673,7 @@ if i32.const 80 i32.const 128 - i32.const 92 + i32.const 91 i32.const 7 call $~lib/builtins/abort unreachable @@ -2755,7 +2771,7 @@ if i32.const 576 i32.const 128 - i32.const 134 + i32.const 133 i32.const 38 call $~lib/builtins/abort unreachable @@ -2788,7 +2804,7 @@ if i32.const 576 i32.const 128 - i32.const 139 + i32.const 138 i32.const 38 call $~lib/builtins/abort unreachable @@ -2821,7 +2837,7 @@ if i32.const 576 i32.const 128 - i32.const 144 + i32.const 143 i32.const 34 call $~lib/builtins/abort unreachable @@ -2919,7 +2935,7 @@ if i32.const 576 i32.const 128 - i32.const 152 + i32.const 151 i32.const 52 call $~lib/builtins/abort unreachable @@ -2964,7 +2980,7 @@ if i32.const 576 i32.const 128 - i32.const 159 + i32.const 158 i32.const 34 call $~lib/builtins/abort unreachable @@ -6668,15 +6684,6 @@ i32.const 0 call $~lib/number/I32.parseInt local.set $14 - local.get $14 - i32.const 100 - i32.lt_s - if - local.get $14 - i32.const 1900 - i32.add - local.set $14 - end i32.const 0 local.get $14 local.get $13 @@ -6788,39 +6795,142 @@ call $~lib/builtins/abort unreachable end - i32.const 2018 + i32.const 70 + local.set $0 + i32.const 0 local.set $6 - i32.const 10 + i32.const 1 local.set $5 - i32.const 10 + i32.const 0 local.set $4 - i32.const 11 + i32.const 0 local.set $3 i32.const 0 local.set $2 i32.const 0 local.set $1 + local.get $0 + local.get $6 i32.const 1 + i32.add + local.get $5 + local.get $4 + local.get $3 + local.get $2 + local.get $1 + call $~lib/date/epochMillis + i64.const 0 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 90 local.set $0 - local.get $6 + i32.const 0 + local.set $1 + i32.const 1 + local.set $2 + i32.const 0 + local.set $3 + i32.const 0 + local.set $4 + i32.const 0 + local.set $5 + i32.const 0 + local.set $6 + local.get $0 + local.get $1 + i32.const 1 + i32.add + local.get $2 + local.get $3 + local.get $4 local.get $5 + local.get $6 + call $~lib/date/epochMillis + i64.const 631152000000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const -90 + local.set $0 + i32.const 0 + local.set $6 + i32.const 1 + local.set $5 + i32.const 0 + local.set $4 + i32.const 0 + local.set $3 + i32.const 0 + local.set $2 + i32.const 0 + local.set $1 + local.get $0 + local.get $6 i32.const 1 i32.add + local.get $5 local.get $4 local.get $3 local.get $2 local.get $1 + call $~lib/date/epochMillis + i64.const -65007360000000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 2018 + local.set $1 + i32.const 10 + local.set $2 + i32.const 10 + local.set $3 + i32.const 11 + local.set $4 + i32.const 0 + local.set $5 + i32.const 0 + local.set $6 + i32.const 1 + local.set $0 + local.get $1 + local.get $2 + i32.const 1 + i32.add + local.get $3 + local.get $4 + local.get $5 + local.get $6 local.get $0 call $~lib/date/epochMillis - local.set $7 - local.get $7 i64.const 1541847600001 i64.eq i32.eqz if i32.const 0 i32.const 32 - i32.const 7 + i32.const 8 i32.const 3 call $~lib/builtins/abort unreachable @@ -6848,9 +6958,9 @@ i32.const 0 local.get $7 call $~lib/date/Date#constructor - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 call $~lib/date/Date#getTime local.get $7 i64.eq @@ -6858,18 +6968,18 @@ if i32.const 0 i32.const 32 - i32.const 15 + i32.const 16 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 local.get $7 i64.const 1 i64.add call $~lib/date/Date#setTime drop - local.get $6 + local.get $1 call $~lib/date/Date#getTime local.get $7 i64.const 1 @@ -6879,7 +6989,7 @@ if i32.const 0 i32.const 32 - i32.const 17 + i32.const 18 i32.const 3 call $~lib/builtins/abort unreachable @@ -6888,9 +6998,9 @@ i32.const 0 i64.const 5918283958183706 call $~lib/date/Date#constructor - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 call $~lib/date/Date#getUTCFullYear i32.const 189512 i32.eq @@ -6898,12 +7008,12 @@ if i32.const 0 i32.const 32 - i32.const 25 + i32.const 26 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCMonth i32.const 11 i32.eq @@ -6911,12 +7021,12 @@ if i32.const 0 i32.const 32 - i32.const 26 + i32.const 27 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCDate i32.const 14 i32.eq @@ -6924,12 +7034,12 @@ if i32.const 0 i32.const 32 - i32.const 27 + i32.const 28 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCHours i32.const 22 i32.eq @@ -6937,12 +7047,12 @@ if i32.const 0 i32.const 32 - i32.const 28 + i32.const 29 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCMinutes i32.const 9 i32.eq @@ -6950,12 +7060,12 @@ if i32.const 0 i32.const 32 - i32.const 29 + i32.const 30 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCSeconds i32.const 43 i32.eq @@ -6963,12 +7073,12 @@ if i32.const 0 i32.const 32 - i32.const 30 + i32.const 31 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCMilliseconds i32.const 706 i32.eq @@ -6976,7 +7086,7 @@ if i32.const 0 i32.const 32 - i32.const 31 + i32.const 32 i32.const 3 call $~lib/builtins/abort unreachable @@ -6985,9 +7095,9 @@ i32.const 0 i64.const 123814991274 call $~lib/date/Date#constructor - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 call $~lib/date/Date#getUTCFullYear i32.const 1973 i32.eq @@ -6995,12 +7105,12 @@ if i32.const 0 i32.const 32 - i32.const 37 + i32.const 38 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCMonth i32.const 11 i32.eq @@ -7008,12 +7118,12 @@ if i32.const 0 i32.const 32 - i32.const 38 + i32.const 39 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCDate i32.const 4 i32.eq @@ -7021,12 +7131,12 @@ if i32.const 0 i32.const 32 - i32.const 39 + i32.const 40 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCHours i32.const 1 i32.eq @@ -7034,12 +7144,12 @@ if i32.const 0 i32.const 32 - i32.const 40 + i32.const 41 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCMinutes i32.const 3 i32.eq @@ -7047,12 +7157,12 @@ if i32.const 0 i32.const 32 - i32.const 41 + i32.const 42 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCSeconds i32.const 11 i32.eq @@ -7060,12 +7170,12 @@ if i32.const 0 i32.const 32 - i32.const 42 + i32.const 43 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCMilliseconds i32.const 274 i32.eq @@ -7073,7 +7183,7 @@ if i32.const 0 i32.const 32 - i32.const 43 + i32.const 44 i32.const 3 call $~lib/builtins/abort unreachable @@ -7082,9 +7192,9 @@ i32.const 0 i64.const 399464523963984 call $~lib/date/Date#constructor - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 call $~lib/date/Date#getUTCMilliseconds i32.const 984 i32.eq @@ -7092,15 +7202,15 @@ if i32.const 0 i32.const 32 - i32.const 49 + i32.const 50 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 12 call $~lib/date/Date#setUTCMilliseconds - local.get $6 + local.get $1 call $~lib/date/Date#getUTCMilliseconds i32.const 12 i32.eq @@ -7108,15 +7218,15 @@ if i32.const 0 i32.const 32 - i32.const 51 + i32.const 52 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 568 call $~lib/date/Date#setUTCMilliseconds - local.get $6 + local.get $1 call $~lib/date/Date#getUTCMilliseconds i32.const 568 i32.eq @@ -7124,24 +7234,24 @@ if i32.const 0 i32.const 32 - i32.const 53 + i32.const 54 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 0 call $~lib/date/Date#setUTCMilliseconds - local.get $6 + local.get $1 i32.const 999 call $~lib/date/Date#setUTCMilliseconds global.get $~lib/memory/__stack_pointer i32.const 0 i64.const 372027318331986 call $~lib/date/Date#constructor - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 call $~lib/date/Date#getUTCSeconds i32.const 31 i32.eq @@ -7149,15 +7259,15 @@ if i32.const 0 i32.const 32 - i32.const 62 + i32.const 63 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 12 call $~lib/date/Date#setUTCSeconds - local.get $6 + local.get $1 call $~lib/date/Date#getUTCSeconds i32.const 12 i32.eq @@ -7165,15 +7275,15 @@ if i32.const 0 i32.const 32 - i32.const 64 + i32.const 65 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 50 call $~lib/date/Date#setUTCSeconds - local.get $6 + local.get $1 call $~lib/date/Date#getUTCSeconds i32.const 50 i32.eq @@ -7181,24 +7291,24 @@ if i32.const 0 i32.const 32 - i32.const 66 + i32.const 67 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 0 call $~lib/date/Date#setUTCSeconds - local.get $6 + local.get $1 i32.const 59 call $~lib/date/Date#setUTCSeconds global.get $~lib/memory/__stack_pointer i32.const 0 i64.const 372027318331986 call $~lib/date/Date#constructor - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 call $~lib/date/Date#getUTCMinutes i32.const 45 i32.eq @@ -7206,15 +7316,15 @@ if i32.const 0 i32.const 32 - i32.const 75 + i32.const 76 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 12 call $~lib/date/Date#setUTCMinutes - local.get $6 + local.get $1 call $~lib/date/Date#getUTCMinutes i32.const 12 i32.eq @@ -7222,15 +7332,15 @@ if i32.const 0 i32.const 32 - i32.const 77 + i32.const 78 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 50 call $~lib/date/Date#setUTCMinutes - local.get $6 + local.get $1 call $~lib/date/Date#getUTCMinutes i32.const 50 i32.eq @@ -7238,24 +7348,24 @@ if i32.const 0 i32.const 32 - i32.const 79 + i32.const 80 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 0 call $~lib/date/Date#setUTCMinutes - local.get $6 + local.get $1 i32.const 59 call $~lib/date/Date#setUTCMinutes global.get $~lib/memory/__stack_pointer i32.const 0 i64.const 372027318331986 call $~lib/date/Date#constructor - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 call $~lib/date/Date#getUTCHours i32.const 17 i32.eq @@ -7263,15 +7373,15 @@ if i32.const 0 i32.const 32 - i32.const 88 + i32.const 89 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 12 call $~lib/date/Date#setUTCHours - local.get $6 + local.get $1 call $~lib/date/Date#getUTCHours i32.const 12 i32.eq @@ -7279,15 +7389,15 @@ if i32.const 0 i32.const 32 - i32.const 90 + i32.const 91 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 2 call $~lib/date/Date#setUTCHours - local.get $6 + local.get $1 call $~lib/date/Date#getUTCHours i32.const 2 i32.eq @@ -7295,24 +7405,24 @@ if i32.const 0 i32.const 32 - i32.const 92 + i32.const 93 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 0 call $~lib/date/Date#setUTCHours - local.get $6 + local.get $1 i32.const 23 call $~lib/date/Date#setUTCHours global.get $~lib/memory/__stack_pointer i32.const 0 i64.const 123814991274 call $~lib/date/Date#constructor - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 call $~lib/date/Date#getUTCFullYear i32.const 1973 i32.eq @@ -7320,12 +7430,12 @@ if i32.const 0 i32.const 32 - i32.const 101 + i32.const 102 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCMonth i32.const 11 i32.eq @@ -7333,15 +7443,15 @@ if i32.const 0 i32.const 32 - i32.const 102 + i32.const 103 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 12 call $~lib/date/Date#setUTCDate - local.get $6 + local.get $1 call $~lib/date/Date#getUTCDate i32.const 12 i32.eq @@ -7349,15 +7459,15 @@ if i32.const 0 i32.const 32 - i32.const 106 + i32.const 107 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 2 call $~lib/date/Date#setUTCDate - local.get $6 + local.get $1 call $~lib/date/Date#getUTCDate i32.const 2 i32.eq @@ -7365,39 +7475,39 @@ if i32.const 0 i32.const 32 - i32.const 108 + i32.const 109 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 1 call $~lib/date/Date#setUTCDate - local.get $6 + local.get $1 i32.const 30 call $~lib/date/Date#setUTCDate - local.get $6 + local.get $1 i32.const 1 call $~lib/date/Date#setUTCMonth - local.get $6 + local.get $1 i32.const 1 call $~lib/date/Date#setUTCDate - local.get $6 + local.get $1 i32.const 31 call $~lib/date/Date#setUTCDate - local.get $6 + local.get $1 i32.const 2024 call $~lib/date/Date#setUTCFullYear - local.get $6 + local.get $1 i32.const 2 call $~lib/date/Date#setUTCMonth - local.get $6 + local.get $1 i32.const 1 call $~lib/date/Date#setUTCDate - local.get $6 + local.get $1 i32.const 29 call $~lib/date/Date#setUTCDate - local.get $6 + local.get $1 call $~lib/date/Date#getTime i64.const 1711674191274 i64.eq @@ -7405,12 +7515,12 @@ if i32.const 0 i32.const 32 - i32.const 126 + i32.const 127 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCDate i32.const 29 i32.eq @@ -7418,12 +7528,12 @@ if i32.const 0 i32.const 32 - i32.const 127 + i32.const 128 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCMinutes i32.const 3 i32.eq @@ -7431,12 +7541,12 @@ if i32.const 0 i32.const 32 - i32.const 128 + i32.const 129 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCSeconds i32.const 11 i32.eq @@ -7444,12 +7554,12 @@ if i32.const 0 i32.const 32 - i32.const 129 + i32.const 130 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCMilliseconds i32.const 274 i32.eq @@ -7457,7 +7567,7 @@ if i32.const 0 i32.const 32 - i32.const 130 + i32.const 131 i32.const 3 call $~lib/builtins/abort unreachable @@ -7466,12 +7576,12 @@ i32.const 0 i64.const 1362106799999 call $~lib/date/Date#constructor - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 i32.const 20 call $~lib/date/Date#setUTCDate - local.get $6 + local.get $1 call $~lib/date/Date#getTime i64.const 1363748399999 i64.eq @@ -7479,15 +7589,15 @@ if i32.const 0 i32.const 32 - i32.const 134 + i32.const 135 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 1 call $~lib/date/Date#setUTCDate - local.get $6 + local.get $1 call $~lib/date/Date#getTime i64.const 1362106799999 i64.eq @@ -7495,15 +7605,15 @@ if i32.const 0 i32.const 32 - i32.const 136 + i32.const 137 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 1000 call $~lib/date/Date#setUTCMilliseconds - local.get $6 + local.get $1 call $~lib/date/Date#getTime i64.const 1362106800000 i64.eq @@ -7511,19 +7621,19 @@ if i32.const 0 i32.const 32 - i32.const 139 + i32.const 140 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 60 i32.const 60 i32.mul i32.const 1000 i32.mul call $~lib/date/Date#setUTCMilliseconds - local.get $6 + local.get $1 call $~lib/date/Date#getTime i64.const 1362110400000 i64.eq @@ -7531,12 +7641,12 @@ if i32.const 0 i32.const 32 - i32.const 142 + i32.const 143 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 60 i32.const 60 i32.mul @@ -7545,7 +7655,7 @@ i32.const 1 i32.add call $~lib/date/Date#setUTCMilliseconds - local.get $6 + local.get $1 call $~lib/date/Date#getTime i64.const 1362114000001 i64.eq @@ -7553,12 +7663,12 @@ if i32.const 0 i32.const 32 - i32.const 145 + i32.const 146 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 60 i32.const 60 i32.mul @@ -7567,7 +7677,7 @@ i32.const 1 i32.add call $~lib/date/Date#setUTCMilliseconds - local.get $6 + local.get $1 call $~lib/date/Date#getTime i64.const 1362117600001 i64.eq @@ -7575,7 +7685,7 @@ if i32.const 0 i32.const 32 - i32.const 148 + i32.const 149 i32.const 3 call $~lib/builtins/abort unreachable @@ -7584,9 +7694,9 @@ i32.const 0 i64.const 7899943856218720 call $~lib/date/Date#constructor - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 call $~lib/date/Date#getUTCMonth i32.const 3 i32.eq @@ -7594,15 +7704,15 @@ if i32.const 0 i32.const 32 - i32.const 154 + i32.const 155 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 10 call $~lib/date/Date#setUTCMonth - local.get $6 + local.get $1 call $~lib/date/Date#getUTCMonth i32.const 10 i32.eq @@ -7610,15 +7720,15 @@ if i32.const 0 i32.const 32 - i32.const 156 + i32.const 157 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 2 call $~lib/date/Date#setUTCMonth - local.get $6 + local.get $1 call $~lib/date/Date#getUTCMonth i32.const 2 i32.eq @@ -7626,24 +7736,24 @@ if i32.const 0 i32.const 32 - i32.const 158 + i32.const 159 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 1 call $~lib/date/Date#setUTCMonth - local.get $6 + local.get $1 i32.const 12 call $~lib/date/Date#setUTCMonth global.get $~lib/memory/__stack_pointer i32.const 0 i64.const 7941202527925698 call $~lib/date/Date#constructor - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 call $~lib/date/Date#getUTCFullYear i32.const 253616 i32.eq @@ -7651,15 +7761,15 @@ if i32.const 0 i32.const 32 - i32.const 167 + i32.const 168 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 1976 call $~lib/date/Date#setUTCFullYear - local.get $6 + local.get $1 call $~lib/date/Date#getUTCFullYear i32.const 1976 i32.eq @@ -7667,15 +7777,15 @@ if i32.const 0 i32.const 32 - i32.const 169 + i32.const 170 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 i32.const 20212 call $~lib/date/Date#setUTCFullYear - local.get $6 + local.get $1 call $~lib/date/Date#getUTCFullYear i32.const 20212 i32.eq @@ -7683,7 +7793,7 @@ if i32.const 0 i32.const 32 - i32.const 171 + i32.const 172 i32.const 3 call $~lib/builtins/abort unreachable @@ -7692,9 +7802,9 @@ i32.const 0 i64.const 1231231231020 call $~lib/date/Date#constructor - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 call $~lib/date/Date#toISOString local.set $8 global.get $~lib/memory/__stack_pointer @@ -7712,7 +7822,7 @@ if i32.const 0 i32.const 32 - i32.const 177 + i32.const 178 i32.const 3 call $~lib/builtins/abort unreachable @@ -7721,9 +7831,9 @@ i32.const 0 i64.const 1231231231456 call $~lib/date/Date#constructor - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 call $~lib/date/Date#toISOString local.set $8 global.get $~lib/memory/__stack_pointer @@ -7741,7 +7851,7 @@ if i32.const 0 i32.const 32 - i32.const 179 + i32.const 180 i32.const 3 call $~lib/builtins/abort unreachable @@ -7750,9 +7860,9 @@ i32.const 0 i64.const 322331231231020 call $~lib/date/Date#constructor - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 call $~lib/date/Date#toISOString local.set $8 global.get $~lib/memory/__stack_pointer @@ -7770,7 +7880,7 @@ if i32.const 0 i32.const 32 - i32.const 181 + i32.const 182 i32.const 3 call $~lib/builtins/abort unreachable @@ -7783,9 +7893,9 @@ i32.store offset=4 local.get $8 call $~lib/date/Date.fromString - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 call $~lib/date/Date#getTime i64.const 192067200000 i64.eq @@ -7793,7 +7903,7 @@ if i32.const 0 i32.const 32 - i32.const 188 + i32.const 189 i32.const 3 call $~lib/builtins/abort unreachable @@ -7806,9 +7916,9 @@ i32.store offset=4 local.get $8 call $~lib/date/Date.fromString - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 call $~lib/date/Date#getTime i64.const 192067200000 i64.eq @@ -7816,7 +7926,7 @@ if i32.const 0 i32.const 32 - i32.const 190 + i32.const 191 i32.const 3 call $~lib/builtins/abort unreachable @@ -7829,9 +7939,9 @@ i32.store offset=4 local.get $8 call $~lib/date/Date.fromString - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 call $~lib/date/Date#getTime i64.const 11860387200000 i64.eq @@ -7839,7 +7949,7 @@ if i32.const 0 i32.const 32 - i32.const 192 + i32.const 193 i32.const 3 call $~lib/builtins/abort unreachable @@ -7875,7 +7985,7 @@ if i32.const 0 i32.const 32 - i32.const 195 + i32.const 196 i32.const 3 call $~lib/builtins/abort unreachable @@ -7888,9 +7998,9 @@ i32.store offset=4 local.get $8 call $~lib/date/Date.fromString - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 call $~lib/date/Date#getTime i64.const 192112496000 i64.eq @@ -7898,7 +8008,7 @@ if i32.const 0 i32.const 32 - i32.const 202 + i32.const 203 i32.const 3 call $~lib/builtins/abort unreachable @@ -7911,9 +8021,9 @@ i32.store offset=4 local.get $8 call $~lib/date/Date.fromString - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 call $~lib/date/Date#getTime i64.const 192112496456 i64.eq @@ -7921,7 +8031,7 @@ if i32.const 0 i32.const 32 - i32.const 206 + i32.const 207 i32.const 3 call $~lib/builtins/abort unreachable @@ -7934,9 +8044,9 @@ i32.store offset=4 local.get $8 call $~lib/date/Date.fromString - local.tee $6 + local.tee $1 i32.store - local.get $6 + local.get $1 call $~lib/date/Date#getTime i64.const 192112496456 i64.eq @@ -7944,7 +8054,7 @@ if i32.const 0 i32.const 32 - i32.const 210 + i32.const 211 i32.const 3 call $~lib/builtins/abort unreachable @@ -7953,15 +8063,15 @@ i32.const 0 i64.const -8640000000000000 call $~lib/date/Date#constructor - local.tee $6 + local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 0 i64.const 8640000000000000 call $~lib/date/Date#constructor - local.tee $5 + local.tee $2 i32.store offset=12 - local.get $6 + local.get $1 call $~lib/date/Date#getTime i64.const -8640000000000000 i64.eq @@ -7969,12 +8079,12 @@ if i32.const 0 i32.const 32 - i32.const 218 + i32.const 219 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $5 + local.get $2 call $~lib/date/Date#getTime i64.const 8640000000000000 i64.eq @@ -7982,12 +8092,12 @@ if i32.const 0 i32.const 32 - i32.const 219 + i32.const 220 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCFullYear i32.const -271821 i32.eq @@ -7995,12 +8105,12 @@ if i32.const 0 i32.const 32 - i32.const 221 + i32.const 222 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $5 + local.get $2 call $~lib/date/Date#getUTCFullYear i32.const 275760 i32.eq @@ -8008,12 +8118,12 @@ if i32.const 0 i32.const 32 - i32.const 222 + i32.const 223 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCMonth i32.const 3 i32.eq @@ -8021,12 +8131,12 @@ if i32.const 0 i32.const 32 - i32.const 224 + i32.const 225 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $5 + local.get $2 call $~lib/date/Date#getUTCMonth i32.const 8 i32.eq @@ -8034,12 +8144,12 @@ if i32.const 0 i32.const 32 - i32.const 225 + i32.const 226 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#getUTCDate i32.const 20 i32.eq @@ -8047,12 +8157,12 @@ if i32.const 0 i32.const 32 - i32.const 227 + i32.const 228 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $5 + local.get $2 call $~lib/date/Date#getUTCDate i32.const 13 i32.eq @@ -8060,12 +8170,12 @@ if i32.const 0 i32.const 32 - i32.const 228 + i32.const 229 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $6 + local.get $1 call $~lib/date/Date#toISOString local.set $8 global.get $~lib/memory/__stack_pointer @@ -8083,12 +8193,12 @@ if i32.const 0 i32.const 32 - i32.const 230 + i32.const 231 i32.const 3 call $~lib/builtins/abort unreachable end - local.get $5 + local.get $2 call $~lib/date/Date#toISOString local.set $8 global.get $~lib/memory/__stack_pointer @@ -8106,7 +8216,7 @@ if i32.const 0 i32.const 32 - i32.const 231 + i32.const 232 i32.const 3 call $~lib/builtins/abort unreachable @@ -8117,7 +8227,7 @@ i64.const 1 i64.sub call $~lib/date/Date#constructor - local.tee $4 + local.tee $3 i32.store offset=16 global.get $~lib/memory/__stack_pointer i32.const 0 @@ -8125,7 +8235,7 @@ i64.const 1 i64.add call $~lib/date/Date#constructor - local.tee $3 + local.tee $4 i32.store offset=20 i32.const 2448 local.set $8 @@ -8134,10 +8244,10 @@ i32.store offset=4 local.get $8 i32.const 2 - local.get $3 + local.get $4 call $~lib/date/Date#getUTCDate f64.convert_i32_s - local.get $3 + local.get $4 call $~lib/date/Date#getUTCMinutes f64.convert_i32_s f64.const 0 @@ -8197,7 +8307,7 @@ if i32.const 80 i32.const 128 - i32.const 79 + i32.const 78 i32.const 7 call $~lib/builtins/abort unreachable From 00c075878cb54db0019ca62f8c7ad79ca550409d Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 08:55:48 +0300 Subject: [PATCH 12/47] more --- tests/compiler/std/date.optimized.wat | 64 ++++++++++++++++++--------- tests/compiler/std/date.ts | 18 +++----- tests/compiler/std/date.untouched.wat | 38 +++++++++++++--- 3 files changed, 82 insertions(+), 38 deletions(-) diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index 9ccadddb10..1d90538d88 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -88,8 +88,10 @@ (data (i32.const 3128) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") (data (i32.const 3196) "L") (data (i32.const 3208) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") - (data (i32.const 3280) "\06\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 3308) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") + (data (i32.const 3276) "L") + (data (i32.const 3288) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 3360) "\06\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 3388) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) @@ -102,7 +104,7 @@ (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/memory/__stack_pointer (mut i32) (i32.const 19716)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 19796)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -430,7 +432,7 @@ if i32.const 0 local.get $0 - i32.const 19716 + i32.const 19796 i32.lt_u local.get $0 i32.load offset=8 @@ -476,7 +478,7 @@ i32.const 1 else local.get $1 - i32.const 3280 + i32.const 3360 i32.load i32.gt_u if @@ -490,7 +492,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 3284 + i32.const 3364 i32.add i32.load i32.const 32 @@ -1064,10 +1066,10 @@ if unreachable end - i32.const 19728 + i32.const 19808 i32.const 0 i32.store - i32.const 21296 + i32.const 21376 i32.const 0 i32.store loop $for-loop|0 @@ -1078,7 +1080,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 19728 + i32.const 19808 i32.add i32.const 0 i32.store offset=4 @@ -1096,7 +1098,7 @@ i32.add i32.const 2 i32.shl - i32.const 19728 + i32.const 19808 i32.add i32.const 0 i32.store offset=96 @@ -1114,13 +1116,13 @@ br $for-loop|0 end end - i32.const 19728 - i32.const 21300 + i32.const 19808 + i32.const 21380 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 19728 + i32.const 19808 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -1199,7 +1201,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 19716 + i32.const 19796 i32.lt_u if local.get $0 @@ -1289,7 +1291,7 @@ unreachable end local.get $0 - i32.const 19716 + i32.const 19796 i32.lt_u if local.get $0 @@ -1312,7 +1314,7 @@ i32.const 4 i32.add local.tee $1 - i32.const 19716 + i32.const 19796 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -3377,11 +3379,11 @@ ) (func $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 3332 + i32.const 3412 i32.lt_s if - i32.const 19744 - i32.const 19792 + i32.const 19824 + i32.const 19872 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -4281,7 +4283,7 @@ memory.size i32.const 16 i32.shl - i32.const 19716 + i32.const 19796 i32.sub i32.const 1 i32.shr_u @@ -5456,6 +5458,7 @@ global.get $~lib/memory/__stack_pointer i64.const 8639999999999999 call $~lib/date/Date#constructor + local.tee $1 i32.store offset=16 global.get $~lib/memory/__stack_pointer i64.const -8639999999999999 @@ -5477,6 +5480,27 @@ f64.const 0 f64.const 0 call $~lib/builtins/trace + local.get $1 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3296 + i32.store offset=8 + local.get $0 + i32.const 3296 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1056 + i32.const 240 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i32.const 24 i32.add diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index 589491f2fc..e20fcc0739 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -214,10 +214,10 @@ // Minimum / Maximum dates ///////////////////////////////////////////////////////////////////////// { let minDate = new Date(-8640000000000000); - let maxDate = new Date(8640000000000000); + let maxDate = new Date( 8640000000000000); - assert(minDate.getTime() == -8640000000000000); - assert(maxDate.getTime() == 8640000000000000); + assert(minDate.getTime() == -8640000000000000); + assert(maxDate.getTime() == 8640000000000000); assert(minDate.getUTCFullYear() == -271821); assert(maxDate.getUTCFullYear() == 275760); @@ -237,13 +237,9 @@ trace("", 2, minDateInc.getUTCDate(), minDateInc.getUTCMinutes()); // assert(minDateInc.getUTCDate() == 20); + assert(maxDateDec.toISOString() == "+275760-09-12T23:59:59.999Z"); + // assert(minDateInc.toISOString() == "-271821-04-20T00:00:00.001Z"); - // assert(maxDateDec.toISOString() == "+275760-09-12T23:59:59.999Z"); - // trace(minDateInc.toISOString()); - - - // assert(new Date(-8640000000000000 + 1).toISOString() == "-271821-04-20T00:00:00.001Z"); - - // console.log(new Date(maxDate.getTime() + 1).toString()); // Invalid Date - // console.log(new Date(minDate.getTime() - 1).toString()); // Invalid Date + // new Date(maxDate.getTime() + 1); // Invalid Date + // new Date(minDate.getTime() - 1); // Invalid Date } diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 773d860272..23a14257d1 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -63,7 +63,8 @@ (data (i32.const 3468) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 3548) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") (data (i32.const 3628) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 3712) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") + (data (i32.const 3708) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") + (data (i32.const 3792) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") (table $0 1 funcref) (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) @@ -80,10 +81,10 @@ (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) - (global $~lib/rt/__rtti_base i32 (i32.const 3712)) - (global $~lib/memory/__data_end i32 (i32.const 3764)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20148)) - (global $~lib/memory/__heap_base i32 (i32.const 20148)) + (global $~lib/rt/__rtti_base i32 (i32.const 3792)) + (global $~lib/memory/__data_end i32 (i32.const 3844)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20228)) + (global $~lib/memory/__heap_base i32 (i32.const 20228)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -5766,8 +5767,8 @@ global.get $~lib/memory/__data_end i32.lt_s if - i32.const 20176 - i32.const 20224 + i32.const 20256 + i32.const 20304 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -8254,6 +8255,29 @@ f64.const 0 f64.const 0 call $~lib/builtins/trace + local.get $3 + call $~lib/date/Date#toISOString + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 3728 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=8 + local.get $8 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 240 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i32.const 24 i32.add From 28ec3ec97f3bcef43dffdd128b78afa2f8a9a735 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 09:44:23 +0300 Subject: [PATCH 13/47] more --- std/assembly/date.ts | 7 +- tests/compiler/std/date.optimized.wat | 296 ++++++++++------ tests/compiler/std/date.ts | 28 +- tests/compiler/std/date.untouched.wat | 476 +++++++++++++++----------- 4 files changed, 481 insertions(+), 326 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index e05abfe38b..210b04ff61 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -167,9 +167,10 @@ export class Date { } toISOString(): string { - var yearStr = this.year.toString(); - if (this.epochMillis > 0 && yearStr.length > 4) { - yearStr = "+" + yearStr.padStart(6, "0"); + var yearStr = abs(this.year).toString(); + var isNeg = this.epochMillis < 0; + if (isNeg || yearStr.length > 4) { + yearStr = (isNeg ? "-" : "+") + yearStr.padStart(6, "0"); } return ( diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index 1d90538d88..d9e86b47a1 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -43,11 +43,11 @@ (data (i32.const 1868) "\\") (data (i32.const 1880) "\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") (data (i32.const 1964) "\1c") - (data (i32.const 1976) "\01\00\00\00\02\00\00\00+") + (data (i32.const 1976) "\01\00\00\00\02\00\00\00-") (data (i32.const 1996) "\1c") - (data (i32.const 2008) "\01") + (data (i32.const 2008) "\01\00\00\00\02\00\00\00+") (data (i32.const 2028) "\1c") - (data (i32.const 2040) "\01\00\00\00\02\00\00\00-") + (data (i32.const 2040) "\01") (data (i32.const 2060) "\1c") (data (i32.const 2072) "\01\00\00\00\02\00\00\00T") (data (i32.const 2092) "\1c") @@ -62,36 +62,40 @@ (data (i32.const 2280) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z") (data (i32.const 2348) "L") (data (i32.const 2360) "\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z") - (data (i32.const 2428) ",") - (data (i32.const 2440) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") - (data (i32.const 2476) ",") - (data (i32.const 2488) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") - (data (i32.const 2524) ",") - (data (i32.const 2536) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 2572) "|") - (data (i32.const 2584) "\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") - (data (i32.const 2700) ",") - (data (i32.const 2712) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") - (data (i32.const 2748) ",") - (data (i32.const 2760) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") - (data (i32.const 2796) ",") - (data (i32.const 2808) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002") - (data (i32.const 2844) ",") - (data (i32.const 2856) "\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002") - (data (i32.const 2892) "<") - (data (i32.const 2904) "\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006") - (data (i32.const 2956) "L") - (data (i32.const 2968) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") - (data (i32.const 3036) "L") - (data (i32.const 3048) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") + (data (i32.const 2428) "L") + (data (i32.const 2440) "\01\00\00\000\00\00\009\009\009\009\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 2508) "L") + (data (i32.const 2520) "\01\00\00\006\00\00\00+\000\001\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 2588) ",") + (data (i32.const 2600) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") + (data (i32.const 2636) ",") + (data (i32.const 2648) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 2684) ",") + (data (i32.const 2696) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 2732) "|") + (data (i32.const 2744) "\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") + (data (i32.const 2860) ",") + (data (i32.const 2872) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") + (data (i32.const 2908) ",") + (data (i32.const 2920) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") + (data (i32.const 2956) ",") + (data (i32.const 2968) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002") + (data (i32.const 3004) ",") + (data (i32.const 3016) "\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002") + (data (i32.const 3052) "<") + (data (i32.const 3064) "\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006") (data (i32.const 3116) "L") - (data (i32.const 3128) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3128) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") (data (i32.const 3196) "L") - (data (i32.const 3208) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3208) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") (data (i32.const 3276) "L") - (data (i32.const 3288) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") - (data (i32.const 3360) "\06\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 3388) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") + (data (i32.const 3288) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3356) "L") + (data (i32.const 3368) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3436) "L") + (data (i32.const 3448) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 3520) "\06\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 3548) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) @@ -104,7 +108,7 @@ (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/memory/__stack_pointer (mut i32) (i32.const 19796)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 19956)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -312,9 +316,9 @@ call $~lib/rt/itcms/__visit i32.const 1600 call $~lib/rt/itcms/__visit - i32.const 2496 + i32.const 2656 call $~lib/rt/itcms/__visit - i32.const 2592 + i32.const 2752 call $~lib/rt/itcms/__visit i32.const 1200 call $~lib/rt/itcms/__visit @@ -432,7 +436,7 @@ if i32.const 0 local.get $0 - i32.const 19796 + i32.const 19956 i32.lt_u local.get $0 i32.load offset=8 @@ -478,7 +482,7 @@ i32.const 1 else local.get $1 - i32.const 3360 + i32.const 3520 i32.load i32.gt_u if @@ -492,7 +496,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 3364 + i32.const 3524 i32.add i32.load i32.const 32 @@ -1066,10 +1070,10 @@ if unreachable end - i32.const 19808 + i32.const 19968 i32.const 0 i32.store - i32.const 21376 + i32.const 21536 i32.const 0 i32.store loop $for-loop|0 @@ -1080,7 +1084,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 19808 + i32.const 19968 i32.add i32.const 0 i32.store offset=4 @@ -1098,7 +1102,7 @@ i32.add i32.const 2 i32.shl - i32.const 19808 + i32.const 19968 i32.add i32.const 0 i32.store offset=96 @@ -1116,13 +1120,13 @@ br $for-loop|0 end end - i32.const 19808 - i32.const 21380 + i32.const 19968 + i32.const 21540 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 19808 + i32.const 19968 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -1201,7 +1205,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 19796 + i32.const 19956 i32.lt_u if local.get $0 @@ -1291,7 +1295,7 @@ unreachable end local.get $0 - i32.const 19796 + i32.const 19956 i32.lt_u if local.get $0 @@ -1314,7 +1318,7 @@ i32.const 4 i32.add local.tee $1 - i32.const 19796 + i32.const 19956 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -2621,7 +2625,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - i32.const 2016 + i32.const 2048 local.set $0 br $__inlined_func$~lib/string/String#concat end @@ -2934,8 +2938,8 @@ i32.const 268435455 i32.gt_u if - i32.const 2496 - i32.const 2544 + i32.const 2656 + i32.const 2704 i32.const 14 i32.const 48 call $~lib/builtins/abort @@ -3379,11 +3383,11 @@ ) (func $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 3412 + i32.const 3572 i32.lt_s if - i32.const 19824 - i32.const 19872 + i32.const 19984 + i32.const 20032 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3393,6 +3397,7 @@ (func $~lib/date/Date#toISOString (param $0 i32) (result i32) (local $1 i32) (local $2 i32) + (local $3 i32) global.get $~lib/memory/__stack_pointer i32.const 112 i32.sub @@ -3443,14 +3448,25 @@ global.get $~lib/memory/__stack_pointer local.get $0 i32.load + local.tee $1 + i32.const 31 + i32.shr_s + local.tee $2 + local.get $1 + local.get $2 + i32.add + i32.xor call $~lib/number/I32#toString local.tee $1 i32.store local.get $0 i64.load offset=16 i64.const 0 - i64.gt_s + i64.lt_s + local.tee $3 if (result i32) + i32.const 1 + else local.get $1 i32.const 20 i32.sub @@ -3459,13 +3475,15 @@ i32.shr_u i32.const 4 i32.gt_u - else - i32.const 0 end if global.get $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer i32.const 1984 + i32.const 2016 + local.get $3 + select + local.tee $3 i32.store offset=4 global.get $~lib/memory/__stack_pointer i32.const 1856 @@ -3477,17 +3495,17 @@ global.get $~lib/memory/__stack_pointer local.get $1 i32.store offset=8 - i32.const 1984 + local.get $3 local.get $1 call $~lib/string/String.__concat local.tee $1 i32.store end global.get $~lib/memory/__stack_pointer - i32.const 2048 + i32.const 1984 i32.store offset=100 local.get $1 - i32.const 2048 + i32.const 1984 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3518,10 +3536,10 @@ local.get $1 i32.store offset=84 global.get $~lib/memory/__stack_pointer - i32.const 2048 + i32.const 1984 i32.store offset=88 local.get $1 - i32.const 2048 + i32.const 1984 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3778,7 +3796,7 @@ i32.store offset=4 local.get $0 i32.load offset=4 - i32.const 2016 + i32.const 2048 i32.store br $folding-inner1 end @@ -3887,10 +3905,10 @@ call $~lib/array/Array<~lib/string/String>#push else global.get $~lib/memory/__stack_pointer - i32.const 2016 + i32.const 2048 i32.store offset=20 local.get $2 - i32.const 2016 + i32.const 2048 call $~lib/array/Array<~lib/string/String>#push end local.get $9 @@ -3944,10 +3962,10 @@ call $~lib/array/Array<~lib/string/String>#push else global.get $~lib/memory/__stack_pointer - i32.const 2016 + i32.const 2048 i32.store offset=20 local.get $2 - i32.const 2016 + i32.const 2048 call $~lib/array/Array<~lib/string/String>#push end global.get $~lib/memory/__stack_pointer @@ -4104,11 +4122,11 @@ end end global.get $~lib/memory/__stack_pointer - i32.const 2048 + i32.const 1984 i32.store global.get $~lib/memory/__stack_pointer local.get $1 - i32.const 2048 + i32.const 1984 call $~lib/string/String#split local.tee $0 i32.store offset=24 @@ -4283,7 +4301,7 @@ memory.size i32.const 16 i32.shl - i32.const 19796 + i32.const 19956 i32.sub i32.const 1 i32.shr_u @@ -5157,10 +5175,62 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2448 + i64.const 253402300799999 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer i32.const 2448 + i32.store offset=8 + local.get $0 + i32.const 2448 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1056 + i32.const 184 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 253402300800000 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 2528 + i32.store offset=8 + local.get $0 + i32.const 2528 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1056 + i32.const 186 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 2608 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 2608 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5171,16 +5241,16 @@ if i32.const 0 i32.const 1056 - i32.const 189 + i32.const 195 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2720 + i32.const 2880 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2720 + i32.const 2880 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5191,16 +5261,16 @@ if i32.const 0 i32.const 1056 - i32.const 191 + i32.const 197 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2768 + i32.const 2928 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2768 + i32.const 2928 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5211,15 +5281,15 @@ if i32.const 0 i32.const 1056 - i32.const 193 + i32.const 199 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2816 + i32.const 2976 i32.store offset=8 - i32.const 2816 + i32.const 2976 call $~lib/date/Date.fromString local.set $0 global.get $~lib/memory/__stack_pointer @@ -5228,9 +5298,9 @@ local.get $0 i64.load offset=16 global.get $~lib/memory/__stack_pointer - i32.const 2864 + i32.const 3024 i32.store offset=8 - i32.const 2864 + i32.const 3024 call $~lib/date/Date.fromString local.set $0 global.get $~lib/memory/__stack_pointer @@ -5242,16 +5312,16 @@ if i32.const 0 i32.const 1056 - i32.const 196 + i32.const 202 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2912 + i32.const 3072 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2912 + i32.const 3072 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5262,16 +5332,16 @@ if i32.const 0 i32.const 1056 - i32.const 203 + i32.const 209 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2976 + i32.const 3136 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2976 + i32.const 3136 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5282,16 +5352,16 @@ if i32.const 0 i32.const 1056 - i32.const 207 + i32.const 213 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3056 + i32.const 3216 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3056 + i32.const 3216 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5302,7 +5372,7 @@ if i32.const 0 i32.const 1056 - i32.const 211 + i32.const 217 i32.const 3 call $~lib/builtins/abort unreachable @@ -5324,7 +5394,7 @@ if i32.const 0 i32.const 1056 - i32.const 219 + i32.const 225 i32.const 3 call $~lib/builtins/abort unreachable @@ -5336,7 +5406,7 @@ if i32.const 0 i32.const 1056 - i32.const 220 + i32.const 226 i32.const 3 call $~lib/builtins/abort unreachable @@ -5348,7 +5418,7 @@ if i32.const 0 i32.const 1056 - i32.const 222 + i32.const 228 i32.const 3 call $~lib/builtins/abort unreachable @@ -5360,7 +5430,7 @@ if i32.const 0 i32.const 1056 - i32.const 223 + i32.const 229 i32.const 3 call $~lib/builtins/abort unreachable @@ -5372,7 +5442,7 @@ if i32.const 0 i32.const 1056 - i32.const 225 + i32.const 231 i32.const 3 call $~lib/builtins/abort unreachable @@ -5384,7 +5454,7 @@ if i32.const 0 i32.const 1056 - i32.const 226 + i32.const 232 i32.const 3 call $~lib/builtins/abort unreachable @@ -5396,7 +5466,7 @@ if i32.const 0 i32.const 1056 - i32.const 228 + i32.const 234 i32.const 3 call $~lib/builtins/abort unreachable @@ -5408,7 +5478,7 @@ if i32.const 0 i32.const 1056 - i32.const 229 + i32.const 235 i32.const 3 call $~lib/builtins/abort unreachable @@ -5420,16 +5490,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3136 + i32.const 3296 i32.store offset=8 local.get $0 - i32.const 3136 + i32.const 3296 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 231 + i32.const 237 i32.const 3 call $~lib/builtins/abort unreachable @@ -5441,16 +5511,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3216 + i32.const 3376 i32.store offset=8 local.get $0 - i32.const 3216 + i32.const 3376 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 232 + i32.const 238 i32.const 3 call $~lib/builtins/abort unreachable @@ -5466,9 +5536,9 @@ local.tee $0 i32.store offset=20 global.get $~lib/memory/__stack_pointer - i32.const 2016 + i32.const 2048 i32.store offset=4 - i32.const 2016 + i32.const 2048 i32.const 2 local.get $0 i32.load offset=8 @@ -5487,16 +5557,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3296 + i32.const 3456 i32.store offset=8 local.get $0 - i32.const 3296 + i32.const 3456 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 240 + i32.const 246 i32.const 3 call $~lib/builtins/abort unreachable @@ -5749,7 +5819,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - i32.const 2016 + i32.const 2048 return end i32.const 0 @@ -5847,7 +5917,7 @@ i32.ge_u if i32.const 1392 - i32.const 2544 + i32.const 2704 i32.const 92 i32.const 42 call $~lib/builtins/abort @@ -5866,8 +5936,8 @@ local.get $0 i32.eqz if - i32.const 2592 - i32.const 2544 + i32.const 2752 + i32.const 2704 i32.const 96 i32.const 40 call $~lib/builtins/abort diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index e20fcc0739..a10a633b78 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -1,4 +1,4 @@ -// Date UTC ///////////////////////////////////////////////////////////////////////////////// +// Date UTC /////////////////////////////////////////////////////////////////////////////////////// { assert(Date.UTC(1970, 0, 1) == 0); assert(Date.UTC(1970, 0, 1, 0, 0, 0, 0) == 0); @@ -8,7 +8,7 @@ assert(Date.UTC(2018, 10, 10, 11, 0, 0, 1) == 1541847600001); } -// Date get / set Time ///////////////////////////////////////////////////////////////////////////////// +// Date get / set Time //////////////////////////////////////////////////////////////////////////// { let creationTime = 1541847600001; @@ -18,7 +18,7 @@ assert(date.getTime() == creationTime + 1); } -// Date getters ///////////////////////////////////////////////////////////////////////////////// +// Date getters /////////////////////////////////////////////////////////////////////////////////// { // from +189512-12-14T22:09:43.706Z" @@ -44,7 +44,7 @@ assert(date.getUTCMilliseconds() == 274); } -// Date#setUTCMilliseconds ///////////////////////////////////////////////////////////////////////////////// +// Date#setUTCMilliseconds ///////////////////////////////////////////////////////////////////////// { let date = new Date(399464523963984); assert(date.getUTCMilliseconds() == 984); @@ -57,7 +57,7 @@ date.setUTCMilliseconds(999); } -// Date#setUTCSeconds ///////////////////////////////////////////////////////////////////////////////// +// Date#setUTCSeconds ////////////////////////////////////////////////////////////////////////////// { let date = new Date(372027318331986); assert(date.getUTCSeconds() == 31); @@ -70,7 +70,7 @@ date.setUTCSeconds(59); } -// Date#setUTCMinutes ///////////////////////////////////////////////////////////////////////////////// +// Date#setUTCMinutes ////////////////////////////////////////////////////////////////////////////// { let date = new Date(372027318331986); assert(date.getUTCMinutes() == 45); @@ -83,7 +83,7 @@ date.setUTCMinutes(59); } -// Date#setUTCHours ///////////////////////////////////////////////////////////////////////////////// +// Date#setUTCHours //////////////////////////////////////////////////////////////////////////////// { let date = new Date(372027318331986); assert(date.getUTCHours() == 17); @@ -149,7 +149,7 @@ assert(date.getTime() == 1362117600001); } -// Date#setUTCMonth ///////////////////////////////////////////////////////////////////////////////// +// Date#setUTCMonth //////////////////////////////////////////////////////////////////////////////// { let date = new Date(7899943856218720); assert(date.getUTCMonth() == 3); @@ -162,7 +162,7 @@ date.setUTCMonth(12); } -// Date#setUTCFullYear ///////////////////////////////////////////////////////////////////////////////// +// Date#setUTCFullYear ///////////////////////////////////////////////////////////////////////////// { let date = new Date(7941202527925698); assert(date.getUTCFullYear() == 253616); @@ -172,7 +172,7 @@ assert(date.getUTCFullYear() == 20212); } -// Date#toString ///////////////////////////////////////////////////////////////////////////////// +// Date#toISOString //////////////////////////////////////////////////////////////////////////////// { let date = new Date(1231231231020); assert(date.toISOString() == "2009-01-06T08:40:31.020Z"); @@ -180,6 +180,12 @@ assert(date.toISOString() == "2009-01-06T08:40:31.456Z"); date = new Date(322331231231020); assert(date.toISOString() == "+012184-04-08T13:07:11.020Z"); + date = new Date(253402300799999); + assert(date.toISOString() == "9999-12-31T23:59:59.999Z"); + date = new Date(253402300800000); + assert(date.toISOString() == "+010000-01-01T00:00:00.000Z"); + // date = new Date(-62847038769226); + // assert(date.toISOString() == "-000022-06-16T17:13:50.774Z"); // FAIL } // Date#fromString ///////////////////////////////////////////////////////////////////////////////// @@ -211,7 +217,7 @@ assert(date.getTime() == 192112496456); } -// Minimum / Maximum dates ///////////////////////////////////////////////////////////////////////// +// Minimum / Maximum dates //////////////////////////////////////////////////////////////////////// { let minDate = new Date(-8640000000000000); let maxDate = new Date( 8640000000000000); diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 23a14257d1..5cf1ab9692 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -40,9 +40,9 @@ (data (i32.const 844) "0\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") (data (i32.const 1244) "\1c\04\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\04\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\000\00a\000\00b\000\00c\000\00d\000\00e\000\00f\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\001\00a\001\00b\001\00c\001\00d\001\00e\001\00f\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\002\00a\002\00b\002\00c\002\00d\002\00e\002\00f\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\003\00a\003\00b\003\00c\003\00d\003\00e\003\00f\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\004\00a\004\00b\004\00c\004\00d\004\00e\004\00f\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\005\00a\005\00b\005\00c\005\00d\005\00e\005\00f\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\006\00a\006\00b\006\00c\006\00d\006\00e\006\00f\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\007\00a\007\00b\007\00c\007\00d\007\00e\007\00f\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\008\00a\008\00b\008\00c\008\00d\008\00e\008\00f\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\009\00a\009\00b\009\00c\009\00d\009\00e\009\00f\00a\000\00a\001\00a\002\00a\003\00a\004\00a\005\00a\006\00a\007\00a\008\00a\009\00a\00a\00a\00b\00a\00c\00a\00d\00a\00e\00a\00f\00b\000\00b\001\00b\002\00b\003\00b\004\00b\005\00b\006\00b\007\00b\008\00b\009\00b\00a\00b\00b\00b\00c\00b\00d\00b\00e\00b\00f\00c\000\00c\001\00c\002\00c\003\00c\004\00c\005\00c\006\00c\007\00c\008\00c\009\00c\00a\00c\00b\00c\00c\00c\00d\00c\00e\00c\00f\00d\000\00d\001\00d\002\00d\003\00d\004\00d\005\00d\006\00d\007\00d\008\00d\009\00d\00a\00d\00b\00d\00c\00d\00d\00d\00e\00d\00f\00e\000\00e\001\00e\002\00e\003\00e\004\00e\005\00e\006\00e\007\00e\008\00e\009\00e\00a\00e\00b\00e\00c\00e\00d\00e\00e\00e\00f\00f\000\00f\001\00f\002\00f\003\00f\004\00f\005\00f\006\00f\007\00f\008\00f\009\00f\00a\00f\00b\00f\00c\00f\00d\00f\00e\00f\00f\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 2300) "\\\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\00\00\00\00\00") - (data (i32.const 2396) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00+\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2428) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2460) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00-\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2396) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00-\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2428) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00+\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2460) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 2492) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00T\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 2524) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00:\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 2556) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00.\00\00\00\00\00\00\00\00\00\00\00") @@ -50,21 +50,23 @@ (data (i32.const 2620) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\000\002\000\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 2700) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 2780) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 2860) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002\00\00\00\00\00\00\00\00\00") - (data (i32.const 2908) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") - (data (i32.const 2956) ",\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 3004) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3132) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3180) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004\00\00\00\00\00\00\00\00\00") - (data (i32.const 3228) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00") - (data (i32.const 3276) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3324) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00\00\00\00\00\00\00") - (data (i32.const 3388) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3468) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3548) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 3628) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 3708) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") - (data (i32.const 3792) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") + (data (i32.const 2860) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\009\009\009\009\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2940) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\000\001\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 3020) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002\00\00\00\00\00\00\00\00\00") + (data (i32.const 3068) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data (i32.const 3116) ",\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 3164) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3292) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3340) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004\00\00\00\00\00\00\00\00\00") + (data (i32.const 3388) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00") + (data (i32.const 3436) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3484) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00\00\00\00\00\00\00") + (data (i32.const 3548) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3628) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3708) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 3788) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 3868) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") + (data (i32.const 3952) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") (table $0 1 funcref) (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) @@ -81,10 +83,10 @@ (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) - (global $~lib/rt/__rtti_base i32 (i32.const 3792)) - (global $~lib/memory/__data_end i32 (i32.const 3844)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20228)) - (global $~lib/memory/__heap_base i32 (i32.const 20228)) + (global $~lib/rt/__rtti_base i32 (i32.const 3952)) + (global $~lib/memory/__data_end i32 (i32.const 4004)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20388)) + (global $~lib/memory/__heap_base i32 (i32.const 20388)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -5140,8 +5142,8 @@ i32.shr_u i32.gt_u if - i32.const 2928 - i32.const 2976 + i32.const 3088 + i32.const 3136 i32.const 14 i32.const 48 call $~lib/builtins/abort @@ -5623,10 +5625,10 @@ i32.const 576 local.get $0 call $~lib/rt/itcms/__visit - i32.const 2928 + i32.const 3088 local.get $0 call $~lib/rt/itcms/__visit - i32.const 3024 + i32.const 3184 local.get $0 call $~lib/rt/itcms/__visit i32.const 176 @@ -5767,8 +5769,8 @@ global.get $~lib/memory/__data_end i32.lt_s if - i32.const 20256 - i32.const 20304 + i32.const 20416 + i32.const 20464 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -5778,6 +5780,9 @@ (func $~lib/date/Date#toISOString (param $0 i32) (result i32) (local $1 i32) (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) global.get $~lib/memory/__stack_pointer i32.const 112 i32.sub @@ -5828,302 +5833,317 @@ global.get $~lib/memory/__stack_pointer local.get $0 i32.load + local.tee $1 + i32.const 31 + i32.shr_s + local.tee $2 + local.get $1 + i32.add + local.get $2 + i32.xor i32.const 10 call $~lib/number/I32#toString - local.tee $1 + local.tee $3 i32.store local.get $0 i64.load offset=16 i64.const 0 - i64.gt_s + i64.lt_s + local.set $4 + local.get $4 if (result i32) - local.get $1 + i32.const 1 + else + local.get $3 call $~lib/string/String#get:length i32.const 4 i32.gt_s - else - i32.const 0 end if global.get $~lib/memory/__stack_pointer - i32.const 2416 - local.set $2 + local.get $4 + if (result i32) + i32.const 2416 + else + i32.const 2448 + end + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=4 - local.get $2 - local.get $1 + local.get $5 + local.get $3 i32.const 6 i32.const 832 - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=12 - local.get $2 + local.get $5 call $~lib/string/String#padStart - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=8 - local.get $2 + local.get $5 call $~lib/string/String.__concat - local.tee $1 + local.tee $3 i32.store end - local.get $1 - i32.const 2480 - local.set $2 + local.get $3 + i32.const 2416 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=100 - local.get $2 + local.get $5 call $~lib/string/String.__concat - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=92 - local.get $2 + local.get $5 local.get $0 i32.load offset=4 i32.const 10 call $~lib/number/I32#toString - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=104 - local.get $2 + local.get $5 i32.const 2 i32.const 832 - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=108 - local.get $2 + local.get $5 call $~lib/string/String#padStart - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=96 - local.get $2 + local.get $5 call $~lib/string/String.__concat - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=84 - local.get $2 - i32.const 2480 - local.set $2 + local.get $5 + i32.const 2416 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=88 - local.get $2 + local.get $5 call $~lib/string/String.__concat - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=76 - local.get $2 + local.get $5 local.get $0 i32.load offset=8 i32.const 10 call $~lib/number/I32#toString - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=84 - local.get $2 + local.get $5 i32.const 2 i32.const 832 - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=92 - local.get $2 + local.get $5 call $~lib/string/String#padStart - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=80 - local.get $2 + local.get $5 call $~lib/string/String.__concat - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=68 - local.get $2 + local.get $5 i32.const 2512 - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=72 - local.get $2 + local.get $5 call $~lib/string/String.__concat - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=60 - local.get $2 + local.get $5 local.get $0 call $~lib/date/Date#getUTCHours i32.const 10 call $~lib/number/I32#toString - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=68 - local.get $2 + local.get $5 i32.const 2 i32.const 832 - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=76 - local.get $2 + local.get $5 call $~lib/string/String#padStart - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=64 - local.get $2 + local.get $5 call $~lib/string/String.__concat - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=52 - local.get $2 + local.get $5 i32.const 2544 - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=56 - local.get $2 + local.get $5 call $~lib/string/String.__concat - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=44 - local.get $2 + local.get $5 local.get $0 call $~lib/date/Date#getUTCMinutes i32.const 10 call $~lib/number/I32#toString - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=52 - local.get $2 + local.get $5 i32.const 2 i32.const 832 - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=60 - local.get $2 + local.get $5 call $~lib/string/String#padStart - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=48 - local.get $2 + local.get $5 call $~lib/string/String.__concat - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=36 - local.get $2 + local.get $5 i32.const 2544 - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=40 - local.get $2 + local.get $5 call $~lib/string/String.__concat - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=28 - local.get $2 + local.get $5 local.get $0 call $~lib/date/Date#getUTCSeconds i32.const 10 call $~lib/number/I32#toString - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=36 - local.get $2 + local.get $5 i32.const 2 i32.const 832 - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=44 - local.get $2 + local.get $5 call $~lib/string/String#padStart - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=32 - local.get $2 + local.get $5 call $~lib/string/String.__concat - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=12 - local.get $2 + local.get $5 i32.const 2576 - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=24 - local.get $2 + local.get $5 call $~lib/string/String.__concat - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=16 - local.get $2 + local.get $5 local.get $0 call $~lib/date/Date#getUTCMilliseconds i32.const 10 call $~lib/number/I32#toString - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=12 - local.get $2 + local.get $5 i32.const 3 i32.const 832 - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=28 - local.get $2 + local.get $5 call $~lib/string/String#padStart - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=20 - local.get $2 + local.get $5 call $~lib/string/String.__concat - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=4 - local.get $2 + local.get $5 i32.const 2608 - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $5 i32.store offset=8 - local.get $2 + local.get $5 call $~lib/string/String.__concat - local.set $2 + local.set $5 global.get $~lib/memory/__stack_pointer i32.const 112 i32.add global.set $~lib/memory/__stack_pointer - local.get $2 + local.get $5 ) (func $~lib/string/String#split (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -6314,7 +6334,7 @@ i32.store offset=4 local.get $4 i32.load offset=4 - i32.const 2448 + i32.const 2480 i32.store local.get $4 local.set $15 @@ -6383,7 +6403,7 @@ drop else local.get $10 - i32.const 2448 + i32.const 2480 local.set $15 global.get $~lib/memory/__stack_pointer local.get $15 @@ -6463,7 +6483,7 @@ drop else local.get $10 - i32.const 2448 + i32.const 2480 local.set $15 global.get $~lib/memory/__stack_pointer local.get $15 @@ -6642,7 +6662,7 @@ end global.get $~lib/memory/__stack_pointer local.get $5 - i32.const 2480 + i32.const 2416 local.set $15 global.get $~lib/memory/__stack_pointer local.get $15 @@ -7887,10 +7907,68 @@ unreachable end global.get $~lib/memory/__stack_pointer + i32.const 0 + i64.const 253402300799999 + call $~lib/date/Date#constructor + local.tee $1 + i32.store + local.get $1 + call $~lib/date/Date#toISOString + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 i32.const 2880 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 + i32.store offset=8 + local.get $8 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 184 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i64.const 253402300800000 + call $~lib/date/Date#constructor + local.tee $1 + i32.store + local.get $1 + call $~lib/date/Date#toISOString + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 2960 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=8 + local.get $8 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 186 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3040 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 i32.store offset=4 local.get $8 call $~lib/date/Date.fromString @@ -7904,13 +7982,13 @@ if i32.const 0 i32.const 32 - i32.const 189 + i32.const 195 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3152 + i32.const 3312 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7927,13 +8005,13 @@ if i32.const 0 i32.const 32 - i32.const 191 + i32.const 197 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3200 + i32.const 3360 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7950,12 +8028,12 @@ if i32.const 0 i32.const 32 - i32.const 193 + i32.const 199 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 3248 + i32.const 3408 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7968,7 +8046,7 @@ i32.store offset=4 local.get $8 call $~lib/date/Date#getTime - i32.const 3296 + i32.const 3456 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -7986,13 +8064,13 @@ if i32.const 0 i32.const 32 - i32.const 196 + i32.const 202 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3344 + i32.const 3504 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8009,13 +8087,13 @@ if i32.const 0 i32.const 32 - i32.const 203 + i32.const 209 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3408 + i32.const 3568 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8032,13 +8110,13 @@ if i32.const 0 i32.const 32 - i32.const 207 + i32.const 213 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3488 + i32.const 3648 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8055,7 +8133,7 @@ if i32.const 0 i32.const 32 - i32.const 211 + i32.const 217 i32.const 3 call $~lib/builtins/abort unreachable @@ -8080,7 +8158,7 @@ if i32.const 0 i32.const 32 - i32.const 219 + i32.const 225 i32.const 3 call $~lib/builtins/abort unreachable @@ -8093,7 +8171,7 @@ if i32.const 0 i32.const 32 - i32.const 220 + i32.const 226 i32.const 3 call $~lib/builtins/abort unreachable @@ -8106,7 +8184,7 @@ if i32.const 0 i32.const 32 - i32.const 222 + i32.const 228 i32.const 3 call $~lib/builtins/abort unreachable @@ -8119,7 +8197,7 @@ if i32.const 0 i32.const 32 - i32.const 223 + i32.const 229 i32.const 3 call $~lib/builtins/abort unreachable @@ -8132,7 +8210,7 @@ if i32.const 0 i32.const 32 - i32.const 225 + i32.const 231 i32.const 3 call $~lib/builtins/abort unreachable @@ -8145,7 +8223,7 @@ if i32.const 0 i32.const 32 - i32.const 226 + i32.const 232 i32.const 3 call $~lib/builtins/abort unreachable @@ -8158,7 +8236,7 @@ if i32.const 0 i32.const 32 - i32.const 228 + i32.const 234 i32.const 3 call $~lib/builtins/abort unreachable @@ -8171,7 +8249,7 @@ if i32.const 0 i32.const 32 - i32.const 229 + i32.const 235 i32.const 3 call $~lib/builtins/abort unreachable @@ -8183,7 +8261,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 3568 + i32.const 3728 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8194,7 +8272,7 @@ if i32.const 0 i32.const 32 - i32.const 231 + i32.const 237 i32.const 3 call $~lib/builtins/abort unreachable @@ -8206,7 +8284,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 3648 + i32.const 3808 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8217,7 +8295,7 @@ if i32.const 0 i32.const 32 - i32.const 232 + i32.const 238 i32.const 3 call $~lib/builtins/abort unreachable @@ -8238,7 +8316,7 @@ call $~lib/date/Date#constructor local.tee $4 i32.store offset=20 - i32.const 2448 + i32.const 2480 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8262,7 +8340,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 3728 + i32.const 3888 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8273,7 +8351,7 @@ if i32.const 0 i32.const 32 - i32.const 240 + i32.const 246 i32.const 3 call $~lib/builtins/abort unreachable @@ -8666,7 +8744,7 @@ i32.const 0 i32.eq if - i32.const 2448 + i32.const 2480 local.set $6 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -8782,7 +8860,7 @@ local.get $10 i32.eqz if - i32.const 2448 + i32.const 2480 local.set $12 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -8901,7 +8979,7 @@ i32.ge_u if i32.const 368 - i32.const 2976 + i32.const 3136 i32.const 92 i32.const 42 call $~lib/builtins/abort @@ -8925,8 +9003,8 @@ local.get $2 i32.eqz if - i32.const 3024 - i32.const 2976 + i32.const 3184 + i32.const 3136 i32.const 96 i32.const 40 call $~lib/builtins/abort From 6cf10c7b2eddf3f4df8d187957eacc83f89cbb6a Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 09:53:52 +0300 Subject: [PATCH 14/47] partially fix (wip) --- std/assembly/date.ts | 8 ++-- tests/compiler/std/date.optimized.wat | 26 ++++++++++++ tests/compiler/std/date.ts | 2 +- tests/compiler/std/date.untouched.wat | 57 ++++++++++++++++++++++++--- 4 files changed, 83 insertions(+), 10 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 210b04ff61..fdd7849eda 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -77,7 +77,7 @@ export class Date { if (invalidDate(epochMillis)) { throw new RangeError(E_INVALIDDATE); } - this.year = ymdFromEpochDays(i32(epochMillis / MILLIS_PER_DAY)); + this.year = ymdFromEpochDays(i32(floorDiv(epochMillis, MILLIS_PER_DAY))); this.month = _month; this.day = _day; } @@ -91,7 +91,7 @@ export class Date { throw new RangeError(E_INVALIDDATE); } this.epochMillis = value; - this.year = ymdFromEpochDays(i32(value / MILLIS_PER_DAY)); + this.year = ymdFromEpochDays(i32(floorDiv(value, MILLIS_PER_DAY))); this.month = _month; this.day = _day; return value; @@ -212,8 +212,8 @@ function epochMillis( } // @ts-ignore: decorator -@inline function floorDiv(a: i32, b: i32): i32 { - return (a >= 0 ? a : a - b + 1) / b; +@inline function floorDiv(a: T, b: T): T { + return (a >= 0 ? a : a - b + 1) / b as T; } // http://howardhinnant.github.io/date_algorithms.html#is_leap diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index d9e86b47a1..fec8241b55 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -2008,6 +2008,13 @@ i64.store offset=16 local.get $0 local.get $1 + local.get $1 + i64.const 86399999 + i64.sub + local.get $1 + i64.const 0 + i64.ge_s + select i64.const 86400000 i64.div_s i32.wrap_i64 @@ -5550,6 +5557,18 @@ f64.const 0 f64.const 0 call $~lib/builtins/trace + local.get $0 + i32.load offset=8 + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 245 + i32.const 3 + call $~lib/builtins/abort + unreachable + end local.get $1 call $~lib/date/Date#toISOString local.set $0 @@ -5622,6 +5641,13 @@ end local.get $1 local.get $0 + local.get $0 + i64.const 86399999 + i64.sub + local.get $0 + i64.const 0 + i64.ge_s + select i64.const 86400000 i64.div_s i32.wrap_i64 diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index a10a633b78..89e556e9eb 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -242,7 +242,7 @@ trace("", 2, minDateInc.getUTCDate(), minDateInc.getUTCMinutes()); - // assert(minDateInc.getUTCDate() == 20); + assert(minDateInc.getUTCDate() == 20); assert(maxDateDec.toISOString() == "+275760-09-12T23:59:59.999Z"); // assert(minDateInc.toISOString() == "-271821-04-20T00:00:00.001Z"); diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 5cf1ab9692..442b893eed 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -2660,6 +2660,7 @@ ) (func $~lib/date/Date#setTime (param $0 i32) (param $1 i64) (result i64) (local $2 i64) + (local $3 i64) local.get $0 i64.load offset=16 local.set $2 @@ -2686,7 +2687,23 @@ call $~lib/date/Date#set:epochMillis local.get $0 local.get $1 - i64.const 86400000 + local.set $3 + i32.const 86400000 + i64.extend_i32_s + local.set $2 + local.get $3 + i64.const 0 + i64.ge_s + if (result i64) + local.get $3 + else + local.get $3 + local.get $2 + i64.sub + i64.const 1 + i64.add + end + local.get $2 i64.div_s i32.wrap_i64 call $~lib/date/ymdFromEpochDays @@ -8333,6 +8350,19 @@ f64.const 0 f64.const 0 call $~lib/builtins/trace + local.get $4 + call $~lib/date/Date#getUTCDate + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 245 + i32.const 3 + call $~lib/builtins/abort + unreachable + end local.get $3 call $~lib/date/Date#toISOString local.set $8 @@ -8363,7 +8393,8 @@ ) (func $~lib/date/Date#constructor (param $0 i32) (param $1 i64) (result i32) (local $2 i64) - (local $3 i32) + (local $3 i64) + (local $4 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -8416,7 +8447,23 @@ end local.get $0 local.get $1 - i64.const 86400000 + local.set $3 + i32.const 86400000 + i64.extend_i32_s + local.set $2 + local.get $3 + i64.const 0 + i64.ge_s + if (result i64) + local.get $3 + else + local.get $3 + local.get $2 + i64.sub + i64.const 1 + i64.add + end + local.get $2 i64.div_s i32.wrap_i64 call $~lib/date/ymdFromEpochDays @@ -8428,12 +8475,12 @@ global.get $~lib/date/_day call $~lib/date/Date#set:day local.get $0 - local.set $3 + local.set $4 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $3 + local.get $4 ) (func $~lib/util/number/itoa32 (param $0 i32) (param $1 i32) (result i32) (local $2 i32) From e3b788d470197aee38c66d4eb9dc1556558863c1 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 09:58:22 +0300 Subject: [PATCH 15/47] more --- tests/compiler/std/date.optimized.wat | 28 +++++++++++++++++++++++-- tests/compiler/std/date.ts | 7 +++++++ tests/compiler/std/date.untouched.wat | 30 +++++++++++++++++++++++++-- 3 files changed, 61 insertions(+), 4 deletions(-) diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index fec8241b55..d505069572 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -5558,13 +5558,37 @@ f64.const 0 call $~lib/builtins/trace local.get $0 + i32.load + i32.const -271821 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 245 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=4 + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 246 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 i32.load offset=8 i32.const 20 i32.ne if i32.const 0 i32.const 1056 - i32.const 245 + i32.const 247 i32.const 3 call $~lib/builtins/abort unreachable @@ -5585,7 +5609,7 @@ if i32.const 0 i32.const 1056 - i32.const 246 + i32.const 253 i32.const 3 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index 89e556e9eb..8d9b9ede0d 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -242,7 +242,14 @@ trace("", 2, minDateInc.getUTCDate(), minDateInc.getUTCMinutes()); + assert(minDateInc.getUTCFullYear() == -271821); + assert(minDateInc.getUTCMonth() == 3); assert(minDateInc.getUTCDate() == 20); + // assert(minDateInc.getUTCHours() == 0); + // assert(minDateInc.getUTCMinutes() == 0); + // assert(minDateInc.getUTCSeconds() == 0); + // assert(minDateInc.getUTCMilliseconds() == 1); + assert(maxDateDec.toISOString() == "+275760-09-12T23:59:59.999Z"); // assert(minDateInc.toISOString() == "-271821-04-20T00:00:00.001Z"); diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 442b893eed..1cee05a7cc 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -8351,6 +8351,32 @@ f64.const 0 call $~lib/builtins/trace local.get $4 + call $~lib/date/Date#getUTCFullYear + i32.const -271821 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 245 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + call $~lib/date/Date#getUTCMonth + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 246 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 call $~lib/date/Date#getUTCDate i32.const 20 i32.eq @@ -8358,7 +8384,7 @@ if i32.const 0 i32.const 32 - i32.const 245 + i32.const 247 i32.const 3 call $~lib/builtins/abort unreachable @@ -8381,7 +8407,7 @@ if i32.const 0 i32.const 32 - i32.const 246 + i32.const 253 i32.const 3 call $~lib/builtins/abort unreachable From c578d02db93e3ac8c400b0c897f1a57849f63231 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 10:06:39 +0300 Subject: [PATCH 16/47] fixes done! --- std/assembly/date.ts | 19 +- tests/compiler/std/date.optimized.wat | 410 ++++++++++++++++-------- tests/compiler/std/date.ts | 16 +- tests/compiler/std/date.untouched.wat | 437 +++++++++++++++++++++----- 4 files changed, 659 insertions(+), 223 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index fdd7849eda..6afa3ec325 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -110,19 +110,19 @@ export class Date { } getUTCHours(): i32 { - return i32(this.epochMillis % MILLIS_PER_DAY) / MILLIS_PER_HOUR; + return i32(floorMod(this.epochMillis, MILLIS_PER_DAY)) / MILLIS_PER_HOUR; } getUTCMinutes(): i32 { - return i32(this.epochMillis % MILLIS_PER_HOUR) / MILLIS_PER_MINUTE; + return i32(floorMod(this.epochMillis, MILLIS_PER_HOUR)) / MILLIS_PER_MINUTE; } getUTCSeconds(): i32 { - return i32(this.epochMillis % MILLIS_PER_MINUTE) / MILLIS_PER_SECOND; + return i32(floorMod(this.epochMillis, MILLIS_PER_MINUTE)) / MILLIS_PER_SECOND; } getUTCMilliseconds(): i32 { - return i32(this.epochMillis % MILLIS_PER_SECOND); + return i32(floorMod(this.epochMillis, MILLIS_PER_SECOND)); } setUTCMilliseconds(millis: i32): void { @@ -149,20 +149,20 @@ export class Date { var year = this.year; var month = this.month; if (day < 1 || day > daysInMonth(year, month)) throw new RangeError(E_VALUEOUTOFRANGE); - var ms = this.epochMillis % MILLIS_PER_DAY; + var ms = floorMod(this.epochMillis, MILLIS_PER_DAY); this.setTime(i64(daysSinceEpoch(year, month, day)) * MILLIS_PER_DAY + ms); } setUTCMonth(month: i32): void { if (this.month == month) return; if (month < 1 || month > 12) throw new RangeError(E_VALUEOUTOFRANGE); - var ms = this.epochMillis % MILLIS_PER_DAY; + var ms = floorMod(this.epochMillis, MILLIS_PER_DAY); this.setTime(i64(daysSinceEpoch(this.year, month + 1, this.day)) * MILLIS_PER_DAY + ms); } setUTCFullYear(year: i32): void { if (this.year == year) return; - var ms = this.epochMillis % MILLIS_PER_DAY; + var ms = floorMod(this.epochMillis, MILLIS_PER_DAY); this.setTime(i64(daysSinceEpoch(year, this.month, this.day)) * MILLIS_PER_DAY + ms); } @@ -216,6 +216,11 @@ function epochMillis( return (a >= 0 ? a : a - b + 1) / b as T; } +// @ts-ignore: decorator +@inline function floorMod(a: T, b: T): T { + return a - b * floorDiv(a, b) as T; +} + // http://howardhinnant.github.io/date_algorithms.html#is_leap // @ts-ignore: decorator @inline function isLeap(y: i32): bool { diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index d505069572..9823585d42 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -7,14 +7,12 @@ (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $none_=>_i32 (func (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_i32_i32_i32_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) (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") @@ -66,36 +64,40 @@ (data (i32.const 2440) "\01\00\00\000\00\00\009\009\009\009\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") (data (i32.const 2508) "L") (data (i32.const 2520) "\01\00\00\006\00\00\00+\000\001\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") - (data (i32.const 2588) ",") - (data (i32.const 2600) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") - (data (i32.const 2636) ",") - (data (i32.const 2648) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") - (data (i32.const 2684) ",") - (data (i32.const 2696) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 2732) "|") - (data (i32.const 2744) "\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") - (data (i32.const 2860) ",") - (data (i32.const 2872) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") - (data (i32.const 2908) ",") - (data (i32.const 2920) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") - (data (i32.const 2956) ",") - (data (i32.const 2968) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002") - (data (i32.const 3004) ",") - (data (i32.const 3016) "\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002") - (data (i32.const 3052) "<") - (data (i32.const 3064) "\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006") - (data (i32.const 3116) "L") - (data (i32.const 3128) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") + (data (i32.const 2588) "L") + (data (i32.const 2600) "\01\00\00\006\00\00\00-\000\000\000\000\002\002\00-\000\006\00-\001\006\00T\001\007\00:\001\003\00:\005\000\00.\007\007\004\00Z") + (data (i32.const 2668) ",") + (data (i32.const 2680) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") + (data (i32.const 2716) ",") + (data (i32.const 2728) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 2764) ",") + (data (i32.const 2776) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 2812) "|") + (data (i32.const 2824) "\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") + (data (i32.const 2940) ",") + (data (i32.const 2952) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") + (data (i32.const 2988) ",") + (data (i32.const 3000) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") + (data (i32.const 3036) ",") + (data (i32.const 3048) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002") + (data (i32.const 3084) ",") + (data (i32.const 3096) "\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002") + (data (i32.const 3132) "<") + (data (i32.const 3144) "\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006") (data (i32.const 3196) "L") - (data (i32.const 3208) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") + (data (i32.const 3208) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") (data (i32.const 3276) "L") - (data (i32.const 3288) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3288) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") (data (i32.const 3356) "L") - (data (i32.const 3368) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3368) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") (data (i32.const 3436) "L") - (data (i32.const 3448) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") - (data (i32.const 3520) "\06\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 3548) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") + (data (i32.const 3448) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3516) "L") + (data (i32.const 3528) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 3596) "L") + (data (i32.const 3608) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z") + (data (i32.const 3680) "\06\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 3708) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) @@ -108,7 +110,7 @@ (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/memory/__stack_pointer (mut i32) (i32.const 19956)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20116)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -316,9 +318,9 @@ call $~lib/rt/itcms/__visit i32.const 1600 call $~lib/rt/itcms/__visit - i32.const 2656 + i32.const 2736 call $~lib/rt/itcms/__visit - i32.const 2752 + i32.const 2832 call $~lib/rt/itcms/__visit i32.const 1200 call $~lib/rt/itcms/__visit @@ -436,7 +438,7 @@ if i32.const 0 local.get $0 - i32.const 19956 + i32.const 20116 i32.lt_u local.get $0 i32.load offset=8 @@ -482,7 +484,7 @@ i32.const 1 else local.get $1 - i32.const 3520 + i32.const 3680 i32.load i32.gt_u if @@ -496,7 +498,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 3524 + i32.const 3684 i32.add i32.load i32.const 32 @@ -1070,10 +1072,10 @@ if unreachable end - i32.const 19968 + i32.const 20128 i32.const 0 i32.store - i32.const 21536 + i32.const 21696 i32.const 0 i32.store loop $for-loop|0 @@ -1084,7 +1086,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 19968 + i32.const 20128 i32.add i32.const 0 i32.store offset=4 @@ -1102,7 +1104,7 @@ i32.add i32.const 2 i32.shl - i32.const 19968 + i32.const 20128 i32.add i32.const 0 i32.store offset=96 @@ -1120,13 +1122,13 @@ br $for-loop|0 end end - i32.const 19968 - i32.const 21540 + i32.const 20128 + i32.const 21700 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 19968 + i32.const 20128 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -1205,7 +1207,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 19956 + i32.const 20116 i32.lt_u if local.get $0 @@ -1295,7 +1297,7 @@ unreachable end local.get $0 - i32.const 19956 + i32.const 20116 i32.lt_u if local.get $0 @@ -1318,7 +1320,7 @@ i32.const 4 i32.add local.tee $1 - i32.const 19956 + i32.const 20116 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -2028,42 +2030,98 @@ i32.store offset=8 ) (func $~lib/date/Date#getUTCHours (param $0 i32) (result i32) + (local $1 i64) local.get $0 i64.load offset=16 + local.tee $1 + local.get $1 + local.get $1 + i64.const 86399999 + i64.sub + local.get $1 + i64.const 0 + i64.ge_s + select + i64.const 86400000 + i64.div_s i64.const 86400000 - i64.rem_s + i64.mul + i64.sub i32.wrap_i64 i32.const 3600000 i32.div_s ) (func $~lib/date/Date#getUTCMinutes (param $0 i32) (result i32) + (local $1 i64) local.get $0 i64.load offset=16 + local.tee $1 + local.get $1 + local.get $1 + i64.const 3599999 + i64.sub + local.get $1 + i64.const 0 + i64.ge_s + select + i64.const 3600000 + i64.div_s i64.const 3600000 - i64.rem_s + i64.mul + i64.sub i32.wrap_i64 i32.const 60000 i32.div_s ) (func $~lib/date/Date#getUTCSeconds (param $0 i32) (result i32) + (local $1 i64) local.get $0 i64.load offset=16 + local.tee $1 + local.get $1 + local.get $1 + i64.const 59999 + i64.sub + local.get $1 + i64.const 0 + i64.ge_s + select i64.const 60000 - i64.rem_s + i64.div_s + i64.const 60000 + i64.mul + i64.sub i32.wrap_i64 i32.const 1000 i32.div_s ) + (func $~lib/date/Date#getUTCMilliseconds (param $0 i32) (result i32) + (local $1 i64) + local.get $0 + i64.load offset=16 + local.tee $1 + local.get $1 + local.get $1 + i64.const 999 + i64.sub + local.get $1 + i64.const 0 + i64.ge_s + select + i64.const 1000 + i64.div_s + i64.const 1000 + i64.mul + i64.sub + i32.wrap_i64 + ) (func $~lib/date/Date#setUTCMilliseconds (param $0 i32) (param $1 i32) local.get $0 local.get $0 i64.load offset=16 local.get $1 local.get $0 - i64.load offset=16 - i64.const 1000 - i64.rem_s - i32.wrap_i64 + call $~lib/date/Date#getUTCMilliseconds i32.sub i64.extend_i32_s i64.add @@ -2162,6 +2220,7 @@ (func $~lib/date/Date#setUTCDate (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) + (local $4 i64) local.get $1 local.get $0 i32.load offset=8 @@ -2222,8 +2281,20 @@ local.get $0 local.get $0 i64.load offset=16 + local.tee $4 + local.get $4 + local.get $4 + i64.const 86399999 + i64.sub + local.get $4 + i64.const 0 + i64.ge_s + select + i64.const 86400000 + i64.div_s i64.const 86400000 - i64.rem_s + i64.mul + i64.sub local.get $2 local.get $3 local.get $1 @@ -2235,6 +2306,7 @@ call $~lib/date/Date#setTime ) (func $~lib/date/Date#setUTCMonth (param $0 i32) (param $1 i32) + (local $2 i64) local.get $1 local.get $0 i32.load offset=4 @@ -2261,8 +2333,20 @@ local.get $0 local.get $0 i64.load offset=16 + local.tee $2 + local.get $2 + local.get $2 + i64.const 86399999 + i64.sub + local.get $2 + i64.const 0 + i64.ge_s + select + i64.const 86400000 + i64.div_s i64.const 86400000 - i64.rem_s + i64.mul + i64.sub local.get $0 i32.load local.get $1 @@ -2278,6 +2362,7 @@ call $~lib/date/Date#setTime ) (func $~lib/date/Date#setUTCFullYear (param $0 i32) (param $1 i32) + (local $2 i64) local.get $1 local.get $0 i32.load @@ -2288,8 +2373,20 @@ local.get $0 local.get $0 i64.load offset=16 + local.tee $2 + local.get $2 + local.get $2 + i64.const 86399999 + i64.sub + local.get $2 + i64.const 0 + i64.ge_s + select + i64.const 86400000 + i64.div_s i64.const 86400000 - i64.rem_s + i64.mul + i64.sub local.get $1 local.get $0 i32.load offset=4 @@ -2945,8 +3042,8 @@ i32.const 268435455 i32.gt_u if - i32.const 2656 - i32.const 2704 + i32.const 2736 + i32.const 2784 i32.const 14 i32.const 48 call $~lib/builtins/abort @@ -3390,11 +3487,11 @@ ) (func $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 3572 + i32.const 3732 i32.lt_s if - i32.const 19984 - i32.const 20032 + i32.const 20144 + i32.const 20192 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3689,10 +3786,7 @@ local.get $1 i32.store offset=16 local.get $0 - i64.load offset=16 - i64.const 1000 - i64.rem_s - i32.wrap_i64 + call $~lib/date/Date#getUTCMilliseconds call $~lib/number/I32#toString local.set $0 global.get $~lib/memory/__stack_pointer @@ -4308,7 +4402,7 @@ memory.size i32.const 16 i32.shl - i32.const 19956 + i32.const 20116 i32.sub i32.const 1 i32.shr_u @@ -4432,10 +4526,7 @@ unreachable end local.get $0 - i64.load offset=16 - i64.const 1000 - i64.rem_s - i32.wrap_i64 + call $~lib/date/Date#getUTCMilliseconds i32.const 706 i32.ne if @@ -4524,10 +4615,7 @@ unreachable end local.get $0 - i64.load offset=16 - i64.const 1000 - i64.rem_s - i32.wrap_i64 + call $~lib/date/Date#getUTCMilliseconds i32.const 274 i32.ne if @@ -4544,10 +4632,7 @@ local.tee $0 i32.store local.get $0 - i64.load offset=16 - i64.const 1000 - i64.rem_s - i32.wrap_i64 + call $~lib/date/Date#getUTCMilliseconds i32.const 984 i32.ne if @@ -4562,10 +4647,7 @@ i32.const 12 call $~lib/date/Date#setUTCMilliseconds local.get $0 - i64.load offset=16 - i64.const 1000 - i64.rem_s - i32.wrap_i64 + call $~lib/date/Date#getUTCMilliseconds i32.const 12 i32.ne if @@ -4580,10 +4662,7 @@ i32.const 568 call $~lib/date/Date#setUTCMilliseconds local.get $0 - i64.load offset=16 - i64.const 1000 - i64.rem_s - i32.wrap_i64 + call $~lib/date/Date#getUTCMilliseconds i32.const 568 i32.ne if @@ -4894,10 +4973,7 @@ unreachable end local.get $0 - i64.load offset=16 - i64.const 1000 - i64.rem_s - i32.wrap_i64 + call $~lib/date/Date#getUTCMilliseconds i32.const 274 i32.ne if @@ -5234,10 +5310,36 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2608 + i64.const -62847038769226 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer i32.const 2608 + i32.store offset=8 + local.get $0 + i32.const 2608 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1056 + i32.const 188 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 2688 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 2688 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5254,10 +5356,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2880 + i32.const 2960 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2880 + i32.const 2960 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5274,10 +5376,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2928 + i32.const 3008 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2928 + i32.const 3008 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5294,9 +5396,9 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2976 + i32.const 3056 i32.store offset=8 - i32.const 2976 + i32.const 3056 call $~lib/date/Date.fromString local.set $0 global.get $~lib/memory/__stack_pointer @@ -5305,9 +5407,9 @@ local.get $0 i64.load offset=16 global.get $~lib/memory/__stack_pointer - i32.const 3024 + i32.const 3104 i32.store offset=8 - i32.const 3024 + i32.const 3104 call $~lib/date/Date.fromString local.set $0 global.get $~lib/memory/__stack_pointer @@ -5325,10 +5427,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3072 + i32.const 3152 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3072 + i32.const 3152 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5345,10 +5447,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3136 + i32.const 3216 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3136 + i32.const 3216 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5365,10 +5467,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3216 + i32.const 3296 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3216 + i32.const 3296 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5497,10 +5599,10 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3296 + i32.const 3376 i32.store offset=8 local.get $0 - i32.const 3296 + i32.const 3376 call $~lib/string/String.__eq i32.eqz if @@ -5518,10 +5620,10 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3376 + i32.const 3456 i32.store offset=8 local.get $0 - i32.const 3376 + i32.const 3456 call $~lib/string/String.__eq i32.eqz if @@ -5542,21 +5644,6 @@ call $~lib/date/Date#constructor local.tee $0 i32.store offset=20 - global.get $~lib/memory/__stack_pointer - i32.const 2048 - i32.store offset=4 - i32.const 2048 - i32.const 2 - local.get $0 - i32.load offset=8 - f64.convert_i32_s - local.get $0 - call $~lib/date/Date#getUTCMinutes - f64.convert_i32_s - f64.const 0 - f64.const 0 - f64.const 0 - call $~lib/builtins/trace local.get $0 i32.load i32.const -271821 @@ -5564,7 +5651,7 @@ if i32.const 0 i32.const 1056 - i32.const 245 + i32.const 243 i32.const 3 call $~lib/builtins/abort unreachable @@ -5576,7 +5663,7 @@ if i32.const 0 i32.const 1056 - i32.const 246 + i32.const 244 i32.const 3 call $~lib/builtins/abort unreachable @@ -5585,6 +5672,26 @@ i32.load offset=8 i32.const 20 i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 245 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCHours + if + i32.const 0 + i32.const 1056 + i32.const 246 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCMinutes if i32.const 0 i32.const 1056 @@ -5593,23 +5700,66 @@ call $~lib/builtins/abort unreachable end + local.get $0 + call $~lib/date/Date#getUTCSeconds + if + i32.const 0 + i32.const 1056 + i32.const 248 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCMilliseconds + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1056 + i32.const 249 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/date/Date#toISOString + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3536 + i32.store offset=8 local.get $1 + i32.const 3536 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1056 + i32.const 251 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 call $~lib/date/Date#toISOString local.set $0 global.get $~lib/memory/__stack_pointer local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3456 + i32.const 3616 i32.store offset=8 local.get $0 - i32.const 3456 + i32.const 3616 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 253 + i32.const 252 i32.const 3 call $~lib/builtins/abort unreachable @@ -5967,7 +6117,7 @@ i32.ge_u if i32.const 1392 - i32.const 2704 + i32.const 2784 i32.const 92 i32.const 42 call $~lib/builtins/abort @@ -5986,8 +6136,8 @@ local.get $0 i32.eqz if - i32.const 2752 - i32.const 2704 + i32.const 2832 + i32.const 2784 i32.const 96 i32.const 40 call $~lib/builtins/abort diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index 8d9b9ede0d..bd58321132 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -184,8 +184,8 @@ assert(date.toISOString() == "9999-12-31T23:59:59.999Z"); date = new Date(253402300800000); assert(date.toISOString() == "+010000-01-01T00:00:00.000Z"); - // date = new Date(-62847038769226); - // assert(date.toISOString() == "-000022-06-16T17:13:50.774Z"); // FAIL + date = new Date(-62847038769226); + assert(date.toISOString() == "-000022-06-16T17:13:50.774Z"); } // Date#fromString ///////////////////////////////////////////////////////////////////////////////// @@ -240,18 +240,16 @@ let maxDateDec = new Date( 8640000000000000 - 1); let minDateInc = new Date(-8640000000000000 + 1); - trace("", 2, minDateInc.getUTCDate(), minDateInc.getUTCMinutes()); - assert(minDateInc.getUTCFullYear() == -271821); assert(minDateInc.getUTCMonth() == 3); assert(minDateInc.getUTCDate() == 20); - // assert(minDateInc.getUTCHours() == 0); - // assert(minDateInc.getUTCMinutes() == 0); - // assert(minDateInc.getUTCSeconds() == 0); - // assert(minDateInc.getUTCMilliseconds() == 1); + assert(minDateInc.getUTCHours() == 0); + assert(minDateInc.getUTCMinutes() == 0); + assert(minDateInc.getUTCSeconds() == 0); + assert(minDateInc.getUTCMilliseconds() == 1); assert(maxDateDec.toISOString() == "+275760-09-12T23:59:59.999Z"); - // assert(minDateInc.toISOString() == "-271821-04-20T00:00:00.001Z"); + assert(minDateInc.toISOString() == "-271821-04-20T00:00:00.001Z"); // new Date(maxDate.getTime() + 1); // Invalid Date // new Date(minDate.getTime() - 1); // Invalid Date diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 1cee05a7cc..e595c386a8 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -7,7 +7,6 @@ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) (type $i32_i64_i32_i32_=>_none (func (param i32 i64 i32 i32))) @@ -20,7 +19,6 @@ (type $i32_i32_i32_i32_i32_i32_i32_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) (type $i32_i64_=>_i64 (func (param i32 i64) (result i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) (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\18\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00D\00a\00t\00e\00\00\00\00\00") @@ -52,21 +50,23 @@ (data (i32.const 2780) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z\00\00\00\00\00\00\00") (data (i32.const 2860) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\009\009\009\009\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 2940) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\000\001\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 3020) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002\00\00\00\00\00\00\00\00\00") - (data (i32.const 3068) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") - (data (i32.const 3116) ",\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 3164) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3292) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3340) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004\00\00\00\00\00\00\00\00\00") - (data (i32.const 3388) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00") - (data (i32.const 3436) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3484) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00\00\00\00\00\00\00") - (data (i32.const 3548) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3628) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3708) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 3788) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 3868) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") - (data (i32.const 3952) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") + (data (i32.const 3020) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\000\000\000\000\002\002\00-\000\006\00-\001\006\00T\001\007\00:\001\003\00:\005\000\00.\007\007\004\00Z\00\00\00\00\00\00\00") + (data (i32.const 3100) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002\00\00\00\00\00\00\00\00\00") + (data (i32.const 3148) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data (i32.const 3196) ",\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 3244) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3372) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3420) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004\00\00\00\00\00\00\00\00\00") + (data (i32.const 3468) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00") + (data (i32.const 3516) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3564) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00\00\00\00\00\00\00") + (data (i32.const 3628) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3708) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3788) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 3868) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 3948) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") + (data (i32.const 4028) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z\00\00\00\00\00\00\00") + (data (i32.const 4112) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") (table $0 1 funcref) (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) @@ -83,10 +83,10 @@ (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) - (global $~lib/rt/__rtti_base i32 (i32.const 3952)) - (global $~lib/memory/__data_end i32 (i32.const 4004)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20388)) - (global $~lib/memory/__heap_base i32 (i32.const 20388)) + (global $~lib/rt/__rtti_base i32 (i32.const 4112)) + (global $~lib/memory/__data_end i32 (i32.const 4164)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20548)) + (global $~lib/memory/__heap_base i32 (i32.const 20548)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -2731,37 +2731,149 @@ i32.load offset=8 ) (func $~lib/date/Date#getUTCHours (param $0 i32) (result i32) + (local $1 i64) + (local $2 i64) + (local $3 i64) + (local $4 i64) local.get $0 i64.load offset=16 - i64.const 86400000 - i64.rem_s + local.set $2 + i32.const 86400000 + i64.extend_i32_s + local.set $1 + local.get $2 + local.get $1 + local.get $2 + local.set $4 + local.get $1 + local.set $3 + local.get $4 + i64.const 0 + i64.ge_s + if (result i64) + local.get $4 + else + local.get $4 + local.get $3 + i64.sub + i64.const 1 + i64.add + end + local.get $3 + i64.div_s + i64.mul + i64.sub i32.wrap_i64 i32.const 3600000 i32.div_s ) (func $~lib/date/Date#getUTCMinutes (param $0 i32) (result i32) + (local $1 i64) + (local $2 i64) + (local $3 i64) + (local $4 i64) local.get $0 i64.load offset=16 - i64.const 3600000 - i64.rem_s + local.set $2 + i32.const 3600000 + i64.extend_i32_s + local.set $1 + local.get $2 + local.get $1 + local.get $2 + local.set $4 + local.get $1 + local.set $3 + local.get $4 + i64.const 0 + i64.ge_s + if (result i64) + local.get $4 + else + local.get $4 + local.get $3 + i64.sub + i64.const 1 + i64.add + end + local.get $3 + i64.div_s + i64.mul + i64.sub i32.wrap_i64 i32.const 60000 i32.div_s ) (func $~lib/date/Date#getUTCSeconds (param $0 i32) (result i32) + (local $1 i64) + (local $2 i64) + (local $3 i64) + (local $4 i64) local.get $0 i64.load offset=16 - i64.const 60000 - i64.rem_s + local.set $2 + i32.const 60000 + i64.extend_i32_s + local.set $1 + local.get $2 + local.get $1 + local.get $2 + local.set $4 + local.get $1 + local.set $3 + local.get $4 + i64.const 0 + i64.ge_s + if (result i64) + local.get $4 + else + local.get $4 + local.get $3 + i64.sub + i64.const 1 + i64.add + end + local.get $3 + i64.div_s + i64.mul + i64.sub i32.wrap_i64 i32.const 1000 i32.div_s ) (func $~lib/date/Date#getUTCMilliseconds (param $0 i32) (result i32) + (local $1 i64) + (local $2 i64) + (local $3 i64) + (local $4 i64) local.get $0 i64.load offset=16 - i64.const 1000 - i64.rem_s + local.set $2 + i32.const 1000 + i64.extend_i32_s + local.set $1 + local.get $2 + local.get $1 + local.get $2 + local.set $4 + local.get $1 + local.set $3 + local.get $4 + i64.const 0 + i64.ge_s + if (result i64) + local.get $4 + else + local.get $4 + local.get $3 + i64.sub + i64.const 1 + i64.add + end + local.get $3 + i64.div_s + i64.mul + i64.sub i32.wrap_i64 ) (func $~lib/date/Date#setUTCMilliseconds (param $0 i32) (param $1 i32) @@ -2927,6 +3039,10 @@ (local $2 i32) (local $3 i32) (local $4 i64) + (local $5 i64) + (local $6 i64) + (local $7 i64) + (local $8 i64) local.get $0 i32.load offset=8 local.get $1 @@ -2962,9 +3078,33 @@ end local.get $0 i64.load offset=16 - i64.const 86400000 - i64.rem_s + local.set $5 + i32.const 86400000 + i64.extend_i32_s local.set $4 + local.get $5 + local.get $4 + local.get $5 + local.set $7 + local.get $4 + local.set $6 + local.get $7 + i64.const 0 + i64.ge_s + if (result i64) + local.get $7 + else + local.get $7 + local.get $6 + i64.sub + i64.const 1 + i64.add + end + local.get $6 + i64.div_s + i64.mul + i64.sub + local.set $8 local.get $0 local.get $2 local.get $3 @@ -2973,13 +3113,17 @@ i64.extend_i32_s i64.const 86400000 i64.mul - local.get $4 + local.get $8 i64.add call $~lib/date/Date#setTime drop ) (func $~lib/date/Date#setUTCMonth (param $0 i32) (param $1 i32) (local $2 i64) + (local $3 i64) + (local $4 i64) + (local $5 i64) + (local $6 i64) local.get $0 i32.load offset=4 local.get $1 @@ -3007,9 +3151,33 @@ end local.get $0 i64.load offset=16 - i64.const 86400000 - i64.rem_s + local.set $3 + i32.const 86400000 + i64.extend_i32_s local.set $2 + local.get $3 + local.get $2 + local.get $3 + local.set $5 + local.get $2 + local.set $4 + local.get $5 + i64.const 0 + i64.ge_s + if (result i64) + local.get $5 + else + local.get $5 + local.get $4 + i64.sub + i64.const 1 + i64.add + end + local.get $4 + i64.div_s + i64.mul + i64.sub + local.set $6 local.get $0 local.get $0 i32.load @@ -3022,13 +3190,17 @@ i64.extend_i32_s i64.const 86400000 i64.mul - local.get $2 + local.get $6 i64.add call $~lib/date/Date#setTime drop ) (func $~lib/date/Date#setUTCFullYear (param $0 i32) (param $1 i32) (local $2 i64) + (local $3 i64) + (local $4 i64) + (local $5 i64) + (local $6 i64) local.get $0 i32.load local.get $1 @@ -3038,9 +3210,33 @@ end local.get $0 i64.load offset=16 - i64.const 86400000 - i64.rem_s + local.set $3 + i32.const 86400000 + i64.extend_i32_s local.set $2 + local.get $3 + local.get $2 + local.get $3 + local.set $5 + local.get $2 + local.set $4 + local.get $5 + i64.const 0 + i64.ge_s + if (result i64) + local.get $5 + else + local.get $5 + local.get $4 + i64.sub + i64.const 1 + i64.add + end + local.get $4 + i64.div_s + i64.mul + i64.sub + local.set $6 local.get $0 local.get $1 local.get $0 @@ -3051,7 +3247,7 @@ i64.extend_i32_s i64.const 86400000 i64.mul - local.get $2 + local.get $6 i64.add call $~lib/date/Date#setTime drop @@ -5159,8 +5355,8 @@ i32.shr_u i32.gt_u if - i32.const 3088 - i32.const 3136 + i32.const 3168 + i32.const 3216 i32.const 14 i32.const 48 call $~lib/builtins/abort @@ -5642,10 +5838,10 @@ i32.const 576 local.get $0 call $~lib/rt/itcms/__visit - i32.const 3088 + i32.const 3168 local.get $0 call $~lib/rt/itcms/__visit - i32.const 3184 + i32.const 3264 local.get $0 call $~lib/rt/itcms/__visit i32.const 176 @@ -5786,8 +5982,8 @@ global.get $~lib/memory/__data_end i32.lt_s if - i32.const 20416 - i32.const 20464 + i32.const 20576 + i32.const 20624 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -7982,10 +8178,39 @@ unreachable end global.get $~lib/memory/__stack_pointer + i32.const 0 + i64.const -62847038769226 + call $~lib/date/Date#constructor + local.tee $1 + i32.store + local.get $1 + call $~lib/date/Date#toISOString + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 i32.const 3040 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 + i32.store offset=8 + local.get $8 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 188 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3120 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 i32.store offset=4 local.get $8 call $~lib/date/Date.fromString @@ -8005,7 +8230,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3312 + i32.const 3392 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8028,7 +8253,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3360 + i32.const 3440 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8050,7 +8275,7 @@ call $~lib/builtins/abort unreachable end - i32.const 3408 + i32.const 3488 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8063,7 +8288,7 @@ i32.store offset=4 local.get $8 call $~lib/date/Date#getTime - i32.const 3456 + i32.const 3536 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8087,7 +8312,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3504 + i32.const 3584 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8110,7 +8335,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3568 + i32.const 3648 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8133,7 +8358,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3648 + i32.const 3728 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8278,7 +8503,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 3728 + i32.const 3808 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8301,7 +8526,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 3808 + i32.const 3888 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8333,23 +8558,6 @@ call $~lib/date/Date#constructor local.tee $4 i32.store offset=20 - i32.const 2480 - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 - i32.const 2 - local.get $4 - call $~lib/date/Date#getUTCDate - f64.convert_i32_s - local.get $4 - call $~lib/date/Date#getUTCMinutes - f64.convert_i32_s - f64.const 0 - f64.const 0 - f64.const 0 - call $~lib/builtins/trace local.get $4 call $~lib/date/Date#getUTCFullYear i32.const -271821 @@ -8358,7 +8566,7 @@ if i32.const 0 i32.const 32 - i32.const 245 + i32.const 243 i32.const 3 call $~lib/builtins/abort unreachable @@ -8371,7 +8579,7 @@ if i32.const 0 i32.const 32 - i32.const 246 + i32.const 244 i32.const 3 call $~lib/builtins/abort unreachable @@ -8381,6 +8589,32 @@ i32.const 20 i32.eq i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 245 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + call $~lib/date/Date#getUTCHours + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 246 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + call $~lib/date/Date#getUTCMinutes + i32.const 0 + i32.eq + i32.eqz if i32.const 0 i32.const 32 @@ -8389,6 +8623,32 @@ call $~lib/builtins/abort unreachable end + local.get $4 + call $~lib/date/Date#getUTCSeconds + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 248 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + call $~lib/date/Date#getUTCMilliseconds + i32.const 1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 249 + i32.const 3 + call $~lib/builtins/abort + unreachable + end local.get $3 call $~lib/date/Date#toISOString local.set $8 @@ -8396,7 +8656,30 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 3888 + i32.const 3968 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=8 + local.get $8 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 251 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $4 + call $~lib/date/Date#toISOString + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 4048 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8407,7 +8690,7 @@ if i32.const 0 i32.const 32 - i32.const 253 + i32.const 252 i32.const 3 call $~lib/builtins/abort unreachable @@ -9052,7 +9335,7 @@ i32.ge_u if i32.const 368 - i32.const 3136 + i32.const 3216 i32.const 92 i32.const 42 call $~lib/builtins/abort @@ -9076,8 +9359,8 @@ local.get $2 i32.eqz if - i32.const 3184 - i32.const 3136 + i32.const 3264 + i32.const 3216 i32.const 96 i32.const 40 call $~lib/builtins/abort From 470d9661492096bf0a16b274e83f6ad8edfd6dd9 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 10:29:02 +0300 Subject: [PATCH 17/47] more fixes for toISOString --- std/assembly/date.ts | 6 +- tests/compiler/std/date.optimized.wat | 366 +++++++++++++++++--------- tests/compiler/std/date.ts | 9 +- tests/compiler/std/date.untouched.wat | 299 ++++++++++++++------- 4 files changed, 458 insertions(+), 222 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 6afa3ec325..d5c1b67e31 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -168,9 +168,11 @@ export class Date { toISOString(): string { var yearStr = abs(this.year).toString(); - var isNeg = this.epochMillis < 0; - if (isNeg || yearStr.length > 4) { + var isNeg = this.year < 0; + if (isNeg || this.year >= 10000) { yearStr = (isNeg ? "-" : "+") + yearStr.padStart(6, "0"); + } else { + yearStr = yearStr.padStart(4, "0"); } return ( diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index 9823585d42..d626b34eb9 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -7,12 +7,14 @@ (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $none_=>_i32 (func (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_i32_i32_i32_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) (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") @@ -55,49 +57,55 @@ (data (i32.const 2156) "\1c") (data (i32.const 2168) "\01\00\00\00\02\00\00\00Z") (data (i32.const 2188) "L") - (data (i32.const 2200) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\000\002\000\00Z") + (data (i32.const 2200) "\01\00\00\000\00\00\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") (data (i32.const 2268) "L") - (data (i32.const 2280) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z") + (data (i32.const 2280) "\01\00\00\006\00\00\00-\000\000\000\000\000\001\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") (data (i32.const 2348) "L") - (data (i32.const 2360) "\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z") + (data (i32.const 2360) "\01\00\00\000\00\00\000\000\000\001\00-\000\004\00-\000\007\00T\002\003\00:\000\006\00:\004\000\00.\000\000\000\00Z") (data (i32.const 2428) "L") - (data (i32.const 2440) "\01\00\00\000\00\00\009\009\009\009\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 2440) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\000\002\000\00Z") (data (i32.const 2508) "L") - (data (i32.const 2520) "\01\00\00\006\00\00\00+\000\001\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 2520) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z") (data (i32.const 2588) "L") - (data (i32.const 2600) "\01\00\00\006\00\00\00-\000\000\000\000\002\002\00-\000\006\00-\001\006\00T\001\007\00:\001\003\00:\005\000\00.\007\007\004\00Z") - (data (i32.const 2668) ",") - (data (i32.const 2680) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") - (data (i32.const 2716) ",") - (data (i32.const 2728) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") - (data (i32.const 2764) ",") - (data (i32.const 2776) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 2812) "|") - (data (i32.const 2824) "\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") - (data (i32.const 2940) ",") - (data (i32.const 2952) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") - (data (i32.const 2988) ",") - (data (i32.const 3000) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") - (data (i32.const 3036) ",") - (data (i32.const 3048) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002") - (data (i32.const 3084) ",") - (data (i32.const 3096) "\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002") - (data (i32.const 3132) "<") - (data (i32.const 3144) "\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006") - (data (i32.const 3196) "L") - (data (i32.const 3208) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") - (data (i32.const 3276) "L") - (data (i32.const 3288) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") - (data (i32.const 3356) "L") - (data (i32.const 3368) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 2600) "\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z") + (data (i32.const 2668) "L") + (data (i32.const 2680) "\01\00\00\000\00\00\009\009\009\009\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 2748) "L") + (data (i32.const 2760) "\01\00\00\006\00\00\00+\000\001\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 2828) "L") + (data (i32.const 2840) "\01\00\00\006\00\00\00-\000\000\000\000\002\002\00-\000\006\00-\001\006\00T\001\007\00:\001\003\00:\005\000\00.\007\007\004\00Z") + (data (i32.const 2908) ",") + (data (i32.const 2920) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") + (data (i32.const 2956) ",") + (data (i32.const 2968) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 3004) ",") + (data (i32.const 3016) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 3052) "|") + (data (i32.const 3064) "\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") + (data (i32.const 3180) ",") + (data (i32.const 3192) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") + (data (i32.const 3228) ",") + (data (i32.const 3240) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") + (data (i32.const 3276) ",") + (data (i32.const 3288) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002") + (data (i32.const 3324) ",") + (data (i32.const 3336) "\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002") + (data (i32.const 3372) "<") + (data (i32.const 3384) "\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006") (data (i32.const 3436) "L") - (data (i32.const 3448) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3448) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") (data (i32.const 3516) "L") - (data (i32.const 3528) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 3528) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") (data (i32.const 3596) "L") - (data (i32.const 3608) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z") - (data (i32.const 3680) "\06\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 3708) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") + (data (i32.const 3608) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3676) "L") + (data (i32.const 3688) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3756) "L") + (data (i32.const 3768) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 3836) "L") + (data (i32.const 3848) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z") + (data (i32.const 3920) "\06\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 3948) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) @@ -110,7 +118,7 @@ (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/memory/__stack_pointer (mut i32) (i32.const 20116)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20356)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -318,9 +326,9 @@ call $~lib/rt/itcms/__visit i32.const 1600 call $~lib/rt/itcms/__visit - i32.const 2736 + i32.const 2976 call $~lib/rt/itcms/__visit - i32.const 2832 + i32.const 3072 call $~lib/rt/itcms/__visit i32.const 1200 call $~lib/rt/itcms/__visit @@ -438,7 +446,7 @@ if i32.const 0 local.get $0 - i32.const 20116 + i32.const 20356 i32.lt_u local.get $0 i32.load offset=8 @@ -484,7 +492,7 @@ i32.const 1 else local.get $1 - i32.const 3680 + i32.const 3920 i32.load i32.gt_u if @@ -498,7 +506,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 3684 + i32.const 3924 i32.add i32.load i32.const 32 @@ -1072,10 +1080,10 @@ if unreachable end - i32.const 20128 + i32.const 20368 i32.const 0 i32.store - i32.const 21696 + i32.const 21936 i32.const 0 i32.store loop $for-loop|0 @@ -1086,7 +1094,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 20128 + i32.const 20368 i32.add i32.const 0 i32.store offset=4 @@ -1104,7 +1112,7 @@ i32.add i32.const 2 i32.shl - i32.const 20128 + i32.const 20368 i32.add i32.const 0 i32.store offset=96 @@ -1122,13 +1130,13 @@ br $for-loop|0 end end - i32.const 20128 - i32.const 21700 + i32.const 20368 + i32.const 21940 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 20128 + i32.const 20368 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -1207,7 +1215,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 20116 + i32.const 20356 i32.lt_u if local.get $0 @@ -1297,7 +1305,7 @@ unreachable end local.get $0 - i32.const 20116 + i32.const 20356 i32.lt_u if local.get $0 @@ -1320,7 +1328,7 @@ i32.const 4 i32.add local.tee $1 - i32.const 20116 + i32.const 20356 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -3042,8 +3050,8 @@ i32.const 268435455 i32.gt_u if - i32.const 2736 - i32.const 2784 + i32.const 2976 + i32.const 3024 i32.const 14 i32.const 48 call $~lib/builtins/abort @@ -3487,11 +3495,11 @@ ) (func $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 3732 + i32.const 3972 i32.lt_s if - i32.const 20144 - i32.const 20192 + i32.const 20384 + i32.const 20432 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3564,21 +3572,17 @@ local.tee $1 i32.store local.get $0 - i64.load offset=16 - i64.const 0 - i64.lt_s + i32.load + i32.const 0 + i32.lt_s local.tee $3 if (result i32) i32.const 1 else - local.get $1 - i32.const 20 - i32.sub - i32.load offset=16 - i32.const 1 - i32.shr_u - i32.const 4 - i32.gt_u + local.get $0 + i32.load + i32.const 10000 + i32.ge_s end if global.get $~lib/memory/__stack_pointer @@ -3604,6 +3608,16 @@ call $~lib/string/String.__concat local.tee $1 i32.store + else + global.get $~lib/memory/__stack_pointer + i32.const 1856 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.const 4 + call $~lib/string/String#padStart + local.tee $1 + i32.store end global.get $~lib/memory/__stack_pointer i32.const 1984 @@ -4402,7 +4416,7 @@ memory.size i32.const 16 i32.shl - i32.const 20116 + i32.const 20356 i32.sub i32.const 1 i32.shr_u @@ -5180,7 +5194,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i64.const 1231231231020 + i64.const -62167219200000 call $~lib/date/Date#constructor local.tee $0 i32.store @@ -5206,7 +5220,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i64.const 1231231231456 + i64.const -62167219200001 call $~lib/date/Date#constructor local.tee $0 i32.store @@ -5232,12 +5246,26 @@ unreachable end global.get $~lib/memory/__stack_pointer - i64.const 322331231231020 + i64.const -62127219200000 call $~lib/date/Date#constructor local.tee $0 i32.store local.get $0 call $~lib/date/Date#toISOString + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + i32.const 0 + f64.const 0 + f64.const 0 + f64.const 0 + f64.const 0 + f64.const 0 + call $~lib/builtins/trace + local.get $0 + call $~lib/date/Date#toISOString local.set $0 global.get $~lib/memory/__stack_pointer local.get $0 @@ -5252,13 +5280,13 @@ if i32.const 0 i32.const 1056 - i32.const 182 + i32.const 183 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i64.const 253402300799999 + i64.const 1231231231020 call $~lib/date/Date#constructor local.tee $0 i32.store @@ -5278,13 +5306,13 @@ if i32.const 0 i32.const 1056 - i32.const 184 + i32.const 185 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i64.const 253402300800000 + i64.const 1231231231456 call $~lib/date/Date#constructor local.tee $0 i32.store @@ -5304,13 +5332,13 @@ if i32.const 0 i32.const 1056 - i32.const 186 + i32.const 187 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i64.const -62847038769226 + i64.const 322331231231020 call $~lib/date/Date#constructor local.tee $0 i32.store @@ -5330,16 +5358,94 @@ if i32.const 0 i32.const 1056 - i32.const 188 + i32.const 189 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2688 + i64.const 253402300799999 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer i32.const 2688 + i32.store offset=8 + local.get $0 + i32.const 2688 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1056 + i32.const 191 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 253402300800000 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 2768 + i32.store offset=8 + local.get $0 + i32.const 2768 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1056 + i32.const 193 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const -62847038769226 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 2848 + i32.store offset=8 + local.get $0 + i32.const 2848 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1056 + i32.const 195 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 2928 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 2928 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5350,16 +5456,16 @@ if i32.const 0 i32.const 1056 - i32.const 195 + i32.const 202 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2960 + i32.const 3200 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2960 + i32.const 3200 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5370,16 +5476,16 @@ if i32.const 0 i32.const 1056 - i32.const 197 + i32.const 204 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3008 + i32.const 3248 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3008 + i32.const 3248 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5390,15 +5496,15 @@ if i32.const 0 i32.const 1056 - i32.const 199 + i32.const 206 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3056 + i32.const 3296 i32.store offset=8 - i32.const 3056 + i32.const 3296 call $~lib/date/Date.fromString local.set $0 global.get $~lib/memory/__stack_pointer @@ -5407,9 +5513,9 @@ local.get $0 i64.load offset=16 global.get $~lib/memory/__stack_pointer - i32.const 3104 + i32.const 3344 i32.store offset=8 - i32.const 3104 + i32.const 3344 call $~lib/date/Date.fromString local.set $0 global.get $~lib/memory/__stack_pointer @@ -5421,16 +5527,16 @@ if i32.const 0 i32.const 1056 - i32.const 202 + i32.const 209 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3152 + i32.const 3392 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3152 + i32.const 3392 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5441,16 +5547,16 @@ if i32.const 0 i32.const 1056 - i32.const 209 + i32.const 216 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3216 + i32.const 3456 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3216 + i32.const 3456 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5461,16 +5567,16 @@ if i32.const 0 i32.const 1056 - i32.const 213 + i32.const 220 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3296 + i32.const 3536 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3296 + i32.const 3536 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5481,7 +5587,7 @@ if i32.const 0 i32.const 1056 - i32.const 217 + i32.const 224 i32.const 3 call $~lib/builtins/abort unreachable @@ -5503,7 +5609,7 @@ if i32.const 0 i32.const 1056 - i32.const 225 + i32.const 232 i32.const 3 call $~lib/builtins/abort unreachable @@ -5515,7 +5621,7 @@ if i32.const 0 i32.const 1056 - i32.const 226 + i32.const 233 i32.const 3 call $~lib/builtins/abort unreachable @@ -5527,7 +5633,7 @@ if i32.const 0 i32.const 1056 - i32.const 228 + i32.const 235 i32.const 3 call $~lib/builtins/abort unreachable @@ -5539,7 +5645,7 @@ if i32.const 0 i32.const 1056 - i32.const 229 + i32.const 236 i32.const 3 call $~lib/builtins/abort unreachable @@ -5551,7 +5657,7 @@ if i32.const 0 i32.const 1056 - i32.const 231 + i32.const 238 i32.const 3 call $~lib/builtins/abort unreachable @@ -5563,7 +5669,7 @@ if i32.const 0 i32.const 1056 - i32.const 232 + i32.const 239 i32.const 3 call $~lib/builtins/abort unreachable @@ -5575,7 +5681,7 @@ if i32.const 0 i32.const 1056 - i32.const 234 + i32.const 241 i32.const 3 call $~lib/builtins/abort unreachable @@ -5587,7 +5693,7 @@ if i32.const 0 i32.const 1056 - i32.const 235 + i32.const 242 i32.const 3 call $~lib/builtins/abort unreachable @@ -5599,16 +5705,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3376 + i32.const 3616 i32.store offset=8 local.get $0 - i32.const 3376 + i32.const 3616 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 237 + i32.const 244 i32.const 3 call $~lib/builtins/abort unreachable @@ -5620,16 +5726,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3456 + i32.const 3696 i32.store offset=8 local.get $0 - i32.const 3456 + i32.const 3696 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 238 + i32.const 245 i32.const 3 call $~lib/builtins/abort unreachable @@ -5651,7 +5757,7 @@ if i32.const 0 i32.const 1056 - i32.const 243 + i32.const 250 i32.const 3 call $~lib/builtins/abort unreachable @@ -5663,7 +5769,7 @@ if i32.const 0 i32.const 1056 - i32.const 244 + i32.const 251 i32.const 3 call $~lib/builtins/abort unreachable @@ -5675,7 +5781,7 @@ if i32.const 0 i32.const 1056 - i32.const 245 + i32.const 252 i32.const 3 call $~lib/builtins/abort unreachable @@ -5685,7 +5791,7 @@ if i32.const 0 i32.const 1056 - i32.const 246 + i32.const 253 i32.const 3 call $~lib/builtins/abort unreachable @@ -5695,7 +5801,7 @@ if i32.const 0 i32.const 1056 - i32.const 247 + i32.const 254 i32.const 3 call $~lib/builtins/abort unreachable @@ -5705,7 +5811,7 @@ if i32.const 0 i32.const 1056 - i32.const 248 + i32.const 255 i32.const 3 call $~lib/builtins/abort unreachable @@ -5717,7 +5823,7 @@ if i32.const 0 i32.const 1056 - i32.const 249 + i32.const 256 i32.const 3 call $~lib/builtins/abort unreachable @@ -5729,16 +5835,16 @@ local.get $1 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3536 + i32.const 3776 i32.store offset=8 local.get $1 - i32.const 3536 + i32.const 3776 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 251 + i32.const 258 i32.const 3 call $~lib/builtins/abort unreachable @@ -5750,16 +5856,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3616 + i32.const 3856 i32.store offset=8 local.get $0 - i32.const 3616 + i32.const 3856 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 252 + i32.const 259 i32.const 3 call $~lib/builtins/abort unreachable @@ -6117,7 +6223,7 @@ i32.ge_u if i32.const 1392 - i32.const 2784 + i32.const 3024 i32.const 92 i32.const 42 call $~lib/builtins/abort @@ -6136,8 +6242,8 @@ local.get $0 i32.eqz if - i32.const 2832 - i32.const 2784 + i32.const 3072 + i32.const 3024 i32.const 96 i32.const 40 call $~lib/builtins/abort diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index bd58321132..be3e832eef 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -174,7 +174,14 @@ // Date#toISOString //////////////////////////////////////////////////////////////////////////////// { - let date = new Date(1231231231020); + let date = new Date(-62167219200000); + assert(date.toISOString() == "0000-01-01T00:00:00.000Z"); + date = new Date(-62167219200000 - 1); + assert(date.toISOString() == "-000001-12-31T23:59:59.999Z"); + date = new Date(-62127219200000); + trace(date.toISOString()); + assert(date.toISOString() == "0001-04-07T23:06:40.000Z"); + date = new Date(1231231231020); assert(date.toISOString() == "2009-01-06T08:40:31.020Z"); date = new Date(1231231231456); assert(date.toISOString() == "2009-01-06T08:40:31.456Z"); diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index e595c386a8..69c77932d4 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -7,6 +7,7 @@ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) (type $i32_i64_i32_i32_=>_none (func (param i32 i64 i32 i32))) @@ -19,6 +20,7 @@ (type $i32_i32_i32_i32_i32_i32_i32_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) (type $i32_i64_=>_i64 (func (param i32 i64) (result i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) (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\18\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00D\00a\00t\00e\00\00\00\00\00") @@ -45,28 +47,31 @@ (data (i32.const 2524) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00:\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 2556) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00.\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 2588) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00Z\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2620) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\000\002\000\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2700) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2780) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 2860) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\009\009\009\009\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2940) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\000\001\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 3020) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\000\000\000\000\002\002\00-\000\006\00-\001\006\00T\001\007\00:\001\003\00:\005\000\00.\007\007\004\00Z\00\00\00\00\00\00\00") - (data (i32.const 3100) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002\00\00\00\00\00\00\00\00\00") - (data (i32.const 3148) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") - (data (i32.const 3196) ",\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 3244) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3372) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3420) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004\00\00\00\00\00\00\00\00\00") - (data (i32.const 3468) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00") - (data (i32.const 3516) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3564) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00\00\00\00\00\00\00") - (data (i32.const 3628) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3708) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3788) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 3868) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 3948) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") - (data (i32.const 4028) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z\00\00\00\00\00\00\00") - (data (i32.const 4112) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") + (data (i32.const 2620) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2700) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\000\000\000\000\000\001\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") + (data (i32.const 2780) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\000\000\000\001\00-\000\004\00-\000\007\00T\002\003\00:\000\006\00:\004\000\00.\000\000\000\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2860) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\000\002\000\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2940) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3020) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 3100) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\009\009\009\009\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3180) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\000\001\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 3260) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\000\000\000\000\002\002\00-\000\006\00-\001\006\00T\001\007\00:\001\003\00:\005\000\00.\007\007\004\00Z\00\00\00\00\00\00\00") + (data (i32.const 3340) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002\00\00\00\00\00\00\00\00\00") + (data (i32.const 3388) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data (i32.const 3436) ",\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 3484) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3612) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3660) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004\00\00\00\00\00\00\00\00\00") + (data (i32.const 3708) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00") + (data (i32.const 3756) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3804) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00\00\00\00\00\00\00") + (data (i32.const 3868) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3948) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 4028) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 4108) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 4188) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") + (data (i32.const 4268) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z\00\00\00\00\00\00\00") + (data (i32.const 4352) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") (table $0 1 funcref) (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) @@ -83,10 +88,10 @@ (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) - (global $~lib/rt/__rtti_base i32 (i32.const 4112)) - (global $~lib/memory/__data_end i32 (i32.const 4164)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20548)) - (global $~lib/memory/__heap_base i32 (i32.const 20548)) + (global $~lib/rt/__rtti_base i32 (i32.const 4352)) + (global $~lib/memory/__data_end i32 (i32.const 4404)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20788)) + (global $~lib/memory/__heap_base i32 (i32.const 20788)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -5355,8 +5360,8 @@ i32.shr_u i32.gt_u if - i32.const 3168 - i32.const 3216 + i32.const 3408 + i32.const 3456 i32.const 14 i32.const 48 call $~lib/builtins/abort @@ -5838,10 +5843,10 @@ i32.const 576 local.get $0 call $~lib/rt/itcms/__visit - i32.const 3168 + i32.const 3408 local.get $0 call $~lib/rt/itcms/__visit - i32.const 3264 + i32.const 3504 local.get $0 call $~lib/rt/itcms/__visit i32.const 176 @@ -5982,8 +5987,8 @@ global.get $~lib/memory/__data_end i32.lt_s if - i32.const 20576 - i32.const 20624 + i32.const 20816 + i32.const 20864 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -6059,18 +6064,18 @@ local.tee $3 i32.store local.get $0 - i64.load offset=16 - i64.const 0 - i64.lt_s + i32.load + i32.const 0 + i32.lt_s local.set $4 local.get $4 if (result i32) i32.const 1 else - local.get $3 - call $~lib/string/String#get:length - i32.const 4 - i32.gt_s + local.get $0 + i32.load + i32.const 10000 + i32.ge_s end if global.get $~lib/memory/__stack_pointer @@ -6102,6 +6107,19 @@ call $~lib/string/String.__concat local.tee $3 i32.store + else + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.const 4 + i32.const 832 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.store offset=16 + local.get $5 + call $~lib/string/String#padStart + local.tee $3 + i32.store end local.get $3 i32.const 2416 @@ -8034,7 +8052,7 @@ end global.get $~lib/memory/__stack_pointer i32.const 0 - i64.const 1231231231020 + i64.const -62167219200000 call $~lib/date/Date#constructor local.tee $1 i32.store @@ -8063,7 +8081,9 @@ end global.get $~lib/memory/__stack_pointer i32.const 0 - i64.const 1231231231456 + i64.const -62167219200000 + i64.const 1 + i64.sub call $~lib/date/Date#constructor local.tee $1 i32.store @@ -8092,7 +8112,7 @@ end global.get $~lib/memory/__stack_pointer i32.const 0 - i64.const 322331231231020 + i64.const -62127219200000 call $~lib/date/Date#constructor local.tee $1 i32.store @@ -8103,6 +8123,20 @@ local.get $8 i32.store offset=4 local.get $8 + i32.const 0 + f64.const 0 + f64.const 0 + f64.const 0 + f64.const 0 + f64.const 0 + call $~lib/builtins/trace + local.get $1 + call $~lib/date/Date#toISOString + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 i32.const 2800 local.set $8 global.get $~lib/memory/__stack_pointer @@ -8114,14 +8148,14 @@ if i32.const 0 i32.const 32 - i32.const 182 + i32.const 183 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer i32.const 0 - i64.const 253402300799999 + i64.const 1231231231020 call $~lib/date/Date#constructor local.tee $1 i32.store @@ -8143,14 +8177,14 @@ if i32.const 0 i32.const 32 - i32.const 184 + i32.const 185 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer i32.const 0 - i64.const 253402300800000 + i64.const 1231231231456 call $~lib/date/Date#constructor local.tee $1 i32.store @@ -8172,14 +8206,14 @@ if i32.const 0 i32.const 32 - i32.const 186 + i32.const 187 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer i32.const 0 - i64.const -62847038769226 + i64.const 322331231231020 call $~lib/date/Date#constructor local.tee $1 i32.store @@ -8201,16 +8235,103 @@ if i32.const 0 i32.const 32 - i32.const 188 + i32.const 189 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer + i32.const 0 + i64.const 253402300799999 + call $~lib/date/Date#constructor + local.tee $1 + i32.store + local.get $1 + call $~lib/date/Date#toISOString + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 i32.const 3120 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 + i32.store offset=8 + local.get $8 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 191 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i64.const 253402300800000 + call $~lib/date/Date#constructor + local.tee $1 + i32.store + local.get $1 + call $~lib/date/Date#toISOString + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 3200 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=8 + local.get $8 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 193 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i64.const -62847038769226 + call $~lib/date/Date#constructor + local.tee $1 + i32.store + local.get $1 + call $~lib/date/Date#toISOString + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 3280 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=8 + local.get $8 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 195 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3360 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 i32.store offset=4 local.get $8 call $~lib/date/Date.fromString @@ -8224,13 +8345,13 @@ if i32.const 0 i32.const 32 - i32.const 195 + i32.const 202 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3392 + i32.const 3632 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8247,13 +8368,13 @@ if i32.const 0 i32.const 32 - i32.const 197 + i32.const 204 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3440 + i32.const 3680 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8270,12 +8391,12 @@ if i32.const 0 i32.const 32 - i32.const 199 + i32.const 206 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 3488 + i32.const 3728 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8288,7 +8409,7 @@ i32.store offset=4 local.get $8 call $~lib/date/Date#getTime - i32.const 3536 + i32.const 3776 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8306,13 +8427,13 @@ if i32.const 0 i32.const 32 - i32.const 202 + i32.const 209 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3584 + i32.const 3824 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8329,13 +8450,13 @@ if i32.const 0 i32.const 32 - i32.const 209 + i32.const 216 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3648 + i32.const 3888 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8352,13 +8473,13 @@ if i32.const 0 i32.const 32 - i32.const 213 + i32.const 220 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3728 + i32.const 3968 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8375,7 +8496,7 @@ if i32.const 0 i32.const 32 - i32.const 217 + i32.const 224 i32.const 3 call $~lib/builtins/abort unreachable @@ -8400,7 +8521,7 @@ if i32.const 0 i32.const 32 - i32.const 225 + i32.const 232 i32.const 3 call $~lib/builtins/abort unreachable @@ -8413,7 +8534,7 @@ if i32.const 0 i32.const 32 - i32.const 226 + i32.const 233 i32.const 3 call $~lib/builtins/abort unreachable @@ -8426,7 +8547,7 @@ if i32.const 0 i32.const 32 - i32.const 228 + i32.const 235 i32.const 3 call $~lib/builtins/abort unreachable @@ -8439,7 +8560,7 @@ if i32.const 0 i32.const 32 - i32.const 229 + i32.const 236 i32.const 3 call $~lib/builtins/abort unreachable @@ -8452,7 +8573,7 @@ if i32.const 0 i32.const 32 - i32.const 231 + i32.const 238 i32.const 3 call $~lib/builtins/abort unreachable @@ -8465,7 +8586,7 @@ if i32.const 0 i32.const 32 - i32.const 232 + i32.const 239 i32.const 3 call $~lib/builtins/abort unreachable @@ -8478,7 +8599,7 @@ if i32.const 0 i32.const 32 - i32.const 234 + i32.const 241 i32.const 3 call $~lib/builtins/abort unreachable @@ -8491,7 +8612,7 @@ if i32.const 0 i32.const 32 - i32.const 235 + i32.const 242 i32.const 3 call $~lib/builtins/abort unreachable @@ -8503,7 +8624,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 3808 + i32.const 4048 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8514,7 +8635,7 @@ if i32.const 0 i32.const 32 - i32.const 237 + i32.const 244 i32.const 3 call $~lib/builtins/abort unreachable @@ -8526,7 +8647,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 3888 + i32.const 4128 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8537,7 +8658,7 @@ if i32.const 0 i32.const 32 - i32.const 238 + i32.const 245 i32.const 3 call $~lib/builtins/abort unreachable @@ -8566,7 +8687,7 @@ if i32.const 0 i32.const 32 - i32.const 243 + i32.const 250 i32.const 3 call $~lib/builtins/abort unreachable @@ -8579,7 +8700,7 @@ if i32.const 0 i32.const 32 - i32.const 244 + i32.const 251 i32.const 3 call $~lib/builtins/abort unreachable @@ -8592,7 +8713,7 @@ if i32.const 0 i32.const 32 - i32.const 245 + i32.const 252 i32.const 3 call $~lib/builtins/abort unreachable @@ -8605,7 +8726,7 @@ if i32.const 0 i32.const 32 - i32.const 246 + i32.const 253 i32.const 3 call $~lib/builtins/abort unreachable @@ -8618,7 +8739,7 @@ if i32.const 0 i32.const 32 - i32.const 247 + i32.const 254 i32.const 3 call $~lib/builtins/abort unreachable @@ -8631,7 +8752,7 @@ if i32.const 0 i32.const 32 - i32.const 248 + i32.const 255 i32.const 3 call $~lib/builtins/abort unreachable @@ -8644,7 +8765,7 @@ if i32.const 0 i32.const 32 - i32.const 249 + i32.const 256 i32.const 3 call $~lib/builtins/abort unreachable @@ -8656,7 +8777,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 3968 + i32.const 4208 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8667,7 +8788,7 @@ if i32.const 0 i32.const 32 - i32.const 251 + i32.const 258 i32.const 3 call $~lib/builtins/abort unreachable @@ -8679,7 +8800,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4048 + i32.const 4288 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8690,7 +8811,7 @@ if i32.const 0 i32.const 32 - i32.const 252 + i32.const 259 i32.const 3 call $~lib/builtins/abort unreachable @@ -9335,7 +9456,7 @@ i32.ge_u if i32.const 368 - i32.const 3216 + i32.const 3456 i32.const 92 i32.const 42 call $~lib/builtins/abort @@ -9359,8 +9480,8 @@ local.get $2 i32.eqz if - i32.const 3264 - i32.const 3216 + i32.const 3504 + i32.const 3456 i32.const 96 i32.const 40 call $~lib/builtins/abort From 5a91cfed6d2cf1fff2fc5344623886f902cd59d4 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 11:02:58 +0300 Subject: [PATCH 18/47] fix guard check --- std/assembly/date.ts | 19 +++++++++---------- tests/compiler/std/date.optimized.wat | 25 +++++++++++-------------- tests/compiler/std/date.untouched.wat | 21 ++++++++++----------- 3 files changed, 30 insertions(+), 35 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index d5c1b67e31..329e61cac4 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -74,9 +74,8 @@ export class Date { constructor(private epochMillis: i64) { // this differs from JavaScript which prefer return NaN or "Invalid Date" string // instead throwing exception. - if (invalidDate(epochMillis)) { - throw new RangeError(E_INVALIDDATE); - } + if (invalidDate(epochMillis)) throw new RangeError(E_INVALIDDATE); + this.year = ymdFromEpochDays(i32(floorDiv(epochMillis, MILLIS_PER_DAY))); this.month = _month; this.day = _day; @@ -86,15 +85,15 @@ export class Date { return this.epochMillis; } - setTime(value: i64): i64 { - if (invalidDate(this.epochMillis)) { - throw new RangeError(E_INVALIDDATE); - } - this.epochMillis = value; - this.year = ymdFromEpochDays(i32(floorDiv(value, MILLIS_PER_DAY))); + setTime(time: i64): i64 { + if (invalidDate(time)) throw new RangeError(E_INVALIDDATE); + + this.epochMillis = time; + this.year = ymdFromEpochDays(i32(floorDiv(time, MILLIS_PER_DAY))); this.month = _month; this.day = _day; - return value; + + return time; } getUTCFullYear(): i32 { diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index d626b34eb9..4629ad6d54 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -1994,22 +1994,19 @@ local.get $1 ) (func $~lib/date/Date#setTime (param $0 i32) (param $1 i64) - (local $2 i64) i32.const 1 - local.get $0 - i64.load offset=16 - local.tee $2 + local.get $1 i64.const 8640000000000000 i64.gt_s - local.get $2 + local.get $1 i64.const -8640000000000000 i64.lt_s select if i32.const 1104 i32.const 1152 - i32.const 91 - i32.const 7 + i32.const 89 + i32.const 28 call $~lib/builtins/abort unreachable end @@ -2147,7 +2144,7 @@ if i32.const 1600 i32.const 1152 - i32.const 133 + i32.const 132 i32.const 38 call $~lib/builtins/abort unreachable @@ -2177,7 +2174,7 @@ if i32.const 1600 i32.const 1152 - i32.const 138 + i32.const 137 i32.const 38 call $~lib/builtins/abort unreachable @@ -2207,7 +2204,7 @@ if i32.const 1600 i32.const 1152 - i32.const 143 + i32.const 142 i32.const 34 call $~lib/builtins/abort unreachable @@ -2281,7 +2278,7 @@ if i32.const 1600 i32.const 1152 - i32.const 151 + i32.const 150 i32.const 52 call $~lib/builtins/abort unreachable @@ -2333,7 +2330,7 @@ if i32.const 1600 i32.const 1152 - i32.const 158 + i32.const 157 i32.const 34 call $~lib/builtins/abort unreachable @@ -5914,8 +5911,8 @@ if i32.const 1104 i32.const 1152 - i32.const 78 - i32.const 7 + i32.const 77 + i32.const 35 call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 69c77932d4..83519f8fc8 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -2666,8 +2666,7 @@ (func $~lib/date/Date#setTime (param $0 i32) (param $1 i64) (result i64) (local $2 i64) (local $3 i64) - local.get $0 - i64.load offset=16 + local.get $1 local.set $2 local.get $2 i64.const -8640000000000000 @@ -2682,8 +2681,8 @@ if i32.const 80 i32.const 128 - i32.const 91 - i32.const 7 + i32.const 89 + i32.const 28 call $~lib/builtins/abort unreachable end @@ -2908,7 +2907,7 @@ if i32.const 576 i32.const 128 - i32.const 133 + i32.const 132 i32.const 38 call $~lib/builtins/abort unreachable @@ -2941,7 +2940,7 @@ if i32.const 576 i32.const 128 - i32.const 138 + i32.const 137 i32.const 38 call $~lib/builtins/abort unreachable @@ -2974,7 +2973,7 @@ if i32.const 576 i32.const 128 - i32.const 143 + i32.const 142 i32.const 34 call $~lib/builtins/abort unreachable @@ -3076,7 +3075,7 @@ if i32.const 576 i32.const 128 - i32.const 151 + i32.const 150 i32.const 52 call $~lib/builtins/abort unreachable @@ -3149,7 +3148,7 @@ if i32.const 576 i32.const 128 - i32.const 158 + i32.const 157 i32.const 34 call $~lib/builtins/abort unreachable @@ -8870,8 +8869,8 @@ if i32.const 80 i32.const 128 - i32.const 78 - i32.const 7 + i32.const 77 + i32.const 35 call $~lib/builtins/abort unreachable end From 2f2a0f4d0362af14fd3027c90a24bddba0e411d1 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 11:10:19 +0300 Subject: [PATCH 19/47] minor opt toISOString --- std/assembly/date.ts | 11 +- tests/compiler/std/date.optimized.wat | 139 ++++----- tests/compiler/std/date.untouched.wat | 389 +++++++++++++------------- 3 files changed, 277 insertions(+), 262 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 329e61cac4..24a9caaef7 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -166,12 +166,13 @@ export class Date { } toISOString(): string { - var yearStr = abs(this.year).toString(); - var isNeg = this.year < 0; - if (isNeg || this.year >= 10000) { - yearStr = (isNeg ? "-" : "+") + yearStr.padStart(6, "0"); + var yearStr: string; + var year = this.year; + var isNeg = year < 0; + if (isNeg || year >= 10000) { + yearStr = (isNeg ? "-" : "+") + abs(year).toString().padStart(6, "0"); } else { - yearStr = yearStr.padStart(4, "0"); + yearStr = year.toString().padStart(4, "0"); } return ( diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index 4629ad6d54..f7929e1e8e 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -34,18 +34,18 @@ (data (i32.const 1528) "\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 1580) "<") (data (i32.const 1592) "\01\00\00\00$\00\00\00V\00a\00l\00u\00e\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") - (data (i32.const 1644) "|") - (data (i32.const 1656) "\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006") - (data (i32.const 1772) "<") - (data (i32.const 1784) "\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s") - (data (i32.const 1836) "\1c") - (data (i32.const 1848) "\01\00\00\00\02\00\00\000") - (data (i32.const 1868) "\\") - (data (i32.const 1880) "\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") - (data (i32.const 1964) "\1c") - (data (i32.const 1976) "\01\00\00\00\02\00\00\00-") - (data (i32.const 1996) "\1c") - (data (i32.const 2008) "\01\00\00\00\02\00\00\00+") + (data (i32.const 1644) "\1c") + (data (i32.const 1656) "\01\00\00\00\02\00\00\00-") + (data (i32.const 1676) "\1c") + (data (i32.const 1688) "\01\00\00\00\02\00\00\00+") + (data (i32.const 1708) "|") + (data (i32.const 1720) "\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006") + (data (i32.const 1836) "<") + (data (i32.const 1848) "\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s") + (data (i32.const 1900) "\1c") + (data (i32.const 1912) "\01\00\00\00\02\00\00\000") + (data (i32.const 1932) "\\") + (data (i32.const 1944) "\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") (data (i32.const 2028) "\1c") (data (i32.const 2040) "\01") (data (i32.const 2060) "\1c") @@ -334,7 +334,7 @@ call $~lib/rt/itcms/__visit i32.const 1104 call $~lib/rt/itcms/__visit - i32.const 1888 + i32.const 1952 call $~lib/rt/itcms/__visit global.get $~lib/rt/itcms/pinSpace local.tee $1 @@ -2424,7 +2424,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - i32.const 1856 + i32.const 1920 local.set $0 br $__inlined_func$~lib/util/number/itoa32 end @@ -3507,6 +3507,7 @@ (local $1 i32) (local $2 i32) (local $3 i32) + (local $4 i32) global.get $~lib/memory/__stack_pointer i32.const 112 i32.sub @@ -3554,44 +3555,42 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store offset=104 - global.get $~lib/memory/__stack_pointer local.get $0 i32.load local.tee $1 - i32.const 31 - i32.shr_s - local.tee $2 - local.get $1 - local.get $2 - i32.add - i32.xor - call $~lib/number/I32#toString - local.tee $1 - i32.store - local.get $0 - i32.load i32.const 0 i32.lt_s - local.tee $3 - if (result i32) - i32.const 1 - else - local.get $0 - i32.load - i32.const 10000 - i32.ge_s - end + local.set $2 + i32.const 1 + local.get $1 + i32.const 10000 + i32.ge_s + local.get $2 + select if global.get $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 1984 - i32.const 2016 - local.get $3 + i32.const 1664 + i32.const 1696 + local.get $2 select - local.tee $3 - i32.store offset=4 + local.tee $2 + i32.store + local.get $1 + i32.const 31 + i32.shr_s + local.tee $4 + local.get $1 + local.get $4 + i32.add + i32.xor + call $~lib/number/I32#toString + local.set $1 global.get $~lib/memory/__stack_pointer - i32.const 1856 + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 1920 i32.store offset=12 local.get $1 i32.const 6 @@ -3599,28 +3598,34 @@ local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 - i32.store offset=8 - local.get $3 + i32.store offset=4 + local.get $2 local.get $1 call $~lib/string/String.__concat local.tee $1 - i32.store + i32.store offset=16 else global.get $~lib/memory/__stack_pointer - i32.const 1856 - i32.store offset=16 + local.get $1 + call $~lib/number/I32#toString + local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 1920 + i32.store offset=8 + local.get $1 i32.const 4 call $~lib/string/String#padStart local.tee $1 - i32.store + i32.store offset=16 end global.get $~lib/memory/__stack_pointer - i32.const 1984 + i32.const 1664 i32.store offset=100 local.get $1 - i32.const 1984 + i32.const 1664 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3634,7 +3639,7 @@ local.get $2 i32.store offset=104 global.get $~lib/memory/__stack_pointer - i32.const 1856 + i32.const 1920 i32.store offset=108 local.get $2 i32.const 2 @@ -3651,10 +3656,10 @@ local.get $1 i32.store offset=84 global.get $~lib/memory/__stack_pointer - i32.const 1984 + i32.const 1664 i32.store offset=88 local.get $1 - i32.const 1984 + i32.const 1664 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3668,7 +3673,7 @@ local.get $2 i32.store offset=84 global.get $~lib/memory/__stack_pointer - i32.const 1856 + i32.const 1920 i32.store offset=92 local.get $2 i32.const 2 @@ -3702,7 +3707,7 @@ local.get $2 i32.store offset=68 global.get $~lib/memory/__stack_pointer - i32.const 1856 + i32.const 1920 i32.store offset=76 local.get $2 i32.const 2 @@ -3736,7 +3741,7 @@ local.get $2 i32.store offset=52 global.get $~lib/memory/__stack_pointer - i32.const 1856 + i32.const 1920 i32.store offset=60 local.get $2 i32.const 2 @@ -3770,7 +3775,7 @@ local.get $2 i32.store offset=36 global.get $~lib/memory/__stack_pointer - i32.const 1856 + i32.const 1920 i32.store offset=44 local.get $2 i32.const 2 @@ -3795,7 +3800,7 @@ local.set $1 global.get $~lib/memory/__stack_pointer local.get $1 - i32.store offset=16 + i32.store offset=8 local.get $0 call $~lib/date/Date#getUTCMilliseconds call $~lib/number/I32#toString @@ -3804,7 +3809,7 @@ local.get $0 i32.store offset=12 global.get $~lib/memory/__stack_pointer - i32.const 1856 + i32.const 1920 i32.store offset=28 local.get $0 i32.const 3 @@ -3819,10 +3824,10 @@ local.set $0 global.get $~lib/memory/__stack_pointer local.get $0 - i32.store offset=4 + i32.store global.get $~lib/memory/__stack_pointer i32.const 2176 - i32.store offset=8 + i32.store offset=4 local.get $0 i32.const 2176 call $~lib/string/String.__concat @@ -4234,11 +4239,11 @@ end end global.get $~lib/memory/__stack_pointer - i32.const 1984 + i32.const 1664 i32.store global.get $~lib/memory/__stack_pointer local.get $1 - i32.const 1984 + i32.const 1664 call $~lib/string/String#split local.tee $0 i32.store offset=24 @@ -5958,7 +5963,7 @@ i32.const 0 i32.store i32.const 1 - i32.const 1852 + i32.const 1916 i32.load i32.const 1 i32.shr_u @@ -6019,7 +6024,7 @@ local.get $1 local.get $4 i32.add - i32.const 1856 + i32.const 1920 local.get $3 call $~lib/memory/memory.copy local.get $3 @@ -6032,14 +6037,14 @@ local.get $1 local.get $6 i32.add - i32.const 1856 + i32.const 1920 local.get $2 local.get $6 i32.sub call $~lib/memory/memory.copy else local.get $1 - i32.const 1856 + i32.const 1920 local.get $2 call $~lib/memory/memory.copy end diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 83519f8fc8..ec99952798 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -34,14 +34,14 @@ (data (i32.const 464) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 492) "<\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 556) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00$\00\00\00V\00a\00l\00u\00e\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 620) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006\00\00\00\00\00\00\00\00\00") - (data (i32.const 748) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") - (data (i32.const 812) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\000\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 844) "0\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") - (data (i32.const 1244) "\1c\04\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\04\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\000\00a\000\00b\000\00c\000\00d\000\00e\000\00f\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\001\00a\001\00b\001\00c\001\00d\001\00e\001\00f\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\002\00a\002\00b\002\00c\002\00d\002\00e\002\00f\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\003\00a\003\00b\003\00c\003\00d\003\00e\003\00f\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\004\00a\004\00b\004\00c\004\00d\004\00e\004\00f\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\005\00a\005\00b\005\00c\005\00d\005\00e\005\00f\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\006\00a\006\00b\006\00c\006\00d\006\00e\006\00f\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\007\00a\007\00b\007\00c\007\00d\007\00e\007\00f\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\008\00a\008\00b\008\00c\008\00d\008\00e\008\00f\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\009\00a\009\00b\009\00c\009\00d\009\00e\009\00f\00a\000\00a\001\00a\002\00a\003\00a\004\00a\005\00a\006\00a\007\00a\008\00a\009\00a\00a\00a\00b\00a\00c\00a\00d\00a\00e\00a\00f\00b\000\00b\001\00b\002\00b\003\00b\004\00b\005\00b\006\00b\007\00b\008\00b\009\00b\00a\00b\00b\00b\00c\00b\00d\00b\00e\00b\00f\00c\000\00c\001\00c\002\00c\003\00c\004\00c\005\00c\006\00c\007\00c\008\00c\009\00c\00a\00c\00b\00c\00c\00c\00d\00c\00e\00c\00f\00d\000\00d\001\00d\002\00d\003\00d\004\00d\005\00d\006\00d\007\00d\008\00d\009\00d\00a\00d\00b\00d\00c\00d\00d\00d\00e\00d\00f\00e\000\00e\001\00e\002\00e\003\00e\004\00e\005\00e\006\00e\007\00e\008\00e\009\00e\00a\00e\00b\00e\00c\00e\00d\00e\00e\00e\00f\00f\000\00f\001\00f\002\00f\003\00f\004\00f\005\00f\006\00f\007\00f\008\00f\009\00f\00a\00f\00b\00f\00c\00f\00d\00f\00e\00f\00f\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2300) "\\\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\00\00\00\00\00") - (data (i32.const 2396) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00-\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2428) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00+\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 620) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00-\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 652) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00+\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 684) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006\00\00\00\00\00\00\00\00\00") + (data (i32.const 812) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") + (data (i32.const 876) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\000\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 908) "0\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") + (data (i32.const 1308) "\1c\04\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\04\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\000\00a\000\00b\000\00c\000\00d\000\00e\000\00f\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\001\00a\001\00b\001\00c\001\00d\001\00e\001\00f\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\002\00a\002\00b\002\00c\002\00d\002\00e\002\00f\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\003\00a\003\00b\003\00c\003\00d\003\00e\003\00f\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\004\00a\004\00b\004\00c\004\00d\004\00e\004\00f\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\005\00a\005\00b\005\00c\005\00d\005\00e\005\00f\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\006\00a\006\00b\006\00c\006\00d\006\00e\006\00f\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\007\00a\007\00b\007\00c\007\00d\007\00e\007\00f\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\008\00a\008\00b\008\00c\008\00d\008\00e\008\00f\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\009\00a\009\00b\009\00c\009\00d\009\00e\009\00f\00a\000\00a\001\00a\002\00a\003\00a\004\00a\005\00a\006\00a\007\00a\008\00a\009\00a\00a\00a\00b\00a\00c\00a\00d\00a\00e\00a\00f\00b\000\00b\001\00b\002\00b\003\00b\004\00b\005\00b\006\00b\007\00b\008\00b\009\00b\00a\00b\00b\00b\00c\00b\00d\00b\00e\00b\00f\00c\000\00c\001\00c\002\00c\003\00c\004\00c\005\00c\006\00c\007\00c\008\00c\009\00c\00a\00c\00b\00c\00c\00c\00d\00c\00e\00c\00f\00d\000\00d\001\00d\002\00d\003\00d\004\00d\005\00d\006\00d\007\00d\008\00d\009\00d\00a\00d\00b\00d\00c\00d\00d\00d\00e\00d\00f\00e\000\00e\001\00e\002\00e\003\00e\004\00e\005\00e\006\00e\007\00e\008\00e\009\00e\00a\00e\00b\00e\00c\00e\00d\00e\00e\00e\00f\00f\000\00f\001\00f\002\00f\003\00f\004\00f\005\00f\006\00f\007\00f\008\00f\009\00f\00a\00f\00b\00f\00c\00f\00d\00f\00e\00f\00f\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2364) "\\\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\00\00\00\00\00") (data (i32.const 2460) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 2492) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00T\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 2524) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00:\00\00\00\00\00\00\00\00\00\00\00") @@ -3346,14 +3346,14 @@ i32.const 100 i32.rem_u local.set $7 - i32.const 844 + i32.const 908 local.get $6 i32.const 2 i32.shl i32.add i64.load32_u local.set $8 - i32.const 844 + i32.const 908 local.get $7 i32.const 2 i32.shl @@ -3396,7 +3396,7 @@ i32.const 2 i32.sub local.set $2 - i32.const 844 + i32.const 908 local.get $10 i32.const 2 i32.shl @@ -3419,7 +3419,7 @@ i32.const 2 i32.sub local.set $2 - i32.const 844 + i32.const 908 local.get $1 i32.const 2 i32.shl @@ -3469,7 +3469,7 @@ i32.const 1 i32.shl i32.add - i32.const 1264 + i32.const 1328 local.get $1 i32.wrap_i64 i32.const 255 @@ -3491,7 +3491,7 @@ i32.and if local.get $0 - i32.const 1264 + i32.const 1328 local.get $1 i32.wrap_i64 i32.const 6 @@ -3614,7 +3614,7 @@ i32.const 1 i32.shl i32.add - i32.const 2320 + i32.const 2384 local.get $1 local.get $6 i64.and @@ -3650,7 +3650,7 @@ i32.const 1 i32.shl i32.add - i32.const 2320 + i32.const 2384 local.get $1 local.get $6 local.get $4 @@ -5854,10 +5854,10 @@ i32.const 80 local.get $0 call $~lib/rt/itcms/__visit - i32.const 1264 + i32.const 1328 local.get $0 call $~lib/rt/itcms/__visit - i32.const 2320 + i32.const 2384 local.get $0 call $~lib/rt/itcms/__visit ) @@ -6000,6 +6000,7 @@ (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) global.get $~lib/memory/__stack_pointer i32.const 112 i32.sub @@ -6047,333 +6048,341 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store offset=104 - global.get $~lib/memory/__stack_pointer local.get $0 i32.load - local.tee $1 - i32.const 31 - i32.shr_s - local.tee $2 - local.get $1 - i32.add + local.set $2 local.get $2 - i32.xor - i32.const 10 - call $~lib/number/I32#toString - local.tee $3 - i32.store - local.get $0 - i32.load i32.const 0 i32.lt_s - local.set $4 - local.get $4 + local.set $3 + local.get $3 if (result i32) i32.const 1 else - local.get $0 - i32.load + local.get $2 i32.const 10000 i32.ge_s end if global.get $~lib/memory/__stack_pointer - local.get $4 + local.get $3 if (result i32) - i32.const 2416 + i32.const 640 else - i32.const 2448 + i32.const 672 end - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 + local.get $2 + local.tee $4 + i32.const 31 + i32.shr_s + local.tee $5 + local.get $4 + i32.add local.get $5 - i32.store offset=4 - local.get $5 - local.get $3 + i32.xor + i32.const 10 + call $~lib/number/I32#toString + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store offset=8 + local.get $6 i32.const 6 - i32.const 832 - local.set $5 + i32.const 896 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=12 - local.get $5 + local.get $6 call $~lib/string/String#padStart - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=8 - local.get $5 + local.get $6 + i32.store offset=4 + local.get $6 call $~lib/string/String.__concat - local.tee $3 - i32.store + local.tee $1 + i32.store offset=16 else global.get $~lib/memory/__stack_pointer - local.get $3 + local.get $2 + i32.const 10 + call $~lib/number/I32#toString + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + local.get $6 i32.const 4 - i32.const 832 - local.set $5 + i32.const 896 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=16 - local.get $5 + local.get $6 + i32.store offset=8 + local.get $6 call $~lib/string/String#padStart - local.tee $3 - i32.store + local.tee $1 + i32.store offset=16 end - local.get $3 - i32.const 2416 - local.set $5 + local.get $1 + i32.const 640 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=100 - local.get $5 + local.get $6 call $~lib/string/String.__concat - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=92 - local.get $5 + local.get $6 local.get $0 i32.load offset=4 i32.const 10 call $~lib/number/I32#toString - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=104 - local.get $5 + local.get $6 i32.const 2 - i32.const 832 - local.set $5 + i32.const 896 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=108 - local.get $5 + local.get $6 call $~lib/string/String#padStart - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=96 - local.get $5 + local.get $6 call $~lib/string/String.__concat - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=84 - local.get $5 - i32.const 2416 - local.set $5 + local.get $6 + i32.const 640 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=88 - local.get $5 + local.get $6 call $~lib/string/String.__concat - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=76 - local.get $5 + local.get $6 local.get $0 i32.load offset=8 i32.const 10 call $~lib/number/I32#toString - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=84 - local.get $5 + local.get $6 i32.const 2 - i32.const 832 - local.set $5 + i32.const 896 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=92 - local.get $5 + local.get $6 call $~lib/string/String#padStart - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=80 - local.get $5 + local.get $6 call $~lib/string/String.__concat - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=68 - local.get $5 + local.get $6 i32.const 2512 - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=72 - local.get $5 + local.get $6 call $~lib/string/String.__concat - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=60 - local.get $5 + local.get $6 local.get $0 call $~lib/date/Date#getUTCHours i32.const 10 call $~lib/number/I32#toString - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=68 - local.get $5 + local.get $6 i32.const 2 - i32.const 832 - local.set $5 + i32.const 896 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=76 - local.get $5 + local.get $6 call $~lib/string/String#padStart - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=64 - local.get $5 + local.get $6 call $~lib/string/String.__concat - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=52 - local.get $5 + local.get $6 i32.const 2544 - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=56 - local.get $5 + local.get $6 call $~lib/string/String.__concat - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=44 - local.get $5 + local.get $6 local.get $0 call $~lib/date/Date#getUTCMinutes i32.const 10 call $~lib/number/I32#toString - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=52 - local.get $5 + local.get $6 i32.const 2 - i32.const 832 - local.set $5 + i32.const 896 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=60 - local.get $5 + local.get $6 call $~lib/string/String#padStart - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=48 - local.get $5 + local.get $6 call $~lib/string/String.__concat - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=36 - local.get $5 + local.get $6 i32.const 2544 - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=40 - local.get $5 + local.get $6 call $~lib/string/String.__concat - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=28 - local.get $5 + local.get $6 local.get $0 call $~lib/date/Date#getUTCSeconds i32.const 10 call $~lib/number/I32#toString - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=36 - local.get $5 + local.get $6 i32.const 2 - i32.const 832 - local.set $5 + i32.const 896 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=44 - local.get $5 + local.get $6 call $~lib/string/String#padStart - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=32 - local.get $5 + local.get $6 call $~lib/string/String.__concat - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=12 - local.get $5 + local.get $6 i32.const 2576 - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=24 - local.get $5 + local.get $6 call $~lib/string/String.__concat - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=16 - local.get $5 + local.get $6 + i32.store offset=8 + local.get $6 local.get $0 call $~lib/date/Date#getUTCMilliseconds i32.const 10 call $~lib/number/I32#toString - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=12 - local.get $5 + local.get $6 i32.const 3 - i32.const 832 - local.set $5 + i32.const 896 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=28 - local.get $5 + local.get $6 call $~lib/string/String#padStart - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $6 i32.store offset=20 - local.get $5 + local.get $6 call $~lib/string/String.__concat - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=4 - local.get $5 + local.get $6 + i32.store + local.get $6 i32.const 2608 - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=8 - local.get $5 + local.get $6 + i32.store offset=4 + local.get $6 call $~lib/string/String.__concat - local.set $5 + local.set $6 global.get $~lib/memory/__stack_pointer i32.const 112 i32.add global.set $~lib/memory/__stack_pointer - local.get $5 + local.get $6 ) (func $~lib/string/String#split (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -6892,7 +6901,7 @@ end global.get $~lib/memory/__stack_pointer local.get $5 - i32.const 2416 + i32.const 640 local.set $15 global.get $~lib/memory/__stack_pointer local.get $15 @@ -8938,8 +8947,8 @@ i32.gt_s end if - i32.const 640 - i32.const 768 + i32.const 704 + i32.const 832 i32.const 373 i32.const 5 call $~lib/builtins/abort @@ -8948,7 +8957,7 @@ local.get $0 i32.eqz if - i32.const 832 + i32.const 896 local.set $8 global.get $~lib/memory/__stack_pointer i32.const 4 From 10ea8806421e3072bc6000d2b7dea3d5445c85b6 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 12:34:03 +0300 Subject: [PATCH 20/47] more --- std/assembly/date.ts | 1 + tests/compiler/std/date.optimized.wat | 242 ++++++++++++++++--------- tests/compiler/std/date.ts | 9 +- tests/compiler/std/date.untouched.wat | 250 +++++++++++++++++--------- 4 files changed, 339 insertions(+), 163 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 24a9caaef7..9cf9d61fbd 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -166,6 +166,7 @@ export class Date { } toISOString(): string { + // TODO: add more low-level helper which combine toString and padStart without extra allocation var yearStr: string; var year = this.year; var isNeg = year < 0; diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index f7929e1e8e..c524add736 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -7,14 +7,12 @@ (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $none_=>_i32 (func (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_i32_i32_i32_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) (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") @@ -4693,8 +4691,32 @@ i32.const 0 call $~lib/date/Date#setUTCMilliseconds local.get $0 + i64.load offset=16 + i64.const 399464523963000 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 57 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 i32.const 999 call $~lib/date/Date#setUTCMilliseconds + local.get $0 + i64.load offset=16 + i64.const 399464523963999 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 59 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i64.const 372027318331986 call $~lib/date/Date#constructor @@ -4707,7 +4729,7 @@ if i32.const 0 i32.const 1056 - i32.const 63 + i32.const 65 i32.const 3 call $~lib/builtins/abort unreachable @@ -4722,7 +4744,7 @@ if i32.const 0 i32.const 1056 - i32.const 65 + i32.const 67 i32.const 3 call $~lib/builtins/abort unreachable @@ -4737,7 +4759,7 @@ if i32.const 0 i32.const 1056 - i32.const 67 + i32.const 69 i32.const 3 call $~lib/builtins/abort unreachable @@ -4746,8 +4768,32 @@ i32.const 0 call $~lib/date/Date#setUTCSeconds local.get $0 + i64.load offset=16 + i64.const 372027318300986 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 72 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 i32.const 59 call $~lib/date/Date#setUTCSeconds + local.get $0 + i64.load offset=16 + i64.const 372027318359986 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 74 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i64.const 372027318331986 call $~lib/date/Date#constructor @@ -4760,7 +4806,7 @@ if i32.const 0 i32.const 1056 - i32.const 76 + i32.const 80 i32.const 3 call $~lib/builtins/abort unreachable @@ -4775,7 +4821,7 @@ if i32.const 0 i32.const 1056 - i32.const 78 + i32.const 82 i32.const 3 call $~lib/builtins/abort unreachable @@ -4790,7 +4836,7 @@ if i32.const 0 i32.const 1056 - i32.const 80 + i32.const 84 i32.const 3 call $~lib/builtins/abort unreachable @@ -4799,8 +4845,32 @@ i32.const 0 call $~lib/date/Date#setUTCMinutes local.get $0 + i64.load offset=16 + i64.const 372027315631986 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 87 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 i32.const 59 call $~lib/date/Date#setUTCMinutes + local.get $0 + i64.load offset=16 + i64.const 372027319171986 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 89 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i64.const 372027318331986 call $~lib/date/Date#constructor @@ -4813,7 +4883,7 @@ if i32.const 0 i32.const 1056 - i32.const 89 + i32.const 95 i32.const 3 call $~lib/builtins/abort unreachable @@ -4828,7 +4898,7 @@ if i32.const 0 i32.const 1056 - i32.const 91 + i32.const 97 i32.const 3 call $~lib/builtins/abort unreachable @@ -4843,7 +4913,7 @@ if i32.const 0 i32.const 1056 - i32.const 93 + i32.const 99 i32.const 3 call $~lib/builtins/abort unreachable @@ -4852,8 +4922,32 @@ i32.const 0 call $~lib/date/Date#setUTCHours local.get $0 + i64.load offset=16 + i64.const 372027257131986 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 102 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 i32.const 23 call $~lib/date/Date#setUTCHours + local.get $0 + i64.load offset=16 + i64.const 372027339931986 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 104 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i64.const 123814991274 call $~lib/date/Date#constructor @@ -4866,7 +4960,7 @@ if i32.const 0 i32.const 1056 - i32.const 102 + i32.const 110 i32.const 3 call $~lib/builtins/abort unreachable @@ -4878,7 +4972,7 @@ if i32.const 0 i32.const 1056 - i32.const 103 + i32.const 111 i32.const 3 call $~lib/builtins/abort unreachable @@ -4893,7 +4987,7 @@ if i32.const 0 i32.const 1056 - i32.const 107 + i32.const 115 i32.const 3 call $~lib/builtins/abort unreachable @@ -4908,7 +5002,7 @@ if i32.const 0 i32.const 1056 - i32.const 109 + i32.const 117 i32.const 3 call $~lib/builtins/abort unreachable @@ -4947,7 +5041,7 @@ if i32.const 0 i32.const 1056 - i32.const 127 + i32.const 135 i32.const 3 call $~lib/builtins/abort unreachable @@ -4959,7 +5053,7 @@ if i32.const 0 i32.const 1056 - i32.const 128 + i32.const 136 i32.const 3 call $~lib/builtins/abort unreachable @@ -4971,7 +5065,7 @@ if i32.const 0 i32.const 1056 - i32.const 129 + i32.const 137 i32.const 3 call $~lib/builtins/abort unreachable @@ -4983,7 +5077,7 @@ if i32.const 0 i32.const 1056 - i32.const 130 + i32.const 138 i32.const 3 call $~lib/builtins/abort unreachable @@ -4995,7 +5089,7 @@ if i32.const 0 i32.const 1056 - i32.const 131 + i32.const 139 i32.const 3 call $~lib/builtins/abort unreachable @@ -5015,7 +5109,7 @@ if i32.const 0 i32.const 1056 - i32.const 135 + i32.const 143 i32.const 3 call $~lib/builtins/abort unreachable @@ -5030,7 +5124,7 @@ if i32.const 0 i32.const 1056 - i32.const 137 + i32.const 145 i32.const 3 call $~lib/builtins/abort unreachable @@ -5045,7 +5139,7 @@ if i32.const 0 i32.const 1056 - i32.const 140 + i32.const 148 i32.const 3 call $~lib/builtins/abort unreachable @@ -5060,7 +5154,7 @@ if i32.const 0 i32.const 1056 - i32.const 143 + i32.const 151 i32.const 3 call $~lib/builtins/abort unreachable @@ -5075,7 +5169,7 @@ if i32.const 0 i32.const 1056 - i32.const 146 + i32.const 154 i32.const 3 call $~lib/builtins/abort unreachable @@ -5090,7 +5184,7 @@ if i32.const 0 i32.const 1056 - i32.const 149 + i32.const 157 i32.const 3 call $~lib/builtins/abort unreachable @@ -5107,7 +5201,7 @@ if i32.const 0 i32.const 1056 - i32.const 155 + i32.const 163 i32.const 3 call $~lib/builtins/abort unreachable @@ -5122,7 +5216,7 @@ if i32.const 0 i32.const 1056 - i32.const 157 + i32.const 165 i32.const 3 call $~lib/builtins/abort unreachable @@ -5137,7 +5231,7 @@ if i32.const 0 i32.const 1056 - i32.const 159 + i32.const 167 i32.const 3 call $~lib/builtins/abort unreachable @@ -5160,7 +5254,7 @@ if i32.const 0 i32.const 1056 - i32.const 168 + i32.const 176 i32.const 3 call $~lib/builtins/abort unreachable @@ -5175,7 +5269,7 @@ if i32.const 0 i32.const 1056 - i32.const 170 + i32.const 178 i32.const 3 call $~lib/builtins/abort unreachable @@ -5190,7 +5284,7 @@ if i32.const 0 i32.const 1056 - i32.const 172 + i32.const 180 i32.const 3 call $~lib/builtins/abort unreachable @@ -5216,7 +5310,7 @@ if i32.const 0 i32.const 1056 - i32.const 178 + i32.const 186 i32.const 3 call $~lib/builtins/abort unreachable @@ -5242,7 +5336,7 @@ if i32.const 0 i32.const 1056 - i32.const 180 + i32.const 188 i32.const 3 call $~lib/builtins/abort unreachable @@ -5254,20 +5348,6 @@ i32.store local.get $0 call $~lib/date/Date#toISOString - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - i32.const 0 - f64.const 0 - f64.const 0 - f64.const 0 - f64.const 0 - f64.const 0 - call $~lib/builtins/trace - local.get $0 - call $~lib/date/Date#toISOString local.set $0 global.get $~lib/memory/__stack_pointer local.get $0 @@ -5282,7 +5362,7 @@ if i32.const 0 i32.const 1056 - i32.const 183 + i32.const 190 i32.const 3 call $~lib/builtins/abort unreachable @@ -5308,7 +5388,7 @@ if i32.const 0 i32.const 1056 - i32.const 185 + i32.const 192 i32.const 3 call $~lib/builtins/abort unreachable @@ -5334,7 +5414,7 @@ if i32.const 0 i32.const 1056 - i32.const 187 + i32.const 194 i32.const 3 call $~lib/builtins/abort unreachable @@ -5360,7 +5440,7 @@ if i32.const 0 i32.const 1056 - i32.const 189 + i32.const 196 i32.const 3 call $~lib/builtins/abort unreachable @@ -5386,7 +5466,7 @@ if i32.const 0 i32.const 1056 - i32.const 191 + i32.const 198 i32.const 3 call $~lib/builtins/abort unreachable @@ -5412,7 +5492,7 @@ if i32.const 0 i32.const 1056 - i32.const 193 + i32.const 200 i32.const 3 call $~lib/builtins/abort unreachable @@ -5438,7 +5518,7 @@ if i32.const 0 i32.const 1056 - i32.const 195 + i32.const 202 i32.const 3 call $~lib/builtins/abort unreachable @@ -5458,7 +5538,7 @@ if i32.const 0 i32.const 1056 - i32.const 202 + i32.const 209 i32.const 3 call $~lib/builtins/abort unreachable @@ -5478,7 +5558,7 @@ if i32.const 0 i32.const 1056 - i32.const 204 + i32.const 211 i32.const 3 call $~lib/builtins/abort unreachable @@ -5498,7 +5578,7 @@ if i32.const 0 i32.const 1056 - i32.const 206 + i32.const 213 i32.const 3 call $~lib/builtins/abort unreachable @@ -5529,7 +5609,7 @@ if i32.const 0 i32.const 1056 - i32.const 209 + i32.const 216 i32.const 3 call $~lib/builtins/abort unreachable @@ -5549,7 +5629,7 @@ if i32.const 0 i32.const 1056 - i32.const 216 + i32.const 223 i32.const 3 call $~lib/builtins/abort unreachable @@ -5569,7 +5649,7 @@ if i32.const 0 i32.const 1056 - i32.const 220 + i32.const 227 i32.const 3 call $~lib/builtins/abort unreachable @@ -5589,7 +5669,7 @@ if i32.const 0 i32.const 1056 - i32.const 224 + i32.const 231 i32.const 3 call $~lib/builtins/abort unreachable @@ -5611,7 +5691,7 @@ if i32.const 0 i32.const 1056 - i32.const 232 + i32.const 239 i32.const 3 call $~lib/builtins/abort unreachable @@ -5623,7 +5703,7 @@ if i32.const 0 i32.const 1056 - i32.const 233 + i32.const 240 i32.const 3 call $~lib/builtins/abort unreachable @@ -5635,7 +5715,7 @@ if i32.const 0 i32.const 1056 - i32.const 235 + i32.const 242 i32.const 3 call $~lib/builtins/abort unreachable @@ -5647,7 +5727,7 @@ if i32.const 0 i32.const 1056 - i32.const 236 + i32.const 243 i32.const 3 call $~lib/builtins/abort unreachable @@ -5659,7 +5739,7 @@ if i32.const 0 i32.const 1056 - i32.const 238 + i32.const 245 i32.const 3 call $~lib/builtins/abort unreachable @@ -5671,7 +5751,7 @@ if i32.const 0 i32.const 1056 - i32.const 239 + i32.const 246 i32.const 3 call $~lib/builtins/abort unreachable @@ -5683,7 +5763,7 @@ if i32.const 0 i32.const 1056 - i32.const 241 + i32.const 248 i32.const 3 call $~lib/builtins/abort unreachable @@ -5695,7 +5775,7 @@ if i32.const 0 i32.const 1056 - i32.const 242 + i32.const 249 i32.const 3 call $~lib/builtins/abort unreachable @@ -5716,7 +5796,7 @@ if i32.const 0 i32.const 1056 - i32.const 244 + i32.const 251 i32.const 3 call $~lib/builtins/abort unreachable @@ -5737,7 +5817,7 @@ if i32.const 0 i32.const 1056 - i32.const 245 + i32.const 252 i32.const 3 call $~lib/builtins/abort unreachable @@ -5759,7 +5839,7 @@ if i32.const 0 i32.const 1056 - i32.const 250 + i32.const 257 i32.const 3 call $~lib/builtins/abort unreachable @@ -5771,7 +5851,7 @@ if i32.const 0 i32.const 1056 - i32.const 251 + i32.const 258 i32.const 3 call $~lib/builtins/abort unreachable @@ -5783,7 +5863,7 @@ if i32.const 0 i32.const 1056 - i32.const 252 + i32.const 259 i32.const 3 call $~lib/builtins/abort unreachable @@ -5793,7 +5873,7 @@ if i32.const 0 i32.const 1056 - i32.const 253 + i32.const 260 i32.const 3 call $~lib/builtins/abort unreachable @@ -5803,7 +5883,7 @@ if i32.const 0 i32.const 1056 - i32.const 254 + i32.const 261 i32.const 3 call $~lib/builtins/abort unreachable @@ -5813,7 +5893,7 @@ if i32.const 0 i32.const 1056 - i32.const 255 + i32.const 262 i32.const 3 call $~lib/builtins/abort unreachable @@ -5825,7 +5905,7 @@ if i32.const 0 i32.const 1056 - i32.const 256 + i32.const 263 i32.const 3 call $~lib/builtins/abort unreachable @@ -5846,7 +5926,7 @@ if i32.const 0 i32.const 1056 - i32.const 258 + i32.const 265 i32.const 3 call $~lib/builtins/abort unreachable @@ -5867,7 +5947,7 @@ if i32.const 0 i32.const 1056 - i32.const 259 + i32.const 266 i32.const 3 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index be3e832eef..acfd8b9f54 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -54,7 +54,9 @@ assert(date.getUTCMilliseconds() == 568); // test boundaries date.setUTCMilliseconds(0); + assert(date.getTime() == 399464523963000); date.setUTCMilliseconds(999); + assert(date.getTime() == 399464523963999); } // Date#setUTCSeconds ////////////////////////////////////////////////////////////////////////////// @@ -67,7 +69,9 @@ assert(date.getUTCSeconds() == 50); // test boundaries date.setUTCSeconds(0); + assert(date.getTime() == 372027318300986); date.setUTCSeconds(59); + assert(date.getTime() == 372027318359986); } // Date#setUTCMinutes ////////////////////////////////////////////////////////////////////////////// @@ -80,7 +84,9 @@ assert(date.getUTCMinutes() == 50); // test boundaries date.setUTCMinutes(0); + assert(date.getTime() == 372027315631986); date.setUTCMinutes(59); + assert(date.getTime() == 372027319171986); } // Date#setUTCHours //////////////////////////////////////////////////////////////////////////////// @@ -93,7 +99,9 @@ assert(date.getUTCHours() == 2); // test boundaries date.setUTCHours(0); + assert(date.getTime() == 372027257131986); date.setUTCHours(23); + assert(date.getTime() == 372027339931986); } // Date#setUTCDate ///////////////////////////////////////////////////////////////////////////////// @@ -179,7 +187,6 @@ date = new Date(-62167219200000 - 1); assert(date.toISOString() == "-000001-12-31T23:59:59.999Z"); date = new Date(-62127219200000); - trace(date.toISOString()); assert(date.toISOString() == "0001-04-07T23:06:40.000Z"); date = new Date(1231231231020); assert(date.toISOString() == "2009-01-06T08:40:31.020Z"); diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index ec99952798..0c7edad64f 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -7,7 +7,6 @@ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) (type $i32_i64_i32_i32_=>_none (func (param i32 i64 i32 i32))) @@ -20,7 +19,6 @@ (type $i32_i32_i32_i32_i32_i32_i32_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) (type $i32_i64_=>_i64 (func (param i32 i64) (result i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) (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\18\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00D\00a\00t\00e\00\00\00\00\00") @@ -7503,8 +7501,34 @@ i32.const 0 call $~lib/date/Date#setUTCMilliseconds local.get $1 + call $~lib/date/Date#getTime + i64.const 399464523963000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 57 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 i32.const 999 call $~lib/date/Date#setUTCMilliseconds + local.get $1 + call $~lib/date/Date#getTime + i64.const 399464523963999 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 59 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i32.const 0 i64.const 372027318331986 @@ -7519,7 +7543,7 @@ if i32.const 0 i32.const 32 - i32.const 63 + i32.const 65 i32.const 3 call $~lib/builtins/abort unreachable @@ -7535,7 +7559,7 @@ if i32.const 0 i32.const 32 - i32.const 65 + i32.const 67 i32.const 3 call $~lib/builtins/abort unreachable @@ -7551,7 +7575,7 @@ if i32.const 0 i32.const 32 - i32.const 67 + i32.const 69 i32.const 3 call $~lib/builtins/abort unreachable @@ -7560,8 +7584,34 @@ i32.const 0 call $~lib/date/Date#setUTCSeconds local.get $1 + call $~lib/date/Date#getTime + i64.const 372027318300986 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 72 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 i32.const 59 call $~lib/date/Date#setUTCSeconds + local.get $1 + call $~lib/date/Date#getTime + i64.const 372027318359986 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 74 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i32.const 0 i64.const 372027318331986 @@ -7576,7 +7626,7 @@ if i32.const 0 i32.const 32 - i32.const 76 + i32.const 80 i32.const 3 call $~lib/builtins/abort unreachable @@ -7592,7 +7642,7 @@ if i32.const 0 i32.const 32 - i32.const 78 + i32.const 82 i32.const 3 call $~lib/builtins/abort unreachable @@ -7608,7 +7658,7 @@ if i32.const 0 i32.const 32 - i32.const 80 + i32.const 84 i32.const 3 call $~lib/builtins/abort unreachable @@ -7617,8 +7667,34 @@ i32.const 0 call $~lib/date/Date#setUTCMinutes local.get $1 + call $~lib/date/Date#getTime + i64.const 372027315631986 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 87 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 i32.const 59 call $~lib/date/Date#setUTCMinutes + local.get $1 + call $~lib/date/Date#getTime + i64.const 372027319171986 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 89 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i32.const 0 i64.const 372027318331986 @@ -7633,7 +7709,7 @@ if i32.const 0 i32.const 32 - i32.const 89 + i32.const 95 i32.const 3 call $~lib/builtins/abort unreachable @@ -7649,7 +7725,7 @@ if i32.const 0 i32.const 32 - i32.const 91 + i32.const 97 i32.const 3 call $~lib/builtins/abort unreachable @@ -7665,7 +7741,7 @@ if i32.const 0 i32.const 32 - i32.const 93 + i32.const 99 i32.const 3 call $~lib/builtins/abort unreachable @@ -7674,8 +7750,34 @@ i32.const 0 call $~lib/date/Date#setUTCHours local.get $1 + call $~lib/date/Date#getTime + i64.const 372027257131986 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 102 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 i32.const 23 call $~lib/date/Date#setUTCHours + local.get $1 + call $~lib/date/Date#getTime + i64.const 372027339931986 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 104 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i32.const 0 i64.const 123814991274 @@ -7690,7 +7792,7 @@ if i32.const 0 i32.const 32 - i32.const 102 + i32.const 110 i32.const 3 call $~lib/builtins/abort unreachable @@ -7703,7 +7805,7 @@ if i32.const 0 i32.const 32 - i32.const 103 + i32.const 111 i32.const 3 call $~lib/builtins/abort unreachable @@ -7719,7 +7821,7 @@ if i32.const 0 i32.const 32 - i32.const 107 + i32.const 115 i32.const 3 call $~lib/builtins/abort unreachable @@ -7735,7 +7837,7 @@ if i32.const 0 i32.const 32 - i32.const 109 + i32.const 117 i32.const 3 call $~lib/builtins/abort unreachable @@ -7775,7 +7877,7 @@ if i32.const 0 i32.const 32 - i32.const 127 + i32.const 135 i32.const 3 call $~lib/builtins/abort unreachable @@ -7788,7 +7890,7 @@ if i32.const 0 i32.const 32 - i32.const 128 + i32.const 136 i32.const 3 call $~lib/builtins/abort unreachable @@ -7801,7 +7903,7 @@ if i32.const 0 i32.const 32 - i32.const 129 + i32.const 137 i32.const 3 call $~lib/builtins/abort unreachable @@ -7814,7 +7916,7 @@ if i32.const 0 i32.const 32 - i32.const 130 + i32.const 138 i32.const 3 call $~lib/builtins/abort unreachable @@ -7827,7 +7929,7 @@ if i32.const 0 i32.const 32 - i32.const 131 + i32.const 139 i32.const 3 call $~lib/builtins/abort unreachable @@ -7849,7 +7951,7 @@ if i32.const 0 i32.const 32 - i32.const 135 + i32.const 143 i32.const 3 call $~lib/builtins/abort unreachable @@ -7865,7 +7967,7 @@ if i32.const 0 i32.const 32 - i32.const 137 + i32.const 145 i32.const 3 call $~lib/builtins/abort unreachable @@ -7881,7 +7983,7 @@ if i32.const 0 i32.const 32 - i32.const 140 + i32.const 148 i32.const 3 call $~lib/builtins/abort unreachable @@ -7901,7 +8003,7 @@ if i32.const 0 i32.const 32 - i32.const 143 + i32.const 151 i32.const 3 call $~lib/builtins/abort unreachable @@ -7923,7 +8025,7 @@ if i32.const 0 i32.const 32 - i32.const 146 + i32.const 154 i32.const 3 call $~lib/builtins/abort unreachable @@ -7945,7 +8047,7 @@ if i32.const 0 i32.const 32 - i32.const 149 + i32.const 157 i32.const 3 call $~lib/builtins/abort unreachable @@ -7964,7 +8066,7 @@ if i32.const 0 i32.const 32 - i32.const 155 + i32.const 163 i32.const 3 call $~lib/builtins/abort unreachable @@ -7980,7 +8082,7 @@ if i32.const 0 i32.const 32 - i32.const 157 + i32.const 165 i32.const 3 call $~lib/builtins/abort unreachable @@ -7996,7 +8098,7 @@ if i32.const 0 i32.const 32 - i32.const 159 + i32.const 167 i32.const 3 call $~lib/builtins/abort unreachable @@ -8021,7 +8123,7 @@ if i32.const 0 i32.const 32 - i32.const 168 + i32.const 176 i32.const 3 call $~lib/builtins/abort unreachable @@ -8037,7 +8139,7 @@ if i32.const 0 i32.const 32 - i32.const 170 + i32.const 178 i32.const 3 call $~lib/builtins/abort unreachable @@ -8053,7 +8155,7 @@ if i32.const 0 i32.const 32 - i32.const 172 + i32.const 180 i32.const 3 call $~lib/builtins/abort unreachable @@ -8082,7 +8184,7 @@ if i32.const 0 i32.const 32 - i32.const 178 + i32.const 186 i32.const 3 call $~lib/builtins/abort unreachable @@ -8113,7 +8215,7 @@ if i32.const 0 i32.const 32 - i32.const 180 + i32.const 188 i32.const 3 call $~lib/builtins/abort unreachable @@ -8131,20 +8233,6 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 0 - f64.const 0 - f64.const 0 - f64.const 0 - f64.const 0 - f64.const 0 - call $~lib/builtins/trace - local.get $1 - call $~lib/date/Date#toISOString - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=4 - local.get $8 i32.const 2800 local.set $8 global.get $~lib/memory/__stack_pointer @@ -8156,7 +8244,7 @@ if i32.const 0 i32.const 32 - i32.const 183 + i32.const 190 i32.const 3 call $~lib/builtins/abort unreachable @@ -8185,7 +8273,7 @@ if i32.const 0 i32.const 32 - i32.const 185 + i32.const 192 i32.const 3 call $~lib/builtins/abort unreachable @@ -8214,7 +8302,7 @@ if i32.const 0 i32.const 32 - i32.const 187 + i32.const 194 i32.const 3 call $~lib/builtins/abort unreachable @@ -8243,7 +8331,7 @@ if i32.const 0 i32.const 32 - i32.const 189 + i32.const 196 i32.const 3 call $~lib/builtins/abort unreachable @@ -8272,7 +8360,7 @@ if i32.const 0 i32.const 32 - i32.const 191 + i32.const 198 i32.const 3 call $~lib/builtins/abort unreachable @@ -8301,7 +8389,7 @@ if i32.const 0 i32.const 32 - i32.const 193 + i32.const 200 i32.const 3 call $~lib/builtins/abort unreachable @@ -8330,7 +8418,7 @@ if i32.const 0 i32.const 32 - i32.const 195 + i32.const 202 i32.const 3 call $~lib/builtins/abort unreachable @@ -8353,7 +8441,7 @@ if i32.const 0 i32.const 32 - i32.const 202 + i32.const 209 i32.const 3 call $~lib/builtins/abort unreachable @@ -8376,7 +8464,7 @@ if i32.const 0 i32.const 32 - i32.const 204 + i32.const 211 i32.const 3 call $~lib/builtins/abort unreachable @@ -8399,7 +8487,7 @@ if i32.const 0 i32.const 32 - i32.const 206 + i32.const 213 i32.const 3 call $~lib/builtins/abort unreachable @@ -8435,7 +8523,7 @@ if i32.const 0 i32.const 32 - i32.const 209 + i32.const 216 i32.const 3 call $~lib/builtins/abort unreachable @@ -8458,7 +8546,7 @@ if i32.const 0 i32.const 32 - i32.const 216 + i32.const 223 i32.const 3 call $~lib/builtins/abort unreachable @@ -8481,7 +8569,7 @@ if i32.const 0 i32.const 32 - i32.const 220 + i32.const 227 i32.const 3 call $~lib/builtins/abort unreachable @@ -8504,7 +8592,7 @@ if i32.const 0 i32.const 32 - i32.const 224 + i32.const 231 i32.const 3 call $~lib/builtins/abort unreachable @@ -8529,7 +8617,7 @@ if i32.const 0 i32.const 32 - i32.const 232 + i32.const 239 i32.const 3 call $~lib/builtins/abort unreachable @@ -8542,7 +8630,7 @@ if i32.const 0 i32.const 32 - i32.const 233 + i32.const 240 i32.const 3 call $~lib/builtins/abort unreachable @@ -8555,7 +8643,7 @@ if i32.const 0 i32.const 32 - i32.const 235 + i32.const 242 i32.const 3 call $~lib/builtins/abort unreachable @@ -8568,7 +8656,7 @@ if i32.const 0 i32.const 32 - i32.const 236 + i32.const 243 i32.const 3 call $~lib/builtins/abort unreachable @@ -8581,7 +8669,7 @@ if i32.const 0 i32.const 32 - i32.const 238 + i32.const 245 i32.const 3 call $~lib/builtins/abort unreachable @@ -8594,7 +8682,7 @@ if i32.const 0 i32.const 32 - i32.const 239 + i32.const 246 i32.const 3 call $~lib/builtins/abort unreachable @@ -8607,7 +8695,7 @@ if i32.const 0 i32.const 32 - i32.const 241 + i32.const 248 i32.const 3 call $~lib/builtins/abort unreachable @@ -8620,7 +8708,7 @@ if i32.const 0 i32.const 32 - i32.const 242 + i32.const 249 i32.const 3 call $~lib/builtins/abort unreachable @@ -8643,7 +8731,7 @@ if i32.const 0 i32.const 32 - i32.const 244 + i32.const 251 i32.const 3 call $~lib/builtins/abort unreachable @@ -8666,7 +8754,7 @@ if i32.const 0 i32.const 32 - i32.const 245 + i32.const 252 i32.const 3 call $~lib/builtins/abort unreachable @@ -8695,7 +8783,7 @@ if i32.const 0 i32.const 32 - i32.const 250 + i32.const 257 i32.const 3 call $~lib/builtins/abort unreachable @@ -8708,7 +8796,7 @@ if i32.const 0 i32.const 32 - i32.const 251 + i32.const 258 i32.const 3 call $~lib/builtins/abort unreachable @@ -8721,7 +8809,7 @@ if i32.const 0 i32.const 32 - i32.const 252 + i32.const 259 i32.const 3 call $~lib/builtins/abort unreachable @@ -8734,7 +8822,7 @@ if i32.const 0 i32.const 32 - i32.const 253 + i32.const 260 i32.const 3 call $~lib/builtins/abort unreachable @@ -8747,7 +8835,7 @@ if i32.const 0 i32.const 32 - i32.const 254 + i32.const 261 i32.const 3 call $~lib/builtins/abort unreachable @@ -8760,7 +8848,7 @@ if i32.const 0 i32.const 32 - i32.const 255 + i32.const 262 i32.const 3 call $~lib/builtins/abort unreachable @@ -8773,7 +8861,7 @@ if i32.const 0 i32.const 32 - i32.const 256 + i32.const 263 i32.const 3 call $~lib/builtins/abort unreachable @@ -8796,7 +8884,7 @@ if i32.const 0 i32.const 32 - i32.const 258 + i32.const 265 i32.const 3 call $~lib/builtins/abort unreachable @@ -8819,7 +8907,7 @@ if i32.const 0 i32.const 32 - i32.const 259 + i32.const 266 i32.const 3 call $~lib/builtins/abort unreachable From 028a67fa3a25ee7dc1827903a7c9ff284aa5d64d Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 13:10:47 +0300 Subject: [PATCH 21/47] remove boundaries --- std/assembly/date.ts | 23 +- tests/compiler/std/date.optimized.wat | 728 +++++++++++++------------- tests/compiler/std/date.ts | 17 +- tests/compiler/std/date.untouched.wat | 653 +++++++++++------------ 4 files changed, 671 insertions(+), 750 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 9cf9d61fbd..395b48a3c0 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -1,4 +1,4 @@ -import { E_VALUEOUTOFRANGE, E_INVALIDDATE } from "util/error"; +import { E_INVALIDDATE } from "util/error"; import { now as Date_now } from "./bindings/Date"; // @ts-ignore: decorator @@ -129,32 +129,25 @@ export class Date { } setUTCSeconds(seconds: i32): void { - if (seconds < 0 || seconds > 59) throw new RangeError(E_VALUEOUTOFRANGE); this.setTime(this.epochMillis + (seconds - this.getUTCSeconds()) * MILLIS_PER_SECOND); } setUTCMinutes(minutes: i32): void { - if (minutes < 0 || minutes > 59) throw new RangeError(E_VALUEOUTOFRANGE); this.setTime(this.epochMillis + (minutes - this.getUTCMinutes()) * MILLIS_PER_MINUTE); } setUTCHours(hours: i32): void { - if (hours < 0 || hours > 23) throw new RangeError(E_VALUEOUTOFRANGE); this.setTime(this.epochMillis + (hours - this.getUTCHours()) * MILLIS_PER_HOUR); } setUTCDate(day: i32): void { if (this.day == day) return; - var year = this.year; - var month = this.month; - if (day < 1 || day > daysInMonth(year, month)) throw new RangeError(E_VALUEOUTOFRANGE); var ms = floorMod(this.epochMillis, MILLIS_PER_DAY); - this.setTime(i64(daysSinceEpoch(year, month, day)) * MILLIS_PER_DAY + ms); + this.setTime(i64(daysSinceEpoch(this.year, this.month, day)) * MILLIS_PER_DAY + ms); } setUTCMonth(month: i32): void { if (this.month == month) return; - if (month < 1 || month > 12) throw new RangeError(E_VALUEOUTOFRANGE); var ms = floorMod(this.epochMillis, MILLIS_PER_DAY); this.setTime(i64(daysSinceEpoch(this.year, month + 1, this.day)) * MILLIS_PER_DAY + ms); } @@ -224,18 +217,6 @@ function epochMillis( return a - b * floorDiv(a, b) as T; } -// http://howardhinnant.github.io/date_algorithms.html#is_leap -// @ts-ignore: decorator -@inline function isLeap(y: i32): bool { - return y % 4 == 0 && (y % 100 != 0 || y % 400 == 0); -} - -function daysInMonth(year: i32, month: i32): i32 { - return month == 2 - ? 28 + i32(isLeap(year)) - : 30 + ((month + i32(month >= 8)) & 1); -} - // @ts-ignore: decorator @inline function invalidDate(millis: i64): bool { return millis < -8640000000000000 || millis > 8640000000000000; diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index c524add736..10b1042595 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -30,80 +30,78 @@ (data (i32.const 1448) "\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") (data (i32.const 1516) "<") (data (i32.const 1528) "\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 1580) "<") - (data (i32.const 1592) "\01\00\00\00$\00\00\00V\00a\00l\00u\00e\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") - (data (i32.const 1644) "\1c") - (data (i32.const 1656) "\01\00\00\00\02\00\00\00-") - (data (i32.const 1676) "\1c") - (data (i32.const 1688) "\01\00\00\00\02\00\00\00+") - (data (i32.const 1708) "|") - (data (i32.const 1720) "\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006") - (data (i32.const 1836) "<") - (data (i32.const 1848) "\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s") - (data (i32.const 1900) "\1c") - (data (i32.const 1912) "\01\00\00\00\02\00\00\000") - (data (i32.const 1932) "\\") - (data (i32.const 1944) "\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") + (data (i32.const 1580) "\1c") + (data (i32.const 1592) "\01\00\00\00\02\00\00\00-") + (data (i32.const 1612) "\1c") + (data (i32.const 1624) "\01\00\00\00\02\00\00\00+") + (data (i32.const 1644) "|") + (data (i32.const 1656) "\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006") + (data (i32.const 1772) "<") + (data (i32.const 1784) "\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s") + (data (i32.const 1836) "\1c") + (data (i32.const 1848) "\01\00\00\00\02\00\00\000") + (data (i32.const 1868) "\\") + (data (i32.const 1880) "\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") + (data (i32.const 1964) "\1c") + (data (i32.const 1976) "\01") + (data (i32.const 1996) "\1c") + (data (i32.const 2008) "\01\00\00\00\02\00\00\00T") (data (i32.const 2028) "\1c") - (data (i32.const 2040) "\01") + (data (i32.const 2040) "\01\00\00\00\02\00\00\00:") (data (i32.const 2060) "\1c") - (data (i32.const 2072) "\01\00\00\00\02\00\00\00T") + (data (i32.const 2072) "\01\00\00\00\02\00\00\00.") (data (i32.const 2092) "\1c") - (data (i32.const 2104) "\01\00\00\00\02\00\00\00:") - (data (i32.const 2124) "\1c") - (data (i32.const 2136) "\01\00\00\00\02\00\00\00.") - (data (i32.const 2156) "\1c") - (data (i32.const 2168) "\01\00\00\00\02\00\00\00Z") - (data (i32.const 2188) "L") - (data (i32.const 2200) "\01\00\00\000\00\00\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") - (data (i32.const 2268) "L") - (data (i32.const 2280) "\01\00\00\006\00\00\00-\000\000\000\000\000\001\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") - (data (i32.const 2348) "L") - (data (i32.const 2360) "\01\00\00\000\00\00\000\000\000\001\00-\000\004\00-\000\007\00T\002\003\00:\000\006\00:\004\000\00.\000\000\000\00Z") - (data (i32.const 2428) "L") - (data (i32.const 2440) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\000\002\000\00Z") - (data (i32.const 2508) "L") - (data (i32.const 2520) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z") - (data (i32.const 2588) "L") - (data (i32.const 2600) "\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z") - (data (i32.const 2668) "L") - (data (i32.const 2680) "\01\00\00\000\00\00\009\009\009\009\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") - (data (i32.const 2748) "L") - (data (i32.const 2760) "\01\00\00\006\00\00\00+\000\001\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") - (data (i32.const 2828) "L") - (data (i32.const 2840) "\01\00\00\006\00\00\00-\000\000\000\000\002\002\00-\000\006\00-\001\006\00T\001\007\00:\001\003\00:\005\000\00.\007\007\004\00Z") - (data (i32.const 2908) ",") - (data (i32.const 2920) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") - (data (i32.const 2956) ",") - (data (i32.const 2968) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") - (data (i32.const 3004) ",") - (data (i32.const 3016) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 3052) "|") - (data (i32.const 3064) "\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") - (data (i32.const 3180) ",") - (data (i32.const 3192) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") - (data (i32.const 3228) ",") - (data (i32.const 3240) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") - (data (i32.const 3276) ",") - (data (i32.const 3288) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002") - (data (i32.const 3324) ",") - (data (i32.const 3336) "\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002") - (data (i32.const 3372) "<") - (data (i32.const 3384) "\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006") - (data (i32.const 3436) "L") - (data (i32.const 3448) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") - (data (i32.const 3516) "L") - (data (i32.const 3528) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") - (data (i32.const 3596) "L") - (data (i32.const 3608) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") - (data (i32.const 3676) "L") - (data (i32.const 3688) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") - (data (i32.const 3756) "L") - (data (i32.const 3768) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") - (data (i32.const 3836) "L") - (data (i32.const 3848) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z") - (data (i32.const 3920) "\06\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 3948) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") + (data (i32.const 2104) "\01\00\00\00\02\00\00\00Z") + (data (i32.const 2124) "L") + (data (i32.const 2136) "\01\00\00\000\00\00\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 2204) "L") + (data (i32.const 2216) "\01\00\00\006\00\00\00-\000\000\000\000\000\001\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 2284) "L") + (data (i32.const 2296) "\01\00\00\000\00\00\000\000\000\001\00-\000\004\00-\000\007\00T\002\003\00:\000\006\00:\004\000\00.\000\000\000\00Z") + (data (i32.const 2364) "L") + (data (i32.const 2376) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\000\002\000\00Z") + (data (i32.const 2444) "L") + (data (i32.const 2456) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z") + (data (i32.const 2524) "L") + (data (i32.const 2536) "\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z") + (data (i32.const 2604) "L") + (data (i32.const 2616) "\01\00\00\000\00\00\009\009\009\009\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 2684) "L") + (data (i32.const 2696) "\01\00\00\006\00\00\00+\000\001\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 2764) "L") + (data (i32.const 2776) "\01\00\00\006\00\00\00-\000\000\000\000\002\002\00-\000\006\00-\001\006\00T\001\007\00:\001\003\00:\005\000\00.\007\007\004\00Z") + (data (i32.const 2844) ",") + (data (i32.const 2856) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") + (data (i32.const 2892) ",") + (data (i32.const 2904) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 2940) ",") + (data (i32.const 2952) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 2988) "|") + (data (i32.const 3000) "\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") + (data (i32.const 3116) ",") + (data (i32.const 3128) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") + (data (i32.const 3164) ",") + (data (i32.const 3176) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") + (data (i32.const 3212) ",") + (data (i32.const 3224) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002") + (data (i32.const 3260) ",") + (data (i32.const 3272) "\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002") + (data (i32.const 3308) "<") + (data (i32.const 3320) "\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006") + (data (i32.const 3372) "L") + (data (i32.const 3384) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") + (data (i32.const 3452) "L") + (data (i32.const 3464) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") + (data (i32.const 3532) "L") + (data (i32.const 3544) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3612) "L") + (data (i32.const 3624) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3692) "L") + (data (i32.const 3704) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 3772) "L") + (data (i32.const 3784) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z") + (data (i32.const 3856) "\06\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 3884) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) @@ -116,7 +114,7 @@ (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/memory/__stack_pointer (mut i32) (i32.const 20356)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20292)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -322,17 +320,15 @@ (local $1 i32) i32.const 1392 call $~lib/rt/itcms/__visit - i32.const 1600 - call $~lib/rt/itcms/__visit - i32.const 2976 + i32.const 2912 call $~lib/rt/itcms/__visit - i32.const 3072 + i32.const 3008 call $~lib/rt/itcms/__visit i32.const 1200 call $~lib/rt/itcms/__visit i32.const 1104 call $~lib/rt/itcms/__visit - i32.const 1952 + i32.const 1888 call $~lib/rt/itcms/__visit global.get $~lib/rt/itcms/pinSpace local.tee $1 @@ -444,7 +440,7 @@ if i32.const 0 local.get $0 - i32.const 20356 + i32.const 20292 i32.lt_u local.get $0 i32.load offset=8 @@ -490,7 +486,7 @@ i32.const 1 else local.get $1 - i32.const 3920 + i32.const 3856 i32.load i32.gt_u if @@ -504,7 +500,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 3924 + i32.const 3860 i32.add i32.load i32.const 32 @@ -1078,10 +1074,10 @@ if unreachable end - i32.const 20368 + i32.const 20304 i32.const 0 i32.store - i32.const 21936 + i32.const 21872 i32.const 0 i32.store loop $for-loop|0 @@ -1092,7 +1088,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 20368 + i32.const 20304 i32.add i32.const 0 i32.store offset=4 @@ -1110,7 +1106,7 @@ i32.add i32.const 2 i32.shl - i32.const 20368 + i32.const 20304 i32.add i32.const 0 i32.store offset=96 @@ -1128,13 +1124,13 @@ br $for-loop|0 end end - i32.const 20368 - i32.const 21940 + i32.const 20304 + i32.const 21876 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 20368 + i32.const 20304 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -1213,7 +1209,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 20356 + i32.const 20292 i32.lt_u if local.get $0 @@ -1303,7 +1299,7 @@ unreachable end local.get $0 - i32.const 20356 + i32.const 20292 i32.lt_u if local.get $0 @@ -1326,7 +1322,7 @@ i32.const 4 i32.add local.tee $1 - i32.const 20356 + i32.const 20292 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -2131,22 +2127,6 @@ call $~lib/date/Date#setTime ) (func $~lib/date/Date#setUTCSeconds (param $0 i32) (param $1 i32) - i32.const 1 - local.get $1 - i32.const 59 - i32.gt_s - local.get $1 - i32.const 0 - i32.lt_s - select - if - i32.const 1600 - i32.const 1152 - i32.const 132 - i32.const 38 - call $~lib/builtins/abort - unreachable - end local.get $0 local.get $0 i64.load offset=16 @@ -2161,22 +2141,6 @@ call $~lib/date/Date#setTime ) (func $~lib/date/Date#setUTCMinutes (param $0 i32) (param $1 i32) - i32.const 1 - local.get $1 - i32.const 59 - i32.gt_s - local.get $1 - i32.const 0 - i32.lt_s - select - if - i32.const 1600 - i32.const 1152 - i32.const 137 - i32.const 38 - call $~lib/builtins/abort - unreachable - end local.get $0 local.get $0 i64.load offset=16 @@ -2191,22 +2155,6 @@ call $~lib/date/Date#setTime ) (func $~lib/date/Date#setUTCHours (param $0 i32) (param $1 i32) - i32.const 1 - local.get $1 - i32.const 23 - i32.gt_s - local.get $1 - i32.const 0 - i32.lt_s - select - if - i32.const 1600 - i32.const 1152 - i32.const 142 - i32.const 34 - call $~lib/builtins/abort - unreachable - end local.get $0 local.get $0 i64.load offset=16 @@ -2221,9 +2169,7 @@ call $~lib/date/Date#setTime ) (func $~lib/date/Date#setUTCDate (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) - (local $4 i64) + (local $2 i64) local.get $1 local.get $0 i32.load offset=8 @@ -2231,65 +2177,15 @@ if return end - i32.const 1 - local.get $1 - i32.const 0 - i32.const 1 local.get $0 - i32.load + local.get $0 + i64.load offset=16 local.tee $2 - i32.const 400 - i32.rem_s - i32.eqz local.get $2 - i32.const 100 - i32.rem_s - select local.get $2 - i32.const 3 - i32.and - select - i32.const 0 - i32.ne - i32.const 28 - i32.add - local.get $0 - i32.load offset=4 - local.tee $3 - i32.const 8 - i32.ge_s - local.get $3 - i32.add - i32.const 1 - i32.and - i32.const 30 - i32.add - local.get $3 - i32.const 2 - i32.eq - select - i32.gt_s - local.get $1 - i32.const 1 - i32.lt_s - select - if - i32.const 1600 - i32.const 1152 - i32.const 150 - i32.const 52 - call $~lib/builtins/abort - unreachable - end - local.get $0 - local.get $0 - i64.load offset=16 - local.tee $4 - local.get $4 - local.get $4 i64.const 86399999 i64.sub - local.get $4 + local.get $2 i64.const 0 i64.ge_s select @@ -2298,8 +2194,10 @@ i64.const 86400000 i64.mul i64.sub - local.get $2 - local.get $3 + local.get $0 + i32.load + local.get $0 + i32.load offset=4 local.get $1 call $~lib/date/daysSinceEpoch i64.extend_i32_s @@ -2317,22 +2215,6 @@ if return end - i32.const 1 - local.get $1 - i32.const 12 - i32.gt_s - local.get $1 - i32.const 1 - i32.lt_s - select - if - i32.const 1600 - i32.const 1152 - i32.const 157 - i32.const 34 - call $~lib/builtins/abort - unreachable - end local.get $0 local.get $0 i64.load offset=16 @@ -2422,7 +2304,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - i32.const 1920 + i32.const 1856 local.set $0 br $__inlined_func$~lib/util/number/itoa32 end @@ -2732,7 +2614,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - i32.const 2048 + i32.const 1984 local.set $0 br $__inlined_func$~lib/string/String#concat end @@ -3045,8 +2927,8 @@ i32.const 268435455 i32.gt_u if - i32.const 2976 - i32.const 3024 + i32.const 2912 + i32.const 2960 i32.const 14 i32.const 48 call $~lib/builtins/abort @@ -3490,11 +3372,11 @@ ) (func $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 3972 + i32.const 3908 i32.lt_s if - i32.const 20384 - i32.const 20432 + i32.const 20320 + i32.const 20368 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3568,8 +3450,8 @@ if global.get $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 1664 - i32.const 1696 + i32.const 1600 + i32.const 1632 local.get $2 select local.tee $2 @@ -3588,7 +3470,7 @@ local.get $1 i32.store offset=8 global.get $~lib/memory/__stack_pointer - i32.const 1920 + i32.const 1856 i32.store offset=12 local.get $1 i32.const 6 @@ -3611,7 +3493,7 @@ local.get $1 i32.store global.get $~lib/memory/__stack_pointer - i32.const 1920 + i32.const 1856 i32.store offset=8 local.get $1 i32.const 4 @@ -3620,10 +3502,10 @@ i32.store offset=16 end global.get $~lib/memory/__stack_pointer - i32.const 1664 + i32.const 1600 i32.store offset=100 local.get $1 - i32.const 1664 + i32.const 1600 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3637,7 +3519,7 @@ local.get $2 i32.store offset=104 global.get $~lib/memory/__stack_pointer - i32.const 1920 + i32.const 1856 i32.store offset=108 local.get $2 i32.const 2 @@ -3654,10 +3536,10 @@ local.get $1 i32.store offset=84 global.get $~lib/memory/__stack_pointer - i32.const 1664 + i32.const 1600 i32.store offset=88 local.get $1 - i32.const 1664 + i32.const 1600 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3671,7 +3553,7 @@ local.get $2 i32.store offset=84 global.get $~lib/memory/__stack_pointer - i32.const 1920 + i32.const 1856 i32.store offset=92 local.get $2 i32.const 2 @@ -3688,10 +3570,10 @@ local.get $1 i32.store offset=68 global.get $~lib/memory/__stack_pointer - i32.const 2080 + i32.const 2016 i32.store offset=72 local.get $1 - i32.const 2080 + i32.const 2016 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3705,7 +3587,7 @@ local.get $2 i32.store offset=68 global.get $~lib/memory/__stack_pointer - i32.const 1920 + i32.const 1856 i32.store offset=76 local.get $2 i32.const 2 @@ -3722,10 +3604,10 @@ local.get $1 i32.store offset=52 global.get $~lib/memory/__stack_pointer - i32.const 2112 + i32.const 2048 i32.store offset=56 local.get $1 - i32.const 2112 + i32.const 2048 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3739,7 +3621,7 @@ local.get $2 i32.store offset=52 global.get $~lib/memory/__stack_pointer - i32.const 1920 + i32.const 1856 i32.store offset=60 local.get $2 i32.const 2 @@ -3756,10 +3638,10 @@ local.get $1 i32.store offset=36 global.get $~lib/memory/__stack_pointer - i32.const 2112 + i32.const 2048 i32.store offset=40 local.get $1 - i32.const 2112 + i32.const 2048 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3773,7 +3655,7 @@ local.get $2 i32.store offset=36 global.get $~lib/memory/__stack_pointer - i32.const 1920 + i32.const 1856 i32.store offset=44 local.get $2 i32.const 2 @@ -3790,10 +3672,10 @@ local.get $1 i32.store offset=12 global.get $~lib/memory/__stack_pointer - i32.const 2144 + i32.const 2080 i32.store offset=24 local.get $1 - i32.const 2144 + i32.const 2080 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3807,7 +3689,7 @@ local.get $0 i32.store offset=12 global.get $~lib/memory/__stack_pointer - i32.const 1920 + i32.const 1856 i32.store offset=28 local.get $0 i32.const 3 @@ -3824,10 +3706,10 @@ local.get $0 i32.store global.get $~lib/memory/__stack_pointer - i32.const 2176 + i32.const 2112 i32.store offset=4 local.get $0 - i32.const 2176 + i32.const 2112 call $~lib/string/String.__concat global.get $~lib/memory/__stack_pointer i32.const 112 @@ -3911,7 +3793,7 @@ i32.store offset=4 local.get $0 i32.load offset=4 - i32.const 2048 + i32.const 1984 i32.store br $folding-inner1 end @@ -4020,10 +3902,10 @@ call $~lib/array/Array<~lib/string/String>#push else global.get $~lib/memory/__stack_pointer - i32.const 2048 + i32.const 1984 i32.store offset=20 local.get $2 - i32.const 2048 + i32.const 1984 call $~lib/array/Array<~lib/string/String>#push end local.get $9 @@ -4077,10 +3959,10 @@ call $~lib/array/Array<~lib/string/String>#push else global.get $~lib/memory/__stack_pointer - i32.const 2048 + i32.const 1984 i32.store offset=20 local.get $2 - i32.const 2048 + i32.const 1984 call $~lib/array/Array<~lib/string/String>#push end global.get $~lib/memory/__stack_pointer @@ -4134,10 +4016,10 @@ local.get $0 local.set $1 global.get $~lib/memory/__stack_pointer - i32.const 2080 + i32.const 2016 i32.store local.get $0 - i32.const 2080 + i32.const 2016 i32.const 0 call $~lib/string/String#indexOf local.tee $2 @@ -4161,11 +4043,11 @@ local.tee $0 i32.store offset=8 global.get $~lib/memory/__stack_pointer - i32.const 2112 + i32.const 2048 i32.store global.get $~lib/memory/__stack_pointer local.get $0 - i32.const 2112 + i32.const 2048 call $~lib/string/String#split local.tee $0 i32.store offset=12 @@ -4196,10 +4078,10 @@ local.tee $0 i32.store offset=20 global.get $~lib/memory/__stack_pointer - i32.const 2144 + i32.const 2080 i32.store local.get $0 - i32.const 2144 + i32.const 2080 i32.const 0 call $~lib/string/String#indexOf local.tee $2 @@ -4237,11 +4119,11 @@ end end global.get $~lib/memory/__stack_pointer - i32.const 1664 + i32.const 1600 i32.store global.get $~lib/memory/__stack_pointer local.get $1 - i32.const 1664 + i32.const 1600 call $~lib/string/String#split local.tee $0 i32.store offset=24 @@ -4416,7 +4298,7 @@ memory.size i32.const 16 i32.shl - i32.const 20356 + i32.const 20292 i32.sub i32.const 1 i32.shr_u @@ -4717,6 +4599,56 @@ call $~lib/builtins/abort unreachable end + local.get $0 + i32.const 2000 + call $~lib/date/Date#setUTCMilliseconds + local.get $0 + call $~lib/date/Date#getUTCMilliseconds + if + i32.const 0 + i32.const 1056 + i32.const 62 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i64.load offset=16 + i64.const 399464523965000 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 63 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const -2000 + call $~lib/date/Date#setUTCMilliseconds + local.get $0 + call $~lib/date/Date#getUTCMilliseconds + if + i32.const 0 + i32.const 1056 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i64.load offset=16 + i64.const 399464523963000 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 66 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i64.const 372027318331986 call $~lib/date/Date#constructor @@ -4729,7 +4661,7 @@ if i32.const 0 i32.const 1056 - i32.const 65 + i32.const 72 i32.const 3 call $~lib/builtins/abort unreachable @@ -4744,7 +4676,7 @@ if i32.const 0 i32.const 1056 - i32.const 67 + i32.const 74 i32.const 3 call $~lib/builtins/abort unreachable @@ -4759,7 +4691,7 @@ if i32.const 0 i32.const 1056 - i32.const 69 + i32.const 76 i32.const 3 call $~lib/builtins/abort unreachable @@ -4774,7 +4706,7 @@ if i32.const 0 i32.const 1056 - i32.const 72 + i32.const 79 i32.const 3 call $~lib/builtins/abort unreachable @@ -4789,7 +4721,7 @@ if i32.const 0 i32.const 1056 - i32.const 74 + i32.const 81 i32.const 3 call $~lib/builtins/abort unreachable @@ -4806,7 +4738,7 @@ if i32.const 0 i32.const 1056 - i32.const 80 + i32.const 87 i32.const 3 call $~lib/builtins/abort unreachable @@ -4821,7 +4753,7 @@ if i32.const 0 i32.const 1056 - i32.const 82 + i32.const 89 i32.const 3 call $~lib/builtins/abort unreachable @@ -4836,7 +4768,7 @@ if i32.const 0 i32.const 1056 - i32.const 84 + i32.const 91 i32.const 3 call $~lib/builtins/abort unreachable @@ -4851,7 +4783,7 @@ if i32.const 0 i32.const 1056 - i32.const 87 + i32.const 94 i32.const 3 call $~lib/builtins/abort unreachable @@ -4866,7 +4798,7 @@ if i32.const 0 i32.const 1056 - i32.const 89 + i32.const 96 i32.const 3 call $~lib/builtins/abort unreachable @@ -4883,7 +4815,7 @@ if i32.const 0 i32.const 1056 - i32.const 95 + i32.const 102 i32.const 3 call $~lib/builtins/abort unreachable @@ -4898,7 +4830,7 @@ if i32.const 0 i32.const 1056 - i32.const 97 + i32.const 104 i32.const 3 call $~lib/builtins/abort unreachable @@ -4913,7 +4845,7 @@ if i32.const 0 i32.const 1056 - i32.const 99 + i32.const 106 i32.const 3 call $~lib/builtins/abort unreachable @@ -4928,7 +4860,7 @@ if i32.const 0 i32.const 1056 - i32.const 102 + i32.const 109 i32.const 3 call $~lib/builtins/abort unreachable @@ -4943,7 +4875,7 @@ if i32.const 0 i32.const 1056 - i32.const 104 + i32.const 111 i32.const 3 call $~lib/builtins/abort unreachable @@ -4960,7 +4892,7 @@ if i32.const 0 i32.const 1056 - i32.const 110 + i32.const 117 i32.const 3 call $~lib/builtins/abort unreachable @@ -4972,7 +4904,7 @@ if i32.const 0 i32.const 1056 - i32.const 111 + i32.const 118 i32.const 3 call $~lib/builtins/abort unreachable @@ -4987,7 +4919,7 @@ if i32.const 0 i32.const 1056 - i32.const 115 + i32.const 122 i32.const 3 call $~lib/builtins/abort unreachable @@ -5002,7 +4934,7 @@ if i32.const 0 i32.const 1056 - i32.const 117 + i32.const 124 i32.const 3 call $~lib/builtins/abort unreachable @@ -5041,7 +4973,7 @@ if i32.const 0 i32.const 1056 - i32.const 135 + i32.const 142 i32.const 3 call $~lib/builtins/abort unreachable @@ -5053,7 +4985,7 @@ if i32.const 0 i32.const 1056 - i32.const 136 + i32.const 143 i32.const 3 call $~lib/builtins/abort unreachable @@ -5065,7 +4997,7 @@ if i32.const 0 i32.const 1056 - i32.const 137 + i32.const 144 i32.const 3 call $~lib/builtins/abort unreachable @@ -5077,7 +5009,7 @@ if i32.const 0 i32.const 1056 - i32.const 138 + i32.const 145 i32.const 3 call $~lib/builtins/abort unreachable @@ -5089,7 +5021,7 @@ if i32.const 0 i32.const 1056 - i32.const 139 + i32.const 146 i32.const 3 call $~lib/builtins/abort unreachable @@ -5109,7 +5041,7 @@ if i32.const 0 i32.const 1056 - i32.const 143 + i32.const 150 i32.const 3 call $~lib/builtins/abort unreachable @@ -5124,7 +5056,7 @@ if i32.const 0 i32.const 1056 - i32.const 145 + i32.const 152 i32.const 3 call $~lib/builtins/abort unreachable @@ -5139,7 +5071,7 @@ if i32.const 0 i32.const 1056 - i32.const 148 + i32.const 155 i32.const 3 call $~lib/builtins/abort unreachable @@ -5154,7 +5086,7 @@ if i32.const 0 i32.const 1056 - i32.const 151 + i32.const 158 i32.const 3 call $~lib/builtins/abort unreachable @@ -5169,7 +5101,7 @@ if i32.const 0 i32.const 1056 - i32.const 154 + i32.const 161 i32.const 3 call $~lib/builtins/abort unreachable @@ -5184,7 +5116,47 @@ if i32.const 0 i32.const 1056 - i32.const 157 + i32.const 164 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 123814991274 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + i32.const -2208 + call $~lib/date/Date#setUTCDate + local.get $0 + i64.load offset=16 + i64.const -67301808726 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 168 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 123814991274 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + i32.const 2208 + call $~lib/date/Date#setUTCDate + local.get $0 + i64.load offset=16 + i64.const 314240591274 + i64.ne + if + i32.const 0 + i32.const 1056 + i32.const 172 i32.const 3 call $~lib/builtins/abort unreachable @@ -5201,7 +5173,7 @@ if i32.const 0 i32.const 1056 - i32.const 163 + i32.const 178 i32.const 3 call $~lib/builtins/abort unreachable @@ -5216,7 +5188,7 @@ if i32.const 0 i32.const 1056 - i32.const 165 + i32.const 180 i32.const 3 call $~lib/builtins/abort unreachable @@ -5231,7 +5203,7 @@ if i32.const 0 i32.const 1056 - i32.const 167 + i32.const 182 i32.const 3 call $~lib/builtins/abort unreachable @@ -5254,7 +5226,7 @@ if i32.const 0 i32.const 1056 - i32.const 176 + i32.const 191 i32.const 3 call $~lib/builtins/abort unreachable @@ -5269,7 +5241,7 @@ if i32.const 0 i32.const 1056 - i32.const 178 + i32.const 193 i32.const 3 call $~lib/builtins/abort unreachable @@ -5284,7 +5256,7 @@ if i32.const 0 i32.const 1056 - i32.const 180 + i32.const 195 i32.const 3 call $~lib/builtins/abort unreachable @@ -5301,16 +5273,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2208 + i32.const 2144 i32.store offset=8 local.get $0 - i32.const 2208 + i32.const 2144 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 186 + i32.const 201 i32.const 3 call $~lib/builtins/abort unreachable @@ -5327,16 +5299,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2288 + i32.const 2224 i32.store offset=8 local.get $0 - i32.const 2288 + i32.const 2224 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 188 + i32.const 203 i32.const 3 call $~lib/builtins/abort unreachable @@ -5353,16 +5325,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2368 + i32.const 2304 i32.store offset=8 local.get $0 - i32.const 2368 + i32.const 2304 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 190 + i32.const 205 i32.const 3 call $~lib/builtins/abort unreachable @@ -5379,16 +5351,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2448 + i32.const 2384 i32.store offset=8 local.get $0 - i32.const 2448 + i32.const 2384 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 192 + i32.const 207 i32.const 3 call $~lib/builtins/abort unreachable @@ -5405,16 +5377,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2528 + i32.const 2464 i32.store offset=8 local.get $0 - i32.const 2528 + i32.const 2464 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 194 + i32.const 209 i32.const 3 call $~lib/builtins/abort unreachable @@ -5431,16 +5403,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2608 + i32.const 2544 i32.store offset=8 local.get $0 - i32.const 2608 + i32.const 2544 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 196 + i32.const 211 i32.const 3 call $~lib/builtins/abort unreachable @@ -5457,16 +5429,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2688 + i32.const 2624 i32.store offset=8 local.get $0 - i32.const 2688 + i32.const 2624 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 198 + i32.const 213 i32.const 3 call $~lib/builtins/abort unreachable @@ -5483,16 +5455,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2768 + i32.const 2704 i32.store offset=8 local.get $0 - i32.const 2768 + i32.const 2704 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 200 + i32.const 215 i32.const 3 call $~lib/builtins/abort unreachable @@ -5509,25 +5481,25 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2848 + i32.const 2784 i32.store offset=8 local.get $0 - i32.const 2848 + i32.const 2784 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 202 + i32.const 217 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2928 + i32.const 2864 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2928 + i32.const 2864 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5538,16 +5510,16 @@ if i32.const 0 i32.const 1056 - i32.const 209 + i32.const 224 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3200 + i32.const 3136 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3200 + i32.const 3136 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5558,16 +5530,16 @@ if i32.const 0 i32.const 1056 - i32.const 211 + i32.const 226 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3248 + i32.const 3184 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3248 + i32.const 3184 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5578,15 +5550,15 @@ if i32.const 0 i32.const 1056 - i32.const 213 + i32.const 228 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3296 + i32.const 3232 i32.store offset=8 - i32.const 3296 + i32.const 3232 call $~lib/date/Date.fromString local.set $0 global.get $~lib/memory/__stack_pointer @@ -5595,9 +5567,9 @@ local.get $0 i64.load offset=16 global.get $~lib/memory/__stack_pointer - i32.const 3344 + i32.const 3280 i32.store offset=8 - i32.const 3344 + i32.const 3280 call $~lib/date/Date.fromString local.set $0 global.get $~lib/memory/__stack_pointer @@ -5609,16 +5581,16 @@ if i32.const 0 i32.const 1056 - i32.const 216 + i32.const 231 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3392 + i32.const 3328 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3392 + i32.const 3328 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5629,16 +5601,16 @@ if i32.const 0 i32.const 1056 - i32.const 223 + i32.const 238 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3456 + i32.const 3392 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3456 + i32.const 3392 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5649,16 +5621,16 @@ if i32.const 0 i32.const 1056 - i32.const 227 + i32.const 242 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3536 + i32.const 3472 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3536 + i32.const 3472 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5669,7 +5641,7 @@ if i32.const 0 i32.const 1056 - i32.const 231 + i32.const 246 i32.const 3 call $~lib/builtins/abort unreachable @@ -5691,7 +5663,7 @@ if i32.const 0 i32.const 1056 - i32.const 239 + i32.const 254 i32.const 3 call $~lib/builtins/abort unreachable @@ -5703,7 +5675,7 @@ if i32.const 0 i32.const 1056 - i32.const 240 + i32.const 255 i32.const 3 call $~lib/builtins/abort unreachable @@ -5715,7 +5687,7 @@ if i32.const 0 i32.const 1056 - i32.const 242 + i32.const 257 i32.const 3 call $~lib/builtins/abort unreachable @@ -5727,7 +5699,7 @@ if i32.const 0 i32.const 1056 - i32.const 243 + i32.const 258 i32.const 3 call $~lib/builtins/abort unreachable @@ -5739,7 +5711,7 @@ if i32.const 0 i32.const 1056 - i32.const 245 + i32.const 260 i32.const 3 call $~lib/builtins/abort unreachable @@ -5751,7 +5723,7 @@ if i32.const 0 i32.const 1056 - i32.const 246 + i32.const 261 i32.const 3 call $~lib/builtins/abort unreachable @@ -5763,7 +5735,7 @@ if i32.const 0 i32.const 1056 - i32.const 248 + i32.const 263 i32.const 3 call $~lib/builtins/abort unreachable @@ -5775,7 +5747,7 @@ if i32.const 0 i32.const 1056 - i32.const 249 + i32.const 264 i32.const 3 call $~lib/builtins/abort unreachable @@ -5787,16 +5759,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3616 + i32.const 3552 i32.store offset=8 local.get $0 - i32.const 3616 + i32.const 3552 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 251 + i32.const 266 i32.const 3 call $~lib/builtins/abort unreachable @@ -5808,16 +5780,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3696 + i32.const 3632 i32.store offset=8 local.get $0 - i32.const 3696 + i32.const 3632 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 252 + i32.const 267 i32.const 3 call $~lib/builtins/abort unreachable @@ -5839,7 +5811,7 @@ if i32.const 0 i32.const 1056 - i32.const 257 + i32.const 272 i32.const 3 call $~lib/builtins/abort unreachable @@ -5851,7 +5823,7 @@ if i32.const 0 i32.const 1056 - i32.const 258 + i32.const 273 i32.const 3 call $~lib/builtins/abort unreachable @@ -5863,7 +5835,7 @@ if i32.const 0 i32.const 1056 - i32.const 259 + i32.const 274 i32.const 3 call $~lib/builtins/abort unreachable @@ -5873,7 +5845,7 @@ if i32.const 0 i32.const 1056 - i32.const 260 + i32.const 275 i32.const 3 call $~lib/builtins/abort unreachable @@ -5883,7 +5855,7 @@ if i32.const 0 i32.const 1056 - i32.const 261 + i32.const 276 i32.const 3 call $~lib/builtins/abort unreachable @@ -5893,7 +5865,7 @@ if i32.const 0 i32.const 1056 - i32.const 262 + i32.const 277 i32.const 3 call $~lib/builtins/abort unreachable @@ -5905,7 +5877,7 @@ if i32.const 0 i32.const 1056 - i32.const 263 + i32.const 278 i32.const 3 call $~lib/builtins/abort unreachable @@ -5917,16 +5889,16 @@ local.get $1 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3776 + i32.const 3712 i32.store offset=8 local.get $1 - i32.const 3776 + i32.const 3712 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 265 + i32.const 280 i32.const 3 call $~lib/builtins/abort unreachable @@ -5938,16 +5910,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3856 + i32.const 3792 i32.store offset=8 local.get $0 - i32.const 3856 + i32.const 3792 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1056 - i32.const 266 + i32.const 281 i32.const 3 call $~lib/builtins/abort unreachable @@ -6043,7 +6015,7 @@ i32.const 0 i32.store i32.const 1 - i32.const 1916 + i32.const 1852 i32.load i32.const 1 i32.shr_u @@ -6104,7 +6076,7 @@ local.get $1 local.get $4 i32.add - i32.const 1920 + i32.const 1856 local.get $3 call $~lib/memory/memory.copy local.get $3 @@ -6117,14 +6089,14 @@ local.get $1 local.get $6 i32.add - i32.const 1920 + i32.const 1856 local.get $2 local.get $6 i32.sub call $~lib/memory/memory.copy else local.get $1 - i32.const 1920 + i32.const 1856 local.get $2 call $~lib/memory/memory.copy end @@ -6207,7 +6179,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - i32.const 2048 + i32.const 1984 return end i32.const 0 @@ -6305,7 +6277,7 @@ i32.ge_u if i32.const 1392 - i32.const 3024 + i32.const 2960 i32.const 92 i32.const 42 call $~lib/builtins/abort @@ -6324,8 +6296,8 @@ local.get $0 i32.eqz if - i32.const 3072 - i32.const 3024 + i32.const 3008 + i32.const 2960 i32.const 96 i32.const 40 call $~lib/builtins/abort diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index acfd8b9f54..b8c4ebdfd9 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -52,11 +52,18 @@ assert(date.getUTCMilliseconds() == 12); date.setUTCMilliseconds(568); assert(date.getUTCMilliseconds() == 568); - // test boundaries + // test in boundaries date.setUTCMilliseconds(0); assert(date.getTime() == 399464523963000); date.setUTCMilliseconds(999); assert(date.getTime() == 399464523963999); + // test out of boundaries + date.setUTCMilliseconds(2000); + assert(date.getUTCMilliseconds() == 0); + assert(date.getTime() == 399464523965000); + date.setUTCMilliseconds(-2000); + assert(date.getUTCMilliseconds() == 0); + assert(date.getTime() == 399464523963000); } // Date#setUTCSeconds ////////////////////////////////////////////////////////////////////////////// @@ -155,6 +162,14 @@ date.setUTCMilliseconds(60 * 60 * 1000 + 1); assert(date.getTime() == 1362117600001); + + date = new Date(123814991274); + date.setUTCDate(-2208); + assert(date.getTime() == -67301808726); + + date = new Date(123814991274); + date.setUTCDate(2208); + assert(date.getTime() == 314240591274); } // Date#setUTCMonth //////////////////////////////////////////////////////////////////////////////// diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 0c7edad64f..496e836c26 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -31,45 +31,44 @@ (data (i32.const 412) ",\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 464) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 492) "<\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 556) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00$\00\00\00V\00a\00l\00u\00e\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 620) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00-\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 652) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00+\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 684) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006\00\00\00\00\00\00\00\00\00") - (data (i32.const 812) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") - (data (i32.const 876) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\000\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 908) "0\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") - (data (i32.const 1308) "\1c\04\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\04\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\000\00a\000\00b\000\00c\000\00d\000\00e\000\00f\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\001\00a\001\00b\001\00c\001\00d\001\00e\001\00f\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\002\00a\002\00b\002\00c\002\00d\002\00e\002\00f\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\003\00a\003\00b\003\00c\003\00d\003\00e\003\00f\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\004\00a\004\00b\004\00c\004\00d\004\00e\004\00f\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\005\00a\005\00b\005\00c\005\00d\005\00e\005\00f\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\006\00a\006\00b\006\00c\006\00d\006\00e\006\00f\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\007\00a\007\00b\007\00c\007\00d\007\00e\007\00f\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\008\00a\008\00b\008\00c\008\00d\008\00e\008\00f\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\009\00a\009\00b\009\00c\009\00d\009\00e\009\00f\00a\000\00a\001\00a\002\00a\003\00a\004\00a\005\00a\006\00a\007\00a\008\00a\009\00a\00a\00a\00b\00a\00c\00a\00d\00a\00e\00a\00f\00b\000\00b\001\00b\002\00b\003\00b\004\00b\005\00b\006\00b\007\00b\008\00b\009\00b\00a\00b\00b\00b\00c\00b\00d\00b\00e\00b\00f\00c\000\00c\001\00c\002\00c\003\00c\004\00c\005\00c\006\00c\007\00c\008\00c\009\00c\00a\00c\00b\00c\00c\00c\00d\00c\00e\00c\00f\00d\000\00d\001\00d\002\00d\003\00d\004\00d\005\00d\006\00d\007\00d\008\00d\009\00d\00a\00d\00b\00d\00c\00d\00d\00d\00e\00d\00f\00e\000\00e\001\00e\002\00e\003\00e\004\00e\005\00e\006\00e\007\00e\008\00e\009\00e\00a\00e\00b\00e\00c\00e\00d\00e\00e\00e\00f\00f\000\00f\001\00f\002\00f\003\00f\004\00f\005\00f\006\00f\007\00f\008\00f\009\00f\00a\00f\00b\00f\00c\00f\00d\00f\00e\00f\00f\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2364) "\\\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\00\00\00\00\00") - (data (i32.const 2460) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2492) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00T\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2524) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00:\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2556) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00.\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2588) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00Z\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2620) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2700) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\000\000\000\000\000\001\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") - (data (i32.const 2780) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\000\000\000\001\00-\000\004\00-\000\007\00T\002\003\00:\000\006\00:\004\000\00.\000\000\000\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2860) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\000\002\000\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2940) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3020) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 3100) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\009\009\009\009\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3180) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\000\001\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 3260) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\000\000\000\000\002\002\00-\000\006\00-\001\006\00T\001\007\00:\001\003\00:\005\000\00.\007\007\004\00Z\00\00\00\00\00\00\00") - (data (i32.const 3340) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002\00\00\00\00\00\00\00\00\00") - (data (i32.const 3388) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") - (data (i32.const 3436) ",\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 3484) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3612) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3660) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004\00\00\00\00\00\00\00\00\00") - (data (i32.const 3708) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00") - (data (i32.const 3756) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3804) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00\00\00\00\00\00\00") - (data (i32.const 3868) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3948) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 4028) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 4108) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 4188) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") - (data (i32.const 4268) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z\00\00\00\00\00\00\00") - (data (i32.const 4352) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") + (data (i32.const 556) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00-\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 588) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00+\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 620) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006\00\00\00\00\00\00\00\00\00") + (data (i32.const 748) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") + (data (i32.const 812) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\000\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 844) "0\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") + (data (i32.const 1244) "\1c\04\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\04\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\000\00a\000\00b\000\00c\000\00d\000\00e\000\00f\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\001\00a\001\00b\001\00c\001\00d\001\00e\001\00f\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\002\00a\002\00b\002\00c\002\00d\002\00e\002\00f\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\003\00a\003\00b\003\00c\003\00d\003\00e\003\00f\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\004\00a\004\00b\004\00c\004\00d\004\00e\004\00f\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\005\00a\005\00b\005\00c\005\00d\005\00e\005\00f\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\006\00a\006\00b\006\00c\006\00d\006\00e\006\00f\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\007\00a\007\00b\007\00c\007\00d\007\00e\007\00f\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\008\00a\008\00b\008\00c\008\00d\008\00e\008\00f\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\009\00a\009\00b\009\00c\009\00d\009\00e\009\00f\00a\000\00a\001\00a\002\00a\003\00a\004\00a\005\00a\006\00a\007\00a\008\00a\009\00a\00a\00a\00b\00a\00c\00a\00d\00a\00e\00a\00f\00b\000\00b\001\00b\002\00b\003\00b\004\00b\005\00b\006\00b\007\00b\008\00b\009\00b\00a\00b\00b\00b\00c\00b\00d\00b\00e\00b\00f\00c\000\00c\001\00c\002\00c\003\00c\004\00c\005\00c\006\00c\007\00c\008\00c\009\00c\00a\00c\00b\00c\00c\00c\00d\00c\00e\00c\00f\00d\000\00d\001\00d\002\00d\003\00d\004\00d\005\00d\006\00d\007\00d\008\00d\009\00d\00a\00d\00b\00d\00c\00d\00d\00d\00e\00d\00f\00e\000\00e\001\00e\002\00e\003\00e\004\00e\005\00e\006\00e\007\00e\008\00e\009\00e\00a\00e\00b\00e\00c\00e\00d\00e\00e\00e\00f\00f\000\00f\001\00f\002\00f\003\00f\004\00f\005\00f\006\00f\007\00f\008\00f\009\00f\00a\00f\00b\00f\00c\00f\00d\00f\00e\00f\00f\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2300) "\\\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\00\00\00\00\00") + (data (i32.const 2396) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2428) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00T\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2460) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00:\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2492) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00.\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2524) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00Z\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2556) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2636) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\000\000\000\000\000\001\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") + (data (i32.const 2716) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\000\000\000\001\00-\000\004\00-\000\007\00T\002\003\00:\000\006\00:\004\000\00.\000\000\000\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2796) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\000\002\000\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2876) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2956) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 3036) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\009\009\009\009\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3116) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\000\001\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 3196) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\000\000\000\000\002\002\00-\000\006\00-\001\006\00T\001\007\00:\001\003\00:\005\000\00.\007\007\004\00Z\00\00\00\00\00\00\00") + (data (i32.const 3276) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002\00\00\00\00\00\00\00\00\00") + (data (i32.const 3324) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data (i32.const 3372) ",\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 3420) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3548) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3596) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004\00\00\00\00\00\00\00\00\00") + (data (i32.const 3644) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00") + (data (i32.const 3692) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3740) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00\00\00\00\00\00\00") + (data (i32.const 3804) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3884) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3964) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 4044) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 4124) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") + (data (i32.const 4204) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z\00\00\00\00\00\00\00") + (data (i32.const 4288) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") (table $0 1 funcref) (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) @@ -86,10 +85,10 @@ (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) - (global $~lib/rt/__rtti_base i32 (i32.const 4352)) - (global $~lib/memory/__data_end i32 (i32.const 4404)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20788)) - (global $~lib/memory/__heap_base i32 (i32.const 20788)) + (global $~lib/rt/__rtti_base i32 (i32.const 4288)) + (global $~lib/memory/__data_end i32 (i32.const 4340)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20724)) + (global $~lib/memory/__heap_base i32 (i32.const 20724)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -2892,24 +2891,6 @@ drop ) (func $~lib/date/Date#setUTCSeconds (param $0 i32) (param $1 i32) - local.get $1 - i32.const 0 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $1 - i32.const 59 - i32.gt_s - end - if - i32.const 576 - i32.const 128 - i32.const 132 - i32.const 38 - call $~lib/builtins/abort - unreachable - end local.get $0 local.get $0 i64.load offset=16 @@ -2925,24 +2906,6 @@ drop ) (func $~lib/date/Date#setUTCMinutes (param $0 i32) (param $1 i32) - local.get $1 - i32.const 0 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $1 - i32.const 59 - i32.gt_s - end - if - i32.const 576 - i32.const 128 - i32.const 137 - i32.const 38 - call $~lib/builtins/abort - unreachable - end local.get $0 local.get $0 i64.load offset=16 @@ -2958,24 +2921,6 @@ drop ) (func $~lib/date/Date#setUTCHours (param $0 i32) (param $1 i32) - local.get $1 - i32.const 0 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $1 - i32.const 23 - i32.gt_s - end - if - i32.const 576 - i32.const 128 - i32.const 142 - i32.const 34 - call $~lib/builtins/abort - unreachable - end local.get $0 local.get $0 i64.load offset=16 @@ -2990,61 +2935,12 @@ call $~lib/date/Date#setTime drop ) - (func $~lib/date/daysInMonth (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $1 - i32.const 2 - i32.eq - if (result i32) - i32.const 28 - local.get $0 - local.set $2 - local.get $2 - i32.const 4 - i32.rem_s - i32.const 0 - i32.eq - if (result i32) - local.get $2 - i32.const 100 - i32.rem_s - i32.const 0 - i32.ne - if (result i32) - i32.const 1 - else - local.get $2 - i32.const 400 - i32.rem_s - i32.const 0 - i32.eq - end - else - i32.const 0 - end - i32.const 0 - i32.ne - i32.add - else - i32.const 30 - local.get $1 - local.get $1 - i32.const 8 - i32.ge_s - i32.add - i32.const 1 - i32.and - i32.add - end - ) (func $~lib/date/Date#setUTCDate (param $0 i32) (param $1 i32) - (local $2 i32) - (local $3 i32) + (local $2 i64) + (local $3 i64) (local $4 i64) (local $5 i64) (local $6 i64) - (local $7 i64) - (local $8 i64) local.get $0 i32.load offset=8 local.get $1 @@ -3053,69 +2949,45 @@ return end local.get $0 - i32.load - local.set $2 - local.get $0 - i32.load offset=4 - local.set $3 - local.get $1 - i32.const 1 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $1 - local.get $2 - local.get $3 - call $~lib/date/daysInMonth - i32.gt_s - end - if - i32.const 576 - i32.const 128 - i32.const 150 - i32.const 52 - call $~lib/builtins/abort - unreachable - end - local.get $0 i64.load offset=16 - local.set $5 + local.set $3 i32.const 86400000 i64.extend_i32_s + local.set $2 + local.get $3 + local.get $2 + local.get $3 + local.set $5 + local.get $2 local.set $4 local.get $5 - local.get $4 - local.get $5 - local.set $7 - local.get $4 - local.set $6 - local.get $7 i64.const 0 i64.ge_s if (result i64) - local.get $7 + local.get $5 else - local.get $7 - local.get $6 + local.get $5 + local.get $4 i64.sub i64.const 1 i64.add end - local.get $6 + local.get $4 i64.div_s i64.mul i64.sub - local.set $8 + local.set $6 local.get $0 - local.get $2 - local.get $3 + local.get $0 + i32.load + local.get $0 + i32.load offset=4 local.get $1 call $~lib/date/daysSinceEpoch i64.extend_i32_s i64.const 86400000 i64.mul - local.get $8 + local.get $6 i64.add call $~lib/date/Date#setTime drop @@ -3133,24 +3005,6 @@ if return end - local.get $1 - i32.const 1 - i32.lt_s - if (result i32) - i32.const 1 - else - local.get $1 - i32.const 12 - i32.gt_s - end - if - i32.const 576 - i32.const 128 - i32.const 157 - i32.const 34 - call $~lib/builtins/abort - unreachable - end local.get $0 i64.load offset=16 local.set $3 @@ -3344,14 +3198,14 @@ i32.const 100 i32.rem_u local.set $7 - i32.const 908 + i32.const 844 local.get $6 i32.const 2 i32.shl i32.add i64.load32_u local.set $8 - i32.const 908 + i32.const 844 local.get $7 i32.const 2 i32.shl @@ -3394,7 +3248,7 @@ i32.const 2 i32.sub local.set $2 - i32.const 908 + i32.const 844 local.get $10 i32.const 2 i32.shl @@ -3417,7 +3271,7 @@ i32.const 2 i32.sub local.set $2 - i32.const 908 + i32.const 844 local.get $1 i32.const 2 i32.shl @@ -3467,7 +3321,7 @@ i32.const 1 i32.shl i32.add - i32.const 1328 + i32.const 1264 local.get $1 i32.wrap_i64 i32.const 255 @@ -3489,7 +3343,7 @@ i32.and if local.get $0 - i32.const 1328 + i32.const 1264 local.get $1 i32.wrap_i64 i32.const 6 @@ -3612,7 +3466,7 @@ i32.const 1 i32.shl i32.add - i32.const 2384 + i32.const 2320 local.get $1 local.get $6 i64.and @@ -3648,7 +3502,7 @@ i32.const 1 i32.shl i32.add - i32.const 2384 + i32.const 2320 local.get $1 local.get $6 local.get $4 @@ -5357,8 +5211,8 @@ i32.shr_u i32.gt_u if - i32.const 3408 - i32.const 3456 + i32.const 3344 + i32.const 3392 i32.const 14 i32.const 48 call $~lib/builtins/abort @@ -5837,13 +5691,10 @@ i32.const 368 local.get $0 call $~lib/rt/itcms/__visit - i32.const 576 + i32.const 3344 local.get $0 call $~lib/rt/itcms/__visit - i32.const 3408 - local.get $0 - call $~lib/rt/itcms/__visit - i32.const 3504 + i32.const 3440 local.get $0 call $~lib/rt/itcms/__visit i32.const 176 @@ -5852,10 +5703,10 @@ i32.const 80 local.get $0 call $~lib/rt/itcms/__visit - i32.const 1328 + i32.const 1264 local.get $0 call $~lib/rt/itcms/__visit - i32.const 2384 + i32.const 2320 local.get $0 call $~lib/rt/itcms/__visit ) @@ -5984,8 +5835,8 @@ global.get $~lib/memory/__data_end i32.lt_s if - i32.const 20816 - i32.const 20864 + i32.const 20752 + i32.const 20800 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -6065,9 +5916,9 @@ global.get $~lib/memory/__stack_pointer local.get $3 if (result i32) - i32.const 640 + i32.const 576 else - i32.const 672 + i32.const 608 end local.set $6 global.get $~lib/memory/__stack_pointer @@ -6091,7 +5942,7 @@ i32.store offset=8 local.get $6 i32.const 6 - i32.const 896 + i32.const 832 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6117,7 +5968,7 @@ i32.store local.get $6 i32.const 4 - i32.const 896 + i32.const 832 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6128,7 +5979,7 @@ i32.store offset=16 end local.get $1 - i32.const 640 + i32.const 576 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6150,7 +6001,7 @@ i32.store offset=104 local.get $6 i32.const 2 - i32.const 896 + i32.const 832 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6168,7 +6019,7 @@ local.get $6 i32.store offset=84 local.get $6 - i32.const 640 + i32.const 576 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6190,7 +6041,7 @@ i32.store offset=84 local.get $6 i32.const 2 - i32.const 896 + i32.const 832 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6208,7 +6059,7 @@ local.get $6 i32.store offset=68 local.get $6 - i32.const 2512 + i32.const 2448 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6230,7 +6081,7 @@ i32.store offset=68 local.get $6 i32.const 2 - i32.const 896 + i32.const 832 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6248,7 +6099,7 @@ local.get $6 i32.store offset=52 local.get $6 - i32.const 2544 + i32.const 2480 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6270,7 +6121,7 @@ i32.store offset=52 local.get $6 i32.const 2 - i32.const 896 + i32.const 832 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6288,7 +6139,7 @@ local.get $6 i32.store offset=36 local.get $6 - i32.const 2544 + i32.const 2480 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6310,7 +6161,7 @@ i32.store offset=36 local.get $6 i32.const 2 - i32.const 896 + i32.const 832 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6328,7 +6179,7 @@ local.get $6 i32.store offset=12 local.get $6 - i32.const 2576 + i32.const 2512 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6350,7 +6201,7 @@ i32.store offset=12 local.get $6 i32.const 3 - i32.const 896 + i32.const 832 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6368,7 +6219,7 @@ local.get $6 i32.store local.get $6 - i32.const 2608 + i32.const 2544 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6571,7 +6422,7 @@ i32.store offset=4 local.get $4 i32.load offset=4 - i32.const 2480 + i32.const 2416 i32.store local.get $4 local.set $15 @@ -6640,7 +6491,7 @@ drop else local.get $10 - i32.const 2480 + i32.const 2416 local.set $15 global.get $~lib/memory/__stack_pointer local.get $15 @@ -6720,7 +6571,7 @@ drop else local.get $10 - i32.const 2480 + i32.const 2416 local.set $15 global.get $~lib/memory/__stack_pointer local.get $15 @@ -6781,7 +6632,7 @@ local.get $0 local.set $5 local.get $0 - i32.const 2512 + i32.const 2448 local.set $15 global.get $~lib/memory/__stack_pointer local.get $15 @@ -6812,7 +6663,7 @@ i32.store offset=8 global.get $~lib/memory/__stack_pointer local.get $7 - i32.const 2544 + i32.const 2480 local.set $15 global.get $~lib/memory/__stack_pointer local.get $15 @@ -6851,7 +6702,7 @@ local.tee $9 i32.store offset=20 local.get $9 - i32.const 2576 + i32.const 2512 local.set $15 global.get $~lib/memory/__stack_pointer local.get $15 @@ -6899,7 +6750,7 @@ end global.get $~lib/memory/__stack_pointer local.get $5 - i32.const 640 + i32.const 576 local.set $15 global.get $~lib/memory/__stack_pointer local.get $15 @@ -7529,6 +7380,64 @@ call $~lib/builtins/abort unreachable end + local.get $1 + i32.const 2000 + call $~lib/date/Date#setUTCMilliseconds + local.get $1 + call $~lib/date/Date#getUTCMilliseconds + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 62 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/date/Date#getTime + i64.const 399464523965000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 63 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const -2000 + call $~lib/date/Date#setUTCMilliseconds + local.get $1 + call $~lib/date/Date#getUTCMilliseconds + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 + call $~lib/date/Date#getTime + i64.const 399464523963000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 66 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i32.const 0 i64.const 372027318331986 @@ -7543,7 +7452,7 @@ if i32.const 0 i32.const 32 - i32.const 65 + i32.const 72 i32.const 3 call $~lib/builtins/abort unreachable @@ -7559,7 +7468,7 @@ if i32.const 0 i32.const 32 - i32.const 67 + i32.const 74 i32.const 3 call $~lib/builtins/abort unreachable @@ -7575,7 +7484,7 @@ if i32.const 0 i32.const 32 - i32.const 69 + i32.const 76 i32.const 3 call $~lib/builtins/abort unreachable @@ -7591,7 +7500,7 @@ if i32.const 0 i32.const 32 - i32.const 72 + i32.const 79 i32.const 3 call $~lib/builtins/abort unreachable @@ -7607,7 +7516,7 @@ if i32.const 0 i32.const 32 - i32.const 74 + i32.const 81 i32.const 3 call $~lib/builtins/abort unreachable @@ -7626,7 +7535,7 @@ if i32.const 0 i32.const 32 - i32.const 80 + i32.const 87 i32.const 3 call $~lib/builtins/abort unreachable @@ -7642,7 +7551,7 @@ if i32.const 0 i32.const 32 - i32.const 82 + i32.const 89 i32.const 3 call $~lib/builtins/abort unreachable @@ -7658,7 +7567,7 @@ if i32.const 0 i32.const 32 - i32.const 84 + i32.const 91 i32.const 3 call $~lib/builtins/abort unreachable @@ -7674,7 +7583,7 @@ if i32.const 0 i32.const 32 - i32.const 87 + i32.const 94 i32.const 3 call $~lib/builtins/abort unreachable @@ -7690,7 +7599,7 @@ if i32.const 0 i32.const 32 - i32.const 89 + i32.const 96 i32.const 3 call $~lib/builtins/abort unreachable @@ -7709,7 +7618,7 @@ if i32.const 0 i32.const 32 - i32.const 95 + i32.const 102 i32.const 3 call $~lib/builtins/abort unreachable @@ -7725,7 +7634,7 @@ if i32.const 0 i32.const 32 - i32.const 97 + i32.const 104 i32.const 3 call $~lib/builtins/abort unreachable @@ -7741,7 +7650,7 @@ if i32.const 0 i32.const 32 - i32.const 99 + i32.const 106 i32.const 3 call $~lib/builtins/abort unreachable @@ -7757,7 +7666,7 @@ if i32.const 0 i32.const 32 - i32.const 102 + i32.const 109 i32.const 3 call $~lib/builtins/abort unreachable @@ -7773,7 +7682,7 @@ if i32.const 0 i32.const 32 - i32.const 104 + i32.const 111 i32.const 3 call $~lib/builtins/abort unreachable @@ -7792,7 +7701,7 @@ if i32.const 0 i32.const 32 - i32.const 110 + i32.const 117 i32.const 3 call $~lib/builtins/abort unreachable @@ -7805,7 +7714,7 @@ if i32.const 0 i32.const 32 - i32.const 111 + i32.const 118 i32.const 3 call $~lib/builtins/abort unreachable @@ -7821,7 +7730,7 @@ if i32.const 0 i32.const 32 - i32.const 115 + i32.const 122 i32.const 3 call $~lib/builtins/abort unreachable @@ -7837,7 +7746,7 @@ if i32.const 0 i32.const 32 - i32.const 117 + i32.const 124 i32.const 3 call $~lib/builtins/abort unreachable @@ -7877,7 +7786,7 @@ if i32.const 0 i32.const 32 - i32.const 135 + i32.const 142 i32.const 3 call $~lib/builtins/abort unreachable @@ -7890,7 +7799,7 @@ if i32.const 0 i32.const 32 - i32.const 136 + i32.const 143 i32.const 3 call $~lib/builtins/abort unreachable @@ -7903,7 +7812,7 @@ if i32.const 0 i32.const 32 - i32.const 137 + i32.const 144 i32.const 3 call $~lib/builtins/abort unreachable @@ -7916,7 +7825,7 @@ if i32.const 0 i32.const 32 - i32.const 138 + i32.const 145 i32.const 3 call $~lib/builtins/abort unreachable @@ -7929,7 +7838,7 @@ if i32.const 0 i32.const 32 - i32.const 139 + i32.const 146 i32.const 3 call $~lib/builtins/abort unreachable @@ -7951,7 +7860,7 @@ if i32.const 0 i32.const 32 - i32.const 143 + i32.const 150 i32.const 3 call $~lib/builtins/abort unreachable @@ -7967,7 +7876,7 @@ if i32.const 0 i32.const 32 - i32.const 145 + i32.const 152 i32.const 3 call $~lib/builtins/abort unreachable @@ -7983,7 +7892,7 @@ if i32.const 0 i32.const 32 - i32.const 148 + i32.const 155 i32.const 3 call $~lib/builtins/abort unreachable @@ -8003,7 +7912,7 @@ if i32.const 0 i32.const 32 - i32.const 151 + i32.const 158 i32.const 3 call $~lib/builtins/abort unreachable @@ -8025,7 +7934,7 @@ if i32.const 0 i32.const 32 - i32.const 154 + i32.const 161 i32.const 3 call $~lib/builtins/abort unreachable @@ -8047,7 +7956,51 @@ if i32.const 0 i32.const 32 - i32.const 157 + i32.const 164 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i64.const 123814991274 + call $~lib/date/Date#constructor + local.tee $1 + i32.store + local.get $1 + i32.const -2208 + call $~lib/date/Date#setUTCDate + local.get $1 + call $~lib/date/Date#getTime + i64.const -67301808726 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 168 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i64.const 123814991274 + call $~lib/date/Date#constructor + local.tee $1 + i32.store + local.get $1 + i32.const 2208 + call $~lib/date/Date#setUTCDate + local.get $1 + call $~lib/date/Date#getTime + i64.const 314240591274 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 32 + i32.const 172 i32.const 3 call $~lib/builtins/abort unreachable @@ -8066,7 +8019,7 @@ if i32.const 0 i32.const 32 - i32.const 163 + i32.const 178 i32.const 3 call $~lib/builtins/abort unreachable @@ -8082,7 +8035,7 @@ if i32.const 0 i32.const 32 - i32.const 165 + i32.const 180 i32.const 3 call $~lib/builtins/abort unreachable @@ -8098,7 +8051,7 @@ if i32.const 0 i32.const 32 - i32.const 167 + i32.const 182 i32.const 3 call $~lib/builtins/abort unreachable @@ -8123,7 +8076,7 @@ if i32.const 0 i32.const 32 - i32.const 176 + i32.const 191 i32.const 3 call $~lib/builtins/abort unreachable @@ -8139,7 +8092,7 @@ if i32.const 0 i32.const 32 - i32.const 178 + i32.const 193 i32.const 3 call $~lib/builtins/abort unreachable @@ -8155,7 +8108,7 @@ if i32.const 0 i32.const 32 - i32.const 180 + i32.const 195 i32.const 3 call $~lib/builtins/abort unreachable @@ -8173,7 +8126,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 2640 + i32.const 2576 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8184,7 +8137,7 @@ if i32.const 0 i32.const 32 - i32.const 186 + i32.const 201 i32.const 3 call $~lib/builtins/abort unreachable @@ -8204,7 +8157,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 2720 + i32.const 2656 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8215,7 +8168,7 @@ if i32.const 0 i32.const 32 - i32.const 188 + i32.const 203 i32.const 3 call $~lib/builtins/abort unreachable @@ -8233,7 +8186,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 2800 + i32.const 2736 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8244,7 +8197,7 @@ if i32.const 0 i32.const 32 - i32.const 190 + i32.const 205 i32.const 3 call $~lib/builtins/abort unreachable @@ -8262,7 +8215,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 2880 + i32.const 2816 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8273,7 +8226,7 @@ if i32.const 0 i32.const 32 - i32.const 192 + i32.const 207 i32.const 3 call $~lib/builtins/abort unreachable @@ -8291,7 +8244,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 2960 + i32.const 2896 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8302,7 +8255,7 @@ if i32.const 0 i32.const 32 - i32.const 194 + i32.const 209 i32.const 3 call $~lib/builtins/abort unreachable @@ -8320,7 +8273,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 3040 + i32.const 2976 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8331,7 +8284,7 @@ if i32.const 0 i32.const 32 - i32.const 196 + i32.const 211 i32.const 3 call $~lib/builtins/abort unreachable @@ -8349,7 +8302,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 3120 + i32.const 3056 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8360,7 +8313,7 @@ if i32.const 0 i32.const 32 - i32.const 198 + i32.const 213 i32.const 3 call $~lib/builtins/abort unreachable @@ -8378,7 +8331,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 3200 + i32.const 3136 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8389,7 +8342,7 @@ if i32.const 0 i32.const 32 - i32.const 200 + i32.const 215 i32.const 3 call $~lib/builtins/abort unreachable @@ -8407,7 +8360,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 3280 + i32.const 3216 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8418,13 +8371,13 @@ if i32.const 0 i32.const 32 - i32.const 202 + i32.const 217 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3360 + i32.const 3296 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8441,13 +8394,13 @@ if i32.const 0 i32.const 32 - i32.const 209 + i32.const 224 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3632 + i32.const 3568 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8464,13 +8417,13 @@ if i32.const 0 i32.const 32 - i32.const 211 + i32.const 226 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3680 + i32.const 3616 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8487,12 +8440,12 @@ if i32.const 0 i32.const 32 - i32.const 213 + i32.const 228 i32.const 3 call $~lib/builtins/abort unreachable end - i32.const 3728 + i32.const 3664 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8505,7 +8458,7 @@ i32.store offset=4 local.get $8 call $~lib/date/Date#getTime - i32.const 3776 + i32.const 3712 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8523,13 +8476,13 @@ if i32.const 0 i32.const 32 - i32.const 216 + i32.const 231 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3824 + i32.const 3760 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8546,13 +8499,13 @@ if i32.const 0 i32.const 32 - i32.const 223 + i32.const 238 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3888 + i32.const 3824 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8569,13 +8522,13 @@ if i32.const 0 i32.const 32 - i32.const 227 + i32.const 242 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3968 + i32.const 3904 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8592,7 +8545,7 @@ if i32.const 0 i32.const 32 - i32.const 231 + i32.const 246 i32.const 3 call $~lib/builtins/abort unreachable @@ -8617,7 +8570,7 @@ if i32.const 0 i32.const 32 - i32.const 239 + i32.const 254 i32.const 3 call $~lib/builtins/abort unreachable @@ -8630,7 +8583,7 @@ if i32.const 0 i32.const 32 - i32.const 240 + i32.const 255 i32.const 3 call $~lib/builtins/abort unreachable @@ -8643,7 +8596,7 @@ if i32.const 0 i32.const 32 - i32.const 242 + i32.const 257 i32.const 3 call $~lib/builtins/abort unreachable @@ -8656,7 +8609,7 @@ if i32.const 0 i32.const 32 - i32.const 243 + i32.const 258 i32.const 3 call $~lib/builtins/abort unreachable @@ -8669,7 +8622,7 @@ if i32.const 0 i32.const 32 - i32.const 245 + i32.const 260 i32.const 3 call $~lib/builtins/abort unreachable @@ -8682,7 +8635,7 @@ if i32.const 0 i32.const 32 - i32.const 246 + i32.const 261 i32.const 3 call $~lib/builtins/abort unreachable @@ -8695,7 +8648,7 @@ if i32.const 0 i32.const 32 - i32.const 248 + i32.const 263 i32.const 3 call $~lib/builtins/abort unreachable @@ -8708,7 +8661,7 @@ if i32.const 0 i32.const 32 - i32.const 249 + i32.const 264 i32.const 3 call $~lib/builtins/abort unreachable @@ -8720,7 +8673,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4048 + i32.const 3984 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8731,7 +8684,7 @@ if i32.const 0 i32.const 32 - i32.const 251 + i32.const 266 i32.const 3 call $~lib/builtins/abort unreachable @@ -8743,7 +8696,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4128 + i32.const 4064 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8754,7 +8707,7 @@ if i32.const 0 i32.const 32 - i32.const 252 + i32.const 267 i32.const 3 call $~lib/builtins/abort unreachable @@ -8783,7 +8736,7 @@ if i32.const 0 i32.const 32 - i32.const 257 + i32.const 272 i32.const 3 call $~lib/builtins/abort unreachable @@ -8796,7 +8749,7 @@ if i32.const 0 i32.const 32 - i32.const 258 + i32.const 273 i32.const 3 call $~lib/builtins/abort unreachable @@ -8809,7 +8762,7 @@ if i32.const 0 i32.const 32 - i32.const 259 + i32.const 274 i32.const 3 call $~lib/builtins/abort unreachable @@ -8822,7 +8775,7 @@ if i32.const 0 i32.const 32 - i32.const 260 + i32.const 275 i32.const 3 call $~lib/builtins/abort unreachable @@ -8835,7 +8788,7 @@ if i32.const 0 i32.const 32 - i32.const 261 + i32.const 276 i32.const 3 call $~lib/builtins/abort unreachable @@ -8848,7 +8801,7 @@ if i32.const 0 i32.const 32 - i32.const 262 + i32.const 277 i32.const 3 call $~lib/builtins/abort unreachable @@ -8861,7 +8814,7 @@ if i32.const 0 i32.const 32 - i32.const 263 + i32.const 278 i32.const 3 call $~lib/builtins/abort unreachable @@ -8873,7 +8826,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4208 + i32.const 4144 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8884,7 +8837,7 @@ if i32.const 0 i32.const 32 - i32.const 265 + i32.const 280 i32.const 3 call $~lib/builtins/abort unreachable @@ -8896,7 +8849,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4288 + i32.const 4224 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8907,7 +8860,7 @@ if i32.const 0 i32.const 32 - i32.const 266 + i32.const 281 i32.const 3 call $~lib/builtins/abort unreachable @@ -9035,8 +8988,8 @@ i32.gt_s end if - i32.const 704 - i32.const 832 + i32.const 640 + i32.const 768 i32.const 373 i32.const 5 call $~lib/builtins/abort @@ -9045,7 +8998,7 @@ local.get $0 i32.eqz if - i32.const 896 + i32.const 832 local.set $8 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -9317,7 +9270,7 @@ i32.const 0 i32.eq if - i32.const 2480 + i32.const 2416 local.set $6 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -9433,7 +9386,7 @@ local.get $10 i32.eqz if - i32.const 2480 + i32.const 2416 local.set $12 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -9552,7 +9505,7 @@ i32.ge_u if i32.const 368 - i32.const 3456 + i32.const 3392 i32.const 92 i32.const 42 call $~lib/builtins/abort @@ -9576,8 +9529,8 @@ local.get $2 i32.eqz if - i32.const 3504 - i32.const 3456 + i32.const 3440 + i32.const 3392 i32.const 96 i32.const 40 call $~lib/builtins/abort From ab9f9ac185c240c489d60522b7a11da863b634f9 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 13:25:50 +0300 Subject: [PATCH 22/47] opt floorMod for positive values --- std/assembly/date.ts | 2 +- tests/compiler/std/date.optimized.wat | 182 ++++++++++++++---------- tests/compiler/std/date.untouched.wat | 194 +++++++++++--------------- 3 files changed, 189 insertions(+), 189 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 395b48a3c0..c820ce57f2 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -214,7 +214,7 @@ function epochMillis( // @ts-ignore: decorator @inline function floorMod(a: T, b: T): T { - return a - b * floorDiv(a, b) as T; + return (a >= 0 ? a % b : a - (a - b + 1) / b * b) as T; } // @ts-ignore: decorator diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index 10b1042595..5302e2ce91 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -2033,19 +2033,23 @@ local.get $0 i64.load offset=16 local.tee $1 - local.get $1 - local.get $1 - i64.const 86399999 - i64.sub - local.get $1 i64.const 0 i64.ge_s - select - i64.const 86400000 - i64.div_s - i64.const 86400000 - i64.mul - i64.sub + if (result i64) + local.get $1 + i64.const 86400000 + i64.rem_s + else + local.get $1 + local.get $1 + i64.const 86399999 + i64.sub + i64.const 86400000 + i64.div_s + i64.const 86400000 + i64.mul + i64.sub + end i32.wrap_i64 i32.const 3600000 i32.div_s @@ -2055,19 +2059,23 @@ local.get $0 i64.load offset=16 local.tee $1 - local.get $1 - local.get $1 - i64.const 3599999 - i64.sub - local.get $1 i64.const 0 i64.ge_s - select - i64.const 3600000 - i64.div_s - i64.const 3600000 - i64.mul - i64.sub + if (result i64) + local.get $1 + i64.const 3600000 + i64.rem_s + else + local.get $1 + local.get $1 + i64.const 3599999 + i64.sub + i64.const 3600000 + i64.div_s + i64.const 3600000 + i64.mul + i64.sub + end i32.wrap_i64 i32.const 60000 i32.div_s @@ -2077,19 +2085,23 @@ local.get $0 i64.load offset=16 local.tee $1 - local.get $1 - local.get $1 - i64.const 59999 - i64.sub - local.get $1 i64.const 0 i64.ge_s - select - i64.const 60000 - i64.div_s - i64.const 60000 - i64.mul - i64.sub + if (result i64) + local.get $1 + i64.const 60000 + i64.rem_s + else + local.get $1 + local.get $1 + i64.const 59999 + i64.sub + i64.const 60000 + i64.div_s + i64.const 60000 + i64.mul + i64.sub + end i32.wrap_i64 i32.const 1000 i32.div_s @@ -2099,19 +2111,23 @@ local.get $0 i64.load offset=16 local.tee $1 - local.get $1 - local.get $1 - i64.const 999 - i64.sub - local.get $1 i64.const 0 i64.ge_s - select - i64.const 1000 - i64.div_s - i64.const 1000 - i64.mul - i64.sub + if (result i64) + local.get $1 + i64.const 1000 + i64.rem_s + else + local.get $1 + local.get $1 + i64.const 999 + i64.sub + i64.const 1000 + i64.div_s + i64.const 1000 + i64.mul + i64.sub + end i32.wrap_i64 ) (func $~lib/date/Date#setUTCMilliseconds (param $0 i32) (param $1 i32) @@ -2181,19 +2197,23 @@ local.get $0 i64.load offset=16 local.tee $2 - local.get $2 - local.get $2 - i64.const 86399999 - i64.sub - local.get $2 i64.const 0 i64.ge_s - select - i64.const 86400000 - i64.div_s - i64.const 86400000 - i64.mul - i64.sub + if (result i64) + local.get $2 + i64.const 86400000 + i64.rem_s + else + local.get $2 + local.get $2 + i64.const 86399999 + i64.sub + i64.const 86400000 + i64.div_s + i64.const 86400000 + i64.mul + i64.sub + end local.get $0 i32.load local.get $0 @@ -2219,19 +2239,23 @@ local.get $0 i64.load offset=16 local.tee $2 - local.get $2 - local.get $2 - i64.const 86399999 - i64.sub - local.get $2 i64.const 0 i64.ge_s - select - i64.const 86400000 - i64.div_s - i64.const 86400000 - i64.mul - i64.sub + if (result i64) + local.get $2 + i64.const 86400000 + i64.rem_s + else + local.get $2 + local.get $2 + i64.const 86399999 + i64.sub + i64.const 86400000 + i64.div_s + i64.const 86400000 + i64.mul + i64.sub + end local.get $0 i32.load local.get $1 @@ -2259,19 +2283,23 @@ local.get $0 i64.load offset=16 local.tee $2 - local.get $2 - local.get $2 - i64.const 86399999 - i64.sub - local.get $2 i64.const 0 i64.ge_s - select - i64.const 86400000 - i64.div_s - i64.const 86400000 - i64.mul - i64.sub + if (result i64) + local.get $2 + i64.const 86400000 + i64.rem_s + else + local.get $2 + local.get $2 + i64.const 86399999 + i64.sub + i64.const 86400000 + i64.div_s + i64.const 86400000 + i64.mul + i64.sub + end local.get $1 local.get $0 i32.load offset=4 diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 496e836c26..dc9efa357b 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -2734,8 +2734,6 @@ (func $~lib/date/Date#getUTCHours (param $0 i32) (result i32) (local $1 i64) (local $2 i64) - (local $3 i64) - (local $4 i64) local.get $0 i64.load offset=16 local.set $2 @@ -2743,27 +2741,25 @@ i64.extend_i32_s local.set $1 local.get $2 - local.get $1 - local.get $2 - local.set $4 - local.get $1 - local.set $3 - local.get $4 i64.const 0 i64.ge_s if (result i64) - local.get $4 + local.get $2 + local.get $1 + i64.rem_s else - local.get $4 - local.get $3 + local.get $2 + local.get $2 + local.get $1 i64.sub i64.const 1 i64.add + local.get $1 + i64.div_s + local.get $1 + i64.mul + i64.sub end - local.get $3 - i64.div_s - i64.mul - i64.sub i32.wrap_i64 i32.const 3600000 i32.div_s @@ -2771,8 +2767,6 @@ (func $~lib/date/Date#getUTCMinutes (param $0 i32) (result i32) (local $1 i64) (local $2 i64) - (local $3 i64) - (local $4 i64) local.get $0 i64.load offset=16 local.set $2 @@ -2780,27 +2774,25 @@ i64.extend_i32_s local.set $1 local.get $2 - local.get $1 - local.get $2 - local.set $4 - local.get $1 - local.set $3 - local.get $4 i64.const 0 i64.ge_s if (result i64) - local.get $4 + local.get $2 + local.get $1 + i64.rem_s else - local.get $4 - local.get $3 + local.get $2 + local.get $2 + local.get $1 i64.sub i64.const 1 i64.add + local.get $1 + i64.div_s + local.get $1 + i64.mul + i64.sub end - local.get $3 - i64.div_s - i64.mul - i64.sub i32.wrap_i64 i32.const 60000 i32.div_s @@ -2808,8 +2800,6 @@ (func $~lib/date/Date#getUTCSeconds (param $0 i32) (result i32) (local $1 i64) (local $2 i64) - (local $3 i64) - (local $4 i64) local.get $0 i64.load offset=16 local.set $2 @@ -2817,27 +2807,25 @@ i64.extend_i32_s local.set $1 local.get $2 - local.get $1 - local.get $2 - local.set $4 - local.get $1 - local.set $3 - local.get $4 i64.const 0 i64.ge_s if (result i64) - local.get $4 + local.get $2 + local.get $1 + i64.rem_s else - local.get $4 - local.get $3 + local.get $2 + local.get $2 + local.get $1 i64.sub i64.const 1 i64.add + local.get $1 + i64.div_s + local.get $1 + i64.mul + i64.sub end - local.get $3 - i64.div_s - i64.mul - i64.sub i32.wrap_i64 i32.const 1000 i32.div_s @@ -2845,8 +2833,6 @@ (func $~lib/date/Date#getUTCMilliseconds (param $0 i32) (result i32) (local $1 i64) (local $2 i64) - (local $3 i64) - (local $4 i64) local.get $0 i64.load offset=16 local.set $2 @@ -2854,27 +2840,25 @@ i64.extend_i32_s local.set $1 local.get $2 - local.get $1 - local.get $2 - local.set $4 - local.get $1 - local.set $3 - local.get $4 i64.const 0 i64.ge_s if (result i64) - local.get $4 + local.get $2 + local.get $1 + i64.rem_s else - local.get $4 - local.get $3 + local.get $2 + local.get $2 + local.get $1 i64.sub i64.const 1 i64.add + local.get $1 + i64.div_s + local.get $1 + i64.mul + i64.sub end - local.get $3 - i64.div_s - i64.mul - i64.sub i32.wrap_i64 ) (func $~lib/date/Date#setUTCMilliseconds (param $0 i32) (param $1 i32) @@ -2939,8 +2923,6 @@ (local $2 i64) (local $3 i64) (local $4 i64) - (local $5 i64) - (local $6 i64) local.get $0 i32.load offset=8 local.get $1 @@ -2955,28 +2937,26 @@ i64.extend_i32_s local.set $2 local.get $3 - local.get $2 - local.get $3 - local.set $5 - local.get $2 - local.set $4 - local.get $5 i64.const 0 i64.ge_s if (result i64) - local.get $5 + local.get $3 + local.get $2 + i64.rem_s else - local.get $5 - local.get $4 + local.get $3 + local.get $3 + local.get $2 i64.sub i64.const 1 i64.add + local.get $2 + i64.div_s + local.get $2 + i64.mul + i64.sub end - local.get $4 - i64.div_s - i64.mul - i64.sub - local.set $6 + local.set $4 local.get $0 local.get $0 i32.load @@ -2987,7 +2967,7 @@ i64.extend_i32_s i64.const 86400000 i64.mul - local.get $6 + local.get $4 i64.add call $~lib/date/Date#setTime drop @@ -2996,8 +2976,6 @@ (local $2 i64) (local $3 i64) (local $4 i64) - (local $5 i64) - (local $6 i64) local.get $0 i32.load offset=4 local.get $1 @@ -3012,28 +2990,26 @@ i64.extend_i32_s local.set $2 local.get $3 - local.get $2 - local.get $3 - local.set $5 - local.get $2 - local.set $4 - local.get $5 i64.const 0 i64.ge_s if (result i64) - local.get $5 + local.get $3 + local.get $2 + i64.rem_s else - local.get $5 - local.get $4 + local.get $3 + local.get $3 + local.get $2 i64.sub i64.const 1 i64.add + local.get $2 + i64.div_s + local.get $2 + i64.mul + i64.sub end - local.get $4 - i64.div_s - i64.mul - i64.sub - local.set $6 + local.set $4 local.get $0 local.get $0 i32.load @@ -3046,7 +3022,7 @@ i64.extend_i32_s i64.const 86400000 i64.mul - local.get $6 + local.get $4 i64.add call $~lib/date/Date#setTime drop @@ -3055,8 +3031,6 @@ (local $2 i64) (local $3 i64) (local $4 i64) - (local $5 i64) - (local $6 i64) local.get $0 i32.load local.get $1 @@ -3071,28 +3045,26 @@ i64.extend_i32_s local.set $2 local.get $3 - local.get $2 - local.get $3 - local.set $5 - local.get $2 - local.set $4 - local.get $5 i64.const 0 i64.ge_s if (result i64) - local.get $5 + local.get $3 + local.get $2 + i64.rem_s else - local.get $5 - local.get $4 + local.get $3 + local.get $3 + local.get $2 i64.sub i64.const 1 i64.add + local.get $2 + i64.div_s + local.get $2 + i64.mul + i64.sub end - local.get $4 - i64.div_s - i64.mul - i64.sub - local.set $6 + local.set $4 local.get $0 local.get $1 local.get $0 @@ -3103,7 +3075,7 @@ i64.extend_i32_s i64.const 86400000 i64.mul - local.get $6 + local.get $4 i64.add call $~lib/date/Date#setTime drop From 994d6b8356d26254869623d609328a4c9614ddd8 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 14:25:21 +0300 Subject: [PATCH 23/47] add guard for Date.UTC --- std/assembly/date.ts | 4 +- tests/compiler/std/date.optimized.wat | 3531 +++++++++++++------------ tests/compiler/std/date.ts | 2 + tests/compiler/std/date.untouched.wat | 826 +++--- 4 files changed, 2327 insertions(+), 2036 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index c820ce57f2..2c00faee7d 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -26,7 +26,9 @@ export class Date { second: i32 = 0, millisecond: i32 = 0 ): i64 { - return epochMillis(year, month + 1, day, hour, minute, second, millisecond); + var ms = epochMillis(year, month + 1, day, hour, minute, second, millisecond); + if (invalidDate(ms)) throw new RangeError(E_INVALIDDATE); + return ms; } @inline static now(): i64 { diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index 5302e2ce91..f1a834e1f9 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -15,11 +15,11 @@ (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 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 1048) "\01\00\00\00\18\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00D\00a\00t\00e") (data (i32.const 1084) ",") - (data (i32.const 1096) "\01\00\00\00\18\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00D\00a\00t\00e") + (data (i32.const 1096) "\01\00\00\00\18\00\00\00~\00l\00i\00b\00/\00d\00a\00t\00e\00.\00t\00s") (data (i32.const 1132) ",") - (data (i32.const 1144) "\01\00\00\00\18\00\00\00~\00l\00i\00b\00/\00d\00a\00t\00e\00.\00t\00s") + (data (i32.const 1144) "\01\00\00\00\16\00\00\00s\00t\00d\00/\00d\00a\00t\00e\00.\00t\00s") (data (i32.const 1180) "<") (data (i32.const 1192) "\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 1244) "<") @@ -326,7 +326,7 @@ call $~lib/rt/itcms/__visit i32.const 1200 call $~lib/rt/itcms/__visit - i32.const 1104 + i32.const 1056 call $~lib/rt/itcms/__visit i32.const 1888 call $~lib/rt/itcms/__visit @@ -1997,9 +1997,9 @@ i64.lt_s select if + i32.const 1056 i32.const 1104 - i32.const 1152 - i32.const 89 + i32.const 91 i32.const 28 call $~lib/builtins/abort unreachable @@ -4199,8 +4199,8 @@ ) (func $start:std/date (local $0 i32) - (local $1 i32) - (local $2 i64) + (local $1 i64) + (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 24 i32.sub @@ -4215,1747 +4215,1844 @@ global.get $~lib/memory/__stack_pointer i64.const 0 i64.store offset=16 - i32.const 1970 - i32.const 1 - i32.const 1 - i32.const 0 - i32.const 0 - i32.const 0 - i32.const 0 - call $~lib/date/epochMillis - i64.eqz - i32.eqz - if + block $folding-inner0 + i32.const 1 + i32.const 1970 + i32.const 1 + i32.const 1 i32.const 0 - i32.const 1056 - i32.const 3 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - i32.const 1970 - i32.const 1 - i32.const 1 - i32.const 0 - i32.const 0 - i32.const 0 - i32.const 0 - call $~lib/date/epochMillis - i64.eqz - i32.eqz - if i32.const 0 - i32.const 1056 - i32.const 4 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - i32.const 70 - i32.const 1 - i32.const 1 - i32.const 0 - i32.const 0 - i32.const 0 - i32.const 0 - call $~lib/date/epochMillis - i64.eqz - i32.eqz - if i32.const 0 - i32.const 1056 - i32.const 5 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - i32.const 90 - i32.const 1 - i32.const 1 - i32.const 0 - i32.const 0 - i32.const 0 - i32.const 0 - call $~lib/date/epochMillis - i64.const 631152000000 - i64.ne - if i32.const 0 - i32.const 1056 - i32.const 6 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - i32.const -90 - i32.const 1 - i32.const 1 - i32.const 0 - i32.const 0 - i32.const 0 - i32.const 0 - call $~lib/date/epochMillis - i64.const -65007360000000 - i64.ne - if + call $~lib/date/epochMillis + local.tee $1 + i64.const 8640000000000000 + i64.gt_s + local.get $1 + i64.const -8640000000000000 + i64.lt_s + select + br_if $folding-inner0 + local.get $1 + i64.eqz + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 3 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 1970 + i32.const 1 + i32.const 1 i32.const 0 - i32.const 1056 - i32.const 7 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - i32.const 2018 - i32.const 11 - i32.const 10 - i32.const 11 - i32.const 0 - i32.const 0 - i32.const 1 - call $~lib/date/epochMillis - i64.const 1541847600001 - i64.ne - if i32.const 0 - i32.const 1056 - i32.const 8 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - memory.size - i32.const 16 - i32.shl - i32.const 20292 - i32.sub - i32.const 1 - i32.shr_u - global.set $~lib/rt/itcms/threshold - 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/toSpace - i32.const 1488 - call $~lib/rt/itcms/initLazy - global.set $~lib/rt/itcms/fromSpace - global.get $~lib/memory/__stack_pointer - i64.const 1541847600001 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - i64.load offset=16 - i64.const 1541847600001 - i64.ne - if i32.const 0 - i32.const 1056 - i32.const 16 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i64.const 1541847600002 - call $~lib/date/Date#setTime - local.get $0 - i64.load offset=16 - i64.const 1541847600002 - i64.ne - if i32.const 0 - i32.const 1056 - i32.const 18 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const 5918283958183706 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - i32.load - i32.const 189512 - i32.ne - if + call $~lib/date/epochMillis + local.tee $1 + i64.const 8640000000000000 + i64.gt_s + local.get $1 + i64.const -8640000000000000 + i64.lt_s + select + br_if $folding-inner0 + local.get $1 + i64.eqz + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 4 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 70 + i32.const 1 + i32.const 1 i32.const 0 - i32.const 1056 - i32.const 26 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=4 - i32.const 12 - i32.ne - if i32.const 0 - i32.const 1056 - i32.const 27 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=8 - i32.const 14 - i32.ne - if i32.const 0 - i32.const 1056 - i32.const 28 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/date/Date#getUTCHours - i32.const 22 - i32.ne - if i32.const 0 - i32.const 1056 - i32.const 29 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/date/Date#getUTCMinutes - i32.const 9 - i32.ne - if + call $~lib/date/epochMillis + local.tee $1 + i64.const 8640000000000000 + i64.gt_s + local.get $1 + i64.const -8640000000000000 + i64.lt_s + select + br_if $folding-inner0 + local.get $1 + i64.eqz + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 5 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 90 + i32.const 1 + i32.const 1 i32.const 0 - i32.const 1056 - i32.const 30 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/date/Date#getUTCSeconds - i32.const 43 - i32.ne - if i32.const 0 - i32.const 1056 - i32.const 31 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/date/Date#getUTCMilliseconds - i32.const 706 - i32.ne - if i32.const 0 - i32.const 1056 - i32.const 32 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const 123814991274 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - i32.load - i32.const 1973 - i32.ne - if i32.const 0 - i32.const 1056 - i32.const 38 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=4 - i32.const 12 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 39 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=8 - i32.const 4 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 40 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/date/Date#getUTCHours - i32.const 1 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 41 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/date/Date#getUTCMinutes - i32.const 3 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 42 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/date/Date#getUTCSeconds - i32.const 11 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 43 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/date/Date#getUTCMilliseconds - i32.const 274 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 44 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const 399464523963984 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - call $~lib/date/Date#getUTCMilliseconds - i32.const 984 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 50 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 12 - call $~lib/date/Date#setUTCMilliseconds - local.get $0 - call $~lib/date/Date#getUTCMilliseconds - i32.const 12 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 52 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 568 - call $~lib/date/Date#setUTCMilliseconds - local.get $0 - call $~lib/date/Date#getUTCMilliseconds - i32.const 568 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 54 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 0 - call $~lib/date/Date#setUTCMilliseconds - local.get $0 - i64.load offset=16 - i64.const 399464523963000 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 57 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 999 - call $~lib/date/Date#setUTCMilliseconds - local.get $0 - i64.load offset=16 - i64.const 399464523963999 - i64.ne - if + call $~lib/date/epochMillis + local.tee $1 + i64.const 8640000000000000 + i64.gt_s + local.get $1 + i64.const -8640000000000000 + i64.lt_s + select + br_if $folding-inner0 + local.get $1 + i64.const 631152000000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 6 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const -90 + i32.const 1 + i32.const 1 i32.const 0 - i32.const 1056 - i32.const 59 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 2000 - call $~lib/date/Date#setUTCMilliseconds - local.get $0 - call $~lib/date/Date#getUTCMilliseconds - if i32.const 0 - i32.const 1056 - i32.const 62 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i64.load offset=16 - i64.const 399464523965000 - i64.ne - if i32.const 0 - i32.const 1056 - i32.const 63 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const -2000 - call $~lib/date/Date#setUTCMilliseconds - local.get $0 - call $~lib/date/Date#getUTCMilliseconds - if i32.const 0 - i32.const 1056 - i32.const 65 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i64.load offset=16 - i64.const 399464523963000 - i64.ne - if + call $~lib/date/epochMillis + local.tee $1 + i64.const 8640000000000000 + i64.gt_s + local.get $1 + i64.const -8640000000000000 + i64.lt_s + select + br_if $folding-inner0 + local.get $1 + i64.const -65007360000000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 7 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 2018 + i32.const 11 + i32.const 10 + i32.const 11 i32.const 0 - i32.const 1056 - i32.const 66 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const 372027318331986 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - call $~lib/date/Date#getUTCSeconds - i32.const 31 - i32.ne - if i32.const 0 - i32.const 1056 - i32.const 72 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 12 - call $~lib/date/Date#setUTCSeconds - local.get $0 - call $~lib/date/Date#getUTCSeconds - i32.const 12 - i32.ne - if + i32.const 1 + call $~lib/date/epochMillis + local.tee $1 + i64.const 8640000000000000 + i64.gt_s + local.get $1 + i64.const -8640000000000000 + i64.lt_s + select + br_if $folding-inner0 + local.get $1 + i64.const 1541847600001 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 8 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 1 + i32.const 275760 + i32.const 9 + i32.const 13 i32.const 0 - i32.const 1056 - i32.const 74 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 50 - call $~lib/date/Date#setUTCSeconds - local.get $0 - call $~lib/date/Date#getUTCSeconds - i32.const 50 - i32.ne - if i32.const 0 - i32.const 1056 - i32.const 76 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 0 - call $~lib/date/Date#setUTCSeconds - local.get $0 - i64.load offset=16 - i64.const 372027318300986 - i64.ne - if i32.const 0 - i32.const 1056 - i32.const 79 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 59 - call $~lib/date/Date#setUTCSeconds - local.get $0 - i64.load offset=16 - i64.const 372027318359986 - i64.ne - if i32.const 0 - i32.const 1056 - i32.const 81 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const 372027318331986 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - call $~lib/date/Date#getUTCMinutes - i32.const 45 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 87 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 12 - call $~lib/date/Date#setUTCMinutes - local.get $0 - call $~lib/date/Date#getUTCMinutes - i32.const 12 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 89 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 50 - call $~lib/date/Date#setUTCMinutes - local.get $0 - call $~lib/date/Date#getUTCMinutes - i32.const 50 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 91 + call $~lib/date/epochMillis + local.tee $1 + i64.const 8640000000000000 + i64.gt_s + local.get $1 + i64.const -8640000000000000 + i64.lt_s + select + br_if $folding-inner0 + local.get $1 + i64.const 8640000000000000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 9 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + memory.size + i32.const 16 + i32.shl + i32.const 20292 + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + 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/toSpace + i32.const 1488 + call $~lib/rt/itcms/initLazy + global.set $~lib/rt/itcms/fromSpace + global.get $~lib/memory/__stack_pointer + i64.const 1541847600001 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + i64.load offset=16 + i64.const 1541847600001 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 18 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i64.const 1541847600002 + call $~lib/date/Date#setTime + local.get $0 + i64.load offset=16 + i64.const 1541847600002 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 20 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 5918283958183706 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + i32.load + i32.const 189512 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 28 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=4 + i32.const 12 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 29 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + i32.const 14 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 30 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCHours + i32.const 22 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 31 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCMinutes + i32.const 9 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 32 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCSeconds + i32.const 43 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 33 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCMilliseconds + i32.const 706 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 34 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 123814991274 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + i32.load + i32.const 1973 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 40 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=4 + i32.const 12 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 41 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 42 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCHours + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 43 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCMinutes i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 0 - call $~lib/date/Date#setUTCMinutes - local.get $0 - i64.load offset=16 - i64.const 372027315631986 - i64.ne - if + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 44 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCSeconds + i32.const 11 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 45 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCMilliseconds + i32.const 274 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 46 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 399464523963984 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#getUTCMilliseconds + i32.const 984 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 52 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 12 + call $~lib/date/Date#setUTCMilliseconds + local.get $0 + call $~lib/date/Date#getUTCMilliseconds + i32.const 12 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 54 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 568 + call $~lib/date/Date#setUTCMilliseconds + local.get $0 + call $~lib/date/Date#getUTCMilliseconds + i32.const 568 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 56 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 i32.const 0 - i32.const 1056 - i32.const 94 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 59 - call $~lib/date/Date#setUTCMinutes - local.get $0 - i64.load offset=16 - i64.const 372027319171986 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 96 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const 372027318331986 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - call $~lib/date/Date#getUTCHours - i32.const 17 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 102 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 12 - call $~lib/date/Date#setUTCHours - local.get $0 - call $~lib/date/Date#getUTCHours - i32.const 12 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 104 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 2 - call $~lib/date/Date#setUTCHours - local.get $0 - call $~lib/date/Date#getUTCHours - i32.const 2 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 106 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 0 - call $~lib/date/Date#setUTCHours - local.get $0 - i64.load offset=16 - i64.const 372027257131986 - i64.ne - if + call $~lib/date/Date#setUTCMilliseconds + local.get $0 + i64.load offset=16 + i64.const 399464523963000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 59 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 999 + call $~lib/date/Date#setUTCMilliseconds + local.get $0 + i64.load offset=16 + i64.const 399464523963999 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 61 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 2000 + call $~lib/date/Date#setUTCMilliseconds + local.get $0 + call $~lib/date/Date#getUTCMilliseconds + if + i32.const 0 + i32.const 1152 + i32.const 64 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i64.load offset=16 + i64.const 399464523965000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 65 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const -2000 + call $~lib/date/Date#setUTCMilliseconds + local.get $0 + call $~lib/date/Date#getUTCMilliseconds + if + i32.const 0 + i32.const 1152 + i32.const 67 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i64.load offset=16 + i64.const 399464523963000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 68 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 372027318331986 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#getUTCSeconds + i32.const 31 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 74 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 12 + call $~lib/date/Date#setUTCSeconds + local.get $0 + call $~lib/date/Date#getUTCSeconds + i32.const 12 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 76 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 50 + call $~lib/date/Date#setUTCSeconds + local.get $0 + call $~lib/date/Date#getUTCSeconds + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 78 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 i32.const 0 - i32.const 1056 - i32.const 109 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 23 - call $~lib/date/Date#setUTCHours - local.get $0 - i64.load offset=16 - i64.const 372027339931986 - i64.ne - if + call $~lib/date/Date#setUTCSeconds + local.get $0 + i64.load offset=16 + i64.const 372027318300986 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 81 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 59 + call $~lib/date/Date#setUTCSeconds + local.get $0 + i64.load offset=16 + i64.const 372027318359986 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 83 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 372027318331986 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#getUTCMinutes + i32.const 45 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 89 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 12 + call $~lib/date/Date#setUTCMinutes + local.get $0 + call $~lib/date/Date#getUTCMinutes + i32.const 12 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 91 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 50 + call $~lib/date/Date#setUTCMinutes + local.get $0 + call $~lib/date/Date#getUTCMinutes + i32.const 50 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 93 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 i32.const 0 - i32.const 1056 - i32.const 111 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const 123814991274 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - i32.load - i32.const 1973 - i32.ne - if + call $~lib/date/Date#setUTCMinutes + local.get $0 + i64.load offset=16 + i64.const 372027315631986 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 96 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 59 + call $~lib/date/Date#setUTCMinutes + local.get $0 + i64.load offset=16 + i64.const 372027319171986 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 98 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 372027318331986 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#getUTCHours + i32.const 17 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 104 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 12 + call $~lib/date/Date#setUTCHours + local.get $0 + call $~lib/date/Date#getUTCHours + i32.const 12 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 106 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 2 + call $~lib/date/Date#setUTCHours + local.get $0 + call $~lib/date/Date#getUTCHours + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 108 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 i32.const 0 - i32.const 1056 - i32.const 117 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=4 - i32.const 12 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 118 + call $~lib/date/Date#setUTCHours + local.get $0 + i64.load offset=16 + i64.const 372027257131986 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 111 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 23 + call $~lib/date/Date#setUTCHours + local.get $0 + i64.load offset=16 + i64.const 372027339931986 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 113 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 123814991274 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + i32.load + i32.const 1973 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 119 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=4 + i32.const 12 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 120 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 12 + call $~lib/date/Date#setUTCDate + local.get $0 + i32.load offset=8 + i32.const 12 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 124 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 2 + call $~lib/date/Date#setUTCDate + local.get $0 + i32.load offset=8 + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 126 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + call $~lib/date/Date#setUTCDate + local.get $0 + i32.const 30 + call $~lib/date/Date#setUTCDate + local.get $0 + i32.const 1 + call $~lib/date/Date#setUTCMonth + local.get $0 + i32.const 1 + call $~lib/date/Date#setUTCDate + local.get $0 + i32.const 31 + call $~lib/date/Date#setUTCDate + local.get $0 + i32.const 2024 + call $~lib/date/Date#setUTCFullYear + local.get $0 + i32.const 2 + call $~lib/date/Date#setUTCMonth + local.get $0 + i32.const 1 + call $~lib/date/Date#setUTCDate + local.get $0 + i32.const 29 + call $~lib/date/Date#setUTCDate + local.get $0 + i64.load offset=16 + i64.const 1711674191274 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 144 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + i32.const 29 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 145 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCMinutes i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 12 - call $~lib/date/Date#setUTCDate - local.get $0 - i32.load offset=8 - i32.const 12 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 122 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 146 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCSeconds + i32.const 11 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 147 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCMilliseconds + i32.const 274 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 148 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 1362106799999 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + i32.const 20 + call $~lib/date/Date#setUTCDate + local.get $0 + i64.load offset=16 + i64.const 1363748399999 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 152 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + call $~lib/date/Date#setUTCDate + local.get $0 + i64.load offset=16 + i64.const 1362106799999 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 154 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1000 + call $~lib/date/Date#setUTCMilliseconds + local.get $0 + i64.load offset=16 + i64.const 1362106800000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 157 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 3600000 + call $~lib/date/Date#setUTCMilliseconds + local.get $0 + i64.load offset=16 + i64.const 1362110400000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 160 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 3600001 + call $~lib/date/Date#setUTCMilliseconds + local.get $0 + i64.load offset=16 + i64.const 1362114000001 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 163 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 3600001 + call $~lib/date/Date#setUTCMilliseconds + local.get $0 + i64.load offset=16 + i64.const 1362117600001 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 166 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 123814991274 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + i32.const -2208 + call $~lib/date/Date#setUTCDate + local.get $0 + i64.load offset=16 + i64.const -67301808726 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 170 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 123814991274 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + i32.const 2208 + call $~lib/date/Date#setUTCDate + local.get $0 + i64.load offset=16 + i64.const 314240591274 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 174 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 7899943856218720 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + i32.load offset=4 + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 180 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 10 + call $~lib/date/Date#setUTCMonth + local.get $0 + i32.load offset=4 + i32.const 11 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 182 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 2 + call $~lib/date/Date#setUTCMonth + local.get $0 + i32.load offset=4 i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 2 - call $~lib/date/Date#setUTCDate - local.get $0 - i32.load offset=8 - i32.const 2 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 124 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 1 - call $~lib/date/Date#setUTCDate - local.get $0 - i32.const 30 - call $~lib/date/Date#setUTCDate - local.get $0 - i32.const 1 - call $~lib/date/Date#setUTCMonth - local.get $0 - i32.const 1 - call $~lib/date/Date#setUTCDate - local.get $0 - i32.const 31 - call $~lib/date/Date#setUTCDate - local.get $0 - i32.const 2024 - call $~lib/date/Date#setUTCFullYear - local.get $0 - i32.const 2 - call $~lib/date/Date#setUTCMonth - local.get $0 - i32.const 1 - call $~lib/date/Date#setUTCDate - local.get $0 - i32.const 29 - call $~lib/date/Date#setUTCDate - local.get $0 - i64.load offset=16 - i64.const 1711674191274 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 142 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=8 - i32.const 29 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 143 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/date/Date#getUTCMinutes - i32.const 3 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 144 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/date/Date#getUTCSeconds - i32.const 11 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 145 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/date/Date#getUTCMilliseconds - i32.const 274 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 146 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const 1362106799999 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - i32.const 20 - call $~lib/date/Date#setUTCDate - local.get $0 - i64.load offset=16 - i64.const 1363748399999 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 150 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 1 - call $~lib/date/Date#setUTCDate - local.get $0 - i64.load offset=16 - i64.const 1362106799999 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 152 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 1000 - call $~lib/date/Date#setUTCMilliseconds - local.get $0 - i64.load offset=16 - i64.const 1362106800000 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 155 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 3600000 - call $~lib/date/Date#setUTCMilliseconds - local.get $0 - i64.load offset=16 - i64.const 1362110400000 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 158 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 3600001 - call $~lib/date/Date#setUTCMilliseconds - local.get $0 - i64.load offset=16 - i64.const 1362114000001 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 161 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 3600001 - call $~lib/date/Date#setUTCMilliseconds - local.get $0 - i64.load offset=16 - i64.const 1362117600001 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 164 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const 123814991274 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - i32.const -2208 - call $~lib/date/Date#setUTCDate - local.get $0 - i64.load offset=16 - i64.const -67301808726 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 168 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const 123814991274 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - i32.const 2208 - call $~lib/date/Date#setUTCDate - local.get $0 - i64.load offset=16 - i64.const 314240591274 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 172 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const 7899943856218720 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - i32.load offset=4 - i32.const 4 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 178 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 10 - call $~lib/date/Date#setUTCMonth - local.get $0 - i32.load offset=4 - i32.const 11 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 180 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 2 - call $~lib/date/Date#setUTCMonth - local.get $0 - i32.load offset=4 - i32.const 3 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 182 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 1 - call $~lib/date/Date#setUTCMonth - local.get $0 - i32.const 12 - call $~lib/date/Date#setUTCMonth - global.get $~lib/memory/__stack_pointer - i64.const 7941202527925698 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - i32.load - i32.const 253616 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 191 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 1976 - call $~lib/date/Date#setUTCFullYear - local.get $0 - i32.load - i32.const 1976 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 193 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.const 20212 - call $~lib/date/Date#setUTCFullYear - local.get $0 - i32.load - i32.const 20212 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 195 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const -62167219200000 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - call $~lib/date/Date#toISOString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 2144 - i32.store offset=8 - local.get $0 - i32.const 2144 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 1056 - i32.const 201 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const -62167219200001 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - call $~lib/date/Date#toISOString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 2224 - i32.store offset=8 - local.get $0 - i32.const 2224 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 1056 - i32.const 203 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const -62127219200000 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - call $~lib/date/Date#toISOString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 2304 - i32.store offset=8 - local.get $0 - i32.const 2304 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 1056 - i32.const 205 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const 1231231231020 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - call $~lib/date/Date#toISOString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 2384 - i32.store offset=8 - local.get $0 - i32.const 2384 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 1056 - i32.const 207 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const 1231231231456 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - call $~lib/date/Date#toISOString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 2464 - i32.store offset=8 - local.get $0 - i32.const 2464 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 1056 - i32.const 209 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const 322331231231020 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - call $~lib/date/Date#toISOString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 2544 - i32.store offset=8 - local.get $0 - i32.const 2544 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 1056 - i32.const 211 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const 253402300799999 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - call $~lib/date/Date#toISOString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 2624 - i32.store offset=8 - local.get $0 - i32.const 2624 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 1056 - i32.const 213 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const 253402300800000 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - call $~lib/date/Date#toISOString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 2704 - i32.store offset=8 - local.get $0 - i32.const 2704 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 1056 - i32.const 215 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const -62847038769226 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - local.get $0 - call $~lib/date/Date#toISOString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 2784 - i32.store offset=8 - local.get $0 - i32.const 2784 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 1056 - i32.const 217 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 2864 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 2864 - call $~lib/date/Date.fromString - local.tee $0 - i32.store - local.get $0 - i64.load offset=16 - i64.const 192067200000 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 224 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 3136 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 3136 - call $~lib/date/Date.fromString - local.tee $0 - i32.store - local.get $0 - i64.load offset=16 - i64.const 192067200000 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 226 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 3184 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 3184 - call $~lib/date/Date.fromString - local.tee $0 - i32.store - local.get $0 - i64.load offset=16 - i64.const 11860387200000 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 228 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 3232 - i32.store offset=8 - i32.const 3232 - call $~lib/date/Date.fromString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=4 - local.get $0 - i64.load offset=16 - global.get $~lib/memory/__stack_pointer - i32.const 3280 - i32.store offset=8 - i32.const 3280 - call $~lib/date/Date.fromString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=4 - local.get $0 - i64.load offset=16 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 231 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 3328 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 3328 - call $~lib/date/Date.fromString - local.tee $0 - i32.store - local.get $0 - i64.load offset=16 - i64.const 192112496000 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 238 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 3392 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 3392 - call $~lib/date/Date.fromString - local.tee $0 - i32.store - local.get $0 - i64.load offset=16 - i64.const 192112496456 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 242 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 3472 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 3472 - call $~lib/date/Date.fromString - local.tee $0 - i32.store - local.get $0 - i64.load offset=16 - i64.const 192112496456 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 246 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const -8640000000000000 - call $~lib/date/Date#constructor - local.tee $0 - i32.store - global.get $~lib/memory/__stack_pointer - i64.const 8640000000000000 - call $~lib/date/Date#constructor - local.tee $1 - i32.store offset=12 - local.get $0 - i64.load offset=16 - i64.const -8640000000000000 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 254 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i64.load offset=16 - i64.const 8640000000000000 - i64.ne - if - i32.const 0 - i32.const 1056 - i32.const 255 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load - i32.const -271821 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 257 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.load - i32.const 275760 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 258 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=4 - i32.const 4 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 260 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.load offset=4 - i32.const 9 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 261 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=8 - i32.const 20 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 263 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.load offset=8 - i32.const 13 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 264 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/date/Date#toISOString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 3552 - i32.store offset=8 - local.get $0 - i32.const 3552 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 1056 - i32.const 266 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $1 - call $~lib/date/Date#toISOString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 3632 - i32.store offset=8 - local.get $0 - i32.const 3632 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 1056 - i32.const 267 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i64.const 8639999999999999 - call $~lib/date/Date#constructor - local.tee $1 - i32.store offset=16 - global.get $~lib/memory/__stack_pointer - i64.const -8639999999999999 - call $~lib/date/Date#constructor - local.tee $0 - i32.store offset=20 - local.get $0 - i32.load - i32.const -271821 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 272 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=4 - i32.const 4 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 273 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - i32.load offset=8 - i32.const 20 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 274 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/date/Date#getUTCHours - if - i32.const 0 - i32.const 1056 - i32.const 275 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/date/Date#getUTCMinutes - if - i32.const 0 - i32.const 1056 - i32.const 276 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/date/Date#getUTCSeconds - if - i32.const 0 - i32.const 1056 - i32.const 277 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/date/Date#getUTCMilliseconds - i32.const 1 - i32.ne - if - i32.const 0 - i32.const 1056 - i32.const 278 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $1 - call $~lib/date/Date#toISOString - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 3712 - i32.store offset=8 - local.get $1 - i32.const 3712 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 1056 - i32.const 280 - i32.const 3 - call $~lib/builtins/abort - unreachable - end - local.get $0 - call $~lib/date/Date#toISOString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=4 - global.get $~lib/memory/__stack_pointer - i32.const 3792 - i32.store offset=8 - local.get $0 - i32.const 3792 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 1056 - i32.const 281 - i32.const 3 - call $~lib/builtins/abort - unreachable + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 184 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1 + call $~lib/date/Date#setUTCMonth + local.get $0 + i32.const 12 + call $~lib/date/Date#setUTCMonth + global.get $~lib/memory/__stack_pointer + i64.const 7941202527925698 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + i32.load + i32.const 253616 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 193 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 1976 + call $~lib/date/Date#setUTCFullYear + local.get $0 + i32.load + i32.const 1976 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 195 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 20212 + call $~lib/date/Date#setUTCFullYear + local.get $0 + i32.load + i32.const 20212 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 197 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const -62167219200000 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 2144 + i32.store offset=8 + local.get $0 + i32.const 2144 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 203 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const -62167219200001 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 2224 + i32.store offset=8 + local.get $0 + i32.const 2224 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 205 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const -62127219200000 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 2304 + i32.store offset=8 + local.get $0 + i32.const 2304 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 207 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 1231231231020 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 2384 + i32.store offset=8 + local.get $0 + i32.const 2384 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 209 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 1231231231456 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 2464 + i32.store offset=8 + local.get $0 + i32.const 2464 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 211 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 322331231231020 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 2544 + i32.store offset=8 + local.get $0 + i32.const 2544 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 213 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 253402300799999 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 2624 + i32.store offset=8 + local.get $0 + i32.const 2624 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 215 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 253402300800000 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 2704 + i32.store offset=8 + local.get $0 + i32.const 2704 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 217 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const -62847038769226 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 2784 + i32.store offset=8 + local.get $0 + i32.const 2784 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 219 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 2864 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 2864 + call $~lib/date/Date.fromString + local.tee $0 + i32.store + local.get $0 + i64.load offset=16 + i64.const 192067200000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 226 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3136 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3136 + call $~lib/date/Date.fromString + local.tee $0 + i32.store + local.get $0 + i64.load offset=16 + i64.const 192067200000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 228 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3184 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3184 + call $~lib/date/Date.fromString + local.tee $0 + i32.store + local.get $0 + i64.load offset=16 + i64.const 11860387200000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 230 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3232 + i32.store offset=8 + i32.const 3232 + call $~lib/date/Date.fromString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.load offset=16 + global.get $~lib/memory/__stack_pointer + i32.const 3280 + i32.store offset=8 + i32.const 3280 + call $~lib/date/Date.fromString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + i64.load offset=16 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 233 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3328 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3328 + call $~lib/date/Date.fromString + local.tee $0 + i32.store + local.get $0 + i64.load offset=16 + i64.const 192112496000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 240 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3392 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3392 + call $~lib/date/Date.fromString + local.tee $0 + i32.store + local.get $0 + i64.load offset=16 + i64.const 192112496456 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 244 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3472 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3472 + call $~lib/date/Date.fromString + local.tee $0 + i32.store + local.get $0 + i64.load offset=16 + i64.const 192112496456 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 248 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const -8640000000000000 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + global.get $~lib/memory/__stack_pointer + i64.const 8640000000000000 + call $~lib/date/Date#constructor + local.tee $2 + i32.store offset=12 + local.get $0 + i64.load offset=16 + i64.const -8640000000000000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 256 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i64.load offset=16 + i64.const 8640000000000000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 257 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load + i32.const -271821 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 259 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.load + i32.const 275760 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 260 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=4 + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 262 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.load offset=4 + i32.const 9 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 263 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 265 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + i32.load offset=8 + i32.const 13 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 266 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3552 + i32.store offset=8 + local.get $0 + i32.const 3552 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 268 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3632 + i32.store offset=8 + local.get $0 + i32.const 3632 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 269 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 8639999999999999 + call $~lib/date/Date#constructor + local.tee $2 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + i64.const -8639999999999999 + call $~lib/date/Date#constructor + local.tee $0 + i32.store offset=20 + local.get $0 + i32.load + i32.const -271821 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 274 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=4 + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 275 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.load offset=8 + i32.const 20 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 276 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCHours + if + i32.const 0 + i32.const 1152 + i32.const 277 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCMinutes + if + i32.const 0 + i32.const 1152 + i32.const 278 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCSeconds + if + i32.const 0 + i32.const 1152 + i32.const 279 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#getUTCMilliseconds + i32.const 1 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 280 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $2 + call $~lib/date/Date#toISOString + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3712 + i32.store offset=8 + local.get $2 + i32.const 3712 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 282 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + call $~lib/date/Date#toISOString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3792 + i32.store offset=8 + local.get $0 + i32.const 3792 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 283 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 24 + i32.add + global.set $~lib/memory/__stack_pointer + return end - global.get $~lib/memory/__stack_pointer - i32.const 24 - i32.add - global.set $~lib/memory/__stack_pointer + i32.const 1056 + i32.const 1104 + i32.const 30 + i32.const 26 + call $~lib/builtins/abort + unreachable ) (func $~lib/date/Date#constructor (param $0 i64) (result i32) (local $1 i32) @@ -5994,9 +6091,9 @@ i64.lt_s select if + i32.const 1056 i32.const 1104 - i32.const 1152 - i32.const 77 + i32.const 79 i32.const 35 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index b8c4ebdfd9..69c4780ed5 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -6,6 +6,8 @@ assert(Date.UTC(90) == 631152000000); assert(Date.UTC(-90) == -65007360000000); assert(Date.UTC(2018, 10, 10, 11, 0, 0, 1) == 1541847600001); + assert(Date.UTC(275760, 8, 13, 0, 0, 0, 0) == 8640000000000000); + // ate.UTC(275760, 8, 13, 0, 0, 0, 1); // Invalid Date } // Date get / set Time //////////////////////////////////////////////////////////////////////////// diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index dc9efa357b..78e8419bba 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -20,9 +20,9 @@ (type $i32_i64_=>_i64 (func (param i32 i64) (result i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 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\18\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00D\00a\00t\00e\00\00\00\00\00") - (data (i32.const 108) ",\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 12) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\18\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00D\00a\00t\00e\00\00\00\00\00") + (data (i32.const 60) ",\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 108) ",\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 156) "<\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 220) "<\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 288) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") @@ -2676,9 +2676,9 @@ i64.gt_s end if + i32.const 32 i32.const 80 - i32.const 128 - i32.const 89 + i32.const 91 i32.const 28 call $~lib/builtins/abort unreachable @@ -5672,7 +5672,7 @@ i32.const 176 local.get $0 call $~lib/rt/itcms/__visit - i32.const 80 + i32.const 32 local.get $0 call $~lib/rt/itcms/__visit i32.const 1264 @@ -6791,7 +6791,8 @@ (local $5 i32) (local $6 i32) (local $7 i64) - (local $8 i32) + (local $8 i64) + (local $9 i32) global.get $~lib/memory/__stack_pointer i32.const 24 i32.sub @@ -6830,12 +6831,34 @@ local.get $5 local.get $6 call $~lib/date/epochMillis + local.set $7 + local.get $7 + local.set $8 + local.get $8 + i64.const -8640000000000000 + i64.lt_s + if (result i32) + i32.const 1 + else + local.get $8 + i64.const 8640000000000000 + i64.gt_s + end + if + i32.const 32 + i32.const 80 + i32.const 30 + i32.const 26 + call $~lib/builtins/abort + unreachable + end + local.get $7 i64.const 0 i64.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 128 i32.const 3 i32.const 3 call $~lib/builtins/abort @@ -6865,12 +6888,34 @@ local.get $1 local.get $0 call $~lib/date/epochMillis + local.set $7 + local.get $7 + local.set $8 + local.get $8 + i64.const -8640000000000000 + i64.lt_s + if (result i32) + i32.const 1 + else + local.get $8 + i64.const 8640000000000000 + i64.gt_s + end + if + i32.const 32 + i32.const 80 + i32.const 30 + i32.const 26 + call $~lib/builtins/abort + unreachable + end + local.get $7 i64.const 0 i64.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 128 i32.const 4 i32.const 3 call $~lib/builtins/abort @@ -6900,12 +6945,34 @@ local.get $2 local.get $1 call $~lib/date/epochMillis + local.set $7 + local.get $7 + local.set $8 + local.get $8 + i64.const -8640000000000000 + i64.lt_s + if (result i32) + i32.const 1 + else + local.get $8 + i64.const 8640000000000000 + i64.gt_s + end + if + i32.const 32 + i32.const 80 + i32.const 30 + i32.const 26 + call $~lib/builtins/abort + unreachable + end + local.get $7 i64.const 0 i64.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 128 i32.const 5 i32.const 3 call $~lib/builtins/abort @@ -6935,12 +7002,34 @@ local.get $5 local.get $6 call $~lib/date/epochMillis + local.set $7 + local.get $7 + local.set $8 + local.get $8 + i64.const -8640000000000000 + i64.lt_s + if (result i32) + i32.const 1 + else + local.get $8 + i64.const 8640000000000000 + i64.gt_s + end + if + i32.const 32 + i32.const 80 + i32.const 30 + i32.const 26 + call $~lib/builtins/abort + unreachable + end + local.get $7 i64.const 631152000000 i64.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 128 i32.const 6 i32.const 3 call $~lib/builtins/abort @@ -6970,12 +7059,34 @@ local.get $2 local.get $1 call $~lib/date/epochMillis + local.set $7 + local.get $7 + local.set $8 + local.get $8 + i64.const -8640000000000000 + i64.lt_s + if (result i32) + i32.const 1 + else + local.get $8 + i64.const 8640000000000000 + i64.gt_s + end + if + i32.const 32 + i32.const 80 + i32.const 30 + i32.const 26 + call $~lib/builtins/abort + unreachable + end + local.get $7 i64.const -65007360000000 i64.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 128 i32.const 7 i32.const 3 call $~lib/builtins/abort @@ -7005,17 +7116,96 @@ local.get $6 local.get $0 call $~lib/date/epochMillis + local.set $7 + local.get $7 + local.set $8 + local.get $8 + i64.const -8640000000000000 + i64.lt_s + if (result i32) + i32.const 1 + else + local.get $8 + i64.const 8640000000000000 + i64.gt_s + end + if + i32.const 32 + i32.const 80 + i32.const 30 + i32.const 26 + call $~lib/builtins/abort + unreachable + end + local.get $7 i64.const 1541847600001 i64.eq i32.eqz if i32.const 0 - i32.const 32 + i32.const 128 i32.const 8 i32.const 3 call $~lib/builtins/abort unreachable end + i32.const 275760 + local.set $1 + i32.const 8 + local.set $2 + i32.const 13 + local.set $3 + i32.const 0 + local.set $4 + i32.const 0 + local.set $5 + i32.const 0 + local.set $6 + i32.const 0 + local.set $0 + local.get $1 + local.get $2 + i32.const 1 + i32.add + local.get $3 + local.get $4 + local.get $5 + local.get $6 + local.get $0 + call $~lib/date/epochMillis + local.set $7 + local.get $7 + local.set $8 + local.get $8 + i64.const -8640000000000000 + i64.lt_s + if (result i32) + i32.const 1 + else + local.get $8 + i64.const 8640000000000000 + i64.gt_s + end + if + i32.const 32 + i32.const 80 + i32.const 30 + i32.const 26 + call $~lib/builtins/abort + unreachable + end + local.get $7 + i64.const 8640000000000000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 9 + i32.const 3 + call $~lib/builtins/abort + unreachable + end memory.size i32.const 16 i32.shl @@ -7048,8 +7238,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 16 + i32.const 128 + i32.const 18 i32.const 3 call $~lib/builtins/abort unreachable @@ -7069,8 +7259,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 18 + i32.const 128 + i32.const 20 i32.const 3 call $~lib/builtins/abort unreachable @@ -7088,8 +7278,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 26 + i32.const 128 + i32.const 28 i32.const 3 call $~lib/builtins/abort unreachable @@ -7101,8 +7291,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 27 + i32.const 128 + i32.const 29 i32.const 3 call $~lib/builtins/abort unreachable @@ -7114,8 +7304,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 28 + i32.const 128 + i32.const 30 i32.const 3 call $~lib/builtins/abort unreachable @@ -7127,8 +7317,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 29 + i32.const 128 + i32.const 31 i32.const 3 call $~lib/builtins/abort unreachable @@ -7140,8 +7330,8 @@ i32.eqz if i32.const 0 + i32.const 128 i32.const 32 - i32.const 30 i32.const 3 call $~lib/builtins/abort unreachable @@ -7153,8 +7343,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 31 + i32.const 128 + i32.const 33 i32.const 3 call $~lib/builtins/abort unreachable @@ -7166,8 +7356,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 32 + i32.const 128 + i32.const 34 i32.const 3 call $~lib/builtins/abort unreachable @@ -7185,8 +7375,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 38 + i32.const 128 + i32.const 40 i32.const 3 call $~lib/builtins/abort unreachable @@ -7198,8 +7388,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 39 + i32.const 128 + i32.const 41 i32.const 3 call $~lib/builtins/abort unreachable @@ -7211,8 +7401,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 40 + i32.const 128 + i32.const 42 i32.const 3 call $~lib/builtins/abort unreachable @@ -7224,8 +7414,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 41 + i32.const 128 + i32.const 43 i32.const 3 call $~lib/builtins/abort unreachable @@ -7237,8 +7427,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 42 + i32.const 128 + i32.const 44 i32.const 3 call $~lib/builtins/abort unreachable @@ -7250,8 +7440,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 43 + i32.const 128 + i32.const 45 i32.const 3 call $~lib/builtins/abort unreachable @@ -7263,8 +7453,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 44 + i32.const 128 + i32.const 46 i32.const 3 call $~lib/builtins/abort unreachable @@ -7282,8 +7472,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 50 + i32.const 128 + i32.const 52 i32.const 3 call $~lib/builtins/abort unreachable @@ -7298,8 +7488,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 52 + i32.const 128 + i32.const 54 i32.const 3 call $~lib/builtins/abort unreachable @@ -7314,8 +7504,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 54 + i32.const 128 + i32.const 56 i32.const 3 call $~lib/builtins/abort unreachable @@ -7330,8 +7520,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 57 + i32.const 128 + i32.const 59 i32.const 3 call $~lib/builtins/abort unreachable @@ -7346,8 +7536,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 59 + i32.const 128 + i32.const 61 i32.const 3 call $~lib/builtins/abort unreachable @@ -7362,8 +7552,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 62 + i32.const 128 + i32.const 64 i32.const 3 call $~lib/builtins/abort unreachable @@ -7375,8 +7565,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 63 + i32.const 128 + i32.const 65 i32.const 3 call $~lib/builtins/abort unreachable @@ -7391,8 +7581,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 65 + i32.const 128 + i32.const 67 i32.const 3 call $~lib/builtins/abort unreachable @@ -7404,8 +7594,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 66 + i32.const 128 + i32.const 68 i32.const 3 call $~lib/builtins/abort unreachable @@ -7423,8 +7613,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 72 + i32.const 128 + i32.const 74 i32.const 3 call $~lib/builtins/abort unreachable @@ -7439,8 +7629,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 74 + i32.const 128 + i32.const 76 i32.const 3 call $~lib/builtins/abort unreachable @@ -7455,8 +7645,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 76 + i32.const 128 + i32.const 78 i32.const 3 call $~lib/builtins/abort unreachable @@ -7471,8 +7661,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 79 + i32.const 128 + i32.const 81 i32.const 3 call $~lib/builtins/abort unreachable @@ -7487,8 +7677,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 81 + i32.const 128 + i32.const 83 i32.const 3 call $~lib/builtins/abort unreachable @@ -7506,8 +7696,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 87 + i32.const 128 + i32.const 89 i32.const 3 call $~lib/builtins/abort unreachable @@ -7522,8 +7712,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 89 + i32.const 128 + i32.const 91 i32.const 3 call $~lib/builtins/abort unreachable @@ -7538,8 +7728,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 91 + i32.const 128 + i32.const 93 i32.const 3 call $~lib/builtins/abort unreachable @@ -7554,8 +7744,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 94 + i32.const 128 + i32.const 96 i32.const 3 call $~lib/builtins/abort unreachable @@ -7570,8 +7760,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 96 + i32.const 128 + i32.const 98 i32.const 3 call $~lib/builtins/abort unreachable @@ -7589,8 +7779,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 102 + i32.const 128 + i32.const 104 i32.const 3 call $~lib/builtins/abort unreachable @@ -7605,8 +7795,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 104 + i32.const 128 + i32.const 106 i32.const 3 call $~lib/builtins/abort unreachable @@ -7621,8 +7811,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 106 + i32.const 128 + i32.const 108 i32.const 3 call $~lib/builtins/abort unreachable @@ -7637,8 +7827,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 109 + i32.const 128 + i32.const 111 i32.const 3 call $~lib/builtins/abort unreachable @@ -7653,8 +7843,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 111 + i32.const 128 + i32.const 113 i32.const 3 call $~lib/builtins/abort unreachable @@ -7672,8 +7862,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 117 + i32.const 128 + i32.const 119 i32.const 3 call $~lib/builtins/abort unreachable @@ -7685,8 +7875,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 118 + i32.const 128 + i32.const 120 i32.const 3 call $~lib/builtins/abort unreachable @@ -7701,8 +7891,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 122 + i32.const 128 + i32.const 124 i32.const 3 call $~lib/builtins/abort unreachable @@ -7717,8 +7907,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 124 + i32.const 128 + i32.const 126 i32.const 3 call $~lib/builtins/abort unreachable @@ -7757,8 +7947,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 142 + i32.const 128 + i32.const 144 i32.const 3 call $~lib/builtins/abort unreachable @@ -7770,8 +7960,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 143 + i32.const 128 + i32.const 145 i32.const 3 call $~lib/builtins/abort unreachable @@ -7783,8 +7973,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 144 + i32.const 128 + i32.const 146 i32.const 3 call $~lib/builtins/abort unreachable @@ -7796,8 +7986,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 145 + i32.const 128 + i32.const 147 i32.const 3 call $~lib/builtins/abort unreachable @@ -7809,8 +7999,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 146 + i32.const 128 + i32.const 148 i32.const 3 call $~lib/builtins/abort unreachable @@ -7831,8 +8021,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 150 + i32.const 128 + i32.const 152 i32.const 3 call $~lib/builtins/abort unreachable @@ -7847,8 +8037,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 152 + i32.const 128 + i32.const 154 i32.const 3 call $~lib/builtins/abort unreachable @@ -7863,8 +8053,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 155 + i32.const 128 + i32.const 157 i32.const 3 call $~lib/builtins/abort unreachable @@ -7883,8 +8073,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 158 + i32.const 128 + i32.const 160 i32.const 3 call $~lib/builtins/abort unreachable @@ -7905,8 +8095,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 161 + i32.const 128 + i32.const 163 i32.const 3 call $~lib/builtins/abort unreachable @@ -7927,8 +8117,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 164 + i32.const 128 + i32.const 166 i32.const 3 call $~lib/builtins/abort unreachable @@ -7949,8 +8139,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 168 + i32.const 128 + i32.const 170 i32.const 3 call $~lib/builtins/abort unreachable @@ -7971,8 +8161,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 172 + i32.const 128 + i32.const 174 i32.const 3 call $~lib/builtins/abort unreachable @@ -7990,8 +8180,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 178 + i32.const 128 + i32.const 180 i32.const 3 call $~lib/builtins/abort unreachable @@ -8006,8 +8196,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 180 + i32.const 128 + i32.const 182 i32.const 3 call $~lib/builtins/abort unreachable @@ -8022,8 +8212,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 182 + i32.const 128 + i32.const 184 i32.const 3 call $~lib/builtins/abort unreachable @@ -8047,8 +8237,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 191 + i32.const 128 + i32.const 193 i32.const 3 call $~lib/builtins/abort unreachable @@ -8063,8 +8253,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 193 + i32.const 128 + i32.const 195 i32.const 3 call $~lib/builtins/abort unreachable @@ -8079,8 +8269,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 195 + i32.const 128 + i32.const 197 i32.const 3 call $~lib/builtins/abort unreachable @@ -8093,23 +8283,23 @@ i32.store local.get $1 call $~lib/date/Date#toISOString - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 i32.const 2576 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=8 - local.get $8 + local.get $9 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 32 - i32.const 201 + i32.const 128 + i32.const 203 i32.const 3 call $~lib/builtins/abort unreachable @@ -8124,23 +8314,23 @@ i32.store local.get $1 call $~lib/date/Date#toISOString - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 i32.const 2656 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=8 - local.get $8 + local.get $9 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 32 - i32.const 203 + i32.const 128 + i32.const 205 i32.const 3 call $~lib/builtins/abort unreachable @@ -8153,23 +8343,23 @@ i32.store local.get $1 call $~lib/date/Date#toISOString - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 i32.const 2736 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=8 - local.get $8 + local.get $9 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 32 - i32.const 205 + i32.const 128 + i32.const 207 i32.const 3 call $~lib/builtins/abort unreachable @@ -8182,23 +8372,23 @@ i32.store local.get $1 call $~lib/date/Date#toISOString - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 i32.const 2816 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=8 - local.get $8 + local.get $9 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 32 - i32.const 207 + i32.const 128 + i32.const 209 i32.const 3 call $~lib/builtins/abort unreachable @@ -8211,23 +8401,23 @@ i32.store local.get $1 call $~lib/date/Date#toISOString - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 i32.const 2896 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=8 - local.get $8 + local.get $9 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 32 - i32.const 209 + i32.const 128 + i32.const 211 i32.const 3 call $~lib/builtins/abort unreachable @@ -8240,23 +8430,23 @@ i32.store local.get $1 call $~lib/date/Date#toISOString - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 i32.const 2976 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=8 - local.get $8 + local.get $9 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 32 - i32.const 211 + i32.const 128 + i32.const 213 i32.const 3 call $~lib/builtins/abort unreachable @@ -8269,23 +8459,23 @@ i32.store local.get $1 call $~lib/date/Date#toISOString - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 i32.const 3056 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=8 - local.get $8 + local.get $9 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 32 - i32.const 213 + i32.const 128 + i32.const 215 i32.const 3 call $~lib/builtins/abort unreachable @@ -8298,23 +8488,23 @@ i32.store local.get $1 call $~lib/date/Date#toISOString - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 i32.const 3136 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=8 - local.get $8 + local.get $9 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 32 - i32.const 215 + i32.const 128 + i32.const 217 i32.const 3 call $~lib/builtins/abort unreachable @@ -8327,34 +8517,34 @@ i32.store local.get $1 call $~lib/date/Date#toISOString - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 i32.const 3216 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=8 - local.get $8 + local.get $9 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 32 - i32.const 217 + i32.const 128 + i32.const 219 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer i32.const 3296 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 call $~lib/date/Date.fromString local.tee $1 i32.store @@ -8365,19 +8555,19 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 224 + i32.const 128 + i32.const 226 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer i32.const 3568 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 call $~lib/date/Date.fromString local.tee $1 i32.store @@ -8388,19 +8578,19 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 226 + i32.const 128 + i32.const 228 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer i32.const 3616 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 call $~lib/date/Date.fromString local.tee $1 i32.store @@ -8411,55 +8601,55 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 228 + i32.const 128 + i32.const 230 i32.const 3 call $~lib/builtins/abort unreachable end i32.const 3664 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=8 - local.get $8 + local.get $9 call $~lib/date/Date.fromString - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 call $~lib/date/Date#getTime i32.const 3712 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=8 - local.get $8 + local.get $9 call $~lib/date/Date.fromString - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 call $~lib/date/Date#getTime i64.eq i32.eqz if i32.const 0 - i32.const 32 - i32.const 231 + i32.const 128 + i32.const 233 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer i32.const 3760 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 call $~lib/date/Date.fromString local.tee $1 i32.store @@ -8470,19 +8660,19 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 238 + i32.const 128 + i32.const 240 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer i32.const 3824 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 call $~lib/date/Date.fromString local.tee $1 i32.store @@ -8493,19 +8683,19 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 242 + i32.const 128 + i32.const 244 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer i32.const 3904 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 call $~lib/date/Date.fromString local.tee $1 i32.store @@ -8516,8 +8706,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 246 + i32.const 128 + i32.const 248 i32.const 3 call $~lib/builtins/abort unreachable @@ -8541,8 +8731,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 254 + i32.const 128 + i32.const 256 i32.const 3 call $~lib/builtins/abort unreachable @@ -8554,8 +8744,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 255 + i32.const 128 + i32.const 257 i32.const 3 call $~lib/builtins/abort unreachable @@ -8567,8 +8757,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 257 + i32.const 128 + i32.const 259 i32.const 3 call $~lib/builtins/abort unreachable @@ -8580,8 +8770,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 258 + i32.const 128 + i32.const 260 i32.const 3 call $~lib/builtins/abort unreachable @@ -8593,8 +8783,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 260 + i32.const 128 + i32.const 262 i32.const 3 call $~lib/builtins/abort unreachable @@ -8606,8 +8796,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 261 + i32.const 128 + i32.const 263 i32.const 3 call $~lib/builtins/abort unreachable @@ -8619,8 +8809,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 263 + i32.const 128 + i32.const 265 i32.const 3 call $~lib/builtins/abort unreachable @@ -8632,54 +8822,54 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 264 + i32.const 128 + i32.const 266 i32.const 3 call $~lib/builtins/abort unreachable end local.get $1 call $~lib/date/Date#toISOString - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 i32.const 3984 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=8 - local.get $8 + local.get $9 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 32 - i32.const 266 + i32.const 128 + i32.const 268 i32.const 3 call $~lib/builtins/abort unreachable end local.get $2 call $~lib/date/Date#toISOString - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 i32.const 4064 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=8 - local.get $8 + local.get $9 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 32 - i32.const 267 + i32.const 128 + i32.const 269 i32.const 3 call $~lib/builtins/abort unreachable @@ -8707,8 +8897,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 272 + i32.const 128 + i32.const 274 i32.const 3 call $~lib/builtins/abort unreachable @@ -8720,8 +8910,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 273 + i32.const 128 + i32.const 275 i32.const 3 call $~lib/builtins/abort unreachable @@ -8733,8 +8923,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 274 + i32.const 128 + i32.const 276 i32.const 3 call $~lib/builtins/abort unreachable @@ -8746,8 +8936,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 275 + i32.const 128 + i32.const 277 i32.const 3 call $~lib/builtins/abort unreachable @@ -8759,8 +8949,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 276 + i32.const 128 + i32.const 278 i32.const 3 call $~lib/builtins/abort unreachable @@ -8772,8 +8962,8 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 277 + i32.const 128 + i32.const 279 i32.const 3 call $~lib/builtins/abort unreachable @@ -8785,54 +8975,54 @@ i32.eqz if i32.const 0 - i32.const 32 - i32.const 278 + i32.const 128 + i32.const 280 i32.const 3 call $~lib/builtins/abort unreachable end local.get $3 call $~lib/date/Date#toISOString - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 i32.const 4144 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=8 - local.get $8 + local.get $9 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 32 - i32.const 280 + i32.const 128 + i32.const 282 i32.const 3 call $~lib/builtins/abort unreachable end local.get $4 call $~lib/date/Date#toISOString - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=4 - local.get $8 + local.get $9 i32.const 4224 - local.set $8 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $8 + local.get $9 i32.store offset=8 - local.get $8 + local.get $9 call $~lib/string/String.__eq i32.eqz if i32.const 0 - i32.const 32 - i32.const 281 + i32.const 128 + i32.const 283 i32.const 3 call $~lib/builtins/abort unreachable @@ -8889,9 +9079,9 @@ i64.gt_s end if + i32.const 32 i32.const 80 - i32.const 128 - i32.const 77 + i32.const 79 i32.const 35 call $~lib/builtins/abort unreachable From cbf4579b5b7214a69a6e68a8c4ff35d9ef4bcaa2 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 14:53:05 +0300 Subject: [PATCH 24/47] remove inline from invalidDate --- std/assembly/date.ts | 6 +- tests/compiler/std/date.optimized.wat | 83 ++----- tests/compiler/std/date.untouched.wat | 337 ++++++++++---------------- 3 files changed, 150 insertions(+), 276 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 2c00faee7d..79af5008f3 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -219,9 +219,9 @@ function epochMillis( return (a >= 0 ? a % b : a - (a - b + 1) / b * b) as T; } -// @ts-ignore: decorator -@inline function invalidDate(millis: i64): bool { - return millis < -8640000000000000 || millis > 8640000000000000; +function invalidDate(millis: i64): bool { + // @ts-ignore + return (millis < -8640000000000000) | (millis > 8640000000000000); } // see: http://howardhinnant.github.io/date_algorithms.html#civil_from_days diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index f1a834e1f9..9370f06c2a 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -6,10 +6,10 @@ (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i64_=>_i32 (func (param i64) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_i64_=>_none (func (param i32 i64))) (type $none_=>_i32 (func (result i32))) - (type $i64_=>_i32 (func (param i64) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_i32_i32_i32_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) @@ -214,6 +214,15 @@ i64.add i64.add ) + (func $~lib/date/invalidDate (param $0 i64) (result i32) + local.get $0 + i64.const -8640000000000000 + i64.lt_s + local.get $0 + i64.const 8640000000000000 + i64.gt_s + i32.or + ) (func $~lib/date/ymdFromEpochDays (param $0 i32) (result i32) (local $1 i32) (local $2 i32) @@ -1988,14 +1997,8 @@ local.get $1 ) (func $~lib/date/Date#setTime (param $0 i32) (param $1 i64) - i32.const 1 local.get $1 - i64.const 8640000000000000 - i64.gt_s - local.get $1 - i64.const -8640000000000000 - i64.lt_s - select + call $~lib/date/invalidDate if i32.const 1056 i32.const 1104 @@ -4216,7 +4219,6 @@ i64.const 0 i64.store offset=16 block $folding-inner0 - i32.const 1 i32.const 1970 i32.const 1 i32.const 1 @@ -4226,12 +4228,7 @@ i32.const 0 call $~lib/date/epochMillis local.tee $1 - i64.const 8640000000000000 - i64.gt_s - local.get $1 - i64.const -8640000000000000 - i64.lt_s - select + call $~lib/date/invalidDate br_if $folding-inner0 local.get $1 i64.eqz @@ -4244,7 +4241,6 @@ call $~lib/builtins/abort unreachable end - i32.const 1 i32.const 1970 i32.const 1 i32.const 1 @@ -4254,12 +4250,7 @@ i32.const 0 call $~lib/date/epochMillis local.tee $1 - i64.const 8640000000000000 - i64.gt_s - local.get $1 - i64.const -8640000000000000 - i64.lt_s - select + call $~lib/date/invalidDate br_if $folding-inner0 local.get $1 i64.eqz @@ -4272,7 +4263,6 @@ call $~lib/builtins/abort unreachable end - i32.const 1 i32.const 70 i32.const 1 i32.const 1 @@ -4282,12 +4272,7 @@ i32.const 0 call $~lib/date/epochMillis local.tee $1 - i64.const 8640000000000000 - i64.gt_s - local.get $1 - i64.const -8640000000000000 - i64.lt_s - select + call $~lib/date/invalidDate br_if $folding-inner0 local.get $1 i64.eqz @@ -4300,7 +4285,6 @@ call $~lib/builtins/abort unreachable end - i32.const 1 i32.const 90 i32.const 1 i32.const 1 @@ -4310,12 +4294,7 @@ i32.const 0 call $~lib/date/epochMillis local.tee $1 - i64.const 8640000000000000 - i64.gt_s - local.get $1 - i64.const -8640000000000000 - i64.lt_s - select + call $~lib/date/invalidDate br_if $folding-inner0 local.get $1 i64.const 631152000000 @@ -4328,7 +4307,6 @@ call $~lib/builtins/abort unreachable end - i32.const 1 i32.const -90 i32.const 1 i32.const 1 @@ -4338,12 +4316,7 @@ i32.const 0 call $~lib/date/epochMillis local.tee $1 - i64.const 8640000000000000 - i64.gt_s - local.get $1 - i64.const -8640000000000000 - i64.lt_s - select + call $~lib/date/invalidDate br_if $folding-inner0 local.get $1 i64.const -65007360000000 @@ -4356,7 +4329,6 @@ call $~lib/builtins/abort unreachable end - i32.const 1 i32.const 2018 i32.const 11 i32.const 10 @@ -4366,12 +4338,7 @@ i32.const 1 call $~lib/date/epochMillis local.tee $1 - i64.const 8640000000000000 - i64.gt_s - local.get $1 - i64.const -8640000000000000 - i64.lt_s - select + call $~lib/date/invalidDate br_if $folding-inner0 local.get $1 i64.const 1541847600001 @@ -4384,7 +4351,6 @@ call $~lib/builtins/abort unreachable end - i32.const 1 i32.const 275760 i32.const 9 i32.const 13 @@ -4394,12 +4360,7 @@ i32.const 0 call $~lib/date/epochMillis local.tee $1 - i64.const 8640000000000000 - i64.gt_s - local.get $1 - i64.const -8640000000000000 - i64.lt_s - select + call $~lib/date/invalidDate br_if $folding-inner0 local.get $1 i64.const 8640000000000000 @@ -6082,14 +6043,8 @@ local.get $1 local.get $0 i64.store offset=16 - i32.const 1 - local.get $0 - i64.const 8640000000000000 - i64.gt_s local.get $0 - i64.const -8640000000000000 - i64.lt_s - select + call $~lib/date/invalidDate if i32.const 1056 i32.const 1104 diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 78e8419bba..822066e945 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -11,6 +11,7 @@ (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) (type $i32_i64_i32_i32_=>_none (func (param i32 i64 i32 i32))) (type $none_=>_i32 (func (result i32))) + (type $i64_=>_i32 (func (param i64) (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32))) (type $i32_i64_=>_i32 (func (param i32 i64) (result i32))) @@ -216,6 +217,15 @@ i64.extend_i32_s i64.add ) + (func $~lib/date/invalidDate (param $0 i64) (result i32) + local.get $0 + i64.const -8640000000000000 + i64.lt_s + local.get $0 + i64.const 8640000000000000 + i64.gt_s + i32.or + ) (func $~lib/date/ymdFromEpochDays (param $0 i32) (result i32) (local $1 i32) (local $2 i32) @@ -2664,17 +2674,7 @@ (local $2 i64) (local $3 i64) local.get $1 - local.set $2 - local.get $2 - i64.const -8640000000000000 - i64.lt_s - if (result i32) - i32.const 1 - else - local.get $2 - i64.const 8640000000000000 - i64.gt_s - end + call $~lib/date/invalidDate if i32.const 32 i32.const 80 @@ -6791,8 +6791,7 @@ (local $5 i32) (local $6 i32) (local $7 i64) - (local $8 i64) - (local $9 i32) + (local $8 i32) global.get $~lib/memory/__stack_pointer i32.const 24 i32.sub @@ -6833,17 +6832,7 @@ call $~lib/date/epochMillis local.set $7 local.get $7 - local.set $8 - local.get $8 - i64.const -8640000000000000 - i64.lt_s - if (result i32) - i32.const 1 - else - local.get $8 - i64.const 8640000000000000 - i64.gt_s - end + call $~lib/date/invalidDate if i32.const 32 i32.const 80 @@ -6890,17 +6879,7 @@ call $~lib/date/epochMillis local.set $7 local.get $7 - local.set $8 - local.get $8 - i64.const -8640000000000000 - i64.lt_s - if (result i32) - i32.const 1 - else - local.get $8 - i64.const 8640000000000000 - i64.gt_s - end + call $~lib/date/invalidDate if i32.const 32 i32.const 80 @@ -6947,17 +6926,7 @@ call $~lib/date/epochMillis local.set $7 local.get $7 - local.set $8 - local.get $8 - i64.const -8640000000000000 - i64.lt_s - if (result i32) - i32.const 1 - else - local.get $8 - i64.const 8640000000000000 - i64.gt_s - end + call $~lib/date/invalidDate if i32.const 32 i32.const 80 @@ -7004,17 +6973,7 @@ call $~lib/date/epochMillis local.set $7 local.get $7 - local.set $8 - local.get $8 - i64.const -8640000000000000 - i64.lt_s - if (result i32) - i32.const 1 - else - local.get $8 - i64.const 8640000000000000 - i64.gt_s - end + call $~lib/date/invalidDate if i32.const 32 i32.const 80 @@ -7061,17 +7020,7 @@ call $~lib/date/epochMillis local.set $7 local.get $7 - local.set $8 - local.get $8 - i64.const -8640000000000000 - i64.lt_s - if (result i32) - i32.const 1 - else - local.get $8 - i64.const 8640000000000000 - i64.gt_s - end + call $~lib/date/invalidDate if i32.const 32 i32.const 80 @@ -7118,17 +7067,7 @@ call $~lib/date/epochMillis local.set $7 local.get $7 - local.set $8 - local.get $8 - i64.const -8640000000000000 - i64.lt_s - if (result i32) - i32.const 1 - else - local.get $8 - i64.const 8640000000000000 - i64.gt_s - end + call $~lib/date/invalidDate if i32.const 32 i32.const 80 @@ -7175,17 +7114,7 @@ call $~lib/date/epochMillis local.set $7 local.get $7 - local.set $8 - local.get $8 - i64.const -8640000000000000 - i64.lt_s - if (result i32) - i32.const 1 - else - local.get $8 - i64.const 8640000000000000 - i64.gt_s - end + call $~lib/date/invalidDate if i32.const 32 i32.const 80 @@ -8283,17 +8212,17 @@ i32.store local.get $1 call $~lib/date/Date#toISOString - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 2576 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=8 - local.get $9 + local.get $8 call $~lib/string/String.__eq i32.eqz if @@ -8314,17 +8243,17 @@ i32.store local.get $1 call $~lib/date/Date#toISOString - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 2656 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=8 - local.get $9 + local.get $8 call $~lib/string/String.__eq i32.eqz if @@ -8343,17 +8272,17 @@ i32.store local.get $1 call $~lib/date/Date#toISOString - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 2736 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=8 - local.get $9 + local.get $8 call $~lib/string/String.__eq i32.eqz if @@ -8372,17 +8301,17 @@ i32.store local.get $1 call $~lib/date/Date#toISOString - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 2816 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=8 - local.get $9 + local.get $8 call $~lib/string/String.__eq i32.eqz if @@ -8401,17 +8330,17 @@ i32.store local.get $1 call $~lib/date/Date#toISOString - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 2896 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=8 - local.get $9 + local.get $8 call $~lib/string/String.__eq i32.eqz if @@ -8430,17 +8359,17 @@ i32.store local.get $1 call $~lib/date/Date#toISOString - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 2976 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=8 - local.get $9 + local.get $8 call $~lib/string/String.__eq i32.eqz if @@ -8459,17 +8388,17 @@ i32.store local.get $1 call $~lib/date/Date#toISOString - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 3056 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=8 - local.get $9 + local.get $8 call $~lib/string/String.__eq i32.eqz if @@ -8488,17 +8417,17 @@ i32.store local.get $1 call $~lib/date/Date#toISOString - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 3136 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=8 - local.get $9 + local.get $8 call $~lib/string/String.__eq i32.eqz if @@ -8517,17 +8446,17 @@ i32.store local.get $1 call $~lib/date/Date#toISOString - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 3216 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=8 - local.get $9 + local.get $8 call $~lib/string/String.__eq i32.eqz if @@ -8540,11 +8469,11 @@ end global.get $~lib/memory/__stack_pointer i32.const 3296 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 call $~lib/date/Date.fromString local.tee $1 i32.store @@ -8563,11 +8492,11 @@ end global.get $~lib/memory/__stack_pointer i32.const 3568 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 call $~lib/date/Date.fromString local.tee $1 i32.store @@ -8586,11 +8515,11 @@ end global.get $~lib/memory/__stack_pointer i32.const 3616 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 call $~lib/date/Date.fromString local.tee $1 i32.store @@ -8608,30 +8537,30 @@ unreachable end i32.const 3664 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=8 - local.get $9 + local.get $8 call $~lib/date/Date.fromString - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 call $~lib/date/Date#getTime i32.const 3712 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=8 - local.get $9 + local.get $8 call $~lib/date/Date.fromString - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 call $~lib/date/Date#getTime i64.eq i32.eqz @@ -8645,11 +8574,11 @@ end global.get $~lib/memory/__stack_pointer i32.const 3760 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 call $~lib/date/Date.fromString local.tee $1 i32.store @@ -8668,11 +8597,11 @@ end global.get $~lib/memory/__stack_pointer i32.const 3824 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 call $~lib/date/Date.fromString local.tee $1 i32.store @@ -8691,11 +8620,11 @@ end global.get $~lib/memory/__stack_pointer i32.const 3904 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 call $~lib/date/Date.fromString local.tee $1 i32.store @@ -8830,17 +8759,17 @@ end local.get $1 call $~lib/date/Date#toISOString - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 3984 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=8 - local.get $9 + local.get $8 call $~lib/string/String.__eq i32.eqz if @@ -8853,17 +8782,17 @@ end local.get $2 call $~lib/date/Date#toISOString - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 4064 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=8 - local.get $9 + local.get $8 call $~lib/string/String.__eq i32.eqz if @@ -8983,17 +8912,17 @@ end local.get $3 call $~lib/date/Date#toISOString - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 4144 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=8 - local.get $9 + local.get $8 call $~lib/string/String.__eq i32.eqz if @@ -9006,17 +8935,17 @@ end local.get $4 call $~lib/date/Date#toISOString - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=4 - local.get $9 + local.get $8 i32.const 4224 - local.set $9 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $8 i32.store offset=8 - local.get $9 + local.get $8 call $~lib/string/String.__eq i32.eqz if @@ -9067,17 +8996,7 @@ local.get $1 call $~lib/date/Date#set:epochMillis local.get $1 - local.set $2 - local.get $2 - i64.const -8640000000000000 - i64.lt_s - if (result i32) - i32.const 1 - else - local.get $2 - i64.const 8640000000000000 - i64.gt_s - end + call $~lib/date/invalidDate if i32.const 32 i32.const 80 From b53d9c6b0ba9034c0a02075294086336cdce1241 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 15:14:51 +0300 Subject: [PATCH 25/47] use unsigned types for some ymdFromEpochDays and daysSinceEpoch ops --- std/assembly/date.ts | 12 ++++++------ tests/compiler/std/date.optimized.wat | 24 ++++++++++++------------ tests/compiler/std/date.untouched.wat | 20 ++++++++++---------- 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 79af5008f3..b7bb0f6099 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -227,8 +227,8 @@ function invalidDate(millis: i64): bool { // see: http://howardhinnant.github.io/date_algorithms.html#civil_from_days function ymdFromEpochDays(z: i32): i32 { z += 719468; - var era = floorDiv(z, 146097); - var doe = z - era * 146097; // [0, 146096] + var era = floorDiv(z, 146097); + var doe = z - era * 146097; // [0, 146096] var yoe = (doe - doe / 1460 + doe / 36524 - doe / 146096) / 365; // [0, 399] var year = yoe + era * 400; var doy = doe - (365 * yoe + yoe / 4 - yoe / 100); // [0, 365] @@ -236,16 +236,16 @@ function ymdFromEpochDays(z: i32): i32 { _day = doy - (153 * mo + 2) / 5 + 1; // [1, 31] mo += mo < 10 ? 3 : -9; // [1, 12] _month = mo; - year += i32(mo <= 2); + year += u32(mo <= 2); return year; } // http://howardhinnant.github.io/date_algorithms.html#days_from_civil function daysSinceEpoch(y: i32, m: i32, d: i32): i32 { y -= i32(m <= 2); - var era = floorDiv(y, 400); - var yoe = y - era * 400; // [0, 399] - var doy = (153 * (m + (m > 2 ? -3 : 9)) + 2) / 5 + d - 1; // [0, 365] + var era = floorDiv(y, 400); + var yoe = y - era * 400; // [0, 399] + var doy = (153 * (m + (m > 2 ? -3 : 9)) + 2) / 5 + d - 1; // [0, 365] var doe = yoe * 365 + yoe / 4 - yoe / 100 + doy; // [0, 146096] return era * 146097 + doe - 719468; } diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index 9370f06c2a..c5bbc50a84 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -152,7 +152,7 @@ i32.const 2 i32.add i32.const 5 - i32.div_s + i32.div_u i32.add local.get $0 local.get $3 @@ -163,12 +163,12 @@ i32.const 365 i32.mul local.get $0 - i32.const 4 - i32.div_s + i32.const 2 + i32.shr_u i32.add local.get $0 i32.const 100 - i32.div_s + i32.div_u i32.sub i32.add i32.add @@ -249,30 +249,30 @@ local.tee $0 local.get $0 i32.const 1460 - i32.div_s + i32.div_u i32.sub local.get $0 i32.const 36524 - i32.div_s + i32.div_u i32.add local.get $0 i32.const 146096 - i32.div_s + i32.div_u i32.sub i32.const 365 - i32.div_s + i32.div_u local.set $1 local.get $0 local.get $1 i32.const 365 i32.mul local.get $1 - i32.const 4 - i32.div_s + i32.const 2 + i32.shr_u i32.add local.get $1 i32.const 100 - i32.div_s + i32.div_u i32.sub i32.sub local.tee $3 @@ -290,7 +290,7 @@ i32.const 2 i32.add i32.const 5 - i32.div_s + i32.div_u i32.sub i32.const 1 i32.add diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 822066e945..f767b7dadc 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -146,7 +146,7 @@ i32.const 2 i32.add i32.const 5 - i32.div_s + i32.div_u local.get $2 i32.add i32.const 1 @@ -157,11 +157,11 @@ i32.mul local.get $6 i32.const 4 - i32.div_s + i32.div_u i32.add local.get $6 i32.const 100 - i32.div_s + i32.div_u i32.sub local.get $7 i32.add @@ -267,18 +267,18 @@ local.get $4 local.get $4 i32.const 1460 - i32.div_s + i32.div_u i32.sub local.get $4 i32.const 36524 - i32.div_s + i32.div_u i32.add local.get $4 i32.const 146096 - i32.div_s + i32.div_u i32.sub i32.const 365 - i32.div_s + i32.div_u local.set $5 local.get $5 local.get $3 @@ -292,11 +292,11 @@ i32.mul local.get $5 i32.const 4 - i32.div_s + i32.div_u i32.add local.get $5 i32.const 100 - i32.div_s + i32.div_u i32.sub i32.sub local.set $7 @@ -315,7 +315,7 @@ i32.const 2 i32.add i32.const 5 - i32.div_s + i32.div_u i32.sub i32.const 1 i32.add From 0c8aa0cf02aedbf90e7d643138718b4238d146a9 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 16:34:24 +0300 Subject: [PATCH 26/47] more parser fixes --- std/assembly/date.ts | 11 +- tests/compiler/std/date.optimized.wat | 264 ++++++++++++++++-------- tests/compiler/std/date.ts | 9 + tests/compiler/std/date.untouched.wat | 284 +++++++++++++++++--------- 4 files changed, 387 insertions(+), 181 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index b7bb0f6099..e3fb546820 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -64,12 +64,15 @@ export class Date { } } // parse the YYYY-MM-DD component + var day = 1, month = 1; var parts = dateString.split("-"); + var len = parts.length; - var day = I32.parseInt(parts[2]); - var month = I32.parseInt(parts[1]); - var year = I32.parseInt(parts[0]); - + var year = I32.parseInt(parts[0]); + if (len > 1) { + month = len >= 2 ? I32.parseInt(parts[1]) : 1; + day = len == 3 ? I32.parseInt(parts[2]) : 1; + } return new Date(epochMillis(year, month, day, hour, min, sec, ms)); } diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index c5bbc50a84..73ef3c481b 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -92,16 +92,20 @@ (data (i32.const 3384) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") (data (i32.const 3452) "L") (data (i32.const 3464) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") - (data (i32.const 3532) "L") - (data (i32.const 3544) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3532) "\1c") + (data (i32.const 3544) "\01\00\00\00\08\00\00\001\009\007\006") + (data (i32.const 3564) ",") + (data (i32.const 3576) "\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002") (data (i32.const 3612) "L") - (data (i32.const 3624) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3624) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") (data (i32.const 3692) "L") - (data (i32.const 3704) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 3704) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") (data (i32.const 3772) "L") - (data (i32.const 3784) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z") - (data (i32.const 3856) "\06\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 3884) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") + (data (i32.const 3784) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 3852) "L") + (data (i32.const 3864) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z") + (data (i32.const 3936) "\06\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 3964) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) @@ -114,7 +118,7 @@ (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/memory/__stack_pointer (mut i32) (i32.const 20292)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20372)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -449,7 +453,7 @@ if i32.const 0 local.get $0 - i32.const 20292 + i32.const 20372 i32.lt_u local.get $0 i32.load offset=8 @@ -495,7 +499,7 @@ i32.const 1 else local.get $1 - i32.const 3856 + i32.const 3936 i32.load i32.gt_u if @@ -509,7 +513,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 3860 + i32.const 3940 i32.add i32.load i32.const 32 @@ -1083,10 +1087,10 @@ if unreachable end - i32.const 20304 + i32.const 20384 i32.const 0 i32.store - i32.const 21872 + i32.const 21952 i32.const 0 i32.store loop $for-loop|0 @@ -1097,7 +1101,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 20304 + i32.const 20384 i32.add i32.const 0 i32.store offset=4 @@ -1115,7 +1119,7 @@ i32.add i32.const 2 i32.shl - i32.const 20304 + i32.const 20384 i32.add i32.const 0 i32.store offset=96 @@ -1133,13 +1137,13 @@ br $for-loop|0 end end - i32.const 20304 - i32.const 21876 + i32.const 20384 + i32.const 21956 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 20304 + i32.const 20384 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -1218,7 +1222,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 20292 + i32.const 20372 i32.lt_u if local.get $0 @@ -1308,7 +1312,7 @@ unreachable end local.get $0 - i32.const 20292 + i32.const 20372 i32.lt_u if local.get $0 @@ -1331,7 +1335,7 @@ i32.const 4 i32.add local.tee $1 - i32.const 20292 + i32.const 20372 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -2002,7 +2006,7 @@ if i32.const 1056 i32.const 1104 - i32.const 91 + i32.const 94 i32.const 28 call $~lib/builtins/abort unreachable @@ -3403,11 +3407,11 @@ ) (func $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 3908 + i32.const 3988 i32.lt_s if - i32.const 20320 - i32.const 20368 + i32.const 20400 + i32.const 20448 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -4027,6 +4031,8 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) + (local $8 i32) global.get $~lib/memory/__stack_pointer i32.const 28 i32.sub @@ -4091,7 +4097,7 @@ i32.store offset=16 local.get $2 call $~lib/util/string/strtol - local.set $4 + local.set $6 local.get $0 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get @@ -4101,7 +4107,7 @@ i32.store offset=16 local.get $2 call $~lib/util/string/strtol - local.set $5 + local.set $7 global.get $~lib/memory/__stack_pointer local.get $0 i32.const 2 @@ -4129,7 +4135,7 @@ i32.store offset=16 local.get $3 call $~lib/util/string/strtol - local.set $3 + local.set $5 local.get $0 local.get $2 i32.const 1 @@ -4142,13 +4148,15 @@ i32.store offset=16 local.get $0 call $~lib/util/string/strtol - local.set $6 + local.set $8 else local.get $0 call $~lib/util/string/strtol - local.set $3 + local.set $5 end end + i32.const 1 + local.set $2 global.get $~lib/memory/__stack_pointer i32.const 1600 i32.store @@ -4156,43 +4164,67 @@ local.get $1 i32.const 1600 call $~lib/string/String#split - local.tee $0 + local.tee $1 i32.store offset=24 - local.get $0 - i32.const 2 - call $~lib/array/Array<~lib/string/String>#__get - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=16 local.get $1 - call $~lib/util/string/strtol - local.set $2 - local.get $0 - i32.const 1 - call $~lib/array/Array<~lib/string/String>#__get - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=16 + i32.load offset=12 + local.set $3 local.get $1 - call $~lib/util/string/strtol - local.set $1 - local.get $0 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.set $0 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $4 i32.store offset=16 - local.get $0 - call $~lib/util/string/strtol - local.get $1 - local.get $2 local.get $4 - local.get $5 + call $~lib/util/string/strtol local.get $3 + i32.const 1 + i32.gt_s + if (result i32) + local.get $3 + i32.const 2 + i32.ge_s + if (result i32) + local.get $1 + i32.const 1 + call $~lib/array/Array<~lib/string/String>#__get + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=16 + local.get $0 + call $~lib/util/string/strtol + else + i32.const 1 + end + local.set $2 + local.get $3 + i32.const 3 + i32.eq + if (result i32) + local.get $1 + i32.const 2 + call $~lib/array/Array<~lib/string/String>#__get + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=16 + local.get $0 + call $~lib/util/string/strtol + else + i32.const 1 + end + else + i32.const 1 + end + local.set $0 + local.get $2 + local.get $0 local.get $6 + local.get $7 + local.get $5 + local.get $8 call $~lib/date/epochMillis call $~lib/date/Date#constructor global.get $~lib/memory/__stack_pointer @@ -4376,7 +4408,7 @@ memory.size i32.const 16 i32.shl - i32.const 20292 + i32.const 20372 i32.sub i32.const 1 i32.shr_u @@ -5725,6 +5757,66 @@ unreachable end global.get $~lib/memory/__stack_pointer + i32.const 3552 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3552 + call $~lib/date/Date.fromString + local.tee $0 + i32.store + local.get $0 + i64.load offset=16 + i64.const 189302400000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 251 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3584 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3584 + call $~lib/date/Date.fromString + local.tee $0 + i32.store + local.get $0 + i64.load offset=16 + i64.const 191980800000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 254 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 2864 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 2864 + call $~lib/date/Date.fromString + local.tee $0 + i32.store + local.get $0 + i64.load offset=16 + i64.const 192067200000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 257 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer i64.const -8640000000000000 call $~lib/date/Date#constructor local.tee $0 @@ -5741,7 +5833,7 @@ if i32.const 0 i32.const 1152 - i32.const 256 + i32.const 265 i32.const 3 call $~lib/builtins/abort unreachable @@ -5753,7 +5845,7 @@ if i32.const 0 i32.const 1152 - i32.const 257 + i32.const 266 i32.const 3 call $~lib/builtins/abort unreachable @@ -5765,7 +5857,7 @@ if i32.const 0 i32.const 1152 - i32.const 259 + i32.const 268 i32.const 3 call $~lib/builtins/abort unreachable @@ -5777,7 +5869,7 @@ if i32.const 0 i32.const 1152 - i32.const 260 + i32.const 269 i32.const 3 call $~lib/builtins/abort unreachable @@ -5789,7 +5881,7 @@ if i32.const 0 i32.const 1152 - i32.const 262 + i32.const 271 i32.const 3 call $~lib/builtins/abort unreachable @@ -5801,7 +5893,7 @@ if i32.const 0 i32.const 1152 - i32.const 263 + i32.const 272 i32.const 3 call $~lib/builtins/abort unreachable @@ -5813,7 +5905,7 @@ if i32.const 0 i32.const 1152 - i32.const 265 + i32.const 274 i32.const 3 call $~lib/builtins/abort unreachable @@ -5825,7 +5917,7 @@ if i32.const 0 i32.const 1152 - i32.const 266 + i32.const 275 i32.const 3 call $~lib/builtins/abort unreachable @@ -5837,16 +5929,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3552 + i32.const 3632 i32.store offset=8 local.get $0 - i32.const 3552 + i32.const 3632 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 268 + i32.const 277 i32.const 3 call $~lib/builtins/abort unreachable @@ -5858,16 +5950,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3632 + i32.const 3712 i32.store offset=8 local.get $0 - i32.const 3632 + i32.const 3712 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 269 + i32.const 278 i32.const 3 call $~lib/builtins/abort unreachable @@ -5889,7 +5981,7 @@ if i32.const 0 i32.const 1152 - i32.const 274 + i32.const 283 i32.const 3 call $~lib/builtins/abort unreachable @@ -5901,7 +5993,7 @@ if i32.const 0 i32.const 1152 - i32.const 275 + i32.const 284 i32.const 3 call $~lib/builtins/abort unreachable @@ -5913,7 +6005,7 @@ if i32.const 0 i32.const 1152 - i32.const 276 + i32.const 285 i32.const 3 call $~lib/builtins/abort unreachable @@ -5923,7 +6015,7 @@ if i32.const 0 i32.const 1152 - i32.const 277 + i32.const 286 i32.const 3 call $~lib/builtins/abort unreachable @@ -5933,7 +6025,7 @@ if i32.const 0 i32.const 1152 - i32.const 278 + i32.const 287 i32.const 3 call $~lib/builtins/abort unreachable @@ -5943,7 +6035,7 @@ if i32.const 0 i32.const 1152 - i32.const 279 + i32.const 288 i32.const 3 call $~lib/builtins/abort unreachable @@ -5955,7 +6047,7 @@ if i32.const 0 i32.const 1152 - i32.const 280 + i32.const 289 i32.const 3 call $~lib/builtins/abort unreachable @@ -5967,16 +6059,16 @@ local.get $2 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3712 + i32.const 3792 i32.store offset=8 local.get $2 - i32.const 3712 + i32.const 3792 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 282 + i32.const 291 i32.const 3 call $~lib/builtins/abort unreachable @@ -5988,16 +6080,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3792 + i32.const 3872 i32.store offset=8 local.get $0 - i32.const 3792 + i32.const 3872 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 283 + i32.const 292 i32.const 3 call $~lib/builtins/abort unreachable @@ -6048,7 +6140,7 @@ if i32.const 1056 i32.const 1104 - i32.const 79 + i32.const 82 i32.const 35 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index 69c4780ed5..7116876785 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -246,6 +246,15 @@ // supports 'Z' suffix date = Date.fromString("1976-02-02T12:34:56.456Z"); assert(date.getTime() == 192112496456); + + date = Date.fromString("1976"); + assert(date.getTime() == 189302400000); + + date = Date.fromString("1976-02"); + assert(date.getTime() == 191980800000); + + date = Date.fromString("1976-02-02"); + assert(date.getTime() == 192067200000); } // Minimum / Maximum dates //////////////////////////////////////////////////////////////////////// diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index f767b7dadc..f0d2dd31c4 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -65,11 +65,13 @@ (data (i32.const 3740) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00\00\00\00\00\00\00") (data (i32.const 3804) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 3884) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3964) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 4044) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 4124) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") - (data (i32.const 4204) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z\00\00\00\00\00\00\00") - (data (i32.const 4288) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") + (data (i32.const 3964) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\001\009\007\006\00\00\00\00\00") + (data (i32.const 3996) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 4044) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 4124) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 4204) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") + (data (i32.const 4284) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z\00\00\00\00\00\00\00") + (data (i32.const 4368) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") (table $0 1 funcref) (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) @@ -86,10 +88,10 @@ (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) - (global $~lib/rt/__rtti_base i32 (i32.const 4288)) - (global $~lib/memory/__data_end i32 (i32.const 4340)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20724)) - (global $~lib/memory/__heap_base i32 (i32.const 20724)) + (global $~lib/rt/__rtti_base i32 (i32.const 4368)) + (global $~lib/memory/__data_end i32 (i32.const 4420)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20804)) + (global $~lib/memory/__heap_base i32 (i32.const 20804)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -2678,7 +2680,7 @@ if i32.const 32 i32.const 80 - i32.const 91 + i32.const 94 i32.const 28 call $~lib/builtins/abort unreachable @@ -5658,6 +5660,10 @@ local.get $1 call $~lib/util/string/strtol ) + (func $~lib/array/Array<~lib/string/String>#get:length (param $0 i32) (result i32) + local.get $0 + i32.load offset=12 + ) (func $~lib/rt/__visit_globals (param $0 i32) (local $1 i32) i32.const 368 @@ -5807,8 +5813,8 @@ global.get $~lib/memory/__data_end i32.lt_s if - i32.const 20752 - i32.const 20800 + i32.const 20832 + i32.const 20880 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -6576,6 +6582,7 @@ (local $13 i32) (local $14 i32) (local $15 i32) + (local $16 i32) global.get $~lib/memory/__stack_pointer i32.const 28 i32.sub @@ -6605,11 +6612,11 @@ local.set $5 local.get $0 i32.const 2448 - local.set $15 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $15 + local.get $16 i32.store - local.get $15 + local.get $16 i32.const 0 call $~lib/string/String#indexOf local.set $6 @@ -6636,11 +6643,11 @@ global.get $~lib/memory/__stack_pointer local.get $7 i32.const 2480 - local.set $15 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $15 + local.get $16 i32.store - local.get $15 + local.get $16 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#split local.tee $8 @@ -6648,22 +6655,22 @@ local.get $8 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.set $15 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $15 + local.get $16 i32.store offset=16 - local.get $15 + local.get $16 i32.const 0 call $~lib/number/I32.parseInt local.set $1 local.get $8 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.set $15 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $15 + local.get $16 i32.store offset=16 - local.get $15 + local.get $16 i32.const 0 call $~lib/number/I32.parseInt local.set $2 @@ -6675,11 +6682,11 @@ i32.store offset=20 local.get $9 i32.const 2512 - local.set $15 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $15 + local.get $16 i32.store - local.get $15 + local.get $16 i32.const 0 call $~lib/string/String#indexOf local.set $10 @@ -6691,11 +6698,11 @@ i32.const 0 local.get $10 call $~lib/string/String#substring - local.set $15 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $15 + local.get $16 i32.store offset=16 - local.get $15 + local.get $16 i32.const 0 call $~lib/number/I32.parseInt local.set $3 @@ -6705,11 +6712,11 @@ i32.add global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#substring - local.set $15 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $15 + local.get $16 i32.store offset=16 - local.get $15 + local.get $16 i32.const 0 call $~lib/number/I32.parseInt local.set $4 @@ -6720,67 +6727,93 @@ local.set $3 end end + i32.const 1 + local.set $11 + i32.const 1 + local.set $12 global.get $~lib/memory/__stack_pointer local.get $5 i32.const 576 - local.set $15 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $15 + local.get $16 i32.store - local.get $15 + local.get $16 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#split - local.tee $11 + local.tee $13 i32.store offset=24 - local.get $11 - i32.const 2 - call $~lib/array/Array<~lib/string/String>#__get - local.set $15 - global.get $~lib/memory/__stack_pointer - local.get $15 - i32.store offset=16 - local.get $15 + local.get $13 + call $~lib/array/Array<~lib/string/String>#get:length + local.set $14 + local.get $13 i32.const 0 - call $~lib/number/I32.parseInt - local.set $12 - local.get $11 - i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.set $15 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $15 + local.get $16 i32.store offset=16 - local.get $15 + local.get $16 i32.const 0 call $~lib/number/I32.parseInt - local.set $13 - local.get $11 - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get local.set $15 - global.get $~lib/memory/__stack_pointer - local.get $15 - i32.store offset=16 - local.get $15 - i32.const 0 - call $~lib/number/I32.parseInt - local.set $14 - i32.const 0 local.get $14 - local.get $13 + i32.const 1 + i32.gt_s + if + local.get $14 + i32.const 2 + i32.ge_s + if (result i32) + local.get $13 + i32.const 1 + call $~lib/array/Array<~lib/string/String>#__get + local.set $16 + global.get $~lib/memory/__stack_pointer + local.get $16 + i32.store offset=16 + local.get $16 + i32.const 0 + call $~lib/number/I32.parseInt + else + i32.const 1 + end + local.set $12 + local.get $14 + i32.const 3 + i32.eq + if (result i32) + local.get $13 + i32.const 2 + call $~lib/array/Array<~lib/string/String>#__get + local.set $16 + global.get $~lib/memory/__stack_pointer + local.get $16 + i32.store offset=16 + local.get $16 + i32.const 0 + call $~lib/number/I32.parseInt + else + i32.const 1 + end + local.set $11 + end + i32.const 0 + local.get $15 local.get $12 + local.get $11 local.get $1 local.get $2 local.get $3 local.get $4 call $~lib/date/epochMillis call $~lib/date/Date#constructor - local.set $15 + local.set $16 global.get $~lib/memory/__stack_pointer i32.const 28 i32.add global.set $~lib/memory/__stack_pointer - local.get $15 + local.get $16 ) (func $start:std/date (local $0 i32) @@ -8642,6 +8675,75 @@ unreachable end global.get $~lib/memory/__stack_pointer + i32.const 3984 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/date/Date.fromString + local.tee $1 + i32.store + local.get $1 + call $~lib/date/Date#getTime + i64.const 189302400000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 251 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4016 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/date/Date.fromString + local.tee $1 + i32.store + local.get $1 + call $~lib/date/Date#getTime + i64.const 191980800000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 254 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3296 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/date/Date.fromString + local.tee $1 + i32.store + local.get $1 + call $~lib/date/Date#getTime + i64.const 192067200000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 257 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer i32.const 0 i64.const -8640000000000000 call $~lib/date/Date#constructor @@ -8661,7 +8763,7 @@ if i32.const 0 i32.const 128 - i32.const 256 + i32.const 265 i32.const 3 call $~lib/builtins/abort unreachable @@ -8674,7 +8776,7 @@ if i32.const 0 i32.const 128 - i32.const 257 + i32.const 266 i32.const 3 call $~lib/builtins/abort unreachable @@ -8687,7 +8789,7 @@ if i32.const 0 i32.const 128 - i32.const 259 + i32.const 268 i32.const 3 call $~lib/builtins/abort unreachable @@ -8700,7 +8802,7 @@ if i32.const 0 i32.const 128 - i32.const 260 + i32.const 269 i32.const 3 call $~lib/builtins/abort unreachable @@ -8713,7 +8815,7 @@ if i32.const 0 i32.const 128 - i32.const 262 + i32.const 271 i32.const 3 call $~lib/builtins/abort unreachable @@ -8726,7 +8828,7 @@ if i32.const 0 i32.const 128 - i32.const 263 + i32.const 272 i32.const 3 call $~lib/builtins/abort unreachable @@ -8739,7 +8841,7 @@ if i32.const 0 i32.const 128 - i32.const 265 + i32.const 274 i32.const 3 call $~lib/builtins/abort unreachable @@ -8752,7 +8854,7 @@ if i32.const 0 i32.const 128 - i32.const 266 + i32.const 275 i32.const 3 call $~lib/builtins/abort unreachable @@ -8764,7 +8866,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 3984 + i32.const 4064 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8775,7 +8877,7 @@ if i32.const 0 i32.const 128 - i32.const 268 + i32.const 277 i32.const 3 call $~lib/builtins/abort unreachable @@ -8787,7 +8889,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4064 + i32.const 4144 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8798,7 +8900,7 @@ if i32.const 0 i32.const 128 - i32.const 269 + i32.const 278 i32.const 3 call $~lib/builtins/abort unreachable @@ -8827,7 +8929,7 @@ if i32.const 0 i32.const 128 - i32.const 274 + i32.const 283 i32.const 3 call $~lib/builtins/abort unreachable @@ -8840,7 +8942,7 @@ if i32.const 0 i32.const 128 - i32.const 275 + i32.const 284 i32.const 3 call $~lib/builtins/abort unreachable @@ -8853,7 +8955,7 @@ if i32.const 0 i32.const 128 - i32.const 276 + i32.const 285 i32.const 3 call $~lib/builtins/abort unreachable @@ -8866,7 +8968,7 @@ if i32.const 0 i32.const 128 - i32.const 277 + i32.const 286 i32.const 3 call $~lib/builtins/abort unreachable @@ -8879,7 +8981,7 @@ if i32.const 0 i32.const 128 - i32.const 278 + i32.const 287 i32.const 3 call $~lib/builtins/abort unreachable @@ -8892,7 +8994,7 @@ if i32.const 0 i32.const 128 - i32.const 279 + i32.const 288 i32.const 3 call $~lib/builtins/abort unreachable @@ -8905,7 +9007,7 @@ if i32.const 0 i32.const 128 - i32.const 280 + i32.const 289 i32.const 3 call $~lib/builtins/abort unreachable @@ -8917,7 +9019,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4144 + i32.const 4224 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8928,7 +9030,7 @@ if i32.const 0 i32.const 128 - i32.const 282 + i32.const 291 i32.const 3 call $~lib/builtins/abort unreachable @@ -8940,7 +9042,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4224 + i32.const 4304 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8951,7 +9053,7 @@ if i32.const 0 i32.const 128 - i32.const 283 + i32.const 292 i32.const 3 call $~lib/builtins/abort unreachable @@ -9000,7 +9102,7 @@ if i32.const 32 i32.const 80 - i32.const 79 + i32.const 82 i32.const 35 call $~lib/builtins/abort unreachable From e74c9151bd316dad291a6e8f46cf5aae8c90839d Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 16:42:49 +0300 Subject: [PATCH 27/47] refactor --- std/assembly/date.ts | 5 ++- tests/compiler/std/date.optimized.wat | 51 +++++++++++++-------------- tests/compiler/std/date.untouched.wat | 40 ++++++++++----------- 3 files changed, 47 insertions(+), 49 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index e3fb546820..db424e9c49 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -64,11 +64,10 @@ export class Date { } } // parse the YYYY-MM-DD component - var day = 1, month = 1; var parts = dateString.split("-"); - var len = parts.length; - var year = I32.parseInt(parts[0]); + var month = 1, day = 1; + var len = parts.length; if (len > 1) { month = len >= 2 ? I32.parseInt(parts[1]) : 1; day = len == 3 ? I32.parseInt(parts[2]) : 1; diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index 73ef3c481b..9a1236b6ad 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -2006,7 +2006,7 @@ if i32.const 1056 i32.const 1104 - i32.const 94 + i32.const 93 i32.const 28 call $~lib/builtins/abort unreachable @@ -4097,7 +4097,7 @@ i32.store offset=16 local.get $2 call $~lib/util/string/strtol - local.set $6 + local.set $5 local.get $0 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get @@ -4107,7 +4107,7 @@ i32.store offset=16 local.get $2 call $~lib/util/string/strtol - local.set $7 + local.set $6 global.get $~lib/memory/__stack_pointer local.get $0 i32.const 2 @@ -4135,7 +4135,7 @@ i32.store offset=16 local.get $3 call $~lib/util/string/strtol - local.set $5 + local.set $3 local.get $0 local.get $2 i32.const 1 @@ -4148,15 +4148,13 @@ i32.store offset=16 local.get $0 call $~lib/util/string/strtol - local.set $8 + local.set $7 else local.get $0 call $~lib/util/string/strtol - local.set $5 + local.set $3 end end - i32.const 1 - local.set $2 global.get $~lib/memory/__stack_pointer i32.const 1600 i32.store @@ -4164,29 +4162,30 @@ local.get $1 i32.const 1600 call $~lib/string/String#split - local.tee $1 + local.tee $2 i32.store offset=24 - local.get $1 - i32.load offset=12 - local.set $3 - local.get $1 + local.get $2 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.set $4 + local.set $0 global.get $~lib/memory/__stack_pointer - local.get $4 + local.get $0 i32.store offset=16 - local.get $4 + local.get $0 call $~lib/util/string/strtol - local.get $3 + i32.const 1 + local.set $1 + local.get $2 + i32.load offset=12 + local.tee $4 i32.const 1 i32.gt_s if (result i32) - local.get $3 + local.get $4 i32.const 2 i32.ge_s if (result i32) - local.get $1 + local.get $2 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get local.set $0 @@ -4198,12 +4197,12 @@ else i32.const 1 end - local.set $2 - local.get $3 + local.set $1 + local.get $4 i32.const 3 i32.eq if (result i32) - local.get $1 + local.get $2 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get local.set $0 @@ -4219,12 +4218,12 @@ i32.const 1 end local.set $0 - local.get $2 + local.get $1 local.get $0 + local.get $5 local.get $6 + local.get $3 local.get $7 - local.get $5 - local.get $8 call $~lib/date/epochMillis call $~lib/date/Date#constructor global.get $~lib/memory/__stack_pointer @@ -6140,7 +6139,7 @@ if i32.const 1056 i32.const 1104 - i32.const 82 + i32.const 81 i32.const 35 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index f0d2dd31c4..579e441853 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -2680,7 +2680,7 @@ if i32.const 32 i32.const 80 - i32.const 94 + i32.const 93 i32.const 28 call $~lib/builtins/abort unreachable @@ -6727,10 +6727,6 @@ local.set $3 end end - i32.const 1 - local.set $11 - i32.const 1 - local.set $12 global.get $~lib/memory/__stack_pointer local.get $5 i32.const 576 @@ -6741,12 +6737,9 @@ local.get $16 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#split - local.tee $13 + local.tee $11 i32.store offset=24 - local.get $13 - call $~lib/array/Array<~lib/string/String>#get:length - local.set $14 - local.get $13 + local.get $11 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get local.set $16 @@ -6756,16 +6749,23 @@ local.get $16 i32.const 0 call $~lib/number/I32.parseInt + local.set $12 + i32.const 1 + local.set $13 + i32.const 1 + local.set $14 + local.get $11 + call $~lib/array/Array<~lib/string/String>#get:length local.set $15 - local.get $14 + local.get $15 i32.const 1 i32.gt_s if - local.get $14 + local.get $15 i32.const 2 i32.ge_s if (result i32) - local.get $13 + local.get $11 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get local.set $16 @@ -6778,12 +6778,12 @@ else i32.const 1 end - local.set $12 - local.get $14 + local.set $13 + local.get $15 i32.const 3 i32.eq if (result i32) - local.get $13 + local.get $11 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get local.set $16 @@ -6796,12 +6796,12 @@ else i32.const 1 end - local.set $11 + local.set $14 end i32.const 0 - local.get $15 local.get $12 - local.get $11 + local.get $13 + local.get $14 local.get $1 local.get $2 local.get $3 @@ -9102,7 +9102,7 @@ if i32.const 32 i32.const 80 - i32.const 82 + i32.const 81 i32.const 35 call $~lib/builtins/abort unreachable From 36ab8ba342306691e777a197793850f8f6a85fcd Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 18:03:03 +0300 Subject: [PATCH 28/47] more parser fixes --- std/assembly/date.ts | 3 +- tests/compiler/std/date.optimized.wat | 202 ++++++++++---------- tests/compiler/std/date.ts | 12 +- tests/compiler/std/date.untouched.wat | 257 +++++++++++++++++++------- 4 files changed, 302 insertions(+), 172 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index db424e9c49..2da3a76625 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -26,6 +26,7 @@ export class Date { second: i32 = 0, millisecond: i32 = 0 ): i64 { + if (year >= 0 && year <= 99) year += 1900; var ms = epochMillis(year, month + 1, day, hour, minute, second, millisecond); if (invalidDate(ms)) throw new RangeError(E_INVALIDDATE); return ms; @@ -36,6 +37,7 @@ export class Date { } static fromString(dateTimeString: string): Date { + if (!dateTimeString.length) throw new RangeError(E_INVALIDDATE); var hour: i32 = 0, min: i32 = 0, @@ -201,7 +203,6 @@ function epochMillis( second: i32, milliseconds: i32 ): i64 { - if (year >= 0 && year <= 99) year += 1900; return ( i64(daysSinceEpoch(year, month, day)) * MILLIS_PER_DAY + hour * MILLIS_PER_HOUR + diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index 9a1236b6ad..cf755a1c46 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -82,30 +82,30 @@ (data (i32.const 3128) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") (data (i32.const 3164) ",") (data (i32.const 3176) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") - (data (i32.const 3212) ",") - (data (i32.const 3224) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002") - (data (i32.const 3260) ",") - (data (i32.const 3272) "\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002") - (data (i32.const 3308) "<") - (data (i32.const 3320) "\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006") - (data (i32.const 3372) "L") - (data (i32.const 3384) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") - (data (i32.const 3452) "L") - (data (i32.const 3464) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") - (data (i32.const 3532) "\1c") - (data (i32.const 3544) "\01\00\00\00\08\00\00\001\009\007\006") - (data (i32.const 3564) ",") - (data (i32.const 3576) "\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002") - (data (i32.const 3612) "L") - (data (i32.const 3624) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") - (data (i32.const 3692) "L") - (data (i32.const 3704) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") - (data (i32.const 3772) "L") - (data (i32.const 3784) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") - (data (i32.const 3852) "L") - (data (i32.const 3864) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z") - (data (i32.const 3936) "\06\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 3964) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") + (data (i32.const 3212) "<") + (data (i32.const 3224) "\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006") + (data (i32.const 3276) "L") + (data (i32.const 3288) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") + (data (i32.const 3356) "L") + (data (i32.const 3368) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") + (data (i32.const 3436) "\1c") + (data (i32.const 3448) "\01\00\00\00\08\00\00\000\000\000\000") + (data (i32.const 3468) "\1c") + (data (i32.const 3480) "\01\00\00\00\08\00\00\000\000\000\001") + (data (i32.const 3500) "\1c") + (data (i32.const 3512) "\01\00\00\00\08\00\00\001\009\007\006") + (data (i32.const 3532) ",") + (data (i32.const 3544) "\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002") + (data (i32.const 3580) "L") + (data (i32.const 3592) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3660) "L") + (data (i32.const 3672) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3740) "L") + (data (i32.const 3752) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 3820) "L") + (data (i32.const 3832) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z") + (data (i32.const 3904) "\06\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 3932) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) @@ -118,7 +118,7 @@ (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/memory/__stack_pointer (mut i32) (i32.const 20372)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20340)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -195,18 +195,6 @@ i32.mul i64.extend_i32_s local.get $0 - i32.const 1900 - i32.add - local.get $0 - local.get $0 - i32.const 99 - i32.le_s - i32.const 0 - local.get $0 - i32.const 0 - i32.ge_s - select - select local.get $1 local.get $2 call $~lib/date/daysSinceEpoch @@ -453,7 +441,7 @@ if i32.const 0 local.get $0 - i32.const 20372 + i32.const 20340 i32.lt_u local.get $0 i32.load offset=8 @@ -499,7 +487,7 @@ i32.const 1 else local.get $1 - i32.const 3936 + i32.const 3904 i32.load i32.gt_u if @@ -513,7 +501,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 3940 + i32.const 3908 i32.add i32.load i32.const 32 @@ -1087,10 +1075,10 @@ if unreachable end - i32.const 20384 + i32.const 20352 i32.const 0 i32.store - i32.const 21952 + i32.const 21920 i32.const 0 i32.store loop $for-loop|0 @@ -1101,7 +1089,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 20384 + i32.const 20352 i32.add i32.const 0 i32.store offset=4 @@ -1119,7 +1107,7 @@ i32.add i32.const 2 i32.shl - i32.const 20384 + i32.const 20352 i32.add i32.const 0 i32.store offset=96 @@ -1137,13 +1125,13 @@ br $for-loop|0 end end - i32.const 20384 - i32.const 21956 + i32.const 20352 + i32.const 21924 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 20384 + i32.const 20352 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -1222,7 +1210,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 20372 + i32.const 20340 i32.lt_u if local.get $0 @@ -1312,7 +1300,7 @@ unreachable end local.get $0 - i32.const 20372 + i32.const 20340 i32.lt_u if local.get $0 @@ -1335,7 +1323,7 @@ i32.const 4 i32.add local.tee $1 - i32.const 20372 + i32.const 20340 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -2006,7 +1994,7 @@ if i32.const 1056 i32.const 1104 - i32.const 93 + i32.const 95 i32.const 28 call $~lib/builtins/abort unreachable @@ -3407,11 +3395,11 @@ ) (func $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 3988 + i32.const 3956 i32.lt_s if - i32.const 20400 - i32.const 20448 + i32.const 20368 + i32.const 20416 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -4051,6 +4039,21 @@ i32.const 0 i32.store offset=24 local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + i32.eqz + if + i32.const 1056 + i32.const 1104 + i32.const 40 + i32.const 33 + call $~lib/builtins/abort + unreachable + end + local.get $0 local.set $1 global.get $~lib/memory/__stack_pointer i32.const 2016 @@ -4294,7 +4297,7 @@ call $~lib/builtins/abort unreachable end - i32.const 70 + i32.const 1970 i32.const 1 i32.const 1 i32.const 0 @@ -4316,7 +4319,7 @@ call $~lib/builtins/abort unreachable end - i32.const 90 + i32.const 1990 i32.const 1 i32.const 1 i32.const 0 @@ -4407,7 +4410,7 @@ memory.size i32.const 16 i32.shl - i32.const 20372 + i32.const 20340 i32.sub i32.const 1 i32.shr_u @@ -5666,86 +5669,95 @@ end global.get $~lib/memory/__stack_pointer i32.const 3232 - i32.store offset=8 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer i32.const 3232 call $~lib/date/Date.fromString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=4 + local.tee $0 + i32.store local.get $0 i64.load offset=16 + i64.const 192112496000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 234 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer - i32.const 3280 - i32.store offset=8 - i32.const 3280 - call $~lib/date/Date.fromString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 + i32.const 3296 i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3296 + call $~lib/date/Date.fromString + local.tee $0 + i32.store local.get $0 i64.load offset=16 + i64.const 192112496456 i64.ne if i32.const 0 i32.const 1152 - i32.const 233 + i32.const 238 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3328 + i32.const 3376 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3328 + i32.const 3376 call $~lib/date/Date.fromString local.tee $0 i32.store local.get $0 i64.load offset=16 - i64.const 192112496000 + i64.const 192112496456 i64.ne if i32.const 0 i32.const 1152 - i32.const 240 + i32.const 242 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3392 + i32.const 3456 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3392 + i32.const 3456 call $~lib/date/Date.fromString local.tee $0 i32.store local.get $0 i64.load offset=16 - i64.const 192112496456 + i64.const -62167219200000 i64.ne if i32.const 0 i32.const 1152 - i32.const 244 + i32.const 245 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3472 + i32.const 3488 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3472 + i32.const 3488 call $~lib/date/Date.fromString local.tee $0 i32.store local.get $0 i64.load offset=16 - i64.const 192112496456 + i64.const -62135596800000 i64.ne if i32.const 0 @@ -5756,10 +5768,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3552 + i32.const 3520 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3552 + i32.const 3520 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5776,10 +5788,10 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3584 + i32.const 3552 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3584 + i32.const 3552 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5928,10 +5940,10 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3632 + i32.const 3600 i32.store offset=8 local.get $0 - i32.const 3632 + i32.const 3600 call $~lib/string/String.__eq i32.eqz if @@ -5949,10 +5961,10 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3712 + i32.const 3680 i32.store offset=8 local.get $0 - i32.const 3712 + i32.const 3680 call $~lib/string/String.__eq i32.eqz if @@ -6058,10 +6070,10 @@ local.get $2 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3792 + i32.const 3760 i32.store offset=8 local.get $2 - i32.const 3792 + i32.const 3760 call $~lib/string/String.__eq i32.eqz if @@ -6079,10 +6091,10 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3872 + i32.const 3840 i32.store offset=8 local.get $0 - i32.const 3872 + i32.const 3840 call $~lib/string/String.__eq i32.eqz if @@ -6101,7 +6113,7 @@ end i32.const 1056 i32.const 1104 - i32.const 30 + i32.const 31 i32.const 26 call $~lib/builtins/abort unreachable @@ -6139,7 +6151,7 @@ if i32.const 1056 i32.const 1104 - i32.const 81 + i32.const 83 i32.const 35 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index 7116876785..80700c4a04 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -229,12 +229,6 @@ date = Date.fromString("2345-11-04"); assert(date.getTime() == 11860387200000); - // supports two digit years - assert( - Date.fromString("1976-04-02").getTime() == - Date.fromString("76-04-02").getTime() - ); - // supports year / month / day / hour / minute / second date = Date.fromString("1976-02-02T12:34:56"); assert(date.getTime() == 192112496000); @@ -247,6 +241,12 @@ date = Date.fromString("1976-02-02T12:34:56.456Z"); assert(date.getTime() == 192112496456); + date = Date.fromString("0000"); + assert(date.getTime() == -62167219200000); + + date = Date.fromString("0001"); + assert(date.getTime() == -62135596800000); + date = Date.fromString("1976"); assert(date.getTime() == 189302400000); diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 579e441853..e7a5a4363b 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -60,18 +60,18 @@ (data (i32.const 3420) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 3548) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 3596) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004\00\00\00\00\00\00\00\00\00") - (data (i32.const 3644) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00") - (data (i32.const 3692) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3740) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00\00\00\00\00\00\00") - (data (i32.const 3804) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3884) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3964) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\001\009\007\006\00\00\00\00\00") - (data (i32.const 3996) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 4044) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 4124) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 4204) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") - (data (i32.const 4284) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z\00\00\00\00\00\00\00") - (data (i32.const 4368) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") + (data (i32.const 3644) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00\00\00\00\00\00\00") + (data (i32.const 3708) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3788) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3868) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\000\000\000\000\00\00\00\00\00") + (data (i32.const 3900) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\000\000\000\001\00\00\00\00\00") + (data (i32.const 3932) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\001\009\007\006\00\00\00\00\00") + (data (i32.const 3964) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 4012) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 4092) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 4172) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") + (data (i32.const 4252) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z\00\00\00\00\00\00\00") + (data (i32.const 4336) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") (table $0 1 funcref) (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) @@ -88,10 +88,10 @@ (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) - (global $~lib/rt/__rtti_base i32 (i32.const 4368)) - (global $~lib/memory/__data_end i32 (i32.const 4420)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20804)) - (global $~lib/memory/__heap_base i32 (i32.const 20804)) + (global $~lib/rt/__rtti_base i32 (i32.const 4336)) + (global $~lib/memory/__data_end i32 (i32.const 4388)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20772)) + (global $~lib/memory/__heap_base i32 (i32.const 20772)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -177,22 +177,6 @@ i32.sub ) (func $~lib/date/epochMillis (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (result i64) - local.get $0 - i32.const 0 - i32.ge_s - if (result i32) - local.get $0 - i32.const 99 - i32.le_s - else - i32.const 0 - end - if - local.get $0 - i32.const 1900 - i32.add - local.set $0 - end local.get $0 local.get $1 local.get $2 @@ -2680,7 +2664,7 @@ if i32.const 32 i32.const 80 - i32.const 93 + i32.const 95 i32.const 28 call $~lib/builtins/abort unreachable @@ -5813,8 +5797,8 @@ global.get $~lib/memory/__data_end i32.lt_s if - i32.const 20832 - i32.const 20880 + i32.const 20800 + i32.const 20848 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -6600,6 +6584,17 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.store offset=24 + local.get $0 + call $~lib/string/String#get:length + i32.eqz + if + i32.const 32 + i32.const 80 + i32.const 40 + i32.const 33 + call $~lib/builtins/abort + unreachable + end i32.const 0 local.set $1 i32.const 0 @@ -6854,6 +6849,22 @@ i32.const 0 local.set $6 local.get $2 + i32.const 0 + i32.ge_s + if (result i32) + local.get $2 + i32.const 99 + i32.le_s + else + i32.const 0 + end + if + local.get $2 + i32.const 1900 + i32.add + local.set $2 + end + local.get $2 local.get $1 i32.const 1 i32.add @@ -6869,7 +6880,7 @@ if i32.const 32 i32.const 80 - i32.const 30 + i32.const 31 i32.const 26 call $~lib/builtins/abort unreachable @@ -6901,6 +6912,22 @@ i32.const 0 local.set $0 local.get $6 + i32.const 0 + i32.ge_s + if (result i32) + local.get $6 + i32.const 99 + i32.le_s + else + i32.const 0 + end + if + local.get $6 + i32.const 1900 + i32.add + local.set $6 + end + local.get $6 local.get $5 i32.const 1 i32.add @@ -6916,7 +6943,7 @@ if i32.const 32 i32.const 80 - i32.const 30 + i32.const 31 i32.const 26 call $~lib/builtins/abort unreachable @@ -6948,6 +6975,22 @@ i32.const 0 local.set $1 local.get $0 + i32.const 0 + i32.ge_s + if (result i32) + local.get $0 + i32.const 99 + i32.le_s + else + i32.const 0 + end + if + local.get $0 + i32.const 1900 + i32.add + local.set $0 + end + local.get $0 local.get $6 i32.const 1 i32.add @@ -6963,7 +7006,7 @@ if i32.const 32 i32.const 80 - i32.const 30 + i32.const 31 i32.const 26 call $~lib/builtins/abort unreachable @@ -6995,6 +7038,22 @@ i32.const 0 local.set $6 local.get $0 + i32.const 0 + i32.ge_s + if (result i32) + local.get $0 + i32.const 99 + i32.le_s + else + i32.const 0 + end + if + local.get $0 + i32.const 1900 + i32.add + local.set $0 + end + local.get $0 local.get $1 i32.const 1 i32.add @@ -7010,7 +7069,7 @@ if i32.const 32 i32.const 80 - i32.const 30 + i32.const 31 i32.const 26 call $~lib/builtins/abort unreachable @@ -7042,6 +7101,22 @@ i32.const 0 local.set $1 local.get $0 + i32.const 0 + i32.ge_s + if (result i32) + local.get $0 + i32.const 99 + i32.le_s + else + i32.const 0 + end + if + local.get $0 + i32.const 1900 + i32.add + local.set $0 + end + local.get $0 local.get $6 i32.const 1 i32.add @@ -7057,7 +7132,7 @@ if i32.const 32 i32.const 80 - i32.const 30 + i32.const 31 i32.const 26 call $~lib/builtins/abort unreachable @@ -7089,6 +7164,22 @@ i32.const 1 local.set $0 local.get $1 + i32.const 0 + i32.ge_s + if (result i32) + local.get $1 + i32.const 99 + i32.le_s + else + i32.const 0 + end + if + local.get $1 + i32.const 1900 + i32.add + local.set $1 + end + local.get $1 local.get $2 i32.const 1 i32.add @@ -7104,7 +7195,7 @@ if i32.const 32 i32.const 80 - i32.const 30 + i32.const 31 i32.const 26 call $~lib/builtins/abort unreachable @@ -7136,6 +7227,22 @@ i32.const 0 local.set $0 local.get $1 + i32.const 0 + i32.ge_s + if (result i32) + local.get $1 + i32.const 99 + i32.le_s + else + i32.const 0 + end + if + local.get $1 + i32.const 1900 + i32.add + local.set $1 + end + local.get $1 local.get $2 i32.const 1 i32.add @@ -7151,7 +7258,7 @@ if i32.const 32 i32.const 80 - i32.const 30 + i32.const 31 i32.const 26 call $~lib/builtins/abort unreachable @@ -8569,44 +8676,54 @@ call $~lib/builtins/abort unreachable end - i32.const 3664 - local.set $8 global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=8 - local.get $8 - call $~lib/date/Date.fromString + i32.const 3664 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 i32.store offset=4 local.get $8 + call $~lib/date/Date.fromString + local.tee $1 + i32.store + local.get $1 call $~lib/date/Date#getTime - i32.const 3712 - local.set $8 + i64.const 192112496000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 234 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store offset=8 - local.get $8 - call $~lib/date/Date.fromString + i32.const 3728 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 i32.store offset=4 local.get $8 + call $~lib/date/Date.fromString + local.tee $1 + i32.store + local.get $1 call $~lib/date/Date#getTime + i64.const 192112496456 i64.eq i32.eqz if i32.const 0 i32.const 128 - i32.const 233 + i32.const 238 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3760 + i32.const 3808 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8617,19 +8734,19 @@ i32.store local.get $1 call $~lib/date/Date#getTime - i64.const 192112496000 + i64.const 192112496456 i64.eq i32.eqz if i32.const 0 i32.const 128 - i32.const 240 + i32.const 242 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3824 + i32.const 3888 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8640,19 +8757,19 @@ i32.store local.get $1 call $~lib/date/Date#getTime - i64.const 192112496456 + i64.const -62167219200000 i64.eq i32.eqz if i32.const 0 i32.const 128 - i32.const 244 + i32.const 245 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3904 + i32.const 3920 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8663,7 +8780,7 @@ i32.store local.get $1 call $~lib/date/Date#getTime - i64.const 192112496456 + i64.const -62135596800000 i64.eq i32.eqz if @@ -8675,7 +8792,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3984 + i32.const 3952 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8698,7 +8815,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4016 + i32.const 3984 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8866,7 +8983,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4064 + i32.const 4032 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8889,7 +9006,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4144 + i32.const 4112 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9019,7 +9136,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4224 + i32.const 4192 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9042,7 +9159,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4304 + i32.const 4272 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9102,7 +9219,7 @@ if i32.const 32 i32.const 80 - i32.const 81 + i32.const 83 i32.const 35 call $~lib/builtins/abort unreachable From 07b1b5897551b43fe735e5b47bf0f309eebff84c Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 18:53:49 +0300 Subject: [PATCH 29/47] wip --- std/assembly/date.ts | 23 ++- tests/compiler/std/date.optimized.wat | 179 +++++++++++------ tests/compiler/std/date.ts | 10 + tests/compiler/std/date.untouched.wat | 275 +++++++++++++++----------- 4 files changed, 305 insertions(+), 182 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 2da3a76625..bc29f4bb58 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -53,17 +53,23 @@ export class Date { timeString = dateTimeString.substring(posT + 1); // parse the HH-MM-SS component let timeParts = timeString.split(":"); + let len = timeParts.length; + if (len <= 1) throw new RangeError(E_INVALIDDATE); + hour = I32.parseInt(timeParts[0]); min = I32.parseInt(timeParts[1]); - let secAndMs = timeParts[2]; - let posDot = secAndMs.indexOf("."); - if (~posDot) { - // includes milliseconds - sec = I32.parseInt(secAndMs.substring(0, posDot)); - ms = I32.parseInt(secAndMs.substring(posDot + 1)); - } else { - sec = I32.parseInt(secAndMs); + if (len >= 3) { + let secAndMs = timeParts[2]; + let posDot = secAndMs.indexOf("."); + if (~posDot) { + // includes milliseconds + sec = I32.parseInt(secAndMs.substring(0, posDot)); + ms = I32.parseInt(secAndMs.substring(posDot + 1)); + } else { + sec = I32.parseInt(secAndMs); + } } + trace("", 4, hour, min, sec, ms); } // parse the YYYY-MM-DD component var parts = dateString.split("-"); @@ -74,6 +80,7 @@ export class Date { month = len >= 2 ? I32.parseInt(parts[1]) : 1; day = len == 3 ? I32.parseInt(parts[2]) : 1; } + trace("", 3, year, month, day); return new Date(epochMillis(year, month, day, hour, min, sec, ms)); } diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index cf755a1c46..cf49dec71a 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -8,11 +8,13 @@ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_i32_i32_i32_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) (memory $0 1) (data (i32.const 1036) ",") (data (i32.const 1048) "\01\00\00\00\18\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00D\00a\00t\00e") @@ -1994,7 +1996,7 @@ if i32.const 1056 i32.const 1104 - i32.const 95 + i32.const 102 i32.const 28 call $~lib/builtins/abort unreachable @@ -4092,6 +4094,20 @@ local.tee $0 i32.store offset=12 local.get $0 + i32.load offset=12 + local.tee $2 + local.get $2 + i32.const 1 + i32.le_s + if + i32.const 1056 + i32.const 1104 + i32.const 57 + i32.const 21 + call $~lib/builtins/abort + unreachable + end + local.get $0 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get local.set $2 @@ -4111,52 +4127,71 @@ local.get $2 call $~lib/util/string/strtol local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.const 2 - call $~lib/array/Array<~lib/string/String>#__get - local.tee $0 - i32.store offset=20 - global.get $~lib/memory/__stack_pointer - i32.const 2080 - i32.store - local.get $0 - i32.const 2080 - i32.const 0 - call $~lib/string/String#indexOf - local.tee $2 - i32.const -1 - i32.xor + i32.const 3 + i32.ge_s if - local.get $0 - i32.const 0 - local.get $2 - call $~lib/string/String#substring - local.set $3 global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=16 - local.get $3 - call $~lib/util/string/strtol - local.set $3 local.get $0 - local.get $2 - i32.const 1 - i32.add - i32.const 2147483647 - call $~lib/string/String#substring - local.set $0 + i32.const 2 + call $~lib/array/Array<~lib/string/String>#__get + local.tee $0 + i32.store offset=20 global.get $~lib/memory/__stack_pointer + i32.const 2080 + i32.store local.get $0 - i32.store offset=16 - local.get $0 - call $~lib/util/string/strtol - local.set $7 - else - local.get $0 - call $~lib/util/string/strtol - local.set $3 + i32.const 2080 + i32.const 0 + call $~lib/string/String#indexOf + local.tee $2 + i32.const -1 + i32.xor + if + local.get $0 + i32.const 0 + local.get $2 + call $~lib/string/String#substring + local.set $3 + global.get $~lib/memory/__stack_pointer + local.get $3 + i32.store offset=16 + local.get $3 + call $~lib/util/string/strtol + local.set $3 + local.get $0 + local.get $2 + i32.const 1 + i32.add + i32.const 2147483647 + call $~lib/string/String#substring + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=16 + local.get $0 + call $~lib/util/string/strtol + local.set $7 + else + local.get $0 + call $~lib/util/string/strtol + local.set $3 + end end + global.get $~lib/memory/__stack_pointer + i32.const 1984 + i32.store offset=16 + i32.const 1984 + i32.const 4 + local.get $5 + f64.convert_i32_s + local.get $6 + f64.convert_i32_s + local.get $3 + f64.convert_i32_s + local.get $7 + f64.convert_i32_s + f64.const 0 + call $~lib/builtins/trace end global.get $~lib/memory/__stack_pointer i32.const 1600 @@ -4176,15 +4211,16 @@ i32.store offset=16 local.get $0 call $~lib/util/string/strtol + local.set $4 i32.const 1 local.set $1 local.get $2 i32.load offset=12 - local.tee $4 + local.tee $8 i32.const 1 i32.gt_s if (result i32) - local.get $4 + local.get $8 i32.const 2 i32.ge_s if (result i32) @@ -4201,7 +4237,7 @@ i32.const 1 end local.set $1 - local.get $4 + local.get $8 i32.const 3 i32.eq if (result i32) @@ -4221,6 +4257,21 @@ i32.const 1 end local.set $0 + global.get $~lib/memory/__stack_pointer + i32.const 1984 + i32.store offset=16 + i32.const 1984 + i32.const 3 + local.get $4 + f64.convert_i32_s + local.get $1 + f64.convert_i32_s + local.get $0 + f64.convert_i32_s + f64.const 0 + f64.const 0 + call $~lib/builtins/trace + local.get $4 local.get $1 local.get $0 local.get $5 @@ -5844,7 +5895,7 @@ if i32.const 0 i32.const 1152 - i32.const 265 + i32.const 275 i32.const 3 call $~lib/builtins/abort unreachable @@ -5856,7 +5907,7 @@ if i32.const 0 i32.const 1152 - i32.const 266 + i32.const 276 i32.const 3 call $~lib/builtins/abort unreachable @@ -5868,7 +5919,7 @@ if i32.const 0 i32.const 1152 - i32.const 268 + i32.const 278 i32.const 3 call $~lib/builtins/abort unreachable @@ -5880,7 +5931,7 @@ if i32.const 0 i32.const 1152 - i32.const 269 + i32.const 279 i32.const 3 call $~lib/builtins/abort unreachable @@ -5892,7 +5943,7 @@ if i32.const 0 i32.const 1152 - i32.const 271 + i32.const 281 i32.const 3 call $~lib/builtins/abort unreachable @@ -5904,7 +5955,7 @@ if i32.const 0 i32.const 1152 - i32.const 272 + i32.const 282 i32.const 3 call $~lib/builtins/abort unreachable @@ -5916,7 +5967,7 @@ if i32.const 0 i32.const 1152 - i32.const 274 + i32.const 284 i32.const 3 call $~lib/builtins/abort unreachable @@ -5928,7 +5979,7 @@ if i32.const 0 i32.const 1152 - i32.const 275 + i32.const 285 i32.const 3 call $~lib/builtins/abort unreachable @@ -5949,7 +6000,7 @@ if i32.const 0 i32.const 1152 - i32.const 277 + i32.const 287 i32.const 3 call $~lib/builtins/abort unreachable @@ -5970,7 +6021,7 @@ if i32.const 0 i32.const 1152 - i32.const 278 + i32.const 288 i32.const 3 call $~lib/builtins/abort unreachable @@ -5992,7 +6043,7 @@ if i32.const 0 i32.const 1152 - i32.const 283 + i32.const 293 i32.const 3 call $~lib/builtins/abort unreachable @@ -6004,7 +6055,7 @@ if i32.const 0 i32.const 1152 - i32.const 284 + i32.const 294 i32.const 3 call $~lib/builtins/abort unreachable @@ -6016,7 +6067,7 @@ if i32.const 0 i32.const 1152 - i32.const 285 + i32.const 295 i32.const 3 call $~lib/builtins/abort unreachable @@ -6026,7 +6077,7 @@ if i32.const 0 i32.const 1152 - i32.const 286 + i32.const 296 i32.const 3 call $~lib/builtins/abort unreachable @@ -6036,7 +6087,7 @@ if i32.const 0 i32.const 1152 - i32.const 287 + i32.const 297 i32.const 3 call $~lib/builtins/abort unreachable @@ -6046,7 +6097,7 @@ if i32.const 0 i32.const 1152 - i32.const 288 + i32.const 298 i32.const 3 call $~lib/builtins/abort unreachable @@ -6058,7 +6109,7 @@ if i32.const 0 i32.const 1152 - i32.const 289 + i32.const 299 i32.const 3 call $~lib/builtins/abort unreachable @@ -6079,7 +6130,7 @@ if i32.const 0 i32.const 1152 - i32.const 291 + i32.const 301 i32.const 3 call $~lib/builtins/abort unreachable @@ -6100,7 +6151,7 @@ if i32.const 0 i32.const 1152 - i32.const 292 + i32.const 302 i32.const 3 call $~lib/builtins/abort unreachable @@ -6151,7 +6202,7 @@ if i32.const 1056 i32.const 1104 - i32.const 83 + i32.const 90 i32.const 35 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index 80700c4a04..2b4d50a88d 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -255,6 +255,16 @@ date = Date.fromString("1976-02-02"); assert(date.getTime() == 192067200000); + + // date = Date.fromString("1976-02-02T12:34"); + // trace("", 1, date.getTime() as f64); + // assert(date.getTime() == 192101640000); // FAIL + + // date = Date.fromString("1976-02-02T12:34:56"); + // trace("", 1, date.getTime() as f64); + // assert(date.getTime() == 192101696000); // FAIL + + // date = Date.fromString("1976-02-02T12"); // Invalid Date } // Minimum / Maximum dates //////////////////////////////////////////////////////////////////////// diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index e7a5a4363b..a4956c105c 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -7,6 +7,7 @@ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) (type $i32_i64_i32_i32_=>_none (func (param i32 i64 i32 i32))) @@ -20,6 +21,7 @@ (type $i32_i32_i32_i32_i32_i32_i32_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) (type $i32_i64_=>_i64 (func (param i32 i64) (result i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) + (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) (memory $0 1) (data (i32.const 12) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\18\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00D\00a\00t\00e\00\00\00\00\00") (data (i32.const 60) ",\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") @@ -2664,7 +2666,7 @@ if i32.const 32 i32.const 80 - i32.const 95 + i32.const 102 i32.const 28 call $~lib/builtins/abort unreachable @@ -5253,6 +5255,10 @@ call $~lib/array/Array<~lib/string/String>#set:length_ local.get $3 ) + (func $~lib/array/Array<~lib/string/String>#get:length (param $0 i32) (result i32) + local.get $0 + i32.load offset=12 + ) (func $~lib/util/string/isSpace (param $0 i32) (result i32) (local $1 i32) local.get $0 @@ -5644,10 +5650,6 @@ local.get $1 call $~lib/util/string/strtol ) - (func $~lib/array/Array<~lib/string/String>#get:length (param $0 i32) (result i32) - local.get $0 - i32.load offset=12 - ) (func $~lib/rt/__visit_globals (param $0 i32) (local $1 i32) i32.const 368 @@ -6567,6 +6569,7 @@ (local $14 i32) (local $15 i32) (local $16 i32) + (local $17 i32) global.get $~lib/memory/__stack_pointer i32.const 28 i32.sub @@ -6607,11 +6610,11 @@ local.set $5 local.get $0 i32.const 2448 - local.set $16 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $16 + local.get $17 i32.store - local.get $16 + local.get $17 i32.const 0 call $~lib/string/String#indexOf local.set $6 @@ -6638,177 +6641,229 @@ global.get $~lib/memory/__stack_pointer local.get $7 i32.const 2480 - local.set $16 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $16 + local.get $17 i32.store - local.get $16 + local.get $17 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#split local.tee $8 i32.store offset=12 local.get $8 + call $~lib/array/Array<~lib/string/String>#get:length + local.set $9 + local.get $9 + i32.const 1 + i32.le_s + if + i32.const 32 + i32.const 80 + i32.const 57 + i32.const 21 + call $~lib/builtins/abort + unreachable + end + local.get $8 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.set $16 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $16 + local.get $17 i32.store offset=16 - local.get $16 + local.get $17 i32.const 0 call $~lib/number/I32.parseInt local.set $1 local.get $8 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.set $16 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $16 + local.get $17 i32.store offset=16 - local.get $16 + local.get $17 i32.const 0 call $~lib/number/I32.parseInt local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.const 2 - call $~lib/array/Array<~lib/string/String>#__get - local.tee $9 - i32.store offset=20 local.get $9 - i32.const 2512 - local.set $16 - global.get $~lib/memory/__stack_pointer - local.get $16 - i32.store - local.get $16 - i32.const 0 - call $~lib/string/String#indexOf - local.set $10 - local.get $10 - i32.const -1 - i32.xor + i32.const 3 + i32.ge_s if - local.get $9 - i32.const 0 - local.get $10 - call $~lib/string/String#substring - local.set $16 global.get $~lib/memory/__stack_pointer - local.get $16 - i32.store offset=16 - local.get $16 - i32.const 0 - call $~lib/number/I32.parseInt - local.set $3 - local.get $9 + local.get $8 + i32.const 2 + call $~lib/array/Array<~lib/string/String>#__get + local.tee $10 + i32.store offset=20 local.get $10 - i32.const 1 - i32.add - global.get $~lib/builtins/i32.MAX_VALUE - call $~lib/string/String#substring - local.set $16 + i32.const 2512 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $16 - i32.store offset=16 - local.get $16 - i32.const 0 - call $~lib/number/I32.parseInt - local.set $4 - else - local.get $9 + local.get $17 + i32.store + local.get $17 i32.const 0 - call $~lib/number/I32.parseInt - local.set $3 + call $~lib/string/String#indexOf + local.set $11 + local.get $11 + i32.const -1 + i32.xor + if + local.get $10 + i32.const 0 + local.get $11 + call $~lib/string/String#substring + local.set $17 + global.get $~lib/memory/__stack_pointer + local.get $17 + i32.store offset=16 + local.get $17 + i32.const 0 + call $~lib/number/I32.parseInt + local.set $3 + local.get $10 + local.get $11 + i32.const 1 + i32.add + global.get $~lib/builtins/i32.MAX_VALUE + call $~lib/string/String#substring + local.set $17 + global.get $~lib/memory/__stack_pointer + local.get $17 + i32.store offset=16 + local.get $17 + i32.const 0 + call $~lib/number/I32.parseInt + local.set $4 + else + local.get $10 + i32.const 0 + call $~lib/number/I32.parseInt + local.set $3 + end end + i32.const 2416 + local.set $17 + global.get $~lib/memory/__stack_pointer + local.get $17 + i32.store offset=16 + local.get $17 + i32.const 4 + local.get $1 + f64.convert_i32_s + local.get $2 + f64.convert_i32_s + local.get $3 + f64.convert_i32_s + local.get $4 + f64.convert_i32_s + f64.const 0 + call $~lib/builtins/trace end global.get $~lib/memory/__stack_pointer local.get $5 i32.const 576 - local.set $16 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $16 + local.get $17 i32.store - local.get $16 + local.get $17 global.get $~lib/builtins/i32.MAX_VALUE call $~lib/string/String#split - local.tee $11 + local.tee $12 i32.store offset=24 - local.get $11 + local.get $12 i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - local.set $16 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $16 + local.get $17 i32.store offset=16 - local.get $16 + local.get $17 i32.const 0 call $~lib/number/I32.parseInt - local.set $12 - i32.const 1 local.set $13 i32.const 1 local.set $14 - local.get $11 - call $~lib/array/Array<~lib/string/String>#get:length + i32.const 1 local.set $15 - local.get $15 + local.get $12 + call $~lib/array/Array<~lib/string/String>#get:length + local.set $16 + local.get $16 i32.const 1 i32.gt_s if - local.get $15 + local.get $16 i32.const 2 i32.ge_s if (result i32) - local.get $11 + local.get $12 i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - local.set $16 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $16 + local.get $17 i32.store offset=16 - local.get $16 + local.get $17 i32.const 0 call $~lib/number/I32.parseInt else i32.const 1 end - local.set $13 - local.get $15 + local.set $14 + local.get $16 i32.const 3 i32.eq if (result i32) - local.get $11 + local.get $12 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get - local.set $16 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $16 + local.get $17 i32.store offset=16 - local.get $16 + local.get $17 i32.const 0 call $~lib/number/I32.parseInt else i32.const 1 end - local.set $14 + local.set $15 end + i32.const 2416 + local.set $17 + global.get $~lib/memory/__stack_pointer + local.get $17 + i32.store offset=16 + local.get $17 + i32.const 3 + local.get $13 + f64.convert_i32_s + local.get $14 + f64.convert_i32_s + local.get $15 + f64.convert_i32_s + f64.const 0 + f64.const 0 + call $~lib/builtins/trace i32.const 0 - local.get $12 local.get $13 local.get $14 + local.get $15 local.get $1 local.get $2 local.get $3 local.get $4 call $~lib/date/epochMillis call $~lib/date/Date#constructor - local.set $16 + local.set $17 global.get $~lib/memory/__stack_pointer i32.const 28 i32.add global.set $~lib/memory/__stack_pointer - local.get $16 + local.get $17 ) (func $start:std/date (local $0 i32) @@ -8880,7 +8935,7 @@ if i32.const 0 i32.const 128 - i32.const 265 + i32.const 275 i32.const 3 call $~lib/builtins/abort unreachable @@ -8893,7 +8948,7 @@ if i32.const 0 i32.const 128 - i32.const 266 + i32.const 276 i32.const 3 call $~lib/builtins/abort unreachable @@ -8906,7 +8961,7 @@ if i32.const 0 i32.const 128 - i32.const 268 + i32.const 278 i32.const 3 call $~lib/builtins/abort unreachable @@ -8919,7 +8974,7 @@ if i32.const 0 i32.const 128 - i32.const 269 + i32.const 279 i32.const 3 call $~lib/builtins/abort unreachable @@ -8932,7 +8987,7 @@ if i32.const 0 i32.const 128 - i32.const 271 + i32.const 281 i32.const 3 call $~lib/builtins/abort unreachable @@ -8945,7 +9000,7 @@ if i32.const 0 i32.const 128 - i32.const 272 + i32.const 282 i32.const 3 call $~lib/builtins/abort unreachable @@ -8958,7 +9013,7 @@ if i32.const 0 i32.const 128 - i32.const 274 + i32.const 284 i32.const 3 call $~lib/builtins/abort unreachable @@ -8971,7 +9026,7 @@ if i32.const 0 i32.const 128 - i32.const 275 + i32.const 285 i32.const 3 call $~lib/builtins/abort unreachable @@ -8994,7 +9049,7 @@ if i32.const 0 i32.const 128 - i32.const 277 + i32.const 287 i32.const 3 call $~lib/builtins/abort unreachable @@ -9017,7 +9072,7 @@ if i32.const 0 i32.const 128 - i32.const 278 + i32.const 288 i32.const 3 call $~lib/builtins/abort unreachable @@ -9046,7 +9101,7 @@ if i32.const 0 i32.const 128 - i32.const 283 + i32.const 293 i32.const 3 call $~lib/builtins/abort unreachable @@ -9059,7 +9114,7 @@ if i32.const 0 i32.const 128 - i32.const 284 + i32.const 294 i32.const 3 call $~lib/builtins/abort unreachable @@ -9072,7 +9127,7 @@ if i32.const 0 i32.const 128 - i32.const 285 + i32.const 295 i32.const 3 call $~lib/builtins/abort unreachable @@ -9085,7 +9140,7 @@ if i32.const 0 i32.const 128 - i32.const 286 + i32.const 296 i32.const 3 call $~lib/builtins/abort unreachable @@ -9098,7 +9153,7 @@ if i32.const 0 i32.const 128 - i32.const 287 + i32.const 297 i32.const 3 call $~lib/builtins/abort unreachable @@ -9111,7 +9166,7 @@ if i32.const 0 i32.const 128 - i32.const 288 + i32.const 298 i32.const 3 call $~lib/builtins/abort unreachable @@ -9124,7 +9179,7 @@ if i32.const 0 i32.const 128 - i32.const 289 + i32.const 299 i32.const 3 call $~lib/builtins/abort unreachable @@ -9147,7 +9202,7 @@ if i32.const 0 i32.const 128 - i32.const 291 + i32.const 301 i32.const 3 call $~lib/builtins/abort unreachable @@ -9170,7 +9225,7 @@ if i32.const 0 i32.const 128 - i32.const 292 + i32.const 302 i32.const 3 call $~lib/builtins/abort unreachable @@ -9219,7 +9274,7 @@ if i32.const 32 i32.const 80 - i32.const 83 + i32.const 90 i32.const 35 call $~lib/builtins/abort unreachable From 9d8fc450586656094106e1639dc0af4ea7549282 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 18:58:16 +0300 Subject: [PATCH 30/47] refactor --- std/assembly/date.ts | 8 +++-- tests/compiler/std/date.optimized.wat | 39 +++++++++++------------- tests/compiler/std/date.untouched.wat | 43 +++++++++++---------------- 3 files changed, 39 insertions(+), 51 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index bc29f4bb58..b333878004 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -76,9 +76,11 @@ export class Date { var year = I32.parseInt(parts[0]); var month = 1, day = 1; var len = parts.length; - if (len > 1) { - month = len >= 2 ? I32.parseInt(parts[1]) : 1; - day = len == 3 ? I32.parseInt(parts[2]) : 1; + if (len >= 2) { + month = I32.parseInt(parts[1]); + if (len >= 3) { + day = I32.parseInt(parts[2]); + } } trace("", 3, year, month, day); return new Date(epochMillis(year, month, day, hour, min, sec, ms)); diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index cf49dec71a..ec7990ec42 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -1996,7 +1996,7 @@ if i32.const 1056 i32.const 1104 - i32.const 102 + i32.const 104 i32.const 28 call $~lib/builtins/abort unreachable @@ -4216,30 +4216,25 @@ local.set $1 local.get $2 i32.load offset=12 - local.tee $8 - i32.const 1 - i32.gt_s + local.tee $0 + local.set $8 + local.get $0 + i32.const 2 + i32.ge_s if (result i32) - local.get $8 - i32.const 2 - i32.ge_s - if (result i32) - local.get $2 - i32.const 1 - call $~lib/array/Array<~lib/string/String>#__get - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=16 - local.get $0 - call $~lib/util/string/strtol - else - i32.const 1 - end + local.get $2 + i32.const 1 + call $~lib/array/Array<~lib/string/String>#__get + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=16 + local.get $0 + call $~lib/util/string/strtol local.set $1 local.get $8 i32.const 3 - i32.eq + i32.ge_s if (result i32) local.get $2 i32.const 2 @@ -6202,7 +6197,7 @@ if i32.const 1056 i32.const 1104 - i32.const 90 + i32.const 92 i32.const 35 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index a4956c105c..6d9616783a 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -2666,7 +2666,7 @@ if i32.const 32 i32.const 80 - i32.const 102 + i32.const 104 i32.const 28 call $~lib/builtins/abort unreachable @@ -6792,31 +6792,24 @@ call $~lib/array/Array<~lib/string/String>#get:length local.set $16 local.get $16 - i32.const 1 - i32.gt_s + i32.const 2 + i32.ge_s if - local.get $16 - i32.const 2 - i32.ge_s - if (result i32) - local.get $12 - i32.const 1 - call $~lib/array/Array<~lib/string/String>#__get - local.set $17 - global.get $~lib/memory/__stack_pointer - local.get $17 - i32.store offset=16 - local.get $17 - i32.const 0 - call $~lib/number/I32.parseInt - else - i32.const 1 - end + local.get $12 + i32.const 1 + call $~lib/array/Array<~lib/string/String>#__get + local.set $17 + global.get $~lib/memory/__stack_pointer + local.get $17 + i32.store offset=16 + local.get $17 + i32.const 0 + call $~lib/number/I32.parseInt local.set $14 local.get $16 i32.const 3 - i32.eq - if (result i32) + i32.ge_s + if local.get $12 i32.const 2 call $~lib/array/Array<~lib/string/String>#__get @@ -6827,10 +6820,8 @@ local.get $17 i32.const 0 call $~lib/number/I32.parseInt - else - i32.const 1 + local.set $15 end - local.set $15 end i32.const 2416 local.set $17 @@ -9274,7 +9265,7 @@ if i32.const 32 i32.const 80 - i32.const 90 + i32.const 92 i32.const 35 call $~lib/builtins/abort unreachable From 0d22062d78e51354cdda02779fa610af7fc24ae3 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 19:14:57 +0300 Subject: [PATCH 31/47] fixes --- std/assembly/date.ts | 2 - tests/compiler/std/date.optimized.wat | 189 ++++++++++++++------------ tests/compiler/std/date.ts | 14 +- tests/compiler/std/date.untouched.wat | 154 +++++++++++---------- 4 files changed, 188 insertions(+), 171 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index b333878004..edd4c10b4e 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -69,7 +69,6 @@ export class Date { sec = I32.parseInt(secAndMs); } } - trace("", 4, hour, min, sec, ms); } // parse the YYYY-MM-DD component var parts = dateString.split("-"); @@ -82,7 +81,6 @@ export class Date { day = I32.parseInt(parts[2]); } } - trace("", 3, year, month, day); return new Date(epochMillis(year, month, day, hour, min, sec, ms)); } diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index ec7990ec42..c800bbf6a1 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -8,13 +8,11 @@ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $none_=>_i32 (func (result i32))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_i32_i32_i32_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) (memory $0 1) (data (i32.const 1036) ",") (data (i32.const 1048) "\01\00\00\00\18\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00D\00a\00t\00e") @@ -98,16 +96,18 @@ (data (i32.const 3512) "\01\00\00\00\08\00\00\001\009\007\006") (data (i32.const 3532) ",") (data (i32.const 3544) "\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002") - (data (i32.const 3580) "L") - (data (i32.const 3592) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") - (data (i32.const 3660) "L") - (data (i32.const 3672) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") - (data (i32.const 3740) "L") - (data (i32.const 3752) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") - (data (i32.const 3820) "L") - (data (i32.const 3832) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z") - (data (i32.const 3904) "\06\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 3932) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") + (data (i32.const 3580) "<") + (data (i32.const 3592) "\01\00\00\00 \00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004") + (data (i32.const 3644) "L") + (data (i32.const 3656) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3724) "L") + (data (i32.const 3736) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3804) "L") + (data (i32.const 3816) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 3884) "L") + (data (i32.const 3896) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z") + (data (i32.const 3968) "\06\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 3996) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) @@ -120,7 +120,7 @@ (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/memory/__stack_pointer (mut i32) (i32.const 20340)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20404)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -443,7 +443,7 @@ if i32.const 0 local.get $0 - i32.const 20340 + i32.const 20404 i32.lt_u local.get $0 i32.load offset=8 @@ -489,7 +489,7 @@ i32.const 1 else local.get $1 - i32.const 3904 + i32.const 3968 i32.load i32.gt_u if @@ -503,7 +503,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 3908 + i32.const 3972 i32.add i32.load i32.const 32 @@ -1077,10 +1077,10 @@ if unreachable end - i32.const 20352 + i32.const 20416 i32.const 0 i32.store - i32.const 21920 + i32.const 21984 i32.const 0 i32.store loop $for-loop|0 @@ -1091,7 +1091,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 20352 + i32.const 20416 i32.add i32.const 0 i32.store offset=4 @@ -1109,7 +1109,7 @@ i32.add i32.const 2 i32.shl - i32.const 20352 + i32.const 20416 i32.add i32.const 0 i32.store offset=96 @@ -1127,13 +1127,13 @@ br $for-loop|0 end end - i32.const 20352 - i32.const 21924 + i32.const 20416 + i32.const 21988 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 20352 + i32.const 20416 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -1212,7 +1212,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 20340 + i32.const 20404 i32.lt_u if local.get $0 @@ -1302,7 +1302,7 @@ unreachable end local.get $0 - i32.const 20340 + i32.const 20404 i32.lt_u if local.get $0 @@ -1325,7 +1325,7 @@ i32.const 4 i32.add local.tee $1 - i32.const 20340 + i32.const 20404 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -1996,7 +1996,7 @@ if i32.const 1056 i32.const 1104 - i32.const 104 + i32.const 102 i32.const 28 call $~lib/builtins/abort unreachable @@ -3397,11 +3397,11 @@ ) (func $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 3956 + i32.const 4020 i32.lt_s if - i32.const 20368 - i32.const 20416 + i32.const 20432 + i32.const 20480 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -4177,21 +4177,6 @@ local.set $3 end end - global.get $~lib/memory/__stack_pointer - i32.const 1984 - i32.store offset=16 - i32.const 1984 - i32.const 4 - local.get $5 - f64.convert_i32_s - local.get $6 - f64.convert_i32_s - local.get $3 - f64.convert_i32_s - local.get $7 - f64.convert_i32_s - f64.const 0 - call $~lib/builtins/trace end global.get $~lib/memory/__stack_pointer i32.const 1600 @@ -4211,7 +4196,6 @@ i32.store offset=16 local.get $0 call $~lib/util/string/strtol - local.set $4 i32.const 1 local.set $1 local.get $2 @@ -4252,21 +4236,6 @@ i32.const 1 end local.set $0 - global.get $~lib/memory/__stack_pointer - i32.const 1984 - i32.store offset=16 - i32.const 1984 - i32.const 3 - local.get $4 - f64.convert_i32_s - local.get $1 - f64.convert_i32_s - local.get $0 - f64.convert_i32_s - f64.const 0 - f64.const 0 - call $~lib/builtins/trace - local.get $4 local.get $1 local.get $0 local.get $5 @@ -4456,7 +4425,7 @@ memory.size i32.const 16 i32.shl - i32.const 20340 + i32.const 20404 i32.sub i32.const 1 i32.shr_u @@ -5874,6 +5843,46 @@ unreachable end global.get $~lib/memory/__stack_pointer + i32.const 3600 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3600 + call $~lib/date/Date.fromString + local.tee $0 + i32.store + local.get $0 + i64.load offset=16 + i64.const 192112440000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 260 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3232 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3232 + call $~lib/date/Date.fromString + local.tee $0 + i32.store + local.get $0 + i64.load offset=16 + i64.const 192112496000 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 263 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer i64.const -8640000000000000 call $~lib/date/Date#constructor local.tee $0 @@ -5890,7 +5899,7 @@ if i32.const 0 i32.const 1152 - i32.const 275 + i32.const 273 i32.const 3 call $~lib/builtins/abort unreachable @@ -5902,7 +5911,7 @@ if i32.const 0 i32.const 1152 - i32.const 276 + i32.const 274 i32.const 3 call $~lib/builtins/abort unreachable @@ -5914,7 +5923,7 @@ if i32.const 0 i32.const 1152 - i32.const 278 + i32.const 276 i32.const 3 call $~lib/builtins/abort unreachable @@ -5926,7 +5935,7 @@ if i32.const 0 i32.const 1152 - i32.const 279 + i32.const 277 i32.const 3 call $~lib/builtins/abort unreachable @@ -5938,7 +5947,7 @@ if i32.const 0 i32.const 1152 - i32.const 281 + i32.const 279 i32.const 3 call $~lib/builtins/abort unreachable @@ -5950,7 +5959,7 @@ if i32.const 0 i32.const 1152 - i32.const 282 + i32.const 280 i32.const 3 call $~lib/builtins/abort unreachable @@ -5962,7 +5971,7 @@ if i32.const 0 i32.const 1152 - i32.const 284 + i32.const 282 i32.const 3 call $~lib/builtins/abort unreachable @@ -5974,7 +5983,7 @@ if i32.const 0 i32.const 1152 - i32.const 285 + i32.const 283 i32.const 3 call $~lib/builtins/abort unreachable @@ -5986,16 +5995,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3600 + i32.const 3664 i32.store offset=8 local.get $0 - i32.const 3600 + i32.const 3664 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 287 + i32.const 285 i32.const 3 call $~lib/builtins/abort unreachable @@ -6007,16 +6016,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3680 + i32.const 3744 i32.store offset=8 local.get $0 - i32.const 3680 + i32.const 3744 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 288 + i32.const 286 i32.const 3 call $~lib/builtins/abort unreachable @@ -6038,7 +6047,7 @@ if i32.const 0 i32.const 1152 - i32.const 293 + i32.const 291 i32.const 3 call $~lib/builtins/abort unreachable @@ -6050,7 +6059,7 @@ if i32.const 0 i32.const 1152 - i32.const 294 + i32.const 292 i32.const 3 call $~lib/builtins/abort unreachable @@ -6062,7 +6071,7 @@ if i32.const 0 i32.const 1152 - i32.const 295 + i32.const 293 i32.const 3 call $~lib/builtins/abort unreachable @@ -6072,7 +6081,7 @@ if i32.const 0 i32.const 1152 - i32.const 296 + i32.const 294 i32.const 3 call $~lib/builtins/abort unreachable @@ -6082,7 +6091,7 @@ if i32.const 0 i32.const 1152 - i32.const 297 + i32.const 295 i32.const 3 call $~lib/builtins/abort unreachable @@ -6092,7 +6101,7 @@ if i32.const 0 i32.const 1152 - i32.const 298 + i32.const 296 i32.const 3 call $~lib/builtins/abort unreachable @@ -6104,7 +6113,7 @@ if i32.const 0 i32.const 1152 - i32.const 299 + i32.const 297 i32.const 3 call $~lib/builtins/abort unreachable @@ -6116,16 +6125,16 @@ local.get $2 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3760 + i32.const 3824 i32.store offset=8 local.get $2 - i32.const 3760 + i32.const 3824 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 301 + i32.const 299 i32.const 3 call $~lib/builtins/abort unreachable @@ -6137,16 +6146,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3840 + i32.const 3904 i32.store offset=8 local.get $0 - i32.const 3840 + i32.const 3904 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 302 + i32.const 300 i32.const 3 call $~lib/builtins/abort unreachable @@ -6197,7 +6206,7 @@ if i32.const 1056 i32.const 1104 - i32.const 92 + i32.const 90 i32.const 35 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index 2b4d50a88d..9233be8727 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -230,11 +230,11 @@ assert(date.getTime() == 11860387200000); // supports year / month / day / hour / minute / second - date = Date.fromString("1976-02-02T12:34:56"); + date = Date.fromString("1976-02-02T12:34:56"); // still use Z suffix assert(date.getTime() == 192112496000); // supports milliseconds - date = Date.fromString("1976-02-02T12:34:56.456"); + date = Date.fromString("1976-02-02T12:34:56.456"); // still use Z suffix assert(date.getTime() == 192112496456); // supports 'Z' suffix @@ -256,13 +256,11 @@ date = Date.fromString("1976-02-02"); assert(date.getTime() == 192067200000); - // date = Date.fromString("1976-02-02T12:34"); - // trace("", 1, date.getTime() as f64); - // assert(date.getTime() == 192101640000); // FAIL + date = Date.fromString("1976-02-02T12:34"); // still use Z suffix + assert(date.getTime() == 192112440000); - // date = Date.fromString("1976-02-02T12:34:56"); - // trace("", 1, date.getTime() as f64); - // assert(date.getTime() == 192101696000); // FAIL + date = Date.fromString("1976-02-02T12:34:56"); // still use Z suffix + assert(date.getTime() == 192112496000); // date = Date.fromString("1976-02-02T12"); // Invalid Date } diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 6d9616783a..9863c122be 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -7,7 +7,6 @@ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64))) (type $i32_i64_=>_none (func (param i32 i64))) (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) (type $i32_i64_i32_i32_=>_none (func (param i32 i64 i32 i32))) @@ -21,7 +20,6 @@ (type $i32_i32_i32_i32_i32_i32_i32_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) (type $i32_i64_=>_i64 (func (param i32 i64) (result i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (import "env" "trace" (func $~lib/builtins/trace (param i32 i32 f64 f64 f64 f64 f64))) (memory $0 1) (data (i32.const 12) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\18\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00D\00a\00t\00e\00\00\00\00\00") (data (i32.const 60) ",\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") @@ -69,11 +67,12 @@ (data (i32.const 3900) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\000\000\000\001\00\00\00\00\00") (data (i32.const 3932) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\001\009\007\006\00\00\00\00\00") (data (i32.const 3964) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 4012) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 4092) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 4172) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") - (data (i32.const 4252) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z\00\00\00\00\00\00\00") - (data (i32.const 4336) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") + (data (i32.const 4012) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00 \00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 4076) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 4156) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 4236) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") + (data (i32.const 4316) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z\00\00\00\00\00\00\00") + (data (i32.const 4400) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") (table $0 1 funcref) (global $~lib/date/_day (mut i32) (i32.const 0)) (global $~lib/date/_month (mut i32) (i32.const 0)) @@ -90,10 +89,10 @@ (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) - (global $~lib/rt/__rtti_base i32 (i32.const 4336)) - (global $~lib/memory/__data_end i32 (i32.const 4388)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20772)) - (global $~lib/memory/__heap_base i32 (i32.const 20772)) + (global $~lib/rt/__rtti_base i32 (i32.const 4400)) + (global $~lib/memory/__data_end i32 (i32.const 4452)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20836)) + (global $~lib/memory/__heap_base i32 (i32.const 20836)) (global $~started (mut i32) (i32.const 0)) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -2666,7 +2665,7 @@ if i32.const 32 i32.const 80 - i32.const 104 + i32.const 102 i32.const 28 call $~lib/builtins/abort unreachable @@ -5799,8 +5798,8 @@ global.get $~lib/memory/__data_end i32.lt_s if - i32.const 20800 - i32.const 20848 + i32.const 20864 + i32.const 20912 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -6743,23 +6742,6 @@ local.set $3 end end - i32.const 2416 - local.set $17 - global.get $~lib/memory/__stack_pointer - local.get $17 - i32.store offset=16 - local.get $17 - i32.const 4 - local.get $1 - f64.convert_i32_s - local.get $2 - f64.convert_i32_s - local.get $3 - f64.convert_i32_s - local.get $4 - f64.convert_i32_s - f64.const 0 - call $~lib/builtins/trace end global.get $~lib/memory/__stack_pointer local.get $5 @@ -6823,22 +6805,6 @@ local.set $15 end end - i32.const 2416 - local.set $17 - global.get $~lib/memory/__stack_pointer - local.get $17 - i32.store offset=16 - local.get $17 - i32.const 3 - local.get $13 - f64.convert_i32_s - local.get $14 - f64.convert_i32_s - local.get $15 - f64.convert_i32_s - f64.const 0 - f64.const 0 - call $~lib/builtins/trace i32.const 0 local.get $13 local.get $14 @@ -8907,6 +8873,52 @@ unreachable end global.get $~lib/memory/__stack_pointer + i32.const 4032 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/date/Date.fromString + local.tee $1 + i32.store + local.get $1 + call $~lib/date/Date#getTime + i64.const 192112440000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 260 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3664 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/date/Date.fromString + local.tee $1 + i32.store + local.get $1 + call $~lib/date/Date#getTime + i64.const 192112496000 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 263 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer i32.const 0 i64.const -8640000000000000 call $~lib/date/Date#constructor @@ -8926,7 +8938,7 @@ if i32.const 0 i32.const 128 - i32.const 275 + i32.const 273 i32.const 3 call $~lib/builtins/abort unreachable @@ -8939,7 +8951,7 @@ if i32.const 0 i32.const 128 - i32.const 276 + i32.const 274 i32.const 3 call $~lib/builtins/abort unreachable @@ -8952,7 +8964,7 @@ if i32.const 0 i32.const 128 - i32.const 278 + i32.const 276 i32.const 3 call $~lib/builtins/abort unreachable @@ -8965,7 +8977,7 @@ if i32.const 0 i32.const 128 - i32.const 279 + i32.const 277 i32.const 3 call $~lib/builtins/abort unreachable @@ -8978,7 +8990,7 @@ if i32.const 0 i32.const 128 - i32.const 281 + i32.const 279 i32.const 3 call $~lib/builtins/abort unreachable @@ -8991,7 +9003,7 @@ if i32.const 0 i32.const 128 - i32.const 282 + i32.const 280 i32.const 3 call $~lib/builtins/abort unreachable @@ -9004,7 +9016,7 @@ if i32.const 0 i32.const 128 - i32.const 284 + i32.const 282 i32.const 3 call $~lib/builtins/abort unreachable @@ -9017,7 +9029,7 @@ if i32.const 0 i32.const 128 - i32.const 285 + i32.const 283 i32.const 3 call $~lib/builtins/abort unreachable @@ -9029,7 +9041,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4032 + i32.const 4096 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9040,7 +9052,7 @@ if i32.const 0 i32.const 128 - i32.const 287 + i32.const 285 i32.const 3 call $~lib/builtins/abort unreachable @@ -9052,7 +9064,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4112 + i32.const 4176 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9063,7 +9075,7 @@ if i32.const 0 i32.const 128 - i32.const 288 + i32.const 286 i32.const 3 call $~lib/builtins/abort unreachable @@ -9092,7 +9104,7 @@ if i32.const 0 i32.const 128 - i32.const 293 + i32.const 291 i32.const 3 call $~lib/builtins/abort unreachable @@ -9105,7 +9117,7 @@ if i32.const 0 i32.const 128 - i32.const 294 + i32.const 292 i32.const 3 call $~lib/builtins/abort unreachable @@ -9118,7 +9130,7 @@ if i32.const 0 i32.const 128 - i32.const 295 + i32.const 293 i32.const 3 call $~lib/builtins/abort unreachable @@ -9131,7 +9143,7 @@ if i32.const 0 i32.const 128 - i32.const 296 + i32.const 294 i32.const 3 call $~lib/builtins/abort unreachable @@ -9144,7 +9156,7 @@ if i32.const 0 i32.const 128 - i32.const 297 + i32.const 295 i32.const 3 call $~lib/builtins/abort unreachable @@ -9157,7 +9169,7 @@ if i32.const 0 i32.const 128 - i32.const 298 + i32.const 296 i32.const 3 call $~lib/builtins/abort unreachable @@ -9170,7 +9182,7 @@ if i32.const 0 i32.const 128 - i32.const 299 + i32.const 297 i32.const 3 call $~lib/builtins/abort unreachable @@ -9182,7 +9194,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4192 + i32.const 4256 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9193,7 +9205,7 @@ if i32.const 0 i32.const 128 - i32.const 301 + i32.const 299 i32.const 3 call $~lib/builtins/abort unreachable @@ -9205,7 +9217,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4272 + i32.const 4336 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9216,7 +9228,7 @@ if i32.const 0 i32.const 128 - i32.const 302 + i32.const 300 i32.const 3 call $~lib/builtins/abort unreachable @@ -9265,7 +9277,7 @@ if i32.const 32 i32.const 80 - i32.const 92 + i32.const 90 i32.const 35 call $~lib/builtins/abort unreachable From 56ecf2b6d0f955e06995377751c312fe88cce5c1 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 19:23:10 +0300 Subject: [PATCH 32/47] add Date.parse class method --- std/assembly/date.ts | 5 +++++ std/assembly/index.d.ts | 4 +++- tests/compiler/std/date.optimized.wat | 8 ++++---- tests/compiler/std/date.untouched.wat | 8 ++++---- 4 files changed, 16 insertions(+), 9 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index edd4c10b4e..e1b49f4434 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -36,6 +36,11 @@ export class Date { return Date_now(); } + // It can parse only ISO 8601 inputs: YYYY-MM-DDThh:mm-ss.nnnnZ + @inline static parse(dateString: string): Date { + return this.fromString(dateString); + } + static fromString(dateTimeString: string): Date { if (!dateTimeString.length) throw new RangeError(E_INVALIDDATE); var diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index fba957b2af..2f8c854001 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1716,7 +1716,9 @@ declare class Date { ): i64; /** Returns the current UTC timestamp in milliseconds. */ static now(): i64; - static fromString(dateStr: string): Date; + /** Parses a string representation of a date, and returns the number of milliseconds since January 1, 1970, 00:00:00 UTC. */ + static parse(dateString: string): Date; + static fromString(dateString: string): Date; /** Constructs a new date object from an UTC timestamp in milliseconds. */ constructor(value: i64); /** Returns the UTC timestamp of this date in milliseconds. */ diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index c800bbf6a1..eb84fd3b92 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -1996,7 +1996,7 @@ if i32.const 1056 i32.const 1104 - i32.const 102 + i32.const 107 i32.const 28 call $~lib/builtins/abort unreachable @@ -4050,7 +4050,7 @@ if i32.const 1056 i32.const 1104 - i32.const 40 + i32.const 45 i32.const 33 call $~lib/builtins/abort unreachable @@ -4102,7 +4102,7 @@ if i32.const 1056 i32.const 1104 - i32.const 57 + i32.const 62 i32.const 21 call $~lib/builtins/abort unreachable @@ -6206,7 +6206,7 @@ if i32.const 1056 i32.const 1104 - i32.const 90 + i32.const 95 i32.const 35 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 9863c122be..9cb2fbd7ed 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -2665,7 +2665,7 @@ if i32.const 32 i32.const 80 - i32.const 102 + i32.const 107 i32.const 28 call $~lib/builtins/abort unreachable @@ -6592,7 +6592,7 @@ if i32.const 32 i32.const 80 - i32.const 40 + i32.const 45 i32.const 33 call $~lib/builtins/abort unreachable @@ -6658,7 +6658,7 @@ if i32.const 32 i32.const 80 - i32.const 57 + i32.const 62 i32.const 21 call $~lib/builtins/abort unreachable @@ -9277,7 +9277,7 @@ if i32.const 32 i32.const 80 - i32.const 90 + i32.const 95 i32.const 35 call $~lib/builtins/abort unreachable From b2c52c6a8f4d931c55a45b595d05cd3893d8dec9 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 15 Apr 2021 22:43:03 +0300 Subject: [PATCH 33/47] comment --- std/assembly/date.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index e1b49f4434..436de3cf7a 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -36,7 +36,7 @@ export class Date { return Date_now(); } - // It can parse only ISO 8601 inputs: YYYY-MM-DDThh:mm-ss.nnnnZ + // It can parse only ISO 8601 inputs like YYYY-MM-DDTHH:MM:SS.000Z @inline static parse(dateString: string): Date { return this.fromString(dateString); } From 3df0ef5a383eeab56b2d2a10468d44115a35530b Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Sat, 17 Apr 2021 09:06:26 +0300 Subject: [PATCH 34/47] update fixtures --- tests/compiler/std/date.optimized.wat | 169 +++++++++++++++----------- tests/compiler/std/date.untouched.wat | 17 +-- 2 files changed, 102 insertions(+), 84 deletions(-) diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index e54dad42ff..db49bbce2a 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -13,9 +13,8 @@ (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i32_i32_i32_i32_i32_i32_i32_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (global $~lib/date/year (mut i32) (i32.const 0)) - (global $~lib/date/month (mut i32) (i32.const 0)) - (global $~lib/date/day (mut i32) (i32.const 0)) + (global $~lib/date/_day (mut i32) (i32.const 0)) + (global $~lib/date/_month (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -26,79 +25,103 @@ (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/memory/__stack_pointer (mut i32) (i32.const 19540)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20404)) (global $~started (mut i32) (i32.const 0)) (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 1484) "<") - (data (i32.const 1496) "\01\00\00\00$\00\00\00V\00a\00l\00u\00e\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e") - (data (i32.const 1548) ",") - (data (i32.const 1560) "\01\00\00\00\18\00\00\00~\00l\00i\00b\00/\00d\00a\00t\00e\00.\00t\00s") - (data (i32.const 1596) "|") - (data (i32.const 1608) "\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006") - (data (i32.const 1724) "<") - (data (i32.const 1736) "\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s") - (data (i32.const 1788) "\1c") - (data (i32.const 1800) "\01\00\00\00\02\00\00\000") - (data (i32.const 1820) "\\") - (data (i32.const 1832) "\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") - (data (i32.const 1916) "\1c") - (data (i32.const 1928) "\01\00\00\00\02\00\00\00+") - (data (i32.const 1948) "\1c") - (data (i32.const 1960) "\01") - (data (i32.const 1980) "\1c") - (data (i32.const 1992) "\01\00\00\00\02\00\00\00-") - (data (i32.const 2012) "\1c") - (data (i32.const 2024) "\01\00\00\00\02\00\00\00T") - (data (i32.const 2044) "\1c") - (data (i32.const 2056) "\01\00\00\00\02\00\00\00:") - (data (i32.const 2076) "\1c") - (data (i32.const 2088) "\01\00\00\00\02\00\00\00.") - (data (i32.const 2108) "\1c") - (data (i32.const 2120) "\01\00\00\00\02\00\00\00Z") - (data (i32.const 2140) "L") - (data (i32.const 2152) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\000\002\000\00Z") - (data (i32.const 2220) "L") - (data (i32.const 2232) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z") - (data (i32.const 2300) "L") - (data (i32.const 2312) "\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z") - (data (i32.const 2380) ",") - (data (i32.const 2392) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") - (data (i32.const 2428) ",") - (data (i32.const 2440) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") - (data (i32.const 2476) ",") - (data (i32.const 2488) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 2524) "|") - (data (i32.const 2536) "\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") - (data (i32.const 2652) "\1c") - (data (i32.const 2664) "\01\00\00\00\04\00\00\001\009") - (data (i32.const 2684) ",") - (data (i32.const 2696) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") - (data (i32.const 2732) ",") - (data (i32.const 2744) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") - (data (i32.const 2780) ",") - (data (i32.const 2792) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\004\00-\000\002") - (data (i32.const 2828) ",") - (data (i32.const 2840) "\01\00\00\00\10\00\00\007\006\00-\000\004\00-\000\002") - (data (i32.const 2876) "<") - (data (i32.const 2888) "\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006") - (data (i32.const 2940) "L") - (data (i32.const 2952) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") - (data (i32.const 3020) "L") - (data (i32.const 3032) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") - (data (i32.const 3104) "\06\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 3132) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") + (data (i32.const 1048) "\01\00\00\00\18\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00D\00a\00t\00e") + (data (i32.const 1084) ",") + (data (i32.const 1096) "\01\00\00\00\18\00\00\00~\00l\00i\00b\00/\00d\00a\00t\00e\00.\00t\00s") + (data (i32.const 1132) ",") + (data (i32.const 1144) "\01\00\00\00\16\00\00\00s\00t\00d\00/\00d\00a\00t\00e\00.\00t\00s") + (data (i32.const 1180) "<") + (data (i32.const 1192) "\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 1244) "<") + (data (i32.const 1256) "\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 1372) "<") + (data (i32.const 1384) "\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 1436) ",") + (data (i32.const 1448) "\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") + (data (i32.const 1516) "<") + (data (i32.const 1528) "\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 1580) "\1c") + (data (i32.const 1592) "\01\00\00\00\02\00\00\00-") + (data (i32.const 1612) "\1c") + (data (i32.const 1624) "\01\00\00\00\02\00\00\00+") + (data (i32.const 1644) "|") + (data (i32.const 1656) "\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006") + (data (i32.const 1772) "<") + (data (i32.const 1784) "\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s") + (data (i32.const 1836) "\1c") + (data (i32.const 1848) "\01\00\00\00\02\00\00\000") + (data (i32.const 1868) "\\") + (data (i32.const 1880) "\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") + (data (i32.const 1964) "\1c") + (data (i32.const 1976) "\01") + (data (i32.const 1996) "\1c") + (data (i32.const 2008) "\01\00\00\00\02\00\00\00T") + (data (i32.const 2028) "\1c") + (data (i32.const 2040) "\01\00\00\00\02\00\00\00:") + (data (i32.const 2060) "\1c") + (data (i32.const 2072) "\01\00\00\00\02\00\00\00.") + (data (i32.const 2092) "\1c") + (data (i32.const 2104) "\01\00\00\00\02\00\00\00Z") + (data (i32.const 2124) "L") + (data (i32.const 2136) "\01\00\00\000\00\00\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 2204) "L") + (data (i32.const 2216) "\01\00\00\006\00\00\00-\000\000\000\000\000\001\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 2284) "L") + (data (i32.const 2296) "\01\00\00\000\00\00\000\000\000\001\00-\000\004\00-\000\007\00T\002\003\00:\000\006\00:\004\000\00.\000\000\000\00Z") + (data (i32.const 2364) "L") + (data (i32.const 2376) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\000\002\000\00Z") + (data (i32.const 2444) "L") + (data (i32.const 2456) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z") + (data (i32.const 2524) "L") + (data (i32.const 2536) "\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z") + (data (i32.const 2604) "L") + (data (i32.const 2616) "\01\00\00\000\00\00\009\009\009\009\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 2684) "L") + (data (i32.const 2696) "\01\00\00\006\00\00\00+\000\001\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 2764) "L") + (data (i32.const 2776) "\01\00\00\006\00\00\00-\000\000\000\000\002\002\00-\000\006\00-\001\006\00T\001\007\00:\001\003\00:\005\000\00.\007\007\004\00Z") + (data (i32.const 2844) ",") + (data (i32.const 2856) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") + (data (i32.const 2892) ",") + (data (i32.const 2904) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 2940) ",") + (data (i32.const 2952) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 2988) "|") + (data (i32.const 3000) "\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") + (data (i32.const 3116) ",") + (data (i32.const 3128) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") + (data (i32.const 3164) ",") + (data (i32.const 3176) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") + (data (i32.const 3212) "<") + (data (i32.const 3224) "\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006") + (data (i32.const 3276) "L") + (data (i32.const 3288) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") + (data (i32.const 3356) "L") + (data (i32.const 3368) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") + (data (i32.const 3436) "\1c") + (data (i32.const 3448) "\01\00\00\00\08\00\00\000\000\000\000") + (data (i32.const 3468) "\1c") + (data (i32.const 3480) "\01\00\00\00\08\00\00\000\000\000\001") + (data (i32.const 3500) "\1c") + (data (i32.const 3512) "\01\00\00\00\08\00\00\001\009\007\006") + (data (i32.const 3532) ",") + (data (i32.const 3544) "\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002") + (data (i32.const 3580) "<") + (data (i32.const 3592) "\01\00\00\00 \00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004") + (data (i32.const 3644) "L") + (data (i32.const 3656) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3724) "L") + (data (i32.const 3736) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3804) "L") + (data (i32.const 3816) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 3884) "L") + (data (i32.const 3896) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z") + (data (i32.const 3968) "\06\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 3996) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") (export "memory" (memory $0)) (export "_start" (func $~start)) (func $~lib/date/daysSinceEpoch (param $0 i32) (param $1 i32) (param $2 i32) (result i32) diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 4221eb1f0e..294971ef9a 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -20,13 +20,8 @@ (type $i32_i32_i32_i32_i32_i32_i32_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) (type $i32_i64_=>_i64 (func (param i32 i64) (result i64))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) - (global $~lib/date/MILLIS_PER_DAY i32 (i32.const 86400000)) - (global $~lib/date/MILLIS_PER_HOUR i32 (i32.const 3600000)) - (global $~lib/date/MILLIS_PER_MINUTE i32 (i32.const 60000)) - (global $~lib/date/MILLIS_PER_SECOND i32 (i32.const 1000)) - (global $~lib/date/year (mut i32) (i32.const 0)) - (global $~lib/date/month (mut i32) (i32.const 0)) - (global $~lib/date/day (mut i32) (i32.const 0)) + (global $~lib/date/_day (mut i32) (i32.const 0)) + (global $~lib/date/_month (mut i32) (i32.const 0)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -40,10 +35,10 @@ (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) - (global $~lib/rt/__rtti_base i32 (i32.const 3536)) - (global $~lib/memory/__data_end i32 (i32.const 3588)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 19972)) - (global $~lib/memory/__heap_base i32 (i32.const 19972)) + (global $~lib/rt/__rtti_base i32 (i32.const 4400)) + (global $~lib/memory/__data_end i32 (i32.const 4452)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20836)) + (global $~lib/memory/__heap_base i32 (i32.const 20836)) (global $~started (mut i32) (i32.const 0)) (memory $0 1) (data (i32.const 12) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\18\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00D\00a\00t\00e\00\00\00\00\00") From eb29f2da0542a85b2148cf7e7dd09a2c6bcae64e Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Sun, 18 Apr 2021 09:37:38 +0300 Subject: [PATCH 35/47] more tests --- tests/compiler/std/date.optimized.wat | 157 ++++++++++++++++++------- tests/compiler/std/date.ts | 10 ++ tests/compiler/std/date.untouched.wat | 162 +++++++++++++++++++------- 3 files changed, 241 insertions(+), 88 deletions(-) diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index db49bbce2a..dc3c6473fa 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -5336,11 +5336,65 @@ unreachable end local.get $0 + i64.load offset=16 + i64.const 7899941177818720 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 185 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 i32.const 1 call $~lib/date/Date#setUTCMonth local.get $0 i32.const 12 call $~lib/date/Date#setUTCMonth + local.get $0 + i64.load offset=16 + i64.const 7899967616218720 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 189 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 0 + call $~lib/date/Date#setUTCMonth + local.get $0 + i64.load offset=16 + i64.const 7899967616218720 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 193 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 13 + call $~lib/date/Date#setUTCMonth + local.get $0 + i64.load offset=16 + i64.const 7900001830618720 + i64.ne + if + i32.const 0 + i32.const 1152 + i32.const 195 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i64.const 7941202527925698 call $~lib/date/Date#constructor @@ -5353,7 +5407,7 @@ if i32.const 0 i32.const 1152 - i32.const 193 + i32.const 201 i32.const 3 call $~lib/builtins/abort unreachable @@ -5368,7 +5422,7 @@ if i32.const 0 i32.const 1152 - i32.const 195 + i32.const 203 i32.const 3 call $~lib/builtins/abort unreachable @@ -5383,7 +5437,22 @@ if i32.const 0 i32.const 1152 - i32.const 197 + i32.const 205 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $0 + i32.const 71 + call $~lib/date/Date#setUTCFullYear + local.get $0 + i32.load + i32.const 71 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 207 i32.const 3 call $~lib/builtins/abort unreachable @@ -5409,7 +5478,7 @@ if i32.const 0 i32.const 1152 - i32.const 203 + i32.const 213 i32.const 3 call $~lib/builtins/abort unreachable @@ -5435,7 +5504,7 @@ if i32.const 0 i32.const 1152 - i32.const 205 + i32.const 215 i32.const 3 call $~lib/builtins/abort unreachable @@ -5461,7 +5530,7 @@ if i32.const 0 i32.const 1152 - i32.const 207 + i32.const 217 i32.const 3 call $~lib/builtins/abort unreachable @@ -5487,7 +5556,7 @@ if i32.const 0 i32.const 1152 - i32.const 209 + i32.const 219 i32.const 3 call $~lib/builtins/abort unreachable @@ -5513,7 +5582,7 @@ if i32.const 0 i32.const 1152 - i32.const 211 + i32.const 221 i32.const 3 call $~lib/builtins/abort unreachable @@ -5539,7 +5608,7 @@ if i32.const 0 i32.const 1152 - i32.const 213 + i32.const 223 i32.const 3 call $~lib/builtins/abort unreachable @@ -5565,7 +5634,7 @@ if i32.const 0 i32.const 1152 - i32.const 215 + i32.const 225 i32.const 3 call $~lib/builtins/abort unreachable @@ -5591,7 +5660,7 @@ if i32.const 0 i32.const 1152 - i32.const 217 + i32.const 227 i32.const 3 call $~lib/builtins/abort unreachable @@ -5617,7 +5686,7 @@ if i32.const 0 i32.const 1152 - i32.const 219 + i32.const 229 i32.const 3 call $~lib/builtins/abort unreachable @@ -5637,7 +5706,7 @@ if i32.const 0 i32.const 1152 - i32.const 226 + i32.const 236 i32.const 3 call $~lib/builtins/abort unreachable @@ -5657,7 +5726,7 @@ if i32.const 0 i32.const 1152 - i32.const 228 + i32.const 238 i32.const 3 call $~lib/builtins/abort unreachable @@ -5677,7 +5746,7 @@ if i32.const 0 i32.const 1152 - i32.const 230 + i32.const 240 i32.const 3 call $~lib/builtins/abort unreachable @@ -5697,7 +5766,7 @@ if i32.const 0 i32.const 1152 - i32.const 234 + i32.const 244 i32.const 3 call $~lib/builtins/abort unreachable @@ -5717,7 +5786,7 @@ if i32.const 0 i32.const 1152 - i32.const 238 + i32.const 248 i32.const 3 call $~lib/builtins/abort unreachable @@ -5737,7 +5806,7 @@ if i32.const 0 i32.const 1152 - i32.const 242 + i32.const 252 i32.const 3 call $~lib/builtins/abort unreachable @@ -5757,7 +5826,7 @@ if i32.const 0 i32.const 1152 - i32.const 245 + i32.const 255 i32.const 3 call $~lib/builtins/abort unreachable @@ -5777,7 +5846,7 @@ if i32.const 0 i32.const 1152 - i32.const 248 + i32.const 258 i32.const 3 call $~lib/builtins/abort unreachable @@ -5797,7 +5866,7 @@ if i32.const 0 i32.const 1152 - i32.const 251 + i32.const 261 i32.const 3 call $~lib/builtins/abort unreachable @@ -5817,7 +5886,7 @@ if i32.const 0 i32.const 1152 - i32.const 254 + i32.const 264 i32.const 3 call $~lib/builtins/abort unreachable @@ -5837,7 +5906,7 @@ if i32.const 0 i32.const 1152 - i32.const 257 + i32.const 267 i32.const 3 call $~lib/builtins/abort unreachable @@ -5857,7 +5926,7 @@ if i32.const 0 i32.const 1152 - i32.const 260 + i32.const 270 i32.const 3 call $~lib/builtins/abort unreachable @@ -5877,7 +5946,7 @@ if i32.const 0 i32.const 1152 - i32.const 263 + i32.const 273 i32.const 3 call $~lib/builtins/abort unreachable @@ -5899,7 +5968,7 @@ if i32.const 0 i32.const 1152 - i32.const 273 + i32.const 283 i32.const 3 call $~lib/builtins/abort unreachable @@ -5911,7 +5980,7 @@ if i32.const 0 i32.const 1152 - i32.const 274 + i32.const 284 i32.const 3 call $~lib/builtins/abort unreachable @@ -5923,7 +5992,7 @@ if i32.const 0 i32.const 1152 - i32.const 276 + i32.const 286 i32.const 3 call $~lib/builtins/abort unreachable @@ -5935,7 +6004,7 @@ if i32.const 0 i32.const 1152 - i32.const 277 + i32.const 287 i32.const 3 call $~lib/builtins/abort unreachable @@ -5947,7 +6016,7 @@ if i32.const 0 i32.const 1152 - i32.const 279 + i32.const 289 i32.const 3 call $~lib/builtins/abort unreachable @@ -5959,7 +6028,7 @@ if i32.const 0 i32.const 1152 - i32.const 280 + i32.const 290 i32.const 3 call $~lib/builtins/abort unreachable @@ -5971,7 +6040,7 @@ if i32.const 0 i32.const 1152 - i32.const 282 + i32.const 292 i32.const 3 call $~lib/builtins/abort unreachable @@ -5983,7 +6052,7 @@ if i32.const 0 i32.const 1152 - i32.const 283 + i32.const 293 i32.const 3 call $~lib/builtins/abort unreachable @@ -6004,7 +6073,7 @@ if i32.const 0 i32.const 1152 - i32.const 285 + i32.const 295 i32.const 3 call $~lib/builtins/abort unreachable @@ -6025,7 +6094,7 @@ if i32.const 0 i32.const 1152 - i32.const 286 + i32.const 296 i32.const 3 call $~lib/builtins/abort unreachable @@ -6047,7 +6116,7 @@ if i32.const 0 i32.const 1152 - i32.const 291 + i32.const 301 i32.const 3 call $~lib/builtins/abort unreachable @@ -6059,7 +6128,7 @@ if i32.const 0 i32.const 1152 - i32.const 292 + i32.const 302 i32.const 3 call $~lib/builtins/abort unreachable @@ -6071,7 +6140,7 @@ if i32.const 0 i32.const 1152 - i32.const 293 + i32.const 303 i32.const 3 call $~lib/builtins/abort unreachable @@ -6081,7 +6150,7 @@ if i32.const 0 i32.const 1152 - i32.const 294 + i32.const 304 i32.const 3 call $~lib/builtins/abort unreachable @@ -6091,7 +6160,7 @@ if i32.const 0 i32.const 1152 - i32.const 295 + i32.const 305 i32.const 3 call $~lib/builtins/abort unreachable @@ -6101,7 +6170,7 @@ if i32.const 0 i32.const 1152 - i32.const 296 + i32.const 306 i32.const 3 call $~lib/builtins/abort unreachable @@ -6113,7 +6182,7 @@ if i32.const 0 i32.const 1152 - i32.const 297 + i32.const 307 i32.const 3 call $~lib/builtins/abort unreachable @@ -6134,7 +6203,7 @@ if i32.const 0 i32.const 1152 - i32.const 299 + i32.const 309 i32.const 3 call $~lib/builtins/abort unreachable @@ -6155,7 +6224,7 @@ if i32.const 0 i32.const 1152 - i32.const 300 + i32.const 310 i32.const 3 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index 9233be8727..b1897bcbb3 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -182,9 +182,17 @@ assert(date.getUTCMonth() == 10); date.setUTCMonth(2); assert(date.getUTCMonth() == 2); + assert(date.getTime() == 7899941177818720); // test boundaries date.setUTCMonth(1); date.setUTCMonth(12); + assert(date.getTime() == 7899967616218720); + + // test out of boundaries + date.setUTCMonth(0); + assert(date.getTime() == 7899967616218720); + date.setUTCMonth(13); + assert(date.getTime() == 7900001830618720); } // Date#setUTCFullYear ///////////////////////////////////////////////////////////////////////////// @@ -195,6 +203,8 @@ assert(date.getUTCFullYear() == 1976); date.setUTCFullYear(20212); assert(date.getUTCFullYear() == 20212); + date.setUTCFullYear(71); + assert(date.getUTCFullYear() == 71); } // Date#toISOString //////////////////////////////////////////////////////////////////////////////// diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 294971ef9a..162b0cb40d 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -8300,11 +8300,69 @@ unreachable end local.get $1 + call $~lib/date/Date#getTime + i64.const 7899941177818720 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 185 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 i32.const 1 call $~lib/date/Date#setUTCMonth local.get $1 i32.const 12 call $~lib/date/Date#setUTCMonth + local.get $1 + call $~lib/date/Date#getTime + i64.const 7899967616218720 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 189 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 0 + call $~lib/date/Date#setUTCMonth + local.get $1 + call $~lib/date/Date#getTime + i64.const 7899967616218720 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 193 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 13 + call $~lib/date/Date#setUTCMonth + local.get $1 + call $~lib/date/Date#getTime + i64.const 7900001830618720 + i64.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 195 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i32.const 0 i64.const 7941202527925698 @@ -8319,7 +8377,7 @@ if i32.const 0 i32.const 128 - i32.const 193 + i32.const 201 i32.const 3 call $~lib/builtins/abort unreachable @@ -8335,7 +8393,7 @@ if i32.const 0 i32.const 128 - i32.const 195 + i32.const 203 i32.const 3 call $~lib/builtins/abort unreachable @@ -8351,7 +8409,23 @@ if i32.const 0 i32.const 128 - i32.const 197 + i32.const 205 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 71 + call $~lib/date/Date#setUTCFullYear + local.get $1 + call $~lib/date/Date#getUTCFullYear + i32.const 71 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 207 i32.const 3 call $~lib/builtins/abort unreachable @@ -8380,7 +8454,7 @@ if i32.const 0 i32.const 128 - i32.const 203 + i32.const 213 i32.const 3 call $~lib/builtins/abort unreachable @@ -8411,7 +8485,7 @@ if i32.const 0 i32.const 128 - i32.const 205 + i32.const 215 i32.const 3 call $~lib/builtins/abort unreachable @@ -8440,7 +8514,7 @@ if i32.const 0 i32.const 128 - i32.const 207 + i32.const 217 i32.const 3 call $~lib/builtins/abort unreachable @@ -8469,7 +8543,7 @@ if i32.const 0 i32.const 128 - i32.const 209 + i32.const 219 i32.const 3 call $~lib/builtins/abort unreachable @@ -8498,7 +8572,7 @@ if i32.const 0 i32.const 128 - i32.const 211 + i32.const 221 i32.const 3 call $~lib/builtins/abort unreachable @@ -8527,7 +8601,7 @@ if i32.const 0 i32.const 128 - i32.const 213 + i32.const 223 i32.const 3 call $~lib/builtins/abort unreachable @@ -8556,7 +8630,7 @@ if i32.const 0 i32.const 128 - i32.const 215 + i32.const 225 i32.const 3 call $~lib/builtins/abort unreachable @@ -8585,7 +8659,7 @@ if i32.const 0 i32.const 128 - i32.const 217 + i32.const 227 i32.const 3 call $~lib/builtins/abort unreachable @@ -8614,7 +8688,7 @@ if i32.const 0 i32.const 128 - i32.const 219 + i32.const 229 i32.const 3 call $~lib/builtins/abort unreachable @@ -8637,7 +8711,7 @@ if i32.const 0 i32.const 128 - i32.const 226 + i32.const 236 i32.const 3 call $~lib/builtins/abort unreachable @@ -8660,7 +8734,7 @@ if i32.const 0 i32.const 128 - i32.const 228 + i32.const 238 i32.const 3 call $~lib/builtins/abort unreachable @@ -8683,7 +8757,7 @@ if i32.const 0 i32.const 128 - i32.const 230 + i32.const 240 i32.const 3 call $~lib/builtins/abort unreachable @@ -8706,7 +8780,7 @@ if i32.const 0 i32.const 128 - i32.const 234 + i32.const 244 i32.const 3 call $~lib/builtins/abort unreachable @@ -8729,7 +8803,7 @@ if i32.const 0 i32.const 128 - i32.const 238 + i32.const 248 i32.const 3 call $~lib/builtins/abort unreachable @@ -8752,7 +8826,7 @@ if i32.const 0 i32.const 128 - i32.const 242 + i32.const 252 i32.const 3 call $~lib/builtins/abort unreachable @@ -8775,7 +8849,7 @@ if i32.const 0 i32.const 128 - i32.const 245 + i32.const 255 i32.const 3 call $~lib/builtins/abort unreachable @@ -8798,7 +8872,7 @@ if i32.const 0 i32.const 128 - i32.const 248 + i32.const 258 i32.const 3 call $~lib/builtins/abort unreachable @@ -8821,7 +8895,7 @@ if i32.const 0 i32.const 128 - i32.const 251 + i32.const 261 i32.const 3 call $~lib/builtins/abort unreachable @@ -8844,7 +8918,7 @@ if i32.const 0 i32.const 128 - i32.const 254 + i32.const 264 i32.const 3 call $~lib/builtins/abort unreachable @@ -8867,7 +8941,7 @@ if i32.const 0 i32.const 128 - i32.const 257 + i32.const 267 i32.const 3 call $~lib/builtins/abort unreachable @@ -8890,7 +8964,7 @@ if i32.const 0 i32.const 128 - i32.const 260 + i32.const 270 i32.const 3 call $~lib/builtins/abort unreachable @@ -8913,7 +8987,7 @@ if i32.const 0 i32.const 128 - i32.const 263 + i32.const 273 i32.const 3 call $~lib/builtins/abort unreachable @@ -8938,7 +9012,7 @@ if i32.const 0 i32.const 128 - i32.const 273 + i32.const 283 i32.const 3 call $~lib/builtins/abort unreachable @@ -8951,7 +9025,7 @@ if i32.const 0 i32.const 128 - i32.const 274 + i32.const 284 i32.const 3 call $~lib/builtins/abort unreachable @@ -8964,7 +9038,7 @@ if i32.const 0 i32.const 128 - i32.const 276 + i32.const 286 i32.const 3 call $~lib/builtins/abort unreachable @@ -8977,7 +9051,7 @@ if i32.const 0 i32.const 128 - i32.const 277 + i32.const 287 i32.const 3 call $~lib/builtins/abort unreachable @@ -8990,7 +9064,7 @@ if i32.const 0 i32.const 128 - i32.const 279 + i32.const 289 i32.const 3 call $~lib/builtins/abort unreachable @@ -9003,7 +9077,7 @@ if i32.const 0 i32.const 128 - i32.const 280 + i32.const 290 i32.const 3 call $~lib/builtins/abort unreachable @@ -9016,7 +9090,7 @@ if i32.const 0 i32.const 128 - i32.const 282 + i32.const 292 i32.const 3 call $~lib/builtins/abort unreachable @@ -9029,7 +9103,7 @@ if i32.const 0 i32.const 128 - i32.const 283 + i32.const 293 i32.const 3 call $~lib/builtins/abort unreachable @@ -9052,7 +9126,7 @@ if i32.const 0 i32.const 128 - i32.const 285 + i32.const 295 i32.const 3 call $~lib/builtins/abort unreachable @@ -9075,7 +9149,7 @@ if i32.const 0 i32.const 128 - i32.const 286 + i32.const 296 i32.const 3 call $~lib/builtins/abort unreachable @@ -9104,7 +9178,7 @@ if i32.const 0 i32.const 128 - i32.const 291 + i32.const 301 i32.const 3 call $~lib/builtins/abort unreachable @@ -9117,7 +9191,7 @@ if i32.const 0 i32.const 128 - i32.const 292 + i32.const 302 i32.const 3 call $~lib/builtins/abort unreachable @@ -9130,7 +9204,7 @@ if i32.const 0 i32.const 128 - i32.const 293 + i32.const 303 i32.const 3 call $~lib/builtins/abort unreachable @@ -9143,7 +9217,7 @@ if i32.const 0 i32.const 128 - i32.const 294 + i32.const 304 i32.const 3 call $~lib/builtins/abort unreachable @@ -9156,7 +9230,7 @@ if i32.const 0 i32.const 128 - i32.const 295 + i32.const 305 i32.const 3 call $~lib/builtins/abort unreachable @@ -9169,7 +9243,7 @@ if i32.const 0 i32.const 128 - i32.const 296 + i32.const 306 i32.const 3 call $~lib/builtins/abort unreachable @@ -9182,7 +9256,7 @@ if i32.const 0 i32.const 128 - i32.const 297 + i32.const 307 i32.const 3 call $~lib/builtins/abort unreachable @@ -9205,7 +9279,7 @@ if i32.const 0 i32.const 128 - i32.const 299 + i32.const 309 i32.const 3 call $~lib/builtins/abort unreachable @@ -9228,7 +9302,7 @@ if i32.const 0 i32.const 128 - i32.const 300 + i32.const 310 i32.const 3 call $~lib/builtins/abort unreachable From acb317624527dbd96bcb6ffa3e772486a8a2626a Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Sun, 18 Apr 2021 11:08:19 +0300 Subject: [PATCH 36/47] more special tests --- tests/compiler/std/date.optimized.wat | 38 +++++++++++++-------------- tests/compiler/std/date.ts | 10 ++++++- tests/compiler/std/date.untouched.wat | 38 +++++++++++++-------------- 3 files changed, 47 insertions(+), 39 deletions(-) diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index dc3c6473fa..d1bdcc31bb 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -5968,7 +5968,7 @@ if i32.const 0 i32.const 1152 - i32.const 283 + i32.const 291 i32.const 3 call $~lib/builtins/abort unreachable @@ -5980,7 +5980,7 @@ if i32.const 0 i32.const 1152 - i32.const 284 + i32.const 292 i32.const 3 call $~lib/builtins/abort unreachable @@ -5992,7 +5992,7 @@ if i32.const 0 i32.const 1152 - i32.const 286 + i32.const 294 i32.const 3 call $~lib/builtins/abort unreachable @@ -6004,7 +6004,7 @@ if i32.const 0 i32.const 1152 - i32.const 287 + i32.const 295 i32.const 3 call $~lib/builtins/abort unreachable @@ -6016,7 +6016,7 @@ if i32.const 0 i32.const 1152 - i32.const 289 + i32.const 297 i32.const 3 call $~lib/builtins/abort unreachable @@ -6028,7 +6028,7 @@ if i32.const 0 i32.const 1152 - i32.const 290 + i32.const 298 i32.const 3 call $~lib/builtins/abort unreachable @@ -6040,7 +6040,7 @@ if i32.const 0 i32.const 1152 - i32.const 292 + i32.const 300 i32.const 3 call $~lib/builtins/abort unreachable @@ -6052,7 +6052,7 @@ if i32.const 0 i32.const 1152 - i32.const 293 + i32.const 301 i32.const 3 call $~lib/builtins/abort unreachable @@ -6073,7 +6073,7 @@ if i32.const 0 i32.const 1152 - i32.const 295 + i32.const 303 i32.const 3 call $~lib/builtins/abort unreachable @@ -6094,7 +6094,7 @@ if i32.const 0 i32.const 1152 - i32.const 296 + i32.const 304 i32.const 3 call $~lib/builtins/abort unreachable @@ -6116,7 +6116,7 @@ if i32.const 0 i32.const 1152 - i32.const 301 + i32.const 309 i32.const 3 call $~lib/builtins/abort unreachable @@ -6128,7 +6128,7 @@ if i32.const 0 i32.const 1152 - i32.const 302 + i32.const 310 i32.const 3 call $~lib/builtins/abort unreachable @@ -6140,7 +6140,7 @@ if i32.const 0 i32.const 1152 - i32.const 303 + i32.const 311 i32.const 3 call $~lib/builtins/abort unreachable @@ -6150,7 +6150,7 @@ if i32.const 0 i32.const 1152 - i32.const 304 + i32.const 312 i32.const 3 call $~lib/builtins/abort unreachable @@ -6160,7 +6160,7 @@ if i32.const 0 i32.const 1152 - i32.const 305 + i32.const 313 i32.const 3 call $~lib/builtins/abort unreachable @@ -6170,7 +6170,7 @@ if i32.const 0 i32.const 1152 - i32.const 306 + i32.const 314 i32.const 3 call $~lib/builtins/abort unreachable @@ -6182,7 +6182,7 @@ if i32.const 0 i32.const 1152 - i32.const 307 + i32.const 315 i32.const 3 call $~lib/builtins/abort unreachable @@ -6203,7 +6203,7 @@ if i32.const 0 i32.const 1152 - i32.const 309 + i32.const 317 i32.const 3 call $~lib/builtins/abort unreachable @@ -6224,7 +6224,7 @@ if i32.const 0 i32.const 1152 - i32.const 310 + i32.const 318 i32.const 3 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index b1897bcbb3..a46c67807e 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -272,7 +272,15 @@ date = Date.fromString("1976-02-02T12:34:56"); // still use Z suffix assert(date.getTime() == 192112496000); - // date = Date.fromString("1976-02-02T12"); // Invalid Date + // date = Date.fromString('0Z'); + // assert(date.getTime() == 946684800000); // fail + + // date = Date.fromString('000Z'); + // assert(date.getTime() == 946684800000); // fail + + // Date.fromString(""); // Invalid Date + // Date.fromString("1000000"); // Invalid Date + // Date.fromString("1976-02-02T12"); // Invalid Date } // Minimum / Maximum dates //////////////////////////////////////////////////////////////////////// diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 162b0cb40d..da125db2b6 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -9012,7 +9012,7 @@ if i32.const 0 i32.const 128 - i32.const 283 + i32.const 291 i32.const 3 call $~lib/builtins/abort unreachable @@ -9025,7 +9025,7 @@ if i32.const 0 i32.const 128 - i32.const 284 + i32.const 292 i32.const 3 call $~lib/builtins/abort unreachable @@ -9038,7 +9038,7 @@ if i32.const 0 i32.const 128 - i32.const 286 + i32.const 294 i32.const 3 call $~lib/builtins/abort unreachable @@ -9051,7 +9051,7 @@ if i32.const 0 i32.const 128 - i32.const 287 + i32.const 295 i32.const 3 call $~lib/builtins/abort unreachable @@ -9064,7 +9064,7 @@ if i32.const 0 i32.const 128 - i32.const 289 + i32.const 297 i32.const 3 call $~lib/builtins/abort unreachable @@ -9077,7 +9077,7 @@ if i32.const 0 i32.const 128 - i32.const 290 + i32.const 298 i32.const 3 call $~lib/builtins/abort unreachable @@ -9090,7 +9090,7 @@ if i32.const 0 i32.const 128 - i32.const 292 + i32.const 300 i32.const 3 call $~lib/builtins/abort unreachable @@ -9103,7 +9103,7 @@ if i32.const 0 i32.const 128 - i32.const 293 + i32.const 301 i32.const 3 call $~lib/builtins/abort unreachable @@ -9126,7 +9126,7 @@ if i32.const 0 i32.const 128 - i32.const 295 + i32.const 303 i32.const 3 call $~lib/builtins/abort unreachable @@ -9149,7 +9149,7 @@ if i32.const 0 i32.const 128 - i32.const 296 + i32.const 304 i32.const 3 call $~lib/builtins/abort unreachable @@ -9178,7 +9178,7 @@ if i32.const 0 i32.const 128 - i32.const 301 + i32.const 309 i32.const 3 call $~lib/builtins/abort unreachable @@ -9191,7 +9191,7 @@ if i32.const 0 i32.const 128 - i32.const 302 + i32.const 310 i32.const 3 call $~lib/builtins/abort unreachable @@ -9204,7 +9204,7 @@ if i32.const 0 i32.const 128 - i32.const 303 + i32.const 311 i32.const 3 call $~lib/builtins/abort unreachable @@ -9217,7 +9217,7 @@ if i32.const 0 i32.const 128 - i32.const 304 + i32.const 312 i32.const 3 call $~lib/builtins/abort unreachable @@ -9230,7 +9230,7 @@ if i32.const 0 i32.const 128 - i32.const 305 + i32.const 313 i32.const 3 call $~lib/builtins/abort unreachable @@ -9243,7 +9243,7 @@ if i32.const 0 i32.const 128 - i32.const 306 + i32.const 314 i32.const 3 call $~lib/builtins/abort unreachable @@ -9256,7 +9256,7 @@ if i32.const 0 i32.const 128 - i32.const 307 + i32.const 315 i32.const 3 call $~lib/builtins/abort unreachable @@ -9279,7 +9279,7 @@ if i32.const 0 i32.const 128 - i32.const 309 + i32.const 317 i32.const 3 call $~lib/builtins/abort unreachable @@ -9302,7 +9302,7 @@ if i32.const 0 i32.const 128 - i32.const 310 + i32.const 318 i32.const 3 call $~lib/builtins/abort unreachable From fc58777c3689155ee78ac2549623bc70fde3442f Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Sun, 18 Apr 2021 11:08:51 +0300 Subject: [PATCH 37/47] fixme later --- tests/compiler/std/date.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index a46c67807e..e1875fe6f5 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -273,10 +273,10 @@ assert(date.getTime() == 192112496000); // date = Date.fromString('0Z'); - // assert(date.getTime() == 946684800000); // fail + // assert(date.getTime() == 946684800000); // FIXME: fail // date = Date.fromString('000Z'); - // assert(date.getTime() == 946684800000); // fail + // assert(date.getTime() == 946684800000); // FIXME: fail // Date.fromString(""); // Invalid Date // Date.fromString("1000000"); // Invalid Date From 9cbb950d710f63d4d832db5babba600ff77def22 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Wed, 21 Apr 2021 23:15:04 +0300 Subject: [PATCH 38/47] typo in comment --- tests/compiler/std/date.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index e1875fe6f5..ed0dea9fbe 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -7,7 +7,7 @@ assert(Date.UTC(-90) == -65007360000000); assert(Date.UTC(2018, 10, 10, 11, 0, 0, 1) == 1541847600001); assert(Date.UTC(275760, 8, 13, 0, 0, 0, 0) == 8640000000000000); - // ate.UTC(275760, 8, 13, 0, 0, 0, 1); // Invalid Date + // Date.UTC(275760, 8, 13, 0, 0, 0, 1); // Invalid Date } // Date get / set Time //////////////////////////////////////////////////////////////////////////// From 1bf570b6a3b202a46582ee51826852dedcb39534 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Fri, 23 Apr 2021 14:42:17 +0300 Subject: [PATCH 39/47] force ci --- tests/compiler/std/date.optimized.wat | 218 +++++++++++++------------- tests/compiler/std/date.ts | 1 + tests/compiler/std/date.untouched.wat | 218 +++++++++++++------------- 3 files changed, 219 insertions(+), 218 deletions(-) diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index d1bdcc31bb..cc502e607d 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -4451,7 +4451,7 @@ if i32.const 0 i32.const 1152 - i32.const 18 + i32.const 19 i32.const 3 call $~lib/builtins/abort unreachable @@ -4466,7 +4466,7 @@ if i32.const 0 i32.const 1152 - i32.const 20 + i32.const 21 i32.const 3 call $~lib/builtins/abort unreachable @@ -4483,7 +4483,7 @@ if i32.const 0 i32.const 1152 - i32.const 28 + i32.const 29 i32.const 3 call $~lib/builtins/abort unreachable @@ -4495,7 +4495,7 @@ if i32.const 0 i32.const 1152 - i32.const 29 + i32.const 30 i32.const 3 call $~lib/builtins/abort unreachable @@ -4507,7 +4507,7 @@ if i32.const 0 i32.const 1152 - i32.const 30 + i32.const 31 i32.const 3 call $~lib/builtins/abort unreachable @@ -4519,7 +4519,7 @@ if i32.const 0 i32.const 1152 - i32.const 31 + i32.const 32 i32.const 3 call $~lib/builtins/abort unreachable @@ -4531,7 +4531,7 @@ if i32.const 0 i32.const 1152 - i32.const 32 + i32.const 33 i32.const 3 call $~lib/builtins/abort unreachable @@ -4543,7 +4543,7 @@ if i32.const 0 i32.const 1152 - i32.const 33 + i32.const 34 i32.const 3 call $~lib/builtins/abort unreachable @@ -4555,7 +4555,7 @@ if i32.const 0 i32.const 1152 - i32.const 34 + i32.const 35 i32.const 3 call $~lib/builtins/abort unreachable @@ -4572,7 +4572,7 @@ if i32.const 0 i32.const 1152 - i32.const 40 + i32.const 41 i32.const 3 call $~lib/builtins/abort unreachable @@ -4584,7 +4584,7 @@ if i32.const 0 i32.const 1152 - i32.const 41 + i32.const 42 i32.const 3 call $~lib/builtins/abort unreachable @@ -4596,7 +4596,7 @@ if i32.const 0 i32.const 1152 - i32.const 42 + i32.const 43 i32.const 3 call $~lib/builtins/abort unreachable @@ -4608,7 +4608,7 @@ if i32.const 0 i32.const 1152 - i32.const 43 + i32.const 44 i32.const 3 call $~lib/builtins/abort unreachable @@ -4620,7 +4620,7 @@ if i32.const 0 i32.const 1152 - i32.const 44 + i32.const 45 i32.const 3 call $~lib/builtins/abort unreachable @@ -4632,7 +4632,7 @@ if i32.const 0 i32.const 1152 - i32.const 45 + i32.const 46 i32.const 3 call $~lib/builtins/abort unreachable @@ -4644,7 +4644,7 @@ if i32.const 0 i32.const 1152 - i32.const 46 + i32.const 47 i32.const 3 call $~lib/builtins/abort unreachable @@ -4661,7 +4661,7 @@ if i32.const 0 i32.const 1152 - i32.const 52 + i32.const 53 i32.const 3 call $~lib/builtins/abort unreachable @@ -4676,7 +4676,7 @@ if i32.const 0 i32.const 1152 - i32.const 54 + i32.const 55 i32.const 3 call $~lib/builtins/abort unreachable @@ -4691,7 +4691,7 @@ if i32.const 0 i32.const 1152 - i32.const 56 + i32.const 57 i32.const 3 call $~lib/builtins/abort unreachable @@ -4706,7 +4706,7 @@ if i32.const 0 i32.const 1152 - i32.const 59 + i32.const 60 i32.const 3 call $~lib/builtins/abort unreachable @@ -4721,7 +4721,7 @@ if i32.const 0 i32.const 1152 - i32.const 61 + i32.const 62 i32.const 3 call $~lib/builtins/abort unreachable @@ -4734,7 +4734,7 @@ if i32.const 0 i32.const 1152 - i32.const 64 + i32.const 65 i32.const 3 call $~lib/builtins/abort unreachable @@ -4746,7 +4746,7 @@ if i32.const 0 i32.const 1152 - i32.const 65 + i32.const 66 i32.const 3 call $~lib/builtins/abort unreachable @@ -4759,7 +4759,7 @@ if i32.const 0 i32.const 1152 - i32.const 67 + i32.const 68 i32.const 3 call $~lib/builtins/abort unreachable @@ -4771,7 +4771,7 @@ if i32.const 0 i32.const 1152 - i32.const 68 + i32.const 69 i32.const 3 call $~lib/builtins/abort unreachable @@ -4788,7 +4788,7 @@ if i32.const 0 i32.const 1152 - i32.const 74 + i32.const 75 i32.const 3 call $~lib/builtins/abort unreachable @@ -4803,7 +4803,7 @@ if i32.const 0 i32.const 1152 - i32.const 76 + i32.const 77 i32.const 3 call $~lib/builtins/abort unreachable @@ -4818,7 +4818,7 @@ if i32.const 0 i32.const 1152 - i32.const 78 + i32.const 79 i32.const 3 call $~lib/builtins/abort unreachable @@ -4833,7 +4833,7 @@ if i32.const 0 i32.const 1152 - i32.const 81 + i32.const 82 i32.const 3 call $~lib/builtins/abort unreachable @@ -4848,7 +4848,7 @@ if i32.const 0 i32.const 1152 - i32.const 83 + i32.const 84 i32.const 3 call $~lib/builtins/abort unreachable @@ -4865,7 +4865,7 @@ if i32.const 0 i32.const 1152 - i32.const 89 + i32.const 90 i32.const 3 call $~lib/builtins/abort unreachable @@ -4880,7 +4880,7 @@ if i32.const 0 i32.const 1152 - i32.const 91 + i32.const 92 i32.const 3 call $~lib/builtins/abort unreachable @@ -4895,7 +4895,7 @@ if i32.const 0 i32.const 1152 - i32.const 93 + i32.const 94 i32.const 3 call $~lib/builtins/abort unreachable @@ -4910,7 +4910,7 @@ if i32.const 0 i32.const 1152 - i32.const 96 + i32.const 97 i32.const 3 call $~lib/builtins/abort unreachable @@ -4925,7 +4925,7 @@ if i32.const 0 i32.const 1152 - i32.const 98 + i32.const 99 i32.const 3 call $~lib/builtins/abort unreachable @@ -4942,7 +4942,7 @@ if i32.const 0 i32.const 1152 - i32.const 104 + i32.const 105 i32.const 3 call $~lib/builtins/abort unreachable @@ -4957,7 +4957,7 @@ if i32.const 0 i32.const 1152 - i32.const 106 + i32.const 107 i32.const 3 call $~lib/builtins/abort unreachable @@ -4972,7 +4972,7 @@ if i32.const 0 i32.const 1152 - i32.const 108 + i32.const 109 i32.const 3 call $~lib/builtins/abort unreachable @@ -4987,7 +4987,7 @@ if i32.const 0 i32.const 1152 - i32.const 111 + i32.const 112 i32.const 3 call $~lib/builtins/abort unreachable @@ -5002,7 +5002,7 @@ if i32.const 0 i32.const 1152 - i32.const 113 + i32.const 114 i32.const 3 call $~lib/builtins/abort unreachable @@ -5019,7 +5019,7 @@ if i32.const 0 i32.const 1152 - i32.const 119 + i32.const 120 i32.const 3 call $~lib/builtins/abort unreachable @@ -5031,7 +5031,7 @@ if i32.const 0 i32.const 1152 - i32.const 120 + i32.const 121 i32.const 3 call $~lib/builtins/abort unreachable @@ -5046,7 +5046,7 @@ if i32.const 0 i32.const 1152 - i32.const 124 + i32.const 125 i32.const 3 call $~lib/builtins/abort unreachable @@ -5061,7 +5061,7 @@ if i32.const 0 i32.const 1152 - i32.const 126 + i32.const 127 i32.const 3 call $~lib/builtins/abort unreachable @@ -5100,7 +5100,7 @@ if i32.const 0 i32.const 1152 - i32.const 144 + i32.const 145 i32.const 3 call $~lib/builtins/abort unreachable @@ -5112,7 +5112,7 @@ if i32.const 0 i32.const 1152 - i32.const 145 + i32.const 146 i32.const 3 call $~lib/builtins/abort unreachable @@ -5124,7 +5124,7 @@ if i32.const 0 i32.const 1152 - i32.const 146 + i32.const 147 i32.const 3 call $~lib/builtins/abort unreachable @@ -5136,7 +5136,7 @@ if i32.const 0 i32.const 1152 - i32.const 147 + i32.const 148 i32.const 3 call $~lib/builtins/abort unreachable @@ -5148,7 +5148,7 @@ if i32.const 0 i32.const 1152 - i32.const 148 + i32.const 149 i32.const 3 call $~lib/builtins/abort unreachable @@ -5168,7 +5168,7 @@ if i32.const 0 i32.const 1152 - i32.const 152 + i32.const 153 i32.const 3 call $~lib/builtins/abort unreachable @@ -5183,7 +5183,7 @@ if i32.const 0 i32.const 1152 - i32.const 154 + i32.const 155 i32.const 3 call $~lib/builtins/abort unreachable @@ -5198,7 +5198,7 @@ if i32.const 0 i32.const 1152 - i32.const 157 + i32.const 158 i32.const 3 call $~lib/builtins/abort unreachable @@ -5213,7 +5213,7 @@ if i32.const 0 i32.const 1152 - i32.const 160 + i32.const 161 i32.const 3 call $~lib/builtins/abort unreachable @@ -5228,7 +5228,7 @@ if i32.const 0 i32.const 1152 - i32.const 163 + i32.const 164 i32.const 3 call $~lib/builtins/abort unreachable @@ -5243,7 +5243,7 @@ if i32.const 0 i32.const 1152 - i32.const 166 + i32.const 167 i32.const 3 call $~lib/builtins/abort unreachable @@ -5263,7 +5263,7 @@ if i32.const 0 i32.const 1152 - i32.const 170 + i32.const 171 i32.const 3 call $~lib/builtins/abort unreachable @@ -5283,7 +5283,7 @@ if i32.const 0 i32.const 1152 - i32.const 174 + i32.const 175 i32.const 3 call $~lib/builtins/abort unreachable @@ -5300,7 +5300,7 @@ if i32.const 0 i32.const 1152 - i32.const 180 + i32.const 181 i32.const 3 call $~lib/builtins/abort unreachable @@ -5315,7 +5315,7 @@ if i32.const 0 i32.const 1152 - i32.const 182 + i32.const 183 i32.const 3 call $~lib/builtins/abort unreachable @@ -5330,7 +5330,7 @@ if i32.const 0 i32.const 1152 - i32.const 184 + i32.const 185 i32.const 3 call $~lib/builtins/abort unreachable @@ -5342,7 +5342,7 @@ if i32.const 0 i32.const 1152 - i32.const 185 + i32.const 186 i32.const 3 call $~lib/builtins/abort unreachable @@ -5360,7 +5360,7 @@ if i32.const 0 i32.const 1152 - i32.const 189 + i32.const 190 i32.const 3 call $~lib/builtins/abort unreachable @@ -5375,7 +5375,7 @@ if i32.const 0 i32.const 1152 - i32.const 193 + i32.const 194 i32.const 3 call $~lib/builtins/abort unreachable @@ -5390,7 +5390,7 @@ if i32.const 0 i32.const 1152 - i32.const 195 + i32.const 196 i32.const 3 call $~lib/builtins/abort unreachable @@ -5407,7 +5407,7 @@ if i32.const 0 i32.const 1152 - i32.const 201 + i32.const 202 i32.const 3 call $~lib/builtins/abort unreachable @@ -5422,7 +5422,7 @@ if i32.const 0 i32.const 1152 - i32.const 203 + i32.const 204 i32.const 3 call $~lib/builtins/abort unreachable @@ -5437,7 +5437,7 @@ if i32.const 0 i32.const 1152 - i32.const 205 + i32.const 206 i32.const 3 call $~lib/builtins/abort unreachable @@ -5452,7 +5452,7 @@ if i32.const 0 i32.const 1152 - i32.const 207 + i32.const 208 i32.const 3 call $~lib/builtins/abort unreachable @@ -5478,7 +5478,7 @@ if i32.const 0 i32.const 1152 - i32.const 213 + i32.const 214 i32.const 3 call $~lib/builtins/abort unreachable @@ -5504,7 +5504,7 @@ if i32.const 0 i32.const 1152 - i32.const 215 + i32.const 216 i32.const 3 call $~lib/builtins/abort unreachable @@ -5530,7 +5530,7 @@ if i32.const 0 i32.const 1152 - i32.const 217 + i32.const 218 i32.const 3 call $~lib/builtins/abort unreachable @@ -5556,7 +5556,7 @@ if i32.const 0 i32.const 1152 - i32.const 219 + i32.const 220 i32.const 3 call $~lib/builtins/abort unreachable @@ -5582,7 +5582,7 @@ if i32.const 0 i32.const 1152 - i32.const 221 + i32.const 222 i32.const 3 call $~lib/builtins/abort unreachable @@ -5608,7 +5608,7 @@ if i32.const 0 i32.const 1152 - i32.const 223 + i32.const 224 i32.const 3 call $~lib/builtins/abort unreachable @@ -5634,7 +5634,7 @@ if i32.const 0 i32.const 1152 - i32.const 225 + i32.const 226 i32.const 3 call $~lib/builtins/abort unreachable @@ -5660,7 +5660,7 @@ if i32.const 0 i32.const 1152 - i32.const 227 + i32.const 228 i32.const 3 call $~lib/builtins/abort unreachable @@ -5686,7 +5686,7 @@ if i32.const 0 i32.const 1152 - i32.const 229 + i32.const 230 i32.const 3 call $~lib/builtins/abort unreachable @@ -5706,7 +5706,7 @@ if i32.const 0 i32.const 1152 - i32.const 236 + i32.const 237 i32.const 3 call $~lib/builtins/abort unreachable @@ -5726,7 +5726,7 @@ if i32.const 0 i32.const 1152 - i32.const 238 + i32.const 239 i32.const 3 call $~lib/builtins/abort unreachable @@ -5746,7 +5746,7 @@ if i32.const 0 i32.const 1152 - i32.const 240 + i32.const 241 i32.const 3 call $~lib/builtins/abort unreachable @@ -5766,7 +5766,7 @@ if i32.const 0 i32.const 1152 - i32.const 244 + i32.const 245 i32.const 3 call $~lib/builtins/abort unreachable @@ -5786,7 +5786,7 @@ if i32.const 0 i32.const 1152 - i32.const 248 + i32.const 249 i32.const 3 call $~lib/builtins/abort unreachable @@ -5806,7 +5806,7 @@ if i32.const 0 i32.const 1152 - i32.const 252 + i32.const 253 i32.const 3 call $~lib/builtins/abort unreachable @@ -5826,7 +5826,7 @@ if i32.const 0 i32.const 1152 - i32.const 255 + i32.const 256 i32.const 3 call $~lib/builtins/abort unreachable @@ -5846,7 +5846,7 @@ if i32.const 0 i32.const 1152 - i32.const 258 + i32.const 259 i32.const 3 call $~lib/builtins/abort unreachable @@ -5866,7 +5866,7 @@ if i32.const 0 i32.const 1152 - i32.const 261 + i32.const 262 i32.const 3 call $~lib/builtins/abort unreachable @@ -5886,7 +5886,7 @@ if i32.const 0 i32.const 1152 - i32.const 264 + i32.const 265 i32.const 3 call $~lib/builtins/abort unreachable @@ -5906,7 +5906,7 @@ if i32.const 0 i32.const 1152 - i32.const 267 + i32.const 268 i32.const 3 call $~lib/builtins/abort unreachable @@ -5926,7 +5926,7 @@ if i32.const 0 i32.const 1152 - i32.const 270 + i32.const 271 i32.const 3 call $~lib/builtins/abort unreachable @@ -5946,7 +5946,7 @@ if i32.const 0 i32.const 1152 - i32.const 273 + i32.const 274 i32.const 3 call $~lib/builtins/abort unreachable @@ -5968,7 +5968,7 @@ if i32.const 0 i32.const 1152 - i32.const 291 + i32.const 292 i32.const 3 call $~lib/builtins/abort unreachable @@ -5980,7 +5980,7 @@ if i32.const 0 i32.const 1152 - i32.const 292 + i32.const 293 i32.const 3 call $~lib/builtins/abort unreachable @@ -5992,7 +5992,7 @@ if i32.const 0 i32.const 1152 - i32.const 294 + i32.const 295 i32.const 3 call $~lib/builtins/abort unreachable @@ -6004,7 +6004,7 @@ if i32.const 0 i32.const 1152 - i32.const 295 + i32.const 296 i32.const 3 call $~lib/builtins/abort unreachable @@ -6016,7 +6016,7 @@ if i32.const 0 i32.const 1152 - i32.const 297 + i32.const 298 i32.const 3 call $~lib/builtins/abort unreachable @@ -6028,7 +6028,7 @@ if i32.const 0 i32.const 1152 - i32.const 298 + i32.const 299 i32.const 3 call $~lib/builtins/abort unreachable @@ -6040,7 +6040,7 @@ if i32.const 0 i32.const 1152 - i32.const 300 + i32.const 301 i32.const 3 call $~lib/builtins/abort unreachable @@ -6052,7 +6052,7 @@ if i32.const 0 i32.const 1152 - i32.const 301 + i32.const 302 i32.const 3 call $~lib/builtins/abort unreachable @@ -6073,7 +6073,7 @@ if i32.const 0 i32.const 1152 - i32.const 303 + i32.const 304 i32.const 3 call $~lib/builtins/abort unreachable @@ -6094,7 +6094,7 @@ if i32.const 0 i32.const 1152 - i32.const 304 + i32.const 305 i32.const 3 call $~lib/builtins/abort unreachable @@ -6116,7 +6116,7 @@ if i32.const 0 i32.const 1152 - i32.const 309 + i32.const 310 i32.const 3 call $~lib/builtins/abort unreachable @@ -6128,7 +6128,7 @@ if i32.const 0 i32.const 1152 - i32.const 310 + i32.const 311 i32.const 3 call $~lib/builtins/abort unreachable @@ -6140,7 +6140,7 @@ if i32.const 0 i32.const 1152 - i32.const 311 + i32.const 312 i32.const 3 call $~lib/builtins/abort unreachable @@ -6150,7 +6150,7 @@ if i32.const 0 i32.const 1152 - i32.const 312 + i32.const 313 i32.const 3 call $~lib/builtins/abort unreachable @@ -6160,7 +6160,7 @@ if i32.const 0 i32.const 1152 - i32.const 313 + i32.const 314 i32.const 3 call $~lib/builtins/abort unreachable @@ -6170,7 +6170,7 @@ if i32.const 0 i32.const 1152 - i32.const 314 + i32.const 315 i32.const 3 call $~lib/builtins/abort unreachable @@ -6182,7 +6182,7 @@ if i32.const 0 i32.const 1152 - i32.const 315 + i32.const 316 i32.const 3 call $~lib/builtins/abort unreachable @@ -6203,7 +6203,7 @@ if i32.const 0 i32.const 1152 - i32.const 317 + i32.const 318 i32.const 3 call $~lib/builtins/abort unreachable @@ -6224,7 +6224,7 @@ if i32.const 0 i32.const 1152 - i32.const 318 + i32.const 319 i32.const 3 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index ed0dea9fbe..ee44535431 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -7,6 +7,7 @@ assert(Date.UTC(-90) == -65007360000000); assert(Date.UTC(2018, 10, 10, 11, 0, 0, 1) == 1541847600001); assert(Date.UTC(275760, 8, 13, 0, 0, 0, 0) == 8640000000000000); + // Date.UTC(275760, 8, 13, 0, 0, 0, 1); // Invalid Date } diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index da125db2b6..68025b8d8c 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -7320,7 +7320,7 @@ if i32.const 0 i32.const 128 - i32.const 18 + i32.const 19 i32.const 3 call $~lib/builtins/abort unreachable @@ -7341,7 +7341,7 @@ if i32.const 0 i32.const 128 - i32.const 20 + i32.const 21 i32.const 3 call $~lib/builtins/abort unreachable @@ -7360,7 +7360,7 @@ if i32.const 0 i32.const 128 - i32.const 28 + i32.const 29 i32.const 3 call $~lib/builtins/abort unreachable @@ -7373,7 +7373,7 @@ if i32.const 0 i32.const 128 - i32.const 29 + i32.const 30 i32.const 3 call $~lib/builtins/abort unreachable @@ -7386,7 +7386,7 @@ if i32.const 0 i32.const 128 - i32.const 30 + i32.const 31 i32.const 3 call $~lib/builtins/abort unreachable @@ -7399,7 +7399,7 @@ if i32.const 0 i32.const 128 - i32.const 31 + i32.const 32 i32.const 3 call $~lib/builtins/abort unreachable @@ -7412,7 +7412,7 @@ if i32.const 0 i32.const 128 - i32.const 32 + i32.const 33 i32.const 3 call $~lib/builtins/abort unreachable @@ -7425,7 +7425,7 @@ if i32.const 0 i32.const 128 - i32.const 33 + i32.const 34 i32.const 3 call $~lib/builtins/abort unreachable @@ -7438,7 +7438,7 @@ if i32.const 0 i32.const 128 - i32.const 34 + i32.const 35 i32.const 3 call $~lib/builtins/abort unreachable @@ -7457,7 +7457,7 @@ if i32.const 0 i32.const 128 - i32.const 40 + i32.const 41 i32.const 3 call $~lib/builtins/abort unreachable @@ -7470,7 +7470,7 @@ if i32.const 0 i32.const 128 - i32.const 41 + i32.const 42 i32.const 3 call $~lib/builtins/abort unreachable @@ -7483,7 +7483,7 @@ if i32.const 0 i32.const 128 - i32.const 42 + i32.const 43 i32.const 3 call $~lib/builtins/abort unreachable @@ -7496,7 +7496,7 @@ if i32.const 0 i32.const 128 - i32.const 43 + i32.const 44 i32.const 3 call $~lib/builtins/abort unreachable @@ -7509,7 +7509,7 @@ if i32.const 0 i32.const 128 - i32.const 44 + i32.const 45 i32.const 3 call $~lib/builtins/abort unreachable @@ -7522,7 +7522,7 @@ if i32.const 0 i32.const 128 - i32.const 45 + i32.const 46 i32.const 3 call $~lib/builtins/abort unreachable @@ -7535,7 +7535,7 @@ if i32.const 0 i32.const 128 - i32.const 46 + i32.const 47 i32.const 3 call $~lib/builtins/abort unreachable @@ -7554,7 +7554,7 @@ if i32.const 0 i32.const 128 - i32.const 52 + i32.const 53 i32.const 3 call $~lib/builtins/abort unreachable @@ -7570,7 +7570,7 @@ if i32.const 0 i32.const 128 - i32.const 54 + i32.const 55 i32.const 3 call $~lib/builtins/abort unreachable @@ -7586,7 +7586,7 @@ if i32.const 0 i32.const 128 - i32.const 56 + i32.const 57 i32.const 3 call $~lib/builtins/abort unreachable @@ -7602,7 +7602,7 @@ if i32.const 0 i32.const 128 - i32.const 59 + i32.const 60 i32.const 3 call $~lib/builtins/abort unreachable @@ -7618,7 +7618,7 @@ if i32.const 0 i32.const 128 - i32.const 61 + i32.const 62 i32.const 3 call $~lib/builtins/abort unreachable @@ -7634,7 +7634,7 @@ if i32.const 0 i32.const 128 - i32.const 64 + i32.const 65 i32.const 3 call $~lib/builtins/abort unreachable @@ -7647,7 +7647,7 @@ if i32.const 0 i32.const 128 - i32.const 65 + i32.const 66 i32.const 3 call $~lib/builtins/abort unreachable @@ -7663,7 +7663,7 @@ if i32.const 0 i32.const 128 - i32.const 67 + i32.const 68 i32.const 3 call $~lib/builtins/abort unreachable @@ -7676,7 +7676,7 @@ if i32.const 0 i32.const 128 - i32.const 68 + i32.const 69 i32.const 3 call $~lib/builtins/abort unreachable @@ -7695,7 +7695,7 @@ if i32.const 0 i32.const 128 - i32.const 74 + i32.const 75 i32.const 3 call $~lib/builtins/abort unreachable @@ -7711,7 +7711,7 @@ if i32.const 0 i32.const 128 - i32.const 76 + i32.const 77 i32.const 3 call $~lib/builtins/abort unreachable @@ -7727,7 +7727,7 @@ if i32.const 0 i32.const 128 - i32.const 78 + i32.const 79 i32.const 3 call $~lib/builtins/abort unreachable @@ -7743,7 +7743,7 @@ if i32.const 0 i32.const 128 - i32.const 81 + i32.const 82 i32.const 3 call $~lib/builtins/abort unreachable @@ -7759,7 +7759,7 @@ if i32.const 0 i32.const 128 - i32.const 83 + i32.const 84 i32.const 3 call $~lib/builtins/abort unreachable @@ -7778,7 +7778,7 @@ if i32.const 0 i32.const 128 - i32.const 89 + i32.const 90 i32.const 3 call $~lib/builtins/abort unreachable @@ -7794,7 +7794,7 @@ if i32.const 0 i32.const 128 - i32.const 91 + i32.const 92 i32.const 3 call $~lib/builtins/abort unreachable @@ -7810,7 +7810,7 @@ if i32.const 0 i32.const 128 - i32.const 93 + i32.const 94 i32.const 3 call $~lib/builtins/abort unreachable @@ -7826,7 +7826,7 @@ if i32.const 0 i32.const 128 - i32.const 96 + i32.const 97 i32.const 3 call $~lib/builtins/abort unreachable @@ -7842,7 +7842,7 @@ if i32.const 0 i32.const 128 - i32.const 98 + i32.const 99 i32.const 3 call $~lib/builtins/abort unreachable @@ -7861,7 +7861,7 @@ if i32.const 0 i32.const 128 - i32.const 104 + i32.const 105 i32.const 3 call $~lib/builtins/abort unreachable @@ -7877,7 +7877,7 @@ if i32.const 0 i32.const 128 - i32.const 106 + i32.const 107 i32.const 3 call $~lib/builtins/abort unreachable @@ -7893,7 +7893,7 @@ if i32.const 0 i32.const 128 - i32.const 108 + i32.const 109 i32.const 3 call $~lib/builtins/abort unreachable @@ -7909,7 +7909,7 @@ if i32.const 0 i32.const 128 - i32.const 111 + i32.const 112 i32.const 3 call $~lib/builtins/abort unreachable @@ -7925,7 +7925,7 @@ if i32.const 0 i32.const 128 - i32.const 113 + i32.const 114 i32.const 3 call $~lib/builtins/abort unreachable @@ -7944,7 +7944,7 @@ if i32.const 0 i32.const 128 - i32.const 119 + i32.const 120 i32.const 3 call $~lib/builtins/abort unreachable @@ -7957,7 +7957,7 @@ if i32.const 0 i32.const 128 - i32.const 120 + i32.const 121 i32.const 3 call $~lib/builtins/abort unreachable @@ -7973,7 +7973,7 @@ if i32.const 0 i32.const 128 - i32.const 124 + i32.const 125 i32.const 3 call $~lib/builtins/abort unreachable @@ -7989,7 +7989,7 @@ if i32.const 0 i32.const 128 - i32.const 126 + i32.const 127 i32.const 3 call $~lib/builtins/abort unreachable @@ -8029,7 +8029,7 @@ if i32.const 0 i32.const 128 - i32.const 144 + i32.const 145 i32.const 3 call $~lib/builtins/abort unreachable @@ -8042,7 +8042,7 @@ if i32.const 0 i32.const 128 - i32.const 145 + i32.const 146 i32.const 3 call $~lib/builtins/abort unreachable @@ -8055,7 +8055,7 @@ if i32.const 0 i32.const 128 - i32.const 146 + i32.const 147 i32.const 3 call $~lib/builtins/abort unreachable @@ -8068,7 +8068,7 @@ if i32.const 0 i32.const 128 - i32.const 147 + i32.const 148 i32.const 3 call $~lib/builtins/abort unreachable @@ -8081,7 +8081,7 @@ if i32.const 0 i32.const 128 - i32.const 148 + i32.const 149 i32.const 3 call $~lib/builtins/abort unreachable @@ -8103,7 +8103,7 @@ if i32.const 0 i32.const 128 - i32.const 152 + i32.const 153 i32.const 3 call $~lib/builtins/abort unreachable @@ -8119,7 +8119,7 @@ if i32.const 0 i32.const 128 - i32.const 154 + i32.const 155 i32.const 3 call $~lib/builtins/abort unreachable @@ -8135,7 +8135,7 @@ if i32.const 0 i32.const 128 - i32.const 157 + i32.const 158 i32.const 3 call $~lib/builtins/abort unreachable @@ -8155,7 +8155,7 @@ if i32.const 0 i32.const 128 - i32.const 160 + i32.const 161 i32.const 3 call $~lib/builtins/abort unreachable @@ -8177,7 +8177,7 @@ if i32.const 0 i32.const 128 - i32.const 163 + i32.const 164 i32.const 3 call $~lib/builtins/abort unreachable @@ -8199,7 +8199,7 @@ if i32.const 0 i32.const 128 - i32.const 166 + i32.const 167 i32.const 3 call $~lib/builtins/abort unreachable @@ -8221,7 +8221,7 @@ if i32.const 0 i32.const 128 - i32.const 170 + i32.const 171 i32.const 3 call $~lib/builtins/abort unreachable @@ -8243,7 +8243,7 @@ if i32.const 0 i32.const 128 - i32.const 174 + i32.const 175 i32.const 3 call $~lib/builtins/abort unreachable @@ -8262,7 +8262,7 @@ if i32.const 0 i32.const 128 - i32.const 180 + i32.const 181 i32.const 3 call $~lib/builtins/abort unreachable @@ -8278,7 +8278,7 @@ if i32.const 0 i32.const 128 - i32.const 182 + i32.const 183 i32.const 3 call $~lib/builtins/abort unreachable @@ -8294,7 +8294,7 @@ if i32.const 0 i32.const 128 - i32.const 184 + i32.const 185 i32.const 3 call $~lib/builtins/abort unreachable @@ -8307,7 +8307,7 @@ if i32.const 0 i32.const 128 - i32.const 185 + i32.const 186 i32.const 3 call $~lib/builtins/abort unreachable @@ -8326,7 +8326,7 @@ if i32.const 0 i32.const 128 - i32.const 189 + i32.const 190 i32.const 3 call $~lib/builtins/abort unreachable @@ -8342,7 +8342,7 @@ if i32.const 0 i32.const 128 - i32.const 193 + i32.const 194 i32.const 3 call $~lib/builtins/abort unreachable @@ -8358,7 +8358,7 @@ if i32.const 0 i32.const 128 - i32.const 195 + i32.const 196 i32.const 3 call $~lib/builtins/abort unreachable @@ -8377,7 +8377,7 @@ if i32.const 0 i32.const 128 - i32.const 201 + i32.const 202 i32.const 3 call $~lib/builtins/abort unreachable @@ -8393,7 +8393,7 @@ if i32.const 0 i32.const 128 - i32.const 203 + i32.const 204 i32.const 3 call $~lib/builtins/abort unreachable @@ -8409,7 +8409,7 @@ if i32.const 0 i32.const 128 - i32.const 205 + i32.const 206 i32.const 3 call $~lib/builtins/abort unreachable @@ -8425,7 +8425,7 @@ if i32.const 0 i32.const 128 - i32.const 207 + i32.const 208 i32.const 3 call $~lib/builtins/abort unreachable @@ -8454,7 +8454,7 @@ if i32.const 0 i32.const 128 - i32.const 213 + i32.const 214 i32.const 3 call $~lib/builtins/abort unreachable @@ -8485,7 +8485,7 @@ if i32.const 0 i32.const 128 - i32.const 215 + i32.const 216 i32.const 3 call $~lib/builtins/abort unreachable @@ -8514,7 +8514,7 @@ if i32.const 0 i32.const 128 - i32.const 217 + i32.const 218 i32.const 3 call $~lib/builtins/abort unreachable @@ -8543,7 +8543,7 @@ if i32.const 0 i32.const 128 - i32.const 219 + i32.const 220 i32.const 3 call $~lib/builtins/abort unreachable @@ -8572,7 +8572,7 @@ if i32.const 0 i32.const 128 - i32.const 221 + i32.const 222 i32.const 3 call $~lib/builtins/abort unreachable @@ -8601,7 +8601,7 @@ if i32.const 0 i32.const 128 - i32.const 223 + i32.const 224 i32.const 3 call $~lib/builtins/abort unreachable @@ -8630,7 +8630,7 @@ if i32.const 0 i32.const 128 - i32.const 225 + i32.const 226 i32.const 3 call $~lib/builtins/abort unreachable @@ -8659,7 +8659,7 @@ if i32.const 0 i32.const 128 - i32.const 227 + i32.const 228 i32.const 3 call $~lib/builtins/abort unreachable @@ -8688,7 +8688,7 @@ if i32.const 0 i32.const 128 - i32.const 229 + i32.const 230 i32.const 3 call $~lib/builtins/abort unreachable @@ -8711,7 +8711,7 @@ if i32.const 0 i32.const 128 - i32.const 236 + i32.const 237 i32.const 3 call $~lib/builtins/abort unreachable @@ -8734,7 +8734,7 @@ if i32.const 0 i32.const 128 - i32.const 238 + i32.const 239 i32.const 3 call $~lib/builtins/abort unreachable @@ -8757,7 +8757,7 @@ if i32.const 0 i32.const 128 - i32.const 240 + i32.const 241 i32.const 3 call $~lib/builtins/abort unreachable @@ -8780,7 +8780,7 @@ if i32.const 0 i32.const 128 - i32.const 244 + i32.const 245 i32.const 3 call $~lib/builtins/abort unreachable @@ -8803,7 +8803,7 @@ if i32.const 0 i32.const 128 - i32.const 248 + i32.const 249 i32.const 3 call $~lib/builtins/abort unreachable @@ -8826,7 +8826,7 @@ if i32.const 0 i32.const 128 - i32.const 252 + i32.const 253 i32.const 3 call $~lib/builtins/abort unreachable @@ -8849,7 +8849,7 @@ if i32.const 0 i32.const 128 - i32.const 255 + i32.const 256 i32.const 3 call $~lib/builtins/abort unreachable @@ -8872,7 +8872,7 @@ if i32.const 0 i32.const 128 - i32.const 258 + i32.const 259 i32.const 3 call $~lib/builtins/abort unreachable @@ -8895,7 +8895,7 @@ if i32.const 0 i32.const 128 - i32.const 261 + i32.const 262 i32.const 3 call $~lib/builtins/abort unreachable @@ -8918,7 +8918,7 @@ if i32.const 0 i32.const 128 - i32.const 264 + i32.const 265 i32.const 3 call $~lib/builtins/abort unreachable @@ -8941,7 +8941,7 @@ if i32.const 0 i32.const 128 - i32.const 267 + i32.const 268 i32.const 3 call $~lib/builtins/abort unreachable @@ -8964,7 +8964,7 @@ if i32.const 0 i32.const 128 - i32.const 270 + i32.const 271 i32.const 3 call $~lib/builtins/abort unreachable @@ -8987,7 +8987,7 @@ if i32.const 0 i32.const 128 - i32.const 273 + i32.const 274 i32.const 3 call $~lib/builtins/abort unreachable @@ -9012,7 +9012,7 @@ if i32.const 0 i32.const 128 - i32.const 291 + i32.const 292 i32.const 3 call $~lib/builtins/abort unreachable @@ -9025,7 +9025,7 @@ if i32.const 0 i32.const 128 - i32.const 292 + i32.const 293 i32.const 3 call $~lib/builtins/abort unreachable @@ -9038,7 +9038,7 @@ if i32.const 0 i32.const 128 - i32.const 294 + i32.const 295 i32.const 3 call $~lib/builtins/abort unreachable @@ -9051,7 +9051,7 @@ if i32.const 0 i32.const 128 - i32.const 295 + i32.const 296 i32.const 3 call $~lib/builtins/abort unreachable @@ -9064,7 +9064,7 @@ if i32.const 0 i32.const 128 - i32.const 297 + i32.const 298 i32.const 3 call $~lib/builtins/abort unreachable @@ -9077,7 +9077,7 @@ if i32.const 0 i32.const 128 - i32.const 298 + i32.const 299 i32.const 3 call $~lib/builtins/abort unreachable @@ -9090,7 +9090,7 @@ if i32.const 0 i32.const 128 - i32.const 300 + i32.const 301 i32.const 3 call $~lib/builtins/abort unreachable @@ -9103,7 +9103,7 @@ if i32.const 0 i32.const 128 - i32.const 301 + i32.const 302 i32.const 3 call $~lib/builtins/abort unreachable @@ -9126,7 +9126,7 @@ if i32.const 0 i32.const 128 - i32.const 303 + i32.const 304 i32.const 3 call $~lib/builtins/abort unreachable @@ -9149,7 +9149,7 @@ if i32.const 0 i32.const 128 - i32.const 304 + i32.const 305 i32.const 3 call $~lib/builtins/abort unreachable @@ -9178,7 +9178,7 @@ if i32.const 0 i32.const 128 - i32.const 309 + i32.const 310 i32.const 3 call $~lib/builtins/abort unreachable @@ -9191,7 +9191,7 @@ if i32.const 0 i32.const 128 - i32.const 310 + i32.const 311 i32.const 3 call $~lib/builtins/abort unreachable @@ -9204,7 +9204,7 @@ if i32.const 0 i32.const 128 - i32.const 311 + i32.const 312 i32.const 3 call $~lib/builtins/abort unreachable @@ -9217,7 +9217,7 @@ if i32.const 0 i32.const 128 - i32.const 312 + i32.const 313 i32.const 3 call $~lib/builtins/abort unreachable @@ -9230,7 +9230,7 @@ if i32.const 0 i32.const 128 - i32.const 313 + i32.const 314 i32.const 3 call $~lib/builtins/abort unreachable @@ -9243,7 +9243,7 @@ if i32.const 0 i32.const 128 - i32.const 314 + i32.const 315 i32.const 3 call $~lib/builtins/abort unreachable @@ -9256,7 +9256,7 @@ if i32.const 0 i32.const 128 - i32.const 315 + i32.const 316 i32.const 3 call $~lib/builtins/abort unreachable @@ -9279,7 +9279,7 @@ if i32.const 0 i32.const 128 - i32.const 317 + i32.const 318 i32.const 3 call $~lib/builtins/abort unreachable @@ -9302,7 +9302,7 @@ if i32.const 0 i32.const 128 - i32.const 318 + i32.const 319 i32.const 3 call $~lib/builtins/abort unreachable From 74a225c614976dcbdf710377d8f67b23385eb3d8 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Sat, 24 Apr 2021 09:13:45 +0300 Subject: [PATCH 40/47] works? --- .github/workflows/test.yml | 2 +- tests/compiler/std/date.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 44bbf8126f..f457ad32ab 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -130,7 +130,7 @@ jobs: - uses: dcodeIO/setup-node-nvm@master with: node-mirror: https://nodejs.org/download/v8-canary/ - node-version: "node" + node-version: 17 - name: Install dependencies run: npm ci --no-audit - name: Clean distribution files diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index ee44535431..ed0dea9fbe 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -7,7 +7,6 @@ assert(Date.UTC(-90) == -65007360000000); assert(Date.UTC(2018, 10, 10, 11, 0, 0, 1) == 1541847600001); assert(Date.UTC(275760, 8, 13, 0, 0, 0, 0) == 8640000000000000); - // Date.UTC(275760, 8, 13, 0, 0, 0, 1); // Invalid Date } From c57c91fb7d69fd2f1609c57b74570f95bd34a352 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Sat, 24 Apr 2021 09:22:55 +0300 Subject: [PATCH 41/47] upd fixtures --- tests/compiler/std/date.optimized.wat | 218 +++++++++++++------------- tests/compiler/std/date.untouched.wat | 218 +++++++++++++------------- 2 files changed, 218 insertions(+), 218 deletions(-) diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index cc502e607d..d1bdcc31bb 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -4451,7 +4451,7 @@ if i32.const 0 i32.const 1152 - i32.const 19 + i32.const 18 i32.const 3 call $~lib/builtins/abort unreachable @@ -4466,7 +4466,7 @@ if i32.const 0 i32.const 1152 - i32.const 21 + i32.const 20 i32.const 3 call $~lib/builtins/abort unreachable @@ -4483,7 +4483,7 @@ if i32.const 0 i32.const 1152 - i32.const 29 + i32.const 28 i32.const 3 call $~lib/builtins/abort unreachable @@ -4495,7 +4495,7 @@ if i32.const 0 i32.const 1152 - i32.const 30 + i32.const 29 i32.const 3 call $~lib/builtins/abort unreachable @@ -4507,7 +4507,7 @@ if i32.const 0 i32.const 1152 - i32.const 31 + i32.const 30 i32.const 3 call $~lib/builtins/abort unreachable @@ -4519,7 +4519,7 @@ if i32.const 0 i32.const 1152 - i32.const 32 + i32.const 31 i32.const 3 call $~lib/builtins/abort unreachable @@ -4531,7 +4531,7 @@ if i32.const 0 i32.const 1152 - i32.const 33 + i32.const 32 i32.const 3 call $~lib/builtins/abort unreachable @@ -4543,7 +4543,7 @@ if i32.const 0 i32.const 1152 - i32.const 34 + i32.const 33 i32.const 3 call $~lib/builtins/abort unreachable @@ -4555,7 +4555,7 @@ if i32.const 0 i32.const 1152 - i32.const 35 + i32.const 34 i32.const 3 call $~lib/builtins/abort unreachable @@ -4572,7 +4572,7 @@ if i32.const 0 i32.const 1152 - i32.const 41 + i32.const 40 i32.const 3 call $~lib/builtins/abort unreachable @@ -4584,7 +4584,7 @@ if i32.const 0 i32.const 1152 - i32.const 42 + i32.const 41 i32.const 3 call $~lib/builtins/abort unreachable @@ -4596,7 +4596,7 @@ if i32.const 0 i32.const 1152 - i32.const 43 + i32.const 42 i32.const 3 call $~lib/builtins/abort unreachable @@ -4608,7 +4608,7 @@ if i32.const 0 i32.const 1152 - i32.const 44 + i32.const 43 i32.const 3 call $~lib/builtins/abort unreachable @@ -4620,7 +4620,7 @@ if i32.const 0 i32.const 1152 - i32.const 45 + i32.const 44 i32.const 3 call $~lib/builtins/abort unreachable @@ -4632,7 +4632,7 @@ if i32.const 0 i32.const 1152 - i32.const 46 + i32.const 45 i32.const 3 call $~lib/builtins/abort unreachable @@ -4644,7 +4644,7 @@ if i32.const 0 i32.const 1152 - i32.const 47 + i32.const 46 i32.const 3 call $~lib/builtins/abort unreachable @@ -4661,7 +4661,7 @@ if i32.const 0 i32.const 1152 - i32.const 53 + i32.const 52 i32.const 3 call $~lib/builtins/abort unreachable @@ -4676,7 +4676,7 @@ if i32.const 0 i32.const 1152 - i32.const 55 + i32.const 54 i32.const 3 call $~lib/builtins/abort unreachable @@ -4691,7 +4691,7 @@ if i32.const 0 i32.const 1152 - i32.const 57 + i32.const 56 i32.const 3 call $~lib/builtins/abort unreachable @@ -4706,7 +4706,7 @@ if i32.const 0 i32.const 1152 - i32.const 60 + i32.const 59 i32.const 3 call $~lib/builtins/abort unreachable @@ -4721,7 +4721,7 @@ if i32.const 0 i32.const 1152 - i32.const 62 + i32.const 61 i32.const 3 call $~lib/builtins/abort unreachable @@ -4734,7 +4734,7 @@ if i32.const 0 i32.const 1152 - i32.const 65 + i32.const 64 i32.const 3 call $~lib/builtins/abort unreachable @@ -4746,7 +4746,7 @@ if i32.const 0 i32.const 1152 - i32.const 66 + i32.const 65 i32.const 3 call $~lib/builtins/abort unreachable @@ -4759,7 +4759,7 @@ if i32.const 0 i32.const 1152 - i32.const 68 + i32.const 67 i32.const 3 call $~lib/builtins/abort unreachable @@ -4771,7 +4771,7 @@ if i32.const 0 i32.const 1152 - i32.const 69 + i32.const 68 i32.const 3 call $~lib/builtins/abort unreachable @@ -4788,7 +4788,7 @@ if i32.const 0 i32.const 1152 - i32.const 75 + i32.const 74 i32.const 3 call $~lib/builtins/abort unreachable @@ -4803,7 +4803,7 @@ if i32.const 0 i32.const 1152 - i32.const 77 + i32.const 76 i32.const 3 call $~lib/builtins/abort unreachable @@ -4818,7 +4818,7 @@ if i32.const 0 i32.const 1152 - i32.const 79 + i32.const 78 i32.const 3 call $~lib/builtins/abort unreachable @@ -4833,7 +4833,7 @@ if i32.const 0 i32.const 1152 - i32.const 82 + i32.const 81 i32.const 3 call $~lib/builtins/abort unreachable @@ -4848,7 +4848,7 @@ if i32.const 0 i32.const 1152 - i32.const 84 + i32.const 83 i32.const 3 call $~lib/builtins/abort unreachable @@ -4865,7 +4865,7 @@ if i32.const 0 i32.const 1152 - i32.const 90 + i32.const 89 i32.const 3 call $~lib/builtins/abort unreachable @@ -4880,7 +4880,7 @@ if i32.const 0 i32.const 1152 - i32.const 92 + i32.const 91 i32.const 3 call $~lib/builtins/abort unreachable @@ -4895,7 +4895,7 @@ if i32.const 0 i32.const 1152 - i32.const 94 + i32.const 93 i32.const 3 call $~lib/builtins/abort unreachable @@ -4910,7 +4910,7 @@ if i32.const 0 i32.const 1152 - i32.const 97 + i32.const 96 i32.const 3 call $~lib/builtins/abort unreachable @@ -4925,7 +4925,7 @@ if i32.const 0 i32.const 1152 - i32.const 99 + i32.const 98 i32.const 3 call $~lib/builtins/abort unreachable @@ -4942,7 +4942,7 @@ if i32.const 0 i32.const 1152 - i32.const 105 + i32.const 104 i32.const 3 call $~lib/builtins/abort unreachable @@ -4957,7 +4957,7 @@ if i32.const 0 i32.const 1152 - i32.const 107 + i32.const 106 i32.const 3 call $~lib/builtins/abort unreachable @@ -4972,7 +4972,7 @@ if i32.const 0 i32.const 1152 - i32.const 109 + i32.const 108 i32.const 3 call $~lib/builtins/abort unreachable @@ -4987,7 +4987,7 @@ if i32.const 0 i32.const 1152 - i32.const 112 + i32.const 111 i32.const 3 call $~lib/builtins/abort unreachable @@ -5002,7 +5002,7 @@ if i32.const 0 i32.const 1152 - i32.const 114 + i32.const 113 i32.const 3 call $~lib/builtins/abort unreachable @@ -5019,7 +5019,7 @@ if i32.const 0 i32.const 1152 - i32.const 120 + i32.const 119 i32.const 3 call $~lib/builtins/abort unreachable @@ -5031,7 +5031,7 @@ if i32.const 0 i32.const 1152 - i32.const 121 + i32.const 120 i32.const 3 call $~lib/builtins/abort unreachable @@ -5046,7 +5046,7 @@ if i32.const 0 i32.const 1152 - i32.const 125 + i32.const 124 i32.const 3 call $~lib/builtins/abort unreachable @@ -5061,7 +5061,7 @@ if i32.const 0 i32.const 1152 - i32.const 127 + i32.const 126 i32.const 3 call $~lib/builtins/abort unreachable @@ -5100,7 +5100,7 @@ if i32.const 0 i32.const 1152 - i32.const 145 + i32.const 144 i32.const 3 call $~lib/builtins/abort unreachable @@ -5112,7 +5112,7 @@ if i32.const 0 i32.const 1152 - i32.const 146 + i32.const 145 i32.const 3 call $~lib/builtins/abort unreachable @@ -5124,7 +5124,7 @@ if i32.const 0 i32.const 1152 - i32.const 147 + i32.const 146 i32.const 3 call $~lib/builtins/abort unreachable @@ -5136,7 +5136,7 @@ if i32.const 0 i32.const 1152 - i32.const 148 + i32.const 147 i32.const 3 call $~lib/builtins/abort unreachable @@ -5148,7 +5148,7 @@ if i32.const 0 i32.const 1152 - i32.const 149 + i32.const 148 i32.const 3 call $~lib/builtins/abort unreachable @@ -5168,7 +5168,7 @@ if i32.const 0 i32.const 1152 - i32.const 153 + i32.const 152 i32.const 3 call $~lib/builtins/abort unreachable @@ -5183,7 +5183,7 @@ if i32.const 0 i32.const 1152 - i32.const 155 + i32.const 154 i32.const 3 call $~lib/builtins/abort unreachable @@ -5198,7 +5198,7 @@ if i32.const 0 i32.const 1152 - i32.const 158 + i32.const 157 i32.const 3 call $~lib/builtins/abort unreachable @@ -5213,7 +5213,7 @@ if i32.const 0 i32.const 1152 - i32.const 161 + i32.const 160 i32.const 3 call $~lib/builtins/abort unreachable @@ -5228,7 +5228,7 @@ if i32.const 0 i32.const 1152 - i32.const 164 + i32.const 163 i32.const 3 call $~lib/builtins/abort unreachable @@ -5243,7 +5243,7 @@ if i32.const 0 i32.const 1152 - i32.const 167 + i32.const 166 i32.const 3 call $~lib/builtins/abort unreachable @@ -5263,7 +5263,7 @@ if i32.const 0 i32.const 1152 - i32.const 171 + i32.const 170 i32.const 3 call $~lib/builtins/abort unreachable @@ -5283,7 +5283,7 @@ if i32.const 0 i32.const 1152 - i32.const 175 + i32.const 174 i32.const 3 call $~lib/builtins/abort unreachable @@ -5300,7 +5300,7 @@ if i32.const 0 i32.const 1152 - i32.const 181 + i32.const 180 i32.const 3 call $~lib/builtins/abort unreachable @@ -5315,7 +5315,7 @@ if i32.const 0 i32.const 1152 - i32.const 183 + i32.const 182 i32.const 3 call $~lib/builtins/abort unreachable @@ -5330,7 +5330,7 @@ if i32.const 0 i32.const 1152 - i32.const 185 + i32.const 184 i32.const 3 call $~lib/builtins/abort unreachable @@ -5342,7 +5342,7 @@ if i32.const 0 i32.const 1152 - i32.const 186 + i32.const 185 i32.const 3 call $~lib/builtins/abort unreachable @@ -5360,7 +5360,7 @@ if i32.const 0 i32.const 1152 - i32.const 190 + i32.const 189 i32.const 3 call $~lib/builtins/abort unreachable @@ -5375,7 +5375,7 @@ if i32.const 0 i32.const 1152 - i32.const 194 + i32.const 193 i32.const 3 call $~lib/builtins/abort unreachable @@ -5390,7 +5390,7 @@ if i32.const 0 i32.const 1152 - i32.const 196 + i32.const 195 i32.const 3 call $~lib/builtins/abort unreachable @@ -5407,7 +5407,7 @@ if i32.const 0 i32.const 1152 - i32.const 202 + i32.const 201 i32.const 3 call $~lib/builtins/abort unreachable @@ -5422,7 +5422,7 @@ if i32.const 0 i32.const 1152 - i32.const 204 + i32.const 203 i32.const 3 call $~lib/builtins/abort unreachable @@ -5437,7 +5437,7 @@ if i32.const 0 i32.const 1152 - i32.const 206 + i32.const 205 i32.const 3 call $~lib/builtins/abort unreachable @@ -5452,7 +5452,7 @@ if i32.const 0 i32.const 1152 - i32.const 208 + i32.const 207 i32.const 3 call $~lib/builtins/abort unreachable @@ -5478,7 +5478,7 @@ if i32.const 0 i32.const 1152 - i32.const 214 + i32.const 213 i32.const 3 call $~lib/builtins/abort unreachable @@ -5504,7 +5504,7 @@ if i32.const 0 i32.const 1152 - i32.const 216 + i32.const 215 i32.const 3 call $~lib/builtins/abort unreachable @@ -5530,7 +5530,7 @@ if i32.const 0 i32.const 1152 - i32.const 218 + i32.const 217 i32.const 3 call $~lib/builtins/abort unreachable @@ -5556,7 +5556,7 @@ if i32.const 0 i32.const 1152 - i32.const 220 + i32.const 219 i32.const 3 call $~lib/builtins/abort unreachable @@ -5582,7 +5582,7 @@ if i32.const 0 i32.const 1152 - i32.const 222 + i32.const 221 i32.const 3 call $~lib/builtins/abort unreachable @@ -5608,7 +5608,7 @@ if i32.const 0 i32.const 1152 - i32.const 224 + i32.const 223 i32.const 3 call $~lib/builtins/abort unreachable @@ -5634,7 +5634,7 @@ if i32.const 0 i32.const 1152 - i32.const 226 + i32.const 225 i32.const 3 call $~lib/builtins/abort unreachable @@ -5660,7 +5660,7 @@ if i32.const 0 i32.const 1152 - i32.const 228 + i32.const 227 i32.const 3 call $~lib/builtins/abort unreachable @@ -5686,7 +5686,7 @@ if i32.const 0 i32.const 1152 - i32.const 230 + i32.const 229 i32.const 3 call $~lib/builtins/abort unreachable @@ -5706,7 +5706,7 @@ if i32.const 0 i32.const 1152 - i32.const 237 + i32.const 236 i32.const 3 call $~lib/builtins/abort unreachable @@ -5726,7 +5726,7 @@ if i32.const 0 i32.const 1152 - i32.const 239 + i32.const 238 i32.const 3 call $~lib/builtins/abort unreachable @@ -5746,7 +5746,7 @@ if i32.const 0 i32.const 1152 - i32.const 241 + i32.const 240 i32.const 3 call $~lib/builtins/abort unreachable @@ -5766,7 +5766,7 @@ if i32.const 0 i32.const 1152 - i32.const 245 + i32.const 244 i32.const 3 call $~lib/builtins/abort unreachable @@ -5786,7 +5786,7 @@ if i32.const 0 i32.const 1152 - i32.const 249 + i32.const 248 i32.const 3 call $~lib/builtins/abort unreachable @@ -5806,7 +5806,7 @@ if i32.const 0 i32.const 1152 - i32.const 253 + i32.const 252 i32.const 3 call $~lib/builtins/abort unreachable @@ -5826,7 +5826,7 @@ if i32.const 0 i32.const 1152 - i32.const 256 + i32.const 255 i32.const 3 call $~lib/builtins/abort unreachable @@ -5846,7 +5846,7 @@ if i32.const 0 i32.const 1152 - i32.const 259 + i32.const 258 i32.const 3 call $~lib/builtins/abort unreachable @@ -5866,7 +5866,7 @@ if i32.const 0 i32.const 1152 - i32.const 262 + i32.const 261 i32.const 3 call $~lib/builtins/abort unreachable @@ -5886,7 +5886,7 @@ if i32.const 0 i32.const 1152 - i32.const 265 + i32.const 264 i32.const 3 call $~lib/builtins/abort unreachable @@ -5906,7 +5906,7 @@ if i32.const 0 i32.const 1152 - i32.const 268 + i32.const 267 i32.const 3 call $~lib/builtins/abort unreachable @@ -5926,7 +5926,7 @@ if i32.const 0 i32.const 1152 - i32.const 271 + i32.const 270 i32.const 3 call $~lib/builtins/abort unreachable @@ -5946,7 +5946,7 @@ if i32.const 0 i32.const 1152 - i32.const 274 + i32.const 273 i32.const 3 call $~lib/builtins/abort unreachable @@ -5968,7 +5968,7 @@ if i32.const 0 i32.const 1152 - i32.const 292 + i32.const 291 i32.const 3 call $~lib/builtins/abort unreachable @@ -5980,7 +5980,7 @@ if i32.const 0 i32.const 1152 - i32.const 293 + i32.const 292 i32.const 3 call $~lib/builtins/abort unreachable @@ -5992,7 +5992,7 @@ if i32.const 0 i32.const 1152 - i32.const 295 + i32.const 294 i32.const 3 call $~lib/builtins/abort unreachable @@ -6004,7 +6004,7 @@ if i32.const 0 i32.const 1152 - i32.const 296 + i32.const 295 i32.const 3 call $~lib/builtins/abort unreachable @@ -6016,7 +6016,7 @@ if i32.const 0 i32.const 1152 - i32.const 298 + i32.const 297 i32.const 3 call $~lib/builtins/abort unreachable @@ -6028,7 +6028,7 @@ if i32.const 0 i32.const 1152 - i32.const 299 + i32.const 298 i32.const 3 call $~lib/builtins/abort unreachable @@ -6040,7 +6040,7 @@ if i32.const 0 i32.const 1152 - i32.const 301 + i32.const 300 i32.const 3 call $~lib/builtins/abort unreachable @@ -6052,7 +6052,7 @@ if i32.const 0 i32.const 1152 - i32.const 302 + i32.const 301 i32.const 3 call $~lib/builtins/abort unreachable @@ -6073,7 +6073,7 @@ if i32.const 0 i32.const 1152 - i32.const 304 + i32.const 303 i32.const 3 call $~lib/builtins/abort unreachable @@ -6094,7 +6094,7 @@ if i32.const 0 i32.const 1152 - i32.const 305 + i32.const 304 i32.const 3 call $~lib/builtins/abort unreachable @@ -6116,7 +6116,7 @@ if i32.const 0 i32.const 1152 - i32.const 310 + i32.const 309 i32.const 3 call $~lib/builtins/abort unreachable @@ -6128,7 +6128,7 @@ if i32.const 0 i32.const 1152 - i32.const 311 + i32.const 310 i32.const 3 call $~lib/builtins/abort unreachable @@ -6140,7 +6140,7 @@ if i32.const 0 i32.const 1152 - i32.const 312 + i32.const 311 i32.const 3 call $~lib/builtins/abort unreachable @@ -6150,7 +6150,7 @@ if i32.const 0 i32.const 1152 - i32.const 313 + i32.const 312 i32.const 3 call $~lib/builtins/abort unreachable @@ -6160,7 +6160,7 @@ if i32.const 0 i32.const 1152 - i32.const 314 + i32.const 313 i32.const 3 call $~lib/builtins/abort unreachable @@ -6170,7 +6170,7 @@ if i32.const 0 i32.const 1152 - i32.const 315 + i32.const 314 i32.const 3 call $~lib/builtins/abort unreachable @@ -6182,7 +6182,7 @@ if i32.const 0 i32.const 1152 - i32.const 316 + i32.const 315 i32.const 3 call $~lib/builtins/abort unreachable @@ -6203,7 +6203,7 @@ if i32.const 0 i32.const 1152 - i32.const 318 + i32.const 317 i32.const 3 call $~lib/builtins/abort unreachable @@ -6224,7 +6224,7 @@ if i32.const 0 i32.const 1152 - i32.const 319 + i32.const 318 i32.const 3 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 68025b8d8c..da125db2b6 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -7320,7 +7320,7 @@ if i32.const 0 i32.const 128 - i32.const 19 + i32.const 18 i32.const 3 call $~lib/builtins/abort unreachable @@ -7341,7 +7341,7 @@ if i32.const 0 i32.const 128 - i32.const 21 + i32.const 20 i32.const 3 call $~lib/builtins/abort unreachable @@ -7360,7 +7360,7 @@ if i32.const 0 i32.const 128 - i32.const 29 + i32.const 28 i32.const 3 call $~lib/builtins/abort unreachable @@ -7373,7 +7373,7 @@ if i32.const 0 i32.const 128 - i32.const 30 + i32.const 29 i32.const 3 call $~lib/builtins/abort unreachable @@ -7386,7 +7386,7 @@ if i32.const 0 i32.const 128 - i32.const 31 + i32.const 30 i32.const 3 call $~lib/builtins/abort unreachable @@ -7399,7 +7399,7 @@ if i32.const 0 i32.const 128 - i32.const 32 + i32.const 31 i32.const 3 call $~lib/builtins/abort unreachable @@ -7412,7 +7412,7 @@ if i32.const 0 i32.const 128 - i32.const 33 + i32.const 32 i32.const 3 call $~lib/builtins/abort unreachable @@ -7425,7 +7425,7 @@ if i32.const 0 i32.const 128 - i32.const 34 + i32.const 33 i32.const 3 call $~lib/builtins/abort unreachable @@ -7438,7 +7438,7 @@ if i32.const 0 i32.const 128 - i32.const 35 + i32.const 34 i32.const 3 call $~lib/builtins/abort unreachable @@ -7457,7 +7457,7 @@ if i32.const 0 i32.const 128 - i32.const 41 + i32.const 40 i32.const 3 call $~lib/builtins/abort unreachable @@ -7470,7 +7470,7 @@ if i32.const 0 i32.const 128 - i32.const 42 + i32.const 41 i32.const 3 call $~lib/builtins/abort unreachable @@ -7483,7 +7483,7 @@ if i32.const 0 i32.const 128 - i32.const 43 + i32.const 42 i32.const 3 call $~lib/builtins/abort unreachable @@ -7496,7 +7496,7 @@ if i32.const 0 i32.const 128 - i32.const 44 + i32.const 43 i32.const 3 call $~lib/builtins/abort unreachable @@ -7509,7 +7509,7 @@ if i32.const 0 i32.const 128 - i32.const 45 + i32.const 44 i32.const 3 call $~lib/builtins/abort unreachable @@ -7522,7 +7522,7 @@ if i32.const 0 i32.const 128 - i32.const 46 + i32.const 45 i32.const 3 call $~lib/builtins/abort unreachable @@ -7535,7 +7535,7 @@ if i32.const 0 i32.const 128 - i32.const 47 + i32.const 46 i32.const 3 call $~lib/builtins/abort unreachable @@ -7554,7 +7554,7 @@ if i32.const 0 i32.const 128 - i32.const 53 + i32.const 52 i32.const 3 call $~lib/builtins/abort unreachable @@ -7570,7 +7570,7 @@ if i32.const 0 i32.const 128 - i32.const 55 + i32.const 54 i32.const 3 call $~lib/builtins/abort unreachable @@ -7586,7 +7586,7 @@ if i32.const 0 i32.const 128 - i32.const 57 + i32.const 56 i32.const 3 call $~lib/builtins/abort unreachable @@ -7602,7 +7602,7 @@ if i32.const 0 i32.const 128 - i32.const 60 + i32.const 59 i32.const 3 call $~lib/builtins/abort unreachable @@ -7618,7 +7618,7 @@ if i32.const 0 i32.const 128 - i32.const 62 + i32.const 61 i32.const 3 call $~lib/builtins/abort unreachable @@ -7634,7 +7634,7 @@ if i32.const 0 i32.const 128 - i32.const 65 + i32.const 64 i32.const 3 call $~lib/builtins/abort unreachable @@ -7647,7 +7647,7 @@ if i32.const 0 i32.const 128 - i32.const 66 + i32.const 65 i32.const 3 call $~lib/builtins/abort unreachable @@ -7663,7 +7663,7 @@ if i32.const 0 i32.const 128 - i32.const 68 + i32.const 67 i32.const 3 call $~lib/builtins/abort unreachable @@ -7676,7 +7676,7 @@ if i32.const 0 i32.const 128 - i32.const 69 + i32.const 68 i32.const 3 call $~lib/builtins/abort unreachable @@ -7695,7 +7695,7 @@ if i32.const 0 i32.const 128 - i32.const 75 + i32.const 74 i32.const 3 call $~lib/builtins/abort unreachable @@ -7711,7 +7711,7 @@ if i32.const 0 i32.const 128 - i32.const 77 + i32.const 76 i32.const 3 call $~lib/builtins/abort unreachable @@ -7727,7 +7727,7 @@ if i32.const 0 i32.const 128 - i32.const 79 + i32.const 78 i32.const 3 call $~lib/builtins/abort unreachable @@ -7743,7 +7743,7 @@ if i32.const 0 i32.const 128 - i32.const 82 + i32.const 81 i32.const 3 call $~lib/builtins/abort unreachable @@ -7759,7 +7759,7 @@ if i32.const 0 i32.const 128 - i32.const 84 + i32.const 83 i32.const 3 call $~lib/builtins/abort unreachable @@ -7778,7 +7778,7 @@ if i32.const 0 i32.const 128 - i32.const 90 + i32.const 89 i32.const 3 call $~lib/builtins/abort unreachable @@ -7794,7 +7794,7 @@ if i32.const 0 i32.const 128 - i32.const 92 + i32.const 91 i32.const 3 call $~lib/builtins/abort unreachable @@ -7810,7 +7810,7 @@ if i32.const 0 i32.const 128 - i32.const 94 + i32.const 93 i32.const 3 call $~lib/builtins/abort unreachable @@ -7826,7 +7826,7 @@ if i32.const 0 i32.const 128 - i32.const 97 + i32.const 96 i32.const 3 call $~lib/builtins/abort unreachable @@ -7842,7 +7842,7 @@ if i32.const 0 i32.const 128 - i32.const 99 + i32.const 98 i32.const 3 call $~lib/builtins/abort unreachable @@ -7861,7 +7861,7 @@ if i32.const 0 i32.const 128 - i32.const 105 + i32.const 104 i32.const 3 call $~lib/builtins/abort unreachable @@ -7877,7 +7877,7 @@ if i32.const 0 i32.const 128 - i32.const 107 + i32.const 106 i32.const 3 call $~lib/builtins/abort unreachable @@ -7893,7 +7893,7 @@ if i32.const 0 i32.const 128 - i32.const 109 + i32.const 108 i32.const 3 call $~lib/builtins/abort unreachable @@ -7909,7 +7909,7 @@ if i32.const 0 i32.const 128 - i32.const 112 + i32.const 111 i32.const 3 call $~lib/builtins/abort unreachable @@ -7925,7 +7925,7 @@ if i32.const 0 i32.const 128 - i32.const 114 + i32.const 113 i32.const 3 call $~lib/builtins/abort unreachable @@ -7944,7 +7944,7 @@ if i32.const 0 i32.const 128 - i32.const 120 + i32.const 119 i32.const 3 call $~lib/builtins/abort unreachable @@ -7957,7 +7957,7 @@ if i32.const 0 i32.const 128 - i32.const 121 + i32.const 120 i32.const 3 call $~lib/builtins/abort unreachable @@ -7973,7 +7973,7 @@ if i32.const 0 i32.const 128 - i32.const 125 + i32.const 124 i32.const 3 call $~lib/builtins/abort unreachable @@ -7989,7 +7989,7 @@ if i32.const 0 i32.const 128 - i32.const 127 + i32.const 126 i32.const 3 call $~lib/builtins/abort unreachable @@ -8029,7 +8029,7 @@ if i32.const 0 i32.const 128 - i32.const 145 + i32.const 144 i32.const 3 call $~lib/builtins/abort unreachable @@ -8042,7 +8042,7 @@ if i32.const 0 i32.const 128 - i32.const 146 + i32.const 145 i32.const 3 call $~lib/builtins/abort unreachable @@ -8055,7 +8055,7 @@ if i32.const 0 i32.const 128 - i32.const 147 + i32.const 146 i32.const 3 call $~lib/builtins/abort unreachable @@ -8068,7 +8068,7 @@ if i32.const 0 i32.const 128 - i32.const 148 + i32.const 147 i32.const 3 call $~lib/builtins/abort unreachable @@ -8081,7 +8081,7 @@ if i32.const 0 i32.const 128 - i32.const 149 + i32.const 148 i32.const 3 call $~lib/builtins/abort unreachable @@ -8103,7 +8103,7 @@ if i32.const 0 i32.const 128 - i32.const 153 + i32.const 152 i32.const 3 call $~lib/builtins/abort unreachable @@ -8119,7 +8119,7 @@ if i32.const 0 i32.const 128 - i32.const 155 + i32.const 154 i32.const 3 call $~lib/builtins/abort unreachable @@ -8135,7 +8135,7 @@ if i32.const 0 i32.const 128 - i32.const 158 + i32.const 157 i32.const 3 call $~lib/builtins/abort unreachable @@ -8155,7 +8155,7 @@ if i32.const 0 i32.const 128 - i32.const 161 + i32.const 160 i32.const 3 call $~lib/builtins/abort unreachable @@ -8177,7 +8177,7 @@ if i32.const 0 i32.const 128 - i32.const 164 + i32.const 163 i32.const 3 call $~lib/builtins/abort unreachable @@ -8199,7 +8199,7 @@ if i32.const 0 i32.const 128 - i32.const 167 + i32.const 166 i32.const 3 call $~lib/builtins/abort unreachable @@ -8221,7 +8221,7 @@ if i32.const 0 i32.const 128 - i32.const 171 + i32.const 170 i32.const 3 call $~lib/builtins/abort unreachable @@ -8243,7 +8243,7 @@ if i32.const 0 i32.const 128 - i32.const 175 + i32.const 174 i32.const 3 call $~lib/builtins/abort unreachable @@ -8262,7 +8262,7 @@ if i32.const 0 i32.const 128 - i32.const 181 + i32.const 180 i32.const 3 call $~lib/builtins/abort unreachable @@ -8278,7 +8278,7 @@ if i32.const 0 i32.const 128 - i32.const 183 + i32.const 182 i32.const 3 call $~lib/builtins/abort unreachable @@ -8294,7 +8294,7 @@ if i32.const 0 i32.const 128 - i32.const 185 + i32.const 184 i32.const 3 call $~lib/builtins/abort unreachable @@ -8307,7 +8307,7 @@ if i32.const 0 i32.const 128 - i32.const 186 + i32.const 185 i32.const 3 call $~lib/builtins/abort unreachable @@ -8326,7 +8326,7 @@ if i32.const 0 i32.const 128 - i32.const 190 + i32.const 189 i32.const 3 call $~lib/builtins/abort unreachable @@ -8342,7 +8342,7 @@ if i32.const 0 i32.const 128 - i32.const 194 + i32.const 193 i32.const 3 call $~lib/builtins/abort unreachable @@ -8358,7 +8358,7 @@ if i32.const 0 i32.const 128 - i32.const 196 + i32.const 195 i32.const 3 call $~lib/builtins/abort unreachable @@ -8377,7 +8377,7 @@ if i32.const 0 i32.const 128 - i32.const 202 + i32.const 201 i32.const 3 call $~lib/builtins/abort unreachable @@ -8393,7 +8393,7 @@ if i32.const 0 i32.const 128 - i32.const 204 + i32.const 203 i32.const 3 call $~lib/builtins/abort unreachable @@ -8409,7 +8409,7 @@ if i32.const 0 i32.const 128 - i32.const 206 + i32.const 205 i32.const 3 call $~lib/builtins/abort unreachable @@ -8425,7 +8425,7 @@ if i32.const 0 i32.const 128 - i32.const 208 + i32.const 207 i32.const 3 call $~lib/builtins/abort unreachable @@ -8454,7 +8454,7 @@ if i32.const 0 i32.const 128 - i32.const 214 + i32.const 213 i32.const 3 call $~lib/builtins/abort unreachable @@ -8485,7 +8485,7 @@ if i32.const 0 i32.const 128 - i32.const 216 + i32.const 215 i32.const 3 call $~lib/builtins/abort unreachable @@ -8514,7 +8514,7 @@ if i32.const 0 i32.const 128 - i32.const 218 + i32.const 217 i32.const 3 call $~lib/builtins/abort unreachable @@ -8543,7 +8543,7 @@ if i32.const 0 i32.const 128 - i32.const 220 + i32.const 219 i32.const 3 call $~lib/builtins/abort unreachable @@ -8572,7 +8572,7 @@ if i32.const 0 i32.const 128 - i32.const 222 + i32.const 221 i32.const 3 call $~lib/builtins/abort unreachable @@ -8601,7 +8601,7 @@ if i32.const 0 i32.const 128 - i32.const 224 + i32.const 223 i32.const 3 call $~lib/builtins/abort unreachable @@ -8630,7 +8630,7 @@ if i32.const 0 i32.const 128 - i32.const 226 + i32.const 225 i32.const 3 call $~lib/builtins/abort unreachable @@ -8659,7 +8659,7 @@ if i32.const 0 i32.const 128 - i32.const 228 + i32.const 227 i32.const 3 call $~lib/builtins/abort unreachable @@ -8688,7 +8688,7 @@ if i32.const 0 i32.const 128 - i32.const 230 + i32.const 229 i32.const 3 call $~lib/builtins/abort unreachable @@ -8711,7 +8711,7 @@ if i32.const 0 i32.const 128 - i32.const 237 + i32.const 236 i32.const 3 call $~lib/builtins/abort unreachable @@ -8734,7 +8734,7 @@ if i32.const 0 i32.const 128 - i32.const 239 + i32.const 238 i32.const 3 call $~lib/builtins/abort unreachable @@ -8757,7 +8757,7 @@ if i32.const 0 i32.const 128 - i32.const 241 + i32.const 240 i32.const 3 call $~lib/builtins/abort unreachable @@ -8780,7 +8780,7 @@ if i32.const 0 i32.const 128 - i32.const 245 + i32.const 244 i32.const 3 call $~lib/builtins/abort unreachable @@ -8803,7 +8803,7 @@ if i32.const 0 i32.const 128 - i32.const 249 + i32.const 248 i32.const 3 call $~lib/builtins/abort unreachable @@ -8826,7 +8826,7 @@ if i32.const 0 i32.const 128 - i32.const 253 + i32.const 252 i32.const 3 call $~lib/builtins/abort unreachable @@ -8849,7 +8849,7 @@ if i32.const 0 i32.const 128 - i32.const 256 + i32.const 255 i32.const 3 call $~lib/builtins/abort unreachable @@ -8872,7 +8872,7 @@ if i32.const 0 i32.const 128 - i32.const 259 + i32.const 258 i32.const 3 call $~lib/builtins/abort unreachable @@ -8895,7 +8895,7 @@ if i32.const 0 i32.const 128 - i32.const 262 + i32.const 261 i32.const 3 call $~lib/builtins/abort unreachable @@ -8918,7 +8918,7 @@ if i32.const 0 i32.const 128 - i32.const 265 + i32.const 264 i32.const 3 call $~lib/builtins/abort unreachable @@ -8941,7 +8941,7 @@ if i32.const 0 i32.const 128 - i32.const 268 + i32.const 267 i32.const 3 call $~lib/builtins/abort unreachable @@ -8964,7 +8964,7 @@ if i32.const 0 i32.const 128 - i32.const 271 + i32.const 270 i32.const 3 call $~lib/builtins/abort unreachable @@ -8987,7 +8987,7 @@ if i32.const 0 i32.const 128 - i32.const 274 + i32.const 273 i32.const 3 call $~lib/builtins/abort unreachable @@ -9012,7 +9012,7 @@ if i32.const 0 i32.const 128 - i32.const 292 + i32.const 291 i32.const 3 call $~lib/builtins/abort unreachable @@ -9025,7 +9025,7 @@ if i32.const 0 i32.const 128 - i32.const 293 + i32.const 292 i32.const 3 call $~lib/builtins/abort unreachable @@ -9038,7 +9038,7 @@ if i32.const 0 i32.const 128 - i32.const 295 + i32.const 294 i32.const 3 call $~lib/builtins/abort unreachable @@ -9051,7 +9051,7 @@ if i32.const 0 i32.const 128 - i32.const 296 + i32.const 295 i32.const 3 call $~lib/builtins/abort unreachable @@ -9064,7 +9064,7 @@ if i32.const 0 i32.const 128 - i32.const 298 + i32.const 297 i32.const 3 call $~lib/builtins/abort unreachable @@ -9077,7 +9077,7 @@ if i32.const 0 i32.const 128 - i32.const 299 + i32.const 298 i32.const 3 call $~lib/builtins/abort unreachable @@ -9090,7 +9090,7 @@ if i32.const 0 i32.const 128 - i32.const 301 + i32.const 300 i32.const 3 call $~lib/builtins/abort unreachable @@ -9103,7 +9103,7 @@ if i32.const 0 i32.const 128 - i32.const 302 + i32.const 301 i32.const 3 call $~lib/builtins/abort unreachable @@ -9126,7 +9126,7 @@ if i32.const 0 i32.const 128 - i32.const 304 + i32.const 303 i32.const 3 call $~lib/builtins/abort unreachable @@ -9149,7 +9149,7 @@ if i32.const 0 i32.const 128 - i32.const 305 + i32.const 304 i32.const 3 call $~lib/builtins/abort unreachable @@ -9178,7 +9178,7 @@ if i32.const 0 i32.const 128 - i32.const 310 + i32.const 309 i32.const 3 call $~lib/builtins/abort unreachable @@ -9191,7 +9191,7 @@ if i32.const 0 i32.const 128 - i32.const 311 + i32.const 310 i32.const 3 call $~lib/builtins/abort unreachable @@ -9204,7 +9204,7 @@ if i32.const 0 i32.const 128 - i32.const 312 + i32.const 311 i32.const 3 call $~lib/builtins/abort unreachable @@ -9217,7 +9217,7 @@ if i32.const 0 i32.const 128 - i32.const 313 + i32.const 312 i32.const 3 call $~lib/builtins/abort unreachable @@ -9230,7 +9230,7 @@ if i32.const 0 i32.const 128 - i32.const 314 + i32.const 313 i32.const 3 call $~lib/builtins/abort unreachable @@ -9243,7 +9243,7 @@ if i32.const 0 i32.const 128 - i32.const 315 + i32.const 314 i32.const 3 call $~lib/builtins/abort unreachable @@ -9256,7 +9256,7 @@ if i32.const 0 i32.const 128 - i32.const 316 + i32.const 315 i32.const 3 call $~lib/builtins/abort unreachable @@ -9279,7 +9279,7 @@ if i32.const 0 i32.const 128 - i32.const 318 + i32.const 317 i32.const 3 call $~lib/builtins/abort unreachable @@ -9302,7 +9302,7 @@ if i32.const 0 i32.const 128 - i32.const 319 + i32.const 318 i32.const 3 call $~lib/builtins/abort unreachable From 99cf24234f30c2d2ad22582a159b2d12b90b1a2a Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Sun, 25 Apr 2021 09:59:21 +0300 Subject: [PATCH 42/47] add getUTCDay --- std/assembly/date.ts | 14 + std/assembly/index.d.ts | 1 + tests/compiler/std/date.optimized.wat | 681 ++++++++++++++++---------- tests/compiler/std/date.ts | 18 + tests/compiler/std/date.untouched.wat | 566 ++++++++++++++------- 5 files changed, 856 insertions(+), 424 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 436de3cf7a..007f8fa12d 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -126,6 +126,10 @@ export class Date { return this.day; } + getUTCDay(): i32 { + return dayOfWeek(this.year, this.month, this.day); + } + getUTCHours(): i32 { return i32(floorMod(this.epochMillis, MILLIS_PER_DAY)) / MILLIS_PER_HOUR; } @@ -264,3 +268,13 @@ function daysSinceEpoch(y: i32, m: i32, d: i32): i32 { var doe = yoe * 365 + yoe / 4 - yoe / 100 + doy; // [0, 146096] return era * 146097 + doe - 719468; } + +// TomohikoSakamoto algorithm from https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week +export function dayOfWeek(year: i32, month: i32, day: i32): i32 { + const tab = memory.data([0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4]); + + year -= i32(month < 3); + year += year / 4 - year / 100 + year / 400; + month = load(tab + month - 1); + return (year + month + day) % 7; +} diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index c0255d99de..d3a2f086cf 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1737,6 +1737,7 @@ declare class Date { getUTCFullYear(): i32; getUTCMonth(): i32; getUTCDate(): i32; + getUTCDay(): i32; getUTCHours(): i32; getUTCMinutes(): i32; getUTCSeconds(): i32; diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index d1bdcc31bb..22585910cd 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -25,7 +25,7 @@ (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/memory/__stack_pointer (mut i32) (i32.const 20404)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20420)) (global $~started (mut i32) (i32.const 0)) (memory $0 1) (data (i32.const 1036) ",") @@ -44,84 +44,85 @@ (data (i32.const 1448) "\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s") (data (i32.const 1516) "<") (data (i32.const 1528) "\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 1580) "\1c") - (data (i32.const 1592) "\01\00\00\00\02\00\00\00-") - (data (i32.const 1612) "\1c") - (data (i32.const 1624) "\01\00\00\00\02\00\00\00+") - (data (i32.const 1644) "|") - (data (i32.const 1656) "\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006") - (data (i32.const 1772) "<") - (data (i32.const 1784) "\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s") - (data (i32.const 1836) "\1c") - (data (i32.const 1848) "\01\00\00\00\02\00\00\000") - (data (i32.const 1868) "\\") - (data (i32.const 1880) "\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") - (data (i32.const 1964) "\1c") - (data (i32.const 1976) "\01") - (data (i32.const 1996) "\1c") - (data (i32.const 2008) "\01\00\00\00\02\00\00\00T") - (data (i32.const 2028) "\1c") - (data (i32.const 2040) "\01\00\00\00\02\00\00\00:") - (data (i32.const 2060) "\1c") - (data (i32.const 2072) "\01\00\00\00\02\00\00\00.") - (data (i32.const 2092) "\1c") - (data (i32.const 2104) "\01\00\00\00\02\00\00\00Z") - (data (i32.const 2124) "L") - (data (i32.const 2136) "\01\00\00\000\00\00\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") - (data (i32.const 2204) "L") - (data (i32.const 2216) "\01\00\00\006\00\00\00-\000\000\000\000\000\001\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") - (data (i32.const 2284) "L") - (data (i32.const 2296) "\01\00\00\000\00\00\000\000\000\001\00-\000\004\00-\000\007\00T\002\003\00:\000\006\00:\004\000\00.\000\000\000\00Z") - (data (i32.const 2364) "L") - (data (i32.const 2376) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\000\002\000\00Z") - (data (i32.const 2444) "L") - (data (i32.const 2456) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z") - (data (i32.const 2524) "L") - (data (i32.const 2536) "\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z") - (data (i32.const 2604) "L") - (data (i32.const 2616) "\01\00\00\000\00\00\009\009\009\009\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") - (data (i32.const 2684) "L") - (data (i32.const 2696) "\01\00\00\006\00\00\00+\000\001\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") - (data (i32.const 2764) "L") - (data (i32.const 2776) "\01\00\00\006\00\00\00-\000\000\000\000\002\002\00-\000\006\00-\001\006\00T\001\007\00:\001\003\00:\005\000\00.\007\007\004\00Z") - (data (i32.const 2844) ",") - (data (i32.const 2856) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") - (data (i32.const 2892) ",") - (data (i32.const 2904) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") - (data (i32.const 2940) ",") - (data (i32.const 2952) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 2988) "|") - (data (i32.const 3000) "\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") - (data (i32.const 3116) ",") - (data (i32.const 3128) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") - (data (i32.const 3164) ",") - (data (i32.const 3176) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") - (data (i32.const 3212) "<") - (data (i32.const 3224) "\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006") - (data (i32.const 3276) "L") - (data (i32.const 3288) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") - (data (i32.const 3356) "L") - (data (i32.const 3368) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") - (data (i32.const 3436) "\1c") - (data (i32.const 3448) "\01\00\00\00\08\00\00\000\000\000\000") - (data (i32.const 3468) "\1c") - (data (i32.const 3480) "\01\00\00\00\08\00\00\000\000\000\001") - (data (i32.const 3500) "\1c") - (data (i32.const 3512) "\01\00\00\00\08\00\00\001\009\007\006") - (data (i32.const 3532) ",") - (data (i32.const 3544) "\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002") - (data (i32.const 3580) "<") - (data (i32.const 3592) "\01\00\00\00 \00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004") - (data (i32.const 3644) "L") - (data (i32.const 3656) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") - (data (i32.const 3724) "L") - (data (i32.const 3736) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") - (data (i32.const 3804) "L") - (data (i32.const 3816) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") - (data (i32.const 3884) "L") - (data (i32.const 3896) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z") - (data (i32.const 3968) "\06\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 3996) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") + (data (i32.const 1581) "\03\02\05\00\03\05\01\04\06\02\04") + (data (i32.const 1596) "\1c") + (data (i32.const 1608) "\01\00\00\00\02\00\00\00-") + (data (i32.const 1628) "\1c") + (data (i32.const 1640) "\01\00\00\00\02\00\00\00+") + (data (i32.const 1660) "|") + (data (i32.const 1672) "\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006") + (data (i32.const 1788) "<") + (data (i32.const 1800) "\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s") + (data (i32.const 1852) "\1c") + (data (i32.const 1864) "\01\00\00\00\02\00\00\000") + (data (i32.const 1884) "\\") + (data (i32.const 1896) "\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z") + (data (i32.const 1980) "\1c") + (data (i32.const 1992) "\01") + (data (i32.const 2012) "\1c") + (data (i32.const 2024) "\01\00\00\00\02\00\00\00T") + (data (i32.const 2044) "\1c") + (data (i32.const 2056) "\01\00\00\00\02\00\00\00:") + (data (i32.const 2076) "\1c") + (data (i32.const 2088) "\01\00\00\00\02\00\00\00.") + (data (i32.const 2108) "\1c") + (data (i32.const 2120) "\01\00\00\00\02\00\00\00Z") + (data (i32.const 2140) "L") + (data (i32.const 2152) "\01\00\00\000\00\00\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 2220) "L") + (data (i32.const 2232) "\01\00\00\006\00\00\00-\000\000\000\000\000\001\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 2300) "L") + (data (i32.const 2312) "\01\00\00\000\00\00\000\000\000\001\00-\000\004\00-\000\007\00T\002\003\00:\000\006\00:\004\000\00.\000\000\000\00Z") + (data (i32.const 2380) "L") + (data (i32.const 2392) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\000\002\000\00Z") + (data (i32.const 2460) "L") + (data (i32.const 2472) "\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z") + (data (i32.const 2540) "L") + (data (i32.const 2552) "\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z") + (data (i32.const 2620) "L") + (data (i32.const 2632) "\01\00\00\000\00\00\009\009\009\009\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 2700) "L") + (data (i32.const 2712) "\01\00\00\006\00\00\00+\000\001\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 2780) "L") + (data (i32.const 2792) "\01\00\00\006\00\00\00-\000\000\000\000\002\002\00-\000\006\00-\001\006\00T\001\007\00:\001\003\00:\005\000\00.\007\007\004\00Z") + (data (i32.const 2860) ",") + (data (i32.const 2872) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") + (data (i32.const 2908) ",") + (data (i32.const 2920) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 2956) ",") + (data (i32.const 2968) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 3004) "|") + (data (i32.const 3016) "\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") + (data (i32.const 3132) ",") + (data (i32.const 3144) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") + (data (i32.const 3180) ",") + (data (i32.const 3192) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") + (data (i32.const 3228) "<") + (data (i32.const 3240) "\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006") + (data (i32.const 3292) "L") + (data (i32.const 3304) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") + (data (i32.const 3372) "L") + (data (i32.const 3384) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") + (data (i32.const 3452) "\1c") + (data (i32.const 3464) "\01\00\00\00\08\00\00\000\000\000\000") + (data (i32.const 3484) "\1c") + (data (i32.const 3496) "\01\00\00\00\08\00\00\000\000\000\001") + (data (i32.const 3516) "\1c") + (data (i32.const 3528) "\01\00\00\00\08\00\00\001\009\007\006") + (data (i32.const 3548) ",") + (data (i32.const 3560) "\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002") + (data (i32.const 3596) "<") + (data (i32.const 3608) "\01\00\00\00 \00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004") + (data (i32.const 3660) "L") + (data (i32.const 3672) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3740) "L") + (data (i32.const 3752) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") + (data (i32.const 3820) "L") + (data (i32.const 3832) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") + (data (i32.const 3900) "L") + (data (i32.const 3912) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z") + (data (i32.const 3984) "\06\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 4012) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") (export "memory" (memory $0)) (export "_start" (func $~start)) (func $~lib/date/daysSinceEpoch (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -323,15 +324,15 @@ (local $1 i32) i32.const 1392 call $~lib/rt/itcms/__visit - i32.const 2912 + i32.const 2928 call $~lib/rt/itcms/__visit - i32.const 3008 + i32.const 3024 call $~lib/rt/itcms/__visit i32.const 1200 call $~lib/rt/itcms/__visit i32.const 1056 call $~lib/rt/itcms/__visit - i32.const 1888 + i32.const 1904 call $~lib/rt/itcms/__visit global.get $~lib/rt/itcms/pinSpace local.tee $1 @@ -443,7 +444,7 @@ if i32.const 0 local.get $0 - i32.const 20404 + i32.const 20420 i32.lt_u local.get $0 i32.load offset=8 @@ -489,7 +490,7 @@ i32.const 1 else local.get $1 - i32.const 3968 + i32.const 3984 i32.load i32.gt_u if @@ -503,7 +504,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 3972 + i32.const 3988 i32.add i32.load i32.const 32 @@ -1077,10 +1078,10 @@ if unreachable end - i32.const 20416 + i32.const 20432 i32.const 0 i32.store - i32.const 21984 + i32.const 22000 i32.const 0 i32.store loop $for-loop|0 @@ -1091,7 +1092,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 20416 + i32.const 20432 i32.add i32.const 0 i32.store offset=4 @@ -1109,7 +1110,7 @@ i32.add i32.const 2 i32.shl - i32.const 20416 + i32.const 20432 i32.add i32.const 0 i32.store offset=96 @@ -1127,13 +1128,13 @@ br $for-loop|0 end end - i32.const 20416 - i32.const 21988 + i32.const 20432 + i32.const 22004 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 20416 + i32.const 20432 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -1212,7 +1213,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 20404 + i32.const 20420 i32.lt_u if local.get $0 @@ -1302,7 +1303,7 @@ unreachable end local.get $0 - i32.const 20404 + i32.const 20420 i32.lt_u if local.get $0 @@ -1325,7 +1326,7 @@ i32.const 4 i32.add local.tee $1 - i32.const 20404 + i32.const 20420 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -2309,6 +2310,40 @@ i64.add call $~lib/date/Date#setTime ) + (func $~lib/date/Date#getUTCDay (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + i32.load offset=8 + local.get $0 + i32.load + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const 3 + i32.lt_s + i32.sub + local.tee $0 + local.get $0 + i32.const 4 + i32.div_s + local.get $0 + i32.const 100 + i32.div_s + i32.sub + local.get $0 + i32.const 400 + i32.div_s + i32.add + i32.add + local.get $1 + i32.const 1579 + i32.add + i32.load8_u + i32.add + i32.add + i32.const 7 + i32.rem_s + ) (func $~lib/number/I32#toString (param $0 i32) (result i32) (local $1 i32) (local $2 i32) @@ -2329,7 +2364,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - i32.const 1856 + i32.const 1872 local.set $0 br $__inlined_func$~lib/util/number/itoa32 end @@ -2639,7 +2674,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - i32.const 1984 + i32.const 2000 local.set $0 br $__inlined_func$~lib/string/String#concat end @@ -2952,8 +2987,8 @@ i32.const 268435455 i32.gt_u if - i32.const 2912 - i32.const 2960 + i32.const 2928 + i32.const 2976 i32.const 14 i32.const 48 call $~lib/builtins/abort @@ -3397,11 +3432,11 @@ ) (func $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 4020 + i32.const 4036 i32.lt_s if - i32.const 20432 - i32.const 20480 + i32.const 20448 + i32.const 20496 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3475,8 +3510,8 @@ if global.get $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 1600 - i32.const 1632 + i32.const 1616 + i32.const 1648 local.get $2 select local.tee $2 @@ -3495,7 +3530,7 @@ local.get $1 i32.store offset=8 global.get $~lib/memory/__stack_pointer - i32.const 1856 + i32.const 1872 i32.store offset=12 local.get $1 i32.const 6 @@ -3518,7 +3553,7 @@ local.get $1 i32.store global.get $~lib/memory/__stack_pointer - i32.const 1856 + i32.const 1872 i32.store offset=8 local.get $1 i32.const 4 @@ -3527,10 +3562,10 @@ i32.store offset=16 end global.get $~lib/memory/__stack_pointer - i32.const 1600 + i32.const 1616 i32.store offset=100 local.get $1 - i32.const 1600 + i32.const 1616 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3544,7 +3579,7 @@ local.get $2 i32.store offset=104 global.get $~lib/memory/__stack_pointer - i32.const 1856 + i32.const 1872 i32.store offset=108 local.get $2 i32.const 2 @@ -3561,10 +3596,10 @@ local.get $1 i32.store offset=84 global.get $~lib/memory/__stack_pointer - i32.const 1600 + i32.const 1616 i32.store offset=88 local.get $1 - i32.const 1600 + i32.const 1616 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3578,7 +3613,7 @@ local.get $2 i32.store offset=84 global.get $~lib/memory/__stack_pointer - i32.const 1856 + i32.const 1872 i32.store offset=92 local.get $2 i32.const 2 @@ -3595,10 +3630,10 @@ local.get $1 i32.store offset=68 global.get $~lib/memory/__stack_pointer - i32.const 2016 + i32.const 2032 i32.store offset=72 local.get $1 - i32.const 2016 + i32.const 2032 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3612,7 +3647,7 @@ local.get $2 i32.store offset=68 global.get $~lib/memory/__stack_pointer - i32.const 1856 + i32.const 1872 i32.store offset=76 local.get $2 i32.const 2 @@ -3629,10 +3664,10 @@ local.get $1 i32.store offset=52 global.get $~lib/memory/__stack_pointer - i32.const 2048 + i32.const 2064 i32.store offset=56 local.get $1 - i32.const 2048 + i32.const 2064 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3646,7 +3681,7 @@ local.get $2 i32.store offset=52 global.get $~lib/memory/__stack_pointer - i32.const 1856 + i32.const 1872 i32.store offset=60 local.get $2 i32.const 2 @@ -3663,10 +3698,10 @@ local.get $1 i32.store offset=36 global.get $~lib/memory/__stack_pointer - i32.const 2048 + i32.const 2064 i32.store offset=40 local.get $1 - i32.const 2048 + i32.const 2064 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3680,7 +3715,7 @@ local.get $2 i32.store offset=36 global.get $~lib/memory/__stack_pointer - i32.const 1856 + i32.const 1872 i32.store offset=44 local.get $2 i32.const 2 @@ -3697,10 +3732,10 @@ local.get $1 i32.store offset=12 global.get $~lib/memory/__stack_pointer - i32.const 2080 + i32.const 2096 i32.store offset=24 local.get $1 - i32.const 2080 + i32.const 2096 call $~lib/string/String.__concat local.set $1 global.get $~lib/memory/__stack_pointer @@ -3714,7 +3749,7 @@ local.get $0 i32.store offset=12 global.get $~lib/memory/__stack_pointer - i32.const 1856 + i32.const 1872 i32.store offset=28 local.get $0 i32.const 3 @@ -3731,10 +3766,10 @@ local.get $0 i32.store global.get $~lib/memory/__stack_pointer - i32.const 2112 + i32.const 2128 i32.store offset=4 local.get $0 - i32.const 2112 + i32.const 2128 call $~lib/string/String.__concat global.get $~lib/memory/__stack_pointer i32.const 112 @@ -3818,7 +3853,7 @@ i32.store offset=4 local.get $0 i32.load offset=4 - i32.const 1984 + i32.const 2000 i32.store br $folding-inner1 end @@ -3927,10 +3962,10 @@ call $~lib/array/Array<~lib/string/String>#push else global.get $~lib/memory/__stack_pointer - i32.const 1984 + i32.const 2000 i32.store offset=20 local.get $2 - i32.const 1984 + i32.const 2000 call $~lib/array/Array<~lib/string/String>#push end local.get $9 @@ -3984,10 +4019,10 @@ call $~lib/array/Array<~lib/string/String>#push else global.get $~lib/memory/__stack_pointer - i32.const 1984 + i32.const 2000 i32.store offset=20 local.get $2 - i32.const 1984 + i32.const 2000 call $~lib/array/Array<~lib/string/String>#push end global.get $~lib/memory/__stack_pointer @@ -4058,10 +4093,10 @@ local.get $0 local.set $1 global.get $~lib/memory/__stack_pointer - i32.const 2016 + i32.const 2032 i32.store local.get $0 - i32.const 2016 + i32.const 2032 i32.const 0 call $~lib/string/String#indexOf local.tee $2 @@ -4085,11 +4120,11 @@ local.tee $0 i32.store offset=8 global.get $~lib/memory/__stack_pointer - i32.const 2048 + i32.const 2064 i32.store global.get $~lib/memory/__stack_pointer local.get $0 - i32.const 2048 + i32.const 2064 call $~lib/string/String#split local.tee $0 i32.store offset=12 @@ -4137,10 +4172,10 @@ local.tee $0 i32.store offset=20 global.get $~lib/memory/__stack_pointer - i32.const 2080 + i32.const 2096 i32.store local.get $0 - i32.const 2080 + i32.const 2096 i32.const 0 call $~lib/string/String#indexOf local.tee $2 @@ -4179,11 +4214,11 @@ end end global.get $~lib/memory/__stack_pointer - i32.const 1600 + i32.const 1616 i32.store global.get $~lib/memory/__stack_pointer local.get $1 - i32.const 1600 + i32.const 1616 call $~lib/string/String#split local.tee $2 i32.store offset=24 @@ -4425,7 +4460,7 @@ memory.size i32.const 16 i32.shl - i32.const 20404 + i32.const 20420 i32.sub i32.const 1 i32.shr_u @@ -5288,6 +5323,148 @@ call $~lib/builtins/abort unreachable end + i64.const 1467763200000 + call $~lib/date/Date#constructor + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/date/Date#getUTCDay + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 184 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 1467763199999 + call $~lib/date/Date#constructor + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/date/Date#getUTCDay + i32.const 2 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 185 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 1467849599999 + call $~lib/date/Date#constructor + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/date/Date#getUTCDay + i32.const 3 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 186 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 1467849600000 + call $~lib/date/Date#constructor + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/date/Date#getUTCDay + i32.const 4 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 187 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 1468022400000 + call $~lib/date/Date#constructor + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/date/Date#getUTCDay + i32.const 6 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 189 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 1468022399999 + call $~lib/date/Date#constructor + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/date/Date#getUTCDay + i32.const 5 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 190 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 1468108799999 + call $~lib/date/Date#constructor + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/date/Date#getUTCDay + i32.const 6 + i32.ne + if + i32.const 0 + i32.const 1152 + i32.const 191 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i64.const 1468108800000 + call $~lib/date/Date#constructor + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $0 + call $~lib/date/Date#getUTCDay + if + i32.const 0 + i32.const 1152 + i32.const 192 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i64.const 7899943856218720 call $~lib/date/Date#constructor @@ -5300,7 +5477,7 @@ if i32.const 0 i32.const 1152 - i32.const 180 + i32.const 198 i32.const 3 call $~lib/builtins/abort unreachable @@ -5315,7 +5492,7 @@ if i32.const 0 i32.const 1152 - i32.const 182 + i32.const 200 i32.const 3 call $~lib/builtins/abort unreachable @@ -5330,7 +5507,7 @@ if i32.const 0 i32.const 1152 - i32.const 184 + i32.const 202 i32.const 3 call $~lib/builtins/abort unreachable @@ -5342,7 +5519,7 @@ if i32.const 0 i32.const 1152 - i32.const 185 + i32.const 203 i32.const 3 call $~lib/builtins/abort unreachable @@ -5360,7 +5537,7 @@ if i32.const 0 i32.const 1152 - i32.const 189 + i32.const 207 i32.const 3 call $~lib/builtins/abort unreachable @@ -5375,7 +5552,7 @@ if i32.const 0 i32.const 1152 - i32.const 193 + i32.const 211 i32.const 3 call $~lib/builtins/abort unreachable @@ -5390,7 +5567,7 @@ if i32.const 0 i32.const 1152 - i32.const 195 + i32.const 213 i32.const 3 call $~lib/builtins/abort unreachable @@ -5407,7 +5584,7 @@ if i32.const 0 i32.const 1152 - i32.const 201 + i32.const 219 i32.const 3 call $~lib/builtins/abort unreachable @@ -5422,7 +5599,7 @@ if i32.const 0 i32.const 1152 - i32.const 203 + i32.const 221 i32.const 3 call $~lib/builtins/abort unreachable @@ -5437,7 +5614,7 @@ if i32.const 0 i32.const 1152 - i32.const 205 + i32.const 223 i32.const 3 call $~lib/builtins/abort unreachable @@ -5452,7 +5629,7 @@ if i32.const 0 i32.const 1152 - i32.const 207 + i32.const 225 i32.const 3 call $~lib/builtins/abort unreachable @@ -5469,16 +5646,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2144 + i32.const 2160 i32.store offset=8 local.get $0 - i32.const 2144 + i32.const 2160 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 213 + i32.const 231 i32.const 3 call $~lib/builtins/abort unreachable @@ -5495,16 +5672,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2224 + i32.const 2240 i32.store offset=8 local.get $0 - i32.const 2224 + i32.const 2240 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 215 + i32.const 233 i32.const 3 call $~lib/builtins/abort unreachable @@ -5521,16 +5698,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2304 + i32.const 2320 i32.store offset=8 local.get $0 - i32.const 2304 + i32.const 2320 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 217 + i32.const 235 i32.const 3 call $~lib/builtins/abort unreachable @@ -5547,16 +5724,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2384 + i32.const 2400 i32.store offset=8 local.get $0 - i32.const 2384 + i32.const 2400 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 219 + i32.const 237 i32.const 3 call $~lib/builtins/abort unreachable @@ -5573,16 +5750,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2464 + i32.const 2480 i32.store offset=8 local.get $0 - i32.const 2464 + i32.const 2480 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 221 + i32.const 239 i32.const 3 call $~lib/builtins/abort unreachable @@ -5599,16 +5776,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2544 + i32.const 2560 i32.store offset=8 local.get $0 - i32.const 2544 + i32.const 2560 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 223 + i32.const 241 i32.const 3 call $~lib/builtins/abort unreachable @@ -5625,16 +5802,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2624 + i32.const 2640 i32.store offset=8 local.get $0 - i32.const 2624 + i32.const 2640 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 225 + i32.const 243 i32.const 3 call $~lib/builtins/abort unreachable @@ -5651,16 +5828,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2704 + i32.const 2720 i32.store offset=8 local.get $0 - i32.const 2704 + i32.const 2720 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 227 + i32.const 245 i32.const 3 call $~lib/builtins/abort unreachable @@ -5677,25 +5854,25 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2784 + i32.const 2800 i32.store offset=8 local.get $0 - i32.const 2784 + i32.const 2800 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 229 + i32.const 247 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2864 + i32.const 2880 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2864 + i32.const 2880 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5706,16 +5883,16 @@ if i32.const 0 i32.const 1152 - i32.const 236 + i32.const 254 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3136 + i32.const 3152 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3136 + i32.const 3152 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5726,16 +5903,16 @@ if i32.const 0 i32.const 1152 - i32.const 238 + i32.const 256 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3184 + i32.const 3200 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3184 + i32.const 3200 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5746,16 +5923,16 @@ if i32.const 0 i32.const 1152 - i32.const 240 + i32.const 258 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3232 + i32.const 3248 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3232 + i32.const 3248 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5766,16 +5943,16 @@ if i32.const 0 i32.const 1152 - i32.const 244 + i32.const 262 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3296 + i32.const 3312 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3296 + i32.const 3312 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5786,16 +5963,16 @@ if i32.const 0 i32.const 1152 - i32.const 248 + i32.const 266 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3376 + i32.const 3392 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3376 + i32.const 3392 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5806,16 +5983,16 @@ if i32.const 0 i32.const 1152 - i32.const 252 + i32.const 270 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3456 + i32.const 3472 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3456 + i32.const 3472 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5826,16 +6003,16 @@ if i32.const 0 i32.const 1152 - i32.const 255 + i32.const 273 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3488 + i32.const 3504 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3488 + i32.const 3504 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5846,16 +6023,16 @@ if i32.const 0 i32.const 1152 - i32.const 258 + i32.const 276 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3520 + i32.const 3536 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3520 + i32.const 3536 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5866,16 +6043,16 @@ if i32.const 0 i32.const 1152 - i32.const 261 + i32.const 279 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3552 + i32.const 3568 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3552 + i32.const 3568 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5886,16 +6063,16 @@ if i32.const 0 i32.const 1152 - i32.const 264 + i32.const 282 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2864 + i32.const 2880 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2864 + i32.const 2880 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5906,16 +6083,16 @@ if i32.const 0 i32.const 1152 - i32.const 267 + i32.const 285 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3600 + i32.const 3616 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3600 + i32.const 3616 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5926,16 +6103,16 @@ if i32.const 0 i32.const 1152 - i32.const 270 + i32.const 288 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3232 + i32.const 3248 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3232 + i32.const 3248 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5946,7 +6123,7 @@ if i32.const 0 i32.const 1152 - i32.const 273 + i32.const 291 i32.const 3 call $~lib/builtins/abort unreachable @@ -5968,7 +6145,7 @@ if i32.const 0 i32.const 1152 - i32.const 291 + i32.const 309 i32.const 3 call $~lib/builtins/abort unreachable @@ -5980,7 +6157,7 @@ if i32.const 0 i32.const 1152 - i32.const 292 + i32.const 310 i32.const 3 call $~lib/builtins/abort unreachable @@ -5992,7 +6169,7 @@ if i32.const 0 i32.const 1152 - i32.const 294 + i32.const 312 i32.const 3 call $~lib/builtins/abort unreachable @@ -6004,7 +6181,7 @@ if i32.const 0 i32.const 1152 - i32.const 295 + i32.const 313 i32.const 3 call $~lib/builtins/abort unreachable @@ -6016,7 +6193,7 @@ if i32.const 0 i32.const 1152 - i32.const 297 + i32.const 315 i32.const 3 call $~lib/builtins/abort unreachable @@ -6028,7 +6205,7 @@ if i32.const 0 i32.const 1152 - i32.const 298 + i32.const 316 i32.const 3 call $~lib/builtins/abort unreachable @@ -6040,7 +6217,7 @@ if i32.const 0 i32.const 1152 - i32.const 300 + i32.const 318 i32.const 3 call $~lib/builtins/abort unreachable @@ -6052,7 +6229,7 @@ if i32.const 0 i32.const 1152 - i32.const 301 + i32.const 319 i32.const 3 call $~lib/builtins/abort unreachable @@ -6064,16 +6241,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3664 + i32.const 3680 i32.store offset=8 local.get $0 - i32.const 3664 + i32.const 3680 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 303 + i32.const 321 i32.const 3 call $~lib/builtins/abort unreachable @@ -6085,16 +6262,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3744 + i32.const 3760 i32.store offset=8 local.get $0 - i32.const 3744 + i32.const 3760 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 304 + i32.const 322 i32.const 3 call $~lib/builtins/abort unreachable @@ -6116,7 +6293,7 @@ if i32.const 0 i32.const 1152 - i32.const 309 + i32.const 327 i32.const 3 call $~lib/builtins/abort unreachable @@ -6128,7 +6305,7 @@ if i32.const 0 i32.const 1152 - i32.const 310 + i32.const 328 i32.const 3 call $~lib/builtins/abort unreachable @@ -6140,7 +6317,7 @@ if i32.const 0 i32.const 1152 - i32.const 311 + i32.const 329 i32.const 3 call $~lib/builtins/abort unreachable @@ -6150,7 +6327,7 @@ if i32.const 0 i32.const 1152 - i32.const 312 + i32.const 330 i32.const 3 call $~lib/builtins/abort unreachable @@ -6160,7 +6337,7 @@ if i32.const 0 i32.const 1152 - i32.const 313 + i32.const 331 i32.const 3 call $~lib/builtins/abort unreachable @@ -6170,7 +6347,7 @@ if i32.const 0 i32.const 1152 - i32.const 314 + i32.const 332 i32.const 3 call $~lib/builtins/abort unreachable @@ -6182,7 +6359,7 @@ if i32.const 0 i32.const 1152 - i32.const 315 + i32.const 333 i32.const 3 call $~lib/builtins/abort unreachable @@ -6194,16 +6371,16 @@ local.get $2 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3824 + i32.const 3840 i32.store offset=8 local.get $2 - i32.const 3824 + i32.const 3840 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 317 + i32.const 335 i32.const 3 call $~lib/builtins/abort unreachable @@ -6215,16 +6392,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3904 + i32.const 3920 i32.store offset=8 local.get $0 - i32.const 3904 + i32.const 3920 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 318 + i32.const 336 i32.const 3 call $~lib/builtins/abort unreachable @@ -6322,7 +6499,7 @@ i32.const 0 i32.store i32.const 1 - i32.const 1852 + i32.const 1868 i32.load i32.const 1 i32.shr_u @@ -6383,7 +6560,7 @@ local.get $1 local.get $4 i32.add - i32.const 1856 + i32.const 1872 local.get $3 call $~lib/memory/memory.copy local.get $3 @@ -6396,14 +6573,14 @@ local.get $1 local.get $6 i32.add - i32.const 1856 + i32.const 1872 local.get $2 local.get $6 i32.sub call $~lib/memory/memory.copy else local.get $1 - i32.const 1856 + i32.const 1872 local.get $2 call $~lib/memory/memory.copy end @@ -6486,7 +6663,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - i32.const 1984 + i32.const 2000 return end i32.const 0 @@ -6584,7 +6761,7 @@ i32.ge_u if i32.const 1392 - i32.const 2960 + i32.const 2976 i32.const 92 i32.const 42 call $~lib/builtins/abort @@ -6603,8 +6780,8 @@ local.get $0 i32.eqz if - i32.const 3008 - i32.const 2960 + i32.const 3024 + i32.const 2976 i32.const 96 i32.const 40 call $~lib/builtins/abort diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index ed0dea9fbe..105bda77c0 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -174,6 +174,24 @@ assert(date.getTime() == 314240591274); } +// Date#setUTCDay ////////////////////////////////////////////////////////////////////////////////// +{ + // tests from test262 + const july6: i64 = 1467763200000; + const july9: i64 = 1468022400000; + const dayMs: i64 = 24 * 60 * 60 * 1000; + + assert(new Date(july6 ).getUTCDay() == 3); + assert(new Date(july6 - 1).getUTCDay() == 2); + assert(new Date(july6 + dayMs - 1).getUTCDay() == 3); + assert(new Date(july6 + dayMs ).getUTCDay() == 4); + + assert(new Date(july9 ).getUTCDay() == 6); + assert(new Date(july9 - 1).getUTCDay() == 5); + assert(new Date(july9 + dayMs - 1).getUTCDay() == 6); + assert(new Date(july9 + dayMs ).getUTCDay() == 0); +} + // Date#setUTCMonth //////////////////////////////////////////////////////////////////////////////// { let date = new Date(7899943856218720); diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index da125db2b6..d47d34b822 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -3,8 +3,8 @@ (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_i64_=>_none (func (param i32 i64))) @@ -35,10 +35,10 @@ (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) - (global $~lib/rt/__rtti_base i32 (i32.const 4400)) - (global $~lib/memory/__data_end i32 (i32.const 4452)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20836)) - (global $~lib/memory/__heap_base i32 (i32.const 20836)) + (global $~lib/rt/__rtti_base i32 (i32.const 4416)) + (global $~lib/memory/__data_end i32 (i32.const 4468)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20852)) + (global $~lib/memory/__heap_base i32 (i32.const 20852)) (global $~started (mut i32) (i32.const 0)) (memory $0 1) (data (i32.const 12) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\18\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00D\00a\00t\00e\00\00\00\00\00") @@ -52,47 +52,48 @@ (data (i32.const 412) ",\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 464) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 492) "<\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 556) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00-\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 588) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00+\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 620) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006\00\00\00\00\00\00\00\00\00") - (data (i32.const 748) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") - (data (i32.const 812) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\000\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 844) "0\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") - (data (i32.const 1244) "\1c\04\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\04\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\000\00a\000\00b\000\00c\000\00d\000\00e\000\00f\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\001\00a\001\00b\001\00c\001\00d\001\00e\001\00f\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\002\00a\002\00b\002\00c\002\00d\002\00e\002\00f\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\003\00a\003\00b\003\00c\003\00d\003\00e\003\00f\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\004\00a\004\00b\004\00c\004\00d\004\00e\004\00f\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\005\00a\005\00b\005\00c\005\00d\005\00e\005\00f\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\006\00a\006\00b\006\00c\006\00d\006\00e\006\00f\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\007\00a\007\00b\007\00c\007\00d\007\00e\007\00f\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\008\00a\008\00b\008\00c\008\00d\008\00e\008\00f\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\009\00a\009\00b\009\00c\009\00d\009\00e\009\00f\00a\000\00a\001\00a\002\00a\003\00a\004\00a\005\00a\006\00a\007\00a\008\00a\009\00a\00a\00a\00b\00a\00c\00a\00d\00a\00e\00a\00f\00b\000\00b\001\00b\002\00b\003\00b\004\00b\005\00b\006\00b\007\00b\008\00b\009\00b\00a\00b\00b\00b\00c\00b\00d\00b\00e\00b\00f\00c\000\00c\001\00c\002\00c\003\00c\004\00c\005\00c\006\00c\007\00c\008\00c\009\00c\00a\00c\00b\00c\00c\00c\00d\00c\00e\00c\00f\00d\000\00d\001\00d\002\00d\003\00d\004\00d\005\00d\006\00d\007\00d\008\00d\009\00d\00a\00d\00b\00d\00c\00d\00d\00d\00e\00d\00f\00e\000\00e\001\00e\002\00e\003\00e\004\00e\005\00e\006\00e\007\00e\008\00e\009\00e\00a\00e\00b\00e\00c\00e\00d\00e\00e\00e\00f\00f\000\00f\001\00f\002\00f\003\00f\004\00f\005\00f\006\00f\007\00f\008\00f\009\00f\00a\00f\00b\00f\00c\00f\00d\00f\00e\00f\00f\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2300) "\\\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\00\00\00\00\00") - (data (i32.const 2396) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2428) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00T\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2460) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00:\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2492) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00.\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2524) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00Z\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2556) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2636) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\000\000\000\000\000\001\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") - (data (i32.const 2716) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\000\000\000\001\00-\000\004\00-\000\007\00T\002\003\00:\000\006\00:\004\000\00.\000\000\000\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2796) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\000\002\000\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2876) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2956) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 3036) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\009\009\009\009\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3116) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\000\001\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 3196) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\000\000\000\000\002\002\00-\000\006\00-\001\006\00T\001\007\00:\001\003\00:\005\000\00.\007\007\004\00Z\00\00\00\00\00\00\00") - (data (i32.const 3276) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002\00\00\00\00\00\00\00\00\00") - (data (i32.const 3324) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") - (data (i32.const 3372) ",\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 3420) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3548) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3596) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004\00\00\00\00\00\00\00\00\00") - (data (i32.const 3644) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00\00\00\00\00\00\00") - (data (i32.const 3708) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3788) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3868) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\000\000\000\000\00\00\00\00\00") - (data (i32.const 3900) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\000\000\000\001\00\00\00\00\00") - (data (i32.const 3932) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\001\009\007\006\00\00\00\00\00") - (data (i32.const 3964) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 4012) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00 \00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 4076) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 4156) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 4236) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") - (data (i32.const 4316) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z\00\00\00\00\00\00\00") - (data (i32.const 4400) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") + (data (i32.const 556) "\00\03\02\05\00\03\05\01\04\06\02\04") + (data (i32.const 572) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00-\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 604) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00+\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 636) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00d\00\00\00t\00o\00S\00t\00r\00i\00n\00g\00(\00)\00 \00r\00a\00d\00i\00x\00 \00a\00r\00g\00u\00m\00e\00n\00t\00 \00m\00u\00s\00t\00 \00b\00e\00 \00b\00e\00t\00w\00e\00e\00n\00 \002\00 \00a\00n\00d\00 \003\006\00\00\00\00\00\00\00\00\00") + (data (i32.const 764) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\00~\00l\00i\00b\00/\00u\00t\00i\00l\00/\00n\00u\00m\00b\00e\00r\00.\00t\00s\00\00\00\00\00\00\00") + (data (i32.const 828) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\000\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 860) "0\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00") + (data (i32.const 1260) "\1c\04\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\04\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\000\00a\000\00b\000\00c\000\00d\000\00e\000\00f\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\001\00a\001\00b\001\00c\001\00d\001\00e\001\00f\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\002\00a\002\00b\002\00c\002\00d\002\00e\002\00f\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\003\00a\003\00b\003\00c\003\00d\003\00e\003\00f\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\004\00a\004\00b\004\00c\004\00d\004\00e\004\00f\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\005\00a\005\00b\005\00c\005\00d\005\00e\005\00f\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\006\00a\006\00b\006\00c\006\00d\006\00e\006\00f\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\007\00a\007\00b\007\00c\007\00d\007\00e\007\00f\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\008\00a\008\00b\008\00c\008\00d\008\00e\008\00f\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\009\00a\009\00b\009\00c\009\00d\009\00e\009\00f\00a\000\00a\001\00a\002\00a\003\00a\004\00a\005\00a\006\00a\007\00a\008\00a\009\00a\00a\00a\00b\00a\00c\00a\00d\00a\00e\00a\00f\00b\000\00b\001\00b\002\00b\003\00b\004\00b\005\00b\006\00b\007\00b\008\00b\009\00b\00a\00b\00b\00b\00c\00b\00d\00b\00e\00b\00f\00c\000\00c\001\00c\002\00c\003\00c\004\00c\005\00c\006\00c\007\00c\008\00c\009\00c\00a\00c\00b\00c\00c\00c\00d\00c\00e\00c\00f\00d\000\00d\001\00d\002\00d\003\00d\004\00d\005\00d\006\00d\007\00d\008\00d\009\00d\00a\00d\00b\00d\00c\00d\00d\00d\00e\00d\00f\00e\000\00e\001\00e\002\00e\003\00e\004\00e\005\00e\006\00e\007\00e\008\00e\009\00e\00a\00e\00b\00e\00c\00e\00d\00e\00e\00e\00f\00f\000\00f\001\00f\002\00f\003\00f\004\00f\005\00f\006\00f\007\00f\008\00f\009\00f\00a\00f\00b\00f\00c\00f\00d\00f\00e\00f\00f\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2316) "\\\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00H\00\00\000\001\002\003\004\005\006\007\008\009\00a\00b\00c\00d\00e\00f\00g\00h\00i\00j\00k\00l\00m\00n\00o\00p\00q\00r\00s\00t\00u\00v\00w\00x\00y\00z\00\00\00\00\00") + (data (i32.const 2412) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2444) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00T\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2476) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00:\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2508) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00.\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2540) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00Z\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2572) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2652) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\000\000\000\000\000\001\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") + (data (i32.const 2732) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\000\000\000\001\00-\000\004\00-\000\007\00T\002\003\00:\000\006\00:\004\000\00.\000\000\000\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2812) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\000\002\000\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2892) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\002\000\000\009\00-\000\001\00-\000\006\00T\000\008\00:\004\000\00:\003\001\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2972) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\000\001\002\001\008\004\00-\000\004\00-\000\008\00T\001\003\00:\000\007\00:\001\001\00.\000\002\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 3052) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\009\009\009\009\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3132) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\000\001\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 3212) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\000\000\000\000\002\002\00-\000\006\00-\001\006\00T\001\007\00:\001\003\00:\005\000\00.\007\007\004\00Z\00\00\00\00\00\00\00") + (data (i32.const 3292) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002\00\00\00\00\00\00\00\00\00") + (data (i32.const 3340) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data (i32.const 3388) ",\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 3436) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3564) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3612) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004\00\00\00\00\00\00\00\00\00") + (data (i32.const 3660) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00\00\00\00\00\00\00") + (data (i32.const 3724) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3804) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 3884) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\000\000\000\000\00\00\00\00\00") + (data (i32.const 3916) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\000\000\000\001\00\00\00\00\00") + (data (i32.const 3948) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\001\009\007\006\00\00\00\00\00") + (data (i32.const 3980) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 4028) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00 \00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 4092) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 4172) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") + (data (i32.const 4252) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") + (data (i32.const 4332) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z\00\00\00\00\00\00\00") + (data (i32.const 4416) "\06\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\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") (table $0 1 funcref) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -3067,6 +3068,51 @@ call $~lib/date/Date#setTime drop ) + (func $~lib/date/dayOfWeek (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + local.get $1 + i32.const 3 + i32.lt_s + i32.sub + local.set $0 + local.get $0 + local.get $0 + i32.const 4 + i32.div_s + local.get $0 + i32.const 100 + i32.div_s + i32.sub + local.get $0 + i32.const 400 + i32.div_s + i32.add + i32.add + local.set $0 + i32.const 556 + local.get $1 + i32.add + i32.const 1 + i32.sub + i32.load8_u + local.set $1 + local.get $0 + local.get $1 + i32.add + local.get $2 + i32.add + i32.const 7 + i32.rem_s + ) + (func $~lib/date/Date#getUTCDay (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + call $~lib/date/dayOfWeek + ) (func $~lib/util/number/decimalCount32 (param $0 i32) (result i32) local.get $0 i32.const 100000 @@ -3157,14 +3203,14 @@ i32.const 100 i32.rem_u local.set $7 - i32.const 844 + i32.const 860 local.get $6 i32.const 2 i32.shl i32.add i64.load32_u local.set $8 - i32.const 844 + i32.const 860 local.get $7 i32.const 2 i32.shl @@ -3207,7 +3253,7 @@ i32.const 2 i32.sub local.set $2 - i32.const 844 + i32.const 860 local.get $10 i32.const 2 i32.shl @@ -3230,7 +3276,7 @@ i32.const 2 i32.sub local.set $2 - i32.const 844 + i32.const 860 local.get $1 i32.const 2 i32.shl @@ -3280,7 +3326,7 @@ i32.const 1 i32.shl i32.add - i32.const 1264 + i32.const 1280 local.get $1 i32.wrap_i64 i32.const 255 @@ -3302,7 +3348,7 @@ i32.and if local.get $0 - i32.const 1264 + i32.const 1280 local.get $1 i32.wrap_i64 i32.const 6 @@ -3425,7 +3471,7 @@ i32.const 1 i32.shl i32.add - i32.const 2320 + i32.const 2336 local.get $1 local.get $6 i64.and @@ -3461,7 +3507,7 @@ i32.const 1 i32.shl i32.add - i32.const 2320 + i32.const 2336 local.get $1 local.get $6 local.get $4 @@ -5170,8 +5216,8 @@ i32.shr_u i32.gt_u if - i32.const 3344 - i32.const 3392 + i32.const 3360 + i32.const 3408 i32.const 14 i32.const 48 call $~lib/builtins/abort @@ -5654,10 +5700,10 @@ i32.const 368 local.get $0 call $~lib/rt/itcms/__visit - i32.const 3344 + i32.const 3360 local.get $0 call $~lib/rt/itcms/__visit - i32.const 3440 + i32.const 3456 local.get $0 call $~lib/rt/itcms/__visit i32.const 176 @@ -5666,10 +5712,10 @@ i32.const 32 local.get $0 call $~lib/rt/itcms/__visit - i32.const 1264 + i32.const 1280 local.get $0 call $~lib/rt/itcms/__visit - i32.const 2320 + i32.const 2336 local.get $0 call $~lib/rt/itcms/__visit ) @@ -5798,8 +5844,8 @@ global.get $~lib/memory/__data_end i32.lt_s if - i32.const 20864 - i32.const 20912 + i32.const 20880 + i32.const 20928 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -5879,9 +5925,9 @@ global.get $~lib/memory/__stack_pointer local.get $3 if (result i32) - i32.const 576 + i32.const 592 else - i32.const 608 + i32.const 624 end local.set $6 global.get $~lib/memory/__stack_pointer @@ -5905,7 +5951,7 @@ i32.store offset=8 local.get $6 i32.const 6 - i32.const 832 + i32.const 848 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -5931,7 +5977,7 @@ i32.store local.get $6 i32.const 4 - i32.const 832 + i32.const 848 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -5942,7 +5988,7 @@ i32.store offset=16 end local.get $1 - i32.const 576 + i32.const 592 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -5964,7 +6010,7 @@ i32.store offset=104 local.get $6 i32.const 2 - i32.const 832 + i32.const 848 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -5982,7 +6028,7 @@ local.get $6 i32.store offset=84 local.get $6 - i32.const 576 + i32.const 592 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6004,7 +6050,7 @@ i32.store offset=84 local.get $6 i32.const 2 - i32.const 832 + i32.const 848 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6022,7 +6068,7 @@ local.get $6 i32.store offset=68 local.get $6 - i32.const 2448 + i32.const 2464 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6044,7 +6090,7 @@ i32.store offset=68 local.get $6 i32.const 2 - i32.const 832 + i32.const 848 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6062,7 +6108,7 @@ local.get $6 i32.store offset=52 local.get $6 - i32.const 2480 + i32.const 2496 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6084,7 +6130,7 @@ i32.store offset=52 local.get $6 i32.const 2 - i32.const 832 + i32.const 848 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6102,7 +6148,7 @@ local.get $6 i32.store offset=36 local.get $6 - i32.const 2480 + i32.const 2496 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6124,7 +6170,7 @@ i32.store offset=36 local.get $6 i32.const 2 - i32.const 832 + i32.const 848 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6142,7 +6188,7 @@ local.get $6 i32.store offset=12 local.get $6 - i32.const 2512 + i32.const 2528 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6164,7 +6210,7 @@ i32.store offset=12 local.get $6 i32.const 3 - i32.const 832 + i32.const 848 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6182,7 +6228,7 @@ local.get $6 i32.store local.get $6 - i32.const 2544 + i32.const 2560 local.set $6 global.get $~lib/memory/__stack_pointer local.get $6 @@ -6385,7 +6431,7 @@ i32.store offset=4 local.get $4 i32.load offset=4 - i32.const 2416 + i32.const 2432 i32.store local.get $4 local.set $15 @@ -6454,7 +6500,7 @@ drop else local.get $10 - i32.const 2416 + i32.const 2432 local.set $15 global.get $~lib/memory/__stack_pointer local.get $15 @@ -6534,7 +6580,7 @@ drop else local.get $10 - i32.const 2416 + i32.const 2432 local.set $15 global.get $~lib/memory/__stack_pointer local.get $15 @@ -6608,7 +6654,7 @@ local.get $0 local.set $5 local.get $0 - i32.const 2448 + i32.const 2464 local.set $17 global.get $~lib/memory/__stack_pointer local.get $17 @@ -6639,7 +6685,7 @@ i32.store offset=8 global.get $~lib/memory/__stack_pointer local.get $7 - i32.const 2480 + i32.const 2496 local.set $17 global.get $~lib/memory/__stack_pointer local.get $17 @@ -6696,7 +6742,7 @@ local.tee $10 i32.store offset=20 local.get $10 - i32.const 2512 + i32.const 2528 local.set $17 global.get $~lib/memory/__stack_pointer local.get $17 @@ -6745,7 +6791,7 @@ end global.get $~lib/memory/__stack_pointer local.get $5 - i32.const 576 + i32.const 592 local.set $17 global.get $~lib/memory/__stack_pointer local.get $17 @@ -8248,6 +8294,182 @@ call $~lib/builtins/abort unreachable end + i32.const 0 + i64.const 1467763200000 + call $~lib/date/Date#constructor + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/date/Date#getUTCDay + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 184 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + i64.const 1467763200000 + i64.const 1 + i64.sub + call $~lib/date/Date#constructor + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/date/Date#getUTCDay + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 185 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + i64.const 1467763200000 + i64.const 86400000 + i64.add + i64.const 1 + i64.sub + call $~lib/date/Date#constructor + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/date/Date#getUTCDay + i32.const 3 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 186 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + i64.const 1467763200000 + i64.const 86400000 + i64.add + call $~lib/date/Date#constructor + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/date/Date#getUTCDay + i32.const 4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 187 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + i64.const 1468022400000 + call $~lib/date/Date#constructor + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/date/Date#getUTCDay + i32.const 6 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 189 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + i64.const 1468022400000 + i64.const 1 + i64.sub + call $~lib/date/Date#constructor + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/date/Date#getUTCDay + i32.const 5 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 190 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + i64.const 1468022400000 + i64.const 86400000 + i64.add + i64.const 1 + i64.sub + call $~lib/date/Date#constructor + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/date/Date#getUTCDay + i32.const 6 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 191 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + i32.const 0 + i64.const 1468022400000 + i64.const 86400000 + i64.add + call $~lib/date/Date#constructor + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + call $~lib/date/Date#getUTCDay + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 192 + i32.const 3 + call $~lib/builtins/abort + unreachable + end global.get $~lib/memory/__stack_pointer i32.const 0 i64.const 7899943856218720 @@ -8262,7 +8484,7 @@ if i32.const 0 i32.const 128 - i32.const 180 + i32.const 198 i32.const 3 call $~lib/builtins/abort unreachable @@ -8278,7 +8500,7 @@ if i32.const 0 i32.const 128 - i32.const 182 + i32.const 200 i32.const 3 call $~lib/builtins/abort unreachable @@ -8294,7 +8516,7 @@ if i32.const 0 i32.const 128 - i32.const 184 + i32.const 202 i32.const 3 call $~lib/builtins/abort unreachable @@ -8307,7 +8529,7 @@ if i32.const 0 i32.const 128 - i32.const 185 + i32.const 203 i32.const 3 call $~lib/builtins/abort unreachable @@ -8326,7 +8548,7 @@ if i32.const 0 i32.const 128 - i32.const 189 + i32.const 207 i32.const 3 call $~lib/builtins/abort unreachable @@ -8342,7 +8564,7 @@ if i32.const 0 i32.const 128 - i32.const 193 + i32.const 211 i32.const 3 call $~lib/builtins/abort unreachable @@ -8358,7 +8580,7 @@ if i32.const 0 i32.const 128 - i32.const 195 + i32.const 213 i32.const 3 call $~lib/builtins/abort unreachable @@ -8377,7 +8599,7 @@ if i32.const 0 i32.const 128 - i32.const 201 + i32.const 219 i32.const 3 call $~lib/builtins/abort unreachable @@ -8393,7 +8615,7 @@ if i32.const 0 i32.const 128 - i32.const 203 + i32.const 221 i32.const 3 call $~lib/builtins/abort unreachable @@ -8409,7 +8631,7 @@ if i32.const 0 i32.const 128 - i32.const 205 + i32.const 223 i32.const 3 call $~lib/builtins/abort unreachable @@ -8425,7 +8647,7 @@ if i32.const 0 i32.const 128 - i32.const 207 + i32.const 225 i32.const 3 call $~lib/builtins/abort unreachable @@ -8443,7 +8665,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 2576 + i32.const 2592 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8454,7 +8676,7 @@ if i32.const 0 i32.const 128 - i32.const 213 + i32.const 231 i32.const 3 call $~lib/builtins/abort unreachable @@ -8474,7 +8696,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 2656 + i32.const 2672 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8485,7 +8707,7 @@ if i32.const 0 i32.const 128 - i32.const 215 + i32.const 233 i32.const 3 call $~lib/builtins/abort unreachable @@ -8503,7 +8725,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 2736 + i32.const 2752 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8514,7 +8736,7 @@ if i32.const 0 i32.const 128 - i32.const 217 + i32.const 235 i32.const 3 call $~lib/builtins/abort unreachable @@ -8532,7 +8754,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 2816 + i32.const 2832 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8543,7 +8765,7 @@ if i32.const 0 i32.const 128 - i32.const 219 + i32.const 237 i32.const 3 call $~lib/builtins/abort unreachable @@ -8561,7 +8783,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 2896 + i32.const 2912 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8572,7 +8794,7 @@ if i32.const 0 i32.const 128 - i32.const 221 + i32.const 239 i32.const 3 call $~lib/builtins/abort unreachable @@ -8590,7 +8812,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 2976 + i32.const 2992 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8601,7 +8823,7 @@ if i32.const 0 i32.const 128 - i32.const 223 + i32.const 241 i32.const 3 call $~lib/builtins/abort unreachable @@ -8619,7 +8841,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 3056 + i32.const 3072 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8630,7 +8852,7 @@ if i32.const 0 i32.const 128 - i32.const 225 + i32.const 243 i32.const 3 call $~lib/builtins/abort unreachable @@ -8648,7 +8870,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 3136 + i32.const 3152 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8659,7 +8881,7 @@ if i32.const 0 i32.const 128 - i32.const 227 + i32.const 245 i32.const 3 call $~lib/builtins/abort unreachable @@ -8677,7 +8899,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 3216 + i32.const 3232 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8688,13 +8910,13 @@ if i32.const 0 i32.const 128 - i32.const 229 + i32.const 247 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3296 + i32.const 3312 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8711,13 +8933,13 @@ if i32.const 0 i32.const 128 - i32.const 236 + i32.const 254 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3568 + i32.const 3584 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8734,13 +8956,13 @@ if i32.const 0 i32.const 128 - i32.const 238 + i32.const 256 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3616 + i32.const 3632 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8757,13 +8979,13 @@ if i32.const 0 i32.const 128 - i32.const 240 + i32.const 258 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3664 + i32.const 3680 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8780,13 +9002,13 @@ if i32.const 0 i32.const 128 - i32.const 244 + i32.const 262 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3728 + i32.const 3744 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8803,13 +9025,13 @@ if i32.const 0 i32.const 128 - i32.const 248 + i32.const 266 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3808 + i32.const 3824 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8826,13 +9048,13 @@ if i32.const 0 i32.const 128 - i32.const 252 + i32.const 270 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3888 + i32.const 3904 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8849,13 +9071,13 @@ if i32.const 0 i32.const 128 - i32.const 255 + i32.const 273 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3920 + i32.const 3936 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8872,13 +9094,13 @@ if i32.const 0 i32.const 128 - i32.const 258 + i32.const 276 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3952 + i32.const 3968 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8895,13 +9117,13 @@ if i32.const 0 i32.const 128 - i32.const 261 + i32.const 279 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3984 + i32.const 4000 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8918,13 +9140,13 @@ if i32.const 0 i32.const 128 - i32.const 264 + i32.const 282 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3296 + i32.const 3312 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8941,13 +9163,13 @@ if i32.const 0 i32.const 128 - i32.const 267 + i32.const 285 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4032 + i32.const 4048 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8964,13 +9186,13 @@ if i32.const 0 i32.const 128 - i32.const 270 + i32.const 288 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3664 + i32.const 3680 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8987,7 +9209,7 @@ if i32.const 0 i32.const 128 - i32.const 273 + i32.const 291 i32.const 3 call $~lib/builtins/abort unreachable @@ -9012,7 +9234,7 @@ if i32.const 0 i32.const 128 - i32.const 291 + i32.const 309 i32.const 3 call $~lib/builtins/abort unreachable @@ -9025,7 +9247,7 @@ if i32.const 0 i32.const 128 - i32.const 292 + i32.const 310 i32.const 3 call $~lib/builtins/abort unreachable @@ -9038,7 +9260,7 @@ if i32.const 0 i32.const 128 - i32.const 294 + i32.const 312 i32.const 3 call $~lib/builtins/abort unreachable @@ -9051,7 +9273,7 @@ if i32.const 0 i32.const 128 - i32.const 295 + i32.const 313 i32.const 3 call $~lib/builtins/abort unreachable @@ -9064,7 +9286,7 @@ if i32.const 0 i32.const 128 - i32.const 297 + i32.const 315 i32.const 3 call $~lib/builtins/abort unreachable @@ -9077,7 +9299,7 @@ if i32.const 0 i32.const 128 - i32.const 298 + i32.const 316 i32.const 3 call $~lib/builtins/abort unreachable @@ -9090,7 +9312,7 @@ if i32.const 0 i32.const 128 - i32.const 300 + i32.const 318 i32.const 3 call $~lib/builtins/abort unreachable @@ -9103,7 +9325,7 @@ if i32.const 0 i32.const 128 - i32.const 301 + i32.const 319 i32.const 3 call $~lib/builtins/abort unreachable @@ -9115,7 +9337,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4096 + i32.const 4112 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9126,7 +9348,7 @@ if i32.const 0 i32.const 128 - i32.const 303 + i32.const 321 i32.const 3 call $~lib/builtins/abort unreachable @@ -9138,7 +9360,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4176 + i32.const 4192 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9149,7 +9371,7 @@ if i32.const 0 i32.const 128 - i32.const 304 + i32.const 322 i32.const 3 call $~lib/builtins/abort unreachable @@ -9178,7 +9400,7 @@ if i32.const 0 i32.const 128 - i32.const 309 + i32.const 327 i32.const 3 call $~lib/builtins/abort unreachable @@ -9191,7 +9413,7 @@ if i32.const 0 i32.const 128 - i32.const 310 + i32.const 328 i32.const 3 call $~lib/builtins/abort unreachable @@ -9204,7 +9426,7 @@ if i32.const 0 i32.const 128 - i32.const 311 + i32.const 329 i32.const 3 call $~lib/builtins/abort unreachable @@ -9217,7 +9439,7 @@ if i32.const 0 i32.const 128 - i32.const 312 + i32.const 330 i32.const 3 call $~lib/builtins/abort unreachable @@ -9230,7 +9452,7 @@ if i32.const 0 i32.const 128 - i32.const 313 + i32.const 331 i32.const 3 call $~lib/builtins/abort unreachable @@ -9243,7 +9465,7 @@ if i32.const 0 i32.const 128 - i32.const 314 + i32.const 332 i32.const 3 call $~lib/builtins/abort unreachable @@ -9256,7 +9478,7 @@ if i32.const 0 i32.const 128 - i32.const 315 + i32.const 333 i32.const 3 call $~lib/builtins/abort unreachable @@ -9268,7 +9490,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4256 + i32.const 4272 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9279,7 +9501,7 @@ if i32.const 0 i32.const 128 - i32.const 317 + i32.const 335 i32.const 3 call $~lib/builtins/abort unreachable @@ -9291,7 +9513,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4336 + i32.const 4352 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9302,7 +9524,7 @@ if i32.const 0 i32.const 128 - i32.const 318 + i32.const 336 i32.const 3 call $~lib/builtins/abort unreachable @@ -9420,8 +9642,8 @@ i32.gt_s end if - i32.const 640 - i32.const 768 + i32.const 656 + i32.const 784 i32.const 373 i32.const 5 call $~lib/builtins/abort @@ -9430,7 +9652,7 @@ local.get $0 i32.eqz if - i32.const 832 + i32.const 848 local.set $8 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -9702,7 +9924,7 @@ i32.const 0 i32.eq if - i32.const 2416 + i32.const 2432 local.set $6 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -9818,7 +10040,7 @@ local.get $10 i32.eqz if - i32.const 2416 + i32.const 2432 local.set $12 global.get $~lib/memory/__stack_pointer i32.const 4 @@ -9937,7 +10159,7 @@ i32.ge_u if i32.const 368 - i32.const 3392 + i32.const 3408 i32.const 92 i32.const 42 call $~lib/builtins/abort @@ -9961,8 +10183,8 @@ local.get $2 i32.eqz if - i32.const 3440 - i32.const 3392 + i32.const 3456 + i32.const 3408 i32.const 96 i32.const 40 call $~lib/builtins/abort From e23479a246bdb2c68c907bf698f0a0ba34d343af Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Sun, 25 Apr 2021 10:01:47 +0300 Subject: [PATCH 43/47] remove export --- std/assembly/date.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 007f8fa12d..5e540c3669 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -270,7 +270,7 @@ function daysSinceEpoch(y: i32, m: i32, d: i32): i32 { } // TomohikoSakamoto algorithm from https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week -export function dayOfWeek(year: i32, month: i32, day: i32): i32 { +function dayOfWeek(year: i32, month: i32, day: i32): i32 { const tab = memory.data([0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4]); year -= i32(month < 3); From ccc731bdfcb06f5e9fef736755efb866d0b9dbef Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Sun, 25 Apr 2021 10:05:34 +0300 Subject: [PATCH 44/47] fix --- std/assembly/date.ts | 3 ++- tests/compiler/std/date.optimized.wat | 30 ++++++++++++++++++--------- tests/compiler/std/date.untouched.wat | 12 +++++++++++ 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 5e540c3669..9b08af3d12 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -276,5 +276,6 @@ function dayOfWeek(year: i32, month: i32, day: i32): i32 { year -= i32(month < 3); year += year / 4 - year / 100 + year / 400; month = load(tab + month - 1); - return (year + month + day) % 7; + const w = (year + month + day) % 7; + return w + (w < 0 ? 7 : 0); } diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index 22585910cd..0614060754 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -2312,37 +2312,47 @@ ) (func $~lib/date/Date#getUTCDay (param $0 i32) (result i32) (local $1 i32) - local.get $0 - i32.load offset=8 + (local $2 i32) local.get $0 i32.load local.get $0 i32.load offset=4 - local.tee $1 + local.tee $2 i32.const 3 i32.lt_s i32.sub - local.tee $0 + local.set $1 local.get $0 + i32.load offset=8 + local.get $2 + i32.const 1579 + i32.add + i32.load8_u + local.get $1 + local.get $1 i32.const 4 i32.div_s - local.get $0 + local.get $1 i32.const 100 i32.div_s i32.sub - local.get $0 + local.get $1 i32.const 400 i32.div_s i32.add i32.add - local.get $1 - i32.const 1579 - i32.add - i32.load8_u i32.add i32.add i32.const 7 i32.rem_s + local.tee $0 + i32.const 7 + i32.const 0 + local.get $0 + i32.const 0 + i32.lt_s + select + i32.add ) (func $~lib/number/I32#toString (param $0 i32) (result i32) (local $1 i32) diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index d47d34b822..c86f13ea0e 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -3069,6 +3069,7 @@ drop ) (func $~lib/date/dayOfWeek (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) local.get $0 local.get $1 i32.const 3 @@ -3103,6 +3104,17 @@ i32.add i32.const 7 i32.rem_s + local.set $3 + local.get $3 + local.get $3 + i32.const 0 + i32.lt_s + if (result i32) + i32.const 7 + else + i32.const 0 + end + i32.add ) (func $~lib/date/Date#getUTCDay (param $0 i32) (result i32) local.get $0 From 1db25ee491e9aee0d5a50fc7195f9e1cc85e9c74 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Sun, 25 Apr 2021 10:28:25 +0300 Subject: [PATCH 45/47] opt floorMod --- std/assembly/date.ts | 3 +- tests/compiler/std/date.optimized.wat | 168 +++++++++---------------- tests/compiler/std/date.untouched.wat | 173 ++++++++++---------------- 3 files changed, 127 insertions(+), 217 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 9b08af3d12..549b5acdfe 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -235,7 +235,8 @@ function epochMillis( // @ts-ignore: decorator @inline function floorMod(a: T, b: T): T { - return (a >= 0 ? a % b : a - (a - b + 1) / b * b) as T; + var m = a % b; + return m + (m < 0 ? b : 0) as T; } function invalidDate(millis: i64): bool { diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index 0614060754..7f96899c9a 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -2030,24 +2030,16 @@ (local $1 i64) local.get $0 i64.load offset=16 + i64.const 86400000 + i64.rem_s local.tee $1 + i64.const 86400000 i64.const 0 - i64.ge_s - if (result i64) - local.get $1 - i64.const 86400000 - i64.rem_s - else - local.get $1 - local.get $1 - i64.const 86399999 - i64.sub - i64.const 86400000 - i64.div_s - i64.const 86400000 - i64.mul - i64.sub - end + local.get $1 + i64.const 0 + i64.lt_s + select + i64.add i32.wrap_i64 i32.const 3600000 i32.div_s @@ -2056,24 +2048,16 @@ (local $1 i64) local.get $0 i64.load offset=16 + i64.const 3600000 + i64.rem_s local.tee $1 + i64.const 3600000 i64.const 0 - i64.ge_s - if (result i64) - local.get $1 - i64.const 3600000 - i64.rem_s - else - local.get $1 - local.get $1 - i64.const 3599999 - i64.sub - i64.const 3600000 - i64.div_s - i64.const 3600000 - i64.mul - i64.sub - end + local.get $1 + i64.const 0 + i64.lt_s + select + i64.add i32.wrap_i64 i32.const 60000 i32.div_s @@ -2082,24 +2066,16 @@ (local $1 i64) local.get $0 i64.load offset=16 + i64.const 60000 + i64.rem_s local.tee $1 + i64.const 60000 i64.const 0 - i64.ge_s - if (result i64) - local.get $1 - i64.const 60000 - i64.rem_s - else - local.get $1 - local.get $1 - i64.const 59999 - i64.sub - i64.const 60000 - i64.div_s - i64.const 60000 - i64.mul - i64.sub - end + local.get $1 + i64.const 0 + i64.lt_s + select + i64.add i32.wrap_i64 i32.const 1000 i32.div_s @@ -2108,24 +2084,16 @@ (local $1 i64) local.get $0 i64.load offset=16 + i64.const 1000 + i64.rem_s local.tee $1 + i64.const 1000 i64.const 0 - i64.ge_s - if (result i64) - local.get $1 - i64.const 1000 - i64.rem_s - else - local.get $1 - local.get $1 - i64.const 999 - i64.sub - i64.const 1000 - i64.div_s - i64.const 1000 - i64.mul - i64.sub - end + local.get $1 + i64.const 0 + i64.lt_s + select + i64.add i32.wrap_i64 ) (func $~lib/date/Date#setUTCMilliseconds (param $0 i32) (param $1 i32) @@ -2192,26 +2160,18 @@ return end local.get $0 + i64.const 86400000 + i64.const 0 local.get $0 i64.load offset=16 + i64.const 86400000 + i64.rem_s local.tee $2 i64.const 0 - i64.ge_s - if (result i64) - local.get $2 - i64.const 86400000 - i64.rem_s - else - local.get $2 - local.get $2 - i64.const 86399999 - i64.sub - i64.const 86400000 - i64.div_s - i64.const 86400000 - i64.mul - i64.sub - end + i64.lt_s + select + local.get $2 + i64.add local.get $0 i32.load local.get $0 @@ -2234,26 +2194,18 @@ return end local.get $0 + i64.const 86400000 + i64.const 0 local.get $0 i64.load offset=16 + i64.const 86400000 + i64.rem_s local.tee $2 i64.const 0 - i64.ge_s - if (result i64) - local.get $2 - i64.const 86400000 - i64.rem_s - else - local.get $2 - local.get $2 - i64.const 86399999 - i64.sub - i64.const 86400000 - i64.div_s - i64.const 86400000 - i64.mul - i64.sub - end + i64.lt_s + select + local.get $2 + i64.add local.get $0 i32.load local.get $1 @@ -2278,26 +2230,18 @@ return end local.get $0 + i64.const 86400000 + i64.const 0 local.get $0 i64.load offset=16 + i64.const 86400000 + i64.rem_s local.tee $2 i64.const 0 - i64.ge_s - if (result i64) - local.get $2 - i64.const 86400000 - i64.rem_s - else - local.get $2 - local.get $2 - i64.const 86399999 - i64.sub - i64.const 86400000 - i64.div_s - i64.const 86400000 - i64.mul - i64.sub - end + i64.lt_s + select + local.get $2 + i64.add local.get $1 local.get $0 i32.load offset=4 diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index c86f13ea0e..6a0865ec50 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -2722,6 +2722,7 @@ (func $~lib/date/Date#getUTCHours (param $0 i32) (result i32) (local $1 i64) (local $2 i64) + (local $3 i64) local.get $0 i64.load offset=16 local.set $2 @@ -2729,25 +2730,19 @@ i64.extend_i32_s local.set $1 local.get $2 + local.get $1 + i64.rem_s + local.set $3 + local.get $3 + local.get $3 i64.const 0 - i64.ge_s + i64.lt_s if (result i64) - local.get $2 local.get $1 - i64.rem_s else - local.get $2 - local.get $2 - local.get $1 - i64.sub - i64.const 1 - i64.add - local.get $1 - i64.div_s - local.get $1 - i64.mul - i64.sub + i64.const 0 end + i64.add i32.wrap_i64 i32.const 3600000 i32.div_s @@ -2755,6 +2750,7 @@ (func $~lib/date/Date#getUTCMinutes (param $0 i32) (result i32) (local $1 i64) (local $2 i64) + (local $3 i64) local.get $0 i64.load offset=16 local.set $2 @@ -2762,25 +2758,19 @@ i64.extend_i32_s local.set $1 local.get $2 + local.get $1 + i64.rem_s + local.set $3 + local.get $3 + local.get $3 i64.const 0 - i64.ge_s + i64.lt_s if (result i64) - local.get $2 local.get $1 - i64.rem_s else - local.get $2 - local.get $2 - local.get $1 - i64.sub - i64.const 1 - i64.add - local.get $1 - i64.div_s - local.get $1 - i64.mul - i64.sub + i64.const 0 end + i64.add i32.wrap_i64 i32.const 60000 i32.div_s @@ -2788,6 +2778,7 @@ (func $~lib/date/Date#getUTCSeconds (param $0 i32) (result i32) (local $1 i64) (local $2 i64) + (local $3 i64) local.get $0 i64.load offset=16 local.set $2 @@ -2795,25 +2786,19 @@ i64.extend_i32_s local.set $1 local.get $2 + local.get $1 + i64.rem_s + local.set $3 + local.get $3 + local.get $3 i64.const 0 - i64.ge_s + i64.lt_s if (result i64) - local.get $2 local.get $1 - i64.rem_s else - local.get $2 - local.get $2 - local.get $1 - i64.sub - i64.const 1 - i64.add - local.get $1 - i64.div_s - local.get $1 - i64.mul - i64.sub + i64.const 0 end + i64.add i32.wrap_i64 i32.const 1000 i32.div_s @@ -2821,6 +2806,7 @@ (func $~lib/date/Date#getUTCMilliseconds (param $0 i32) (result i32) (local $1 i64) (local $2 i64) + (local $3 i64) local.get $0 i64.load offset=16 local.set $2 @@ -2828,25 +2814,19 @@ i64.extend_i32_s local.set $1 local.get $2 + local.get $1 + i64.rem_s + local.set $3 + local.get $3 + local.get $3 i64.const 0 - i64.ge_s + i64.lt_s if (result i64) - local.get $2 local.get $1 - i64.rem_s else - local.get $2 - local.get $2 - local.get $1 - i64.sub - i64.const 1 - i64.add - local.get $1 - i64.div_s - local.get $1 - i64.mul - i64.sub + i64.const 0 end + i64.add i32.wrap_i64 ) (func $~lib/date/Date#setUTCMilliseconds (param $0 i32) (param $1 i32) @@ -2911,6 +2891,7 @@ (local $2 i64) (local $3 i64) (local $4 i64) + (local $5 i64) local.get $0 i32.load offset=8 local.get $1 @@ -2925,26 +2906,20 @@ i64.extend_i32_s local.set $2 local.get $3 + local.get $2 + i64.rem_s + local.set $4 + local.get $4 + local.get $4 i64.const 0 - i64.ge_s + i64.lt_s if (result i64) - local.get $3 local.get $2 - i64.rem_s else - local.get $3 - local.get $3 - local.get $2 - i64.sub - i64.const 1 - i64.add - local.get $2 - i64.div_s - local.get $2 - i64.mul - i64.sub + i64.const 0 end - local.set $4 + i64.add + local.set $5 local.get $0 local.get $0 i32.load @@ -2955,7 +2930,7 @@ i64.extend_i32_s i64.const 86400000 i64.mul - local.get $4 + local.get $5 i64.add call $~lib/date/Date#setTime drop @@ -2964,6 +2939,7 @@ (local $2 i64) (local $3 i64) (local $4 i64) + (local $5 i64) local.get $0 i32.load offset=4 local.get $1 @@ -2978,26 +2954,20 @@ i64.extend_i32_s local.set $2 local.get $3 + local.get $2 + i64.rem_s + local.set $4 + local.get $4 + local.get $4 i64.const 0 - i64.ge_s + i64.lt_s if (result i64) - local.get $3 local.get $2 - i64.rem_s else - local.get $3 - local.get $3 - local.get $2 - i64.sub - i64.const 1 - i64.add - local.get $2 - i64.div_s - local.get $2 - i64.mul - i64.sub + i64.const 0 end - local.set $4 + i64.add + local.set $5 local.get $0 local.get $0 i32.load @@ -3010,7 +2980,7 @@ i64.extend_i32_s i64.const 86400000 i64.mul - local.get $4 + local.get $5 i64.add call $~lib/date/Date#setTime drop @@ -3019,6 +2989,7 @@ (local $2 i64) (local $3 i64) (local $4 i64) + (local $5 i64) local.get $0 i32.load local.get $1 @@ -3033,26 +3004,20 @@ i64.extend_i32_s local.set $2 local.get $3 + local.get $2 + i64.rem_s + local.set $4 + local.get $4 + local.get $4 i64.const 0 - i64.ge_s + i64.lt_s if (result i64) - local.get $3 local.get $2 - i64.rem_s else - local.get $3 - local.get $3 - local.get $2 - i64.sub - i64.const 1 - i64.add - local.get $2 - i64.div_s - local.get $2 - i64.mul - i64.sub + i64.const 0 end - local.set $4 + i64.add + local.set $5 local.get $0 local.get $1 local.get $0 @@ -3063,7 +3028,7 @@ i64.extend_i32_s i64.const 86400000 i64.mul - local.get $4 + local.get $5 i64.add call $~lib/date/Date#setTime drop From 18fdc7da2c245940cad1e265db233aa1c5f1fd62 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Sun, 25 Apr 2021 10:31:26 +0300 Subject: [PATCH 46/47] refactor dayOfWeek --- std/assembly/date.ts | 3 +-- tests/compiler/std/date.untouched.wat | 12 +++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 549b5acdfe..245f88f9ba 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -277,6 +277,5 @@ function dayOfWeek(year: i32, month: i32, day: i32): i32 { year -= i32(month < 3); year += year / 4 - year / 100 + year / 400; month = load(tab + month - 1); - const w = (year + month + day) % 7; - return w + (w < 0 ? 7 : 0); + return floorMod(year + month + day, 7); } diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 6a0865ec50..e8092bdef1 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -3035,6 +3035,8 @@ ) (func $~lib/date/dayOfWeek (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) + (local $4 i32) + (local $5 i32) local.get $0 local.get $1 i32.const 3 @@ -3067,15 +3069,19 @@ i32.add local.get $2 i32.add + local.set $4 i32.const 7 - i32.rem_s local.set $3 + local.get $4 local.get $3 - local.get $3 + i32.rem_s + local.set $5 + local.get $5 + local.get $5 i32.const 0 i32.lt_s if (result i32) - i32.const 7 + local.get $3 else i32.const 0 end From 2134f60500b3b96c1d25c43257e16b3512740be7 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Sun, 25 Apr 2021 11:04:24 +0300 Subject: [PATCH 47/47] floorMod -> euclidRem --- std/assembly/date.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 245f88f9ba..052bd7ad23 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -131,19 +131,19 @@ export class Date { } getUTCHours(): i32 { - return i32(floorMod(this.epochMillis, MILLIS_PER_DAY)) / MILLIS_PER_HOUR; + return i32(euclidRem(this.epochMillis, MILLIS_PER_DAY)) / MILLIS_PER_HOUR; } getUTCMinutes(): i32 { - return i32(floorMod(this.epochMillis, MILLIS_PER_HOUR)) / MILLIS_PER_MINUTE; + return i32(euclidRem(this.epochMillis, MILLIS_PER_HOUR)) / MILLIS_PER_MINUTE; } getUTCSeconds(): i32 { - return i32(floorMod(this.epochMillis, MILLIS_PER_MINUTE)) / MILLIS_PER_SECOND; + return i32(euclidRem(this.epochMillis, MILLIS_PER_MINUTE)) / MILLIS_PER_SECOND; } getUTCMilliseconds(): i32 { - return i32(floorMod(this.epochMillis, MILLIS_PER_SECOND)); + return i32(euclidRem(this.epochMillis, MILLIS_PER_SECOND)); } setUTCMilliseconds(millis: i32): void { @@ -164,19 +164,19 @@ export class Date { setUTCDate(day: i32): void { if (this.day == day) return; - var ms = floorMod(this.epochMillis, MILLIS_PER_DAY); + var ms = euclidRem(this.epochMillis, MILLIS_PER_DAY); this.setTime(i64(daysSinceEpoch(this.year, this.month, day)) * MILLIS_PER_DAY + ms); } setUTCMonth(month: i32): void { if (this.month == month) return; - var ms = floorMod(this.epochMillis, MILLIS_PER_DAY); + var ms = euclidRem(this.epochMillis, MILLIS_PER_DAY); this.setTime(i64(daysSinceEpoch(this.year, month + 1, this.day)) * MILLIS_PER_DAY + ms); } setUTCFullYear(year: i32): void { if (this.year == year) return; - var ms = floorMod(this.epochMillis, MILLIS_PER_DAY); + var ms = euclidRem(this.epochMillis, MILLIS_PER_DAY); this.setTime(i64(daysSinceEpoch(year, this.month, this.day)) * MILLIS_PER_DAY + ms); } @@ -234,7 +234,7 @@ function epochMillis( } // @ts-ignore: decorator -@inline function floorMod(a: T, b: T): T { +@inline function euclidRem(a: T, b: T): T { var m = a % b; return m + (m < 0 ? b : 0) as T; } @@ -277,5 +277,5 @@ function dayOfWeek(year: i32, month: i32, day: i32): i32 { year -= i32(month < 3); year += year / 4 - year / 100 + year / 400; month = load(tab + month - 1); - return floorMod(year + month + day, 7); + return euclidRem(year + month + day, 7); }