mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-04-27 07:52:14 +00:00
more
This commit is contained in:
parent
b8a08da7a5
commit
05a35f42f6
@ -585,11 +585,7 @@ export function compileCall(
|
|||||||
let classReference = type.classReference;
|
let classReference = type.classReference;
|
||||||
if (!classReference) return module.createI32(0);
|
if (!classReference) return module.createI32(0);
|
||||||
let classPrototype = classReference.prototype;
|
let classPrototype = classReference.prototype;
|
||||||
return module.createI32(
|
return module.createI32(classPrototype.extends(compiler.program.arrayPrototype) ? 1 : 0);
|
||||||
(<ClassPrototype>classPrototype).extends(compiler.program.arrayPrototype)
|
|
||||||
? 1
|
|
||||||
: 0
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
case BuiltinSymbols.isArrayLike: { // isArrayLike<T!>() / isArrayLike<T?>(value: T) -> bool
|
case BuiltinSymbols.isArrayLike: { // isArrayLike<T!>() / isArrayLike<T?>(value: T) -> bool
|
||||||
let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);
|
let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);
|
||||||
@ -597,12 +593,7 @@ export function compileCall(
|
|||||||
if (!type) return module.createUnreachable();
|
if (!type) return module.createUnreachable();
|
||||||
let classReference = type.classReference;
|
let classReference = type.classReference;
|
||||||
if (!classReference) return module.createI32(0);
|
if (!classReference) return module.createI32(0);
|
||||||
return module.createI32(
|
return module.createI32(classReference.isArrayLike ? 1 : 0);
|
||||||
classReference.lookupInSelf("length") && (
|
|
||||||
classReference.lookupOverload(OperatorKind.INDEXED_GET) ||
|
|
||||||
classReference.lookupOverload(OperatorKind.UNCHECKED_INDEXED_GET)
|
|
||||||
) ? 1 : 0
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
case BuiltinSymbols.isFunction: { // isFunction<T!> / isFunction<T?>(value: T) -> bool
|
case BuiltinSymbols.isFunction: { // isFunction<T!> / isFunction<T?>(value: T) -> bool
|
||||||
let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);
|
let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);
|
||||||
@ -4153,17 +4144,17 @@ function compileTypedArrayGet(
|
|||||||
WrapMode.NONE
|
WrapMode.NONE
|
||||||
));
|
));
|
||||||
if (getExpressionId(dynamicOffset) == ExpressionId.Const) {
|
if (getExpressionId(dynamicOffset) == ExpressionId.Const) {
|
||||||
constantOffset = getConstValueI32(dynamicOffset) * type.byteSize;
|
constantOffset = getConstValueI32(dynamicOffset);
|
||||||
dynamicOffset = 0;
|
dynamicOffset = 0;
|
||||||
} else if (getExpressionId(dynamicOffset) == ExpressionId.Binary) {
|
} else if (getExpressionId(dynamicOffset) == ExpressionId.Binary) {
|
||||||
if (getBinaryOp(dynamicOffset) == BinaryOp.AddI32) {
|
if (getBinaryOp(dynamicOffset) == BinaryOp.AddI32) {
|
||||||
let left = getBinaryLeft(dynamicOffset);
|
let left = getBinaryLeft(dynamicOffset);
|
||||||
let right = getBinaryRight(dynamicOffset);
|
let right = getBinaryRight(dynamicOffset);
|
||||||
if (getExpressionId(left) == ExpressionId.Const) {
|
if (getExpressionId(left) == ExpressionId.Const) {
|
||||||
constantOffset = getConstValueI32(left) * type.byteSize;
|
constantOffset = getConstValueI32(left);
|
||||||
dynamicOffset = right;
|
dynamicOffset = right;
|
||||||
} else if (getExpressionId(right) == ExpressionId.Const) {
|
} else if (getExpressionId(right) == ExpressionId.Const) {
|
||||||
constantOffset = getConstValueI32(right) * type.byteSize;
|
constantOffset = getConstValueI32(right);
|
||||||
dynamicOffset = left;
|
dynamicOffset = left;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4180,7 +4171,16 @@ function compileTypedArrayGet(
|
|||||||
),
|
),
|
||||||
nativeSizeType, (<Field>dataStart).memoryOffset
|
nativeSizeType, (<Field>dataStart).memoryOffset
|
||||||
);
|
);
|
||||||
|
|
||||||
|
var typeAlignLog2 = type.alignLog2;
|
||||||
|
constantOffset <<= typeAlignLog2;
|
||||||
if (dynamicOffset) {
|
if (dynamicOffset) {
|
||||||
|
if (typeAlignLog2) {
|
||||||
|
dynamicOffset = module.createBinary(BinaryOp.ShlI32,
|
||||||
|
dynamicOffset,
|
||||||
|
module.createI32(typeAlignLog2)
|
||||||
|
);
|
||||||
|
}
|
||||||
if (nativeSizeType == NativeType.I64) {
|
if (nativeSizeType == NativeType.I64) {
|
||||||
dataStartExpr = module.createBinary(BinaryOp.AddI64,
|
dataStartExpr = module.createBinary(BinaryOp.AddI64,
|
||||||
dataStartExpr,
|
dataStartExpr,
|
||||||
@ -4242,12 +4242,14 @@ function compileTypedArraySet(
|
|||||||
assert(dataEnd.kind == ElementKind.FIELD);
|
assert(dataEnd.kind == ElementKind.FIELD);
|
||||||
|
|
||||||
var constantOffset: i32 = 0;
|
var constantOffset: i32 = 0;
|
||||||
var dynamicOffset = module.precomputeExpression(compiler.compileExpression(
|
var dynamicOffset = module.precomputeExpression(
|
||||||
elementExpression,
|
compiler.compileExpression(
|
||||||
Type.i32,
|
elementExpression,
|
||||||
ConversionKind.IMPLICIT,
|
Type.i32,
|
||||||
WrapMode.NONE
|
ConversionKind.IMPLICIT,
|
||||||
));
|
WrapMode.NONE
|
||||||
|
)
|
||||||
|
);
|
||||||
if (getExpressionId(dynamicOffset) == ExpressionId.Const) {
|
if (getExpressionId(dynamicOffset) == ExpressionId.Const) {
|
||||||
constantOffset = getConstValueI32(dynamicOffset);
|
constantOffset = getConstValueI32(dynamicOffset);
|
||||||
dynamicOffset = 0;
|
dynamicOffset = 0;
|
||||||
@ -4276,7 +4278,16 @@ function compileTypedArraySet(
|
|||||||
),
|
),
|
||||||
nativeSizeType, (<Field>dataStart).memoryOffset
|
nativeSizeType, (<Field>dataStart).memoryOffset
|
||||||
);
|
);
|
||||||
|
|
||||||
|
var typeAlignLog2 = type.alignLog2;
|
||||||
|
constantOffset <<= typeAlignLog2;
|
||||||
if (dynamicOffset) {
|
if (dynamicOffset) {
|
||||||
|
if (typeAlignLog2) {
|
||||||
|
dynamicOffset = module.createBinary(BinaryOp.ShlI32,
|
||||||
|
dynamicOffset,
|
||||||
|
module.createI32(typeAlignLog2)
|
||||||
|
);
|
||||||
|
}
|
||||||
if (nativeSizeType == NativeType.I64) {
|
if (nativeSizeType == NativeType.I64) {
|
||||||
dataStartExpr = module.createBinary(BinaryOp.AddI64,
|
dataStartExpr = module.createBinary(BinaryOp.AddI64,
|
||||||
dataStartExpr,
|
dataStartExpr,
|
||||||
@ -4292,13 +4303,47 @@ function compileTypedArraySet(
|
|||||||
|
|
||||||
var valueExpr = compiler.compileExpression(
|
var valueExpr = compiler.compileExpression(
|
||||||
valueExpression,
|
valueExpression,
|
||||||
type.is(TypeFlags.SIGNED) ? Type.i32 : Type.u32,
|
type.is(TypeFlags.INTEGER | TypeFlags.VALUE)
|
||||||
|
? type.is(TypeFlags.LONG)
|
||||||
|
? type.is(TypeFlags.SIGNED)
|
||||||
|
? Type.i64
|
||||||
|
: Type.u64
|
||||||
|
: type.is(TypeFlags.SIGNED)
|
||||||
|
? Type.i32
|
||||||
|
: Type.u32
|
||||||
|
: type,
|
||||||
ConversionKind.IMPLICIT,
|
ConversionKind.IMPLICIT,
|
||||||
WrapMode.NONE
|
WrapMode.NONE
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// clamp
|
||||||
|
if (target.internalName == BuiltinSymbols.Uint8ClampedArray) {
|
||||||
|
let tempLocal = compiler.currentFlow.getAndFreeTempLocal(Type.i32, true);
|
||||||
|
// ~(value >> 31) & (((255 - value) >> 31) | value)
|
||||||
|
valueExpr = module.createBinary(BinaryOp.AndI32,
|
||||||
|
module.createBinary(BinaryOp.XorI32,
|
||||||
|
module.createBinary(BinaryOp.ShrI32,
|
||||||
|
module.createTeeLocal(tempLocal.index, valueExpr),
|
||||||
|
module.createI32(31)
|
||||||
|
),
|
||||||
|
module.createI32(-1)
|
||||||
|
),
|
||||||
|
module.createBinary(BinaryOp.OrI32,
|
||||||
|
module.createBinary(BinaryOp.ShrI32,
|
||||||
|
module.createBinary(BinaryOp.SubI32,
|
||||||
|
module.createI32(255),
|
||||||
|
module.createGetLocal(tempLocal.index, NativeType.I32)
|
||||||
|
),
|
||||||
|
module.createI32(31)
|
||||||
|
),
|
||||||
|
module.createGetLocal(tempLocal.index, NativeType.I32)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
var nativeType = type.toNativeType();
|
var nativeType = type.toNativeType();
|
||||||
|
|
||||||
// TODO: check offset, clamp
|
// TODO: check offset
|
||||||
|
|
||||||
if (contextualType == Type.void) {
|
if (contextualType == Type.void) {
|
||||||
compiler.currentType = Type.void;
|
compiler.currentType = Type.void;
|
||||||
|
@ -2837,6 +2837,13 @@ export class ClassPrototype extends DeclaredElement {
|
|||||||
return (<ClassDeclaration>this.declaration).implementsTypes;
|
return (<ClassDeclaration>this.declaration).implementsTypes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Tests if this prototype is of a builtin array type (Array/TypedArray). */
|
||||||
|
get isBuiltinArray(): bool {
|
||||||
|
var arrayBufferViewInstance = this.program.arrayBufferViewInstance;
|
||||||
|
return arrayBufferViewInstance !== null
|
||||||
|
&& this.extends(arrayBufferViewInstance.prototype);
|
||||||
|
}
|
||||||
|
|
||||||
/** Tests if this prototype extends the specified. */
|
/** Tests if this prototype extends the specified. */
|
||||||
extends(basePtototype: ClassPrototype | null): bool {
|
extends(basePtototype: ClassPrototype | null): bool {
|
||||||
var current: ClassPrototype | null = this;
|
var current: ClassPrototype | null = this;
|
||||||
@ -2919,6 +2926,27 @@ export class Class extends TypedElement {
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Tests if this class is of a builtin array type (Array/TypedArray). */
|
||||||
|
get isBuiltinArray(): bool {
|
||||||
|
return this.prototype.isBuiltinArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Tests if this class is array-like. */
|
||||||
|
get isArrayLike(): bool {
|
||||||
|
if (this.isBuiltinArray) return true;
|
||||||
|
var lengthField = this.lookupInSelf("length");
|
||||||
|
return lengthField !== null && (
|
||||||
|
lengthField.kind == ElementKind.FIELD ||
|
||||||
|
(
|
||||||
|
lengthField.kind == ElementKind.PROPERTY &&
|
||||||
|
(<Property>lengthField).getterInstance !== null // TODO: resolve & check type?
|
||||||
|
)
|
||||||
|
) && (
|
||||||
|
this.lookupOverload(OperatorKind.INDEXED_GET) !== null ||
|
||||||
|
this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_GET) !== null
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/** Constructs a new class. */
|
/** Constructs a new class. */
|
||||||
constructor(
|
constructor(
|
||||||
/** Name incl. type parameters, i.e. `Foo<i32>`. */
|
/** Name incl. type parameters, i.e. `Foo<i32>`. */
|
||||||
|
@ -145,6 +145,11 @@ export class Type {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Gets this type's logarithmic alignment in memory. */
|
||||||
|
get alignLog2(): i32 {
|
||||||
|
return 31 - clz<i32>(this.byteSize);
|
||||||
|
}
|
||||||
|
|
||||||
/** Tests if this is a managed type that needs GC hooks. */
|
/** Tests if this is a managed type that needs GC hooks. */
|
||||||
isManaged(program: Program): bool {
|
isManaged(program: Program): bool {
|
||||||
if (program.gcImplemented) {
|
if (program.gcImplemented) {
|
||||||
|
@ -219,9 +219,9 @@ export abstract class ArrayBufferView {
|
|||||||
@unsafe
|
@unsafe
|
||||||
dataEnd: usize;
|
dataEnd: usize;
|
||||||
|
|
||||||
constructor(length: i32, alignLog2: i32) {
|
protected constructor(length: i32, alignLog2: i32) {
|
||||||
if (<u32>length > <u32>MAX_BYTELENGTH >>> alignLog2) throw new RangeError("Invalid length");
|
if (<u32>length > <u32>MAX_BYTELENGTH >>> alignLog2) throw new RangeError("Invalid length");
|
||||||
var buffer = new ArrayBuffer(length << alignLog2);
|
var buffer = new ArrayBuffer(length = length << alignLog2);
|
||||||
this.data = buffer;
|
this.data = buffer;
|
||||||
this.dataStart = changetype<usize>(buffer);
|
this.dataStart = changetype<usize>(buffer);
|
||||||
this.dataEnd = changetype<usize>(buffer) + <usize>length;
|
this.dataEnd = changetype<usize>(buffer) + <usize>length;
|
||||||
|
@ -84,7 +84,9 @@ export class Uint8Array extends ArrayBufferView {
|
|||||||
super(length, alignof<u8>());
|
super(length, alignof<u8>());
|
||||||
}
|
}
|
||||||
|
|
||||||
get length(): i32 { return this.byteLength; }
|
get length(): i32 {
|
||||||
|
return this.byteLength;
|
||||||
|
}
|
||||||
|
|
||||||
fill(value: u32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Uint8Array {
|
fill(value: u32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Uint8Array {
|
||||||
return FILL<Uint8Array, u8>(this, value, start, end);
|
return FILL<Uint8Array, u8>(this, value, start, end);
|
||||||
@ -209,7 +211,7 @@ export class Int16Array extends ArrayBufferView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get length(): i32 {
|
get length(): i32 {
|
||||||
return this.byteLength >>> 1;
|
return this.byteLength >>> alignof<i16>();
|
||||||
}
|
}
|
||||||
|
|
||||||
fill(value: i32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Int16Array {
|
fill(value: i32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Int16Array {
|
||||||
@ -278,7 +280,7 @@ export class Uint16Array extends ArrayBufferView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get length(): i32 {
|
get length(): i32 {
|
||||||
return this.byteLength >>> 1;
|
return this.byteLength >>> alignof<u16>();
|
||||||
}
|
}
|
||||||
|
|
||||||
fill(value: u32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Uint16Array {
|
fill(value: u32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Uint16Array {
|
||||||
@ -347,7 +349,7 @@ export class Int32Array extends ArrayBufferView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get length(): i32 {
|
get length(): i32 {
|
||||||
return this.byteLength >>> 2;
|
return this.byteLength >>> alignof<i32>();
|
||||||
}
|
}
|
||||||
|
|
||||||
fill(value: i32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Int32Array {
|
fill(value: i32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Int32Array {
|
||||||
@ -416,7 +418,7 @@ export class Uint32Array extends ArrayBufferView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get length(): i32 {
|
get length(): i32 {
|
||||||
return this.byteLength >>> 2;
|
return this.byteLength >>> alignof<u32>();
|
||||||
}
|
}
|
||||||
|
|
||||||
fill(value: u32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Uint32Array {
|
fill(value: u32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Uint32Array {
|
||||||
@ -485,7 +487,7 @@ export class Int64Array extends ArrayBufferView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get length(): i32 {
|
get length(): i32 {
|
||||||
return this.byteLength >>> 3;
|
return this.byteLength >>> alignof<i64>();
|
||||||
}
|
}
|
||||||
|
|
||||||
fill(value: i64, start: i32 = 0, end: i32 = i32.MAX_VALUE): Int64Array {
|
fill(value: i64, start: i32 = 0, end: i32 = i32.MAX_VALUE): Int64Array {
|
||||||
@ -554,7 +556,7 @@ export class Uint64Array extends ArrayBufferView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get length(): i32 {
|
get length(): i32 {
|
||||||
return this.byteLength >>> 3;
|
return this.byteLength >>> alignof<u64>();
|
||||||
}
|
}
|
||||||
|
|
||||||
fill(value: u64, start: i32 = 0, end: i32 = i32.MAX_VALUE): Uint64Array {
|
fill(value: u64, start: i32 = 0, end: i32 = i32.MAX_VALUE): Uint64Array {
|
||||||
@ -623,7 +625,7 @@ export class Float32Array extends ArrayBufferView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get length(): i32 {
|
get length(): i32 {
|
||||||
return this.byteLength >>> 2;
|
return this.byteLength >>> alignof<f32>();
|
||||||
}
|
}
|
||||||
|
|
||||||
fill(value: f32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Float32Array {
|
fill(value: f32, start: i32 = 0, end: i32 = i32.MAX_VALUE): Float32Array {
|
||||||
@ -692,7 +694,7 @@ export class Float64Array extends ArrayBufferView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get length(): i32 {
|
get length(): i32 {
|
||||||
return this.byteLength >>> 3;
|
return this.byteLength >>> alignof<f64>();
|
||||||
}
|
}
|
||||||
|
|
||||||
fill(value: f64, start: i32 = 0, end: i32 = i32.MAX_VALUE): Float64Array {
|
fill(value: f64, start: i32 = 0, end: i32 = i32.MAX_VALUE): Float64Array {
|
||||||
@ -797,18 +799,18 @@ function SUBARRAY<TArray extends ArrayBufferView, T>(
|
|||||||
begin: i32,
|
begin: i32,
|
||||||
end: i32
|
end: i32
|
||||||
): TArray {
|
): TArray {
|
||||||
var buffer = array.data;
|
|
||||||
var length = <i32>array.length;
|
var length = <i32>array.length;
|
||||||
if (begin < 0) begin = max(length + begin, 0);
|
if (begin < 0) begin = max(length + begin, 0);
|
||||||
else begin = min(begin, length);
|
else begin = min(begin, length);
|
||||||
if (end < 0) end = max(length + end, begin);
|
if (end < 0) end = max(length + end, begin);
|
||||||
else end = max(min(end, length), begin);
|
else end = max(min(end, length), begin);
|
||||||
var out = ALLOCATE(offsetof<TArray>());
|
var out = REGISTER<TArray>(ALLOCATE(offsetof<TArray>()));
|
||||||
store<usize>(out, buffer, offsetof<TArray>("buffer"));
|
var data = array.data;
|
||||||
store<usize>(out, array.dataStart + (<usize>begin << alignof<T>()) , offsetof<TArray>("dataStart"));
|
var dataStart = array.dataStart;
|
||||||
store<usize>(out, array.dataEnd + (<usize>(end - begin) << alignof<T>()), offsetof<TArray>("dataEnd"));
|
changetype<ArrayBufferView>(out).data = data; // links
|
||||||
LINK(buffer, REGISTER<TArray>(out)); // register first, then link
|
changetype<ArrayBufferView>(out).dataStart = dataStart + (<usize>begin << alignof<T>());
|
||||||
return changetype<TArray>(out);
|
changetype<ArrayBufferView>(out).dataEnd = dataStart + (<usize>end << alignof<T>());
|
||||||
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @ts-ignore: decorator
|
// @ts-ignore: decorator
|
||||||
|
@ -4,8 +4,9 @@
|
|||||||
(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) "\0b\00\00\00b\00u\00i\00l\00t\00i\00n\00s\00.\00t\00s")
|
(data (i32.const 8) "\01\00\00\00\16\00\00\00b\00u\00i\00l\00t\00i\00n\00s\00.\00t\00s")
|
||||||
(data (i32.const 40) "\01\00\00\001")
|
(data (i32.const 40) "\01")
|
||||||
|
(data (i32.const 48) "\01\00\00\00\06\00\00\00a\00b\00c")
|
||||||
(table $0 2 funcref)
|
(table $0 2 funcref)
|
||||||
(elem (i32.const 0) $builtins/test $start:builtins~anonymous|0)
|
(elem (i32.const 0) $builtins/test $start:builtins~anonymous|0)
|
||||||
(global $builtins/b (mut i32) (i32.const 0))
|
(global $builtins/b (mut i32) (i32.const 0))
|
||||||
@ -42,8 +43,8 @@
|
|||||||
i32.ne
|
i32.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 66
|
i32.const 67
|
||||||
i32.const 19
|
i32.const 19
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
unreachable
|
unreachable
|
||||||
@ -55,8 +56,8 @@
|
|||||||
i32.ne
|
i32.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 67
|
i32.const 68
|
||||||
i32.const 20
|
i32.const 20
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
unreachable
|
unreachable
|
||||||
@ -68,8 +69,8 @@
|
|||||||
i32.ne
|
i32.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 68
|
i32.const 69
|
||||||
i32.const 20
|
i32.const 20
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
unreachable
|
unreachable
|
||||||
@ -91,8 +92,8 @@
|
|||||||
i64.ne
|
i64.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 84
|
i32.const 85
|
||||||
i32.const 19
|
i32.const 19
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
unreachable
|
unreachable
|
||||||
@ -104,8 +105,8 @@
|
|||||||
i64.ne
|
i64.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 85
|
i32.const 86
|
||||||
i32.const 20
|
i32.const 20
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
unreachable
|
unreachable
|
||||||
@ -117,8 +118,8 @@
|
|||||||
i32.ne
|
i32.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 86
|
i32.const 87
|
||||||
i32.const 20
|
i32.const 20
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
unreachable
|
unreachable
|
||||||
|
@ -26,7 +26,8 @@ assert(isFloat(<f32>1));
|
|||||||
assert(!isFloat(<i32>1));
|
assert(!isFloat(<i32>1));
|
||||||
assert(isReference(changetype<string>(null)));
|
assert(isReference(changetype<string>(null)));
|
||||||
assert(!isReference(changetype<usize>(null)));
|
assert(!isReference(changetype<usize>(null)));
|
||||||
assert(isString("1"));
|
assert(isString(""));
|
||||||
|
assert(isString("abc"));
|
||||||
assert(!isString(1));
|
assert(!isString(1));
|
||||||
assert(isArray(changetype<i32[]>(null)));
|
assert(isArray(changetype<i32[]>(null)));
|
||||||
assert(isArrayLike(changetype<i32[]>(null)));
|
assert(isArrayLike(changetype<i32[]>(null)));
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,8 +0,0 @@
|
|||||||
import "allocator/arena";
|
|
||||||
|
|
||||||
var arr: i32[] = [1, 2, 3];
|
|
||||||
|
|
||||||
assert(arr.length == 3);
|
|
||||||
assert(arr[0] == 1);
|
|
||||||
assert(arr[1] == 2);
|
|
||||||
assert(arr[2] == 3);
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -193,9 +193,9 @@ assert(sub32.byteLength == 3 * sizeof<i32>());
|
|||||||
assert(isInt32ArrayEqual(sub32, <i32[]>[0, 0, 0]));
|
assert(isInt32ArrayEqual(sub32, <i32[]>[0, 0, 0]));
|
||||||
assert(isInt32ArrayEqual(arr32, <i32[]>[1, 0, 0, 0, 2]));
|
assert(isInt32ArrayEqual(arr32, <i32[]>[1, 0, 0, 0, 2]));
|
||||||
|
|
||||||
import { MAX_BLENGTH } from "internal/arraybuffer";
|
import { MAX_BYTELENGTH } from "runtime";
|
||||||
|
|
||||||
const MAX_F64LENGTH = <u32>MAX_BLENGTH >> alignof<f64>();
|
const MAX_F64LENGTH = <u32>MAX_BYTELENGTH >> alignof<f64>();
|
||||||
new Float64Array(MAX_F64LENGTH); // 1GB
|
new Float64Array(MAX_F64LENGTH); // 1GB
|
||||||
// new Float64Array(MAX_F64 + 1); // throws
|
// new Float64Array(MAX_F64 + 1); // throws
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
@ -4,7 +4,7 @@
|
|||||||
(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) "\t\00\00\00s\00w\00i\00t\00c\00h\00.\00t\00s")
|
(data (i32.const 8) "\01\00\00\00\12\00\00\00s\00w\00i\00t\00c\00h\00.\00t\00s")
|
||||||
(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))
|
||||||
@ -68,7 +68,7 @@
|
|||||||
call $switch/doSwitch
|
call $switch/doSwitch
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 10
|
i32.const 10
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -80,7 +80,7 @@
|
|||||||
i32.ne
|
i32.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 11
|
i32.const 11
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -92,7 +92,7 @@
|
|||||||
i32.ne
|
i32.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 12
|
i32.const 12
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -104,7 +104,7 @@
|
|||||||
i32.ne
|
i32.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 13
|
i32.const 13
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -114,7 +114,7 @@
|
|||||||
call $switch/doSwitch
|
call $switch/doSwitch
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 14
|
i32.const 14
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -124,7 +124,7 @@
|
|||||||
call $switch/doSwitch
|
call $switch/doSwitch
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 24
|
i32.const 24
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -136,7 +136,7 @@
|
|||||||
i32.ne
|
i32.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 25
|
i32.const 25
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -148,7 +148,7 @@
|
|||||||
i32.ne
|
i32.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 26
|
i32.const 26
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -160,7 +160,7 @@
|
|||||||
i32.ne
|
i32.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 27
|
i32.const 27
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -170,7 +170,7 @@
|
|||||||
call $switch/doSwitch
|
call $switch/doSwitch
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 28
|
i32.const 28
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -180,7 +180,7 @@
|
|||||||
call $switch/doSwitchDefaultOmitted
|
call $switch/doSwitchDefaultOmitted
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 38
|
i32.const 38
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -192,7 +192,7 @@
|
|||||||
i32.ne
|
i32.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 39
|
i32.const 39
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -204,7 +204,7 @@
|
|||||||
i32.ne
|
i32.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 40
|
i32.const 40
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -216,7 +216,7 @@
|
|||||||
i32.ne
|
i32.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 41
|
i32.const 41
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -226,7 +226,7 @@
|
|||||||
call $switch/doSwitchDefaultOmitted
|
call $switch/doSwitchDefaultOmitted
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 42
|
i32.const 42
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
|
@ -4,10 +4,10 @@
|
|||||||
(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) "\t\00\00\00s\00w\00i\00t\00c\00h\00.\00t\00s\00")
|
(data (i32.const 8) "\01\00\00\00\12\00\00\00s\00w\00i\00t\00c\00h\00.\00t\00s\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 32))
|
(global $~lib/memory/HEAP_BASE i32 (i32.const 36))
|
||||||
(export "memory" (memory $0))
|
(export "memory" (memory $0))
|
||||||
(export "table" (table $0))
|
(export "table" (table $0))
|
||||||
(start $start)
|
(start $start)
|
||||||
@ -176,7 +176,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 10
|
i32.const 10
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -189,7 +189,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 11
|
i32.const 11
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -202,7 +202,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 12
|
i32.const 12
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -215,7 +215,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 13
|
i32.const 13
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -228,7 +228,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 14
|
i32.const 14
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -241,7 +241,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 24
|
i32.const 24
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -254,7 +254,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 25
|
i32.const 25
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -267,7 +267,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 26
|
i32.const 26
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -280,7 +280,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 27
|
i32.const 27
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -293,7 +293,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 28
|
i32.const 28
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -306,7 +306,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 38
|
i32.const 38
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -319,7 +319,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 39
|
i32.const 39
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -332,7 +332,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 40
|
i32.const 40
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -345,7 +345,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 41
|
i32.const 41
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -358,7 +358,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 42
|
i32.const 42
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -371,7 +371,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 51
|
i32.const 51
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -384,7 +384,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 52
|
i32.const 52
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -397,7 +397,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 53
|
i32.const 53
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -410,7 +410,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 62
|
i32.const 62
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -423,7 +423,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 63
|
i32.const 63
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -436,7 +436,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 64
|
i32.const 64
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -449,7 +449,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 73
|
i32.const 73
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -462,7 +462,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 74
|
i32.const 74
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -475,7 +475,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 75
|
i32.const 75
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -488,7 +488,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 84
|
i32.const 84
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -501,7 +501,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 85
|
i32.const 85
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -514,7 +514,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 86
|
i32.const 86
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -527,7 +527,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 92
|
i32.const 92
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -540,7 +540,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 93
|
i32.const 93
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -553,7 +553,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 94
|
i32.const 94
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
(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) "\08\00\00\00w\00h\00i\00l\00e\00.\00t\00s")
|
(data (i32.const 8) "\01\00\00\00\10\00\00\00w\00h\00i\00l\00e\00.\00t\00s")
|
||||||
(table $0 1 funcref)
|
(table $0 1 funcref)
|
||||||
(elem (i32.const 0) $null)
|
(elem (i32.const 0) $null)
|
||||||
(global $while/n (mut i32) (i32.const 10))
|
(global $while/n (mut i32) (i32.const 10))
|
||||||
@ -31,7 +31,7 @@
|
|||||||
global.get $while/n
|
global.get $while/n
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 8
|
i32.const 8
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -42,7 +42,7 @@
|
|||||||
i32.ne
|
i32.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 9
|
i32.const 9
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -80,7 +80,7 @@
|
|||||||
global.get $while/n
|
global.get $while/n
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 21
|
i32.const 21
|
||||||
i32.const 2
|
i32.const 2
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -91,7 +91,7 @@
|
|||||||
i32.ne
|
i32.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 22
|
i32.const 22
|
||||||
i32.const 2
|
i32.const 2
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -103,7 +103,7 @@
|
|||||||
global.get $while/n
|
global.get $while/n
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 24
|
i32.const 24
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -114,7 +114,7 @@
|
|||||||
i32.ne
|
i32.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 25
|
i32.const 25
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -125,7 +125,7 @@
|
|||||||
i32.ne
|
i32.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 26
|
i32.const 26
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -158,7 +158,7 @@
|
|||||||
i32.ne
|
i32.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 31
|
i32.const 31
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -169,7 +169,7 @@
|
|||||||
i32.ne
|
i32.ne
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 32
|
i32.const 32
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
|
@ -3,13 +3,13 @@
|
|||||||
(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) "\08\00\00\00w\00h\00i\00l\00e\00.\00t\00s\00")
|
(data (i32.const 8) "\01\00\00\00\10\00\00\00w\00h\00i\00l\00e\00.\00t\00s\00")
|
||||||
(table $0 1 funcref)
|
(table $0 1 funcref)
|
||||||
(elem (i32.const 0) $null)
|
(elem (i32.const 0) $null)
|
||||||
(global $while/n (mut i32) (i32.const 10))
|
(global $while/n (mut i32) (i32.const 10))
|
||||||
(global $while/m (mut i32) (i32.const 0))
|
(global $while/m (mut i32) (i32.const 0))
|
||||||
(global $while/o (mut i32) (i32.const 0))
|
(global $while/o (mut i32) (i32.const 0))
|
||||||
(global $~lib/memory/HEAP_BASE i32 (i32.const 28))
|
(global $~lib/memory/HEAP_BASE i32 (i32.const 32))
|
||||||
(export "memory" (memory $0))
|
(export "memory" (memory $0))
|
||||||
(export "table" (table $0))
|
(export "table" (table $0))
|
||||||
(start $start)
|
(start $start)
|
||||||
@ -39,7 +39,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 8
|
i32.const 8
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -51,7 +51,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 9
|
i32.const 9
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -98,7 +98,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 21
|
i32.const 21
|
||||||
i32.const 2
|
i32.const 2
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -110,7 +110,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 22
|
i32.const 22
|
||||||
i32.const 2
|
i32.const 2
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -127,7 +127,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 24
|
i32.const 24
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -139,7 +139,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 25
|
i32.const 25
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -151,7 +151,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 26
|
i32.const 26
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -193,7 +193,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 31
|
i32.const 31
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
@ -205,7 +205,7 @@
|
|||||||
i32.eqz
|
i32.eqz
|
||||||
if
|
if
|
||||||
i32.const 0
|
i32.const 0
|
||||||
i32.const 8
|
i32.const 16
|
||||||
i32.const 32
|
i32.const 32
|
||||||
i32.const 0
|
i32.const 0
|
||||||
call $~lib/env/abort
|
call $~lib/env/abort
|
||||||
|
Loading…
x
Reference in New Issue
Block a user