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( export function compileBuiltinArrayGet(
compiler: Compiler, compiler: Compiler,
target: Class, target: Class,
@ -4113,7 +4092,7 @@ export function compileBuiltinArrayGet(
elementExpression: Expression, elementExpression: Expression,
contextualType: Type contextualType: Type
): ExpressionRef { ): ExpressionRef {
var type = assert(determineTypedArrayType(target, compiler.program)); var type = assert(compiler.program.determineBuiltinArrayType(target));
var module = compiler.module; var module = compiler.module;
var outType = ( var outType = (
type.is(TypeFlags.INTEGER) && type.is(TypeFlags.INTEGER) &&
@ -4258,7 +4237,7 @@ export function compileBuiltinArraySet(
valueExpression: Expression, valueExpression: Expression,
contextualType: Type contextualType: Type
): ExpressionRef { ): ExpressionRef {
var type = assert(determineTypedArrayType(target, compiler.program)); var type = assert(compiler.program.determineBuiltinArrayType(target));
return compileBuiltinArraySetWithValue( return compileBuiltinArraySetWithValue(
compiler, compiler,
target, target,
@ -4294,7 +4273,7 @@ export function compileBuiltinArraySetWithValue(
// TODO: check offset // TODO: check offset
var program = compiler.program; var program = compiler.program;
var type = assert(determineTypedArrayType(target, compiler.program)); var type = assert(compiler.program.determineBuiltinArrayType(target));
var module = compiler.module; var module = compiler.module;
var dataStart = assert(target.lookupInSelf("dataStart")); var dataStart = assert(target.lookupInSelf("dataStart"));

View File

@ -4704,9 +4704,8 @@ export class Compiler extends DiagnosticEmitter {
case ElementKind.CLASS: { case ElementKind.CLASS: {
let elementExpression = resolver.currentElementExpression; let elementExpression = resolver.currentElementExpression;
if (elementExpression) { // indexed access if (elementExpression) { // indexed access
let arrayBufferView = this.program.arrayBufferViewInstance; let arrayType = this.program.determineBuiltinArrayType(<Class>target);
if (arrayBufferView) { if (arrayType) {
if ((<Class>target).prototype.extends(arrayBufferView.prototype)) {
return compileBuiltinArraySet( return compileBuiltinArraySet(
this, this,
<Class>target, <Class>target,
@ -4716,7 +4715,6 @@ export class Compiler extends DiagnosticEmitter {
contextualType contextualType
); );
} }
}
let isUnchecked = flow.is(FlowFlags.UNCHECKED_CONTEXT); let isUnchecked = flow.is(FlowFlags.UNCHECKED_CONTEXT);
let indexedSet = (<Class>target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked); let indexedSet = (<Class>target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);
if (!indexedSet) { if (!indexedSet) {
@ -4940,9 +4938,8 @@ export class Compiler extends DiagnosticEmitter {
case ElementKind.CLASS: { case ElementKind.CLASS: {
let elementExpression = this.resolver.currentElementExpression; let elementExpression = this.resolver.currentElementExpression;
if (elementExpression) { if (elementExpression) {
let arrayBufferView = this.program.arrayBufferViewInstance; let arrayType = this.program.determineBuiltinArrayType(<Class>target);
if (arrayBufferView) { if (arrayType) {
if ((<Class>target).prototype.extends(arrayBufferView.prototype)) {
return compileBuiltinArraySetWithValue( return compileBuiltinArraySetWithValue(
this, this,
<Class>target, <Class>target,
@ -4952,7 +4949,6 @@ export class Compiler extends DiagnosticEmitter {
tee tee
); );
} }
}
let isUnchecked = flow.is(FlowFlags.UNCHECKED_CONTEXT); let isUnchecked = flow.is(FlowFlags.UNCHECKED_CONTEXT);
let indexedGet = (<Class>target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked); let indexedGet = (<Class>target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);
if (!indexedGet) { if (!indexedGet) {
@ -5960,9 +5956,8 @@ export class Compiler extends DiagnosticEmitter {
if (!target) return this.module.createUnreachable(); if (!target) return this.module.createUnreachable();
switch (target.kind) { switch (target.kind) {
case ElementKind.CLASS: { case ElementKind.CLASS: {
let arrayBufferView = this.program.arrayBufferViewInstance; let arrayType = this.program.determineBuiltinArrayType(<Class>target);
if (arrayBufferView) { if (arrayType) {
if ((<Class>target).prototype.extends(arrayBufferView.prototype)) {
return compileBuiltinArrayGet( return compileBuiltinArrayGet(
this, this,
<Class>target, <Class>target,
@ -5971,7 +5966,6 @@ export class Compiler extends DiagnosticEmitter {
contextualType contextualType
); );
} }
}
let isUnchecked = this.currentFlow.is(FlowFlags.UNCHECKED_CONTEXT); let isUnchecked = this.currentFlow.is(FlowFlags.UNCHECKED_CONTEXT);
let indexedGet = (<Class>target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked); let indexedGet = (<Class>target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);
if (!indexedGet) { if (!indexedGet) {

View File

@ -100,6 +100,10 @@ import {
Flow Flow
} from "./flow"; } from "./flow";
import {
BuiltinSymbols
} from "./builtins";
/** Represents a yet unresolved `import`. */ /** Represents a yet unresolved `import`. */
class QueuedImport { class QueuedImport {
constructor( constructor(
@ -1702,6 +1706,33 @@ export class Program extends DiagnosticEmitter {
if (!parent.add(name, element)) continue; // reports 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}. */ /** Indicates the specific kind of an {@link Element}. */

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -11,7 +11,7 @@
(memory $0 1) (memory $0 1)
(data (i32.const 8) "\01\00\00\00\02\00\00\000") (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 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 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 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") (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 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 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 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 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 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 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 1680) "\01")
(data (i32.const 1688) "\01\00\00\00\06\00\00\002\00.\000") (data (i32.const 1688) "\01\00\00\00\06\00\00\002\00.\000")
@ -302,7 +302,7 @@
if if
i32.const 0 i32.const 0
i32.const 464 i32.const 464
i32.const 188 i32.const 191
i32.const 2 i32.const 2
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -316,7 +316,7 @@
if if
i32.const 0 i32.const 0
i32.const 464 i32.const 464
i32.const 189 i32.const 192
i32.const 2 i32.const 2
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable

View File

@ -15,7 +15,7 @@
(memory $0 1) (memory $0 1)
(data (i32.const 8) "\01\00\00\00\02\00\00\000\00") (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 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 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 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") (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 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 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 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 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 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 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 1680) "\01\00\00\00\00\00\00\00")
(data (i32.const 1688) "\01\00\00\00\06\00\00\002\00.\000\00") (data (i32.const 1688) "\01\00\00\00\06\00\00\002\00.\000\00")
@ -399,7 +399,7 @@
if if
i32.const 0 i32.const 0
i32.const 464 i32.const 464
i32.const 188 i32.const 191
i32.const 2 i32.const 2
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -414,7 +414,7 @@
if if
i32.const 0 i32.const 0
i32.const 464 i32.const 464
i32.const 189 i32.const 192
i32.const 2 i32.const 2
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,18 +1,20 @@
(module (module
(type $FUNCSIG$ii (func (param i32) (result i32))) (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$iiii (func (param i32 i32 i32) (result i32)))
(type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) (type $FUNCSIG$viiii (func (param i32 i32 i32 i32)))
(type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32))) (type $FUNCSIG$iiiiii (func (param i32 i32 i32 i32 i32) (result i32)))
(type $FUNCSIG$v (func)) (type $FUNCSIG$v (func))
(import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32)))
(memory $0 1) (memory $0 1)
(data (i32.const 8) "\00\00\00\00") (data (i32.const 8) "\01\00\00\00\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 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 48) "\04\00\00\00n\00u\00l\00l\00") (data (i32.const 56) "\01\00\00\00\08\00\00\00n\00u\00l\00l\00")
(table $0 1 funcref) (table $0 1 funcref)
(elem (i32.const 0) $null) (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 "memory" (memory $0))
(export "table" (table $0)) (export "table" (table $0))
(export "i32ArrayArrayElementAccess" (func $std/array-access/i32ArrayArrayElementAccess)) (export "i32ArrayArrayElementAccess" (func $std/array-access/i32ArrayArrayElementAccess))
@ -20,119 +22,68 @@
(export "stringArrayMethodCall" (func $std/array-access/stringArrayMethodCall)) (export "stringArrayMethodCall" (func $std/array-access/stringArrayMethodCall))
(export "stringArrayArrayPropertyAccess" (func $std/array-access/stringArrayArrayPropertyAccess)) (export "stringArrayArrayPropertyAccess" (func $std/array-access/stringArrayArrayPropertyAccess))
(export "stringArrayArrayMethodCall" (func $std/array-access/stringArrayArrayMethodCall)) (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 $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
local.get $0 local.get $0
i32.load local.tee $1
local.set $2 i32.load offset=4
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 i32.const 0
local.set $5
local.get $3
local.get $4
i32.const 2 i32.const 2
i32.shl i32.shl
local.tee $2
i32.add i32.add
local.get $5 i32.const -1
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 local.get $2
i32.load local.get $1
i32.const 2 i32.load offset=8
i32.shr_u
i32.lt_u i32.lt_u
if (result i32) select
local.get $2 i32.load
local.set $3 local.tee $1
local.get $1 i32.load offset=4
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
i32.const 0
call $~lib/array/Array<Array<i32>>#__get
i32.const 1 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.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.const 2
i32.shl i32.shl
local.tee $2
i32.add i32.add
local.get $5 i32.const -1
i32.add local.get $2
local.get $1
i32.load offset=8 i32.load offset=8
else i32.lt_u
unreachable select
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
i32.load 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 $5 i32)
(local $6 i32) (local $6 i32)
(local $7 i32) (local $7 i32)
@ -155,9 +106,9 @@
local.get $4 local.get $4
if (result i32) if (result i32)
local.get $6 local.get $6
i32.load16_u offset=4 i32.load16_u
local.get $7 local.get $7
i32.load16_u offset=4 i32.load16_u
i32.sub i32.sub
local.tee $5 local.tee $5
i32.eqz i32.eqz
@ -185,7 +136,7 @@
end end
local.get $5 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 $3 i32)
(local $4 i32) (local $4 i32)
(local $5 i32) (local $5 i32)
@ -198,8 +149,8 @@
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
i32.const 16 i32.const 24
i32.const 224 i32.const 165
i32.const 4 i32.const 4
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -208,13 +159,13 @@
i32.const 0 i32.const 0
i32.eq i32.eq
if if
i32.const 48 i32.const 64
local.set $1 local.set $1
end end
local.get $2 local.get $2
local.set $3 local.set $3
local.get $0 local.get $0
i32.load call $~lib/string/String#get:length
local.set $4 local.set $4
local.get $3 local.get $3
local.tee $5 local.tee $5
@ -233,7 +184,7 @@
select select
local.set $7 local.set $7
local.get $1 local.get $1
i32.load call $~lib/string/String#get:length
local.set $8 local.set $8
local.get $8 local.get $8
local.get $7 local.get $7
@ -249,68 +200,101 @@
local.get $1 local.get $1
i32.const 0 i32.const 0
local.get $8 local.get $8
call $~lib/internal/string/compareUnsafe call $~lib/util/string/compareImpl
i32.eqz i32.eqz
) )
(func $std/array-access/stringArrayMethodCall (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (func $std/array-access/stringArrayMethodCall (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32)
local.get $0 (local $1 i32)
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)
(local $2 i32) (local $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 i32)
local.get $0 local.get $0
i32.load local.tee $1
local.set $2 i32.load offset=4
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 i32.const 0
local.set $5
local.get $3
local.get $4
i32.const 2 i32.const 2
i32.shl i32.shl
local.tee $2
i32.add i32.add
local.get $5 i32.const -1
i32.add local.get $2
local.get $1
i32.load offset=8 i32.load offset=8
else i32.lt_u
unreachable select
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
i32.load i32.load
) i32.const 16
(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 0 i32.const 0
call $~lib/string/String#startsWith 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$iii (func (param i32 i32) (result i32)))
(type $FUNCSIG$viii (func (param i32 i32 i32))) (type $FUNCSIG$viii (func (param i32 i32 i32)))
(type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$vi (func (param i32)))
(type $FUNCSIG$vii (func (param i32 i32)))
(type $FUNCSIG$v (func)) (type $FUNCSIG$v (func))
(type $FUNCSIG$vii (func (param i32 i32)))
(type $FUNCSIG$i (func (result i32))) (type $FUNCSIG$i (func (result i32)))
(import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32)))
(memory $0 1) (memory $0 1)
(data (i32.const 8) "\01\00\00\00\03\00\00\00\00\01\02") (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 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 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 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 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 216) "\03\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s")
(data (i32.const 264) "\03\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") (data (i32.const 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 if
i32.const 0 i32.const 0
i32.const 184 i32.const 184
i32.const 188 i32.const 191
i32.const 2 i32.const 2
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -347,7 +347,7 @@
if if
i32.const 0 i32.const 0
i32.const 184 i32.const 184
i32.const 189 i32.const 192
i32.const 2 i32.const 2
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -395,7 +395,7 @@
if if
i32.const 0 i32.const 0
i32.const 184 i32.const 184
i32.const 223 i32.const 226
i32.const 57 i32.const 57
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -431,9 +431,7 @@
local.get $1 local.get $1
i32.store offset=4 i32.store offset=4
local.get $0 local.get $0
local.get $1
local.get $2 local.get $2
i32.add
i32.store offset=8 i32.store offset=8
local.get $0 local.get $0
) )
@ -1622,49 +1620,52 @@
i32.store offset=4 i32.store offset=4
local.get $0 local.get $0
) )
(func $~lib/array/Array<i8>#resize (; 11 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (func $~lib/array/ensureLength (; 11 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $2 i32)
(local $3 i32) (local $3 i32)
local.get $1 local.get $1
local.get $0 local.get $0
i32.load i32.load
local.tee $2 local.tee $3
i32.const 8 i32.const 8
i32.sub i32.sub
i32.load offset=4 i32.load offset=4
local.get $2
i32.shr_u
i32.gt_u i32.gt_u
if if
local.get $1 local.get $1
i32.const 1073741816 i32.const 1073741816
local.get $2
i32.shr_u
i32.gt_u i32.gt_u
if if
i32.const 0 i32.const 0
i32.const 272 i32.const 272
i32.const 37 i32.const 12
i32.const 41 i32.const 59
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
end 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 $3
local.get $1
local.get $2
i32.shl
local.tee $2
call $~lib/runtime/doReallocate
local.tee $1
i32.ne i32.ne
if if
local.get $0 local.get $0
local.get $2 local.get $1
i32.store i32.store
local.get $0 local.get $0
local.get $2
i32.store offset=4
local.get $0
local.get $1 local.get $1
local.get $2 i32.store offset=4
i32.add
i32.store offset=8
end end
local.get $0
local.get $2
i32.store offset=8
end end
) )
(func $~lib/array/Array<i8>#__set (; 12 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (func $~lib/array/Array<i8>#__set (; 12 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
@ -1672,7 +1673,8 @@
local.get $1 local.get $1
i32.const 1 i32.const 1
i32.add i32.add
call $~lib/array/Array<i8>#resize i32.const 0
call $~lib/array/ensureLength
local.get $1 local.get $1
local.get $0 local.get $0
i32.load offset=4 i32.load offset=4
@ -1691,62 +1693,13 @@
i32.store offset=12 i32.store offset=12
end end
) )
(func $~lib/array/Array<i32>#resize (; 13 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (func $~lib/array/Array<i32>#__set (; 13 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 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)
local.get $0 local.get $0
local.get $1 local.get $1
i32.const 1 i32.const 1
i32.add i32.add
call $~lib/array/Array<i32>#resize i32.const 2
call $~lib/array/ensureLength
local.get $0 local.get $0
i32.load offset=4 i32.load offset=4
local.get $1 local.get $1
@ -1767,19 +1720,19 @@
i32.store offset=12 i32.store offset=12
end 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 i32.const 0
call $~lib/runtime/doAllocate call $~lib/runtime/doAllocate
i32.const 6 i32.const 6
call $~lib/runtime/doRegister 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 i32.const 0
call $~lib/runtime/doAllocate call $~lib/runtime/doAllocate
i32.const 8 i32.const 8
call $~lib/runtime/doRegister 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) (local $0 i32)
i32.const 44 i32.const 44
i32.load i32.load
@ -1795,6 +1748,12 @@
end end
i32.const 36 i32.const 36
i32.load i32.load
i32.const -1
i32.const 0
i32.const 40
i32.load
i32.lt_u
select
i32.load8_s i32.load8_s
if if
i32.const 0 i32.const 0
@ -1806,7 +1765,15 @@
end end
i32.const 36 i32.const 36
i32.load 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.const 1
i32.ne i32.ne
if if
@ -1819,7 +1786,15 @@
end end
i32.const 36 i32.const 36
i32.load 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.const 2
i32.ne i32.ne
if if
@ -1844,6 +1819,12 @@
end end
i32.const 132 i32.const 132
i32.load i32.load
i32.const -1
i32.const 0
i32.const 136
i32.load
i32.lt_u
select
i32.load i32.load
if if
i32.const 0 i32.const 0
@ -1855,7 +1836,15 @@
end end
i32.const 132 i32.const 132
i32.load 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.const 1
i32.ne i32.ne
if if
@ -1868,7 +1857,15 @@
end end
i32.const 132 i32.const 132
i32.load 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.const 2
i32.ne i32.ne
if if
@ -1940,7 +1937,14 @@
unreachable unreachable
end end
global.get $std/array-literal/dynamicArrayI8 global.get $std/array-literal/dynamicArrayI8
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load8_s i32.load8_s
if if
i32.const 0 i32.const 0
@ -1951,8 +1955,17 @@
unreachable unreachable
end end
global.get $std/array-literal/dynamicArrayI8 global.get $std/array-literal/dynamicArrayI8
local.tee $0
i32.load offset=4 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.const 1
i32.ne i32.ne
if if
@ -1964,8 +1977,17 @@
unreachable unreachable
end end
global.get $std/array-literal/dynamicArrayI8 global.get $std/array-literal/dynamicArrayI8
local.tee $0
i32.load offset=4 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.const 2
i32.ne i32.ne
if if
@ -2025,7 +2047,14 @@
unreachable unreachable
end end
global.get $std/array-literal/dynamicArrayI32 global.get $std/array-literal/dynamicArrayI32
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load i32.load
if if
i32.const 0 i32.const 0
@ -2036,8 +2065,17 @@
unreachable unreachable
end end
global.get $std/array-literal/dynamicArrayI32 global.get $std/array-literal/dynamicArrayI32
local.tee $0
i32.load offset=4 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.const 1
i32.ne i32.ne
if if
@ -2049,8 +2087,17 @@
unreachable unreachable
end end
global.get $std/array-literal/dynamicArrayI32 global.get $std/array-literal/dynamicArrayI32
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8 i32.load offset=8
i32.lt_u
select
i32.load
i32.const 2 i32.const 2
i32.ne i32.ne
if if
@ -2138,10 +2185,10 @@
unreachable unreachable
end end
) )
(func $start (; 18 ;) (type $FUNCSIG$v) (func $start (; 17 ;) (type $FUNCSIG$v)
call $start:std/array-literal call $start:std/array-literal
) )
(func $null (; 19 ;) (type $FUNCSIG$v) (func $null (; 18 ;) (type $FUNCSIG$v)
nop nop
) )
) )

View File

@ -5,17 +5,16 @@
(type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32))) (type $FUNCSIG$iiii (func (param i32 i32 i32) (result i32)))
(type $FUNCSIG$viii (func (param i32 i32 i32))) (type $FUNCSIG$viii (func (param i32 i32 i32)))
(type $FUNCSIG$vi (func (param i32))) (type $FUNCSIG$vi (func (param i32)))
(type $FUNCSIG$vii (func (param i32 i32)))
(type $FUNCSIG$v (func)) (type $FUNCSIG$v (func))
(import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32)))
(memory $0 1) (memory $0 1)
(data (i32.const 8) "\01\00\00\00\03\00\00\00\00\01\02") (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 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 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 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 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 216) "\03\00\00\00&\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00")
(data (i32.const 264) "\03\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") (data (i32.const 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 if
i32.const 0 i32.const 0
i32.const 184 i32.const 184
i32.const 188 i32.const 191
i32.const 2 i32.const 2
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -440,7 +439,7 @@
if if
i32.const 0 i32.const 0
i32.const 184 i32.const 184
i32.const 189 i32.const 192
i32.const 2 i32.const 2
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -504,7 +503,7 @@
if if
i32.const 0 i32.const 0
i32.const 184 i32.const 184
i32.const 223 i32.const 226
i32.const 57 i32.const 57
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -547,9 +546,7 @@
local.get $3 local.get $3
i32.store offset=4 i32.store offset=4
local.get $0 local.get $0
local.get $3
local.get $1 local.get $1
i32.add
i32.store offset=8 i32.store offset=8
local.get $0 local.get $0
) )
@ -2116,65 +2113,65 @@
i32.store offset=4 i32.store offset=4
local.get $0 local.get $0
) )
(func $~lib/array/Array<i8>#resize (; 18 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (func $~lib/array/ensureLength (; 18 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
(local $2 i32)
(local $3 i32) (local $3 i32)
(local $4 i32) (local $4 i32)
(local $5 i32) (local $5 i32)
(local $6 i32) (local $6 i32)
(local $7 i32)
local.get $0 local.get $0
i32.load i32.load
local.set $2
local.get $2
call $~lib/arraybuffer/ArrayBuffer#get:byteLength
i32.const 0
i32.shr_u
local.set $3 local.set $3
local.get $1
local.get $3 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 i32.gt_u
if if
local.get $1 local.get $1
i32.const 1073741816 global.get $~lib/runtime/MAX_BYTELENGTH
local.get $2
i32.shr_u
i32.gt_u i32.gt_u
if if
i32.const 0 i32.const 0
i32.const 272 i32.const 272
i32.const 37 i32.const 12
i32.const 41 i32.const 59
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
end end
local.get $1 local.get $1
i32.const 0
i32.shl
local.set $4
block $~lib/runtime/REALLOCATE|inlined.0 (result i32)
local.get $2 local.get $2
i32.shl
local.set $5 local.set $5
local.get $4 block $~lib/runtime/REALLOCATE|inlined.0 (result i32)
local.get $3
local.set $6 local.set $6
local.get $5 local.get $5
local.set $7
local.get $6 local.get $6
local.get $7
call $~lib/runtime/doReallocate call $~lib/runtime/doReallocate
end end
local.set $6 local.set $7
local.get $6 local.get $7
local.get $2 local.get $3
i32.ne i32.ne
if if
local.get $0 local.get $0
local.get $6 local.get $7
i32.store i32.store
local.get $0 local.get $0
local.get $6 local.get $7
i32.store offset=4 i32.store offset=4
local.get $0
local.get $6
local.get $4
i32.add
i32.store offset=8
end end
local.get $0
local.get $5
i32.store offset=8
end end
) )
(func $~lib/array/Array<i8>#__set (; 19 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (func $~lib/array/Array<i8>#__set (; 19 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32)
@ -2182,7 +2179,8 @@
local.get $1 local.get $1
i32.const 1 i32.const 1
i32.add i32.add
call $~lib/array/Array<i8>#resize i32.const 0
call $~lib/array/ensureLength
local.get $0 local.get $0
i32.load offset=4 i32.load offset=4
local.get $1 local.get $1
@ -2228,73 +2226,13 @@
i32.store offset=12 i32.store offset=12
local.get $0 local.get $0
) )
(func $~lib/array/Array<i32>#resize (; 21 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (func $~lib/array/Array<i32>#__set (; 21 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 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)
local.get $0 local.get $0
local.get $1 local.get $1
i32.const 1 i32.const 1
i32.add i32.add
call $~lib/array/Array<i32>#resize i32.const 2
call $~lib/array/ensureLength
local.get $0 local.get $0
i32.load offset=4 i32.load offset=4
local.get $1 local.get $1
@ -2315,7 +2253,7 @@
i32.store offset=12 i32.store offset=12
end 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 $1 i32)
local.get $0 local.get $0
i32.eqz i32.eqz
@ -2332,7 +2270,7 @@
end end
local.get $0 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 $2 i32)
local.get $0 local.get $0
if (result i32) if (result i32)
@ -2357,73 +2295,13 @@
i32.store offset=12 i32.store offset=12
local.get $0 local.get $0
) )
(func $~lib/array/Array<Ref>#resize (; 25 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (func $~lib/array/Array<Ref>#__set (; 24 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 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)
local.get $0 local.get $0
local.get $1 local.get $1
i32.const 1 i32.const 1
i32.add i32.add
call $~lib/array/Array<Ref>#resize i32.const 2
call $~lib/array/ensureLength
local.get $0 local.get $0
i32.load offset=4 i32.load offset=4
local.get $1 local.get $1
@ -2444,11 +2322,11 @@
i32.store offset=12 i32.store offset=12
end 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 local.get $0
i32.load offset=12 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 $1 i32)
local.get $0 local.get $0
i32.eqz i32.eqz
@ -2465,7 +2343,7 @@
end end
local.get $0 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 $2 i32)
local.get $0 local.get $0
if (result i32) if (result i32)
@ -2490,73 +2368,13 @@
i32.store offset=12 i32.store offset=12
local.get $0 local.get $0
) )
(func $~lib/array/Array<RefWithCtor>#resize (; 30 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (func $~lib/array/Array<RefWithCtor>#__set (; 28 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 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)
local.get $0 local.get $0
local.get $1 local.get $1
i32.const 1 i32.const 1
i32.add i32.add
call $~lib/array/Array<RefWithCtor>#resize i32.const 2
call $~lib/array/ensureLength
local.get $0 local.get $0
i32.load offset=4 i32.load offset=4
local.get $1 local.get $1
@ -2577,15 +2395,17 @@
i32.store offset=12 i32.store offset=12
end 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 local.get $0
i32.load offset=12 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 $0 i32)
(local $1 i32) (local $1 i32)
(local $2 i32) (local $2 i32)
(local $3 i32) (local $3 i32)
(local $4 i32)
(local $5 i32)
global.get $std/array-literal/staticArrayI8 global.get $std/array-literal/staticArrayI8
call $~lib/array/Array<i8>#get:length call $~lib/array/Array<i8>#get:length
i32.const 3 i32.const 3
@ -2600,7 +2420,17 @@
unreachable unreachable
end end
global.get $std/array-literal/staticArrayI8 global.get $std/array-literal/staticArrayI8
local.tee $0
i32.load offset=4 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.load8_s
i32.const 0 i32.const 0
i32.eq i32.eq
@ -2614,8 +2444,18 @@
unreachable unreachable
end end
global.get $std/array-literal/staticArrayI8 global.get $std/array-literal/staticArrayI8
local.tee $0
i32.load offset=4 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.const 1
i32.eq i32.eq
i32.eqz i32.eqz
@ -2628,8 +2468,18 @@
unreachable unreachable
end end
global.get $std/array-literal/staticArrayI8 global.get $std/array-literal/staticArrayI8
local.tee $0
i32.load offset=4 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.const 2
i32.eq i32.eq
i32.eqz i32.eqz
@ -2655,7 +2505,19 @@
unreachable unreachable
end end
global.get $std/array-literal/staticArrayI32 global.get $std/array-literal/staticArrayI32
local.tee $0
i32.load offset=4 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.load
i32.const 0 i32.const 0
i32.eq i32.eq
@ -2669,8 +2531,20 @@
unreachable unreachable
end end
global.get $std/array-literal/staticArrayI32 global.get $std/array-literal/staticArrayI32
local.tee $0
i32.load offset=4 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.const 1
i32.eq i32.eq
i32.eqz i32.eqz
@ -2683,8 +2557,20 @@
unreachable unreachable
end end
global.get $std/array-literal/staticArrayI32 global.get $std/array-literal/staticArrayI32
local.tee $0
i32.load offset=4 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.load offset=8
i32.lt_u
select
i32.load
i32.const 2 i32.const 2
i32.eq i32.eq
i32.eqz i32.eqz
@ -2723,12 +2609,12 @@
i32.const 0 i32.const 0
i32.const 3 i32.const 3
call $~lib/array/Array<i8>#constructor call $~lib/array/Array<i8>#constructor
local.set $0 local.set $2
local.get $0 local.get $2
i32.const 0 i32.const 0
global.get $std/array-literal/i global.get $std/array-literal/i
call $~lib/array/Array<i8>#__set call $~lib/array/Array<i8>#__set
local.get $0 local.get $2
i32.const 1 i32.const 1
block (result i32) block (result i32)
global.get $std/array-literal/i global.get $std/array-literal/i
@ -2738,7 +2624,7 @@
global.get $std/array-literal/i global.get $std/array-literal/i
end end
call $~lib/array/Array<i8>#__set call $~lib/array/Array<i8>#__set
local.get $0 local.get $2
i32.const 2 i32.const 2
block (result i32) block (result i32)
global.get $std/array-literal/i global.get $std/array-literal/i
@ -2748,7 +2634,7 @@
global.get $std/array-literal/i global.get $std/array-literal/i
end end
call $~lib/array/Array<i8>#__set call $~lib/array/Array<i8>#__set
local.get $0 local.get $2
end end
global.set $std/array-literal/dynamicArrayI8 global.set $std/array-literal/dynamicArrayI8
global.get $std/array-literal/dynamicArrayI8 global.get $std/array-literal/dynamicArrayI8
@ -2765,7 +2651,17 @@
unreachable unreachable
end end
global.get $std/array-literal/dynamicArrayI8 global.get $std/array-literal/dynamicArrayI8
local.tee $2
i32.load offset=4 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.load8_s
i32.const 0 i32.const 0
i32.eq i32.eq
@ -2779,8 +2675,18 @@
unreachable unreachable
end end
global.get $std/array-literal/dynamicArrayI8 global.get $std/array-literal/dynamicArrayI8
local.tee $2
i32.load offset=4 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.const 1
i32.eq i32.eq
i32.eqz i32.eqz
@ -2793,8 +2699,18 @@
unreachable unreachable
end end
global.get $std/array-literal/dynamicArrayI8 global.get $std/array-literal/dynamicArrayI8
local.tee $2
i32.load offset=4 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.const 2
i32.eq i32.eq
i32.eqz i32.eqz
@ -2812,12 +2728,12 @@
i32.const 0 i32.const 0
i32.const 3 i32.const 3
call $~lib/array/Array<i32>#constructor call $~lib/array/Array<i32>#constructor
local.set $1 local.set $3
local.get $1 local.get $3
i32.const 0 i32.const 0
global.get $std/array-literal/i global.get $std/array-literal/i
call $~lib/array/Array<i32>#__set call $~lib/array/Array<i32>#__set
local.get $1 local.get $3
i32.const 1 i32.const 1
block (result i32) block (result i32)
global.get $std/array-literal/i global.get $std/array-literal/i
@ -2827,7 +2743,7 @@
global.get $std/array-literal/i global.get $std/array-literal/i
end end
call $~lib/array/Array<i32>#__set call $~lib/array/Array<i32>#__set
local.get $1 local.get $3
i32.const 2 i32.const 2
block (result i32) block (result i32)
global.get $std/array-literal/i global.get $std/array-literal/i
@ -2837,7 +2753,7 @@
global.get $std/array-literal/i global.get $std/array-literal/i
end end
call $~lib/array/Array<i32>#__set call $~lib/array/Array<i32>#__set
local.get $1 local.get $3
end end
global.set $std/array-literal/dynamicArrayI32 global.set $std/array-literal/dynamicArrayI32
global.get $std/array-literal/dynamicArrayI32 global.get $std/array-literal/dynamicArrayI32
@ -2854,7 +2770,19 @@
unreachable unreachable
end end
global.get $std/array-literal/dynamicArrayI32 global.get $std/array-literal/dynamicArrayI32
local.tee $3
i32.load offset=4 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.load
i32.const 0 i32.const 0
i32.eq i32.eq
@ -2868,8 +2796,20 @@
unreachable unreachable
end end
global.get $std/array-literal/dynamicArrayI32 global.get $std/array-literal/dynamicArrayI32
local.tee $3
i32.load offset=4 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.const 1
i32.eq i32.eq
i32.eqz i32.eqz
@ -2882,8 +2822,20 @@
unreachable unreachable
end end
global.get $std/array-literal/dynamicArrayI32 global.get $std/array-literal/dynamicArrayI32
local.tee $3
i32.load offset=4 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.load offset=8
i32.lt_u
select
i32.load
i32.const 2 i32.const 2
i32.eq i32.eq
i32.eqz i32.eqz
@ -2899,23 +2851,23 @@
i32.const 0 i32.const 0
i32.const 3 i32.const 3
call $~lib/array/Array<Ref>#constructor call $~lib/array/Array<Ref>#constructor
local.set $2 local.set $4
local.get $2 local.get $4
i32.const 0 i32.const 0
i32.const 0 i32.const 0
call $std/array-literal/Ref#constructor call $std/array-literal/Ref#constructor
call $~lib/array/Array<Ref>#__set call $~lib/array/Array<Ref>#__set
local.get $2 local.get $4
i32.const 1 i32.const 1
i32.const 0 i32.const 0
call $std/array-literal/Ref#constructor call $std/array-literal/Ref#constructor
call $~lib/array/Array<Ref>#__set call $~lib/array/Array<Ref>#__set
local.get $2 local.get $4
i32.const 2 i32.const 2
i32.const 0 i32.const 0
call $std/array-literal/Ref#constructor call $std/array-literal/Ref#constructor
call $~lib/array/Array<Ref>#__set call $~lib/array/Array<Ref>#__set
local.get $2 local.get $4
end end
global.set $std/array-literal/dynamicArrayRef global.set $std/array-literal/dynamicArrayRef
global.get $std/array-literal/dynamicArrayRef global.get $std/array-literal/dynamicArrayRef
@ -2935,23 +2887,23 @@
i32.const 0 i32.const 0
i32.const 3 i32.const 3
call $~lib/array/Array<RefWithCtor>#constructor call $~lib/array/Array<RefWithCtor>#constructor
local.set $3 local.set $5
local.get $3 local.get $5
i32.const 0 i32.const 0
i32.const 0 i32.const 0
call $std/array-literal/RefWithCtor#constructor call $std/array-literal/RefWithCtor#constructor
call $~lib/array/Array<RefWithCtor>#__set call $~lib/array/Array<RefWithCtor>#__set
local.get $3 local.get $5
i32.const 1 i32.const 1
i32.const 0 i32.const 0
call $std/array-literal/RefWithCtor#constructor call $std/array-literal/RefWithCtor#constructor
call $~lib/array/Array<RefWithCtor>#__set call $~lib/array/Array<RefWithCtor>#__set
local.get $3 local.get $5
i32.const 2 i32.const 2
i32.const 0 i32.const 0
call $std/array-literal/RefWithCtor#constructor call $std/array-literal/RefWithCtor#constructor
call $~lib/array/Array<RefWithCtor>#__set call $~lib/array/Array<RefWithCtor>#__set
local.get $3 local.get $5
end end
global.set $std/array-literal/dynamicArrayRefWithCtor global.set $std/array-literal/dynamicArrayRefWithCtor
global.get $std/array-literal/dynamicArrayRefWithCtor global.get $std/array-literal/dynamicArrayRefWithCtor
@ -2968,9 +2920,9 @@
unreachable unreachable
end end
) )
(func $start (; 34 ;) (type $FUNCSIG$v) (func $start (; 31 ;) (type $FUNCSIG$v)
call $start:std/array-literal 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 // Test sorting strings
var randomStringsActual: string[] = ["a", "b", "a", "ab", "ba", "", null]; var randomStringsActual: (string | null)[] = ["a", "b", "a", "ab", "ba", "", null];
var randomStringsExpected: string[] = ["", "a", "a", "ab", "b", "ba", null]; var randomStringsExpected: (string | null)[] = ["", "a", "a", "ab", "b", "ba", null];
assertSorted<string>(randomStringsActual); assertSorted<string>(randomStringsActual);
assert(isArraysEqual<string>(randomStringsActual, randomStringsExpected)); 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((<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((<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"); 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]"); assert(refArr.join() == "[object Object],,[object Object]");
// Array#toString ////////////////////////////////////////////////////////////////////////////////// // 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(); var sliced = buffer.slice();
assert(sliced.byteLength == 8); assert(sliced.byteLength == 8);
assert(sliced.data != buffer.data);
assert(sliced !== buffer); assert(sliced !== buffer);
sliced = buffer.slice(1); 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 if
i32.const 0 i32.const 0
i32.const 48 i32.const 48
i32.const 188 i32.const 191
i32.const 2 i32.const 2
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -104,7 +104,7 @@
if if
i32.const 0 i32.const 0
i32.const 48 i32.const 48
i32.const 189 i32.const 192
i32.const 2 i32.const 2
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1926,7 +1926,7 @@
if if
i32.const 0 i32.const 0
i32.const 136 i32.const 136
i32.const 188 i32.const 191
i32.const 2 i32.const 2
call $~lib/env/abort call $~lib/env/abort
unreachable unreachable
@ -1941,7 +1941,7 @@
if if
i32.const 0 i32.const 0
i32.const 136 i32.const 136
i32.const 189 i32.const 192
i32.const 2 i32.const 2
call $~lib/env/abort call $~lib/env/abort
unreachable 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 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 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 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 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 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") (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 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 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 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 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 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 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 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") (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 i32.store offset=4
local.get $0 local.get $0
local.get $1 local.get $1
local.get $2
i32.add
i32.store offset=8 i32.store offset=8
local.get $0 local.get $0
) )
@ -3281,12 +3279,10 @@
local.get $0 local.get $0
local.get $1 local.get $1
i32.store offset=4 i32.store offset=4
local.get $0
local.get $1
local.get $3
i32.add
i32.store offset=8
end end
local.get $0
local.get $3
i32.store offset=8
end end
) )
(func $~lib/array/Array<String>#__set (; 36 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32) (func $~lib/array/Array<String>#__set (; 36 ;) (type $FUNCSIG$vii) (param $0 i32) (param $1 i32)
@ -6700,7 +6696,14 @@
local.tee $0 local.tee $0
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load i32.load
i32.const 312 i32.const 312
call $~lib/string/String.eq call $~lib/string/String.eq
@ -6743,7 +6746,14 @@
local.tee $0 local.tee $0
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load i32.load
i32.const 312 i32.const 312
call $~lib/string/String.eq call $~lib/string/String.eq
@ -6771,7 +6781,14 @@
local.tee $0 local.tee $0
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load i32.load
i32.const 1480 i32.const 1480
call $~lib/string/String.eq call $~lib/string/String.eq
@ -6801,7 +6818,14 @@
local.tee $0 local.tee $0
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load i32.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -6811,8 +6835,17 @@
end end
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 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 i32.const 824
call $~lib/string/String.eq call $~lib/string/String.eq
local.set $0 local.set $0
@ -6821,8 +6854,17 @@
end end
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8 i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1520 i32.const 1520
call $~lib/string/String.eq call $~lib/string/String.eq
else else
@ -6851,7 +6893,14 @@
local.tee $0 local.tee $0
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load i32.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -6861,8 +6910,17 @@
end end
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 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 i32.const 824
call $~lib/string/String.eq call $~lib/string/String.eq
local.set $0 local.set $0
@ -6871,8 +6929,17 @@
end end
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8 i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1520 i32.const 1520
call $~lib/string/String.eq call $~lib/string/String.eq
else else
@ -6902,7 +6969,14 @@
local.tee $0 local.tee $0
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load i32.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -6912,8 +6986,17 @@
end end
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 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 i32.const 824
call $~lib/string/String.eq call $~lib/string/String.eq
local.set $0 local.set $0
@ -6922,8 +7005,17 @@
end end
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8 i32.load offset=8
i32.lt_u
select
i32.load
i32.const 312 i32.const 312
call $~lib/string/String.eq call $~lib/string/String.eq
local.set $0 local.set $0
@ -6932,8 +7024,17 @@
end end
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 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 i32.const 1520
call $~lib/string/String.eq call $~lib/string/String.eq
else else
@ -6963,7 +7064,14 @@
local.tee $0 local.tee $0
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load i32.load
i32.const 312 i32.const 312
call $~lib/string/String.eq call $~lib/string/String.eq
@ -6973,8 +7081,17 @@
end end
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 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 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
local.set $0 local.set $0
@ -6983,8 +7100,17 @@
end end
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8 i32.load offset=8
i32.lt_u
select
i32.load
i32.const 824 i32.const 824
call $~lib/string/String.eq call $~lib/string/String.eq
local.set $0 local.set $0
@ -6993,8 +7119,17 @@
end end
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 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 i32.const 1520
call $~lib/string/String.eq call $~lib/string/String.eq
else else
@ -7024,7 +7159,14 @@
local.tee $0 local.tee $0
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load i32.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -7034,8 +7176,17 @@
end end
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 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 i32.const 824
call $~lib/string/String.eq call $~lib/string/String.eq
local.set $0 local.set $0
@ -7044,8 +7195,17 @@
end end
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8 i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1520 i32.const 1520
call $~lib/string/String.eq call $~lib/string/String.eq
local.set $0 local.set $0
@ -7054,8 +7214,17 @@
end end
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 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 i32.const 312
call $~lib/string/String.eq call $~lib/string/String.eq
else else
@ -7084,7 +7253,14 @@
local.tee $0 local.tee $0
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load i32.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -7094,8 +7270,17 @@
end end
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 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 i32.const 824
call $~lib/string/String.eq call $~lib/string/String.eq
local.set $0 local.set $0
@ -7104,8 +7289,17 @@
end end
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8 i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1520 i32.const 1520
call $~lib/string/String.eq call $~lib/string/String.eq
else else
@ -7147,7 +7341,14 @@
local.tee $0 local.tee $0
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load i32.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -7175,7 +7376,14 @@
local.tee $0 local.tee $0
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load i32.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -7205,7 +7413,14 @@
local.tee $0 local.tee $0
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load i32.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -7215,8 +7430,17 @@
end end
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 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 i32.const 824
call $~lib/string/String.eq call $~lib/string/String.eq
local.set $0 local.set $0
@ -7225,8 +7449,17 @@
end end
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8 i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1520 i32.const 1520
call $~lib/string/String.eq call $~lib/string/String.eq
else else
@ -7255,7 +7488,14 @@
local.tee $0 local.tee $0
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load i32.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -7265,8 +7505,17 @@
end end
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 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 i32.const 824
call $~lib/string/String.eq call $~lib/string/String.eq
local.set $0 local.set $0
@ -7275,8 +7524,17 @@
end end
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8 i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1520 i32.const 1520
call $~lib/string/String.eq call $~lib/string/String.eq
else else
@ -7305,7 +7563,14 @@
local.tee $0 local.tee $0
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const -1
i32.const 0
local.get $0
i32.load offset=8
i32.lt_u
select
i32.load i32.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -7315,8 +7580,17 @@
end end
if if
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 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 i32.const 824
call $~lib/string/String.eq call $~lib/string/String.eq
local.set $0 local.set $0
@ -7325,8 +7599,17 @@
end end
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $0
i32.load offset=4 i32.load offset=4
i32.const 8
i32.add
i32.const -1
i32.const 8
local.get $0
i32.load offset=8 i32.load offset=8
i32.lt_u
select
i32.load
i32.const 1520 i32.const 1520
call $~lib/string/String.eq call $~lib/string/String.eq
else 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 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 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 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 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 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") (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 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 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 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 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 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 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 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") (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 local.get $3
i32.store offset=4 i32.store offset=4
local.get $0 local.get $0
local.get $3
local.get $1 local.get $1
i32.add
i32.store offset=8 i32.store offset=8
local.get $0 local.get $0
) )
@ -4044,12 +4042,10 @@
local.get $0 local.get $0
local.get $7 local.get $7
i32.store offset=4 i32.store offset=4
local.get $0
local.get $7
local.get $5
i32.add
i32.store offset=8
end end
local.get $0
local.get $5
i32.store offset=8
end end
) )
(func $~lib/array/Array<String>#__set (; 42 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (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 local.tee $2
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load
i32.const 312 i32.const 312
call $~lib/string/String.eq call $~lib/string/String.eq
@ -8325,7 +8333,19 @@
local.tee $2 local.tee $2
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load
i32.const 312 i32.const 312
call $~lib/string/String.eq call $~lib/string/String.eq
@ -8353,7 +8373,19 @@
local.tee $2 local.tee $2
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load
i32.const 1480 i32.const 1480
call $~lib/string/String.eq call $~lib/string/String.eq
@ -8381,7 +8413,19 @@
local.tee $2 local.tee $2
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -8389,25 +8433,55 @@
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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 i32.const 824
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load offset=8
i32.lt_u
select
i32.load
i32.const 1520 i32.const 1520
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
i32.const 0
i32.ne
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
@ -8429,7 +8503,19 @@
local.tee $2 local.tee $2
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -8437,25 +8523,55 @@
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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 i32.const 824
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load offset=8
i32.lt_u
select
i32.load
i32.const 1520 i32.const 1520
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
i32.const 0
i32.ne
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
@ -8477,7 +8593,19 @@
local.tee $2 local.tee $2
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -8485,35 +8613,79 @@
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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 i32.const 824
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load offset=8
i32.lt_u
select
i32.load
i32.const 312 i32.const 312
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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 i32.const 1520
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
i32.const 0
i32.ne
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
@ -8535,7 +8707,19 @@
local.tee $2 local.tee $2
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load
i32.const 312 i32.const 312
call $~lib/string/String.eq call $~lib/string/String.eq
@ -8543,35 +8727,79 @@
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load offset=8
i32.lt_u
select
i32.load
i32.const 824 i32.const 824
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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 i32.const 1520
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
i32.const 0
i32.ne
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
@ -8593,7 +8821,19 @@
local.tee $2 local.tee $2
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -8601,35 +8841,79 @@
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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 i32.const 824
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load offset=8
i32.lt_u
select
i32.load
i32.const 1520 i32.const 1520
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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 i32.const 312
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
i32.const 0
i32.ne
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
@ -8651,7 +8935,19 @@
local.tee $2 local.tee $2
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -8659,25 +8955,55 @@
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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 i32.const 824
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load offset=8
i32.lt_u
select
i32.load
i32.const 1520 i32.const 1520
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
i32.const 0
i32.ne
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
@ -8717,7 +9043,19 @@
local.tee $2 local.tee $2
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -8745,7 +9083,19 @@
local.tee $2 local.tee $2
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -8773,7 +9123,19 @@
local.tee $2 local.tee $2
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -8781,25 +9143,55 @@
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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 i32.const 824
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load offset=8
i32.lt_u
select
i32.load
i32.const 1520 i32.const 1520
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
i32.const 0
i32.ne
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
@ -8821,7 +9213,19 @@
local.tee $2 local.tee $2
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -8829,25 +9233,55 @@
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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 i32.const 824
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load offset=8
i32.lt_u
select
i32.load
i32.const 1520 i32.const 1520
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
i32.const 0
i32.ne
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0
@ -8869,7 +9303,19 @@
local.tee $2 local.tee $2
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load
i32.const 336 i32.const 336
call $~lib/string/String.eq call $~lib/string/String.eq
@ -8877,25 +9323,55 @@
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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 i32.const 824
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
local.tee $2 local.tee $2
i32.const 0
i32.ne
if (result i32) if (result i32)
global.get $std/string/sa global.get $std/string/sa
local.tee $2
i32.load offset=4 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.load offset=8
i32.lt_u
select
i32.load
i32.const 1520 i32.const 1520
call $~lib/string/String.eq call $~lib/string/String.eq
else else
local.get $2 local.get $2
end end
i32.const 0
i32.ne
i32.eqz i32.eqz
if if
i32.const 0 i32.const 0

View File

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

View File

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