diff --git a/std/assembly/array.ts b/std/assembly/array.ts index 67051cbf..2ef05f70 100644 --- a/std/assembly/array.ts +++ b/std/assembly/array.ts @@ -34,6 +34,22 @@ export class Array extends ArrayBufferView { constructor(length: i32 = 0) { super(length, alignof()); + if (isReference()) { + if (!isNullable()) { + let cur = this.dataStart; + let end = cur + (length << alignof()); + while (cur < end) { + // TODO: probably a common reason for complaints of T not having a default ctor. what if + // the array ctor would also take default arguments, like `new Array(10, ...args)`? + store(cur, + isString() + ? "" // no need to instantiate + : RETAIN(instantiate(), this) + ); + cur += sizeof(); + } + } + } this.length_ = length; } diff --git a/std/assembly/runtime.ts b/std/assembly/runtime.ts index 8ee4d5ba..7df000f9 100644 --- a/std/assembly/runtime.ts +++ b/std/assembly/runtime.ts @@ -19,7 +19,7 @@ import { HEAP_BASE, memory } from "./memory"; // Changes the size of a previously allocated, but not yet registered, runtime object, for // example when a pre-allocated buffer turned out to be too small or too large. This works by // aligning dynamic allocations to actual block size internally so in the best case REALLOCATE -// only updates payload size while in the worst case moves the object to larger a block. +// only updates payload size while in the worst case moves the object to a larger block. // // DISCARD(ref) // ------------ diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 6cb604ef..a1982e5b 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -2143,7 +2143,7 @@ if i32.const 0 i32.const 272 - i32.const 69 + i32.const 85 i32.const 61 call $~lib/env/abort unreachable @@ -2284,7 +2284,7 @@ if i32.const 0 i32.const 272 - i32.const 69 + i32.const 85 i32.const 61 call $~lib/env/abort unreachable @@ -2531,7 +2531,7 @@ if i32.const 0 i32.const 272 - i32.const 204 + i32.const 220 i32.const 20 call $~lib/env/abort unreachable @@ -2798,7 +2798,7 @@ if i32.const 0 i32.const 272 - i32.const 265 + i32.const 281 i32.const 20 call $~lib/env/abort unreachable @@ -3575,7 +3575,7 @@ if i32.const 0 i32.const 272 - i32.const 69 + i32.const 85 i32.const 61 call $~lib/env/abort unreachable @@ -4326,7 +4326,7 @@ if i32.const 0 i32.const 272 - i32.const 377 + i32.const 393 i32.const 4 call $~lib/env/abort unreachable @@ -4822,7 +4822,7 @@ if i32.const 0 i32.const 272 - i32.const 377 + i32.const 393 i32.const 4 call $~lib/env/abort unreachable @@ -4920,7 +4920,7 @@ if i32.const 0 i32.const 272 - i32.const 69 + i32.const 85 i32.const 61 call $~lib/env/abort unreachable @@ -5341,7 +5341,7 @@ if i32.const 0 i32.const 272 - i32.const 377 + i32.const 393 i32.const 4 call $~lib/env/abort unreachable @@ -5596,6 +5596,9 @@ ) (func $~lib/array/Array>#constructor (; 101 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) i32.const 16 call $~lib/runtime/doAllocate i32.const 11 @@ -5607,6 +5610,34 @@ i32.const 0 i32.store offset=12 local.get $1 + i32.load offset=4 + local.tee $2 + local.get $0 + i32.const 2 + i32.shl + i32.add + local.set $3 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + i32.const 0 + call $~lib/array/Array#constructor + local.tee $4 + local.get $1 + call $~lib/runtime/doRetain + local.get $2 + local.get $4 + i32.store + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + local.get $1 local.get $0 i32.store offset=12 local.get $1 @@ -5715,7 +5746,7 @@ if i32.const 0 i32.const 272 - i32.const 377 + i32.const 393 i32.const 4 call $~lib/env/abort unreachable @@ -5783,7 +5814,18 @@ unreachable end ) - (func $std/array/createReverseOrderedElementsArray (; 107 ;) (type $FUNCSIG$i) (result i32) + (func $std/array/Proxy#constructor (; 107 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + i32.const 4 + call $~lib/runtime/doAllocate + i32.const 13 + call $~lib/runtime/doRegister + local.tee $1 + local.get $0 + i32.store + local.get $1 + ) + (func $~lib/array/Array>#constructor (; 108 ;) (type $FUNCSIG$i) (result i32) (local $0 i32) (local $1 i32) (local $2 i32) @@ -5799,31 +5841,56 @@ i32.const 0 i32.store offset=12 local.get $0 + i32.load offset=4 + local.tee $1 + i32.const 2048 + i32.add + local.set $2 + loop $continue|0 + local.get $1 + local.get $2 + i32.lt_u + if + i32.const 0 + call $std/array/Proxy#constructor + local.tee $3 + local.get $0 + call $~lib/runtime/doRetain + local.get $1 + local.get $3 + i32.store + local.get $1 + i32.const 4 + i32.add + local.set $1 + br $continue|0 + end + end + local.get $0 i32.const 512 i32.store offset=12 + local.get $0 + ) + (func $std/array/createReverseOrderedElementsArray (; 109 ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/array/Array>#constructor + local.set $0 loop $repeat|0 local.get $1 local.get $0 i32.load offset=12 i32.lt_s if + local.get $0 + local.get $1 local.get $0 i32.load offset=12 - local.set $2 - i32.const 4 - call $~lib/runtime/doAllocate - i32.const 13 - call $~lib/runtime/doRegister - local.tee $3 - local.get $2 i32.const 1 i32.sub local.get $1 i32.sub - i32.store - local.get $0 - local.get $1 - local.get $3 + call $std/array/Proxy#constructor call $~lib/array/Array>#__set local.get $1 i32.const 1 @@ -5834,14 +5901,14 @@ end local.get $0 ) - (func $start:std/array~anonymous|48 (; 108 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $start:std/array~anonymous|48 (; 110 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.load local.get $1 i32.load i32.sub ) - (func $~lib/util/string/compareImpl (; 109 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/string/compareImpl (; 111 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) loop $continue|0 local.get $2 @@ -5874,7 +5941,7 @@ end local.get $3 ) - (func $~lib/util/sort/COMPARATOR~anonymous|0 (; 110 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/util/sort/COMPARATOR~anonymous|0 (; 112 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -5951,7 +6018,7 @@ select call $~lib/util/string/compareImpl ) - (func $std/array/assertSorted|trampoline (; 111 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $std/array/assertSorted|trampoline (; 113 ;) (type $FUNCSIG$vi) (param $0 i32) (local $1 i32) block $1of1 block $0of1 @@ -5970,7 +6037,7 @@ local.get $1 call $std/array/assertSorted> ) - (func $~lib/string/String.__eq (; 112 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__eq (; 114 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 local.get $1 @@ -6016,7 +6083,7 @@ call $~lib/util/string/compareImpl i32.eqz ) - (func $std/array/isArraysEqual (; 113 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $std/array/isArraysEqual (; 115 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) local.get $0 @@ -6063,7 +6130,47 @@ end i32.const 1 ) - (func $~lib/string/String#charAt (; 114 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#constructor (; 116 ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + i32.const 16 + call $~lib/runtime/doAllocate + i32.const 14 + call $~lib/runtime/doRegister + i32.const 400 + i32.const 2 + call $~lib/runtime/ArrayBufferView#constructor + local.tee $1 + i32.const 0 + i32.store offset=12 + local.get $1 + i32.load offset=4 + local.tee $0 + i32.const 1600 + i32.add + local.set $2 + loop $continue|0 + local.get $0 + local.get $2 + i32.lt_u + if + local.get $0 + i32.const 4200 + i32.store + local.get $0 + i32.const 4 + i32.add + local.set $0 + br $continue|0 + end + end + local.get $1 + i32.const 400 + i32.store offset=12 + local.get $1 + ) + (func $~lib/string/String#charAt (; 117 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 i32.const 3020 @@ -6089,7 +6196,7 @@ i32.const 1 call $~lib/runtime/doRegister ) - (func $~lib/string/String#concat (; 115 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String#concat (; 118 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -6138,7 +6245,7 @@ i32.const 1 call $~lib/runtime/doRegister ) - (func $~lib/string/String.__concat (; 116 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__concat (; 119 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.const 4424 local.get $0 @@ -6146,7 +6253,7 @@ local.get $1 call $~lib/string/String#concat ) - (func $std/array/createRandomString (; 117 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $std/array/createRandomString (; 120 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) i32.const 4200 @@ -6178,22 +6285,11 @@ end local.get $1 ) - (func $std/array/createRandomStringArray (; 118 ;) (type $FUNCSIG$i) (result i32) + (func $std/array/createRandomStringArray (; 121 ;) (type $FUNCSIG$i) (result i32) (local $0 i32) (local $1 i32) - i32.const 16 - call $~lib/runtime/doAllocate - i32.const 14 - call $~lib/runtime/doRegister - i32.const 400 - i32.const 2 - call $~lib/runtime/ArrayBufferView#constructor - local.tee $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 400 - i32.store offset=12 + call $~lib/array/Array#constructor + local.set $0 loop $repeat|0 local.get $1 local.get $0 @@ -6217,7 +6313,7 @@ end local.get $0 ) - (func $~lib/string/String#substring (; 119 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String#substring (; 122 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -6315,7 +6411,7 @@ i32.const 1 call $~lib/runtime/doRegister ) - (func $~lib/array/Array#join_bool (; 120 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#join_bool (; 123 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -6467,7 +6563,7 @@ i32.const 1 call $~lib/runtime/doRegister ) - (func $~lib/util/number/decimalCount32 (; 121 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/decimalCount32 (; 124 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 100000 i32.lt_u @@ -6521,7 +6617,7 @@ end end ) - (func $~lib/util/number/utoa32_lut (; 122 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/util/number/utoa32_lut (; 125 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) i32.const 5092 @@ -6631,7 +6727,7 @@ i32.store16 end ) - (func $~lib/util/number/itoa32 (; 123 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/itoa32 (; 126 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -6673,7 +6769,7 @@ i32.const 1 call $~lib/runtime/doRegister ) - (func $~lib/util/number/itoa_stream (; 124 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_stream (; 127 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $1 i32.const 1 i32.shl @@ -6717,7 +6813,7 @@ end local.get $2 ) - (func $~lib/array/Array#join_int (; 125 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join_int (; 128 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -6835,12 +6931,12 @@ i32.const 1 call $~lib/runtime/doRegister ) - (func $~lib/array/Array#join (; 126 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join (; 129 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 call $~lib/array/Array#join_int ) - (func $~lib/util/number/utoa32 (; 127 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/utoa32 (; 130 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) local.get $0 @@ -6863,7 +6959,7 @@ i32.const 1 call $~lib/runtime/doRegister ) - (func $~lib/util/number/itoa_stream (; 128 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_stream (; 131 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $1 i32.const 1 i32.shl @@ -6887,7 +6983,7 @@ call $~lib/util/number/utoa32_lut local.get $0 ) - (func $~lib/array/Array#join_int (; 129 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join_int (; 132 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -7005,12 +7101,12 @@ i32.const 1 call $~lib/runtime/doRegister ) - (func $~lib/array/Array#join (; 130 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join (; 133 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 call $~lib/array/Array#join_int ) - (func $~lib/util/number/genDigits (; 131 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32) + (func $~lib/util/number/genDigits (; 134 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32) (local $7 i32) (local $8 i64) (local $9 i32) @@ -7421,7 +7517,7 @@ local.get $2 end ) - (func $~lib/util/number/prettify (; 132 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/prettify (; 135 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -7683,7 +7779,7 @@ end end ) - (func $~lib/util/number/dtoa_core (; 133 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) + (func $~lib/util/number/dtoa_core (; 136 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) (local $2 i64) (local $3 i32) (local $4 i64) @@ -7994,7 +8090,7 @@ local.get $11 i32.add ) - (func $~lib/util/number/dtoa (; 134 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) + (func $~lib/util/number/dtoa (; 137 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) (local $1 i32) (local $2 i32) local.get $0 @@ -8039,7 +8135,7 @@ call $~lib/runtime/assertUnregistered local.get $1 ) - (func $~lib/util/number/dtoa_stream (; 135 ;) (type $FUNCSIG$iiid) (param $0 i32) (param $1 i32) (param $2 f64) (result i32) + (func $~lib/util/number/dtoa_stream (; 138 ;) (type $FUNCSIG$iiid) (param $0 i32) (param $1 i32) (param $2 f64) (result i32) local.get $1 i32.const 1 i32.shl @@ -8108,7 +8204,7 @@ local.get $2 call $~lib/util/number/dtoa_core ) - (func $~lib/array/Array#join_flt (; 136 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#join_flt (; 139 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -8224,7 +8320,7 @@ i32.const 1 call $~lib/runtime/doRegister ) - (func $~lib/array/Array#join_str (; 137 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join_str (; 140 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -8391,18 +8487,18 @@ i32.const 1 call $~lib/runtime/doRegister ) - (func $~lib/array/Array#join (; 138 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join (; 141 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 call $~lib/array/Array#join_str ) - (func $std/array/Ref#constructor (; 139 ;) (type $FUNCSIG$i) (result i32) + (func $std/array/Ref#constructor (; 142 ;) (type $FUNCSIG$i) (result i32) i32.const 0 call $~lib/runtime/doAllocate i32.const 18 call $~lib/runtime/doRegister ) - (func $~lib/array/Array#join_ref (; 140 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#join_ref (; 143 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -8535,12 +8631,12 @@ i32.const 1 call $~lib/runtime/doRegister ) - (func $~lib/array/Array#toString (; 141 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#toString (; 144 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 4528 call $~lib/array/Array#join ) - (func $~lib/util/number/itoa_stream (; 142 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_stream (; 145 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) local.get $1 i32.const 1 @@ -8595,7 +8691,7 @@ end local.get $1 ) - (func $~lib/array/Array#join_int (; 143 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#join_int (; 146 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -8707,7 +8803,7 @@ i32.const 1 call $~lib/runtime/doRegister ) - (func $~lib/util/number/itoa_stream (; 144 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_stream (; 147 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $1 i32.const 1 i32.shl @@ -8737,7 +8833,7 @@ call $~lib/util/number/utoa32_lut local.get $1 ) - (func $~lib/array/Array#join_int (; 145 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#join_int (; 148 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -8853,7 +8949,7 @@ i32.const 1 call $~lib/runtime/doRegister ) - (func $~lib/util/number/decimalCount64 (; 146 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/decimalCount64 (; 149 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) local.get $0 i64.const 1000000000000000 i64.lt_u @@ -8907,7 +9003,7 @@ end end ) - (func $~lib/util/number/utoa64_lut (; 147 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) + (func $~lib/util/number/utoa64_lut (; 150 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -9004,7 +9100,7 @@ local.get $2 call $~lib/util/number/utoa32_lut ) - (func $~lib/util/number/utoa64 (; 148 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/utoa64 (; 151 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -9046,7 +9142,7 @@ i32.const 1 call $~lib/runtime/doRegister ) - (func $~lib/util/number/itoa_stream (; 149 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32) + (func $~lib/util/number/itoa_stream (; 152 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32) (local $3 i32) local.get $1 i32.const 1 @@ -9086,7 +9182,7 @@ end local.get $1 ) - (func $~lib/array/Array#join_int (; 150 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#join_int (; 153 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -9202,7 +9298,7 @@ i32.const 1 call $~lib/runtime/doRegister ) - (func $~lib/util/number/itoa64 (; 151 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/util/number/itoa64 (; 154 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -9267,7 +9363,7 @@ i32.const 1 call $~lib/runtime/doRegister ) - (func $~lib/util/number/itoa_stream (; 152 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32) + (func $~lib/util/number/itoa_stream (; 155 ;) (type $FUNCSIG$iiij) (param $0 i32) (param $1 i32) (param $2 i64) (result i32) (local $3 i32) (local $4 i32) local.get $1 @@ -9330,7 +9426,7 @@ end local.get $1 ) - (func $~lib/array/Array#join_int (; 153 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#join_int (; 156 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -9446,12 +9542,12 @@ i32.const 1 call $~lib/runtime/doRegister ) - (func $~lib/array/Array#toString (; 154 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#toString (; 157 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 4528 call $~lib/array/Array#join ) - (func $~lib/array/Array>#join_arr (; 155 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array>#join_arr (; 158 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -9544,7 +9640,64 @@ local.get $1 end ) - (func $~lib/util/number/itoa_stream (; 156 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/array/Array>#constructor (; 159 ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + i32.const 16 + call $~lib/runtime/doAllocate + i32.const 23 + call $~lib/runtime/doRegister + i32.const 2 + i32.const 2 + call $~lib/runtime/ArrayBufferView#constructor + local.tee $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const 8 + i32.add + local.set $3 + loop $continue|0 + local.get $1 + local.get $3 + i32.lt_u + if + i32.const 16 + call $~lib/runtime/doAllocate + i32.const 7 + call $~lib/runtime/doRegister + i32.const 0 + i32.const 0 + call $~lib/runtime/ArrayBufferView#constructor + local.tee $2 + i32.const 0 + i32.store offset=12 + local.get $2 + i32.const 0 + i32.store offset=12 + local.get $2 + local.get $0 + call $~lib/runtime/doRetain + local.get $1 + local.get $2 + i32.store + local.get $1 + i32.const 4 + i32.add + local.set $1 + br $continue|0 + end + end + local.get $0 + i32.const 2 + i32.store offset=12 + local.get $0 + ) + (func $~lib/util/number/itoa_stream (; 160 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) local.get $1 i32.const 1 i32.shl @@ -9574,7 +9727,7 @@ call $~lib/util/number/utoa32_lut local.get $1 ) - (func $~lib/array/Array#join_int (; 157 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array#join_int (; 161 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -9686,7 +9839,7 @@ i32.const 1 call $~lib/runtime/doRegister ) - (func $~lib/array/Array>#join_arr (; 158 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array>#join_arr (; 162 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -9776,7 +9929,112 @@ local.get $1 end ) - (func $~lib/array/Array>#join_arr (; 159 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array>#constructor (; 163 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + i32.const 16 + call $~lib/runtime/doAllocate + i32.const 24 + call $~lib/runtime/doRegister + local.get $0 + i32.const 2 + call $~lib/runtime/ArrayBufferView#constructor + local.tee $1 + i32.const 0 + i32.store offset=12 + local.get $1 + i32.load offset=4 + local.tee $2 + local.get $0 + i32.const 2 + i32.shl + i32.add + local.set $4 + loop $continue|0 + local.get $2 + local.get $4 + i32.lt_u + if + i32.const 16 + call $~lib/runtime/doAllocate + i32.const 8 + call $~lib/runtime/doRegister + i32.const 0 + i32.const 2 + call $~lib/runtime/ArrayBufferView#constructor + local.tee $3 + i32.const 0 + i32.store offset=12 + local.get $3 + i32.const 0 + i32.store offset=12 + local.get $3 + local.get $1 + call $~lib/runtime/doRetain + local.get $2 + local.get $3 + i32.store + local.get $2 + i32.const 4 + i32.add + local.set $2 + br $continue|0 + end + end + local.get $1 + local.get $0 + i32.store offset=12 + local.get $1 + ) + (func $~lib/array/Array>>#constructor (; 164 ;) (type $FUNCSIG$i) (result i32) + (local $0 i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + i32.const 16 + call $~lib/runtime/doAllocate + i32.const 25 + call $~lib/runtime/doRegister + i32.const 1 + i32.const 2 + call $~lib/runtime/ArrayBufferView#constructor + local.tee $0 + i32.const 0 + i32.store offset=12 + local.get $0 + i32.load offset=4 + local.tee $1 + i32.const 4 + i32.add + local.set $2 + loop $continue|0 + local.get $1 + local.get $2 + i32.lt_u + if + i32.const 0 + call $~lib/array/Array>#constructor + local.tee $3 + local.get $0 + call $~lib/runtime/doRetain + local.get $1 + local.get $3 + i32.store + local.get $1 + i32.const 4 + i32.add + local.set $1 + br $continue|0 + end + end + local.get $0 + i32.const 1 + i32.store offset=12 + local.get $0 + ) + (func $~lib/array/Array>#join_arr (; 165 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -9869,7 +10127,7 @@ local.get $1 end ) - (func $~lib/array/Array>>#join_arr (; 160 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array>>#join_arr (; 166 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -9959,7 +10217,7 @@ local.get $1 end ) - (func $start:std/array (; 161 ;) (type $FUNCSIG$v) + (func $start:std/array (; 167 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) @@ -14158,20 +14416,8 @@ call $~lib/env/abort unreachable end - i32.const 16 - call $~lib/runtime/doAllocate - i32.const 23 - call $~lib/runtime/doRegister - i32.const 2 - i32.const 2 - call $~lib/runtime/ArrayBufferView#constructor + call $~lib/array/Array>#constructor local.tee $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 2 - i32.store offset=12 - local.get $0 i32.load offset=4 local.set $2 i32.const 7936 @@ -14209,36 +14455,13 @@ call $~lib/env/abort unreachable end - i32.const 16 - call $~lib/runtime/doAllocate - i32.const 25 - call $~lib/runtime/doRegister - i32.const 1 - i32.const 2 - call $~lib/runtime/ArrayBufferView#constructor + call $~lib/array/Array>>#constructor local.tee $0 - i32.const 0 - i32.store offset=12 - local.get $0 - i32.const 1 - i32.store offset=12 - local.get $0 i32.load offset=4 local.set $2 - i32.const 16 - call $~lib/runtime/doAllocate - i32.const 24 - call $~lib/runtime/doRegister i32.const 1 - i32.const 2 - call $~lib/runtime/ArrayBufferView#constructor + call $~lib/array/Array>#constructor local.tee $1 - i32.const 0 - i32.store offset=12 - local.get $1 - i32.const 1 - i32.store offset=12 - local.get $1 i32.load offset=4 local.set $3 i32.const 8056 @@ -14273,7 +14496,7 @@ unreachable end ) - (func $std/array/main (; 162 ;) (type $FUNCSIG$v) + (func $std/array/main (; 168 ;) (type $FUNCSIG$v) global.get $~lib/started i32.eqz if @@ -14282,7 +14505,7 @@ global.set $~lib/started end ) - (func $null (; 163 ;) (type $FUNCSIG$v) + (func $null (; 169 ;) (type $FUNCSIG$v) nop ) ) diff --git a/tests/compiler/std/array.ts b/tests/compiler/std/array.ts index b1d2653b..7e272f7e 100644 --- a/tests/compiler/std/array.ts +++ b/tests/compiler/std/array.ts @@ -779,7 +779,7 @@ function createReverseOrderedNestedArray(size: i32): Array> { } class Proxy { - constructor(public x: T) {} + constructor(public x: T = 0) {} } function createReverseOrderedElementsArray(size: i32): Proxy[] { diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index aeb7260b..97abb064 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -2564,7 +2564,7 @@ if i32.const 0 i32.const 272 - i32.const 69 + i32.const 85 i32.const 61 call $~lib/env/abort unreachable @@ -2732,7 +2732,7 @@ if i32.const 0 i32.const 272 - i32.const 69 + i32.const 85 i32.const 61 call $~lib/env/abort unreachable @@ -3023,7 +3023,7 @@ if i32.const 0 i32.const 272 - i32.const 69 + i32.const 85 i32.const 61 call $~lib/env/abort unreachable @@ -3048,7 +3048,7 @@ if i32.const 0 i32.const 272 - i32.const 204 + i32.const 220 i32.const 20 call $~lib/env/abort unreachable @@ -3407,7 +3407,7 @@ if i32.const 0 i32.const 272 - i32.const 265 + i32.const 281 i32.const 20 call $~lib/env/abort unreachable @@ -4337,7 +4337,7 @@ if i32.const 0 i32.const 272 - i32.const 69 + i32.const 85 i32.const 61 call $~lib/env/abort unreachable @@ -5379,7 +5379,7 @@ if i32.const 0 i32.const 272 - i32.const 377 + i32.const 393 i32.const 4 call $~lib/env/abort unreachable @@ -5989,7 +5989,7 @@ if i32.const 0 i32.const 272 - i32.const 377 + i32.const 393 i32.const 4 call $~lib/env/abort unreachable @@ -6128,7 +6128,7 @@ if i32.const 0 i32.const 272 - i32.const 69 + i32.const 85 i32.const 61 call $~lib/env/abort unreachable @@ -6624,7 +6624,7 @@ if i32.const 0 i32.const 272 - i32.const 377 + i32.const 393 i32.const 4 call $~lib/env/abort unreachable @@ -7128,7 +7128,7 @@ if i32.const 0 i32.const 272 - i32.const 377 + i32.const 393 i32.const 4 call $~lib/env/abort unreachable @@ -7459,6 +7459,9 @@ ) (func $~lib/array/Array>#constructor (; 150 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) local.get $0 if (result i32) local.get $0 @@ -7482,6 +7485,45 @@ i32.const 0 i32.store offset=12 local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + block + local.get $2 + block $~lib/runtime/RETAIN,Array>>|inlined.0 (result i32) + i32.const 0 + i32.const 0 + call $~lib/array/Array#constructor + local.set $5 + local.get $0 + local.set $4 + local.get $5 + local.get $4 + call $~lib/runtime/doRetain + local.get $5 + end + i32.store + local.get $2 + i32.const 4 + i32.add + local.set $2 + end + br $continue|0 + end + end + end + local.get $0 local.get $1 i32.store offset=12 local.get $0 @@ -7542,7 +7584,7 @@ end end local.get $3 - block $~lib/runtime/RETAIN,Array>>|inlined.0 (result i32) + block $~lib/runtime/RETAIN,Array>>|inlined.1 (result i32) local.get $2 local.set $6 local.get $0 @@ -7576,7 +7618,7 @@ if i32.const 0 i32.const 272 - i32.const 69 + i32.const 85 i32.const 61 call $~lib/env/abort unreachable @@ -7752,7 +7794,7 @@ if i32.const 0 i32.const 272 - i32.const 377 + i32.const 393 i32.const 4 call $~lib/env/abort unreachable @@ -7879,9 +7921,36 @@ unreachable end ) - (func $~lib/array/Array>#constructor (; 162 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $std/array/Proxy#constructor (; 162 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 + i32.eqz + if + block $~lib/runtime/REGISTER>|inlined.0 (result i32) + block $~lib/runtime/ALLOCATE|inlined.8 (result i32) + i32.const 4 + local.set $2 + local.get $2 + call $~lib/runtime/doAllocate + end + local.set $2 + local.get $2 + i32.const 13 + call $~lib/runtime/doRegister + end + local.set $0 + end + local.get $0 + local.get $1 + i32.store + local.get $0 + ) + (func $~lib/array/Array>#constructor (; 163 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 if (result i32) local.get $0 else @@ -7904,38 +7973,53 @@ i32.const 0 i32.store offset=12 local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + block + local.get $2 + block $~lib/runtime/RETAIN,Array>>|inlined.0 (result i32) + i32.const 0 + i32.const 0 + call $std/array/Proxy#constructor + local.set $5 + local.get $0 + local.set $4 + local.get $5 + local.get $4 + call $~lib/runtime/doRetain + local.get $5 + end + i32.store + local.get $2 + i32.const 4 + i32.add + local.set $2 + end + br $continue|0 + end + end + end + local.get $0 local.get $1 i32.store offset=12 local.get $0 ) - (func $~lib/array/Array>#get:length (; 163 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array>#get:length (; 164 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.load offset=12 ) - (func $std/array/Proxy#constructor (; 164 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $0 - i32.eqz - if - block $~lib/runtime/REGISTER>|inlined.0 (result i32) - block $~lib/runtime/ALLOCATE|inlined.8 (result i32) - i32.const 4 - local.set $2 - local.get $2 - call $~lib/runtime/doAllocate - end - local.set $2 - local.get $2 - i32.const 13 - call $~lib/runtime/doRegister - end - local.set $0 - end - local.get $0 - local.get $1 - i32.store - local.get $0 - ) (func $~lib/array/Array>#__set (; 165 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) @@ -7976,7 +8060,7 @@ end end local.get $3 - block $~lib/runtime/RETAIN,Array>>|inlined.0 (result i32) + block $~lib/runtime/RETAIN,Array>>|inlined.1 (result i32) local.get $2 local.set $6 local.get $0 @@ -8153,7 +8237,7 @@ if i32.const 0 i32.const 272 - i32.const 377 + i32.const 393 i32.const 4 call $~lib/env/abort unreachable @@ -8226,7 +8310,7 @@ if i32.const 0 i32.const 272 - i32.const 69 + i32.const 85 i32.const 61 call $~lib/env/abort unreachable @@ -8410,7 +8494,7 @@ if i32.const 0 i32.const 272 - i32.const 377 + i32.const 393 i32.const 4 call $~lib/env/abort unreachable @@ -8487,7 +8571,7 @@ if i32.const 0 i32.const 272 - i32.const 69 + i32.const 85 i32.const 61 call $~lib/env/abort unreachable @@ -8826,6 +8910,7 @@ ) (func $~lib/array/Array#constructor (; 186 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) + (local $3 i32) local.get $0 if (result i32) local.get $0 @@ -8849,6 +8934,34 @@ i32.const 0 i32.store offset=12 local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + block + local.get $2 + i32.const 4200 + i32.store + local.get $2 + i32.const 4 + i32.add + local.set $2 + end + br $continue|0 + end + end + end + local.get $0 local.get $1 i32.store offset=12 local.get $0 @@ -13656,9 +13769,41 @@ i32.const 4528 call $~lib/array/Array>#join ) - (func $~lib/array/Array>#constructor (; 252 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#constructor (; 252 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 + if (result i32) + local.get $0 + else + block $~lib/runtime/ALLOCATE|inlined.33 (result i32) + i32.const 16 + local.set $2 + local.get $2 + call $~lib/runtime/doAllocate + end + local.set $2 + local.get $2 + i32.const 7 + call $~lib/runtime/doRegister + end + local.get $1 + i32.const 0 + call $~lib/runtime/ArrayBufferView#constructor + local.set $0 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + local.get $1 + i32.store offset=12 + local.get $0 + ) + (func $~lib/array/Array>#constructor (; 253 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 if (result i32) local.get $0 else @@ -13681,18 +13826,57 @@ i32.const 0 i32.store offset=12 local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + block + local.get $2 + block $~lib/runtime/RETAIN,Array>>|inlined.0 (result i32) + i32.const 0 + i32.const 0 + call $~lib/array/Array#constructor + local.set $5 + local.get $0 + local.set $4 + local.get $5 + local.get $4 + call $~lib/runtime/doRetain + local.get $5 + end + i32.store + local.get $2 + i32.const 4 + i32.add + local.set $2 + end + br $continue|0 + end + end + end + local.get $0 local.get $1 i32.store offset=12 local.get $0 ) - (func $~lib/util/number/itoa (; 253 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/util/number/itoa (; 254 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 255 i32.and call $~lib/util/number/utoa32 return ) - (func $~lib/util/number/itoa_stream (; 254 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/number/itoa_stream (; 255 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -13737,7 +13921,7 @@ end local.get $3 ) - (func $~lib/array/Array#join_int (; 255 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join_int (; 256 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -13781,7 +13965,7 @@ i32.const 10 i32.add local.set $5 - block $~lib/runtime/ALLOCATE|inlined.33 (result i32) + block $~lib/runtime/ALLOCATE|inlined.34 (result i32) local.get $5 i32.const 1 i32.shl @@ -13883,13 +14067,13 @@ call $~lib/runtime/doRegister end ) - (func $~lib/array/Array#join (; 256 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#join (; 257 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 call $~lib/array/Array#join_int return ) - (func $~lib/array/Array>#join_arr (; 257 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array>#join_arr (; 258 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -13993,24 +14177,56 @@ end local.get $3 ) - (func $~lib/array/Array>#join (; 258 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array>#join (; 259 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 call $~lib/array/Array>#join_arr return ) - (func $~lib/array/Array>#toString (; 259 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array>#toString (; 260 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 4528 call $~lib/array/Array>#join ) - (func $~lib/array/Array>#constructor (; 260 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array#constructor (; 261 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) local.get $0 if (result i32) local.get $0 else - block $~lib/runtime/ALLOCATE|inlined.34 (result i32) + block $~lib/runtime/ALLOCATE|inlined.36 (result i32) + i32.const 16 + local.set $2 + local.get $2 + call $~lib/runtime/doAllocate + end + local.set $2 + local.get $2 + i32.const 8 + call $~lib/runtime/doRegister + end + local.get $1 + i32.const 2 + call $~lib/runtime/ArrayBufferView#constructor + local.set $0 + local.get $0 + i32.const 0 + i32.store offset=12 + local.get $0 + local.get $1 + i32.store offset=12 + local.get $0 + ) + (func $~lib/array/Array>#constructor (; 262 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) + local.get $0 + if (result i32) + local.get $0 + else + block $~lib/runtime/ALLOCATE|inlined.35 (result i32) i32.const 16 local.set $2 local.get $2 @@ -14029,17 +14245,59 @@ i32.const 0 i32.store offset=12 local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + block + local.get $2 + block $~lib/runtime/RETAIN,Array>>|inlined.0 (result i32) + i32.const 0 + i32.const 0 + call $~lib/array/Array#constructor + local.set $5 + local.get $0 + local.set $4 + local.get $5 + local.get $4 + call $~lib/runtime/doRetain + local.get $5 + end + i32.store + local.get $2 + i32.const 4 + i32.add + local.set $2 + end + br $continue|0 + end + end + end + local.get $0 local.get $1 i32.store offset=12 local.get $0 ) - (func $~lib/array/Array>>#constructor (; 261 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array>>#constructor (; 263 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) + (local $3 i32) + (local $4 i32) + (local $5 i32) local.get $0 if (result i32) local.get $0 else - block $~lib/runtime/ALLOCATE|inlined.35 (result i32) + block $~lib/runtime/ALLOCATE|inlined.37 (result i32) i32.const 16 local.set $2 local.get $2 @@ -14058,11 +14316,50 @@ i32.const 0 i32.store offset=12 local.get $0 + i32.load offset=4 + local.set $2 + local.get $2 + local.get $1 + i32.const 2 + i32.shl + i32.add + local.set $3 + block $break|0 + loop $continue|0 + local.get $2 + local.get $3 + i32.lt_u + if + block + local.get $2 + block $~lib/runtime/RETAIN>,Array>>>|inlined.0 (result i32) + i32.const 0 + i32.const 0 + call $~lib/array/Array>#constructor + local.set $5 + local.get $0 + local.set $4 + local.get $5 + local.get $4 + call $~lib/runtime/doRetain + local.get $5 + end + i32.store + local.get $2 + i32.const 4 + i32.add + local.set $2 + end + br $continue|0 + end + end + end + local.get $0 local.get $1 i32.store offset=12 local.get $0 ) - (func $~lib/array/Array>#join_arr (; 262 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array>#join_arr (; 264 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -14166,13 +14463,13 @@ end local.get $3 ) - (func $~lib/array/Array>#join (; 263 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array>#join (; 265 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 call $~lib/array/Array>#join_arr return ) - (func $~lib/array/Array>>#join_arr (; 264 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array>>#join_arr (; 266 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -14276,18 +14573,18 @@ end local.get $3 ) - (func $~lib/array/Array>>#join (; 265 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array>>#join (; 267 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 call $~lib/array/Array>>#join_arr return ) - (func $~lib/array/Array>>#toString (; 266 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/array/Array>>#toString (; 268 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 i32.const 4528 call $~lib/array/Array>>#join ) - (func $start:std/array (; 267 ;) (type $FUNCSIG$v) + (func $start:std/array (; 269 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) @@ -19023,7 +19320,7 @@ i32.load offset=4 local.set $0 local.get $0 - block $~lib/runtime/RETAIN,Array>>|inlined.1 (result i32) + block $~lib/runtime/RETAIN,Array>>|inlined.2 (result i32) block $~lib/runtime/WRAPARRAY|inlined.71 (result i32) i32.const 7832 local.set $2 @@ -19040,7 +19337,7 @@ end i32.store local.get $0 - block $~lib/runtime/RETAIN,Array>>|inlined.2 (result i32) + block $~lib/runtime/RETAIN,Array>>|inlined.3 (result i32) block $~lib/runtime/WRAPARRAY|inlined.72 (result i32) i32.const 7856 local.set $2 @@ -19081,7 +19378,7 @@ i32.load offset=4 local.set $1 local.get $1 - block $~lib/runtime/RETAIN,Array>>|inlined.0 (result i32) + block $~lib/runtime/RETAIN,Array>>|inlined.1 (result i32) block $~lib/runtime/WRAPARRAY|inlined.6 (result i32) i32.const 7936 local.set $2 @@ -19098,7 +19395,7 @@ end i32.store local.get $1 - block $~lib/runtime/RETAIN,Array>>|inlined.1 (result i32) + block $~lib/runtime/RETAIN,Array>>|inlined.2 (result i32) block $~lib/runtime/WRAPARRAY|inlined.7 (result i32) i32.const 7960 local.set $2 @@ -19139,7 +19436,7 @@ i32.load offset=4 local.set $1 local.get $1 - block $~lib/runtime/RETAIN>,Array>>>|inlined.0 (result i32) + block $~lib/runtime/RETAIN>,Array>>>|inlined.1 (result i32) block (result i32) i32.const 0 i32.const 1 @@ -19149,7 +19446,7 @@ i32.load offset=4 local.set $3 local.get $3 - block $~lib/runtime/RETAIN,Array>>|inlined.1 (result i32) + block $~lib/runtime/RETAIN,Array>>|inlined.2 (result i32) block $~lib/runtime/WRAPARRAY|inlined.11 (result i32) i32.const 8056 local.set $4 @@ -19191,7 +19488,7 @@ unreachable end ) - (func $std/array/main (; 268 ;) (type $FUNCSIG$v) + (func $std/array/main (; 270 ;) (type $FUNCSIG$v) global.get $~lib/started i32.eqz if @@ -19200,9 +19497,9 @@ global.set $~lib/started end ) - (func $start (; 269 ;) (type $FUNCSIG$v) + (func $start (; 271 ;) (type $FUNCSIG$v) call $start:std/array ) - (func $null (; 270 ;) (type $FUNCSIG$v) + (func $null (; 272 ;) (type $FUNCSIG$v) ) )