This commit is contained in:
dcode 2019-03-17 12:25:54 +01:00
parent f21b339563
commit edb2299f13
52 changed files with 16800 additions and 18592 deletions

View File

@ -4085,27 +4085,6 @@ export function compileIterateRoots(compiler: Compiler): void {
);
}
function determineTypedArrayType(target: Class, program: Program): Type | null {
switch (target.internalName) {
case BuiltinSymbols.Int8Array: return Type.i8;
case BuiltinSymbols.Uint8ClampedArray:
case BuiltinSymbols.Uint8Array: return Type.u8;
case BuiltinSymbols.Int16Array: return Type.i16;
case BuiltinSymbols.Uint16Array: return Type.u16;
case BuiltinSymbols.Int32Array: return Type.i32;
case BuiltinSymbols.Uint32Array: return Type.u32;
case BuiltinSymbols.Int64Array: return Type.i64;
case BuiltinSymbols.Uint64Array: return Type.u64;
case BuiltinSymbols.Float32Array: return Type.f32;
case BuiltinSymbols.Float64Array: return Type.f64;
}
var typeArguments = target.typeArguments;
if (typeArguments && typeArguments.length == 1) {
return typeArguments[0]; // Array<T>, TypedArray<T>
}
return null;
}
export function compileBuiltinArrayGet(
compiler: Compiler,
target: Class,
@ -4113,7 +4092,7 @@ export function compileBuiltinArrayGet(
elementExpression: Expression,
contextualType: Type
): ExpressionRef {
var type = assert(determineTypedArrayType(target, compiler.program));
var type = assert(compiler.program.determineBuiltinArrayType(target));
var module = compiler.module;
var outType = (
type.is(TypeFlags.INTEGER) &&
@ -4258,7 +4237,7 @@ export function compileBuiltinArraySet(
valueExpression: Expression,
contextualType: Type
): ExpressionRef {
var type = assert(determineTypedArrayType(target, compiler.program));
var type = assert(compiler.program.determineBuiltinArrayType(target));
return compileBuiltinArraySetWithValue(
compiler,
target,
@ -4294,7 +4273,7 @@ export function compileBuiltinArraySetWithValue(
// TODO: check offset
var program = compiler.program;
var type = assert(determineTypedArrayType(target, compiler.program));
var type = assert(compiler.program.determineBuiltinArrayType(target));
var module = compiler.module;
var dataStart = assert(target.lookupInSelf("dataStart"));

View File

@ -4704,18 +4704,16 @@ export class Compiler extends DiagnosticEmitter {
case ElementKind.CLASS: {
let elementExpression = resolver.currentElementExpression;
if (elementExpression) { // indexed access
let arrayBufferView = this.program.arrayBufferViewInstance;
if (arrayBufferView) {
if ((<Class>target).prototype.extends(arrayBufferView.prototype)) {
return compileBuiltinArraySet(
this,
<Class>target,
assert(this.resolver.currentThisExpression),
elementExpression,
valueExpression,
contextualType
);
}
let arrayType = this.program.determineBuiltinArrayType(<Class>target);
if (arrayType) {
return compileBuiltinArraySet(
this,
<Class>target,
assert(this.resolver.currentThisExpression),
elementExpression,
valueExpression,
contextualType
);
}
let isUnchecked = flow.is(FlowFlags.UNCHECKED_CONTEXT);
let indexedSet = (<Class>target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);
@ -4940,18 +4938,16 @@ export class Compiler extends DiagnosticEmitter {
case ElementKind.CLASS: {
let elementExpression = this.resolver.currentElementExpression;
if (elementExpression) {
let arrayBufferView = this.program.arrayBufferViewInstance;
if (arrayBufferView) {
if ((<Class>target).prototype.extends(arrayBufferView.prototype)) {
return compileBuiltinArraySetWithValue(
this,
<Class>target,
assert(this.resolver.currentThisExpression),
elementExpression,
valueWithCorrectType,
tee
);
}
let arrayType = this.program.determineBuiltinArrayType(<Class>target);
if (arrayType) {
return compileBuiltinArraySetWithValue(
this,
<Class>target,
assert(this.resolver.currentThisExpression),
elementExpression,
valueWithCorrectType,
tee
);
}
let isUnchecked = flow.is(FlowFlags.UNCHECKED_CONTEXT);
let indexedGet = (<Class>target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);
@ -5960,17 +5956,15 @@ export class Compiler extends DiagnosticEmitter {
if (!target) return this.module.createUnreachable();
switch (target.kind) {
case ElementKind.CLASS: {
let arrayBufferView = this.program.arrayBufferViewInstance;
if (arrayBufferView) {
if ((<Class>target).prototype.extends(arrayBufferView.prototype)) {
return compileBuiltinArrayGet(
this,
<Class>target,
expression.expression,
expression.elementExpression,
contextualType
);
}
let arrayType = this.program.determineBuiltinArrayType(<Class>target);
if (arrayType) {
return compileBuiltinArrayGet(
this,
<Class>target,
expression.expression,
expression.elementExpression,
contextualType
);
}
let isUnchecked = this.currentFlow.is(FlowFlags.UNCHECKED_CONTEXT);
let indexedGet = (<Class>target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);

View File

@ -100,6 +100,10 @@ import {
Flow
} from "./flow";
import {
BuiltinSymbols
} from "./builtins";
/** Represents a yet unresolved `import`. */
class QueuedImport {
constructor(
@ -1702,6 +1706,33 @@ export class Program extends DiagnosticEmitter {
if (!parent.add(name, element)) continue; // reports
}
}
/** Determines the element type of a built-in array. */
determineBuiltinArrayType(target: Class): Type | null {
switch (target.internalName) {
case BuiltinSymbols.Int8Array: return Type.i8;
case BuiltinSymbols.Uint8ClampedArray:
case BuiltinSymbols.Uint8Array: return Type.u8;
case BuiltinSymbols.Int16Array: return Type.i16;
case BuiltinSymbols.Uint16Array: return Type.u16;
case BuiltinSymbols.Int32Array: return Type.i32;
case BuiltinSymbols.Uint32Array: return Type.u32;
case BuiltinSymbols.Int64Array: return Type.i64;
case BuiltinSymbols.Uint64Array: return Type.u64;
case BuiltinSymbols.Float32Array: return Type.f32;
case BuiltinSymbols.Float64Array: return Type.f64;
}
var current: Class | null = target;
var arrayPrototype = this.arrayPrototype;
do {
if (current.prototype == arrayPrototype) { // Array<T>
let typeArguments = assert(current.typeArguments);
assert(typeArguments.length == 1);
return typeArguments[0];
}
} while (current = current.base);
return null;
}
}
/** Indicates the specific kind of an {@link Element}. */

View File

@ -610,19 +610,22 @@ export class Resolver extends DiagnosticEmitter {
case ElementKind.CLASS: { // property access on element access?
let elementExpression = this.currentElementExpression;
if (elementExpression) {
let indexedGet = (<Class>target).lookupOverload(OperatorKind.INDEXED_GET);
if (!indexedGet) {
this.error(
DiagnosticCode.Index_signature_is_missing_in_type_0,
elementExpression.range, (<Class>target).internalName
);
return null;
let arrayType = this.program.determineBuiltinArrayType(<Class>target);
if (!arrayType) {
let indexedGet = (<Class>target).lookupOverload(OperatorKind.INDEXED_GET);
if (!indexedGet) {
this.error(
DiagnosticCode.Index_signature_is_missing_in_type_0,
elementExpression.range, (<Class>target).internalName
);
return null;
}
arrayType = indexedGet.signature.returnType;
}
let returnType = indexedGet.signature.returnType;
if (!(target = returnType.classReference)) {
if (!(target = arrayType.classReference)) {
this.error(
DiagnosticCode.Property_0_does_not_exist_on_type_1,
propertyAccess.property.range, propertyName, returnType.toString()
propertyAccess.property.range, propertyName, arrayType.toString()
);
return null;
}
@ -719,19 +722,22 @@ export class Resolver extends DiagnosticEmitter {
break;
}
case ElementKind.CLASS: {
let indexedGet = (<Class>target).lookupOverload(OperatorKind.INDEXED_GET);
if (!indexedGet) {
if (reportMode == ReportMode.REPORT) {
this.error(
DiagnosticCode.Index_signature_is_missing_in_type_0,
elementAccess.range, (<Class>target).internalName
);
let arrayType = this.program.determineBuiltinArrayType(<Class>target);
if (!arrayType) {
let indexedGet = (<Class>target).lookupOverload(OperatorKind.INDEXED_GET);
if (!indexedGet) {
if (reportMode == ReportMode.REPORT) {
this.error(
DiagnosticCode.Index_signature_is_missing_in_type_0,
elementAccess.range, (<Class>target).internalName
);
}
return null;
}
return null;
arrayType = indexedGet.signature.returnType;
}
if (targetExpression.kind == NodeKind.ELEMENTACCESS) { // nested element access
let returnType = indexedGet.signature.returnType;
if (target = returnType.classReference) {
if (target = arrayType.classReference) {
this.currentThisExpression = targetExpression;
this.currentElementExpression = elementAccess.elementExpression;
return target;

View File

@ -15,8 +15,8 @@ function ensureLength(array: ArrayBufferView, length: i32, alignLog2: u32): void
if (newData !== changetype<usize>(oldData)) {
array.data = changetype<ArrayBuffer>(newData); // links
array.dataStart = newData;
array.dataLength = newByteLength;
}
array.dataLength = newByteLength;
}
}
@ -183,7 +183,7 @@ export class Array<T> extends ArrayBufferView {
pop(): T {
var length = this.length_;
if (length < 1) throw new RangeError("Array is empty");
var element = load<T>(this.dataStart + (<usize>--length << alignof<T>()));
var element = load<T>(this.dataStart + (<usize>(--length) << alignof<T>()));
this.length_ = length;
return element;
}
@ -265,7 +265,7 @@ export class Array<T> extends ArrayBufferView {
}
unshift(element: T): i32 {
var newLength = this.length_;
var newLength = this.length_ + 1;
ensureLength(changetype<ArrayBufferView>(this), newLength, alignof<T>());
var base = this.dataStart;
memory.copy(
@ -327,14 +327,17 @@ export class Array<T> extends ArrayBufferView {
}
reverse(): Array<T> {
var front = this.dataStart;
var back = this.dataStart + this.dataLength - sizeof<T>();
while (front < back) {
let temp = load<T>(front);
store<T>(front, load<T>(back));
store<T>(back, temp);
front += sizeof<T>();
back -= sizeof<T>();
var length = this.length_;
if (length) {
let front = this.dataStart;
let back = this.dataStart + (<usize>(length - 1) << alignof<T>());
while (front < back) {
let temp = load<T>(front);
store<T>(front, load<T>(back));
store<T>(back, temp);
front += sizeof<T>();
back -= sizeof<T>();
}
}
return this;
}
@ -507,15 +510,16 @@ export class Array<T> extends ArrayBufferView {
var sepLen = separator.length;
var estLen = 0;
var value: string | null;
for (let i = 0, len = lastIndex + 1; i < len; ++i) {
estLen += load<string>(dataStart + (<usize>i << alignof<T>())).length;
value = load<string>(dataStart + (<usize>i << alignof<T>()));
if (value !== null) estLen += value.length;
}
var offset = 0;
var result = ALLOCATE((estLen + sepLen * lastIndex) << 1);
var value: String;
for (let i = 0; i < lastIndex; ++i) {
value = load<string>(dataStart + (<usize>i << alignof<T>()));
if (value) {
if (value !== null) {
let valueLen = changetype<string>(value).length;
memory.copy(
result + (<usize>offset << 1),
@ -534,12 +538,11 @@ export class Array<T> extends ArrayBufferView {
}
}
value = load<string>(dataStart + (<usize>lastIndex << alignof<T>()));
if (value) {
let valueLen = changetype<string>(value).length;
if (value !== null) {
memory.copy(
result + (<usize>offset << 1),
changetype<usize>(value),
<usize>valueLen << 1
<usize>changetype<string>(value).length << 1
);
}
return REGISTER<string>(result);

View File

@ -1,11 +1,13 @@
import { MAX_BYTELENGTH } from "./runtime";
import { ArrayBuffer } from "./arraybuffer";
// TODO: there is probably a smarter way to check byteOffset for accesses larger than 1 byte
export class DataView {
private data: ArrayBuffer;
private dataStart: usize;
private dataLength: u32;
private dataLength: i32;
constructor(
buffer: ArrayBuffer,
@ -34,7 +36,10 @@ export class DataView {
}
getFloat32(byteOffset: i32, littleEndian: boolean = false): f32 {
if (byteOffset + 4 > this.dataLength) throw new Error("Offset out of bounds");
if (
i32(byteOffset < 0) |
i32(byteOffset + 4 > this.dataLength)
) throw new Error("Offset out of bounds");
return littleEndian
? load<f32>(this.dataStart + <usize>byteOffset)
: reinterpret<f32>(
@ -45,7 +50,10 @@ export class DataView {
}
getFloat64(byteOffset: i32, littleEndian: boolean = false): f64 {
if (byteOffset + 4 > this.dataLength) throw new Error("Offset out of bounds");
if (
i32(byteOffset < 0) |
i32(byteOffset + 8 > this.dataLength)
) throw new Error("Offset out of bounds");
return littleEndian
? load<f64>(this.dataStart + <usize>byteOffset)
: reinterpret<f64>(
@ -56,102 +64,144 @@ export class DataView {
}
getInt8(byteOffset: i32): i8 {
if (byteOffset >= this.dataLength) throw new Error("Offset out of bounds");
if (<u32>byteOffset >= <u32>this.dataLength) throw new Error("Offset out of bounds");
return load<i8>(this.dataStart + <usize>byteOffset);
}
getInt16(byteOffset: i32, littleEndian: boolean = false): i16 {
if (byteOffset + 2 > this.dataLength) throw new Error("Offset out of bounds");
if (
i32(byteOffset < 0) |
i32(byteOffset + 2 > this.dataLength)
) throw new Error("Offset out of bounds");
var result: i16 = load<i16>(this.dataStart + <usize>byteOffset);
return littleEndian ? result : bswap<i16>(result);
}
getInt32(byteOffset: i32, littleEndian: boolean = false): i32 {
if (byteOffset + 4 > this.dataLength) throw new Error("Offset out of bounds");
if (
i32(byteOffset < 0) |
i32(byteOffset + 4 > this.dataLength)
) throw new Error("Offset out of bounds");
var result: i32 = load<i32>(this.dataStart + <usize>byteOffset);
return littleEndian ? result : bswap<i32>(result);
}
getUint8(byteOffset: i32): u8 {
if (byteOffset >= this.dataLength) throw new Error("Offset out of bounds");
if (<u32>byteOffset >= <u32>this.dataLength) throw new Error("Offset out of bounds");
return load<u8>(this.dataStart + <usize>byteOffset);
}
getUint16(byteOffset: i32, littleEndian: boolean = false): u16 {
if (byteOffset + 2 > this.dataLength) throw new Error("Offset out of bounds");
if (
i32(byteOffset < 0) |
i32(byteOffset + 2 > this.dataLength)
) throw new Error("Offset out of bounds");
var result: u16 = load<u16>(this.dataStart + <usize>byteOffset);
return littleEndian ? result : bswap<u16>(result);
}
getUint32(byteOffset: i32, littleEndian: boolean = false): u32 {
if (byteOffset + 2 > this.dataLength) throw new Error("Offset out of bounds");
if (
i32(byteOffset < 0) |
i32(byteOffset + 4 > this.dataLength)
) throw new Error("Offset out of bounds");
var result: u32 = load<u32>(this.dataStart + <usize>byteOffset);
return littleEndian ? result : bswap<u32>(result);
}
setFloat32(byteOffset: i32, value: f32, littleEndian: boolean = false): void {
if (byteOffset + 4 > this.dataLength) throw new Error("Offset out of bounds");
if (
i32(byteOffset < 0) |
i32(byteOffset + 4 > this.dataLength)
) throw new Error("Offset out of bounds");
if (littleEndian) store<f32>(this.dataStart + <usize>byteOffset, value);
else store<u32>(this.dataStart + <usize>byteOffset, bswap<u32>(reinterpret<u32>(value)));
}
setFloat64(byteOffset: i32, value: f64, littleEndian: boolean = false): void {
if (byteOffset + 8 > this.dataLength) throw new Error("Offset out of bounds");
if (
i32(byteOffset < 0) |
i32(byteOffset + 8 > this.dataLength)
) throw new Error("Offset out of bounds");
if (littleEndian) store<f64>(this.dataStart + <usize>byteOffset, value);
else store<u64>(this.dataStart + <usize>byteOffset, bswap<u64>(reinterpret<u64>(value)));
}
setInt8(byteOffset: i32, value: i8): void {
if (byteOffset >= this.dataLength) throw new Error("Offset out of bounds");
if (<u32>byteOffset >= <u32>this.dataLength) throw new Error("Offset out of bounds");
store<i8>(this.dataStart + <usize>byteOffset, value);
}
setInt16(byteOffset: i32, value: i16, littleEndian: boolean = false): void {
if (byteOffset + 2 > this.dataLength) throw new Error("Offset out of bounds");
if (
i32(byteOffset < 0) |
i32(byteOffset + 2 > this.dataLength)
) throw new Error("Offset out of bounds");
store<i16>(this.dataStart + <usize>byteOffset, littleEndian ? value : bswap<i16>(value));
}
setInt32(byteOffset: i32, value: i32, littleEndian: boolean = false): void {
if (byteOffset + 4 > this.dataLength) throw new Error("Offset out of bounds");
if (
i32(byteOffset < 0) |
i32(byteOffset + 4 > this.dataLength)
) throw new Error("Offset out of bounds");
store<i32>(this.dataStart + <usize>byteOffset, littleEndian ? value : bswap<i32>(value));
}
setUint8(byteOffset: i32, value: u8): void {
if (byteOffset >= this.dataLength) throw new Error("Offset out of bounds");
if (<u32>byteOffset >= <u32>this.dataLength) throw new Error("Offset out of bounds");
store<u8>(this.dataStart + <usize>byteOffset, value);
}
setUint16(byteOffset: i32, value: u16, littleEndian: boolean = false): void {
if (byteOffset + 2 > this.dataLength) throw new Error("Offset out of bounds");
if (
i32(byteOffset < 0) |
i32(byteOffset + 2 > this.dataLength)
) throw new Error("Offset out of bounds");
store<u16>(this.dataStart + <usize>byteOffset, littleEndian ? value : bswap<u16>(value));
}
setUint32(byteOffset: i32, value: u32, littleEndian: boolean = false): void {
if (byteOffset + 4 > this.dataLength) throw new Error("Offset out of bounds");
if (
i32(byteOffset < 0) |
i32(byteOffset + 4 > this.dataLength)
) throw new Error("Offset out of bounds");
store<u32>(this.dataStart + <usize>byteOffset, littleEndian ? value : bswap<u32>(value));
}
// Non-standard additions that make sense in WebAssembly, but won't work in JS:
getInt64(byteOffset: i32, littleEndian: boolean = false): i64 {
if (byteOffset + 8 > this.dataLength) throw new Error("Offset out of bounds");
if (
i32(byteOffset < 0) |
i32(byteOffset + 8 > this.dataLength)
) throw new Error("Offset out of bounds");
var result: i64 = load<i64>(this.dataStart + <usize>byteOffset);
return littleEndian ? result : bswap<i64>(result);
}
getUint64(byteOffset: i32, littleEndian: boolean = false): u64 {
if (byteOffset + 8 > this.dataLength) throw new Error("Offset out of bounds");
if (
i32(byteOffset < 0) |
i32(byteOffset + 8 > this.dataLength)
) throw new Error("Offset out of bounds");
var result = load<u64>(this.dataStart + <usize>byteOffset);
return littleEndian ? result : bswap<u64>(result);
}
setInt64(byteOffset: i32, value: i64, littleEndian: boolean = false): void {
if (byteOffset + 8 > this.dataLength) throw new Error("Offset out of bounds");
if (
i32(byteOffset < 0) |
i32(byteOffset + 8 > this.dataLength)
) throw new Error("Offset out of bounds");
store<i64>(this.dataStart + <usize>byteOffset, littleEndian ? value : bswap<i64>(value));
}
setUint64(byteOffset: i32, value: u64, littleEndian: boolean = false): void {
if (byteOffset + 8 > this.dataLength) throw new Error("Offset out of bounds");
if (
i32(byteOffset < 0) |
i32(byteOffset + 8 > this.dataLength)
) throw new Error("Offset out of bounds");
store<u64>(this.dataStart + <usize>byteOffset, littleEndian ? value : bswap<u64>(value));
}

View File

@ -84,6 +84,10 @@ export class Uint8Array extends ArrayBufferView {
super(length, alignof<u8>());
}
get buffer(): ArrayBuffer {
return this.data;
}
get length(): i32 {
return this.byteLength;
}

View File

@ -106,7 +106,7 @@
if
i32.const 0
i32.const 16
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -120,7 +120,7 @@
if
i32.const 0
i32.const 16
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -145,7 +145,7 @@
if
i32.const 0
i32.const 16
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -160,7 +160,7 @@
if
i32.const 0
i32.const 16
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -116,7 +116,7 @@
if
i32.const 0
i32.const 16
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -130,7 +130,7 @@
if
i32.const 0
i32.const 16
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -155,7 +155,7 @@
if
i32.const 0
i32.const 16
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -170,7 +170,7 @@
if
i32.const 0
i32.const 16
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -131,7 +131,7 @@
if
i32.const 0
i32.const 16
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -145,7 +145,7 @@
if
i32.const 0
i32.const 16
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -197,7 +197,7 @@
if
i32.const 0
i32.const 16
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -212,7 +212,7 @@
if
i32.const 0
i32.const 16
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -85,7 +85,7 @@
if
i32.const 0
i32.const 16
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -99,7 +99,7 @@
if
i32.const 0
i32.const 16
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -147,7 +147,7 @@
if
i32.const 0
i32.const 16
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -162,7 +162,7 @@
if
i32.const 0
i32.const 16
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -131,7 +131,7 @@
if
i32.const 0
i32.const 48
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -145,7 +145,7 @@
if
i32.const 0
i32.const 48
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -411,7 +411,7 @@
if
i32.const 0
i32.const 48
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -426,7 +426,7 @@
if
i32.const 0
i32.const 48
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -61,7 +61,7 @@
if
i32.const 0
i32.const 16
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -76,7 +76,7 @@
if
i32.const 0
i32.const 16
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -1,12 +1,10 @@
(module
(type $FUNCSIG$v (func))
(type $FUNCSIG$ii (func (param i32) (result i32)))
(type $FUNCSIG$i (func (result i32)))
(type $FUNCSIG$v (func))
(memory $0 0)
(table $0 1 funcref)
(elem (i32.const 0) $null)
(global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0))
(global $~lib/allocator/arena/offset (mut i32) (i32.const 0))
(global $~lib/argc (mut i32) (i32.const 0))
(export "memory" (memory $0))
(export "table" (table $0))
@ -22,7 +20,6 @@
(export "testRet" (func $nonNullAssertion/testFn))
(export "testObjFn" (func $nonNullAssertion/testObjFn))
(export "testObjRet" (func $nonNullAssertion/testObjFn))
(start $start)
(func $nonNullAssertion/testVar (; 0 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
)
@ -31,36 +28,26 @@
i32.load
)
(func $nonNullAssertion/testArr (; 2 ;) (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
local.tee $0
i32.load
i32.const 2
i32.shr_u
i32.load offset=8
i32.lt_u
if (result i32)
local.get $0
i32.load offset=8
else
unreachable
end
select
i32.load
)
(func $nonNullAssertion/testAll (; 3 ;) (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
local.tee $0
i32.load
i32.const 2
i32.shr_u
i32.load offset=8
i32.lt_u
if (result i32)
local.get $0
i32.load offset=8
else
unreachable
end
select
i32.load
i32.load
)
(func $nonNullAssertion/testFn (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
@ -76,13 +63,7 @@
i32.load offset=4
call_indirect (type $FUNCSIG$i)
)
(func $start (; 6 ;) (type $FUNCSIG$v)
i32.const 8
global.set $~lib/allocator/arena/startOffset
global.get $~lib/allocator/arena/startOffset
global.set $~lib/allocator/arena/offset
)
(func $null (; 7 ;) (type $FUNCSIG$v)
(func $null (; 6 ;) (type $FUNCSIG$v)
nop
)
)

View File

@ -1,13 +1,10 @@
(module
(type $FUNCSIG$v (func))
(type $FUNCSIG$ii (func (param i32) (result i32)))
(type $FUNCSIG$iii (func (param i32 i32) (result i32)))
(type $FUNCSIG$i (func (result i32)))
(type $FUNCSIG$v (func))
(memory $0 0)
(table $0 1 funcref)
(elem (i32.const 0) $null)
(global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0))
(global $~lib/allocator/arena/offset (mut i32) (i32.const 0))
(global $~lib/argc (mut i32) (i32.const 0))
(global $~lib/memory/HEAP_BASE i32 (i32.const 8))
(export "memory" (memory $0))
@ -24,128 +21,102 @@
(export "testRet" (func $nonNullAssertion/testRet))
(export "testObjFn" (func $nonNullAssertion/testObjFn))
(export "testObjRet" (func $nonNullAssertion/testObjRet))
(start $start)
(func $start:~lib/allocator/arena (; 0 ;) (type $FUNCSIG$v)
global.get $~lib/memory/HEAP_BASE
i32.const 7
(func $nonNullAssertion/testVar (; 0 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
)
(func $nonNullAssertion/testObj (; 1 ;) (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)
local.get $0
i32.load
)
(func $nonNullAssertion/testArr (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 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 7
i32.const -1
i32.xor
i32.and
global.set $~lib/allocator/arena/startOffset
global.get $~lib/allocator/arena/startOffset
global.set $~lib/allocator/arena/offset
)
(func $start:nonNullAssertion (; 1 ;) (type $FUNCSIG$v)
call $start:~lib/allocator/arena
)
(func $nonNullAssertion/testVar (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
)
(func $nonNullAssertion/testObj (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.load
)
(func $nonNullAssertion/testProp (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.load
)
(func $~lib/array/Array<Foo>#__get (; 5 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
local.get $0
i32.load
local.set $2
local.get $1
local.get $2
i32.load
i32.const 2
i32.shr_u
i32.lt_u
if (result i32)
local.get $2
local.set $3
local.get $1
local.set $4
i32.const 0
local.set $5
local.get $3
local.get $4
i32.const 2
i32.shl
i32.add
local.get $5
i32.add
i32.load offset=8
else
unreachable
end
)
(func $nonNullAssertion/testArr (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.const 0
call $~lib/array/Array<Foo>#__get
)
(func $~lib/array/Array<Foo | null>#__get (; 7 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
local.get $0
i32.load
local.set $2
local.get $1
local.get $2
i32.load
i32.const 2
i32.shr_u
i32.load offset=8
i32.lt_u
if (result i32)
local.get $2
local.set $3
local.get $1
local.set $4
i32.const 0
local.set $5
local.get $3
local.get $4
i32.const 2
i32.shl
i32.add
local.get $5
i32.add
i32.load offset=8
else
unreachable
end
)
(func $nonNullAssertion/testElem (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.const 0
call $~lib/array/Array<Foo | null>#__get
)
(func $nonNullAssertion/testAll (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.const 0
call $~lib/array/Array<Foo | null>#__get
select
i32.load
)
(func $nonNullAssertion/testAll2 (; 10 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $nonNullAssertion/testElem (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
local.get $0
local.tee $1
i32.load offset=4
i32.const 0
call $~lib/array/Array<Foo | null>#__get
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/testFn (; 11 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $nonNullAssertion/testAll (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 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
)
(func $nonNullAssertion/testAll2 (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 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
)
(func $nonNullAssertion/testFn (; 7 ;) (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 (; 12 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $nonNullAssertion/testFn2 (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
local.get $0
local.set $1
@ -154,29 +125,26 @@
local.get $1
call_indirect (type $FUNCSIG$i)
)
(func $nonNullAssertion/testRet (; 13 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $nonNullAssertion/testRet (; 9 ;) (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 (; 14 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $nonNullAssertion/testObjFn (; 10 ;) (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 (; 15 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $nonNullAssertion/testObjRet (; 11 ;) (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 $start (; 16 ;) (type $FUNCSIG$v)
call $start:nonNullAssertion
)
(func $null (; 17 ;) (type $FUNCSIG$v)
(func $null (; 12 ;) (type $FUNCSIG$v)
)
)

View File

@ -11,7 +11,7 @@
(memory $0 1)
(data (i32.const 8) "\01\00\00\00\02\00\00\000")
(data (i32.const 24) "\02\00\00\00\90\01\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009")
(data (i32.const 432) "\03\00\00\00\10\00\00\00 \00\00\00 \00\00\00\b0\01\00\00d")
(data (i32.const 432) "\03\00\00\00\10\00\00\00 \00\00\00 \00\00\00\90\01\00\00d")
(data (i32.const 456) "\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00u\00n\00t\00i\00m\00e\00.\00t\00s")
(data (i32.const 496) "\01\00\00\00\02\00\00\001")
(data (i32.const 512) "\01\00\00\00\12\00\00\00n\00u\00m\00b\00e\00r\00.\00t\00s")
@ -20,11 +20,11 @@
(data (i32.const 576) "\01\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y")
(data (i32.const 608) "\01\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y")
(data (i32.const 632) "\02\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8<D\a7\a4\d9|\9b\fb\10D\a4\a7LLv\bb\1a\9c@\b6\ef\8e\ab\8b,\84W\a6\10\ef\1f\d0)1\91\e9\e5\a4\10\9b\9d\0c\9c\a1\fb\9b\10\e7)\f4;b\d9 (\ac\85\cf\a7z^KD\80-\dd\ac\03@\e4!\bf\8f\ffD^/\9cg\8eA\b8\8c\9c\9d\173\d4\a9\1b\e3\b4\92\db\19\9e\d9w\df\ban\bf\96\ebk\ee\f0\9b;\02\87\af")
(data (i32.const 1336) "\04\00\00\00\10\00\00\00\80\02\00\00\80\02\00\008\05\00\00W")
(data (i32.const 1336) "\04\00\00\00\10\00\00\00\80\02\00\00\80\02\00\00\b8\02\00\00W")
(data (i32.const 1360) "\02\00\00\00\ae\00\00\00<\fbW\fbr\fb\8c\fb\a7\fb\c1\fb\dc\fb\f6\fb\11\fc,\fcF\fca\fc{\fc\96\fc\b1\fc\cb\fc\e6\fc\00\fd\1b\fd5\fdP\fdk\fd\85\fd\a0\fd\ba\fd\d5\fd\ef\fd\n\fe%\fe?\feZ\fet\fe\8f\fe\a9\fe\c4\fe\df\fe\f9\fe\14\ff.\ffI\ffc\ff~\ff\99\ff\b3\ff\ce\ff\e8\ff\03\00\1e\008\00S\00m\00\88\00\a2\00\bd\00\d8\00\f2\00\0d\01\'\01B\01\\\01w\01\92\01\ac\01\c7\01\e1\01\fc\01\16\021\02L\02f\02\81\02\9b\02\b6\02\d0\02\eb\02\06\03 \03;\03U\03p\03\8b\03\a5\03\c0\03\da\03\f5\03\0f\04*\04")
(data (i32.const 1544) "\05\00\00\00\10\00\00\00X\05\00\00X\05\00\00\06\06\00\00W")
(data (i32.const 1544) "\05\00\00\00\10\00\00\00X\05\00\00X\05\00\00\ae\00\00\00W")
(data (i32.const 1568) "\02\00\00\00(\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;")
(data (i32.const 1616) "\03\00\00\00\10\00\00\00(\06\00\00(\06\00\00P\06\00\00\n")
(data (i32.const 1616) "\03\00\00\00\10\00\00\00(\06\00\00(\06\00\00(\00\00\00\n")
(data (i32.const 1640) "\01\00\00\00\1c\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s")
(data (i32.const 1680) "\01")
(data (i32.const 1688) "\01\00\00\00\06\00\00\002\00.\000")
@ -302,7 +302,7 @@
if
i32.const 0
i32.const 464
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -316,7 +316,7 @@
if
i32.const 0
i32.const 464
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -15,7 +15,7 @@
(memory $0 1)
(data (i32.const 8) "\01\00\00\00\02\00\00\000\00")
(data (i32.const 24) "\02\00\00\00\90\01\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00")
(data (i32.const 432) "\03\00\00\00\10\00\00\00 \00\00\00 \00\00\00\b0\01\00\00d\00\00\00")
(data (i32.const 432) "\03\00\00\00\10\00\00\00 \00\00\00 \00\00\00\90\01\00\00d\00\00\00")
(data (i32.const 456) "\01\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 496) "\01\00\00\00\02\00\00\001\00")
(data (i32.const 512) "\01\00\00\00\12\00\00\00n\00u\00m\00b\00e\00r\00.\00t\00s\00")
@ -24,11 +24,11 @@
(data (i32.const 576) "\01\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y\00")
(data (i32.const 608) "\01\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y\00")
(data (i32.const 632) "\02\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8<D\a7\a4\d9|\9b\fb\10D\a4\a7LLv\bb\1a\9c@\b6\ef\8e\ab\8b,\84W\a6\10\ef\1f\d0)1\91\e9\e5\a4\10\9b\9d\0c\9c\a1\fb\9b\10\e7)\f4;b\d9 (\ac\85\cf\a7z^KD\80-\dd\ac\03@\e4!\bf\8f\ffD^/\9cg\8eA\b8\8c\9c\9d\173\d4\a9\1b\e3\b4\92\db\19\9e\d9w\df\ban\bf\96\ebk\ee\f0\9b;\02\87\af")
(data (i32.const 1336) "\04\00\00\00\10\00\00\00\80\02\00\00\80\02\00\008\05\00\00W\00\00\00")
(data (i32.const 1336) "\04\00\00\00\10\00\00\00\80\02\00\00\80\02\00\00\b8\02\00\00W\00\00\00")
(data (i32.const 1360) "\02\00\00\00\ae\00\00\00<\fbW\fbr\fb\8c\fb\a7\fb\c1\fb\dc\fb\f6\fb\11\fc,\fcF\fca\fc{\fc\96\fc\b1\fc\cb\fc\e6\fc\00\fd\1b\fd5\fdP\fdk\fd\85\fd\a0\fd\ba\fd\d5\fd\ef\fd\n\fe%\fe?\feZ\fet\fe\8f\fe\a9\fe\c4\fe\df\fe\f9\fe\14\ff.\ffI\ffc\ff~\ff\99\ff\b3\ff\ce\ff\e8\ff\03\00\1e\008\00S\00m\00\88\00\a2\00\bd\00\d8\00\f2\00\0d\01\'\01B\01\\\01w\01\92\01\ac\01\c7\01\e1\01\fc\01\16\021\02L\02f\02\81\02\9b\02\b6\02\d0\02\eb\02\06\03 \03;\03U\03p\03\8b\03\a5\03\c0\03\da\03\f5\03\0f\04*\04")
(data (i32.const 1544) "\05\00\00\00\10\00\00\00X\05\00\00X\05\00\00\06\06\00\00W\00\00\00")
(data (i32.const 1544) "\05\00\00\00\10\00\00\00X\05\00\00X\05\00\00\ae\00\00\00W\00\00\00")
(data (i32.const 1568) "\02\00\00\00(\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;")
(data (i32.const 1616) "\03\00\00\00\10\00\00\00(\06\00\00(\06\00\00P\06\00\00\n\00\00\00")
(data (i32.const 1616) "\03\00\00\00\10\00\00\00(\06\00\00(\06\00\00(\00\00\00\n\00\00\00")
(data (i32.const 1640) "\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 1680) "\01\00\00\00\00\00\00\00")
(data (i32.const 1688) "\01\00\00\00\06\00\00\002\00.\000\00")
@ -399,7 +399,7 @@
if
i32.const 0
i32.const 464
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -414,7 +414,7 @@
if
i32.const 0
i32.const 464
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -106,7 +106,7 @@
if
i32.const 0
i32.const 48
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -120,7 +120,7 @@
if
i32.const 0
i32.const 48
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -147,7 +147,7 @@
if
i32.const 0
i32.const 48
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -162,7 +162,7 @@
if
i32.const 0
i32.const 48
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -100,7 +100,7 @@
if
i32.const 0
i32.const 16
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -114,7 +114,7 @@
if
i32.const 0
i32.const 16
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -154,7 +154,7 @@
if
i32.const 0
i32.const 16
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -169,7 +169,7 @@
if
i32.const 0
i32.const 16
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -5,8 +5,9 @@
(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 16) "\0e\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s")
(data (i32.const 48) "\04\00\00\00n\00u\00l\00l")
(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")
(table $0 1 funcref)
(elem (i32.const 0) $null)
(export "memory" (memory $0))
@ -17,57 +18,47 @@
(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)
i32.const 1
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
i32.const 2
i32.shr_u
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
if (result i32)
local.get $0
i32.load offset=8
else
unreachable
end
select
i32.load
local.tee $0
i32.load
i32.const 2
i32.shr_u
i32.lt_u
if (result i32)
local.get $0
i32.const 4
i32.add
i32.load offset=8
else
unreachable
end
)
(func $std/array-access/stringArrayPropertyAccess (; 2 ;) (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
local.tee $0
i32.load
i32.const 2
i32.shr_u
i32.load offset=8
i32.lt_u
if (result i32)
local.get $0
i32.load offset=8
else
unreachable
end
select
i32.load
i32.const 8
i32.sub
i32.load offset=4
i32.const 1
i32.shr_u
)
(func $~lib/internal/string/compareUnsafe (; 3 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/util/string/compareImpl (; 3 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(local $4 i32)
i32.const 8
i32.const 16
local.set $3
local.get $1
i32.const 1
@ -79,9 +70,9 @@
local.get $2
if (result i32)
local.get $1
i32.load16_u offset=4
i32.load16_u
local.get $3
i32.load16_u offset=4
i32.load16_u
i32.sub
local.tee $4
i32.eqz
@ -114,23 +105,31 @@
i32.eqz
if
i32.const 0
i32.const 16
i32.const 224
i32.const 24
i32.const 165
i32.const 4
call $~lib/env/abort
unreachable
end
i32.const 12
i32.load
i32.const 1
i32.shr_u
local.tee $1
local.set $2
local.get $1
i32.const 0
local.get $0
i32.load
i32.const 8
i32.sub
i32.load offset=4
i32.const 1
i32.shr_u
local.tee $1
i32.const 0
local.get $1
i32.lt_s
select
local.tee $2
i32.const 8
i32.load
local.tee $3
i32.add
local.get $1
@ -140,90 +139,71 @@
return
end
local.get $0
local.get $2
local.get $3
call $~lib/internal/string/compareUnsafe
local.get $2
call $~lib/util/string/compareImpl
i32.eqz
)
(func $std/array-access/stringArrayMethodCall (; 5 ;) (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
local.tee $0
i32.load
i32.const 2
i32.shr_u
i32.load offset=8
i32.lt_u
if (result i32)
local.get $0
i32.load offset=8
else
unreachable
end
select
i32.load
call $~lib/string/String#startsWith
)
(func $std/array-access/stringArrayArrayPropertyAccess (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
i32.const 1
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
i32.const 2
i32.shr_u
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
if (result i32)
local.get $0
i32.load offset=8
else
unreachable
end
select
i32.load
local.tee $0
i32.load
i32.const 2
i32.const 8
i32.sub
i32.load offset=4
i32.const 1
i32.shr_u
i32.lt_u
if (result i32)
local.get $0
i32.const 4
i32.add
i32.load offset=8
else
unreachable
end
i32.load
)
(func $std/array-access/stringArrayArrayMethodCall (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
i32.const 1
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
i32.const 2
i32.shr_u
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
if (result i32)
local.get $0
i32.load offset=8
else
unreachable
end
select
i32.load
local.tee $0
i32.load
i32.const 2
i32.shr_u
i32.lt_u
if (result i32)
local.get $0
i32.const 4
i32.add
i32.load offset=8
else
unreachable
end
call $~lib/string/String#startsWith
)
(func $null (; 8 ;) (type $FUNCSIG$v)

View File

@ -1,18 +1,20 @@
(module
(type $FUNCSIG$ii (func (param i32) (result i32)))
(type $FUNCSIG$iii (func (param i32 i32) (result i32)))
(type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
(type $FUNCSIG$viiii (func (param i32 i32 i32 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) "\00\00\00\00")
(data (i32.const 16) "\0e\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00")
(data (i32.const 48) "\04\00\00\00n\00u\00l\00l\00")
(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")
(table $0 1 funcref)
(elem (i32.const 0) $null)
(global $~lib/memory/HEAP_BASE i32 (i32.const 60))
(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))
(export "memory" (memory $0))
(export "table" (table $0))
(export "i32ArrayArrayElementAccess" (func $std/array-access/i32ArrayArrayElementAccess))
@ -20,119 +22,68 @@
(export "stringArrayMethodCall" (func $std/array-access/stringArrayMethodCall))
(export "stringArrayArrayPropertyAccess" (func $std/array-access/stringArrayArrayPropertyAccess))
(export "stringArrayArrayMethodCall" (func $std/array-access/stringArrayArrayMethodCall))
(func $~lib/array/Array<Array<i32>>#__get (; 1 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(func $std/array-access/i32ArrayArrayElementAccess (; 1 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
local.get $0
i32.load
local.set $2
local.get $1
local.get $2
i32.load
i32.const 2
i32.shr_u
i32.lt_u
if (result i32)
local.get $2
local.set $3
local.get $1
local.set $4
i32.const 0
local.set $5
local.get $3
local.get $4
i32.const 2
i32.shl
i32.add
local.get $5
i32.add
i32.load offset=8
else
unreachable
end
)
(func $~lib/array/Array<i32>#__get (; 2 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
local.get $0
i32.load
local.set $2
local.get $1
local.get $2
i32.load
i32.const 2
i32.shr_u
i32.lt_u
if (result i32)
local.get $2
local.set $3
local.get $1
local.set $4
i32.const 0
local.set $5
local.get $3
local.get $4
i32.const 2
i32.shl
i32.add
local.get $5
i32.add
i32.load offset=8
else
unreachable
end
)
(func $std/array-access/i32ArrayArrayElementAccess (; 3 ;) (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<Array<i32>>#__get
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
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 $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
local.get $0
i32.load
local.set $2
local.get $1
local.get $2
i32.load
i32.const 2
i32.shr_u
i32.shl
local.tee $2
i32.add
i32.const -1
local.get $2
local.get $1
i32.load offset=8
i32.lt_u
if (result i32)
local.get $2
local.set $3
local.get $1
local.set $4
i32.const 0
local.set $5
local.get $3
local.get $4
i32.const 2
i32.shl
i32.add
local.get $5
i32.add
i32.load offset=8
else
unreachable
end
)
(func $std/array-access/stringArrayPropertyAccess (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.const 0
call $~lib/array/Array<String>#__get
select
i32.load
)
(func $~lib/internal/string/compareUnsafe (; 6 ;) (type $FUNCSIG$iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32)
(func $~lib/string/String#get:length (; 2 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
global.get $~lib/runtime/HEADER_SIZE
i32.sub
i32.load offset=4
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)
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/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)
(local $5 i32)
(local $6 i32)
(local $7 i32)
@ -155,9 +106,9 @@
local.get $4
if (result i32)
local.get $6
i32.load16_u offset=4
i32.load16_u
local.get $7
i32.load16_u offset=4
i32.load16_u
i32.sub
local.tee $5
i32.eqz
@ -185,7 +136,7 @@
end
local.get $5
)
(func $~lib/string/String#startsWith (; 7 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(func $~lib/string/String#startsWith (; 5 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
@ -198,8 +149,8 @@
i32.eqz
if
i32.const 0
i32.const 16
i32.const 224
i32.const 24
i32.const 165
i32.const 4
call $~lib/env/abort
unreachable
@ -208,13 +159,13 @@
i32.const 0
i32.eq
if
i32.const 48
i32.const 64
local.set $1
end
local.get $2
local.set $3
local.get $0
i32.load
call $~lib/string/String#get:length
local.set $4
local.get $3
local.tee $5
@ -233,7 +184,7 @@
select
local.set $7
local.get $1
i32.load
call $~lib/string/String#get:length
local.set $8
local.get $8
local.get $7
@ -249,68 +200,101 @@
local.get $1
i32.const 0
local.get $8
call $~lib/internal/string/compareUnsafe
call $~lib/util/string/compareImpl
i32.eqz
)
(func $std/array-access/stringArrayMethodCall (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.const 0
call $~lib/array/Array<String>#__get
i32.const 8
i32.const 0
call $~lib/string/String#startsWith
)
(func $~lib/array/Array<Array<String>>#__get (; 9 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(func $std/array-access/stringArrayMethodCall (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
local.get $0
i32.load
local.set $2
local.get $1
local.get $2
i32.load
local.tee $1
i32.load offset=4
i32.const 0
i32.const 2
i32.shr_u
i32.shl
local.tee $2
i32.add
i32.const -1
local.get $2
local.get $1
i32.load offset=8
i32.lt_u
if (result i32)
local.get $2
local.set $3
local.get $1
local.set $4
i32.const 0
local.set $5
local.get $3
local.get $4
i32.const 2
i32.shl
i32.add
local.get $5
i32.add
i32.load offset=8
else
unreachable
end
)
(func $std/array-access/stringArrayArrayPropertyAccess (; 10 ;) (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
select
i32.load
)
(func $std/array-access/stringArrayArrayMethodCall (; 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
i32.const 8
i32.const 16
i32.const 0
call $~lib/string/String#startsWith
)
(func $null (; 12 ;) (type $FUNCSIG$v)
(func $std/array-access/stringArrayArrayPropertyAccess (; 7 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
(local $2 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
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
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)
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
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
i32.const 0
call $~lib/string/String#startsWith
)
(func $null (; 9 ;) (type $FUNCSIG$v)
)
)

View File

@ -4,18 +4,18 @@
(type $FUNCSIG$iii (func (param i32 i32) (result i32)))
(type $FUNCSIG$viii (func (param i32 i32 i32)))
(type $FUNCSIG$vi (func (param i32)))
(type $FUNCSIG$vii (func (param i32 i32)))
(type $FUNCSIG$v (func))
(type $FUNCSIG$vii (func (param i32 i32)))
(type $FUNCSIG$i (func (result i32)))
(import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32)))
(memory $0 1)
(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\13\00\00\00\03")
(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\00t\00\00\00\03")
(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\00\00\00\98")
(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")
@ -333,7 +333,7 @@
if
i32.const 0
i32.const 184
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -347,7 +347,7 @@
if
i32.const 0
i32.const 184
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable
@ -395,7 +395,7 @@
if
i32.const 0
i32.const 184
i32.const 223
i32.const 226
i32.const 57
call $~lib/env/abort
unreachable
@ -431,9 +431,7 @@
local.get $1
i32.store offset=4
local.get $0
local.get $1
local.get $2
i32.add
i32.store offset=8
local.get $0
)
@ -1622,49 +1620,52 @@
i32.store offset=4
local.get $0
)
(func $~lib/array/Array<i8>#resize (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
(local $2 i32)
(func $~lib/array/ensureLength (; 11 ;) (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 $2
local.tee $3
i32.const 8
i32.sub
i32.load offset=4
local.get $2
i32.shr_u
i32.gt_u
if
local.get $1
i32.const 1073741816
local.get $2
i32.shr_u
i32.gt_u
if
i32.const 0
i32.const 272
i32.const 37
i32.const 41
i32.const 12
i32.const 59
call $~lib/env/abort
unreachable
end
local.get $2
local.tee $3
local.get $1
call $~lib/runtime/doReallocate
local.tee $2
local.get $3
local.get $3
local.get $1
local.get $2
i32.shl
local.tee $2
call $~lib/runtime/doReallocate
local.tee $1
i32.ne
if
local.get $0
local.get $2
local.get $1
i32.store
local.get $0
local.get $2
i32.store offset=4
local.get $0
local.get $1
local.get $2
i32.add
i32.store offset=8
i32.store offset=4
end
local.get $0
local.get $2
i32.store offset=8
end
)
(func $~lib/array/Array<i8>#__set (; 12 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
@ -1672,7 +1673,8 @@
local.get $1
i32.const 1
i32.add
call $~lib/array/Array<i8>#resize
i32.const 0
call $~lib/array/ensureLength
local.get $1
local.get $0
i32.load offset=4
@ -1691,62 +1693,13 @@
i32.store offset=12
end
)
(func $~lib/array/Array<i32>#resize (; 13 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
(local $2 i32)
(local $3 i32)
local.get $1
local.get $0
i32.load
local.tee $2
i32.const 8
i32.sub
i32.load offset=4
i32.const 2
i32.shr_u
i32.gt_u
if
local.get $1
i32.const 268435454
i32.gt_u
if
i32.const 0
i32.const 272
i32.const 37
i32.const 41
call $~lib/env/abort
unreachable
end
local.get $2
local.tee $3
local.get $1
i32.const 2
i32.shl
local.tee $2
call $~lib/runtime/doReallocate
local.tee $1
local.get $3
i32.ne
if
local.get $0
local.get $1
i32.store
local.get $0
local.get $1
i32.store offset=4
local.get $0
local.get $1
local.get $2
i32.add
i32.store offset=8
end
end
)
(func $~lib/array/Array<i32>#__set (; 14 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/array/Array<i32>#__set (; 13 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
local.get $0
local.get $1
i32.const 1
i32.add
call $~lib/array/Array<i32>#resize
i32.const 2
call $~lib/array/ensureLength
local.get $0
i32.load offset=4
local.get $1
@ -1767,19 +1720,19 @@
i32.store offset=12
end
)
(func $std/array-literal/Ref#constructor (; 15 ;) (type $FUNCSIG$i) (result i32)
(func $std/array-literal/Ref#constructor (; 14 ;) (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 (; 16 ;) (type $FUNCSIG$i) (result i32)
(func $std/array-literal/RefWithCtor#constructor (; 15 ;) (type $FUNCSIG$i) (result i32)
i32.const 0
call $~lib/runtime/doAllocate
i32.const 8
call $~lib/runtime/doRegister
)
(func $start:std/array-literal (; 17 ;) (type $FUNCSIG$v)
(func $start:std/array-literal (; 16 ;) (type $FUNCSIG$v)
(local $0 i32)
i32.const 44
i32.load
@ -1795,6 +1748,12 @@
end
i32.const 36
i32.load
i32.const -1
i32.const 0
i32.const 40
i32.load
i32.lt_u
select
i32.load8_s
if
i32.const 0
@ -1806,7 +1765,15 @@
end
i32.const 36
i32.load
i32.load8_s offset=1
i32.const 1
i32.add
i32.const -1
i32.const 1
i32.const 40
i32.load
i32.lt_u
select
i32.load8_s
i32.const 1
i32.ne
if
@ -1819,7 +1786,15 @@
end
i32.const 36
i32.load
i32.load8_s offset=2
i32.const 2
i32.add
i32.const -1
i32.const 2
i32.const 40
i32.load
i32.lt_u
select
i32.load8_s
i32.const 2
i32.ne
if
@ -1844,6 +1819,12 @@
end
i32.const 132
i32.load
i32.const -1
i32.const 0
i32.const 136
i32.load
i32.lt_u
select
i32.load
if
i32.const 0
@ -1855,7 +1836,15 @@
end
i32.const 132
i32.load
i32.load offset=4
i32.const 4
i32.add
i32.const -1
i32.const 4
i32.const 136
i32.load
i32.lt_u
select
i32.load
i32.const 1
i32.ne
if
@ -1868,7 +1857,15 @@
end
i32.const 132
i32.load
i32.load offset=8
i32.const 8
i32.add
i32.const -1
i32.const 8
i32.const 136
i32.load
i32.lt_u
select
i32.load
i32.const 2
i32.ne
if
@ -1940,7 +1937,14 @@
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
if
i32.const 0
@ -1951,8 +1955,17 @@
unreachable
end
global.get $std/array-literal/dynamicArrayI8
local.tee $0
i32.load offset=4
i32.load8_s offset=1
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
i32.const 1
i32.ne
if
@ -1964,8 +1977,17 @@
unreachable
end
global.get $std/array-literal/dynamicArrayI8
local.tee $0
i32.load offset=4
i32.load8_s offset=2
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
i32.const 2
i32.ne
if
@ -2025,7 +2047,14 @@
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
if
i32.const 0
@ -2036,8 +2065,17 @@
unreachable
end
global.get $std/array-literal/dynamicArrayI32
local.tee $0
i32.load offset=4
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
i32.ne
if
@ -2049,8 +2087,17 @@
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
i32.ne
if
@ -2138,10 +2185,10 @@
unreachable
end
)
(func $start (; 18 ;) (type $FUNCSIG$v)
(func $start (; 17 ;) (type $FUNCSIG$v)
call $start:std/array-literal
)
(func $null (; 19 ;) (type $FUNCSIG$v)
(func $null (; 18 ;) (type $FUNCSIG$v)
nop
)
)

View File

@ -5,17 +5,16 @@
(type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
(type $FUNCSIG$viii (func (param i32 i32 i32)))
(type $FUNCSIG$vi (func (param i32)))
(type $FUNCSIG$vii (func (param i32 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\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\13\00\00\00\03\00\00\00")
(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\00t\00\00\00\03\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\98\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")
@ -425,7 +424,7 @@
if
i32.const 0
i32.const 184
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -440,7 +439,7 @@
if
i32.const 0
i32.const 184
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable
@ -504,7 +503,7 @@
if
i32.const 0
i32.const 184
i32.const 223
i32.const 226
i32.const 57
call $~lib/env/abort
unreachable
@ -547,9 +546,7 @@
local.get $3
i32.store offset=4
local.get $0
local.get $3
local.get $1
i32.add
i32.store offset=8
local.get $0
)
@ -2116,65 +2113,65 @@
i32.store offset=4
local.get $0
)
(func $~lib/array/Array<i8>#resize (; 18 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
(local $2 i32)
(func $~lib/array/ensureLength (; 18 ;) (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 $0
i32.load
local.set $2
local.get $2
call $~lib/arraybuffer/ArrayBuffer#get:byteLength
i32.const 0
i32.shr_u
local.set $3
local.get $1
local.get $3
call $~lib/arraybuffer/ArrayBuffer#get:byteLength
local.get $2
i32.shr_u
local.set $4
local.get $1
local.get $4
i32.gt_u
if
local.get $1
i32.const 1073741816
global.get $~lib/runtime/MAX_BYTELENGTH
local.get $2
i32.shr_u
i32.gt_u
if
i32.const 0
i32.const 272
i32.const 37
i32.const 41
i32.const 12
i32.const 59
call $~lib/env/abort
unreachable
end
local.get $1
i32.const 0
local.get $2
i32.shl
local.set $4
local.set $5
block $~lib/runtime/REALLOCATE|inlined.0 (result i32)
local.get $2
local.set $5
local.get $4
local.get $3
local.set $6
local.get $5
local.set $7
local.get $6
local.get $7
call $~lib/runtime/doReallocate
end
local.set $6
local.get $6
local.get $2
local.set $7
local.get $7
local.get $3
i32.ne
if
local.get $0
local.get $6
local.get $7
i32.store
local.get $0
local.get $6
local.get $7
i32.store offset=4
local.get $0
local.get $6
local.get $4
i32.add
i32.store offset=8
end
local.get $0
local.get $5
i32.store offset=8
end
)
(func $~lib/array/Array<i8>#__set (; 19 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
@ -2182,7 +2179,8 @@
local.get $1
i32.const 1
i32.add
call $~lib/array/Array<i8>#resize
i32.const 0
call $~lib/array/ensureLength
local.get $0
i32.load offset=4
local.get $1
@ -2228,73 +2226,13 @@
i32.store offset=12
local.get $0
)
(func $~lib/array/Array<i32>#resize (; 21 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
(local $6 i32)
local.get $0
i32.load
local.set $2
local.get $2
call $~lib/arraybuffer/ArrayBuffer#get:byteLength
i32.const 2
i32.shr_u
local.set $3
local.get $1
local.get $3
i32.gt_u
if
local.get $1
i32.const 268435454
i32.gt_u
if
i32.const 0
i32.const 272
i32.const 37
i32.const 41
call $~lib/env/abort
unreachable
end
local.get $1
i32.const 2
i32.shl
local.set $4
block $~lib/runtime/REALLOCATE|inlined.1 (result i32)
local.get $2
local.set $5
local.get $4
local.set $6
local.get $5
local.get $6
call $~lib/runtime/doReallocate
end
local.set $6
local.get $6
local.get $2
i32.ne
if
local.get $0
local.get $6
i32.store
local.get $0
local.get $6
i32.store offset=4
local.get $0
local.get $6
local.get $4
i32.add
i32.store offset=8
end
end
)
(func $~lib/array/Array<i32>#__set (; 22 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/array/Array<i32>#__set (; 21 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
local.get $0
local.get $1
i32.const 1
i32.add
call $~lib/array/Array<i32>#resize
i32.const 2
call $~lib/array/ensureLength
local.get $0
i32.load offset=4
local.get $1
@ -2315,7 +2253,7 @@
i32.store offset=12
end
)
(func $std/array-literal/Ref#constructor (; 23 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $std/array-literal/Ref#constructor (; 22 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
local.get $0
i32.eqz
@ -2332,7 +2270,7 @@
end
local.get $0
)
(func $~lib/array/Array<Ref>#constructor (; 24 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/array/Array<Ref>#constructor (; 23 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
local.get $0
if (result i32)
@ -2357,73 +2295,13 @@
i32.store offset=12
local.get $0
)
(func $~lib/array/Array<Ref>#resize (; 25 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
(local $6 i32)
local.get $0
i32.load
local.set $2
local.get $2
call $~lib/arraybuffer/ArrayBuffer#get:byteLength
i32.const 2
i32.shr_u
local.set $3
local.get $1
local.get $3
i32.gt_u
if
local.get $1
i32.const 268435454
i32.gt_u
if
i32.const 0
i32.const 272
i32.const 37
i32.const 41
call $~lib/env/abort
unreachable
end
local.get $1
i32.const 2
i32.shl
local.set $4
block $~lib/runtime/REALLOCATE|inlined.2 (result i32)
local.get $2
local.set $5
local.get $4
local.set $6
local.get $5
local.get $6
call $~lib/runtime/doReallocate
end
local.set $6
local.get $6
local.get $2
i32.ne
if
local.get $0
local.get $6
i32.store
local.get $0
local.get $6
i32.store offset=4
local.get $0
local.get $6
local.get $4
i32.add
i32.store offset=8
end
end
)
(func $~lib/array/Array<Ref>#__set (; 26 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/array/Array<Ref>#__set (; 24 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
local.get $0
local.get $1
i32.const 1
i32.add
call $~lib/array/Array<Ref>#resize
i32.const 2
call $~lib/array/ensureLength
local.get $0
i32.load offset=4
local.get $1
@ -2444,11 +2322,11 @@
i32.store offset=12
end
)
(func $~lib/array/Array<Ref>#get:length (; 27 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/array/Array<Ref>#get:length (; 25 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.load offset=12
)
(func $std/array-literal/RefWithCtor#constructor (; 28 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $std/array-literal/RefWithCtor#constructor (; 26 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(local $1 i32)
local.get $0
i32.eqz
@ -2465,7 +2343,7 @@
end
local.get $0
)
(func $~lib/array/Array<RefWithCtor>#constructor (; 29 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(func $~lib/array/Array<RefWithCtor>#constructor (; 27 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
local.get $0
if (result i32)
@ -2490,73 +2368,13 @@
i32.store offset=12
local.get $0
)
(func $~lib/array/Array<RefWithCtor>#resize (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
(local $6 i32)
local.get $0
i32.load
local.set $2
local.get $2
call $~lib/arraybuffer/ArrayBuffer#get:byteLength
i32.const 2
i32.shr_u
local.set $3
local.get $1
local.get $3
i32.gt_u
if
local.get $1
i32.const 268435454
i32.gt_u
if
i32.const 0
i32.const 272
i32.const 37
i32.const 41
call $~lib/env/abort
unreachable
end
local.get $1
i32.const 2
i32.shl
local.set $4
block $~lib/runtime/REALLOCATE|inlined.3 (result i32)
local.get $2
local.set $5
local.get $4
local.set $6
local.get $5
local.get $6
call $~lib/runtime/doReallocate
end
local.set $6
local.get $6
local.get $2
i32.ne
if
local.get $0
local.get $6
i32.store
local.get $0
local.get $6
i32.store offset=4
local.get $0
local.get $6
local.get $4
i32.add
i32.store offset=8
end
end
)
(func $~lib/array/Array<RefWithCtor>#__set (; 31 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(func $~lib/array/Array<RefWithCtor>#__set (; 28 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
local.get $0
local.get $1
i32.const 1
i32.add
call $~lib/array/Array<RefWithCtor>#resize
i32.const 2
call $~lib/array/ensureLength
local.get $0
i32.load offset=4
local.get $1
@ -2577,15 +2395,17 @@
i32.store offset=12
end
)
(func $~lib/array/Array<RefWithCtor>#get:length (; 32 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
(func $~lib/array/Array<RefWithCtor>#get:length (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0
i32.load offset=12
)
(func $start:std/array-literal (; 33 ;) (type $FUNCSIG$v)
(func $start:std/array-literal (; 30 ;) (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
@ -2600,7 +2420,17 @@
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
i32.const 0
i32.eq
@ -2614,8 +2444,18 @@
unreachable
end
global.get $std/array-literal/staticArrayI8
local.tee $0
i32.load offset=4
i32.load8_s offset=1
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
i32.const 1
i32.eq
i32.eqz
@ -2628,8 +2468,18 @@
unreachable
end
global.get $std/array-literal/staticArrayI8
local.tee $0
i32.load offset=4
i32.load8_s offset=2
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
i32.const 2
i32.eq
i32.eqz
@ -2655,7 +2505,19 @@
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
i32.const 0
i32.eq
@ -2669,8 +2531,20 @@
unreachable
end
global.get $std/array-literal/staticArrayI32
local.tee $0
i32.load offset=4
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
i32.const 1
i32.eq
i32.eqz
@ -2683,8 +2557,20 @@
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
i32.const 2
i32.eq
i32.eqz
@ -2723,12 +2609,12 @@
i32.const 0
i32.const 3
call $~lib/array/Array<i8>#constructor
local.set $0
local.get $0
local.set $2
local.get $2
i32.const 0
global.get $std/array-literal/i
call $~lib/array/Array<i8>#__set
local.get $0
local.get $2
i32.const 1
block (result i32)
global.get $std/array-literal/i
@ -2738,7 +2624,7 @@
global.get $std/array-literal/i
end
call $~lib/array/Array<i8>#__set
local.get $0
local.get $2
i32.const 2
block (result i32)
global.get $std/array-literal/i
@ -2748,7 +2634,7 @@
global.get $std/array-literal/i
end
call $~lib/array/Array<i8>#__set
local.get $0
local.get $2
end
global.set $std/array-literal/dynamicArrayI8
global.get $std/array-literal/dynamicArrayI8
@ -2765,7 +2651,17 @@
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
i32.const 0
i32.eq
@ -2779,8 +2675,18 @@
unreachable
end
global.get $std/array-literal/dynamicArrayI8
local.tee $2
i32.load offset=4
i32.load8_s offset=1
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
i32.const 1
i32.eq
i32.eqz
@ -2793,8 +2699,18 @@
unreachable
end
global.get $std/array-literal/dynamicArrayI8
local.tee $2
i32.load offset=4
i32.load8_s offset=2
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
i32.const 2
i32.eq
i32.eqz
@ -2812,12 +2728,12 @@
i32.const 0
i32.const 3
call $~lib/array/Array<i32>#constructor
local.set $1
local.get $1
local.set $3
local.get $3
i32.const 0
global.get $std/array-literal/i
call $~lib/array/Array<i32>#__set
local.get $1
local.get $3
i32.const 1
block (result i32)
global.get $std/array-literal/i
@ -2827,7 +2743,7 @@
global.get $std/array-literal/i
end
call $~lib/array/Array<i32>#__set
local.get $1
local.get $3
i32.const 2
block (result i32)
global.get $std/array-literal/i
@ -2837,7 +2753,7 @@
global.get $std/array-literal/i
end
call $~lib/array/Array<i32>#__set
local.get $1
local.get $3
end
global.set $std/array-literal/dynamicArrayI32
global.get $std/array-literal/dynamicArrayI32
@ -2854,7 +2770,19 @@
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
i32.const 0
i32.eq
@ -2868,8 +2796,20 @@
unreachable
end
global.get $std/array-literal/dynamicArrayI32
local.tee $3
i32.load offset=4
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
i32.const 1
i32.eq
i32.eqz
@ -2882,8 +2822,20 @@
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
i32.const 2
i32.eq
i32.eqz
@ -2899,23 +2851,23 @@
i32.const 0
i32.const 3
call $~lib/array/Array<Ref>#constructor
local.set $2
local.get $2
local.set $4
local.get $4
i32.const 0
i32.const 0
call $std/array-literal/Ref#constructor
call $~lib/array/Array<Ref>#__set
local.get $2
local.get $4
i32.const 1
i32.const 0
call $std/array-literal/Ref#constructor
call $~lib/array/Array<Ref>#__set
local.get $2
local.get $4
i32.const 2
i32.const 0
call $std/array-literal/Ref#constructor
call $~lib/array/Array<Ref>#__set
local.get $2
local.get $4
end
global.set $std/array-literal/dynamicArrayRef
global.get $std/array-literal/dynamicArrayRef
@ -2935,23 +2887,23 @@
i32.const 0
i32.const 3
call $~lib/array/Array<RefWithCtor>#constructor
local.set $3
local.get $3
local.set $5
local.get $5
i32.const 0
i32.const 0
call $std/array-literal/RefWithCtor#constructor
call $~lib/array/Array<RefWithCtor>#__set
local.get $3
local.get $5
i32.const 1
i32.const 0
call $std/array-literal/RefWithCtor#constructor
call $~lib/array/Array<RefWithCtor>#__set
local.get $3
local.get $5
i32.const 2
i32.const 0
call $std/array-literal/RefWithCtor#constructor
call $~lib/array/Array<RefWithCtor>#__set
local.get $3
local.get $5
end
global.set $std/array-literal/dynamicArrayRefWithCtor
global.get $std/array-literal/dynamicArrayRefWithCtor
@ -2968,9 +2920,9 @@
unreachable
end
)
(func $start (; 34 ;) (type $FUNCSIG$v)
(func $start (; 31 ;) (type $FUNCSIG$v)
call $start:std/array-literal
)
(func $null (; 35 ;) (type $FUNCSIG$v)
(func $null (; 32 ;) (type $FUNCSIG$v)
)
)

File diff suppressed because it is too large Load Diff

View File

@ -894,8 +894,8 @@ assertSorted<Proxy<i32>>(reversedElements512, (a: Proxy<i32>, b: Proxy<i32>): i3
// Test sorting strings
var randomStringsActual: string[] = ["a", "b", "a", "ab", "ba", "", null];
var randomStringsExpected: string[] = ["", "a", "a", "ab", "b", "ba", null];
var randomStringsActual: (string | null)[] = ["a", "b", "a", "ab", "ba", "", null];
var randomStringsExpected: (string | null)[] = ["", "a", "a", "ab", "b", "ba", null];
assertSorted<string>(randomStringsActual);
assert(isArraysEqual<string>(randomStringsActual, randomStringsExpected));
@ -913,7 +913,7 @@ assert((<u32[]>[1, 2, 3]).join("-") == "1-2-3");
assert((<i32[]>[i32.MIN_VALUE, i32.MIN_VALUE]).join("__") == "-2147483648__-2147483648");
assert((<f64[]>[0.0, 1.0, -2.0, NaN, -Infinity, Infinity]).join(", ") == "0.0, 1.0, -2.0, NaN, -Infinity, Infinity");
assert((<string[]>["", "1", null]).join("") == "1");
var refArr: Ref[] = [new Ref(), null, new Ref()];
var refArr: (Ref | null)[] = [new Ref(), null, new Ref()];
assert(refArr.join() == "[object Object],,[object Object]");
// Array#toString //////////////////////////////////////////////////////////////////////////////////

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -7,7 +7,6 @@ assert(buffer.byteLength == 8);
var sliced = buffer.slice();
assert(sliced.byteLength == 8);
assert(sliced.data != buffer.data);
assert(sliced !== buffer);
sliced = buffer.slice(1);

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

@ -90,7 +90,7 @@
if
i32.const 0
i32.const 48
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -104,7 +104,7 @@
if
i32.const 0
i32.const 48
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -154,7 +154,7 @@
if
i32.const 0
i32.const 48
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -169,7 +169,7 @@
if
i32.const 0
i32.const 48
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -84,7 +84,7 @@
if
i32.const 0
i32.const 16
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -98,7 +98,7 @@
if
i32.const 0
i32.const 16
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -147,7 +147,7 @@
if
i32.const 0
i32.const 16
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -162,7 +162,7 @@
if
i32.const 0
i32.const 16
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -167,7 +167,7 @@
if
i32.const 0
i32.const 16
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -181,7 +181,7 @@
if
i32.const 0
i32.const 16
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -215,7 +215,7 @@
if
i32.const 0
i32.const 16
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -230,7 +230,7 @@
if
i32.const 0
i32.const 16
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -2651,7 +2651,7 @@
if
i32.const 0
i32.const 232
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -2665,7 +2665,7 @@
if
i32.const 0
i32.const 232
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -3340,7 +3340,7 @@
if
i32.const 0
i32.const 232
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -3355,7 +3355,7 @@
if
i32.const 0
i32.const 232
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -1514,7 +1514,7 @@
if
i32.const 0
i32.const 136
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -1528,7 +1528,7 @@
if
i32.const 0
i32.const 136
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -1926,7 +1926,7 @@
if
i32.const 0
i32.const 136
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -1941,7 +1941,7 @@
if
i32.const 0
i32.const 136
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -92,7 +92,7 @@
(data (i32.const 1592) "\01\00\00\00\0c\00\00\00,\00a\00,\00b\00,\00c")
(data (i32.const 1616) "\01\00\00\00\0c\00\00\00a\00,\00b\00,\00c\00,")
(data (i32.const 1640) "\02\00\00\00\90\01\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009")
(data (i32.const 2048) "\05\00\00\00\10\00\00\00p\06\00\00p\06\00\00\00\08\00\00d")
(data (i32.const 2048) "\05\00\00\00\10\00\00\00p\06\00\00p\06\00\00\90\01\00\00d")
(data (i32.const 2072) "\01\00\00\00\02\00\00\008")
(data (i32.const 2088) "\01\00\00\00\n\00\00\00-\001\000\000\000")
(data (i32.const 2112) "\01\00\00\00\08\00\00\001\002\003\004")
@ -128,11 +128,11 @@
(data (i32.const 3056) "\01\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y")
(data (i32.const 3088) "\01\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y")
(data (i32.const 3112) "\02\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8<D\a7\a4\d9|\9b\fb\10D\a4\a7LLv\bb\1a\9c@\b6\ef\8e\ab\8b,\84W\a6\10\ef\1f\d0)1\91\e9\e5\a4\10\9b\9d\0c\9c\a1\fb\9b\10\e7)\f4;b\d9 (\ac\85\cf\a7z^KD\80-\dd\ac\03@\e4!\bf\8f\ffD^/\9cg\8eA\b8\8c\9c\9d\173\d4\a9\1b\e3\b4\92\db\19\9e\d9w\df\ban\bf\96\ebk\ee\f0\9b;\02\87\af")
(data (i32.const 3816) "\06\00\00\00\10\00\00\000\0c\00\000\0c\00\00\e8\0e\00\00W")
(data (i32.const 3816) "\06\00\00\00\10\00\00\000\0c\00\000\0c\00\00\b8\02\00\00W")
(data (i32.const 3840) "\02\00\00\00\ae\00\00\00<\fbW\fbr\fb\8c\fb\a7\fb\c1\fb\dc\fb\f6\fb\11\fc,\fcF\fca\fc{\fc\96\fc\b1\fc\cb\fc\e6\fc\00\fd\1b\fd5\fdP\fdk\fd\85\fd\a0\fd\ba\fd\d5\fd\ef\fd\n\fe%\fe?\feZ\fet\fe\8f\fe\a9\fe\c4\fe\df\fe\f9\fe\14\ff.\ffI\ffc\ff~\ff\99\ff\b3\ff\ce\ff\e8\ff\03\00\1e\008\00S\00m\00\88\00\a2\00\bd\00\d8\00\f2\00\0d\01\'\01B\01\\\01w\01\92\01\ac\01\c7\01\e1\01\fc\01\16\021\02L\02f\02\81\02\9b\02\b6\02\d0\02\eb\02\06\03 \03;\03U\03p\03\8b\03\a5\03\c0\03\da\03\f5\03\0f\04*\04")
(data (i32.const 4024) "\07\00\00\00\10\00\00\00\08\0f\00\00\08\0f\00\00\b6\0f\00\00W")
(data (i32.const 4024) "\07\00\00\00\10\00\00\00\08\0f\00\00\08\0f\00\00\ae\00\00\00W")
(data (i32.const 4048) "\02\00\00\00(\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;")
(data (i32.const 4096) "\05\00\00\00\10\00\00\00\d8\0f\00\00\d8\0f\00\00\00\10\00\00\n")
(data (i32.const 4096) "\05\00\00\00\10\00\00\00\d8\0f\00\00\d8\0f\00\00(\00\00\00\n")
(data (i32.const 4120) "\01\00\00\00*\00\00\002\00.\002\002\000\004\004\006\000\004\009\002\005\000\003\001\003\00e\00-\001\006")
(data (i32.const 4176) "\01\00\00\00,\00\00\00-\002\00.\002\002\000\004\004\006\000\004\009\002\005\000\003\001\003\00e\00-\001\006")
(data (i32.const 4232) "\01\00\00\00.\00\00\001\00.\007\009\007\006\009\003\001\003\004\008\006\002\003\001\005\007\00e\00+\003\000\008")
@ -3125,8 +3125,6 @@
i32.store offset=4
local.get $0
local.get $1
local.get $2
i32.add
i32.store offset=8
local.get $0
)
@ -3281,12 +3279,10 @@
local.get $0
local.get $1
i32.store offset=4
local.get $0
local.get $1
local.get $3
i32.add
i32.store offset=8
end
local.get $0
local.get $3
i32.store offset=8
end
)
(func $~lib/array/Array<String>#__set (; 36 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
@ -6700,7 +6696,14 @@
local.tee $0
if (result i32)
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
i32.const 312
call $~lib/string/String.eq
@ -6743,7 +6746,14 @@
local.tee $0
if (result i32)
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
i32.const 312
call $~lib/string/String.eq
@ -6771,7 +6781,14 @@
local.tee $0
if (result i32)
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
i32.const 1480
call $~lib/string/String.eq
@ -6801,7 +6818,14 @@
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
i32.const 336
call $~lib/string/String.eq
@ -6811,8 +6835,17 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
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 824
call $~lib/string/String.eq
local.set $0
@ -6821,8 +6854,17 @@
end
if (result i32)
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 1520
call $~lib/string/String.eq
else
@ -6851,7 +6893,14 @@
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
i32.const 336
call $~lib/string/String.eq
@ -6861,8 +6910,17 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
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 824
call $~lib/string/String.eq
local.set $0
@ -6871,8 +6929,17 @@
end
if (result i32)
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 1520
call $~lib/string/String.eq
else
@ -6902,7 +6969,14 @@
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
i32.const 336
call $~lib/string/String.eq
@ -6912,8 +6986,17 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
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 824
call $~lib/string/String.eq
local.set $0
@ -6922,8 +7005,17 @@
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 312
call $~lib/string/String.eq
local.set $0
@ -6932,8 +7024,17 @@
end
if (result i32)
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.load offset=12
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 1520
call $~lib/string/String.eq
else
@ -6963,7 +7064,14 @@
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
i32.const 312
call $~lib/string/String.eq
@ -6973,8 +7081,17 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
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 336
call $~lib/string/String.eq
local.set $0
@ -6983,8 +7100,17 @@
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 824
call $~lib/string/String.eq
local.set $0
@ -6993,8 +7119,17 @@
end
if (result i32)
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.load offset=12
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 1520
call $~lib/string/String.eq
else
@ -7024,7 +7159,14 @@
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
i32.const 336
call $~lib/string/String.eq
@ -7034,8 +7176,17 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
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 824
call $~lib/string/String.eq
local.set $0
@ -7044,8 +7195,17 @@
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 1520
call $~lib/string/String.eq
local.set $0
@ -7054,8 +7214,17 @@
end
if (result i32)
global.get $std/string/sa
local.tee $0
i32.load offset=4
i32.load offset=12
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 312
call $~lib/string/String.eq
else
@ -7084,7 +7253,14 @@
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
i32.const 336
call $~lib/string/String.eq
@ -7094,8 +7270,17 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
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 824
call $~lib/string/String.eq
local.set $0
@ -7104,8 +7289,17 @@
end
if (result i32)
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 1520
call $~lib/string/String.eq
else
@ -7147,7 +7341,14 @@
local.tee $0
if (result i32)
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
i32.const 336
call $~lib/string/String.eq
@ -7175,7 +7376,14 @@
local.tee $0
if (result i32)
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
i32.const 336
call $~lib/string/String.eq
@ -7205,7 +7413,14 @@
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
i32.const 336
call $~lib/string/String.eq
@ -7215,8 +7430,17 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
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 824
call $~lib/string/String.eq
local.set $0
@ -7225,8 +7449,17 @@
end
if (result i32)
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 1520
call $~lib/string/String.eq
else
@ -7255,7 +7488,14 @@
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
i32.const 336
call $~lib/string/String.eq
@ -7265,8 +7505,17 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
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 824
call $~lib/string/String.eq
local.set $0
@ -7275,8 +7524,17 @@
end
if (result i32)
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 1520
call $~lib/string/String.eq
else
@ -7305,7 +7563,14 @@
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
i32.const 336
call $~lib/string/String.eq
@ -7315,8 +7580,17 @@
end
if
global.get $std/string/sa
local.tee $0
i32.load offset=4
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 824
call $~lib/string/String.eq
local.set $0
@ -7325,8 +7599,17 @@
end
if (result i32)
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 1520
call $~lib/string/String.eq
else

View File

@ -93,7 +93,7 @@
(data (i32.const 1592) "\01\00\00\00\0c\00\00\00,\00a\00,\00b\00,\00c\00")
(data (i32.const 1616) "\01\00\00\00\0c\00\00\00a\00,\00b\00,\00c\00,\00")
(data (i32.const 1640) "\02\00\00\00\90\01\00\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\008\000\009\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\008\001\009\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\008\002\009\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\008\003\009\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\008\004\009\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\008\005\009\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\008\006\009\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\008\007\009\008\000\008\001\008\002\008\003\008\004\008\005\008\006\008\007\008\008\008\009\009\000\009\001\009\002\009\003\009\004\009\005\009\006\009\007\009\008\009\009\00")
(data (i32.const 2048) "\05\00\00\00\10\00\00\00p\06\00\00p\06\00\00\00\08\00\00d\00\00\00")
(data (i32.const 2048) "\05\00\00\00\10\00\00\00p\06\00\00p\06\00\00\90\01\00\00d\00\00\00")
(data (i32.const 2072) "\01\00\00\00\02\00\00\008\00")
(data (i32.const 2088) "\01\00\00\00\n\00\00\00-\001\000\000\000\00")
(data (i32.const 2112) "\01\00\00\00\08\00\00\001\002\003\004\00")
@ -129,11 +129,11 @@
(data (i32.const 3056) "\01\00\00\00\12\00\00\00-\00I\00n\00f\00i\00n\00i\00t\00y\00")
(data (i32.const 3088) "\01\00\00\00\10\00\00\00I\00n\00f\00i\00n\00i\00t\00y\00")
(data (i32.const 3112) "\02\00\00\00\b8\02\00\00\88\02\1c\08\a0\d5\8f\fav\bf>\a2\7f\e1\ae\bav\acU0 \fb\16\8b\ea5\ce]J\89B\cf-;eU\aa\b0k\9a\dfE\1a=\03\cf\1a\e6\ca\c6\9a\c7\17\fep\abO\dc\bc\be\fc\b1w\ff\0c\d6kA\ef\91V\be<\fc\7f\90\ad\1f\d0\8d\83\9aU1(\\Q\d3\b5\c9\a6\ad\8f\acq\9d\cb\8b\ee#w\"\9c\eamSx@\91I\cc\aeW\ce\b6]y\12<\827V\fbM6\94\10\c2O\98H8o\ea\96\90\c7:\82%\cb\85t\d7\f4\97\bf\97\cd\cf\86\a0\e5\ac*\17\98\n4\ef\8e\b25*\fbg8\b2;?\c6\d2\df\d4\c8\84\ba\cd\d3\1a\'D\dd\c5\96\c9%\bb\ce\9fk\93\84\a5b}$l\ac\db\f6\da_\0dXf\ab\a3&\f1\c3\de\93\f8\e2\f3\b8\80\ff\aa\a8\ad\b5\b5\8bJ|l\05_b\87S0\c14`\ff\bc\c9U&\ba\91\8c\85N\96\bd~)p$w\f9\df\8f\b8\e5\b8\9f\bd\df\a6\94}t\88\cf_\a9\f8\cf\9b\a8\8f\93pD\b9k\15\0f\bf\f8\f0\08\8a\b611eU%\b0\cd\ac\7f{\d0\c6\e2?\99\06;+*\c4\10\\\e4\d3\92si\99$$\aa\0e\ca\00\83\f2\b5\87\fd\eb\1a\11\92d\08\e5\bc\cc\88Po\t\cc\bc\8c,e\19\e2X\17\b7\d1\00\00\00\00\00\00@\9c\00\00\00\00\10\a5\d4\e8\00\00b\ac\c5\ebx\ad\84\t\94\f8x9?\81\b3\15\07\c9{\ce\97\c0p\\\ea{\ce2~\8fh\80\e9\ab\a48\d2\d5E\"\9a\17&\'O\9f\'\fb\c4\d41\a2c\ed\a8\ad\c8\8c8e\de\b0\dbe\ab\1a\8e\08\c7\83\9a\1dqB\f9\1d]\c4X\e7\1b\a6,iM\92\ea\8dp\1ad\ee\01\daJw\ef\9a\99\a3m\a2\85k}\b4{x\t\f2w\18\ddy\a1\e4T\b4\c2\c5\9b[\92\86[\86=]\96\c8\c5S5\c8\b3\a0\97\fa\\\b4*\95\e3_\a0\99\bd\9fF\de%\8c9\db4\c2\9b\a5\\\9f\98\a3r\9a\c6\f6\ce\be\e9TS\bf\dc\b7\e2A\"\f2\17\f3\fc\88\a5x\\\d3\9b\ce \cc\dfS!{\f3Z\16\98:0\1f\97\dc\b5\a0\e2\96\b3\e3\\S\d1\d9\a8<D\a7\a4\d9|\9b\fb\10D\a4\a7LLv\bb\1a\9c@\b6\ef\8e\ab\8b,\84W\a6\10\ef\1f\d0)1\91\e9\e5\a4\10\9b\9d\0c\9c\a1\fb\9b\10\e7)\f4;b\d9 (\ac\85\cf\a7z^KD\80-\dd\ac\03@\e4!\bf\8f\ffD^/\9cg\8eA\b8\8c\9c\9d\173\d4\a9\1b\e3\b4\92\db\19\9e\d9w\df\ban\bf\96\ebk\ee\f0\9b;\02\87\af")
(data (i32.const 3816) "\06\00\00\00\10\00\00\000\0c\00\000\0c\00\00\e8\0e\00\00W\00\00\00")
(data (i32.const 3816) "\06\00\00\00\10\00\00\000\0c\00\000\0c\00\00\b8\02\00\00W\00\00\00")
(data (i32.const 3840) "\02\00\00\00\ae\00\00\00<\fbW\fbr\fb\8c\fb\a7\fb\c1\fb\dc\fb\f6\fb\11\fc,\fcF\fca\fc{\fc\96\fc\b1\fc\cb\fc\e6\fc\00\fd\1b\fd5\fdP\fdk\fd\85\fd\a0\fd\ba\fd\d5\fd\ef\fd\n\fe%\fe?\feZ\fet\fe\8f\fe\a9\fe\c4\fe\df\fe\f9\fe\14\ff.\ffI\ffc\ff~\ff\99\ff\b3\ff\ce\ff\e8\ff\03\00\1e\008\00S\00m\00\88\00\a2\00\bd\00\d8\00\f2\00\0d\01\'\01B\01\\\01w\01\92\01\ac\01\c7\01\e1\01\fc\01\16\021\02L\02f\02\81\02\9b\02\b6\02\d0\02\eb\02\06\03 \03;\03U\03p\03\8b\03\a5\03\c0\03\da\03\f5\03\0f\04*\04")
(data (i32.const 4024) "\07\00\00\00\10\00\00\00\08\0f\00\00\08\0f\00\00\b6\0f\00\00W\00\00\00")
(data (i32.const 4024) "\07\00\00\00\10\00\00\00\08\0f\00\00\08\0f\00\00\ae\00\00\00W\00\00\00")
(data (i32.const 4048) "\02\00\00\00(\00\00\00\01\00\00\00\n\00\00\00d\00\00\00\e8\03\00\00\10\'\00\00\a0\86\01\00@B\0f\00\80\96\98\00\00\e1\f5\05\00\ca\9a;")
(data (i32.const 4096) "\05\00\00\00\10\00\00\00\d8\0f\00\00\d8\0f\00\00\00\10\00\00\n\00\00\00")
(data (i32.const 4096) "\05\00\00\00\10\00\00\00\d8\0f\00\00\d8\0f\00\00(\00\00\00\n\00\00\00")
(data (i32.const 4120) "\01\00\00\00*\00\00\002\00.\002\002\000\004\004\006\000\004\009\002\005\000\003\001\003\00e\00-\001\006\00")
(data (i32.const 4176) "\01\00\00\00,\00\00\00-\002\00.\002\002\000\004\004\006\000\004\009\002\005\000\003\001\003\00e\00-\001\006\00")
(data (i32.const 4232) "\01\00\00\00.\00\00\001\00.\007\009\007\006\009\003\001\003\004\008\006\002\003\001\005\007\00e\00+\003\000\008\00")
@ -3850,9 +3850,7 @@
local.get $3
i32.store offset=4
local.get $0
local.get $3
local.get $1
i32.add
i32.store offset=8
local.get $0
)
@ -4044,12 +4042,10 @@
local.get $0
local.get $7
i32.store offset=4
local.get $0
local.get $7
local.get $5
i32.add
i32.store offset=8
end
local.get $0
local.get $5
i32.store offset=8
end
)
(func $~lib/array/Array<String>#__set (; 42 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
@ -8279,7 +8275,19 @@
local.tee $2
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 312
call $~lib/string/String.eq
@ -8325,7 +8333,19 @@
local.tee $2
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 312
call $~lib/string/String.eq
@ -8353,7 +8373,19 @@
local.tee $2
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1480
call $~lib/string/String.eq
@ -8381,7 +8413,19 @@
local.tee $2
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 336
call $~lib/string/String.eq
@ -8389,25 +8433,55 @@
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
i32.load offset=4
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 824
call $~lib/string/String.eq
else
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1520
call $~lib/string/String.eq
else
local.get $2
end
i32.const 0
i32.ne
i32.eqz
if
i32.const 0
@ -8429,7 +8503,19 @@
local.tee $2
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 336
call $~lib/string/String.eq
@ -8437,25 +8523,55 @@
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
i32.load offset=4
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 824
call $~lib/string/String.eq
else
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1520
call $~lib/string/String.eq
else
local.get $2
end
i32.const 0
i32.ne
i32.eqz
if
i32.const 0
@ -8477,7 +8593,19 @@
local.tee $2
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 336
call $~lib/string/String.eq
@ -8485,35 +8613,79 @@
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
i32.load offset=4
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 824
call $~lib/string/String.eq
else
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 312
call $~lib/string/String.eq
else
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
i32.load offset=4
i32.load offset=12
i32.const 3
i32.const 2
i32.shl
local.tee $1
i32.add
i32.const -1
local.get $1
local.get $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1520
call $~lib/string/String.eq
else
local.get $2
end
i32.const 0
i32.ne
i32.eqz
if
i32.const 0
@ -8535,7 +8707,19 @@
local.tee $2
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 312
call $~lib/string/String.eq
@ -8543,35 +8727,79 @@
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
i32.load offset=4
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 336
call $~lib/string/String.eq
else
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 824
call $~lib/string/String.eq
else
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
i32.load offset=4
i32.load offset=12
i32.const 3
i32.const 2
i32.shl
local.tee $1
i32.add
i32.const -1
local.get $1
local.get $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1520
call $~lib/string/String.eq
else
local.get $2
end
i32.const 0
i32.ne
i32.eqz
if
i32.const 0
@ -8593,7 +8821,19 @@
local.tee $2
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 336
call $~lib/string/String.eq
@ -8601,35 +8841,79 @@
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
i32.load offset=4
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 824
call $~lib/string/String.eq
else
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1520
call $~lib/string/String.eq
else
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
i32.load offset=4
i32.load offset=12
i32.const 3
i32.const 2
i32.shl
local.tee $1
i32.add
i32.const -1
local.get $1
local.get $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 312
call $~lib/string/String.eq
else
local.get $2
end
i32.const 0
i32.ne
i32.eqz
if
i32.const 0
@ -8651,7 +8935,19 @@
local.tee $2
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 336
call $~lib/string/String.eq
@ -8659,25 +8955,55 @@
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
i32.load offset=4
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 824
call $~lib/string/String.eq
else
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1520
call $~lib/string/String.eq
else
local.get $2
end
i32.const 0
i32.ne
i32.eqz
if
i32.const 0
@ -8717,7 +9043,19 @@
local.tee $2
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 336
call $~lib/string/String.eq
@ -8745,7 +9083,19 @@
local.tee $2
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 336
call $~lib/string/String.eq
@ -8773,7 +9123,19 @@
local.tee $2
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 336
call $~lib/string/String.eq
@ -8781,25 +9143,55 @@
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
i32.load offset=4
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 824
call $~lib/string/String.eq
else
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1520
call $~lib/string/String.eq
else
local.get $2
end
i32.const 0
i32.ne
i32.eqz
if
i32.const 0
@ -8821,7 +9213,19 @@
local.tee $2
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 336
call $~lib/string/String.eq
@ -8829,25 +9233,55 @@
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
i32.load offset=4
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 824
call $~lib/string/String.eq
else
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1520
call $~lib/string/String.eq
else
local.get $2
end
i32.const 0
i32.ne
i32.eqz
if
i32.const 0
@ -8869,7 +9303,19 @@
local.tee $2
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 336
call $~lib/string/String.eq
@ -8877,25 +9323,55 @@
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
i32.load offset=4
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 824
call $~lib/string/String.eq
else
local.get $2
end
local.tee $2
i32.const 0
i32.ne
if (result i32)
global.get $std/string/sa
local.tee $2
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 $2
i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1520
call $~lib/string/String.eq
else
local.get $2
end
i32.const 0
i32.ne
i32.eqz
if
i32.const 0

View File

@ -144,7 +144,7 @@
if
i32.const 0
i32.const 72
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -158,7 +158,7 @@
if
i32.const 0
i32.const 72
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable

View File

@ -206,7 +206,7 @@
if
i32.const 0
i32.const 72
i32.const 188
i32.const 191
i32.const 2
call $~lib/env/abort
unreachable
@ -221,7 +221,7 @@
if
i32.const 0
i32.const 72
i32.const 189
i32.const 192
i32.const 2
call $~lib/env/abort
unreachable