From a127af568feb672286bb2571679aa3458fb18a8e Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 1 Aug 2022 14:01:42 +0300 Subject: [PATCH 1/6] refactor stringify methods of Date --- std/assembly/date.ts | 118 +- tests/compiler/std/date.debug.wat | 1758 +++++++++++++---------- tests/compiler/std/date.release.wat | 2032 ++++++++++++++------------- 3 files changed, 2164 insertions(+), 1744 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 230f995c6d..a6a9f27dfd 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -182,107 +182,83 @@ 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; - if (isNeg || year >= 10000) { - yearStr = (isNeg ? "-" : "+") + abs(year).toString().padStart(6, "0"); - } else { - yearStr = year.toString().padStart(4, "0"); - } - return ( - yearStr + - "-" + - this.month.toString().padStart(2, "0") + - "-" + - this.day.toString().padStart(2, "0") + - "T" + - this.getUTCHours().toString().padStart(2, "0") + - ":" + - this.getUTCMinutes().toString().padStart(2, "0") + - ":" + - this.getUTCSeconds().toString().padStart(2, "0") + - "." + - this.getUTCMilliseconds().toString().padStart(3, "0") + - "Z" - ); + var yr = this.year; + var isNeg = yr < 0; + var year = (isNeg || yr >= 10000) + ? (isNeg ? "-" : "+") + abs(yr).toString().padStart(6, "0") + : yr.toString().padStart(4, "0"); + var month = this.month.toString().padStart(2, "0"); + var day = this.day.toString().padStart(2, "0"); + var hour = this.getUTCHours().toString().padStart(2, "0"); + var min = this.getUTCMinutes().toString().padStart(2, "0"); + var sec = this.getUTCSeconds().toString().padStart(2, "0"); + var ms = this.getUTCMilliseconds().toString().padStart(3, "0"); + + return `${year}-${month}-${day}T${hour}:${min}:${sec}.${ms}Z`; } toUTCString(): string { - const weeks: StaticArray = [ - "Sun, ", "Mon, ", "Tue, ", "Wed, ", "Thu, ", "Fri, ", "Sat, " - ]; - - const months: StaticArray = [ - " Jan ", " Feb ", " Mar ", " Apr ", " May ", " Jun ", - " Jul ", " Aug ", " Sep ", " Oct ", " Nov ", " Dec " - ]; + const + weeks: StaticArray = [ + "Sun, ", "Mon, ", "Tue, ", "Wed, ", "Thu, ", "Fri, ", "Sat, " + ], + months: StaticArray = [ + " Jan ", " Feb ", " Mar ", " Apr ", " May ", " Jun ", + " Jul ", " Aug ", " Sep ", " Oct ", " Nov ", " Dec " + ]; var mo = this.month; var da = this.day; var yr = this.year; var wd = dayOfWeek(yr, mo, da); var year = abs(yr).toString().padStart(4, "0"); - if (yr < 0) year = "-" + year; - - return ( - unchecked(weeks[wd]) + - da.toString().padStart(2, "0") + - unchecked(months[mo - 1]) + - year + - " " + - this.getUTCHours().toString().padStart(2, "0") + - ":" + - this.getUTCMinutes().toString().padStart(2, "0") + - ":" + - this.getUTCSeconds().toString().padStart(2, "0") + - " GMT" - ); + var month = unchecked(months[mo - 1]); + var week = unchecked(weeks[wd]); + var day = da.toString().padStart(2, "0"); + var hour = this.getUTCHours().toString().padStart(2, "0"); + var min = this.getUTCMinutes().toString().padStart(2, "0"); + var sec = this.getUTCSeconds().toString().padStart(2, "0"); + + return `${week}${day}${month}${yr < 0 ? "-" : ""}${year} ${hour}:${min}:${sec} GMT`; } toDateString(): string { // TODO: use u64 static data instead 4 chars // also use stream itoa variants. - const weeks: StaticArray = [ - "Sun ", "Mon ", "Tue ", "Wed ", "Thu ", "Fri ", "Sat " - ]; - - const months: StaticArray = [ - "Jan ", "Feb ", "Mar ", "Apr ", "May ", "Jun ", - "Jul ", "Aug ", "Sep ", "Oct ", "Nov ", "Dec " - ]; + const + weeks: StaticArray = [ + "Sun ", "Mon ", "Tue ", "Wed ", "Thu ", "Fri ", "Sat " + ], + months: StaticArray = [ + "Jan ", "Feb ", "Mar ", "Apr ", "May ", "Jun ", + "Jul ", "Aug ", "Sep ", "Oct ", "Nov ", "Dec " + ]; var mo = this.month; var da = this.day; var yr = this.year; var wd = dayOfWeek(yr, mo, da); var year = abs(yr).toString().padStart(4, "0"); - if (yr < 0) year = "-" + year; - - return ( - unchecked(weeks[wd]) + - unchecked(months[mo - 1]) + - da.toString().padStart(2, "0") + - " " + year - ); + var month = unchecked(months[mo - 1]); + var week = unchecked(weeks[wd]); + var day = da.toString().padStart(2, "0"); + + return `${week}${month}${day}${yr < 0 ? " -" : " "}${year}`; } // Note: it uses UTC time instead local time (without timezone offset) toTimeString(): string { + var hour = this.getUTCHours().toString().padStart(2, "0"); + var min = this.getUTCMinutes().toString().padStart(2, "0"); + var sec = this.getUTCSeconds().toString().padStart(2, "0"); // TODO: add timezone - return ( - this.getUTCHours().toString().padStart(2, "0") + - ":" + - this.getUTCMinutes().toString().padStart(2, "0") + - ":" + - this.getUTCSeconds().toString().padStart(2, "0") - ); + return `${hour}:${min}:${sec}`; } // Note: it uses UTC datetime instead local datetime (without timezone offset) toString(): string { - return this.toDateString() + " " + this.toTimeString(); + return `${this.toDateString()} ${this.toTimeString()}`; } } diff --git a/tests/compiler/std/date.debug.wat b/tests/compiler/std/date.debug.wat index 311477d807..ff9164e27b 100644 --- a/tests/compiler/std/date.debug.wat +++ b/tests/compiler/std/date.debug.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_=>_i32 (func (param i32 i32 i32) (result i32))) - (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 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_i32_i32_i32_i32_i32_i32_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) @@ -39,10 +39,10 @@ (global $~lib/native/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) - (global $~lib/rt/__rtti_base i32 (i32.const 6480)) - (global $~lib/memory/__data_end i32 (i32.const 6540)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 22924)) - (global $~lib/memory/__heap_base i32 (i32.const 22924)) + (global $~lib/rt/__rtti_base i32 (i32.const 6800)) + (global $~lib/memory/__data_end i32 (i32.const 6860)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 23244)) + (global $~lib/memory/__heap_base i32 (i32.const 23244)) (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") @@ -70,86 +70,91 @@ (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) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00S\00u\00n\00 \00\00\00\00\00") - (data (i32.const 3324) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00M\00o\00n\00 \00\00\00\00\00") - (data (i32.const 3356) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00T\00u\00e\00 \00\00\00\00\00") - (data (i32.const 3388) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00W\00e\00d\00 \00\00\00\00\00") - (data (i32.const 3420) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00T\00h\00u\00 \00\00\00\00\00") - (data (i32.const 3452) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00F\00r\00i\00 \00\00\00\00\00") - (data (i32.const 3484) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00S\00a\00t\00 \00\00\00\00\00") - (data (i32.const 3516) ",\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\1c\00\00\00\f0\0c\00\00\10\0d\00\000\0d\00\00P\0d\00\00p\0d\00\00\90\0d\00\00\b0\0d\00\00") - (data (i32.const 3564) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00J\00a\00n\00 \00\00\00\00\00") - (data (i32.const 3596) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00F\00e\00b\00 \00\00\00\00\00") - (data (i32.const 3628) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00M\00a\00r\00 \00\00\00\00\00") - (data (i32.const 3660) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00A\00p\00r\00 \00\00\00\00\00") - (data (i32.const 3692) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00M\00a\00y\00 \00\00\00\00\00") - (data (i32.const 3724) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00J\00u\00n\00 \00\00\00\00\00") - (data (i32.const 3756) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00J\00u\00l\00 \00\00\00\00\00") - (data (i32.const 3788) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00A\00u\00g\00 \00\00\00\00\00") - (data (i32.const 3820) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00S\00e\00p\00 \00\00\00\00\00") - (data (i32.const 3852) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00O\00c\00t\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\00N\00o\00v\00 \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\00D\00e\00c\00 \00\00\00\00\00") - (data (i32.const 3948) "L\00\00\00\00\00\00\00\00\00\00\00\04\00\00\000\00\00\00\00\0e\00\00 \0e\00\00@\0e\00\00`\0e\00\00\80\0e\00\00\a0\0e\00\00\c0\0e\00\00\e0\0e\00\00\00\0f\00\00 \0f\00\00@\0f\00\00`\0f\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 4028) "\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 4060) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1e\00\00\00W\00e\00d\00 \00J\00a\00n\00 \000\001\00 \000\000\002\000\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 4124) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1e\00\00\00S\00u\00n\00 \00F\00e\00b\00 \000\002\00 \002\000\002\000\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 4188) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00 \00\00\00T\00h\00u\00 \00J\00u\00l\00 \000\001\00 \00-\000\000\000\001\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 4252) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\000\000\00:\000\000\00:\000\000\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 4300) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\002\003\00:\005\009\00:\005\009\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 4348) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00S\00u\00n\00,\00 \00\00\00") - (data (i32.const 4380) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00M\00o\00n\00,\00 \00\00\00") - (data (i32.const 4412) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00T\00u\00e\00,\00 \00\00\00") - (data (i32.const 4444) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00W\00e\00d\00,\00 \00\00\00") - (data (i32.const 4476) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00T\00h\00u\00,\00 \00\00\00") - (data (i32.const 4508) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00F\00r\00i\00,\00 \00\00\00") - (data (i32.const 4540) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00S\00a\00t\00,\00 \00\00\00") - (data (i32.const 4572) ",\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\1c\00\00\00\10\11\00\000\11\00\00P\11\00\00p\11\00\00\90\11\00\00\b0\11\00\00\d0\11\00\00") - (data (i32.const 4620) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00J\00a\00n\00 \00\00\00") - (data (i32.const 4652) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00F\00e\00b\00 \00\00\00") - (data (i32.const 4684) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00M\00a\00r\00 \00\00\00") - (data (i32.const 4716) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00A\00p\00r\00 \00\00\00") - (data (i32.const 4748) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00M\00a\00y\00 \00\00\00") - (data (i32.const 4780) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00J\00u\00n\00 \00\00\00") - (data (i32.const 4812) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00J\00u\00l\00 \00\00\00") - (data (i32.const 4844) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00A\00u\00g\00 \00\00\00") - (data (i32.const 4876) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00S\00e\00p\00 \00\00\00") - (data (i32.const 4908) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00O\00c\00t\00 \00\00\00") - (data (i32.const 4940) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00N\00o\00v\00 \00\00\00") - (data (i32.const 4972) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00D\00e\00c\00 \00\00\00") - (data (i32.const 5004) "L\00\00\00\00\00\00\00\00\00\00\00\04\00\00\000\00\00\00 \12\00\00@\12\00\00`\12\00\00\80\12\00\00\a0\12\00\00\c0\12\00\00\e0\12\00\00\00\13\00\00 \13\00\00@\13\00\00`\13\00\00\80\13\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 5084) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00 \00G\00M\00T\00\00\00\00\00") - (data (i32.const 5116) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00:\00\00\00W\00e\00d\00,\00 \000\001\00 \00J\00a\00n\00 \000\000\002\000\00 \000\000\00:\000\000\00:\000\000\00 \00G\00M\00T\00\00\00") - (data (i32.const 5196) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00:\00\00\00M\00o\00n\00,\00 \000\003\00 \00F\00e\00b\00 \002\000\002\000\00 \001\004\00:\005\003\00:\003\003\00 \00G\00M\00T\00\00\00") - (data (i32.const 5276) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00<\00\00\00T\00h\00u\00,\00 \000\001\00 \00J\00u\00l\00 \00-\000\000\000\001\00 \000\000\00:\000\000\00:\000\000\00 \00G\00M\00T\00") - (data (i32.const 5356) ",\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 5404) ",\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 5452) ",\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 5500) "|\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 5628) ",\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 5676) ",\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 5724) "<\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 5788) "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 5868) "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 5948) "\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 5980) "\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 6012) "\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 6044) ",\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 6092) "<\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 6156) "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 6236) "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 6316) "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 6396) "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 6480) "\07\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00\04A\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") + (data (i32.const 2572) "L\00\00\00\03\00\00\00\00\00\00\00\04\00\00\00<\00\00\00\80\t\00\00\00\00\00\00P\02\00\00\00\00\00\00P\02\00\00\00\00\00\00\a0\t\00\00\00\00\00\00\c0\t\00\00\00\00\00\00\c0\t\00\00\00\00\00\00\e0\t\00\00\00\00\00\00\00\n\00\00") + (data (i32.const 2652) "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 2732) "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 2812) "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 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.\000\002\000\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\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 3052) "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 3132) "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 3212) "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 3292) "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 3372) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00S\00u\00n\00 \00\00\00\00\00") + (data (i32.const 3404) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00M\00o\00n\00 \00\00\00\00\00") + (data (i32.const 3436) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00T\00u\00e\00 \00\00\00\00\00") + (data (i32.const 3468) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00W\00e\00d\00 \00\00\00\00\00") + (data (i32.const 3500) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00T\00h\00u\00 \00\00\00\00\00") + (data (i32.const 3532) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00F\00r\00i\00 \00\00\00\00\00") + (data (i32.const 3564) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00S\00a\00t\00 \00\00\00\00\00") + (data (i32.const 3596) ",\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\1c\00\00\00@\0d\00\00`\0d\00\00\80\0d\00\00\a0\0d\00\00\c0\0d\00\00\e0\0d\00\00\00\0e\00\00") + (data (i32.const 3644) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00J\00a\00n\00 \00\00\00\00\00") + (data (i32.const 3676) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00F\00e\00b\00 \00\00\00\00\00") + (data (i32.const 3708) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00M\00a\00r\00 \00\00\00\00\00") + (data (i32.const 3740) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00A\00p\00r\00 \00\00\00\00\00") + (data (i32.const 3772) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00M\00a\00y\00 \00\00\00\00\00") + (data (i32.const 3804) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00J\00u\00n\00 \00\00\00\00\00") + (data (i32.const 3836) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00J\00u\00l\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\00A\00u\00g\00 \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\00S\00e\00p\00 \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\00O\00c\00t\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\00N\00o\00v\00 \00\00\00\00\00") + (data (i32.const 3996) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00D\00e\00c\00 \00\00\00\00\00") + (data (i32.const 4028) "L\00\00\00\00\00\00\00\00\00\00\00\04\00\00\000\00\00\00P\0e\00\00p\0e\00\00\90\0e\00\00\b0\0e\00\00\d0\0e\00\00\f0\0e\00\00\10\0f\00\000\0f\00\00P\0f\00\00p\0f\00\00\90\0f\00\00\b0\0f\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 4108) "<\00\00\00\03\00\00\00\00\00\00\00\04\00\00\00,\00\00\00\80\t\00\00\00\00\00\00\80\t\00\00\00\00\00\00\80\t\00\00\00\00\00\00\80\t\00\00\00\00\00\00\80\t\00\00\00\00\00\00\80\t\00\00") + (data (i32.const 4172) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\04\00\00\00 \00-\00\00\00\00\00\00\00\00\00") + (data (i32.const 4204) "\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 4236) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1e\00\00\00W\00e\00d\00 \00J\00a\00n\00 \000\001\00 \000\000\002\000\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 4300) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1e\00\00\00S\00u\00n\00 \00F\00e\00b\00 \000\002\00 \002\000\002\000\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 4364) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00 \00\00\00T\00h\00u\00 \00J\00u\00l\00 \000\001\00 \00-\000\000\000\001\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 4428) ",\00\00\00\03\00\00\00\00\00\00\00\04\00\00\00\1c\00\00\00\80\t\00\00\00\00\00\00\c0\t\00\00\00\00\00\00\c0\t\00\00\00\00\00\00\80\t\00\00") + (data (i32.const 4476) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\000\000\00:\000\000\00:\000\000\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 4524) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\002\003\00:\005\009\00:\005\009\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 4572) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00S\00u\00n\00,\00 \00\00\00") + (data (i32.const 4604) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00M\00o\00n\00,\00 \00\00\00") + (data (i32.const 4636) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00T\00u\00e\00,\00 \00\00\00") + (data (i32.const 4668) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00W\00e\00d\00,\00 \00\00\00") + (data (i32.const 4700) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00T\00h\00u\00,\00 \00\00\00") + (data (i32.const 4732) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00F\00r\00i\00,\00 \00\00\00") + (data (i32.const 4764) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00S\00a\00t\00,\00 \00\00\00") + (data (i32.const 4796) ",\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00\1c\00\00\00\f0\11\00\00\10\12\00\000\12\00\00P\12\00\00p\12\00\00\90\12\00\00\b0\12\00\00") + (data (i32.const 4844) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00J\00a\00n\00 \00\00\00") + (data (i32.const 4876) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00F\00e\00b\00 \00\00\00") + (data (i32.const 4908) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00M\00a\00r\00 \00\00\00") + (data (i32.const 4940) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00A\00p\00r\00 \00\00\00") + (data (i32.const 4972) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00M\00a\00y\00 \00\00\00") + (data (i32.const 5004) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00J\00u\00n\00 \00\00\00") + (data (i32.const 5036) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00J\00u\00l\00 \00\00\00") + (data (i32.const 5068) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00A\00u\00g\00 \00\00\00") + (data (i32.const 5100) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00S\00e\00p\00 \00\00\00") + (data (i32.const 5132) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00O\00c\00t\00 \00\00\00") + (data (i32.const 5164) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00N\00o\00v\00 \00\00\00") + (data (i32.const 5196) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00 \00D\00e\00c\00 \00\00\00") + (data (i32.const 5228) "L\00\00\00\00\00\00\00\00\00\00\00\04\00\00\000\00\00\00\00\13\00\00 \13\00\00@\13\00\00`\13\00\00\80\13\00\00\a0\13\00\00\c0\13\00\00\e0\13\00\00\00\14\00\00 \14\00\00@\14\00\00`\14\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 5308) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00 \00G\00M\00T\00\00\00\00\00") + (data (i32.const 5340) "\\\00\00\00\03\00\00\00\00\00\00\00\04\00\00\00D\00\00\00\80\t\00\00\00\00\00\00\80\t\00\00\00\00\00\00\80\t\00\00\00\00\00\00\80\t\00\00\00\00\00\00\80\t\00\00\00\00\00\00\80\10\00\00\00\00\00\00\c0\t\00\00\00\00\00\00\c0\t\00\00\00\00\00\00\d0\14\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 5436) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00:\00\00\00W\00e\00d\00,\00 \000\001\00 \00J\00a\00n\00 \000\000\002\000\00 \000\000\00:\000\000\00:\000\000\00 \00G\00M\00T\00\00\00") + (data (i32.const 5516) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00:\00\00\00M\00o\00n\00,\00 \000\003\00 \00F\00e\00b\00 \002\000\002\000\00 \001\004\00:\005\003\00:\003\003\00 \00G\00M\00T\00\00\00") + (data (i32.const 5596) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00<\00\00\00T\00h\00u\00,\00 \000\001\00 \00J\00u\00l\00 \00-\000\000\000\001\00 \000\000\00:\000\000\00:\000\000\00 \00G\00M\00T\00") + (data (i32.const 5676) ",\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 5724) ",\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 5772) ",\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 5820) "|\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 5948) ",\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 5996) ",\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 6044) "<\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 6108) "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 6188) "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 6268) "\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 6300) "\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 6332) "\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 6364) ",\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 6412) "<\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 6476) "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 6556) "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 6636) "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 6716) "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 6800) "\07\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00\04A\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") (table $0 1 1 funcref) (elem $0 (i32.const 1)) (export "memory" (memory $0)) @@ -3424,6 +3429,117 @@ local.get $1 call $~lib/string/String#concat ) + (func $~lib/rt/itcms/__link (param $0 i32) (param $1 i32) (param $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $1 + i32.eqz + if + return + end + i32.const 1 + drop + local.get $0 + i32.eqz + if + i32.const 0 + i32.const 240 + i32.const 294 + i32.const 14 + call $~lib/builtins/abort + unreachable + end + local.get $1 + i32.const 20 + i32.sub + local.set $3 + local.get $3 + call $~lib/rt/itcms/Object#get:color + global.get $~lib/rt/itcms/white + i32.eq + if + local.get $0 + i32.const 20 + i32.sub + local.set $4 + local.get $4 + call $~lib/rt/itcms/Object#get:color + local.set $5 + local.get $5 + global.get $~lib/rt/itcms/white + i32.eqz + i32.eq + if + local.get $2 + if + local.get $4 + call $~lib/rt/itcms/Object#makeGray + else + local.get $3 + call $~lib/rt/itcms/Object#makeGray + end + else + local.get $5 + i32.const 3 + i32.eq + if (result i32) + global.get $~lib/rt/itcms/state + i32.const 1 + i32.eq + else + i32.const 0 + end + if + local.get $3 + call $~lib/rt/itcms/Object#makeGray + end + end + end + ) + (func $~lib/staticarray/StaticArray<~lib/string/String>#__uset (param $0 i32) (param $1 i32) (param $2 i32) + local.get $0 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.get $2 + i32.store + i32.const 1 + drop + local.get $0 + local.get $2 + i32.const 1 + call $~lib/rt/itcms/__link + ) + (func $~lib/staticarray/StaticArray<~lib/string/String>#get:length (param $0 i32) (result i32) + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u + ) + (func $~lib/staticarray/StaticArray<~lib/string/String>#join (param $0 i32) (param $1 i32) (result i32) + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + drop + i32.const 0 + i32.const 1 + i32.lt_s + drop + i32.const 1 + drop + local.get $0 + local.get $0 + call $~lib/staticarray/StaticArray<~lib/string/String>#get:length + local.get $1 + call $~lib/util/string/joinStringArray + return + ) (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) (local $5 i32) (local $6 i32) @@ -3665,74 +3781,6 @@ end i32.const -1 ) - (func $~lib/rt/itcms/__link (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - local.get $1 - i32.eqz - if - return - end - i32.const 1 - drop - local.get $0 - i32.eqz - if - i32.const 0 - i32.const 240 - i32.const 294 - i32.const 14 - call $~lib/builtins/abort - unreachable - end - local.get $1 - i32.const 20 - i32.sub - local.set $3 - local.get $3 - call $~lib/rt/itcms/Object#get:color - global.get $~lib/rt/itcms/white - i32.eq - if - local.get $0 - i32.const 20 - i32.sub - local.set $4 - local.get $4 - call $~lib/rt/itcms/Object#get:color - local.set $5 - local.get $5 - global.get $~lib/rt/itcms/white - i32.eqz - i32.eq - if - local.get $2 - if - local.get $4 - call $~lib/rt/itcms/Object#makeGray - else - local.get $3 - call $~lib/rt/itcms/Object#makeGray - end - else - local.get $5 - i32.const 3 - i32.eq - if (result i32) - global.get $~lib/rt/itcms/state - i32.const 1 - i32.eq - else - i32.const 0 - end - if - local.get $3 - call $~lib/rt/itcms/Object#makeGray - end - end - end - ) (func $~lib/array/Array<~lib/string/String>#__uset (param $0 i32) (param $1 i32) (param $2 i32) local.get $0 i32.load offset=4 @@ -3815,8 +3863,8 @@ i32.shr_u i32.gt_u if - i32.const 5424 - i32.const 5472 + i32.const 5744 + i32.const 5792 i32.const 19 i32.const 48 call $~lib/builtins/abort @@ -4333,10 +4381,10 @@ i32.const 368 local.get $0 call $~lib/rt/itcms/__visit - i32.const 5424 + i32.const 5744 local.get $0 call $~lib/rt/itcms/__visit - i32.const 5520 + i32.const 5840 local.get $0 call $~lib/rt/itcms/__visit i32.const 176 @@ -4528,8 +4576,8 @@ global.get $~lib/memory/__data_end i32.lt_s if - i32.const 22944 - i32.const 22992 + i32.const 23264 + i32.const 23312 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -4543,350 +4591,320 @@ (local $4 i32) (local $5 i32) (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + (local $10 i32) + (local $11 i32) + (local $12 i32) + (local $13 i32) + (local $14 i32) + (local $15 i32) + (local $16 i32) + (local $17 i32) global.get $~lib/memory/__stack_pointer - i32.const 112 + i32.const 44 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 112 + i32.const 44 memory.fill local.get $0 i32.load - local.set $2 - local.get $2 + local.set $1 + local.get $1 i32.const 0 i32.lt_s - local.set $3 - local.get $3 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 if (result i32) i32.const 1 else - local.get $2 + local.get $1 i32.const 10000 i32.ge_s end - if - global.get $~lib/memory/__stack_pointer - local.get $3 + if (result i32) + local.get $2 if (result i32) i32.const 592 else i32.const 624 end - local.set $6 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $17 i32.store - local.get $6 - local.get $2 - local.tee $4 + local.get $17 + local.get $1 + local.tee $3 i32.const 31 i32.shr_s - local.tee $5 - local.get $4 + local.tee $4 + local.get $3 i32.add - local.get $5 + local.get $4 i32.xor i32.const 10 call $~lib/number/I32#toString - local.set $6 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $17 i32.store offset=8 - local.get $6 + local.get $17 i32.const 6 i32.const 848 - local.set $6 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $17 i32.store offset=12 - local.get $6 + local.get $17 call $~lib/string/String#padStart - local.set $6 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $17 i32.store offset=4 - local.get $6 + local.get $17 call $~lib/string/String.__concat - local.tee $1 - i32.store offset=16 else - global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 i32.const 10 call $~lib/number/I32#toString - local.set $6 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $17 i32.store - local.get $6 + local.get $17 i32.const 4 i32.const 848 - local.set $6 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $17 i32.store offset=8 - local.get $6 + local.get $17 call $~lib/string/String#padStart - local.tee $1 - i32.store offset=16 end - local.get $1 - i32.const 592 - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=100 - local.get $6 - call $~lib/string/String.__concat - local.set $6 + local.tee $5 + i32.store offset=16 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=92 - local.get $6 local.get $0 i32.load offset=4 i32.const 10 call $~lib/number/I32#toString - local.set $6 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=104 - local.get $6 + local.get $17 + i32.store + local.get $17 i32.const 2 i32.const 848 - local.set $6 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=108 - local.get $6 + local.get $17 + i32.store offset=8 + local.get $17 call $~lib/string/String#padStart - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=96 - local.get $6 - call $~lib/string/String.__concat - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=84 - local.get $6 - i32.const 592 - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=88 - local.get $6 - call $~lib/string/String.__concat - local.set $6 + local.tee $6 + i32.store offset=20 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=76 - local.get $6 local.get $0 i32.load offset=8 i32.const 10 call $~lib/number/I32#toString - local.set $6 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=84 - local.get $6 + local.get $17 + i32.store + local.get $17 i32.const 2 i32.const 848 - local.set $6 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=92 - local.get $6 + local.get $17 + i32.store offset=8 + local.get $17 call $~lib/string/String#padStart - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=80 - local.get $6 - call $~lib/string/String.__concat - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=68 - local.get $6 - i32.const 2464 - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=72 - local.get $6 - call $~lib/string/String.__concat - local.set $6 + local.tee $7 + i32.store offset=24 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=60 - local.get $6 local.get $0 call $~lib/date/Date#getUTCHours i32.const 10 call $~lib/number/I32#toString - local.set $6 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=68 - local.get $6 + local.get $17 + i32.store + local.get $17 i32.const 2 i32.const 848 - local.set $6 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=76 - local.get $6 + local.get $17 + i32.store offset=8 + local.get $17 call $~lib/string/String#padStart - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=64 - local.get $6 - call $~lib/string/String.__concat - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=52 - local.get $6 - i32.const 2496 - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=56 - local.get $6 - call $~lib/string/String.__concat - local.set $6 + local.tee $8 + i32.store offset=28 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=44 - local.get $6 local.get $0 call $~lib/date/Date#getUTCMinutes i32.const 10 call $~lib/number/I32#toString - local.set $6 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=52 - local.get $6 + local.get $17 + i32.store + local.get $17 i32.const 2 i32.const 848 - local.set $6 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=60 - local.get $6 + local.get $17 + i32.store offset=8 + local.get $17 call $~lib/string/String#padStart - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=48 - local.get $6 - call $~lib/string/String.__concat - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=36 - local.get $6 - i32.const 2496 - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=40 - local.get $6 - call $~lib/string/String.__concat - local.set $6 + local.tee $9 + i32.store offset=32 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=28 - local.get $6 local.get $0 call $~lib/date/Date#getUTCSeconds i32.const 10 call $~lib/number/I32#toString - local.set $6 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=36 - local.get $6 + local.get $17 + i32.store + local.get $17 i32.const 2 i32.const 848 - local.set $6 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=44 - local.get $6 + local.get $17 + i32.store offset=8 + local.get $17 call $~lib/string/String#padStart - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=32 - local.get $6 - call $~lib/string/String.__concat - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=12 - local.get $6 - i32.const 2528 - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=24 - local.get $6 - call $~lib/string/String.__concat - local.set $6 + local.tee $10 + i32.store offset=36 global.get $~lib/memory/__stack_pointer - 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 $6 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=12 - local.get $6 + local.get $17 + i32.store + local.get $17 i32.const 3 i32.const 848 - local.set $6 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=28 - local.get $6 + local.get $17 + i32.store offset=8 + local.get $17 call $~lib/string/String#padStart - local.set $6 + local.tee $11 + i32.store offset=40 + local.get $5 + local.set $3 + local.get $6 + local.set $4 + local.get $7 + local.set $12 + local.get $8 + local.set $13 + local.get $9 + local.set $14 + local.get $10 + local.set $15 + local.get $11 + local.set $16 + i32.const 2592 + local.set $17 + global.get $~lib/memory/__stack_pointer + local.get $17 + i32.store + local.get $17 + i32.const 1 + local.get $3 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 2592 + local.set $17 + global.get $~lib/memory/__stack_pointer + local.get $17 + i32.store + local.get $17 + i32.const 3 + local.get $4 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 2592 + local.set $17 + global.get $~lib/memory/__stack_pointer + local.get $17 + i32.store + local.get $17 + i32.const 5 + local.get $12 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 2592 + local.set $17 + global.get $~lib/memory/__stack_pointer + local.get $17 + i32.store + local.get $17 + i32.const 7 + local.get $13 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 2592 + local.set $17 + global.get $~lib/memory/__stack_pointer + local.get $17 + i32.store + local.get $17 + i32.const 9 + local.get $14 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 2592 + local.set $17 + global.get $~lib/memory/__stack_pointer + local.get $17 + i32.store + local.get $17 + i32.const 11 + local.get $15 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 2592 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=20 - local.get $6 - call $~lib/string/String.__concat - local.set $6 + local.get $17 + i32.store + local.get $17 + i32.const 13 + local.get $16 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 2592 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $17 i32.store - local.get $6 - i32.const 2560 - local.set $6 + local.get $17 + i32.const 2432 + local.set $17 global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $17 i32.store offset=4 - local.get $6 - call $~lib/string/String.__concat - local.set $6 + local.get $17 + call $~lib/staticarray/StaticArray<~lib/string/String>#join + local.set $17 global.get $~lib/memory/__stack_pointer - i32.const 112 + i32.const 44 i32.add global.set $~lib/memory/__stack_pointer - local.get $6 + local.get $17 ) (func $~lib/date/Date#toDateString (param $0 i32) (result i32) (local $1 i32) @@ -4899,26 +4917,32 @@ (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 44 + i32.const 40 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 44 + i32.const 40 memory.fill global.get $~lib/memory/__stack_pointer i32.const 28 i32.const 4 - i32.const 3536 + i32.const 3616 call $~lib/rt/__newBuffer local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 48 i32.const 4 - i32.const 3968 + i32.const 4048 call $~lib/rt/__newBuffer local.tee $2 i32.store offset=4 @@ -4948,223 +4972,267 @@ i32.xor i32.const 10 call $~lib/number/I32#toString - local.set $10 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $10 + local.get $16 i32.store offset=8 - local.get $10 + local.get $16 i32.const 4 i32.const 848 - local.set $10 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $10 + local.get $16 i32.store offset=12 - local.get $10 + local.get $16 call $~lib/string/String#padStart local.tee $9 i32.store offset=16 - local.get $5 - i32.const 0 - i32.lt_s - if - global.get $~lib/memory/__stack_pointer - i32.const 592 - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=8 - local.get $10 - local.get $9 - call $~lib/string/String.__concat - local.tee $9 - i32.store offset=16 - end - local.get $1 - local.get $6 - call $~lib/staticarray/StaticArray<~lib/string/String>#__uget - local.set $10 global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=32 - local.get $10 local.get $2 local.get $3 i32.const 1 i32.sub call $~lib/staticarray/StaticArray<~lib/string/String>#__uget - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=36 - local.get $10 - call $~lib/string/String.__concat - local.set $10 + local.tee $10 + i32.store offset=20 global.get $~lib/memory/__stack_pointer - local.get $10 + local.get $1 + local.get $6 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uget + local.tee $11 i32.store offset=24 - local.get $10 + global.get $~lib/memory/__stack_pointer local.get $4 i32.const 10 call $~lib/number/I32#toString - local.set $10 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=32 - local.get $10 + local.get $16 + i32.store offset=8 + local.get $16 i32.const 2 i32.const 848 - local.set $10 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=40 - local.get $10 + local.get $16 + i32.store offset=12 + local.get $16 call $~lib/string/String#padStart - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 + local.tee $12 i32.store offset=28 + local.get $11 + local.set $7 local.get $10 - call $~lib/string/String.__concat - local.set $10 + local.set $8 + local.get $12 + local.set $13 global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=20 - local.get $10 - i32.const 4048 - local.set $10 + local.get $5 + i32.const 0 + i32.lt_s + if (result i32) + i32.const 4192 + else + i32.const 4224 + end + local.tee $14 + i32.store offset=32 + local.get $9 + local.set $15 + i32.const 4128 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=12 - local.get $10 - call $~lib/string/String.__concat - local.set $10 + local.get $16 + i32.store offset=8 + local.get $16 + i32.const 1 + local.get $7 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 4128 + local.set $16 global.get $~lib/memory/__stack_pointer - local.get $10 + local.get $16 i32.store offset=8 - local.get $10 - local.get $9 - call $~lib/string/String.__concat - local.set $10 + local.get $16 + i32.const 3 + local.get $8 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 4128 + local.set $16 global.get $~lib/memory/__stack_pointer - i32.const 44 + local.get $16 + i32.store offset=8 + local.get $16 + i32.const 5 + local.get $13 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 4128 + local.set $16 + global.get $~lib/memory/__stack_pointer + local.get $16 + i32.store offset=8 + local.get $16 + i32.const 7 + local.get $14 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 4128 + local.set $16 + global.get $~lib/memory/__stack_pointer + local.get $16 + i32.store offset=8 + local.get $16 + i32.const 9 + local.get $15 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 4128 + local.set $16 + global.get $~lib/memory/__stack_pointer + local.get $16 + i32.store offset=8 + local.get $16 + i32.const 2432 + local.set $16 + global.get $~lib/memory/__stack_pointer + local.get $16 + i32.store offset=36 + local.get $16 + call $~lib/staticarray/StaticArray<~lib/string/String>#join + local.set $16 + global.get $~lib/memory/__stack_pointer + i32.const 40 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 + local.get $16 ) (func $~lib/date/Date#toTimeString (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) global.get $~lib/memory/__stack_pointer - i32.const 40 + i32.const 24 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 40 + i32.const 24 memory.fill + global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCHours i32.const 10 call $~lib/number/I32#toString - local.set $1 + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=32 - local.get $1 + local.get $7 + i32.store + local.get $7 i32.const 2 i32.const 848 - local.set $1 + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=36 - local.get $1 + local.get $7 + i32.store offset=4 + local.get $7 call $~lib/string/String#padStart - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=24 - local.get $1 - i32.const 2496 - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=28 - local.get $1 - call $~lib/string/String.__concat - local.set $1 + local.tee $1 + i32.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=16 - local.get $1 local.get $0 call $~lib/date/Date#getUTCMinutes i32.const 10 call $~lib/number/I32#toString - local.set $1 + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=24 - local.get $1 + local.get $7 + i32.store + local.get $7 i32.const 2 i32.const 848 - local.set $1 + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=32 - local.get $1 + local.get $7 + i32.store offset=4 + local.get $7 call $~lib/string/String#padStart - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=20 - local.get $1 - call $~lib/string/String.__concat - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=8 - local.get $1 - i32.const 2496 - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 + local.tee $2 i32.store offset=12 - local.get $1 - call $~lib/string/String.__concat - local.set $1 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store - local.get $1 local.get $0 call $~lib/date/Date#getUTCSeconds i32.const 10 call $~lib/number/I32#toString - local.set $1 + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=8 - local.get $1 + local.get $7 + i32.store + local.get $7 i32.const 2 i32.const 848 - local.set $1 + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $7 + i32.store offset=4 + local.get $7 + call $~lib/string/String#padStart + local.tee $3 i32.store offset=16 local.get $1 - call $~lib/string/String#padStart - local.set $1 + local.set $4 + local.get $2 + local.set $5 + local.get $3 + local.set $6 + i32.const 4448 + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $1 - call $~lib/string/String.__concat - local.set $1 + local.get $7 + i32.store + local.get $7 + i32.const 1 + local.get $4 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 4448 + local.set $7 global.get $~lib/memory/__stack_pointer - i32.const 40 + local.get $7 + i32.store + local.get $7 + i32.const 3 + local.get $5 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 4448 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 5 + local.get $6 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 4448 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store + local.get $7 + i32.const 2432 + local.set $7 + global.get $~lib/memory/__stack_pointer + local.get $7 + i32.store offset=20 + local.get $7 + call $~lib/staticarray/StaticArray<~lib/string/String>#join + local.set $7 + global.get $~lib/memory/__stack_pointer + i32.const 24 i32.add global.set $~lib/memory/__stack_pointer - local.get $1 + local.get $7 ) (func $~lib/date/Date#toUTCString (param $0 i32) (result i32) (local $1 i32) @@ -5177,26 +5245,38 @@ (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) + (local $17 i32) + (local $18 i32) + (local $19 i32) + (local $20 i32) + (local $21 i32) + (local $22 i32) global.get $~lib/memory/__stack_pointer - i32.const 96 + i32.const 52 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 96 + i32.const 52 memory.fill global.get $~lib/memory/__stack_pointer i32.const 28 i32.const 4 - i32.const 4592 + i32.const 4816 call $~lib/rt/__newBuffer local.tee $1 i32.store global.get $~lib/memory/__stack_pointer i32.const 48 i32.const 4 - i32.const 5024 + i32.const 5248 call $~lib/rt/__newBuffer local.tee $2 i32.store offset=4 @@ -5226,228 +5306,230 @@ i32.xor i32.const 10 call $~lib/number/I32#toString - local.set $10 + local.set $22 global.get $~lib/memory/__stack_pointer - local.get $10 + local.get $22 i32.store offset=8 - local.get $10 + local.get $22 i32.const 4 i32.const 848 - local.set $10 + local.set $22 global.get $~lib/memory/__stack_pointer - local.get $10 + local.get $22 i32.store offset=12 - local.get $10 + local.get $22 call $~lib/string/String#padStart local.tee $9 i32.store offset=16 - local.get $5 - i32.const 0 - i32.lt_s - if - global.get $~lib/memory/__stack_pointer - i32.const 592 - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=8 - local.get $10 - local.get $9 - call $~lib/string/String.__concat - local.tee $9 - i32.store offset=16 - end + global.get $~lib/memory/__stack_pointer + local.get $2 + local.get $3 + i32.const 1 + i32.sub + call $~lib/staticarray/StaticArray<~lib/string/String>#__uget + local.tee $10 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer local.get $1 local.get $6 call $~lib/staticarray/StaticArray<~lib/string/String>#__uget - local.set $10 + local.tee $11 + i32.store offset=24 global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=80 - local.get $10 local.get $4 i32.const 10 call $~lib/number/I32#toString - local.set $10 + local.set $22 global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=88 - local.get $10 + local.get $22 + i32.store offset=8 + local.get $22 i32.const 2 i32.const 848 - local.set $10 + local.set $22 global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=92 - local.get $10 + local.get $22 + i32.store offset=12 + local.get $22 call $~lib/string/String#padStart - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=84 - local.get $10 - call $~lib/string/String.__concat - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=72 - local.get $10 - local.get $2 - local.get $3 - i32.const 1 - i32.sub - call $~lib/staticarray/StaticArray<~lib/string/String>#__uget - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=76 - local.get $10 - call $~lib/string/String.__concat - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=68 - local.get $10 - local.get $9 - call $~lib/string/String.__concat - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=60 - local.get $10 - i32.const 4048 - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=64 - local.get $10 - call $~lib/string/String.__concat - local.set $10 + local.tee $12 + i32.store offset=28 global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=52 - local.get $10 local.get $0 call $~lib/date/Date#getUTCHours i32.const 10 call $~lib/number/I32#toString - local.set $10 + local.set $22 global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=60 - local.get $10 + local.get $22 + i32.store offset=8 + local.get $22 i32.const 2 i32.const 848 - local.set $10 + local.set $22 global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=68 - local.get $10 + local.get $22 + i32.store offset=12 + local.get $22 call $~lib/string/String#padStart - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=56 - local.get $10 - call $~lib/string/String.__concat - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=44 - local.get $10 - i32.const 2496 - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=48 - local.get $10 - call $~lib/string/String.__concat - local.set $10 + local.tee $13 + i32.store offset=32 global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=36 - local.get $10 local.get $0 call $~lib/date/Date#getUTCMinutes i32.const 10 call $~lib/number/I32#toString - local.set $10 + local.set $22 global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=44 - local.get $10 + local.get $22 + i32.store offset=8 + local.get $22 i32.const 2 i32.const 848 - local.set $10 + local.set $22 global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=52 - local.get $10 + local.get $22 + i32.store offset=12 + local.get $22 call $~lib/string/String#padStart - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=40 - local.get $10 - call $~lib/string/String.__concat - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=28 - local.get $10 - i32.const 2496 - local.set $10 - global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=32 - local.get $10 - call $~lib/string/String.__concat - local.set $10 + local.tee $14 + i32.store offset=36 global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=12 - local.get $10 local.get $0 call $~lib/date/Date#getUTCSeconds i32.const 10 call $~lib/number/I32#toString - local.set $10 + local.set $22 global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=28 - local.get $10 + local.get $22 + i32.store offset=8 + local.get $22 i32.const 2 i32.const 848 - local.set $10 + local.set $22 + global.get $~lib/memory/__stack_pointer + local.get $22 + i32.store offset=12 + local.get $22 + call $~lib/string/String#padStart + local.tee $15 + i32.store offset=40 + local.get $11 + local.set $7 + local.get $12 + local.set $8 + local.get $10 + local.set $16 + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.const 0 + i32.lt_s + if (result i32) + i32.const 592 + else + i32.const 2432 + end + local.tee $17 + i32.store offset=44 + local.get $9 + local.set $18 + local.get $13 + local.set $19 + local.get $14 + local.set $20 + local.get $15 + local.set $21 + i32.const 5360 + local.set $22 + global.get $~lib/memory/__stack_pointer + local.get $22 + i32.store offset=8 + local.get $22 + i32.const 1 + local.get $7 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 5360 + local.set $22 + global.get $~lib/memory/__stack_pointer + local.get $22 + i32.store offset=8 + local.get $22 + i32.const 3 + local.get $8 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 5360 + local.set $22 + global.get $~lib/memory/__stack_pointer + local.get $22 + i32.store offset=8 + local.get $22 + i32.const 5 + local.get $16 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 5360 + local.set $22 + global.get $~lib/memory/__stack_pointer + local.get $22 + i32.store offset=8 + local.get $22 + i32.const 7 + local.get $17 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 5360 + local.set $22 + global.get $~lib/memory/__stack_pointer + local.get $22 + i32.store offset=8 + local.get $22 + i32.const 9 + local.get $18 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 5360 + local.set $22 global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=36 - local.get $10 - call $~lib/string/String#padStart - local.set $10 + local.get $22 + i32.store offset=8 + local.get $22 + i32.const 11 + local.get $19 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 5360 + local.set $22 global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=24 - local.get $10 - call $~lib/string/String.__concat - local.set $10 + local.get $22 + i32.store offset=8 + local.get $22 + i32.const 13 + local.get $20 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 5360 + local.set $22 global.get $~lib/memory/__stack_pointer - local.get $10 + local.get $22 i32.store offset=8 - local.get $10 - i32.const 5104 - local.set $10 + local.get $22 + i32.const 15 + local.get $21 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + i32.const 5360 + local.set $22 global.get $~lib/memory/__stack_pointer - local.get $10 - i32.store offset=20 - local.get $10 - call $~lib/string/String.__concat - local.set $10 + local.get $22 + i32.store offset=8 + local.get $22 + i32.const 2432 + local.set $22 + global.get $~lib/memory/__stack_pointer + local.get $22 + i32.store offset=48 + local.get $22 + call $~lib/staticarray/StaticArray<~lib/string/String>#join + local.set $22 global.get $~lib/memory/__stack_pointer - i32.const 96 + i32.const 52 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 + local.get $22 ) (func $~lib/string/String#split (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -8097,7 +8179,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 2592 + i32.const 2672 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8128,7 +8210,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 2672 + i32.const 2752 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8157,7 +8239,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 2752 + i32.const 2832 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8186,7 +8268,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 2832 + i32.const 2912 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8215,7 +8297,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 2912 + i32.const 2992 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8244,7 +8326,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 2992 + i32.const 3072 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8273,7 +8355,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 3072 + i32.const 3152 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8302,7 +8384,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 3152 + i32.const 3232 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8331,7 +8413,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 3232 + i32.const 3312 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8360,7 +8442,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 4080 + i32.const 4256 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8389,7 +8471,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 4144 + i32.const 4320 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8418,7 +8500,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 4208 + i32.const 4384 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8447,7 +8529,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 4272 + i32.const 4496 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8476,7 +8558,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 4320 + i32.const 4544 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8505,7 +8587,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 5136 + i32.const 5456 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8534,7 +8616,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 5216 + i32.const 5536 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8563,7 +8645,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 5296 + i32.const 5616 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8580,7 +8662,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 5376 + i32.const 5696 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8605,7 +8687,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 5648 + i32.const 5968 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8630,7 +8712,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 5696 + i32.const 6016 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8655,7 +8737,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 5744 + i32.const 6064 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8680,7 +8762,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 5808 + i32.const 6128 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8705,7 +8787,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 5888 + i32.const 6208 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8730,7 +8812,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 5968 + i32.const 6288 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8755,7 +8837,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6000 + i32.const 6320 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8780,7 +8862,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6032 + i32.const 6352 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8805,7 +8887,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6064 + i32.const 6384 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8830,7 +8912,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 5376 + i32.const 5696 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8855,7 +8937,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 6112 + i32.const 6432 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8880,7 +8962,7 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 5744 + i32.const 6064 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9047,7 +9129,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 6176 + i32.const 6496 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9070,7 +9152,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 6256 + i32.const 6576 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9208,7 +9290,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 6336 + i32.const 6656 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9231,7 +9313,7 @@ local.get $8 i32.store offset=28 local.get $8 - i32.const 6416 + i32.const 6736 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9683,6 +9765,218 @@ global.set $~lib/memory/__stack_pointer local.get $6 ) + (func $~lib/util/string/joinStringArray (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 12 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=8 + local.get $1 + i32.const 1 + i32.sub + local.set $3 + local.get $3 + i32.const 0 + i32.lt_s + if + i32.const 2432 + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + end + local.get $3 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load + local.tee $4 + i32.store + local.get $4 + if (result i32) + local.get $4 + else + i32.const 2432 + end + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + return + end + i32.const 0 + local.set $5 + i32.const 0 + local.set $4 + loop $for-loop|0 + local.get $4 + local.get $1 + i32.lt_s + local.set $7 + local.get $7 + if + global.get $~lib/memory/__stack_pointer + local.get $0 + local.get $4 + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $6 + i32.store offset=4 + local.get $6 + i32.const 0 + i32.ne + if + local.get $5 + local.get $6 + call $~lib/string/String#get:length + i32.add + local.set $5 + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $for-loop|0 + end + end + i32.const 0 + local.set $8 + local.get $2 + call $~lib/string/String#get:length + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $5 + local.get $9 + local.get $3 + i32.mul + i32.add + i32.const 1 + i32.shl + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $10 + i32.store offset=8 + i32.const 0 + local.set $4 + loop $for-loop|1 + local.get $4 + local.get $3 + i32.lt_s + local.set $7 + local.get $7 + if + global.get $~lib/memory/__stack_pointer + local.get $0 + local.get $4 + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $6 + i32.store offset=4 + local.get $6 + i32.const 0 + i32.ne + if + local.get $6 + call $~lib/string/String#get:length + local.set $11 + local.get $10 + local.get $8 + i32.const 1 + i32.shl + i32.add + local.get $6 + local.get $11 + i32.const 1 + i32.shl + memory.copy + local.get $8 + local.get $11 + i32.add + local.set $8 + end + local.get $9 + if + local.get $10 + local.get $8 + i32.const 1 + i32.shl + i32.add + local.get $2 + local.get $9 + i32.const 1 + i32.shl + memory.copy + local.get $8 + local.get $9 + i32.add + local.set $8 + end + local.get $4 + i32.const 1 + i32.add + local.set $4 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer + local.get $0 + local.get $3 + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $6 + i32.store offset=4 + local.get $6 + i32.const 0 + i32.ne + if + local.get $10 + local.get $8 + i32.const 1 + i32.shl + i32.add + local.get $6 + local.get $6 + call $~lib/string/String#get:length + i32.const 1 + i32.shl + memory.copy + end + local.get $10 + local.set $12 + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $12 + ) (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) @@ -9885,7 +10179,7 @@ i32.ge_u if i32.const 368 - i32.const 5472 + i32.const 5792 i32.const 114 i32.const 42 call $~lib/builtins/abort @@ -9909,8 +10203,8 @@ local.get $2 i32.eqz if - i32.const 5520 - i32.const 5472 + i32.const 5840 + i32.const 5792 i32.const 118 i32.const 40 call $~lib/builtins/abort diff --git a/tests/compiler/std/date.release.wat b/tests/compiler/std/date.release.wat index dd4b00d71a..d42f8f6bc2 100644 --- a/tests/compiler/std/date.release.wat +++ b/tests/compiler/std/date.release.wat @@ -1,6 +1,6 @@ (module - (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) + (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_=>_none (func (param i32))) @@ -26,7 +26,7 @@ (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~argumentsLength (mut i32) (i32.const 0)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 23948)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 24268)) (global $~started (mut i32) (i32.const 0)) (memory $0 1) (data (i32.const 1036) ",") @@ -71,166 +71,172 @@ (data (i32.const 3544) "\01\00\00\00\02\00\00\00.") (data (i32.const 3564) "\1c") (data (i32.const 3576) "\01\00\00\00\02\00\00\00Z") - (data (i32.const 3596) "L") - (data (i32.const 3608) "\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 3596) "L\00\00\00\03\00\00\00\00\00\00\00\04\00\00\00<\00\00\00\80\0d\00\00\00\00\00\00P\06\00\00\00\00\00\00P\06\00\00\00\00\00\00\a0\0d\00\00\00\00\00\00\c0\0d\00\00\00\00\00\00\c0\0d\00\00\00\00\00\00\e0\0d\00\00\00\00\00\00\00\0e") (data (i32.const 3676) "L") - (data (i32.const 3688) "\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 3688) "\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 3756) "L") - (data (i32.const 3768) "\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 3768) "\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 3836) "L") - (data (i32.const 3848) "\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 3848) "\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 3916) "L") - (data (i32.const 3928) "\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 3928) "\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 3996) "L") - (data (i32.const 4008) "\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 4008) "\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 4076) "L") - (data (i32.const 4088) "\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 4088) "\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 4156) "L") - (data (i32.const 4168) "\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 4168) "\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 4236) "L") - (data (i32.const 4248) "\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 4316) "\1c") - (data (i32.const 4328) "\01\00\00\00\08\00\00\00S\00u\00n\00 ") - (data (i32.const 4348) "\1c") - (data (i32.const 4360) "\01\00\00\00\08\00\00\00M\00o\00n\00 ") - (data (i32.const 4380) "\1c") - (data (i32.const 4392) "\01\00\00\00\08\00\00\00T\00u\00e\00 ") - (data (i32.const 4412) "\1c") - (data (i32.const 4424) "\01\00\00\00\08\00\00\00W\00e\00d\00 ") - (data (i32.const 4444) "\1c") - (data (i32.const 4456) "\01\00\00\00\08\00\00\00T\00h\00u\00 ") - (data (i32.const 4476) "\1c") - (data (i32.const 4488) "\01\00\00\00\08\00\00\00F\00r\00i\00 ") - (data (i32.const 4508) "\1c") - (data (i32.const 4520) "\01\00\00\00\08\00\00\00S\00a\00t\00 ") - (data (i32.const 4540) ",") - (data (i32.const 4552) "\04\00\00\00\1c\00\00\00\f0\10\00\00\10\11\00\000\11\00\00P\11\00\00p\11\00\00\90\11\00\00\b0\11") + (data (i32.const 4248) "\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 4316) "L") + (data (i32.const 4328) "\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 4396) "\1c") + (data (i32.const 4408) "\01\00\00\00\08\00\00\00S\00u\00n\00 ") + (data (i32.const 4428) "\1c") + (data (i32.const 4440) "\01\00\00\00\08\00\00\00M\00o\00n\00 ") + (data (i32.const 4460) "\1c") + (data (i32.const 4472) "\01\00\00\00\08\00\00\00T\00u\00e\00 ") + (data (i32.const 4492) "\1c") + (data (i32.const 4504) "\01\00\00\00\08\00\00\00W\00e\00d\00 ") + (data (i32.const 4524) "\1c") + (data (i32.const 4536) "\01\00\00\00\08\00\00\00T\00h\00u\00 ") + (data (i32.const 4556) "\1c") + (data (i32.const 4568) "\01\00\00\00\08\00\00\00F\00r\00i\00 ") (data (i32.const 4588) "\1c") - (data (i32.const 4600) "\01\00\00\00\08\00\00\00J\00a\00n\00 ") - (data (i32.const 4620) "\1c") - (data (i32.const 4632) "\01\00\00\00\08\00\00\00F\00e\00b\00 ") - (data (i32.const 4652) "\1c") - (data (i32.const 4664) "\01\00\00\00\08\00\00\00M\00a\00r\00 ") - (data (i32.const 4684) "\1c") - (data (i32.const 4696) "\01\00\00\00\08\00\00\00A\00p\00r\00 ") - (data (i32.const 4716) "\1c") - (data (i32.const 4728) "\01\00\00\00\08\00\00\00M\00a\00y\00 ") - (data (i32.const 4748) "\1c") - (data (i32.const 4760) "\01\00\00\00\08\00\00\00J\00u\00n\00 ") - (data (i32.const 4780) "\1c") - (data (i32.const 4792) "\01\00\00\00\08\00\00\00J\00u\00l\00 ") - (data (i32.const 4812) "\1c") - (data (i32.const 4824) "\01\00\00\00\08\00\00\00A\00u\00g\00 ") - (data (i32.const 4844) "\1c") - (data (i32.const 4856) "\01\00\00\00\08\00\00\00S\00e\00p\00 ") - (data (i32.const 4876) "\1c") - (data (i32.const 4888) "\01\00\00\00\08\00\00\00O\00c\00t\00 ") - (data (i32.const 4908) "\1c") - (data (i32.const 4920) "\01\00\00\00\08\00\00\00N\00o\00v\00 ") - (data (i32.const 4940) "\1c") - (data (i32.const 4952) "\01\00\00\00\08\00\00\00D\00e\00c\00 ") - (data (i32.const 4972) "L") - (data (i32.const 4984) "\04\00\00\000\00\00\00\00\12\00\00 \12\00\00@\12\00\00`\12\00\00\80\12\00\00\a0\12\00\00\c0\12\00\00\e0\12\00\00\00\13\00\00 \13\00\00@\13\00\00`\13") - (data (i32.const 5052) "\1c") - (data (i32.const 5064) "\01\00\00\00\02\00\00\00 ") - (data (i32.const 5084) "<") - (data (i32.const 5096) "\01\00\00\00\1e\00\00\00W\00e\00d\00 \00J\00a\00n\00 \000\001\00 \000\000\002\000") - (data (i32.const 5148) "<") - (data (i32.const 5160) "\01\00\00\00\1e\00\00\00S\00u\00n\00 \00F\00e\00b\00 \000\002\00 \002\000\002\000") - (data (i32.const 5212) "<") - (data (i32.const 5224) "\01\00\00\00 \00\00\00T\00h\00u\00 \00J\00u\00l\00 \000\001\00 \00-\000\000\000\001") - (data (i32.const 5276) ",") - (data (i32.const 5288) "\01\00\00\00\10\00\00\000\000\00:\000\000\00:\000\000") - (data (i32.const 5324) ",") - (data (i32.const 5336) "\01\00\00\00\10\00\00\002\003\00:\005\009\00:\005\009") - (data (i32.const 5372) "\1c") - (data (i32.const 5384) "\01\00\00\00\n\00\00\00S\00u\00n\00,\00 ") - (data (i32.const 5404) "\1c") - (data (i32.const 5416) "\01\00\00\00\n\00\00\00M\00o\00n\00,\00 ") - (data (i32.const 5436) "\1c") - (data (i32.const 5448) "\01\00\00\00\n\00\00\00T\00u\00e\00,\00 ") - (data (i32.const 5468) "\1c") - (data (i32.const 5480) "\01\00\00\00\n\00\00\00W\00e\00d\00,\00 ") - (data (i32.const 5500) "\1c") - (data (i32.const 5512) "\01\00\00\00\n\00\00\00T\00h\00u\00,\00 ") - (data (i32.const 5532) "\1c") - (data (i32.const 5544) "\01\00\00\00\n\00\00\00F\00r\00i\00,\00 ") - (data (i32.const 5564) "\1c") - (data (i32.const 5576) "\01\00\00\00\n\00\00\00S\00a\00t\00,\00 ") - (data (i32.const 5596) ",") - (data (i32.const 5608) "\04\00\00\00\1c\00\00\00\10\15\00\000\15\00\00P\15\00\00p\15\00\00\90\15\00\00\b0\15\00\00\d0\15") - (data (i32.const 5644) "\1c") - (data (i32.const 5656) "\01\00\00\00\n\00\00\00 \00J\00a\00n\00 ") - (data (i32.const 5676) "\1c") - (data (i32.const 5688) "\01\00\00\00\n\00\00\00 \00F\00e\00b\00 ") - (data (i32.const 5708) "\1c") - (data (i32.const 5720) "\01\00\00\00\n\00\00\00 \00M\00a\00r\00 ") - (data (i32.const 5740) "\1c") - (data (i32.const 5752) "\01\00\00\00\n\00\00\00 \00A\00p\00r\00 ") - (data (i32.const 5772) "\1c") - (data (i32.const 5784) "\01\00\00\00\n\00\00\00 \00M\00a\00y\00 ") - (data (i32.const 5804) "\1c") - (data (i32.const 5816) "\01\00\00\00\n\00\00\00 \00J\00u\00n\00 ") - (data (i32.const 5836) "\1c") - (data (i32.const 5848) "\01\00\00\00\n\00\00\00 \00J\00u\00l\00 ") + (data (i32.const 4600) "\01\00\00\00\08\00\00\00S\00a\00t\00 ") + (data (i32.const 4620) ",") + (data (i32.const 4632) "\04\00\00\00\1c\00\00\00@\11\00\00`\11\00\00\80\11\00\00\a0\11\00\00\c0\11\00\00\e0\11\00\00\00\12") + (data (i32.const 4668) "\1c") + (data (i32.const 4680) "\01\00\00\00\08\00\00\00J\00a\00n\00 ") + (data (i32.const 4700) "\1c") + (data (i32.const 4712) "\01\00\00\00\08\00\00\00F\00e\00b\00 ") + (data (i32.const 4732) "\1c") + (data (i32.const 4744) "\01\00\00\00\08\00\00\00M\00a\00r\00 ") + (data (i32.const 4764) "\1c") + (data (i32.const 4776) "\01\00\00\00\08\00\00\00A\00p\00r\00 ") + (data (i32.const 4796) "\1c") + (data (i32.const 4808) "\01\00\00\00\08\00\00\00M\00a\00y\00 ") + (data (i32.const 4828) "\1c") + (data (i32.const 4840) "\01\00\00\00\08\00\00\00J\00u\00n\00 ") + (data (i32.const 4860) "\1c") + (data (i32.const 4872) "\01\00\00\00\08\00\00\00J\00u\00l\00 ") + (data (i32.const 4892) "\1c") + (data (i32.const 4904) "\01\00\00\00\08\00\00\00A\00u\00g\00 ") + (data (i32.const 4924) "\1c") + (data (i32.const 4936) "\01\00\00\00\08\00\00\00S\00e\00p\00 ") + (data (i32.const 4956) "\1c") + (data (i32.const 4968) "\01\00\00\00\08\00\00\00O\00c\00t\00 ") + (data (i32.const 4988) "\1c") + (data (i32.const 5000) "\01\00\00\00\08\00\00\00N\00o\00v\00 ") + (data (i32.const 5020) "\1c") + (data (i32.const 5032) "\01\00\00\00\08\00\00\00D\00e\00c\00 ") + (data (i32.const 5052) "L") + (data (i32.const 5064) "\04\00\00\000\00\00\00P\12\00\00p\12\00\00\90\12\00\00\b0\12\00\00\d0\12\00\00\f0\12\00\00\10\13\00\000\13\00\00P\13\00\00p\13\00\00\90\13\00\00\b0\13") + (data (i32.const 5132) "<\00\00\00\03\00\00\00\00\00\00\00\04\00\00\00,\00\00\00\80\0d\00\00\00\00\00\00\80\0d\00\00\00\00\00\00\80\0d\00\00\00\00\00\00\80\0d\00\00\00\00\00\00\80\0d\00\00\00\00\00\00\80\0d") + (data (i32.const 5196) "\1c") + (data (i32.const 5208) "\01\00\00\00\04\00\00\00 \00-") + (data (i32.const 5228) "\1c") + (data (i32.const 5240) "\01\00\00\00\02\00\00\00 ") + (data (i32.const 5260) "<") + (data (i32.const 5272) "\01\00\00\00\1e\00\00\00W\00e\00d\00 \00J\00a\00n\00 \000\001\00 \000\000\002\000") + (data (i32.const 5324) "<") + (data (i32.const 5336) "\01\00\00\00\1e\00\00\00S\00u\00n\00 \00F\00e\00b\00 \000\002\00 \002\000\002\000") + (data (i32.const 5388) "<") + (data (i32.const 5400) "\01\00\00\00 \00\00\00T\00h\00u\00 \00J\00u\00l\00 \000\001\00 \00-\000\000\000\001") + (data (i32.const 5452) ",\00\00\00\03\00\00\00\00\00\00\00\04\00\00\00\1c\00\00\00\80\0d\00\00\00\00\00\00\c0\0d\00\00\00\00\00\00\c0\0d\00\00\00\00\00\00\80\0d") + (data (i32.const 5500) ",") + (data (i32.const 5512) "\01\00\00\00\10\00\00\000\000\00:\000\000\00:\000\000") + (data (i32.const 5548) ",") + (data (i32.const 5560) "\01\00\00\00\10\00\00\002\003\00:\005\009\00:\005\009") + (data (i32.const 5596) "\1c") + (data (i32.const 5608) "\01\00\00\00\n\00\00\00S\00u\00n\00,\00 ") + (data (i32.const 5628) "\1c") + (data (i32.const 5640) "\01\00\00\00\n\00\00\00M\00o\00n\00,\00 ") + (data (i32.const 5660) "\1c") + (data (i32.const 5672) "\01\00\00\00\n\00\00\00T\00u\00e\00,\00 ") + (data (i32.const 5692) "\1c") + (data (i32.const 5704) "\01\00\00\00\n\00\00\00W\00e\00d\00,\00 ") + (data (i32.const 5724) "\1c") + (data (i32.const 5736) "\01\00\00\00\n\00\00\00T\00h\00u\00,\00 ") + (data (i32.const 5756) "\1c") + (data (i32.const 5768) "\01\00\00\00\n\00\00\00F\00r\00i\00,\00 ") + (data (i32.const 5788) "\1c") + (data (i32.const 5800) "\01\00\00\00\n\00\00\00S\00a\00t\00,\00 ") + (data (i32.const 5820) ",") + (data (i32.const 5832) "\04\00\00\00\1c\00\00\00\f0\15\00\00\10\16\00\000\16\00\00P\16\00\00p\16\00\00\90\16\00\00\b0\16") (data (i32.const 5868) "\1c") - (data (i32.const 5880) "\01\00\00\00\n\00\00\00 \00A\00u\00g\00 ") + (data (i32.const 5880) "\01\00\00\00\n\00\00\00 \00J\00a\00n\00 ") (data (i32.const 5900) "\1c") - (data (i32.const 5912) "\01\00\00\00\n\00\00\00 \00S\00e\00p\00 ") + (data (i32.const 5912) "\01\00\00\00\n\00\00\00 \00F\00e\00b\00 ") (data (i32.const 5932) "\1c") - (data (i32.const 5944) "\01\00\00\00\n\00\00\00 \00O\00c\00t\00 ") + (data (i32.const 5944) "\01\00\00\00\n\00\00\00 \00M\00a\00r\00 ") (data (i32.const 5964) "\1c") - (data (i32.const 5976) "\01\00\00\00\n\00\00\00 \00N\00o\00v\00 ") + (data (i32.const 5976) "\01\00\00\00\n\00\00\00 \00A\00p\00r\00 ") (data (i32.const 5996) "\1c") - (data (i32.const 6008) "\01\00\00\00\n\00\00\00 \00D\00e\00c\00 ") - (data (i32.const 6028) "L") - (data (i32.const 6040) "\04\00\00\000\00\00\00 \16\00\00@\16\00\00`\16\00\00\80\16\00\00\a0\16\00\00\c0\16\00\00\e0\16\00\00\00\17\00\00 \17\00\00@\17\00\00`\17\00\00\80\17") - (data (i32.const 6108) "\1c") - (data (i32.const 6120) "\01\00\00\00\08\00\00\00 \00G\00M\00T") - (data (i32.const 6140) "L") - (data (i32.const 6152) "\01\00\00\00:\00\00\00W\00e\00d\00,\00 \000\001\00 \00J\00a\00n\00 \000\000\002\000\00 \000\000\00:\000\000\00:\000\000\00 \00G\00M\00T") - (data (i32.const 6220) "L") - (data (i32.const 6232) "\01\00\00\00:\00\00\00M\00o\00n\00,\00 \000\003\00 \00F\00e\00b\00 \002\000\002\000\00 \001\004\00:\005\003\00:\003\003\00 \00G\00M\00T") - (data (i32.const 6300) "L") - (data (i32.const 6312) "\01\00\00\00<\00\00\00T\00h\00u\00,\00 \000\001\00 \00J\00u\00l\00 \00-\000\000\000\001\00 \000\000\00:\000\000\00:\000\000\00 \00G\00M\00T") - (data (i32.const 6380) ",") - (data (i32.const 6392) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") - (data (i32.const 6428) ",") - (data (i32.const 6440) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") - (data (i32.const 6476) ",") - (data (i32.const 6488) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 6524) "|") - (data (i32.const 6536) "\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 6652) ",") - (data (i32.const 6664) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") + (data (i32.const 6008) "\01\00\00\00\n\00\00\00 \00M\00a\00y\00 ") + (data (i32.const 6028) "\1c") + (data (i32.const 6040) "\01\00\00\00\n\00\00\00 \00J\00u\00n\00 ") + (data (i32.const 6060) "\1c") + (data (i32.const 6072) "\01\00\00\00\n\00\00\00 \00J\00u\00l\00 ") + (data (i32.const 6092) "\1c") + (data (i32.const 6104) "\01\00\00\00\n\00\00\00 \00A\00u\00g\00 ") + (data (i32.const 6124) "\1c") + (data (i32.const 6136) "\01\00\00\00\n\00\00\00 \00S\00e\00p\00 ") + (data (i32.const 6156) "\1c") + (data (i32.const 6168) "\01\00\00\00\n\00\00\00 \00O\00c\00t\00 ") + (data (i32.const 6188) "\1c") + (data (i32.const 6200) "\01\00\00\00\n\00\00\00 \00N\00o\00v\00 ") + (data (i32.const 6220) "\1c") + (data (i32.const 6232) "\01\00\00\00\n\00\00\00 \00D\00e\00c\00 ") + (data (i32.const 6252) "L") + (data (i32.const 6264) "\04\00\00\000\00\00\00\00\17\00\00 \17\00\00@\17\00\00`\17\00\00\80\17\00\00\a0\17\00\00\c0\17\00\00\e0\17\00\00\00\18\00\00 \18\00\00@\18\00\00`\18") + (data (i32.const 6332) "\1c") + (data (i32.const 6344) "\01\00\00\00\08\00\00\00 \00G\00M\00T") + (data (i32.const 6364) "\\\00\00\00\03\00\00\00\00\00\00\00\04\00\00\00D\00\00\00\80\0d\00\00\00\00\00\00\80\0d\00\00\00\00\00\00\80\0d\00\00\00\00\00\00\80\0d\00\00\00\00\00\00\80\0d\00\00\00\00\00\00\80\14\00\00\00\00\00\00\c0\0d\00\00\00\00\00\00\c0\0d\00\00\00\00\00\00\d0\18") + (data (i32.const 6460) "L") + (data (i32.const 6472) "\01\00\00\00:\00\00\00W\00e\00d\00,\00 \000\001\00 \00J\00a\00n\00 \000\000\002\000\00 \000\000\00:\000\000\00:\000\000\00 \00G\00M\00T") + (data (i32.const 6540) "L") + (data (i32.const 6552) "\01\00\00\00:\00\00\00M\00o\00n\00,\00 \000\003\00 \00F\00e\00b\00 \002\000\002\000\00 \001\004\00:\005\003\00:\003\003\00 \00G\00M\00T") + (data (i32.const 6620) "L") + (data (i32.const 6632) "\01\00\00\00<\00\00\00T\00h\00u\00,\00 \000\001\00 \00J\00u\00l\00 \00-\000\000\000\001\00 \000\000\00:\000\000\00:\000\000\00 \00G\00M\00T") (data (i32.const 6700) ",") - (data (i32.const 6712) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") - (data (i32.const 6748) "<") - (data (i32.const 6760) "\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 6812) "L") - (data (i32.const 6824) "\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 6892) "L") - (data (i32.const 6904) "\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 6972) "\1c") - (data (i32.const 6984) "\01\00\00\00\08\00\00\000\000\000\000") - (data (i32.const 7004) "\1c") - (data (i32.const 7016) "\01\00\00\00\08\00\00\000\000\000\001") - (data (i32.const 7036) "\1c") - (data (i32.const 7048) "\01\00\00\00\08\00\00\001\009\007\006") - (data (i32.const 7068) ",") - (data (i32.const 7080) "\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002") - (data (i32.const 7116) "<") - (data (i32.const 7128) "\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 7180) "L") - (data (i32.const 7192) "\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 7260) "L") - (data (i32.const 7272) "\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 7340) "L") - (data (i32.const 7352) "\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 7420) "L") - (data (i32.const 7432) "\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 7504) "\07\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 7532) " \00\00\00\00\00\00\00\04A\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") + (data (i32.const 6712) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") + (data (i32.const 6748) ",") + (data (i32.const 6760) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 6796) ",") + (data (i32.const 6808) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 6844) "|") + (data (i32.const 6856) "\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 6972) ",") + (data (i32.const 6984) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") + (data (i32.const 7020) ",") + (data (i32.const 7032) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") + (data (i32.const 7068) "<") + (data (i32.const 7080) "\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 7132) "L") + (data (i32.const 7144) "\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 7212) "L") + (data (i32.const 7224) "\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 7292) "\1c") + (data (i32.const 7304) "\01\00\00\00\08\00\00\000\000\000\000") + (data (i32.const 7324) "\1c") + (data (i32.const 7336) "\01\00\00\00\08\00\00\000\000\000\001") + (data (i32.const 7356) "\1c") + (data (i32.const 7368) "\01\00\00\00\08\00\00\001\009\007\006") + (data (i32.const 7388) ",") + (data (i32.const 7400) "\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002") + (data (i32.const 7436) "<") + (data (i32.const 7448) "\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 7500) "L") + (data (i32.const 7512) "\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 7580) "L") + (data (i32.const 7592) "\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 7660) "L") + (data (i32.const 7672) "\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 7740) "L") + (data (i32.const 7752) "\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 7824) "\07\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 7852) " \00\00\00\00\00\00\00\04A\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/epochMillis (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i32) (result i64) @@ -408,9 +414,9 @@ (local $1 i32) i32.const 1392 call $byn-split-outlined-A$~lib/rt/itcms/__visit - i32.const 6448 + i32.const 6768 call $byn-split-outlined-A$~lib/rt/itcms/__visit - i32.const 6544 + i32.const 6864 call $byn-split-outlined-A$~lib/rt/itcms/__visit i32.const 1200 call $byn-split-outlined-A$~lib/rt/itcms/__visit @@ -491,7 +497,7 @@ if i32.const 0 local.get $0 - i32.const 23948 + i32.const 24268 i32.lt_u local.get $0 i32.load offset=8 @@ -542,7 +548,7 @@ i32.const 1 else local.get $1 - i32.const 7504 + i32.const 7824 i32.load i32.gt_u if @@ -556,7 +562,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 7508 + i32.const 7828 i32.add i32.load i32.const 32 @@ -1121,10 +1127,10 @@ if unreachable end - i32.const 23952 + i32.const 24272 i32.const 0 i32.store - i32.const 25520 + i32.const 25840 i32.const 0 i32.store loop $for-loop|0 @@ -1135,7 +1141,7 @@ local.get $0 i32.const 2 i32.shl - i32.const 23952 + i32.const 24272 i32.add i32.const 0 i32.store offset=4 @@ -1153,7 +1159,7 @@ i32.add i32.const 2 i32.shl - i32.const 23952 + i32.const 24272 i32.add i32.const 0 i32.store offset=96 @@ -1171,13 +1177,13 @@ br $for-loop|0 end end - i32.const 23952 - i32.const 25524 + i32.const 24272 + i32.const 25844 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 23952 + i32.const 24272 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -1262,7 +1268,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 23948 + i32.const 24268 i32.lt_u if local.get $0 @@ -1362,7 +1368,7 @@ unreachable end local.get $0 - i32.const 23948 + i32.const 24268 i32.lt_u if local.get $0 @@ -1385,7 +1391,7 @@ i32.const 4 i32.add local.tee $0 - i32.const 23948 + i32.const 24268 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -2320,11 +2326,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 7564 + i32.const 7884 i32.lt_s if - i32.const 23968 - i32.const 24016 + i32.const 24288 + i32.const 24336 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -2530,81 +2536,237 @@ end local.get $2 ) - (func $~lib/string/String.__concat (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 7564 - i32.lt_s + (func $~lib/staticarray/StaticArray<~lib/string/String>#__uset (param $0 i32) (param $1 i32) (param $2 i32) + local.get $0 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.get $2 + i32.store + local.get $2 if - i32.const 23968 - i32.const 24016 - i32.const 1 + local.get $0 + local.get $2 i32.const 1 - call $~lib/builtins/abort - unreachable + call $byn-split-outlined-A$~lib/rt/itcms/__link end - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - block $__inlined_func$~lib/string/String#concat + ) + (func $~lib/staticarray/StaticArray<~lib/string/String>#join (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + block $__inlined_func$~lib/util/string/joinStringArray (result i32) local.get $0 i32.const 20 i32.sub i32.load offset=16 - i32.const 1 + i32.const 2 i32.shr_u - i32.const 1 - i32.shl - local.tee $3 - local.get $1 - i32.const 20 + local.set $4 + global.get $~lib/memory/__stack_pointer + i32.const 12 i32.sub - i32.load offset=16 - i32.const 1 - i32.shr_u + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 7884 + i32.lt_s + if + i32.const 24288 + i32.const 24336 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $5 + i64.const 0 + i64.store + local.get $5 + i32.const 0 + i32.store offset=8 + local.get $4 i32.const 1 - i32.shl - local.tee $4 - i32.add - local.tee $2 + i32.sub + local.tee $5 + i32.const 0 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + i32.const 12 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 3456 + br $__inlined_func$~lib/util/string/joinStringArray + end + local.get $5 i32.eqz if global.get $~lib/memory/__stack_pointer - i32.const 4 + local.tee $1 + local.get $0 + i32.load + local.tee $0 + i32.store + local.get $1 + i32.const 12 i32.add global.set $~lib/memory/__stack_pointer + local.get $0 i32.const 3456 - local.set $2 - br $__inlined_func$~lib/string/String#concat + local.get $0 + select + br $__inlined_func$~lib/util/string/joinStringArray + end + loop $for-loop|0 + local.get $3 + local.get $4 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + local.get $3 + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $6 + i32.store offset=4 + local.get $6 + if + local.get $1 + local.get $6 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + i32.add + local.set $1 + end + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|0 + end end global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $1 + i32.const 3452 + i32.load + i32.const 1 + i32.shr_u + local.tee $1 + local.get $5 + i32.mul + i32.add + i32.const 1 + i32.shl i32.const 1 call $~lib/rt/itcms/__new - local.tee $2 - i32.store - local.get $2 + local.tee $4 + i32.store offset=8 + i32.const 0 + local.set $3 + loop $for-loop|1 + local.get $3 + local.get $5 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + local.get $0 + local.get $3 + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $6 + i32.store offset=4 + local.get $6 + if + local.get $4 + local.get $2 + i32.const 1 + i32.shl + i32.add + local.get $6 + local.get $6 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + local.tee $6 + i32.const 1 + i32.shl + memory.copy + local.get $2 + local.get $6 + i32.add + local.set $2 + end + local.get $1 + if + local.get $4 + local.get $2 + i32.const 1 + i32.shl + i32.add + i32.const 3456 + local.get $1 + i32.const 1 + i32.shl + memory.copy + local.get $1 + local.get $2 + i32.add + local.set $2 + end + local.get $3 + i32.const 1 + i32.add + local.set $3 + br $for-loop|1 + end + end + global.get $~lib/memory/__stack_pointer local.get $0 - local.get $3 - memory.copy - local.get $2 - local.get $3 + local.get $5 + i32.const 2 + i32.shl i32.add - local.get $1 - local.get $4 - memory.copy + i32.load + local.tee $0 + i32.store offset=4 + local.get $0 + if + local.get $4 + local.get $2 + i32.const 1 + i32.shl + i32.add + local.get $0 + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + i32.const 1 + i32.shl + memory.copy + end global.get $~lib/memory/__stack_pointer - i32.const 4 + i32.const 12 i32.add global.set $~lib/memory/__stack_pointer + local.get $4 end - local.get $2 ) (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) (local $4 i32) @@ -2820,8 +2982,8 @@ i32.const 268435455 i32.gt_u if - i32.const 6448 - i32.const 6496 + i32.const 6768 + i32.const 6816 i32.const 19 i32.const 48 call $~lib/builtins/abort @@ -3311,359 +3473,365 @@ call $start:std/date ) (func $~lib/date/Date#toISOString (param $0 i32) (result i32) - (local $1 i32) - (local $2 i64) + (local $1 i64) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) global.get $~lib/memory/__stack_pointer - i32.const 112 + i32.const 44 i32.sub global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 7564 - i32.lt_s - if - i32.const 23968 - i32.const 24016 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.const 112 - memory.fill - local.get $0 - i32.load - local.tee $1 - i32.const 0 - i32.lt_s - local.tee $3 - local.get $1 - i32.const 10000 - i32.ge_s - i32.or - if + block $folding-inner0 global.get $~lib/memory/__stack_pointer - local.tee $4 - i32.const 1616 - i32.const 1648 - local.get $3 - select + i32.const 7884 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $2 + i32.const 0 + i32.const 44 + memory.fill + local.get $2 + local.get $0 + i32.load + local.tee $2 + i32.const 0 + i32.lt_s + local.tee $3 + local.get $2 + i32.const 10000 + i32.ge_s + i32.or + if (result i32) + block $__inlined_func$~lib/string/String#concat (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 1616 + i32.const 1648 + local.get $3 + select + local.tee $3 + i32.store + local.get $2 + i32.const 31 + i32.shr_s + local.tee $4 + local.get $2 + local.get $4 + i32.add + i32.xor + call $~lib/number/I32#toString + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 1872 + i32.store offset=12 + local.get $2 + i32.const 6 + call $~lib/string/String#padStart + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 7884 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $3 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + i32.const 1 + i32.shl + local.tee $4 + local.get $2 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + i32.const 1 + i32.shl + local.tee $5 + i32.add + local.tee $6 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + i32.const 3456 + br $__inlined_func$~lib/string/String#concat + end + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $6 + i32.store + local.get $6 + local.get $3 + local.get $4 + memory.copy + local.get $4 + local.get $6 + i32.add + local.get $2 + local.get $5 + memory.copy + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $6 + end + else + local.get $2 + call $~lib/number/I32#toString + local.set $2 + global.get $~lib/memory/__stack_pointer + local.tee $3 + local.get $2 + i32.store + local.get $3 + i32.const 1872 + i32.store offset=8 + local.get $2 + i32.const 4 + call $~lib/string/String#padStart + end + local.tee $2 + i32.store offset=16 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=4 + call $~lib/number/I32#toString + local.set $4 + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 1872 + i32.store offset=8 + local.get $4 + i32.const 2 + call $~lib/string/String#padStart local.tee $3 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load offset=8 + call $~lib/number/I32#toString + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $5 i32.store + global.get $~lib/memory/__stack_pointer + i32.const 1872 + i32.store offset=8 + local.get $5 + i32.const 2 + call $~lib/string/String#padStart + local.tee $4 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + i64.const 86400000 + i64.const 0 + local.get $0 + i64.load offset=16 + i64.const 86400000 + i64.rem_s + local.tee $1 + i64.const 0 + i64.lt_s + select local.get $1 - i32.const 31 - i32.shr_s + i64.add + i32.wrap_i64 + i32.const 3600000 + i32.div_s + call $~lib/number/I32#toString + local.set $6 + global.get $~lib/memory/__stack_pointer + local.get $6 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 1872 + i32.store offset=8 + local.get $6 + i32.const 2 + call $~lib/string/String#padStart local.tee $5 + i32.store offset=28 + global.get $~lib/memory/__stack_pointer + i64.const 3600000 + i64.const 0 + local.get $0 + i64.load offset=16 + i64.const 3600000 + i64.rem_s + local.tee $1 + i64.const 0 + i64.lt_s + select local.get $1 - local.get $5 - i32.add - i32.xor + i64.add + i32.wrap_i64 + i32.const 60000 + i32.div_s call $~lib/number/I32#toString - local.set $1 + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=8 + local.get $7 + i32.store global.get $~lib/memory/__stack_pointer i32.const 1872 - i32.store offset=12 - local.get $1 - i32.const 6 + i32.store offset=8 + local.get $7 + i32.const 2 call $~lib/string/String#padStart - local.set $1 + local.tee $6 + i32.store offset=32 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=4 - local.get $4 - local.get $3 - local.get $1 - call $~lib/string/String.__concat + i64.const 60000 + i64.const 0 + local.get $0 + i64.load offset=16 + i64.const 60000 + i64.rem_s local.tee $1 - i32.store offset=16 - else - global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.lt_s + select local.get $1 + i64.add + i32.wrap_i64 + i32.const 1000 + i32.div_s call $~lib/number/I32#toString - local.set $1 + local.set $8 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $8 i32.store global.get $~lib/memory/__stack_pointer i32.const 1872 i32.store offset=8 - local.get $1 - i32.const 4 + local.get $8 + i32.const 2 call $~lib/string/String#padStart + local.tee $7 + i32.store offset=36 + global.get $~lib/memory/__stack_pointer + i64.const 1000 + i64.const 0 + local.get $0 + i64.load offset=16 + i64.const 1000 + i64.rem_s local.tee $1 - i32.store offset=16 - end - global.get $~lib/memory/__stack_pointer - i32.const 1616 - i32.store offset=100 - local.get $1 - i32.const 1616 - call $~lib/string/String.__concat - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=92 - local.get $0 - i32.load offset=4 - call $~lib/number/I32#toString - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=104 - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=108 - local.get $3 - i32.const 2 - call $~lib/string/String#padStart - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=96 - local.get $1 - local.get $3 - call $~lib/string/String.__concat - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=84 - global.get $~lib/memory/__stack_pointer - i32.const 1616 - i32.store offset=88 - local.get $1 - i32.const 1616 - call $~lib/string/String.__concat - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=76 - local.get $0 - i32.load offset=8 - call $~lib/number/I32#toString - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=84 - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=92 - local.get $3 - i32.const 2 - call $~lib/string/String#padStart - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=80 - local.get $1 - local.get $3 - call $~lib/string/String.__concat - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=68 - global.get $~lib/memory/__stack_pointer - i32.const 3488 - i32.store offset=72 - local.get $1 - i32.const 3488 - call $~lib/string/String.__concat - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=60 - 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.lt_s - select - local.get $2 - i64.add - i32.wrap_i64 - i32.const 3600000 - i32.div_s - call $~lib/number/I32#toString - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=68 - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=76 - local.get $3 - i32.const 2 - call $~lib/string/String#padStart - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=64 - local.get $1 - local.get $3 - call $~lib/string/String.__concat - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=52 - global.get $~lib/memory/__stack_pointer - i32.const 3520 - i32.store offset=56 - local.get $1 - i32.const 3520 - call $~lib/string/String.__concat - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=44 - i64.const 3600000 - i64.const 0 - local.get $0 - i64.load offset=16 - i64.const 3600000 - i64.rem_s - local.tee $2 - i64.const 0 - i64.lt_s - select - local.get $2 - i64.add - i32.wrap_i64 - i32.const 60000 - i32.div_s - call $~lib/number/I32#toString - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=52 - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=60 - local.get $3 - i32.const 2 - call $~lib/string/String#padStart - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=48 - local.get $1 - local.get $3 - call $~lib/string/String.__concat - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=36 - global.get $~lib/memory/__stack_pointer - i32.const 3520 - i32.store offset=40 - local.get $1 - i32.const 3520 - call $~lib/string/String.__concat - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=28 - i64.const 60000 - i64.const 0 - local.get $0 - i64.load offset=16 - i64.const 60000 - i64.rem_s - local.tee $2 - i64.const 0 - i64.lt_s - select - local.get $2 - i64.add - i32.wrap_i64 - i32.const 1000 - i32.div_s - call $~lib/number/I32#toString - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=36 - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=44 - local.get $3 - i32.const 2 - call $~lib/string/String#padStart - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=32 - local.get $1 - local.get $3 - call $~lib/string/String.__concat - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=12 - global.get $~lib/memory/__stack_pointer - i32.const 3552 - i32.store offset=24 - local.get $1 - i32.const 3552 - call $~lib/string/String.__concat - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=8 - i64.const 1000 - i64.const 0 - local.get $0 - i64.load offset=16 - i64.const 1000 - i64.rem_s - local.tee $2 - i64.const 0 - i64.lt_s - select - local.get $2 - i64.add - i32.wrap_i64 - call $~lib/number/I32#toString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=12 - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=28 - local.get $0 - i32.const 3 - call $~lib/string/String#padStart - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=20 - local.get $1 - local.get $0 - call $~lib/string/String.__concat - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 3584 - i32.store offset=4 - local.get $0 - i32.const 3584 - call $~lib/string/String.__concat - global.get $~lib/memory/__stack_pointer - i32.const 112 - i32.add - global.set $~lib/memory/__stack_pointer + i64.const 0 + i64.lt_s + select + local.get $1 + i64.add + i32.wrap_i64 + call $~lib/number/I32#toString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 1872 + i32.store offset=8 + local.get $0 + i32.const 3 + call $~lib/string/String#padStart + local.tee $0 + i32.store offset=40 + global.get $~lib/memory/__stack_pointer + i32.const 3616 + i32.store + i32.const 3616 + i32.const 1 + local.get $2 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + global.get $~lib/memory/__stack_pointer + i32.const 3616 + i32.store + i32.const 3616 + i32.const 3 + local.get $3 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + global.get $~lib/memory/__stack_pointer + i32.const 3616 + i32.store + i32.const 3616 + i32.const 5 + local.get $4 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + global.get $~lib/memory/__stack_pointer + i32.const 3616 + i32.store + i32.const 3616 + i32.const 7 + local.get $5 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + global.get $~lib/memory/__stack_pointer + i32.const 3616 + i32.store + i32.const 3616 + i32.const 9 + local.get $6 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + global.get $~lib/memory/__stack_pointer + i32.const 3616 + i32.store + i32.const 3616 + i32.const 11 + local.get $7 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + global.get $~lib/memory/__stack_pointer + i32.const 3616 + i32.store + i32.const 3616 + i32.const 13 + local.get $0 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + global.get $~lib/memory/__stack_pointer + i32.const 3616 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 3456 + i32.store offset=4 + i32.const 3616 + call $~lib/staticarray/StaticArray<~lib/string/String>#join + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 24288 + i32.const 24336 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable ) (func $~lib/date/Date#toDateString (param $0 i32) (result i32) (local $1 i32) @@ -3674,15 +3842,15 @@ (local $6 i32) (local $7 i32) global.get $~lib/memory/__stack_pointer - i32.const 44 + i32.const 40 i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 7564 + i32.const 7884 i32.lt_s if - i32.const 23968 - i32.const 24016 + i32.const 24288 + i32.const 24336 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3691,73 +3859,73 @@ global.get $~lib/memory/__stack_pointer local.tee $1 i32.const 0 - i32.const 44 + i32.const 40 memory.fill i32.const 28 i32.const 4 call $~lib/rt/itcms/__new - local.tee $3 - i32.const 4560 + local.tee $2 + i32.const 4640 i32.const 28 memory.copy local.get $1 - local.get $3 + local.get $2 i32.store global.get $~lib/memory/__stack_pointer i32.const 48 i32.const 4 call $~lib/rt/itcms/__new - local.tee $2 - i32.const 4992 + local.tee $3 + i32.const 5072 i32.const 48 memory.copy - local.get $2 + local.get $3 i32.store offset=4 local.get $0 i32.load - local.tee $4 + local.tee $1 local.get $0 i32.load offset=4 - local.tee $5 + local.tee $4 i32.const 3 i32.lt_s i32.sub - local.set $6 + local.set $5 i32.const 7 i32.const 0 local.get $0 i32.load offset=8 - local.tee $1 - local.get $5 + local.tee $0 + local.get $4 i32.const 1579 i32.add i32.load8_u - local.get $6 - local.get $6 - local.get $6 + local.get $5 + local.get $5 + local.get $5 i32.const 3 i32.sub - local.get $6 + local.get $5 i32.const 0 i32.ge_s - local.tee $0 + local.tee $6 select i32.const 4 i32.div_s - local.get $6 - local.get $6 + local.get $5 + local.get $5 i32.const 99 i32.sub - local.get $0 + local.get $6 select i32.const 100 i32.div_s i32.sub - local.get $6 - local.get $6 + local.get $5 + local.get $5 i32.const 399 i32.sub - local.get $0 + local.get $6 select i32.const 400 i32.div_s @@ -3767,19 +3935,19 @@ i32.add i32.const 7 i32.rem_s - local.tee $0 + local.tee $5 i32.const 0 i32.lt_s select - local.get $0 + local.get $5 i32.add - local.set $6 + local.set $5 global.get $~lib/memory/__stack_pointer - local.get $4 + local.get $1 i32.const 31 i32.shr_s local.tee $7 - local.get $4 + local.get $1 local.get $7 i32.add i32.xor @@ -3794,89 +3962,97 @@ local.get $7 i32.const 4 call $~lib/string/String#padStart - local.tee $0 + local.tee $6 i32.store offset=16 - local.get $4 - i32.const 0 - i32.lt_s - if - global.get $~lib/memory/__stack_pointer - local.tee $4 - i32.const 1616 - i32.store offset=8 - local.get $4 - i32.const 1616 - local.get $0 - call $~lib/string/String.__concat - local.tee $0 - i32.store offset=16 - end global.get $~lib/memory/__stack_pointer - local.tee $4 local.get $3 - local.get $6 + local.get $4 + i32.const 1 + i32.sub i32.const 2 i32.shl i32.add i32.load local.tee $3 - i32.store offset=32 - local.get $4 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer local.get $2 local.get $5 - i32.const 1 - i32.sub i32.const 2 i32.shl i32.add i32.load local.tee $2 - i32.store offset=36 - local.get $3 - local.get $2 - call $~lib/string/String.__concat - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 i32.store offset=24 - local.get $1 + global.get $~lib/memory/__stack_pointer + local.get $0 call $~lib/number/I32#toString - local.set $1 + local.set $0 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=32 + local.get $0 + i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 1872 - i32.store offset=40 - local.get $1 + i32.store offset=12 + local.get $0 i32.const 2 call $~lib/string/String#padStart - local.set $1 + local.tee $0 + i32.store offset=28 global.get $~lib/memory/__stack_pointer + i32.const 5216 + i32.const 5248 local.get $1 - i32.store offset=28 + i32.const 0 + i32.lt_s + select + local.tee $1 + i32.store offset=32 + global.get $~lib/memory/__stack_pointer + i32.const 5152 + i32.store offset=8 + i32.const 5152 + i32.const 1 local.get $2 - local.get $1 - call $~lib/string/String.__concat - local.set $1 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=20 + i32.const 5152 + i32.store offset=8 + i32.const 5152 + i32.const 3 + local.get $3 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer - i32.const 5072 - i32.store offset=12 - local.get $1 - i32.const 5072 - call $~lib/string/String.__concat - local.set $1 + i32.const 5152 + i32.store offset=8 + i32.const 5152 + i32.const 5 + local.get $0 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer - local.get $1 + i32.const 5152 i32.store offset=8 + i32.const 5152 + i32.const 7 local.get $1 - local.get $0 - call $~lib/string/String.__concat + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer - i32.const 44 + i32.const 5152 + i32.store offset=8 + i32.const 5152 + i32.const 9 + local.get $6 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + global.get $~lib/memory/__stack_pointer + i32.const 5152 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 3456 + i32.store offset=36 + i32.const 5152 + call $~lib/staticarray/StaticArray<~lib/string/String>#join + global.get $~lib/memory/__stack_pointer + i32.const 40 i32.add global.set $~lib/memory/__stack_pointer ) @@ -3884,24 +4060,26 @@ (local $1 i64) (local $2 i32) (local $3 i32) + (local $4 i32) global.get $~lib/memory/__stack_pointer - i32.const 40 + i32.const 24 i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 7564 + i32.const 7884 i32.lt_s if - i32.const 23968 - i32.const 24016 + i32.const 24288 + i32.const 24336 i32.const 1 i32.const 1 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer + local.tee $2 i32.const 0 - i32.const 40 + i32.const 24 memory.fill i64.const 86400000 i64.const 0 @@ -3919,30 +4097,20 @@ i32.const 3600000 i32.div_s call $~lib/number/I32#toString - local.set $2 + local.set $3 global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=32 + local.get $3 + i32.store global.get $~lib/memory/__stack_pointer i32.const 1872 - i32.store offset=36 + i32.store offset=4 local.get $2 + local.get $3 i32.const 2 call $~lib/string/String#padStart - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=24 - global.get $~lib/memory/__stack_pointer - i32.const 3520 - i32.store offset=28 - local.get $2 - i32.const 3520 - call $~lib/string/String.__concat - local.set $2 + local.tee $2 + i32.store offset=8 global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=16 i64.const 3600000 i64.const 0 local.get $0 @@ -3959,37 +4127,19 @@ i32.const 60000 i32.div_s call $~lib/number/I32#toString - local.set $3 + local.set $4 global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=24 + local.get $4 + i32.store global.get $~lib/memory/__stack_pointer i32.const 1872 - i32.store offset=32 - local.get $3 + i32.store offset=4 + local.get $4 i32.const 2 call $~lib/string/String#padStart - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=20 - local.get $2 - local.get $3 - call $~lib/string/String.__concat - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 3520 + local.tee $3 i32.store offset=12 - local.get $2 - i32.const 3520 - call $~lib/string/String.__concat - local.set $2 global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store i64.const 60000 i64.const 0 local.get $0 @@ -4009,28 +4159,52 @@ local.set $0 global.get $~lib/memory/__stack_pointer local.get $0 - i32.store offset=8 + i32.store global.get $~lib/memory/__stack_pointer i32.const 1872 - i32.store offset=16 + i32.store offset=4 local.get $0 i32.const 2 call $~lib/string/String#padStart - local.set $0 + local.tee $0 + i32.store offset=16 global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=4 + i32.const 5472 + i32.store + i32.const 5472 + i32.const 1 local.get $2 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + global.get $~lib/memory/__stack_pointer + i32.const 5472 + i32.store + i32.const 5472 + i32.const 3 + local.get $3 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + global.get $~lib/memory/__stack_pointer + i32.const 5472 + i32.store + i32.const 5472 + i32.const 5 local.get $0 - call $~lib/string/String.__concat + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer - i32.const 40 + i32.const 5472 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 3456 + i32.store offset=20 + i32.const 5472 + call $~lib/staticarray/StaticArray<~lib/string/String>#join + global.get $~lib/memory/__stack_pointer + i32.const 24 i32.add global.set $~lib/memory/__stack_pointer ) (func $~lib/date/Date#toUTCString (param $0 i32) (result i32) - (local $1 i32) - (local $2 i64) + (local $1 i64) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4039,33 +4213,33 @@ (local $8 i32) (local $9 i32) global.get $~lib/memory/__stack_pointer - i32.const 96 + i32.const 52 i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 7564 + i32.const 7884 i32.lt_s if - i32.const 23968 - i32.const 24016 + i32.const 24288 + i32.const 24336 i32.const 1 i32.const 1 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - local.tee $1 + local.tee $2 i32.const 0 - i32.const 96 + i32.const 52 memory.fill i32.const 28 i32.const 4 call $~lib/rt/itcms/__new local.tee $3 - i32.const 5616 + i32.const 5840 i32.const 28 memory.copy - local.get $1 + local.get $2 local.get $3 i32.store global.get $~lib/memory/__stack_pointer @@ -4073,44 +4247,44 @@ i32.const 4 call $~lib/rt/itcms/__new local.tee $4 - i32.const 6048 + i32.const 6272 i32.const 48 memory.copy local.get $4 i32.store offset=4 local.get $0 i32.load - local.tee $5 + local.tee $2 local.get $0 i32.load offset=4 - local.tee $6 + local.tee $5 i32.const 3 i32.lt_s i32.sub - local.set $1 + local.set $6 i32.const 7 i32.const 0 local.get $0 i32.load offset=8 local.tee $7 - local.get $6 + local.get $5 i32.const 1579 i32.add i32.load8_u - local.get $1 - local.get $1 - local.get $1 + local.get $6 + local.get $6 + local.get $6 i32.const 3 i32.sub - local.get $1 + local.get $6 i32.const 0 i32.ge_s local.tee $8 select i32.const 4 - i32.div_s - local.get $1 - local.get $1 + i32.div_s + local.get $6 + local.get $6 i32.const 99 i32.sub local.get $8 @@ -4118,8 +4292,8 @@ i32.const 100 i32.div_s i32.sub - local.get $1 - local.get $1 + local.get $6 + local.get $6 i32.const 399 i32.sub local.get $8 @@ -4132,19 +4306,19 @@ i32.add i32.const 7 i32.rem_s - local.tee $1 + local.tee $6 i32.const 0 i32.lt_s select - local.get $1 + local.get $6 i32.add - local.set $8 + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $5 + local.get $2 i32.const 31 i32.shr_s local.tee $9 - local.get $5 + local.get $2 local.get $9 i32.add i32.xor @@ -4159,195 +4333,113 @@ local.get $9 i32.const 4 call $~lib/string/String#padStart - local.tee $1 + local.tee $8 i32.store offset=16 - local.get $5 - i32.const 0 - i32.lt_s - if - global.get $~lib/memory/__stack_pointer - local.tee $5 - i32.const 1616 - i32.store offset=8 - local.get $5 - i32.const 1616 - local.get $1 - call $~lib/string/String.__concat - local.tee $1 - i32.store offset=16 - end global.get $~lib/memory/__stack_pointer - local.get $3 - local.get $8 + local.get $4 + local.get $5 + i32.const 1 + i32.sub i32.const 2 i32.shl i32.add i32.load - local.tee $3 - i32.store offset=80 - local.get $7 - call $~lib/number/I32#toString - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=88 - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=92 - local.get $5 - i32.const 2 - call $~lib/string/String#padStart - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store offset=84 - local.get $3 - local.get $5 - call $~lib/string/String.__concat - local.set $3 + local.tee $4 + i32.store offset=20 global.get $~lib/memory/__stack_pointer local.get $3 - i32.store offset=72 - global.get $~lib/memory/__stack_pointer - local.get $4 local.get $6 - i32.const 1 - i32.sub i32.const 2 i32.shl i32.add i32.load - local.tee $4 - i32.store offset=76 - local.get $3 - local.get $4 - call $~lib/string/String.__concat - local.set $3 + local.tee $3 + i32.store offset=24 global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=68 - local.get $3 - local.get $1 - call $~lib/string/String.__concat - local.set $1 + local.get $7 + call $~lib/number/I32#toString + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=60 + local.get $6 + i32.store offset=8 global.get $~lib/memory/__stack_pointer - i32.const 5072 - i32.store offset=64 - local.get $1 - i32.const 5072 - call $~lib/string/String.__concat - local.set $1 + i32.const 1872 + i32.store offset=12 + local.get $6 + i32.const 2 + call $~lib/string/String#padStart + local.tee $5 + i32.store offset=28 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=52 i64.const 86400000 i64.const 0 local.get $0 i64.load offset=16 i64.const 86400000 i64.rem_s - local.tee $2 + local.tee $1 i64.const 0 i64.lt_s select - local.get $2 + local.get $1 i64.add i32.wrap_i64 i32.const 3600000 i32.div_s call $~lib/number/I32#toString - local.set $3 + local.set $7 global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=60 + local.get $7 + i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 1872 - i32.store offset=68 - local.get $3 + i32.store offset=12 + local.get $7 i32.const 2 call $~lib/string/String#padStart - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=56 - local.get $1 - local.get $3 - call $~lib/string/String.__concat - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=44 - global.get $~lib/memory/__stack_pointer - i32.const 3520 - i32.store offset=48 - local.get $1 - i32.const 3520 - call $~lib/string/String.__concat - local.set $1 + local.tee $6 + i32.store offset=32 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=36 i64.const 3600000 i64.const 0 local.get $0 i64.load offset=16 i64.const 3600000 i64.rem_s - local.tee $2 + local.tee $1 i64.const 0 i64.lt_s select - local.get $2 + local.get $1 i64.add i32.wrap_i64 i32.const 60000 i32.div_s call $~lib/number/I32#toString - local.set $3 + local.set $9 global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=44 + local.get $9 + i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 1872 - i32.store offset=52 - local.get $3 + i32.store offset=12 + local.get $9 i32.const 2 call $~lib/string/String#padStart - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store offset=40 - local.get $1 - local.get $3 - call $~lib/string/String.__concat - local.set $1 - global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=28 - global.get $~lib/memory/__stack_pointer - i32.const 3520 - i32.store offset=32 - local.get $1 - i32.const 3520 - call $~lib/string/String.__concat - local.set $1 + local.tee $7 + i32.store offset=36 global.get $~lib/memory/__stack_pointer - local.get $1 - i32.store offset=12 i64.const 60000 i64.const 0 local.get $0 i64.load offset=16 i64.const 60000 i64.rem_s - local.tee $2 + local.tee $1 i64.const 0 i64.lt_s select - local.get $2 + local.get $1 i64.add i32.wrap_i64 i32.const 1000 @@ -4356,32 +4448,90 @@ local.set $0 global.get $~lib/memory/__stack_pointer local.get $0 - i32.store offset=28 + i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 1872 - i32.store offset=36 + i32.store offset=12 local.get $0 i32.const 2 call $~lib/string/String#padStart - local.set $0 + local.tee $0 + i32.store offset=40 global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=24 - local.get $1 - local.get $0 - call $~lib/string/String.__concat - local.set $0 + i32.const 1616 + i32.const 3456 + local.get $2 + i32.const 0 + i32.lt_s + select + local.tee $2 + i32.store offset=44 global.get $~lib/memory/__stack_pointer - local.get $0 + i32.const 6384 i32.store offset=8 + i32.const 6384 + i32.const 1 + local.get $3 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer - i32.const 6128 - i32.store offset=20 + i32.const 6384 + i32.store offset=8 + i32.const 6384 + i32.const 3 + local.get $5 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + global.get $~lib/memory/__stack_pointer + i32.const 6384 + i32.store offset=8 + i32.const 6384 + i32.const 5 + local.get $4 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + global.get $~lib/memory/__stack_pointer + i32.const 6384 + i32.store offset=8 + i32.const 6384 + i32.const 7 + local.get $2 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + global.get $~lib/memory/__stack_pointer + i32.const 6384 + i32.store offset=8 + i32.const 6384 + i32.const 9 + local.get $8 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + global.get $~lib/memory/__stack_pointer + i32.const 6384 + i32.store offset=8 + i32.const 6384 + i32.const 11 + local.get $6 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + global.get $~lib/memory/__stack_pointer + i32.const 6384 + i32.store offset=8 + i32.const 6384 + i32.const 13 + local.get $7 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + global.get $~lib/memory/__stack_pointer + i32.const 6384 + i32.store offset=8 + i32.const 6384 + i32.const 15 local.get $0 - i32.const 6128 - call $~lib/string/String.__concat + call $~lib/staticarray/StaticArray<~lib/string/String>#__uset + global.get $~lib/memory/__stack_pointer + i32.const 6384 + i32.store offset=8 global.get $~lib/memory/__stack_pointer - i32.const 96 + i32.const 3456 + i32.store offset=48 + i32.const 6384 + call $~lib/staticarray/StaticArray<~lib/string/String>#join + global.get $~lib/memory/__stack_pointer + i32.const 52 i32.add global.set $~lib/memory/__stack_pointer ) @@ -4399,11 +4549,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 7564 + i32.const 7884 i32.lt_s if - i32.const 23968 - i32.const 24016 + i32.const 24288 + i32.const 24336 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -4678,11 +4828,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 7564 + i32.const 7884 i32.lt_s if - i32.const 23968 - i32.const 24016 + i32.const 24288 + i32.const 24336 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -4910,11 +5060,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 7564 + i32.const 7884 i32.lt_s if - i32.const 23968 - i32.const 24016 + i32.const 24288 + i32.const 24336 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -5117,7 +5267,7 @@ memory.size i32.const 16 i32.shl - i32.const 23948 + i32.const 24268 i32.sub i32.const 1 i32.shr_u @@ -7148,10 +7298,10 @@ local.get $0 i32.store offset=28 global.get $~lib/memory/__stack_pointer - i32.const 3616 + i32.const 3696 i32.store offset=32 local.get $0 - i32.const 3616 + i32.const 3696 call $~lib/string/String.__eq i32.eqz if @@ -7174,10 +7324,10 @@ local.get $0 i32.store offset=28 global.get $~lib/memory/__stack_pointer - i32.const 3696 + i32.const 3776 i32.store offset=32 local.get $0 - i32.const 3696 + i32.const 3776 call $~lib/string/String.__eq i32.eqz if @@ -7200,10 +7350,10 @@ local.get $0 i32.store offset=28 global.get $~lib/memory/__stack_pointer - i32.const 3776 + i32.const 3856 i32.store offset=32 local.get $0 - i32.const 3776 + i32.const 3856 call $~lib/string/String.__eq i32.eqz if @@ -7226,10 +7376,10 @@ local.get $0 i32.store offset=28 global.get $~lib/memory/__stack_pointer - i32.const 3856 + i32.const 3936 i32.store offset=32 local.get $0 - i32.const 3856 + i32.const 3936 call $~lib/string/String.__eq i32.eqz if @@ -7252,10 +7402,10 @@ local.get $0 i32.store offset=28 global.get $~lib/memory/__stack_pointer - i32.const 3936 + i32.const 4016 i32.store offset=32 local.get $0 - i32.const 3936 + i32.const 4016 call $~lib/string/String.__eq i32.eqz if @@ -7278,10 +7428,10 @@ local.get $0 i32.store offset=28 global.get $~lib/memory/__stack_pointer - i32.const 4016 + i32.const 4096 i32.store offset=32 local.get $0 - i32.const 4016 + i32.const 4096 call $~lib/string/String.__eq i32.eqz if @@ -7304,10 +7454,10 @@ local.get $0 i32.store offset=28 global.get $~lib/memory/__stack_pointer - i32.const 4096 + i32.const 4176 i32.store offset=32 local.get $0 - i32.const 4096 + i32.const 4176 call $~lib/string/String.__eq i32.eqz if @@ -7330,10 +7480,10 @@ local.get $0 i32.store offset=28 global.get $~lib/memory/__stack_pointer - i32.const 4176 + i32.const 4256 i32.store offset=32 local.get $0 - i32.const 4176 + i32.const 4256 call $~lib/string/String.__eq i32.eqz if @@ -7356,10 +7506,10 @@ local.get $0 i32.store offset=28 global.get $~lib/memory/__stack_pointer - i32.const 4256 + i32.const 4336 i32.store offset=32 local.get $0 - i32.const 4256 + i32.const 4336 call $~lib/string/String.__eq i32.eqz if @@ -7382,10 +7532,10 @@ local.get $0 i32.store offset=28 global.get $~lib/memory/__stack_pointer - i32.const 5104 + i32.const 5280 i32.store offset=32 local.get $0 - i32.const 5104 + i32.const 5280 call $~lib/string/String.__eq i32.eqz if @@ -7408,10 +7558,10 @@ local.get $0 i32.store offset=28 global.get $~lib/memory/__stack_pointer - i32.const 5168 + i32.const 5344 i32.store offset=32 local.get $0 - i32.const 5168 + i32.const 5344 call $~lib/string/String.__eq i32.eqz if @@ -7434,10 +7584,10 @@ local.get $0 i32.store offset=28 global.get $~lib/memory/__stack_pointer - i32.const 5232 + i32.const 5408 i32.store offset=32 local.get $0 - i32.const 5232 + i32.const 5408 call $~lib/string/String.__eq i32.eqz if @@ -7460,10 +7610,10 @@ local.get $0 i32.store offset=28 global.get $~lib/memory/__stack_pointer - i32.const 5296 + i32.const 5520 i32.store offset=32 local.get $0 - i32.const 5296 + i32.const 5520 call $~lib/string/String.__eq i32.eqz if @@ -7486,10 +7636,10 @@ local.get $0 i32.store offset=28 global.get $~lib/memory/__stack_pointer - i32.const 5344 + i32.const 5568 i32.store offset=32 local.get $0 - i32.const 5344 + i32.const 5568 call $~lib/string/String.__eq i32.eqz if @@ -7512,10 +7662,10 @@ local.get $0 i32.store offset=28 global.get $~lib/memory/__stack_pointer - i32.const 6160 + i32.const 6480 i32.store offset=32 local.get $0 - i32.const 6160 + i32.const 6480 call $~lib/string/String.__eq i32.eqz if @@ -7538,10 +7688,10 @@ local.get $0 i32.store offset=28 global.get $~lib/memory/__stack_pointer - i32.const 6240 + i32.const 6560 i32.store offset=32 local.get $0 - i32.const 6240 + i32.const 6560 call $~lib/string/String.__eq i32.eqz if @@ -7564,10 +7714,10 @@ local.get $0 i32.store offset=28 global.get $~lib/memory/__stack_pointer - i32.const 6320 + i32.const 6640 i32.store offset=32 local.get $0 - i32.const 6320 + i32.const 6640 call $~lib/string/String.__eq i32.eqz if @@ -7580,10 +7730,10 @@ end global.get $~lib/memory/__stack_pointer local.tee $0 - i32.const 6400 + i32.const 6720 i32.store offset=28 local.get $0 - i32.const 6400 + i32.const 6720 call $~lib/date/Date.fromString local.tee $0 i32.store offset=4 @@ -7601,10 +7751,10 @@ end global.get $~lib/memory/__stack_pointer local.tee $0 - i32.const 6672 + i32.const 6992 i32.store offset=28 local.get $0 - i32.const 6672 + i32.const 6992 call $~lib/date/Date.fromString local.tee $0 i32.store offset=4 @@ -7622,10 +7772,10 @@ end global.get $~lib/memory/__stack_pointer local.tee $0 - i32.const 6720 + i32.const 7040 i32.store offset=28 local.get $0 - i32.const 6720 + i32.const 7040 call $~lib/date/Date.fromString local.tee $0 i32.store offset=4 @@ -7643,10 +7793,10 @@ end global.get $~lib/memory/__stack_pointer local.tee $0 - i32.const 6768 + i32.const 7088 i32.store offset=28 local.get $0 - i32.const 6768 + i32.const 7088 call $~lib/date/Date.fromString local.tee $0 i32.store offset=4 @@ -7664,10 +7814,10 @@ end global.get $~lib/memory/__stack_pointer local.tee $0 - i32.const 6832 + i32.const 7152 i32.store offset=28 local.get $0 - i32.const 6832 + i32.const 7152 call $~lib/date/Date.fromString local.tee $0 i32.store offset=4 @@ -7685,10 +7835,10 @@ end global.get $~lib/memory/__stack_pointer local.tee $0 - i32.const 6912 + i32.const 7232 i32.store offset=28 local.get $0 - i32.const 6912 + i32.const 7232 call $~lib/date/Date.fromString local.tee $0 i32.store offset=4 @@ -7706,10 +7856,10 @@ end global.get $~lib/memory/__stack_pointer local.tee $0 - i32.const 6992 + i32.const 7312 i32.store offset=28 local.get $0 - i32.const 6992 + i32.const 7312 call $~lib/date/Date.fromString local.tee $0 i32.store offset=4 @@ -7727,10 +7877,10 @@ end global.get $~lib/memory/__stack_pointer local.tee $0 - i32.const 7024 + i32.const 7344 i32.store offset=28 local.get $0 - i32.const 7024 + i32.const 7344 call $~lib/date/Date.fromString local.tee $0 i32.store offset=4 @@ -7748,10 +7898,10 @@ end global.get $~lib/memory/__stack_pointer local.tee $0 - i32.const 7056 + i32.const 7376 i32.store offset=28 local.get $0 - i32.const 7056 + i32.const 7376 call $~lib/date/Date.fromString local.tee $0 i32.store offset=4 @@ -7769,10 +7919,10 @@ end global.get $~lib/memory/__stack_pointer local.tee $0 - i32.const 7088 + i32.const 7408 i32.store offset=28 local.get $0 - i32.const 7088 + i32.const 7408 call $~lib/date/Date.fromString local.tee $0 i32.store offset=4 @@ -7790,10 +7940,10 @@ end global.get $~lib/memory/__stack_pointer local.tee $0 - i32.const 6400 + i32.const 6720 i32.store offset=28 local.get $0 - i32.const 6400 + i32.const 6720 call $~lib/date/Date.fromString local.tee $0 i32.store offset=4 @@ -7811,10 +7961,10 @@ end global.get $~lib/memory/__stack_pointer local.tee $0 - i32.const 7136 + i32.const 7456 i32.store offset=28 local.get $0 - i32.const 7136 + i32.const 7456 call $~lib/date/Date.fromString local.tee $0 i32.store offset=4 @@ -7832,10 +7982,10 @@ end global.get $~lib/memory/__stack_pointer local.tee $0 - i32.const 6768 + i32.const 7088 i32.store offset=28 local.get $0 - i32.const 6768 + i32.const 7088 call $~lib/date/Date.fromString local.tee $0 i32.store offset=4 @@ -7965,10 +8115,10 @@ local.get $0 i32.store offset=28 local.get $3 - i32.const 7200 + i32.const 7520 i32.store offset=32 local.get $0 - i32.const 7200 + i32.const 7520 call $~lib/string/String.__eq i32.eqz if @@ -7987,10 +8137,10 @@ local.get $0 i32.store offset=28 local.get $2 - i32.const 7280 + i32.const 7600 i32.store offset=32 local.get $0 - i32.const 7280 + i32.const 7600 call $~lib/string/String.__eq i32.eqz if @@ -8147,10 +8297,10 @@ local.get $0 i32.store offset=28 local.get $3 - i32.const 7360 + i32.const 7680 i32.store offset=32 local.get $0 - i32.const 7360 + i32.const 7680 call $~lib/string/String.__eq i32.eqz if @@ -8169,10 +8319,10 @@ local.get $0 i32.store offset=28 local.get $2 - i32.const 7440 + i32.const 7760 i32.store offset=32 local.get $0 - i32.const 7440 + i32.const 7760 call $~lib/string/String.__eq i32.eqz if @@ -8203,11 +8353,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 7564 + i32.const 7884 i32.lt_s if - i32.const 23968 - i32.const 24016 + i32.const 24288 + i32.const 24336 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -8289,11 +8439,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 7564 + i32.const 7884 i32.lt_s if - i32.const 23968 - i32.const 24016 + i32.const 24288 + i32.const 24336 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -8412,11 +8562,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 7564 + i32.const 7884 i32.lt_s if - i32.const 23968 - i32.const 24016 + i32.const 24288 + i32.const 24336 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -8528,11 +8678,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 7564 + i32.const 7884 i32.lt_s if - i32.const 23968 - i32.const 24016 + i32.const 24288 + i32.const 24336 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -8585,11 +8735,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 7564 + i32.const 7884 i32.lt_s if - i32.const 23968 - i32.const 24016 + i32.const 24288 + i32.const 24336 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -8604,7 +8754,7 @@ i32.ge_u if i32.const 1392 - i32.const 6496 + i32.const 6816 i32.const 114 i32.const 42 call $~lib/builtins/abort @@ -8623,8 +8773,8 @@ local.get $0 i32.eqz if - i32.const 6544 - i32.const 6496 + i32.const 6864 + i32.const 6816 i32.const 118 i32.const 40 call $~lib/builtins/abort From b7e570b042457a225063011a12adff92e2a2c56d Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 1 Aug 2022 16:51:55 +0300 Subject: [PATCH 2/6] reduce code size by exposing new join helper --- std/assembly/date.ts | 29 ++-- tests/compiler/std/date.debug.wat | 123 +++++---------- tests/compiler/std/date.release.wat | 228 ++++++---------------------- 3 files changed, 98 insertions(+), 282 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index a6a9f27dfd..216dbd989a 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -164,20 +164,17 @@ export class Date { setUTCDate(day: i32): void { if (this.day == day) return; - var ms = euclidRem(this.epochMillis, MILLIS_PER_DAY); - this.setTime(i64(daysSinceEpoch(this.year, this.month, day)) * MILLIS_PER_DAY + ms); + this.setTime(join(this.year, this.month, day, this.epochMillis)); } setUTCMonth(month: i32, day: i32 = this.day): void { if (this.month == month + 1) return; - var ms = euclidRem(this.epochMillis, MILLIS_PER_DAY); - this.setTime(i64(daysSinceEpoch(this.year, month + 1, day)) * MILLIS_PER_DAY + ms); + this.setTime(join(this.year, month + 1, day, this.epochMillis)); } setUTCFullYear(year: i32): void { if (this.year == year) return; - var ms = euclidRem(this.epochMillis, MILLIS_PER_DAY); - this.setTime(i64(daysSinceEpoch(year, this.month, this.day)) * MILLIS_PER_DAY + ms); + this.setTime(join(year, this.month, this.day, this.epochMillis)); } toISOString(): string { @@ -190,12 +187,12 @@ export class Date { : yr.toString().padStart(4, "0"); var month = this.month.toString().padStart(2, "0"); var day = this.day.toString().padStart(2, "0"); - var hour = this.getUTCHours().toString().padStart(2, "0"); - var min = this.getUTCMinutes().toString().padStart(2, "0"); - var sec = this.getUTCSeconds().toString().padStart(2, "0"); + var hours = this.getUTCHours().toString().padStart(2, "0"); + var mins = this.getUTCMinutes().toString().padStart(2, "0"); + var secs = this.getUTCSeconds().toString().padStart(2, "0"); var ms = this.getUTCMilliseconds().toString().padStart(3, "0"); - return `${year}-${month}-${day}T${hour}:${min}:${sec}.${ms}Z`; + return `${year}-${month}-${day}T${hours}:${mins}:${secs}.${ms}Z`; } toUTCString(): string { @@ -216,11 +213,11 @@ export class Date { var month = unchecked(months[mo - 1]); var week = unchecked(weeks[wd]); var day = da.toString().padStart(2, "0"); - var hour = this.getUTCHours().toString().padStart(2, "0"); - var min = this.getUTCMinutes().toString().padStart(2, "0"); - var sec = this.getUTCSeconds().toString().padStart(2, "0"); + var hours = this.getUTCHours().toString().padStart(2, "0"); + var mins = this.getUTCMinutes().toString().padStart(2, "0"); + var secs = this.getUTCSeconds().toString().padStart(2, "0"); - return `${week}${day}${month}${yr < 0 ? "-" : ""}${year} ${hour}:${min}:${sec} GMT`; + return `${week}${day}${month}${yr < 0 ? "-" : ""}${year} ${hours}:${mins}:${secs} GMT`; } toDateString(): string { @@ -331,3 +328,7 @@ function dayOfWeek(year: i32, month: i32, day: i32): i32 { month = load(tab + month - 1); return euclidRem(year + month + day, 7); } + +function join(year: i32, month: i32, day: i32, ms: i64): i64 { + return daysSinceEpoch(year, month, day) * MILLIS_PER_DAY + euclidRem(ms, MILLIS_PER_DAY); +} diff --git a/tests/compiler/std/date.debug.wat b/tests/compiler/std/date.debug.wat index ff9164e27b..9d3dd7ec25 100644 --- a/tests/compiler/std/date.debug.wat +++ b/tests/compiler/std/date.debug.wat @@ -12,6 +12,7 @@ (type $none_=>_i32 (func (result i32))) (type $i32_i64_=>_none (func (param i32 i64))) (type $i32_i64_=>_i64 (func (param i32 i64) (result i64))) + (type $i32_i32_i32_i64_=>_i64 (func (param i32 i32 i32 i64) (result i64))) (type $i32_i64_i32_=>_none (func (param i32 i64 i32))) (type $i64_i32_=>_i32 (func (param i64 i32) (result i32))) (type $i32_i64_i32_i32_=>_none (func (param i32 i64 i32 i32))) @@ -2699,60 +2700,60 @@ call $~lib/date/Date#setTime drop ) - (func $~lib/date/Date#setUTCDate (param $0 i32) (param $1 i32) - (local $2 i64) - (local $3 i64) + (func $~lib/date/join (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i64) (result i64) (local $4 i64) (local $5 i64) + (local $6 i64) local.get $0 - i32.load offset=8 local.get $1 - i32.eq - if - return - end - local.get $0 - i64.load offset=16 - local.set $3 + local.get $2 + call $~lib/date/daysSinceEpoch + i64.extend_i32_s i32.const 86400000 i64.extend_i32_s - local.set $2 + i64.mul local.get $3 - local.get $2 - i64.rem_s + local.set $5 + i32.const 86400000 + i64.extend_i32_s local.set $4 + local.get $5 local.get $4 - local.get $4 + i64.rem_s + local.set $6 + local.get $6 + local.get $6 i64.const 0 i64.lt_s if (result i64) - local.get $2 + local.get $4 else i64.const 0 end i64.add - local.set $5 + i64.add + ) + (func $~lib/date/Date#setUTCDate (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=8 + local.get $1 + i32.eq + if + return + end local.get $0 local.get $0 i32.load local.get $0 i32.load offset=4 local.get $1 - call $~lib/date/daysSinceEpoch - i64.extend_i32_s - i32.const 86400000 - i64.extend_i32_s - i64.mul - local.get $5 - i64.add + local.get $0 + i64.load offset=16 + call $~lib/date/join call $~lib/date/Date#setTime drop ) (func $~lib/date/Date#setUTCMonth (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i64) - (local $4 i64) - (local $5 i64) - (local $6 i64) local.get $0 i32.load offset=4 local.get $1 @@ -2763,40 +2764,15 @@ return end local.get $0 - i64.load offset=16 - local.set $4 - i32.const 86400000 - i64.extend_i32_s - local.set $3 - local.get $4 - local.get $3 - i64.rem_s - local.set $5 - local.get $5 - local.get $5 - i64.const 0 - i64.lt_s - if (result i64) - local.get $3 - else - i64.const 0 - end - i64.add - local.set $6 - local.get $0 local.get $0 i32.load local.get $1 i32.const 1 i32.add local.get $2 - call $~lib/date/daysSinceEpoch - i64.extend_i32_s - i32.const 86400000 - i64.extend_i32_s - i64.mul - local.get $6 - i64.add + local.get $0 + i64.load offset=16 + call $~lib/date/join call $~lib/date/Date#setTime drop ) @@ -2821,10 +2797,6 @@ call $~lib/date/Date#setUTCMonth ) (func $~lib/date/Date#setUTCFullYear (param $0 i32) (param $1 i32) - (local $2 i64) - (local $3 i64) - (local $4 i64) - (local $5 i64) local.get $0 i32.load local.get $1 @@ -2833,39 +2805,14 @@ return end local.get $0 - i64.load offset=16 - local.set $3 - i32.const 86400000 - 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.lt_s - if (result i64) - local.get $2 - else - i64.const 0 - end - i64.add - local.set $5 - local.get $0 local.get $1 local.get $0 i32.load offset=4 local.get $0 i32.load offset=8 - call $~lib/date/daysSinceEpoch - i64.extend_i32_s - i32.const 86400000 - i64.extend_i32_s - i64.mul - local.get $5 - i64.add + local.get $0 + i64.load offset=16 + call $~lib/date/join call $~lib/date/Date#setTime drop ) diff --git a/tests/compiler/std/date.release.wat b/tests/compiler/std/date.release.wat index d42f8f6bc2..ec15738673 100644 --- a/tests/compiler/std/date.release.wat +++ b/tests/compiler/std/date.release.wat @@ -10,6 +10,7 @@ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $none_=>_i32 (func (result i32))) (type $i32_i64_=>_none (func (param i32 i64))) + (type $i32_i32_i32_i64_=>_i64 (func (param i32 i32 i32 i64) (result i64))) (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32))) (type $i64_=>_i32 (func (param i64) (result i32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) @@ -2035,53 +2036,39 @@ i64.add call $~lib/date/Date#setTime ) - (func $~lib/date/Date#setUTCDate (param $0 i32) (param $1 i32) - (local $2 i64) - (local $3 i32) + (func $~lib/date/join (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i64) (result i64) (local $4 i32) local.get $0 - i32.load offset=8 local.get $1 - i32.eq - if - 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.lt_s - select - local.get $2 - i64.add - local.get $0 - i32.load - local.get $0 - i32.load offset=4 - local.tee $4 i32.const 2 i32.le_s i32.sub - local.tee $3 - local.get $3 + local.tee $0 + local.get $0 i32.const 399 i32.sub - local.get $3 + local.get $0 i32.const 0 i32.ge_s select i32.const 400 i32.div_s - local.set $0 - local.get $4 + local.set $4 + i64.const 86400000 + i64.const 0 + local.get $3 + i64.const 86400000 + i64.rem_s + local.tee $3 + i64.const 0 + i64.lt_s + select + local.get $3 + i64.add + local.get $1 i32.const -3 i32.const 9 - local.get $4 + local.get $1 i32.const 2 i32.gt_s select @@ -2092,26 +2079,26 @@ i32.add i32.const 5 i32.div_u - local.get $1 + local.get $2 i32.add - local.get $3 local.get $0 + local.get $4 i32.const 400 i32.mul i32.sub - local.tee $1 + local.tee $0 i32.const 365 i32.mul - local.get $1 + local.get $0 i32.const 2 i32.shr_u i32.add - local.get $1 + local.get $0 i32.const 100 i32.div_u i32.sub i32.add - local.get $0 + local.get $4 i32.const 146097 i32.mul i32.add @@ -2121,12 +2108,28 @@ i64.const 86400000 i64.mul i64.add + ) + (func $~lib/date/Date#setUTCDate (param $0 i32) (param $1 i32) + local.get $0 + i32.load offset=8 + local.get $1 + i32.eq + if + return + end + local.get $0 + local.get $0 + i32.load + local.get $0 + i32.load offset=4 + local.get $1 + local.get $0 + i64.load offset=16 + call $~lib/date/join call $~lib/date/Date#setTime ) (func $~lib/date/Date#setUTCMonth@varargs (param $0 i32) (param $1 i32) (local $2 i32) - (local $3 i64) - (local $4 i32) block $1of1 block $0of1 block $outOfRange @@ -2149,88 +2152,19 @@ i32.ne if local.get $0 - i64.const 86400000 - i64.const 0 - local.get $0 - i64.load offset=16 - i64.const 86400000 - i64.rem_s - local.tee $3 - i64.const 0 - i64.lt_s - select - local.get $3 - i64.add local.get $0 i32.load local.get $1 i32.const 1 i32.add - local.tee $1 - i32.const 2 - i32.le_s - i32.sub - local.tee $0 - local.get $0 - i32.const 399 - i32.sub - local.get $0 - i32.const 0 - i32.ge_s - select - i32.const 400 - i32.div_s - local.set $4 - local.get $1 - i32.const -3 - i32.const 9 - local.get $1 - i32.const 2 - i32.gt_s - select - i32.add - i32.const 153 - i32.mul - i32.const 2 - i32.add - i32.const 5 - i32.div_u local.get $2 - i32.add local.get $0 - local.get $4 - i32.const 400 - i32.mul - i32.sub - local.tee $0 - i32.const 365 - i32.mul - local.get $0 - i32.const 2 - i32.shr_u - i32.add - local.get $0 - i32.const 100 - i32.div_u - i32.sub - i32.add - local.get $4 - i32.const 146097 - i32.mul - i32.add - i32.const 719469 - i32.sub - i64.extend_i32_s - i64.const 86400000 - i64.mul - i64.add + i64.load offset=16 + call $~lib/date/join call $~lib/date/Date#setTime end ) (func $~lib/date/Date#setUTCFullYear (param $0 i32) (param $1 i32) - (local $2 i64) - (local $3 i32) - (local $4 i32) local.get $0 i32.load local.get $1 @@ -2238,81 +2172,15 @@ if return end + local.get $0 local.get $1 local.get $0 i32.load offset=4 - local.tee $4 - i32.const 2 - i32.le_s - i32.sub - local.tee $3 - local.get $3 - i32.const 399 - i32.sub - local.get $3 - i32.const 0 - i32.ge_s - select - i32.const 400 - i32.div_s - local.set $1 - 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.lt_s - select - local.get $2 - i64.add local.get $0 i32.load offset=8 - local.get $4 - i32.const -3 - i32.const 9 - local.get $4 - i32.const 2 - i32.gt_s - select - i32.add - i32.const 153 - i32.mul - i32.const 2 - i32.add - i32.const 5 - i32.div_u - i32.add - local.get $3 - local.get $1 - i32.const 400 - i32.mul - i32.sub - local.tee $0 - i32.const 365 - i32.mul local.get $0 - i32.const 2 - i32.shr_u - i32.add - local.get $0 - i32.const 100 - i32.div_u - i32.sub - i32.add - local.get $1 - i32.const 146097 - i32.mul - i32.add - i32.const 719469 - i32.sub - i64.extend_i32_s - i64.const 86400000 - i64.mul - i64.add + i64.load offset=16 + call $~lib/date/join call $~lib/date/Date#setTime ) (func $~lib/number/I32#toString (param $0 i32) (result i32) From 025d5338043cf28b279a7fc3023d8fb72e31012d Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 1 Aug 2022 17:30:28 +0300 Subject: [PATCH 3/6] refactor --- std/assembly/date.ts | 8 ++++---- tests/compiler/std/date.debug.wat | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 216dbd989a..e0370df033 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -269,7 +269,7 @@ function epochMillis( milliseconds: i32 ): i64 { return ( - i64(daysSinceEpoch(year, month, day)) * MILLIS_PER_DAY + + daysSinceEpoch(year, month, day) * MILLIS_PER_DAY + hour * MILLIS_PER_HOUR + minute * MILLIS_PER_MINUTE + second * MILLIS_PER_SECOND + @@ -310,13 +310,13 @@ function ymdFromEpochDays(z: i32): i32 { } // http://howardhinnant.github.io/date_algorithms.html#days_from_civil -function daysSinceEpoch(y: i32, m: i32, d: i32): i32 { +function daysSinceEpoch(y: i32, m: i32, d: i32): i64 { 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; + return (era * 146097 + doe - 719468); } // TomohikoSakamoto algorithm from https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week @@ -330,5 +330,5 @@ function dayOfWeek(year: i32, month: i32, day: i32): i32 { } function join(year: i32, month: i32, day: i32, ms: i64): i64 { - return daysSinceEpoch(year, month, day) * MILLIS_PER_DAY + euclidRem(ms, MILLIS_PER_DAY); + return daysSinceEpoch(year, month, day) * MILLIS_PER_DAY + euclidRem(ms, MILLIS_PER_DAY); } diff --git a/tests/compiler/std/date.debug.wat b/tests/compiler/std/date.debug.wat index 9d3dd7ec25..a8ce8186fa 100644 --- a/tests/compiler/std/date.debug.wat +++ b/tests/compiler/std/date.debug.wat @@ -2,11 +2,12 @@ (type $i32_i32_=>_none (func (param i32 i32))) (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) - (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result 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_=>_none (func (param i32))) (type $none_=>_none (func)) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) + (type $i32_i32_i32_=>_i64 (func (param i32 i32 i32) (result i64))) (type $i32_i32_i32_i32_i32_i32_i32_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) (type $i64_=>_i32 (func (param i64) (result i32))) (type $none_=>_i32 (func (result i32))) @@ -160,7 +161,7 @@ (elem $0 (i32.const 1)) (export "memory" (memory $0)) (export "_start" (func $~start)) - (func $~lib/date/daysSinceEpoch (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/date/daysSinceEpoch (param $0 i32) (param $1 i32) (param $2 i32) (result i64) (local $3 i32) (local $4 i32) (local $5 i32) @@ -240,13 +241,13 @@ i32.add i32.const 719468 i32.sub + i64.extend_i32_s ) (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 local.get $1 local.get $2 call $~lib/date/daysSinceEpoch - i64.extend_i32_s i32.const 86400000 i64.extend_i32_s i64.mul @@ -2708,7 +2709,6 @@ local.get $1 local.get $2 call $~lib/date/daysSinceEpoch - i64.extend_i32_s i32.const 86400000 i64.extend_i32_s i64.mul From b3b7298e7466188131bb6f74a41f5300e8dbe484 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 1 Aug 2022 18:26:23 +0300 Subject: [PATCH 4/6] add stringify helper --- std/assembly/date.ts | 42 +- tests/compiler/std/date.debug.wat | 417 +++++------------- tests/compiler/std/date.release.wat | 638 +++++++++++----------------- 3 files changed, 378 insertions(+), 719 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index e0370df033..5e3ea7835a 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -183,14 +183,14 @@ export class Date { var yr = this.year; var isNeg = yr < 0; var year = (isNeg || yr >= 10000) - ? (isNeg ? "-" : "+") + abs(yr).toString().padStart(6, "0") - : yr.toString().padStart(4, "0"); - var month = this.month.toString().padStart(2, "0"); - var day = this.day.toString().padStart(2, "0"); - var hours = this.getUTCHours().toString().padStart(2, "0"); - var mins = this.getUTCMinutes().toString().padStart(2, "0"); - var secs = this.getUTCSeconds().toString().padStart(2, "0"); - var ms = this.getUTCMilliseconds().toString().padStart(3, "0"); + ? (isNeg ? "-" : "+") + stringify(abs(yr), 6) + : stringify(yr, 4); + var month = stringify(this.month, 2); + var day = stringify(this.day); + var hours = stringify(this.getUTCHours()); + var mins = stringify(this.getUTCMinutes()); + var secs = stringify(this.getUTCSeconds()); + var ms = stringify(this.getUTCMilliseconds(), 3); return `${year}-${month}-${day}T${hours}:${mins}:${secs}.${ms}Z`; } @@ -209,13 +209,13 @@ export class Date { var da = this.day; var yr = this.year; var wd = dayOfWeek(yr, mo, da); - var year = abs(yr).toString().padStart(4, "0"); + var year = stringify(abs(yr), 4); var month = unchecked(months[mo - 1]); var week = unchecked(weeks[wd]); - var day = da.toString().padStart(2, "0"); - var hours = this.getUTCHours().toString().padStart(2, "0"); - var mins = this.getUTCMinutes().toString().padStart(2, "0"); - var secs = this.getUTCSeconds().toString().padStart(2, "0"); + var day = stringify(da); + var hours = stringify(this.getUTCHours()); + var mins = stringify(this.getUTCMinutes()); + var secs = stringify(this.getUTCSeconds()); return `${week}${day}${month}${yr < 0 ? "-" : ""}${year} ${hours}:${mins}:${secs} GMT`; } @@ -236,21 +236,21 @@ export class Date { var da = this.day; var yr = this.year; var wd = dayOfWeek(yr, mo, da); - var year = abs(yr).toString().padStart(4, "0"); + var year = stringify(abs(yr), 4); var month = unchecked(months[mo - 1]); var week = unchecked(weeks[wd]); - var day = da.toString().padStart(2, "0"); + var day = stringify(da); return `${week}${month}${day}${yr < 0 ? " -" : " "}${year}`; } // Note: it uses UTC time instead local time (without timezone offset) toTimeString(): string { - var hour = this.getUTCHours().toString().padStart(2, "0"); - var min = this.getUTCMinutes().toString().padStart(2, "0"); - var sec = this.getUTCSeconds().toString().padStart(2, "0"); + var hours = stringify(this.getUTCHours()); + var mins = stringify(this.getUTCMinutes()); + var secs = stringify(this.getUTCSeconds()); // TODO: add timezone - return `${hour}:${min}:${sec}`; + return `${hours}:${mins}:${secs}`; } // Note: it uses UTC datetime instead local datetime (without timezone offset) @@ -329,6 +329,10 @@ function dayOfWeek(year: i32, month: i32, day: i32): i32 { return euclidRem(year + month + day, 7); } +function stringify(value: T, padding: i32 = 2): string { + return value.toString().padStart(padding, "0"); +} + function join(year: i32, month: i32, day: i32, ms: i64): i64 { return daysSinceEpoch(year, month, day) * MILLIS_PER_DAY + euclidRem(ms, MILLIS_PER_DAY); } diff --git a/tests/compiler/std/date.debug.wat b/tests/compiler/std/date.debug.wat index a8ce8186fa..ac9c05d7f4 100644 --- a/tests/compiler/std/date.debug.wat +++ b/tests/compiler/std/date.debug.wat @@ -4531,6 +4531,39 @@ unreachable end ) + (func $~lib/date/stringify (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $0 + i32.const 10 + call $~lib/number/I32#toString + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store + local.get $2 + local.get $1 + i32.const 848 + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=4 + local.get $2 + call $~lib/string/String#padStart + local.set $2 + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $2 + ) (func $~lib/date/Date#toISOString (param $0 i32) (result i32) (local $1 i32) (local $2 i32) @@ -4550,13 +4583,13 @@ (local $16 i32) (local $17 i32) global.get $~lib/memory/__stack_pointer - i32.const 44 + i32.const 36 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 44 + i32.const 36 memory.fill local.get $0 i32.load @@ -4595,21 +4628,8 @@ i32.add local.get $4 i32.xor - i32.const 10 - call $~lib/number/I32#toString - local.set $17 - global.get $~lib/memory/__stack_pointer - local.get $17 - i32.store offset=8 - local.get $17 i32.const 6 - i32.const 848 - local.set $17 - global.get $~lib/memory/__stack_pointer - local.get $17 - i32.store offset=12 - local.get $17 - call $~lib/string/String#padStart + call $~lib/date/stringify local.set $17 global.get $~lib/memory/__stack_pointer local.get $17 @@ -4618,144 +4638,53 @@ call $~lib/string/String.__concat else local.get $1 - i32.const 10 - call $~lib/number/I32#toString - local.set $17 - global.get $~lib/memory/__stack_pointer - local.get $17 - i32.store - local.get $17 i32.const 4 - i32.const 848 - local.set $17 - global.get $~lib/memory/__stack_pointer - local.get $17 - i32.store offset=8 - local.get $17 - call $~lib/string/String#padStart + call $~lib/date/stringify end local.tee $5 - i32.store offset=16 + i32.store offset=8 global.get $~lib/memory/__stack_pointer local.get $0 i32.load offset=4 - i32.const 10 - call $~lib/number/I32#toString - local.set $17 - global.get $~lib/memory/__stack_pointer - local.get $17 - i32.store - local.get $17 i32.const 2 - i32.const 848 - local.set $17 - global.get $~lib/memory/__stack_pointer - local.get $17 - i32.store offset=8 - local.get $17 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $6 - i32.store offset=20 + i32.store offset=12 global.get $~lib/memory/__stack_pointer local.get $0 i32.load offset=8 - i32.const 10 - call $~lib/number/I32#toString - local.set $17 - global.get $~lib/memory/__stack_pointer - local.get $17 - i32.store - local.get $17 i32.const 2 - i32.const 848 - local.set $17 - global.get $~lib/memory/__stack_pointer - local.get $17 - i32.store offset=8 - local.get $17 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $7 - i32.store offset=24 + i32.store offset=16 global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCHours - i32.const 10 - call $~lib/number/I32#toString - local.set $17 - global.get $~lib/memory/__stack_pointer - local.get $17 - i32.store - local.get $17 i32.const 2 - i32.const 848 - local.set $17 - global.get $~lib/memory/__stack_pointer - local.get $17 - i32.store offset=8 - local.get $17 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $8 - i32.store offset=28 + i32.store offset=20 global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCMinutes - i32.const 10 - call $~lib/number/I32#toString - local.set $17 - global.get $~lib/memory/__stack_pointer - local.get $17 - i32.store - local.get $17 i32.const 2 - i32.const 848 - local.set $17 - global.get $~lib/memory/__stack_pointer - local.get $17 - i32.store offset=8 - local.get $17 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $9 - i32.store offset=32 + i32.store offset=24 global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCSeconds - i32.const 10 - call $~lib/number/I32#toString - local.set $17 - global.get $~lib/memory/__stack_pointer - local.get $17 - i32.store - local.get $17 i32.const 2 - i32.const 848 - local.set $17 - global.get $~lib/memory/__stack_pointer - local.get $17 - i32.store offset=8 - local.get $17 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $10 - i32.store offset=36 + i32.store offset=28 global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCMilliseconds - i32.const 10 - call $~lib/number/I32#toString - local.set $17 - global.get $~lib/memory/__stack_pointer - local.get $17 - i32.store - local.get $17 i32.const 3 - i32.const 848 - local.set $17 - global.get $~lib/memory/__stack_pointer - local.get $17 - i32.store offset=8 - local.get $17 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $11 - i32.store offset=40 + i32.store offset=32 local.get $5 local.set $3 local.get $6 @@ -4848,7 +4777,7 @@ call $~lib/staticarray/StaticArray<~lib/string/String>#join local.set $17 global.get $~lib/memory/__stack_pointer - i32.const 44 + i32.const 36 i32.add global.set $~lib/memory/__stack_pointer local.get $17 @@ -4871,13 +4800,13 @@ (local $15 i32) (local $16 i32) global.get $~lib/memory/__stack_pointer - i32.const 40 + i32.const 36 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 40 + i32.const 36 memory.fill global.get $~lib/memory/__stack_pointer i32.const 28 @@ -4917,23 +4846,10 @@ i32.add local.get $8 i32.xor - i32.const 10 - call $~lib/number/I32#toString - local.set $16 - global.get $~lib/memory/__stack_pointer - local.get $16 - i32.store offset=8 - local.get $16 i32.const 4 - i32.const 848 - local.set $16 - global.get $~lib/memory/__stack_pointer - local.get $16 - i32.store offset=12 - local.get $16 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $9 - i32.store offset=16 + i32.store offset=8 global.get $~lib/memory/__stack_pointer local.get $2 local.get $3 @@ -4941,32 +4857,19 @@ i32.sub call $~lib/staticarray/StaticArray<~lib/string/String>#__uget local.tee $10 - i32.store offset=20 + i32.store offset=12 global.get $~lib/memory/__stack_pointer local.get $1 local.get $6 call $~lib/staticarray/StaticArray<~lib/string/String>#__uget local.tee $11 - i32.store offset=24 + i32.store offset=16 global.get $~lib/memory/__stack_pointer local.get $4 - i32.const 10 - call $~lib/number/I32#toString - local.set $16 - global.get $~lib/memory/__stack_pointer - local.get $16 - i32.store offset=8 - local.get $16 i32.const 2 - i32.const 848 - local.set $16 - global.get $~lib/memory/__stack_pointer - local.get $16 - i32.store offset=12 - local.get $16 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $12 - i32.store offset=28 + i32.store offset=20 local.get $11 local.set $7 local.get $10 @@ -4983,14 +4886,14 @@ i32.const 4224 end local.tee $14 - i32.store offset=32 + i32.store offset=24 local.get $9 local.set $15 i32.const 4128 local.set $16 global.get $~lib/memory/__stack_pointer local.get $16 - i32.store offset=8 + i32.store offset=28 local.get $16 i32.const 1 local.get $7 @@ -4999,7 +4902,7 @@ local.set $16 global.get $~lib/memory/__stack_pointer local.get $16 - i32.store offset=8 + i32.store offset=28 local.get $16 i32.const 3 local.get $8 @@ -5008,7 +4911,7 @@ local.set $16 global.get $~lib/memory/__stack_pointer local.get $16 - i32.store offset=8 + i32.store offset=28 local.get $16 i32.const 5 local.get $13 @@ -5017,7 +4920,7 @@ local.set $16 global.get $~lib/memory/__stack_pointer local.get $16 - i32.store offset=8 + i32.store offset=28 local.get $16 i32.const 7 local.get $14 @@ -5026,7 +4929,7 @@ local.set $16 global.get $~lib/memory/__stack_pointer local.get $16 - i32.store offset=8 + i32.store offset=28 local.get $16 i32.const 9 local.get $15 @@ -5035,18 +4938,18 @@ local.set $16 global.get $~lib/memory/__stack_pointer local.get $16 - i32.store offset=8 + i32.store offset=28 local.get $16 i32.const 2432 local.set $16 global.get $~lib/memory/__stack_pointer local.get $16 - i32.store offset=36 + i32.store offset=32 local.get $16 call $~lib/staticarray/StaticArray<~lib/string/String>#join local.set $16 global.get $~lib/memory/__stack_pointer - i32.const 40 + i32.const 36 i32.add global.set $~lib/memory/__stack_pointer local.get $16 @@ -5060,74 +4963,35 @@ (local $6 i32) (local $7 i32) global.get $~lib/memory/__stack_pointer - i32.const 24 + i32.const 20 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 24 + i32.const 20 memory.fill global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCHours - i32.const 10 - call $~lib/number/I32#toString - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store - local.get $7 i32.const 2 - i32.const 848 - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $1 - i32.store offset=8 + i32.store global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCMinutes - i32.const 10 - call $~lib/number/I32#toString - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store - local.get $7 i32.const 2 - i32.const 848 - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $2 - i32.store offset=12 + i32.store offset=4 global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCSeconds - i32.const 10 - call $~lib/number/I32#toString - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store - local.get $7 i32.const 2 - i32.const 848 - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=4 - local.get $7 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $3 - i32.store offset=16 + i32.store offset=8 local.get $1 local.set $4 local.get $2 @@ -5138,7 +5002,7 @@ local.set $7 global.get $~lib/memory/__stack_pointer local.get $7 - i32.store + i32.store offset=12 local.get $7 i32.const 1 local.get $4 @@ -5147,7 +5011,7 @@ local.set $7 global.get $~lib/memory/__stack_pointer local.get $7 - i32.store + i32.store offset=12 local.get $7 i32.const 3 local.get $5 @@ -5156,7 +5020,7 @@ local.set $7 global.get $~lib/memory/__stack_pointer local.get $7 - i32.store + i32.store offset=12 local.get $7 i32.const 5 local.get $6 @@ -5165,18 +5029,18 @@ local.set $7 global.get $~lib/memory/__stack_pointer local.get $7 - i32.store + i32.store offset=12 local.get $7 i32.const 2432 local.set $7 global.get $~lib/memory/__stack_pointer local.get $7 - i32.store offset=20 + i32.store offset=16 local.get $7 call $~lib/staticarray/StaticArray<~lib/string/String>#join local.set $7 global.get $~lib/memory/__stack_pointer - i32.const 24 + i32.const 20 i32.add global.set $~lib/memory/__stack_pointer local.get $7 @@ -5205,13 +5069,13 @@ (local $21 i32) (local $22 i32) global.get $~lib/memory/__stack_pointer - i32.const 52 + i32.const 48 i32.sub global.set $~lib/memory/__stack_pointer call $~stack_check global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 52 + i32.const 48 memory.fill global.get $~lib/memory/__stack_pointer i32.const 28 @@ -5251,23 +5115,10 @@ i32.add local.get $8 i32.xor - i32.const 10 - call $~lib/number/I32#toString - local.set $22 - global.get $~lib/memory/__stack_pointer - local.get $22 - i32.store offset=8 - local.get $22 i32.const 4 - i32.const 848 - local.set $22 - global.get $~lib/memory/__stack_pointer - local.get $22 - i32.store offset=12 - local.get $22 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $9 - i32.store offset=16 + i32.store offset=8 global.get $~lib/memory/__stack_pointer local.get $2 local.get $3 @@ -5275,92 +5126,40 @@ i32.sub call $~lib/staticarray/StaticArray<~lib/string/String>#__uget local.tee $10 - i32.store offset=20 + i32.store offset=12 global.get $~lib/memory/__stack_pointer local.get $1 local.get $6 call $~lib/staticarray/StaticArray<~lib/string/String>#__uget local.tee $11 - i32.store offset=24 + i32.store offset=16 global.get $~lib/memory/__stack_pointer local.get $4 - i32.const 10 - call $~lib/number/I32#toString - local.set $22 - global.get $~lib/memory/__stack_pointer - local.get $22 - i32.store offset=8 - local.get $22 i32.const 2 - i32.const 848 - local.set $22 - global.get $~lib/memory/__stack_pointer - local.get $22 - i32.store offset=12 - local.get $22 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $12 - i32.store offset=28 + i32.store offset=20 global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCHours - i32.const 10 - call $~lib/number/I32#toString - local.set $22 - global.get $~lib/memory/__stack_pointer - local.get $22 - i32.store offset=8 - local.get $22 i32.const 2 - i32.const 848 - local.set $22 - global.get $~lib/memory/__stack_pointer - local.get $22 - i32.store offset=12 - local.get $22 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $13 - i32.store offset=32 + i32.store offset=24 global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCMinutes - i32.const 10 - call $~lib/number/I32#toString - local.set $22 - global.get $~lib/memory/__stack_pointer - local.get $22 - i32.store offset=8 - local.get $22 i32.const 2 - i32.const 848 - local.set $22 - global.get $~lib/memory/__stack_pointer - local.get $22 - i32.store offset=12 - local.get $22 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $14 - i32.store offset=36 + i32.store offset=28 global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCSeconds - i32.const 10 - call $~lib/number/I32#toString - local.set $22 - global.get $~lib/memory/__stack_pointer - local.get $22 - i32.store offset=8 - local.get $22 i32.const 2 - i32.const 848 - local.set $22 - global.get $~lib/memory/__stack_pointer - local.get $22 - i32.store offset=12 - local.get $22 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $15 - i32.store offset=40 + i32.store offset=32 local.get $11 local.set $7 local.get $12 @@ -5377,7 +5176,7 @@ i32.const 2432 end local.tee $17 - i32.store offset=44 + i32.store offset=36 local.get $9 local.set $18 local.get $13 @@ -5390,7 +5189,7 @@ local.set $22 global.get $~lib/memory/__stack_pointer local.get $22 - i32.store offset=8 + i32.store offset=40 local.get $22 i32.const 1 local.get $7 @@ -5399,7 +5198,7 @@ local.set $22 global.get $~lib/memory/__stack_pointer local.get $22 - i32.store offset=8 + i32.store offset=40 local.get $22 i32.const 3 local.get $8 @@ -5408,7 +5207,7 @@ local.set $22 global.get $~lib/memory/__stack_pointer local.get $22 - i32.store offset=8 + i32.store offset=40 local.get $22 i32.const 5 local.get $16 @@ -5417,7 +5216,7 @@ local.set $22 global.get $~lib/memory/__stack_pointer local.get $22 - i32.store offset=8 + i32.store offset=40 local.get $22 i32.const 7 local.get $17 @@ -5426,7 +5225,7 @@ local.set $22 global.get $~lib/memory/__stack_pointer local.get $22 - i32.store offset=8 + i32.store offset=40 local.get $22 i32.const 9 local.get $18 @@ -5435,7 +5234,7 @@ local.set $22 global.get $~lib/memory/__stack_pointer local.get $22 - i32.store offset=8 + i32.store offset=40 local.get $22 i32.const 11 local.get $19 @@ -5444,7 +5243,7 @@ local.set $22 global.get $~lib/memory/__stack_pointer local.get $22 - i32.store offset=8 + i32.store offset=40 local.get $22 i32.const 13 local.get $20 @@ -5453,7 +5252,7 @@ local.set $22 global.get $~lib/memory/__stack_pointer local.get $22 - i32.store offset=8 + i32.store offset=40 local.get $22 i32.const 15 local.get $21 @@ -5462,18 +5261,18 @@ local.set $22 global.get $~lib/memory/__stack_pointer local.get $22 - i32.store offset=8 + i32.store offset=40 local.get $22 i32.const 2432 local.set $22 global.get $~lib/memory/__stack_pointer local.get $22 - i32.store offset=48 + i32.store offset=44 local.get $22 call $~lib/staticarray/StaticArray<~lib/string/String>#join local.set $22 global.get $~lib/memory/__stack_pointer - i32.const 52 + i32.const 48 i32.add global.set $~lib/memory/__stack_pointer local.get $22 diff --git a/tests/compiler/std/date.release.wat b/tests/compiler/std/date.release.wat index ec15738673..fbee4e2075 100644 --- a/tests/compiler/std/date.release.wat +++ b/tests/compiler/std/date.release.wat @@ -3340,6 +3340,157 @@ global.set $~started call $start:std/date ) + (func $~lib/date/stringify (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 7884 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + local.get $0 + call $~lib/number/I32#toString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 1872 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 7884 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + block $__inlined_func$~lib/string/String#padStart + i32.const 1868 + i32.load + i32.const 1 + i32.shr_u + i32.const 1 + i32.shl + local.tee $2 + i32.eqz + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 1 + i32.shr_u + i32.const 1 + i32.shl + local.tee $4 + local.get $1 + i32.const 1 + i32.shl + local.tee $5 + i32.gt_u + i32.or + if + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + br $__inlined_func$~lib/string/String#padStart + end + global.get $~lib/memory/__stack_pointer + local.get $5 + i32.const 1 + call $~lib/rt/itcms/__new + local.tee $1 + i32.store + local.get $5 + local.get $4 + i32.sub + local.tee $7 + local.get $2 + i32.gt_u + if + local.get $7 + local.get $7 + i32.const 2 + i32.sub + local.get $2 + i32.div_u + local.get $2 + i32.mul + local.tee $6 + i32.sub + local.set $5 + loop $while-continue|0 + local.get $3 + local.get $6 + i32.lt_u + if + local.get $1 + local.get $3 + i32.add + i32.const 1872 + local.get $2 + memory.copy + local.get $2 + local.get $3 + i32.add + local.set $3 + br $while-continue|0 + end + end + local.get $1 + local.get $6 + i32.add + i32.const 1872 + local.get $5 + memory.copy + else + local.get $1 + i32.const 1872 + local.get $7 + memory.copy + end + local.get $1 + local.get $7 + i32.add + local.get $0 + local.get $4 + memory.copy + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + local.set $0 + end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + return + end + i32.const 24288 + i32.const 24336 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + ) (func $~lib/date/Date#toISOString (param $0 i32) (result i32) (local $1 i64) (local $2 i32) @@ -3348,9 +3499,8 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) global.get $~lib/memory/__stack_pointer - i32.const 44 + i32.const 36 i32.sub global.set $~lib/memory/__stack_pointer block $folding-inner0 @@ -3361,7 +3511,7 @@ global.get $~lib/memory/__stack_pointer local.tee $2 i32.const 0 - i32.const 44 + i32.const 36 memory.fill local.get $2 local.get $0 @@ -3391,17 +3541,8 @@ local.get $4 i32.add i32.xor - call $~lib/number/I32#toString - local.set $2 - global.get $~lib/memory/__stack_pointer - local.get $2 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=12 - local.get $2 i32.const 6 - call $~lib/string/String#padStart + call $~lib/date/stringify local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 @@ -3469,54 +3610,26 @@ local.get $6 end else - local.get $2 - call $~lib/number/I32#toString - local.set $2 - global.get $~lib/memory/__stack_pointer - local.tee $3 - local.get $2 - i32.store - local.get $3 - i32.const 1872 - i32.store offset=8 local.get $2 i32.const 4 - call $~lib/string/String#padStart + call $~lib/date/stringify end - local.tee $2 - i32.store offset=16 + local.tee $3 + i32.store offset=8 global.get $~lib/memory/__stack_pointer local.get $0 i32.load offset=4 - call $~lib/number/I32#toString - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=8 - local.get $4 i32.const 2 - call $~lib/string/String#padStart - local.tee $3 - i32.store offset=20 + call $~lib/date/stringify + local.tee $4 + i32.store offset=12 global.get $~lib/memory/__stack_pointer local.get $0 i32.load offset=8 - call $~lib/number/I32#toString - local.set $5 - global.get $~lib/memory/__stack_pointer - local.get $5 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=8 - local.get $5 i32.const 2 - call $~lib/string/String#padStart - local.tee $4 - i32.store offset=24 + call $~lib/date/stringify + local.tee $5 + i32.store offset=16 global.get $~lib/memory/__stack_pointer i64.const 86400000 i64.const 0 @@ -3533,19 +3646,10 @@ i32.wrap_i64 i32.const 3600000 i32.div_s - call $~lib/number/I32#toString - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=8 - local.get $6 i32.const 2 - call $~lib/string/String#padStart - local.tee $5 - i32.store offset=28 + call $~lib/date/stringify + local.tee $6 + i32.store offset=20 global.get $~lib/memory/__stack_pointer i64.const 3600000 i64.const 0 @@ -3562,19 +3666,10 @@ i32.wrap_i64 i32.const 60000 i32.div_s - call $~lib/number/I32#toString - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=8 - local.get $7 i32.const 2 - call $~lib/string/String#padStart - local.tee $6 - i32.store offset=32 + call $~lib/date/stringify + local.tee $7 + i32.store offset=24 global.get $~lib/memory/__stack_pointer i64.const 60000 i64.const 0 @@ -3591,19 +3686,10 @@ i32.wrap_i64 i32.const 1000 i32.div_s - call $~lib/number/I32#toString - local.set $8 - global.get $~lib/memory/__stack_pointer - local.get $8 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=8 - local.get $8 i32.const 2 - call $~lib/string/String#padStart - local.tee $7 - i32.store offset=36 + call $~lib/date/stringify + local.tee $2 + i32.store offset=28 global.get $~lib/memory/__stack_pointer i64.const 1000 i64.const 0 @@ -3618,60 +3704,51 @@ local.get $1 i64.add i32.wrap_i64 - call $~lib/number/I32#toString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=8 - local.get $0 i32.const 3 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $0 - i32.store offset=40 + i32.store offset=32 global.get $~lib/memory/__stack_pointer i32.const 3616 i32.store i32.const 3616 i32.const 1 - local.get $2 + local.get $3 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 3616 i32.store i32.const 3616 i32.const 3 - local.get $3 + local.get $4 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 3616 i32.store i32.const 3616 i32.const 5 - local.get $4 + local.get $5 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 3616 i32.store i32.const 3616 i32.const 7 - local.get $5 + local.get $6 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 3616 i32.store i32.const 3616 i32.const 9 - local.get $6 + local.get $7 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 3616 i32.store i32.const 3616 i32.const 11 - local.get $7 + local.get $2 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 3616 @@ -3689,7 +3766,7 @@ i32.const 3616 call $~lib/staticarray/StaticArray<~lib/string/String>#join global.get $~lib/memory/__stack_pointer - i32.const 44 + i32.const 36 i32.add global.set $~lib/memory/__stack_pointer return @@ -3708,9 +3785,8 @@ (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) global.get $~lib/memory/__stack_pointer - i32.const 40 + i32.const 36 i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer @@ -3727,7 +3803,7 @@ global.get $~lib/memory/__stack_pointer local.tee $1 i32.const 0 - i32.const 40 + i32.const 36 memory.fill i32.const 28 i32.const 4 @@ -3814,24 +3890,15 @@ local.get $1 i32.const 31 i32.shr_s - local.tee $7 + local.tee $6 local.get $1 - local.get $7 + local.get $6 i32.add i32.xor - call $~lib/number/I32#toString - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=12 - local.get $7 i32.const 4 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $6 - i32.store offset=16 + i32.store offset=8 global.get $~lib/memory/__stack_pointer local.get $3 local.get $4 @@ -3842,7 +3909,7 @@ i32.add i32.load local.tee $3 - i32.store offset=20 + i32.store offset=12 global.get $~lib/memory/__stack_pointer local.get $2 local.get $5 @@ -3851,22 +3918,13 @@ i32.add i32.load local.tee $2 - i32.store offset=24 - global.get $~lib/memory/__stack_pointer - local.get $0 - call $~lib/number/I32#toString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=8 + i32.store offset=16 global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=12 local.get $0 i32.const 2 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $0 - i32.store offset=28 + i32.store offset=20 global.get $~lib/memory/__stack_pointer i32.const 5216 i32.const 5248 @@ -3875,52 +3933,52 @@ i32.lt_s select local.tee $1 - i32.store offset=32 + i32.store offset=24 global.get $~lib/memory/__stack_pointer i32.const 5152 - i32.store offset=8 + i32.store offset=28 i32.const 5152 i32.const 1 local.get $2 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 5152 - i32.store offset=8 + i32.store offset=28 i32.const 5152 i32.const 3 local.get $3 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 5152 - i32.store offset=8 + i32.store offset=28 i32.const 5152 i32.const 5 local.get $0 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 5152 - i32.store offset=8 + i32.store offset=28 i32.const 5152 i32.const 7 local.get $1 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 5152 - i32.store offset=8 + i32.store offset=28 i32.const 5152 i32.const 9 local.get $6 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 5152 - i32.store offset=8 + i32.store offset=28 global.get $~lib/memory/__stack_pointer i32.const 3456 - i32.store offset=36 + i32.store offset=32 i32.const 5152 call $~lib/staticarray/StaticArray<~lib/string/String>#join global.get $~lib/memory/__stack_pointer - i32.const 40 + i32.const 36 i32.add global.set $~lib/memory/__stack_pointer ) @@ -3928,9 +3986,8 @@ (local $1 i64) (local $2 i32) (local $3 i32) - (local $4 i32) global.get $~lib/memory/__stack_pointer - i32.const 24 + i32.const 20 i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer @@ -3947,8 +4004,9 @@ global.get $~lib/memory/__stack_pointer local.tee $2 i32.const 0 - i32.const 24 + i32.const 20 memory.fill + local.get $2 i64.const 86400000 i64.const 0 local.get $0 @@ -3964,20 +4022,10 @@ i32.wrap_i64 i32.const 3600000 i32.div_s - call $~lib/number/I32#toString - local.set $3 - global.get $~lib/memory/__stack_pointer - local.get $3 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=4 - local.get $2 - local.get $3 i32.const 2 - call $~lib/string/String#padStart - local.tee $2 - i32.store offset=8 + call $~lib/date/stringify + local.tee $3 + i32.store global.get $~lib/memory/__stack_pointer i64.const 3600000 i64.const 0 @@ -3994,19 +4042,10 @@ i32.wrap_i64 i32.const 60000 i32.div_s - call $~lib/number/I32#toString - local.set $4 - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=4 - local.get $4 i32.const 2 - call $~lib/string/String#padStart - local.tee $3 - i32.store offset=12 + call $~lib/date/stringify + local.tee $2 + i32.store offset=4 global.get $~lib/memory/__stack_pointer i64.const 60000 i64.const 0 @@ -4023,50 +4062,41 @@ i32.wrap_i64 i32.const 1000 i32.div_s - call $~lib/number/I32#toString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=4 - local.get $0 i32.const 2 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $0 - i32.store offset=16 + i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 5472 - i32.store + i32.store offset=12 i32.const 5472 i32.const 1 - local.get $2 + local.get $3 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 5472 - i32.store + i32.store offset=12 i32.const 5472 i32.const 3 - local.get $3 + local.get $2 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 5472 - i32.store + i32.store offset=12 i32.const 5472 i32.const 5 local.get $0 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 5472 - i32.store + i32.store offset=12 global.get $~lib/memory/__stack_pointer i32.const 3456 - i32.store offset=20 + i32.store offset=16 i32.const 5472 call $~lib/staticarray/StaticArray<~lib/string/String>#join global.get $~lib/memory/__stack_pointer - i32.const 24 + i32.const 20 i32.add global.set $~lib/memory/__stack_pointer ) @@ -4079,9 +4109,8 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) global.get $~lib/memory/__stack_pointer - i32.const 52 + i32.const 48 i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer @@ -4098,7 +4127,7 @@ global.get $~lib/memory/__stack_pointer local.tee $2 i32.const 0 - i32.const 52 + i32.const 48 memory.fill i32.const 28 i32.const 4 @@ -4185,24 +4214,15 @@ local.get $2 i32.const 31 i32.shr_s - local.tee $9 + local.tee $8 local.get $2 - local.get $9 + local.get $8 i32.add i32.xor - call $~lib/number/I32#toString - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=12 - local.get $9 i32.const 4 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $8 - i32.store offset=16 + i32.store offset=8 global.get $~lib/memory/__stack_pointer local.get $4 local.get $5 @@ -4213,7 +4233,7 @@ i32.add i32.load local.tee $4 - i32.store offset=20 + i32.store offset=12 global.get $~lib/memory/__stack_pointer local.get $3 local.get $6 @@ -4222,22 +4242,13 @@ i32.add i32.load local.tee $3 - i32.store offset=24 + i32.store offset=16 global.get $~lib/memory/__stack_pointer local.get $7 - call $~lib/number/I32#toString - local.set $6 - global.get $~lib/memory/__stack_pointer - local.get $6 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=12 - local.get $6 i32.const 2 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $5 - i32.store offset=28 + i32.store offset=20 global.get $~lib/memory/__stack_pointer i64.const 86400000 i64.const 0 @@ -4254,19 +4265,10 @@ i32.wrap_i64 i32.const 3600000 i32.div_s - call $~lib/number/I32#toString - local.set $7 - global.get $~lib/memory/__stack_pointer - local.get $7 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=12 - local.get $7 i32.const 2 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $6 - i32.store offset=32 + i32.store offset=24 global.get $~lib/memory/__stack_pointer i64.const 3600000 i64.const 0 @@ -4283,19 +4285,10 @@ i32.wrap_i64 i32.const 60000 i32.div_s - call $~lib/number/I32#toString - local.set $9 - global.get $~lib/memory/__stack_pointer - local.get $9 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=12 - local.get $9 i32.const 2 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $7 - i32.store offset=36 + i32.store offset=28 global.get $~lib/memory/__stack_pointer i64.const 60000 i64.const 0 @@ -4312,19 +4305,10 @@ i32.wrap_i64 i32.const 1000 i32.div_s - call $~lib/number/I32#toString - local.set $0 - global.get $~lib/memory/__stack_pointer - local.get $0 - i32.store offset=8 - global.get $~lib/memory/__stack_pointer - i32.const 1872 - i32.store offset=12 - local.get $0 i32.const 2 - call $~lib/string/String#padStart + call $~lib/date/stringify local.tee $0 - i32.store offset=40 + i32.store offset=32 global.get $~lib/memory/__stack_pointer i32.const 1616 i32.const 3456 @@ -4333,73 +4317,73 @@ i32.lt_s select local.tee $2 - i32.store offset=44 + i32.store offset=36 global.get $~lib/memory/__stack_pointer i32.const 6384 - i32.store offset=8 + i32.store offset=40 i32.const 6384 i32.const 1 local.get $3 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 6384 - i32.store offset=8 + i32.store offset=40 i32.const 6384 i32.const 3 local.get $5 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 6384 - i32.store offset=8 + i32.store offset=40 i32.const 6384 i32.const 5 local.get $4 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 6384 - i32.store offset=8 + i32.store offset=40 i32.const 6384 i32.const 7 local.get $2 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 6384 - i32.store offset=8 + i32.store offset=40 i32.const 6384 i32.const 9 local.get $8 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 6384 - i32.store offset=8 + i32.store offset=40 i32.const 6384 i32.const 11 local.get $6 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 6384 - i32.store offset=8 + i32.store offset=40 i32.const 6384 i32.const 13 local.get $7 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 6384 - i32.store offset=8 + i32.store offset=40 i32.const 6384 i32.const 15 local.get $0 call $~lib/staticarray/StaticArray<~lib/string/String>#__uset global.get $~lib/memory/__stack_pointer i32.const 6384 - i32.store offset=8 + i32.store offset=40 global.get $~lib/memory/__stack_pointer i32.const 3456 - i32.store offset=48 + i32.store offset=44 i32.const 6384 call $~lib/staticarray/StaticArray<~lib/string/String>#join global.get $~lib/memory/__stack_pointer - i32.const 52 + i32.const 48 i32.add global.set $~lib/memory/__stack_pointer ) @@ -8294,134 +8278,6 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) - (func $~lib/string/String#padStart (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - (local $5 i32) - (local $6 i32) - (local $7 i32) - (local $8 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 7884 - i32.lt_s - if - i32.const 24288 - i32.const 24336 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - i32.const 1868 - i32.load - i32.const 1 - i32.shr_u - i32.const 1 - i32.shl - local.tee $2 - i32.eqz - local.get $0 - i32.const 20 - i32.sub - i32.load offset=16 - i32.const 1 - i32.shr_u - i32.const 1 - i32.shl - local.tee $4 - local.get $1 - i32.const 1 - i32.shl - local.tee $1 - i32.gt_u - i32.or - 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 $1 - i32.const 1 - call $~lib/rt/itcms/__new - local.tee $5 - i32.store - local.get $1 - local.get $4 - i32.sub - local.tee $6 - local.get $2 - i32.gt_u - if - local.get $6 - local.get $6 - i32.const 2 - i32.sub - local.get $2 - i32.div_u - local.tee $7 - local.get $2 - i32.mul - local.tee $8 - i32.sub - local.set $1 - local.get $2 - local.get $7 - i32.mul - local.set $7 - loop $while-continue|0 - local.get $3 - local.get $7 - i32.lt_u - if - local.get $3 - local.get $5 - i32.add - i32.const 1872 - local.get $2 - memory.copy - local.get $2 - local.get $3 - i32.add - local.set $3 - br $while-continue|0 - end - end - local.get $5 - local.get $8 - i32.add - i32.const 1872 - local.get $1 - memory.copy - else - local.get $5 - i32.const 1872 - local.get $6 - memory.copy - end - local.get $5 - local.get $6 - i32.add - local.get $0 - local.get $4 - memory.copy - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $5 - ) (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) From c74f61820c2077f5469df3fea21b4ec10f586d17 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Mon, 1 Aug 2022 18:28:47 +0300 Subject: [PATCH 5/6] specialize --- std/assembly/date.ts | 2 +- tests/compiler/std/date.debug.wat | 38 ++++++++++++++--------------- tests/compiler/std/date.release.wat | 38 ++++++++++++++--------------- 3 files changed, 39 insertions(+), 39 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 5e3ea7835a..ffc1ce521c 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -329,7 +329,7 @@ function dayOfWeek(year: i32, month: i32, day: i32): i32 { return euclidRem(year + month + day, 7); } -function stringify(value: T, padding: i32 = 2): string { +function stringify(value: i32, padding: i32 = 2): string { return value.toString().padStart(padding, "0"); } diff --git a/tests/compiler/std/date.debug.wat b/tests/compiler/std/date.debug.wat index ac9c05d7f4..1ca90c8c64 100644 --- a/tests/compiler/std/date.debug.wat +++ b/tests/compiler/std/date.debug.wat @@ -4531,7 +4531,7 @@ unreachable end ) - (func $~lib/date/stringify (param $0 i32) (param $1 i32) (result i32) + (func $~lib/date/stringify (param $0 i32) (param $1 i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer i32.const 8 @@ -4629,7 +4629,7 @@ local.get $4 i32.xor i32.const 6 - call $~lib/date/stringify + call $~lib/date/stringify local.set $17 global.get $~lib/memory/__stack_pointer local.get $17 @@ -4639,7 +4639,7 @@ else local.get $1 i32.const 4 - call $~lib/date/stringify + call $~lib/date/stringify end local.tee $5 i32.store offset=8 @@ -4647,42 +4647,42 @@ local.get $0 i32.load offset=4 i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $6 i32.store offset=12 global.get $~lib/memory/__stack_pointer local.get $0 i32.load offset=8 i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $7 i32.store offset=16 global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCHours i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $8 i32.store offset=20 global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCMinutes i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $9 i32.store offset=24 global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCSeconds i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $10 i32.store offset=28 global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCMilliseconds i32.const 3 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $11 i32.store offset=32 local.get $5 @@ -4847,7 +4847,7 @@ local.get $8 i32.xor i32.const 4 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $9 i32.store offset=8 global.get $~lib/memory/__stack_pointer @@ -4867,7 +4867,7 @@ global.get $~lib/memory/__stack_pointer local.get $4 i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $12 i32.store offset=20 local.get $11 @@ -4975,21 +4975,21 @@ local.get $0 call $~lib/date/Date#getUTCHours i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $1 i32.store global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCMinutes i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $2 i32.store offset=4 global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCSeconds i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $3 i32.store offset=8 local.get $1 @@ -5116,7 +5116,7 @@ local.get $8 i32.xor i32.const 4 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $9 i32.store offset=8 global.get $~lib/memory/__stack_pointer @@ -5136,28 +5136,28 @@ global.get $~lib/memory/__stack_pointer local.get $4 i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $12 i32.store offset=20 global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCHours i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $13 i32.store offset=24 global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCMinutes i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $14 i32.store offset=28 global.get $~lib/memory/__stack_pointer local.get $0 call $~lib/date/Date#getUTCSeconds i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $15 i32.store offset=32 local.get $11 diff --git a/tests/compiler/std/date.release.wat b/tests/compiler/std/date.release.wat index fbee4e2075..87a1f9615d 100644 --- a/tests/compiler/std/date.release.wat +++ b/tests/compiler/std/date.release.wat @@ -3340,7 +3340,7 @@ global.set $~started call $start:std/date ) - (func $~lib/date/stringify (param $0 i32) (param $1 i32) (result i32) + (func $~lib/date/stringify (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3542,7 +3542,7 @@ i32.add i32.xor i32.const 6 - call $~lib/date/stringify + call $~lib/date/stringify local.set $2 global.get $~lib/memory/__stack_pointer local.get $2 @@ -3612,7 +3612,7 @@ else local.get $2 i32.const 4 - call $~lib/date/stringify + call $~lib/date/stringify end local.tee $3 i32.store offset=8 @@ -3620,14 +3620,14 @@ local.get $0 i32.load offset=4 i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $4 i32.store offset=12 global.get $~lib/memory/__stack_pointer local.get $0 i32.load offset=8 i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $5 i32.store offset=16 global.get $~lib/memory/__stack_pointer @@ -3647,7 +3647,7 @@ i32.const 3600000 i32.div_s i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $6 i32.store offset=20 global.get $~lib/memory/__stack_pointer @@ -3667,7 +3667,7 @@ i32.const 60000 i32.div_s i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $7 i32.store offset=24 global.get $~lib/memory/__stack_pointer @@ -3687,7 +3687,7 @@ i32.const 1000 i32.div_s i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $2 i32.store offset=28 global.get $~lib/memory/__stack_pointer @@ -3705,7 +3705,7 @@ i64.add i32.wrap_i64 i32.const 3 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $0 i32.store offset=32 global.get $~lib/memory/__stack_pointer @@ -3896,7 +3896,7 @@ i32.add i32.xor i32.const 4 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $6 i32.store offset=8 global.get $~lib/memory/__stack_pointer @@ -3922,7 +3922,7 @@ global.get $~lib/memory/__stack_pointer local.get $0 i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $0 i32.store offset=20 global.get $~lib/memory/__stack_pointer @@ -4023,7 +4023,7 @@ i32.const 3600000 i32.div_s i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $3 i32.store global.get $~lib/memory/__stack_pointer @@ -4043,7 +4043,7 @@ i32.const 60000 i32.div_s i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $2 i32.store offset=4 global.get $~lib/memory/__stack_pointer @@ -4063,7 +4063,7 @@ i32.const 1000 i32.div_s i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $0 i32.store offset=8 global.get $~lib/memory/__stack_pointer @@ -4220,7 +4220,7 @@ i32.add i32.xor i32.const 4 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $8 i32.store offset=8 global.get $~lib/memory/__stack_pointer @@ -4246,7 +4246,7 @@ global.get $~lib/memory/__stack_pointer local.get $7 i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $5 i32.store offset=20 global.get $~lib/memory/__stack_pointer @@ -4266,7 +4266,7 @@ i32.const 3600000 i32.div_s i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $6 i32.store offset=24 global.get $~lib/memory/__stack_pointer @@ -4286,7 +4286,7 @@ i32.const 60000 i32.div_s i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $7 i32.store offset=28 global.get $~lib/memory/__stack_pointer @@ -4306,7 +4306,7 @@ i32.const 1000 i32.div_s i32.const 2 - call $~lib/date/stringify + call $~lib/date/stringify local.tee $0 i32.store offset=32 global.get $~lib/memory/__stack_pointer From 439dcad40bac989a71d92e939a59b3b05f21a700 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Sat, 6 Aug 2022 13:32:36 +0300 Subject: [PATCH 6/6] upd --- std/assembly/date.ts | 2 +- tests/compiler/std/date.debug.wat | 6 +- tests/compiler/std/date.release.wat | 134 ++-------------------------- 3 files changed, 10 insertions(+), 132 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 4a03f5af9c..be7d064115 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -322,7 +322,7 @@ function daysSinceEpoch(y: i32, m: i32, d: i32): i64 { var yoe = y - era * YEARS_PER_EPOCH; // [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); + return (era * 146097 + doe - EPOCH_OFFSET); } // TomohikoSakamoto algorithm from https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week diff --git a/tests/compiler/std/date.debug.wat b/tests/compiler/std/date.debug.wat index d7a4fd0555..d23919b2f7 100644 --- a/tests/compiler/std/date.debug.wat +++ b/tests/compiler/std/date.debug.wat @@ -7,12 +7,8 @@ (type $i32_=>_none (func (param i32))) (type $none_=>_none (func)) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) -<<<<<<< HEAD - (type $i32_i32_i32_=>_i64 (func (param i32 i32 i32) (result i64))) - (type $i32_i32_i32_i32_i32_i32_i32_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) -======= ->>>>>>> main (type $i64_=>_i32 (func (param i64) (result i32))) + (type $i32_i32_i32_=>_i64 (func (param i32 i32 i32) (result i64))) (type $i32_i32_i32_i32_i32_i32_i32_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i32) (result i64))) (type $none_=>_i32 (func (result i32))) (type $i32_i64_=>_none (func (param i32 i64))) diff --git a/tests/compiler/std/date.release.wat b/tests/compiler/std/date.release.wat index b14f6d288b..55673f4514 100644 --- a/tests/compiler/std/date.release.wat +++ b/tests/compiler/std/date.release.wat @@ -1,11 +1,11 @@ (module - (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_none (func (param i32 i32))) + (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 $i64_=>_i32 (func (param i64) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) + (type $i64_=>_i32 (func (param i64) (result i32))) (type $i32_i32_i32_=>_i32 (func (param 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))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) @@ -2032,18 +2032,10 @@ i32.const 2 i32.le_s i32.sub -<<<<<<< HEAD local.tee $0 - local.get $0 - i32.const 399 - i32.sub - local.get $0 -======= - local.tee $3 i32.const 399 i32.const 0 - local.get $3 ->>>>>>> main + local.get $0 i32.const 0 i32.lt_s select @@ -2154,38 +2146,6 @@ local.get $1 i32.const 1 i32.add -<<<<<<< HEAD -======= - local.tee $1 - i32.const 2 - i32.le_s - i32.sub - local.tee $0 - i32.const 399 - i32.const 0 - local.get $0 - i32.const 0 - i32.lt_s - select - i32.sub - i32.const 400 - i32.div_s - local.set $4 - local.get $1 - i32.const -3 - i32.const 9 - local.get $1 - i32.const 2 - i32.gt_s - select - i32.add - i32.const 153 - i32.mul - i32.const 2 - i32.add - i32.const 5 - i32.div_u ->>>>>>> main local.get $2 local.get $0 i64.load offset=16 @@ -2205,37 +2165,6 @@ local.get $1 local.get $0 i32.load offset=4 -<<<<<<< HEAD -======= - local.tee $4 - i32.const 2 - i32.le_s - i32.sub - local.tee $3 - i32.const 399 - i32.const 0 - local.get $3 - i32.const 0 - i32.lt_s - select - i32.sub - i32.const 400 - i32.div_s - local.set $1 - 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.lt_s - select - local.get $2 - i64.add ->>>>>>> main local.get $0 i32.load offset=8 local.get $0 @@ -3904,59 +3833,31 @@ i32.const 1579 i32.add i32.load8_u -<<<<<<< HEAD - local.get $5 local.get $5 local.get $5 i32.const 3 - i32.sub - local.get $5 i32.const 0 - i32.ge_s - local.tee $6 -======= - local.get $6 - local.get $6 - i32.const 3 - i32.const 0 - local.get $6 + local.get $5 i32.const 0 i32.lt_s - local.tee $0 ->>>>>>> main + local.tee $6 select i32.sub i32.const 4 i32.div_s -<<<<<<< HEAD - local.get $5 local.get $5 i32.const 99 - i32.sub - local.get $6 -======= - local.get $6 - i32.const 99 i32.const 0 - local.get $0 ->>>>>>> main + local.get $6 select i32.sub i32.const 100 i32.div_s i32.sub -<<<<<<< HEAD local.get $5 - local.get $5 - i32.const 399 - i32.sub - local.get $6 -======= - local.get $6 i32.const 399 i32.const 0 - local.get $0 ->>>>>>> main + local.get $6 select i32.sub i32.const 400 @@ -4256,20 +4157,11 @@ i32.const 1579 i32.add i32.load8_u -<<<<<<< HEAD - local.get $6 local.get $6 local.get $6 i32.const 3 - i32.sub - local.get $6 -======= - local.get $1 - local.get $1 - i32.const 3 i32.const 0 - local.get $1 ->>>>>>> main + local.get $6 i32.const 0 i32.lt_s local.tee $8 @@ -4277,12 +4169,7 @@ i32.sub i32.const 4 i32.div_s -<<<<<<< HEAD - local.get $6 local.get $6 -======= - local.get $1 ->>>>>>> main i32.const 99 i32.const 0 local.get $8 @@ -4291,12 +4178,7 @@ i32.const 100 i32.div_s i32.sub -<<<<<<< HEAD - local.get $6 local.get $6 -======= - local.get $1 ->>>>>>> main i32.const 399 i32.const 0 local.get $8