From 5ea1b58c7cd8f9bf9ebe7b2edbb9c82c6d1aa072 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Tue, 27 Apr 2021 08:57:36 +0300 Subject: [PATCH 1/8] expose dataStart to definitions --- std/assembly/array.ts | 4 +- std/assembly/index.d.ts | 6 +++ tests/compiler/std/array.optimized.wat | 19 ++++++++ tests/compiler/std/array.untouched.wat | 60 ++++++++++++++++++++++++++ 4 files changed, 87 insertions(+), 2 deletions(-) diff --git a/std/assembly/array.ts b/std/assembly/array.ts index cc54a6be57..4d7fdfb989 100644 --- a/std/assembly/array.ts +++ b/std/assembly/array.ts @@ -34,7 +34,7 @@ export class Array { // block is 16 bytes anyway so it's fine to have a couple extra fields in there. private buffer: ArrayBuffer; - private dataStart: usize; + @unsafe readonly dataStart: usize; private byteLength: i32; // Also note that Array with non-nullable T must guard against uninitialized null values @@ -395,7 +395,7 @@ export class Array { var length = this.length_; start = start < 0 ? max(length + start, 0) : min(start, length); deleteCount = max(min(deleteCount, length - start), 0); - var result = changetype>(__newArray(deleteCount, alignof(), idof>())); + var result = changetype>(__newArray(deleteCount, alignof(), idof>())); var resultStart = result.dataStart; var thisStart = this.dataStart; var thisBase = thisStart + (start << alignof()); diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index d33ed93d55..8280e138cb 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1459,6 +1459,8 @@ interface ArrayBufferView { readonly byteOffset: i32; /** The length in bytes from the start of the referenced {@link ArrayBuffer}. */ readonly byteLength: i32; + /** Returns raw pointer to backing data store including offset (unsafe). */ + readonly dataStart: usize; } /* @internal */ @@ -1474,6 +1476,8 @@ declare abstract class TypedArray implements ArrayBufferView { readonly byteOffset: i32; /** The length in bytes from the start of the referenced {@link ArrayBuffer}. */ readonly byteLength: i32; + /** Returns raw pointer to backing data store including offset (unsafe). */ + readonly dataStart: usize; /** The length (in elements). */ readonly length: i32; /** Returns value using relative indexing. Index may be negative */ @@ -1585,6 +1589,8 @@ declare class Array { [key: number]: T; /** Current length of the array. */ length: i32; + /** Returns raw pointer to backing data store (unsafe). */ + readonly dataStart: usize; /** Constructs a new array. */ constructor(length?: i32); at(index: i32): T; diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 1496959a36..c1e01485ea 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -590,6 +590,7 @@ (export "memory" (memory $0)) (export "__setArgumentsLength" (func $~setArgumentsLength)) (export "_start" (func $~start)) + (export "ArrayU32#get:dataStart" (func $export:~lib/array/Array#get:dataStart)) (export "ArrayU32#constructor" (func $export:std/array/ArrayU32#constructor@varargs)) (export "ArrayU32#get:length" (func $export:~lib/array/Array#get:length)) (export "ArrayU32#set:length" (func $export:~lib/array/Array#set:length)) @@ -616,6 +617,7 @@ (export "ArrayU32#join" (func $export:~lib/array/Array#join@varargs)) (export "ArrayU32#flat" (func $export:~lib/array/Array#flat)) (export "ArrayU32#toString" (func $export:~lib/array/Array#toString)) + (export "ArrayU8#get:dataStart" (func $export:~lib/array/Array#get:dataStart)) (export "ArrayU8#constructor" (func $export:std/array/ArrayU8#constructor@varargs)) (export "ArrayU8#get:length" (func $export:~lib/array/Array#get:length)) (export "ArrayU8#set:length" (func $export:~lib/array/Array#set:length)) @@ -642,6 +644,7 @@ (export "ArrayU8#join" (func $export:~lib/array/Array#join@varargs)) (export "ArrayU8#flat" (func $export:~lib/array/Array#flat)) (export "ArrayU8#toString" (func $export:~lib/array/Array#toString)) + (export "ArrayStr#get:dataStart" (func $export:~lib/array/Array#get:dataStart)) (export "ArrayStr#constructor" (func $export:std/array/ArrayStr#constructor@varargs)) (export "ArrayStr#get:length" (func $export:~lib/array/Array#get:length)) (export "ArrayStr#set:length" (func $export:~lib/array/Array#set:length)) @@ -22236,6 +22239,22 @@ global.set $~lib/memory/__stack_pointer local.get $4 ) + (func $export:~lib/array/Array#get:dataStart (param $0 i32) (result i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + i32.load offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $export:std/array/ArrayU32#constructor@varargs (param $0 i32) (param $1 i32) (result i32) global.get $~lib/memory/__stack_pointer i32.const 4 diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index 80cbbbafdb..1a004e5f65 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -351,6 +351,7 @@ (export "memory" (memory $0)) (export "__setArgumentsLength" (func $~setArgumentsLength)) (export "_start" (func $~start)) + (export "ArrayU32#get:dataStart" (func $export:~lib/array/Array#get:dataStart)) (export "ArrayU32#constructor" (func $export:std/array/ArrayU32#constructor@varargs)) (export "ArrayU32#get:length" (func $export:~lib/array/Array#get:length)) (export "ArrayU32#set:length" (func $export:~lib/array/Array#set:length)) @@ -377,6 +378,7 @@ (export "ArrayU32#join" (func $export:~lib/array/Array#join@varargs)) (export "ArrayU32#flat" (func $export:~lib/array/Array#flat)) (export "ArrayU32#toString" (func $export:~lib/array/Array#toString)) + (export "ArrayU8#get:dataStart" (func $export:~lib/array/Array#get:dataStart)) (export "ArrayU8#constructor" (func $export:std/array/ArrayU8#constructor@varargs)) (export "ArrayU8#get:length" (func $export:~lib/array/Array#get:length)) (export "ArrayU8#set:length" (func $export:~lib/array/Array#set:length)) @@ -403,6 +405,7 @@ (export "ArrayU8#join" (func $export:~lib/array/Array#join@varargs)) (export "ArrayU8#flat" (func $export:~lib/array/Array#flat)) (export "ArrayU8#toString" (func $export:~lib/array/Array#toString)) + (export "ArrayStr#get:dataStart" (func $export:~lib/array/Array<~lib/string/String>#get:dataStart)) (export "ArrayStr#constructor" (func $export:std/array/ArrayStr#constructor@varargs)) (export "ArrayStr#get:length" (func $export:~lib/array/Array<~lib/string/String>#get:length)) (export "ArrayStr#set:length" (func $export:~lib/array/Array<~lib/string/String>#set:length)) @@ -35312,6 +35315,25 @@ global.set $~lib/memory/__stack_pointer local.get $2 ) + (func $export:~lib/array/Array#get:dataStart (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/array/Array#get:dataStart + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) (func $export:std/array/ArrayU32#constructor@varargs (param $0 i32) (param $1 i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer @@ -35853,6 +35875,25 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $export:~lib/array/Array#get:dataStart (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/array/Array#get:dataStart + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) (func $export:std/array/ArrayU8#constructor@varargs (param $0 i32) (param $1 i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer @@ -36394,6 +36435,25 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $export:~lib/array/Array<~lib/string/String>#get:dataStart (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store + local.get $0 + call $~lib/array/Array<~lib/string/String>#get:dataStart + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) (func $export:std/array/ArrayStr#constructor@varargs (param $0 i32) (param $1 i32) (result i32) (local $2 i32) global.get $~lib/memory/__stack_pointer From b6ac5e6adb6d56fa5e70a58b5daea060c53d750d Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Tue, 27 Apr 2021 09:03:05 +0300 Subject: [PATCH 2/8] better --- std/assembly/index.d.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index 8280e138cb..2f149c6e4c 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1459,7 +1459,7 @@ interface ArrayBufferView { readonly byteOffset: i32; /** The length in bytes from the start of the referenced {@link ArrayBuffer}. */ readonly byteLength: i32; - /** Returns raw pointer to backing data store including offset (unsafe). */ + /** Returns raw pointer to data storage including offset (unsafe). */ readonly dataStart: usize; } @@ -1476,7 +1476,7 @@ declare abstract class TypedArray implements ArrayBufferView { readonly byteOffset: i32; /** The length in bytes from the start of the referenced {@link ArrayBuffer}. */ readonly byteLength: i32; - /** Returns raw pointer to backing data store including offset (unsafe). */ + /** Returns raw pointer to data storage including offset (unsafe). */ readonly dataStart: usize; /** The length (in elements). */ readonly length: i32; @@ -1589,7 +1589,7 @@ declare class Array { [key: number]: T; /** Current length of the array. */ length: i32; - /** Returns raw pointer to backing data store (unsafe). */ + /** Returns raw pointer to data storage (unsafe). */ readonly dataStart: usize; /** Constructs a new array. */ constructor(length?: i32); From ff872af812e1616bada4bdbdb7f68d362262d4d6 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Tue, 27 Apr 2021 13:05:52 +0300 Subject: [PATCH 3/8] init --- std/assembly/date.ts | 26 +- std/assembly/index.d.ts | 1 + tests/compiler/std/date.optimized.wat | 647 ++++++++++++++++++++------ tests/compiler/std/date.ts | 11 + tests/compiler/std/date.untouched.wat | 617 +++++++++++++++++++----- 5 files changed, 1039 insertions(+), 263 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 052bd7ad23..82c4731e58 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -208,6 +208,30 @@ export class Date { "Z" ); } + + toDateString(): 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 " + ]; + + var weekday = this.getUTCDay(); + var month = this.month; + var day = this.day; + var year = abs(this.year).toString().padStart(4, "0"); + if (this.year < 0) year = "-" + year; + + return ( + unchecked(weeks[weekday]) + + unchecked(months[month - 1]) + + day.toString().padStart(2, "0") + + " " + year + ); + } } function epochMillis( @@ -275,7 +299,7 @@ function dayOfWeek(year: i32, month: i32, day: i32): i32 { const tab = memory.data([0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4]); year -= i32(month < 3); - year += year / 4 - year / 100 + year / 400; + year += floorDiv(year, 4) - floorDiv(year, 100) + floorDiv(year, 400); month = load(tab + month - 1); return euclidRem(year + month + day, 7); } diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index 2f149c6e4c..4ccd0e34f7 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1757,6 +1757,7 @@ declare class Date { setUTCMilliseconds(value: i32): void; toISOString(): string; + toDateString(): string; } /** Class for representing a runtime error. Base class of all errors. */ diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index 7f96899c9a..4423f028c7 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -4,8 +4,8 @@ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) - (type $i32_=>_none (func (param i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i32_=>_none (func (param i32))) (type $i64_=>_i32 (func (param i64) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) (type $i32_i64_=>_none (func (param i32 i64))) @@ -25,7 +25,7 @@ (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20420)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 21388)) (global $~started (mut i32) (i32.const 0)) (memory $0 1) (data (i32.const 1036) ",") @@ -85,44 +85,94 @@ (data (i32.const 2712) "\01\00\00\006\00\00\00+\000\001\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") (data (i32.const 2780) "L") (data (i32.const 2792) "\01\00\00\006\00\00\00-\000\000\000\000\002\002\00-\000\006\00-\001\006\00T\001\007\00:\001\003\00:\005\000\00.\007\007\004\00Z") - (data (i32.const 2860) ",") - (data (i32.const 2872) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") - (data (i32.const 2908) ",") - (data (i32.const 2920) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") - (data (i32.const 2956) ",") - (data (i32.const 2968) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 3004) "|") - (data (i32.const 3016) "\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y") - (data (i32.const 3132) ",") - (data (i32.const 3144) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") - (data (i32.const 3180) ",") - (data (i32.const 3192) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") - (data (i32.const 3228) "<") - (data (i32.const 3240) "\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006") - (data (i32.const 3292) "L") - (data (i32.const 3304) "\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006") - (data (i32.const 3372) "L") - (data (i32.const 3384) "\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z") + (data (i32.const 2860) "\1c") + (data (i32.const 2872) "\01\00\00\00\08\00\00\00S\00u\00n\00 ") + (data (i32.const 2892) "\1c") + (data (i32.const 2904) "\01\00\00\00\08\00\00\00M\00o\00n\00 ") + (data (i32.const 2924) "\1c") + (data (i32.const 2936) "\01\00\00\00\08\00\00\00T\00u\00e\00 ") + (data (i32.const 2956) "\1c") + (data (i32.const 2968) "\01\00\00\00\08\00\00\00W\00e\00d\00 ") + (data (i32.const 2988) "\1c") + (data (i32.const 3000) "\01\00\00\00\08\00\00\00T\00h\00u\00 ") + (data (i32.const 3020) "\1c") + (data (i32.const 3032) "\01\00\00\00\08\00\00\00F\00r\00i\00 ") + (data (i32.const 3052) "\1c") + (data (i32.const 3064) "\01\00\00\00\08\00\00\00S\00a\00t\00 ") + (data (i32.const 3084) ",") + (data (i32.const 3096) "\04\00\00\00\1c\00\00\00@\0b\00\00`\0b\00\00\80\0b\00\00\a0\0b\00\00\c0\0b\00\00\e0\0b\00\00\00\0c") + (data (i32.const 3132) "\1c") + (data (i32.const 3144) "\01\00\00\00\08\00\00\00J\00a\00n\00 ") + (data (i32.const 3164) "\1c") + (data (i32.const 3176) "\01\00\00\00\08\00\00\00F\00e\00b\00 ") + (data (i32.const 3196) "\1c") + (data (i32.const 3208) "\01\00\00\00\08\00\00\00M\00a\00r\00 ") + (data (i32.const 3228) "\1c") + (data (i32.const 3240) "\01\00\00\00\08\00\00\00A\00p\00r\00 ") + (data (i32.const 3260) "\1c") + (data (i32.const 3272) "\01\00\00\00\08\00\00\00M\00a\00y\00 ") + (data (i32.const 3292) "\1c") + (data (i32.const 3304) "\01\00\00\00\08\00\00\00J\00u\00n\00 ") + (data (i32.const 3324) "\1c") + (data (i32.const 3336) "\01\00\00\00\08\00\00\00J\00u\00l\00 ") + (data (i32.const 3356) "\1c") + (data (i32.const 3368) "\01\00\00\00\08\00\00\00A\00u\00g\00 ") + (data (i32.const 3388) "\1c") + (data (i32.const 3400) "\01\00\00\00\08\00\00\00S\00e\00p\00 ") + (data (i32.const 3420) "\1c") + (data (i32.const 3432) "\01\00\00\00\08\00\00\00O\00c\00t\00 ") (data (i32.const 3452) "\1c") - (data (i32.const 3464) "\01\00\00\00\08\00\00\000\000\000\000") + (data (i32.const 3464) "\01\00\00\00\08\00\00\00N\00o\00v\00 ") (data (i32.const 3484) "\1c") - (data (i32.const 3496) "\01\00\00\00\08\00\00\000\000\000\001") - (data (i32.const 3516) "\1c") - (data (i32.const 3528) "\01\00\00\00\08\00\00\001\009\007\006") - (data (i32.const 3548) ",") - (data (i32.const 3560) "\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002") - (data (i32.const 3596) "<") - (data (i32.const 3608) "\01\00\00\00 \00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004") - (data (i32.const 3660) "L") - (data (i32.const 3672) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") - (data (i32.const 3740) "L") - (data (i32.const 3752) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z") - (data (i32.const 3820) "L") - (data (i32.const 3832) "\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z") - (data (i32.const 3900) "L") - (data (i32.const 3912) "\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z") - (data (i32.const 3984) "\06\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 4012) " \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t") + (data (i32.const 3496) "\01\00\00\00\08\00\00\00D\00e\00c\00 ") + (data (i32.const 3516) "L") + (data (i32.const 3528) "\04\00\00\000\00\00\00P\0c\00\00p\0c\00\00\90\0c\00\00\b0\0c\00\00\d0\0c\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") + (data (i32.const 3596) "\1c") + (data (i32.const 3608) "\01\00\00\00\02\00\00\00 ") + (data (i32.const 3628) "<") + (data (i32.const 3640) "\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 3692) "<") + (data (i32.const 3704) "\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 3756) "<") + (data (i32.const 3768) "\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 3820) ",") + (data (i32.const 3832) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") + (data (i32.const 3868) ",") + (data (i32.const 3880) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 3916) ",") + (data (i32.const 3928) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 3964) "|") + (data (i32.const 3976) "\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 4092) ",") + (data (i32.const 4104) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") + (data (i32.const 4140) ",") + (data (i32.const 4152) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") + (data (i32.const 4188) "<") + (data (i32.const 4200) "\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 4252) "L") + (data (i32.const 4264) "\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 4332) "L") + (data (i32.const 4344) "\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 4412) "\1c") + (data (i32.const 4424) "\01\00\00\00\08\00\00\000\000\000\000") + (data (i32.const 4444) "\1c") + (data (i32.const 4456) "\01\00\00\00\08\00\00\000\000\000\001") + (data (i32.const 4476) "\1c") + (data (i32.const 4488) "\01\00\00\00\08\00\00\001\009\007\006") + (data (i32.const 4508) ",") + (data (i32.const 4520) "\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002") + (data (i32.const 4556) "<") + (data (i32.const 4568) "\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 4620) "L") + (data (i32.const 4632) "\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 4700) "L") + (data (i32.const 4712) "\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 4780) "L") + (data (i32.const 4792) "\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 4860) "L") + (data (i32.const 4872) "\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 4944) "\07\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 4972) " \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/daysSinceEpoch (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -324,9 +374,9 @@ (local $1 i32) i32.const 1392 call $~lib/rt/itcms/__visit - i32.const 2928 + i32.const 3888 call $~lib/rt/itcms/__visit - i32.const 3024 + i32.const 3984 call $~lib/rt/itcms/__visit i32.const 1200 call $~lib/rt/itcms/__visit @@ -444,7 +494,7 @@ if i32.const 0 local.get $0 - i32.const 20420 + i32.const 21388 i32.lt_u local.get $0 i32.load offset=8 @@ -490,7 +540,7 @@ i32.const 1 else local.get $1 - i32.const 3984 + i32.const 4944 i32.load i32.gt_u if @@ -504,7 +554,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 3988 + i32.const 4948 i32.add i32.load i32.const 32 @@ -1078,10 +1128,10 @@ if unreachable end - i32.const 20432 + i32.const 21392 i32.const 0 i32.store - i32.const 22000 + i32.const 22960 i32.const 0 i32.store loop $for-loop|0 @@ -1092,7 +1142,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 20432 + i32.const 21392 i32.add i32.const 0 i32.store offset=4 @@ -1110,7 +1160,7 @@ i32.add i32.const 2 i32.shl - i32.const 20432 + i32.const 21392 i32.add i32.const 0 i32.store offset=96 @@ -1128,13 +1178,13 @@ br $for-loop|0 end end - i32.const 20432 - i32.const 22004 + i32.const 21392 + i32.const 22964 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 20432 + i32.const 21392 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -1213,7 +1263,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 20420 + i32.const 21388 i32.lt_u if local.get $0 @@ -1303,7 +1353,7 @@ unreachable end local.get $0 - i32.const 20420 + i32.const 21388 i32.lt_u if local.get $0 @@ -1326,7 +1376,7 @@ i32.const 4 i32.add local.tee $1 - i32.const 20420 + i32.const 21388 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -2257,30 +2307,49 @@ (func $~lib/date/Date#getUTCDay (param $0 i32) (result i32) (local $1 i32) (local $2 i32) + (local $3 i32) local.get $0 i32.load local.get $0 i32.load offset=4 - local.tee $2 + local.tee $3 i32.const 3 i32.lt_s i32.sub - local.set $1 + local.tee $1 + i32.const 0 + i32.ge_s + local.set $2 local.get $0 i32.load offset=8 - local.get $2 + local.get $3 i32.const 1579 i32.add i32.load8_u local.get $1 local.get $1 + local.get $1 + i32.const 3 + i32.sub + local.get $2 + select i32.const 4 i32.div_s local.get $1 + local.get $1 + i32.const 99 + i32.sub + local.get $2 + select i32.const 100 i32.div_s i32.sub local.get $1 + local.get $1 + i32.const 399 + i32.sub + local.get $2 + select i32.const 400 i32.div_s i32.add @@ -2778,6 +2847,20 @@ call $~lib/util/string/compareImpl i32.eqz ) + (func $~lib/rt/__newBuffer (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + local.get $0 + local.get $1 + call $~lib/rt/itcms/__new + local.set $1 + local.get $2 + if + local.get $1 + local.get $2 + local.get $0 + call $~lib/memory/memory.copy + end + local.get $1 + ) (func $~lib/string/String#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) @@ -2941,8 +3024,8 @@ i32.const 268435455 i32.gt_u if - i32.const 2928 - i32.const 2976 + i32.const 3888 + i32.const 3936 i32.const 14 i32.const 48 call $~lib/builtins/abort @@ -3310,28 +3393,57 @@ block $invalid block $~lib/array/Array block $~lib/array/Array<~lib/string/String> - block $~lib/date/Date - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/date/Date $~lib/array/Array<~lib/string/String> $~lib/array/Array $invalid + block $~lib/staticarray/StaticArray<~lib/string/String> + block $~lib/date/Date + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/date/Date $~lib/staticarray/StaticArray<~lib/string/String> $~lib/array/Array<~lib/string/String> $~lib/array/Array $invalid + end + return end return end + local.get $0 + i32.load + local.tee $0 + if + local.get $0 + call $~lib/rt/itcms/__visit + end return end + return + end + local.get $0 + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.add + local.set $1 + loop $while-continue|0 local.get $0 - i32.load - local.tee $0 + local.get $1 + i32.lt_u if local.get $0 - call $~lib/rt/itcms/__visit + i32.load + local.tee $2 + if + local.get $2 + call $~lib/rt/itcms/__visit + end + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $while-continue|0 end - return end return end @@ -3344,7 +3456,7 @@ i32.shl i32.add local.set $2 - loop $while-continue|0 + loop $while-continue|00 local.get $1 local.get $2 i32.lt_u @@ -3360,7 +3472,7 @@ i32.const 4 i32.add local.set $1 - br $while-continue|0 + br $while-continue|00 end end local.get $0 @@ -3386,11 +3498,11 @@ ) (func $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 4036 + i32.const 5004 i32.lt_s if - i32.const 20448 - i32.const 20496 + i32.const 21408 + i32.const 21456 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -3730,6 +3842,166 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/date/Date#toDateString (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=16 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=24 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=32 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=40 + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.const 4 + i32.const 3104 + call $~lib/rt/__newBuffer + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 48 + i32.const 4 + i32.const 3536 + call $~lib/rt/__newBuffer + local.tee $3 + i32.store offset=4 + local.get $0 + call $~lib/date/Date#getUTCDay + local.set $4 + local.get $0 + i32.load offset=4 + local.set $5 + local.get $0 + i32.load offset=8 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load + local.tee $2 + i32.const 31 + i32.shr_s + local.tee $8 + local.get $2 + local.get $8 + 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 4 + call $~lib/string/String#padStart + local.tee $2 + i32.store offset=16 + local.get $0 + i32.load + i32.const 0 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + i32.const 1616 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 1616 + local.get $2 + call $~lib/string/String.__concat + local.tee $2 + i32.store offset=16 + end + global.get $~lib/memory/__stack_pointer + local.get $1 + local.get $4 + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $0 + i32.store offset=32 + global.get $~lib/memory/__stack_pointer + local.get $3 + local.get $5 + i32.const 1 + i32.sub + i32.const 2 + i32.shl + i32.add + i32.load + local.tee $1 + i32.store offset=36 + local.get $0 + local.get $1 + call $~lib/string/String.__concat + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=24 + call $~lib/number/I32#toString + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=32 + global.get $~lib/memory/__stack_pointer + i32.const 1872 + i32.store offset=40 + local.get $1 + i32.const 2 + call $~lib/string/String#padStart + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=28 + local.get $0 + local.get $1 + call $~lib/string/String.__concat + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=20 + global.get $~lib/memory/__stack_pointer + i32.const 3616 + i32.store offset=12 + local.get $0 + i32.const 3616 + call $~lib/string/String.__concat + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=8 + local.get $0 + local.get $2 + call $~lib/string/String.__concat + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String#split (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -4414,7 +4686,7 @@ memory.size i32.const 16 i32.shl - i32.const 20420 + i32.const 21388 i32.sub i32.const 1 i32.shr_u @@ -5823,10 +6095,88 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2880 + i64.const -61536067200000 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toDateString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3648 + i32.store offset=8 + local.get $0 + i32.const 3648 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 253 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 1580601600000 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toDateString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2880 + i32.const 3712 + i32.store offset=8 + local.get $0 + i32.const 3712 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 255 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const -62183116800000 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toDateString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3776 + i32.store offset=8 + local.get $0 + i32.const 3776 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 258 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3840 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3840 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5837,16 +6187,16 @@ if i32.const 0 i32.const 1152 - i32.const 254 + i32.const 265 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3152 + i32.const 4112 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3152 + i32.const 4112 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5857,16 +6207,16 @@ if i32.const 0 i32.const 1152 - i32.const 256 + i32.const 267 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3200 + i32.const 4160 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3200 + i32.const 4160 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5877,16 +6227,16 @@ if i32.const 0 i32.const 1152 - i32.const 258 + i32.const 269 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3248 + i32.const 4208 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3248 + i32.const 4208 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5897,16 +6247,16 @@ if i32.const 0 i32.const 1152 - i32.const 262 + i32.const 273 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3312 + i32.const 4272 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3312 + i32.const 4272 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5917,16 +6267,16 @@ if i32.const 0 i32.const 1152 - i32.const 266 + i32.const 277 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3392 + i32.const 4352 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3392 + i32.const 4352 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5937,16 +6287,16 @@ if i32.const 0 i32.const 1152 - i32.const 270 + i32.const 281 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3472 + i32.const 4432 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3472 + i32.const 4432 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5957,16 +6307,16 @@ if i32.const 0 i32.const 1152 - i32.const 273 + i32.const 284 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3504 + i32.const 4464 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3504 + i32.const 4464 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5977,16 +6327,16 @@ if i32.const 0 i32.const 1152 - i32.const 276 + i32.const 287 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3536 + i32.const 4496 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3536 + i32.const 4496 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -5997,16 +6347,16 @@ if i32.const 0 i32.const 1152 - i32.const 279 + i32.const 290 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3568 + i32.const 4528 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3568 + i32.const 4528 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -6017,16 +6367,16 @@ if i32.const 0 i32.const 1152 - i32.const 282 + i32.const 293 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 2880 + i32.const 3840 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 2880 + i32.const 3840 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -6037,16 +6387,16 @@ if i32.const 0 i32.const 1152 - i32.const 285 + i32.const 296 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3616 + i32.const 4576 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3616 + i32.const 4576 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -6057,16 +6407,16 @@ if i32.const 0 i32.const 1152 - i32.const 288 + i32.const 299 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3248 + i32.const 4208 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3248 + i32.const 4208 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -6077,7 +6427,7 @@ if i32.const 0 i32.const 1152 - i32.const 291 + i32.const 302 i32.const 3 call $~lib/builtins/abort unreachable @@ -6099,7 +6449,7 @@ if i32.const 0 i32.const 1152 - i32.const 309 + i32.const 320 i32.const 3 call $~lib/builtins/abort unreachable @@ -6111,7 +6461,7 @@ if i32.const 0 i32.const 1152 - i32.const 310 + i32.const 321 i32.const 3 call $~lib/builtins/abort unreachable @@ -6123,7 +6473,7 @@ if i32.const 0 i32.const 1152 - i32.const 312 + i32.const 323 i32.const 3 call $~lib/builtins/abort unreachable @@ -6135,7 +6485,7 @@ if i32.const 0 i32.const 1152 - i32.const 313 + i32.const 324 i32.const 3 call $~lib/builtins/abort unreachable @@ -6147,7 +6497,7 @@ if i32.const 0 i32.const 1152 - i32.const 315 + i32.const 326 i32.const 3 call $~lib/builtins/abort unreachable @@ -6159,7 +6509,7 @@ if i32.const 0 i32.const 1152 - i32.const 316 + i32.const 327 i32.const 3 call $~lib/builtins/abort unreachable @@ -6171,7 +6521,7 @@ if i32.const 0 i32.const 1152 - i32.const 318 + i32.const 329 i32.const 3 call $~lib/builtins/abort unreachable @@ -6183,7 +6533,7 @@ if i32.const 0 i32.const 1152 - i32.const 319 + i32.const 330 i32.const 3 call $~lib/builtins/abort unreachable @@ -6195,16 +6545,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3680 + i32.const 4640 i32.store offset=8 local.get $0 - i32.const 3680 + i32.const 4640 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 321 + i32.const 332 i32.const 3 call $~lib/builtins/abort unreachable @@ -6216,16 +6566,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3760 + i32.const 4720 i32.store offset=8 local.get $0 - i32.const 3760 + i32.const 4720 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 322 + i32.const 333 i32.const 3 call $~lib/builtins/abort unreachable @@ -6247,7 +6597,7 @@ if i32.const 0 i32.const 1152 - i32.const 327 + i32.const 338 i32.const 3 call $~lib/builtins/abort unreachable @@ -6259,7 +6609,7 @@ if i32.const 0 i32.const 1152 - i32.const 328 + i32.const 339 i32.const 3 call $~lib/builtins/abort unreachable @@ -6271,7 +6621,7 @@ if i32.const 0 i32.const 1152 - i32.const 329 + i32.const 340 i32.const 3 call $~lib/builtins/abort unreachable @@ -6281,7 +6631,7 @@ if i32.const 0 i32.const 1152 - i32.const 330 + i32.const 341 i32.const 3 call $~lib/builtins/abort unreachable @@ -6291,7 +6641,7 @@ if i32.const 0 i32.const 1152 - i32.const 331 + i32.const 342 i32.const 3 call $~lib/builtins/abort unreachable @@ -6301,7 +6651,7 @@ if i32.const 0 i32.const 1152 - i32.const 332 + i32.const 343 i32.const 3 call $~lib/builtins/abort unreachable @@ -6313,7 +6663,7 @@ if i32.const 0 i32.const 1152 - i32.const 333 + i32.const 344 i32.const 3 call $~lib/builtins/abort unreachable @@ -6325,16 +6675,16 @@ local.get $2 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3840 + i32.const 4800 i32.store offset=8 local.get $2 - i32.const 3840 + i32.const 4800 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 335 + i32.const 346 i32.const 3 call $~lib/builtins/abort unreachable @@ -6346,16 +6696,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3920 + i32.const 4880 i32.store offset=8 local.get $0 - i32.const 3920 + i32.const 4880 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 336 + i32.const 347 i32.const 3 call $~lib/builtins/abort unreachable @@ -6672,11 +7022,12 @@ i32.shl local.tee $3 i32.const 0 - call $~lib/rt/itcms/__new + i32.const 0 + call $~lib/rt/__newBuffer local.tee $2 i32.store i32.const 16 - i32.const 4 + i32.const 5 call $~lib/rt/itcms/__new local.tee $1 local.get $2 @@ -6715,7 +7066,7 @@ i32.ge_u if i32.const 1392 - i32.const 2976 + i32.const 3936 i32.const 92 i32.const 42 call $~lib/builtins/abort @@ -6734,8 +7085,8 @@ local.get $0 i32.eqz if - i32.const 3024 - i32.const 2976 + i32.const 3984 + i32.const 3936 i32.const 96 i32.const 40 call $~lib/builtins/abort diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index 105bda77c0..e200029b47 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -247,6 +247,17 @@ assert(date.toISOString() == "-000022-06-16T17:13:50.774Z"); } +// Date#toDateString /////////////////////////////////////////////////////////////////////////////// +{ + let date = new Date(-61536067200000); + assert(date.toDateString() == "Wed Jan 01 0020"); + date = new Date(1580601600000); + assert(date.toDateString() == "Sun Feb 02 2020"); + // negative year + date = new Date(-62183116800000); // '-000001-07-01T00:00Z' + assert(date.toDateString() == "Thu Jul 01 -0001"); +} + // Date#fromString ///////////////////////////////////////////////////////////////////////////////// { // supports year / month / day diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index e8092bdef1..3bb7c1c380 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -35,10 +35,10 @@ (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) - (global $~lib/rt/__rtti_base i32 (i32.const 4416)) - (global $~lib/memory/__data_end i32 (i32.const 4468)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20852)) - (global $~lib/memory/__heap_base i32 (i32.const 20852)) + (global $~lib/rt/__rtti_base i32 (i32.const 5376)) + (global $~lib/memory/__data_end i32 (i32.const 5436)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 21820)) + (global $~lib/memory/__heap_base i32 (i32.const 21820)) (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") @@ -75,25 +75,50 @@ (data (i32.const 3052) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\009\009\009\009\00-\001\002\00-\003\001\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 3132) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\000\001\000\000\000\000\00-\000\001\00-\000\001\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") (data (i32.const 3212) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\000\000\000\000\002\002\00-\000\006\00-\001\006\00T\001\007\00:\001\003\00:\005\000\00.\007\007\004\00Z\00\00\00\00\00\00\00") - (data (i32.const 3292) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002\00\00\00\00\00\00\00\00\00") - (data (i32.const 3340) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") - (data (i32.const 3388) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") - (data (i32.const 3436) "|\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00^\00\00\00E\00l\00e\00m\00e\00n\00t\00 \00t\00y\00p\00e\00 \00m\00u\00s\00t\00 \00b\00e\00 \00n\00u\00l\00l\00a\00b\00l\00e\00 \00i\00f\00 \00a\00r\00r\00a\00y\00 \00i\00s\00 \00h\00o\00l\00e\00y\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3564) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3612) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004\00\00\00\00\00\00\00\00\00") - (data (i32.const 3660) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00&\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00\00\00\00\00\00\00") - (data (i32.const 3724) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00.\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3804) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\000\00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00:\005\006\00.\004\005\006\00Z\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 3884) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\000\000\000\000\00\00\00\00\00") - (data (i32.const 3916) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\000\000\000\001\00\00\00\00\00") - (data (i32.const 3948) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\001\009\007\006\00\00\00\00\00") - (data (i32.const 3980) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 4028) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00 \00\00\001\009\007\006\00-\000\002\00-\000\002\00T\001\002\00:\003\004\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 4092) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 4172) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\003\00T\000\000\00:\000\000\00:\000\000\00.\000\000\000\00Z\00\00\00\00\00\00\00") - (data (i32.const 4252) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00+\002\007\005\007\006\000\00-\000\009\00-\001\002\00T\002\003\00:\005\009\00:\005\009\00.\009\009\009\00Z\00\00\00\00\00\00\00") - (data (i32.const 4332) "L\00\00\00\00\00\00\00\00\00\00\00\01\00\00\006\00\00\00-\002\007\001\008\002\001\00-\000\004\00-\002\000\00T\000\000\00:\000\000\00:\000\000\00.\000\000\001\00Z\00\00\00\00\00\00\00") - (data (i32.const 4416) "\06\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00\02A\00\00\00\00\00\00\02\t\00\00\00\00\00\00") + (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\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 4300) ",\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 4348) ",\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 4396) "|\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 4524) ",\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 4572) ",\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 4620) "<\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 4684) "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 4764) "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 4844) "\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 4876) "\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 4908) "\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 4940) ",\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 4988) "<\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 5052) "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 5132) "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 5212) "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 5292) "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 5376) "\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 funcref) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -3045,14 +3070,59 @@ local.set $0 local.get $0 local.get $0 + local.set $4 i32.const 4 + local.set $3 + local.get $4 + i32.const 0 + i32.ge_s + if (result i32) + local.get $4 + else + local.get $4 + local.get $3 + i32.sub + i32.const 1 + i32.add + end + local.get $3 i32.div_s local.get $0 + local.set $4 i32.const 100 + local.set $3 + local.get $4 + i32.const 0 + i32.ge_s + if (result i32) + local.get $4 + else + local.get $4 + local.get $3 + i32.sub + i32.const 1 + i32.add + end + local.get $3 i32.div_s i32.sub local.get $0 + local.set $4 i32.const 400 + local.set $3 + local.get $4 + i32.const 0 + i32.ge_s + if (result i32) + local.get $4 + else + local.get $4 + local.get $3 + i32.sub + i32.const 1 + i32.add + end + local.get $3 i32.div_s i32.add i32.add @@ -4964,6 +5034,29 @@ call $~lib/util/string/compareImpl i32.eqz ) + (func $~lib/rt/__newBuffer (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (local $3 i32) + local.get $0 + local.get $1 + call $~lib/rt/itcms/__new + local.set $3 + local.get $2 + if + local.get $3 + local.get $2 + local.get $0 + call $~lib/memory/memory.copy + end + local.get $3 + ) + (func $~lib/staticarray/StaticArray<~lib/string/String>#__uget (param $0 i32) (param $1 i32) (result i32) + local.get $0 + local.get $1 + i32.const 2 + i32.shl + i32.add + i32.load + ) (func $~lib/string/String#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) @@ -5035,21 +5128,6 @@ end i32.const -1 ) - (func $~lib/rt/__newBuffer (param $0 i32) (param $1 i32) (param $2 i32) (result i32) - (local $3 i32) - local.get $0 - local.get $1 - call $~lib/rt/itcms/__new - local.set $3 - local.get $2 - if - local.get $3 - local.get $2 - local.get $0 - call $~lib/memory/memory.copy - end - local.get $3 - ) (func $~lib/rt/itcms/__link (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) @@ -5199,8 +5277,8 @@ i32.shr_u i32.gt_u if - i32.const 3360 - i32.const 3408 + i32.const 4320 + i32.const 4368 i32.const 14 i32.const 48 call $~lib/builtins/abort @@ -5683,10 +5761,10 @@ i32.const 368 local.get $0 call $~lib/rt/itcms/__visit - i32.const 3360 + i32.const 4320 local.get $0 call $~lib/rt/itcms/__visit - i32.const 3456 + i32.const 4416 local.get $0 call $~lib/rt/itcms/__visit i32.const 176 @@ -5713,6 +5791,51 @@ call $~lib/rt/itcms/__visit end ) + (func $~lib/staticarray/StaticArray<~lib/string/String>#__visit (param $0 i32) (param $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + i32.const 1 + drop + local.get $0 + local.set $2 + local.get $2 + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.add + local.set $3 + loop $while-continue|0 + local.get $2 + local.get $3 + i32.lt_u + local.set $4 + local.get $4 + if + local.get $2 + i32.load + local.set $5 + local.get $5 + if + local.get $5 + local.get $1 + call $~lib/rt/itcms/__visit + end + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $while-continue|0 + end + end + ) + (func $~lib/staticarray/StaticArray<~lib/string/String>~visit (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/staticarray/StaticArray<~lib/string/String>#__visit + ) (func $~lib/array/Array<~lib/string/String>#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -5780,25 +5903,31 @@ block $invalid block $~lib/array/Array block $~lib/array/Array<~lib/string/String> - block $~lib/date/Date - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - local.get $0 - i32.const 8 - i32.sub - i32.load - br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/date/Date $~lib/array/Array<~lib/string/String> $~lib/array/Array $invalid + block $~lib/staticarray/StaticArray<~lib/string/String> + block $~lib/date/Date + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $~lib/date/Date $~lib/staticarray/StaticArray<~lib/string/String> $~lib/array/Array<~lib/string/String> $~lib/array/Array $invalid + end + return end return end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit return end + local.get $0 + local.get $1 + call $~lib/staticarray/StaticArray<~lib/string/String>~visit return end local.get $0 @@ -5827,8 +5956,8 @@ global.get $~lib/memory/__data_end i32.lt_s if - i32.const 20880 - i32.const 20928 + i32.const 21840 + i32.const 21888 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -6225,6 +6354,179 @@ global.set $~lib/memory/__stack_pointer local.get $6 ) + (func $~lib/date/Date#toDateString (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + (local $6 i32) + (local $7 i32) + (local $8 i32) + (local $9 i32) + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=16 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=24 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=32 + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store offset=40 + global.get $~lib/memory/__stack_pointer + i32.const 28 + i32.const 4 + i32.const 3536 + call $~lib/rt/__newBuffer + local.tee $1 + i32.store + global.get $~lib/memory/__stack_pointer + i32.const 48 + i32.const 4 + i32.const 3968 + call $~lib/rt/__newBuffer + local.tee $2 + i32.store offset=4 + local.get $0 + call $~lib/date/Date#getUTCDay + local.set $3 + local.get $0 + i32.load offset=4 + local.set $4 + local.get $0 + i32.load offset=8 + local.set $5 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.load + local.tee $6 + i32.const 31 + i32.shr_s + local.tee $7 + local.get $6 + i32.add + local.get $7 + i32.xor + i32.const 10 + call $~lib/number/I32#toString + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=8 + local.get $9 + i32.const 4 + i32.const 848 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=12 + local.get $9 + call $~lib/string/String#padStart + local.tee $8 + i32.store offset=16 + local.get $0 + i32.load + i32.const 0 + i32.lt_s + if + global.get $~lib/memory/__stack_pointer + i32.const 592 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=8 + local.get $9 + local.get $8 + call $~lib/string/String.__concat + local.tee $8 + i32.store offset=16 + end + local.get $1 + local.get $3 + call $~lib/staticarray/StaticArray<~lib/string/String>#__uget + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=32 + local.get $9 + local.get $2 + local.get $4 + i32.const 1 + i32.sub + call $~lib/staticarray/StaticArray<~lib/string/String>#__uget + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=36 + local.get $9 + call $~lib/string/String.__concat + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=24 + local.get $9 + local.get $5 + i32.const 10 + call $~lib/number/I32#toString + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=32 + local.get $9 + i32.const 2 + i32.const 848 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=40 + local.get $9 + call $~lib/string/String#padStart + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=28 + local.get $9 + call $~lib/string/String.__concat + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=20 + local.get $9 + i32.const 4048 + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=12 + local.get $9 + call $~lib/string/String.__concat + local.set $9 + global.get $~lib/memory/__stack_pointer + local.get $9 + i32.store offset=8 + local.get $9 + local.get $8 + call $~lib/string/String.__concat + local.set $9 + global.get $~lib/memory/__stack_pointer + i32.const 44 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $9 + ) (func $~lib/string/String#split (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) @@ -6258,7 +6560,7 @@ if i32.const 0 i32.const 2 - i32.const 4 + i32.const 5 i32.const 0 call $~lib/rt/__newArray local.set $15 @@ -6276,7 +6578,7 @@ global.get $~lib/memory/__stack_pointer i32.const 1 i32.const 2 - i32.const 4 + i32.const 5 i32.const 0 call $~lib/rt/__newArray local.tee $3 @@ -6320,7 +6622,7 @@ if i32.const 0 i32.const 2 - i32.const 4 + i32.const 5 i32.const 0 call $~lib/rt/__newArray local.set $15 @@ -6343,7 +6645,7 @@ global.get $~lib/memory/__stack_pointer local.get $5 i32.const 2 - i32.const 4 + i32.const 5 i32.const 0 call $~lib/rt/__newArray local.tee $3 @@ -6407,7 +6709,7 @@ global.get $~lib/memory/__stack_pointer i32.const 1 i32.const 2 - i32.const 4 + i32.const 5 i32.const 0 call $~lib/rt/__newArray local.tee $4 @@ -6429,7 +6731,7 @@ global.get $~lib/memory/__stack_pointer i32.const 0 i32.const 2 - i32.const 4 + i32.const 5 i32.const 0 call $~lib/rt/__newArray local.tee $10 @@ -8899,7 +9201,94 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3312 + i32.const 0 + i64.const -61536067200000 + call $~lib/date/Date#constructor + local.tee $1 + i32.store + local.get $1 + call $~lib/date/Date#toDateString + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 4080 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=8 + local.get $8 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 253 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i64.const 1580601600000 + call $~lib/date/Date#constructor + local.tee $1 + i32.store + local.get $1 + call $~lib/date/Date#toDateString + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 4144 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=8 + local.get $8 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 255 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i64.const -62183116800000 + call $~lib/date/Date#constructor + local.tee $1 + i32.store + local.get $1 + call $~lib/date/Date#toDateString + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 4208 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=8 + local.get $8 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 258 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4272 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8916,13 +9305,13 @@ if i32.const 0 i32.const 128 - i32.const 254 + i32.const 265 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3584 + i32.const 4544 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8939,13 +9328,13 @@ if i32.const 0 i32.const 128 - i32.const 256 + i32.const 267 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3632 + i32.const 4592 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8962,13 +9351,13 @@ if i32.const 0 i32.const 128 - i32.const 258 + i32.const 269 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3680 + i32.const 4640 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -8985,13 +9374,13 @@ if i32.const 0 i32.const 128 - i32.const 262 + i32.const 273 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3744 + i32.const 4704 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9008,13 +9397,13 @@ if i32.const 0 i32.const 128 - i32.const 266 + i32.const 277 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3824 + i32.const 4784 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9031,13 +9420,13 @@ if i32.const 0 i32.const 128 - i32.const 270 + i32.const 281 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3904 + i32.const 4864 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9054,13 +9443,13 @@ if i32.const 0 i32.const 128 - i32.const 273 + i32.const 284 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3936 + i32.const 4896 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9077,13 +9466,13 @@ if i32.const 0 i32.const 128 - i32.const 276 + i32.const 287 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3968 + i32.const 4928 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9100,13 +9489,13 @@ if i32.const 0 i32.const 128 - i32.const 279 + i32.const 290 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4000 + i32.const 4960 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9123,13 +9512,13 @@ if i32.const 0 i32.const 128 - i32.const 282 + i32.const 293 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3312 + i32.const 4272 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9146,13 +9535,13 @@ if i32.const 0 i32.const 128 - i32.const 285 + i32.const 296 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4048 + i32.const 5008 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9169,13 +9558,13 @@ if i32.const 0 i32.const 128 - i32.const 288 + i32.const 299 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3680 + i32.const 4640 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9192,7 +9581,7 @@ if i32.const 0 i32.const 128 - i32.const 291 + i32.const 302 i32.const 3 call $~lib/builtins/abort unreachable @@ -9217,7 +9606,7 @@ if i32.const 0 i32.const 128 - i32.const 309 + i32.const 320 i32.const 3 call $~lib/builtins/abort unreachable @@ -9230,7 +9619,7 @@ if i32.const 0 i32.const 128 - i32.const 310 + i32.const 321 i32.const 3 call $~lib/builtins/abort unreachable @@ -9243,7 +9632,7 @@ if i32.const 0 i32.const 128 - i32.const 312 + i32.const 323 i32.const 3 call $~lib/builtins/abort unreachable @@ -9256,7 +9645,7 @@ if i32.const 0 i32.const 128 - i32.const 313 + i32.const 324 i32.const 3 call $~lib/builtins/abort unreachable @@ -9269,7 +9658,7 @@ if i32.const 0 i32.const 128 - i32.const 315 + i32.const 326 i32.const 3 call $~lib/builtins/abort unreachable @@ -9282,7 +9671,7 @@ if i32.const 0 i32.const 128 - i32.const 316 + i32.const 327 i32.const 3 call $~lib/builtins/abort unreachable @@ -9295,7 +9684,7 @@ if i32.const 0 i32.const 128 - i32.const 318 + i32.const 329 i32.const 3 call $~lib/builtins/abort unreachable @@ -9308,7 +9697,7 @@ if i32.const 0 i32.const 128 - i32.const 319 + i32.const 330 i32.const 3 call $~lib/builtins/abort unreachable @@ -9320,7 +9709,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4112 + i32.const 5072 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9331,7 +9720,7 @@ if i32.const 0 i32.const 128 - i32.const 321 + i32.const 332 i32.const 3 call $~lib/builtins/abort unreachable @@ -9343,7 +9732,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4192 + i32.const 5152 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9354,7 +9743,7 @@ if i32.const 0 i32.const 128 - i32.const 322 + i32.const 333 i32.const 3 call $~lib/builtins/abort unreachable @@ -9383,7 +9772,7 @@ if i32.const 0 i32.const 128 - i32.const 327 + i32.const 338 i32.const 3 call $~lib/builtins/abort unreachable @@ -9396,7 +9785,7 @@ if i32.const 0 i32.const 128 - i32.const 328 + i32.const 339 i32.const 3 call $~lib/builtins/abort unreachable @@ -9409,7 +9798,7 @@ if i32.const 0 i32.const 128 - i32.const 329 + i32.const 340 i32.const 3 call $~lib/builtins/abort unreachable @@ -9422,7 +9811,7 @@ if i32.const 0 i32.const 128 - i32.const 330 + i32.const 341 i32.const 3 call $~lib/builtins/abort unreachable @@ -9435,7 +9824,7 @@ if i32.const 0 i32.const 128 - i32.const 331 + i32.const 342 i32.const 3 call $~lib/builtins/abort unreachable @@ -9448,7 +9837,7 @@ if i32.const 0 i32.const 128 - i32.const 332 + i32.const 343 i32.const 3 call $~lib/builtins/abort unreachable @@ -9461,7 +9850,7 @@ if i32.const 0 i32.const 128 - i32.const 333 + i32.const 344 i32.const 3 call $~lib/builtins/abort unreachable @@ -9473,7 +9862,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4272 + i32.const 5232 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9484,7 +9873,7 @@ if i32.const 0 i32.const 128 - i32.const 335 + i32.const 346 i32.const 3 call $~lib/builtins/abort unreachable @@ -9496,7 +9885,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 4352 + i32.const 5312 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9507,7 +9896,7 @@ if i32.const 0 i32.const 128 - i32.const 336 + i32.const 347 i32.const 3 call $~lib/builtins/abort unreachable @@ -10142,7 +10531,7 @@ i32.ge_u if i32.const 368 - i32.const 3408 + i32.const 4368 i32.const 92 i32.const 42 call $~lib/builtins/abort @@ -10166,8 +10555,8 @@ local.get $2 i32.eqz if - i32.const 3456 - i32.const 3408 + i32.const 4416 + i32.const 4368 i32.const 96 i32.const 40 call $~lib/builtins/abort From b98515df073a1fe348b58677133c9f8469746b9e Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Tue, 27 Apr 2021 13:13:36 +0300 Subject: [PATCH 4/8] refactor --- std/assembly/date.ts | 17 ++-- tests/compiler/std/date.optimized.wat | 127 +++++++++++++------------- tests/compiler/std/date.untouched.wat | 112 ++++++++++++----------- 3 files changed, 132 insertions(+), 124 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 82c4731e58..4b8b615fc6 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -219,16 +219,17 @@ export class Date { "Jul ", "Aug ", "Sep ", "Oct ", "Nov ", "Dec " ]; - var weekday = this.getUTCDay(); - var month = this.month; - var day = this.day; - var year = abs(this.year).toString().padStart(4, "0"); - if (this.year < 0) year = "-" + year; + 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[weekday]) + - unchecked(months[month - 1]) + - day.toString().padStart(2, "0") + + unchecked(weeks[wd]) + + unchecked(months[mo - 1]) + + da.toString().padStart(2, "0") + " " + year ); } diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index 4423f028c7..844d50c123 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.wat @@ -3,8 +3,8 @@ (type $i32_=>_i32 (func (param i32) (result i32))) (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $none_=>_none (func)) - (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_=>_none (func (param i32))) (type $i64_=>_i32 (func (param i64) (result i32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) @@ -2304,51 +2304,45 @@ i64.add call $~lib/date/Date#setTime ) - (func $~lib/date/Date#getUTCDay (param $0 i32) (result i32) - (local $1 i32) - (local $2 i32) + (func $~lib/date/dayOfWeek (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $0 - i32.load - local.get $0 - i32.load offset=4 - local.tee $3 + local.get $1 i32.const 3 i32.lt_s i32.sub - local.tee $1 + local.tee $0 i32.const 0 i32.ge_s - local.set $2 - local.get $0 - i32.load offset=8 - local.get $3 + local.set $3 + local.get $2 + local.get $1 i32.const 1579 i32.add i32.load8_u - local.get $1 - local.get $1 - local.get $1 + local.get $0 + local.get $0 + local.get $0 i32.const 3 i32.sub - local.get $2 + local.get $3 select i32.const 4 i32.div_s - local.get $1 - local.get $1 + local.get $0 + local.get $0 i32.const 99 i32.sub - local.get $2 + local.get $3 select i32.const 100 i32.div_s i32.sub - local.get $1 - local.get $1 + local.get $0 + local.get $0 i32.const 399 i32.sub - local.get $2 + local.get $3 select i32.const 400 i32.div_s @@ -2367,6 +2361,15 @@ select i32.add ) + (func $~lib/date/Date#getUTCDay (param $0 i32) (result i32) + local.get $0 + i32.load + local.get $0 + i32.load offset=4 + local.get $0 + i32.load offset=8 + call $~lib/date/dayOfWeek + ) (func $~lib/number/I32#toString (param $0 i32) (result i32) (local $1 i32) (local $2 i32) @@ -3850,7 +3853,6 @@ (local $5 i32) (local $6 i32) (local $7 i32) - (local $8 i32) global.get $~lib/memory/__stack_pointer i32.const 44 i32.sub @@ -3879,7 +3881,7 @@ i32.const 4 i32.const 3104 call $~lib/rt/__newBuffer - local.tee $1 + local.tee $2 i32.store global.get $~lib/memory/__stack_pointer i32.const 48 @@ -3889,39 +3891,39 @@ local.tee $3 i32.store offset=4 local.get $0 - call $~lib/date/Date#getUTCDay - local.set $4 + i32.load + local.tee $1 local.get $0 i32.load offset=4 - local.set $5 + local.tee $4 local.get $0 i32.load offset=8 + local.tee $5 + call $~lib/date/dayOfWeek + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $0 - i32.load - local.tee $2 + local.get $1 i32.const 31 i32.shr_s - local.tee $8 - local.get $2 - local.get $8 + local.tee $0 + local.get $0 + local.get $1 i32.add i32.xor call $~lib/number/I32#toString - local.set $2 + local.set $0 global.get $~lib/memory/__stack_pointer - local.get $2 + local.get $0 i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 1872 i32.store offset=12 - local.get $2 + local.get $0 i32.const 4 call $~lib/string/String#padStart - local.tee $2 + local.tee $0 i32.store offset=16 - local.get $0 - i32.load + local.get $1 i32.const 0 i32.lt_s if @@ -3930,72 +3932,73 @@ i32.store offset=8 global.get $~lib/memory/__stack_pointer i32.const 1616 - local.get $2 + local.get $0 call $~lib/string/String.__concat - local.tee $2 + local.tee $0 i32.store offset=16 end global.get $~lib/memory/__stack_pointer - local.get $1 - local.get $4 + local.get $2 + local.get $6 i32.const 2 i32.shl i32.add i32.load - local.tee $0 + local.tee $1 i32.store offset=32 global.get $~lib/memory/__stack_pointer local.get $3 - local.get $5 + local.get $4 i32.const 1 i32.sub i32.const 2 i32.shl i32.add i32.load - local.tee $1 + local.tee $2 i32.store offset=36 - local.get $0 local.get $1 + local.get $2 call $~lib/string/String.__concat - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=24 + local.get $5 call $~lib/number/I32#toString - local.set $1 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $2 i32.store offset=32 global.get $~lib/memory/__stack_pointer i32.const 1872 i32.store offset=40 - local.get $1 + local.get $2 i32.const 2 call $~lib/string/String#padStart - local.set $1 + local.set $2 global.get $~lib/memory/__stack_pointer - local.get $1 + local.get $2 i32.store offset=28 - local.get $0 local.get $1 + local.get $2 call $~lib/string/String.__concat - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=20 global.get $~lib/memory/__stack_pointer i32.const 3616 i32.store offset=12 - local.get $0 + local.get $1 i32.const 3616 call $~lib/string/String.__concat - local.set $0 + local.set $1 global.get $~lib/memory/__stack_pointer - local.get $0 + local.get $1 i32.store offset=8 + local.get $1 local.get $0 - local.get $2 call $~lib/string/String.__concat global.get $~lib/memory/__stack_pointer i32.const 44 diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index 3bb7c1c380..fac95f9951 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -6364,6 +6364,7 @@ (local $7 i32) (local $8 i32) (local $9 i32) + (local $10 i32) global.get $~lib/memory/__stack_pointer i32.const 44 i32.sub @@ -6402,130 +6403,133 @@ local.tee $2 i32.store offset=4 local.get $0 - call $~lib/date/Date#getUTCDay + i32.load offset=4 local.set $3 local.get $0 - i32.load offset=4 + i32.load offset=8 local.set $4 local.get $0 - i32.load offset=8 + i32.load local.set $5 + local.get $5 + local.get $3 + local.get $4 + call $~lib/date/dayOfWeek + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $0 - i32.load - local.tee $6 + local.get $5 + local.tee $7 i32.const 31 i32.shr_s - local.tee $7 - local.get $6 - i32.add + local.tee $8 local.get $7 + i32.add + local.get $8 i32.xor i32.const 10 call $~lib/number/I32#toString - local.set $9 + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $10 i32.store offset=8 - local.get $9 + local.get $10 i32.const 4 i32.const 848 - local.set $9 + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $10 i32.store offset=12 - local.get $9 + local.get $10 call $~lib/string/String#padStart - local.tee $8 + local.tee $9 i32.store offset=16 - local.get $0 - i32.load + local.get $5 i32.const 0 i32.lt_s if global.get $~lib/memory/__stack_pointer i32.const 592 - local.set $9 + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $10 i32.store offset=8 + local.get $10 local.get $9 - local.get $8 call $~lib/string/String.__concat - local.tee $8 + local.tee $9 i32.store offset=16 end local.get $1 - local.get $3 + local.get $6 call $~lib/staticarray/StaticArray<~lib/string/String>#__uget - local.set $9 + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $10 i32.store offset=32 - local.get $9 + local.get $10 local.get $2 - local.get $4 + local.get $3 i32.const 1 i32.sub call $~lib/staticarray/StaticArray<~lib/string/String>#__uget - local.set $9 + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $10 i32.store offset=36 - local.get $9 + local.get $10 call $~lib/string/String.__concat - local.set $9 + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $10 i32.store offset=24 - local.get $9 - local.get $5 + local.get $10 + local.get $4 i32.const 10 call $~lib/number/I32#toString - local.set $9 + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $10 i32.store offset=32 - local.get $9 + local.get $10 i32.const 2 i32.const 848 - local.set $9 + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $10 i32.store offset=40 - local.get $9 + local.get $10 call $~lib/string/String#padStart - local.set $9 + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $10 i32.store offset=28 - local.get $9 + local.get $10 call $~lib/string/String.__concat - local.set $9 + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $10 i32.store offset=20 - local.get $9 + local.get $10 i32.const 4048 - local.set $9 + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $10 i32.store offset=12 - local.get $9 + local.get $10 call $~lib/string/String.__concat - local.set $9 + local.set $10 global.get $~lib/memory/__stack_pointer - local.get $9 + local.get $10 i32.store offset=8 + local.get $10 local.get $9 - local.get $8 call $~lib/string/String.__concat - local.set $9 + local.set $10 global.get $~lib/memory/__stack_pointer i32.const 44 i32.add global.set $~lib/memory/__stack_pointer - local.get $9 + local.get $10 ) (func $~lib/string/String#split (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) From ef3bb687bdc298eb9b76e8b1772c76ba3c5fe391 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Tue, 27 Apr 2021 13:18:51 +0300 Subject: [PATCH 5/8] add TODO --- std/assembly/date.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 4b8b615fc6..6eebc3eec6 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -210,6 +210,8 @@ export class Date { } 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 " ]; From f4a5466e6d0d8002585c65d0f1191e8d67138950 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Tue, 27 Apr 2021 13:35:23 +0300 Subject: [PATCH 6/8] add toString and toTimeString --- std/assembly/date.ts | 14 ++++++++++++++ std/assembly/index.d.ts | 2 ++ 2 files changed, 16 insertions(+) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index 6eebc3eec6..ef5d759d94 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -235,6 +235,20 @@ export class Date { " " + year ); } + + toTimeString(): string { + return ( + this.getUTCHours().toString().padStart(2, "0") + + ":" + + this.getUTCMinutes().toString().padStart(2, "0") + + ":" + + this.getUTCSeconds().toString().padStart(2, "0") + ); + } + + toString(): string { + return this.toDateString() + " " + this.toTimeString(); + } } function epochMillis( diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index 4ccd0e34f7..1e98bf397b 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1756,8 +1756,10 @@ declare class Date { setUTCSeconds(value: i32): void; setUTCMilliseconds(value: i32): void; + toString(): string; toISOString(): string; toDateString(): string; + toTimeString(): string; } /** Class for representing a runtime error. Base class of all errors. */ From 4c3a78ced669206fcd4c21403d9000c39d4d3a25 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Tue, 27 Apr 2021 13:59:50 +0300 Subject: [PATCH 7/8] add comments about time zones --- std/assembly/date.ts | 3 + tests/compiler/std/date.optimized.wat | 417 ++++++++++++++++++-------- tests/compiler/std/date.ts | 9 + tests/compiler/std/date.untouched.wat | 346 ++++++++++++++++----- 4 files changed, 569 insertions(+), 206 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index ef5d759d94..a96a92078d 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -236,7 +236,9 @@ export class Date { ); } + // Note: it uses UTC time instead local (with timezone offset) toTimeString(): string { + // TODO: add timezone return ( this.getUTCHours().toString().padStart(2, "0") + ":" + @@ -246,6 +248,7 @@ export class Date { ); } + // Note: it uses UTC date and time instead local (with timezone offset) toString(): string { return this.toDateString() + " " + this.toTimeString(); } diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat index 844d50c123..3137d7d368 100644 --- a/tests/compiler/std/date.optimized.wat +++ b/tests/compiler/std/date.optimized.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_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) @@ -25,7 +25,7 @@ (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 21388)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 21484)) (global $~started (mut i32) (i32.const 0)) (memory $0 1) (data (i32.const 1036) ",") @@ -136,43 +136,47 @@ (data (i32.const 3756) "<") (data (i32.const 3768) "\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 3820) ",") - (data (i32.const 3832) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") + (data (i32.const 3832) "\01\00\00\00\10\00\00\000\000\00:\000\000\00:\000\000") (data (i32.const 3868) ",") - (data (i32.const 3880) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 3880) "\01\00\00\00\10\00\00\002\003\00:\005\009\00:\005\009") (data (i32.const 3916) ",") - (data (i32.const 3928) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 3964) "|") - (data (i32.const 3976) "\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 4092) ",") - (data (i32.const 4104) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") - (data (i32.const 4140) ",") - (data (i32.const 4152) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") - (data (i32.const 4188) "<") - (data (i32.const 4200) "\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 4252) "L") - (data (i32.const 4264) "\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 4332) "L") - (data (i32.const 4344) "\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 4412) "\1c") - (data (i32.const 4424) "\01\00\00\00\08\00\00\000\000\000\000") - (data (i32.const 4444) "\1c") - (data (i32.const 4456) "\01\00\00\00\08\00\00\000\000\000\001") - (data (i32.const 4476) "\1c") - (data (i32.const 4488) "\01\00\00\00\08\00\00\001\009\007\006") - (data (i32.const 4508) ",") - (data (i32.const 4520) "\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002") - (data (i32.const 4556) "<") - (data (i32.const 4568) "\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 4620) "L") - (data (i32.const 4632) "\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 4700) "L") - (data (i32.const 4712) "\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 4780) "L") - (data (i32.const 4792) "\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 4860) "L") - (data (i32.const 4872) "\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 4944) "\07\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 4972) " \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 3928) "\01\00\00\00\14\00\00\001\009\007\006\00-\000\002\00-\000\002") + (data (i32.const 3964) ",") + (data (i32.const 3976) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 4012) ",") + (data (i32.const 4024) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 4060) "|") + (data (i32.const 4072) "\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 4188) ",") + (data (i32.const 4200) "\01\00\00\00\10\00\00\001\009\007\006\00-\002\00-\002") + (data (i32.const 4236) ",") + (data (i32.const 4248) "\01\00\00\00\14\00\00\002\003\004\005\00-\001\001\00-\000\004") + (data (i32.const 4284) "<") + (data (i32.const 4296) "\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 4348) "L") + (data (i32.const 4360) "\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 4428) "L") + (data (i32.const 4440) "\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 4508) "\1c") + (data (i32.const 4520) "\01\00\00\00\08\00\00\000\000\000\000") + (data (i32.const 4540) "\1c") + (data (i32.const 4552) "\01\00\00\00\08\00\00\000\000\000\001") + (data (i32.const 4572) "\1c") + (data (i32.const 4584) "\01\00\00\00\08\00\00\001\009\007\006") + (data (i32.const 4604) ",") + (data (i32.const 4616) "\01\00\00\00\0e\00\00\001\009\007\006\00-\000\002") + (data (i32.const 4652) "<") + (data (i32.const 4664) "\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 4716) "L") + (data (i32.const 4728) "\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 4796) "L") + (data (i32.const 4808) "\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 4876) "L") + (data (i32.const 4888) "\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 4956) "L") + (data (i32.const 4968) "\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 5040) "\07\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 5068) " \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/daysSinceEpoch (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -374,10 +378,10 @@ (local $1 i32) i32.const 1392 call $~lib/rt/itcms/__visit - i32.const 3888 - call $~lib/rt/itcms/__visit i32.const 3984 call $~lib/rt/itcms/__visit + i32.const 4080 + call $~lib/rt/itcms/__visit i32.const 1200 call $~lib/rt/itcms/__visit i32.const 1056 @@ -494,7 +498,7 @@ if i32.const 0 local.get $0 - i32.const 21388 + i32.const 21484 i32.lt_u local.get $0 i32.load offset=8 @@ -540,7 +544,7 @@ i32.const 1 else local.get $1 - i32.const 4944 + i32.const 5040 i32.load i32.gt_u if @@ -554,7 +558,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 4948 + i32.const 5044 i32.add i32.load i32.const 32 @@ -1128,10 +1132,10 @@ if unreachable end - i32.const 21392 + i32.const 21488 i32.const 0 i32.store - i32.const 22960 + i32.const 23056 i32.const 0 i32.store loop $for-loop|0 @@ -1142,7 +1146,7 @@ local.get $1 i32.const 2 i32.shl - i32.const 21392 + i32.const 21488 i32.add i32.const 0 i32.store offset=4 @@ -1160,7 +1164,7 @@ i32.add i32.const 2 i32.shl - i32.const 21392 + i32.const 21488 i32.add i32.const 0 i32.store offset=96 @@ -1178,13 +1182,13 @@ br $for-loop|0 end end - i32.const 21392 - i32.const 22964 + i32.const 21488 + i32.const 23060 memory.size i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 21392 + i32.const 21488 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -1263,7 +1267,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 21388 + i32.const 21484 i32.lt_u if local.get $0 @@ -1353,7 +1357,7 @@ unreachable end local.get $0 - i32.const 21388 + i32.const 21484 i32.lt_u if local.get $0 @@ -1376,7 +1380,7 @@ i32.const 4 i32.add local.tee $1 - i32.const 21388 + i32.const 21484 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -3027,8 +3031,8 @@ i32.const 268435455 i32.gt_u if - i32.const 3888 - i32.const 3936 + i32.const 3984 + i32.const 4032 i32.const 14 i32.const 48 call $~lib/builtins/abort @@ -3501,11 +3505,11 @@ ) (func $~stack_check global.get $~lib/memory/__stack_pointer - i32.const 5004 + i32.const 5100 i32.lt_s if - i32.const 21408 - i32.const 21456 + i32.const 21504 + i32.const 21552 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -4005,6 +4009,115 @@ i32.add global.set $~lib/memory/__stack_pointer ) + (func $~lib/date/Date#toTimeString (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=16 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=24 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=32 + local.get $0 + call $~lib/date/Date#getUTCHours + call $~lib/number/I32#toString + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=32 + global.get $~lib/memory/__stack_pointer + i32.const 1872 + i32.store offset=36 + local.get $1 + i32.const 2 + call $~lib/string/String#padStart + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + i32.const 2064 + i32.store offset=28 + local.get $1 + i32.const 2064 + call $~lib/string/String.__concat + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=16 + local.get $0 + call $~lib/date/Date#getUTCMinutes + call $~lib/number/I32#toString + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=24 + global.get $~lib/memory/__stack_pointer + i32.const 1872 + i32.store offset=32 + local.get $2 + i32.const 2 + call $~lib/string/String#padStart + local.set $2 + global.get $~lib/memory/__stack_pointer + local.get $2 + i32.store offset=20 + local.get $1 + local.get $2 + call $~lib/string/String.__concat + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + global.get $~lib/memory/__stack_pointer + i32.const 2064 + i32.store offset=12 + local.get $1 + i32.const 2064 + call $~lib/string/String.__concat + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store + local.get $0 + call $~lib/date/Date#getUTCSeconds + 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=16 + local.get $0 + i32.const 2 + call $~lib/string/String#padStart + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + local.get $1 + local.get $0 + call $~lib/string/String.__concat + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.add + global.set $~lib/memory/__stack_pointer + ) (func $~lib/string/String#split (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -4689,7 +4802,7 @@ memory.size i32.const 16 i32.shl - i32.const 21388 + i32.const 21484 i32.sub i32.const 1 i32.shr_u @@ -6176,10 +6289,62 @@ unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3840 + i64.const -61536067200000 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toTimeString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer i32.const 3840 + i32.store offset=8 + local.get $0 + i32.const 3840 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 264 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i64.const 253402300799999 + call $~lib/date/Date#constructor + local.tee $0 + i32.store + local.get $0 + call $~lib/date/Date#toTimeString + local.set $0 + global.get $~lib/memory/__stack_pointer + local.get $0 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3888 + i32.store offset=8 + local.get $0 + i32.const 3888 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 1152 + i32.const 267 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 3936 + i32.store offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 3936 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -6190,16 +6355,16 @@ if i32.const 0 i32.const 1152 - i32.const 265 + i32.const 274 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4112 + i32.const 4208 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 4112 + i32.const 4208 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -6210,16 +6375,16 @@ if i32.const 0 i32.const 1152 - i32.const 267 + i32.const 276 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4160 + i32.const 4256 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 4160 + i32.const 4256 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -6230,16 +6395,16 @@ if i32.const 0 i32.const 1152 - i32.const 269 + i32.const 278 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4208 + i32.const 4304 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 4208 + i32.const 4304 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -6250,16 +6415,16 @@ if i32.const 0 i32.const 1152 - i32.const 273 + i32.const 282 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4272 + i32.const 4368 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 4272 + i32.const 4368 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -6270,16 +6435,16 @@ if i32.const 0 i32.const 1152 - i32.const 277 + i32.const 286 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4352 + i32.const 4448 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 4352 + i32.const 4448 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -6290,16 +6455,16 @@ if i32.const 0 i32.const 1152 - i32.const 281 + i32.const 290 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4432 + i32.const 4528 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 4432 + i32.const 4528 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -6310,16 +6475,16 @@ if i32.const 0 i32.const 1152 - i32.const 284 + i32.const 293 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4464 + i32.const 4560 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 4464 + i32.const 4560 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -6330,16 +6495,16 @@ if i32.const 0 i32.const 1152 - i32.const 287 + i32.const 296 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4496 + i32.const 4592 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 4496 + i32.const 4592 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -6350,16 +6515,16 @@ if i32.const 0 i32.const 1152 - i32.const 290 + i32.const 299 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4528 + i32.const 4624 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 4528 + i32.const 4624 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -6370,16 +6535,16 @@ if i32.const 0 i32.const 1152 - i32.const 293 + i32.const 302 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 3840 + i32.const 3936 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 3840 + i32.const 3936 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -6390,16 +6555,16 @@ if i32.const 0 i32.const 1152 - i32.const 296 + i32.const 305 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4576 + i32.const 4672 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 4576 + i32.const 4672 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -6410,16 +6575,16 @@ if i32.const 0 i32.const 1152 - i32.const 299 + i32.const 308 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4208 + i32.const 4304 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 4208 + i32.const 4304 call $~lib/date/Date.fromString local.tee $0 i32.store @@ -6430,7 +6595,7 @@ if i32.const 0 i32.const 1152 - i32.const 302 + i32.const 311 i32.const 3 call $~lib/builtins/abort unreachable @@ -6452,7 +6617,7 @@ if i32.const 0 i32.const 1152 - i32.const 320 + i32.const 329 i32.const 3 call $~lib/builtins/abort unreachable @@ -6464,7 +6629,7 @@ if i32.const 0 i32.const 1152 - i32.const 321 + i32.const 330 i32.const 3 call $~lib/builtins/abort unreachable @@ -6476,7 +6641,7 @@ if i32.const 0 i32.const 1152 - i32.const 323 + i32.const 332 i32.const 3 call $~lib/builtins/abort unreachable @@ -6488,7 +6653,7 @@ if i32.const 0 i32.const 1152 - i32.const 324 + i32.const 333 i32.const 3 call $~lib/builtins/abort unreachable @@ -6500,7 +6665,7 @@ if i32.const 0 i32.const 1152 - i32.const 326 + i32.const 335 i32.const 3 call $~lib/builtins/abort unreachable @@ -6512,7 +6677,7 @@ if i32.const 0 i32.const 1152 - i32.const 327 + i32.const 336 i32.const 3 call $~lib/builtins/abort unreachable @@ -6524,7 +6689,7 @@ if i32.const 0 i32.const 1152 - i32.const 329 + i32.const 338 i32.const 3 call $~lib/builtins/abort unreachable @@ -6536,7 +6701,7 @@ if i32.const 0 i32.const 1152 - i32.const 330 + i32.const 339 i32.const 3 call $~lib/builtins/abort unreachable @@ -6548,16 +6713,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 4640 + i32.const 4736 i32.store offset=8 local.get $0 - i32.const 4640 + i32.const 4736 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 332 + i32.const 341 i32.const 3 call $~lib/builtins/abort unreachable @@ -6569,16 +6734,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 4720 + i32.const 4816 i32.store offset=8 local.get $0 - i32.const 4720 + i32.const 4816 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 333 + i32.const 342 i32.const 3 call $~lib/builtins/abort unreachable @@ -6600,7 +6765,7 @@ if i32.const 0 i32.const 1152 - i32.const 338 + i32.const 347 i32.const 3 call $~lib/builtins/abort unreachable @@ -6612,7 +6777,7 @@ if i32.const 0 i32.const 1152 - i32.const 339 + i32.const 348 i32.const 3 call $~lib/builtins/abort unreachable @@ -6624,7 +6789,7 @@ if i32.const 0 i32.const 1152 - i32.const 340 + i32.const 349 i32.const 3 call $~lib/builtins/abort unreachable @@ -6634,7 +6799,7 @@ if i32.const 0 i32.const 1152 - i32.const 341 + i32.const 350 i32.const 3 call $~lib/builtins/abort unreachable @@ -6644,7 +6809,7 @@ if i32.const 0 i32.const 1152 - i32.const 342 + i32.const 351 i32.const 3 call $~lib/builtins/abort unreachable @@ -6654,7 +6819,7 @@ if i32.const 0 i32.const 1152 - i32.const 343 + i32.const 352 i32.const 3 call $~lib/builtins/abort unreachable @@ -6666,7 +6831,7 @@ if i32.const 0 i32.const 1152 - i32.const 344 + i32.const 353 i32.const 3 call $~lib/builtins/abort unreachable @@ -6678,16 +6843,16 @@ local.get $2 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 4800 + i32.const 4896 i32.store offset=8 local.get $2 - i32.const 4800 + i32.const 4896 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 346 + i32.const 355 i32.const 3 call $~lib/builtins/abort unreachable @@ -6699,16 +6864,16 @@ local.get $0 i32.store offset=4 global.get $~lib/memory/__stack_pointer - i32.const 4880 + i32.const 4976 i32.store offset=8 local.get $0 - i32.const 4880 + i32.const 4976 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 1152 - i32.const 347 + i32.const 356 i32.const 3 call $~lib/builtins/abort unreachable @@ -7069,7 +7234,7 @@ i32.ge_u if i32.const 1392 - i32.const 3936 + i32.const 4032 i32.const 92 i32.const 42 call $~lib/builtins/abort @@ -7088,8 +7253,8 @@ local.get $0 i32.eqz if - i32.const 3984 - i32.const 3936 + i32.const 4080 + i32.const 4032 i32.const 96 i32.const 40 call $~lib/builtins/abort diff --git a/tests/compiler/std/date.ts b/tests/compiler/std/date.ts index e200029b47..cd115a8924 100644 --- a/tests/compiler/std/date.ts +++ b/tests/compiler/std/date.ts @@ -258,6 +258,15 @@ assert(date.toDateString() == "Thu Jul 01 -0001"); } +// Date#toTimeString /////////////////////////////////////////////////////////////////////////////// +{ + let date = new Date(-61536067200000); + assert(date.toTimeString() == "00:00:00"); // use UTC time instead local + + date = new Date(253402300799999); + assert(date.toTimeString() == "23:59:59"); // use UTC time instead local +} + // Date#fromString ///////////////////////////////////////////////////////////////////////////////// { // supports year / month / day diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat index fac95f9951..236217fcea 100644 --- a/tests/compiler/std/date.untouched.wat +++ b/tests/compiler/std/date.untouched.wat @@ -35,10 +35,10 @@ (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) (global $~lib/ASC_SHRINK_LEVEL i32 (i32.const 0)) (global $~lib/builtins/i32.MAX_VALUE i32 (i32.const 2147483647)) - (global $~lib/rt/__rtti_base i32 (i32.const 5376)) - (global $~lib/memory/__data_end i32 (i32.const 5436)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 21820)) - (global $~lib/memory/__heap_base i32 (i32.const 21820)) + (global $~lib/rt/__rtti_base i32 (i32.const 5472)) + (global $~lib/memory/__data_end i32 (i32.const 5532)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 21916)) + (global $~lib/memory/__heap_base i32 (i32.const 21916)) (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") @@ -100,25 +100,27 @@ (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\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 4300) ",\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 4348) ",\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 4396) "|\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 4524) ",\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 4572) ",\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 4620) "<\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 4684) "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 4764) "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 4844) "\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 4876) "\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 4908) "\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 4940) ",\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 4988) "<\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 5052) "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 5132) "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 5212) "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 5292) "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 5376) "\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 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) ",\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 4396) ",\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 4444) ",\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 4492) "|\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 4620) ",\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 4668) ",\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 4716) "<\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 4780) "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 4860) "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 4940) "\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 4972) "\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 5004) "\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 5036) ",\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 5084) "<\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 5148) "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 5228) "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 5308) "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 5388) "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 5472) "\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 funcref) (export "memory" (memory $0)) (export "_start" (func $~start)) @@ -5277,8 +5279,8 @@ i32.shr_u i32.gt_u if - i32.const 4320 - i32.const 4368 + i32.const 4416 + i32.const 4464 i32.const 14 i32.const 48 call $~lib/builtins/abort @@ -5761,10 +5763,10 @@ i32.const 368 local.get $0 call $~lib/rt/itcms/__visit - i32.const 4320 + i32.const 4416 local.get $0 call $~lib/rt/itcms/__visit - i32.const 4416 + i32.const 4512 local.get $0 call $~lib/rt/itcms/__visit i32.const 176 @@ -5956,8 +5958,8 @@ global.get $~lib/memory/__data_end i32.lt_s if - i32.const 21840 - i32.const 21888 + i32.const 21936 + i32.const 21984 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -6531,6 +6533,132 @@ global.set $~lib/memory/__stack_pointer local.get $10 ) + (func $~lib/date/Date#toTimeString (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=8 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=16 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=24 + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store offset=32 + local.get $0 + call $~lib/date/Date#getUTCHours + i32.const 10 + call $~lib/number/I32#toString + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=32 + local.get $1 + i32.const 2 + i32.const 848 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=36 + local.get $1 + 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 + 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 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=24 + local.get $1 + i32.const 2 + i32.const 848 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=32 + local.get $1 + 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 + 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 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=8 + local.get $1 + i32.const 2 + i32.const 848 + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=16 + local.get $1 + call $~lib/string/String#padStart + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store offset=4 + local.get $1 + call $~lib/string/String.__concat + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 40 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 + ) (func $~lib/string/String#split (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) @@ -9292,10 +9420,68 @@ unreachable end global.get $~lib/memory/__stack_pointer + i32.const 0 + i64.const -61536067200000 + call $~lib/date/Date#constructor + local.tee $1 + i32.store + local.get $1 + call $~lib/date/Date#toTimeString + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 i32.const 4272 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 + i32.store offset=8 + local.get $8 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 264 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i64.const 253402300799999 + call $~lib/date/Date#constructor + local.tee $1 + i32.store + local.get $1 + call $~lib/date/Date#toTimeString + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=4 + local.get $8 + i32.const 4320 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 + i32.store offset=8 + local.get $8 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 128 + i32.const 267 + i32.const 3 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 4368 + local.set $8 + global.get $~lib/memory/__stack_pointer + local.get $8 i32.store offset=4 local.get $8 call $~lib/date/Date.fromString @@ -9309,13 +9495,13 @@ if i32.const 0 i32.const 128 - i32.const 265 + i32.const 274 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4544 + i32.const 4640 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9332,13 +9518,13 @@ if i32.const 0 i32.const 128 - i32.const 267 + i32.const 276 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4592 + i32.const 4688 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9355,13 +9541,13 @@ if i32.const 0 i32.const 128 - i32.const 269 + i32.const 278 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4640 + i32.const 4736 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9378,13 +9564,13 @@ if i32.const 0 i32.const 128 - i32.const 273 + i32.const 282 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4704 + i32.const 4800 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9401,13 +9587,13 @@ if i32.const 0 i32.const 128 - i32.const 277 + i32.const 286 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4784 + i32.const 4880 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9424,13 +9610,13 @@ if i32.const 0 i32.const 128 - i32.const 281 + i32.const 290 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4864 + i32.const 4960 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9447,13 +9633,13 @@ if i32.const 0 i32.const 128 - i32.const 284 + i32.const 293 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4896 + i32.const 4992 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9470,13 +9656,13 @@ if i32.const 0 i32.const 128 - i32.const 287 + i32.const 296 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4928 + i32.const 5024 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9493,13 +9679,13 @@ if i32.const 0 i32.const 128 - i32.const 290 + i32.const 299 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4960 + i32.const 5056 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9516,13 +9702,13 @@ if i32.const 0 i32.const 128 - i32.const 293 + i32.const 302 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4272 + i32.const 4368 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9539,13 +9725,13 @@ if i32.const 0 i32.const 128 - i32.const 296 + i32.const 305 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 5008 + i32.const 5104 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9562,13 +9748,13 @@ if i32.const 0 i32.const 128 - i32.const 299 + i32.const 308 i32.const 3 call $~lib/builtins/abort unreachable end global.get $~lib/memory/__stack_pointer - i32.const 4640 + i32.const 4736 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9585,7 +9771,7 @@ if i32.const 0 i32.const 128 - i32.const 302 + i32.const 311 i32.const 3 call $~lib/builtins/abort unreachable @@ -9610,7 +9796,7 @@ if i32.const 0 i32.const 128 - i32.const 320 + i32.const 329 i32.const 3 call $~lib/builtins/abort unreachable @@ -9623,7 +9809,7 @@ if i32.const 0 i32.const 128 - i32.const 321 + i32.const 330 i32.const 3 call $~lib/builtins/abort unreachable @@ -9636,7 +9822,7 @@ if i32.const 0 i32.const 128 - i32.const 323 + i32.const 332 i32.const 3 call $~lib/builtins/abort unreachable @@ -9649,7 +9835,7 @@ if i32.const 0 i32.const 128 - i32.const 324 + i32.const 333 i32.const 3 call $~lib/builtins/abort unreachable @@ -9662,7 +9848,7 @@ if i32.const 0 i32.const 128 - i32.const 326 + i32.const 335 i32.const 3 call $~lib/builtins/abort unreachable @@ -9675,7 +9861,7 @@ if i32.const 0 i32.const 128 - i32.const 327 + i32.const 336 i32.const 3 call $~lib/builtins/abort unreachable @@ -9688,7 +9874,7 @@ if i32.const 0 i32.const 128 - i32.const 329 + i32.const 338 i32.const 3 call $~lib/builtins/abort unreachable @@ -9701,7 +9887,7 @@ if i32.const 0 i32.const 128 - i32.const 330 + i32.const 339 i32.const 3 call $~lib/builtins/abort unreachable @@ -9713,7 +9899,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 5072 + i32.const 5168 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9724,7 +9910,7 @@ if i32.const 0 i32.const 128 - i32.const 332 + i32.const 341 i32.const 3 call $~lib/builtins/abort unreachable @@ -9736,7 +9922,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 5152 + i32.const 5248 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9747,7 +9933,7 @@ if i32.const 0 i32.const 128 - i32.const 333 + i32.const 342 i32.const 3 call $~lib/builtins/abort unreachable @@ -9776,7 +9962,7 @@ if i32.const 0 i32.const 128 - i32.const 338 + i32.const 347 i32.const 3 call $~lib/builtins/abort unreachable @@ -9789,7 +9975,7 @@ if i32.const 0 i32.const 128 - i32.const 339 + i32.const 348 i32.const 3 call $~lib/builtins/abort unreachable @@ -9802,7 +9988,7 @@ if i32.const 0 i32.const 128 - i32.const 340 + i32.const 349 i32.const 3 call $~lib/builtins/abort unreachable @@ -9815,7 +10001,7 @@ if i32.const 0 i32.const 128 - i32.const 341 + i32.const 350 i32.const 3 call $~lib/builtins/abort unreachable @@ -9828,7 +10014,7 @@ if i32.const 0 i32.const 128 - i32.const 342 + i32.const 351 i32.const 3 call $~lib/builtins/abort unreachable @@ -9841,7 +10027,7 @@ if i32.const 0 i32.const 128 - i32.const 343 + i32.const 352 i32.const 3 call $~lib/builtins/abort unreachable @@ -9854,7 +10040,7 @@ if i32.const 0 i32.const 128 - i32.const 344 + i32.const 353 i32.const 3 call $~lib/builtins/abort unreachable @@ -9866,7 +10052,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 5232 + i32.const 5328 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9877,7 +10063,7 @@ if i32.const 0 i32.const 128 - i32.const 346 + i32.const 355 i32.const 3 call $~lib/builtins/abort unreachable @@ -9889,7 +10075,7 @@ local.get $8 i32.store offset=4 local.get $8 - i32.const 5312 + i32.const 5408 local.set $8 global.get $~lib/memory/__stack_pointer local.get $8 @@ -9900,7 +10086,7 @@ if i32.const 0 i32.const 128 - i32.const 347 + i32.const 356 i32.const 3 call $~lib/builtins/abort unreachable @@ -10535,7 +10721,7 @@ i32.ge_u if i32.const 368 - i32.const 4368 + i32.const 4464 i32.const 92 i32.const 42 call $~lib/builtins/abort @@ -10559,8 +10745,8 @@ local.get $2 i32.eqz if - i32.const 4416 - i32.const 4368 + i32.const 4512 + i32.const 4464 i32.const 96 i32.const 40 call $~lib/builtins/abort From 297ab44d95dd21e2c3c8f5d2b23fbf31d7d6885a Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Tue, 27 Apr 2021 21:51:04 +0300 Subject: [PATCH 8/8] better comments --- std/assembly/date.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/std/assembly/date.ts b/std/assembly/date.ts index a96a92078d..15ae17ae3d 100644 --- a/std/assembly/date.ts +++ b/std/assembly/date.ts @@ -236,7 +236,7 @@ export class Date { ); } - // Note: it uses UTC time instead local (with timezone offset) + // Note: it uses UTC time instead local time (without timezone offset) toTimeString(): string { // TODO: add timezone return ( @@ -248,7 +248,7 @@ export class Date { ); } - // Note: it uses UTC date and time instead local (with timezone offset) + // Note: it uses UTC datetime instead local datetime (without timezone offset) toString(): string { return this.toDateString() + " " + this.toTimeString(); }