use overloads for checked access

This commit is contained in:
dcode 2019-03-18 16:09:49 +01:00
parent c147e98a55
commit 0932cf17ed
20 changed files with 9141 additions and 11890 deletions

View File

@ -4120,14 +4120,11 @@ export function compileBuiltinArrayGet(
);
}
var flow = compiler.currentFlow;
var usizeType = compiler.options.usizeType;
var nativeSizeType = compiler.options.nativeSizeType;
var isUnchecked = flow.is(FlowFlags.UNCHECKED_CONTEXT);
var ptrExpr: ExpressionRef;
var constantOffset: i32 = 0;
if (isUnchecked) {
// precompute byteOffset into a constant and a dynamic part
dynamicOffset = module.precomputeExpression(dynamicOffset);
if (getExpressionId(dynamicOffset) == ExpressionId.Const) {
@ -4171,54 +4168,6 @@ export function compileBuiltinArrayGet(
}
}
} else /* checked */ {
let tempThis = flow.getTempLocal(usizeType, false);
let tempOffset = flow.getAndFreeTempLocal(Type.i32, false);
flow.freeTempLocal(tempThis);
// ptr = (tempThis = this).dataStart
ptrExpr = module.createLoad(usizeType.byteSize, true,
module.createTeeLocal(tempThis.index,
compiler.compileExpression(
thisExpression,
target.type,
ConversionKind.IMPLICIT,
WrapMode.NONE
)
),
nativeSizeType, (<Field>dataStart).memoryOffset
);
// ptr = ptr + <usize>(tempOffset = dynamicOffset)
if (nativeSizeType == NativeType.I64) {
ptrExpr = module.createBinary(BinaryOp.AddI64,
ptrExpr,
module.createUnary(UnaryOp.ExtendU32,
module.createTeeLocal(tempOffset.index, dynamicOffset)
)
);
} else {
ptrExpr = module.createBinary(BinaryOp.AddI32,
ptrExpr,
module.createTeeLocal(tempOffset.index, dynamicOffset)
);
}
// ptr = select(ptr, -1, <u32>tempOffset < <u32>tempThis.dataLength)
// triggers "RuntimeError: memory access out of bounds" if OOB
ptrExpr = module.createSelect(
ptrExpr,
usizeType.toNativeNegOne(module),
module.createBinary(BinaryOp.LtU32,
module.createGetLocal(tempOffset.index, NativeType.I32),
module.createLoad(4, false,
module.createGetLocal(tempThis.index, nativeSizeType),
NativeType.I32, (<Field>dataLength).memoryOffset
)
)
);
}
compiler.currentType = outType;
return module.createLoad(
type.byteSize,

View File

@ -4722,6 +4722,8 @@ export class Compiler extends DiagnosticEmitter {
case ElementKind.CLASS: {
let elementExpression = resolver.currentElementExpression;
if (elementExpression) { // indexed access
let isUnchecked = flow.is(FlowFlags.UNCHECKED_CONTEXT);
if (isUnchecked) {
let arrayType = this.program.determineBuiltinArrayType(<Class>target);
if (arrayType) {
return compileBuiltinArraySet(
@ -4733,7 +4735,7 @@ export class Compiler extends DiagnosticEmitter {
contextualType
);
}
let isUnchecked = flow.is(FlowFlags.UNCHECKED_CONTEXT);
}
let indexedSet = (<Class>target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);
if (!indexedSet) {
let indexedGet = (<Class>target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);
@ -4956,6 +4958,8 @@ export class Compiler extends DiagnosticEmitter {
case ElementKind.CLASS: {
let elementExpression = this.resolver.currentElementExpression;
if (elementExpression) {
let isUnchecked = flow.is(FlowFlags.UNCHECKED_CONTEXT);
if (isUnchecked) {
let arrayType = this.program.determineBuiltinArrayType(<Class>target);
if (arrayType) {
return compileBuiltinArraySetWithValue(
@ -4967,7 +4971,7 @@ export class Compiler extends DiagnosticEmitter {
tee
);
}
let isUnchecked = flow.is(FlowFlags.UNCHECKED_CONTEXT);
}
let indexedGet = (<Class>target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);
if (!indexedGet) {
this.error(
@ -5974,6 +5978,8 @@ export class Compiler extends DiagnosticEmitter {
if (!target) return this.module.createUnreachable();
switch (target.kind) {
case ElementKind.CLASS: {
let isUnchecked = this.currentFlow.is(FlowFlags.UNCHECKED_CONTEXT);
if (isUnchecked) {
let arrayType = this.program.determineBuiltinArrayType(<Class>target);
if (arrayType) {
return compileBuiltinArrayGet(
@ -5984,7 +5990,7 @@ export class Compiler extends DiagnosticEmitter {
contextualType
);
}
let isUnchecked = this.currentFlow.is(FlowFlags.UNCHECKED_CONTEXT);
}
let indexedGet = (<Class>target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);
if (!indexedGet) {
this.error(

View File

@ -6,10 +6,9 @@ import { isArray as builtin_isArray } from "./builtins";
/** Ensures that the given array has _at least_ the specified capacity. */
function ensureCapacity(array: ArrayBufferView, minCapacity: i32, alignLog2: u32): void {
var oldData = array.data;
var oldCapacity = oldData.byteLength >>> alignLog2;
if (<u32>minCapacity > <u32>oldCapacity) {
if (<u32>minCapacity > <u32>array.dataLength >>> alignLog2) {
if (<u32>minCapacity > <u32>(MAX_BYTELENGTH >>> alignLog2)) throw new RangeError("Invalid array length");
let oldData = array.data;
let newByteLength = minCapacity << alignLog2;
let newData = REALLOCATE(changetype<usize>(oldData), <usize>newByteLength); // registers on move
if (newData !== changetype<usize>(oldData)) {
@ -21,6 +20,11 @@ function ensureCapacity(array: ArrayBufferView, minCapacity: i32, alignLog2: u32
}
export class Array<T> extends ArrayBufferView {
// Implementing ArrayBufferView isn't strictly necessary here but is done to allow glue code
// to work with typed and normal arrays interchangeably. Technically, normal arrays do not need
// `dataStart` (equals `data`) and `dataLength` (equals computed `data.byteLength`).
private length_: i32;
static isArray<U>(value: U): bool {
@ -59,8 +63,14 @@ export class Array<T> extends ArrayBufferView {
return -1;
}
@operator("[]=")
private __set(index: i32, value: T): void { // unchecked is built-in
@operator("[]") // unchecked is built-in
private __get(index: i32): T {
if (<u32>index >= <u32>this.dataLength >>> alignof<T>()) throw new Error("Offset out of bounds");
return load<T>(this.dataStart + (<usize>index << alignof<T>()));
}
@operator("[]=") // unchecked is built-in
private __set(index: i32, value: T): void {
ensureCapacity(this, index + 1, alignof<T>());
store<T>(this.dataStart + (<usize>index << alignof<T>()), value);
if (isManaged<T>()) LINK(value, this);

View File

@ -1,10 +1,6 @@
import { ALLOCATE, REGISTER, ArrayBufferView } from "./runtime";
import { COMPARATOR, SORT as SORT_IMPL } from "./util/sort";
// function clampToByte(value: i32): i32 {
// return ~(value >> 31) & (((255 - value) >> 31) | value); // & 255
// }
export class Int8Array extends ArrayBufferView {
// @ts-ignore: decorator
@ -23,6 +19,18 @@ export class Int8Array extends ArrayBufferView {
return this.byteLength;
}
@operator("[]") // unchecked is built-in
private __get(index: i32): i8 {
if (<u32>index >= <u32>this.dataLength) throw new Error("Offset out of bounds");
return load<i8>(this.dataStart + <usize>index);
}
@operator("[]=") // unchecked is built-in
private __set(index: i32, value: native<i8>): void {
if (<u32>index >= <u32>this.dataLength) throw new Error("Offset out of bounds");
store<i8>(this.dataStart + <usize>index, value);
}
fill(value: i32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Int8Array {
return FILL<Int8Array, i8>(this, value, start, end);
}
@ -92,6 +100,18 @@ export class Uint8Array extends ArrayBufferView {
return this.byteLength;
}
@operator("[]") // unchecked is built-in
private __get(index: i32): u8 {
if (<u32>index >= <u32>this.dataLength) throw new Error("Offset out of bounds");
return load<u8>(this.dataStart + <usize>index);
}
@operator("[]=") // unchecked is built-in
private __set(index: i32, value: native<u8>): void {
if (<u32>index >= <u32>this.dataLength) throw new Error("Offset out of bounds");
store<u8>(this.dataStart + <usize>index, value);
}
fill(value: u32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Uint8Array {
return FILL<Uint8Array, u8>(this, value, start, end);
}
@ -143,18 +163,42 @@ export class Uint8Array extends ArrayBufferView {
}
}
export class Uint8ClampedArray extends Uint8Array {
export class Uint8ClampedArray extends ArrayBufferView {
// @ts-ignore: decorator
@lazy
static readonly BYTES_PER_ELEMENT: usize = sizeof<u8>();
constructor(length: i32) {
super(length, alignof<u8>());
}
get buffer(): ArrayBuffer {
return this.data;
}
get length(): i32 {
return this.byteLength;
}
@operator("[]") // unchecked is built-in
private __get(index: i32): u8 {
if (<u32>index >= <u32>this.dataLength) throw new Error("Offset out of bounds");
return load<u8>(this.dataStart + <usize>index);
}
@operator("[]=") // unchecked is built-in
private __set(index: i32, value: native<u8>): void {
if (<u32>index >= <u32>this.dataLength) throw new Error("Offset out of bounds");
store<u8>(this.dataStart + <usize>index, ~(<i32>value >> 31) & (((255 - value) >> 31) | value));
}
fill(value: u32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Uint8ClampedArray {
return changetype<Uint8ClampedArray>(super.fill(value, start, end)); // safe because '.fill' reuses 'this'
return FILL<Uint8ClampedArray, u8>(this, value, start, end);
}
sort(comparator: (a: u8, b: u8) => i32 = COMPARATOR<u8>()): Uint8ClampedArray {
return changetype<Uint8ClampedArray>(super.sort(comparator)); // safe because '.sort' reuses 'this'
return SORT<Uint8ClampedArray, u8>(this, comparator);
}
subarray(begin: i32 = 0, end: i32 = 0x7fffffff): Uint8ClampedArray {
@ -218,6 +262,18 @@ export class Int16Array extends ArrayBufferView {
return this.byteLength >>> alignof<i16>();
}
@operator("[]") // unchecked is built-in
private __get(index: i32): i16 {
if (<u32>index >= <u32>this.dataLength >>> alignof<i16>()) throw new Error("Offset out of bounds");
return load<i16>(this.dataStart + (<usize>index << alignof<i16>()));
}
@operator("[]=") // unchecked is built-in
private __set(index: i32, value: native<i16>): void {
if (<u32>index >= <u32>this.dataLength >>> alignof<i16>()) throw new Error("Offset out of bounds");
store<i16>(this.dataStart + (<usize>index << alignof<i16>()), value);
}
fill(value: i32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Int16Array {
return FILL<Int16Array, i16>(this, value, start, end);
}
@ -287,6 +343,18 @@ export class Uint16Array extends ArrayBufferView {
return this.byteLength >>> alignof<u16>();
}
@operator("[]") // unchecked is built-in
private __get(index: i32): u16 {
if (<u32>index >= <u32>this.dataLength >>> alignof<u16>()) throw new Error("Offset out of bounds");
return load<u16>(this.dataStart + (<usize>index << alignof<u16>()));
}
@operator("[]=") // unchecked is built-in
private __set(index: i32, value: native<u16>): void {
if (<u32>index >= <u32>this.dataLength >>> alignof<u16>()) throw new Error("Offset out of bounds");
store<u16>(this.dataStart + (<usize>index << alignof<u16>()), value);
}
fill(value: u32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Uint16Array {
return FILL<Uint16Array, u16>(this, value, start, end);
}
@ -356,6 +424,18 @@ export class Int32Array extends ArrayBufferView {
return this.byteLength >>> alignof<i32>();
}
@operator("[]") // unchecked is built-in
private __get(index: i32): i32 {
if (<u32>index >= <u32>this.dataLength >>> alignof<i32>()) throw new Error("Offset out of bounds");
return load<i32>(this.dataStart + (<usize>index << alignof<i32>()));
}
@operator("[]=") // unchecked is built-in
private __set(index: i32, value: i32): void {
if (<u32>index >= <u32>this.dataLength >>> alignof<i32>()) throw new Error("Offset out of bounds");
store<i32>(this.dataStart + (<usize>index << alignof<i32>()), value);
}
fill(value: i32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Int32Array {
return FILL<Int32Array, i32>(this, value, start, end);
}
@ -425,6 +505,18 @@ export class Uint32Array extends ArrayBufferView {
return this.byteLength >>> alignof<u32>();
}
@operator("[]") // unchecked is built-in
private __get(index: i32): u32 {
if (<u32>index >= <u32>this.dataLength >>> alignof<u32>()) throw new Error("Offset out of bounds");
return load<u32>(this.dataStart + (<usize>index << alignof<u32>()));
}
@operator("[]=") // unchecked is built-in
private __set(index: i32, value: u32): void {
if (<u32>index >= <u32>this.dataLength >>> alignof<u32>()) throw new Error("Offset out of bounds");
store<u32>(this.dataStart + (<usize>index << alignof<u32>()), value);
}
fill(value: u32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Uint32Array {
return FILL<Uint32Array, u32>(this, value, start, end);
}
@ -494,6 +586,18 @@ export class Int64Array extends ArrayBufferView {
return this.byteLength >>> alignof<i64>();
}
@operator("[]") // unchecked is built-in
private __get(index: i32): i64 {
if (<u32>index >= <u32>this.dataLength >>> alignof<i64>()) throw new Error("Offset out of bounds");
return load<i64>(this.dataStart + (<usize>index << alignof<i64>()));
}
@operator("[]=") // unchecked is built-in
private __set(index: i32, value: i64): void {
if (<u32>index >= <u32>this.dataLength >>> alignof<i64>()) throw new Error("Offset out of bounds");
store<i64>(this.dataStart + (<usize>index << alignof<i64>()), value);
}
fill(value: i64, start: i32 = 0, end: i32 = i32.MAX_VALUE): Int64Array {
return FILL<Int64Array, i64>(this, value, start, end);
}
@ -563,6 +667,18 @@ export class Uint64Array extends ArrayBufferView {
return this.byteLength >>> alignof<u64>();
}
@operator("[]") // unchecked is built-in
private __get(index: i32): u64 {
if (<u32>index >= <u32>this.dataLength >>> alignof<u64>()) throw new Error("Offset out of bounds");
return load<u64>(this.dataStart + (<usize>index << alignof<u64>()));
}
@operator("[]=") // unchecked is built-in
private __set(index: i32, value: u64): void {
if (<u32>index >= <u32>this.dataLength >>> alignof<u64>()) throw new Error("Offset out of bounds");
store<u64>(this.dataStart + (<usize>index << alignof<u64>()), value);
}
fill(value: u64, start: i32 = 0, end: i32 = i32.MAX_VALUE): Uint64Array {
return FILL<Uint64Array, u64>(this, value, start, end);
}
@ -632,6 +748,18 @@ export class Float32Array extends ArrayBufferView {
return this.byteLength >>> alignof<f32>();
}
@operator("[]") // unchecked is built-in
private __get(index: i32): f32 {
if (<u32>index >= <u32>this.dataLength >>> alignof<f32>()) throw new Error("Offset out of bounds");
return load<f32>(this.dataStart + (<usize>index << alignof<f32>()));
}
@operator("[]=") // unchecked is built-in
private __set(index: i32, value: f32): void {
if (<u32>index >= <u32>this.dataLength >>> alignof<f32>()) throw new Error("Offset out of bounds");
store<f32>(this.dataStart + (<usize>index << alignof<f32>()), value);
}
fill(value: f32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Float32Array {
return FILL<Float32Array, f32>(this, value, start, end);
}
@ -701,6 +829,18 @@ export class Float64Array extends ArrayBufferView {
return this.byteLength >>> alignof<f64>();
}
@operator("[]") // unchecked is built-in
private __get(index: i32): f64 {
if (<u32>index >= <u32>this.dataLength >>> alignof<f64>()) throw new Error("Offset out of bounds");
return load<f64>(this.dataStart + (<usize>index << alignof<f64>()));
}
@operator("[]=") // unchecked is built-in
private __set(index: i32, value: f64): void {
if (<u32>index >= <u32>this.dataLength >>> alignof<f64>()) throw new Error("Offset out of bounds");
store<f64>(this.dataStart + (<usize>index << alignof<f64>()), value);
}
fill(value: f64, start: i32 = 0, end: i32 = i32.MAX_VALUE): Float64Array {
return FILL<Float64Array, f64>(this, value, start, end);
}

View File

@ -1,8 +1,11 @@
(module
(type $FUNCSIG$ii (func (param i32) (result i32)))
(type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
(type $FUNCSIG$i (func (result i32)))
(type $FUNCSIG$v (func))
(memory $0 0)
(import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32)))
(memory $0 1)
(data (i32.const 8) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s")
(table $0 1 funcref)
(elem (i32.const 0) $null)
(global $~lib/argc (mut i32) (i32.const 0))
@ -20,50 +23,55 @@
(export "testRet" (func $nonNullAssertion/testFn))
(export "testObjFn" (func $nonNullAssertion/testObjFn))
(export "testObjRet" (func $nonNullAssertion/testObjFn))
(func $nonNullAssertion/testVar (; 0 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $nonNullAssertion/testVar (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
)
(func $nonNullAssertion/testObj (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $nonNullAssertion/testObj (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.load
)
(func $nonNullAssertion/testArr (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.load offset=4
i32.const -1
(func $~lib/array/Array<Foo>#__get (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
)
(func $nonNullAssertion/testAll (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
i32.const 2
i32.shr_u
i32.ge_u
if
i32.const 0
i32.const 16
i32.const 68
i32.const 61
call $~lib/env/abort
unreachable
end
local.get $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.load
)
(func $nonNullAssertion/testFn (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $nonNullAssertion/testArr (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
call $~lib/array/Array<Foo>#__get
)
(func $nonNullAssertion/testAll (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
call $~lib/array/Array<Foo>#__get
i32.load
)
(func $nonNullAssertion/testFn (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
i32.const 0
global.set $~lib/argc
local.get $0
call_indirect (type $FUNCSIG$i)
)
(func $nonNullAssertion/testObjFn (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $nonNullAssertion/testObjFn (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
i32.const 0
global.set $~lib/argc
local.get $0
i32.load offset=4
call_indirect (type $FUNCSIG$i)
)
(func $null (; 6 ;) (type $FUNCSIG$v)
(func $null (; 8 ;) (type $FUNCSIG$v)
nop
)
)

View File

@ -1,12 +1,19 @@
(module
(type $FUNCSIG$ii (func (param i32) (result i32)))
(type $FUNCSIG$iii (func (param i32 i32) (result i32)))
(type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
(type $FUNCSIG$i (func (result i32)))
(type $FUNCSIG$v (func))
(memory $0 0)
(import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32)))
(memory $0 1)
(data (i32.const 8) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00")
(table $0 1 funcref)
(elem (i32.const 0) $null)
(global $~lib/runtime/GC_IMPLEMENTED i32 (i32.const 0))
(global $~lib/runtime/HEADER_SIZE i32 (i32.const 8))
(global $~lib/runtime/HEADER_MAGIC i32 (i32.const -1520547049))
(global $~lib/argc (mut i32) (i32.const 0))
(global $~lib/memory/HEAP_BASE i32 (i32.const 8))
(global $~lib/memory/HEAP_BASE i32 (i32.const 44))
(export "memory" (memory $0))
(export "table" (table $0))
(export "testVar" (func $nonNullAssertion/testVar))
@ -21,102 +28,92 @@
(export "testRet" (func $nonNullAssertion/testRet))
(export "testObjFn" (func $nonNullAssertion/testObjFn))
(export "testObjRet" (func $nonNullAssertion/testObjRet))
(func $nonNullAssertion/testVar (; 0 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $nonNullAssertion/testVar (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
)
(func $nonNullAssertion/testObj (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $nonNullAssertion/testObj (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.load
)
(func $nonNullAssertion/testProp (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $nonNullAssertion/testProp (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.load
)
(func $nonNullAssertion/testArr (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(func $~lib/array/Array<Foo>#__get (; 4 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
local.get $1
local.get $0
local.tee $1
i32.load offset=4
i32.load offset=8
i32.const 2
i32.shr_u
i32.ge_u
if
i32.const 0
i32.const 16
i32.const 68
i32.const 61
call $~lib/env/abort
unreachable
end
local.get $0
i32.load offset=4
local.get $1
i32.const 2
i32.shl
local.tee $2
i32.add
i32.const -1
local.get $2
local.get $1
i32.load offset=8
i32.lt_u
select
i32.load
)
(func $nonNullAssertion/testElem (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(func $nonNullAssertion/testArr (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
local.tee $1
i32.load offset=4
i32.const 0
call $~lib/array/Array<Foo>#__get
)
(func $~lib/array/Array<Foo | null>#__get (; 6 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
local.get $1
local.get $0
i32.load offset=8
i32.const 2
i32.shr_u
i32.ge_u
if
i32.const 0
i32.const 16
i32.const 68
i32.const 61
call $~lib/env/abort
unreachable
end
local.get $0
i32.load offset=4
local.get $1
i32.const 2
i32.shl
local.tee $2
i32.add
i32.const -1
local.get $2
local.get $1
i32.load offset=8
i32.lt_u
select
i32.load
)
(func $nonNullAssertion/testAll (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(func $nonNullAssertion/testElem (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
local.tee $1
i32.load offset=4
i32.const 0
i32.const 2
i32.shl
local.tee $2
i32.add
i32.const -1
local.get $2
local.get $1
i32.load offset=8
i32.lt_u
select
i32.load
i32.load
call $~lib/array/Array<Foo | null>#__get
)
(func $nonNullAssertion/testAll2 (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(func $nonNullAssertion/testAll (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
local.tee $1
i32.load offset=4
i32.const 0
i32.const 2
i32.shl
local.tee $2
i32.add
i32.const -1
local.get $2
local.get $1
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<Foo | null>#__get
i32.load
)
(func $nonNullAssertion/testFn (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $nonNullAssertion/testAll2 (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.const 0
call $~lib/array/Array<Foo | null>#__get
i32.load
)
(func $nonNullAssertion/testFn (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
i32.const 0
global.set $~lib/argc
local.get $0
call_indirect (type $FUNCSIG$i)
)
(func $nonNullAssertion/testFn2 (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $nonNullAssertion/testFn2 (; 11 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
local.get $0
local.set $1
@ -125,26 +122,26 @@
local.get $1
call_indirect (type $FUNCSIG$i)
)
(func $nonNullAssertion/testRet (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $nonNullAssertion/testRet (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
i32.const 0
global.set $~lib/argc
local.get $0
call_indirect (type $FUNCSIG$i)
)
(func $nonNullAssertion/testObjFn (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $nonNullAssertion/testObjFn (; 13 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
i32.const 0
global.set $~lib/argc
local.get $0
i32.load offset=4
call_indirect (type $FUNCSIG$i)
)
(func $nonNullAssertion/testObjRet (; 11 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $nonNullAssertion/testObjRet (; 14 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
i32.const 0
global.set $~lib/argc
local.get $0
i32.load offset=4
call_indirect (type $FUNCSIG$i)
)
(func $null (; 12 ;) (type $FUNCSIG$v)
(func $null (; 15 ;) (type $FUNCSIG$v)
)
)

View File

@ -1,13 +1,15 @@
(module
(type $FUNCSIG$ii (func (param i32) (result i32)))
(type $FUNCSIG$iii (func (param i32 i32) (result i32)))
(type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
(type $FUNCSIG$v (func))
(type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
(import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32)))
(memory $0 1)
(data (i32.const 8) "\01")
(data (i32.const 16) "\01\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s")
(data (i32.const 56) "\01\00\00\00\08\00\00\00n\00u\00l\00l")
(data (i32.const 8) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s")
(data (i32.const 48) "\01")
(data (i32.const 56) "\01\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s")
(data (i32.const 96) "\01\00\00\00\08\00\00\00n\00u\00l\00l")
(table $0 1 funcref)
(elem (i32.const 0) $null)
(export "memory" (memory $0))
@ -17,48 +19,50 @@
(export "stringArrayMethodCall" (func $std/array-access/stringArrayMethodCall))
(export "stringArrayArrayPropertyAccess" (func $std/array-access/stringArrayArrayPropertyAccess))
(export "stringArrayArrayMethodCall" (func $std/array-access/stringArrayArrayMethodCall))
(func $std/array-access/i32ArrayArrayElementAccess (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/array/Array<Array<i32>>#__get (; 1 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
local.get $1
local.get $0
i32.load offset=4
i32.const -1
i32.load offset=8
i32.const 2
i32.shr_u
i32.ge_u
if
i32.const 0
i32.const 16
i32.const 68
i32.const 61
call $~lib/env/abort
unreachable
end
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
local.tee $0
i32.load offset=4
i32.const 4
local.get $1
i32.const 2
i32.shl
i32.add
i32.const -1
i32.const 4
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
)
(func $std/array-access/stringArrayPropertyAccess (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $std/array-access/i32ArrayArrayElementAccess (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.load offset=4
i32.const -1
i32.const 0
call $~lib/array/Array<Array<i32>>#__get
i32.const 1
call $~lib/array/Array<Array<i32>>#__get
)
(func $std/array-access/stringArrayPropertyAccess (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 0
call $~lib/array/Array<Array<i32>>#__get
i32.const 8
i32.sub
i32.load offset=4
i32.const 1
i32.shr_u
)
(func $~lib/util/string/compareImpl (; 3 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/util/string/compareImpl (; 4 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(local $4 i32)
i32.const 16
i32.const 56
local.set $3
local.get $1
i32.const 1
@ -97,7 +101,7 @@
end
local.get $4
)
(func $~lib/string/String#startsWith (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/string/String#startsWith (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
@ -105,13 +109,13 @@
i32.eqz
if
i32.const 0
i32.const 24
i32.const 64
i32.const 161
i32.const 4
call $~lib/env/abort
unreachable
end
i32.const 12
i32.const 52
i32.load
i32.const 1
i32.shr_u
@ -144,69 +148,33 @@
call $~lib/util/string/compareImpl
i32.eqz
)
(func $std/array-access/stringArrayMethodCall (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $std/array-access/stringArrayMethodCall (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<Array<i32>>#__get
call $~lib/string/String#startsWith
)
(func $std/array-access/stringArrayArrayPropertyAccess (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $std/array-access/stringArrayArrayPropertyAccess (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
local.tee $0
i32.load offset=4
i32.const 4
i32.add
i32.const -1
i32.const 4
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<Array<i32>>#__get
i32.const 1
call $~lib/array/Array<Array<i32>>#__get
i32.const 8
i32.sub
i32.load offset=4
i32.const 1
i32.shr_u
)
(func $std/array-access/stringArrayArrayMethodCall (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $std/array-access/stringArrayArrayMethodCall (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
local.tee $0
i32.load offset=4
i32.const 4
i32.add
i32.const -1
i32.const 4
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<Array<i32>>#__get
i32.const 1
call $~lib/array/Array<Array<i32>>#__get
call $~lib/string/String#startsWith
)
(func $null (; 8 ;) (type $FUNCSIG$v)
(func $null (; 9 ;) (type $FUNCSIG$v)
nop
)
)

View File

@ -1,20 +1,22 @@
(module
(type $FUNCSIG$ii (func (param i32) (result i32)))
(type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
(type $FUNCSIG$iii (func (param i32 i32) (result i32)))
(type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
(type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
(type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32)))
(type $FUNCSIG$v (func))
(import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32)))
(memory $0 1)
(data (i32.const 8) "\01\00\00\00\00\00\00\00")
(data (i32.const 16) "\01\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00")
(data (i32.const 56) "\01\00\00\00\08\00\00\00n\00u\00l\00l\00")
(data (i32.const 8) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00")
(data (i32.const 48) "\01\00\00\00\00\00\00\00")
(data (i32.const 56) "\01\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00")
(data (i32.const 96) "\01\00\00\00\08\00\00\00n\00u\00l\00l\00")
(table $0 1 funcref)
(elem (i32.const 0) $null)
(global $~lib/runtime/GC_IMPLEMENTED i32 (i32.const 0))
(global $~lib/runtime/HEADER_SIZE i32 (i32.const 8))
(global $~lib/runtime/HEADER_MAGIC i32 (i32.const -1520547049))
(global $~lib/memory/HEAP_BASE i32 (i32.const 72))
(global $~lib/memory/HEAP_BASE i32 (i32.const 112))
(export "memory" (memory $0))
(export "table" (table $0))
(export "i32ArrayArrayElementAccess" (func $std/array-access/i32ArrayArrayElementAccess))
@ -22,40 +24,83 @@
(export "stringArrayMethodCall" (func $std/array-access/stringArrayMethodCall))
(export "stringArrayArrayPropertyAccess" (func $std/array-access/stringArrayArrayPropertyAccess))
(export "stringArrayArrayMethodCall" (func $std/array-access/stringArrayArrayMethodCall))
(func $std/array-access/i32ArrayArrayElementAccess (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(func $~lib/array/Array<Array<i32>>#__get (; 1 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
local.get $1
local.get $0
local.tee $1
i32.load offset=4
i32.load offset=8
i32.const 2
i32.shr_u
i32.ge_u
if
i32.const 0
i32.const 2
i32.shl
local.tee $2
i32.add
i32.const -1
local.get $2
local.get $1
i32.load offset=8
i32.lt_u
select
i32.load
local.tee $1
i32.const 16
i32.const 68
i32.const 61
call $~lib/env/abort
unreachable
end
local.get $0
i32.load offset=4
i32.const 1
local.get $1
i32.const 2
i32.shl
local.tee $2
i32.add
i32.const -1
local.get $2
local.get $1
i32.load offset=8
i32.lt_u
select
i32.load
)
(func $~lib/string/String#get:length (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/array/Array<i32>#__get (; 2 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
local.get $1
local.get $0
i32.load offset=8
i32.const 2
i32.shr_u
i32.ge_u
if
i32.const 0
i32.const 16
i32.const 68
i32.const 61
call $~lib/env/abort
unreachable
end
local.get $0
i32.load offset=4
local.get $1
i32.const 2
i32.shl
i32.add
i32.load
)
(func $std/array-access/i32ArrayArrayElementAccess (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.const 0
call $~lib/array/Array<Array<i32>>#__get
i32.const 1
call $~lib/array/Array<i32>#__get
)
(func $~lib/array/Array<String>#__get (; 4 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
local.get $1
local.get $0
i32.load offset=8
i32.const 2
i32.shr_u
i32.ge_u
if
i32.const 0
i32.const 16
i32.const 68
i32.const 61
call $~lib/env/abort
unreachable
end
local.get $0
i32.load offset=4
local.get $1
i32.const 2
i32.shl
i32.add
i32.load
)
(func $~lib/string/String#get:length (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
global.get $~lib/runtime/HEADER_SIZE
i32.sub
@ -63,27 +108,13 @@
i32.const 1
i32.shr_u
)
(func $std/array-access/stringArrayPropertyAccess (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(func $std/array-access/stringArrayPropertyAccess (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
local.tee $1
i32.load offset=4
i32.const 0
i32.const 2
i32.shl
local.tee $2
i32.add
i32.const -1
local.get $2
local.get $1
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<String>#__get
call $~lib/string/String#get:length
)
(func $~lib/util/string/compareImpl (; 4 ;) (type $FUNCSIG$iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32)
(func $~lib/util/string/compareImpl (; 7 ;) (type $FUNCSIG$iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32)
(local $5 i32)
(local $6 i32)
(local $7 i32)
@ -136,7 +167,7 @@
end
local.get $5
)
(func $~lib/string/String#startsWith (; 5 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/string/String#startsWith (; 8 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
@ -149,7 +180,7 @@
i32.eqz
if
i32.const 0
i32.const 24
i32.const 64
i32.const 161
i32.const 4
call $~lib/env/abort
@ -159,7 +190,7 @@
i32.const 0
i32.eq
if
i32.const 64
i32.const 104
local.set $1
end
local.get $2
@ -203,98 +234,55 @@
call $~lib/util/string/compareImpl
i32.eqz
)
(func $std/array-access/stringArrayMethodCall (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(func $std/array-access/stringArrayMethodCall (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
local.tee $1
i32.load offset=4
i32.const 0
i32.const 2
i32.shl
local.tee $2
i32.add
i32.const -1
local.get $2
local.get $1
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 16
call $~lib/array/Array<String>#__get
i32.const 56
i32.const 0
call $~lib/string/String#startsWith
)
(func $std/array-access/stringArrayArrayPropertyAccess (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(func $~lib/array/Array<Array<String>>#__get (; 10 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
local.get $1
local.get $0
local.tee $1
i32.load offset=4
i32.load offset=8
i32.const 2
i32.shr_u
i32.ge_u
if
i32.const 0
i32.const 2
i32.shl
local.tee $2
i32.add
i32.const -1
local.get $2
local.get $1
i32.load offset=8
i32.lt_u
select
i32.load
local.tee $1
i32.const 16
i32.const 68
i32.const 61
call $~lib/env/abort
unreachable
end
local.get $0
i32.load offset=4
i32.const 1
local.get $1
i32.const 2
i32.shl
local.tee $2
i32.add
i32.const -1
local.get $2
local.get $1
i32.load offset=8
i32.lt_u
select
i32.load
)
(func $std/array-access/stringArrayArrayPropertyAccess (; 11 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.const 0
call $~lib/array/Array<Array<String>>#__get
i32.const 1
call $~lib/array/Array<String>#__get
call $~lib/string/String#get:length
)
(func $std/array-access/stringArrayArrayMethodCall (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(func $std/array-access/stringArrayArrayMethodCall (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
local.tee $1
i32.load offset=4
i32.const 0
i32.const 2
i32.shl
local.tee $2
i32.add
i32.const -1
local.get $2
local.get $1
i32.load offset=8
i32.lt_u
select
i32.load
local.tee $1
i32.load offset=4
call $~lib/array/Array<Array<String>>#__get
i32.const 1
i32.const 2
i32.shl
local.tee $2
i32.add
i32.const -1
local.get $2
local.get $1
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 16
call $~lib/array/Array<String>#__get
i32.const 56
i32.const 0
call $~lib/string/String#startsWith
)
(func $null (; 9 ;) (type $FUNCSIG$v)
(func $null (; 13 ;) (type $FUNCSIG$v)
)
)

View File

@ -12,16 +12,16 @@
(data (i32.const 8) "\01\00\00\00\03\00\00\00\00\01\02")
(data (i32.const 24) "\02\00\00\00\10\00\00\00\10\00\00\00\10\00\00\00\03\00\00\00\03")
(data (i32.const 48) "\03\00\00\00(\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00-\00l\00i\00t\00e\00r\00a\00l\00.\00t\00s")
(data (i32.const 96) "\01\00\00\00\0c\00\00\00\00\00\00\00\01\00\00\00\02")
(data (i32.const 120) "\04\00\00\00\10\00\00\00h\00\00\00h\00\00\00\0c\00\00\00\03")
(data (i32.const 144) "\01")
(data (i32.const 152) "\04\00\00\00\10\00\00\00\98\00\00\00\98")
(data (i32.const 176) "\03\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00u\00n\00t\00i\00m\00e\00.\00t\00s")
(data (i32.const 216) "\03\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s")
(data (i32.const 264) "\03\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s")
(data (i32.const 96) "\03\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s")
(data (i32.const 136) "\01\00\00\00\0c\00\00\00\00\00\00\00\01\00\00\00\02")
(data (i32.const 160) "\04\00\00\00\10\00\00\00\90\00\00\00\90\00\00\00\0c\00\00\00\03")
(data (i32.const 184) "\01")
(data (i32.const 192) "\04\00\00\00\10\00\00\00\c0\00\00\00\c0")
(data (i32.const 216) "\03\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00u\00n\00t\00i\00m\00e\00.\00t\00s")
(data (i32.const 256) "\03\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s")
(table $0 1 funcref)
(elem (i32.const 0) $null)
(global $std/array-literal/emptyArrayI32 (mut i32) (i32.const 160))
(global $std/array-literal/emptyArrayI32 (mut i32) (i32.const 200))
(global $std/array-literal/i (mut i32) (i32.const 0))
(global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0))
(global $~lib/allocator/arena/offset (mut i32) (i32.const 0))
@ -32,7 +32,49 @@
(export "memory" (memory $0))
(export "table" (table $0))
(start $start)
(func $~lib/memory/memory.allocate (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/array/Array<i8>#__get (; 1 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
local.get $1
local.get $0
i32.load offset=8
i32.ge_u
if
i32.const 0
i32.const 104
i32.const 68
i32.const 61
call $~lib/env/abort
unreachable
end
local.get $1
local.get $0
i32.load offset=4
i32.add
i32.load8_s
)
(func $~lib/array/Array<i32>#__get (; 2 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
local.get $1
local.get $0
i32.load offset=8
i32.const 2
i32.shr_u
i32.ge_u
if
i32.const 0
i32.const 104
i32.const 68
i32.const 61
call $~lib/env/abort
unreachable
end
local.get $0
i32.load offset=4
local.get $1
i32.const 2
i32.shl
i32.add
i32.load
)
(func $~lib/memory/memory.allocate (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
@ -94,7 +136,7 @@
global.set $~lib/allocator/arena/offset
local.get $1
)
(func $~lib/runtime/doAllocate (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/runtime/doAllocate (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
i32.const 1
i32.const 32
@ -115,7 +157,7 @@
i32.const 8
i32.add
)
(func $~lib/memory/memory.fill (; 3 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
(func $~lib/memory/memory.fill (; 5 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
(local $2 i32)
block $~lib/util/memory/memset|inlined.0
local.get $1
@ -326,13 +368,13 @@
end
end
)
(func $~lib/runtime/assertUnregistered (; 4 ;) (type $FUNCSIG$vi) (param $0 i32)
(func $~lib/runtime/assertUnregistered (; 6 ;) (type $FUNCSIG$vi) (param $0 i32)
local.get $0
i32.const 300
i32.const 304
i32.le_u
if
i32.const 0
i32.const 184
i32.const 224
i32.const 191
i32.const 2
call $~lib/env/abort
@ -346,14 +388,14 @@
i32.ne
if
i32.const 0
i32.const 184
i32.const 224
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable
end
)
(func $~lib/runtime/doRegister (; 5 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/runtime/doRegister (; 7 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
local.get $0
call $~lib/runtime/assertUnregistered
local.get $0
@ -363,14 +405,14 @@
i32.store
local.get $0
)
(func $~lib/arraybuffer/ArrayBuffer#constructor (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/arraybuffer/ArrayBuffer#constructor (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
local.get $0
i32.const 1073741816
i32.gt_u
if
i32.const 0
i32.const 224
i32.const 264
i32.const 24
i32.const 43
call $~lib/env/abort
@ -385,7 +427,7 @@
i32.const 1
call $~lib/runtime/doRegister
)
(func $~lib/runtime/ArrayBufferView#constructor (; 7 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/runtime/ArrayBufferView#constructor (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
i32.const 3
i32.const 1073741816
@ -394,7 +436,7 @@
i32.gt_u
if
i32.const 0
i32.const 184
i32.const 224
i32.const 226
i32.const 57
call $~lib/env/abort
@ -435,7 +477,7 @@
i32.store offset=8
local.get $0
)
(func $~lib/util/memory/memcpy (; 8 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/util/memory/memcpy (; 10 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
@ -1332,7 +1374,7 @@
i32.store8
end
)
(func $~lib/memory/memory.copy (; 9 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/memory/memory.copy (; 11 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(local $4 i32)
block $~lib/util/memory/memmove|inlined.0
@ -1526,7 +1568,7 @@
end
end
)
(func $~lib/runtime/doReallocate (; 10 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/runtime/doReallocate (; 12 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -1550,7 +1592,7 @@
i32.shl
i32.const 0
local.get $0
i32.const 300
i32.const 304
i32.gt_u
select
i32.const 1
@ -1590,11 +1632,11 @@
i32.eq
if
local.get $0
i32.const 300
i32.const 304
i32.le_u
if
i32.const 0
i32.const 184
i32.const 224
i32.const 100
i32.const 8
call $~lib/env/abort
@ -1620,15 +1662,11 @@
i32.store offset=4
local.get $0
)
(func $~lib/array/ensureCapacity (; 11 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/array/ensureCapacity (; 13 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
local.get $1
local.get $0
i32.load
local.tee $3
i32.const 8
i32.sub
i32.load offset=4
i32.load offset=8
local.get $2
i32.shr_u
i32.gt_u
@ -1640,20 +1678,23 @@
i32.gt_u
if
i32.const 0
i32.const 272
i32.const 12
i32.const 104
i32.const 10
i32.const 64
call $~lib/env/abort
unreachable
end
local.get $3
local.get $3
local.get $0
i32.load
local.tee $3
local.get $1
local.get $2
i32.shl
local.tee $2
call $~lib/runtime/doReallocate
local.tee $1
local.set $1
local.get $1
local.get $3
i32.ne
if
local.get $0
@ -1668,7 +1709,7 @@
i32.store offset=8
end
)
(func $~lib/array/Array<i8>#__set (; 12 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/array/Array<i8>#__set (; 14 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
local.get $0
local.get $1
i32.const 1
@ -1693,7 +1734,7 @@
i32.store offset=12
end
)
(func $~lib/array/Array<i32>#__set (; 13 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/array/Array<i32>#__set (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
local.get $0
local.get $1
i32.const 1
@ -1720,19 +1761,19 @@
i32.store offset=12
end
)
(func $std/array-literal/Ref#constructor (; 14 ;) (type $FUNCSIG$i) (result i32)
(func $std/array-literal/Ref#constructor (; 16 ;) (type $FUNCSIG$i) (result i32)
i32.const 0
call $~lib/runtime/doAllocate
i32.const 6
call $~lib/runtime/doRegister
)
(func $std/array-literal/RefWithCtor#constructor (; 15 ;) (type $FUNCSIG$i) (result i32)
(func $std/array-literal/RefWithCtor#constructor (; 17 ;) (type $FUNCSIG$i) (result i32)
i32.const 0
call $~lib/runtime/doAllocate
i32.const 8
call $~lib/runtime/doRegister
)
(func $start:std/array-literal (; 16 ;) (type $FUNCSIG$v)
(func $start:std/array-literal (; 18 ;) (type $FUNCSIG$v)
(local $0 i32)
i32.const 44
i32.load
@ -1746,15 +1787,9 @@
call $~lib/env/abort
unreachable
end
i32.const 36
i32.load
i32.const -1
i32.const 32
i32.const 0
i32.const 40
i32.load
i32.lt_u
select
i32.load8_s
call $~lib/array/Array<i8>#__get
if
i32.const 0
i32.const 56
@ -1763,17 +1798,9 @@
call $~lib/env/abort
unreachable
end
i32.const 36
i32.load
i32.const 32
i32.const 1
i32.add
i32.const -1
i32.const 1
i32.const 40
i32.load
i32.lt_u
select
i32.load8_s
call $~lib/array/Array<i8>#__get
i32.const 1
i32.ne
if
@ -1784,17 +1811,9 @@
call $~lib/env/abort
unreachable
end
i32.const 36
i32.load
i32.const 32
i32.const 2
i32.add
i32.const -1
i32.const 2
i32.const 40
i32.load
i32.lt_u
select
i32.load8_s
call $~lib/array/Array<i8>#__get
i32.const 2
i32.ne
if
@ -1805,7 +1824,7 @@
call $~lib/env/abort
unreachable
end
i32.const 140
i32.const 180
i32.load
i32.const 3
i32.ne
@ -1817,15 +1836,9 @@
call $~lib/env/abort
unreachable
end
i32.const 132
i32.load
i32.const -1
i32.const 168
i32.const 0
i32.const 136
i32.load
i32.lt_u
select
i32.load
call $~lib/array/Array<i32>#__get
if
i32.const 0
i32.const 56
@ -1834,17 +1847,9 @@
call $~lib/env/abort
unreachable
end
i32.const 132
i32.load
i32.const 4
i32.add
i32.const -1
i32.const 4
i32.const 136
i32.load
i32.lt_u
select
i32.load
i32.const 168
i32.const 1
call $~lib/array/Array<i32>#__get
i32.const 1
i32.ne
if
@ -1855,17 +1860,9 @@
call $~lib/env/abort
unreachable
end
i32.const 132
i32.load
i32.const 8
i32.add
i32.const -1
i32.const 8
i32.const 136
i32.load
i32.lt_u
select
i32.load
i32.const 168
i32.const 2
call $~lib/array/Array<i32>#__get
i32.const 2
i32.ne
if
@ -1937,15 +1934,8 @@
unreachable
end
global.get $std/array-literal/dynamicArrayI8
local.tee $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load8_s
call $~lib/array/Array<i8>#__get
if
i32.const 0
i32.const 56
@ -1955,17 +1945,8 @@
unreachable
end
global.get $std/array-literal/dynamicArrayI8
local.tee $0
i32.load offset=4
i32.const 1
i32.add
i32.const -1
i32.const 1
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load8_s
call $~lib/array/Array<i8>#__get
i32.const 1
i32.ne
if
@ -1977,17 +1958,8 @@
unreachable
end
global.get $std/array-literal/dynamicArrayI8
local.tee $0
i32.load offset=4
i32.const 2
i32.add
i32.const -1
i32.const 2
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load8_s
call $~lib/array/Array<i8>#__get
i32.const 2
i32.ne
if
@ -2047,15 +2019,8 @@
unreachable
end
global.get $std/array-literal/dynamicArrayI32
local.tee $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<i32>#__get
if
i32.const 0
i32.const 56
@ -2065,17 +2030,8 @@
unreachable
end
global.get $std/array-literal/dynamicArrayI32
local.tee $0
i32.load offset=4
i32.const 4
i32.add
i32.const -1
i32.const 4
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1
call $~lib/array/Array<i32>#__get
i32.const 1
i32.ne
if
@ -2087,17 +2043,8 @@
unreachable
end
global.get $std/array-literal/dynamicArrayI32
local.tee $0
i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 2
call $~lib/array/Array<i32>#__get
i32.const 2
i32.ne
if
@ -2185,10 +2132,10 @@
unreachable
end
)
(func $start (; 17 ;) (type $FUNCSIG$v)
(func $start (; 19 ;) (type $FUNCSIG$v)
call $start:std/array-literal
)
(func $null (; 18 ;) (type $FUNCSIG$v)
(func $null (; 20 ;) (type $FUNCSIG$v)
nop
)
)

View File

@ -11,21 +11,21 @@
(data (i32.const 8) "\01\00\00\00\03\00\00\00\00\01\02")
(data (i32.const 24) "\02\00\00\00\10\00\00\00\10\00\00\00\10\00\00\00\03\00\00\00\03\00\00\00")
(data (i32.const 48) "\03\00\00\00(\00\00\00s\00t\00d\00/\00a\00r\00r\00a\00y\00-\00l\00i\00t\00e\00r\00a\00l\00.\00t\00s\00")
(data (i32.const 96) "\01\00\00\00\0c\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00")
(data (i32.const 120) "\04\00\00\00\10\00\00\00h\00\00\00h\00\00\00\0c\00\00\00\03\00\00\00")
(data (i32.const 144) "\01\00\00\00\00\00\00\00")
(data (i32.const 152) "\04\00\00\00\10\00\00\00\98\00\00\00\98\00\00\00\00\00\00\00\00\00\00\00")
(data (i32.const 176) "\03\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00u\00n\00t\00i\00m\00e\00.\00t\00s\00")
(data (i32.const 216) "\03\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00")
(data (i32.const 264) "\03\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00")
(data (i32.const 96) "\03\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00")
(data (i32.const 136) "\01\00\00\00\0c\00\00\00\00\00\00\00\01\00\00\00\02\00\00\00")
(data (i32.const 160) "\04\00\00\00\10\00\00\00\90\00\00\00\90\00\00\00\0c\00\00\00\03\00\00\00")
(data (i32.const 184) "\01\00\00\00\00\00\00\00")
(data (i32.const 192) "\04\00\00\00\10\00\00\00\c0\00\00\00\c0\00\00\00\00\00\00\00\00\00\00\00")
(data (i32.const 216) "\03\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00u\00n\00t\00i\00m\00e\00.\00t\00s\00")
(data (i32.const 256) "\03\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00")
(table $0 1 funcref)
(elem (i32.const 0) $null)
(global $std/array-literal/staticArrayI8 i32 (i32.const 32))
(global $~lib/runtime/GC_IMPLEMENTED i32 (i32.const 0))
(global $~lib/runtime/HEADER_SIZE i32 (i32.const 8))
(global $~lib/runtime/HEADER_MAGIC i32 (i32.const -1520547049))
(global $std/array-literal/staticArrayI32 i32 (i32.const 128))
(global $std/array-literal/emptyArrayI32 (mut i32) (i32.const 160))
(global $std/array-literal/staticArrayI32 i32 (i32.const 168))
(global $std/array-literal/emptyArrayI32 (mut i32) (i32.const 200))
(global $std/array-literal/i (mut i32) (i32.const 0))
(global $~lib/runtime/MAX_BYTELENGTH i32 (i32.const 1073741816))
(global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0))
@ -35,7 +35,7 @@
(global $std/array-literal/dynamicArrayI32 (mut i32) (i32.const 0))
(global $std/array-literal/dynamicArrayRef (mut i32) (i32.const 0))
(global $std/array-literal/dynamicArrayRefWithCtor (mut i32) (i32.const 0))
(global $~lib/memory/HEAP_BASE i32 (i32.const 300))
(global $~lib/memory/HEAP_BASE i32 (i32.const 304))
(export "memory" (memory $0))
(export "table" (table $0))
(start $start)
@ -43,11 +43,57 @@
local.get $0
i32.load offset=12
)
(func $~lib/array/Array<i32>#get:length (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/array/Array<i8>#__get (; 2 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
local.get $1
local.get $0
i32.load offset=8
i32.const 0
i32.shr_u
i32.ge_u
if
i32.const 0
i32.const 104
i32.const 68
i32.const 61
call $~lib/env/abort
unreachable
end
local.get $0
i32.load offset=4
local.get $1
i32.const 0
i32.shl
i32.add
i32.load8_s
)
(func $~lib/array/Array<i32>#get:length (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.load offset=12
)
(func $~lib/runtime/ADJUSTOBLOCK (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/array/Array<i32>#__get (; 4 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
local.get $1
local.get $0
i32.load offset=8
i32.const 2
i32.shr_u
i32.ge_u
if
i32.const 0
i32.const 104
i32.const 68
i32.const 61
call $~lib/env/abort
unreachable
end
local.get $0
i32.load offset=4
local.get $1
i32.const 2
i32.shl
i32.add
i32.load
)
(func $~lib/runtime/ADJUSTOBLOCK (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
i32.const 1
i32.const 32
local.get $0
@ -59,7 +105,7 @@
i32.sub
i32.shl
)
(func $~lib/memory/memory.allocate (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/memory/memory.allocate (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
@ -144,7 +190,7 @@
end
return
)
(func $~lib/runtime/doAllocate (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/runtime/doAllocate (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
local.get $0
call $~lib/runtime/ADJUSTOBLOCK
@ -160,7 +206,7 @@
global.get $~lib/runtime/HEADER_SIZE
i32.add
)
(func $~lib/memory/memory.fill (; 6 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/memory/memory.fill (; 8 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i64)
@ -416,14 +462,14 @@
end
end
)
(func $~lib/runtime/assertUnregistered (; 7 ;) (type $FUNCSIG$vi) (param $0 i32)
(func $~lib/runtime/assertUnregistered (; 9 ;) (type $FUNCSIG$vi) (param $0 i32)
local.get $0
global.get $~lib/memory/HEAP_BASE
i32.gt_u
i32.eqz
if
i32.const 0
i32.const 184
i32.const 224
i32.const 191
i32.const 2
call $~lib/env/abort
@ -438,14 +484,14 @@
i32.eqz
if
i32.const 0
i32.const 184
i32.const 224
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable
end
)
(func $~lib/runtime/doRegister (; 8 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/runtime/doRegister (; 10 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
local.get $0
call $~lib/runtime/assertUnregistered
local.get $0
@ -455,7 +501,7 @@
i32.store
local.get $0
)
(func $~lib/arraybuffer/ArrayBuffer#constructor (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/arraybuffer/ArrayBuffer#constructor (; 11 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
local.get $1
@ -463,7 +509,7 @@
i32.gt_u
if
i32.const 0
i32.const 224
i32.const 264
i32.const 24
i32.const 43
call $~lib/env/abort
@ -488,11 +534,11 @@
call $~lib/runtime/doRegister
end
)
(func $~lib/runtime/ALLOCATE (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/runtime/ALLOCATE (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
call $~lib/runtime/doAllocate
)
(func $~lib/runtime/ArrayBufferView#constructor (; 11 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/runtime/ArrayBufferView#constructor (; 13 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(local $4 i32)
local.get $1
@ -502,7 +548,7 @@
i32.gt_u
if
i32.const 0
i32.const 184
i32.const 224
i32.const 226
i32.const 57
call $~lib/env/abort
@ -550,7 +596,7 @@
i32.store offset=8
local.get $0
)
(func $~lib/array/Array<i8>#constructor (; 12 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/array/Array<i8>#constructor (; 14 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
local.get $0
if (result i32)
@ -575,13 +621,7 @@
i32.store offset=12
local.get $0
)
(func $~lib/arraybuffer/ArrayBuffer#get:byteLength (; 13 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
global.get $~lib/runtime/HEADER_SIZE
i32.sub
i32.load offset=4
)
(func $~lib/util/memory/memcpy (; 14 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/util/memory/memcpy (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
@ -1782,7 +1822,7 @@
i32.store8
end
)
(func $~lib/memory/memory.copy (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/memory/memory.copy (; 16 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
block $~lib/util/memory/memmove|inlined.0
local.get $0
@ -2011,12 +2051,12 @@
end
end
)
(func $~lib/memory/memory.free (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
(func $~lib/memory/memory.free (; 17 ;) (type $FUNCSIG$vi) (param $0 i32)
(local $1 i32)
local.get $0
local.set $1
)
(func $~lib/runtime/doReallocate (; 17 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/runtime/doReallocate (; 18 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -2080,7 +2120,7 @@
i32.eqz
if
i32.const 0
i32.const 184
i32.const 224
i32.const 100
i32.const 8
call $~lib/env/abort
@ -2113,22 +2153,16 @@
i32.store offset=4
local.get $0
)
(func $~lib/array/ensureCapacity (; 18 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/array/ensureCapacity (; 19 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
(local $6 i32)
(local $7 i32)
local.get $1
local.get $0
i32.load
local.set $3
local.get $3
call $~lib/arraybuffer/ArrayBuffer#get:byteLength
i32.load offset=8
local.get $2
i32.shr_u
local.set $4
local.get $1
local.get $4
i32.gt_u
if
local.get $1
@ -2138,43 +2172,46 @@
i32.gt_u
if
i32.const 0
i32.const 272
i32.const 12
i32.const 104
i32.const 10
i32.const 64
call $~lib/env/abort
unreachable
end
local.get $0
i32.load
local.set $3
local.get $1
local.get $2
i32.shl
local.set $5
local.set $4
block $~lib/runtime/REALLOCATE|inlined.0 (result i32)
local.get $3
local.set $5
local.get $4
local.set $6
local.get $5
local.set $7
local.get $6
local.get $7
call $~lib/runtime/doReallocate
end
local.set $7
local.get $7
local.set $6
local.get $6
local.get $3
i32.ne
if
local.get $0
local.get $7
local.get $6
i32.store
local.get $0
local.get $7
local.get $6
i32.store offset=4
end
local.get $0
local.get $5
local.get $4
i32.store offset=8
end
)
(func $~lib/array/Array<i8>#__set (; 19 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/array/Array<i8>#__set (; 20 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
local.get $0
local.get $1
i32.const 1
@ -2201,7 +2238,7 @@
i32.store offset=12
end
)
(func $~lib/array/Array<i32>#constructor (; 20 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/array/Array<i32>#constructor (; 21 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
local.get $0
if (result i32)
@ -2226,7 +2263,7 @@
i32.store offset=12
local.get $0
)
(func $~lib/array/Array<i32>#__set (; 21 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/array/Array<i32>#__set (; 22 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
local.get $0
local.get $1
i32.const 1
@ -2253,7 +2290,7 @@
i32.store offset=12
end
)
(func $std/array-literal/Ref#constructor (; 22 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $std/array-literal/Ref#constructor (; 23 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
local.get $0
i32.eqz
@ -2270,7 +2307,7 @@
end
local.get $0
)
(func $~lib/array/Array<Ref>#constructor (; 23 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/array/Array<Ref>#constructor (; 24 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
local.get $0
if (result i32)
@ -2295,7 +2332,7 @@
i32.store offset=12
local.get $0
)
(func $~lib/array/Array<Ref>#__set (; 24 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/array/Array<Ref>#__set (; 25 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
local.get $0
local.get $1
i32.const 1
@ -2322,11 +2359,11 @@
i32.store offset=12
end
)
(func $~lib/array/Array<Ref>#get:length (; 25 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/array/Array<Ref>#get:length (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.load offset=12
)
(func $std/array-literal/RefWithCtor#constructor (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $std/array-literal/RefWithCtor#constructor (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
local.get $0
i32.eqz
@ -2343,7 +2380,7 @@
end
local.get $0
)
(func $~lib/array/Array<RefWithCtor>#constructor (; 27 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/array/Array<RefWithCtor>#constructor (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
local.get $0
if (result i32)
@ -2368,7 +2405,7 @@
i32.store offset=12
local.get $0
)
(func $~lib/array/Array<RefWithCtor>#__set (; 28 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/array/Array<RefWithCtor>#__set (; 29 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
local.get $0
local.get $1
i32.const 1
@ -2395,17 +2432,15 @@
i32.store offset=12
end
)
(func $~lib/array/Array<RefWithCtor>#get:length (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/array/Array<RefWithCtor>#get:length (; 30 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.load offset=12
)
(func $start:std/array-literal (; 30 ;) (type $FUNCSIG$v)
(func $start:std/array-literal (; 31 ;) (type $FUNCSIG$v)
(local $0 i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
global.get $std/array-literal/staticArrayI8
call $~lib/array/Array<i8>#get:length
i32.const 3
@ -2420,18 +2455,8 @@
unreachable
end
global.get $std/array-literal/staticArrayI8
local.tee $0
i32.load offset=4
i32.const 0
local.tee $1
i32.add
i32.const -1
local.get $1
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load8_s
call $~lib/array/Array<i8>#__get
i32.const 0
i32.eq
i32.eqz
@ -2444,18 +2469,8 @@
unreachable
end
global.get $std/array-literal/staticArrayI8
local.tee $0
i32.load offset=4
i32.const 1
local.tee $1
i32.add
i32.const -1
local.get $1
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load8_s
call $~lib/array/Array<i8>#__get
i32.const 1
i32.eq
i32.eqz
@ -2468,18 +2483,8 @@
unreachable
end
global.get $std/array-literal/staticArrayI8
local.tee $0
i32.load offset=4
i32.const 2
local.tee $1
i32.add
i32.const -1
local.get $1
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load8_s
call $~lib/array/Array<i8>#__get
i32.const 2
i32.eq
i32.eqz
@ -2505,20 +2510,8 @@
unreachable
end
global.get $std/array-literal/staticArrayI32
local.tee $0
i32.load offset=4
i32.const 0
i32.const 2
i32.shl
local.tee $1
i32.add
i32.const -1
local.get $1
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<i32>#__get
i32.const 0
i32.eq
i32.eqz
@ -2531,20 +2524,8 @@
unreachable
end
global.get $std/array-literal/staticArrayI32
local.tee $0
i32.load offset=4
i32.const 1
i32.const 2
i32.shl
local.tee $1
i32.add
i32.const -1
local.get $1
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<i32>#__get
i32.const 1
i32.eq
i32.eqz
@ -2557,20 +2538,8 @@
unreachable
end
global.get $std/array-literal/staticArrayI32
local.tee $0
i32.load offset=4
i32.const 2
i32.const 2
i32.shl
local.tee $1
i32.add
i32.const -1
local.get $1
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<i32>#__get
i32.const 2
i32.eq
i32.eqz
@ -2609,12 +2578,12 @@
i32.const 0
i32.const 3
call $~lib/array/Array<i8>#constructor
local.set $2
local.get $2
local.set $0
local.get $0
i32.const 0
global.get $std/array-literal/i
call $~lib/array/Array<i8>#__set
local.get $2
local.get $0
i32.const 1
block (result i32)
global.get $std/array-literal/i
@ -2624,7 +2593,7 @@
global.get $std/array-literal/i
end
call $~lib/array/Array<i8>#__set
local.get $2
local.get $0
i32.const 2
block (result i32)
global.get $std/array-literal/i
@ -2634,7 +2603,7 @@
global.get $std/array-literal/i
end
call $~lib/array/Array<i8>#__set
local.get $2
local.get $0
end
global.set $std/array-literal/dynamicArrayI8
global.get $std/array-literal/dynamicArrayI8
@ -2651,18 +2620,8 @@
unreachable
end
global.get $std/array-literal/dynamicArrayI8
local.tee $2
i32.load offset=4
i32.const 0
local.tee $0
i32.add
i32.const -1
local.get $0
local.get $2
i32.load offset=8
i32.lt_u
select
i32.load8_s
call $~lib/array/Array<i8>#__get
i32.const 0
i32.eq
i32.eqz
@ -2675,18 +2634,8 @@
unreachable
end
global.get $std/array-literal/dynamicArrayI8
local.tee $2
i32.load offset=4
i32.const 1
local.tee $0
i32.add
i32.const -1
local.get $0
local.get $2
i32.load offset=8
i32.lt_u
select
i32.load8_s
call $~lib/array/Array<i8>#__get
i32.const 1
i32.eq
i32.eqz
@ -2699,18 +2648,8 @@
unreachable
end
global.get $std/array-literal/dynamicArrayI8
local.tee $2
i32.load offset=4
i32.const 2
local.tee $0
i32.add
i32.const -1
local.get $0
local.get $2
i32.load offset=8
i32.lt_u
select
i32.load8_s
call $~lib/array/Array<i8>#__get
i32.const 2
i32.eq
i32.eqz
@ -2728,12 +2667,12 @@
i32.const 0
i32.const 3
call $~lib/array/Array<i32>#constructor
local.set $3
local.get $3
local.set $1
local.get $1
i32.const 0
global.get $std/array-literal/i
call $~lib/array/Array<i32>#__set
local.get $3
local.get $1
i32.const 1
block (result i32)
global.get $std/array-literal/i
@ -2743,7 +2682,7 @@
global.get $std/array-literal/i
end
call $~lib/array/Array<i32>#__set
local.get $3
local.get $1
i32.const 2
block (result i32)
global.get $std/array-literal/i
@ -2753,7 +2692,7 @@
global.get $std/array-literal/i
end
call $~lib/array/Array<i32>#__set
local.get $3
local.get $1
end
global.set $std/array-literal/dynamicArrayI32
global.get $std/array-literal/dynamicArrayI32
@ -2770,20 +2709,8 @@
unreachable
end
global.get $std/array-literal/dynamicArrayI32
local.tee $3
i32.load offset=4
i32.const 0
i32.const 2
i32.shl
local.tee $2
i32.add
i32.const -1
local.get $2
local.get $3
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<i32>#__get
i32.const 0
i32.eq
i32.eqz
@ -2796,20 +2723,8 @@
unreachable
end
global.get $std/array-literal/dynamicArrayI32
local.tee $3
i32.load offset=4
i32.const 1
i32.const 2
i32.shl
local.tee $2
i32.add
i32.const -1
local.get $2
local.get $3
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<i32>#__get
i32.const 1
i32.eq
i32.eqz
@ -2822,20 +2737,8 @@
unreachable
end
global.get $std/array-literal/dynamicArrayI32
local.tee $3
i32.load offset=4
i32.const 2
i32.const 2
i32.shl
local.tee $2
i32.add
i32.const -1
local.get $2
local.get $3
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<i32>#__get
i32.const 2
i32.eq
i32.eqz
@ -2851,23 +2754,23 @@
i32.const 0
i32.const 3
call $~lib/array/Array<Ref>#constructor
local.set $4
local.get $4
local.set $2
local.get $2
i32.const 0
i32.const 0
call $std/array-literal/Ref#constructor
call $~lib/array/Array<Ref>#__set
local.get $4
local.get $2
i32.const 1
i32.const 0
call $std/array-literal/Ref#constructor
call $~lib/array/Array<Ref>#__set
local.get $4
local.get $2
i32.const 2
i32.const 0
call $std/array-literal/Ref#constructor
call $~lib/array/Array<Ref>#__set
local.get $4
local.get $2
end
global.set $std/array-literal/dynamicArrayRef
global.get $std/array-literal/dynamicArrayRef
@ -2887,23 +2790,23 @@
i32.const 0
i32.const 3
call $~lib/array/Array<RefWithCtor>#constructor
local.set $5
local.get $5
local.set $3
local.get $3
i32.const 0
i32.const 0
call $std/array-literal/RefWithCtor#constructor
call $~lib/array/Array<RefWithCtor>#__set
local.get $5
local.get $3
i32.const 1
i32.const 0
call $std/array-literal/RefWithCtor#constructor
call $~lib/array/Array<RefWithCtor>#__set
local.get $5
local.get $3
i32.const 2
i32.const 0
call $std/array-literal/RefWithCtor#constructor
call $~lib/array/Array<RefWithCtor>#__set
local.get $5
local.get $3
end
global.set $std/array-literal/dynamicArrayRefWithCtor
global.get $std/array-literal/dynamicArrayRefWithCtor
@ -2920,9 +2823,9 @@
unreachable
end
)
(func $start (; 31 ;) (type $FUNCSIG$v)
(func $start (; 32 ;) (type $FUNCSIG$v)
call $start:std/array-literal
)
(func $null (; 32 ;) (type $FUNCSIG$v)
(func $null (; 33 ;) (type $FUNCSIG$v)
)
)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,12 @@
(module
(type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
(type $FUNCSIG$iii (func (param i32 i32) (result i32)))
(type $FUNCSIG$v (func))
(type $FUNCSIG$ii (func (param i32) (result i32)))
(type $FUNCSIG$vii (func (param i32 i32)))
(type $FUNCSIG$ji (func (param i32) (result i64)))
(type $FUNCSIG$fi (func (param i32) (result f32)))
(type $FUNCSIG$di (func (param i32) (result f64)))
(import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32)))
(memory $0 1)
(data (i32.const 8) "\01\00\00\00\08\00\00\00\01\00\00\00\02")
@ -13,12 +19,488 @@
(data (i32.const 150) "\f4?\00\00\00\00\00\00\02@")
(data (i32.const 160) "\05\00\00\00\10\00\00\00\90\00\00\00\90\00\00\00\10\00\00\00\02")
(data (i32.const 184) "\06\00\00\00&\00\00\00s\00t\00d\00/\00s\00t\00a\00t\00i\00c\00-\00a\00r\00r\00a\00y\00.\00t\00s")
(data (i32.const 232) "\06\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s")
(data (i32.const 272) "\06\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00u\00n\00t\00i\00m\00e\00.\00t\00s")
(table $0 1 funcref)
(elem (i32.const 0) $null)
(export "memory" (memory $0))
(export "table" (table $0))
(start $start)
(func $start:std/static-array (; 1 ;) (type $FUNCSIG$v)
(func $~lib/array/Array<i32>#__get (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.const 40
i32.load
i32.const 2
i32.shr_u
i32.ge_u
if
i32.const 0
i32.const 240
i32.const 68
i32.const 61
call $~lib/env/abort
unreachable
end
i32.const 36
i32.load
local.get $0
i32.const 2
i32.shl
i32.add
i32.load
)
(func $~lib/memory/memory.fill (; 2 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
(local $2 i32)
block $~lib/util/memory/memset|inlined.0
local.get $1
i32.eqz
br_if $~lib/util/memory/memset|inlined.0
local.get $0
i32.const 0
i32.store8
local.get $0
local.get $1
i32.add
i32.const 1
i32.sub
i32.const 0
i32.store8
local.get $1
i32.const 2
i32.le_u
br_if $~lib/util/memory/memset|inlined.0
local.get $0
i32.const 1
i32.add
i32.const 0
i32.store8
local.get $0
i32.const 2
i32.add
i32.const 0
i32.store8
local.get $0
local.get $1
i32.add
local.tee $2
i32.const 2
i32.sub
i32.const 0
i32.store8
local.get $2
i32.const 3
i32.sub
i32.const 0
i32.store8
local.get $1
i32.const 6
i32.le_u
br_if $~lib/util/memory/memset|inlined.0
local.get $0
i32.const 3
i32.add
i32.const 0
i32.store8
local.get $0
local.get $1
i32.add
i32.const 4
i32.sub
i32.const 0
i32.store8
local.get $1
i32.const 8
i32.le_u
br_if $~lib/util/memory/memset|inlined.0
local.get $1
i32.const 0
local.get $0
i32.sub
i32.const 3
i32.and
local.tee $2
i32.sub
local.set $1
local.get $0
local.get $2
i32.add
local.tee $0
i32.const 0
i32.store
local.get $1
i32.const -4
i32.and
local.tee $1
local.get $0
i32.add
i32.const 4
i32.sub
i32.const 0
i32.store
local.get $1
i32.const 8
i32.le_u
br_if $~lib/util/memory/memset|inlined.0
local.get $0
i32.const 4
i32.add
i32.const 0
i32.store
local.get $0
i32.const 8
i32.add
i32.const 0
i32.store
local.get $0
local.get $1
i32.add
local.tee $2
i32.const 12
i32.sub
i32.const 0
i32.store
local.get $2
i32.const 8
i32.sub
i32.const 0
i32.store
local.get $1
i32.const 24
i32.le_u
br_if $~lib/util/memory/memset|inlined.0
local.get $0
i32.const 12
i32.add
i32.const 0
i32.store
local.get $0
i32.const 16
i32.add
i32.const 0
i32.store
local.get $0
i32.const 20
i32.add
i32.const 0
i32.store
local.get $0
i32.const 24
i32.add
i32.const 0
i32.store
local.get $0
local.get $1
i32.add
local.tee $2
i32.const 28
i32.sub
i32.const 0
i32.store
local.get $2
i32.const 24
i32.sub
i32.const 0
i32.store
local.get $2
i32.const 20
i32.sub
i32.const 0
i32.store
local.get $2
i32.const 16
i32.sub
i32.const 0
i32.store
local.get $0
i32.const 4
i32.and
i32.const 24
i32.add
local.tee $2
local.get $0
i32.add
local.set $0
local.get $1
local.get $2
i32.sub
local.set $1
loop $continue|0
local.get $1
i32.const 32
i32.ge_u
if
local.get $0
i64.const 0
i64.store
local.get $0
i32.const 8
i32.add
i64.const 0
i64.store
local.get $0
i32.const 16
i32.add
i64.const 0
i64.store
local.get $0
i32.const 24
i32.add
i64.const 0
i64.store
local.get $1
i32.const 32
i32.sub
local.set $1
local.get $0
i32.const 32
i32.add
local.set $0
br $continue|0
end
end
end
)
(func $~lib/runtime/doReallocate (; 3 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
local.get $0
i32.const 8
i32.sub
local.tee $3
i32.load offset=4
local.tee $2
local.get $1
i32.lt_u
if
i32.const 1
i32.const 32
local.get $2
i32.const 7
i32.add
i32.clz
i32.sub
i32.shl
i32.const 0
local.get $0
i32.const 312
i32.gt_u
select
i32.const 1
i32.const 32
local.get $1
i32.const 7
i32.add
i32.clz
i32.sub
i32.shl
i32.lt_u
if
unreachable
else
local.get $0
local.get $2
i32.add
local.get $1
local.get $2
i32.sub
call $~lib/memory/memory.fill
end
end
local.get $3
local.get $1
i32.store offset=4
local.get $0
)
(func $~lib/array/ensureCapacity (; 4 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
(local $2 i32)
(local $3 i32)
i32.const 1
local.get $0
i32.load offset=8
local.get $1
i32.shr_u
i32.gt_u
if
i32.const 1
i32.const 1073741816
local.get $1
i32.shr_u
i32.gt_u
if
i32.const 0
i32.const 240
i32.const 10
i32.const 64
call $~lib/env/abort
unreachable
end
local.get $0
i32.load
local.tee $3
i32.const 1
local.get $1
i32.shl
local.tee $1
call $~lib/runtime/doReallocate
local.set $2
local.get $2
local.get $3
i32.ne
if
local.get $0
local.get $2
i32.store
local.get $0
local.get $2
i32.store offset=4
end
local.get $0
local.get $1
i32.store offset=8
end
)
(func $~lib/array/Array<i32>#__set (; 5 ;) (type $FUNCSIG$v)
i32.const 32
i32.const 2
call $~lib/array/ensureCapacity
i32.const 36
i32.load
i32.const 2
i32.store
i32.const 0
i32.const 44
i32.load
i32.ge_s
if
i32.const 44
i32.const 1
i32.store
end
)
(func $~lib/array/Array<i64>#__get (; 6 ;) (type $FUNCSIG$ji) (param $0 i32) (result i64)
local.get $0
i32.const 88
i32.load
i32.const 3
i32.shr_u
i32.ge_u
if
i32.const 0
i32.const 240
i32.const 68
i32.const 61
call $~lib/env/abort
unreachable
end
i32.const 84
i32.load
local.get $0
i32.const 3
i32.shl
i32.add
i64.load
)
(func $~lib/array/Array<i64>#__set (; 7 ;) (type $FUNCSIG$v)
i32.const 80
i32.const 3
call $~lib/array/ensureCapacity
i32.const 84
i32.load
i64.const 4
i64.store
i32.const 0
i32.const 92
i32.load
i32.ge_s
if
i32.const 92
i32.const 1
i32.store
end
)
(func $~lib/array/Array<f32>#__get (; 8 ;) (type $FUNCSIG$fi) (param $0 i32) (result f32)
local.get $0
i32.const 128
i32.load
i32.const 2
i32.shr_u
i32.ge_u
if
i32.const 0
i32.const 240
i32.const 68
i32.const 61
call $~lib/env/abort
unreachable
end
i32.const 124
i32.load
local.get $0
i32.const 2
i32.shl
i32.add
f32.load
)
(func $~lib/array/Array<f32>#__set (; 9 ;) (type $FUNCSIG$v)
i32.const 120
i32.const 2
call $~lib/array/ensureCapacity
i32.const 124
i32.load
f32.const 2.5
f32.store
i32.const 0
i32.const 132
i32.load
i32.ge_s
if
i32.const 132
i32.const 1
i32.store
end
)
(func $~lib/array/Array<f64>#__get (; 10 ;) (type $FUNCSIG$di) (param $0 i32) (result f64)
local.get $0
i32.const 176
i32.load
i32.const 3
i32.shr_u
i32.ge_u
if
i32.const 0
i32.const 240
i32.const 68
i32.const 61
call $~lib/env/abort
unreachable
end
i32.const 172
i32.load
local.get $0
i32.const 3
i32.shl
i32.add
f64.load
)
(func $~lib/array/Array<f64>#__set (; 11 ;) (type $FUNCSIG$v)
i32.const 168
i32.const 3
call $~lib/array/ensureCapacity
i32.const 172
i32.load
f64.const 2.25
f64.store
i32.const 0
i32.const 180
i32.load
i32.ge_s
if
i32.const 180
i32.const 1
i32.store
end
)
(func $start:std/static-array (; 12 ;) (type $FUNCSIG$v)
i32.const 44
i32.load
i32.const 2
@ -31,15 +513,8 @@
call $~lib/env/abort
unreachable
end
i32.const 36
i32.load
i32.const -1
i32.const 0
i32.const 40
i32.load
i32.lt_u
select
i32.load
call $~lib/array/Array<i32>#__get
i32.const 1
i32.ne
if
@ -50,17 +525,8 @@
call $~lib/env/abort
unreachable
end
i32.const 36
i32.load
i32.const 4
i32.add
i32.const -1
i32.const 4
i32.const 40
i32.load
i32.lt_u
select
i32.load
i32.const 1
call $~lib/array/Array<i32>#__get
i32.const 2
i32.ne
if
@ -71,19 +537,9 @@
call $~lib/env/abort
unreachable
end
i32.const 36
i32.load
i32.const 2
i32.store
i32.const 36
i32.load
i32.const -1
call $~lib/array/Array<i32>#__set
i32.const 0
i32.const 40
i32.load
i32.lt_u
select
i32.load
call $~lib/array/Array<i32>#__get
i32.const 2
i32.ne
if
@ -106,15 +562,8 @@
call $~lib/env/abort
unreachable
end
i32.const 84
i32.load
i32.const -1
i32.const 0
i32.const 88
i32.load
i32.lt_u
select
i64.load
call $~lib/array/Array<i64>#__get
i64.const 3
i64.ne
if
@ -125,17 +574,8 @@
call $~lib/env/abort
unreachable
end
i32.const 84
i32.load
i32.const 8
i32.add
i32.const -1
i32.const 8
i32.const 88
i32.load
i32.lt_u
select
i64.load
i32.const 1
call $~lib/array/Array<i64>#__get
i64.const 4
i64.ne
if
@ -146,19 +586,9 @@
call $~lib/env/abort
unreachable
end
i32.const 84
i32.load
i64.const 4
i64.store
i32.const 84
i32.load
i32.const -1
call $~lib/array/Array<i64>#__set
i32.const 0
i32.const 88
i32.load
i32.lt_u
select
i64.load
call $~lib/array/Array<i64>#__get
i64.const 4
i64.ne
if
@ -181,15 +611,8 @@
call $~lib/env/abort
unreachable
end
i32.const 124
i32.load
i32.const -1
i32.const 0
i32.const 128
i32.load
i32.lt_u
select
f32.load
call $~lib/array/Array<f32>#__get
f32.const 1.5
f32.ne
if
@ -200,17 +623,8 @@
call $~lib/env/abort
unreachable
end
i32.const 124
i32.load
i32.const 4
i32.add
i32.const -1
i32.const 4
i32.const 128
i32.load
i32.lt_u
select
f32.load
i32.const 1
call $~lib/array/Array<f32>#__get
f32.const 2.5
f32.ne
if
@ -221,19 +635,9 @@
call $~lib/env/abort
unreachable
end
i32.const 124
i32.load
f32.const 2.5
f32.store
i32.const 124
i32.load
i32.const -1
call $~lib/array/Array<f32>#__set
i32.const 0
i32.const 128
i32.load
i32.lt_u
select
f32.load
call $~lib/array/Array<f32>#__get
f32.const 2.5
f32.ne
if
@ -256,15 +660,8 @@
call $~lib/env/abort
unreachable
end
i32.const 172
i32.load
i32.const -1
i32.const 0
i32.const 176
i32.load
i32.lt_u
select
f64.load
call $~lib/array/Array<f64>#__get
f64.const 1.25
f64.ne
if
@ -275,17 +672,8 @@
call $~lib/env/abort
unreachable
end
i32.const 172
i32.load
i32.const 8
i32.add
i32.const -1
i32.const 8
i32.const 176
i32.load
i32.lt_u
select
f64.load
i32.const 1
call $~lib/array/Array<f64>#__get
f64.const 2.25
f64.ne
if
@ -296,19 +684,9 @@
call $~lib/env/abort
unreachable
end
i32.const 172
i32.load
f64.const 2.25
f64.store
i32.const 172
i32.load
i32.const -1
call $~lib/array/Array<f64>#__set
i32.const 0
i32.const 176
i32.load
i32.lt_u
select
f64.load
call $~lib/array/Array<f64>#__get
f64.const 2.25
f64.ne
if
@ -320,10 +698,10 @@
unreachable
end
)
(func $start (; 2 ;) (type $FUNCSIG$v)
(func $start (; 13 ;) (type $FUNCSIG$v)
call $start:std/static-array
)
(func $null (; 3 ;) (type $FUNCSIG$v)
(func $null (; 14 ;) (type $FUNCSIG$v)
nop
)
)

File diff suppressed because it is too large Load Diff

View File

@ -3207,11 +3207,7 @@
(local $3 i32)
local.get $1
local.get $0
i32.load
local.tee $2
i32.const 8
i32.sub
i32.load offset=4
i32.load offset=8
i32.const 2
i32.shr_u
i32.gt_u
@ -3222,19 +3218,21 @@
if
i32.const 0
i32.const 1440
i32.const 12
i32.const 10
i32.const 64
call $~lib/env/abort
unreachable
end
local.get $2
local.get $2
local.get $0
i32.load
local.tee $2
local.get $1
i32.const 2
i32.shl
local.tee $3
call $~lib/runtime/doReallocate
local.tee $1
local.get $2
i32.ne
if
local.get $0
@ -3541,7 +3539,30 @@
end
local.get $6
)
(func $~lib/util/number/decimalCount32 (; 39 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/array/Array<String>#__get (; 39 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
local.get $1
local.get $0
i32.load offset=8
i32.const 2
i32.shr_u
i32.ge_u
if
i32.const 0
i32.const 1440
i32.const 68
i32.const 61
call $~lib/env/abort
unreachable
end
local.get $0
i32.load offset=4
local.get $1
i32.const 2
i32.shl
i32.add
i32.load
)
(func $~lib/util/number/decimalCount32 (; 40 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.const 100000
i32.lt_u
@ -3595,7 +3616,7 @@
end
end
)
(func $~lib/util/number/utoa32_lut (; 40 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/util/number/utoa32_lut (; 41 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(local $4 i32)
i32.const 2060
@ -3705,7 +3726,7 @@
i32.store16
end
)
(func $~lib/util/number/itoa32 (; 41 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/util/number/itoa32 (; 42 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
@ -3747,7 +3768,7 @@
i32.const 1
call $~lib/runtime/doRegister
)
(func $~lib/util/number/utoa32 (; 42 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/util/number/utoa32 (; 43 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
local.get $0
@ -3770,7 +3791,7 @@
i32.const 1
call $~lib/runtime/doRegister
)
(func $~lib/util/number/decimalCount64 (; 43 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
(func $~lib/util/number/decimalCount64 (; 44 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
local.get $0
i64.const 1000000000000000
i64.lt_u
@ -3824,7 +3845,7 @@
end
end
)
(func $~lib/util/number/utoa64_lut (; 44 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32)
(func $~lib/util/number/utoa64_lut (; 45 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
@ -3921,7 +3942,7 @@
local.get $2
call $~lib/util/number/utoa32_lut
)
(func $~lib/util/number/utoa64 (; 45 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
(func $~lib/util/number/utoa64 (; 46 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
@ -3963,7 +3984,7 @@
i32.const 1
call $~lib/runtime/doRegister
)
(func $~lib/util/number/itoa64 (; 46 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
(func $~lib/util/number/itoa64 (; 47 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
@ -4028,7 +4049,7 @@
i32.const 1
call $~lib/runtime/doRegister
)
(func $~lib/util/number/genDigits (; 47 ;) (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 (; 48 ;) (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 i32)
(local $9 i64)
@ -4446,7 +4467,7 @@
local.get $7
end
)
(func $~lib/util/number/prettify (; 48 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/util/number/prettify (; 49 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(local $4 i32)
local.get $2
@ -4707,7 +4728,7 @@
end
end
)
(func $~lib/util/number/dtoa_core (; 49 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32)
(func $~lib/util/number/dtoa_core (; 50 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32)
(local $2 i32)
(local $3 i64)
(local $4 i64)
@ -5019,7 +5040,7 @@
local.get $12
i32.add
)
(func $~lib/string/String#substring (; 50 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/string/String#substring (; 51 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
@ -5117,7 +5138,7 @@
i32.const 1
call $~lib/runtime/doRegister
)
(func $~lib/util/number/dtoa (; 51 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(func $~lib/util/number/dtoa (; 52 ;) (type $FUNCSIG$id) (param $0 f64) (result i32)
(local $1 i32)
(local $2 i32)
local.get $0
@ -5162,7 +5183,7 @@
call $~lib/runtime/assertUnregistered
local.get $1
)
(func $start:std/string (; 52 ;) (type $FUNCSIG$v)
(func $start:std/string (; 53 ;) (type $FUNCSIG$v)
(local $0 i32)
global.get $std/string/str
i32.const 16
@ -6664,15 +6685,8 @@
local.tee $0
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<String>#__get
i32.const 312
call $~lib/string/String.__eq
local.set $0
@ -6714,15 +6728,8 @@
local.tee $0
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<String>#__get
i32.const 312
call $~lib/string/String.__eq
local.set $0
@ -6749,15 +6756,8 @@
local.tee $0
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<String>#__get
i32.const 1480
call $~lib/string/String.__eq
local.set $0
@ -6786,15 +6786,8 @@
local.tee $0
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<String>#__get
i32.const 336
call $~lib/string/String.__eq
local.set $0
@ -6803,17 +6796,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 4
i32.add
i32.const -1
i32.const 4
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1
call $~lib/array/Array<String>#__get
i32.const 824
call $~lib/string/String.__eq
local.set $0
@ -6822,17 +6806,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 2
call $~lib/array/Array<String>#__get
i32.const 1520
call $~lib/string/String.__eq
local.set $0
@ -6861,15 +6836,8 @@
local.tee $0
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<String>#__get
i32.const 336
call $~lib/string/String.__eq
local.set $0
@ -6878,17 +6846,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 4
i32.add
i32.const -1
i32.const 4
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1
call $~lib/array/Array<String>#__get
i32.const 824
call $~lib/string/String.__eq
local.set $0
@ -6897,17 +6856,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 2
call $~lib/array/Array<String>#__get
i32.const 1520
call $~lib/string/String.__eq
local.set $0
@ -6937,15 +6887,8 @@
local.tee $0
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<String>#__get
i32.const 336
call $~lib/string/String.__eq
local.set $0
@ -6954,17 +6897,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 4
i32.add
i32.const -1
i32.const 4
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1
call $~lib/array/Array<String>#__get
i32.const 824
call $~lib/string/String.__eq
local.set $0
@ -6973,17 +6907,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 2
call $~lib/array/Array<String>#__get
i32.const 312
call $~lib/string/String.__eq
local.set $0
@ -6992,17 +6917,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 12
i32.add
i32.const -1
i32.const 12
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 3
call $~lib/array/Array<String>#__get
i32.const 1520
call $~lib/string/String.__eq
local.set $0
@ -7032,15 +6948,8 @@
local.tee $0
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<String>#__get
i32.const 312
call $~lib/string/String.__eq
local.set $0
@ -7049,17 +6958,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 4
i32.add
i32.const -1
i32.const 4
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1
call $~lib/array/Array<String>#__get
i32.const 336
call $~lib/string/String.__eq
local.set $0
@ -7068,17 +6968,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 2
call $~lib/array/Array<String>#__get
i32.const 824
call $~lib/string/String.__eq
local.set $0
@ -7087,17 +6978,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 12
i32.add
i32.const -1
i32.const 12
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 3
call $~lib/array/Array<String>#__get
i32.const 1520
call $~lib/string/String.__eq
local.set $0
@ -7127,15 +7009,8 @@
local.tee $0
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<String>#__get
i32.const 336
call $~lib/string/String.__eq
local.set $0
@ -7144,17 +7019,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 4
i32.add
i32.const -1
i32.const 4
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1
call $~lib/array/Array<String>#__get
i32.const 824
call $~lib/string/String.__eq
local.set $0
@ -7163,17 +7029,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 2
call $~lib/array/Array<String>#__get
i32.const 1520
call $~lib/string/String.__eq
local.set $0
@ -7182,17 +7039,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 12
i32.add
i32.const -1
i32.const 12
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 3
call $~lib/array/Array<String>#__get
i32.const 312
call $~lib/string/String.__eq
local.set $0
@ -7221,15 +7069,8 @@
local.tee $0
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<String>#__get
i32.const 336
call $~lib/string/String.__eq
local.set $0
@ -7238,17 +7079,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 4
i32.add
i32.const -1
i32.const 4
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1
call $~lib/array/Array<String>#__get
i32.const 824
call $~lib/string/String.__eq
local.set $0
@ -7257,17 +7089,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 2
call $~lib/array/Array<String>#__get
i32.const 1520
call $~lib/string/String.__eq
local.set $0
@ -7309,15 +7132,8 @@
local.tee $0
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<String>#__get
i32.const 336
call $~lib/string/String.__eq
local.set $0
@ -7344,15 +7160,8 @@
local.tee $0
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<String>#__get
i32.const 336
call $~lib/string/String.__eq
local.set $0
@ -7381,15 +7190,8 @@
local.tee $0
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<String>#__get
i32.const 336
call $~lib/string/String.__eq
local.set $0
@ -7398,17 +7200,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 4
i32.add
i32.const -1
i32.const 4
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1
call $~lib/array/Array<String>#__get
i32.const 824
call $~lib/string/String.__eq
local.set $0
@ -7417,17 +7210,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 2
call $~lib/array/Array<String>#__get
i32.const 1520
call $~lib/string/String.__eq
local.set $0
@ -7456,15 +7240,8 @@
local.tee $0
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<String>#__get
i32.const 336
call $~lib/string/String.__eq
local.set $0
@ -7473,17 +7250,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 4
i32.add
i32.const -1
i32.const 4
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1
call $~lib/array/Array<String>#__get
i32.const 824
call $~lib/string/String.__eq
local.set $0
@ -7492,17 +7260,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 2
call $~lib/array/Array<String>#__get
i32.const 1520
call $~lib/string/String.__eq
local.set $0
@ -7531,15 +7290,8 @@
local.tee $0
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
call $~lib/array/Array<String>#__get
i32.const 336
call $~lib/string/String.__eq
local.set $0
@ -7548,17 +7300,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 4
i32.add
i32.const -1
i32.const 4
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1
call $~lib/array/Array<String>#__get
i32.const 824
call $~lib/string/String.__eq
local.set $0
@ -7567,17 +7310,8 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 2
call $~lib/array/Array<String>#__get
i32.const 1520
call $~lib/string/String.__eq
local.set $0
@ -8776,13 +8510,13 @@
unreachable
end
)
(func $std/string/getString (; 53 ;) (type $FUNCSIG$i) (result i32)
(func $std/string/getString (; 54 ;) (type $FUNCSIG$i) (result i32)
global.get $std/string/str
)
(func $start (; 54 ;) (type $FUNCSIG$v)
(func $start (; 55 ;) (type $FUNCSIG$v)
call $start:std/string
)
(func $null (; 55 ;) (type $FUNCSIG$v)
(func $null (; 56 ;) (type $FUNCSIG$v)
nop
)
)

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long