From 264bf0b69c713a105bf1e24c2ce73f84cf3aaadb Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 4 Aug 2022 14:01:12 +0300 Subject: [PATCH 1/7] init --- std/assembly/index.d.ts | 3 +- std/assembly/staticarray.ts | 75 +++++++++--------- tests/compiler/std/staticarray.debug.wat | 89 ++++++++++++---------- tests/compiler/std/staticarray.release.wat | 69 +++++++++-------- tests/compiler/std/staticarray.ts | 16 ++-- 5 files changed, 132 insertions(+), 120 deletions(-) diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index 07877315f1..7655b86886 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1775,6 +1775,7 @@ declare class StaticArray { [key: number]: T; static fromArray(source: Array): StaticArray; static concat(source: StaticArray, other: StaticArray): StaticArray; + /** @deprecated */ static slice(source: StaticArray, start?: i32, end?: i32): StaticArray; readonly length: i32; constructor(length?: i32); @@ -1794,7 +1795,7 @@ declare class StaticArray { every(callbackfn: (value: T, index: i32, array: StaticArray) => bool): bool; some(callbackfn: (value: T, index: i32, array: StaticArray) => bool): bool; concat(items: Array): Array; - slice(from?: i32, to?: i32): Array; + slice = Array>(from?: i32, to?: i32): U; sort(comparator?: (a: T, b: T) => i32): this; join(separator?: string): string; reverse(): this; diff --git a/std/assembly/staticarray.ts b/std/assembly/staticarray.ts index b8029ea923..1eb3b88cfb 100644 --- a/std/assembly/staticarray.ts +++ b/std/assembly/staticarray.ts @@ -4,7 +4,7 @@ import { OBJECT, BLOCK_MAXSIZE, TOTAL_OVERHEAD } from "./rt/common"; import { Runtime } from "shared/runtime"; import { COMPARATOR, SORT } from "./util/sort"; import { REVERSE } from "./util/bytes"; -import { idof } from "./builtins"; +import { idof, isArray } from "./builtins"; import { Array } from "./array"; import { E_INDEXOUTOFRANGE, E_INVALIDLENGTH, E_HOLEYARRAY } from "./util/error"; import { joinBooleanArray, joinIntegerArray, joinFloatArray, joinStringArray, joinReferenceArray } from "./util/string"; @@ -65,26 +65,9 @@ export class StaticArray { return out; } + /** @deprecated Please use source.slice> instead. */ static slice(source: StaticArray, start: i32 = 0, end: i32 = i32.MAX_VALUE): StaticArray { - var length = source.length; - start = start < 0 ? max(start + length, 0) : min(start, length); - end = end < 0 ? max(end + length, 0) : min(end , length); - length = max(end - start, 0); - var sliceSize = length << alignof(); - var slice = changetype>(__new(sliceSize, idof>())); - var sourcePtr = changetype(source) + (start << alignof()); - if (isManaged()) { - let off: usize = 0; - while (off < sliceSize) { - let ref = load(sourcePtr + off); - store(changetype(slice) + off, ref); - __link(changetype(slice), ref, true); - off += sizeof(); - } - } else { - memory.copy(changetype(slice), sourcePtr, sliceSize); - } - return slice; + return source.slice>(start, end); } constructor(length: i32) { @@ -284,27 +267,49 @@ export class StaticArray { return out; } - slice(start: i32 = 0, end: i32 = i32.MAX_VALUE): Array { + slice = Array>(start: i32 = 0, end: i32 = i32.MAX_VALUE): U { var length = this.length; start = start < 0 ? max(start + length, 0) : min(start, length); - end = end < 0 ? max(end + length, 0) : min(end , length); + end = end < 0 ? max(end + length, 0) : min(end, length); length = max(end - start, 0); - var slice = changetype>(__newArray(length, alignof(), idof>())); - var sliceBase = slice.dataStart; - var thisBase = changetype(this) + (start << alignof()); - if (isManaged()) { - let off = 0; - let end = length << alignof(); - while (off < end) { - let ref = load(thisBase + off); - store(sliceBase + off, ref); - __link(changetype(slice), ref, true); - off += sizeof(); + + var sourceBase = changetype(this) + (start << alignof()); + var size = length << alignof(); + let res!: U; + + if (isArray()) { + // return Array + res = changetype(__newArray(length, alignof(), idof>())); + let targetBase = changetype>(res).dataStart; + if (isManaged()) { + let off: usize = 0; + while (off < size) { + let ref = load(sourceBase + off); + store(targetBase + off, ref); + __link(changetype(res), ref, true); + off += sizeof(); + } + } else { + memory.copy(targetBase, sourceBase, size); } } else { - memory.copy(sliceBase, thisBase, length << alignof()); + assert(res instanceof StaticArray); + // return StaticArray + res = changetype(__new(size, idof>())); + let targetBase = changetype(res); + if (isManaged()) { + let off: usize = 0; + while (off < size) { + let ref = load(sourceBase + off); + store(targetBase + off, ref); + __link(targetBase, ref, true); + off += sizeof(); + } + } else { + memory.copy(targetBase, sourceBase, size); + } } - return slice; + return res; } findIndex(fn: (value: T, index: i32, array: StaticArray) => bool): i32 { diff --git a/tests/compiler/std/staticarray.debug.wat b/tests/compiler/std/staticarray.debug.wat index 78be5d76e9..22844fb737 100644 --- a/tests/compiler/std/staticarray.debug.wat +++ b/tests/compiler/std/staticarray.debug.wat @@ -133,7 +133,7 @@ if i32.const 64 i32.const 128 - i32.const 118 + i32.const 101 i32.const 41 call $~lib/builtins/abort unreachable @@ -168,7 +168,7 @@ if i32.const 64 i32.const 128 - i32.const 133 + i32.const 116 i32.const 41 call $~lib/builtins/abort unreachable @@ -5832,7 +5832,7 @@ local.get $1 i32.const 0 global.get $~lib/builtins/i32.MAX_VALUE - call $~lib/staticarray/StaticArray.slice<~lib/string/String> + call $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> local.tee $0 i32.store offset=4 local.get $0 @@ -5896,7 +5896,7 @@ local.get $1 i32.const 1 i32.const 3 - call $~lib/staticarray/StaticArray.slice<~lib/string/String> + call $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> local.tee $0 i32.store offset=4 local.get $0 @@ -5964,7 +5964,7 @@ local.get $1 i32.const 1 global.get $~lib/builtins/i32.MAX_VALUE - call $~lib/staticarray/StaticArray.slice<~lib/string/String> + call $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> local.tee $0 i32.store offset=4 local.get $0 @@ -5987,7 +5987,7 @@ local.get $1 i32.const 0 i32.const 50 - call $~lib/staticarray/StaticArray.slice<~lib/string/String> + call $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> local.tee $0 i32.store offset=4 local.get $0 @@ -6008,7 +6008,7 @@ local.get $1 i32.const 100 global.get $~lib/builtins/i32.MAX_VALUE - call $~lib/staticarray/StaticArray.slice<~lib/string/String> + call $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> local.tee $0 i32.store offset=4 local.get $0 @@ -6028,7 +6028,7 @@ local.get $1 i32.const -1 global.get $~lib/builtins/i32.MAX_VALUE - call $~lib/staticarray/StaticArray.slice<~lib/string/String> + call $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> local.tee $0 i32.store offset=4 local.get $0 @@ -6072,7 +6072,7 @@ local.get $1 i32.const -2 i32.const -2 - call $~lib/staticarray/StaticArray.slice<~lib/string/String> + call $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> local.tee $0 i32.store offset=4 local.get $0 @@ -6092,7 +6092,7 @@ local.get $1 i32.const 2 i32.const -2 - call $~lib/staticarray/StaticArray.slice<~lib/string/String> + call $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> local.tee $0 i32.store offset=4 local.get $0 @@ -7295,7 +7295,7 @@ if i32.const 656 i32.const 128 - i32.const 91 + i32.const 74 i32.const 60 call $~lib/builtins/abort unreachable @@ -7490,7 +7490,7 @@ global.set $~lib/memory/__stack_pointer local.get $8 ) - (func $~lib/staticarray/StaticArray.slice<~lib/string/String> (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -7499,6 +7499,7 @@ (local $8 i32) (local $9 i32) (local $10 i32) + (local $11 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -7571,61 +7572,67 @@ i32.gt_s select local.set $3 - local.get $3 + local.get $0 + local.get $1 i32.const 2 i32.shl + i32.add local.set $6 + local.get $3 + i32.const 2 + i32.shl + local.set $7 + i32.const 0 + drop + i32.const 1 + drop global.get $~lib/memory/__stack_pointer - local.get $6 + local.get $7 i32.const 8 call $~lib/rt/itcms/__new - local.tee $7 + local.tee $4 i32.store - local.get $0 - local.get $1 - i32.const 2 - i32.shl - i32.add - local.set $8 + local.get $4 + local.set $5 i32.const 1 drop i32.const 0 - local.set $4 + local.set $8 loop $while-continue|0 - local.get $4 - local.get $6 + local.get $8 + local.get $7 i32.lt_u - local.set $5 - local.get $5 + local.set $9 + local.get $9 if + local.get $6 local.get $8 - local.get $4 i32.add i32.load - local.set $9 - local.get $7 - local.get $4 + local.set $10 + local.get $5 + local.get $8 i32.add - local.get $9 + local.get $10 i32.store - local.get $7 - local.get $9 + local.get $5 + local.get $10 i32.const 1 call $~lib/rt/itcms/__link - local.get $4 + local.get $8 i32.const 4 i32.add - local.set $4 + local.set $8 br $while-continue|0 end end - local.get $7 - local.set $10 + local.get $4 + local.set $11 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $10 + local.get $11 ) (func $~lib/staticarray/StaticArray<~lib/string/String>#__get (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -7645,7 +7652,7 @@ if i32.const 64 i32.const 128 - i32.const 118 + i32.const 101 i32.const 41 call $~lib/builtins/abort unreachable @@ -7669,7 +7676,7 @@ if i32.const 1152 i32.const 128 - i32.const 122 + i32.const 105 i32.const 40 call $~lib/builtins/abort unreachable @@ -7722,7 +7729,7 @@ if i32.const 656 i32.const 128 - i32.const 261 + i32.const 244 i32.const 60 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/staticarray.release.wat b/tests/compiler/std/staticarray.release.wat index 4923e6b180..4151cdab2e 100644 --- a/tests/compiler/std/staticarray.release.wat +++ b/tests/compiler/std/staticarray.release.wat @@ -173,7 +173,7 @@ if i32.const 1088 i32.const 1152 - i32.const 118 + i32.const 101 i32.const 41 call $~lib/builtins/abort unreachable @@ -197,7 +197,7 @@ if i32.const 1088 i32.const 1152 - i32.const 133 + i32.const 116 i32.const 41 call $~lib/builtins/abort unreachable @@ -3510,7 +3510,7 @@ local.get $2 i32.const 0 i32.const 2147483647 - call $~lib/staticarray/StaticArray.slice<~lib/string/String> + call $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> local.tee $0 i32.store offset=4 local.get $0 @@ -3581,7 +3581,7 @@ local.get $2 i32.const 1 i32.const 3 - call $~lib/staticarray/StaticArray.slice<~lib/string/String> + call $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> local.tee $0 i32.store offset=4 local.get $0 @@ -3650,7 +3650,7 @@ local.get $2 i32.const 1 i32.const 2147483647 - call $~lib/staticarray/StaticArray.slice<~lib/string/String> + call $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> local.tee $0 i32.store offset=4 local.get $2 @@ -3680,7 +3680,7 @@ local.get $2 i32.const 0 i32.const 50 - call $~lib/staticarray/StaticArray.slice<~lib/string/String> + call $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> local.tee $0 i32.store offset=4 local.get $0 @@ -3708,7 +3708,7 @@ local.get $2 i32.const 100 i32.const 2147483647 - call $~lib/staticarray/StaticArray.slice<~lib/string/String> + call $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> local.tee $0 i32.store offset=4 local.get $0 @@ -3729,7 +3729,7 @@ local.get $2 i32.const -1 i32.const 2147483647 - call $~lib/staticarray/StaticArray.slice<~lib/string/String> + call $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> local.tee $0 i32.store offset=4 local.get $0 @@ -3775,7 +3775,7 @@ local.get $2 i32.const -2 i32.const -2 - call $~lib/staticarray/StaticArray.slice<~lib/string/String> + call $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> local.tee $0 i32.store offset=4 local.get $0 @@ -3796,7 +3796,7 @@ local.get $2 i32.const 2 i32.const -2 - call $~lib/staticarray/StaticArray.slice<~lib/string/String> + call $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> local.tee $0 i32.store offset=4 local.get $0 @@ -6518,7 +6518,7 @@ global.set $~lib/memory/__stack_pointer local.get $4 ) - (func $~lib/staticarray/StaticArray.slice<~lib/string/String> (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) global.get $~lib/memory/__stack_pointer @@ -6546,6 +6546,7 @@ i32.const 2 i32.shr_u local.set $3 + local.get $0 local.get $1 i32.const 0 i32.lt_s @@ -6553,9 +6554,9 @@ local.get $1 local.get $3 i32.add - local.tee $1 + local.tee $0 i32.const 0 - local.get $1 + local.get $0 i32.const 0 i32.gt_s select @@ -6567,7 +6568,11 @@ i32.lt_s select end - local.set $4 + local.tee $0 + i32.const 2 + i32.shl + i32.add + local.set $1 global.get $~lib/memory/__stack_pointer local.get $2 i32.const 0 @@ -6576,9 +6581,9 @@ local.get $2 local.get $3 i32.add - local.tee $1 + local.tee $2 i32.const 0 - local.get $1 + local.get $2 i32.const 0 i32.gt_s select @@ -6590,11 +6595,11 @@ i32.lt_s select end - local.get $4 + local.get $0 i32.sub - local.tee $1 + local.tee $0 i32.const 0 - local.get $1 + local.get $0 i32.const 0 i32.gt_s select @@ -6603,14 +6608,8 @@ local.tee $3 i32.const 8 call $~lib/rt/itcms/__new - local.tee $1 + local.tee $4 i32.store - local.get $0 - local.get $4 - i32.const 2 - i32.shl - i32.add - local.set $0 i32.const 0 local.set $2 loop $while-continue|0 @@ -6618,19 +6617,19 @@ local.get $3 i32.lt_u if - local.get $1 local.get $2 + local.get $4 i32.add - local.get $0 + local.get $1 local.get $2 i32.add i32.load - local.tee $4 + local.tee $0 i32.store - local.get $4 + local.get $0 if - local.get $1 local.get $4 + local.get $0 i32.const 1 call $byn-split-outlined-A$~lib/rt/itcms/__link end @@ -6645,7 +6644,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $1 + local.get $4 ) (func $~lib/staticarray/StaticArray<~lib/string/String>#__get (param $0 i32) (param $1 i32) (result i32) global.get $~lib/memory/__stack_pointer @@ -6677,7 +6676,7 @@ if i32.const 1088 i32.const 1152 - i32.const 118 + i32.const 101 i32.const 41 call $~lib/builtins/abort unreachable @@ -6696,7 +6695,7 @@ if i32.const 2176 i32.const 1152 - i32.const 122 + i32.const 105 i32.const 40 call $~lib/builtins/abort unreachable @@ -6749,7 +6748,7 @@ if i32.const 1680 i32.const 1152 - i32.const 261 + i32.const 244 i32.const 60 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/staticarray.ts b/tests/compiler/std/staticarray.ts index 0a8919d6d6..fd5fcdd433 100644 --- a/tests/compiler/std/staticarray.ts +++ b/tests/compiler/std/staticarray.ts @@ -74,35 +74,35 @@ arr4 = changetype>(0); // slice { const source: StaticArray = ['ant', 'bison', 'camel', 'duck', 'elephant']; - let result = StaticArray.slice(source); + let result = source.slice>(); assert(result.length == source.length); for(let i = 0; i < source.length; i++) { assert(source[i] == result[i]); } - result = StaticArray.slice(source, 1, 3); + result = source.slice>(1, 3); assert(result.length == 2); assert(result[0] == "bison"); assert(result[1] == "camel"); - result = StaticArray.slice(source, 1); + result = source.slice>(1); assert(result.length == (source.length - 1)); - result = StaticArray.slice(source, 0, 50); + result = source.slice>(0, 50); assert(result.length == source.length); - result = StaticArray.slice(source, 100); + result = source.slice>(100); assert(result.length == 0); - result = StaticArray.slice(source, -1); + result = source.slice>(-1); assert(result.length == 1); assert(result[0] == "elephant"); - result = StaticArray.slice(source, -2, -2); + result = source.slice>(-2, -2); assert(result.length == 0); - result = StaticArray.slice(source, 2, -2); + result = source.slice>(2, -2); assert(result.length == 1); assert(result[0] == "camel"); } From d2f9804fbe7ea763e4a3636b678fbbb6edd0fdb2 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 4 Aug 2022 15:07:14 +0300 Subject: [PATCH 2/7] better defs. Make TS lang server happier --- std/assembly/index.d.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index 7655b86886..b36a7b2478 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1795,7 +1795,8 @@ declare class StaticArray { every(callbackfn: (value: T, index: i32, array: StaticArray) => bool): bool; some(callbackfn: (value: T, index: i32, array: StaticArray) => bool): bool; concat(items: Array): Array; - slice = Array>(from?: i32, to?: i32): U; + slice(from?: i32, to?: i32): Array; + slice>(from?: i32, to?: i32): U; sort(comparator?: (a: T, b: T) => i32): this; join(separator?: string): string; reverse(): this; From 2bac9a2ab085a64fcba63069e2e4e748913fdc81 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 4 Aug 2022 15:49:50 +0300 Subject: [PATCH 3/7] refactor --- std/assembly/staticarray.ts | 102 +++++++++++++++++++++++++++++------- 1 file changed, 84 insertions(+), 18 deletions(-) diff --git a/std/assembly/staticarray.ts b/std/assembly/staticarray.ts index 1eb3b88cfb..f1c9f290a7 100644 --- a/std/assembly/staticarray.ts +++ b/std/assembly/staticarray.ts @@ -267,49 +267,115 @@ export class StaticArray { return out; } + /* + TODO: use this version when all infer issues are gone + concat = Array>(other: U): U { + let sourceLen = this.length; + let otherLen = other.length; + let outLen = sourceLen + otherLen; + if (outLen > BLOCK_MAXSIZE >>> alignof()) { + throw new Error(E_INVALIDLENGTH); + } + let sourceSize = sourceLen << alignof(); + let out!: U; + + if (out instanceof Array) { + out = changetype(__newArray(outLen, alignof(), idof>())); + let outStart = changetype>(out).dataStart; + let otherStart = changetype>(other).dataStart; + let thisStart = changetype(this); + + if (isManaged()) { + for (let offset: usize = 0; offset < sourceSize; offset += sizeof()) { + let ref = load(thisStart + offset); + store(outStart + offset, ref); + __link(changetype(out), ref, true); + } + outStart += sourceSize; + let otherSize = otherLen << alignof(); + for (let offset: usize = 0; offset < otherSize; offset += sizeof()) { + let ref = load(otherStart + offset); + store(outStart + offset, ref); + __link(changetype(out), ref, true); + } + } else { + memory.copy(outStart, thisStart, sourceSize); + memory.copy(outStart + sourceSize, otherStart, otherLen << alignof()); + } + } else if (out instanceof StaticArray) { + out = changetype(__new(outLen << alignof(), idof>())); + let outStart = changetype(out); + let otherStart = changetype(other); + let thisStart = changetype(this); + + if (isManaged()) { + for (let offset: usize = 0; offset < sourceSize; offset += sizeof()) { + let ref = load(thisStart + offset); + store(outStart + offset, ref); + __link(outStart, ref, true); + } + outStart += sourceSize; + let otherSize = otherLen << alignof(); + for (let offset: usize = 0; offset < otherSize; offset += sizeof()) { + let ref = load(otherStart + offset); + store(outStart + offset, ref); + __link(outStart, ref, true); + } + } else { + memory.copy(outStart, thisStart, sourceSize); + memory.copy(outStart + sourceSize, otherStart, otherLen << alignof()); + } + } else { + ERROR("Only Array and StaticArray accept for 'U' parameter"); + } + return out; + } + */ + slice = Array>(start: i32 = 0, end: i32 = i32.MAX_VALUE): U { var length = this.length; start = start < 0 ? max(start + length, 0) : min(start, length); end = end < 0 ? max(end + length, 0) : min(end, length); length = max(end - start, 0); - var sourceBase = changetype(this) + (start << alignof()); + var sourceStart = changetype(this) + (start << alignof()); var size = length << alignof(); - let res!: U; + let out!: U; - if (isArray()) { + if (out instanceof Array) { // return Array - res = changetype(__newArray(length, alignof(), idof>())); - let targetBase = changetype>(res).dataStart; + out = changetype(__newArray(length, alignof(), idof>())); + let outStart = changetype>(out).dataStart; if (isManaged()) { let off: usize = 0; while (off < size) { - let ref = load(sourceBase + off); - store(targetBase + off, ref); - __link(changetype(res), ref, true); + let ref = load(sourceStart + off); + store(outStart + off, ref); + __link(changetype(out), ref, true); off += sizeof(); } } else { - memory.copy(targetBase, sourceBase, size); + memory.copy(outStart, sourceStart, size); } - } else { - assert(res instanceof StaticArray); + } else if (out instanceof StaticArray) { // return StaticArray - res = changetype(__new(size, idof>())); - let targetBase = changetype(res); + out = changetype(__new(size, idof>())); + let outStart = changetype(out); if (isManaged()) { let off: usize = 0; while (off < size) { - let ref = load(sourceBase + off); - store(targetBase + off, ref); - __link(targetBase, ref, true); + let ref = load(sourceStart + off); + store(outStart + off, ref); + __link(outStart, ref, true); off += sizeof(); } } else { - memory.copy(targetBase, sourceBase, size); + memory.copy(outStart, sourceStart, size); } + } else { + ERROR("Only Array and StaticArray accept for 'U' parameter"); } - return res; + return out; } findIndex(fn: (value: T, index: i32, array: StaticArray) => bool): i32 { From ed2aeeeaf7be3997a3ec6d6f88d6b6443c8c9894 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 4 Aug 2022 15:54:43 +0300 Subject: [PATCH 4/7] cleanups --- std/assembly/staticarray.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/std/assembly/staticarray.ts b/std/assembly/staticarray.ts index f1c9f290a7..197289bc06 100644 --- a/std/assembly/staticarray.ts +++ b/std/assembly/staticarray.ts @@ -4,7 +4,7 @@ import { OBJECT, BLOCK_MAXSIZE, TOTAL_OVERHEAD } from "./rt/common"; import { Runtime } from "shared/runtime"; import { COMPARATOR, SORT } from "./util/sort"; import { REVERSE } from "./util/bytes"; -import { idof, isArray } from "./builtins"; +import { idof } from "./builtins"; import { Array } from "./array"; import { E_INDEXOUTOFRANGE, E_INVALIDLENGTH, E_HOLEYARRAY } from "./util/error"; import { joinBooleanArray, joinIntegerArray, joinFloatArray, joinStringArray, joinReferenceArray } from "./util/string"; From 91b7fa8d69957c2d8b5dfb854d4b839e3259ead3 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 4 Aug 2022 16:54:33 +0300 Subject: [PATCH 5/7] same for StaticArray.concat --- std/assembly/index.d.ts | 2 + std/assembly/staticarray.ts | 60 +--- tests/compiler/std/staticarray.debug.wat | 241 +++++++------- tests/compiler/std/staticarray.release.wat | 356 +++++++++++---------- tests/compiler/std/staticarray.ts | 4 +- 5 files changed, 315 insertions(+), 348 deletions(-) diff --git a/std/assembly/index.d.ts b/std/assembly/index.d.ts index b36a7b2478..fcb781a385 100644 --- a/std/assembly/index.d.ts +++ b/std/assembly/index.d.ts @@ -1774,6 +1774,7 @@ declare class Array { declare class StaticArray { [key: number]: T; static fromArray(source: Array): StaticArray; + /** @deprecated */ static concat(source: StaticArray, other: StaticArray): StaticArray; /** @deprecated */ static slice(source: StaticArray, start?: i32, end?: i32): StaticArray; @@ -1795,6 +1796,7 @@ declare class StaticArray { every(callbackfn: (value: T, index: i32, array: StaticArray) => bool): bool; some(callbackfn: (value: T, index: i32, array: StaticArray) => bool): bool; concat(items: Array): Array; + concat>(other: U): U; slice(from?: i32, to?: i32): Array; slice>(from?: i32, to?: i32): U; sort(comparator?: (a: T, b: T) => i32): this; diff --git a/std/assembly/staticarray.ts b/std/assembly/staticarray.ts index 197289bc06..c04e8825fe 100644 --- a/std/assembly/staticarray.ts +++ b/std/assembly/staticarray.ts @@ -37,32 +37,9 @@ export class StaticArray { return out; } + /** @deprecated Please use source.concat> instead. */ static concat(source: StaticArray, other: StaticArray): StaticArray { - var sourceLen = source.length; - var otherLen = other.length; - var outLen = sourceLen + otherLen; - if (outLen > BLOCK_MAXSIZE >>> alignof()) throw new Error(E_INVALIDLENGTH); - var out = changetype>(__new(outLen << alignof(), idof>())); - var outStart = changetype(out); - var sourceSize = sourceLen << alignof(); - if (isManaged()) { - for (let offset: usize = 0; offset < sourceSize; offset += sizeof()) { - let ref = load(changetype(source) + offset); - store(outStart + offset, ref); - __link(changetype(out), ref, true); - } - outStart += sourceSize; - let otherSize = otherLen << alignof(); - for (let offset: usize = 0; offset < otherSize; offset += sizeof()) { - let ref = load(changetype(other) + offset); - store(outStart + offset, ref); - __link(changetype(out), ref, true); - } - } else { - memory.copy(outStart, changetype(source), sourceSize); - memory.copy(outStart + sourceSize, changetype(other), otherLen << alignof()); - } - return out; + return source.concat>(other); } /** @deprecated Please use source.slice> instead. */ @@ -237,38 +214,6 @@ export class StaticArray { return -1; } - concat(other: Array): Array { - var thisLen = this.length; - var otherLen = other.length; - var outLen = thisLen + otherLen; - if (outLen > BLOCK_MAXSIZE >>> alignof()) throw new Error(E_INVALIDLENGTH); - var out = changetype>(__newArray(outLen, alignof(), idof>())); - var outStart = out.dataStart; - var thisSize = thisLen << alignof(); - if (isManaged()) { - let thisStart = changetype(this); - for (let offset: usize = 0; offset < thisSize; offset += sizeof()) { - let ref = load(thisStart + offset); - store(outStart + offset, ref); - __link(changetype(out), ref, true); - } - outStart += thisSize; - let otherStart = other.dataStart; - let otherSize = otherLen << alignof(); - for (let offset: usize = 0; offset < otherSize; offset += sizeof()) { - let ref = load(otherStart + offset); - store(outStart + offset, ref); - __link(changetype(out), ref, true); - } - } else { - memory.copy(outStart, changetype(this), thisSize); - memory.copy(outStart + thisSize, other.dataStart, otherLen << alignof()); - } - return out; - } - - /* - TODO: use this version when all infer issues are gone concat = Array>(other: U): U { let sourceLen = this.length; let otherLen = other.length; @@ -330,7 +275,6 @@ export class StaticArray { } return out; } - */ slice = Array>(start: i32 = 0, end: i32 = i32.MAX_VALUE): U { var length = this.length; diff --git a/tests/compiler/std/staticarray.debug.wat b/tests/compiler/std/staticarray.debug.wat index 22844fb737..6190c2c33d 100644 --- a/tests/compiler/std/staticarray.debug.wat +++ b/tests/compiler/std/staticarray.debug.wat @@ -133,7 +133,7 @@ if i32.const 64 i32.const 128 - i32.const 101 + i32.const 78 i32.const 41 call $~lib/builtins/abort unreachable @@ -168,7 +168,7 @@ if i32.const 64 i32.const 128 - i32.const 116 + i32.const 93 i32.const 41 call $~lib/builtins/abort unreachable @@ -2385,6 +2385,11 @@ drop local.get $2 ) + (func $~lib/staticarray/StaticArray.concat (param $0 i32) (param $1 i32) (result i32) + local.get $0 + local.get $1 + call $~lib/staticarray/StaticArray#concat<~lib/staticarray/StaticArray> + ) (func $~lib/staticarray/StaticArray<~lib/string/String>#get:length (param $0 i32) (result i32) local.get $0 i32.const 20 @@ -6151,7 +6156,7 @@ local.get $5 i32.store offset=12 local.get $5 - call $~lib/staticarray/StaticArray<~lib/string/String>#concat + call $~lib/staticarray/StaticArray<~lib/string/String>#concat<~lib/array/Array<~lib/string/String>> local.tee $3 i32.store offset=16 local.get $3 @@ -6163,7 +6168,7 @@ if i32.const 0 i32.const 192 - i32.const 115 + i32.const 117 i32.const 3 call $~lib/builtins/abort unreachable @@ -6182,7 +6187,7 @@ local.get $5 i32.store offset=12 local.get $5 - call $~lib/staticarray/StaticArray<~lib/string/String>#concat + call $~lib/staticarray/StaticArray<~lib/string/String>#concat<~lib/array/Array<~lib/string/String>> local.tee $3 i32.store offset=16 local.get $3 @@ -6196,7 +6201,7 @@ if i32.const 0 i32.const 192 - i32.const 119 + i32.const 121 i32.const 3 call $~lib/builtins/abort unreachable @@ -6225,7 +6230,7 @@ if i32.const 0 i32.const 192 - i32.const 126 + i32.const 128 i32.const 3 call $~lib/builtins/abort unreachable @@ -6245,7 +6250,7 @@ if i32.const 0 i32.const 192 - i32.const 127 + i32.const 129 i32.const 3 call $~lib/builtins/abort unreachable @@ -6265,7 +6270,7 @@ if i32.const 0 i32.const 192 - i32.const 128 + i32.const 130 i32.const 3 call $~lib/builtins/abort unreachable @@ -6285,7 +6290,7 @@ if i32.const 0 i32.const 192 - i32.const 129 + i32.const 131 i32.const 3 call $~lib/builtins/abort unreachable @@ -6308,7 +6313,7 @@ if i32.const 0 i32.const 192 - i32.const 131 + i32.const 133 i32.const 3 call $~lib/builtins/abort unreachable @@ -6331,7 +6336,7 @@ if i32.const 0 i32.const 192 - i32.const 132 + i32.const 134 i32.const 3 call $~lib/builtins/abort unreachable @@ -6353,7 +6358,7 @@ if i32.const 0 i32.const 192 - i32.const 138 + i32.const 140 i32.const 3 call $~lib/builtins/abort unreachable @@ -6368,7 +6373,7 @@ if i32.const 0 i32.const 192 - i32.const 139 + i32.const 141 i32.const 3 call $~lib/builtins/abort unreachable @@ -6383,7 +6388,7 @@ if i32.const 0 i32.const 192 - i32.const 140 + i32.const 142 i32.const 3 call $~lib/builtins/abort unreachable @@ -6398,7 +6403,7 @@ if i32.const 0 i32.const 192 - i32.const 141 + i32.const 143 i32.const 3 call $~lib/builtins/abort unreachable @@ -6413,7 +6418,7 @@ if i32.const 0 i32.const 192 - i32.const 142 + i32.const 144 i32.const 3 call $~lib/builtins/abort unreachable @@ -6437,7 +6442,7 @@ if i32.const 0 i32.const 192 - i32.const 148 + i32.const 150 i32.const 3 call $~lib/builtins/abort unreachable @@ -6454,7 +6459,7 @@ if i32.const 0 i32.const 192 - i32.const 149 + i32.const 151 i32.const 3 call $~lib/builtins/abort unreachable @@ -6469,7 +6474,7 @@ if i32.const 0 i32.const 192 - i32.const 150 + i32.const 152 i32.const 3 call $~lib/builtins/abort unreachable @@ -6484,7 +6489,7 @@ if i32.const 0 i32.const 192 - i32.const 151 + i32.const 153 i32.const 3 call $~lib/builtins/abort unreachable @@ -6499,7 +6504,7 @@ if i32.const 0 i32.const 192 - i32.const 152 + i32.const 154 i32.const 3 call $~lib/builtins/abort unreachable @@ -6514,7 +6519,7 @@ if i32.const 0 i32.const 192 - i32.const 153 + i32.const 155 i32.const 3 call $~lib/builtins/abort unreachable @@ -6550,7 +6555,7 @@ if i32.const 0 i32.const 192 - i32.const 159 + i32.const 161 i32.const 3 call $~lib/builtins/abort unreachable @@ -6579,7 +6584,7 @@ if i32.const 0 i32.const 192 - i32.const 160 + i32.const 162 i32.const 3 call $~lib/builtins/abort unreachable @@ -6608,7 +6613,7 @@ if i32.const 0 i32.const 192 - i32.const 161 + i32.const 163 i32.const 3 call $~lib/builtins/abort unreachable @@ -6637,7 +6642,7 @@ if i32.const 0 i32.const 192 - i32.const 162 + i32.const 164 i32.const 3 call $~lib/builtins/abort unreachable @@ -6667,7 +6672,7 @@ if i32.const 0 i32.const 192 - i32.const 163 + i32.const 165 i32.const 3 call $~lib/builtins/abort unreachable @@ -6694,7 +6699,7 @@ if i32.const 0 i32.const 192 - i32.const 171 + i32.const 173 i32.const 3 call $~lib/builtins/abort unreachable @@ -6708,7 +6713,7 @@ if i32.const 0 i32.const 192 - i32.const 172 + i32.const 174 i32.const 3 call $~lib/builtins/abort unreachable @@ -6732,7 +6737,7 @@ if i32.const 0 i32.const 192 - i32.const 180 + i32.const 182 i32.const 3 call $~lib/builtins/abort unreachable @@ -6746,7 +6751,7 @@ if i32.const 0 i32.const 192 - i32.const 181 + i32.const 183 i32.const 3 call $~lib/builtins/abort unreachable @@ -6760,7 +6765,7 @@ if i32.const 0 i32.const 192 - i32.const 182 + i32.const 184 i32.const 3 call $~lib/builtins/abort unreachable @@ -6787,7 +6792,7 @@ if i32.const 0 i32.const 192 - i32.const 190 + i32.const 192 i32.const 3 call $~lib/builtins/abort unreachable @@ -6801,7 +6806,7 @@ if i32.const 0 i32.const 192 - i32.const 191 + i32.const 193 i32.const 3 call $~lib/builtins/abort unreachable @@ -6815,7 +6820,7 @@ if i32.const 0 i32.const 192 - i32.const 192 + i32.const 194 i32.const 3 call $~lib/builtins/abort unreachable @@ -6829,7 +6834,7 @@ if i32.const 0 i32.const 192 - i32.const 193 + i32.const 195 i32.const 3 call $~lib/builtins/abort unreachable @@ -6843,7 +6848,7 @@ if i32.const 0 i32.const 192 - i32.const 194 + i32.const 196 i32.const 3 call $~lib/builtins/abort unreachable @@ -6875,7 +6880,7 @@ if i32.const 0 i32.const 192 - i32.const 203 + i32.const 205 i32.const 3 call $~lib/builtins/abort unreachable @@ -6889,7 +6894,7 @@ if i32.const 0 i32.const 192 - i32.const 204 + i32.const 206 i32.const 3 call $~lib/builtins/abort unreachable @@ -6903,7 +6908,7 @@ if i32.const 0 i32.const 192 - i32.const 205 + i32.const 207 i32.const 3 call $~lib/builtins/abort unreachable @@ -6923,7 +6928,7 @@ if i32.const 0 i32.const 192 - i32.const 209 + i32.const 211 i32.const 3 call $~lib/builtins/abort unreachable @@ -6947,7 +6952,7 @@ if i32.const 0 i32.const 192 - i32.const 213 + i32.const 215 i32.const 3 call $~lib/builtins/abort unreachable @@ -6961,7 +6966,7 @@ if i32.const 0 i32.const 192 - i32.const 214 + i32.const 216 i32.const 3 call $~lib/builtins/abort unreachable @@ -6975,7 +6980,7 @@ if i32.const 0 i32.const 192 - i32.const 215 + i32.const 217 i32.const 3 call $~lib/builtins/abort unreachable @@ -6997,7 +7002,7 @@ if i32.const 0 i32.const 192 - i32.const 219 + i32.const 221 i32.const 3 call $~lib/builtins/abort unreachable @@ -7019,7 +7024,7 @@ if i32.const 0 i32.const 192 - i32.const 223 + i32.const 225 i32.const 3 call $~lib/builtins/abort unreachable @@ -7036,7 +7041,7 @@ if i32.const 0 i32.const 192 - i32.const 226 + i32.const 228 i32.const 3 call $~lib/builtins/abort unreachable @@ -7054,7 +7059,7 @@ if i32.const 0 i32.const 192 - i32.const 227 + i32.const 229 i32.const 3 call $~lib/builtins/abort unreachable @@ -7071,7 +7076,7 @@ if i32.const 0 i32.const 192 - i32.const 230 + i32.const 232 i32.const 3 call $~lib/builtins/abort unreachable @@ -7089,7 +7094,7 @@ if i32.const 0 i32.const 192 - i32.const 231 + i32.const 233 i32.const 3 call $~lib/builtins/abort unreachable @@ -7108,7 +7113,7 @@ if i32.const 0 i32.const 192 - i32.const 234 + i32.const 236 i32.const 3 call $~lib/builtins/abort unreachable @@ -7127,7 +7132,7 @@ if i32.const 0 i32.const 192 - i32.const 235 + i32.const 237 i32.const 3 call $~lib/builtins/abort unreachable @@ -7146,7 +7151,7 @@ if i32.const 0 i32.const 192 - i32.const 238 + i32.const 240 i32.const 3 call $~lib/builtins/abort unreachable @@ -7165,7 +7170,7 @@ if i32.const 0 i32.const 192 - i32.const 239 + i32.const 241 i32.const 3 call $~lib/builtins/abort unreachable @@ -7192,7 +7197,7 @@ if i32.const 0 i32.const 192 - i32.const 248 + i32.const 250 i32.const 3 call $~lib/builtins/abort unreachable @@ -7206,7 +7211,7 @@ if i32.const 0 i32.const 192 - i32.const 249 + i32.const 251 i32.const 3 call $~lib/builtins/abort unreachable @@ -7220,7 +7225,7 @@ if i32.const 0 i32.const 192 - i32.const 250 + i32.const 252 i32.const 3 call $~lib/builtins/abort unreachable @@ -7234,7 +7239,7 @@ if i32.const 0 i32.const 192 - i32.const 251 + i32.const 253 i32.const 3 call $~lib/builtins/abort unreachable @@ -7295,7 +7300,7 @@ if i32.const 656 i32.const 128 - i32.const 74 + i32.const 51 i32.const 60 call $~lib/builtins/abort unreachable @@ -7415,7 +7420,7 @@ global.set $~lib/memory/__stack_pointer local.get $4 ) - (func $~lib/staticarray/StaticArray.concat (param $0 i32) (param $1 i32) (result i32) + (func $~lib/staticarray/StaticArray#concat<~lib/staticarray/StaticArray> (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -7423,6 +7428,8 @@ (local $6 i32) (local $7 i32) (local $8 i32) + (local $9 i32) + (local $10 i32) global.get $~lib/memory/__stack_pointer i32.const 4 i32.sub @@ -7449,46 +7456,54 @@ if i32.const 656 i32.const 128 - i32.const 44 - i32.const 60 + i32.const 222 + i32.const 7 call $~lib/builtins/abort unreachable end + local.get $2 + i32.const 2 + i32.shl + local.set $5 + i32.const 0 + drop + i32.const 1 + drop global.get $~lib/memory/__stack_pointer local.get $4 i32.const 2 i32.shl i32.const 3 call $~lib/rt/itcms/__new - local.tee $5 + local.tee $6 i32.store - local.get $5 - local.set $6 - local.get $2 - i32.const 2 - i32.shl + local.get $6 local.set $7 + local.get $1 + local.set $8 + local.get $0 + local.set $9 i32.const 0 drop - local.get $6 - local.get $0 local.get $7 + local.get $9 + local.get $5 memory.copy - local.get $6 local.get $7 + local.get $5 i32.add - local.get $1 + local.get $8 local.get $3 i32.const 2 i32.shl memory.copy - local.get $5 - local.set $8 + local.get $6 + local.set $10 global.get $~lib/memory/__stack_pointer i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $8 + local.get $10 ) (func $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) @@ -7652,7 +7667,7 @@ if i32.const 64 i32.const 128 - i32.const 101 + i32.const 78 i32.const 41 call $~lib/builtins/abort unreachable @@ -7676,7 +7691,7 @@ if i32.const 1152 i32.const 128 - i32.const 105 + i32.const 82 i32.const 40 call $~lib/builtins/abort unreachable @@ -7689,7 +7704,7 @@ global.set $~lib/memory/__stack_pointer local.get $3 ) - (func $~lib/staticarray/StaticArray<~lib/string/String>#concat (param $0 i32) (param $1 i32) (result i32) + (func $~lib/staticarray/StaticArray<~lib/string/String>#concat<~lib/array/Array<~lib/string/String>> (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -7729,67 +7744,69 @@ if i32.const 656 i32.const 128 - i32.const 244 - i32.const 60 + i32.const 222 + i32.const 7 call $~lib/builtins/abort unreachable end + local.get $2 + i32.const 2 + i32.shl + local.set $5 + i32.const 1 + drop global.get $~lib/memory/__stack_pointer local.get $4 i32.const 2 i32.const 9 i32.const 0 call $~lib/rt/__newArray - local.tee $5 + local.tee $6 i32.store - local.get $5 + local.get $6 i32.load offset=4 - local.set $6 - local.get $2 - i32.const 2 - i32.shl local.set $7 + local.get $1 + i32.load offset=4 + local.set $8 + local.get $0 + local.set $9 i32.const 1 drop - local.get $0 - local.set $8 i32.const 0 - local.set $9 + local.set $10 loop $for-loop|0 - local.get $9 - local.get $7 - i32.lt_u - local.set $10 local.get $10 + local.get $5 + i32.lt_u + local.set $11 + local.get $11 if - local.get $8 local.get $9 + local.get $10 i32.add i32.load - local.set $11 - local.get $6 - local.get $9 + local.set $12 + local.get $7 + local.get $10 i32.add - local.get $11 + local.get $12 i32.store - local.get $5 - local.get $11 + local.get $6 + local.get $12 i32.const 1 call $~lib/rt/itcms/__link - local.get $9 + local.get $10 i32.const 4 i32.add - local.set $9 + local.set $10 br $for-loop|0 end end - local.get $6 local.get $7 + local.get $5 i32.add - local.set $6 - local.get $1 - i32.load offset=4 - local.set $9 + local.set $7 local.get $3 i32.const 2 i32.shl @@ -7803,17 +7820,17 @@ local.set $12 local.get $12 if - local.get $9 + local.get $8 local.get $11 i32.add i32.load local.set $13 - local.get $6 + local.get $7 local.get $11 i32.add local.get $13 i32.store - local.get $5 + local.get $6 local.get $13 i32.const 1 call $~lib/rt/itcms/__link @@ -7824,7 +7841,7 @@ br $for-loop|1 end end - local.get $5 + local.get $6 local.set $14 global.get $~lib/memory/__stack_pointer i32.const 4 diff --git a/tests/compiler/std/staticarray.release.wat b/tests/compiler/std/staticarray.release.wat index 4151cdab2e..a5ed392981 100644 --- a/tests/compiler/std/staticarray.release.wat +++ b/tests/compiler/std/staticarray.release.wat @@ -173,7 +173,7 @@ if i32.const 1088 i32.const 1152 - i32.const 101 + i32.const 78 i32.const 41 call $~lib/builtins/abort unreachable @@ -197,7 +197,7 @@ if i32.const 1088 i32.const 1152 - i32.const 116 + i32.const 93 i32.const 41 call $~lib/builtins/abort unreachable @@ -1736,6 +1736,83 @@ i32.add i32.load ) + (func $~lib/staticarray/StaticArray.concat (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 3868 + i32.lt_s + if + i32.const 20272 + i32.const 20320 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u + local.tee $3 + local.get $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u + local.tee $2 + i32.add + local.tee $4 + i32.const 268435455 + i32.gt_u + if + i32.const 1680 + i32.const 1152 + i32.const 222 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.const 2 + i32.shl + i32.const 3 + call $~lib/rt/itcms/__new + local.tee $4 + i32.store + local.get $4 + local.get $0 + local.get $3 + i32.const 2 + i32.shl + local.tee $0 + memory.copy + local.get $0 + local.get $4 + i32.add + local.get $1 + local.get $2 + i32.const 2 + i32.shl + memory.copy + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -3859,7 +3936,7 @@ i32.store offset=12 local.get $1 local.get $2 - call $~lib/staticarray/StaticArray<~lib/string/String>#concat + call $~lib/staticarray/StaticArray<~lib/string/String>#concat<~lib/array/Array<~lib/string/String>> local.tee $0 i32.store offset=16 local.get $0 @@ -3874,7 +3951,7 @@ if i32.const 0 i32.const 1216 - i32.const 115 + i32.const 117 i32.const 3 call $~lib/builtins/abort unreachable @@ -3890,7 +3967,7 @@ i32.store offset=12 local.get $1 local.get $2 - call $~lib/staticarray/StaticArray<~lib/string/String>#concat + call $~lib/staticarray/StaticArray<~lib/string/String>#concat<~lib/array/Array<~lib/string/String>> local.tee $0 i32.store offset=16 local.get $0 @@ -3907,7 +3984,7 @@ if i32.const 0 i32.const 1216 - i32.const 119 + i32.const 121 i32.const 3 call $~lib/builtins/abort unreachable @@ -3934,7 +4011,7 @@ if i32.const 0 i32.const 1216 - i32.const 126 + i32.const 128 i32.const 3 call $~lib/builtins/abort unreachable @@ -3949,7 +4026,7 @@ if i32.const 0 i32.const 1216 - i32.const 127 + i32.const 129 i32.const 3 call $~lib/builtins/abort unreachable @@ -3964,7 +4041,7 @@ if i32.const 0 i32.const 1216 - i32.const 128 + i32.const 130 i32.const 3 call $~lib/builtins/abort unreachable @@ -3981,7 +4058,7 @@ if i32.const 0 i32.const 1216 - i32.const 129 + i32.const 131 i32.const 3 call $~lib/builtins/abort unreachable @@ -4044,7 +4121,7 @@ if i32.const 0 i32.const 1216 - i32.const 131 + i32.const 133 i32.const 3 call $~lib/builtins/abort unreachable @@ -4107,7 +4184,7 @@ if i32.const 0 i32.const 1216 - i32.const 132 + i32.const 134 i32.const 3 call $~lib/builtins/abort unreachable @@ -4165,7 +4242,7 @@ if i32.const 0 i32.const 1216 - i32.const 138 + i32.const 140 i32.const 3 call $~lib/builtins/abort unreachable @@ -4215,7 +4292,7 @@ if i32.const 0 i32.const 1216 - i32.const 139 + i32.const 141 i32.const 3 call $~lib/builtins/abort unreachable @@ -4269,7 +4346,7 @@ if i32.const 0 i32.const 1216 - i32.const 140 + i32.const 142 i32.const 3 call $~lib/builtins/abort unreachable @@ -4330,7 +4407,7 @@ if i32.const 0 i32.const 1216 - i32.const 141 + i32.const 143 i32.const 3 call $~lib/builtins/abort unreachable @@ -4389,7 +4466,7 @@ if i32.const 0 i32.const 1216 - i32.const 142 + i32.const 144 i32.const 3 call $~lib/builtins/abort unreachable @@ -4459,7 +4536,7 @@ if i32.const 0 i32.const 1216 - i32.const 148 + i32.const 150 i32.const 3 call $~lib/builtins/abort unreachable @@ -4519,7 +4596,7 @@ if i32.const 0 i32.const 1216 - i32.const 149 + i32.const 151 i32.const 3 call $~lib/builtins/abort unreachable @@ -4575,7 +4652,7 @@ if i32.const 0 i32.const 1216 - i32.const 150 + i32.const 152 i32.const 3 call $~lib/builtins/abort unreachable @@ -4629,7 +4706,7 @@ if i32.const 0 i32.const 1216 - i32.const 151 + i32.const 153 i32.const 3 call $~lib/builtins/abort unreachable @@ -4678,7 +4755,7 @@ if i32.const 0 i32.const 1216 - i32.const 152 + i32.const 154 i32.const 3 call $~lib/builtins/abort unreachable @@ -4729,7 +4806,7 @@ if i32.const 0 i32.const 1216 - i32.const 153 + i32.const 155 i32.const 3 call $~lib/builtins/abort unreachable @@ -4770,7 +4847,7 @@ if i32.const 0 i32.const 1216 - i32.const 159 + i32.const 161 i32.const 3 call $~lib/builtins/abort unreachable @@ -4801,7 +4878,7 @@ if i32.const 0 i32.const 1216 - i32.const 160 + i32.const 162 i32.const 3 call $~lib/builtins/abort unreachable @@ -4832,7 +4909,7 @@ if i32.const 0 i32.const 1216 - i32.const 161 + i32.const 163 i32.const 3 call $~lib/builtins/abort unreachable @@ -4863,7 +4940,7 @@ if i32.const 0 i32.const 1216 - i32.const 162 + i32.const 164 i32.const 3 call $~lib/builtins/abort unreachable @@ -4923,7 +5000,7 @@ if i32.const 0 i32.const 1216 - i32.const 163 + i32.const 165 i32.const 3 call $~lib/builtins/abort unreachable @@ -4976,7 +5053,7 @@ if i32.const 0 i32.const 1216 - i32.const 171 + i32.const 173 i32.const 3 call $~lib/builtins/abort unreachable @@ -4989,7 +5066,7 @@ if i32.const 0 i32.const 1216 - i32.const 172 + i32.const 174 i32.const 3 call $~lib/builtins/abort unreachable @@ -5067,7 +5144,7 @@ if i32.const 0 i32.const 1216 - i32.const 180 + i32.const 182 i32.const 3 call $~lib/builtins/abort unreachable @@ -5080,7 +5157,7 @@ if i32.const 0 i32.const 1216 - i32.const 181 + i32.const 183 i32.const 3 call $~lib/builtins/abort unreachable @@ -5093,7 +5170,7 @@ if i32.const 0 i32.const 1216 - i32.const 182 + i32.const 184 i32.const 3 call $~lib/builtins/abort unreachable @@ -5162,7 +5239,7 @@ if i32.const 0 i32.const 1216 - i32.const 190 + i32.const 192 i32.const 3 call $~lib/builtins/abort unreachable @@ -5175,7 +5252,7 @@ if i32.const 0 i32.const 1216 - i32.const 191 + i32.const 193 i32.const 3 call $~lib/builtins/abort unreachable @@ -5188,7 +5265,7 @@ if i32.const 0 i32.const 1216 - i32.const 192 + i32.const 194 i32.const 3 call $~lib/builtins/abort unreachable @@ -5201,7 +5278,7 @@ if i32.const 0 i32.const 1216 - i32.const 193 + i32.const 195 i32.const 3 call $~lib/builtins/abort unreachable @@ -5214,7 +5291,7 @@ if i32.const 0 i32.const 1216 - i32.const 194 + i32.const 196 i32.const 3 call $~lib/builtins/abort unreachable @@ -5310,7 +5387,7 @@ if i32.const 0 i32.const 1216 - i32.const 203 + i32.const 205 i32.const 3 call $~lib/builtins/abort unreachable @@ -5323,7 +5400,7 @@ if i32.const 0 i32.const 1216 - i32.const 204 + i32.const 206 i32.const 3 call $~lib/builtins/abort unreachable @@ -5336,7 +5413,7 @@ if i32.const 0 i32.const 1216 - i32.const 205 + i32.const 207 i32.const 3 call $~lib/builtins/abort unreachable @@ -5384,7 +5461,7 @@ if i32.const 0 i32.const 1216 - i32.const 209 + i32.const 211 i32.const 3 call $~lib/builtins/abort unreachable @@ -5580,7 +5657,7 @@ if i32.const 0 i32.const 1216 - i32.const 213 + i32.const 215 i32.const 3 call $~lib/builtins/abort unreachable @@ -5593,7 +5670,7 @@ if i32.const 0 i32.const 1216 - i32.const 214 + i32.const 216 i32.const 3 call $~lib/builtins/abort unreachable @@ -5606,7 +5683,7 @@ if i32.const 0 i32.const 1216 - i32.const 215 + i32.const 217 i32.const 3 call $~lib/builtins/abort unreachable @@ -5660,7 +5737,7 @@ if i32.const 0 i32.const 1216 - i32.const 219 + i32.const 221 i32.const 3 call $~lib/builtins/abort unreachable @@ -5714,7 +5791,7 @@ if i32.const 0 i32.const 1216 - i32.const 223 + i32.const 225 i32.const 3 call $~lib/builtins/abort unreachable @@ -5768,7 +5845,7 @@ if i32.const 0 i32.const 1216 - i32.const 226 + i32.const 228 i32.const 3 call $~lib/builtins/abort unreachable @@ -5821,7 +5898,7 @@ if i32.const 0 i32.const 1216 - i32.const 227 + i32.const 229 i32.const 3 call $~lib/builtins/abort unreachable @@ -5876,7 +5953,7 @@ if i32.const 0 i32.const 1216 - i32.const 230 + i32.const 232 i32.const 3 call $~lib/builtins/abort unreachable @@ -5930,7 +6007,7 @@ if i32.const 0 i32.const 1216 - i32.const 231 + i32.const 233 i32.const 3 call $~lib/builtins/abort unreachable @@ -5983,7 +6060,7 @@ if i32.const 0 i32.const 1216 - i32.const 234 + i32.const 236 i32.const 3 call $~lib/builtins/abort unreachable @@ -6036,7 +6113,7 @@ if i32.const 0 i32.const 1216 - i32.const 235 + i32.const 237 i32.const 3 call $~lib/builtins/abort unreachable @@ -6089,7 +6166,7 @@ if i32.const 0 i32.const 1216 - i32.const 238 + i32.const 240 i32.const 3 call $~lib/builtins/abort unreachable @@ -6142,7 +6219,7 @@ if i32.const 0 i32.const 1216 - i32.const 239 + i32.const 241 i32.const 3 call $~lib/builtins/abort unreachable @@ -6205,7 +6282,7 @@ if i32.const 0 i32.const 1216 - i32.const 248 + i32.const 250 i32.const 3 call $~lib/builtins/abort unreachable @@ -6218,7 +6295,7 @@ if i32.const 0 i32.const 1216 - i32.const 249 + i32.const 251 i32.const 3 call $~lib/builtins/abort unreachable @@ -6231,7 +6308,7 @@ if i32.const 0 i32.const 1216 - i32.const 250 + i32.const 252 i32.const 3 call $~lib/builtins/abort unreachable @@ -6244,7 +6321,7 @@ if i32.const 0 i32.const 1216 - i32.const 251 + i32.const 253 i32.const 3 call $~lib/builtins/abort unreachable @@ -6441,83 +6518,6 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) - (func $~lib/staticarray/StaticArray.concat (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 3868 - i32.lt_s - if - i32.const 20272 - i32.const 20320 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $0 - i32.const 20 - i32.sub - i32.load offset=16 - i32.const 2 - i32.shr_u - local.tee $3 - local.get $1 - i32.const 20 - i32.sub - i32.load offset=16 - i32.const 2 - i32.shr_u - local.tee $2 - i32.add - local.tee $4 - i32.const 268435455 - i32.gt_u - if - i32.const 1680 - i32.const 1152 - i32.const 44 - i32.const 60 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.const 2 - i32.shl - i32.const 3 - call $~lib/rt/itcms/__new - local.tee $4 - i32.store - local.get $4 - local.get $0 - local.get $3 - i32.const 2 - i32.shl - local.tee $0 - memory.copy - local.get $0 - local.get $4 - i32.add - local.get $1 - local.get $2 - i32.const 2 - i32.shl - memory.copy - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $4 - ) (func $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) @@ -6676,7 +6676,7 @@ if i32.const 1088 i32.const 1152 - i32.const 101 + i32.const 78 i32.const 41 call $~lib/builtins/abort unreachable @@ -6695,7 +6695,7 @@ if i32.const 2176 i32.const 1152 - i32.const 105 + i32.const 82 i32.const 40 call $~lib/builtins/abort unreachable @@ -6706,7 +6706,7 @@ global.set $~lib/memory/__stack_pointer local.get $0 ) - (func $~lib/staticarray/StaticArray<~lib/string/String>#concat (param $0 i32) (param $1 i32) (result i32) + (func $~lib/staticarray/StaticArray<~lib/string/String>#concat<~lib/array/Array<~lib/string/String>> (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -6737,102 +6737,104 @@ i32.load offset=16 i32.const 2 i32.shr_u - local.tee $5 + local.tee $2 local.get $1 i32.load offset=12 - local.tee $3 + local.tee $5 i32.add - local.tee $4 + local.tee $3 i32.const 268435455 i32.gt_u if i32.const 1680 i32.const 1152 - i32.const 244 - i32.const 60 + i32.const 222 + i32.const 7 call $~lib/builtins/abort unreachable end + local.get $2 + i32.const 2 + i32.shl + local.set $6 global.get $~lib/memory/__stack_pointer - local.get $4 + local.get $3 i32.const 9 i32.const 0 call $~lib/rt/__newArray - local.tee $4 + local.tee $2 i32.store - local.get $4 + local.get $2 + i32.load offset=4 + local.set $3 + local.get $1 i32.load offset=4 - local.set $6 - local.get $5 - i32.const 2 - i32.shl local.set $7 + i32.const 0 + local.set $1 loop $for-loop|0 - local.get $2 - local.get $7 + local.get $1 + local.get $6 i32.lt_u if - local.get $2 - local.get $6 + local.get $1 + local.get $3 i32.add local.get $0 - local.get $2 + local.get $1 i32.add i32.load - local.tee $5 + local.tee $4 i32.store - local.get $5 + local.get $4 if + local.get $2 local.get $4 - local.get $5 i32.const 1 call $byn-split-outlined-A$~lib/rt/itcms/__link end - local.get $2 + local.get $1 i32.const 4 i32.add - local.set $2 + local.set $1 br $for-loop|0 end end + local.get $3 local.get $6 - local.get $7 i32.add - local.set $0 - local.get $1 - i32.load offset=4 - local.set $2 - local.get $3 + local.set $1 + local.get $5 i32.const 2 i32.shl local.set $3 i32.const 0 - local.set $1 + local.set $0 loop $for-loop|1 - local.get $1 + local.get $0 local.get $3 i32.lt_u if local.get $0 local.get $1 i32.add - local.get $1 - local.get $2 + local.get $0 + local.get $7 i32.add i32.load - local.tee $5 + local.tee $4 i32.store - local.get $5 + local.get $4 if + local.get $2 local.get $4 - local.get $5 i32.const 1 call $byn-split-outlined-A$~lib/rt/itcms/__link end - local.get $1 + local.get $0 i32.const 4 i32.add - local.set $1 + local.set $0 br $for-loop|1 end end @@ -6840,7 +6842,7 @@ i32.const 4 i32.add global.set $~lib/memory/__stack_pointer - local.get $4 + local.get $2 ) (func $~lib/util/string/joinStringArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) diff --git a/tests/compiler/std/staticarray.ts b/tests/compiler/std/staticarray.ts index fd5fcdd433..a1e6656590 100644 --- a/tests/compiler/std/staticarray.ts +++ b/tests/compiler/std/staticarray.ts @@ -111,7 +111,9 @@ arr4 = changetype>(0); { const source: StaticArray = ['ant', 'bison', 'camel', 'duck', 'elephant']; - let result = source.concat([]); + // TODO: omit default generic type after + // when https://github.com/AssemblyScript/assemblyscript/issues/2405 fixed + let result = source.concat([]); assert(result.length == source.length); assert(isArray(result)); From 3c4e1d5f72c4fd1b5aba44e3ea41a5bc343c446c Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Thu, 4 Aug 2022 16:58:47 +0300 Subject: [PATCH 6/7] refactor tests --- tests/compiler/std/staticarray.debug.wat | 130 ++++------ tests/compiler/std/staticarray.release.wat | 266 ++++++++++----------- tests/compiler/std/staticarray.ts | 4 +- 3 files changed, 188 insertions(+), 212 deletions(-) diff --git a/tests/compiler/std/staticarray.debug.wat b/tests/compiler/std/staticarray.debug.wat index 6190c2c33d..100fb05f91 100644 --- a/tests/compiler/std/staticarray.debug.wat +++ b/tests/compiler/std/staticarray.debug.wat @@ -40,9 +40,9 @@ (global $std/staticarray/maxVal (mut i32) (i32.const 0)) (global $~lib/builtins/u32.MAX_VALUE i32 (i32.const -1)) (global $~lib/rt/__rtti_base i32 (i32.const 2704)) - (global $~lib/memory/__data_end i32 (i32.const 2844)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 19228)) - (global $~lib/memory/__heap_base i32 (i32.const 19228)) + (global $~lib/memory/__data_end i32 (i32.const 2836)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 19220)) + (global $~lib/memory/__heap_base i32 (i32.const 19220)) (memory $0 1) (data (i32.const 12) "\1c\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") (data (i32.const 44) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00$\00\00\00I\00n\00d\00e\00x\00 \00o\00u\00t\00 \00o\00f\00 \00r\00a\00n\00g\00e\00\00\00\00\00\00\00\00\00") @@ -69,21 +69,21 @@ (data (i32.const 972) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00c\00a\00m\00e\00l\00\00\00") (data (i32.const 1004) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00d\00u\00c\00k\00\00\00\00\00") (data (i32.const 1036) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\00e\00l\00e\00p\00h\00a\00n\00t\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 1084) ",\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\14\00\00\00\a0\03\00\00\c0\03\00\00\e0\03\00\00\00\04\00\00 \04\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 1084) ",\00\00\00\00\00\00\00\00\00\00\00\07\00\00\00\14\00\00\00\a0\03\00\00\c0\03\00\00\e0\03\00\00\00\04\00\00 \04\00\00\00\00\00\00\00\00\00\00") (data (i32.const 1132) "|\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 1260) ",\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\14\00\00\00\a0\03\00\00\c0\03\00\00\e0\03\00\00\00\04\00\00 \04\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 1260) ",\00\00\00\00\00\00\00\00\00\00\00\07\00\00\00\14\00\00\00\a0\03\00\00\c0\03\00\00\e0\03\00\00\00\04\00\00 \04\00\00\00\00\00\00\00\00\00\00") (data (i32.const 1308) "\1c\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 1340) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\00f\00o\00o\00\00\00\00\00\00\00") (data (i32.const 1372) "\1c\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\04\00\00\00P\05\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 1404) ",\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\14\00\00\00\a0\03\00\00\c0\03\00\00\e0\03\00\00\00\04\00\00 \04\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 1452) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\08\00\00\00\00\00\00\00\00\00\f8\7f\00\00\00\00") - (data (i32.const 1484) "\1c\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\04\00\00\00\00\00\c0\7f\00\00\00\00\00\00\00\00") + (data (i32.const 1404) ",\00\00\00\00\00\00\00\00\00\00\00\07\00\00\00\14\00\00\00\a0\03\00\00\c0\03\00\00\e0\03\00\00\00\04\00\00 \04\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 1452) "\1c\00\00\00\00\00\00\00\00\00\00\00\t\00\00\00\08\00\00\00\00\00\00\00\00\00\f8\7f\00\00\00\00") + (data (i32.const 1484) "\1c\00\00\00\00\00\00\00\00\00\00\00\n\00\00\00\04\00\00\00\00\00\c0\7f\00\00\00\00\00\00\00\00") (data (i32.const 1516) "\1c\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\0c\00\00\00\02\00\00\00\t\00\00\00\t\00\00\00") (data (i32.const 1548) ",\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\10\00\00\00\02\00\00\00\05\00\00\00\t\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 1596) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\08\00\00\00F\00i\00r\00e\00\00\00\00\00") (data (i32.const 1628) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\06\00\00\00A\00i\00r\00\00\00\00\00\00\00") (data (i32.const 1660) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\n\00\00\00W\00a\00t\00e\00r\00\00\00") - (data (i32.const 1692) "\1c\00\00\00\00\00\00\00\00\00\00\00\08\00\00\00\0c\00\00\00P\06\00\00p\06\00\00\90\06\00\00") + (data (i32.const 1692) "\1c\00\00\00\00\00\00\00\00\00\00\00\07\00\00\00\0c\00\00\00P\06\00\00p\06\00\00\90\06\00\00") (data (i32.const 1724) "\1c\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 1756) "\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 1788) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00F\00i\00r\00e\00,\00A\00i\00r\00,\00W\00a\00t\00e\00r\00") @@ -96,22 +96,22 @@ (data (i32.const 2092) "\1c\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") (data (i32.const 2124) ",\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\14\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00\04\00\00\00\05\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 2172) "\1c\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03\00\00\00") - (data (i32.const 2204) "\1c\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2236) "\1c\00\00\00\00\00\00\00\00\00\00\00\0d\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2268) "\1c\00\00\00\00\00\00\00\00\00\00\00\0e\00\00\00\08\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2300) "\1c\00\00\00\00\00\00\00\00\00\00\00\0f\00\00\00\08\00\00\00\04\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2332) "\1c\00\00\00\00\00\00\00\00\00\00\00\0f\00\00\00\08\00\00\00\05\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2364) "\1c\00\00\00\00\00\00\00\00\00\00\00\0e\00\00\00\08\00\00\00\06\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2396) "\1c\00\00\00\00\00\00\00\00\00\00\00\0e\00\00\00\08\00\00\00\07\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2428) "\1c\00\00\00\00\00\00\00\00\00\00\00\0e\00\00\00\08\00\00\00\08\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2460) "\1c\00\00\00\00\00\00\00\00\00\00\00\0e\00\00\00\08\00\00\00\t\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2492) "\1c\00\00\00\00\00\00\00\00\00\00\00\0e\00\00\00\08\00\00\00\n\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2524) "\1c\00\00\00\00\00\00\00\00\00\00\00\0e\00\00\00\08\00\00\00\0b\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2556) "\1c\00\00\00\00\00\00\00\00\00\00\00\0e\00\00\00\08\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2588) "\1c\00\00\00\00\00\00\00\00\00\00\00\0e\00\00\00\08\00\00\00\0d\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2204) "\1c\00\00\00\00\00\00\00\00\00\00\00\0b\00\00\00\08\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2236) "\1c\00\00\00\00\00\00\00\00\00\00\00\0c\00\00\00\08\00\00\00\02\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2268) "\1c\00\00\00\00\00\00\00\00\00\00\00\0d\00\00\00\08\00\00\00\03\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2300) "\1c\00\00\00\00\00\00\00\00\00\00\00\0e\00\00\00\08\00\00\00\04\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2332) "\1c\00\00\00\00\00\00\00\00\00\00\00\0e\00\00\00\08\00\00\00\05\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2364) "\1c\00\00\00\00\00\00\00\00\00\00\00\0d\00\00\00\08\00\00\00\06\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2396) "\1c\00\00\00\00\00\00\00\00\00\00\00\0d\00\00\00\08\00\00\00\07\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2428) "\1c\00\00\00\00\00\00\00\00\00\00\00\0d\00\00\00\08\00\00\00\08\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2460) "\1c\00\00\00\00\00\00\00\00\00\00\00\0d\00\00\00\08\00\00\00\t\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2492) "\1c\00\00\00\00\00\00\00\00\00\00\00\0d\00\00\00\08\00\00\00\n\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2524) "\1c\00\00\00\00\00\00\00\00\00\00\00\0d\00\00\00\08\00\00\00\0b\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2556) "\1c\00\00\00\00\00\00\00\00\00\00\00\0d\00\00\00\08\00\00\00\0c\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2588) "\1c\00\00\00\00\00\00\00\00\00\00\00\0d\00\00\00\08\00\00\00\0d\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 2620) ",\00\00\00\00\00\00\00\00\00\00\00\03\00\00\00\10\00\00\00\00\00\00\00\03\00\00\00\02\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2668) "\1c\00\00\00\00\00\00\00\00\00\00\00\10\00\00\00\08\00\00\00\0e\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 2704) "\11\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00$\t\00\00\00\00\00\00 \00\00\00\00\00\00\00\04A\00\00\00\00\00\00\02\t\00\00\00\00\00\00\02\01\00\00\00\00\00\00\04A\00\00\00\00\00\00\02A\00\00\00\00\00\00$\1a\00\00\00\00\00\00$\19\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2668) "\1c\00\00\00\00\00\00\00\00\00\00\00\0f\00\00\00\08\00\00\00\0e\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 2704) "\10\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00$\t\00\00\00\00\00\00 \00\00\00\00\00\00\00\04A\00\00\00\00\00\00\02\t\00\00\00\00\00\00\04A\00\00\00\00\00\00\02A\00\00\00\00\00\00$\1a\00\00\00\00\00\00$\19\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (table $0 15 15 funcref) (elem $0 (i32.const 1) $start:std/staticarray~anonymous|0 $start:std/staticarray~anonymous|1 $start:std/staticarray~anonymous|2 $start:std/staticarray~anonymous|3 $start:std/staticarray~anonymous|4 $start:std/staticarray~anonymous|5 $start:std/staticarray~anonymous|6 $start:std/staticarray~anonymous|7 $start:std/staticarray~anonymous|8 $start:std/staticarray~anonymous|9 $start:std/staticarray~anonymous|10 $start:std/staticarray~anonymous|11 $start:std/staticarray~anonymous|12 $~lib/util/sort/COMPARATOR~anonymous|0) (export "memory" (memory $0)) @@ -2385,11 +2385,6 @@ drop local.get $2 ) - (func $~lib/staticarray/StaticArray.concat (param $0 i32) (param $1 i32) (result i32) - local.get $0 - local.get $1 - call $~lib/staticarray/StaticArray#concat<~lib/staticarray/StaticArray> - ) (func $~lib/staticarray/StaticArray<~lib/string/String>#get:length (param $0 i32) (result i32) local.get $0 i32.const 20 @@ -4905,19 +4900,6 @@ local.get $1 call $~lib/array/Array#__visit ) - (func $~lib/array/Array#__visit (param $0 i32) (param $1 i32) - i32.const 0 - drop - local.get $0 - i32.load - local.get $1 - call $~lib/rt/itcms/__visit - ) - (func $~lib/array/Array~visit (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - call $~lib/array/Array#__visit - ) (func $~lib/staticarray/StaticArray<~lib/string/String>#__visit (param $0 i32) (param $1 i32) (local $2 i32) (local $3 i32) @@ -5079,46 +5061,40 @@ block $~lib/staticarray/StaticArray block $~lib/array/Array<~lib/string/String> block $~lib/staticarray/StaticArray<~lib/string/String> - block $~lib/array/Array - block $~lib/array/Array - block $~lib/staticarray/StaticArray - block $std/staticarray/Ref - block $~lib/staticarray/StaticArray - 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/staticarray/StaticArray $std/staticarray/Ref $~lib/staticarray/StaticArray $~lib/array/Array $~lib/array/Array $~lib/staticarray/StaticArray<~lib/string/String> $~lib/array/Array<~lib/string/String> $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32> $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>void> $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>bool> $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32> $~lib/function/Function<%28i32%2Ci32%29=>i32> $invalid - end - return + block $~lib/array/Array + block $~lib/staticarray/StaticArray + block $std/staticarray/Ref + block $~lib/staticarray/StaticArray + 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/staticarray/StaticArray $std/staticarray/Ref $~lib/staticarray/StaticArray $~lib/array/Array $~lib/staticarray/StaticArray<~lib/string/String> $~lib/array/Array<~lib/string/String> $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32> $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>void> $~lib/function/Function<%28i32%2Ci32%2C~lib/staticarray/StaticArray%29=>bool> $~lib/function/Function<%28i32%2Ci32%2Ci32%2C~lib/staticarray/StaticArray%29=>i32> $~lib/function/Function<%28i32%2Ci32%29=>i32> $invalid 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 return end - local.get $0 - local.get $1 - call $~lib/staticarray/StaticArray~visit return end local.get $0 local.get $1 - call $~lib/array/Array~visit + call $~lib/staticarray/StaticArray~visit return end local.get $0 local.get $1 - call $~lib/array/Array~visit + call $~lib/array/Array~visit return end local.get $0 @@ -5782,7 +5758,7 @@ local.get $5 i32.store offset=12 local.get $5 - call $~lib/staticarray/StaticArray.concat + call $~lib/staticarray/StaticArray#concat<~lib/staticarray/StaticArray> local.tee $1 i32.store offset=8 local.get $1 @@ -5809,7 +5785,7 @@ local.get $5 i32.store offset=12 local.get $5 - call $~lib/staticarray/StaticArray.concat + call $~lib/staticarray/StaticArray#concat<~lib/staticarray/StaticArray> local.tee $1 i32.store offset=8 local.get $1 @@ -5828,7 +5804,7 @@ end global.get $~lib/memory/__stack_pointer i32.const 20 - i32.const 8 + i32.const 7 i32.const 1104 call $~lib/rt/__newBuffer local.tee $1 @@ -6139,7 +6115,7 @@ end global.get $~lib/memory/__stack_pointer i32.const 20 - i32.const 8 + i32.const 7 i32.const 1280 call $~lib/rt/__newBuffer local.tee $0 @@ -6148,7 +6124,7 @@ local.get $0 i32.const 0 i32.const 2 - i32.const 9 + i32.const 8 i32.const 1328 call $~lib/rt/__newArray local.set $5 @@ -6179,7 +6155,7 @@ local.get $0 i32.const 1 i32.const 2 - i32.const 9 + i32.const 8 i32.const 1392 call $~lib/rt/__newArray local.set $5 @@ -6210,7 +6186,7 @@ drop global.get $~lib/memory/__stack_pointer i32.const 20 - i32.const 8 + i32.const 7 i32.const 1424 call $~lib/rt/__newBuffer local.tee $3 @@ -6296,7 +6272,7 @@ unreachable end i32.const 8 - i32.const 10 + i32.const 9 i32.const 1472 call $~lib/rt/__newBuffer local.set $5 @@ -6319,7 +6295,7 @@ unreachable end i32.const 4 - i32.const 11 + i32.const 10 i32.const 1504 call $~lib/rt/__newBuffer local.set $5 @@ -6526,7 +6502,7 @@ end global.get $~lib/memory/__stack_pointer i32.const 12 - i32.const 8 + i32.const 7 i32.const 1712 call $~lib/rt/__newBuffer local.tee $3 @@ -7603,7 +7579,7 @@ drop global.get $~lib/memory/__stack_pointer local.get $7 - i32.const 8 + i32.const 7 call $~lib/rt/itcms/__new local.tee $4 i32.store @@ -7758,7 +7734,7 @@ global.get $~lib/memory/__stack_pointer local.get $4 i32.const 2 - i32.const 9 + i32.const 8 i32.const 0 call $~lib/rt/__newArray local.tee $6 diff --git a/tests/compiler/std/staticarray.release.wat b/tests/compiler/std/staticarray.release.wat index a5ed392981..1259c33b08 100644 --- a/tests/compiler/std/staticarray.release.wat +++ b/tests/compiler/std/staticarray.release.wat @@ -26,7 +26,7 @@ (global $std/staticarray/arr4 (mut i32) (i32.const 0)) (global $~argumentsLength (mut i32) (i32.const 0)) (global $std/staticarray/maxVal (mut i32) (i32.const 0)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20252)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 20244)) (memory $0 1) (data (i32.const 1036) "\1c") (data (i32.const 1048) "\03\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03") @@ -72,23 +72,23 @@ (data (i32.const 2060) ",") (data (i32.const 2072) "\01\00\00\00\10\00\00\00e\00l\00e\00p\00h\00a\00n\00t") (data (i32.const 2108) ",") - (data (i32.const 2120) "\08\00\00\00\14\00\00\00\a0\07\00\00\c0\07\00\00\e0\07\00\00\00\08\00\00 \08") + (data (i32.const 2120) "\07\00\00\00\14\00\00\00\a0\07\00\00\c0\07\00\00\e0\07\00\00\00\08\00\00 \08") (data (i32.const 2156) "|") (data (i32.const 2168) "\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 2284) ",") - (data (i32.const 2296) "\08\00\00\00\14\00\00\00\a0\07\00\00\c0\07\00\00\e0\07\00\00\00\08\00\00 \08") + (data (i32.const 2296) "\07\00\00\00\14\00\00\00\a0\07\00\00\c0\07\00\00\e0\07\00\00\00\08\00\00 \08") (data (i32.const 2332) "\1c") (data (i32.const 2364) "\1c") (data (i32.const 2376) "\01\00\00\00\06\00\00\00f\00o\00o") (data (i32.const 2396) "\1c") (data (i32.const 2412) "\04\00\00\00P\t") (data (i32.const 2428) ",") - (data (i32.const 2440) "\08\00\00\00\14\00\00\00\a0\07\00\00\c0\07\00\00\e0\07\00\00\00\08\00\00 \08") + (data (i32.const 2440) "\07\00\00\00\14\00\00\00\a0\07\00\00\c0\07\00\00\e0\07\00\00\00\08\00\00 \08") (data (i32.const 2476) "\1c") - (data (i32.const 2488) "\n\00\00\00\08") + (data (i32.const 2488) "\t\00\00\00\08") (data (i32.const 2502) "\f8\7f") (data (i32.const 2508) "\1c") - (data (i32.const 2520) "\0b\00\00\00\04\00\00\00\00\00\c0\7f") + (data (i32.const 2520) "\n\00\00\00\04\00\00\00\00\00\c0\7f") (data (i32.const 2540) "\1c") (data (i32.const 2552) "\03\00\00\00\0c\00\00\00\02\00\00\00\t\00\00\00\t") (data (i32.const 2572) ",") @@ -100,7 +100,7 @@ (data (i32.const 2684) "\1c") (data (i32.const 2696) "\01\00\00\00\n\00\00\00W\00a\00t\00e\00r") (data (i32.const 2716) "\1c") - (data (i32.const 2728) "\08\00\00\00\0c\00\00\00P\n\00\00p\n\00\00\90\n") + (data (i32.const 2728) "\07\00\00\00\0c\00\00\00P\n\00\00p\n\00\00\90\n") (data (i32.const 2748) "\1c") (data (i32.const 2760) "\01") (data (i32.const 2780) "\1c") @@ -126,37 +126,37 @@ (data (i32.const 3196) "\1c") (data (i32.const 3208) "\03\00\00\00\0c\00\00\00\01\00\00\00\02\00\00\00\03") (data (i32.const 3228) "\1c") - (data (i32.const 3240) "\0c\00\00\00\08\00\00\00\01") + (data (i32.const 3240) "\0b\00\00\00\08\00\00\00\01") (data (i32.const 3260) "\1c") - (data (i32.const 3272) "\0d\00\00\00\08\00\00\00\02") + (data (i32.const 3272) "\0c\00\00\00\08\00\00\00\02") (data (i32.const 3292) "\1c") - (data (i32.const 3304) "\0e\00\00\00\08\00\00\00\03") + (data (i32.const 3304) "\0d\00\00\00\08\00\00\00\03") (data (i32.const 3324) "\1c") - (data (i32.const 3336) "\0f\00\00\00\08\00\00\00\04") + (data (i32.const 3336) "\0e\00\00\00\08\00\00\00\04") (data (i32.const 3356) "\1c") - (data (i32.const 3368) "\0f\00\00\00\08\00\00\00\05") + (data (i32.const 3368) "\0e\00\00\00\08\00\00\00\05") (data (i32.const 3388) "\1c") - (data (i32.const 3400) "\0e\00\00\00\08\00\00\00\06") + (data (i32.const 3400) "\0d\00\00\00\08\00\00\00\06") (data (i32.const 3420) "\1c") - (data (i32.const 3432) "\0e\00\00\00\08\00\00\00\07") + (data (i32.const 3432) "\0d\00\00\00\08\00\00\00\07") (data (i32.const 3452) "\1c") - (data (i32.const 3464) "\0e\00\00\00\08\00\00\00\08") + (data (i32.const 3464) "\0d\00\00\00\08\00\00\00\08") (data (i32.const 3484) "\1c") - (data (i32.const 3496) "\0e\00\00\00\08\00\00\00\t") + (data (i32.const 3496) "\0d\00\00\00\08\00\00\00\t") (data (i32.const 3516) "\1c") - (data (i32.const 3528) "\0e\00\00\00\08\00\00\00\n") + (data (i32.const 3528) "\0d\00\00\00\08\00\00\00\n") (data (i32.const 3548) "\1c") - (data (i32.const 3560) "\0e\00\00\00\08\00\00\00\0b") + (data (i32.const 3560) "\0d\00\00\00\08\00\00\00\0b") (data (i32.const 3580) "\1c") - (data (i32.const 3592) "\0e\00\00\00\08\00\00\00\0c") + (data (i32.const 3592) "\0d\00\00\00\08\00\00\00\0c") (data (i32.const 3612) "\1c") - (data (i32.const 3624) "\0e\00\00\00\08\00\00\00\0d") + (data (i32.const 3624) "\0d\00\00\00\08\00\00\00\0d") (data (i32.const 3644) ",") (data (i32.const 3656) "\03\00\00\00\10\00\00\00\00\00\00\00\03\00\00\00\02\00\00\00\01") (data (i32.const 3692) "\1c") - (data (i32.const 3704) "\10\00\00\00\08\00\00\00\0e") - (data (i32.const 3728) "\11\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 3756) "$\t\00\00\00\00\00\00 \00\00\00\00\00\00\00\04A\00\00\00\00\00\00\02\t\00\00\00\00\00\00\02\01\00\00\00\00\00\00\04A\00\00\00\00\00\00\02A\00\00\00\00\00\00$\1a\00\00\00\00\00\00$\19") + (data (i32.const 3704) "\0f\00\00\00\08\00\00\00\0e") + (data (i32.const 3728) "\10\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 3756) "$\t\00\00\00\00\00\00 \00\00\00\00\00\00\00\04A\00\00\00\00\00\00\02\t\00\00\00\00\00\00\04A\00\00\00\00\00\00\02A\00\00\00\00\00\00$\1a\00\00\00\00\00\00$\19") (table $0 15 15 funcref) (elem $0 (i32.const 1) $start:std/staticarray~anonymous|0 $start:std/staticarray~anonymous|1 $start:std/staticarray~anonymous|2 $start:std/staticarray~anonymous|3 $start:std/staticarray~anonymous|3 $start:std/staticarray~anonymous|5 $start:std/staticarray~anonymous|6 $start:std/staticarray~anonymous|7 $start:std/staticarray~anonymous|8 $start:std/staticarray~anonymous|5 $start:std/staticarray~anonymous|6 $start:std/staticarray~anonymous|5 $start:std/staticarray~anonymous|6 $~lib/util/sort/COMPARATOR~anonymous|0) (export "memory" (memory $0)) @@ -304,7 +304,7 @@ if i32.const 0 local.get $0 - i32.const 20252 + i32.const 20244 i32.lt_u local.get $0 i32.load offset=8 @@ -997,7 +997,7 @@ (local $1 i32) (local $2 i32) local.get $0 - i32.const 20252 + i32.const 20244 i32.lt_u if return @@ -1125,7 +1125,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 20252 + i32.const 20244 i32.lt_u if local.get $0 @@ -1225,7 +1225,7 @@ unreachable end local.get $0 - i32.const 20252 + i32.const 20244 i32.lt_u if local.get $0 @@ -1736,83 +1736,6 @@ i32.add i32.load ) - (func $~lib/staticarray/StaticArray.concat (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.sub - global.set $~lib/memory/__stack_pointer - global.get $~lib/memory/__stack_pointer - i32.const 3868 - i32.lt_s - if - i32.const 20272 - i32.const 20320 - i32.const 1 - i32.const 1 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - i32.const 0 - i32.store - local.get $0 - i32.const 20 - i32.sub - i32.load offset=16 - i32.const 2 - i32.shr_u - local.tee $3 - local.get $1 - i32.const 20 - i32.sub - i32.load offset=16 - i32.const 2 - i32.shr_u - local.tee $2 - i32.add - local.tee $4 - i32.const 268435455 - i32.gt_u - if - i32.const 1680 - i32.const 1152 - i32.const 222 - i32.const 7 - call $~lib/builtins/abort - unreachable - end - global.get $~lib/memory/__stack_pointer - local.get $4 - i32.const 2 - i32.shl - i32.const 3 - call $~lib/rt/itcms/__new - local.tee $4 - i32.store - local.get $4 - local.get $0 - local.get $3 - i32.const 2 - i32.shl - local.tee $0 - memory.copy - local.get $0 - local.get $4 - i32.add - local.get $1 - local.get $2 - i32.const 2 - i32.shl - memory.copy - global.get $~lib/memory/__stack_pointer - i32.const 4 - i32.add - global.set $~lib/memory/__stack_pointer - local.get $4 - ) (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) @@ -1938,7 +1861,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3868 + i32.const 3860 i32.lt_s if i32.const 20272 @@ -2933,7 +2856,7 @@ i32.const 8 i32.sub i32.load - br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $folding-inner1 $~lib/staticarray/StaticArray $std/staticarray/Ref $~lib/staticarray/StaticArray $folding-inner1 $folding-inner1 $~lib/staticarray/StaticArray<~lib/string/String> $~lib/array/Array<~lib/string/String> $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $invalid + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $folding-inner1 $~lib/staticarray/StaticArray $std/staticarray/Ref $~lib/staticarray/StaticArray $folding-inner1 $~lib/staticarray/StaticArray<~lib/string/String> $~lib/array/Array<~lib/string/String> $~lib/staticarray/StaticArray $~lib/staticarray/StaticArray $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $folding-inner0 $invalid end return end @@ -3028,7 +2951,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 3868 + i32.const 3860 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -3161,7 +3084,7 @@ memory.size i32.const 16 i32.shl - i32.const 20252 + i32.const 20244 i32.sub i32.const 1 i32.shr_u @@ -3346,7 +3269,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3868 + i32.const 3860 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -3517,7 +3440,7 @@ i32.store offset=12 local.get $2 local.get $6 - call $~lib/staticarray/StaticArray.concat + call $~lib/staticarray/StaticArray#concat<~lib/staticarray/StaticArray> local.tee $0 i32.store offset=8 local.get $0 @@ -3549,7 +3472,7 @@ i32.store offset=12 local.get $2 local.get $6 - call $~lib/staticarray/StaticArray.concat + call $~lib/staticarray/StaticArray#concat<~lib/staticarray/StaticArray> local.tee $0 i32.store offset=8 local.get $0 @@ -3575,7 +3498,7 @@ end global.get $~lib/memory/__stack_pointer i32.const 20 - i32.const 8 + i32.const 7 call $~lib/rt/itcms/__new local.tee $2 i32.const 2128 @@ -3917,7 +3840,7 @@ end global.get $~lib/memory/__stack_pointer i32.const 20 - i32.const 8 + i32.const 7 call $~lib/rt/itcms/__new local.tee $1 i32.const 2304 @@ -3927,7 +3850,7 @@ i32.store offset=4 global.get $~lib/memory/__stack_pointer i32.const 0 - i32.const 9 + i32.const 8 i32.const 2352 call $~lib/rt/__newArray local.set $2 @@ -3958,7 +3881,7 @@ end global.get $~lib/memory/__stack_pointer i32.const 1 - i32.const 9 + i32.const 8 i32.const 2416 call $~lib/rt/__newArray local.set $2 @@ -3991,7 +3914,7 @@ end global.get $~lib/memory/__stack_pointer i32.const 20 - i32.const 8 + i32.const 7 call $~lib/rt/itcms/__new local.tee $1 i32.const 2448 @@ -4065,7 +3988,7 @@ end block $__inlined_func$~lib/staticarray/StaticArray#includes (result i32) i32.const 8 - i32.const 10 + i32.const 9 call $~lib/rt/itcms/__new local.tee $0 i32.const 2496 @@ -4128,7 +4051,7 @@ end block $__inlined_func$~lib/staticarray/StaticArray#includes (result i32) i32.const 4 - i32.const 11 + i32.const 10 call $~lib/rt/itcms/__new local.tee $0 i32.const 2528 @@ -4813,7 +4736,7 @@ end global.get $~lib/memory/__stack_pointer i32.const 12 - i32.const 8 + i32.const 7 call $~lib/rt/itcms/__new local.tee $1 i32.const 2736 @@ -4966,7 +4889,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3868 + i32.const 3860 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -5315,7 +5238,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3868 + i32.const 3860 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -5475,7 +5398,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3868 + i32.const 3860 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -6243,7 +6166,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3868 + i32.const 3860 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -6326,7 +6249,7 @@ call $~lib/builtins/abort unreachable end - i32.const 20252 + i32.const 20244 global.set $~lib/memory/__stack_pointer global.get $~lib/rt/itcms/state i32.const 0 @@ -6381,7 +6304,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3868 + i32.const 3860 i32.lt_s if i32.const 20272 @@ -6416,7 +6339,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3868 + i32.const 3860 i32.lt_s if i32.const 20272 @@ -6483,7 +6406,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3868 + i32.const 3860 i32.lt_s if i32.const 20272 @@ -6518,6 +6441,83 @@ global.set $~lib/memory/__stack_pointer local.get $1 ) + (func $~lib/staticarray/StaticArray#concat<~lib/staticarray/StaticArray> (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 3860 + i32.lt_s + if + i32.const 20272 + i32.const 20320 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store + local.get $0 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u + local.tee $3 + local.get $1 + i32.const 20 + i32.sub + i32.load offset=16 + i32.const 2 + i32.shr_u + local.tee $2 + i32.add + local.tee $4 + i32.const 268435455 + i32.gt_u + if + i32.const 1680 + i32.const 1152 + i32.const 222 + i32.const 7 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.get $4 + i32.const 2 + i32.shl + i32.const 3 + call $~lib/rt/itcms/__new + local.tee $4 + i32.store + local.get $4 + local.get $0 + local.get $3 + i32.const 2 + i32.shl + local.tee $0 + memory.copy + local.get $0 + local.get $4 + i32.add + local.get $1 + local.get $2 + i32.const 2 + i32.shl + memory.copy + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $4 + ) (func $~lib/staticarray/StaticArray<~lib/string/String>#slice<~lib/staticarray/StaticArray<~lib/string/String>> (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) @@ -6526,7 +6526,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3868 + i32.const 3860 i32.lt_s if i32.const 20272 @@ -6606,7 +6606,7 @@ i32.const 2 i32.shl local.tee $3 - i32.const 8 + i32.const 7 call $~lib/rt/itcms/__new local.tee $4 i32.store @@ -6652,7 +6652,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3868 + i32.const 3860 i32.lt_s if i32.const 20272 @@ -6718,7 +6718,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3868 + i32.const 3860 i32.lt_s if i32.const 20272 @@ -6759,7 +6759,7 @@ local.set $6 global.get $~lib/memory/__stack_pointer local.get $3 - i32.const 9 + i32.const 8 i32.const 0 call $~lib/rt/__newArray local.tee $2 @@ -6855,7 +6855,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 3868 + i32.const 3860 i32.lt_s if i32.const 20272 diff --git a/tests/compiler/std/staticarray.ts b/tests/compiler/std/staticarray.ts index a1e6656590..3220c4f769 100644 --- a/tests/compiler/std/staticarray.ts +++ b/tests/compiler/std/staticarray.ts @@ -65,9 +65,9 @@ arr4 = changetype>(0); { let source: StaticArray = [1, 2]; - let result = StaticArray.concat(source, [1]); + let result = source.concat>([1]); assert(result.length == 3); - result = StaticArray.concat(source, []); + result = source.concat>([]); assert(result.length == source.length); } From a23bc1134c07b88d611e6f7e6bd8ba52b2ecee01 Mon Sep 17 00:00:00 2001 From: MaxGraey Date: Sun, 7 Aug 2022 08:13:55 +0300 Subject: [PATCH 7/7] upd --- tests/compiler/bindings/esm.debug.wat | 6 +++--- tests/compiler/bindings/esm.release.wat | 6 +++--- tests/compiler/bindings/raw.debug.wat | 6 +++--- tests/compiler/bindings/raw.release.wat | 6 +++--- tests/compiler/std/staticarray.debug.wat | 9 ++------- tests/compiler/std/staticarray.release.wat | 9 ++------- 6 files changed, 16 insertions(+), 26 deletions(-) diff --git a/tests/compiler/bindings/esm.debug.wat b/tests/compiler/bindings/esm.debug.wat index 56988bda2a..7a2a0db5f6 100644 --- a/tests/compiler/bindings/esm.debug.wat +++ b/tests/compiler/bindings/esm.debug.wat @@ -2425,7 +2425,7 @@ if i32.const 528 i32.const 832 - i32.const 118 + i32.const 78 i32.const 41 call $~lib/builtins/abort unreachable @@ -2460,7 +2460,7 @@ if i32.const 528 i32.const 832 - i32.const 133 + i32.const 93 i32.const 41 call $~lib/builtins/abort unreachable @@ -3661,7 +3661,7 @@ if i32.const 224 i32.const 832 - i32.const 91 + i32.const 51 i32.const 60 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/bindings/esm.release.wat b/tests/compiler/bindings/esm.release.wat index 26b9adac80..966856ec7e 100644 --- a/tests/compiler/bindings/esm.release.wat +++ b/tests/compiler/bindings/esm.release.wat @@ -1727,7 +1727,7 @@ if i32.const 1552 i32.const 1856 - i32.const 118 + i32.const 78 i32.const 41 call $~lib/builtins/abort unreachable @@ -1751,7 +1751,7 @@ if i32.const 1552 i32.const 1856 - i32.const 133 + i32.const 93 i32.const 41 call $~lib/builtins/abort unreachable @@ -2832,7 +2832,7 @@ if i32.const 1248 i32.const 1856 - i32.const 91 + i32.const 51 i32.const 60 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/bindings/raw.debug.wat b/tests/compiler/bindings/raw.debug.wat index 7c23f4afbb..e06762f954 100644 --- a/tests/compiler/bindings/raw.debug.wat +++ b/tests/compiler/bindings/raw.debug.wat @@ -2428,7 +2428,7 @@ if i32.const 528 i32.const 832 - i32.const 118 + i32.const 78 i32.const 41 call $~lib/builtins/abort unreachable @@ -2463,7 +2463,7 @@ if i32.const 528 i32.const 832 - i32.const 133 + i32.const 93 i32.const 41 call $~lib/builtins/abort unreachable @@ -3664,7 +3664,7 @@ if i32.const 224 i32.const 832 - i32.const 91 + i32.const 51 i32.const 60 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/bindings/raw.release.wat b/tests/compiler/bindings/raw.release.wat index 4dbc23bff9..bd048982a0 100644 --- a/tests/compiler/bindings/raw.release.wat +++ b/tests/compiler/bindings/raw.release.wat @@ -1727,7 +1727,7 @@ if i32.const 1552 i32.const 1856 - i32.const 118 + i32.const 78 i32.const 41 call $~lib/builtins/abort unreachable @@ -1751,7 +1751,7 @@ if i32.const 1552 i32.const 1856 - i32.const 133 + i32.const 93 i32.const 41 call $~lib/builtins/abort unreachable @@ -2832,7 +2832,7 @@ if i32.const 1248 i32.const 1856 - i32.const 91 + i32.const 51 i32.const 60 call $~lib/builtins/abort unreachable diff --git a/tests/compiler/std/staticarray.debug.wat b/tests/compiler/std/staticarray.debug.wat index ca5094e98e..494edb2601 100644 --- a/tests/compiler/std/staticarray.debug.wat +++ b/tests/compiler/std/staticarray.debug.wat @@ -7433,7 +7433,7 @@ if i32.const 656 i32.const 128 - i32.const 222 + i32.const 178 i32.const 7 call $~lib/builtins/abort unreachable @@ -7721,13 +7721,8 @@ if i32.const 656 i32.const 128 -<<<<<<< HEAD - i32.const 222 + i32.const 178 i32.const 7 -======= - i32.const 217 - i32.const 60 ->>>>>>> main call $~lib/builtins/abort unreachable end diff --git a/tests/compiler/std/staticarray.release.wat b/tests/compiler/std/staticarray.release.wat index 6927fcaad3..aa746c7fdb 100644 --- a/tests/compiler/std/staticarray.release.wat +++ b/tests/compiler/std/staticarray.release.wat @@ -6484,7 +6484,7 @@ if i32.const 1680 i32.const 1152 - i32.const 222 + i32.const 178 i32.const 7 call $~lib/builtins/abort unreachable @@ -6748,13 +6748,8 @@ if i32.const 1680 i32.const 1152 -<<<<<<< HEAD - i32.const 222 + i32.const 178 i32.const 7 -======= - i32.const 217 - i32.const 60 ->>>>>>> main call $~lib/builtins/abort unreachable end